<?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>Forem: a2n</title>
    <description>The latest articles on Forem by a2n (@a2nof).</description>
    <link>https://forem.com/a2nof</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%2F3590982%2F55c5f386-4dd6-4c99-ad5a-7b96a929f70f.png</url>
      <title>Forem: a2n</title>
      <link>https://forem.com/a2nof</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/a2nof"/>
    <language>en</language>
    <item>
      <title>Flashing the Lily58 R2G with QMK</title>
      <dc:creator>a2n</dc:creator>
      <pubDate>Sun, 12 Apr 2026 14:36:46 +0000</pubDate>
      <link>https://forem.com/a2nof/flashing-the-lily58-r2g-with-qmk-1nef</link>
      <guid>https://forem.com/a2nof/flashing-the-lily58-r2g-with-qmk-1nef</guid>
      <description>&lt;p&gt;Lately I got a Lily58 R2G (&lt;a href="https://mechboards.co.uk/" rel="noopener noreferrer"&gt;from mechboards uk&lt;/a&gt;) and broke the code for some reason. So to fix that I have to flash the keyboard with the default layout for Vial.&lt;/p&gt;

&lt;p&gt;The process is not so hard, but the lack of clear examples can lead to lost time and errors, so here is the full to-do:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The first step is quite simple: you have to install QMK MSYS exactly as described here at step #2: &lt;a href="https://docs.qmk.fm/newbs_getting_started#set-up-your-environment" rel="noopener noreferrer"&gt;https://docs.qmk.fm/newbs_getting_started#set-up-your-environment&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;After having QMK MSYS installed, the next step is to set it up, but not from the original repo, instead from the MechboardsLTD one (&lt;a href="https://github.com/MechboardsLTD/vial-qmk/tree/r2g/keyboards/mechboards/lily58/r2g" rel="noopener noreferrer"&gt;https://github.com/MechboardsLTD/vial-qmk/tree/r2g/keyboards/mechboards/lily58/r2g&lt;/a&gt;). For that we have to execute the following command: &lt;code&gt;qmk setup MechboardsLTD/vial-qmk&lt;/code&gt;. If this command doesn't work, another solution is to execute &lt;code&gt;qmk setup&lt;/code&gt;, then clone the repository and use the clone to set up QMK with &lt;code&gt;qmk setup -H path/to/the/clone&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Here we need to switch to the &lt;code&gt;r2g&lt;/code&gt; branch with a good old &lt;code&gt;git checkout r2g&lt;/code&gt; (obviously you have to be in the repository to do that)&lt;/li&gt;
&lt;li&gt;To test that everything is correct, you can execute this command and check if the result lists &lt;code&gt;mechboards/lily58/r2g&lt;/code&gt;: &lt;code&gt;qmk list-keyboards | grep mechboards&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If everything is correct, you can now edit the config file if wanted and then build the &lt;code&gt;uf2&lt;/code&gt; file with &lt;code&gt;qmk compile -kb mechboards/lily58/r2g -km vial&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;In my case, the &lt;code&gt;uf2&lt;/code&gt; file was generated in the root folder of the vial-qmk repository we set up at step 2&lt;/li&gt;
&lt;li&gt;When you have this file, you have to plug the main part &lt;strong&gt;only&lt;/strong&gt; of the keyboard into your PC while pressing the bootloader physical button located at the back of the board, the button is here:&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%2Fr72sbc4l1kuenvca6rvy.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%2Fr72sbc4l1kuenvca6rvy.jpeg" alt="photo of the flash button at the back of the keyboard" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;While pressing the button and plugging in the keyboard, a new USB device should appear on your system, the name should be &lt;code&gt;RPI-RP2&lt;/code&gt;. If this is the case, you simply have to place the &lt;code&gt;uf2&lt;/code&gt; file in the folder and the keyboard should reset itself&lt;/li&gt;
&lt;li&gt;Unplug the keyboard, replug the right part, replug the keyboard and voilà :)&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>keyboard</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>VPN, Docker, and a cold coffee</title>
      <dc:creator>a2n</dc:creator>
      <pubDate>Fri, 31 Oct 2025 09:35:42 +0000</pubDate>
      <link>https://forem.com/a2nof/vpn-docker-and-a-cold-coffee-3la6</link>
      <guid>https://forem.com/a2nof/vpn-docker-and-a-cold-coffee-3la6</guid>
      <description>&lt;p&gt;Today I had a hard time understanding why my VPN was connected but I couldn’t reach my DB sitting just behind it.&lt;/p&gt;

&lt;p&gt;Very simple situation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you launch your PC, coffee’s hot&lt;/li&gt;
&lt;li&gt;start your VPN&lt;/li&gt;
&lt;li&gt;open your code and do some stuff&lt;/li&gt;
&lt;li&gt;need to check something in a tool protected by the VPN&lt;/li&gt;
&lt;li&gt;hu ho, why can’t I reach the site?&lt;/li&gt;
&lt;li&gt;check the VPN logs — nothing weird&lt;/li&gt;
&lt;li&gt;double-check the VPN config&lt;/li&gt;
&lt;li&gt;recreate a VPN user&lt;/li&gt;
&lt;li&gt;try with another Wi-Fi&lt;/li&gt;
&lt;li&gt;coffee’s cold&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I reboot my PC, connect to the VPN… and suddenly the site works.&lt;/p&gt;

&lt;p&gt;Why that?&lt;/p&gt;

&lt;p&gt;"Simply" because of Docker! More specifically: Docker networks.&lt;/p&gt;

&lt;p&gt;When I launched Docker, it created a network using the same IP range as my VPN.&lt;/p&gt;

&lt;p&gt;We can confirm the problem with a few commands.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ip route show&lt;/code&gt; (while connected to the VPN) gives us an idea of the VPN’s IP range.&lt;/p&gt;

&lt;p&gt;If we run it after launching Docker, we’ll usually see something like &lt;code&gt;172.17.0.0/16&lt;/code&gt; to &lt;code&gt;172.11.0.0/16&lt;/code&gt; for Docker.&lt;/p&gt;

&lt;p&gt;You can double-check with &lt;code&gt;ip addr&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;172.17.0.0/16 dev docker0 proto kernel scope &lt;span class="nb"&gt;link &lt;/span&gt;src 172.17.0.1 linkdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, if needed, we can find which Docker network is using which IP by listing all networks with &lt;code&gt;docker network list&lt;/code&gt; and inspecting them using &lt;code&gt;docker network inspect {network_id}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the resulting JSON, look at the &lt;code&gt;subnet&lt;/code&gt; and &lt;code&gt;gateway&lt;/code&gt; keys to identify which network is conflicting with your local one.&lt;/p&gt;

&lt;p&gt;If you created the network manually, you can simply edit your config.&lt;br&gt;
If not (like in my case), we can take a more general approach by updating Docker’s configuration itself.&lt;/p&gt;

&lt;p&gt;Open (or create) &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; and edit the &lt;code&gt;default-address-pools&lt;/code&gt; key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"default-address-pools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"base"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"172.240.0.0/16"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;choose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;any&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;IP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;range&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;prefer&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before restarting Docker, run &lt;code&gt;docker network prune&lt;/code&gt; to remove all unused networks from your setup — those can still hold onto old IPs even after changing the config.&lt;/p&gt;

&lt;p&gt;If the prune doesn’t remove the “bad” network, you can delete it manually.&lt;/p&gt;

&lt;p&gt;Finally, restart Docker (eg: systemd): &lt;code&gt;systemctl restart docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And voilà — now I just need to reheat my coffee, but at least my setup works! ☕&lt;/p&gt;

</description>
      <category>docker</category>
      <category>vpn</category>
      <category>linux</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
