<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel><title>JoshooaJ</title><description>The personal blog of Josh Hendricks.</description><link>https://www.joshooaj.com/</link><atom:link href="https://www.joshooaj.com/feed_rss_created.xml" rel="self" type="application/rss+xml" /><docs>https://github.com/joshooaj/joshooaj.github.io</docs><language>en</language> <pubDate>Thu, 18 Sep 2025 20:55:08 -0000</pubDate> <lastBuildDate>Thu, 18 Sep 2025 20:55:08 -0000</lastBuildDate> <ttl>1440</ttl> <generator>MkDocs RSS plugin - v1.17.3</generator> <image> <url>https://www.joshooaj.com/assets/images/joshooaj.png</url> <title>JoshooaJ</title><link>https://www.joshooaj.com/</link> </image> <item> <title>The Collapse of Freedom of Speech in Real-Time</title> <author>Josh Hendricks</author> <category>Politics</category> <description>&lt;h1&gt;The Collapse of Freedom of Speech in Real-Time&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Jimmy Kimmel Live!&#34; src=&#34;./jimmy-kimmel-live.png&#34;&gt;&lt;/p&gt;&lt;p&gt;Say what you will about Charlie Kirk &lt;em&gt;(at your own risk)&lt;/em&gt;, but prior to his heinous murder the manenjoyed his 1st amendment rights to freedom of speech and believed in the free exchange of ideas.He encouraged and promoted public debates with prominent voices on the left. Now, the politicalright are callously using his gruesome assassination to silence MAGA critics.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2025/09/18/the-collapse-of-freedom-of-speech-in-real-time/</link> <pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2025/09/18/the-collapse-of-freedom-of-speech-in-real-time/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2025/09/18/the-collapse-of-freedom-of-speech-in-real-time/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2025-09-18-The-Collapse-of-Freedom-of-Speech-in-Real-Time/index.png" type="image/png" length="None" /> </item> <item> <title>Got the time?</title> <author>Josh Hendricks</author> <category>PowerShell</category> <description>&lt;h1&gt;Got the time?&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Photo of the time circuit from Back to the Future&#34; src=&#34;bttf.png&#34;&gt;&lt;/p&gt;&lt;p&gt;Every few years I end up having to mess with the time. Not like, the linear flow or the speed at which we perceiveit. As cool as &lt;em&gt;that&lt;/em&gt; would be, I&#39;m usually just messing with mundane Windows time settings. When you&#39;re working withphysical security systems, maintaining accurate time across all servers and devices is kind of important. And it&#39;scommon for surveillance and access control networks to be isolated from the Internet, so not only do you need a timesource, but you need to &lt;em&gt;distribute&lt;/em&gt; the time. Fortunately, Windows has a built-in time server - you just have to knowhow to turn it on!&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2025/02/27/got-the-time/</link> <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2025/02/27/got-the-time/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2025/02/27/got-the-time/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2025-02-27-Got-the-time/index.png" type="image/png" length="42570" /> </item> <item> <title>Restreaming RTSP with FFmpeg and MediaMTX</title> <author>Josh Hendricks</author> <category>XProtect</category> <category>ffmpeg</category> <description>&lt;h1&gt;Restreaming RTSP with FFmpeg and MediaMTX&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;ffmpeg logo&#34; src=&#34;ffmpeg-logo.svg&#34;&gt;{ width=&#34;400&#34; }&lt;/p&gt;&lt;p&gt;If you&#39;ve ever messed with IP cameras and RTSP video feeds, you might have run into a situation where VLC can accessthe stream without a problem, but the system meant to record that stream can&#39;t seem to do it. There&#39;s nothing morepermanent than a temporary fix, so in this post I&#39;ll show you (and my future self) how to work around the issue.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2025/02/19/restreaming-rtsp-with-ffmpeg-and-mediamtx/</link> <pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2025/02/19/restreaming-rtsp-with-ffmpeg-and-mediamtx/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2025/02/19/restreaming-rtsp-with-ffmpeg-and-mediamtx/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2025-02-14-Restreaming-RTSP-with-ffmpeg-and-mediamtx/index.png" type="image/png" length="62739" /> </item> <item> <title>Why I never learned Bash</title> <author>Josh Hendricks</author> <category>PowerShell</category> <description>&lt;h1&gt;Why I never learned Bash&lt;/h1&gt;&lt;p&gt;I’ve been using a computer since ~1996 (age 12/13). I’ve built many PCs, and installed various Windows and Linux operating systems many hundreds of times over the past 28 years. I played L.O.R.D. on my dads BBS, played DOS games like Wolfenstein 3D, Descent, and Duke Nukem. So far in my IT career I’ve worked as a system administrator, software vendor support, and as software developer. It may surprise you to hear then that I learned my first shell language just 5 years ago, in 2019.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/12/30/why-i-never-learned-bash/</link> <pubDate>Mon, 30 Dec 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/12/30/why-i-never-learned-bash/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/12/30/why-i-never-learned-bash/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-12-20-Why-PowerShell-is-my-only-shell/index.png" type="image/png" length="51818" /> </item> <item> <title>Nerdbank.GitVersioning and the Revision number</title> <author>Josh Hendricks</author> <category>.NET</category> <category>GitVersioning</category> <description>&lt;h1&gt;Nerdbank.GitVersioning and the Revision number&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Screenshot of various versions returned by the command &amp;quot;nbgv get-version&amp;quot;&#34; src=&#34;2024-08-02-nbgv-revision-wut.png&#34;&gt;&lt;/p&gt;&lt;p&gt;I love using the NerdBank.GitVersioning CLI tool &lt;code&gt;nbgv&lt;/code&gt;. It completely removes the need to think about an aspect of aproject that doesn&#39;t add any value to your customers. But today I realized I understood the first three parts of theversion produced by &lt;code&gt;nbgv&lt;/code&gt;, but the fourth &#34;revision&#34; component was not obvious. Turns out it is a uint16 value of thefirst two bytes of the commit id!&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/08/02/nerdbankgitversioning-and-the-revision-number/</link> <pubDate>Fri, 02 Aug 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/08/02/nerdbankgitversioning-and-the-revision-number/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/08/02/nerdbankgitversioning-and-the-revision-number/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-08-02-nbgv/index.png" type="image/png" length="66739" /> </item> <item> <title>Serving a web api with Pode</title> <author>Josh Hendricks</author> <category>Homelab</category> <category>MkDocs</category> <category>PowerShell</category> <description>&lt;h1&gt;Serving a web api with Pode&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Screenshot of this blog&#39;s footer with the now-playing text &amp;quot;When I Come Around&amp;quot; by Green Day&#34; src=&#34;2024-05-03-Pode-Now-Playing.png&#34;&gt;&lt;/p&gt;&lt;p&gt;I added a subtle &#34;Now playing&#34; text to the footer of this site which represents the first result in the response fromthe &lt;a href=&#34;https://www.last.fm/api/show/user.getRecentTracks&#34;&gt;user.getRecentTracks&lt;/a&gt; method on the Last.FM API. The data isupdated every few seconds with a little bit of JavaScript by polling a small Pode web service running in my home lab.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/05/12/serving-a-web-api-with-pode/</link> <pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/05/12/serving-a-web-api-with-pode/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/05/12/serving-a-web-api-with-pode/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-05-03-Pode-Now-Playing/index.png" type="image/png" length="57243" /> </item> <item> <title>But I AM the administrator</title> <author>Josh Hendricks</author> <category>PowerShell</category> <category>Windows</category> <description>&lt;h1&gt;But I AM the administrator&lt;/h1&gt;&lt;p&gt;A while back I was helping a co-worker with a project where the customer neededto automate a lot of minor Windows configuration steps on some Windows IoTserver appliances. One of the tasks was to make it possible to disable WindowsFirewall, because even an administrator was greeted with the message &#34;For yoursecurity, some settings are managed by your system administrator&#34; and the optionto change firewall settings was disabled.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/03/25/but-i-am-the-administrator/</link> <pubDate>Mon, 25 Mar 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/03/25/but-i-am-the-administrator/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/03/25/but-i-am-the-administrator/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-03-25-SetFirewallGpo/index.png" type="image/png" length="51238" /> </item> <item> <title>Image Comparison</title> <author>Josh Hendricks</author> <category>Computer Vision</category> <category>PowerShell</category> <description>&lt;h1&gt;Image Comparison&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Coastline Bluff&#34; src=&#34;hero.jpg&#34;&gt;&lt;/p&gt;&lt;p&gt;I recently came across a couple of blog posts on image comparisonalgorithms shared by Dr. Neal Krawetz. One of them, titled &#34;&lt;a href=&#34;https://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html&#34;&gt;Kind Of Like That&lt;/a&gt;&#34;,describes the &#34;dHash&#34; algorithm which generates a perceptual hash based ongradients in the image. With more than 200k family photos to wrangle, I wrote upa PowerShell implementation to find similar images and it works surprisingly well!&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/03/24/image-comparison/</link> <pubDate>Sun, 24 Mar 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/03/24/image-comparison/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/03/24/image-comparison/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-03-23-Image-Comparison/index.png" type="image/png" length="50214" /> </item> <item> <title>New PSPushover PowerShell Module</title> <author>Josh Hendricks</author> <category>CI/CD</category> <category>Documentation</category> <category>GitHub Actions</category> <category>PowerShell</category> <description>&lt;h1&gt;New PSPushover PowerShell Module&lt;/h1&gt;&lt;p&gt;Back in 2021 I wrote a module called &lt;a href=&#34;https://github.com/joshooaj/Poshover&#34;&gt;Poshover&lt;/a&gt;for sending push notifications with &lt;a href=&#34;https://pushover.net&#34;&gt;Pushover.net&lt;/a&gt;. Thisweek I decided to use that module as a reference during my PowerShell + DevOps Summitworkshop in a few weeks. I never liked the name, so I renamed it to &lt;a href=&#34;https://www.joshooaj.com/PSPushover/&#34;&gt;PSPushover&lt;/a&gt;and set it up in a new repository.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2024/03/21/new-pspushover-powershell-module/</link> <pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2024/03/21/new-pspushover-powershell-module/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2024/03/21/new-pspushover-powershell-module/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2024-03-21-PSPushover/PSPushover.png" type="image/png" length="63219" /> </item> <item> <title>Parse Code from Markdown Files</title> <author>Josh Hendricks</author> <category>Markdown</category> <category>PowerShell</category> <description>&lt;h1&gt;Parse Code from Markdown Files&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;Screenshot of Pester test output highlighting the use of aliases within markdown documentation code blocks&#34; src=&#34;test-md-codeblocks.hero.png&#34;&gt;&lt;/p&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;Are you testing your documentation? If you write PowerShell scripts or modules, you are &lt;em&gt;hopefully&lt;/em&gt; using Pester totest your code. And if you use PlatyPS to generate markdown documentation like I do, then you have a bunch of examplePowerShell code sitting in .md files. But what happens if you rename a command, a parameter, or make a breaking change?&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2023/10/12/parse-code-from-markdown-files/</link> <pubDate>Thu, 12 Oct 2023 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2023/10/12/parse-code-from-markdown-files/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2023/10/12/parse-code-from-markdown-files/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/Parse-Code-from-Markdown/2023-10-12_parse-code-from-markdown.png" type="image/png" length="59410" /> </item> <item> <title>Generate markdown tables from PowerShell</title> <author>Josh Hendricks</author> <category>PowerShell</category> <description>&lt;h1&gt;Generate markdown tables from PowerShell&lt;/h1&gt;&lt;p&gt;I had a need to generate a markdown table dynamically from PowerShell, so I wrote a flexible function which uses theproperties on the incoming objects to define the column names, supports the definition of maximum column widths, andoutputs either pretty-printed markdown with padded values and aligned columns, or &#34;compressed&#34; markdown without theunnecessary padding included.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2023/10/02/generate-markdown-tables-from-powershell/</link> <pubDate>Mon, 02 Oct 2023 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2023/10/02/generate-markdown-tables-from-powershell/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2023/10/02/generate-markdown-tables-from-powershell/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/ConvertTo-MarkdownTable/ConvertTo-MarkdownTable.png" type="image/png" length="65497" /> </item> <item> <title>Debugging ConvertTo-Json</title> <author>Josh Hendricks</author> <category>PowerShell</category> <description>&lt;h1&gt;Debugging ConvertTo-Json&lt;/h1&gt;&lt;p&gt;&lt;img alt=&#34;PowerShell terminal showing a duplicate key error when using ConvertTo-Json&#34; src=&#34;ConvertTo-Json-Error.png&#34;&gt;&lt;/p&gt;&lt;p&gt;My co-worker, Jared, who regularly uses MilestonePSTools and builds tools with it brought me an interesting problem yesterday - an apparent compatibility issue between our SDK and the &lt;code&gt;#!powershell ConvertTo-Json&lt;/code&gt; cmdlet from the built-in Microsoft.PowerShell.Utility module. If you&#39;ve ever struggled with the error &#34;ConvertTo-Json : An item with the same key has already been added.&#34;, follow along as I share our debugging process until we finally discovered the root cause. While the details in this post involve the Milestone SDK and the MilestonePSTools module, the root cause and the process of finding it is relevant to anyone using .NET assemblies or 3rd party modules with PowerShell.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2023/09/06/debugging-convertto-json/</link> <pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2023/09/06/debugging-convertto-json/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2023/09/06/debugging-convertto-json/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/2023-09-05_Debugging-ConvertTo-Json/index.png" type="image/png" length="52440" /> </item> <item> <title>Argument Transformation Attributes</title> <author>Josh Hendricks</author> <category>PowerShell</category> <category>Usability</category> <description>&lt;h1&gt;Argument Transformation Attributes&lt;/h1&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;Argument transformation attributes make it possible to offer your userssome flexibility in how they supply values for parameters. I&#39;ve started to usethese in the &lt;a href=&#34;https://www.milestonepstools.com&#34;&gt;MilestonePSTools&lt;/a&gt; module tomake it possible to provide a name instead of a strongly typed object like a&lt;code&gt;#!powershell [RecordingServer]&lt;/code&gt; or a &lt;code&gt;#!powershell [Role]&lt;/code&gt;, while still making it clear in the&lt;code&gt;#!powershell Get-Help&lt;/code&gt; documentation what the expected object type is, and withoutpolluting functions with object transformation code.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2022/12/21/argument-transformation-attributes/</link> <pubDate>Wed, 21 Dec 2022 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2022/12/21/argument-transformation-attributes/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2022/12/21/argument-transformation-attributes/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/ArgumentTransformation/ArgumentTransformation.png" type="image/png" length="59614" /> </item> <item> <title>Your users deserve argument completers</title> <author>Josh Hendricks</author> <category>PowerShell</category> <category>Usability</category> <description>&lt;h1&gt;Your users deserve argument completers&lt;/h1&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;p&gt;One of the things I love about PowerShell is the focus on usability anddiscoverability. The PowerShell team, and the community, have invested &lt;em&gt;so much&lt;/em&gt;into reducing friction and accelerating your workflow. Argument completers areone of the tools available to you, and you should consider adding them to yourprojects if you aren&#39;t doing so already.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2022/12/07/your-users-deserve-argument-completers/</link> <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2022/12/07/your-users-deserve-argument-completers/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2022/12/07/your-users-deserve-argument-completers/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/ArgumentCompleters/ArgumentCompleters.png" type="image/png" length="56163" /> </item> <item> <title>Securely Reading Passwords from the Console</title> <author>Josh Hendricks</author> <category>C\#</category> <description>&lt;h1&gt;Securely Reading Passwords from the Console&lt;/h1&gt;&lt;p&gt;If you&#39;ve ever written a console application which requires the user to enter sensitive information like a password or a token, you might have wrestled with concerns of exposing the password in plain text within the console window.&lt;/p&gt;</description><link>https://www.joshooaj.com/blog/2022/01/04/securely-reading-passwords-from-the-console/</link> <pubDate>Tue, 04 Jan 2022 00:00:00 +0000</pubDate><source url="https://www.joshooaj.com/feed_rss_created.xml">JoshooaJ</source><comments>https://www.joshooaj.com/blog/2022/01/04/securely-reading-passwords-from-the-console/#__comments</comments><guid isPermaLink="true">https://www.joshooaj.com/blog/2022/01/04/securely-reading-passwords-from-the-console/</guid> <enclosure url="https://www.joshooaj.com/assets/images/social/blog/posts/SecureConsole/2022-01-04_SecureConsole.png" type="image/png" length="68638" /> </item> </channel></rss>