<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Javier Barbaran</title>
    <description>The latest articles on DEV Community by Javier Barbaran (@javibarbaran).</description>
    <link>https://dev.to/javibarbaran</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F218589%2F06687e6b-ffc1-4743-83eb-048824134ff5.jpeg</url>
      <title>DEV Community: Javier Barbaran</title>
      <link>https://dev.to/javibarbaran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/javibarbaran"/>
    <language>en</language>
    <item>
      <title>Building a home server with a mini PC</title>
      <dc:creator>Javier Barbaran</dc:creator>
      <pubDate>Sat, 30 May 2026 21:53:54 +0000</pubDate>
      <link>https://dev.to/javibarbaran/building-a-home-server-with-a-mini-pc-48f0</link>
      <guid>https://dev.to/javibarbaran/building-a-home-server-with-a-mini-pc-48f0</guid>
      <description>&lt;p&gt;Having a server at home opens up a huge range of possibilities. I'd been thinking about setting one up for a while, and when I finally got started, I realised that half the process was simply deciding what to buy and what to install. So what is a home server actually good for? There are obvious advantages like cutting SaaS costs or gaining privacy, but there's one that matters more to me than all the others: &lt;em&gt;learning&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In this post I'll walk through the process, the options I considered and why I ended up building my server around a &lt;strong&gt;Beelink S12 Pro&lt;/strong&gt; running &lt;strong&gt;Proxmox VE&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a mini PC?
&lt;/h2&gt;

&lt;p&gt;The first decision is form factor. The most common options are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An old PC or laptop from the cupboard.&lt;/strong&gt; It works, but it's usually noisy, consumes a lot of power and takes up too much space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Raspberry Pi.&lt;/strong&gt; Small and incredibly power-efficient, but limited in RAM and processing power for running several services at once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A NAS.&lt;/strong&gt; A solid choice if storage is the main priority, but the price climbs quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A mini PC.&lt;/strong&gt; Small, silent, low power consumption, reasonable price. Clear winner.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The mini PCs I considered
&lt;/h2&gt;

&lt;p&gt;In 2025, there are three families that make sense for a home lab:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intel N95 / N100&lt;/strong&gt; is probably the most popular choice right now for this kind of use. Very good energy efficiency, full virtualisation support and highly competitive prices. The N100 is more efficient than the N95; the N95 wins slightly on raw performance but at the cost of a bit more power draw. There are countless manufacturers building models around these chips, and the difference between them is usually minimal: what varies is the connectivity, the stock RAM and the after-sales support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mac Mini&lt;/strong&gt; deserves a mention because it's one of the most well-known options on the market. Performance is excellent and power consumption is surprisingly low, but for me the problem is the price — clearly higher than a Chinese mini PC — and I don't need something like that to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fanless mini PCs&lt;/strong&gt; (no fan). Fully passive models exist, and they're very quiet as a result. The downside is that passive cooling limits sustained performance and adds a noticeable premium to the price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The final decision: Beelink S12 Pro
&lt;/h2&gt;

&lt;p&gt;I went with the &lt;strong&gt;Beelink S12 Pro&lt;/strong&gt; running an &lt;strong&gt;Intel N100&lt;/strong&gt;. The reasons were straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good value for money&lt;/li&gt;
&lt;li&gt;Very low power consumption&lt;/li&gt;
&lt;li&gt;16 GB of RAM&lt;/li&gt;
&lt;li&gt;NVMe SSD included&lt;/li&gt;
&lt;li&gt;Compact size&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcocq5gzer9sl1722td5u.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcocq5gzer9sl1722td5u.webp" alt=" " width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The downside is that there's no dedicated GPU, so AI workloads are limited to small models that run reasonably on CPU. It's not the most powerful mini PC on the market, but it's one of the most balanced for a home lab. My goal isn't to run enterprise infrastructure — it's to run several services reliably and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating system
&lt;/h2&gt;

&lt;p&gt;With the hardware sorted, the next question was what to install. There are basically three paths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux + Docker directly&lt;/strong&gt; is the most popular option and the easiest to understand. You install Debian or Ubuntu Server, spin up services with Docker Compose and you're done. It works very well, but everything shares the same host: if something goes wrong at the OS level, everything goes down together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TrueNAS or Unraid&lt;/strong&gt; are interesting when the focus is a home NAS and your own personal cloud storage. That wasn't my use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proxmox VE&lt;/strong&gt; was something I'd never heard of before — and yet it's what I chose. It's a virtualisation platform based on Debian that lets you manage virtual machines and LXC (&lt;a href="https://en.wikipedia.org/wiki/LXC" rel="noopener noreferrer"&gt;LinuX Containers&lt;/a&gt;) containers from a fairly comfortable web interface. The main advantage is isolation: each service lives in its own environment. If I break a container, everything else keeps running. If I want to experiment with something unusual, I do it in a throwaway VM and delete it without a trace.&lt;/p&gt;

&lt;p&gt;It's not the simplest option to start with, but the learning curve pays for itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Proxmox VE
&lt;/h2&gt;

&lt;p&gt;The installation process is simpler than it looks. Proxmox ships its system as an ISO image, so the first step is writing it to a USB drive.&lt;/p&gt;

&lt;p&gt;On Windows, the most convenient tool for this is &lt;strong&gt;Balena Etcher&lt;/strong&gt;: download the ISO from the official Proxmox website, open Etcher, select the image and the drive, and in a few minutes you have a working installer. No fuss.&lt;/p&gt;

&lt;p&gt;With the USB drive ready, it's time to boot the Beelink from it. To do that you need to access the system's boot menu: on the S12 Pro, you do this by pressing the right key immediately after powering on (in my case &lt;strong&gt;F7&lt;/strong&gt;, though it can vary by model). From there you select the USB drive as the boot device and the Proxmox installer loads on its own.&lt;/p&gt;

&lt;p&gt;The installer itself is a fairly guided graphical wizard. It basically asks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The disk to install the system on&lt;/li&gt;
&lt;li&gt;Network configuration (IP address, gateway, DNS)&lt;/li&gt;
&lt;li&gt;The node name&lt;/li&gt;
&lt;li&gt;A password for the root user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ten minutes later the system is installed. You pull out the USB drive, the machine reboots and you can access the Proxmox web interface from any browser on your local network at &lt;code&gt;https://SERVER-IP:8006&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5c53ndolzvv8aise0se.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5c53ndolzvv8aise0se.webp" alt=" " width="799" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From that point on, everything is managed from the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key concepts in Proxmox VE
&lt;/h2&gt;

&lt;p&gt;Before starting to deploy services, there are two concepts worth understanding properly.&lt;/p&gt;

&lt;h3&gt;
  
  
  LXC: lightweight containers
&lt;/h3&gt;

&lt;p&gt;LXC containers share the host system's kernel. This means lower memory usage, lower CPU overhead and almost instant startup. They're ideal for lightweight services like DNS servers, proxies or any application that doesn't need a very specific environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  VMs: full virtual machines
&lt;/h3&gt;

&lt;p&gt;Virtual machines run completely independently, with their own kernel and operating system. In exchange, they consume more resources and take longer to start. They're the right choice when you need maximum compatibility or isolation, or when the application itself recommends it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What do I use?
&lt;/h3&gt;

&lt;p&gt;My approach is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If something can run comfortably in an LXC, I run it in an LXC.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I only use virtual machines when they offer a clear advantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the server is organised
&lt;/h2&gt;

&lt;p&gt;My current setup is fairly straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;proxmox-node
│
├── CT 100 - alpine-adguard
├── CT 101 - tailscale
├── CT 102 - n8n
├── CT 103 - ollama
├── CT 104 - postgresql
│
└── VM 200 - home-assistant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lightweight services in LXC, more complex services in VMs. This keeps resource usage under control and makes administration simpler.&lt;/p&gt;

&lt;h2&gt;
  
  
  Services I'm running
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AdGuard Home
&lt;/h3&gt;

&lt;p&gt;Acts as a DNS server for my entire home network. It blocks ads at the network level, filters domains and gives visibility into the DNS traffic of every connected device. Deployed in an LXC container, it barely uses any resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  Home Assistant
&lt;/h3&gt;

&lt;p&gt;It's always caught my interest — it's a home automation management system. Where it really shines is in automations: it also collects data from sensors and integrates with practically any smart device you have at home. In this case I used a virtual machine because that's what Home Assistant recommends.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tailscale
&lt;/h3&gt;

&lt;p&gt;A VPN that lets me access my home network from anywhere without opening ports. Setup is very straightforward and connections are secure.&lt;/p&gt;

&lt;h3&gt;
  
  
  n8n
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://n8n.io" rel="noopener noreferrer"&gt;n8n&lt;/a&gt; is a workflow automation tool, similar in concept to Zapier or Make, but one you can self-host. It lets you connect applications and services together through a visual node-based interface and build fairly complex automations without writing code. It's one of the services I've been getting the most out of lately.&lt;/p&gt;

&lt;h3&gt;
  
  
  PostgreSQL
&lt;/h3&gt;

&lt;p&gt;Most of the services I set up end up needing some kind of database, and I'd rather have a single centralised PostgreSQL instance than spin up a separate database per container. It's cleaner, easier to maintain and backups become much simpler.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ollama
&lt;/h3&gt;

&lt;p&gt;With all the AI hype right now, I wanted to experiment with local AI. I've installed Ollama with a few small models to run tests. One important caveat: an Intel N100 was not designed for this. That said, it's perfectly valid for learning, running experiments and using lightweight models — all without depending on external services.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I might add later
&lt;/h2&gt;

&lt;p&gt;As with any home lab, the list of ideas never ends. Some possibilities on my radar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jellyfin&lt;/li&gt;
&lt;li&gt;Nextcloud&lt;/li&gt;
&lt;li&gt;Grafana + Prometheus&lt;/li&gt;
&lt;li&gt;Immich&lt;/li&gt;
&lt;li&gt;Nginx Proxy Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now I'm trying to keep things simple and only add new services when I actually need them. And being realistic, my Beelink can't handle much more — but maybe in the future I'll upgrade to a more powerful device or even a proper NAS… who knows!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up a home server with a mini PC turned out to be much simpler than I expected. The Beelink S12 Pro offers plenty of power for a wide range of home services, and Proxmox VE provides the flexibility to experiment without fear of breaking anything.&lt;/p&gt;

&lt;p&gt;The combination of the two has let me build a stable, efficient and — above all — enjoyable platform to maintain. And as tends to happen in the world of self-hosting, once you start there's always another service to try.&lt;/p&gt;

&lt;p&gt;First published in (&lt;a href="https://javierbarbaran.com/en/posts/homeserver/)%5Bhttps://javierbarbaran.com/en/posts/homeserver/%5D" rel="noopener noreferrer"&gt;https://javierbarbaran.com/en/posts/homeserver/)[https://javierbarbaran.com/en/posts/homeserver/]&lt;/a&gt;&lt;/p&gt;

</description>
      <category>proxmox</category>
      <category>homeserver</category>
      <category>productivity</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>How to build a personal blog without paying a single euro</title>
      <dc:creator>Javier Barbaran</dc:creator>
      <pubDate>Sat, 19 Apr 2025 15:53:39 +0000</pubDate>
      <link>https://dev.to/javibarbaran/how-to-build-a-personal-blog-without-paying-a-single-euro-3adc</link>
      <guid>https://dev.to/javibarbaran/how-to-build-a-personal-blog-without-paying-a-single-euro-3adc</guid>
      <description>&lt;p&gt;Most people who needs a blog or a personal website would normally use a CMS (Content Management System). There are a bunch of very well known options, such as, WordPress, Blogger, Wix, Drupal, Joomla, Ghost, Jekyll, or Hugo. However, many of these options come with recurring fees or annoying ads. But what if I told you that you don’t have to pay a single cent to have a fast, and professional blog? And what if that blog could be hosted for free?&lt;/p&gt;

&lt;p&gt;So, either if you already have a blog or you are considering on making one, keep reading, I'm sure you'll find this post very insteresting.&lt;/p&gt;

&lt;p&gt;As developers, we have the knowledge and tools to create our own digital space without spending a single euro. The reality is that most of us still pay for our websites.&lt;/p&gt;

&lt;p&gt;In this post, &lt;em&gt;I’ll walk you through my journey from WordPress to switching to Hugo, an open-source static site generator that I now use for my personal blog.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Journey towards Hugo CMS
&lt;/h2&gt;

&lt;p&gt;I’ve been running a personal website since 2008 using WordPress, and it is an amazing software. No need to say more when WordPress by itself powers around 30% of the websites worldwide!!!. &lt;/p&gt;

&lt;p&gt;But I always wanted to have my site multilingual,and doing so things get complicated or more expensive. That's when I decided to look for a different approach.&lt;/p&gt;

&lt;p&gt;After doing some research I discovered Hugo CMS: An open-source, static site generator with amazing multilingual support. And the best part? It's completely free!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Hugo?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8vr1dthlhfzh7gplp3r.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8vr1dthlhfzh7gplp3r.webp" alt="Image Hugo logo" width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hugo is a headless CMS based on Markdown, and it has a huge community of developers who share a variety of themes. It's incredibly fast and doesn't require you to write a single line of code to get started. You just need to set up a configuration file and you're good to go.&lt;/p&gt;

&lt;p&gt;It's also a static CMS, which means your site will no depend on databases, serving pure HTML, making it super fast and easy to host anywhere, for free!&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with Hugo
&lt;/h2&gt;

&lt;p&gt;Setting up Hugo is straightforward, check out this &lt;a href="https://gohugo.io/getting-started/quick-start/" rel="noopener noreferrer"&gt;link&lt;/a&gt;. Here’s how to do it in just a few steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Install Hugo: Follow the installation guide &lt;a href="https://gohugo.io/installation/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose a Theme: Browse the themes at &lt;a href="https://themes.gohugo.io/" rel="noopener noreferrer"&gt;Hugo Themes&lt;/a&gt;. I personally recommend PaperMod, which is the one I chose.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure Your Site: Adjust the configuration file (TOML or YAML) to match your preferences. You can find an example of my configuration for PaperMod &lt;a href="https://github.com/jbarbaran/hugoblog/blob/main/hugo.toml" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Preview Locally: Run hugo serve and visit &lt;a href="http://localhost:1313/" rel="noopener noreferrer"&gt;http://localhost:1313/&lt;/a&gt; to see your site live on your computer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you are happy with the result, go live! (keep reading!)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hosting Your Hugo Blog for Free
&lt;/h2&gt;

&lt;p&gt;Now that you’ve created an amazing blog, it's time to share it with the world!&lt;/p&gt;

&lt;p&gt;Here are some of the best free hosting options for static sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt;: Host your site directly from a GitHub repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare Pages&lt;/a&gt;: I personally recommend Cloudflare Pages for its great performance and custom domain support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt; and &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;: Both offer fast and free hosting with easy integration.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(I may have missed some other interesting options, if you know others please share them down bellow, in comments!)&lt;/p&gt;

&lt;p&gt;In my case, I compared all the previous options and I chose &lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer"&gt;Cloudflare pages&lt;/a&gt;, which it seems to me like the best option. &lt;/p&gt;

&lt;p&gt;How to do it? Again, it is rather easy and it is very well documented. Just follow &lt;a href="https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/" rel="noopener noreferrer"&gt;this guide&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Just remark that you have to use git and upload the source code of your website to GitHub and doing so, every time you push your changes to your repo Cloudflare detects it automatically and publish it instantly.&lt;/p&gt;

&lt;p&gt;By the way, my website is &lt;a href="https://javierbarbaran.com" rel="noopener noreferrer"&gt;javierbarbaran.com&lt;/a&gt;. I'd love to hear what you think, and I encourage you to share your experience if you decide to go this route!&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>developers</category>
      <category>website</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Advent of Code 2024</title>
      <dc:creator>Javier Barbaran</dc:creator>
      <pubDate>Sat, 30 Nov 2024 08:33:10 +0000</pubDate>
      <link>https://dev.to/javibarbaran/advent-of-code-2024-26mm</link>
      <guid>https://dev.to/javibarbaran/advent-of-code-2024-26mm</guid>
      <description>&lt;p&gt;🎁 🎶 It's beginging to look a lot like Christmas.... 🎶 🎄&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4fx3fnz0jwyp1ymtt8y.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4fx3fnz0jwyp1ymtt8y.gif" alt="Alt Animated GIF Duggee exited about Christmas" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since 2020, when I first discovered Advent of Code &lt;a href="https://adventofcode.com/" rel="noopener noreferrer"&gt;adventofcode.com&lt;/a&gt;, I can't help but feel excited as November ends. Every year, I start planning which programming language, IDE, or technology I’ll use for this fun and challenging event.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Advent of Code (AoC)?
&lt;/h2&gt;

&lt;p&gt;Wait... you don’t know what Advent of Code is? No worries, let me explain!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://adventofcode.com/" rel="noopener noreferrer"&gt;adventofcode.com&lt;/a&gt; is a website created by Eric Wastl where, from December 1st to December 25th, a daily programming puzzle is published. These puzzles can be solved with code, and they range from simple to complex as the days progress. If you enjoy programming, it’s an incredibly fun experience!. For a sneak peak, check out puzzles from previous years &lt;a href="https://adventofcode.com/2024/events" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For me, Advent of Code has become a tradition that marks the beginning of the Christmas season.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit93kt1d1r74wrso7pit.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fit93kt1d1r74wrso7pit.gif" alt="Alt Animated GIF Carlton Banks dancing for Christmas" width="245" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to approach Advent Of Code
&lt;/h2&gt;

&lt;p&gt;Advent of Code can be a great opportunity to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn a new programming language or get comfortable with a new IDE.&lt;/li&gt;
&lt;li&gt;Sharpen your skills with algorithms, recursion, optimization, and more.&lt;/li&gt;
&lt;li&gt;Just have fun coding with the language and tools you already love!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re diving into something new or sticking with what you know, the key is to enjoy the journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why join the challenge?
&lt;/h2&gt;

&lt;p&gt;There are several reason for taking this challenge, however the most important one is: &lt;strong&gt;to have fun!&lt;/strong&gt;. Beyond that, it is an excellent opportunity to sharpen your skills. I totally recommend it, either if you are beginner in coding, or either you are an experienced developer, the challenges will push you and broaden your knowledge!&lt;/p&gt;

&lt;h2&gt;
  
  
  You are not alone!
&lt;/h2&gt;

&lt;p&gt;Lets be real, it’s not a walk in the park, and as days go by, the puzzles are more complex so you have to spend for time solving it.  There is a huge range of algorithms covered, recursivity, optimization, branch and bound, ... so it is rather complicated to get to the whole advent of calendar.&lt;/p&gt;

&lt;p&gt;When you get stuck (because let’s face it, it happens to everyone),we must not forget that there is a active and supportive community in &lt;a href="https://www.reddit.com/r/adventofcode/" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  My setup for 2024
&lt;/h2&gt;

&lt;p&gt;This year, I’ve decided to use &lt;strong&gt;C# with the latest .NET version in Visual Studio Code, and also Dev Containers&lt;/strong&gt;. Why? &lt;a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="noopener noreferrer"&gt;dev containers in Visual Studio&lt;/a&gt; offer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A consistent, isolated development environment.&lt;/li&gt;
&lt;li&gt;Security and ease of managing dependencies.&lt;/li&gt;
&lt;li&gt;The ability to keep my base OS clean, regardless of the tools or languages I’m using.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With a busy schedule, I need something efficient, and this setup feels like the perfect balance of productivity and fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;What about you? Will you participate this year? Is it your first time, or are you a regular participant? I’d love to hear about your plans, tech stack, and experiences in the comments below!&lt;/p&gt;

&lt;p&gt;If you enjoyed this post, please leave a like and share your thoughts. Happy coding, and good luck with Advent of Code!&lt;/p&gt;

</description>
      <category>adventofcode</category>
      <category>algorithms</category>
      <category>coding</category>
      <category>christmas</category>
    </item>
    <item>
      <title>Ubuntu Setup Essentials: First Steps After Installing on a 2015 MacBook Air</title>
      <dc:creator>Javier Barbaran</dc:creator>
      <pubDate>Sun, 10 Nov 2024 15:25:03 +0000</pubDate>
      <link>https://dev.to/javibarbaran/ubuntu-setup-essentials-first-steps-after-installing-on-a-2015-macbook-air-27jh</link>
      <guid>https://dev.to/javibarbaran/ubuntu-setup-essentials-first-steps-after-installing-on-a-2015-macbook-air-27jh</guid>
      <description>&lt;p&gt;In the first part of this series I showed how easy it was and the great performance I got when installing Ubuntu 24.04 LTS on a 2015 MacBook Air to give it a new lease on life. &lt;/p&gt;

&lt;p&gt;The turn over is.... Surprise! As I mentioned before, all the laptop's functionality works perfectly! Plus, the system speed is noticeably better compared to macOS. And that is awesome.&lt;/p&gt;

&lt;p&gt;Now that I have a fresh Ubuntu installation, what are the next steps? There are a ton of very professional websites showing advanced first steps in Linux in general (deleting unused users, securing root, enabling SSH access, setting up a firewall, among a lot others). After researching online, I've compiled a list of essential and straight-forward first tasks:&lt;/p&gt;

&lt;h2&gt;
  
  
  Update the System
&lt;/h2&gt;

&lt;p&gt;Keeping your system updated is essential for getting the latest security patches and an optimized experience.&lt;/p&gt;

&lt;p&gt;First, refresh your local package index by running the following command in the terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, upgrade your packages to the latest versions with this command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo apt upgrade&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally, open the Software Center to check if any installed applications have pending updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fllw18i6y0z72krcnpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fllw18i6y0z72krcnpy.png" alt="Applications centre updates" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Familiar with the GNOME Desktop
&lt;/h2&gt;

&lt;p&gt;Even though I’ve used Linux—and specifically Ubuntu—before, I mostly use Windows on a daily basis. GNOME is quite intuitive, but it's a good idea to spend a few minutes exploring its options, menus, applications, and getting comfortable with the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customize the Desktop&lt;/strong&gt;&lt;br&gt;
In the Settings menu, you'll find tools to personalize the system. The &lt;strong&gt;Appearance&lt;/strong&gt; section is especially useful, allowing you to switch to dark mode, change the wallpaper, and adjust the dock’s position.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cwxfvf41goi34umz736.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6cwxfvf41goi34umz736.png" alt="Ubuntu appearance setup" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Your Preferred Software
&lt;/h2&gt;

&lt;p&gt;The easiest way to install software is through the Software Center, which includes many popular applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm94sz3auf8veyhw6tnqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm94sz3auf8veyhw6tnqi.png" alt="Ubuntu applications centre" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my case, I've already installed some essentials that I frequently use and will add more as needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brave – This browser looks promising, and I’m eager to try it. Ubuntu comes with Firefox by default.&lt;/li&gt;
&lt;li&gt;Visual Studio Code – A versatile code editor and development environment.&lt;/li&gt;
&lt;li&gt;Element – A Matrix client for decentralized communication.&lt;/li&gt;
&lt;li&gt;Prioritize Security: Enable and Configure the Firewall&lt;/li&gt;
&lt;li&gt;Ubuntu includes UFW (Uncomplicated Firewall), which is simple to configure and effective. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuring Ubuntu Firewall (UFW, Uncomplicated Firewall)
&lt;/h2&gt;

&lt;p&gt;UFW (Uncomplicated Firewall) does not have its own web interface for configuration, so it is generally managed from the terminal in Linux operating systems. It is a firewall tool designed to be simple and easy to use, especially on Ubuntu and similar distributions, and it allows for simplified firewall rule management through command-line commands. Therefore, I'm going to provide here a few basic steps to configure it.&lt;/p&gt;

&lt;p&gt;To check the current firewall status:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ufw status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By default, it will be inactive, so activate it with this command &lt;strong&gt;&lt;em&gt;(NOTE: Do not activate it if you're connected to the Ubuntu via SSH or you would lose connectivity with it)&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, set a basic policy by denying incoming connections by default and allowing outgoing ones:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ufw default deny incoming&lt;br&gt;
sudo ufw default allow outgoing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, allow exceptions to browse the web (enabling HTTP and HTTPS ports) and to access the device via SSH:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo ufw allow http&lt;br&gt;
sudo ufw allow https&lt;br&gt;
sudo ufw allow ssh&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Steps
&lt;/h2&gt;

&lt;p&gt;Many guides mention the option of enabling &lt;strong&gt;Flatpak&lt;/strong&gt;, an alternative to Snap, which is Ubuntu's default package manager. Each has its pros and cons, so it’s a good idea to research both before making a choice. &lt;a href="https://itsfoss.com/flatpak-vs-snap/" rel="noopener noreferrer"&gt;You can find more details about these package systems in this link&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;My last experience with Ubuntu was a few years ago, and returning to it now, I’m impressed with its evolution. Compatibility with older hardware has improved, and today it offers a much smoother and efficient experience. For me, installing Ubuntu on my MacBook Air has been a success: it went from barely usable to fast, user-friendly, and fully compatible.&lt;/p&gt;

&lt;p&gt;With the steps outlined here, you have a solid foundation to start exploring Ubuntu.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Reviving a 2015 MacBook Air with Ubuntu: A Step-by-Step Guide to Breathe New Life into Your Old Mac</title>
      <dc:creator>Javier Barbaran</dc:creator>
      <pubDate>Wed, 06 Nov 2024 20:30:06 +0000</pubDate>
      <link>https://dev.to/javibarbaran/reviving-a-2015-macbook-air-with-ubuntu-a-step-by-step-guide-to-breathe-new-life-into-your-old-mac-52c9</link>
      <guid>https://dev.to/javibarbaran/reviving-a-2015-macbook-air-with-ubuntu-a-step-by-step-guide-to-breathe-new-life-into-your-old-mac-52c9</guid>
      <description>&lt;p&gt;I have a 2015 MacBook Air with an Intel i5-5240U processor, 4GB of RAM, and a 128GB hard drive. Although I kept it updated with the latest macOS versions (increasingly difficult due to limited disk space), and that was a mistake. This caused the MacBook to slow down drastically, to the point that I barely used it anymore… basically, it became a glorified paperweight.&lt;/p&gt;

&lt;p&gt;The installation and user experience with Ubuntu has improved significantly since I last tried it about six or seven years ago. The process is super straightforward and efficient. Thanks to Ubuntu, my laptop has regained its speed! Here’s the step-by-step installation process:&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An old laptop or computer&lt;/strong&gt; (in this case, a MacBook Air 2015).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A USB drive with at least 8GB capacity&lt;/strong&gt; (I used a 128GB one, which is more than enough).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Ubuntu Installation Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Download Ubuntu: Start by downloading the Ubuntu image from its official website. You can do this from the MacBook itself (if it’s still usable) or from another computer, as I did. &lt;strong&gt;Which version to choose?&lt;/strong&gt; I recommend the latest LTS (Long-Term Support) version, which offers five years of maintenance and security updates. I installed Ubuntu 24.04 LTS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a bootable USB: The downloaded image will be in .iso format, which is a disk image. To create the bootable USB on Windows, I used Balena Etcher, which is straightforward and effective. This software has three main steps:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0674jzzh8wh5idotx4cy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0674jzzh8wh5idotx4cy.jpg" alt="Balena Etcher application screenshot" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Select the image:&lt;/strong&gt; Click on “Flash from file” and choose the .iso file you downloaded.&lt;br&gt;
&lt;strong&gt;- Select the target drive:&lt;/strong&gt; Make sure you pick the USB drive and not your computer’s hard drive.&lt;br&gt;
&lt;strong&gt;- Start the process:&lt;/strong&gt; Confirm everything is set, and click “Flash.” Writing and verification may take a few minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmtl2o66gvkl7w16haue.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmtl2o66gvkl7w16haue.jpeg" alt="Balena Etcher flashing screenshot" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Ubuntu on the MacBook
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Boot from the USB drive: Connect the USB drive to the MacBook (which should be powered off), then turn it on while holding down the Option/Alt (⌥) key. You’ll see a list of recognized bootable drives, and you should select the USB icon. &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufsasofq2wy14udisqht.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufsasofq2wy14udisqht.jpeg" alt="Macbook boot load" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test before installing: Once Ubuntu loads, you’ll have two options: “Try” or “Install Ubuntu.” I recommend choosing “Try” to check if it recognizes all essential drivers. In my case, everything worked! From the backlit keyboard to the trackpad, WiFi, and special function keys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install Ubuntu: When you’re ready, click on the install icon on the Ubuntu desktop. The process is entirely guided and intuitive. You’ll only need to select language, keyboard configuration, and timezone. After a few minutes, Ubuntu was installed and ready to go.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Results and Conclusions
&lt;/h2&gt;

&lt;p&gt;And voilà! My MacBook Air feels like new. With Ubuntu, its performance is much smoother, boot times are quick, and the user experience is excellent. While I didn’t perform benchmark tests before wiping macOS, I can assure you the difference is incredible: the laptop flies!&lt;/p&gt;

&lt;p&gt;So, if you have an old computer and think your only options are recycling or discarding it, consider installing Linux. You could give it a second life with Ubuntu, Mint, or any other distribution. My recommendation is Ubuntu because, as I mentioned, the process was easy and the results fantastic.&lt;/p&gt;

&lt;p&gt;Until next time!&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ubuntu</category>
      <category>linux</category>
      <category>macbook</category>
    </item>
  </channel>
</rss>
