<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Command-line interface on Junian Dev</title>
    <link>https://www.junian.dev/tags/cli/</link>
    <description>Recent content in Command-line interface on Junian Dev</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>author@junian.dev (Junian Triajianto)</managingEditor>
    <webMaster>author@junian.dev (Junian Triajianto)</webMaster>
    <copyright>Copyright &amp;copy; 2014 - 2026 Junian.dev</copyright>
    
	    <atom:link href="https://www.junian.dev/tags/cli/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Xcode Command Line Tools Download and Installation FAQ</title>
      <link>https://www.junian.dev/dev/xcode-command-line-tools-installation-faq/</link>
      <pubDate>Thu, 19 Feb 2026 04:25:35 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/xcode-command-line-tools-installation-faq/</guid>
      <description>&lt;p&gt;Xcode is a full-featured IDE from Apple for creating apps for iPhone, iPad, Mac, Apple Watch, and Apple TV.&lt;/p&gt;
&lt;p&gt;You probably need some of its tools without installing the entire package.
Maybe you want to write command-line software on macOS, or maybe you need to use the &lt;a href=&#34;https://brew.sh&#34;&gt;Homebrew&lt;/a&gt; package manager.&lt;/p&gt;
&lt;p&gt;In that case, you only need a subset of it, which is the Xcode Command Line Tools.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/dev/xcode-command-line-tools-installation-faq/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing Multiple .NET Versions on macOS with Homebrew</title>
      <link>https://www.junian.dev/dev/install-multiple-dotnet-macos-homebrew/</link>
      <pubDate>Wed, 03 Dec 2025 09:25:59 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/install-multiple-dotnet-macos-homebrew/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re a .NET developer using macOS, you may want to install multiple .NET SDK versions side by side.
While you can do this manually, it can become a headache to maintain in the long term. As you install more SDKs, leftover files can accumulate and fill up your storage.&lt;/p&gt;
&lt;p&gt;Uninstalling older versions manually can also be tedious. You can refer to the &lt;a href=&#34;https://learn.microsoft.com/en-us/dotnet/core/install/remove-runtime-sdk-versions?pivots=os-macos&#34;&gt;official documentation&lt;/a&gt; for removal instructions. I even wrote &lt;a href=&#34;https://www.junian.dev/dev/dotnet-sdk-runtime-macos-removal/&#34;&gt;an uninstallation guide&lt;/a&gt; to remind myself how to do it properly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scoop Package Manager for Windows</title>
      <link>https://www.junian.dev/tech/windows-scoop-package-manager/</link>
      <pubDate>Tue, 28 Oct 2025 19:00:00 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/windows-scoop-package-manager/</guid>
      <description>&lt;p&gt;I’ve always wanted a package manager like &lt;a href=&#34;https://brew.sh/&#34;&gt;Homebrew&lt;/a&gt; for Windows.
Sure, Windows now has &lt;code&gt;winget&lt;/code&gt;, but it doesn’t feel quite like Homebrew.
&lt;code&gt;winget&lt;/code&gt; behaves more like an app installer for the &lt;strong&gt;Program Files&lt;/strong&gt; directory.
It’s not portable, and some command-line apps aren’t even available there.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/tech/windows-scoop-package-manager/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then I found out about &lt;strong&gt;Scoop&lt;/strong&gt;.
In my opinion, it’s the closest thing to Homebrew for Windows.
If you’ve used &lt;code&gt;brew&lt;/code&gt; before, you’ll find Scoop very easy to pick up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Change Video Aspect Ratio with FFmpeg</title>
      <link>https://www.junian.dev/tech/ffmpeg-change-aspect-ratio/</link>
      <pubDate>Wed, 22 Oct 2025 19:00:00 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/ffmpeg-change-aspect-ratio/</guid>
      <description>&lt;p&gt;For some reason, a few of the video files I’ve received or downloaded from the internet have the wrong aspect ratio.&lt;/p&gt;
&lt;p&gt;For example, a video that’s supposed to be vertical (9:16) might play as a widescreen video (16:9).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/tech/ffmpeg-change-aspect-ratio/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The video content itself is probably fine. It&amp;rsquo;s likely that some of its metadata was saved incorrectly when it was edited.&lt;/p&gt;
&lt;p&gt;You can fix this easily with &lt;code&gt;ffmpeg&lt;/code&gt;. Let’s assume your incorrect video file is named &lt;code&gt;input.mp4&lt;/code&gt;. Just run the following command:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Concatenate Multiple Videos Into a Single Video File with FFmpeg</title>
      <link>https://www.junian.dev/tech/ffmpeg-concat-videos/</link>
      <pubDate>Sat, 18 Oct 2025 19:00:00 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/ffmpeg-concat-videos/</guid>
      <description>&lt;p&gt;When I make tutorial videos, I usually record them in a single take, meaning a topic can be covered in one video file with some parts edited or trimmed.&lt;/p&gt;
&lt;p&gt;However, sometimes I need to record two or more clips for a single topic. After trimming and editing each one, I then concatenate them into a single video file.&lt;/p&gt;
&lt;p&gt;In this post, I’ll show you how I usually merge those video files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Fix Git Refusing to Merge Unrelated Histories Issue</title>
      <link>https://www.junian.dev/dev/git-refusing-to-merge-unrelated-histories/</link>
      <pubDate>Thu, 25 Sep 2025 03:00:21 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/git-refusing-to-merge-unrelated-histories/</guid>
      <description>&lt;p&gt;When I tried to merge a &lt;code&gt;git&lt;/code&gt; branch from a different repository, I got the following error:&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;% git merge development-branch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fatal: refusing to merge unrelated histories&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;Git is refusing to merge the branch because the histories do not share a common ancestor.&lt;/p&gt;
&lt;p&gt;The error message &lt;code&gt;fatal: refusing to merge unrelated histories&lt;/code&gt; means that the two branches have completely separate histories.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Fix a Corrupted Video with FFmpeg</title>
      <link>https://www.junian.dev/tech/ffmpeg-fix-corrupted-video/</link>
      <pubDate>Thu, 11 Sep 2025 14:39:45 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/ffmpeg-fix-corrupted-video/</guid>
      <description>&lt;p&gt;Sometimes, after recording a video, downloading one online, or saving a video stream to your storage, the file may end up corrupted, incomplete, or broken. While players like VLC might still play it, some videos refuse to play certain parts or won’t play at all.&lt;/p&gt;
&lt;p&gt;Fortunately, you can often fix this with &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;‼️ &lt;strong&gt;WARNING&lt;/strong&gt;: &lt;em&gt;Some video files may be damaged beyond repair, and this method might not always work.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Fix &#39;gpg: decryption failed: No pinentry&#39; on macOS</title>
      <link>https://www.junian.dev/tech/macos-gpg-decryption-failed-no-pinentry/</link>
      <pubDate>Sun, 07 Sep 2025 06:53:08 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/macos-gpg-decryption-failed-no-pinentry/</guid>
      <description>&lt;p&gt;Recently, while using the &lt;code&gt;pass&lt;/code&gt; password manager command-line tool on macOS, I encountered the following error message:&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg: public key decryption failed: No pinentry
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg: decryption failed: No pinentry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;This issue occurs because the required dependency, &lt;code&gt;pinentry&lt;/code&gt;, is missing. On macOS, you need to install &lt;code&gt;pinentry-mac&lt;/code&gt;. To fix this, run:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speedtest CLI: Resolving HTTP Error 403 Forbidden</title>
      <link>https://www.junian.dev/tech/speedtest-http-error-403-forbidden/</link>
      <pubDate>Sat, 06 Sep 2025 13:35:21 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/speedtest-http-error-403-forbidden/</guid>
      <description>&lt;p&gt;After setting up networking on my headless Raspberry Pi, I wanted to verify that my internet connection was working properly. To do this, I used the Python tool &lt;code&gt;speedtest-cli&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can install &lt;code&gt;speedtest-cli&lt;/code&gt; by using &lt;code&gt;uv&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool install speedtest-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;Or the classic &lt;code&gt;pip&lt;/code&gt;:&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install speedtest-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;However, when I tried to check my internet speed using the command-line tool, I encountered an HTTP Error 403:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Unzip Multiple Files with the Command Line</title>
      <link>https://www.junian.dev/tech/unzip-cli-multiple-files/</link>
      <pubDate>Tue, 08 Oct 2024 16:00:00 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/unzip-cli-multiple-files/</guid>
      <description>&lt;p&gt;Recently, I downloaded a lot of ZIP files from the internet to my Raspberry Pi.
After all the downloads finished, I listed the files and tried to unzip them all.
My first instinct was to type &lt;code&gt;unzip *.zip&lt;/code&gt;, just like other standard Unix commands (&lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, etc.).
But to my surprise, it didn’t work at all.&lt;/p&gt;
&lt;p&gt;Take a look at the following snippet.
This is an example of the output I get when I try to unzip multiple ZIP files using the &lt;strong&gt;wrong&lt;/strong&gt; command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Install ALL Google Fonts on macOS</title>
      <link>https://www.junian.dev/tech/macos-google-fonts/</link>
      <pubDate>Sun, 15 Sep 2024 08:11:03 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/macos-google-fonts/</guid>
      <description>&lt;p&gt;Google Fonts is a collection of free licensed font families.
It has hundreds of fonts freely used for personal and commercial purposes.
It is popular mostly among web developers and designers.&lt;/p&gt;
&lt;p&gt;One time I want to use the same font from my web to my vector design.
I can just install the desired fonts and use them on macOS.
But what if I want to experiment with other fonts?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/tech/macos-google-fonts/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Install Docker Desktop on macOS with a Package Manager</title>
      <link>https://www.junian.dev/tech/macos-install-docker/</link>
      <pubDate>Sat, 14 Sep 2024 07:31:56 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/macos-install-docker/</guid>
      <description>&lt;p&gt;Docker is a useful piece of software.
Usually, Developers use it for the development and deployment of their apps.&lt;/p&gt;
&lt;p&gt;But we as a user also can benefit from Docker, especially if we want to install and use web-based apps.&lt;/p&gt;
&lt;p&gt;Enough intro, let&amp;rsquo;s get started.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;p&gt;I recommend installing the Homebrew package manager first on your macOS. If you don&amp;rsquo;t know how I already wrote it &lt;a href=&#34;https://www.junian.dev/tech/macos-install-homebrew/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you have Homebrew on your Mac, you can install Docker Desktop from the Terminal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Install Homebrew Package Manager on macOS</title>
      <link>https://www.junian.dev/tech/macos-install-homebrew/</link>
      <pubDate>Thu, 12 Sep 2024 16:34:14 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/macos-install-homebrew/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re a macOS user and want a convenient way to manage and install software, Homebrew is the go-to package manager. It simplifies installing, updating, and removing apps and command-line tools.&lt;/p&gt;
&lt;p&gt;In this guide, I&amp;rsquo;ll walk you through the steps to install Homebrew and show you how to use it to install software.&lt;/p&gt;
&lt;h2 id=&#34;open-terminal&#34;&gt;Open Terminal&lt;/h2&gt;
&lt;p&gt;First, we need to access the Terminal, the command-line interface for macOS. Here&amp;rsquo;s how to do it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac Owner using PC: How to Use the &#39;open&#39; Command in Windows</title>
      <link>https://www.junian.dev/tech/windows-open-command-like-macos/</link>
      <pubDate>Mon, 29 Apr 2024 16:04:57 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/windows-open-command-like-macos/</guid>
      <description>&lt;p&gt;As a macOS user, one question that always bothers me is what is the Windows equivalent of the &lt;code&gt;open&lt;/code&gt; command used in macOS.&lt;/p&gt;
&lt;p&gt;When I&amp;rsquo;m using the macOS Terminal, I usually open a file using a default program by using the &lt;code&gt;open&lt;/code&gt; command like this:&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;open filename.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;How about on Windows?&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Install AdGuard Home on Windows</title>
      <link>https://www.junian.dev/tech/windows-install-adguard-home/</link>
      <pubDate>Thu, 21 Mar 2024 14:47:48 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/windows-install-adguard-home/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re like me, you know the internet is a vast ocean of information, entertainment, and endless possibilities.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s not without its annoyances like trackers and malwares that can infringe on your privacy and slow down your browsing experience.&lt;/p&gt;
&lt;p&gt;Even worse, if you live in certain countries, there’s also a chance that your ISP is actively blocking your favorite websites.&lt;/p&gt;
&lt;p&gt;That’s where AdGuard Home comes in. It’s network-wide software that blocks trackers, malwares, and other unwanted content directly from your home network.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Convert macOS Icon (.icns) to Image (.png)</title>
      <link>https://www.junian.dev/tech/icns-to-png/</link>
      <pubDate>Tue, 07 Apr 2020 14:35:24 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/icns-to-png/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s say you want to write a blog post for a certain macOS app.
You write it great, add screenshots here and there to make the tutorial easy to follow.
It&amp;rsquo;s all done, until it&amp;rsquo;s time to publish.
You probably need to make a cover image at the top of your post or for social media thumbnail.
To make it relevant, you might need the icon of the app.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/tech/icns-to-png/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix Corrupted Zip Archive</title>
      <link>https://www.junian.dev/tech/cli-fix-corrupted-zip/</link>
      <pubDate>Thu, 02 Apr 2020 09:11:03 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/cli-fix-corrupted-zip/</guid>
      <description>&lt;p&gt;When you download a ZIP file from the internet, there is a chance that you may end up with a corrupted file.
This is not necessarily a network issue.
The uploader may not have verified the archive correctly.&lt;/p&gt;
&lt;p&gt;Here is an example output when trying to unzip a corrupted ZIP file downloaded from the internet.&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ unzip archive.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Archive:  archive.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;warning &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;archive.zip&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:  &lt;span class=&#34;m&#34;&gt;1520265671&lt;/span&gt; extra bytes at beginning or within zipfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;attempting to process anyway&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;archive.zip&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:  start of central directory not found&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  zipfile corrupt.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;please check that you have transferred or created the zipfile in the
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  appropriate BINARY mode and that you have compiled UnZip properly&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;Don’t worry about it.
The &lt;code&gt;zip&lt;/code&gt; command can be used to repair the archive.
It will attempt to recover as much data as possible and write it to a new ZIP file.
The syntax looks like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vertical to Horizontal Video Conversion with Blur Sides by using FFmpeg</title>
      <link>https://www.junian.dev/tech/ffmpeg-vertical-video-blur/</link>
      <pubDate>Sun, 29 Mar 2020 20:06:35 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/ffmpeg-vertical-video-blur/</guid>
      <description>&lt;p&gt;When you&amp;rsquo;re publishing videos on a platform like YouTube, you mostly want it to make it to standard 16:9 horizontal video.
Most video recorders already produce that.
But sometimes, one of your video section will contain a vertical video.
For example, if you want to show an Android or iOS app demo.&lt;/p&gt;
&lt;p&gt;Putting a vertical video directly into a wide video doesn&amp;rsquo;t look good.
Especially with that wide area for pillar box sides.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Fix Raspberry Pi Slow USB Drive Write Speed Problem</title>
      <link>https://www.junian.dev/tech/raspberry-pi-slow-usb-drive-write-speed/</link>
      <pubDate>Sat, 28 Mar 2020 13:05:17 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/raspberry-pi-slow-usb-drive-write-speed/</guid>
      <description>&lt;p&gt;One thing I notice after owning some &lt;a href=&#34;https://amzn.to/2UNPLBw&#34;&gt;Rapsberry Pis&lt;/a&gt; for about 4 years, the default write speed on one of its USB port is very slow, especially when you attach an &lt;a href=&#34;https://amzn.to/39r9dsV&#34;&gt;external HDD&lt;/a&gt; with NTFS format.&lt;/p&gt;
&lt;p&gt;To see what I mean, let&amp;rsquo;s check the write speed directly.&lt;/p&gt;
&lt;p&gt;I assume you&amp;rsquo;re using Raspbian, or its derivative, as the OS.&lt;/p&gt;
&lt;p&gt;First, change the working directory to your attached usb drive.&lt;/p&gt;

&lt;figure class=&#34;highlight&#34;&gt;
    &lt;button class=&#34;btn-clipboard chroma&#34; title=&#34;Copy to clipboard&#34;&gt;&lt;i class=&#34;fa icon-clipboard&#34;&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 24 24&#34; class=&#34;feather feather-copy&#34;&gt;&lt;rect x=&#34;9&#34; y=&#34;9&#34; width=&#34;13&#34; height=&#34;13&#34; rx=&#34;2&#34; ry=&#34;2&#34;/&gt;&lt;path d=&#34;M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1&#34;/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class=&#34;msg-clipboard&#34;&gt;&lt;/span&gt;&lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /media/pi/&lt;span class=&#34;nv&#34;&gt;$HARD_DRIVE_LABEL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
    
&lt;/figure&gt;&lt;p&gt;Then we can simulate file writing using &lt;code&gt;dd&lt;/code&gt; tool.
The following command will create binary file called &lt;code&gt;test.bin&lt;/code&gt; with 1000 MB of size (or roughly 1 GB).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wget File Download with Correct File Name</title>
      <link>https://www.junian.dev/tech/wget-correct-name/</link>
      <pubDate>Sat, 28 Mar 2020 08:48:21 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/wget-correct-name/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m using &lt;code&gt;wget&lt;/code&gt; a lot when I need to download a file from the internet to my headless server.
But sometimes, the URL I got isn&amp;rsquo;t ended with a clean file name.
Sometimes the URL redirect to another one, sometimes it has parameters.
As you know, &lt;code&gt;wget&lt;/code&gt; doesn&amp;rsquo;t handle the file name correctly when you have a non-clean URL.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not in the mood for reading? Watch the &lt;a href=&#34;https://www.junian.dev/tech/wget-correct-name/#video&#34;&gt;video&lt;/a&gt; instead.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For example, I want to download a vim script called &lt;a href=&#34;https://www.vim.org/scripts/script.php?script_id=1658&#34;&gt;The NERD tree&lt;/a&gt; from its official website.
From the web page, we can see that the latest version by the time this article written is v5.0.0.
As you can see, the file name is &lt;code&gt;NERD_tree.zip&lt;/code&gt; with following URL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Convert PSP ISO Games To CSO on Raspberry Pi</title>
      <link>https://www.junian.dev/tech/psp-iso-to-cso/</link>
      <pubDate>Fri, 27 Mar 2020 12:43:42 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/psp-iso-to-cso/</guid>
      <description>&lt;p&gt;One of my hobbies right now is retrogaming.
I try to catch up with some old PSP games that I never had a chance to play when I was a kid.&lt;/p&gt;
&lt;p&gt;Thanks to the advanced emulation technology today, I can play those games on my phone today.&lt;/p&gt;
&lt;p&gt;One problem with PSP game is that the game file (we usually call it ROM) is relatively big.
A single PSP game can take around 0.7 GB to 1.5 GB of disk space.
The internal storage of my phone can only store around 10 games.
I also purchase a 256 GB microSD card, the &lt;a href=&#34;https://amzn.to/2ygpcNF&#34;&gt;Samsung EVO Select&lt;/a&gt; brand one, to store more PSP ROMs.
I quickly running out of space the more my collection grows, since I also have ROMs for other game systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Set Up Aria2 Download Manager with Web UI on Raspberry Pi</title>
      <link>https://www.junian.dev/tech/raspberry-pi-aria2-download-manager/</link>
      <pubDate>Fri, 27 Mar 2020 11:32:51 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/raspberry-pi-aria2-download-manager/</guid>
      <description>&lt;p&gt;Today I need to download a lot of large files.
It is estimated to be finished for a couple of hours.
I can do that directly with my &lt;a href=&#34;https://amzn.to/33Qrq1V&#34;&gt;MacBook Air&lt;/a&gt;, but that means I need to keep it on for a long time.
That is unacceptable since I need to bring my MacBook away.&lt;/p&gt;
&lt;p&gt;Luckily, I have a &lt;a href=&#34;https://amzn.to/2QOeQeh&#34;&gt;Raspberry Pi&lt;/a&gt; that always running 24/7 at home.
I can just ssh it and run wget in background, but it&amp;rsquo;s not efficient enough.
I mean, I&amp;rsquo;m friendly with command line, but I want something fast.
What I want is a download manager that I can access with web browser, just like &lt;a href=&#34;https://transmissionbt.com&#34;&gt;transmission&lt;/a&gt;.
But, transmission can only accept torrent files.
I need it to accept more protocols, like HTTP and FTP.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Delete macOS Local Time Machine Snapshots</title>
      <link>https://www.junian.dev/tech/delete-macos-local-time-machine-snapshots/</link>
      <pubDate>Fri, 27 Sep 2019 09:12:15 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/tech/delete-macos-local-time-machine-snapshots/</guid>
      <description>&lt;p&gt;Recently, I&amp;rsquo;ve been running out of SSD space on my &lt;a href=&#34;https://www.amazon.com/Apple-MacBook-13-inch-1-4GHz-quad-core/dp/B07V49KGVQ/ref=as_li_ss_tl?keywords=macbook&amp;#43;pro&amp;amp;qid=1566960946&amp;amp;s=gateway&amp;amp;sr=8-3&amp;amp;linkCode=ll1&amp;amp;tag=juniandotnet-20&amp;amp;linkId=507229368be84f1fc9c64d4f5732e143&amp;amp;language=en_US&#34;&gt;13&amp;quot; MacBook Pro&lt;/a&gt;.
I tried to scan for the entire disk using &lt;a href=&#34;http://www.derlien.com&#34;&gt;Disk Inventory X&lt;/a&gt; and found nothing substantial.
Until I finally read an article explaining the cause of suddenly losing disk space.&lt;/p&gt;
&lt;p&gt;Did you know that since macOS High Sierra and later, a Time Machine local snapshot is created and saved before installing any macOS update?&lt;/p&gt;
&lt;p&gt;I honestly didn&amp;rsquo;t know until I read the knowledge base &lt;a href=&#34;https://support.apple.com/en-us/HT204015&#34;&gt;article&lt;/a&gt; from Apple website.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Passwordless SSH Server on macOS</title>
      <link>https://www.junian.dev/dev/macos-ssh-server-no-password/</link>
      <pubDate>Tue, 07 May 2019 09:41:30 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/macos-ssh-server-no-password/</guid>
      <description>&lt;p&gt;One time I need to add access my &lt;a href=&#34;https://amzn.to/2GZNWKG&#34;&gt;MacBook Pro&lt;/a&gt; remotely using ssh from a &lt;a href=&#34;https://amzn.to/2vFMB6n&#34;&gt;Windows 10&lt;/a&gt; machine.
It&amp;rsquo;s very easy actually to enable ssh server on macOS.
You just need to open System Preferences → Sharing → check Remote Login and that&amp;rsquo;s it.
Simply connect it using your client machine with &lt;code&gt;ssh username@ip-address&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The problem is, by default this ssh server only accept password login.&lt;/p&gt;
&lt;p&gt;To enable passwordless login using private key authentication, we need to configure further.
Open your favorite terminal application on your macOS.
Edit &lt;code&gt;sshd_config&lt;/code&gt; file using your favorite text editor.
The file is located at &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;.
Since it requires admin credential, you need to edit it using &lt;code&gt;sudo&lt;/code&gt;.
Here is an example using &lt;code&gt;vim&lt;/code&gt; editor.&lt;/p&gt;</description>
    </item>
    <item>
      <title>QR Code Generation on Terminal</title>
      <link>https://www.junian.dev/dev/terminal-qr-code-generation/</link>
      <pubDate>Tue, 16 Apr 2019 14:50:36 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/terminal-qr-code-generation/</guid>
      <description>&lt;p&gt;There was a time when I need to transfer data from my MacBook Pro to my iPhone.
There are many ways to transfer the data.&lt;/p&gt;
&lt;p&gt;But one time, my Mac and my iPhone are on a different network in the same place.&lt;/p&gt;
&lt;p&gt;I need to use an ssh client from my iPhone.
But the iOS app unable to generate ssh keys.
So I need to create the key from my MacBook Pro.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Text-Based Password Manager</title>
      <link>https://www.junian.dev/dev/text-based-password-manager/</link>
      <pubDate>Tue, 16 Apr 2019 10:57:29 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/text-based-password-manager/</guid>
      <description>&lt;p&gt;Everyone needs a password manager.
I have dozens of credentials to several websites.
Re-using password across websites is no.
Memorizing dozens of different password is also a no.
The only way is to use a password manager.&lt;/p&gt;
&lt;p&gt;For so long, I&amp;rsquo;ve been searching for the simplest possible password manager.
I only need two criteria: plaintext and git-friendly.&lt;/p&gt;
&lt;h2 id=&#34;why-plaintext&#34;&gt;Why Plaintext?&lt;/h2&gt;
&lt;p&gt;Yeah, you heard that right, it has to be plaintext.
But that doesn&amp;rsquo;t mean it has to be stored as real plain text, where everyone or every machine can read it.
That would be so wrong.
What I mean is it has to be stored as simple text files, not binary.
If you ever see the content of your public and private ssh keys, that&amp;rsquo;s what I mean.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Create a Local Git Server</title>
      <link>https://www.junian.dev/dev/local-git-server/</link>
      <pubDate>Mon, 15 Apr 2019 13:17:17 +0700</pubDate>
      <author>author@junian.dev (Junian Triajianto)</author>
      <guid>https://www.junian.dev/dev/local-git-server/</guid>
      <description>&lt;p&gt;In this tutorial, I&amp;rsquo;ll show you how to create a git server in your local network.&lt;/p&gt;
&lt;p&gt;You might be thinking why would I?
Usually, when we&amp;rsquo;re working git repository, we go to online services like GitHub.
We create a private project for privacy.
But that&amp;rsquo;s not enough for all cases.&lt;/p&gt;
&lt;p&gt;You maybe need a git repository to store &lt;a href=&#34;https://www.passwordstore.org/&#34;&gt;password&lt;/a&gt;.
Putting it in a cloud service is not cool.&lt;/p&gt;
&lt;p&gt;There is a very simple way to set up your own git server.&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
