<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>SGued</title>
    <link rel="self" type="application/atom+xml" href="https://sgued.fr/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://sgued.fr"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-21T00:00:00+00:00</updated>
    <id>https://sgued.fr/atom.xml</id>
    <entry xml:lang="en">
        <title>Draw A Box 250 Boxes challenge</title>
        <published>2026-02-21T00:00:00+00:00</published>
        <updated>2026-02-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/learn-to-draw/250-boxes/"/>
        <id>https://sgued.fr/learn-to-draw/250-boxes/</id>
        
        <summary type="html">&lt;p&gt;Pictures of the exercises of the 250 boxes challeng from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;drawabox.com&quot;&gt;Draw a box&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Lessons learned from React&#x27;s RCE</title>
        <published>2025-12-14T00:00:00+00:00</published>
        <updated>2025-12-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/react-rce/"/>
        <id>https://sgued.fr/blog/react-rce/</id>
        
        <summary type="html">&lt;p&gt;In the last few weeks, 3 vulnerabilities where found in the React web application framework. The first one, a server-side remote code execution (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cve.org&#x2F;CVERecord?id=CVE-2025-55182&quot;&gt;CVE-2025-55182&lt;&#x2F;a&gt;) is the worst a vulnerability can get  for a web framework. The two other ones are a denial of service (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cve.org&#x2F;CVERecord?id=CVE-2025-67779&quot;&gt;CVE-2025-67779&lt;&#x2F;a&gt;), and a source code exposure (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cve.org&#x2F;CVERecord?id=CVE-2025-55183&quot;&gt;CVE-2025-55183&lt;&#x2F;a&gt;), much less dangerous, yet still impactful.&lt;&#x2F;p&gt;
&lt;p&gt;There are already a lot of writeups published talking about how these vulnerabilities happened, but I didn&#x27;t see much about being said about preventative measures that would have limited the damage.&lt;&#x2F;p&gt;
&lt;p&gt;In this entry, I&#x27;ll explore potential mitigations that could have been applied ahead of time to prevent these vulnerabilities or at least limit their severity.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Play local multiplayer games with remote friends</title>
        <published>2025-11-11T00:00:00+00:00</published>
        <updated>2025-11-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/ten-forward/"/>
        <id>https://sgued.fr/blog/ten-forward/</id>
        
        <summary type="html">&lt;p&gt;Many games have some form of support for &lt;em&gt;local&lt;&#x2F;em&gt; or LAN multiplayer.
This can be quite practical when all the players are in the same place, but is not useful when playing with remote people.&lt;&#x2F;p&gt;
&lt;p&gt;I developed a &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;ten-forward.sgued.fr&quot;&gt;simple Linux tool&lt;&#x2F;a&gt; that in the right conditions, enables you to make your locally-hosted game accessible over the public internet, at no additional cost.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why people are mad at Framework</title>
        <published>2025-10-26T00:00:00+00:00</published>
        <updated>2025-10-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/framework-omarchy/"/>
        <id>https://sgued.fr/blog/framework-omarchy/</id>
        
        <summary type="html">&lt;p&gt;This 9th of october, Hyprland&#x27;s twitter account announced that they had received a financial contribution from &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;frame.work&#x2F;&quot;&gt;Framework&lt;&#x2F;a&gt;, a company building modular, repairable computers. Given Hyprland&#x27;s messy history of being a toxic community people started publicly questioning Framework&#x27;s decision. People also noticed that Framework&#x27;s twitter account recently promoted Omarchy, a &quot;distro&quot; by DHH, a very controversial figure from the Ruby community.
In this entry I will explain what happened, why Hyprland is still a toxic community, and why Framework&#x27;s response to the controversy was disappointing.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Draw A Box lesson 1</title>
        <published>2025-08-09T00:00:00+00:00</published>
        <updated>2025-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/learn-to-draw/draw-a-box-lesson-1/"/>
        <id>https://sgued.fr/learn-to-draw/draw-a-box-lesson-1/</id>
        
        <summary type="html">&lt;p&gt;Pictures of the exercises of the first lesson from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;drawabox.com&quot;&gt;Draw a box&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Signal stories shows what I want social media to be</title>
        <published>2025-07-11T00:00:00+00:00</published>
        <updated>2025-07-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/signal-stories/"/>
        <id>https://sgued.fr/blog/signal-stories/</id>
        
        <summary type="html">&lt;p&gt;I initially didn&#x27;t understand the point of stories in apps like WhatsApp or Snapchat. I never really used any app with such a feature. Three years ago, my messaging application of choice &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;&quot;&gt;Signal&lt;&#x2F;a&gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;signal.org&#x2F;blog&#x2F;introducing-stories&#x2F;&quot;&gt;added a stories feature&lt;&#x2F;a&gt; and their implementation makes me think that an instant messaging app like Signal could actually fill the exact use-cases that social media like Facebook are trying (and failing) to fill.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>You should still use CSRF tokens</title>
        <published>2025-05-17T00:00:00+00:00</published>
        <updated>2025-05-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/need-csrf-token/"/>
        <id>https://sgued.fr/blog/need-csrf-token/</id>
        
        <summary type="html">&lt;p&gt;You may think that thanks to cookies being set to &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;fr&#x2F;docs&#x2F;Web&#x2F;HTTP&#x2F;Reference&#x2F;Headers&#x2F;Set-Cookie#samesitesamesite-value&quot;&gt;&lt;code&gt;SameSite=Lax&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; by default, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;fr&#x2F;docs&#x2F;Glossary&#x2F;CSRF&quot;&gt;CSRF&lt;&#x2F;a&gt; (Cross-Site Request Forgery) is mostly a solved problem, but It&#x27;s not and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cheatsheetseries.owasp.org&#x2F;cheatsheets&#x2F;Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#synchronizer-token-pattern&quot;&gt;CSRF tokens&lt;&#x2F;a&gt; are still good practice to implement.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Is this certificate DER or PEM encoded ? It turns out, both at the same time</title>
        <published>2025-03-15T00:00:00+00:00</published>
        <updated>2025-03-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/der-pem-cert/"/>
        <id>https://sgued.fr/blog/der-pem-cert/</id>
        
        <summary type="html">&lt;p&gt;X509 certificate can be encoded either as &lt;code&gt;DER&lt;&#x2F;code&gt; or &lt;code&gt;PEM&lt;&#x2F;code&gt;.
&lt;code&gt;DER&lt;&#x2F;code&gt; encoding is an efficient binary format, while &lt;code&gt;PEM&lt;&#x2F;code&gt; encoding is a wrapper around the Base 64 &lt;code&gt;DER&lt;&#x2F;code&gt; encoding of the certificate.&lt;&#x2F;p&gt;
&lt;p&gt;Usually, when dealing with a specific certificate, you know beforehand whether it&#x27;s encoded as &lt;code&gt;DER&lt;&#x2F;code&gt; or &lt;code&gt;PEM&lt;&#x2F;code&gt;.
For example, in the &lt;code&gt;opennssl&lt;&#x2F;code&gt; CLI, you can give it the &lt;code&gt;-inform&lt;&#x2F;code&gt; parameter, which accepts either &lt;code&gt;DER&lt;&#x2F;code&gt; or &lt;code&gt;PEM&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;However, what if don&#x27;t know the encoding of the certificate, can you figure it out on the fly?&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using bevy for the 2024 GMTK game jam</title>
        <published>2024-08-20T00:00:00+00:00</published>
        <updated>2024-08-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/bevy-gmtk/"/>
        <id>https://sgued.fr/blog/bevy-gmtk/</id>
        
        <summary type="html">&lt;p&gt;I used bevy to build a small game for the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;itch.io&#x2F;jam&#x2F;gmtk-2024&quot;&gt;2024 GMTK game jam&lt;&#x2F;a&gt;.
Having no prior experience with game development, this was a fun ride!&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to work with !Sized types in Rust</title>
        <published>2024-01-21T00:00:00+00:00</published>
        <updated>2024-01-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/heapless-howto/"/>
        <id>https://sgued.fr/blog/heapless-howto/</id>
        
        <summary type="html">&lt;p&gt;Sizedness in Rust is a peculiar topic. I recently found myself having to work with unsized types when trying to reduce the use of &lt;code&gt;const&lt;&#x2F;code&gt; generics in the &lt;code&gt;heapless&lt;&#x2F;code&gt; crate. Here I will document the approaches I considered and the pros and cons of each of them.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Disabling IPv6 when an IPv4 only wireguard config is up</title>
        <published>2023-06-01T00:00:00+00:00</published>
        <updated>2023-06-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/wg-ipv4/"/>
        <id>https://sgued.fr/blog/wg-ipv4/</id>
        
        <summary type="html">&lt;p&gt;On linux, when using a wireguard VPN that only supports IPv4, the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;manpages.debian.org&#x2F;unstable&#x2F;wireguard-tools&#x2F;wg-quick.8.en.html&quot;&gt;wg-quick&lt;&#x2F;a&gt; scripts and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;networkmanager.dev&#x2F;docs&#x2F;api&#x2F;latest&#x2F;NetworkManager-dispatcher.html&quot;&gt;NetworkManager&lt;&#x2F;a&gt; will not do anything regarding IPv6, which will simply go through the default gateway and &quot;leak&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s not easy to reliably prevent this. Here is how to do it with NetworManager.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to disable a CSS stylesheet with JavaScript</title>
        <published>2022-09-27T00:00:00+00:00</published>
        <updated>2022-09-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/disable-css/"/>
        <id>https://sgued.fr/blog/disable-css/</id>
        
        <summary type="html">&lt;p&gt;Contrary to what every website out there is saying, the  proper way to disable a remote stylesheet imported with &lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text&#x2F;css&quot; href=&quot;&#x2F;url&quot;&amp;gt;&lt;&#x2F;code&gt; is not to use &lt;code&gt;stylesheet.disabled = true;&lt;&#x2F;code&gt;, it&#x27;s rather to use &lt;code&gt;stylesheet.media = &quot;not all&quot;;&lt;&#x2F;code&gt;. Using &lt;code&gt;disabled&lt;&#x2F;code&gt; on &lt;code&gt;&amp;lt;link&amp;gt;&lt;&#x2F;code&gt; element is &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Web&#x2F;HTML&#x2F;Element&#x2F;link#attr-disabled&quot;&gt;&lt;strong&gt;not standard&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; and should be avoided. It doesn&#x27;t seem to even work properly in chrome.&lt;&#x2F;p&gt;</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Resolving merge conflicts when introducing formatting to an existing codebase</title>
        <published>2022-09-22T00:00:00+00:00</published>
        <updated>2022-09-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            Sosthène Guédon
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://sgued.fr/blog/fmt-rebase/"/>
        <id>https://sgued.fr/blog/fmt-rebase/</id>
        
        <summary type="html">&lt;p&gt;If a project doesn&#x27;t use any formatting tool, introducing them can be a headache, and is almost guaranteed to cause merge conflicts with any ongoing PR. Here&#x27;s how to fix them.&lt;&#x2F;p&gt;</summary>
        
    </entry>
</feed>
