<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Article on Jonas Hestdahl</title>
    <link>https://jonash.xyz/tags/article/</link>
    <description>Recent content in Article on Jonas Hestdahl</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 10 Jul 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://jonash.xyz/tags/article/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Avoid using cat into grep</title>
      <link>https://jonash.xyz/posts/avoid-using-cat-into-grep/</link>
      <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://jonash.xyz/posts/avoid-using-cat-into-grep/</guid>
      <description>&lt;p&gt;I have been guilty of doing this myself.&lt;/p&gt;
&lt;p&gt;Instead of doing &lt;code&gt;cat file1 file2 | grep -i searchTerm&lt;/code&gt;, it is better to use &lt;a

	
	
		href = &#34;https://www.gnu.org/software/grep/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		grep
	&lt;/span&gt;

&lt;/a&gt;
 directly. The result is not only more efficient, but it&amp;rsquo;s more informative aswell.&lt;/p&gt;
&lt;h2 id=&#34;here-is-why&#34;&gt;Here is why&lt;/h2&gt;
&lt;p&gt;I came across a &lt;a

	
	
		href = &#34;https://www.youtube.com/watch?v=82NBMvx6vFY&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		video
	&lt;/span&gt;

&lt;/a&gt;
 by [[Luke Smith]], where he explains why you should avoid using cat into grep. This video made me reflect on my own usage of &lt;a

	
	
		href = &#34;https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		cat
	&lt;/span&gt;

&lt;/a&gt;
, and what it&amp;rsquo;s really meant for, which is concatenate and write files.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have been guilty of doing this myself.</p>
<p>Instead of doing <code>cat file1 file2 | grep -i searchTerm</code>, it is better to use <a

	
	
		href = "https://www.gnu.org/software/grep/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		grep
	</span>

</a>
 directly. The result is not only more efficient, but it&rsquo;s more informative aswell.</p>
<h2 id="here-is-why">Here is why</h2>
<p>I came across a <a

	
	
		href = "https://www.youtube.com/watch?v=82NBMvx6vFY"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		video
	</span>

</a>
 by [[Luke Smith]], where he explains why you should avoid using cat into grep. This video made me reflect on my own usage of <a

	
	
		href = "https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		cat
	</span>

</a>
, and what it&rsquo;s really meant for, which is concatenate and write files.</p>
<p>Look at the following output of running <code>cat file1 file2 | grep -i fox</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat file1 file2 <span class="p">|</span> grep -i fox
</span></span><span class="line"><span class="cl">The quick brown fox jumps over the lazy dog.
</span></span><span class="line"><span class="cl">foxes are beautiful animals
</span></span></code></pre></div><p>Now take a look at the output, using only grep;</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grep -i fox file1 file2
</span></span><span class="line"><span class="cl">file1:The quick brown fox jumps over the lazy dog.
</span></span><span class="line"><span class="cl">file2:foxes are beautiful animals
</span></span></code></pre></div><p>Do you notice the difference?</p>
<p>Not only do we save memory by eliminating the use of another program (cat), but we also get information about which files the search string appears in.</p>
<p>It&rsquo;s a good practice to always be thinking about how you can strip down redundant programs and lines of code, so that you are left with only the bare minimum.</p>
<p>Changing a bad habit that is engrained in your mind can be tough, but mindful reflection will help you to adopt new ways of thinking.</p>
<h2 id="links-">Links :</h2>
<p>202407101228</p>
<p><a

	
	
		href = "https://www.youtube.com/watch?v=82NBMvx6vFY"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://www.youtube.com/watch?v=82NBMvx6vFY
	</span>

</a>
</p>
<p><a

	
	
		href = "https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation
	</span>

</a>
</p>
<p><a

	
	
		href = "https://www.gnu.org/software/grep/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://www.gnu.org/software/grep/
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Yazi - a Blazing Fast Terminal File Manager written in Rust</title>
      <link>https://jonash.xyz/posts/yazi---a-blazing-fast-terminal-file-manager/</link>
      <pubDate>Tue, 21 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://jonash.xyz/posts/yazi---a-blazing-fast-terminal-file-manager/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been using this terminal file manager for a few weeks now, and I must say; I absolutely love it!
It&amp;rsquo;s written in &lt;a

	
	
		href = &#34;https://www.rust-lang.org/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Rust
	&lt;/span&gt;

&lt;/a&gt;
, so all I/O operations are asynchronous, which means CPU tasks are spread across multiple threads, utilizing available resources.
And the best part; it has vim keybindings!&lt;/p&gt;
&lt;p&gt;Not convinced yet? Check out the &lt;a

	
	
		href = &#34;https://github.com/sxyazi/yazi&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		GitHub page
	&lt;/span&gt;

&lt;/a&gt;
, and scroll down a bit until you reach &amp;ldquo;example.mp4&amp;rdquo;. You&amp;rsquo;ll see a video that demonstrates some of its cool features.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been using this terminal file manager for a few weeks now, and I must say; I absolutely love it!
It&rsquo;s written in <a

	
	
		href = "https://www.rust-lang.org/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Rust
	</span>

</a>
, so all I/O operations are asynchronous, which means CPU tasks are spread across multiple threads, utilizing available resources.
And the best part; it has vim keybindings!</p>
<p>Not convinced yet? Check out the <a

	
	
		href = "https://github.com/sxyazi/yazi"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		GitHub page
	</span>

</a>
, and scroll down a bit until you reach &ldquo;example.mp4&rdquo;. You&rsquo;ll see a video that demonstrates some of its cool features.</p>
<p>You can check out other nice features <a

	
	
		href = "https://yazi-rs.github.io/features/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		here
	</span>

</a>
, like scrollable preview, bulk rename and integration with tools like <a

	
	
		href = "https://github.com/sharkdp/fd"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		fd
	</span>

</a>
, <a

	
	
		href = "https://github.com/BurntSushi/ripgrep"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		rg
	</span>

</a>
, <a

	
	
		href = "https://github.com/jstkdng/ueberzugpp"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		ueberzugpp
	</span>

</a>
 and more.</p>
<h2 id="installation-and-quick-start">Installation and quick start</h2>
<p><a

	
	
		href = "https://yazi-rs.github.io/docs/installation/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://yazi-rs.github.io/docs/installation/
	</span>

</a>
</p>
<p>Good luck!</p>
<h2 id="links">Links:</h2>
<p>202405211803</p>
<p><a

	
	
		href = "https://github.com/sxyazi/yazi"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://github.com/sxyazi/yazi
	</span>

</a>
</p>
<p><a

	
	
		href = "https://yazi-rs.github.io/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://yazi-rs.github.io/
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Helm - The package manager for Kubernetes</title>
      <link>https://jonash.xyz/posts/helm---the-package-manager-for-kubernetes/</link>
      <pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://jonash.xyz/posts/helm---the-package-manager-for-kubernetes/</guid>
      <description>&lt;h2 id=&#34;helm&#34;&gt;Helm&lt;/h2&gt;
&lt;p&gt;Helm is the best way to find, share, and use software built for &lt;a

	
	
		href = &#34;https://kubernetes.io&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Kubernetes
	&lt;/span&gt;

&lt;/a&gt;
. It helps you manage Kubernetes applications and helps you define, install, and upgrade even the most complex Kubernetes application.&lt;/p&gt;
&lt;p&gt;Helm is a graduated project in the &lt;a

	
	
		href = &#34;https://cncf.io&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		CNCF
	&lt;/span&gt;

&lt;/a&gt;
 and is maintained by the &lt;a

	
	
		href = &#34;https://github.com/helm/community&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Helm community
	&lt;/span&gt;

&lt;/a&gt;
.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="helm">Helm</h2>
<p>Helm is the best way to find, share, and use software built for <a

	
	
		href = "https://kubernetes.io"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Kubernetes
	</span>

</a>
. It helps you manage Kubernetes applications and helps you define, install, and upgrade even the most complex Kubernetes application.</p>
<p>Helm is a graduated project in the <a

	
	
		href = "https://cncf.io"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		CNCF
	</span>

</a>
 and is maintained by the <a

	
	
		href = "https://github.com/helm/community"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Helm community
	</span>

</a>
.</p>
<h2 id="what-is-a-helm-chart">What is a helm chart?</h2>
<p>a Helm chart is a powerful tool that simplifies the deployment, management, and sharing of applications on Kubernetes by packaging all necessary resources and configurations into a single, reusable unit.</p>
<p>In other words, a Helm chart is a package that contains all the necessary information and resources to deploy an application or service onto a Kubernetes cluster. It includes a collection of files that describe a related set of Kubernetes resources.</p>
<p>Charts are easy to create, version, share, and publish — so start using Helm and stop the copy-and-paste.</p>
<h2 id="how-to-install-helm">How to install helm</h2>
<p><a

	
	
		href = "https://helm.sh/docs/intro/install/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://helm.sh/docs/intro/install/
	</span>

</a>
</p>
<h3 id="example-structure-of-a-helm-chart">Example Structure of a Helm Chart</h3>
<pre tabindex="0"><code>mychart/
  Chart.yaml        # Chart metadata
  values.yaml       # Default configuration values
  charts/           # Dependency charts (optional)
  templates/        # Templates for Kubernetes resources
    deployment.yaml
    service.yaml
    ...
  README.md         # Documentation (optional)
</code></pre><h3 id="components-and-functionality-of-a-helm-chart">Components and functionality of a Helm chart:</h3>
<ol>
<li>
<p><strong>Chart.yaml</strong>: This file contains metadata about the chart, including the name, version, description, and any dependencies on other charts.</p>
</li>
<li>
<p><strong>Values.yaml</strong>: This file defines the default configuration values for the chart. Users can override these values when they install or upgrade a chart to customize the deployment.</p>
</li>
<li>
<p><strong>Templates</strong>: This directory contains a set of templates that generate Kubernetes manifest files. The templates use <a

	
	
		href = "https://go.dev/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Go
	</span>

</a>
 templating syntax and can include variables that are defined in <code>Values.yaml</code> or provided by the user at installation time.</p>
</li>
<li>
<p><strong>Charts</strong>: This directory (optional) can contain dependencies, which are other charts that this chart depends on.</p>
</li>
<li>
<p><strong>Files</strong>: Additional files can be included in the chart for reference, such as <code>README.md</code> or any other documentation.</p>
</li>
</ol>
<h3 id="how-helm-charts-work">How Helm Charts Work</h3>
<ul>
<li><strong>Packaging</strong>: Helm charts are packaged into <code>.tgz</code> (tarball) files, which can be distributed and shared.</li>
<li><strong>Installation</strong>: When you install a chart using the <code>helm install</code> command, Helm takes the templates, substitutes any values, and generates Kubernetes manifests that are then applied to the Kubernetes cluster.</li>
<li><strong>Customization</strong>: Users can provide their own configuration values via the <code>--values</code> or <code>--set</code> flags to customize the deployment without modifying the chart&rsquo;s source code.</li>
<li><strong>Versioning</strong>: Charts can be versioned, allowing for consistent deployments and the ability to roll back to previous versions if necessary.</li>
</ul>
<h3 id="what-are-the-benefits-of-using-helm-charts">What are the benefits of using Helm Charts?</h3>
<ul>
<li><strong>Reusability</strong>: Helm charts encapsulate Kubernetes resources into reusable packages, making it easy to share and reuse configurations across different environments.</li>
<li><strong>Simplified Management</strong>: Helm abstracts the complexity of Kubernetes configurations, making it easier to manage and deploy applications.</li>
<li><strong>Dependency Management</strong>: Helm manages dependencies between different charts, ensuring that all required services are deployed in the correct order.</li>
<li><strong>Version Control</strong>: Helm charts support versioning, which helps in tracking changes and rolling back to previous versions when needed.</li>
<li><strong>Customization</strong>: The ability to override default values allows users to customize deployments without altering the original chart.</li>
</ul>
<h3 id="common-helm-commands">Common Helm commands</h3>
<ol>
<li>
<p><strong><code>helm repo add &lt;repo-name&gt; &lt;repo-url&gt;</code></strong></p>
<ul>
<li>Adds a Helm chart repository to your local Helm client.</li>
<li><strong>Example</strong>: <code>helm repo add stable https://charts.helm.sh/stable</code></li>
</ul>
</li>
<li>
<p><strong><code>helm repo update</code></strong></p>
<ul>
<li>Updates the local cache of the Helm chart repositories.</li>
<li><strong>Example</strong>: <code>helm repo update</code></li>
</ul>
</li>
<li>
<p><strong><code>helm search repo &lt;keyword&gt;</code></strong></p>
<ul>
<li>Searches for charts in the added repositories that match the given keyword.</li>
<li><strong>Example</strong>: <code>helm search repo nginx</code></li>
</ul>
</li>
<li>
<p><strong><code>helm install &lt;release-name&gt; &lt;chart&gt; [flags]</code></strong></p>
<ul>
<li>Installs a Helm chart to create a new release.</li>
<li><strong>Example</strong>: <code>helm install my-nginx stable/nginx-ingress</code></li>
</ul>
</li>
<li>
<p><strong><code>helm upgrade &lt;release-name&gt; &lt;chart&gt; [flags]</code></strong></p>
<ul>
<li>Upgrades an existing release to a new version of the chart.</li>
<li><strong>Example</strong>: <code>helm upgrade my-nginx stable/nginx-ingress</code></li>
</ul>
</li>
<li>
<p><strong><code>helm uninstall &lt;release-name&gt; [flags]</code></strong></p>
<ul>
<li>Uninstalls a release from the Kubernetes cluster.</li>
<li><strong>Example</strong>: <code>helm uninstall my-nginx</code></li>
</ul>
</li>
<li>
<p><strong><code>helm list [flags]</code></strong></p>
<ul>
<li>Lists all releases in the current namespace.</li>
<li><strong>Example</strong>: <code>helm list</code></li>
</ul>
</li>
<li>
<p><strong><code>helm status &lt;release-name&gt;</code></strong></p>
<ul>
<li>Displays the status of the specified release.</li>
<li><strong>Example</strong>: <code>helm status my-nginx</code></li>
</ul>
</li>
<li>
<p><strong><code>helm rollback &lt;release-name&gt; &lt;revision&gt;</code></strong></p>
<ul>
<li>Rolls back a release to a specific revision.</li>
<li><strong>Example</strong>: <code>helm rollback my-nginx 1</code></li>
</ul>
</li>
<li>
<p><strong><code>helm template &lt;chart&gt; [flags]</code></strong></p>
<ul>
<li>Generates Kubernetes manifest files from a Helm chart without actually installing the chart.</li>
<li><strong>Example</strong>: <code>helm template stable/nginx-ingress</code></li>
</ul>
</li>
<li>
<p><strong><code>helm show values &lt;chart&gt;</code></strong></p>
<ul>
<li>Displays the default values for a Helm chart.</li>
<li><strong>Example</strong>: <code>helm show values stable/nginx-ingress</code></li>
</ul>
</li>
<li>
<p><strong><code>helm get all &lt;release-name&gt;</code></strong></p>
<ul>
<li>Retrieves all information about a specific release, including values, hooks, and manifest files.</li>
<li><strong>Example</strong>: <code>helm get all my-nginx</code></li>
</ul>
</li>
<li>
<p><strong><code>helm package &lt;chart-path&gt; [flags]</code></strong></p>
<ul>
<li>Packages a Helm chart directory into a <code>.tgz</code> (tarball) file.</li>
<li><strong>Example</strong>: <code>helm package ./mychart</code></li>
</ul>
</li>
<li>
<p><strong><code>helm lint &lt;chart&gt;</code></strong></p>
<ul>
<li>Runs a series of tests to ensure that a chart follows best practices.</li>
<li><strong>Example</strong>: <code>helm lint ./mychart</code></li>
</ul>
</li>
<li>
<p><strong><code>helm test &lt;release-name&gt; [flags]</code></strong></p>
<ul>
<li>Runs tests for a release to validate its deployment.</li>
<li><strong>Example</strong>: <code>helm test my-nginx</code></li>
</ul>
</li>
<li>
<p><strong><code>helm dependency update [flags]</code></strong></p>
<ul>
<li>Updates the dependencies for a chart based on the <code>Chart.yaml</code> file.</li>
<li><strong>Example</strong>: <code>helm dependency update ./mychart</code></li>
</ul>
</li>
<li>
<p><strong><code>helm pull &lt;chart&gt; [flags]</code></strong></p>
<ul>
<li>Downloads a chart from a repository and (optionally) decompresses it.</li>
<li><strong>Example</strong>: <code>helm pull stable/nginx-ingress</code></li>
</ul>
</li>
<li>
<p><strong><code>helm repo list</code></strong></p>
<ul>
<li>Lists all the repositories that have been added.</li>
<li><strong>Example</strong>: <code>helm repo list</code></li>
</ul>
</li>
</ol>
<p>These commands cover the most common tasks you&rsquo;ll perform with Helm, from managing repositories and searching for charts to installing, upgrading, and maintaining releases.
Check out the <a

	
	
		href = "https://helm.sh/docs/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		official documentation page
	</span>

</a>
 to learn more about Helm.</p>
<p>Good luck!</p>
<h2 id="links-">Links :</h2>
<p>202405161033</p>
<p><a

	
	
		href = "https://helm.sh/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://helm.sh/
	</span>

</a>
</p>
<p><a

	
	
		href = "https://helm.sh/docs/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://helm.sh/docs/
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Kubernetes - understanding the relationship between nodes and pods</title>
      <link>https://jonash.xyz/posts/kubernetes---understanding-the-relationship-between-nodes-and-pods/</link>
      <pubDate>Tue, 14 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://jonash.xyz/posts/kubernetes---understanding-the-relationship-between-nodes-and-pods/</guid>
      <description>&lt;h1 id=&#34;the-relationship-between-nodes-and-pods&#34;&gt;The relationship between nodes and pods&lt;/h1&gt;
&lt;p&gt;In Kubernetes, the relationship between nodes and pods is central to how applications are deployed and managed. Understanding what nodes and pods are, individually, helps clarify their interaction.&lt;/p&gt;
&lt;h3 id=&#34;what-are-pods&#34;&gt;What are Pods?&lt;/h3&gt;
&lt;p&gt;A &lt;strong&gt;pod&lt;/strong&gt; is the smallest deployable unit in Kubernetes and serves as a wrapper for one or more containers. Each pod is designed to run a single instance of a given application or service. It can contain one or multiple containers (usually Docker containers), and these containers within a pod share resources like networking and storage. Containers in the same pod can communicate with each other using &lt;code&gt;localhost&lt;/code&gt;, as they share the same network namespace.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h1 id="the-relationship-between-nodes-and-pods">The relationship between nodes and pods</h1>
<p>In Kubernetes, the relationship between nodes and pods is central to how applications are deployed and managed. Understanding what nodes and pods are, individually, helps clarify their interaction.</p>
<h3 id="what-are-pods">What are Pods?</h3>
<p>A <strong>pod</strong> is the smallest deployable unit in Kubernetes and serves as a wrapper for one or more containers. Each pod is designed to run a single instance of a given application or service. It can contain one or multiple containers (usually Docker containers), and these containers within a pod share resources like networking and storage. Containers in the same pod can communicate with each other using <code>localhost</code>, as they share the same network namespace.</p>
<p>Pods encapsulate:</p>
<ul>
<li>Application containers</li>
<li>Storage resources</li>
<li>A unique network IP</li>
<li>Options that govern how the container(s) should run</li>
</ul>
<p>A pod is designed to run a single instance of a given application. If your application requires scaling, you create multiple instances of the same pod, each of which might be identical but isolated from others.</p>
<h3 id="what-are-nodes">What are Nodes?</h3>
<p>A <strong>node</strong> is a worker machine in a Kubernetes cluster. This machine can be either a physical computer or a virtual machine (VM) depending on the environment in which the Kubernetes cluster is deployed. Each node is managed by the master components (such as the scheduler, API server, and controller manager), which make decisions about where to place pods, monitor node and pod status, and respond to changes in the cluster. Nodes have the necessary services to run pods, including the Docker runtime and the Kubelet, which is responsible for maintaining a set of pods as specified by the Kubernetes API.</p>
<p>Each node in a Kubernetes cluster fulfills one or more of the following roles:</p>
<ul>
<li><strong>Master Node</strong>: Runs cluster management tasks.</li>
<li><strong>Worker Node</strong>: Hosts the Pods that are the components of the application workload.</li>
</ul>
<p>Nodes are responsible for providing the resources (CPU, memory, network, and storage) that pods need to run their applications.</p>
<h3 id="relationship-between-nodes-and-pods">Relationship between Nodes and Pods</h3>
<ul>
<li>Nodes provide the runtime environments for pods. Each node can host multiple pods.</li>
<li>Pods are assigned to nodes by the Kubernetes scheduler based on resource availability, policy, and other constraints.</li>
<li>Each pod is bound to a node and remains on that node until terminated or deleted. If a node fails, the pods scheduled on that node are scheduled for deletion, and they may be recreated by the control plane on other nodes.</li>
</ul>
<p>This relationship enables Kubernetes to manage large-scale, distributed environments efficiently, ensuring that applications are reliably available and can be scaled as needed across the various nodes in the cluster.</p>
<h2 id="links">Links:</h2>
<p>202405142258</p>
<p>Kubernetes documentation home: <a

	
	
		href = "https://kubernetes.io/docs/home/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://kubernetes.io/docs/home/
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Convert SVG to PDF from your command line using Inkscape</title>
      <link>https://jonash.xyz/posts/convert-svg-to-pdf-using-inkscape/</link>
      <pubDate>Sun, 24 Mar 2024 13:06:35 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/convert-svg-to-pdf-using-inkscape/</guid>
      <description>&lt;p&gt;Today I learned that if you have Inkscape installed on your machine, you can convert .SVG files into .PDF, using this simple command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&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;inkscape input.svg --export-filename&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;output.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;input.svg&lt;/code&gt; with the name of your SVG file and &lt;code&gt;output.pdf&lt;/code&gt; with the desired output PDF file name.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;example-use-case&#34;&gt;Example use case&lt;/h2&gt;
&lt;p&gt;Say you have developed a drawing or mindmap in Excalidraw. You can export this to SVG and then run the command to convert it to PDF. Very cool!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Today I learned that if you have Inkscape installed on your machine, you can convert .SVG files into .PDF, using this simple command:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">inkscape input.svg --export-filename<span class="o">=</span>output.pdf
</span></span></code></pre></div><ul>
<li>Replace <code>input.svg</code> with the name of your SVG file and <code>output.pdf</code> with the desired output PDF file name.</li>
</ul>
<h2 id="example-use-case">Example use case</h2>
<p>Say you have developed a drawing or mindmap in Excalidraw. You can export this to SVG and then run the command to convert it to PDF. Very cool!</p>
<h2 id="links-">Links :</h2>
<p>202403241251</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Obsidian Sync Github Script</title>
      <link>https://jonash.xyz/posts/obsidian-sync-github-script/</link>
      <pubDate>Wed, 20 Mar 2024 17:55:52 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/obsidian-sync-github-script/</guid>
      <description>&lt;h1 id=&#34;obsidian-sync-github&#34;&gt;obsidian-sync-github&lt;/h1&gt;
&lt;h2 id=&#34;why-write-this-script&#34;&gt;Why write this script?&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m using Arch Linux (btw) and the Obsidian electron AppImage from AUR. It works great, but for some reason the obsidian git community plugin makes the app super sluggish. I removed the plugin and wrote my own bash script instead.&lt;/p&gt;
&lt;h2 id=&#34;how-the-script-works&#34;&gt;How the script works&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Auto-pushes Obsidian notes to GitHub via a cronjob every 30 minutes
&lt;ul&gt;
&lt;li&gt;crontab -e -&amp;gt; &lt;code&gt;*/30 * * * * /home/jonash/.local/bin/obsidian-sync-github&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sends a notification via dunstify and your e-mail address of choice&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&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;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#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;&lt;span class=&#34;c1&#34;&gt;# Navigate to your repository directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&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; ~/obsidian/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Fetch changes from remote repo and merge updates into current local branch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git pull --rebase
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add all changes to git&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Commit the changes with a current timestamp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Automated commit on &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Push the changes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin main
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Send notification after the push is sent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; git push origin main&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# Check if dunstify is available (dunst&amp;#39;s notification tool)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v dunstify &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Send a notification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    dunstify &lt;span class=&#34;s2&#34;&gt;&amp;#34;Successfully pushed obsidian notes to GitHub!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;dunstify not found, cannot send notification&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# Email details&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;recipient&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;jonash@jonash.xyz&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Subject: Obsidian Notes Push Successful&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Your Obsidian notes have been successfully pushed to GitHub on &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# Send the email&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subject&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$body&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; msmtp &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$recipient&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git push failed&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h1 id="obsidian-sync-github">obsidian-sync-github</h1>
<h2 id="why-write-this-script">Why write this script?</h2>
<p>I&rsquo;m using Arch Linux (btw) and the Obsidian electron AppImage from AUR. It works great, but for some reason the obsidian git community plugin makes the app super sluggish. I removed the plugin and wrote my own bash script instead.</p>
<h2 id="how-the-script-works">How the script works</h2>
<ul>
<li>Auto-pushes Obsidian notes to GitHub via a cronjob every 30 minutes
<ul>
<li>crontab -e -&gt; <code>*/30 * * * * /home/jonash/.local/bin/obsidian-sync-github</code></li>
</ul>
</li>
<li>Sends a notification via dunstify and your e-mail address of choice</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="c1"># Navigate to your repository directory</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> ~/obsidian/
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Fetch changes from remote repo and merge updates into current local branch</span>
</span></span><span class="line"><span class="cl">git pull --rebase
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Add all changes to git</span>
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Commit the changes with a current timestamp</span>
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;Automated commit on </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Push the changes</span>
</span></span><span class="line"><span class="cl">git push origin main
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Send notification after the push is sent</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> git push origin main<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">  <span class="c1"># Check if dunstify is available (dunst&#39;s notification tool)</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="nb">command</span> -v dunstify &gt;/dev/null 2&gt;<span class="p">&amp;</span>1<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Send a notification</span>
</span></span><span class="line"><span class="cl">    dunstify <span class="s2">&#34;Successfully pushed obsidian notes to GitHub!&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;dunstify not found, cannot send notification&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="k">fi</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1"># Email details</span>
</span></span><span class="line"><span class="cl">  <span class="nv">recipient</span><span class="o">=</span><span class="s2">&#34;jonash@jonash.xyz&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nv">subject</span><span class="o">=</span><span class="s2">&#34;Subject: Obsidian Notes Push Successful&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nv">body</span><span class="o">=</span><span class="s2">&#34;Your Obsidian notes have been successfully pushed to GitHub on </span><span class="k">$(</span>date<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1"># Send the email</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="nv">$subject</span><span class="s2">\n\n</span><span class="nv">$body</span><span class="s2">&#34;</span> <span class="p">|</span> msmtp <span class="s2">&#34;</span><span class="nv">$recipient</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">  <span class="nb">echo</span> <span class="s2">&#34;git push failed&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    
    <item>
      <title>Create Your Own Website With HUGO</title>
      <link>https://jonash.xyz/posts/generate-a-website-with-hugo/</link>
      <pubDate>Thu, 14 Mar 2024 14:42:54 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/generate-a-website-with-hugo/</guid>
      <description>&lt;h2 id=&#34;what-is-hugo&#34;&gt;What is HUGO?&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s a framework written in &lt;a

	
	
		href = &#34;https://go.dev/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Go
	&lt;/span&gt;

&lt;/a&gt;
, designed to convert code and content into static websites. &lt;a

	
	
		href = &#34;https://gohugo.io/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		HUGO
	&lt;/span&gt;

&lt;/a&gt;
 is exceptionally fast at compiling websites, even those with thousands of pages. It is an excellent choice for projects where speed, security, and simplicity are prioritized.&lt;/p&gt;
&lt;h2 id=&#34;heres-how-it-works&#34;&gt;Here&amp;rsquo;s how it works&lt;/h2&gt;
&lt;p&gt;HUGO takes your content, which you can write in &lt;a

	
	
		href = &#34;https://en.wikipedia.org/wiki/Markdown&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Markdown
	&lt;/span&gt;

&lt;/a&gt;
 (a lightweight markup language), and your templates, which define the structure and design of your site, and combines them to generate a complete, static website. These websites are made up of prebuilt HTML files, making them very fast to load and easy to host.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="what-is-hugo">What is HUGO?</h2>
<p>It&rsquo;s a framework written in <a

	
	
		href = "https://go.dev/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Go
	</span>

</a>
, designed to convert code and content into static websites. <a

	
	
		href = "https://gohugo.io/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		HUGO
	</span>

</a>
 is exceptionally fast at compiling websites, even those with thousands of pages. It is an excellent choice for projects where speed, security, and simplicity are prioritized.</p>
<h2 id="heres-how-it-works">Here&rsquo;s how it works</h2>
<p>HUGO takes your content, which you can write in <a

	
	
		href = "https://en.wikipedia.org/wiki/Markdown"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Markdown
	</span>

</a>
 (a lightweight markup language), and your templates, which define the structure and design of your site, and combines them to generate a complete, static website. These websites are made up of prebuilt HTML files, making them very fast to load and easy to host.</p>
<p>Unlike dynamic site generators that require databases to store your site&rsquo;s content, HUGO works with files only. This means your website&rsquo;s content and layout are defined through text files, templates, and configurations without needing a database. This simplicity leads to increased security and ease of maintenance.</p>
<p>HUGO is highly customizable, allowing you to create websites that range from blogs and portfolios to documentation and company websites, all while providing a wide range of themes and plugins to enhance functionality and appearance.</p>
<p>It offers a live reload feature, which means you can see the changes you make in real-time as you develop your site. This makes the development process more intuitive and faster.</p>
<p>Since HUGO generates static websites, these sites are inherently secure, fast, and reliable. They can be hosted on any web server or services like GitHub Pages, Netlify, and Vercel, often with little to no cost for hosting.</p>
<h2 id="lets-hugo">Let&rsquo;s (hu)GO!</h2>
<h3 id="step-1-install-hugo">Step 1: Install HUGO</h3>
<p>Here is the <a

	
	
		href = "https://gohugo.io/installation/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		installation guide
	</span>

</a>
 from the official documentation.</p>
<h3 id="step-2-create-a-new-site">Step 2: Create a New Site</h3>
<ul>
<li>Open a terminal or command prompt.</li>
<li>Navigate to the directory where you want your site.</li>
<li>Run the following command:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new site mywebsite -f <span class="s2">&#34;yaml&#34;</span>
</span></span></code></pre></div><p>(replacing <code>mywebsite</code> with your desired site name)</p>
<h3 id="step-3-add-a-theme">Step 3: Add a Theme</h3>
<ul>
<li>Find a theme you like from <a

	
	
		href = "https://themes.gohugo.io/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		HUGO Themes
	</span>

</a>
.</li>
<li>Clone the theme into your project: e.g.</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/reorx/hugo-PaperModX themes/PaperModX --depth<span class="o">=</span><span class="m">1</span>
</span></span></code></pre></div><ul>
<li>Add the theme to your site&rsquo;s config file: <code>echo 'theme : nameOfYourTheme' &gt;&gt; config.yml</code>
<ul>
<li>e.g. <code>echo 'theme: PaperModX' &gt;&gt; config.yml</code></li>
<li>you can remove the <code>hugo.toml</code> file, since we are using yaml config instead</li>
</ul>
</li>
</ul>
<h3 id="step-4-add-content">Step 4: Add Content</h3>
<ul>
<li>cd into the <code>archetypes</code> folder and replace the contents of <code>defaults.md</code> with the following code:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">title </span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;{{ replace .File.ContentBaseName &#34;-&#34; &#34; &#34; | title }}&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">date </span><span class="p">:</span><span class="w"> </span>{{<span class="w"> </span><span class="l">.Date }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">draft </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w">
</span></span></span></code></pre></div><ul>
<li>Create a new post:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new posts/my-first-post.md
</span></span></code></pre></div><ul>
<li>Open the file in a text editor (<a

	
	
		href = "https://github.com/neovim/neovim"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		neovim btw
	</span>

</a>
)</li>
<li>You&rsquo;ll see some front matter at the top (the dashed lines)</li>
<li>Add your content below the front matter
<ul>
<li>It&rsquo;s important that you write your content in <a

	
	
		href = "https://www.markdownguide.org/basic-syntax/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		markdown
	</span>

</a>
 format</li>
</ul>
</li>
</ul>
<h3 id="step-5-start-the-hugo-server">Step 5: Start the HUGO Server</h3>
<ul>
<li>Run <code>hugo server </code> in your site directory.</li>
<li>Open a web browser and go to <code>http://localhost:1313</code> to see your site.</li>
</ul>
<h3 id="step-6-build-your-site">Step 6: Build Your Site</h3>
<ul>
<li>When ready to publish, run <code>hugo</code> to build your static site.</li>
<li>The output will be in the <code>public</code> directory, ready to be deployed to your hosting provider.</li>
<li>I have added an alias, to my .zshrc file, to update my website after building with the <code>hugo</code> command, with the help of rsync:</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">  <span class="nv">update_website</span><span class="o">=</span><span class="s2">&#34;rsync -vrP --delete-after /home/jonash/dotfiles/website/website/jonashxyz/public/ root@jonash.xyz:/var/www/jonashxyz/&#34;</span> <span class="se">\
</span></span></span></code></pre></div><ul>
<li>
<p>I got the alias from <a

	
	
		href = "https://lukesmith.xyz/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Luke Smith
	</span>

</a>
</p>
</li>
<li>
<p>I then made the following alias to automate the building and deploying:</p>
</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">alias</span> <span class="nv">hugo</span><span class="o">=</span><span class="s2">&#34;hugo &amp;&amp; update_website&#34;</span> <span class="se">\
</span></span></span></code></pre></div><ul>
<li>It&rsquo;s amazing.</li>
</ul>
<h3 id="congratulations">Congratulations!</h3>
<p>You&rsquo;ve just created a website with HUGO.</p>
<p>For more detailed instructions, visit the <a

	
	
		href = "https://gohugo.io/documentation/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		official HUGO documentation
	</span>

</a>
.</p>
<p>Also, read the documentation of your chosen theme, e.g. <a

	
	
		href = "https://reorx.github.io/hugo-PaperModX/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		PaperModX
	</span>

</a>
.</p>
<p>Good luck!</p>
<p>Links:</p>
<p>202403081313</p>
<p><a

	
	
		href = "https://go.dev/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://go.dev/
	</span>

</a>
</p>
<p><a

	
	
		href = "https://gohugo.io/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://gohugo.io/
	</span>

</a>
</p>
<p><a

	
	
		href = "https://en.wikipedia.org/wiki/Markdown"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://en.wikipedia.org/wiki/Markdown
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Unshackle Your Digital Life</title>
      <link>https://jonash.xyz/posts/how-to-live-an-unshackled-digital-life/</link>
      <pubDate>Sun, 10 Mar 2024 23:38:13 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/how-to-live-an-unshackled-digital-life/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Get a Google Pixel phone, so you can install &lt;a

	
	
		href = &#34;https://grapheneos.org/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		GrapheneOS
	&lt;/span&gt;

&lt;/a&gt;
. I recommend Google Pixel 6a. Very cheap and very good.
&lt;ul&gt;
&lt;li&gt;Get rid of all the apps you don&amp;rsquo;t need&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sync your data with &lt;a

	
	
		href = &#34;https://syncthing.net/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		SyncThing
	&lt;/span&gt;

&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create your own &lt;a

	
	
		href = &#34;https://landchad.net/nextcloud/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		NextCloud
	&lt;/span&gt;

&lt;/a&gt;
 server&lt;/li&gt;
&lt;li&gt;Use &lt;a

	
	
		href = &#34;https://github.com/vimwiki/vimwiki&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		VimWiki
	&lt;/span&gt;

&lt;/a&gt;
/&lt;a

	
	
		href = &#34;https://obsidian.md/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Obsidian
	&lt;/span&gt;

&lt;/a&gt;
 + vim/&lt;a

	
	
		href = &#34;https://github.com/neovim/neovim&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		neovim
	&lt;/span&gt;

&lt;/a&gt;
 to take notes in &lt;a

	
	
		href = &#34;https://www.markdownguide.org/getting-started/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		markdown
	&lt;/span&gt;

&lt;/a&gt;
, and take full ownership over your own data&lt;/li&gt;
&lt;li&gt;Use &lt;a

	
	
		href = &#34;https://en.wikipedia.org/wiki/Linux&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		Linux
	&lt;/span&gt;

&lt;/a&gt;
 on your personal computer(s)&lt;/li&gt;
&lt;li&gt;Use &lt;a

	
	
		href = &#34;https://www.passwordstore.org/&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		pass
	&lt;/span&gt;

&lt;/a&gt;
 to store your accounts/passwords&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t let &lt;a

	
	
		href = &#34;https://en.wikipedia.org/wiki/Proprietary_software&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		proprietary software
	&lt;/span&gt;

&lt;/a&gt;
 take your money and own YOUR data&lt;/li&gt;
&lt;li&gt;Never look back&lt;/li&gt;
&lt;/ol&gt;</description>
      <content:encoded><![CDATA[<ol>
<li>Get a Google Pixel phone, so you can install <a

	
	
		href = "https://grapheneos.org/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		GrapheneOS
	</span>

</a>
. I recommend Google Pixel 6a. Very cheap and very good.
<ul>
<li>Get rid of all the apps you don&rsquo;t need</li>
</ul>
</li>
<li>Sync your data with <a

	
	
		href = "https://syncthing.net/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		SyncThing
	</span>

</a>
</li>
<li>Create your own <a

	
	
		href = "https://landchad.net/nextcloud/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		NextCloud
	</span>

</a>
 server</li>
<li>Use <a

	
	
		href = "https://github.com/vimwiki/vimwiki"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		VimWiki
	</span>

</a>
/<a

	
	
		href = "https://obsidian.md/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Obsidian
	</span>

</a>
 + vim/<a

	
	
		href = "https://github.com/neovim/neovim"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		neovim
	</span>

</a>
 to take notes in <a

	
	
		href = "https://www.markdownguide.org/getting-started/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		markdown
	</span>

</a>
, and take full ownership over your own data</li>
<li>Use <a

	
	
		href = "https://en.wikipedia.org/wiki/Linux"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Linux
	</span>

</a>
 on your personal computer(s)</li>
<li>Use <a

	
	
		href = "https://www.passwordstore.org/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		pass
	</span>

</a>
 to store your accounts/passwords</li>
<li>Don&rsquo;t let <a

	
	
		href = "https://en.wikipedia.org/wiki/Proprietary_software"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		proprietary software
	</span>

</a>
 take your money and own YOUR data</li>
<li>Never look back</li>
</ol>
]]></content:encoded>
    </item>
    
    <item>
      <title>GRUB Bootloader</title>
      <link>https://jonash.xyz/posts/grub-bootloader/</link>
      <pubDate>Sun, 10 Mar 2024 19:17:15 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/grub-bootloader/</guid>
      <description>&lt;h2 id=&#34;first-of-all-what-is-grub&#34;&gt;First of all, what is GRUB?&lt;/h2&gt;
&lt;p&gt;GRUB is a boot loader, which lets you boot up your system. The abbreviation stands for GNU GRand Unified Bootloader, and is a boot loader package from the GNU Project. GRUB is the primary bootloader for many Linux distributions, allowing users to choose from multiple operating systems or different versions of the same operating system at boot time. It&amp;rsquo;s designed to be highly configurable and supports a wide range of operating systems, not just Linux.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="first-of-all-what-is-grub">First of all, what is GRUB?</h2>
<p>GRUB is a boot loader, which lets you boot up your system. The abbreviation stands for GNU GRand Unified Bootloader, and is a boot loader package from the GNU Project. GRUB is the primary bootloader for many Linux distributions, allowing users to choose from multiple operating systems or different versions of the same operating system at boot time. It&rsquo;s designed to be highly configurable and supports a wide range of operating systems, not just Linux.</p>
<h2 id="grub-features-include">GRUB features include:</h2>
<ul>
<li>The ability to boot multiple operating systems, including Linux, Windows, and macOS.</li>
<li>Support for reading data from various file systems, allowing it to load boot files from these file systems directly.</li>
<li>A flexible and powerful command-line interface that can be used to troubleshoot boot issues.</li>
<li>The capability to load operating systems from a network, which is particularly useful in managed IT environments.</li>
<li>A customizable menu interface that can display graphics and themes, allowing for a visually appealing boot menu.</li>
</ul>
<p>GRUB has evolved over time, with GRUB 2 being the successor to the original GRUB (referred to as GRUB Legacy). GRUB 2 offers improved modularity, portability, and features compared to its predecessor.</p>
<h2 id="why-make-this-guide">Why make this guide?</h2>
<p>The reason I made this simple guide is to help myself remember how to set up grub bootloader in <a

	
	
		href = "https://wiki.archlinux.org/title/Installation_guide#Boot_loader"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		Arch Linux installation guide, chapter 3.8
	</span>

</a>
.</p>
<h2 id="installing-grub-efi-in-arch-linux">Installing GRUB EFI in Arch Linux</h2>
<p>First off, we install some packages:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo pacman -S vim networkmanager grub efibootmgr dosfstools os-prober mtools
</span></span></code></pre></div><p>(Networkmanager is optional, but highly recommended)</p>
<h2 id="enablenetworkmanager">EnableNetworkManager</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">systemctl <span class="nb">enable</span> NetworkManager
</span></span></code></pre></div><h2 id="mount-efi-partition">Mount EFI-partition</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">mount --mkdir /dev/drive /boot/EFI
</span></span></code></pre></div><h2 id="install-grub">Install GRUB</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grub-install --target<span class="o">=</span>x86_64-efi --bootloader-id<span class="o">=</span>grub_uefi --efi-directory<span class="o">=</span>/boot/EFI --no-nvram --removable --recheck
</span></span></code></pre></div><h2 id="make-grub-config-file">Make grub config file</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">grub-mkconfig -o /boot/grub/grub.cfg
</span></span></code></pre></div><h2 id="reboot">Reboot</h2>
<ul>
<li>Exit the chroot environment by typing <code>exit</code> or pressing <code>Ctrl+d</code>.</li>
<li>Optionally manually unmount all the partitions with <code>umount -R /mnt</code>: this allows noticing any &ldquo;busy&rdquo; partitions, and finding the cause</li>
<li>Finally, restart the machine by typing <code>reboot</code>: any partitions still mounted will be automatically unmounted by <em>systemd</em>.</li>
<li>Remember to remove the installation medium and then login into the new system with the root account</li>
</ul>
<h2 id="links">Links:</h2>
<p><a

	
	
		href = "https://www.gnu.org/software/grub/"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://www.gnu.org/software/grub/
	</span>

</a>
</p>
<p><a

	
	
		href = "https://wiki.archlinux.org/title/Installation_guide#Boot_loader"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		https://wiki.archlinux.org/title/Installation_guide#Boot_loader
	</span>

</a>
</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Modern Linux Tools</title>
      <link>https://jonash.xyz/posts/modern-linux-tools/</link>
      <pubDate>Sat, 09 Mar 2024 14:03:56 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/modern-linux-tools/</guid>
      <description>&lt;h2 id=&#34;these-modern-linux-tools-might-enhance-your-workflow&#34;&gt;These modern Linux tools might enhance your workflow&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/sharkdp/fd&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		fd
	&lt;/span&gt;

&lt;/a&gt;
 is a simple and fast file search tool, enhancing the Unix &lt;code&gt;find&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/lsd-rs/lsd&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		lsd
	&lt;/span&gt;

&lt;/a&gt;
 is a modern replacement for &lt;code&gt;ls&lt;/code&gt;, enhancing file listing with better defaults.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/ogham/dog&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		dog
	&lt;/span&gt;

&lt;/a&gt;
 is a modern, feature-rich DNS client for the command-line.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/rofl0r/ncdu&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		ncdu
	&lt;/span&gt;

&lt;/a&gt;
 is a console disk usage analyzer for quick space management.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/sharkdp/bat&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		bat
	&lt;/span&gt;

&lt;/a&gt;
 is a &lt;code&gt;cat&lt;/code&gt; clone with syntax highlighting and Git integration for the command-line.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/chmln/sd&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		sd
	&lt;/span&gt;

&lt;/a&gt;
 is a simple and intuitive find-and-replace CLI tool, aiming to improve upon &lt;code&gt;sed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/bootandy/dust&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		dust
	&lt;/span&gt;

&lt;/a&gt;
 visualizes disk usage with an emphasis on clarity, acting as a more intuitive &lt;code&gt;du&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/ducaale/xh&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		xh
	&lt;/span&gt;

&lt;/a&gt;
 is a friendly and fast HTTP client for the terminal, inspired by &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;HTTPie&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a

	
	
		href = &#34;https://github.com/muesli/duf&#34;

		

	

	

		target = &#34;_blank&#34;
		rel = &#34;nofollow noopener noreferrer&#34;

		&gt;
	
	&lt;span&gt;
		duf
	&lt;/span&gt;

&lt;/a&gt;
is a modern disk usage utility for the command-line with an intuitive interface.&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<h2 id="these-modern-linux-tools-might-enhance-your-workflow">These modern Linux tools might enhance your workflow</h2>
<ul>
<li><a

	
	
		href = "https://github.com/sharkdp/fd"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		fd
	</span>

</a>
 is a simple and fast file search tool, enhancing the Unix <code>find</code> command.</li>
<li><a

	
	
		href = "https://github.com/lsd-rs/lsd"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		lsd
	</span>

</a>
 is a modern replacement for <code>ls</code>, enhancing file listing with better defaults.</li>
<li><a

	
	
		href = "https://github.com/ogham/dog"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		dog
	</span>

</a>
 is a modern, feature-rich DNS client for the command-line.</li>
<li><a

	
	
		href = "https://github.com/rofl0r/ncdu"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		ncdu
	</span>

</a>
 is a console disk usage analyzer for quick space management.</li>
<li><a

	
	
		href = "https://github.com/sharkdp/bat"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		bat
	</span>

</a>
 is a <code>cat</code> clone with syntax highlighting and Git integration for the command-line.</li>
<li><a

	
	
		href = "https://github.com/chmln/sd"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		sd
	</span>

</a>
 is a simple and intuitive find-and-replace CLI tool, aiming to improve upon <code>sed</code>.</li>
<li><a

	
	
		href = "https://github.com/bootandy/dust"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		dust
	</span>

</a>
 visualizes disk usage with an emphasis on clarity, acting as a more intuitive <code>du</code>.</li>
<li><a

	
	
		href = "https://github.com/ducaale/xh"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		xh
	</span>

</a>
 is a friendly and fast HTTP client for the terminal, inspired by <code>curl</code> and <code>HTTPie</code>.</li>
<li><a

	
	
		href = "https://github.com/muesli/duf"

		

	

	

		target = "_blank"
		rel = "nofollow noopener noreferrer"

		>
	
	<span>
		duf
	</span>

</a>
is a modern disk usage utility for the command-line with an intuitive interface.</li>
</ul>
]]></content:encoded>
    </item>
    
    <item>
      <title>What Is DevOps</title>
      <link>https://jonash.xyz/posts/what-is-devops/</link>
      <pubDate>Sat, 09 Mar 2024 13:09:52 +0100</pubDate>
      
      <guid>https://jonash.xyz/posts/what-is-devops/</guid>
      <description>&lt;p&gt;Development (Dev) and Operations (Ops), is a culture and mindset. It is also a software development and delivery approach, which emphasizes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Collaboration&lt;/li&gt;
&lt;li&gt;Integration&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal of DevOps is to improve and speed up the delivery of software applications and services. By fostering a culture where building, testing, and releasing software can happen rapidly, frequently, and more reliably, DevOps has become a key practice in the software industry.&lt;/p&gt;
&lt;h2 id=&#34;key-principles-of-devops&#34;&gt;Key Principles of DevOps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Continuous Integration (CI):&lt;/strong&gt; Developers merge their changes back to the main branch as often as possible. Automated tests run with these integrations to catch bugs quickly.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Development (Dev) and Operations (Ops), is a culture and mindset. It is also a software development and delivery approach, which emphasizes:</p>
<ul>
<li>Communication</li>
<li>Collaboration</li>
<li>Integration</li>
<li>Automation</li>
</ul>
<p>The goal of DevOps is to improve and speed up the delivery of software applications and services. By fostering a culture where building, testing, and releasing software can happen rapidly, frequently, and more reliably, DevOps has become a key practice in the software industry.</p>
<h2 id="key-principles-of-devops">Key Principles of DevOps</h2>
<ul>
<li>
<p><strong>Continuous Integration (CI):</strong> Developers merge their changes back to the main branch as often as possible. Automated tests run with these integrations to catch bugs quickly.</p>
</li>
<li>
<p><strong>Continuous Delivery (CD):</strong> This practice involves automatically deploying all code changes to a testing or staging environment after the build stage. It ensures that the software can be reliably released at any time.</p>
</li>
<li>
<p><strong>Automated Testing:</strong> Automation in testing reduces manual workload and speeds up the process of software development and deployment.</p>
</li>
<li>
<p><strong>Infrastructure as Code (IaC):</strong> Managing and provisioning infrastructure through code instead of through manual processes, improving operational efficiency and cloud management.</p>
</li>
<li>
<p><strong>Monitoring and Logging:</strong> Keeping track of the performance of applications and infrastructure to quickly respond to issues.</p>
</li>
<li>
<p><strong>Collaboration and Communication:</strong> Encouraging open communication and collaboration within and between teams to enhance the development process.</p>
</li>
</ul>
<h2 id="benefits-of-devops">Benefits of DevOps</h2>
<ul>
<li>
<p><strong>Faster Time to Market:</strong> Shortened development cycles lead to faster innovation and a quicker time to market.</p>
</li>
<li>
<p><strong>Improved Collaboration:</strong> Breaking down silos between teams enhances collaboration and efficiency.</p>
</li>
<li>
<p><strong>Increased Efficiency:</strong> Automation and streamlined workflows increase the efficiency of the development and deployment processes.</p>
</li>
<li>
<p><strong>Enhanced Quality:</strong> Continuous integration and delivery ensure that quality is maintained through frequent code updates and testing.</p>
</li>
<li>
<p><strong>Higher Customer Satisfaction:</strong> Rapid deliveries of updates and new features lead to higher customer satisfaction.</p>
</li>
</ul>
<p>DevOps is not just a set of practices, but a culture that needs to be adopted for its full potential to be realized. By embracing DevOps, organizations can enhance their ability to deliver applications and services at high velocity, thereby outpacing their competitors in today&rsquo;s fast-paced digital world.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
