<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on Maciej Opaliński</title><link>https://mopalinski.com/</link><description>Recent content in Home on Maciej Opaliński</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>maciej@mopalinski.com (Maciej Opaliński)</managingEditor><webMaster>maciej@mopalinski.com (Maciej Opaliński)</webMaster><copyright>© 2026 Maciej Opaliński</copyright><atom:link href="https://mopalinski.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Technologies I use</title><link>https://mopalinski.com/technologies/</link><pubDate>Sat, 08 Apr 2023 01:25:55 +0200</pubDate><author>maciej@mopalinski.com (Maciej Opaliński)</author><guid>https://mopalinski.com/technologies/</guid><description>&lt;p&gt;Here are all the technologies that I use in my projects.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Programming Languages
 &lt;div id="programming-languages" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#programming-languages" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/cplusplus/cplusplus-original.svg" alt="C++" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg" alt="TypeScript" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/html5/html5-original-wordmark.svg" alt="HTML" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/css3/css3-original-wordmark.svg" alt="CSS" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/sass/sass-original.svg" alt="SASS" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/java/java-original-wordmark.svg" alt="Java" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/php/php-original.svg" alt="PHP" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original-wordmark.svg" alt="Python" /&gt;
&lt;/div&gt;

&lt;h2 class="relative group"&gt;Databases
 &lt;div id="databases" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#databases" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/postgresql/postgresql-original-wordmark.svg" alt="PostgreSQL" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.svgporn.com/logos/mariadb.svg" alt="MariaDB" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/redis/redis-original-wordmark.svg" alt="Redis" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/sqlite/sqlite-original-wordmark.svg" alt="SQLite" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/mongodb/mongodb-original-wordmark.svg" alt="MongoDB" /&gt;
&lt;/div&gt;

&lt;h2 class="relative group"&gt;Tools
 &lt;div id="tools" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tools" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/vscode/vscode-original-wordmark.svg" alt="Visual Studio Code" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/git/git-original-wordmark.svg" alt="Git" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/github/github-original-wordmark.svg" alt="GitHub" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/cmake/cmake-original-wordmark.svg" alt="CMake" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.svgporn.com/logos/turborepo.svg" alt="Turborepo" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/yarn/yarn-original-wordmark.svg" alt="Yarn" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.svgporn.com/logos/vitejs.svg" alt="Vite" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/babel/babel-original.svg" alt="Babel" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/jest/jest-plain.svg" alt="Jest" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/eslint/eslint-original-wordmark.svg" alt="ESLint" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.svgporn.com/logos/prettier.svg" alt="Prettier" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/figma/figma-original.svg" alt="Figma" /&gt;
 &lt;img class="w-36 p-2" src="https://static1.smartbear.co/swagger/media/assets/images/swagger_logo.svg" alt="Swagger" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/storybook/storybook-original-wordmark.svg" alt="Storybook" /&gt;
&lt;/div&gt;

&lt;h2 class="relative group"&gt;Libraries &amp;amp; Frameworks
 &lt;div id="libraries--frameworks" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#libraries--frameworks" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original-wordmark.svg" alt="Node.js" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original-wordmark.svg" alt="React.js" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/express/express-original-wordmark.svg" alt="Express.js" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nestjs/nestjs-original-wordmark.svg" alt="Nest.js" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nextjs/nextjs-original-wordmark.svg" alt="Next.js" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/bootstrap/bootstrap-plain-wordmark.svg" alt="Bootstrap" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/materialui/materialui-original.svg" alt="Material UI" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/socketio/socketio-original-wordmark.svg" alt="SocketIO" /&gt;
&lt;/div&gt;

&lt;h2 class="relative group"&gt;Self Hosted
 &lt;div id="self-hosted" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#self-hosted" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/docker/docker-original-wordmark.svg" alt="Docker" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nginx/nginx-original.svg" alt="Nginx" /&gt;
 &lt;img class="w-36 p-2" src="https://upload.wikimedia.org/wikipedia/commons/6/60/Nextcloud_Logo.svg" alt="Nextcloud" /&gt;
 &lt;img class="w-36 p-2" src="https://upload.wikimedia.org/wikipedia/commons/b/bb/Gitea_Logo.svg" alt="Gitea" /&gt;
 &lt;img class="w-36 p-2" src="https://upload.wikimedia.org/wikipedia/commons/a/a2/SyncthingLogoHorizontal.svg" alt="Syncthing" /&gt;
 &lt;img class="w-36 p-2" src="https://raw.githubusercontent.com/thelounge/thelounge/master/client/img/logo-vertical-transparent-bg.svg" alt="TheLounge" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/gitlab/gitlab-original-wordmark.svg" alt="GitLab" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/grafana/grafana-original-wordmark.svg" alt="Grafana" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/prometheus/prometheus-original-wordmark.svg" alt="Prometheus" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/hugo/hugo-original-wordmark.svg" alt="Hugo" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/wordpress/wordpress-original.svg" alt="WordPress" /&gt;
&lt;/div&gt;

&lt;h2 class="relative group"&gt;Other
 &lt;div id="other" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#other" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="flex flex-wrap justify-evenly"&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/linux/linux-original.svg" alt="Linux" /&gt;
 &lt;img class="w-36 p-2" src="linuxcnc.svg" alt="LinuxCNC" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/arduino/arduino-original-wordmark.svg" alt="Arduino" /&gt;
 &lt;img class="w-36 p-2" src="https://cdn.svgporn.com/logos/platformio.svg" alt="PlatformIO" /&gt;
&lt;/div&gt;
&lt;p&gt;All trademarks and logos are the property of their respective owners. They are used here for informational purposes only.&lt;/p&gt;</description></item><item><title>Booting Linux without an init system</title><link>https://mopalinski.com/posts/booting-linux-without-an-init-system/</link><pubDate>Thu, 06 Apr 2023 17:20:00 +0200</pubDate><author>maciej@mopalinski.com (Maciej Opaliński)</author><guid>https://mopalinski.com/posts/booting-linux-without-an-init-system/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;In a &lt;a href="https://mopalinski.com/posts/the-linux-boot-process-explained/" &gt;previous article&lt;/a&gt; I explained the Linux boot process. The last step of the Linux boot process is the execution of init system&amp;rsquo;s binary. But what if we don&amp;rsquo;t want to have a conventional init system? In this article, we are going to write our own &lt;code&gt;/init&lt;/code&gt; script.&lt;/p&gt;</description></item><item><title>The Linux Boot Process Explained</title><link>https://mopalinski.com/posts/the-linux-boot-process-explained/</link><pubDate>Wed, 05 Apr 2023 10:32:32 +0100</pubDate><author>maciej@mopalinski.com (Maciej Opaliński)</author><guid>https://mopalinski.com/posts/the-linux-boot-process-explained/</guid><description>&lt;h2 class="relative group"&gt;Introduction
 &lt;div id="introduction" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introduction" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;If you are reading this, you probably used Linux before. No matter if you are running some Linux distribution as a daily driver or not, you might use an Android phone that is using the Linux kernel. You also requested this website content from a server running Linux. But did you ever wonder how Linux works? In this article, I am going to explain one of the most fundamental aspects of Linux - its boot process.&lt;/p&gt;</description></item><item><title>About Me</title><link>https://mopalinski.com/about-me/</link><pubDate>Sun, 01 Jan 2023 00:00:00 +0100</pubDate><author>maciej@mopalinski.com (Maciej Opaliński)</author><guid>https://mopalinski.com/about-me/</guid><description>&lt;p&gt;I am a software engineer with a passion for web development and embedded programming. I also specialize in system administration and DevOps. I have experience with a &lt;a href="https://mopalinski.com/technologies/" &gt;wide range of technologies&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Contact</title><link>https://mopalinski.com/contact/</link><pubDate>Sun, 01 Jan 2023 00:00:00 +0100</pubDate><author>maciej@mopalinski.com (Maciej Opaliński)</author><guid>https://mopalinski.com/contact/</guid><description>&lt;h2 class="relative group"&gt;Email
 &lt;div id="email" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#email" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;The best way to contact me is by email: &lt;a href="mailto:maciej@mopalinski.com" &gt;maciej@mopalinski.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3 class="relative group"&gt;GPG
 &lt;div id="gpg" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#gpg" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;All legitimate emails from me will be signed with my GPG key. It is advised to encrypt your message with my GPG key prior to sending.&lt;/p&gt;</description></item></channel></rss>