<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Mehdi’s notes</title>
        <link>https://blog.mehdi.cc</link>
        <description>A chronological gathering of… notes.</description>
        <lastBuildDate>Fri, 20 Feb 2026 20:05:57 GMT</lastBuildDate>
        <docs>https://www.rssboard.org/rss-specification</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <ttl>2880</ttl>
        <copyright>Copyright © 2023-present, Mehdi Merah</copyright>
        <atom:link href="https://blog.mehdi.cc/feed-notes-only.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Yeah I know, it’s been a while]]></title>
            <link>https://blog.mehdi.cc/notes/2026-02-20-it-s-been-a-while</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2026-02-20-it-s-been-a-while</guid>
            <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[I would blog some much more if I had a CMS.]]></description>
            <content:encoded><![CDATA[<h1 id="yeah-i-know-it-s-been-a-while" tabindex="-1">Yeah I know, it’s been a while <a class="header-anchor" href="#yeah-i-know-it-s-been-a-while" aria-label="Permalink to &quot;Yeah I know, it’s been a while&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>I have plenty of ideas of writings. I had them already years before starting this blog. I would post so much more here if I had a <abbr title="content management system">CMS</abbr> for this place, and it’s the only reason why the <a href="./../notes/2026-02-20-no-more-dependabot.html">previous note</a> is the first one I write in 16 months.</p>
<p>Maybe I’ll do something about it… somewhere in 16 months.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[No more dependabot in these repositories]]></title>
            <link>https://blog.mehdi.cc/notes/2026-02-20-no-more-dependabot</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2026-02-20-no-more-dependabot</guid>
            <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Code repositories with low activity shouldn’t bother about tooling that much.]]></description>
            <content:encoded><![CDATA[<h1 id="no-more-dependabot-in-these-repositories" tabindex="-1">No more dependabot in these repositories <a class="header-anchor" href="#no-more-dependabot-in-these-repositories" aria-label="Permalink to &quot;No more dependabot in these repositories&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p><a href="https://github.com/dependabot/dependabot-core" target="_blank" rel="noreferrer">Dependabot</a> is a great tool: it automatically creates periodic pull requests in your repository when there are dependencies updates or security fixes. It’s convenient, a lot of projects use it. But when your repository hasn’t that much activity, it becomes burden and noise, even when you configure it to only run once per month, the lowest frequency you can get.</p>
<p>Looking at <a href="https://github.com/meduzen/canwe/" target="_blank" rel="noreferrer"><em>Can We</em> repository</a>, which exists since 6 years and in which dependabot was added 3 years ago, there are now <a href="https://github.com/meduzen/canwe/pulls?q=is%3Apr" target="_blank" rel="noreferrer">192 pull requests</a>: <a href="https://github.com/meduzen/canwe/pulls?q=is%3Apr+is%3Aclosed+author%3Ameduzen" target="_blank" rel="noreferrer">67 are from myself</a> and <a href="https://github.com/meduzen/canwe/pulls?q=is%3Apr+is%3Aclosed+author%3Aapp%2Fdependabot" target="_blank" rel="noreferrer">127 from dependabot</a>. But here’s the thing: I’ve closed without merging them <a href="https://github.com/meduzen/canwe/pulls?q=is%3Apr+is%3Aclosed+author%3Aapp%2Fdependabot++is%3Aunmerged" target="_blank" rel="noreferrer">97 dependabot pull requests</a> (and <a href="https://github.com/meduzen/canwe/pulls?q=is%3Apr+is%3Aclosed+author%3Ameduzen++is%3Aunmerged+" target="_blank" rel="noreferrer">2 from me</a>).</p>
<p>So today I <a href="https://en.wikipedia.org/wiki/Marie_Kondo#KonMari_method" target="_blank" rel="noreferrer">Mari Kondo-ed it</a> from this repository, and will soon on others (there are <a href="https://docs.github.com/en/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-version-updates#disabling-dependabot-version-updates" target="_blank" rel="noreferrer">softer ways to disable it</a>).</p>
<p>Putting aside the noise in both the repo history and my GitHub notifications, a project with low activity and no security risks like <a href="https://canwe.dev" target="_blank" rel="noreferrer"><em>Can We</em></a> doesn’t need frequent maintenance. Also, dependabot won’t help with breaking changes and code migration for major updates, so I do them manually anyway.</p>
<p>As a developer, you often reuse stuff (code, configuration, workflow…) from a project to another, but sometimes the “defaults” you are used to doesn’t work that much everywhere, or things change and it’s time to take decisions.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[The “Macintosh” wallpaper of macOS Sequoia]]></title>
            <link>https://blog.mehdi.cc/notes/2024-10-09-macos-sequoia-new-wallpaper-macintosh</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-10-09-macos-sequoia-new-wallpaper-macintosh</guid>
            <pubDate>Wed, 09 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[You know you love a wallpaper when you post about it!]]></description>
            <content:encoded><![CDATA[<h1 id="the-macintosh-wallpaper-of-macos-sequoia" tabindex="-1">The “Macintosh” wallpaper of macOS Sequoia <a class="header-anchor" href="#the-macintosh-wallpaper-of-macos-sequoia" aria-label="Permalink to &quot;The “Macintosh” wallpaper of macOS Sequoia&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>Apple has this tradition of adding new wallpapers to major macOS versions. I just updated to <a href="https://www.apple.com/macos/macos-sequoia" target="_blank" rel="noreferrer">macOS Sequoia</a>, which comes with a <a href="https://basicappleguy.com/haberdashery/macintoshwallpapers" target="_blank" rel="noreferrer">lovely “Macintosh” wallpaper</a> showcasing the <a href="https://infinitemac.org/" target="_blank" rel="noreferrer">pixelated and monochrome era of Mac OS</a>, but with nice hues of colors changing dynamically during the day.</p>
<video autoplay loop playsinline>
    <source src="/content/macos-sequoia-new-wallpaper-macintosh.mp4" />
</video>
<p>That’s so cool! I usually rely on <a href="https://replay.software/umbra" target="_blank" rel="noreferrer">Umbra</a> to set wallpapers, but I think I’ll stick for a while with this new Macintosh one.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Ask me anything]]></title>
            <link>https://blog.mehdi.cc/notes/2024-10-01-ask-me-anything</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-10-01-ask-me-anything</guid>
            <pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Running a small experiment for my last days at work]]></description>
            <content:encoded><![CDATA[<h1 id="ask-me-anything" tabindex="-1">Ask me anything <a class="header-anchor" href="#ask-me-anything" aria-label="Permalink to &quot;Ask me anything&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>This year at work has mostly been about supporting other teams, and with time I’ve been asked questions going beyond the scope of my role. Since I’m about to switch job, maybe it’s a good moment to try running a “ask me anything” space. I’m very much okay if this goes nowhere.</p>
<p>The space for this is <a href="https://github.com/meduzen/ask" target="_blank" rel="noreferrer">a repository</a> where you can ask me anything that is <a href="https://github.com/meduzen/ask/discussions/categories/tech" target="_blank" rel="noreferrer">technical</a> (<a href="https://github.com/meduzen/ask/discussions/categories/things-unrelated-to-tech" target="_blank" rel="noreferrer">or not</a>). If you don’t use GitHub, it’s also possible to <a href="https://mehdi.cc#contact" target="_blank" rel="noreferrer">send me an email</a>.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[I’ve lost Internet and nobody knows how]]></title>
            <link>https://blog.mehdi.cc/notes/2024-09-07-i-lost-internet-part-1</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-09-07-i-lost-internet-part-1</guid>
            <pubDate>Sat, 07 Sep 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Apparently it moved to another provider without moving to another provider.]]></description>
            <content:encoded><![CDATA[<h1 id="i-ve-lost-internet-and-nobody-knows-how" tabindex="-1">I’ve lost Internet and nobody knows how <a class="header-anchor" href="#i-ve-lost-internet-and-nobody-knows-how" aria-label="Permalink to &quot;I’ve lost Internet and nobody knows how&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>Proximus was my <a href="./2023-11-18-macos-sonoma-downloading-ios-simulator-is-now-complicated.html">dear</a> domestic Internet provider until yesterday, when they cut my subscription around <datetime date="2024-09-06T17:45+02:00" formatter="shorttime" precision="datetime utc"/>. For now it seems <strong>nobody asked for this resignation</strong>. Not me, not them, nobody.</p>
<p>I immediatly checked my emails using mobile data, and noticed they sent me <time datetime="2024-09-05">two days ago</time> the normal email they send when someone resigns, which basically contains a confirmation of the resignation and instructions to return their hardware (router…) using postal services.</p>
<p>Since there are multiple <a href="https://www.proximus.be/en/id_ar_poslocator/personal/orphans/find-a-proximus-shop.html" target="_blank" rel="noreferrer">Proximus shops</a> in the country, I immediately decided to head to the closest one, despite they are not really doing support anymore but mostly commercial operations. You’ll understand why later.</p>
<h2 id="i-did-not-asked-an-easy-switch" tabindex="-1">I (did not) asked an Easy Switch <a class="header-anchor" href="#i-did-not-asked-an-easy-switch" aria-label="Permalink to &quot;I (did not) asked an Easy Switch&quot;">&ZeroWidthSpace;</a></h2>
<p>The Belgian <a href="https://www.bipt.be/consumers/faq/easy-switch" target="_blank" rel="noreferrer">Easy Switch</a> procedure allows you to switch internet provider in a more convenient way. According to the limited information available to the Proximus shop, that’s what triggered my resignation, except I did not asked for it.</p>
<p>The way Easy Switch works is pretty simple and will look familiar to you if you’ve already transferred a domain name from a provider to another: you can get an Easy Switch number at any time from your current provider (apparently it’s on your invoices, and in the online dashboard) and bring it along with your client ID to any other provider, which allow them to trigger a switch. To minimize downtime on your side, your current subscription is only supposed to stop when the new one is activated.</p>
<p>For now my new provider is… nobody! The Proximus shop has no access to the origin of the request. They only could tell me it was initiated on <datetime date="2024-08-30" formatter="yearless"/>.</p>
<h2 id="how-to-not-get-back-your-resigned-subscription" tabindex="-1">How to (not) get back your resigned subscription <a class="header-anchor" href="#how-to-not-get-back-your-resigned-subscription" aria-label="Permalink to &quot;How to (not) get back your resigned subscription&quot;">&ZeroWidthSpace;</a></h2>
<p>Since my subscription was <em>remotely</em> (I guess) de-activated, my best hope was that an easy way to revert it would be possible, but it’s not. Once the Easy Switch has been started, there’s some sort of grace period where it’s not possible to do <em>anything</em>: even having me trying to re-subscribe like a new client was apparently complicated (see further), so it’s still too early to be positive about the outcome of a resubscription.</p>
<h3 id="i-m-not-a-new-proximus-client" tabindex="-1">I’m (not) a new Proximus client <a class="header-anchor" href="#i-m-not-a-new-proximus-client" aria-label="Permalink to &quot;I’m (not) a new Proximus client&quot;">&ZeroWidthSpace;</a></h3>
<p>So now the situation is that I’m considered as a new client, meaning I apparently have to wait up to <duration w="2">two weeks</duration> to get internet back because it’s the Proximus standard waiting time to send a technician to install the hardware… which is already installed since <duration w="30">months</duration>. What happens technically is that they enable the line the day the technician comes, which means they very probably could do it earlier.</p>
<p>Due to the absurdity of the situation, and with the limited powers in the hands of the shop, the guy left a note to request the technical support to call me today: they are supposed to have more information and stuff. Since we’re Saturday, I have very little hope this will happen, but who knows…</p>
<details class="details custom-block"><summary>FAQ</summary>
<blockquote>
<p>Why the guy at the shop did not call the support to sort this out immediately?</p>
</blockquote>
<p>Because it’s how Proximus, a company that’s basically broken, operates and treats the customer. The first reaction from the guy at the shop was something like “an Easy Switch has been triggered, so it’s not on our side”, and I had to protest a bit more than a bit to get some form of service. That’s the reason why I went to the shop instead of using the phone and waiting in line: Proximus phone support is hell and you won’t have someone technical until you take around <duration m="20">20 minutes</duration> to convince the person on the line that the issue is technical, and only then they will anyway tell you that someone technical will call you back the next day (which might or not happen depending on… stuff).</p>
<p>That’s how large the distance between you and the solution.</p>
<blockquote>
<p>But why did you not switch provider then?</p>
</blockquote>
<p>Reasons tight to my landlord, and also because I follow a very simple rule: do not switch internet provider if your internet connection works.</p>
</details>
<h3 id="my-new-subscription" tabindex="-1">My new subscription <a class="header-anchor" href="#my-new-subscription" aria-label="Permalink to &quot;My new subscription&quot;">&ZeroWidthSpace;</a></h3>
<p>So because the system of the shop was apparently not collaborative, I’m considered as a new client, and in order to avoid me unwanted fees (you pay around 50 € when the technician comes to install the stuff), my subscription has been changed from <em>fiber internet</em> (52.99 €/month) to <em>fiber internet + TV</em> (72.99 €/month), so that I can benefit from an ongoing discount leading to pay 52.99 €/month during <duration w="26">6 months</duration>, and then I’ll just have to cancel the TV before the discount ends. I absolutely don’t need TV and won’t even plug the decoder if the technician comes to my place with it.</p>
<h2 id="what-i-ll-do" tabindex="-1">What I’ll do <a class="header-anchor" href="#what-i-ll-do" aria-label="Permalink to &quot;What I’ll do&quot;">&ZeroWidthSpace;</a></h2>
<p>Since I am now waiting in a technical void using the mobile data from the company phone, and unless Proximus manages to bring my internet back really soon, it means I’ll have to work from the company office for the next <duration w="2">two weeks</duration>. I don’t know to which extent I can use the company data plan since I don’t have access to my consumption, nor the real limitations of the data plan, nor if I have to pay anything from my pocket if I go above any limit.</p>
<p>Aside from this, I’ll drop a complaint on the <a href="https://www.ombudsmantelecom.be/en" target="_blank" rel="noreferrer">government service dedicated to telecommunications complaints</a> (and maybe at the police) and on <a href="https://fr.forum.proximus.be" target="_blank" rel="noreferrer">Proximus forum</a>. I have the following hypothesis:</p>
<ul>
<li>Someone clicked on the wrong button somewhere.</li>
<li>A postman put a Proximus letter (they don’t send those unless you’re very late on paying bills, which I’m not) in the wrong letterbox, and someone decided to use my “name” and Easy Switch ID (apparently it’s on bills) to open a new contract: I don’t even know if it’s plausible since subscribing to a new contract <time datetime="2024-09-06">yesterday</time> required my ID card…</li>
<li>I do drugs and alcohol to a point I think I don’t at all, which probably led me to change internet provider: I can’t wait to discover my parallel life and know which other weird things I’ve done!</li>
</ul>
<p>Count on me to document the next and still unknown part of this very Belgian absurd story in a follow-up note.</p>
<h2 id="timeline" tabindex="-1">Timeline <a class="header-anchor" href="#timeline" aria-label="Permalink to &quot;Timeline&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li>
<datetime date="2024-08-30" formatter="longdate"/>: someone somewhere triggers the Easy-Switch procedure.</li>
<li>
<datetime date="2024-09-05" formatter="longdate"/>: I receive an email saying I’ve resigned from Proximus.</li>
<li>
<datetime date="2024-09-06T17:45+02:00" formatter="longdate-shorttime" precision="datetime utc"/>: no more Internet.</li>
<li>
<datetime date="2024-09-06T18:00+02:00" formatter="longdate-shorttime" precision="datetime utc"/>: heading to the Proximus shop (this article).</li>
<li>
<datetime date="2024-09-07" formatter="longdate"/> (today): waiting for the phone call from the support, with slightly limited hope.</li>
</ul>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Seeding geographical coordinates using Laravel]]></title>
            <link>https://blog.mehdi.cc/notes/2024-05-10-laravel-mysql-geography</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-05-10-laravel-mysql-geography</guid>
            <pubDate>Fri, 10 May 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[It’s the first time I need to store geographical coordinates in a database]]></description>
            <content:encoded><![CDATA[<h1 id="seeding-geographical-coordinates-using-laravel" tabindex="-1">Seeding geographical coordinates using Laravel <a class="header-anchor" href="#seeding-geographical-coordinates-using-laravel" aria-label="Permalink to &quot;Seeding geographical coordinates using Laravel&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>Today I learned that MySQL 8 has column types to store geographic coordinates. Here’s how <a href="./../articles/laravel-mysql-geography-seed.html">I managed to seed my database with such data types using Laravel</a>. I really did not expect this to require an article, and on top of that my database has definitely no need for this kind of refinement at this stage of the project.</p>
<p>I have no idea what I’m doing.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Developing for the 20%]]></title>
            <link>https://blog.mehdi.cc/notes/2024-04-26-developing-for-the-20-percent</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-04-26-developing-for-the-20-percent</guid>
            <pubDate>Fri, 26 Apr 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[You are among them.]]></description>
            <content:encoded><![CDATA[<h1 id="developing-for-the-20" tabindex="-1">Developing for the 20% <a class="header-anchor" href="#developing-for-the-20" aria-label="Permalink to &quot;Developing for the 20%&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>In his excellent and very entertaining <a href="https://www.youtube.com/watch?v=GZsIhiXJjpY" target="_blank" rel="noreferrer"><em>Capitalism, The Web, And You</em> talk</a> (<a href="https://2022.ffconf.org" target="_blank" rel="noreferrer">ffconf 2022</a>), <a href="https://heydonworks.com/" target="_blank" rel="noreferrer">Heydon Pickering</a> explains an arsh reality when doing web development as a job: no matter how much efforts you put into optimizing the performance of a website, too often there will be someone requiring you to add heavy <a href="https://almanac.httparchive.org/en/2022/javascript#bytes" target="_blank" rel="noreferrer">third-party</a> scripts for whatever silly purpose (mainly marketing, advertising and <a href="https://gist.github.com/meduzen/062e543c6c11b596cdb7a02dd9fb3b67" target="_blank" rel="noreferrer">tracking</a>), with no technical expert having a word to say on this.</p>
<p>You managed to ship 120 KB of decently performant JavaScript, and suddenly it becomes 2 MB of craptilde nonsense, <a href="https://gomakethings.com/the-cost-of-javascript-in-2023/" target="_blank" rel="noreferrer">slowing down</a> and significantly degrading the website. So why even bother optimizing in the first place?</p>
<p>Well, the answer is straightforward: do it for those who won’t be annoyed by these third-party scripts (because they are mostly equipped with ad blockers). <strong>Develop for these 20%</strong>.</p>
<blockquote>
<p>20%, really?</p>
</blockquote>
<p>It doesn’t matter, the number looks nice in the title. Actually it could be <a href="https://backlinko.com/ad-blockers-users#ad-blocking-stats-top-picks" target="_blank" rel="noreferrer">way</a> <a href="https://www.statista.com/statistics/435252/adblock-users-worldwide/" target="_blank" rel="noreferrer">more</a>, but each website has a different audience.</p>
<h2 id="giving-back" tabindex="-1">Giving back <a class="header-anchor" href="#giving-back" aria-label="Permalink to &quot;Giving back&quot;">&ZeroWidthSpace;</a></h2>
<p>If you care about having a decent experience on the internet, you are probably using an adblocker yourself, so one of the last things you want is having to deal with slow and clunky websites, even when they don’t come with third-party scripts.</p>
<p>Each time you are happy with a website, it means someone else put enough care in it for you, so it’s probably nice if you manage to give back to another human by also being careful while creating websites. Let’s do it, for the 20%.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Mouse-first typewriting]]></title>
            <link>https://blog.mehdi.cc/notes/2024-02-21-css-utility-classes</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-02-21-css-utility-classes</guid>
            <pubDate>Wed, 21 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[A revolutionary technique to type on the keyboard. Compatible with CSS.]]></description>
            <content:encoded><![CDATA[<h1 id="mouse-first-typewriting" tabindex="-1">Mouse-first typewriting <a class="header-anchor" href="#mouse-first-typewriting" aria-label="Permalink to &quot;Mouse-first typewriting&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>Picture yourself at a younger age: you want to discover that mesmerizing machine named computer, but you’ve never used a keyboard before. There are so many keys, even more than the alphabet can contain, and they are all layed out in a weird order. It’s so intimidating!</p>
<p>So you call your racist uncle (apparently there’s one in every family these days), and he shows you a “mouse-first typewriting” technique he created to make your life better:</p>
<blockquote>
<p>Forget these keyboards, they <em>doesn’t scale</em>. With the <em>well-engineered</em> copy-paste, you only need two <em>meticulously balanced</em> utility buttons!</p>
</blockquote>
<video autoplay loop playsinline>
    <source src="/content/mouse-first-typewriting-dark.mp4" />
</video>
<p>Do your younger selves approve? I bet they do!</p>
<figure>
    <img src="/content/brent-rambo-thumbs-up.gif" alt="A young blond boy – apparently named Brent Rambo – giving a thumbs up after having used a mouse in front of an Apple computer" style="margin-inline: auto;" />
</figure>
<h2 id="let-s-move-on" tabindex="-1">Let’s move on. <a class="header-anchor" href="#let-s-move-on" aria-label="Permalink to &quot;Let’s move on.&quot;">&ZeroWidthSpace;</a></h2>
<p>There’s an interesting phenomenon happening when you read web developers passionated by the web platform: every now and then, there’s kind of a moment, usually lasting a couple of days, during which some of them are writing one after the other about the same topic, like a rally cry in defense of the <em>Goodness of the Web Platform™</em> or against <em>things</em> damaging it. This cycle occures every couple of months.</p>
<p>Unfortunately we pretty much need this, because browsing the web is often a disaster. There are plenty of reasons for that, like underestimating the complexity of the front-end discipline, overlooking HTML and CSS, or not giving a tilde about who will actually use the websites you make.</p>
<p>So, these days, it’s about FailWind: about <a href="https://nuejs.org/blog/tailwind-misinformation-engine/" target="_blank" rel="noreferrer">its marketing and promises</a>, about <a href="https://heydonworks.com/article/what-is-utility-first-css/" target="_blank" rel="noreferrer"><em>utility-first CSS</em></a>, about <a href="https://bastianallgeier.com/notes/tailwind" target="_blank" rel="noreferrer">sharing experience</a> of using this tool. My experience with it is pretty straightforward: I know my stuff around CSS, I’ve never used any CSS framework, but I had to try it 6 years ago in a project, upon request of a back-end colleague, and it was a disaster.</p>
<ul>
<li>It’s unproductive when you are productive with CSS.</li>
<li>It bloats the HTML payload and makes it harder to read.</li>
<li>FailWind class naming is <a href="https://github.com/tailwindlabs/tailwindcss/issues/413" target="_blank" rel="noreferrer">not CSS friendly</a> <a href="https://mastodon.social/@HTeuMeuLeu/111957326389259598" target="_blank" rel="noreferrer">nor predictable</a>.</li>
<li>Adding dark mode <a href="https://twitter.com/meduzen/status/1634517215834718208" target="_blank" rel="noreferrer">bloats the CSS payload</a>.</li>
</ul>
<p>(It was 6 years ago, I don’t know today, and I don’t know any front-end developer using CSS frameworks.)</p>
<p>Again, I know my stuff around CSS. Everyone their path. Like for everything in web development, there are a lot of fashions and techniques to write and maintain CSS: this diversity is great, but it can be hard to navigate. Each time you decide to go for a tool or technology, there’s a learning curve for its adoption, its in-depth usage and its removal. The time you will take for this is time you can also decide to invest in understanding and learning the fundamentals.</p>
<h2 id="bonus" tabindex="-1">Bonus <a class="header-anchor" href="#bonus" aria-label="Permalink to &quot;Bonus&quot;">&ZeroWidthSpace;</a></h2>
<p>Since we are talking about utility classes, here are some I often use:</p>
<div class="language-css vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">css</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/* Center the children of a flex container. */</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.flex-center</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  display</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">inline-flex</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  justify-content</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">center</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  align-items</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">center</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/* Apply the accent color. */</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.accent</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">  color</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">var</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">--accent</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">);</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/* Apply font-weights. */</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.f300</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">font-weight</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">300</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; }</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.f400</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">font-weight</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">400</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; }</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.f700</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">font-weight</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">700</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">; }</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">/**</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * Limit motion based on user preference.</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> *</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> * https://toot.cafe/@tomayac/110989258569274871</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> */</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">.reduced-motion</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  &#x26;,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  &#x26;::before,</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  &#x26;::after {</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    @media (--reduced-motion) {</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      animation-delay</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">-1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ms</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> !important</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      animation-duration</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ms</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> !important</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      animation-iteration-count</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> !important</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      transition-duration</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ms</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> !important</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">      transition-delay</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ms</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> !important</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  }</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre>
</div><p>When using utility classes along semantic classes in HTML, I separate them using a pipe (<code>|</code>), which increases the readability of the classes sequence:</p>
<div class="language-html vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">html</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">&#x3C;</span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">ul</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"eventsList | flex-center f700"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">></span></span></code></pre>
</div><p>I care about readability up to that level of detail, and I have not invented this technique.</p>
<p>Also if you’re wondering what’s that <code>@media (--reduced-motion)</code> syntax from the last example, it’s called <a href="https://github.com/meduzen/--media.scss/blob/main/docs/custom-media-queries.md" target="_blank" rel="noreferrer">Custom Media Queries</a> and you can <a href="https://github.com/meduzen/canwe/tree/47541f6e6f104e8b8a8fdc0a8668edb0da5bd08a/src/css/media-queries" target="_blank" rel="noreferrer">use it</a> since years thanks to the PostCSS <a href="https://preset-env.cssdb.org/" target="_blank" rel="noreferrer"><code>postcss-preset-env</code> plugin</a>. I can definitely say PostCSS is the most important tool for CSS: I’ve always coupled Sass and PostCSS together, and last year I’ve started to <a href="https://github.com/meduzen/canwe/pull/138" target="_blank" rel="noreferrer">ditch Sass to only keep PostCSS</a>, but that’s another story.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[The GitHub Markdown syntax for alerts sucks]]></title>
            <link>https://blog.mehdi.cc/notes/2024-02-03-github-alerts-markdown-syntax</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2024-02-03-github-alerts-markdown-syntax</guid>
            <pubDate>Sat, 03 Feb 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[I’ve decided to not use it, it’s confusing and poorly designed.]]></description>
            <content:encoded><![CDATA[<h1 id="the-github-markdown-syntax-for-alerts-sucks" tabindex="-1">The GitHub Markdown syntax for alerts sucks <a class="header-anchor" href="#the-github-markdown-syntax-for-alerts-sucks" aria-label="Permalink to &quot;The GitHub Markdown syntax for alerts sucks&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>The new <a href="https://github.blog/changelog/2023-12-14-new-markdown-extension-alerts-provide-distinctive-styling-for-significant-content/" target="_blank" rel="noreferrer">GitHub alerts blocks</a> are visually clean and useful. I was never a fan of the confusing syntaxes (plural because it changed a couple of times) but I can live with it <strong>inside GitHub</strong>. Then it <a href="https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md#100-rc40-2024-1-22" target="_blank" rel="noreferrer">landed in Vitepress</a>, which made me think about it.</p>
<p>Now <a href="./../articles/github-alerts-markdown-syntax.html">I think it sucks</a>, and we are legion.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[ISO standards are not free]]></title>
            <link>https://blog.mehdi.cc/notes/2023-11-25-iso-standards-are-not-free</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-11-25-iso-standards-are-not-free</guid>
            <pubDate>Sat, 25 Nov 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[It baffles me that access to ISO standards are under a paywall.]]></description>
            <content:encoded><![CDATA[<h1 id="iso-standards-are-not-free" tabindex="-1">ISO standards are not free <a class="header-anchor" href="#iso-standards-are-not-free" aria-label="Permalink to &quot;ISO standards are not free&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><ul>
<li><a href="https://www.w3.org/standards/" target="_blank" rel="noreferrer">W3C standards</a> are free to read. They are specifications for HTML, CSS, browsers API, protocols, anything web…</li>
<li><a href="https://tc39.es/" target="_blank" rel="noreferrer">TC39 specifications</a> are free to read. They are for JavaScript.</li>
<li><a href="https://www.iso.org/standards.html" target="_blank" rel="noreferrer">ISO standards</a> are <strong>not</strong> free to read. They are for an incredible amount of things.</li>
</ul>
<p>There’s even a <a href="https://www.iso.org/contact-iso.html#:~:text=why%20is%20there%20a%20charge%20for%20standards?" target="_blank" rel="noreferrer">FAQ entry for that on the ISO website</a>:</p>
<div class="info custom-block"><p class="custom-block-title">Why is there a charge for standards?</p>
<blockquote>
<p>Developing, publishing and maintaining ISO standards incurs a cost, and revenues from selling them helps ISO and its members to cover an important part of these costs. Charging for standards allows us to ensure that they are developed in an impartial environment and therefore meet the needs of all stakeholders for which the standard is relevant. This is essential if standards are to remain effective in the real world. ISO and its members offer a number of options to access ISO standards.</p>
</blockquote>
</div>
<p>I understand creating quality standards require a favorable environment, making them expansive, with <a href="https://en.wikipedia.org/wiki/International_Organization_for_Standardization#Financing" target="_blank" rel="noreferrer">the financing being a mix of public and private contributions</a>, but as an individual who wants to understand how a web spec makes use of an ISO standard, there’s no way I can spend so much money <a href="https://github.com/meduzen/datetime-attribute/issues/108" target="_blank" rel="noreferrer">each time</a> I’m interested in a specification. In the case of the ISO 8601 spec, it’s <a href="https://www.iso.org/standard/70907.html" target="_blank" rel="noreferrer">CHF 166</a> + <a href="https://www.iso.org/standard/81801.html" target="_blank" rel="noreferrer">CHF 17</a> + <a href="https://www.iso.org/standard/70908.html" target="_blank" rel="noreferrer">CHF 187</a>, so that’s 383 €, not counting the <a href="https://www.iso.org/standard/86124.html" target="_blank" rel="noreferrer"><em>under development</em> extension</a>.</p>
<p>Standards should be part of the commons, otherwise it’s as dumb as the <a href="https://direct.mit.edu/qss/article/doi/10.1162/qss_a_00272/118070/The-Oligopoly-s-Shift-to-Open-Access-How-the-Big" target="_blank" rel="noreferrer">scientific publications business</a>.</p>
<h2 id="resources" tabindex="-1">Resources: <a class="header-anchor" href="#resources" aria-label="Permalink to &quot;Resources:&quot;">&ZeroWidthSpace;</a></h2>
<ul>
<li><a href="https://www.reddit.com/r/engineering/comments/jquuls/why_arent_iso_standards_free/" target="_blank" rel="noreferrer">Why aren't ISO standards free?</a></li>
<li><a href="https://www.theregister.com/2021/07/31/iso_paywall_battle/" target="_blank" rel="noreferrer">Tech spec experts seek allies to tear down ISO standards paywall</a></li>
</ul>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[My first game changer]]></title>
            <link>https://blog.mehdi.cc/notes/2023-11-20-rss-rss-rss</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-11-20-rss-rss-rss</guid>
            <pubDate>Mon, 20 Nov 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[RSS feeds variations for all tastes and deviances]]></description>
            <content:encoded><![CDATA[<h1 id="my-first-game-changer" tabindex="-1">My first game changer <a class="header-anchor" href="#my-first-game-changer" aria-label="Permalink to &quot;My first game changer&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>In the early 2000’s, I used to regularly visit a lot of videogames websites. Browsing them one by one was time-consuming, so imagine my happiness when I stumbled upon that cool tech with an equally cool name: <a href="https://developer.mozilla.org/en-US/docs/Glossary/RSS" target="_blank" rel="noreferrer">Really Simple Syndication (RSS)</a>.</p>
<p>Instead of wandering on the internet website by website, I could now use one software to automatically retrieve the news and read them offline. It was the first <strong>game changer</strong> in how I consume the web (using <a href="https://feedreader.com/screenshots.php" target="_blank" rel="noreferrer">Feedreader</a>, maybe?), to the point I ended up reading the whole <a href="https://www.rssboard.org/rss-specification" target="_blank" rel="noreferrer">RSS spec</a> and coding a feed generator in PHP.</p>
<div class="tip custom-block"><p class="custom-block-title">RSS feeds for all kind of deviances and tastes.</p>
<p>This blog now has <a href="./../about.html#feeds">multiple flavors of RSS feeds</a>: big ones with all the content, lightweight ones with only excerpts or notes. I think it’s best to let you decide how you want to consume that space.</p>
</div>
<h2 id="the-web-is-decentralized" tabindex="-1">The web is decentralized <a class="header-anchor" href="#the-web-is-decentralized" aria-label="Permalink to &quot;The web is decentralized&quot;">&ZeroWidthSpace;</a></h2>
<p>Since Google sent <a href="https://en.wikipedia.org/wiki/Google_Reader" target="_blank" rel="noreferrer">Google Reader</a> <a href="https://gcemetery.co/google-reader/" target="_blank" rel="noreferrer">to the graveyard</a>, many considered RSS as dead and irrelevant. These claims did not stop me to use them because there’s always enough websites providing them, and RSS are powerful: they allowed to gather my decentralized web in a centralized place way before Facebook started to centralize a big chunk of the (in-)humanity around cats videos and <a href="https://www.europarl.europa.eu/news/en/press-room/20211028IPR16121/facebook-whistleblower-frances-haugen-testifies-in-parliament-on-8-november" target="_blank" rel="noreferrer">shitty engagement algorithms</a>. I’ve always seen the web has decentralized.</p>
<details class="details custom-block"><summary>Did you know YouTube has RSS feeds, too?</summary>
<p>Find the ID of a YouTube channel (I don’t know if there’s a fast way to do this), and get the RSS feed by using this pattern:</p>
<div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0" v-pre=""><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">https://www.youtube.com/feeds/videos.xml?channel_id</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">=CHANNEL_ID</span></span></code></pre>
</div></details>
<p>Nowadays with the <a href="https://en.wikipedia.org/wiki/Fediverse" target="_blank" rel="noreferrer">Fediverse</a>, an additional layer for the decentralized and interconnected web is <a href="https://www.w3.org/TR/activitypub/" target="_blank" rel="noreferrer">technically layed</a>. RSS usages are straightforward to understand, but ActivityPub can change the web at another level of magnitude. I can’t really grasp the future it can enable and I hope to live long enough to see it, whether it becomes popular or stays at the margin.</p>
<p>If that topic is of any interest for you, a good place to start is on Aran Balkan’s blog: <a href="https://ar.al/2019/11/29/the-future-of-internet-regulation-at-the-european-parliament/" target="_blank" rel="noreferrer">in 2019, he talked about our dear internet at the European Commission</a>. Enlightening.</p>
<h2 id="aaron-schwartz" tabindex="-1">Aaron Schwartz <a class="header-anchor" href="#aaron-schwartz" aria-label="Permalink to &quot;Aaron Schwartz&quot;">&ZeroWidthSpace;</a></h2>
<p>Among all the persons who made RSS awesome, <a href="https://en.m.wikipedia.org/wiki/Aaron_Swartz" target="_blank" rel="noreferrer">Aaron Schwartz</a> especially stands out. Aaron <a href="https://www.harvardmagazine.com/2013/01/rss-creator-aaron-swartz-dead-at-26" target="_blank" rel="noreferrer">was</a> a brilliant person, a <em>hacktivist</em>, and his legacy includes many creations or contributions that are still very important: the RSS spec, the <a href="http://www.aaronsw.com/weblog/001189" target="_blank" rel="noreferrer">Markdown spec</a>, the <a href="https://creativecommons.org/2013/01/12/remembering-aaron-swartz/" target="_blank" rel="noreferrer">Creative Commons</a>, the <a href="https://archive.org/stream/GuerillaOpenAccessManifesto/Goamjuly2008_djvu.txt" target="_blank" rel="noreferrer">Guerilla Open Access Manifesto</a>, and more. The documentary <a href="https://en.m.wikipedia.org/wiki/The_Internet%27s_Own_Boy" target="_blank" rel="noreferrer"><em>The Internet's Own Boy: The Story of Aaron Swartz</em></a> is a must watch (on <a href="https://peertube.fr/videos/watch/5734aa91-b396-437c-9b3c-af3161282213" target="_blank" rel="noreferrer">PeerTube</a>, <a href="https://archive.org/details/TheInternetsOwnBoyTheStoryOfAaronSwartz" target="_blank" rel="noreferrer">Web Archive</a> or <a href="https://www.youtube.com/watch?v=9vz06QO3UkQ" target="_blank" rel="noreferrer">YouTube</a>).</p>
<p>I don’t remember when I discovered Aaron Schwartz, it was maybe five years ago. His story is definitely moving and I feel a bit ashamed not having been aware of it sooner. It was strange to discover it and be like “damn, I read his RSS spec a decade ago!”</p>
<p>Surprisingly, <a href="http://www.aaronsw.com/weblog/" target="_blank" rel="noreferrer">his blog</a> is still online.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[It used to be simple to download the iOS Simulator]]></title>
            <link>https://blog.mehdi.cc/notes/2023-11-18-macos-sonoma-downloading-ios-simulator-is-now-complicated</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-11-18-macos-sonoma-downloading-ios-simulator-is-now-complicated</guid>
            <pubDate>Sat, 18 Nov 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Three ways to download the iOS Simulator on macOS Sonoma, but only one works when your bandwidth sucks.]]></description>
            <content:encoded><![CDATA[<h1 id="it-used-to-be-simple-to-download-the-ios-simulator" tabindex="-1">It used to be simple to download the iOS Simulator <a class="header-anchor" href="#it-used-to-be-simple-to-download-the-ios-simulator" aria-label="Permalink to &quot;It used to be simple to download the iOS Simulator&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>The only benefit of having a bandwidth that sucks (thanks Proximus, everyone hates you!) is that you can experience the suffering of your end users before they do, and observe how a ton of websites behave in sub-optimal situations, so that you can learn a bit about web performance and consider <a href="https://adamsilver.io/blog/in-defence-of-graceful-degradation-and-where-progressive-enhancement-comes-in/" target="_blank" rel="noreferrer">what makes sense for your website</a>.</p>
<p>That’s it, everything else sucks. Now, <a href="./../articles/macos-sonoma-download-xcode-simulators-slow-bandwidth.html">even downloading the iOS Simulator needs a PhD</a>.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Lost git stashes]]></title>
            <link>https://blog.mehdi.cc/notes/2023-11-15-trashed-git-stashes</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-11-15-trashed-git-stashes</guid>
            <pubDate>Wed, 15 Nov 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[I probably got your back if you’ve lost your git stashes.]]></description>
            <content:encoded><![CDATA[<h1 id="lost-git-stashes" tabindex="-1">Lost git stashes <a class="header-anchor" href="#lost-git-stashes" aria-label="Permalink to &quot;Lost git stashes&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p><a href="https://css-irl.info/how-git-stash-can-help-you-juggle-multiple-branches" target="_blank" rel="noreferrer">Git stashes</a> are basically drafts for future commits, and also one of my favorite features: they allow to <strong>keep non-committed code on the side</strong> and bring the changes back later. I use them a lot while working on my personal code.</p>
<p>Years ago (and a couple of years later 😑), stupid me lost the stashes of a project, and gathering all informations to bring them back properly was no easy task, so I <a href="./../articles/recover-a-lost-git-stash.html">wrote about recovering them</a>. Drafts are important in mostly every app, and git is no exception.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Nice URLs]]></title>
            <link>https://blog.mehdi.cc/notes/2023-11-10-nice-urls</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-11-10-nice-urls</guid>
            <pubDate>Fri, 10 Nov 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[URL rewriting is cool. It always been. I wrote an article about it.]]></description>
            <content:encoded><![CDATA[<h1 id="nice-urls" tabindex="-1">Nice URLs <a class="header-anchor" href="#nice-urls" aria-label="Permalink to &quot;Nice URLs&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>It blown my mind when I discovered <a href="https://en.wikipedia.org/wiki/Rewrite_engine" target="_blank" rel="noreferrer">URL rewriting</a> 15 years ago. It was probably in the <a href="https://wordpress.org/documentation/article/customize-permalinks/#choosing-your-permalink-structure" target="_blank" rel="noreferrer">permalink setting</a> of a Wordpress admin panel. Back then, a lot of URLs of the internet ended by a file extension like <code>.html</code>, <code>.php</code> or <code>.asp</code>…</p>
<p>A decent URL is one that humans can read. It hints the page purpose and reflects the information architecture. My first article on this blog tells how to <a href="./../articles/vitepress-cleanurls-on-nginx-environment.html">configure Nginx to have nice URLs on a blog powered by Vitepress</a>.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
        <item>
            <title><![CDATA[Better late then never]]></title>
            <link>https://blog.mehdi.cc/notes/2023-10-20-start-something</link>
            <guid isPermaLink="false">https://blog.mehdi.cc/notes/2023-10-20-start-something</guid>
            <pubDate>Fri, 20 Oct 2023 00:00:00 GMT</pubDate>
            <description><![CDATA[Yup, I’ve started a blog.]]></description>
            <content:encoded><![CDATA[<h1 id="better-late-then-never" tabindex="-1">Better late then never <a class="header-anchor" href="#better-late-then-never" aria-label="Permalink to &quot;Better late then never&quot;">&ZeroWidthSpace;</a></h1>
<datetime :date="$frontmatter.publishedAt" formatter="longdate"/><p>I’m happy I found <a href="https://vitepress.dev" target="_blank" rel="noreferrer">Vitepress</a> to support this place, it will do the job for now. It’s been half-a-decade since I wanted to write and share about web stuff (mainly development), so here I am.</p>
<p>Things I need to do at some point:</p>
<ul>
<li><s>add RSS feed(s)</s>;</li>
<li>do some front-end stuff for convenience, including a custom theme;</li>
<li><s>remember the fourth item of that list</s> see how to connect the notes to the Fediverse.</li>
</ul>
<p>Anyway, today is the release date of the Nintendo Switch <a href="https://supermariobroswonder.nintendo.com/" target="_blank" rel="noreferrer"><em>Super Mario Wonder</em></a> videogame, and Nintendo has <a href="https://www.nintendo.com/us/whatsnew/ask-the-developer-vol-11-super-mario-bros-wonder-part-1/" target="_blank" rel="noreferrer">clearly been</a> high on drugs for this one.</p>
]]></content:encoded>
            <author>hi@mehdi.cc (Mehdi Merah)</author>
        </item>
    </channel>
</rss>