<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:webfeeds="http://webfeeds.org/rss/1.0">
  <channel>
    <title>David Melo</title>
    <link>https://dmelo.eu/</link>
    <description>Recent content on David Melo</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 09 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dmelo.eu/index.xml" rel="self" type="application/rss+xml" />
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Limiting Concurrent TCP Connections in Rust with Tokio&#39;s Semaphore</title>
      <link>https://dmelo.eu/blog/rust_limit_number_tcp_connections/</link>
      <pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/rust_limit_number_tcp_connections/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_rust_limit_number_tcp_connections/post_post_rust_limit_number_tcp_connections_mini.png"/>
        &lt;p&gt;While building a TCP server (&lt;strong&gt;TcpListener&lt;/strong&gt;) in &lt;strong&gt;Rust&lt;/strong&gt;, I needed to process connections one at a time. I kept noticing that new connections were being accepted but never actually processed, they just hung in standby until the client gave up and disconnected. In this post, I will walk through a minimal TCP server that uses a &lt;strong&gt;Semaphore&lt;/strong&gt; to force max concurrent connections.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>ESP32-C6 Deep Sleep Power Consumption with Rust</title>
      <link>https://dmelo.eu/blog/esp32c6_deepsleep/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/esp32c6_deepsleep/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_esp32c6_deepsleep/esp32c6_deepsleep_mini.png"/>
        &lt;p&gt;In the future, I want to start building battery powered projects, so understanding power consumption becomes critical. In this post, I will explore &lt;strong&gt;deep sleep&lt;/strong&gt; power consumption on the &lt;strong&gt;ESP32-C6&lt;/strong&gt; board using Rust with &lt;strong&gt;Embassy&lt;/strong&gt; and &lt;strong&gt;Esp-hal&lt;/strong&gt;.
Beyond simply putting the board to sleep, I&amp;rsquo;ll also examine the key factors that affect deep sleep current on this board, such as providing the correct voltage to the battery pin.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Monitor Docker containers and other systems</title>
      <link>https://dmelo.eu/blog/beszel/</link>
      <pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/beszel/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_beszel/post_beszel_mini.png"/>
        &lt;p&gt;To keep an eye on my services and servers by &lt;strong&gt;monitoring&lt;/strong&gt; how resources are being used and whether something is about to break, I took some time to explore what tools and services exist that are &lt;strong&gt;open-source&lt;/strong&gt; and &lt;strong&gt;lightweight&lt;/strong&gt;. I found that &lt;strong&gt;Beszel&lt;/strong&gt; fits in nicely: it’s quick to deploy and easy to understand.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Read and Write Another Process’s Memory in Rust</title>
      <link>https://dmelo.eu/blog/rust_rw_proc_mem/</link>
      <pubDate>Sat, 13 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/rust_rw_proc_mem/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_rust_rw_proc_mem/post_rust_rw_proc_mem_mini.png"/>
        &lt;p&gt;Recently, I set out to explore how to read and write the &lt;strong&gt;memory&lt;/strong&gt; of a running process in &lt;strong&gt;Rust&lt;/strong&gt;. Programming isn’t just about writing code that runs—it’s also about understanding what happens under the hood. Sometimes it is necessary to understand how memory works, for debugging, or even implement a simple IPC mechanism without going through sockets or shared memory. This experiment turned into a neat experiment that combines Linux internals (&lt;strong&gt;process_vm_readv/process_vm_writev&lt;/strong&gt;), unsafe Rust, and a reminder of why process isolation is such an important security boundary.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Change the default storage location of Docker Engine to an external disk</title>
      <link>https://dmelo.eu/blog/docker_external_disk/</link>
      <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/docker_external_disk/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_docker_external_disk/post_docker_external_disk_mini.png"/>
        &lt;p&gt;&lt;strong&gt;Docker’s&lt;/strong&gt; default storage location (/var/lib/docker) can fill up quickly, especially on systems with limited space like a Raspberry Pi’s SD card. This guide walks you through installing &lt;strong&gt;Docker&lt;/strong&gt; on &lt;strong&gt;Debian&lt;/strong&gt; and moving its storage to an &lt;strong&gt;external disk&lt;/strong&gt; for better performance and management. Let’s dive in!&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Exploring Casdoor an Identity Access Management (IAM) / Single-Sign-On (SSO)</title>
      <link>https://dmelo.eu/blog/casdoor_test/</link>
      <pubDate>Thu, 06 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/casdoor_test/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_casdoor_test/post_casdoor_test_mini.png"/>
        &lt;p&gt;For future projects and out of personal curiosity, I want to explore authentication management platforms beyond Keycloak, which I’ve already used.
In this post, I’ll take a look at &lt;strong&gt;Casdoor&lt;/strong&gt;, an &lt;strong&gt;Identity and Access Management (IAM)&lt;/strong&gt; and &lt;strong&gt;Single Sign-On (SSO)&lt;/strong&gt; solution with a user-friendly UI, built in Go 😎.
I chose &lt;strong&gt;Casdoor&lt;/strong&gt; for its extensive third-party login support, customizable login themes, and a unique payment integration feature.
Let’s see how it performs! 🚀&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>ESP32 Net Sentinel Dongle</title>
      <link>https://dmelo.eu/blog/net_sentinel_dongle/</link>
      <pubDate>Sun, 24 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/net_sentinel_dongle/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_net_sentinel_dongle/post_net_sentinel_dongle_mini.png"/>
        &lt;p&gt;To sharpen my &lt;strong&gt;Rust&lt;/strong&gt; skills for embedded systems, I embarked on creating a project that uses &lt;strong&gt;Discord&lt;/strong&gt; (and soon &lt;strong&gt;MQTT&lt;/strong&gt;) to receive commands for network tasks.
Users can monitor devices, perform network scans, execute pings, send WOL packets and get alerts when applications running on edge devices fail.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>SVG animation</title>
      <link>https://dmelo.eu/blog/svg_animation/</link>
      <pubDate>Thu, 22 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/svg_animation/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_svg_animation/post_svg_animation_mini.png"/>
        &lt;p&gt;Recently, I needed to create some animated diagrams and discovered that it&amp;rsquo;s possible to animate &lt;strong&gt;SVG&lt;/strong&gt; images directly within the &lt;strong&gt;SVG&lt;/strong&gt; element itself. However, the process isn&amp;rsquo;t exactly straightforward. To simplify it, I decided to write this blog post to share my findings. I even developed a tool to make building SVG animations easier, which I’ll introduce as well.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Efficient Server Management: BIOS and Proxmox Automation</title>
      <link>https://dmelo.eu/blog/proxmox_auto-shutdown/</link>
      <pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/proxmox_auto-shutdown/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_proxmox_auto-shutdown/post_proxmox_auto-shutdown_mini.png"/>
        &lt;p&gt;I am preparing a new series of blog posts about my home server setup using an old &lt;strong&gt;Dell Latitude 5490&lt;/strong&gt;. This setup is designed to power on when a smart plug activates and to shut down safely when the plug turns off. To achieve this, I configured the &lt;strong&gt;BIOS settings&lt;/strong&gt; (power on) and set up a cronjob for &lt;strong&gt;Proxmox&lt;/strong&gt; (power off). This blog series will cover these configurations and the overall process.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Use a Sonoff as Dry Contact relay</title>
      <link>https://dmelo.eu/blog/sonoff_garage_door/</link>
      <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/sonoff_garage_door/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_sonoff_garage_door/post_sonoff_garage_door_mini.png"/>
        &lt;p&gt;Here at home, we lost all the garage door remotes. Since I had a spare &lt;strong&gt;Sonoff RFR3&lt;/strong&gt; lying around, I decided to modify it to be able to activate the garage button. But to do that, I had to make some modifications, as you&amp;rsquo;ll see later in this blog post.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Managing Docker Containers on Edge Devices with Portainer</title>
      <link>https://dmelo.eu/blog/portainer_agent/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/portainer_agent/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_portainer_agent/post_portainer_agent_mini.png"/>
        &lt;p&gt;Imagine having multiple devices running Docker containers. How do you effectively manage all these containers? Personally, I&amp;rsquo;ve found the solution with Portainer. I can have a master running the main program and multiple agents running on the devices. In this blog post, I will explain various setups that are possible.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Firebase &#43; Vite: Push Notifications Simplified</title>
      <link>https://dmelo.eu/blog/vite_pwa/</link>
      <pubDate>Sun, 07 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/vite_pwa/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_vite_pwa/post_vite_pwa_mini.png"/>
        &lt;p&gt;I wanted to explore the process of sending server messages to &lt;strong&gt;PWA&lt;/strong&gt; apps. In this blog post, I will guide you through the steps I took to set up this functionality using Vite.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Mosquitto passwd generator</title>
      <link>https://dmelo.eu/blog/mosquitto_passwd_gen/</link>
      <pubDate>Sun, 05 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/mosquitto_passwd_gen/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_mosquitto_passwd_gen/mosquitto_passwd_gen_mini.png"/>
        &lt;p&gt;Mosquitto, one of the widely used &lt;strong&gt;MQTT&lt;/strong&gt; brokers, offers robust user authentication through username and password combinations. However, creating password files using the official terminal tool &amp;lsquo;&lt;strong&gt;mosquitto_passwd&lt;/strong&gt;&amp;rsquo; can be a challenging task. To address this issue, I have developed an &lt;strong&gt;online tool&lt;/strong&gt; that simplifies this process, making it more accessible and user-friendly.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Receive MQTT messages in your browser and send commands to serial devices</title>
      <link>https://dmelo.eu/blog/m-serial/</link>
      <pubDate>Sat, 28 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/m-serial/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_m-serial/m-serial_cover_mini.png"/>
        &lt;p&gt;Use your &lt;strong&gt;web browser&lt;/strong&gt; to connect to an &lt;strong&gt;MQTT&lt;/strong&gt; broker and create alerts based on the messages that you receive. It is also possible to connect to a &lt;strong&gt;serial device&lt;/strong&gt; and send commands (e.g., make an LED blink) based on the alerts that you created. Another feature is the ability to receive messages from a &lt;strong&gt;serial device&lt;/strong&gt; and publish these messages to a specific topic with the help of a JavaScript decoder.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>CloudFlare DNS Service as a Dynamic DNS Provider (DDNS)</title>
      <link>https://dmelo.eu/blog/cloudflare_ddns/</link>
      <pubDate>Sat, 23 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/cloudflare_ddns/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_cloudflare_ddns/post_cloudflare_ddns_mini.png"/>
        &lt;p&gt;This week, I switched to a different telecommunications provider, which led to a &lt;strong&gt;dynamic public IP&lt;/strong&gt; address. Consequently, in today&amp;rsquo;s blog post, I will discuss the implementation of &lt;strong&gt;CloudFlare DNS Service&lt;/strong&gt; as a &lt;strong&gt;Dynamic DNS&lt;/strong&gt; provider. This configuration ensures that services hosted on the home network remain accessible to remote users through a stable and automatically updated domain name.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Creating the ideal development environment for ESP32 boards</title>
      <link>https://dmelo.eu/blog/post_rust_esp32_setup/</link>
      <pubDate>Sun, 17 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/post_rust_esp32_setup/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_rust_esp32_setup/post_rust_esp32_setup_mini.png"/>
        &lt;p&gt;Today I will share my journey of preparing a working environment to develop &lt;strong&gt;Rust&lt;/strong&gt; for &lt;strong&gt;Espressif&lt;/strong&gt; boards. Discover how I made the decision to work with Rust for embedded systems, a language known for its safety, speed, and reliability. I&amp;rsquo;ll also guide you through the process of preparing your development environment, like installing necessary tools, and configuring your workspace to program &lt;strong&gt;Rust&lt;/strong&gt; in &lt;strong&gt;VS Code&lt;/strong&gt; using &lt;strong&gt;Docker&lt;/strong&gt; &lt;strong&gt;Dev Containers&lt;/strong&gt;.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>PocketBase Piggy Bank</title>
      <link>https://dmelo.eu/blog/pocketbase_app/</link>
      <pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/pocketbase_app/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_pocketbase_app/post_pocketbase_app_mini.png"/>
        &lt;p&gt;&lt;strong&gt;PocketBase&lt;/strong&gt; is an open source Go backend that features an embedded database and an admin dashboard UI. As part of this project, I developed an app to manage a &lt;strong&gt;piggy bank&lt;/strong&gt; associated with the &lt;strong&gt;sale of products&lt;/strong&gt;. With this &lt;strong&gt;app&lt;/strong&gt; the users can register how many products they bought and also register the amount they left (charge) in the piggy bank by indicating the amount and taking a photo as proof.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Arduino SerialPort GUI built with Electron &#43; Vue</title>
      <link>https://dmelo.eu/blog/electron_arduino/</link>
      <pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/electron_arduino/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_electron_arduino/post_electron_arduino_mini.png"/>
        &lt;p&gt;Have you ever wanted to control or configure an &lt;strong&gt;Arduino&lt;/strong&gt; board using a user-friendly graphical interface? In this blog post, I will explain how to build a GUI with &lt;strong&gt;Electron&lt;/strong&gt; (a popular framework for building cross-platform desktop applications) and &lt;strong&gt;Vue&lt;/strong&gt;. With this application, you&amp;rsquo;ll be able to list Serial Devices and easily send data to an Arduino with a click of a button.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>My home VPN server setup</title>
      <link>https://dmelo.eu/blog/home_vpn_server/</link>
      <pubDate>Sun, 05 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/home_vpn_server/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_home_vpn_server/post_home_vpn_server_cover_mini.png"/>
        &lt;p&gt;In today&amp;rsquo;s digital age, many of us have smart devices or applications at home, but how can we access them from anywhere in the world without exposing them to potential threats? The answer is: with a VPN! A home VPN not only provides a secure and encrypted connection, but also allows us to access our home network, files, and devices remotely. In this blog post, I will share my home VPN setup and also explain how to use a DNS server to identify devices and applications using domain names instead of IP addresses.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Influxdb &#43; Telegraf &#43; MQTT - docker-compose</title>
      <link>https://dmelo.eu/blog/influxdb_telegraf_mqtt/</link>
      <pubDate>Sat, 11 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/influxdb_telegraf_mqtt/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_influxdb_telegraf_mqtt/influxdb_telegraf_mqtt_cover_mini.png"/>
        &lt;p&gt;Let’s assume that we have a lot of sensors publishing structured data to an &lt;strong&gt;MQTT&lt;/strong&gt; broker and we want to store this data in a database. A simple way to do that is to use &lt;strong&gt;Telegraf&lt;/strong&gt; (tool from InfluxData) to consume and process the data and store it in an &lt;strong&gt;InfluxDB&lt;/strong&gt; database. In this tutorial, I will explain how to prepare this setup using &lt;strong&gt;docker-compose&lt;/strong&gt;.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Redis TimeSeries &#43; Go &#43; gRPC &#43; Vue</title>
      <link>https://dmelo.eu/blog/redistimeseries_ui/</link>
      <pubDate>Fri, 20 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/redistimeseries_ui/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_redistimeseries_ui/redistimeseries_ui_cover_mini.jpg"/>
        &lt;p&gt;This post is complementary to the previous post of &lt;a href=&#34;https://dmelo.eu/blog/redistimeseries&#34;&gt;Redis TimeSeries&lt;/a&gt;, in which I explained the benefits of using Redis to store time series data. In comparison, instead of using Grafana to plot the data directly from Redis I will explore using gRPC-web to establish a connection between the backend written in Go and the frontend application written in Vue.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Redis TimeSeries &#43; Go: Structs to Key Values</title>
      <link>https://dmelo.eu/blog/redistimeseries/</link>
      <pubDate>Tue, 10 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/redistimeseries/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_redistimeseries/redistimeseries_cover_mini.jpg"/>
        &lt;p&gt;Most of you know Redis as a key-value database, but did you know there is a module that simplifies the use of Redis for time series use cases?
In this post I will explain a simple way to store time series data in Redis using Go and visualize it in Grafana. The Go script is designed to be easily adaptable to new use cases, like using a Raspberry Pi to save system metrics (it will reduce the number of write cycles in SD card because the data will be stored in RAM).&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Docker &#43; Port Scraper</title>
      <link>https://dmelo.eu/blog/portscraper&#43;docker/</link>
      <pubDate>Tue, 20 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/portscraper&#43;docker/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_portscraper&#43;docker/portscraper_cover&#43;docker.jpg"/>
        &lt;p&gt;This post is part of a series of a simple networking scanning tool named PortScraper. I will explain how to embed the application into Docker image and how to prepare the setup (PortScraper + MariaDB) with docker-compose.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Port Scraper</title>
      <link>https://dmelo.eu/blog/portscraper/</link>
      <pubDate>Tue, 13 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/blog/portscraper/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/img/post_portscraper/portscraper_cover.jpg"/>
        &lt;p&gt;I created this post to explain to you the steps that I did to setup a simple tool to scan a huge range of IPs and store the results in a MYSQL database using Go.&lt;/p&gt;
      </description>
    </item>
    
    <image>
        <url>https://dmelo.eu/logo.svg</url>
        <link>https://dmelo.eu/</link>
    </image>
    <webfeeds:cover image="https://dmelo.eu/img/cover.jpg" />
      <webfeeds:icon>https://dmelo.eu/logo.svg</webfeeds:icon>
    
      <webfeeds:logo>https://www.gravatar.com/avatar/f3a6caa0a9c43c387d72e731b47cf52f?s=110</webfeeds:logo>
    
    <webfeeds:accentColor>06091D</webfeeds:accentColor>
    <webfeeds:related layout="card" target="browser"/>
    <item>
      <title>Newsletter</title>
      <link>https://dmelo.eu/newsletter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://dmelo.eu/newsletter/</guid>
      <description>
        &lt;![CDATA[<img src="https://dmelo.eu/true"/>
        &lt;h1 id=&#34;newsletter&#34;&gt;Newsletter&lt;/h1&gt;
&lt;h4 id=&#34;subscribe-to-my-newsletter-and-stay-updated&#34;&gt;Subscribe to my newsletter and stay updated&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://dmelo.eu/img/newsletter/newsletter.jpeg#center&#34; alt=&#34;subscribe&#34;&gt;&lt;/p&gt;
      </description>
    </item>
    
  </channel>
</rss>