<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Posts on Pensées de Michel</title>
        <link>https://michel-slm.name/posts/</link>
        <description>Recent content in Posts on Pensées de Michel</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <copyright>&lt;a href=&#34;https://creativecommons.org/licenses/by/4.0/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CC BY 4.0&lt;/a&gt;</copyright>
        <lastBuildDate>Wed, 24 Jun 2026 00:00:00 +0000</lastBuildDate>
        <atom:link href="https://michel-slm.name/posts/index.xml" rel="self" type="application/rss+xml" />
        
        <item>
            <title>Introducing Oireachtas Votes: find out how Irish political parties vote</title>
            <link>https://michel-slm.name/posts/2026-06-24-oireachtas-votes-per-party-tally/</link>
            <pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-06-24-oireachtas-votes-per-party-tally/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post discusses tools reluctantly written with AI assistance. If you don&amp;rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Irish politics is refreshingly civilized by US or UK standards &amp;ndash; so much so, in fact, that the otherwise-excellent &lt;a href=&#34;https://github.com/michel-slm/oireachtas-votes/issues&#34;&gt;Oireachtas votes page&lt;/a&gt; does not break down votes by party affiliation!&lt;/p&gt;
&lt;p&gt;The raw data is actually there - which TD belongs to which party - and when the topic is contentious (like the recent vote to waive the three-day waiting period for abortion) - it does not help to know that &lt;a href=&#34;https://www.irishtimes.com/politics/2026/06/17/sinn-fein-bill-on-abortion-services-passes-crucial-dail-vote-with-help-of-ministers/&#34;&gt;some coalition ministers vote for it&lt;/a&gt;. How about the rest of the governing parties?&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p><strong>Caveat lector</strong></p>
<p>This post discusses tools reluctantly written with AI assistance. If you don&rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now</p>
</blockquote>
<p>Irish politics is refreshingly civilized by US or UK standards &ndash; so much so, in fact, that the otherwise-excellent <a href="https://github.com/michel-slm/oireachtas-votes/issues">Oireachtas votes page</a> does not break down votes by party affiliation!</p>
<p>The raw data is actually there - which TD belongs to which party - and when the topic is contentious (like the recent vote to waive the three-day waiting period for abortion) - it does not help to know that <a href="https://www.irishtimes.com/politics/2026/06/17/sinn-fein-bill-on-abortion-services-passes-crucial-dail-vote-with-help-of-ministers/">some coalition ministers vote for it</a>. How about the rest of the governing parties?</p>
<p>To answer this, and other questions, I wrote the <a href="https://crates.io/crates/oireachtas-votes">oireachtas-votes</a> tool.</p>
<p>Behold:</p>
<pre tabindex="0"><code>Dáil · 2026-06-17 · Health (Abolition of Three Day Wait Rule) (Amendment) Bill 2026: Second Stage (Resumed) [Private Members] (dbsect_67)
Divisions: 1

┌─────────────────────────────────┬────┬─────┬───────┬───────┐
│ Party                           ┆ Tá ┆ Níl ┆ Staon ┆ Total │
╞═════════════════════════════════╪════╪═════╪═══════╪═══════╡
│ Fianna Fáil                     ┆ 12 ┆ 30  ┆ 0     ┆ 42    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Sinn Féin                       ┆ 35 ┆ 0   ┆ 0     ┆ 35    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Fine Gael                       ┆ 11 ┆ 23  ┆ 0     ┆ 34    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Independent                     ┆ 2  ┆ 12  ┆ 0     ┆ 14    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Social Democrats                ┆ 12 ┆ 0   ┆ 0     ┆ 12    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Labour Party                    ┆ 10 ┆ 0   ┆ 0     ┆ 10    │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ People Before Profit-Solidarity ┆ 3  ┆ 0   ┆ 0     ┆ 3     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Independent Ireland             ┆ 0  ┆ 3   ┆ 0     ┆ 3     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Aontú                           ┆ 0  ┆ 2   ┆ 0     ┆ 2     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ Green Party                     ┆ 1  ┆ 0   ┆ 0     ┆ 1     │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌┼╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ TOTAL                           ┆ 86 ┆ 70  ┆ 0     ┆ 156   │
└─────────────────────────────────┴────┴─────┴───────┴───────┘
</code></pre><p>No matter your view on this issue and others, it probably helps to know how parties actually vote on things in addition to what they write in their manifestos. Hopefully this tool makes it easier to do that - I am no web developer, so unfortunately I can&rsquo;t commit to writing and hosting such a service.</p>
<p>Speaking of web services, this tool is written to not overload the Oireachtas API service - member data (which TD belongs to which party) is cached, and the tool can be asked to refresh the cache if needed.</p>
<h2 id="feedback-time">Feedback time</h2>
<p>Let me know if this is useful to you or if you have requests for improvement or bugfixes! Please file requests at the <a href="https://github.com/michel-slm/oireachtas-votes/issues">issue tracker</a>.</p>
<p><em>This post is day 38 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Introducing dbranch 🍥→🤝</title>
            <link>https://michel-slm.name/posts/2026-06-22-introducing-dbranch/</link>
            <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-06-22-introducing-dbranch/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post discusses tools reluctantly written with AI assistance. If you don&amp;rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Today&amp;rsquo;s post introduces &lt;code&gt;dbranch&lt;/code&gt;, a tool to update a Debian package in unstable, and rebuild downstream branches (currently supports Ubuntu PPAs and stable proposed-updates; backports support could be easily added once I have a package that needs it). Eagle-eyed readers might notice the naming similarity with my previous tool &lt;a href=&#34;https://crates.io/crates/ebranch&#34;&gt;ebranch&lt;/a&gt;; and the credit for the name and inspiration eventually came from Jens Petersen&amp;rsquo;s &lt;a href=&#34;https://hackage.haskell.org/package/fbrnch&#34;&gt;fbrnch&lt;/a&gt;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p><strong>Caveat lector</strong></p>
<p>This post discusses tools reluctantly written with AI assistance. If you don&rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now</p>
</blockquote>
<p>Today&rsquo;s post introduces <code>dbranch</code>, a tool to update a Debian package in unstable, and rebuild downstream branches (currently supports Ubuntu PPAs and stable proposed-updates; backports support could be easily added once I have a package that needs it). Eagle-eyed readers might notice the naming similarity with my previous tool <a href="https://crates.io/crates/ebranch">ebranch</a>; and the credit for the name and inspiration eventually came from Jens Petersen&rsquo;s <a href="https://hackage.haskell.org/package/fbrnch">fbrnch</a>.</p>
<p>It&rsquo;s the latest addition to the <a href="https://github.com/slopfest/sandogasa">Sandogasa</a> set of package maintenance tools and libraries. Previous <a href="https://michel-slm.name/tags/sandogasa/">blog posts</a> discuss tools that are generally Fedora / CentOS centric, though with exceptions (e.g. <code>sandogasa-report</code> can report on GitHub and GitLab activity, and so works for Debian since the VCS for most Debian packages, <a href="https://salsa.debian.org/">Salsa</a>, is a GitLab instance.</p>
<p>As I noted earlier, <a href="https://michel-slm.name/posts/2026-03-24-my-name-is-michel-and-i-use-llms/">I find LLM use very problematic</a> - but unfortunately necessary in my dayjob, and like it or not it pays the bill. So I&rsquo;ve been iterating on finding an approach that minimizes the concerns and maximizes the benefits&hellip; it&rsquo;s a work in progress, and I fully accept there are a lot of room for improvements - feedback welcome!</p>
<p>With the previous tools in the series the aim is to automate complex tasks that are tedious to do by hand; the tools would narrate what they are doing when run in verbose mode, but in a descriptive way. But those tools target the Fedora ecosystem, where the main sponsoring company is basically as <a href="https://newsroom.ibm.com/2026-05-28-ibm-and-red-hat-commit-5-billion-to-redefine-the-future-of-open-source-in-the-ai-era">AI pilled</a> as my employer.</p>
<p>With <code>dbranch</code> - bearing in mind <a href="https://lists.debian.org/debian-vote/2026/02/msg00000.html">the issue of allowing AI-assisted contributions is not settled</a> - I&rsquo;d rather err on the safe side. This tool invokes the exact same tools a Debian package maintainer would run (well, one set of such tools, it&rsquo;s opinionatedly based on my workflows), and when run in <code>--explain</code> mode, shows exactly the commands so someone can learn the ropes by following along. When in this mode, any changes to packaging metadata (e.g. <code>debian/changelog</code>) also results in the diff being shown.</p>
<p>The process of maintaining a Debian package is, after all, quite straightforward to a seasoned developer, but easy to get wrong when one is newer. Speaking for myself, I had a lot of questions in <code>#debian-mentors</code> (and private conversations) - while most of them revolve around creating new packages from scratch, there are some intricacies in less-often-explored paths (e.g. working with proposed updates) that was not obvious to me as someone whose main experience is with another distribution.</p>
<p>And now the workflow is consistent - and practice makes perfect; the more you use this the more you remember the steps!</p>
<p>A transcript is worth a thousand words, of course, so before I go too far:</p>
<pre tabindex="0"><code># updates the VCS checkout at ~/src/debian/pkgs/sugarjar; the Debian branch is debian/unstable; explain every step;
# do all the standard stages (import + build locally + lint + push to Salsa), then upload with dput, then `gbp tag`
$ dbranch -- update -C ~/src/debian/pkgs/sugarjar debian/unstable --explain --stage all,upload,tag --build-suite unstable
</code></pre><pre tabindex="0"><code># rebuild the current branch in the noble branch (which is assumed to be for Ubuntu noble)
$ dbranch rebuild noble --dry-run        # on debian/unstable, damo 3.2.8-1

» noble (codename: noble)
    $ git checkout noble
    $ git merge --signoff --no-edit debian/unstable

» Resolve the debian/changelog conflict
    $ git add debian/changelog
    $ git commit -s --no-edit

» Generate the rebuild changelog entry
    $ gbp dch --bpo -R -D noble

» Normalize the entry to 3.2.8-1~noble+1 / &#34;Rebuild for noble&#34;
    $ git commit -s -m &#39;Update changelog for 3.2.8-1~noble+1 release&#39; debian/changelog
</code></pre><p>(The commands that a user would need to run to repro are highlighted in green when the actual tool is run)</p>
<h2 id="feedback-time">Feedback time</h2>
<p>More details <a href="https://crates.io/crates/dbranch">on crates.io</a> and <a href="https://github.com/slopfest/sandogasa/blob/main/tools/dbranch/DEVELOPMENT.md">in the development notes</a>. I&rsquo;m not planning on packaging this officially in Debian yet, but it&rsquo;s an easy install with <code>cargo install dbranch</code>; I&rsquo;ve been dogfooding this to update my existing Debian packages (except when changes to patches are needed, or <a href="https://salsa.debian.org/michel/libkdumpfile/-/commit/0e7edc431251803a385f989c569a1957e2ae2d12">some debugging is required</a>) and it&rsquo;s been working really well.</p>
<p>Let me know if this is useful to you or if you have requests for improvement or bugfixes! Please file requests at the <a href="https://github.com/slopfest/sandogasa/issues">issue tracker</a>.</p>
<p><em>This post is day 37 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Work-Life Balance 🏖️ with Sandogasa 👒 Hat-Track</title>
            <link>https://michel-slm.name/posts/2026-06-05-wlb-with-sandogasa-hattrack/</link>
            <pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-06-05-wlb-with-sandogasa-hattrack/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post discusses tools reluctantly written with AI assistance. If you don&amp;rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Happy Friday! Of course it&amp;rsquo;s not Friday anymore in Asia, and if I finish this post in time, it&amp;rsquo;s still the work day in the Western Hemisphere.&lt;/p&gt;
&lt;p&gt;When you work in a large distributed project, it&amp;rsquo;s not dissimilar to working in a large multinational company - there are too many people to know everyone (or at least not at once!) and you might not know where someone is and if you&amp;rsquo;re pinging them in the middle of the night.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p><strong>Caveat lector</strong></p>
<p>This post discusses tools reluctantly written with AI assistance. If you don&rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now</p>
</blockquote>
<p>Happy Friday! Of course it&rsquo;s not Friday anymore in Asia, and if I finish this post in time, it&rsquo;s still the work day in the Western Hemisphere.</p>
<p>When you work in a large distributed project, it&rsquo;s not dissimilar to working in a large multinational company - there are too many people to know everyone (or at least not at once!) and you might not know where someone is and if you&rsquo;re pinging them in the middle of the night.</p>
<p>Sometimes tooling helps - if your company uses Slack, for instance, you can easily see someone&rsquo;s local time. My company has similar systems that we won&rsquo;t discuss here. But what do you use for Fedora and CentOS specifically?</p>
<p>In the <a href="https://michel-slm.name/posts/2026-03-24-announcing-sandogasa-for-fedora-packaging-workflows/">original Sandogasa announcement</a> I introduced <a href="https://crates.io/crates/sandogasa-hattrack"><code>sandogasa-hattrack</code></a> - at the time it already surfaces if someone has a custom status set (e.g. they might be on vacation).</p>
<p>With <a href="https://github.com/slopfest/sandogasa/blob/main/CHANGELOG.md#v0120">version 0.12.0</a> Hat Track can now display a user&rsquo;s local time - so you know if it&rsquo;s late at night - and even better, you can check if it&rsquo;s a public holiday! And the output is colour-coded so you know which is which. If you set your location in the <a href="https://accounts.fedoraproject.org/">Fedora Account System</a> and/or in <a href="https://discussion.fedoraproject.org/">Fedora&rsquo;s Discourse</a> these will be shown (if you are temporarily traveling, one neat hack is you can keep FAS in place and update your location in Discourse, and the tool will show both).</p>
<pre tabindex="0"><code>$ sandogasa-hattrack last-seen --only discourse,distgit,bodhi salimma
Looking up salimma in FASJSON...
Checking Discourse...
Checking Bodhi...
Checking dist-git...
Last seen: salimma

  Local time:    2026-06-05 17:20:59 IST (Fri — weekday)
  Country:       IE

  Bodhi          2026-06-05T10:02:15+00:00 (6 hours ago)
                 last update submitted
  Dist-git       2026-06-04T23:59:59+00:00 (16 hours ago)
                 last active on 2026-06-04
  Discourse      2026-06-03T13:25:34.689+00:00 (2 days ago)
                 last post
</code></pre><pre tabindex="0"><code>$ sandogasa-hattrack last-seen --only discourse,distgit,bodhi salimma --now 2026-06-01
Looking up salimma in FASJSON...
Checking Discourse...
Checking Bodhi...
Checking dist-git...
Last seen: salimma

  Local time:    2026-06-01 01:00:00 IST (Mon — holiday)
  Country:       IE
  Holiday:       June Holiday (Lá Saoire i mí an Mheithimh)

  Bodhi          2026-06-05T10:02:15+00:00 (6 hours ago)
                 last update submitted
  Dist-git       2026-06-04T23:59:59+00:00 (16 hours ago)
                 last active on 2026-06-04
  Discourse      2026-06-03T13:25:34.689+00:00 (2 days ago)
                 last post
</code></pre><pre tabindex="0"><code>$ sandogasa-hattrack last-seen --only discourse,distgit,bodhi petersen
Looking up petersen in FASJSON...
Checking Discourse...
Checking Bodhi...
Checking dist-git...
Last seen: petersen

  Local time:    2026-06-05 08:22:51 -08 (Fri)  [FAS]
  Local time:    2026-06-06 00:22:51 +08 (Sat — weekend)  [Discourse]
  Country:       SG

  Dist-git       2026-06-03T23:59:59+00:00 (1 day ago)
                 last active on 2026-06-03
  Bodhi          2026-06-03T19:06:42+00:00 (1 day ago)
                 last update submitted
  Discourse      2026-05-29T10:55:48.950+00:00 (1 week ago)
                 last post
</code></pre><p>You&rsquo;ll have to imagine the colour output as I don&rsquo;t really want to embed PNGs in this post :)</p>
<h2 id="feedback-time">Feedback time</h2>
<p>This is on its way to the <a href="https://bodhi.fedoraproject.org/updates/?search=0.12.0-2&amp;packages=sandogasa">testing repos</a> tonight.</p>
<p>Let me know if this is useful to you or if you have requests for improvement or bugfixes! Please file requests at the <a href="https://github.com/slopfest/sandogasa/issues">issue tracker</a>.</p>
<p>If this gains traction I&rsquo;m hoping to basically propose to replace the current <a href="https://fedoraproject.org/wiki/Vacation">vacation calendar</a> - which nobody really uses or knows about - with this.</p>
<p><em>This post is day 36 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Sandogasa, now for EPEL and CentOS SIG workflows too!</title>
            <link>https://michel-slm.name/posts/2026-04-02-sandogasa-for-epel-and-centos-sigs/</link>
            <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-04-02-sandogasa-for-epel-and-centos-sigs/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post discusses tools reluctantly written with AI assistance. If you don&amp;rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a follow-up to the &lt;a href=&#34;https://michel-slm.name/posts/2026-03-24-announcing-sandogasa-for-fedora-packaging-workflows/&#34;&gt;original Sandogasa announcement&lt;/a&gt;. Before I ended up &lt;a href=&#34;https://crates.io/crates/fedora-cve-triage&#34;&gt;&lt;code&gt;fedora-cve-triage&lt;/code&gt;&lt;/a&gt; to extract library crates and reuse them in the other Sandogasa tools, I already created two tools for managing CentOS Hyperscale SIG workflows, &lt;a href=&#34;https://crates.io/crates/hs-intake&#34;&gt;&lt;code&gt;hs-intake&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://crates.io/crates/hs-relmon&#34;&gt;&lt;code&gt;hs-relmon&lt;/code&gt;&lt;/a&gt;. It simply makes sense to also merge them back in and deduplicate functionalities.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p><strong>Caveat lector</strong></p>
<p>This post discusses tools reluctantly written with AI assistance. If you don&rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now</p>
</blockquote>
<p>This is a follow-up to the <a href="https://michel-slm.name/posts/2026-03-24-announcing-sandogasa-for-fedora-packaging-workflows/">original Sandogasa announcement</a>. Before I ended up <a href="https://crates.io/crates/fedora-cve-triage"><code>fedora-cve-triage</code></a> to extract library crates and reuse them in the other Sandogasa tools, I already created two tools for managing CentOS Hyperscale SIG workflows, <a href="https://crates.io/crates/hs-intake"><code>hs-intake</code></a> and <a href="https://crates.io/crates/hs-relmon"><code>hs-relmon</code></a>. It simply makes sense to also merge them back in and deduplicate functionalities.</p>
<p>And yes, I meant to post it yesterday then was afraid it might have gotten mistaken for an April&rsquo;s Fools prank&hellip; rewriting artisanal Python with vibe-coded Rust, after all! (see below).</p>
<h2 id="hs-intake">hs-intake</h2>
<p>Packages in Hyperscale are often backports, but they can be based on either Fedora or CentOS Stream packages - when doing larger backports (e.g. from Fedora Rawhide to CentOS Stream 9) it&rsquo;s important to check beforehand to see if the backporting is feasible, <em>and</em> if it might break anything depending on the older version.</p>
<pre tabindex="0"><code># Check if it is safe to backport libbpf from f44 to c9s
hs-intake safe-to-backport libbpf c9s f44

# Also check reverse dependencies on other branches
hs-intake safe-to-backport libbpf c9s f44 --also-check epel9,epel9-next

# JSON output
hs-intake safe-to-backport libbpf c9s f44 --json
</code></pre><h2 id="hs-relmon">hs-relmon</h2>
<p>Related to that - we want to know if the packages we carry are out of date. This is not really supported by <a href="https://release-monitoring.org/">release-monitoring.org</a> normally use by Fedora (though it supports other distributions too) because we don&rsquo;t always track the real upstream but our upstream is another distribution release (Fedora rawhide, Fedora stable, a newer CentOS Stream release).</p>
<p>This tool does that, uses <a href="https://repology.org/">Repology</a> as the source of truth, and handles filing issues and updating them just like Fedora&rsquo;s release monitoring integration in Bugzilla.</p>
<p>It still needs to be hooked up to run on schedule, but it&rsquo;s working well so far. See e.g. the <a href="https://gitlab.com/CentOS/Hyperscale/rpms/dracut/-/work_items/1">update available issue for dracut</a>.</p>
<p>Or see the tool in action (more examples on crates.io)</p>
<pre tabindex="0"><code>$ hs-relmon check-latest ethtool
ethtool
  Distribution    Version  Detail                  Status
  ──────────────  ───────  ──────────────────────  ──────
  Upstream        6.19
  Fedora Rawhide  6.19
  Fedora Stable   6.19     fedora_43
  CentOS Stream   6.15     centos_stream_10
  Hyperscale 9    6.15     ethtool-6.15-3.hs.el9   outdated
  Hyperscale 10   6.15     ethtool-6.15-3.hs.el10  outdated
</code></pre><h2 id="ebranch">ebranch</h2>
<p>One other existing tool is <a href="https://pypi.org/project/ebranch/"><code>ebranch</code></a>, <a href="https://michel-slm.name/posts/2022-02-04-centos-dojo-and-fosdem/">first presented in 2022</a>. Sadly work and personal obligations got in the way, so I did not quite have the time to finish the ongoing refactor to use <code>fedrq</code> - it works but there are issues I never quite had the time to debug, so it&rsquo;s really only usable as a set of Python library functions right now, not through the CLI directly.</p>
<p>It&rsquo;s been <a href="https://crates.io/crates/ebranch">rewritten in Rust</a> as part of the Sandogasa family, and is already proving very useful in wrapping up the rebase of <a href="https://github.com/uutils/coreutils"><code>uutils-coreutils</code></a> in EPEL 9 and <a href="https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2026-002984f44f">bringing it up in EPEL 10</a> - 166 source packages, including previously unbranched-and-built dependencies!</p>
<p>It&rsquo;s still missing Bugzilla and release engineering integration, though that was experimental in the Python codebase anyway, so I&rsquo;ll implement that after the long Easter weekend, and then sunset the original Python source code - and move it out of Pagure, which is <a href="https://discussion.fedoraproject.org/t/decommissioning-of-pagure-io-anticipated-by-flock-2026/181997">being decommissioned</a> - probably to either sourcehut or codeberg, so that the code lives on somewhere beyond PyPI tarballs.</p>
<pre tabindex="0"><code>$ ebranch build-order --koji rust-base64-simd \
    --source rawhide \
    --target-repo &#39;@koji:epel10.3-build-side-133542&#39;
rust-const-str rust-outref : rust-vsimd : rust-base64-simd
</code></pre><p>The COPR batch building &lsquo;hack&rsquo; is my favourite highlight</p>
<pre tabindex="0"><code>ebranch build-order --copr rust-base64-simd \
    --source rawhide \
    --target-repo &#39;@koji:epel10.3-build-side-133542&#39; &gt; build.sh
chmod +x build.sh
./build.sh @myuser/myproject --chroot epel-10-x86_64
</code></pre><p>As well as finally supporting installabiilty checks!</p>
<pre tabindex="0"><code>$ ebranch build-order rust-uucore \
    --source rawhide \
    --target-repo &#39;@koji:epel10.3-build-side-133542&#39; \
    --check-install --verbose --koji
[installability] resolving with 1 package(s)
[depth 1] resolving rust-uucore (0 queued, 0 resolved)
[installability] checking subpackages of rust-uucore
[installability] adding 7 package(s): rust-base64-simd, ...
[installability] resolving with 8 package(s)
...
[installability] adding 1 package(s): rust-const-str-proc-macro
[installability] resolving with 9 package(s)
...
rust-const-str rust-const-str-proc-macro rust-core_maths ...
</code></pre><h2 id="feedback-time">Feedback time</h2>
<p>Let me know if this is useful to you or if you have requests for improvement or bugfixes! The <a href="https://github.com/slopfest/sandogasa/issues">issue tracker</a> is up and there are tags for specific tools, though not for the shared library crates just yet.</p>
<p>Hopefully this scratches some other people&rsquo;s itches and not just mine.</p>
<h1 id="what-are-you-doing-outside-of-this-tool">What are you doing outside of this tool?</h1>
<p>Still planning to write artisanal Python code - <a href="https://pypi.org/project/myrepos-utils/"><code>myrepos-utils</code></a> is not going anywhere! - but I&rsquo;ll probably spend most of my paid time doing LLM-assisted Rust code, and free up enough spare time to finally write Fennel code again and sort out the Lua and Guile Scheme guidelines in Fedora &hellip; and get back sorting out my pathway to becoming a Debian Developer.</p>
<p><em>This post is day 35 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>The D&amp;D alignments of developers w.r.t. AI</title>
            <link>https://michel-slm.name/posts/2026-04-01-dnd-alignment-of-developers-wrt-ai/</link>
            <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-04-01-dnd-alignment-of-developers-wrt-ai/</guid>
            <description>&lt;p&gt;I have a more serious post coming, but I figured better not risk being confused for a bad joke (especially given the &lt;a href=&#34;https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/67RIQBACH6FN6FGOTJPAXHX4YL5Q2HPG/&#34;&gt;chardet controversy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So instead - something I&amp;rsquo;ve been promising some people I would write about &amp;hellip; the idea that we can classify developers based on their attitude towards (generative) AI, a.k.a. LLMs.&lt;/p&gt;
&lt;p&gt;Mind you, don&amp;rsquo;t take this too seriously, and especially, don&amp;rsquo;t feel singled out. I&amp;rsquo;m making fun of myself too here! Suggestions for improvements welcome, of course.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I have a more serious post coming, but I figured better not risk being confused for a bad joke (especially given the <a href="https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/67RIQBACH6FN6FGOTJPAXHX4YL5Q2HPG/">chardet controversy</a>.</p>
<p>So instead - something I&rsquo;ve been promising some people I would write about &hellip; the idea that we can classify developers based on their attitude towards (generative) AI, a.k.a. LLMs.</p>
<p>Mind you, don&rsquo;t take this too seriously, and especially, don&rsquo;t feel singled out. I&rsquo;m making fun of myself too here! Suggestions for improvements welcome, of course.</p>
<table>
	<thead>
			<tr>
					<th></th>
					<th>Lawful</th>
					<th>Neutral</th>
					<th>Chaotic</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Good</td>
					<td>Lawful good</td>
					<td>Neutral good</td>
					<td>Chaotic good</td>
			</tr>
			<tr>
					<td>Neutral</td>
					<td>Lawful neutral</td>
					<td>(True) neutral</td>
					<td>Chaotic neutral</td>
			</tr>
			<tr>
					<td>Evil</td>
					<td>Lawful evil</td>
					<td>Neutral evil</td>
					<td>Chaotic evil</td>
			</tr>
	</tbody>
</table>
<p>Inspired by, but not really derived from, the <a href="https://en.wikipedia.org/wiki/Alignment_%28Dungeons_%26_Dragons%29">Wikipedia entry</a>.</p>
<h2 id="lawful-good">Lawful good</h2>
<p>A lawful good developer tries to avoid using LLMs as much as possible on ethical grounds (copyright infringement, environmental impact, impact on employment, military use, etc.). They might regret foregoing lucrative, high-paying jobs that are conditional on embracing the use of LLMs.</p>
<h2 id="neutral-good">Neutral good</h2>
<p>A neutral good developer has no problem with copyright laws, but does not feel beholden to them (they probably take perverse satisfaction in <a href="https://en.wikipedia.org/wiki/Copyleft">copyleft</a>. They begrudgingly use LLMs if they have to, but long for the AI bust and sees it as a race against time to produce as much sustainable tools as possible with the tokens they are forced to spend.</p>
<h2 id="chaotic-good">Chaotic good</h2>
<p>A chaotic good developer embraces LLMs on the ground that intellectual property is theft, and thus LLM use basically liberates code that should not have been copyrighted in the first place. See <a href="https://lwn.net/Articles/1064541/">LWN&rsquo;s coverage of vibe-coded ext4 for OpenBSD</a>, with this <a href="https://marc.info/?l=openbsd-tech&amp;m=177412083903778&amp;w=2">choice quote</a>:</p>
<blockquote>
<p>We can freely steal each other in a new original way without copyright infringment its totally crazy the amount of code you can steal in just 1h. What took 20 years to Bell labs can now be done in 20 hours straight.</p>
</blockquote>
<h2 id="lawful-neutral">Lawful neutral</h2>
<p>A lawful neutral developer would strictly defer to what courts have decided when it comes to AI usage. Which in effect means they have no problem using it.</p>
<h2 id="true-neutral">True neutral</h2>
<p>True neutral developers would seek balance between the pro-LLM camp and the anti-LLM camp. Whether that&rsquo;s head in the sand is a good question.</p>
<h2 id="chaotic-neutral">Chaotic neutral</h2>
<p>A chaotic neutral developer would use whatever gains them the most enjoyment, and steers clear of the controversy. Life is too short.</p>
<h2 id="lawful-evil">Lawful evil</h2>
<p>Not sure you can find these among developers, but those who work to lobby for the chaotic evils (see below) might fit in here.</p>
<h2 id="neutral-evil">Neutral evil</h2>
<p>Neutral evil developers are typically selfish and have no strong principles, as long as the money is good. Big tech developers are often viewed to belong in this category, rightly or wrongly.</p>
<h2 id="chaotic-evil">Chaotic evil</h2>
<p>Some of the techbroligarchs comes to mind. Enough said.</p>
<h1 id="thats-it-folks">That&rsquo;s it, folks!</h1>
<p>It turns out to be more dark than I thought&hellip; oh well. Pop quiz - which category would you place <em>me</em> in? How about yourself?</p>
<p><em>This post is day 34 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Announcing Sandogasa, a set of Rust crates to help with Fedora packaging workflows</title>
            <link>https://michel-slm.name/posts/2026-03-24-announcing-sandogasa-for-fedora-packaging-workflows/</link>
            <pubDate>Tue, 24 Mar 2026 19:06:34 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-03-24-announcing-sandogasa-for-fedora-packaging-workflows/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caveat lector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post discusses tools reluctantly written with AI assistance. If you don&amp;rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve spent the past few weeks of having to use LLMs to scratch some long-standing itches that, unfortunately, no one in the community has had the time to solve programmatically.&lt;/p&gt;
&lt;h2 id=&#34;fedora-cve-triage&#34;&gt;fedora-cve-triage&lt;/h2&gt;
&lt;p&gt;It started off with &lt;a href=&#34;https://crates.io/crates/fedora-cve-triage&#34;&gt;&lt;code&gt;fedora-cve-triage&lt;/code&gt;&lt;/a&gt;, written to address the issue that a lot of CVE bugs filed against Fedora packages are badly attributed, and there is a lack of automation for handling issues filed against CVEs that have been addressed in a software update but failed to reference said issue.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p><strong>Caveat lector</strong></p>
<p>This post discusses tools reluctantly written with AI assistance. If you don&rsquo;t entertain
using them under any circumstance, and think even reading about them legally compromise
your ability to reimplement them yourselves, stop reading now</p>
</blockquote>
<p>I&rsquo;ve spent the past few weeks of having to use LLMs to scratch some long-standing itches that, unfortunately, no one in the community has had the time to solve programmatically.</p>
<h2 id="fedora-cve-triage">fedora-cve-triage</h2>
<p>It started off with <a href="https://crates.io/crates/fedora-cve-triage"><code>fedora-cve-triage</code></a>, written to address the issue that a lot of CVE bugs filed against Fedora packages are badly attributed, and there is a lack of automation for handling issues filed against CVEs that have been addressed in a software update but failed to reference said issue.</p>
<p>Sure, these should be addressed during the filing process, ideally, but as they say:</p>
<blockquote>
<p>`The best time to plant a tree was 20 years ago</p>
<p>The second best time is now`</p>
</blockquote>
<p>This tool is single-handedly responsible for triaging the issues linked here: <a href="https://bugzilla.redhat.com/show_bug.cgi?id=CVE-FalsePositive-Unshipped">CVE-FalsePositive-Unshipped</a>, <a href="https://bugzilla.redhat.com/show_bug.cgi?id=CVE-AlreadyFixed">CVE-AlreadyFixed</a>, and <a href="https://bugzilla.redhat.com/show_bug.cgi?id=CVE-FalsePositive-CrossEcosystem">CVE-FalsePositive-CrossEcosystem</a> - hopefully as I add more detectors and run this periodically it will help the team that is filing the bug recognize what major pain points packagers at the other end are seeing.</p>
<pre tabindex="0"><code>$ fedora-cve-triage js-fps -f configs/js-fps-folly-stack.toml --close-bugs
Checking 3 CVE bugs for JavaScript false positives...
FP: bug 2418496 — CVE-2025-13466 cachelib: body-parser denial of service [epel-9]
...

This will close 3 bug(s) as NOTABUG and mark them as blocking CVE-FalsePositive-Unshipped.
Proceed? [y/N] y
Closed 3 bug(s).
</code></pre><pre tabindex="0"><code>$ fedora-cve-triage bodhi-check -f configs/bodhi-check-freerdp.toml --close-bugs
...
This will close 2 bug(s) as ERRATA and mark 1 late-filed bug(s) as blocking CVE-AlreadyFixed.
Proceed? [y/N] y
Closed 2 bug(s) as ERRATA (freerdp-3.23.0-1.fc42)
Marked 1 bug(s) as blocking CVE-AlreadyFixed (late-filed)
</code></pre><pre tabindex="0"><code>$ fedora-cve-triage cross-ecosystem -f configs/cross-ecosystem.toml
Checking 1 CVE bugs for cross-ecosystem false positives...
FP: bug 2428370 — CVE-2025-14505 rust-elliptic-curve: Key handling flaws in Elliptic [fedora-43]

1 likely false positive(s) found.
</code></pre><h2 id="sandogasa-pkg-acl">sandogasa-pkg-acl</h2>
<p>A lot of times packages are maintained by a <code>de facto</code> group but there is no formal SIG attached, and it can be a pain to manually adjust the ACL on these (e.g. some people leave, or new packages get added - see e.g. how <a href="https://src.fedoraproject.org/rpms/python3.14">Python interpreters</a>, <a href="https://src.fedoraproject.org/rpms/python-django6">Django</a>, and all the Python packages in the Mailman stack that does not have a formal SIG yet.</p>
<p><a href="https://crates.io/crates/sandogasa-pkg-acl"><code>sandogasa-pkg-acl</code></a> lets you show, set, remove, and batch apply ACLs, e.g.</p>
<pre tabindex="0"><code>$ sandogasa-pkg-acl show freerdp
Package: freerdp

Users:
  ngompa: owner
  salimma: admin
  dcavalca: commit

Groups:
  kde-sig: commit

Your access (salimma): admin
</code></pre><pre tabindex="0"><code>$ sandogasa-pkg-acl apply acls.toml freerdp librdp
Set user &#39;ngompa&#39; to &#39;admin&#39; on freerdp
Set user &#39;salimma&#39; to &#39;commit&#39; on freerdp
Removed user &#39;olduser&#39; from freerdp
Set group &#39;kde-sig&#39; to &#39;commit&#39; on freerdp
Removed group &#39;old-group&#39; from freerdp
Set user &#39;ngompa&#39; to &#39;admin&#39; on librdp
</code></pre><p>or even give a package away</p>
<pre tabindex="0"><code>$ sandogasa-pkg-acl give dcavalca freerdp librdp
Gave freerdp to &#39;dcavalca&#39;
Gave librdp to &#39;dcavalca&#39;
</code></pre><h2 id="sandogasa-hattrack">sandogasa-hattrack</h2>
<p>I&rsquo;m a big fan of the old <a href="https://github.com/pypingou/fedora-active-user"><code>fedora-active-user</code></a> tool that pingou wrote. Unfortunately it basically has not seen any update recently (I see I have the last bugfix commit - five years ago!) and since then Fedora has added more online services like the <a href="https://discussion.fedoraproject.org/">Fedora Discussions</a> Discourse instance.</p>
<p>In discussions (ha!) on Discourse and Matrix with mattdm, our then Fedora Project Leader, I remember discussing how nobody uses the Fedora vacation calendar anymore (surprise! <a href="https://fedoraproject.org/wiki/Vacation">It&rsquo;s still a thing</a>) - and in unrelated discussion with some people, some raised privacy concern about stating beforehand that they will be away for a given period of time.</p>
<p>Behold, <a href="https://crates.io/crates/sandogasa-hattrack"><code>sandogasa-hattrack</code></a>:</p>
<pre tabindex="0"><code>$ sandogasa-hattrack last-seen salimma
Last seen: salimma

  Dist-git       2026-03-20T23:59:59+00:00 (3 days ago)
                 last active on 2026-03-20
  Bodhi          2026-03-20T23:44:44+00:00 (3 days ago)
                 last update submitted
  Bugzilla       2026-03-20T15:14:06+00:00 (4 days ago)
                 #2449640 Tracker for invalid, cross-ecosystem CVE
  Discourse      2026-03-18T10:51:27+00:00 (5 days ago)
                 last post
                 status:  🏖️ on vacation
                 expires: 2026-04-01 00:00 UTC (in 1 week)
  Mailing lists  2026-03-13T09:58:20+00:00 (1 week ago)
                 Retiring python-sphinx-hoverxref
</code></pre><p>You can get more details by asking for <code>bodhi</code>, <code>bugzilla</code>, <code>discourse</code>, <code>distgit</code>, or <code>mailman</code> instead of <code>last-seen</code>. Status is not shown if the user does not set a custom status, and status expiration is also not shown if the user just select &rsquo;never&rsquo; for expiration.</p>
<h2 id="the-backing-crates">The backing crates</h2>
<p>Once I started on the second tool, it became obvious that surely the code should be shared between the two. Things snowballed and now there are <a href="https://github.com/slopfest/sandogasa/tree/main/crates">8 library crates</a>; they are all published individually on <code>crates.io</code>.</p>
<h2 id="feedback-time">Feedback time</h2>
<p>Let me know if this is useful to you or if you have requests for improvement or bugfixes! The <a href="https://github.com/slopfest/sandogasa/issues">issue tracker</a> is up and there are tags for specific tools, though not for the shared library crates just yet.</p>
<p>Hopefully this scratches some other people&rsquo;s itches and not just mine.</p>
<p><em>This post is day 33 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Hi, my name is Michel, and I (reluctantly) use LLMs</title>
            <link>https://michel-slm.name/posts/2026-03-24-my-name-is-michel-and-i-use-llms/</link>
            <pubDate>Tue, 24 Mar 2026 15:41:31 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-03-24-my-name-is-michel-and-i-use-llms/</guid>
            <description>&lt;p&gt;&lt;em&gt;&lt;br/&gt;  the old pen resists                                                                             &lt;br/&gt;  but the cursor blinks, waiting—&lt;br/&gt;  I press Enter. Fine.&lt;br/&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;~ Claude Opus 4.6 (1M context)&lt;/p&gt;
&lt;p&gt;If you know where I work, you&amp;rsquo;ve probably heard of &lt;a href=&#34;https://www.hrgrapevine.com/us/content/article/2025-11-17-meta-to-formally-review-employees-ai-performance-from-2026&#34;&gt;news reports&lt;/a&gt; that we will be judged on AI-driven impact. I&amp;rsquo;ll let you drawn your own conclusion on how much truth there is in the reports, but you can listen to &lt;a href=&#34;https://www.hrgrapevine.com/us/content/article/2025-11-17-meta-to-formally-review-employees-ai-performance-from-2026&#34;&gt;what Zuck said about AI&lt;/a&gt; in a recent earnings report.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p><em><br/>  the old pen resists                                                                             <br/>  but the cursor blinks, waiting—<br/>  I press Enter. Fine.<br/>
</em></p>
<p>~ Claude Opus 4.6 (1M context)</p>
<p>If you know where I work, you&rsquo;ve probably heard of <a href="https://www.hrgrapevine.com/us/content/article/2025-11-17-meta-to-formally-review-employees-ai-performance-from-2026">news reports</a> that we will be judged on AI-driven impact. I&rsquo;ll let you drawn your own conclusion on how much truth there is in the reports, but you can listen to <a href="https://www.hrgrapevine.com/us/content/article/2025-11-17-meta-to-formally-review-employees-ai-performance-from-2026">what Zuck said about AI</a> in a recent earnings report.</p>
<p>I&rsquo;ve thus had to make my peace with actually using LLMs - the goalpost has shifted from <em>&ldquo;should I use LLMs&rdquo;</em> to <em>&quot;<strong>where</strong> and <strong>when</strong> should I use LLMs&quot;</em> .</p>
<blockquote>
<p>Everyone got a mortgage to pay</p>
<p><em>~ Nick Naylor, Thank you for Smoking</em></p>
</blockquote>
<p>Is this pragmatism? Or is this selling out? Probably a bit of both, the and I don&rsquo;t blame those with strong ethical concerns if they stop reading now. But if you&rsquo;re still here, these are some ground rules I&rsquo;m setting myself - if it proves helpful to you, I&rsquo;d love to hear about it; if you have feedback, likewise, I&rsquo;m all ears.</p>
<p>Note that I still share many of the concerns about LLM usage (Vxrpenter/AIMania has a <a href="https://github.com/Vxrpenter/AIMania/blob/main/WHY.md#why">good summary</a>) - and that informs what is written below to some degree.</p>
<h2 id="dont-force-llm-usage-on-people">Don&rsquo;t force LLM usage on people</h2>
<p>If an organization has a policy encouraging AI use (hello, US tech companies), or has an AI-Assisted Contributions Policy (e.g. see <a href="https://www.hrgrapevine.com/us/content/article/2025-11-17-meta-to-formally-review-employees-ai-performance-from-2026">Fedora&rsquo;s</a>), then I don&rsquo;t mind using LLM assistance - if it&rsquo;s contributing to an existing tool, though, I&rsquo;d check with other stakeholders before starting work.</p>
<h2 id="make-room-for-human-contributions">Make room for human contributions</h2>
<p>AI-assisted contribution should not crowd out human contributions - either by overwhelming the capacity of human reviewers, by taking on all the tasks that are reserved for onboarding new human contributors, or by making the codebase so complex that it&rsquo;s hard for human contributors to work on it.</p>
<p>The onboarding problem is &hellip; something that companies and open source communities don&rsquo;t really have a good answer for. Simon Richter <a href="https://lists.debian.org/debian-vote/2026/02/msg00028.html">flagged this</a> as a concern in a recent discussion on <code>debian-vote</code>.</p>
<p>The reality, though old-timers (me included) might be loathe to accept it at first, is that in my corner of the Linux distribution space, at least, there&rsquo;s way too much to do and not enough people to do it, so - provided I try to make sure the generated code is not (overly) slop (py), it&rsquo;s probably overall a net positive for certain kinds of work.</p>
<p>If this feels too vague, wait for the next blog post where I&rsquo;ll be announcing one such tool.</p>
<h2 id="help-the-llm-help-itself">Help the LLM help itself</h2>
<p>Provide clear instructions about how to structure, build, and test your code. e.g. (sneak preview alert!) see my most recent <a href="https://raw.githubusercontent.com/slopfest/sandogasa/refs/heads/main/.claude/CLAUDE.md">CLAUDE.md</a>.</p>
<p>I try to commit early, commit often, and require good test coverage to ensure that it&rsquo;s easy for a human reviewer (or human contributor) to understand the intent behind the code. And to ensure that documentation is accurate and up-to-date &ndash; this is one thing that a lot of us humans (myself definitely included) are bad at, so in this way AI is a net win.</p>
<h2 id="compartmentalize">Compartmentalize</h2>
<p>I&rsquo;m steering clear of some problem domains - anything security sensitive or any domain I am not knowledgeable enough to review the generated code.</p>
<p>I&rsquo;m also leaving space for some programming languages - most of my Rust and Python output will likely be AI-assisted, but for languages I want to learn because they spark joy (anything Lispy or functional - e.g. <a href="https://fennel-lang.org/">Fennel</a>) I&rsquo;d be coding artisanally.</p>
<p>Likewise with forges - GitHub is hopelessly &ldquo;AI pilled&rdquo; so I don&rsquo;t mind parking my AI-assisted projects there, but anything artisanal I&rsquo;ll probably put on Codeberg or Sourcehut. GitLab is somewhere in between.</p>
<h2 id="thats-all-folks">That&rsquo;s all, folks</h2>
<p>I should stop writing so I can write my announcement post and make this less theoretical. Public discussion welcome, or feel free to reach out privately if you don&rsquo;t feel comfortable discussing this in public.</p>
<p><em>This post is day 32 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>On Lent, spring, and strategic autonomy</title>
            <link>https://michel-slm.name/posts/2026-03-23-on-lent-spring-and-autonomy/</link>
            <pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2026-03-23-on-lent-spring-and-autonomy/</guid>
            <description>&lt;p&gt;&lt;em&gt;&lt;br/&gt;hole in my sock&lt;br/&gt;letting spring&lt;br/&gt;in&lt;br/&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;~ Raymond Roseliep, as &lt;a href=&#34;https://www.christiancentury.org/features/iowa-poet-priest-who-mastered-haiku&#34;&gt;quoted&lt;/a&gt; in &lt;em&gt;The Christian Century&lt;/em&gt;&amp;rsquo;s January 2024 issue&lt;/p&gt;
&lt;p&gt;When New Year comes I told myself, ah, I missed my chance of writing down some New Year resolutions - but never mind that, there&amp;rsquo;s still Lunar New Year, and after that, Nowruz, right?&lt;/p&gt;
&lt;p&gt;Both have now passed too, but it&amp;rsquo;s still Lent - for &lt;a href=&#34;https://days.to/until/easter&#34;&gt;almost two weeks&lt;/a&gt;, and daylight saving is about to kick in here in Europe &lt;a href=&#34;https://www.rte.ie/lifestyle/living/2026/0323/1564728-everything-you-need-to-know-about-the-clocks-changing-in-2026/&#34;&gt;this Sunday&lt;/a&gt;; while the European Parliament voted in favour of abolishing it in 2019 implementation is still lagging.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p><em><br/>hole in my sock<br/>letting spring<br/>in<br/>
</em></p>
<p>~ Raymond Roseliep, as <a href="https://www.christiancentury.org/features/iowa-poet-priest-who-mastered-haiku">quoted</a> in <em>The Christian Century</em>&rsquo;s January 2024 issue</p>
<p>When New Year comes I told myself, ah, I missed my chance of writing down some New Year resolutions - but never mind that, there&rsquo;s still Lunar New Year, and after that, Nowruz, right?</p>
<p>Both have now passed too, but it&rsquo;s still Lent - for <a href="https://days.to/until/easter">almost two weeks</a>, and daylight saving is about to kick in here in Europe <a href="https://www.rte.ie/lifestyle/living/2026/0323/1564728-everything-you-need-to-know-about-the-clocks-changing-in-2026/">this Sunday</a>; while the European Parliament voted in favour of abolishing it in 2019 implementation is still lagging.</p>
<p>So I guess it&rsquo;s not too late for Lenten / New Year hybrid resolutions &hellip;</p>
<p>And I promise I&rsquo;ll tie it in with the haiku, even!</p>
<p>My Lenten discipline this year is to be less grumpy and to not sweat the small stuff - it&rsquo;s a bit touch and go whether I&rsquo;ve succeeded or not, there are good days and bad days. It certainly helps, though, given all the tumult going on, both in the workplace (AI! AI everywhere! A post about that is coming next) - and of course, in the world at large, triggered mostly by <a href="https://michel-slm.name/posts/2025-09-01-hello-from-europe/">the leaders of the country we left last year</a>.</p>
<p>The haiku above feels like a whimsical reminder to find the bright side of any situation, which &hellip; given that spring has begun, feels appropriately optimistic.</p>
<p>The world is in the worst energy crisis in a generation</p>
<p>    Perhaps we will finally be serious about the green transition (at least in Europe and Asia)</p>
<p>Big Tech companies are in bed with an alarmingly reckless, authoritarian government</p>
<p>    It is time to <a href="https://www.goeuropean.org/">Go European</a>. And speaking of which I highly recommend tuning in to <a href="https://www.europeanspodcast.com/"><em>The Europeans</em></a> podcast - especially if you live here, but even if you don&rsquo;t - for bringing in eclectic news from around Europe in a cheerful way, and for promoting European culture in general. And last but not least, for showing that the <a href="https://shop.fairphone.com/about-us">Fairphone</a> is <a href="https://www.europeanspodcast.com/all-episodes/what-do-the-epstein-files-reveal-about-europes-elite?rq=fairphone">actually practical</a>!</p>
<p>Some open source communities seem recklessly all in on using Generative AI</p>
<p>    Perhaps&hellip; wait, you have to wait for my next post for that!</p>
<p>Meanwhile, the market chaos has led us to divest of almost all our investments - although <a href="https://www.ft.com/content/1d842dc4-b6cd-46f4-bee8-7dffd21464fd?syn-25a6b1a6=1">unlike FT&rsquo;s Stuart Kirk</a> we did not quite go 100% cash - but when it&rsquo;s time to re-buy we&rsquo;ll probably be way more intentional and invest mostly in ESGs, and companies that are making the EU more independent</p>
<p>Another post that I owe some people is my recommendations for a non-US, ideally free/libre/open source, tech stack. Hopefully I get round to writing that after the AI article.</p>
<p><em>This post is day 31 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Hello from Europe!</title>
            <link>https://michel-slm.name/posts/2025-09-01-hello-from-europe/</link>
            <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2025-09-01-hello-from-europe/</guid>
            <description>&lt;p&gt;I have informed colleagues and close external collaborators already, but today it&amp;rsquo;s finally time to make it public: as of now I am officially working out of Meta&amp;rsquo;s Dublin office&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, and am no longer based in the US.&lt;/p&gt;
&lt;h2 id=&#34;why-ireland&#34;&gt;Why Ireland?&lt;/h2&gt;
&lt;p&gt;Some reasons I am happy to disclose publicly; for the rest, feel free to ask me to regale you in person, if we know each other; preferably over a beer or something stronger.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I have informed colleagues and close external collaborators already, but today it&rsquo;s finally time to make it public: as of now I am officially working out of Meta&rsquo;s Dublin office<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, and am no longer based in the US.</p>
<h2 id="why-ireland">Why Ireland?</h2>
<p>Some reasons I am happy to disclose publicly; for the rest, feel free to ask me to regale you in person, if we know each other; preferably over a beer or something stronger.</p>
<p>We&rsquo;ve always been interested in exploring Europe, but long flights are hard on our little kid; the work-life balance in Europe is also more appealing than US work culture (though I must say my team is better than most. But still, I do get extra vacation days simply by being based in an EU country&hellip;)</p>
<p>Not having to worry too much about saving for college is also really nice.</p>
<p>Work-wise, though, this means my team has people in my role (Production Engineer - roughly a hybrid software engineering / site reliability engineering role) in both North American and European time zones, which should improve overlap with both internal and external partner teams and organizations.</p>
<p>We could have moved to the UK instead; Ireland has a housing crisis after all. To their credit though, the country at least admits it has a problem, whether it can solve it or not. London feels even more unaffordable (unless you trade in a long commute) and we have mostly been living in high-cost-of-living areas of the US. We are definitely lucky and privileged to be able to afford it, and hopefully we won&rsquo;t contribute too much to worsening the housing situation - but on balance, being in the EU, living in a smaller city, and having more stable politics wins out over being in a more exciting city and being paid slightly more.</p>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>Nothing much changes, except I will be more judicious in attending US-based meetings that take place late in the evening in Europe, at least at the beginning while we are still busy settling down.</p>
<p>I expect to still make All Systems Go in late September, but will probably curtail travel for the rest of the year until we are properly settled. Next year I expect to make more European conferences and reduce travel to North America (especially the US) as much as possible - after all, that&rsquo;s partly why I relocate here.</p>
<p>Looking forward to being able to make FrOSCon and Kernel Recipes next year! And probably even a future GUADEC and DebConf.</p>
<p><em>This post is day 30 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>due to tight timing, and out of our immigration consultant&rsquo;s abundance of caution, I am finishing a work visit to the London office at the moment and will be spending a few more days decompressing before actually flying to Dublin&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>On working sustainably</title>
            <link>https://michel-slm.name/posts/2025-06-03-on-working-sustainably/</link>
            <pubDate>Tue, 03 Jun 2025 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2025-06-03-on-working-sustainably/</guid>
            <description>&lt;p&gt;Looking at what tags to use for this post, it surprised me that &lt;a href=&#34;https://michel-slm.name/posts/2023-03-19-on-recharge/&#34;&gt;it&amp;rsquo;s been over two years&lt;/a&gt; since I posted about taking recharge (basically a short sabbatical).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Plus ça change, plus c&amp;rsquo;est la même chose&amp;hellip;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Some reorganizations happen at work, but I&amp;rsquo;m still basically working upstream on Linux distributions. I &lt;a href=&#34;https://www.linkedin.com/feed/update/urn:li:activity:7101389243641462784/&#34;&gt;have a US passport&lt;/a&gt; now, which means traveling to the Schengen area is now straightforward; on the other hand it does mean more travel and more jet lag&amp;hellip; and &lt;a href=&#34;https://www.linkedin.com/posts/michellind_im-happy-to-share-that-i-got-promoted-to-activity-7298163136677781506-5tl7/&#34;&gt;I got promoted&lt;/a&gt;!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Looking at what tags to use for this post, it surprised me that <a href="https://michel-slm.name/posts/2023-03-19-on-recharge/">it&rsquo;s been over two years</a> since I posted about taking recharge (basically a short sabbatical).</p>
<p><em>Plus ça change, plus c&rsquo;est la même chose&hellip;</em></p>
<p>Some reorganizations happen at work, but I&rsquo;m still basically working upstream on Linux distributions. I <a href="https://www.linkedin.com/feed/update/urn:li:activity:7101389243641462784/">have a US passport</a> now, which means traveling to the Schengen area is now straightforward; on the other hand it does mean more travel and more jet lag&hellip; and <a href="https://www.linkedin.com/posts/michellind_im-happy-to-share-that-i-got-promoted-to-activity-7298163136677781506-5tl7/">I got promoted</a>!</p>
<p>Which brings us to the point of this post &ndash; working hours. Between being held to a higher bar and wanting to have some time off for family and personal hobbies (in that order), I am making some changes to allow myself to work more sustainably:</p>
<ul>
<li>I am paid to work on community projects - that means I&rsquo;m already spending a significant portion of working hours on them. ∴ unless an emergency comes up, I do not check mailing lists and the Fedora Matrix after hours and on weekends
<ul>
<li>My Fedora <a href="https://fedoraproject.org/wiki/User:Salimma#README">README</a> has some of these, that I will revise over time. I have a similar document on the company-internal wiki</li>
<li>My Fedora Matrix is tagged with the timezone I&rsquo;m in and an activity indicator. Likewise with the Fedora discourse. If something is sent to me when I&rsquo;m away and it&rsquo;s not in a more persistent form (Matrix UX is horrible), assume I missed it and try again during my work hours</li>
</ul>
</li>
<li>Finding my voice and saying no more often in technical meetings, if someone proposes something that is ill defined, risky, or can foreseeably alienate people unnecessarily</li>
<li>Triaging what work to continue doing, and what to let go to refocus on other matters
<ul>
<li>I&rsquo;m about to start <a href="https://communityblog.fedoraproject.org/f42-elections-results/">my second stint at the Fedora Engineering Steering Committee</a> - congratulations on my fellow incumbents who all get reelected this cycle!</li>
<li>I&rsquo;m co-chairing the new CentOS <a href="https://www.centos.org/sigs/#proposed-updates">Proposed Updates SIG</a> that addresses a gap that CentOS Stream users have been struggling with since the start</li>
<li>Doing some desktop work to try and build a community around the CentOS <a href="https://www.centos.org/sigs/#hyperscale">Hyperscale SIG</a></li>
<li>To make time for this,  I voluntarily stepped down from the <a href="https://docs.fedoraproject.org/en-US/epel/epel-policy-steering-commitee/">EPEL Steering Committee</a>. This reminds me of my side conversation with <a href="https://fedoramagazine.org/introducing-fedora-project-leader-jef-spaleta/">new Fedora Project Leader</a> Jef Spaleta - we need new faces in projects. Congrats to <a href="https://communityblog.fedoraproject.org/epel-steering-committee-election-interview-with-robby-callicotte-rcallicotte-2/">Robby Callicotte</a> who is taking over my seat</li>
<li>I&rsquo;ve been slowly automating the release process for packages I maintain, and dropping some that are too much trouble, to try and keep my package load under control</li>
</ul>
</li>
</ul>
<p>Also - this likely merits its own future post - I&rsquo;m generally taking myself off Matrix (due to <a href="https://hachyderm.io/@michelin/114587848432180262">performance</a> and <a href="https://discussion.fedoraproject.org/t/154401/12">safety</a> issues) and Telegram (crypto, AI, etc. issues). If you have Signal or Delta Chat or IRC (but you have a bouncer set up so I won&rsquo;t be replying into the void), send me a DM or email and we can exchange contact information. Life is too short to keep fighting broken tooling.</p>
<p><em>This post is day 29 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Spreading Beefy Miracle love</title>
            <link>https://michel-slm.name/posts/2025-04-01-spreading-beefy-miracle-love/</link>
            <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2025-04-01-spreading-beefy-miracle-love/</guid>
            <description>&lt;p&gt;Many long-time Fedora contributors and users have fond memories of Beefy Miracle, the Fedora 17 code name, and its mascot. Major Haydn has a &lt;a href=&#34;https://major.io/p/bring-back-fedora-beefy-miracle-boot-splash/&#34;&gt;great writeup&lt;/a&gt; about it, with instructions on switching back to its Plymouth boot splash on your Fedora machine.&lt;/p&gt;
&lt;p&gt;But&amp;hellip; why limit one&amp;rsquo;s chance at &amp;ldquo;accepting the truth and beauty&amp;rdquo; (sic) to Fedora users (or, strictly speaking, to one&amp;rsquo;s Fedora machines)? This simply would not do. This sort of fun does not deserved to be contained.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Many long-time Fedora contributors and users have fond memories of Beefy Miracle, the Fedora 17 code name, and its mascot. Major Haydn has a <a href="https://major.io/p/bring-back-fedora-beefy-miracle-boot-splash/">great writeup</a> about it, with instructions on switching back to its Plymouth boot splash on your Fedora machine.</p>
<p>But&hellip; why limit one&rsquo;s chance at &ldquo;accepting the truth and beauty&rdquo; (sic) to Fedora users (or, strictly speaking, to one&rsquo;s Fedora machines)? This simply would not do. This sort of fun does not deserved to be contained.</p>
<pre tabindex="0"><code>                               .-=-. __
                    ,         /     \   \    ||||
                   \\\\      |O___O |    | \\||||
                   \   //    | \_/  |    |  \   /
                    &#39;-=/----/|     /     |   |-&#39;
                           // //  /     -----&#39;
                          //  \\ /      /
                         //  // /      /
                        //  \\ /      /
                       //  // /      /
                      /|   &#39; /      /
                      //\___/      /
                     //   ||\     /
                     \\_  || &#39;-=-&#39;
                     /&#39; /  \\_.-
                    /  /    -=| |
                    &#39;-&#39;      |  |
                              &#39;-&#39;

                         -----------------------

CONGRATULATIONS, MEAT-BASED LIFE FORM! YOU HAVE ACCEPTED THE TRUTH AND
BEAUTY OF THE GLORIOUS HAPPY HOT-DOG INTO YOUR LIFE AND COMPUTING-BOX.

YOUR COMPUTING-MACHINE SHOULD NOW BE AUTOMATICALLY CONFIGURED TO ENJOY
BEEFY STARTUP EXPERIENCE WITH PIQUANT MUSTARD INDICATING PROGRESS!
</code></pre><p>I&rsquo;ve been meaning to do a release for other distributions on April 1. Because&hellip; why not, right?</p>
<p>Time flies, and suddenly it was March 31st already yesterday, and after a dentist visit that made me realize I would have to spend even more $$$ out of pocket, I figured I need some comic relief. And finally stopped procrastinated and started&hellip; uh, evangelizing?</p>
<p>Turns out it&rsquo;s more &hellip; fun than expected. The path to &ldquo;plenty of giggles and lots of consternation&rdquo; (per Major) is full of consternation indeed!</p>
<ul>
<li>the <a href="https://wwoods.fedorapeople.org/hot-dog/">home page</a> does not host the latest tarball, the one actually used in Fedora</li>
<li>there is also no git repo</li>
<li>so I ended up <a href="https://codeberg.org/michelin/plymouth-theme-hot-dog">recreating a git repo</a>, based on the released tarballs from the home page plus using <code>fedpkg srpm</code> to retrieve the last tarball from the Fedora lookaside cache</li>
<li>Licensing archeology - we need to chase the authors to find the intended license, as the text was not checked in - <a href="https://src.fedoraproject.org/rpms/plymouth-theme-hot-dog/c/76254966a25bb9e933d08297d27d2f722ce0bee2?branch=rawhide">it&rsquo;s CC-BY-SA but which one?</a></li>
<li>Ubuntu does not ship <code>plymouth-set-default-theme</code> so I finally <a href="https://salsa.debian.org/michel/plymouth-theme-hot-dog/-/commit/82a1e0c33119bbc62546ee56a135367f9f64c8da">had to learn how to set up alternatives</a></li>
<li>Debian and Ubuntu <a href="https://salsa.debian.org/michel/plymouth-theme-hot-dog/-/commit/872b219b5a93c2a536568f2fa91c13c450b5cd11">packaged Plymouth themes differently</a></li>
</ul>
<p>But after this baptism by fire (or mustard?) - anyway, a self inflicted one as I could have started this earlier - all the kinks are worked out.</p>
<p>The screenshots are shown on a VM (which runs Debian arm64 on my Mac) - since that&rsquo;s easier to capture - but I have this running on AlmaLinux Kitten, as well as Debian and Ubuntu on bare metal. Incidentally the last issue found, that <a href="https://salsa.debian.org/michel/plymouth-theme-hot-dog/-/commit/8bd0504f2434305e45021c6340ce3ff2b1e1958b">I forgot to build this for Architecture: all</a> was discovered trying to take the screenshot when the <code>amd64</code> build won&rsquo;t install :P</p>

    <img src="/img/screenshots/beefy-miracle-luks.png"  alt="Beefy Miracle LUKS password dialog"  class="center"  />



    <img src="/img/screenshots/beefy-miracle-mustard-progress.png"  alt="Beefy Miracle booting up on a Debian VM. The mustard indicates progress"  class="center"  />


<p>Install and enjoy!</p>
<ul>
<li><a href="https://mentors.debian.net/package/plymouth-theme-hot-dog/">Debian Mentors</a> for Debian - hopefully this gets sponsored and submitted this week</li>
<li><a href="https://copr.fedorainfracloud.org/coprs/salimma/plymouth-theme-hot-dog-epel/">COPR</a> for Enterprise Linux distributions</li>
<li><a href="https://launchpad.net/~michel-slm/&#43;archive/ubuntu/beefy-miracle/">PPA</a> for Ubuntu</li>
</ul>
<p><em>This post is day 28 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>On querying your Fedora dist-git PR statistics</title>
            <link>https://michel-slm.name/posts/2025-01-07-distgit-stats/</link>
            <pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2025-01-07-distgit-stats/</guid>
            <description>&lt;p&gt;Over the course of 2024, I&amp;rsquo;ve been increasingly adopting Packit&amp;rsquo;s &lt;a href=&#34;https://packit.dev/posts/pull-from-upstream&#34;&gt;pull-from-upstream&lt;/a&gt; for automating some package updates. I still think it should only be used judiciously - e.g. I generally only enable it for packages that do not embed code from other projects (necessitating license audits each time) and have good test coverage (because I&amp;rsquo;ll merge the PR if the test suite and installability checks both pass). Some packaging ecosystems that require the RPM spec to be regenerated each time (such as Rust) are disqualified by default. In fact, FESCo just voted today on the &lt;a href=&#34;https://pagure.io/fesco/issue/3317&#34;&gt;Automated Packit onboarding&lt;/a&gt; Change Proposal - and approved it provided it&amp;rsquo;s opt-in rather than opt-out, given these and similar concerns that several members share.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Over the course of 2024, I&rsquo;ve been increasingly adopting Packit&rsquo;s <a href="https://packit.dev/posts/pull-from-upstream">pull-from-upstream</a> for automating some package updates. I still think it should only be used judiciously - e.g. I generally only enable it for packages that do not embed code from other projects (necessitating license audits each time) and have good test coverage (because I&rsquo;ll merge the PR if the test suite and installability checks both pass). Some packaging ecosystems that require the RPM spec to be regenerated each time (such as Rust) are disqualified by default. In fact, FESCo just voted today on the <a href="https://pagure.io/fesco/issue/3317">Automated Packit onboarding</a> Change Proposal - and approved it provided it&rsquo;s opt-in rather than opt-out, given these and similar concerns that several members share.</p>
<p>(We cheat a bit with the <a href="https://src.fedoraproject.org/rpms/folly">folly RPM</a>&rsquo;s Packit setup - Folly does not have a stable ABI, and actually landing Packit PRs for it would require rebuilding the set of dependent packages - so we actually use Packit there to trigger a new scratch build for every weekly tag, and intervene manually when we see it failing and the failure is not spurious; we actually try to merge only once per Fedora release unless there is a security issue).</p>
<p>So the question is - can I quantify this work? How many releases did Packit do on my behalf, freeing up my time to do other things, over the entire year?</p>
<p>The data is not broken up by user in the Packit dashboard, so we have to look at the Pagure deployment that Fedora used for dist-git repositories &ndash; unfortunately there is an impedance mismatch, where you can ask for the list of PRs you&rsquo;re eligible to auction, and specify a date range and the status of that PR, but&hellip; that&rsquo;s it. You can&rsquo;t filter server-side by who actually closed the PR, or who authored it.</p>
<p>Given <a href="https://communityblog.fedoraproject.org/fedora-chooses-forgejo/">Fedora is replacing Pagure with Forgejo</a> adding this support in Pagure seems like a dead end &ndash; so I did the next best thing - I <a href="https://git.sr.ht/~michel-slm/fedora-packaging-scripts/commit/3385c1e7c7eb8f1cf6de590b0f3c645d081923c0">wrote a script</a> so I can answer this question - and so can you!</p>
<pre tabindex="0"><code>$ ./distgit-pr-stats.py --help
Usage: distgit-pr-stats.py [OPTIONS] FAS

Options:
  --closed TEXT
  --per-page INTEGER              Results per page (1-100)  [default: 20]
  --requester TEXT
  --status [Open|Closed|Merged|All]
                                  [default: Open]
  --help                          Show this message and exit.

$ ./distgit-pr-stats.py salimma --closed 2024-01-01..2025-01-01 --per-page 100 --requester packit --status Merged &gt; 2024.json

$ ./distgit-json-unique-count.sh 2024.json
      1 &#34;btrfsd&#34;
      1 &#34;btrfs-progs&#34;
      1 &#34;dispenso&#34;
      2 &#34;fennel&#34;
      2 &#34;folly&#34;
      2 &#34;lagrange&#34;
     32 &#34;python-damo&#34;
      1 &#34;python-drgn&#34;
      1 &#34;python-fastjsonschema&#34;
      1 &#34;python-result&#34;
      1 &#34;python-selenium&#34;
      2 &#34;python-shortuuid&#34;
      1 &#34;python-stdlibs&#34;
      1 &#34;python-usort&#34;
      1 &#34;sonic-visualiser&#34;
      2 &#34;stow&#34;
      2 &#34;the_foundation&#34;
      1 &#34;vamp-plugin-sdk&#34;
      1 &#34;zcfan&#34;
</code></pre><p>Let me know if there are any additional operations you want to see supported by replying on Mastodon, sending me an email, or finding me on Matrix.</p>
<p><em>This post is day 27 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Hello Nushell!</title>
            <link>https://michel-slm.name/posts/2024-02-21-hello-nushell/</link>
            <pubDate>Wed, 21 Feb 2024 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2024-02-21-hello-nushell/</guid>
            <description>&lt;p&gt;After &lt;a href=&#34;https://github.com/nushell/nushell/commits/main/?author=michel-slm&#34;&gt;about two years&lt;/a&gt; of on-and-off work, I&amp;rsquo;m happy to report that &lt;a href=&#34;https://www.nushell.sh/&#34;&gt;Nushell&lt;/a&gt; has &lt;a href=&#34;https://bodhi.fedoraproject.org/updates/?search=&amp;amp;packages=rust-nu&amp;amp;status=stable&#34;&gt;finally landed&lt;/a&gt; in Fedora and EPEL 9, and can be installed simply using &lt;code&gt;sudo dnf --refresh install nu&lt;/code&gt; on Fedora and your favorite Enterprise Linux distribution (I&amp;rsquo;m partial to CentOS Stream myself, but also RHEL, AlmaLinux, etc.)&lt;/p&gt;
&lt;p&gt;(For those not familiar with Nushell yet, think of it as a cross-platform Powershell written in Rust - it lets you manipulate pipelines of structured data, the way you might be using &lt;a href=&#34;https://github.com/kellyjonbrazil/jc&#34;&gt;jc&lt;/a&gt; and &lt;a href=&#34;https://jqlang.github.io/jq/&#34;&gt;jq&lt;/a&gt; with a regular shell)&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>After <a href="https://github.com/nushell/nushell/commits/main/?author=michel-slm">about two years</a> of on-and-off work, I&rsquo;m happy to report that <a href="https://www.nushell.sh/">Nushell</a> has <a href="https://bodhi.fedoraproject.org/updates/?search=&amp;packages=rust-nu&amp;status=stable">finally landed</a> in Fedora and EPEL 9, and can be installed simply using <code>sudo dnf --refresh install nu</code> on Fedora and your favorite Enterprise Linux distribution (I&rsquo;m partial to CentOS Stream myself, but also RHEL, AlmaLinux, etc.)</p>
<p>(For those not familiar with Nushell yet, think of it as a cross-platform Powershell written in Rust - it lets you manipulate pipelines of structured data, the way you might be using <a href="https://github.com/kellyjonbrazil/jc">jc</a> and <a href="https://jqlang.github.io/jq/">jq</a> with a regular shell)</p>
<p>Currently version 0.88.1 is packaged - <code>nu-command</code> stalled for a bit since it required packaging some <a href="https://crates.io/crates/coreutils">uutils coreutils</a> crates, and I also initially overestimated how hard it would be to <a href="https://github.com/nushell/nushell/pull/11572">replace its unmaintained htmlescape dependency with v_htmlescape</a> - but now that everything has landed I&rsquo;ll bump everything to whatever is the latest version (currently it&rsquo;s 0.90.1) the next time I have several hours to spare.</p>
<p>As a byproduct, we&rsquo;re also now very close to <a href="https://bugzilla.redhat.com/show_bug.cgi?id=2260598">having uutils coreutils in Fedora</a>! All the dependencies are in, the <code>rust-coreutils</code> review has some feedback that needs addressing.</p>
<p>So &hellip; give it a spin, and hope you like it! There are extra dependencies that I have not packaged yet, give me a shout as a reply on Mastodon or on Matrix and let me know if there is any in particular that you want packaged.</p>
<p>Huge thanks to the Nushell developers for all the friendly responses, Fabio Valentini for all the insightful reviews, and Neal Gompa for the RPM macro workaround helping get this into EPEL 9.</p>
<p><em>This post is day 26 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Strange Loop recap</title>
            <link>https://michel-slm.name/posts/2023-10-04-strange-loop/</link>
            <pubDate>Wed, 04 Oct 2023 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2023-10-04-strange-loop/</guid>
            <description>&lt;p&gt;I finally got round to attending the Strange Loop conference for the first and last time (since the organizers won&amp;rsquo;t do another one) .&lt;/p&gt;
&lt;h2 id=&#34;whats-in-a-name&#34;&gt;What&amp;rsquo;s in a name?&lt;/h2&gt;
&lt;p&gt;From an old &lt;a href=&#34;https://cs.illinois.edu/news/strange-loop-conference&#34;&gt;write-up on UIUC&amp;rsquo;s website&lt;/a&gt;) - this being the alma mater of organizer Alex Miller: the conference has been described as a &amp;ldquo;who&amp;rsquo;s - who of interesting people doing applied computer science&amp;rdquo;. The &lt;a href=&#34;https://www.thestrangeloop.com/index.html&#34;&gt;current website&lt;/a&gt; describes its goal as &amp;ldquo;to make connections with the creators and users of the languages, libraries, tools, and techniques at the forefront of the industry&amp;rdquo;.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I finally got round to attending the Strange Loop conference for the first and last time (since the organizers won&rsquo;t do another one) .</p>
<h2 id="whats-in-a-name">What&rsquo;s in a name?</h2>
<p>From an old <a href="https://cs.illinois.edu/news/strange-loop-conference">write-up on UIUC&rsquo;s website</a>) - this being the alma mater of organizer Alex Miller: the conference has been described as a &ldquo;who&rsquo;s - who of interesting people doing applied computer science&rdquo;. The <a href="https://www.thestrangeloop.com/index.html">current website</a> describes its goal as &ldquo;to make connections with the creators and users of the languages, libraries, tools, and techniques at the forefront of the industry&rdquo;.</p>
<p>The first conference was held in 2009 at Tivoli Theater - in the Loop neighborhood of St Louis, and the second conference <a href="https://web.archive.org/web/20110716154108/http://www.strangeloop2010.com/attachments/0001/2600/StrangeLoop2010Program.pdf">was also held in the same neighborhood</a> (courtesy of the Internet Archive). The other, better known, reason behind the name is that Alex happened to have a copy of the Hofstadter book &ldquo;I Am a Strange Loop&rdquo;.</p>
<h2 id="venue-and-logistics">Venue and logistics</h2>
<p>Downtown St Louis is surprisingly nice - though a bit on the warm side (with a temperature delta of over 10 F from northern Illinois). The city itself is typically car oriented - 20 mins by car from the airport to the conference venue vs over 90 mins by public transportation (slower than cycling!). And the conference party was held at the <a href="https://www.citymuseum.org">City Museum</a> which is indeed &ldquo;weirdly wonderful&rdquo; as its website proclaims.</p>
<p>Flying turns out to be an issue for some people - there are tales of delays, some people apparently missed the conference entirely - I live close enough to drive there, which does have its drawbacks as well - around 5.5 hours of driving time plus rest and charging breaks basically eat up the day before and after the conference! It does let me see some historic monuments on the way back though.</p>
<p>And Electrify America sucks. Don&rsquo;t let me get started on that&hellip;</p>
<h2 id="talks">Talks</h2>
<p>The keynotes are amazing</p>
<ul>
<li>
<p>Spotify&rsquo;s Taylor Poindexter and MS&rsquo; Scott Hanselman kicked the conference off with <a href="https://www.thestrangeloop.com/2023/how-to-build-a-meaningful-career.html">How to Build a Meaningful Career</a> - you really can&rsquo;t tell it was <a href="https://hachyderm.io/@michelin/111105823257392647">Scott&rsquo;s third talk of the morning</a> - is a fun tale of two careers in the software industry. I want to share some of the anecdotes but I&rsquo;ll ruin it, so you should <a href="https://www.youtube.com/watch?v=_egQrM13qyM">watch the talk yourself</a></p>
</li>
<li>
<p>AnnMarie Thomas from University of St. Thomas&rsquo; Playful Learning Lab on <a href="https://www.thestrangeloop.com/2023/playing-with-engineering.html">Playing with Engineering</a> - this one is amazing on many levels. The least of it is that she was a below average student and still end up a professor! But mostly that we can make everything fun - she co-founded OK Go Sandbox (yes, the band with that <a href="https://www.youtube.com/watch?v=qybUFnY7Y8w">Rube Goldberg music video</a>!), which did an amazing worldwide project during the pandemic lockdowns, got deaf people to participate in music, and&hellip; again, just <a href="https://www.youtube.com/watch?v=6Ao8GS488hA">watch it yourself</a>!</p>
</li>
</ul>
<p>The closing keynotes are equally great</p>
<ul>
<li>
<p>Julia Evans (Wizard Zines)&rsquo;s <a href="https://www.thestrangeloop.com/2023/how-to-make-hard-things-easy.html">How to Make Hard Things Easy</a> on investigating weird bugs - picking Bash and DNS as examples! <a href="https://www.youtube.com/watch?v=30YWsGDr8mA">Video</a></p>
</li>
<li>
<p>Randall Munroe (xkcd) - <a href="https://www.thestrangeloop.com/2023/drawing-comics-at-work.html">Drawing Comics at Work</a>. Do I even have to explain this one? The video is not up yet, I&rsquo;ll edit when it does get uploaded. It&rsquo;s a tall order, but listening to Randall speak (and talk through some XKCD strips and What If questions) is even funnier than reading XKCD</p>
</li>
</ul>
<p>This leaves the bulk of the talks - there are five parallel tracks, and unfortunately it&rsquo;s impossible to be in five places at once - so I&rsquo;m still awaiting some talks&rsquo; videos so I can finally see them. I&rsquo;ll just provide some quick impressions of the ones I did manage to attend, and list some I want to watch.</p>
<h3 id="day-1">Day 1</h3>
<ul>
<li>
<p><a href="https://www.thestrangeloop.com/2023/why-programming-languages-matter.html">Why Programming Languages Matter</a> by Andrew Black, from the PWLConf track: the presenter posits a weak form of Sapir-Whorf hypothesis, in which the constructs available to you shape the way you both solve problems and build other languages on top. Drawing from his long personal career &ndash; I certainly have not heard of most of the languages he mentioned.</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/turning-graalvm-from-research-to-product.html">Turning GraalVM from Research to Product</a> by Oracle&rsquo;s Thomas Wuerthinger. I&rsquo;ve been away from the JVM world for a long time, but this is super interesting - both to learn more about GraalVM itself (TL;DR you can AOT-compile Java apps for much improved startup performance, and actually higher throughput and better resource utilization as well. Apparently JIT&rsquo;s benefits do not really outweigh the costs since you don&rsquo;t recompile that often), as well as how he justified investment in it to Oracle management</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/babashka-a-meta-circular-clojure-interpreter-for-the-command-line.html">Babashka: a meta-circular Clojure interpreter for the command line</a> by Michiel Borkent. I am a Lisp head at heart, and Strange Loop historically has a strong Lisp presence, so how can I miss this when it&rsquo;s held in the same room right after the GraalVM talk? Babashka uses GraalVM, of course, which means not only does it run fast, but you can deploy it just by copying a single binary, like with Golang and Rust. Recommended to anyone who has ever written a Lisp interpreter before in their CS 101 class.</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/software-and-the-game-of-go.html">Software &amp; The Game of Go</a> by another Clojurist, David Nolen. Not that much about software and more about Go, though still interesting</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/comedy-writing-with-small-generative-models.html">Comedy Writing With Small Generative Models</a> by Jamie Brew, previously with The Onion. Only caught the end of the talk as was switching rooms for the next talk below, which meant I landed right in an audience participation karaoke session singing popular songs with lyrics replaced (with matching cadence) using his small generative models (Beatles&rsquo; Yesterday with text from Craigslist car ads, anyone?). There is AI fun to be had outside of LLMs folks.</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/the-level-of-human-involvement-behind-remote-desktop-protocol-brute-force-attacks.html">The level of human involvement behind Remote Desktop Protocol brute-force attacks</a> by Andréanne Bergeron). Interesting talk about using a honeypot and analyzing the resulting attack patterns.</p>
</li>
</ul>
<h3 id="onwards-to-day-2">Onwards to day 2&hellip;</h3>
<ul>
<li><a href="https://www.thestrangeloop.com/2023/playable-quotes-for-game-boy-games.html">Playable Quotes for Game Boy Games</a> by Joël Franušić and Adam Smith - <a href="https://www.youtube.com/watch?v=z9JYOZWLMlo">video</a>. In a testament to the hallway track of conferences - or in this case, should I say the party track - I got convinced to attend this session after bumping into the presenters over whiskey and beer at the conference party the night before!</li>
</ul>
<p>The idea is fascinating - and actually works - you can easily make a playable quote (a.k.a. a demo) of a game by analyzing what memory regions are used during a recorded session, and mask out the rest. It&rsquo;s easier for 8-bit platforms, of course, but they have this working for older x86 games as well these days, which can be emulated thanks to WASM.</p>
<p>Try for yourself: <a href="https://tenmile.quote.games/">Playable Quotes for Game Boy</a></p>
<ul>
<li><a href="https://www.thestrangeloop.com/2023/the-economics-of-programming-languages.html">The Economics of Programming Languages</a> by Elm creator Evan Czaplicki. This one is both hilarious and &hellip; a bit depressing. TL;DR only very few kind of organizations can grow and sustain successful programming languages, and a lot of it is simply the economics (there&rsquo;s a lot of fascinating details into Google paying Apple and Mozilla for becoming the default search engine provided, which of course help fund the development of Swift and Rust).</li>
</ul>
<p>I&rsquo;ve been thinking a lot these days about software supply chain risks, and so this talk is very timely. How do we better align the incentives between those who write software and those who consume them? There have certainly been incidents when a critical software get belatedly funded only after a major vulnerability is found.</p>
<ul>
<li>
<p><a href="https://www.thestrangeloop.com/2023/can-a-programming-language-reason-about-systems.html">Can a Programming Language Reason About Systems?</a> by Marianne Bellotti (author of Kill It With Fire) - interesting talk about a more practical formal logic. It&rsquo;s especially fun watching her use it to find exceptions in government regulations!</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/birdsong-as-code.html">Birdsong as code</a> by Chris Ford - interesting talk about how birdsong is indeed music, and that you can actually generate reasonable approximations with computer code. In Clojure, of course. Lisp is great for these sort of things</p>
</li>
</ul>
<p>That&rsquo;s the end of the tracks - after that we have Alex Miller&rsquo;s closing <a href="https://www.thestrangeloop.com/2023/a-long-strange-loop.html">A Long Strange Loop</a> - <a href="https://www.youtube.com/watch?v=suv76aL0NrA">video</a> - it&rsquo;s a lot of effort to run a conference, and the pandemic hit them hard (they managed to shift the 2020 reservation to 2023, so it&rsquo;s natural to end now. Apparently venues have to be booked up to 3 years in advance, yikes). There&rsquo;s a tribute to people from Strange Loop who has unfortunately passed away - including, surprisingly, Bob Lee, the Square CTO (who gave the <a href="https://www.youtube.com/watch?v=qRTIpyd_snc">Java Puzzlers</a> talk with Josh Bloch in 2013) followed by the two closing keynotes</p>
<h3 id="talks-i-want-to-catch-up-on">Talks I want to catch up on</h3>
<ul>
<li>
<p><a href="https://www.thestrangeloop.com/2023/lessons-from-building-github-code-search.html">Lessons from Building GitHub Code Search</a> by Luke Francl - <a href="https://www.youtube.com/watch?v=CqZA_KmygKw">video</a> - would be fascinating to find out their strategies for scaling up</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/swift-as-cplusplus-successor-in-foundationdb.html">Swift as C++ Successor in FoundationDB</a> by Konrad Malawski - we increasingly are adopting Rust, and it&rsquo;s interesting to learn about other people&rsquo;s experience adopting newer, safer languages</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/risks-and-opportunities-of-ai-in-incident-management.html">Risks and Opportunities of AI in Incident Management</a> by Emily Arnott - self-explanatory</p>
</li>
<li>
<p><a href="https://www.thestrangeloop.com/2023/building-koi-pond-simulating-millions-of-slack-clients.html">Building Koi Pond: Simulating Millions of Slack Clients</a> by Maude Lemaire</p>
</li>
</ul>
<p>and there&rsquo;s probably many more&hellip; but they have not been uploaded (apologies to Tom Lehrer)</p>
<p><em>This post is day 25 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://hachyderm.io/@michelin">@michelin@hachyderm.io</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Perf 6.x now in CentOS Hyperscale!</title>
            <link>https://michel-slm.name/posts/2023-06-29-perf-6-for-hyperscale/</link>
            <pubDate>Thu, 29 Jun 2023 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2023-06-29-perf-6-for-hyperscale/</guid>
            <description>&lt;p&gt;At Meta, we use sample-based profiling with &lt;code&gt;perf&lt;/code&gt; to guide performance optimization work &amp;ndash; otherwise we would need even more servers than the ones we already have! This &lt;a href=&#34;https://engineering.fb.com/2018/06/19/data-infrastructure/accelerate-large-scale-applications-with-bolt/&#34;&gt;2018 engineering blog post on BOLT&lt;/a&gt; is still highly relevant.&lt;/p&gt;
&lt;p&gt;For a primer on &lt;code&gt;perf&lt;/code&gt;, I highly recommend reading Brendan Gregg&amp;rsquo;s &lt;a href=&#34;https://www.brendangregg.com/perf.html&#34;&gt;perf examples&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;perf&lt;/code&gt; source code is part of the Linux source tree; there are &lt;a href=&#34;https://mirrors.kernel.org/pub/linux/kernel/tools/perf/&#34;&gt;standalone releases&lt;/a&gt; but Linux distributions tend to build it from the entire kernel tarball instead (e.g. &lt;a href=&#34;https://packages.debian.org/bookworm/linux-perf&#34;&gt;Debian&lt;/a&gt;, &lt;a href=&#34;https://packages.fedoraproject.org/pkgs/kernel-tools/perf/&#34;&gt;Fedora&lt;/a&gt;, &lt;a href=&#34;https://packages.ubuntu.com/mantic/linux-tools-common&#34;&gt;Ubuntu&lt;/a&gt;). Take note of this, it will become relevant later.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>At Meta, we use sample-based profiling with <code>perf</code> to guide performance optimization work &ndash; otherwise we would need even more servers than the ones we already have! This <a href="https://engineering.fb.com/2018/06/19/data-infrastructure/accelerate-large-scale-applications-with-bolt/">2018 engineering blog post on BOLT</a> is still highly relevant.</p>
<p>For a primer on <code>perf</code>, I highly recommend reading Brendan Gregg&rsquo;s <a href="https://www.brendangregg.com/perf.html">perf examples</a> page.</p>
<p>The <code>perf</code> source code is part of the Linux source tree; there are <a href="https://mirrors.kernel.org/pub/linux/kernel/tools/perf/">standalone releases</a> but Linux distributions tend to build it from the entire kernel tarball instead (e.g. <a href="https://packages.debian.org/bookworm/linux-perf">Debian</a>, <a href="https://packages.fedoraproject.org/pkgs/kernel-tools/perf/">Fedora</a>, <a href="https://packages.ubuntu.com/mantic/linux-tools-common">Ubuntu</a>). Take note of this, it will become relevant later.</p>
<h2 id="the-problem">The problem</h2>
<p><code>perf</code> has excellent backward compatibility: a performance profile taken with an older version can be read by a newer version. Forward compatibility is not a given though.</p>
<p>And when you are in the middle of transitioning between two CentOS Stream releases, you might end up in a situation where a performance profile is taken on a system running a newer <code>perf</code> (CentOS Stream 9 has <a href="https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/perf-5.14.0-331.el9.x86_64.rpm">5.14.0-331.el9</a> while CentOS Stream 8 has <a href="http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/perf-4.18.0-499.el8.x86_64.rpm">4.18.0-499.el8</a>) &ndash; but you might want to run the analysis on a system with the older <code>perf</code>&hellip;</p>
<h2 id="enter-hyperscale-sig">Enter Hyperscale SIG</h2>
<p>At Meta, we run CentOS Stream on our servers, with packages from the <a href="https://sigs.centos.org/hyperscale/">Hyperscale SIG</a> layered on top. This allows us to selectively upgrade system packages as necessary - <code>systemd</code> is a prime example, but also, yes, <code>perf</code>.</p>
<p>Our initial plan was to simply maintain the same kernel for both <code>hsx.el8</code> (experimental repository for CentOS Stream 8) and <code>hsx.el9</code> (experimental repository for CentOS Stream 9). <code>perf</code> is really a byproduct here; the main reason to have a kernel package in Hyperscale is to enable certain functionalities (like the Btrfs file system) that are not enabled in the stock CentOS Stream kernel.</p>
<p>The <code>hsx.el8</code> kernel is lagging behind, unfortunately (TL;DR - we need to redo the way we rebase changes from newer kernels). To the point that, as it turns out, <code>perf-5.14.0-76.hs2.hsx.el9</code> is no longer compatible with <code>perf-5.14.0-331.el9</code>! Remember, the <code>x.y.z</code> version number does not tell you everything, as features can be backported.</p>
<p>We initially thought a <a href="https://git.centos.org/rpms/kernel/blob/d0cfe23f7ec4fc1638a60230f0d61b43a9e30358/f/SOURCES/perf-disable-invalid-bpf_prog_info-warning.patch">small fix</a> would fix the issue, but it turns out the kernel no longer even builds thanks to Hyperscale also shipping an updated <code>pahole</code>. Kudos to one of my colleagues, Stefan Roesch, for <a href="https://devkernel.io/posts/pahole-error/">blogging about the workaround</a> - with an <a href="https://git.centos.org/rpms/kernel/blob/d0cfe23f7ec4fc1638a60230f0d61b43a9e30358/f/SOURCES/fix-for-pahole-1-24.patch">adapted patch</a> we at least have a buildable kernel again&hellip; and of course it does not solve the issue. Plus, iterating on changes is slow&hellip; being part of the kernel package means when you rebuild, you have to also rebuild the Linux kernel and all the kernel modules.</p>
<h2 id="can-we-just-build-perf-itself">Can we just build <code>perf</code> itself?</h2>
<p>Yes, yes you can. Remember upstream provides standalone releases? They are even signed!</p>
<p>&hellip; not so easy: unfortunately trying to get this built with all the relevant distro compiler settings&hellip; takes a while to get right. Not something you want to do while you have to fix an actual issue, certainly!</p>
<p>Luckily, there is a middle ground: when looking to just rebuild the Fedora kernel to see if its <code>perf</code> would work fine on CentOS Stream, I noticed that&hellip; aha&hellip; of course, Fedora no longer builds <code>perf</code> and other tools with the kernel, it&rsquo;s part of the <a href="https://src.fedoraproject.org/rpms/kernel-tools">kernel-tools</a> source package instead.</p>
<p>Home run! &hellip; and&hellip; again, not so fast. Initially, everything seems fine. I have to <a href="https://git.centos.org/rpms/kernel-tools/c/b4512449415fc40cec92841e3d4632fd6ff9c0f2?branch=c9s-sig-hyperscale">disable <code>LIBBPF_DYNAMIC</code></a> at least for <code>c8s</code> because the system <code>libbpf</code> is too old, and surprisingly, flipping <code>LIBBPF_DYNAMIC=1</code> to <code>0</code> does not work - you have to remove the entire definition - but after that this builds in <code>mock</code> against Hyperscale targets! Time to build on <a href="https://cbs.centos.org">CBS</a>. Drats.</p>
<ul>
<li><a href="https://git.centos.org/rpms/kernel-tools/c/e535eb9be8b3c57a2a1da5fb0377dec243b853c6?branch=c9s-sig-hyperscale">bpftool has to be disabled</a> - it fails only on CBS. Still need to troubleshoot why.</li>
<li><a href="https://git.centos.org/rpms/kernel-tools/c/0918a21b806ffa1af793e2128ab4c7654585b18f?branch=c9s-sig-hyperscale">coresight has to be disabled on c8s</a></li>
</ul>
<p>After that we finally have working builds&hellip; for both <code>hs.el8</code> and <code>hs.el9</code> &hellip; and then discovered that the <code>hs.el8</code> build pulls in newer modular Perl RPMs&hellip; while on our servers we disable modular repos by default. So these won&rsquo;t install.</p>
<p>One last change: <a href="https://git.centos.org/rpms/kernel-tools/c/7fb9126e2e6277386348936f8fceea1996ed13bd?branch=c9s-sig-hyperscale">disable Perl support</a>.</p>
<p>And we finally have builds of <code>perf-6.3.3</code> for both CentOS Stream 8 and 9, built with exactly the same settings, that anyone can install simply by enabling our repositories.</p>
<p>These are no longer part of our experimental kernel, so you can simply enable our main repos to get this without exposing yourself to experimental packages. And since these are based on the Fedora <code>kernel-tools</code>, and Fedora runs a mostly stock kernel, you can rest assured that the code won&rsquo;t deviate from what you can find in the kernel source tree for the corresponding version.</p>
<p>And yes, I definitely was not anticipating all the twists and turns! The journey and the destination are both worth it though.</p>
<p><em>This post is day 24 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>On recharge</title>
            <link>https://michel-slm.name/posts/2023-03-19-on-recharge/</link>
            <pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2023-03-19-on-recharge/</guid>
            <description>&lt;p&gt;It&amp;rsquo;s been over 6 years since I started working at Meta (then known as Facebook). Not going to comment here about all the controversies surrounding our products, but as an employee, I have been lucky enough to work on interesting teams that, yes, don&amp;rsquo;t do anything that give me cause to be sleepless at night.&lt;/p&gt;
&lt;p&gt;One perk we have (that is no big deal to friends in Europe, but is a big deal in the US) is being able to take 30 calendar days of recharge leave (think of it as a short sabbatical) after each 5 years of employment (together with the 21 work days of PTO a year, this roughly brings us in line with what Europeans get courtesy of employment laws. Lucky y&amp;rsquo;all!)&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>It&rsquo;s been over 6 years since I started working at Meta (then known as Facebook). Not going to comment here about all the controversies surrounding our products, but as an employee, I have been lucky enough to work on interesting teams that, yes, don&rsquo;t do anything that give me cause to be sleepless at night.</p>
<p>One perk we have (that is no big deal to friends in Europe, but is a big deal in the US) is being able to take 30 calendar days of recharge leave (think of it as a short sabbatical) after each 5 years of employment (together with the 21 work days of PTO a year, this roughly brings us in line with what Europeans get courtesy of employment laws. Lucky y&rsquo;all!)</p>
<p>Why did I not take it in 2021-2, you might ask? Well.. between the pandemic and having a toddler at home (who finally got fully vaccinated including the bivalent booster a few months ago), there does not seem to be much point. My wife and I were actually thinking of delaying it until next year, when we&rsquo;ll have a wedding to travel to and Mr. 2 will be Mr. 3 and might travel better!</p>
<p>&hellip; and then the <a href="https://archive.is/OeT8o">layoffs</a> began. After the first round I rushed to apply for my recharge, since&hellip; unlike more established benefits like parental leave, this likely won&rsquo;t be cashed out in case the employee gets laid off. I&rsquo;ll be back just in time to see if my position gets eliminated in the second round! (That is looking very unlikely, but you never know).</p>
<p>Anyway&hellip; that said, even if I get laid off the severance package is decent and would allow me time to find another job. But I&rsquo;ll be mostly taking a break from computers, and spending more time with my better half and our toddler.</p>
<p>The computer time I have, I will be focusing on a couple of long-delayed projects:</p>
<ul>
<li>writing <code>lua-rock2rpm</code> for converting lua rocks to RPM specs</li>
<li>porting <a href="https://sr.ht/~michel-slm/choosier/">choosier</a> (my browser picker) to Android so I can use it on my phones</li>
</ul>
<p>I&rsquo;ll be dealing with major Fedora and Debian bugs affecting my packages, but for less severe issues expect a delay until I get back the week of April 17.</p>
<p><em>This post is day 23 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Goodbye New York Times: your TERF transphobia is one step too far</title>
            <link>https://michel-slm.name/posts/2023-02-27-goodbye-nyt-terf/</link>
            <pubDate>Mon, 27 Feb 2023 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2023-02-27-goodbye-nyt-terf/</guid>
            <description>&lt;p&gt;Dear NYT,&lt;/p&gt;
&lt;p&gt;Because of your
&lt;a href=&#34;https://www.teenvogue.com/story/nyt-transphobia-july-oped&#34;&gt;repeated&lt;/a&gt;
&lt;a href=&#34;https://www.npr.org/2023/02/15/1157181127/nyt-letter-trans&#34;&gt;transphobia&lt;/a&gt; and
your doubling down by &lt;a href=&#34;https://www.themarysue.com/nyts-horrible-response-to-open-letter-on-anti-trans-bias-gets-the-callout-it-deserves/&#34;&gt;silencing your internal
critics&lt;/a&gt;,
I can no longer support your publication.&lt;/p&gt;
&lt;p&gt;I tolerated you continuously giving the anti-choice Douthat a platform, or
Dowd&amp;rsquo;s &lt;a href=&#34;https://www.theguardian.com/commentisfree/2016/oct/13/hillary-clinton-maureen-dowd&#34;&gt;anti-Clinton
hatred&lt;/a&gt;
and your biased coverage in 2016 contributing to the decline of US democracy
(that you never did a &lt;em&gt;mea culpa&lt;/em&gt; on) &amp;hellip; but now you are just ganging up
against one of the most vulnerable groups in our society, and showing your own
illiberalism in doing so.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Dear NYT,</p>
<p>Because of your
<a href="https://www.teenvogue.com/story/nyt-transphobia-july-oped">repeated</a>
<a href="https://www.npr.org/2023/02/15/1157181127/nyt-letter-trans">transphobia</a> and
your doubling down by <a href="https://www.themarysue.com/nyts-horrible-response-to-open-letter-on-anti-trans-bias-gets-the-callout-it-deserves/">silencing your internal
critics</a>,
I can no longer support your publication.</p>
<p>I tolerated you continuously giving the anti-choice Douthat a platform, or
Dowd&rsquo;s <a href="https://www.theguardian.com/commentisfree/2016/oct/13/hillary-clinton-maureen-dowd">anti-Clinton
hatred</a>
and your biased coverage in 2016 contributing to the decline of US democracy
(that you never did a <em>mea culpa</em> on) &hellip; but now you are just ganging up
against one of the most vulnerable groups in our society, and showing your own
illiberalism in doing so.</p>
<p>Regrettably,</p>
<p>An ex-subscriber</p>
<p><em>This post is day 22 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a> or <a href="https://social.coop/@michel_slm">@michel_slm@social.coop</a></p>
]]></content>
        </item>
        
        <item>
            <title>Distrobox for Ubuntu (and soon, Debian!)</title>
            <link>https://michel-slm.name/posts/2022-05-04-distrobox-for-debian-ubuntu/</link>
            <pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2022-05-04-distrobox-for-debian-ubuntu/</guid>
            <description>&lt;p&gt;I&amp;rsquo;ve been a fan of &lt;a href=&#34;https://distrobox.privatedns.org/&#34;&gt;distrobox&lt;/a&gt; for a while - it really makes it easy to experiment with different Linux distributions, and also to do packaging work for different distributions regardless of what&amp;rsquo;s running on the physical machine&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not only ridiculously flexible, compared to the &lt;a href=&#34;https://containertoolbx.org/&#34;&gt;Toolbx&lt;/a&gt; project that inspires it - the latter requires specially modified containers - but it also just consists of Bash scripts, with a simple installation script. Perfect for getting to grips with the idiosyncracies of a different distribution&amp;rsquo;s packaging methodologies!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;ve been a fan of <a href="https://distrobox.privatedns.org/">distrobox</a> for a while - it really makes it easy to experiment with different Linux distributions, and also to do packaging work for different distributions regardless of what&rsquo;s running on the physical machine<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>It&rsquo;s not only ridiculously flexible, compared to the <a href="https://containertoolbx.org/">Toolbx</a> project that inspires it - the latter requires specially modified containers - but it also just consists of Bash scripts, with a simple installation script. Perfect for getting to grips with the idiosyncracies of a different distribution&rsquo;s packaging methodologies!</p>
<p>As such, I&rsquo;ve decided to use this for my first Debian package on the road to hopefully becoming a <a href="https://wiki.debian.org/DebianMaintainer">Debian Maintainer</a> or even a full-fledged DD. Will probably branch out to C and Python packages after this - which will then be useful at work for getting our open source projects packaged for a wider audience.</p>
<p>The <a href="https://launchpad.net/~michel-slm/&#43;archive/ubuntu/distrobox">Ubuntu PPA</a> is now ready to use; it is also <a href="https://mentors.debian.net/package/distrobox/">uploaded to Debian Mentors</a> and I&rsquo;ll work on finding a mentor to review and sponsor its upload.</p>
<p>Special thanks, of course, to Luca Di Maio, <code>distrobox</code>&rsquo;s  main author, for writing this gem and seeking out help getting it packaged in the first place!</p>
<p><em>This post is day 21 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>with the exception of proper Debian and Ubuntu work, which needs at least a VM to do clean builds, because <a href="https://github.com/containers/podman/issues/4619"><code>debootstrap</code> doesn&rsquo;t work on containers</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Goodbye Twitter: all in on the Fediverse</title>
            <link>https://michel-slm.name/posts/2022-04-26-goodbye-twitter/</link>
            <pubDate>Tue, 26 Apr 2022 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2022-04-26-goodbye-twitter/</guid>
            <description>&lt;p&gt;With the &lt;a href=&#34;https://www.npr.org/2022/04/25/1094671225/elon-musk-bought-twitter-plans&#34;&gt;Twitter board accepting Elon&amp;rsquo;s buyout offer&lt;/a&gt;, I&amp;rsquo;ve reached the point where I can no longer maintain a presence on this network; I&amp;rsquo;ll post a link to this blog post, wipe all other tweets, and then delete the account after a week.&lt;/p&gt;
&lt;p&gt;There are many reasons for this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t like to depend on the largesse of a billionaire
&lt;ul&gt;
&lt;li&gt;see Now &amp;amp; Then&amp;rsquo;s &lt;a href=&#34;https://cafe.com/now-and-then/tax-dollars-and-tech-dollars-who-supports-society/&#34;&gt;Tax Dollars and Tech Dollars&lt;/a&gt; on a good historical discussion on billionaire &amp;lsquo;philanthropy&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Elon Musk &lt;em&gt;is&lt;/em&gt; a modern-day Carnegie or Rockefeller; see the &lt;a href=&#34;https://omny.fm/shows/behind-the-bastards/part-one-i-do-not-like-elon-musk-very-much&#34;&gt;Behind the Bastards takedown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;his free speech maximalism is a terrible idea. If you think Twitter&amp;rsquo;s moderation policy is insufficient already, the guardrails will come off&lt;/li&gt;
&lt;li&gt;that dogecoin comment. I already dislike how Twitter&amp;rsquo;s Blue Sky is overly heavy on &amp;ldquo;crypto&amp;rdquo; and &amp;ldquo;web3&amp;rdquo; style blockchain based decentralization, rather than federation a la the Fediverse &amp;hellip; but now it will get worse&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scrapping advertisements, if it happens, is a positive, but not enough to outweigh the rest. I like the idea of switching to subscriptions, but making it &lt;em&gt;cheaper&lt;/em&gt; seems non-workable ($2.99/mo is much cheaper than Reddit Premium&amp;rsquo;s $5.99/mo). Also - gee thanks Twitter for &lt;a href=&#34;https://techcrunch.com/2021/05/04/twitter-acquires-distraction-free-reading-service-scroll-to-beef-up-its-subscription-product/&#34;&gt;killing Scroll post-acquisition&lt;/a&gt;. I want to read a news site by going to their site directly, not relying on finding the article I want in their Twitter feed, thank you.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>With the <a href="https://www.npr.org/2022/04/25/1094671225/elon-musk-bought-twitter-plans">Twitter board accepting Elon&rsquo;s buyout offer</a>, I&rsquo;ve reached the point where I can no longer maintain a presence on this network; I&rsquo;ll post a link to this blog post, wipe all other tweets, and then delete the account after a week.</p>
<p>There are many reasons for this:</p>
<ul>
<li>I don&rsquo;t like to depend on the largesse of a billionaire
<ul>
<li>see Now &amp; Then&rsquo;s <a href="https://cafe.com/now-and-then/tax-dollars-and-tech-dollars-who-supports-society/">Tax Dollars and Tech Dollars</a> on a good historical discussion on billionaire &lsquo;philanthropy&rsquo;</li>
</ul>
</li>
<li>Elon Musk <em>is</em> a modern-day Carnegie or Rockefeller; see the <a href="https://omny.fm/shows/behind-the-bastards/part-one-i-do-not-like-elon-musk-very-much">Behind the Bastards takedown</a></li>
<li>his free speech maximalism is a terrible idea. If you think Twitter&rsquo;s moderation policy is insufficient already, the guardrails will come off</li>
<li>that dogecoin comment. I already dislike how Twitter&rsquo;s Blue Sky is overly heavy on &ldquo;crypto&rdquo; and &ldquo;web3&rdquo; style blockchain based decentralization, rather than federation a la the Fediverse &hellip; but now it will get worse</li>
</ul>
<p>Scrapping advertisements, if it happens, is a positive, but not enough to outweigh the rest. I like the idea of switching to subscriptions, but making it <em>cheaper</em> seems non-workable ($2.99/mo is much cheaper than Reddit Premium&rsquo;s $5.99/mo). Also - gee thanks Twitter for <a href="https://techcrunch.com/2021/05/04/twitter-acquires-distraction-free-reading-service-scroll-to-beef-up-its-subscription-product/">killing Scroll post-acquisition</a>. I want to read a news site by going to their site directly, not relying on finding the article I want in their Twitter feed, thank you.</p>
<h2 id="so-whats-next">So what&rsquo;s next?</h2>
<p>I&rsquo;m already on the Fediverse, and TBH use it more than Twitter, where my activity is mostly read-only and sometimes commenting on tweets.</p>
<p>Most of my contact information are available (and verified) on <a href="https://keyoxide.org/5dce2e7e9c3b1cffd335c1d78b229d2f7ccc04f2">Keyoxide</a>, which is linked from <a href="https://michel-slm.name/">my site</a>.</p>
<p>If you&rsquo;re interested in making the move too, or at least dip your toes, here&rsquo;s a quick primer:</p>
<ul>
<li>think of Fediverse as like email. You can pick the instance you sign up for just like you can pick from many email providers</li>
<li>instances have different moderation policies, and tend to only federate with instances with similar policies - so far-right instances tend to be isolated. Think of it as a submarine having multiple air-tight compartments, rather than the giant free-for-all soup you get with large unfederated platforms like Twitter, Facebook, or Instagram</li>
<li><a href="https://joinmastodon.org/">Mastodon</a> is the most popular server-side platform if you are looking for a Twitter replacement; <a href="https://pleroma.social/">Pleroma</a> is lighter weight and easier to self-host; <a href="https://misskey.io/">Misskey</a> has more fun features (like custom reactions!). They are all part of the <em>fediverse</em> and interoperate via the <a href="https://activitypub.rocks/">ActivityPub</a> protocol, which is an official W3C standard. For an Instagram-like experience, use <a href="https://pixelfed.org/">Pixelfed</a></li>
<li>And yes, you can follow people across all these platforms just from one account if you want, though the interfaces might be more suited for certain content types. But your local timeline is filled with people from your instance, so it helps to find one where you&rsquo;re at home. You can explore instances before you sign up (for Misskey it&rsquo;s oddly hidden, add <code>/explore</code> to the base URL to get that timeline)</li>
<li><a href="https://fediverse.party/">Fediverse.Party</a> has a good guide to these networks and more; go to their page for each service to get some stats about the sizes of the different networks and how to pick instances in each</li>
<li><a href="https://instances.social/">instances.social</a> is a good interface for choosing a Mastodon instance</li>
</ul>
<h2 id="read-only-twitter">Read-only Twitter</h2>
<p>Quitting cold turkey is hard, but if you&rsquo;re like me and down to mostly reading certain people whose only presence is Twitter, <a href="https://nitter.net/about">Nitter</a> is a Twitter front-end that let you read Twitter without maintaining your own account, or being tracked by Twitter.</p>
<p>There is a nice <a href="https://project-awesome.org/tleb/awesome-mastodon#bots">list of bots</a> on Awesome Mastodon that automatically post news, and <a href="https://beta.birdsite.live/">BirdsiteLIVE</a> lets you bridge any Twitter account to ActivityPub.</p>
<p>Hope that helps, and see you on the Fediverse!</p>
<p><em>This post is day 20 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Navigating repositories with myrepos-utils</title>
            <link>https://michel-slm.name/posts/2022-03-28-myrepos-utils/</link>
            <pubDate>Mon, 28 Mar 2022 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2022-03-28-myrepos-utils/</guid>
            <description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href=&#34;https://myrepos.branchable.com/&#34;&gt;myrepos&lt;/a&gt; for a while - as someone who juggles a lot of repositories, both for personal projects and as a Fedora and CentOS packager, a &lt;code&gt;~/.mrconfig&lt;/code&gt; synced via Nextcloud really makes checking out repositories consistently, on different computers, straightforward.&lt;/p&gt;
&lt;p&gt;As the number of tracked repos grow, however, trying to remember where each repo is checked out gets a bit time consuming &amp;ndash; and also, keeping the configuration file organized as well; &lt;code&gt;mr register&lt;/code&gt; on an existing repo would add the entry for that repo at the end of the file, and I was previously resorting to editing the file by hand to get it sorted - with a varying degree of success.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;ve been using <a href="https://myrepos.branchable.com/">myrepos</a> for a while - as someone who juggles a lot of repositories, both for personal projects and as a Fedora and CentOS packager, a <code>~/.mrconfig</code> synced via Nextcloud really makes checking out repositories consistently, on different computers, straightforward.</p>
<p>As the number of tracked repos grow, however, trying to remember where each repo is checked out gets a bit time consuming &ndash; and also, keeping the configuration file organized as well; <code>mr register</code> on an existing repo would add the entry for that repo at the end of the file, and I was previously resorting to editing the file by hand to get it sorted - with a varying degree of success.</p>
<p>Here&rsquo;s a <em>very</em> simplified version of how my repositories are organized:</p>
<pre tabindex="0"><code>tree ~/src/
/home/michel/src
├── fedora
│   └── folly
├── github
│   └── folly
├── gitlab
│   └── blog
└── sourcehut
    └── ansible
</code></pre><p>Note that there are <strong>two</strong> repositories named <code>folly</code>: one for the upstream source code, and one for the Fedora <code>dist-git</code> repo that controls its packaging.</p>
<p>After one too many times finding myself doing <code>grep repo ~/.mrconfig</code>, I decided to write a tool to help. It&rsquo;s reasonably simple, thanks to <code>myrepos</code> using an INI file for its configuration that Python&rsquo;s <code>configparser</code> handles perfectly fine.</p>
<p>Behold <a href="https://pypi.org/project/myrepos-utils/">myrepos-utils</a>; it currently provides two commands:</p>
<ul>
<li><code>find</code> takes a query consisting of one or more strings and spit out the repositories matching them</li>
<li><code>sort</code> sorts <code>~/.mrconfig</code> so it&rsquo;s easier to read (as a byproduct it also reindents it)</li>
</ul>
<p>So with our example layout,</p>
<pre tabindex="0"><code>$ mr-utils find folly
/home/michel/src/fedora/folly
/home/michel/src/github/folly
$ mr-utils find fed folly
/home/michel/src/fedora/folly
$ cd $(mr-utils find git folly)
$ pwd
/home/michel/src/github/folly
</code></pre><p>Hey presto!</p>
<p>Chain-loading multiple <code>.mrconfig</code> files not supported yet, and conversely, filtering out repositories that are not checked out yet is also not supported yet (but trivial to add). But so far this has really simplified my daily workflows!</p>
<p><a href="https://bodhi.fedoraproject.org/updates/?packages=python-myrepos-utils">Coming soon</a> to a Fedora mirror near you.</p>
<p><em>This post is day 18 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>The Lagrange Gemini client is in Fedora</title>
            <link>https://michel-slm.name/posts/2022-02-10-lagrange-gemini-fedora/</link>
            <pubDate>Thu, 10 Feb 2022 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2022-02-10-lagrange-gemini-fedora/</guid>
            <description>&lt;p&gt;I&amp;rsquo;m happy to announce that &lt;a href=&#34;https://gmi.skyjake.fi/lagrange/&#34;&gt;Lagrange&lt;/a&gt;,
probably the most beautiful looking Gemini client, is now &lt;a href=&#34;https://bodhi.fedoraproject.org/updates/?search=lagrange&amp;amp;status=stable&#34;&gt;available on Fedora
and
EPEL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This means that you can install it with as little as&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo dnf install lagrange
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and this would work on all supported and in-development Fedora releases (Rawhide, 36, 35, 34) as well as on any RHEL / CentOS Stream 8 and 9 derivatives (RHEL, CentOS Stream, Alma, Rocky) that have the EPEL repos enabled.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;m happy to announce that <a href="https://gmi.skyjake.fi/lagrange/">Lagrange</a>,
probably the most beautiful looking Gemini client, is now <a href="https://bodhi.fedoraproject.org/updates/?search=lagrange&amp;status=stable">available on Fedora
and
EPEL</a>.</p>
<p>This means that you can install it with as little as</p>
<pre tabindex="0"><code>sudo dnf install lagrange
</code></pre><p>and this would work on all supported and in-development Fedora releases (Rawhide, 36, 35, 34) as well as on any RHEL / CentOS Stream 8 and 9 derivatives (RHEL, CentOS Stream, Alma, Rocky) that have the EPEL repos enabled.</p>
<p>My <a href="#ZgotmplZ">gemsite</a> looks really spiffy and I didn&rsquo;t even have to spend hours looking for, and tweaking, a nice looking Hugo theme like I did for my <a href="https://michel-slm.name/">blog</a>!</p>
<p>When I heard about Lagrange at a side conversation at <a href="https://fosdem.org/2022/">FOSDEM</a>, my first thought was &ndash; this is good enough it could entice new people to Gemini. And sure, the Flatpak is already available, but it has some known issues as documented on the website.</p>
<p>This will also be the start of my attempt to maintain a gemlog; I&rsquo;ll try to use <a href="https://git.sr.ht/~kota/gemgen">Dakota Walsh&rsquo; gemgen</a> to do the conversion, with as little tweaking as necessary, for the time being.</p>
<p><em>This post is day 17 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>CentOS Dojo is over, hello FOSDEM!</title>
            <link>https://michel-slm.name/posts/2022-02-04-centos-dojo-and-fosdem/</link>
            <pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2022-02-04-centos-dojo-and-fosdem/</guid>
            <description>&lt;p&gt;The first &lt;a href=&#34;https://wiki.centos.org/Events/Dojo/FOSDEM2022&#34;&gt;CentOS Dojo&lt;/a&gt; of the year is, as usual, held as a &lt;a href=&#34;https://fosdem.org/2022/fringe/&#34;&gt;FOSDEM Fringe event&lt;/a&gt;. It&amp;rsquo;s virtual - again - which is a blessing and a curse. It would be fun to travel and meet people in person again once the situation permits, then again, given my family situation that would have meant I would have to skip for the next year or two anyway.&lt;/p&gt;
&lt;p&gt;That being said, it was held on Hopin, which has a decent hallway track experience. Nothing much is changing on the platform front - &lt;a href=&#34;https://linux.conf.au/&#34;&gt;linux.conf.au&lt;/a&gt; was on Venueless again, and FOSDEM is again using a bleeding edge Element web client at &lt;a href=&#34;https://chat.fosdem.org/&#34;&gt;chat.fosdem.org&lt;/a&gt;. I like the Hopin and Element experience, though I admit to a bias - Element because I like decentralized platforms, and Hopin because I know more people among the attendees of events held there. And Hopin is still unpredictably buggy on Firefox!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>The first <a href="https://wiki.centos.org/Events/Dojo/FOSDEM2022">CentOS Dojo</a> of the year is, as usual, held as a <a href="https://fosdem.org/2022/fringe/">FOSDEM Fringe event</a>. It&rsquo;s virtual - again - which is a blessing and a curse. It would be fun to travel and meet people in person again once the situation permits, then again, given my family situation that would have meant I would have to skip for the next year or two anyway.</p>
<p>That being said, it was held on Hopin, which has a decent hallway track experience. Nothing much is changing on the platform front - <a href="https://linux.conf.au/">linux.conf.au</a> was on Venueless again, and FOSDEM is again using a bleeding edge Element web client at <a href="https://chat.fosdem.org/">chat.fosdem.org</a>. I like the Hopin and Element experience, though I admit to a bias - Element because I like decentralized platforms, and Hopin because I know more people among the attendees of events held there. And Hopin is still unpredictably buggy on Firefox!</p>
<p>Platform talk aside, Dojo was full of interesting talks - and I bookmarked so many FOSDEM talks to attend (some overlapping!) even though I limit myself to &ldquo;only&rdquo; talks that start after 3 AM Pacific Time! (noon Brussels time). Looking forward to things settling down after that - from the beginning of January up to now it&rsquo;s been a flurry of conferences (LCA! Devconf.cz! Dojo! FOSDEM!) and performance evaluation, that there&rsquo;s less time to get to work - and to write. Still hoping to actually get to 100 posts this year, though realistically I&rsquo;ll probably get up to 50.</p>
<p>I presented <a href="https://pagure.io/epel/ebranch">ebranch</a>, a tool I&rsquo;m writing (it&rsquo;s
open source, so hopefully it will not be /only/ me for long!) to address some of
the pain points in bringing up
<a href="https://docs.fedoraproject.org/en-US/epel/">EPEL</a> for every new RHEL/CentOS
Stream release
(<a href="https://wiki.centos.org/Events/Dojo/FOSDEM2022#Bootstrapping">abstract</a>,
<a href="https://salimma.fedorapeople.org/slides/2022/centos_dojo-202202-epel_branching_with_ebranch.pdf">slides</a>,
<a href="https://www.youtube.com/watch?v=VjPZmq_h2Rk">video</a>). If you&rsquo;re interested in
getting Fedora packages into EPEL so you can use them on Enterprise Linux
distros - from RHEL to CentOS Stream to Alma, Rocky, even Oracle &ndash; hopefully
you find this useful! There are many functionalities that are planned but not
implemented yet, and I probably will dedicate a few hours a week to improving it
(and reviewing your PRs, I promise). Sadly the rest of the time will be mostly
spent on debugging Rawhide GCC12 failures :p</p>
<p>I was about to highlight some of the talks I liked from Dojo, then realized&hellip;
that I liked most of them, so it will be redundant to list them all. But &hellip;
alright, you definitely should watch these:</p>
<ul>
<li><a href="https://wiki.centos.org/Events/Dojo/FOSDEM2022#Tracking">Tracking Kernel Rate of Change</a> by Pat Riehecky analyzed the CentOS Stream kernels corresponding to the development period between RHEL 8.4 and 8.5, and found that most external kernel modules actually do surprisingly well - a few needs to be rebuilt 3 times, but most required only one rebuild. It&rsquo;s not the firehose that is the Fedora kernel! Given the reality that many users still need the Nvidia kernel, hopefully this can encourage Nvidia to start supporting Stream - their kernel module is called out as actually being the easiest to support.</li>
<li><a href="https://wiki.centos.org/Events/Dojo/FOSDEM2022#Experience">The Experience Contributing to CentOS Stream</a> by Neal Gompa. Stream 9, being the first proper Stream release, really shows that Red Hat is making a good faith effort at developing in the open and incorporating community contributions. There are still rough edges but it&rsquo;s a far cry from Stream 8 (or&hellip; the days before Stream).</li>
<li><a href="https://wiki.centos.org/Events/Dojo/FOSDEM2022#Hyperscale">Hyperscale SIG update</a> by my colleague Davide Cavalca &ndash; EPEL can&rsquo;t override base Stream packages, but Hyperscale can! Come join us</li>
<li>Every EPEL talk on the schedule is worth watching!</li>
</ul>
<p><em>This post is day 16 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>2021H1 recap: Fedora 34, CentOS Dojo, team switch, and back on leave</title>
            <link>https://michel-slm.name/posts/2021-07-24-h1-recap/</link>
            <pubDate>Sat, 24 Jul 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-07-24-h1-recap/</guid>
            <description>&lt;p&gt;Half of 2021 is gone already! I&amp;rsquo;m back on parental leave, but want to post a quick recap of the past few months.&lt;/p&gt;
&lt;h2 id=&#34;parental-leave&#34;&gt;Parental leave&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m out &lt;a href=&#34;https://calendar.fedoraproject.org/vacation/#m10039&#34;&gt;from July 15 until the end of October&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am signed up to some virtual conferences this summer and fall, but do not anticipate really being there except for a few selected talks. Best way to reach me is async via Matrix or email (see links &lt;a href=&#34;https://michel-slm.name/&#34;&gt;on the main page&lt;/a&gt;). Responses to Pagure and Bugzilla issues might be delayed.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Half of 2021 is gone already! I&rsquo;m back on parental leave, but want to post a quick recap of the past few months.</p>
<h2 id="parental-leave">Parental leave</h2>
<p>I&rsquo;m out <a href="https://calendar.fedoraproject.org/vacation/#m10039">from July 15 until the end of October</a>.</p>
<p>I am signed up to some virtual conferences this summer and fall, but do not anticipate really being there except for a few selected talks. Best way to reach me is async via Matrix or email (see links <a href="/">on the main page</a>). Responses to Pagure and Bugzilla issues might be delayed.</p>
<h2 id="fedora">Fedora</h2>
<p>Fedora 34 shipped, with the changes I mentioned in my last post:</p>
<ul>
<li><a href="https://fedoraproject.org/wiki/Changes/BtrfsTransparentCompression">enabling Btrfs transparent compression</a></li>
<li><a href="https://fedoraproject.org/wiki/Changes/EnableSystemdOomd">enabling systemd&rsquo;s oomd userspace out-of-memory killer</a></li>
</ul>
<p>For Fedora 35, given that I&rsquo;ll still be on parental leave when it is released (per the expected schedule), I&rsquo;m taking a bit more of a backseat; while I&rsquo;m assisting in a major Change, <a href="https://fedoraproject.org/wiki/Changes/FedoraCloudBtrfsByDefault">switching the Cloud edition to Btrfs</a>, the Change I&rsquo;m pushing solo is relatively small: <a href="https://fedoraproject.org/wiki/Changes/MemoryConstraintsMacros">making openSUSE&rsquo;s memory constraints macro available in Fedora</a>. This would simplify the spec for packages that are memory-constrained during the build (Chromium, Ceph, mcrouter), and hopefully we can later iterate on this by working with the RPM and openSUSE developers to get this upstreamed in a future RPM version.</p>
<h2 id="centos-and-epel">CentOS and EPEL</h2>
<p>I gave my CentOS Stream on Desktop talk, &ldquo;How I Learned to Stop Worrying and Love LTS&rdquo;, at the <a href="https://wiki.centos.org/Events/Dojo/May2021">May 2021 edition of CentOS Dojo</a> (<a href="https://youtu.be/pi58_bR1UP0">video</a>, <a href="https://salimma.fedorapeople.org/slides/2021/centos_dojo-202105-centos_stream_on_desktop.pdf">slides</a>).</p>
<p>Lots of excitement in CentOS&rsquo; Hyperscale SIG; see <a href="https://blog.centos.org/2021/06/centos-hyperscale-sig-quarterly-report-for-2021q2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=centos-hyperscale-sig-quarterly-report-for-2021q2">our 2021Q2 update</a>.</p>
<p>The EPEL changes I mentioned in the last post are all live; a collaborator access is now sufficient to request a branch, build a package, and create an update.</p>
<p>I am working on a tool to automate filing branch requests for a package and its missing dependencies, though with the leave, it will probably take some time.</p>
<h2 id="work-update-team-switch">Work update: team switch</h2>
<p>After three years on the Client Platform Engineering team, it&rsquo;s time for a switch, and I&rsquo;ve joined Facebook&rsquo;s kernel team to work on&hellip; Linux userspace projects! (Yes, the placement is a bit of a contradiction. We&rsquo;ll probably be spun off into our own team in the future). I&rsquo;m fond of my time at CPE, and the people there, and grateful for the opportunity to contribute so much Linux open source work, but with a desktop fleet composed mostly of macOS and Windows, there are limits on how impactful Linux work is perceived.</p>
<p>Looking forward to being able to focus on XFN work with community partners in Fedora, CentOS, and beyond; to no longer having to work around Apple&rsquo;s increasing restrictions in managing macOS; and to no longer having a name collision with Red Hat&rsquo;s <a href="https://fedoraproject.org/wiki/Community_Platform_Engineering">Community Platform Engineering</a> team as well as <a href="https://nvd.nist.gov/products/cpe">Common Platform Enumeration</a>! Naming is hard; doubly so when it comes to TLAs.</p>
<p>One of my first tasks during my Facebook bootcamp is for the kernel team, so it feels like things have come full circle :D</p>
<p><em>This post is day 15 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Software and Wetware: Taking a short hiatus</title>
            <link>https://michel-slm.name/posts/2021-02-26-software-wetware/</link>
            <pubDate>Fri, 26 Feb 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-02-26-software-wetware/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/people/109-baby-2.svg&#34;  alt=&#34;baby emoji[^2]&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;Wow, I can&amp;rsquo;t believe it&amp;rsquo;s been 24 whole days since my &lt;a href=&#34;https://michel-slm.name/posts/2021-02-02-fosdem-and-centos-dojo/&#34;&gt;last post&lt;/a&gt;! It&amp;rsquo;s been quite a productive time, and one full of surprises.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My &lt;a href=&#34;https://fosdem.org/2021/schedule/event/desktoplinuxmgmtatfacebook/&#34;&gt;Desktop Linux at Facebook&lt;/a&gt; talk happened, and the recorded video is now available in WebM and MP4 formats. &lt;a href=&#34;https://linuxunplugged.com/393&#34;&gt;Linux Unplugged&lt;/a&gt; and &lt;a href=&#34;https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Facebook-Desktops-Fedora-CentOS&#34;&gt;Phoronix&lt;/a&gt; had some nice coverage (thanks &lt;a href=&#34;https://figura.im/&#34;&gt;Stefano&lt;/a&gt; for noticing these!)&lt;/li&gt;
&lt;li&gt;The changes I&amp;rsquo;m involved in for Fedora 34, &lt;a href=&#34;https://fedoraproject.org/wiki/Changes/BtrfsTransparentCompression&#34;&gt;enabling Btrfs transparent compression&lt;/a&gt; and &lt;a href=&#34;https://fedoraproject.org/wiki/Changes/EnableSystemdOomd&#34;&gt;enabling systemd&amp;rsquo;s oomd userspace out-of-memory killer&lt;/a&gt; reached feature completion. Many thanks from the change owners especially to &lt;a href=&#34;https://fedoraproject.org/wiki/User:Chrismurphy&#34;&gt;Chris Murphy&lt;/a&gt;, &lt;a href=&#34;https://fedoraproject.org/wiki/User:Ngompa&#34;&gt;Neal Gompa&lt;/a&gt;, and the Anaconda developers (Jiří, Martin, Vendula, and Vojtěch) for all their feedback and assistance!&lt;/li&gt;
&lt;li&gt;For &lt;a href=&#34;https://fedoraproject.org/wiki/EPEL/Packagers&#34;&gt;EPEL Packaging&lt;/a&gt; we&amp;rsquo;re close to &lt;a href=&#34;https://pagure.io/fedscm-admin/pull-request/61&#34;&gt;allowing branching only for allowlisted branches&lt;/a&gt;. This will help the maintenance of packages many RHEL and CentOS users need, since the primary maintainer might not want to support EPEL, or allow the EPEL maintainers to commit to the Fedora branches, but previously without full commit access a maintainer cannot request the package to be branched for new EL releases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The other major development is the launch of Michel 2.0&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; into the world, with only minor hiccups, ahead of schedule! Most of the credit for this, of course, belongs to my lovely wife; I&amp;rsquo;m really blessed to have them both in my life. I&amp;rsquo;ll be only sporadically online for the next few weeks, dedicating myself to a deep dive of this novel Baby Operating System :D&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/people/109-baby-2.svg"  alt="baby emoji[^2]"  class="center"  />


<p>Wow, I can&rsquo;t believe it&rsquo;s been 24 whole days since my <a href="/posts/2021-02-02-fosdem-and-centos-dojo/">last post</a>! It&rsquo;s been quite a productive time, and one full of surprises.</p>
<ul>
<li>My <a href="https://fosdem.org/2021/schedule/event/desktoplinuxmgmtatfacebook/">Desktop Linux at Facebook</a> talk happened, and the recorded video is now available in WebM and MP4 formats. <a href="https://linuxunplugged.com/393">Linux Unplugged</a> and <a href="https://www.phoronix.com/scan.php?page=news_item&amp;px=Facebook-Desktops-Fedora-CentOS">Phoronix</a> had some nice coverage (thanks <a href="https://figura.im/">Stefano</a> for noticing these!)</li>
<li>The changes I&rsquo;m involved in for Fedora 34, <a href="https://fedoraproject.org/wiki/Changes/BtrfsTransparentCompression">enabling Btrfs transparent compression</a> and <a href="https://fedoraproject.org/wiki/Changes/EnableSystemdOomd">enabling systemd&rsquo;s oomd userspace out-of-memory killer</a> reached feature completion. Many thanks from the change owners especially to <a href="https://fedoraproject.org/wiki/User:Chrismurphy">Chris Murphy</a>, <a href="https://fedoraproject.org/wiki/User:Ngompa">Neal Gompa</a>, and the Anaconda developers (Jiří, Martin, Vendula, and Vojtěch) for all their feedback and assistance!</li>
<li>For <a href="https://fedoraproject.org/wiki/EPEL/Packagers">EPEL Packaging</a> we&rsquo;re close to <a href="https://pagure.io/fedscm-admin/pull-request/61">allowing branching only for allowlisted branches</a>. This will help the maintenance of packages many RHEL and CentOS users need, since the primary maintainer might not want to support EPEL, or allow the EPEL maintainers to commit to the Fedora branches, but previously without full commit access a maintainer cannot request the package to be branched for new EL releases</li>
</ul>
<p>The other major development is the launch of Michel 2.0<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> into the world, with only minor hiccups, ahead of schedule! Most of the credit for this, of course, belongs to my lovely wife; I&rsquo;m really blessed to have them both in my life. I&rsquo;ll be only sporadically online for the next few weeks, dedicating myself to a deep dive of this novel Baby Operating System :D</p>
<p>Most of my work and Change Proposal responsibilities have been handed off, and hopefully I have enough time in between diaper changes to fix all the FTBFSes for my packages &hellip; but so far it&rsquo;s been a refreshing and lovely change from the world of VC meetings!</p>
<p>Baby emoji by Vincent Le Moign, used under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>, retrieved from <a href="https://commons.wikimedia.org/wiki/File:109-baby-2.svg">Wikimedia Commons</a></p>
<p><em>This post is day 14 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Not his real name&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Come watch our talks at FOSDEM and CentOS Dojo!</title>
            <link>https://michel-slm.name/posts/2021-02-02-fosdem-and-centos-dojo/</link>
            <pubDate>Tue, 02 Feb 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-02-02-fosdem-and-centos-dojo/</guid>
            <description>&lt;p&gt;I&amp;rsquo;ll be presenting (and last-minute-volunteering) at &lt;a href=&#34;https://fosdem.org/2021/&#34;&gt;FOSDEM&lt;/a&gt;, and some colleagues from Facebook are presenting at the adjacent &lt;a href=&#34;https://hopin.com/events/centos-dojo-fosdem&#34;&gt;CentOS Dojo&lt;/a&gt; on topics I&amp;rsquo;m involved in - and we&amp;rsquo;d love to get your feedback and hopefully get you involved!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dojo, Feb 5, 15:00 UTC - Davide Cavalca will &lt;a href=&#34;https://wiki.centos.org/SpecialInterestGroup/Hyperscale&#34;&gt;introduce the new Hyperscale SIG&lt;/a&gt;, a community effort to produce an optional repository to make CentOS Stream more suitable for large-scale deployments&lt;/li&gt;
&lt;li&gt;Dojo, Feb 5, 16:00 UTC - Matthew Almond will present &lt;a href=&#34;https://fedoraproject.org/wiki/Changes/RPMCoW&#34;&gt;Speeding up DNF and RPM using Copy on Write&lt;/a&gt;, which will hopefully land soon in the upcoming Fedora 34&lt;/li&gt;
&lt;li&gt;FOSDEM, Feb 6, 16:00 UTC/17:00 CET - I will be doing my &lt;a href=&#34;https://fosdem.org/2021/schedule/event/desktoplinuxmgmtatfacebook/&#34;&gt;Desktop Linux at Facebook&lt;/a&gt; talk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both events are free to attend - follow the CentOS Dojo link above to register (you need a free account on &lt;code&gt;hopin.com&lt;/code&gt;). FOSDEM does not require registration, but make sure to &lt;a href=&#34;https://fosdem.org/2021/practical/online/&#34;&gt;read the practical information page&lt;/a&gt; beforehand especially if you don&amp;rsquo;t already have a &lt;a href=&#34;https://matrix.org/&#34;&gt;Matrix&lt;/a&gt; account (does not matter which domain as long as it federates).&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;ll be presenting (and last-minute-volunteering) at <a href="https://fosdem.org/2021/">FOSDEM</a>, and some colleagues from Facebook are presenting at the adjacent <a href="https://hopin.com/events/centos-dojo-fosdem">CentOS Dojo</a> on topics I&rsquo;m involved in - and we&rsquo;d love to get your feedback and hopefully get you involved!</p>
<ul>
<li>Dojo, Feb 5, 15:00 UTC - Davide Cavalca will <a href="https://wiki.centos.org/SpecialInterestGroup/Hyperscale">introduce the new Hyperscale SIG</a>, a community effort to produce an optional repository to make CentOS Stream more suitable for large-scale deployments</li>
<li>Dojo, Feb 5, 16:00 UTC - Matthew Almond will present <a href="https://fedoraproject.org/wiki/Changes/RPMCoW">Speeding up DNF and RPM using Copy on Write</a>, which will hopefully land soon in the upcoming Fedora 34</li>
<li>FOSDEM, Feb 6, 16:00 UTC/17:00 CET - I will be doing my <a href="https://fosdem.org/2021/schedule/event/desktoplinuxmgmtatfacebook/">Desktop Linux at Facebook</a> talk</li>
</ul>
<p>Both events are free to attend - follow the CentOS Dojo link above to register (you need a free account on <code>hopin.com</code>). FOSDEM does not require registration, but make sure to <a href="https://fosdem.org/2021/practical/online/">read the practical information page</a> beforehand especially if you don&rsquo;t already have a <a href="https://matrix.org/">Matrix</a> account (does not matter which domain as long as it federates).</p>
<p>Yes, it excites me to no end to see a FOSS conference run entirely on a FOSS platform - <a href="https://linux.conf.au/">linux.conf.au</a> came close with <a href="https://github.com/venueless/venueless">Venueless</a> which is under an &ldquo;eventually open source&rdquo; license, but that means there&rsquo;s no open source version yet and it&rsquo;s still a centralized platform - Matrix is both FOSS and decentralized!</p>
<p><em>This post is day 13 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Hello Friend NG, meet Pixelfed!</title>
            <link>https://michel-slm.name/posts/2021-01-31-hello-friend-ng-pixelfed/</link>
            <pubDate>Sun, 31 Jan 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-01-31-hello-friend-ng-pixelfed/</guid>
            <description>&lt;p&gt;My blog is built using the Hugo static side generator, using a &lt;a href=&#34;https://michel-slm.name/posts/2020-12-14-512k-debloat/&#34;&gt;lightly forked version of hello-friend-ng&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until yesterday, the only change was to strip &lt;code&gt;prism.js&lt;/code&gt; to slim down the site (not upstreaming this yet until I could figure out a way to selectively disable it on pages that don&amp;rsquo;t need it).&lt;/p&gt;
&lt;p&gt;Yesterday I sent back my first two pull requests though:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rhazdon/hugo-theme-hello-friend-ng/pull/257&#34;&gt;PR 257&lt;/a&gt; fixing links in the SVG documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rhazdon/hugo-theme-hello-friend-ng/pull/258&#34;&gt;PR 258&lt;/a&gt; adding an SVG icon for &lt;a href=&#34;https://pixelfed.social/&#34;&gt;Pixelfed&lt;/a&gt;, a decentralized alternative to image-sharing social networks such as Instagram or Tumblr&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;rsquo;s a fun little weekend exercise. At the beginning I was looking at previous pull requests adding other icons, and noticed, huh, you just copy the &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; parts of a file to the master list of all SVG icons, that&amp;rsquo;s easy. Pixelfed is open sourced, of course, so grabbing the initial SVG just involves looking at its Git repo.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>My blog is built using the Hugo static side generator, using a <a href="https://michel-slm.name/posts/2020-12-14-512k-debloat/">lightly forked version of hello-friend-ng</a>.</p>
<p>Until yesterday, the only change was to strip <code>prism.js</code> to slim down the site (not upstreaming this yet until I could figure out a way to selectively disable it on pages that don&rsquo;t need it).</p>
<p>Yesterday I sent back my first two pull requests though:</p>
<ul>
<li><a href="https://github.com/rhazdon/hugo-theme-hello-friend-ng/pull/257">PR 257</a> fixing links in the SVG documentation</li>
<li><a href="https://github.com/rhazdon/hugo-theme-hello-friend-ng/pull/258">PR 258</a> adding an SVG icon for <a href="https://pixelfed.social/">Pixelfed</a>, a decentralized alternative to image-sharing social networks such as Instagram or Tumblr</li>
</ul>
<p>It&rsquo;s a fun little weekend exercise. At the beginning I was looking at previous pull requests adding other icons, and noticed, huh, you just copy the <code>&lt;svg&gt;</code> parts of a file to the master list of all SVG icons, that&rsquo;s easy. Pixelfed is open sourced, of course, so grabbing the initial SVG just involves looking at its Git repo.</p>
<p>The next problem comes with downsizing the image &ndash; the initial Pixelfed icon is 50x50, the <code>hello-friend-ng</code> icons are all 24x24. <a href="https://inkscape.org/">Inkscape</a> happily resizes the icon (after figuring out that first I have to select all elements, then also resize the document canvas afterwards) &ndash; but when I plug in the paths I noticed I&rsquo;m only getting the upper left corner of the image!</p>
<p>Turns out scaling an SVG image in Inkscape just ended up adding a <code>transform=&quot;scale(...,...)&quot;</code>attribute to the path, and I would rather not have to copy this part as well. Stack Overflow <a href="https://stackoverflow.com/a/41258748/487509">to the rescue</a>: the <a href="https://github.com/Klowner/inkscape-applytransforms">inkscape-applytransforms</a> extension does exactly this, rewriting the paths to hae the transformation applied.</p>
<p>Since I install Inkscape <a href="https://flathub.org/apps/details/org.inkscape.Inkscape">from Flathub</a>, the one minor change is that the extensions have to be copied / symlinked to <code>~/.var/app/org.inkscape.Inkscape/config/inkscape/extensions</code> rather than the locations specified in the repo, but after that everything works great! Really glad that all the social profiles I list on my blog are now FLOSS and self-hosting capable (and many are federated) except for GitHub.</p>
<p><em>This post is day 12 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Book Review: To Be Taught, If Fortunate by Becky Chambers</title>
            <link>https://michel-slm.name/posts/2021-01-03-book-review-chambers-to-be-taught/</link>
            <pubDate>Sun, 03 Jan 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-01-03-book-review-chambers-to-be-taught/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/books/chambers_to-be-taught.jpg&#34;  alt=&#34;Chambers - To Be Taught cover image&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;&lt;strong&gt;4⭐ for content, 5⭐ for writing style&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; a very enjoyable read for the &lt;a href=&#34;https://weirder.earth/@eldang/tagged/sffbookclub&#34;&gt;Fediverse #SFFBookClub&lt;/a&gt;; I breezed through it in only four days.&lt;/p&gt;
&lt;p&gt;This novella is set in the near future where the climate crisis is leading to societal breakdown; with governments now overwhelmed, space exploration is led by the citizen-funded Open Cluster Astronautics and its Lawki crewed missions to extrasolar planets.&lt;/p&gt;
&lt;p&gt;We follow the journey of the sixth such Lawki mission, as narrated by flight engineer Ariadne O&amp;rsquo;Neill, narrating a final transmission that seemed a bit premonitive; it&amp;rsquo;s not until much later in the book that the details of what happened slowly unfolds. As this is the first book I read in the author&amp;rsquo;s larger Wayfarer universe, it is more of a suspense for me than to someone who has read even the first Wayfarer book (The Long Way to a Small, Angry Planet) - but even knowing the bigger picture, it still leaves enough questions to maintain the suspense.&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/books/chambers_to-be-taught.jpg"  alt="Chambers - To Be Taught cover image"  class="center"  />


<p><strong>4⭐ for content, 5⭐ for writing style</strong></p>
<p><strong>TL;DR</strong> a very enjoyable read for the <a href="https://weirder.earth/@eldang/tagged/sffbookclub">Fediverse #SFFBookClub</a>; I breezed through it in only four days.</p>
<p>This novella is set in the near future where the climate crisis is leading to societal breakdown; with governments now overwhelmed, space exploration is led by the citizen-funded Open Cluster Astronautics and its Lawki crewed missions to extrasolar planets.</p>
<p>We follow the journey of the sixth such Lawki mission, as narrated by flight engineer Ariadne O&rsquo;Neill, narrating a final transmission that seemed a bit premonitive; it&rsquo;s not until much later in the book that the details of what happened slowly unfolds. As this is the first book I read in the author&rsquo;s larger Wayfarer universe, it is more of a suspense for me than to someone who has read even the first Wayfarer book (The Long Way to a Small, Angry Planet) - but even knowing the bigger picture, it still leaves enough questions to maintain the suspense.</p>
<p>The universe it sets is interesting, a mix of optimism (when it comes to extrasolar life, or the technological development needed to achieve human spaceflight at a significant percentage of light speed, or somaforming) &ndash; and pessimism (too much of a spoiler though). I was certainly not expecting there being no major glitch with the spacecraft, or that all the extrasolar bodies they explored actually contain lifeforms - and four such orbiting the same star!</p>
<p>As <a href="https://wandering.shop/@Quare/105488357423786135">Q noted in his review</a>, somaforming could have been explored in more details. It felt a bit <em>deus ex machina</em> - something that helps you adapt to the environment and works seamlessly, and yet somehow causes no psychological effect or no physical effect (reflection etc.) that affect the mission.</p>
<p>Otherwise, the dynamics between the crew members are quite fascinating. In contrast to current (relatively much shorter-term) space missions, where fraternatizing is neither encouraged, we are treated to a rich interplay between various human sexuality expressions. Although, here, again, it seems a tad bit optimistic in that it caused less friction than I would expect.</p>
<p>Overall, I highly recommend this book. The writing style is so good (I&rsquo;m starting the first Wayfarer book now, and actually prefer the writing style in this novella), that I don&rsquo;t even question the idiosyncrasies until the end, probably triggered by a jarring distance miscalculation. Even with the open-ended ending (only partially resolved by knowing the Wayfarer universe), it leaves you feeling hopeful and satisfied&hellip; and impressed.</p>
<p><em>Also <a href="https://www.goodreads.com/review/show/3710324488">reviewed on Goodreads</a></em></p>
<p><em>This post is day 11 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Commenting via Mastodon!</title>
            <link>https://michel-slm.name/posts/2021-01-02-mastodon-comments/</link>
            <pubDate>Sat, 02 Jan 2021 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2021-01-02-mastodon-comments/</guid>
            <description>&lt;p&gt;Following Carl Schwann&amp;rsquo;s &lt;a href=&#34;https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/&#34;&gt;post&lt;/a&gt;, I have now enabled comments on my blog, starting with this post. It&amp;rsquo;s surprisingly simple for someone who has not done much mucking around with Hugo before!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re also using Hugo, here&amp;rsquo;s how I did mine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Refer to &lt;a href=&#34;https://gitlab.com/ognarb/blog/-/commit/2be132addbe53ec215ce9c9421f7f90c965d316e&#34;&gt;Carl&amp;rsquo;s commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Copy your theme&amp;rsquo;s relevant template, preserving the same path, to override its behavior. I use a &lt;a href=&#34;https://github.com/michel-slm/hugo-theme-hello-friend-ng/tree/debloat-js&#34;&gt;slightly modified hello-friend-ng&lt;/a&gt; so I copied &lt;code&gt;themes/hello-friend-ng/layouts/posts/single.html&lt;/code&gt; to &lt;code&gt;layouts/posts/single.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create a new partial layout (mine is &lt;code&gt;layouts/partials/mastodon_comments.html&lt;/code&gt;) based on Carl&amp;rsquo;s change to his &lt;code&gt;article.html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check in &lt;a href=&#34;https://github.com/cure53/DOMPurify&#34;&gt;&lt;code&gt;purify.min.js&lt;/code&gt;&lt;/a&gt; to your &lt;code&gt;static/js&lt;/code&gt; folder&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In my case, my theme already has optional Disqus support, so I reworked the &lt;code&gt;single.html&lt;/code&gt; template a bit:&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Following Carl Schwann&rsquo;s <a href="https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/">post</a>, I have now enabled comments on my blog, starting with this post. It&rsquo;s surprisingly simple for someone who has not done much mucking around with Hugo before!</p>
<p>If you&rsquo;re also using Hugo, here&rsquo;s how I did mine:</p>
<ul>
<li>Refer to <a href="https://gitlab.com/ognarb/blog/-/commit/2be132addbe53ec215ce9c9421f7f90c965d316e">Carl&rsquo;s commit</a></li>
<li>Copy your theme&rsquo;s relevant template, preserving the same path, to override its behavior. I use a <a href="https://github.com/michel-slm/hugo-theme-hello-friend-ng/tree/debloat-js">slightly modified hello-friend-ng</a> so I copied <code>themes/hello-friend-ng/layouts/posts/single.html</code> to <code>layouts/posts/single.html</code></li>
<li>Create a new partial layout (mine is <code>layouts/partials/mastodon_comments.html</code>) based on Carl&rsquo;s change to his <code>article.html</code></li>
<li>Check in <a href="https://github.com/cure53/DOMPurify"><code>purify.min.js</code></a> to your <code>static/js</code> folder</li>
</ul>
<p>In my case, my theme already has optional Disqus support, so I reworked the <code>single.html</code> template a bit:</p>
<pre tabindex="0"><code>    {{ if .Params.comments }}
      {{ if .Site.DisqusShortname }}
        &lt;div id=&#34;comments&#34;&gt;
          {{ template &#34;_internal/disqus.html&#34; . }}
        &lt;/div&gt;
      {{ end }}
      {{ if .Params.mastodon }}
        &lt;div id=&#34;comments&#34;&gt;
          {{ partial &#34;mastodon_comments.html&#34; . }}
        &lt;/div&gt;
      {{ end }}
    {{ end }}
</code></pre><p>The original template, for some reason, matches against the string <code>&quot;false&quot;</code> instead of the boolean <code>false</code>, so I also took the chance to fix it (plus I was already using booleans when I was using the Academic theme).</p>
<p>You can now enable comments by setting <code>comments</code> to a truthy value (e.g. the boolean <code>true</code>, or any non-empty string) - by default, having it unset would disable comments - and by setting a <code>mastodon</code> section. e.g. this post has (in TOML):</p>
<pre tabindex="0"><code>comments = true
[mastodon]
host = &#34;floss.social&#34;
username = &#34;michel_slm&#34;
id = &#34;105489572021795386&#34;
</code></pre><p>Next steps is are to fix how comments are displayed by porting the SCSS changes, and to link Mastodon threads to previous posts!</p>
<p>Thanks Carl for this neat hack.</p>
<p><em>This post is day 10 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Fedora packaging tedium and bulk-rebuild</title>
            <link>https://michel-slm.name/posts/2020-12-30-fedora-bulk-rebuild/</link>
            <pubDate>Wed, 30 Dec 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-12-30-fedora-bulk-rebuild/</guid>
            <description>&lt;p&gt;In &lt;a href=&#34;https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/KVTQSWSPVLLODMRZDDP5AGVVS6FNNIIT/#KVTQSWSPVLLODMRZDDP5AGVVS6FNNIIT&#34;&gt;a recent thread&lt;/a&gt; on Fedora&amp;rsquo;s development list, Miroslav Suchý asked about what Fedora packagers found most time-consuming, that could be simplified or better automated.&lt;/p&gt;
&lt;p&gt;For me, personally, it&amp;rsquo;s rebuilding a stack of packages that Facebook develop - due to a lack of stable ABI (so it&amp;rsquo;s partly our own doing, yes), the entire stack has to be rebuilt each time.&lt;/p&gt;
&lt;p&gt;There are some Fedora tooling that make this easier &amp;ndash; &lt;code&gt;rpmdev-bumpspec&lt;/code&gt; can automate the process of updating the version and changelog on simple spec files, and &lt;code&gt;fedpkg request-side-tag&lt;/code&gt; lets any packager get a &amp;lsquo;side tag&amp;rsquo; based off of an existing release, so packages can be built individually then merged back as a set, so there is no window in which the set of packages in, say, Rawhide, are inconsistent with each other, and there is no need to use buildroot overrides (which exposes the unreleased packages to other developers when they might still be buggy).&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>In <a href="https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/KVTQSWSPVLLODMRZDDP5AGVVS6FNNIIT/#KVTQSWSPVLLODMRZDDP5AGVVS6FNNIIT">a recent thread</a> on Fedora&rsquo;s development list, Miroslav Suchý asked about what Fedora packagers found most time-consuming, that could be simplified or better automated.</p>
<p>For me, personally, it&rsquo;s rebuilding a stack of packages that Facebook develop - due to a lack of stable ABI (so it&rsquo;s partly our own doing, yes), the entire stack has to be rebuilt each time.</p>
<p>There are some Fedora tooling that make this easier &ndash; <code>rpmdev-bumpspec</code> can automate the process of updating the version and changelog on simple spec files, and <code>fedpkg request-side-tag</code> lets any packager get a &lsquo;side tag&rsquo; based off of an existing release, so packages can be built individually then merged back as a set, so there is no window in which the set of packages in, say, Rawhide, are inconsistent with each other, and there is no need to use buildroot overrides (which exposes the unreleased packages to other developers when they might still be buggy).</p>
<p>It&rsquo;s still a tedious process though, and will get worse the more packages get added to this set. And I want the process to be reproducible so I can hand it off to someone else.</p>
<p>Enter <a href="https://pagure.io/michel-slm/bulk-rebuild">bulk-rebuild</a>. This is currently hard-coded to rebuild the set of Facebook packages I care about, but I hope to generalize it so it can be useful for others. Going to share this to the mailing list where it can hopefully drive some discussions.</p>
<p>From the <code>README.md</code>:</p>
<h3 id="bump-stacksh">bump-stack.sh</h3>
<p>This script is currently specific to bumping the FB packages that depend on Folly. It can be generalized but probably doesn&rsquo;t make much sense unless the packages have matching version numbers.</p>
<pre tabindex="0"><code>src/fedora/fb-pkgs
❯ ./bulk-rebuild/bump-stack.sh 2020.12.28.00
/home/michel/src/fedora/fb-pkgs/folly
~/src/fedora/fb-pkgs/folly ~/src/fedora/fb-pkgs
Switched to branch &#39;master&#39;
Current branch master is up to date.
Downloading: https://github.com/facebook/folly/archive/v2020.12.28.00/folly-2020.12.28.00.tar.gz
|   3.1 MiB Elapsed Time: -1 day, 16:00:01
Downloaded: folly-2020.12.28.00.tar.gz
Could not execute new_sources: Request is unauthorized.
Password for salimma@FEDORAPROJECT.ORG:
Uploading: folly-2020.12.28.00.tar.gz
######################################################################## 100.0%
Source upload succeeded. Don&#39;t forget to commit the sources file
Done updating folly. Make any manual adjustments now then press ENTER

[master 91ba7c3] Update to 2020.12.28.00
 3 files changed, 6 insertions(+), 3 deletions(-)
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 614 bytes | 204.00 KiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Emitting a message to the fedora-messaging message bus.
remote: * Publishing information for 1 commits
remote: Sending to redis to log activity and send commit notification emails
remote: * Publishing information for 1 commits
remote:   - to fedora-message
To ssh://pkgs.fedoraproject.org/rpms/folly
   1c2166c..91ba7c3  master -&gt; master
# other packages being updated ...
</code></pre><h3 id="build-stacksh">build-stack.sh</h3>
<p>Wraps around <code>fedpkg request-side-tag</code> and <code>fedpkg chain-build</code>. If the release requested is not <code>f34</code> it would rebase from <code>master</code>.</p>
<p>If a side tag is passed as the second argument, it skips requesting and waiting for one, and assumes the side tag is ready to use. <code>wait-repo</code> without specifying a build would always wait for the next repo build so it doesn&rsquo;t make sense to wait.</p>
<p>The list of packages is currently hardcoded too, but it&rsquo;s easy to fix.</p>
<pre tabindex="0"><code>src/fedora/fb-pkgs
❯ ./bulk-rebuild/build-stack.sh f32
Waiting for side tag: f32-build-side-35423
Successfully waited 3:18 for a new f32-build-side-35423 repo
# repos being rebased to master
Chain building watchman-2020.12.28.00-1.fc32 + [[&#39;git+https://src.fedoraproject.org/rpms/folly.git#d77413a204d813852e15a203e9298596db4e9cb9&#39;], [&#39;git+https://src.fedoraproject.org/rpms/fizz.git#489e3fad9c84b2ad9c4e0ac5a1999707fd615c7d&#39;], [&#39;git+https://src.fedoraproject.org/rpms/wangle.git#556764f3fffc18e862de5ca59fb6df7ddd325c4a&#39;], [&#39;git+https://src.fedoraproject.org/rpms/fbthrift.git#f526a69f4d0c24fa28097d32b45984e9c62d83da&#39;]] for f32-build-side-35423
Created task: 58576348
Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=58576348
Watching tasks (this may be safely interrupted)...
58576348 chainbuild (f32-build-side-35423): free
</code></pre><p>At the end of execution the user is prompted to create the Bodhi update. Once these made it to <code>updates-testing</code> the side tag is automatically retired.</p>
<pre tabindex="0"><code>58576348 chainbuild (f32-build-side-35423) completed successfully
Done! Run this to create your update:
bodhi updates new --type enhancement --severity low --stable-karma 1 --from-tag f32-build-side-35423 --notes &#34;Updating FB packages to ...&#34;
</code></pre><p>Of note: the CLIs for <code>fedpkg</code> and <code>koji</code> is currently meant for human, not machine, consumptions. Invoking them from Bash scripts and trying to use the output (e.g. getting the name of that side tag) involves some brittle parsing. I plan to rewrite this in Python anyway, but it might be useful to add an output formatter to some commands where it makes sense (e.g. <code>request-side-tag</code> or <code>chain-build</code>).</p>
<p><em>This post is day 9 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>On the Surveillance Creep that is WeChat</title>
            <link>https://michel-slm.name/posts/2020-12-26-wechat-surveillance-creep/</link>
            <pubDate>Sat, 26 Dec 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-12-26-wechat-surveillance-creep/</guid>
            <description>&lt;blockquote&gt;
&lt;p&gt;This WeChat account has been permanently blocked due to using an unauthorized WeChat plug-in, non-official app, or simulator. Uninstall the unauthorized software now. If this account contains funds, tap &amp;ldquo;OK&amp;rdquo; for relevant instructions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Readers of my &lt;a href=&#34;https://michel-slm.name/posts/2020-12-21-fb-activity-log/&#34;&gt;last #deletefacebook post&lt;/a&gt; probably know of my interest in avoiding any service where the business interests of the company is not aligned with the best interests of its users. So it&amp;rsquo;s probably not a surprise that I try to avoid using WeChat whenever possible.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<blockquote>
<p>This WeChat account has been permanently blocked due to using an unauthorized WeChat plug-in, non-official app, or simulator. Uninstall the unauthorized software now. If this account contains funds, tap &ldquo;OK&rdquo; for relevant instructions.</p>
</blockquote>
<p>Readers of my <a href="/posts/2020-12-21-fb-activity-log/">last #deletefacebook post</a> probably know of my interest in avoiding any service where the business interests of the company is not aligned with the best interests of its users. So it&rsquo;s probably not a surprise that I try to avoid using WeChat whenever possible.</p>
<p>For those who just think of it as &ldquo;that Chinese messaging app&rdquo;, do read <a href="https://citizenlab.ca/2020/05/wechat-surveillance-explained/">The Citizen Lab&rsquo;s WeChat Surveillance Explained</a> for a primer. <strong>TL;DR:</strong> even though users outside China do not encounter overt censorship, their communication is used to train their censorship algorithms. And communications with Chinese nationals are, of course, monitored.</p>
<p>I do have some contacts that, for some reason or others, are only reachable via WeChat. And if you think Facebook&rsquo;s Messenger is obnoxious in that it keeps asking permission to upload your contacts whenever you first log in, WeChat is even worse: while new Android versions force it to ask for permission to read your phone logs and contacts, or have access to your media files, Messenger (and most social media and messaging apps) would still work if you say no. WeChat would simply sulk until you accede to all its data demand.</p>
<p>So what to do? Enter <a href="https://island.oasisfeng.com/">Island</a>, a sandbox environment that basically let you have an &ldquo;Android for Work&rdquo; profile that have its own set of data. I only ran WeChat from there, and so whenever it tried to hoover up my contacts and phone logs, it gets&hellip; nada. Media files I want to send, I transfer to the &ldquo;Island&rdquo; work profile before then sharing via WeChat. A bit cumbersome but it works &ndash; and there&rsquo;s no easy way to get media files I receive via WeChat back out, but it&rsquo;s mostly cat pictures and memes so&hellip; ¯_(ツ)_/¯</p>
<p>Notice the use of past tense? That&rsquo;s because, today, after not using the app for a few months, I received the blocking notice above. Island (or an Android for Work profile) certainly doesn&rsquo;t qualify for any of the above, which made me assume that it just suspected I&rsquo;m using a simulator because no real phone would have no contacts to datamine?</p>
<p>In a way, I am glad this happened. Out with the creepiest app on my phone, and now I can use that Island jail for other, slightly less creepy, apps I&rsquo;m in the process of disentangling myself from.</p>
<p>Before today, I meant to make my next post about transitions in general, so expect that to be my next post in a couple of days. Until then, Happy Holidays, wherever you are, and stay safe!</p>
<p><em>This post is day 8 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>Facebook&#39;s Activity Log Does Not Spark Joy</title>
            <link>https://michel-slm.name/posts/2020-12-21-fb-activity-log/</link>
            <pubDate>Mon, 21 Dec 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-12-21-fb-activity-log/</guid>
            <description>&lt;p&gt;As a current Facebook employee, for various reasons I would rather not get into I still need to have a personal Facebook account.&lt;/p&gt;
&lt;p&gt;I do not really want it to keep a trail of my personal life to be squeezed for every last cent of advertising revenue, though. And slashing-and-burning by deleting this account and starting a new one might cause technical issues so &amp;hellip; better not to try it.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>As a current Facebook employee, for various reasons I would rather not get into I still need to have a personal Facebook account.</p>
<p>I do not really want it to keep a trail of my personal life to be squeezed for every last cent of advertising revenue, though. And slashing-and-burning by deleting this account and starting a new one might cause technical issues so &hellip; better not to try it.</p>
<p>Enter <a href="https://www.cnbc.com/2020/06/03/how-to-delete-facebook-posts-likes-and-old-activity.html">Activity Log</a>. While available on both web and the Facebook apps, currently only the app version (the full Android and iOS apps as well as Facebook Lite) let you delete your activity in bulk. For some interpretations of bulk.</p>
<p>Here&rsquo;s a few bugs I&rsquo;ve already discovered, and why after more than a week my profile is still not a nice clean slate:</p>
<ul>
<li>You have to delete one page at a time</li>
<li>Date stamps appear even for dates that have no activity of the kind you&rsquo;ve filtered for</li>
<li>Because of this weird filtering, sometimes going to the next page and deleting one full page is faster than deleting all visible items in the current page and then seeing only a few items being brought forward</li>
<li>If you&rsquo;re a page admin any interactions between your personal profile and that page cannot be deleted</li>
<li>Page likes cannot be deleted. You would have to click through, and unlike the page &ndash; rinse and repeat</li>
<li>Sometimes page likes get repeated in the activity log, and unliking only remove one of them. So you have this dangling item you can never clear</li>
<li>After clearing all activities you can think of, a subsequent pass might show some of them to still exist. It&rsquo;s a good idea to check with various tools (e.g. web, lite, full app) to be sure</li>
</ul>
<p><strong>TL;DR</strong> - this obviously does not spark joy. If I were not an employee I would just delete this account and be done with it. Kind of glad I don&rsquo;t need to have an Instagram account and mine has been gone for some months now.</p>
<p><em>This post is day 7 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>The 512KB Club and Debloating</title>
            <link>https://michel-slm.name/posts/2020-12-14-512k-debloat/</link>
            <pubDate>Mon, 14 Dec 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-12-14-512k-debloat/</guid>
            <description>&lt;p&gt;I ran across Kev Quick&amp;rsquo;s &lt;a href=&#34;https://fosstodon.org/@kev/105265848408478933&#34;&gt;announcement&lt;/a&gt; for &lt;a href=&#34;https://512kb.club/&#34;&gt;The 512KB Club&lt;/a&gt; last month, and noticed that this blog, using the &lt;a href=&#34;https://themes.gohugo.io/academic/&#34;&gt;Academic theme&lt;/a&gt; for Hugo, was&amp;hellip; a bit on the bloated side, clocking in at a whopping 748KB (including 246KB font, 206KB JS, and 190K CSS).&lt;/p&gt;
&lt;p&gt;This became an added incentive for switching theme - something that&amp;rsquo;s already on the todo list after a previous theme update necessitates some painful configuration refactor.&lt;/p&gt;
&lt;p&gt;I noticed that both &lt;a href=&#34;https://figura.im/&#34;&gt;figura.im&lt;/a&gt; and &lt;a href=&#34;https://secluded.site/&#34;&gt;secluded.site&lt;/a&gt; use &lt;a href=&#34;https://themes.gohugo.io/hugo-theme-hello-friend-ng/&#34;&gt;hello-friend-ng&lt;/a&gt; and clock in at under the limit &amp;ndash; and sport cleaner looks as well, and finally got around to switch to the same theme today.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I ran across Kev Quick&rsquo;s <a href="https://fosstodon.org/@kev/105265848408478933">announcement</a> for <a href="https://512kb.club/">The 512KB Club</a> last month, and noticed that this blog, using the <a href="https://themes.gohugo.io/academic/">Academic theme</a> for Hugo, was&hellip; a bit on the bloated side, clocking in at a whopping 748KB (including 246KB font, 206KB JS, and 190K CSS).</p>
<p>This became an added incentive for switching theme - something that&rsquo;s already on the todo list after a previous theme update necessitates some painful configuration refactor.</p>
<p>I noticed that both <a href="https://figura.im/">figura.im</a> and <a href="https://secluded.site/">secluded.site</a> use <a href="https://themes.gohugo.io/hugo-theme-hello-friend-ng/">hello-friend-ng</a> and clock in at under the limit &ndash; and sport cleaner looks as well, and finally got around to switch to the same theme today.</p>
<p>I had to <a href="https://github.com/michel-slm/hugo-theme-hello-friend-ng/tree/debloat-js">fork the theme</a> to remove <code>prism.js</code>, which Amolith also did for <code>secluded.site</code>, since it alone added over 300KB of JS; I might upstream it once I figure out how to make it optional (toggled only if a post contains source code, preferably).</p>
<p>Apart from that, and having to add aliases so I can put my posts in <code>/content/posts</code> but have the old <code>/content/post</code> links work, the switch is surprisingly painless. A bit annoyed that somehow <code>/content/posts</code> is special when using this theme (the estimated reading times do not show up otherwise), and that simply symlinking <code>post</code> to <code>posts</code> doesn&rsquo;t work (causes Hugo to only generate content for the former) &ndash; but that&rsquo;s likely to do with me not grokking some Hugo peculiarities.</p>
<p>Time to submit this site, now that it clocks in at 205KB (most of it fonts)! I might go for the 256KB category; even with some added social icons it should squeeze in just fine.</p>
<p><em>This post is day 6 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
]]></content>
        </item>
        
        <item>
            <title>On Safety Razors and Technology</title>
            <link>https://michel-slm.name/posts/2020-11-23-on-safety-razors-and-tech/</link>
            <pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-11-23-on-safety-razors-and-tech/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/rex_ambassador.webp&#34;  alt=&#34;rex-ambassador&#34;  class=&#34;center&#34;  /&gt;


&lt;h2 id=&#34;on-safety-razors&#34;&gt;On safety razors&lt;/h2&gt;
&lt;p&gt;I recently switched over from the ubiquitous cartridge razors to double-edge safety razors. The original impetus was not finding a non-charging base for my GiletteLabs Heated Razors - the battery in the stem made it too wide for most razor holders - and noticing that a lot of reviews swear by various safety razors.&lt;/p&gt;
&lt;p&gt;I ended up buying the &lt;a href=&#34;https://www.razoremporium.com/rex-supply-co-ambassador-adjustable-stainless-steel-de-razor/&#34;&gt;Rex Ambassador&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; a few months ago - and then held off on actually using it, telling myself I need to learn how to properly use it first. In the end I told myself I would stop using my Gilette the day after the US Presidential Election, and start using the safety razor the morning after the US Presidential Election is finally called &amp;ndash; which was Sunday the 8th, with a nice 5-day stubble to test it on.&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/rex_ambassador.webp"  alt="rex-ambassador"  class="center"  />


<h2 id="on-safety-razors">On safety razors</h2>
<p>I recently switched over from the ubiquitous cartridge razors to double-edge safety razors. The original impetus was not finding a non-charging base for my GiletteLabs Heated Razors - the battery in the stem made it too wide for most razor holders - and noticing that a lot of reviews swear by various safety razors.</p>
<p>I ended up buying the <a href="https://www.razoremporium.com/rex-supply-co-ambassador-adjustable-stainless-steel-de-razor/">Rex Ambassador</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> a few months ago - and then held off on actually using it, telling myself I need to learn how to properly use it first. In the end I told myself I would stop using my Gilette the day after the US Presidential Election, and start using the safety razor the morning after the US Presidential Election is finally called &ndash; which was Sunday the 8th, with a nice 5-day stubble to test it on.</p>
<p>The first shave went surprisingly smoothly; the next few shaves ended with some minor mishaps - cockiness and distraction getting in the way - but overall there is no way I&rsquo;m going back to cartridge razors after this. Feeling more in control, getting a closer shave, no plastic waste to dispose &ndash; and hey much lower total cost of ownership!</p>
<h2 id="-and-technology">&hellip; and technology</h2>
<p>There seems to be a parallel here between the world of personal care and that of technology:</p>
<ul>
<li>most people are trapped on proprietary, heavily marketed solutions (cartridge razors, proprietary operating systems, apps and services)</li>
<li>these proprietary solutions are at first glance more user friendly</li>
<li>the more open solutions have a steeper learning curve but are eventually more empowering</li>
<li>vendor lock-in</li>
<li>the incentives for the manufacturers/vendors and customers/users are not aligned</li>
</ul>
<p>Think Windows on one side, vs Linux (and the BSDs) on the other (with macOS initially being in the middle and increasingly swaying to becoming even more constraining than Windows). Think proprietary gaming consoles and mobile IAP-chasing games, vs game platforms that <a href="https://fennel-lang.org/setup#making-games-with-fennel">encourage participation</a> like <a href="https://tic80.com/">TIC-80</a> and <a href="https://love2d.org/">LÖVE</a>. Think US-centric proprietary social networks (Facebook, Twitter) and services (Dropbox, Google Suite) vs distributed social networks (Mastodon, Pleroma, Diaspora etc.) and self-hosted services (Nextcloud, Cryptpad etc.).</p>
<p>What are most people sacrificing to the altar of promised convenience? Literally both time and money: our attention, higher costs; also our autonomy (you&rsquo;re locked in) and our privacy (&hellip; so platform owners can mine your attention and monetize what they observe of your behavior).</p>
<p>If you believe in capitalism, this is bad news. If you don&rsquo;t it&rsquo;s even worse.</p>
<h2 id="so-what-can-we-do">So what can we do?</h2>
<p>Part of the solution is regulatory. In the EU, <a href="https://nextcloud.com/blog/eu-court-withdraw-personal-data-of-eu-citizens-from-us-cloud-services-immediately/">a recent ECJ ruling</a> requires EU companies to stop using US-based cloud services to host data from EU citizens. This could help push the adoption of more open, user-empowering, privacy-friendly alternatives.</p>
<p>But in other jurisdictions like the US, regulation might be a long time coming, except maybe in California (plus the companies we&rsquo;re trying to unshackle users from are mostly US-based). So a lot of the solution has to be bottom up.</p>
<p>We simply need to lower barriers to entry, both actual and perceived, to using the platforms we&rsquo;re championing. Some involve compromises (e.g. <a href="https://flatpak.org/">Flatpak</a> is a great way to abstract away the differences between Linux distributions, to the point that <a href="https://flathub.org/home">it&rsquo;s easier to install proprietary apps</a>, including Steam &ndash; which improves the availability of games on Linux despite, yes, being proprietary). Some involve corporate backing (e.g. <a href="https://fedoramagazine.org/lenovo-fedora-now-available/">Fedora on Lenovo laptops</a>). A lot would involve being more welcoming to newcomers, and bridging the actual usability gaps there are.</p>
<p>It&rsquo;s hard enough to overcome incumbency and the network effect. Let&rsquo;s not make it harder for ourselves.</p>
<p><em>This post is day 5 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Not a product placement, honest!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Does social media bring you joy?</title>
            <link>https://michel-slm.name/posts/2020-09-09-reducing-fb-use/</link>
            <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-09-09-reducing-fb-use/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/large_social-dilemma-poster.jpg&#34;  alt=&#34;the-social-dilemma&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;I deleted my Instagram accounts today. The process is &lt;a href=&#34;https://www.msn.com/en-us/news/technology/how-to-delete-your-instagram-account-permanently-or-temporarily-deactivate-it/ar-BB14JSV1&#34;&gt;needlessly obscure&lt;/a&gt; - the flow on the app and the web interface only exposes an option to temporarily disable your account - which is an alarming anti-pattern; it is indeed one of the &lt;a href=&#34;https://michel-slm.name/post/2020-08-12-breaking-out-of-walled-gardens/&#34;&gt;walled gardens&lt;/a&gt; I alluded to in an earlier post.&lt;/p&gt;
&lt;p&gt;What was the impetus for this, you might ask? There are multiple factors I took into consideration, but the final straw was watching Jeff Orlowski&amp;rsquo;s thought-provoking documentary, &lt;a href=&#34;https://www.netflix.com/title/81254224&#34;&gt;&lt;em&gt;The Social Dilemma&lt;/em&gt;&lt;/a&gt;. It&amp;rsquo;s on Netflix right now, and is a highly recommended watch. Even as someone who has, for a while, been highly skeptical of algorithmic newsfeeds in particular, and the attention economy in general, this still sends chills down my spine. A &lt;em&gt;lot&lt;/em&gt; of tech insiders have second thoughts about the products they built, worry about its impact on the world, and try to insulate their children from it.&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/large_social-dilemma-poster.jpg"  alt="the-social-dilemma"  class="center"  />


<p>I deleted my Instagram accounts today. The process is <a href="https://www.msn.com/en-us/news/technology/how-to-delete-your-instagram-account-permanently-or-temporarily-deactivate-it/ar-BB14JSV1">needlessly obscure</a> - the flow on the app and the web interface only exposes an option to temporarily disable your account - which is an alarming anti-pattern; it is indeed one of the <a href="https://michel-slm.name/post/2020-08-12-breaking-out-of-walled-gardens/">walled gardens</a> I alluded to in an earlier post.</p>
<p>What was the impetus for this, you might ask? There are multiple factors I took into consideration, but the final straw was watching Jeff Orlowski&rsquo;s thought-provoking documentary, <a href="https://www.netflix.com/title/81254224"><em>The Social Dilemma</em></a>. It&rsquo;s on Netflix right now, and is a highly recommended watch. Even as someone who has, for a while, been highly skeptical of algorithmic newsfeeds in particular, and the attention economy in general, this still sends chills down my spine. A <em>lot</em> of tech insiders have second thoughts about the products they built, worry about its impact on the world, and try to insulate their children from it.</p>
<p>Center for Humane Technology&rsquo;s Tristan Harris (ex-Google ethicist) and Aza Raskin (infinite scroll inventor), Jaron Lanier (a VR luminary, author of critical books such as <a href="https://www.goodreads.com/book/show/37830765-ten-arguments-for-deleting-your-social-media-accounts-right-now"><em>Ten Arguments for Deleting Your Social Media Accounts Right Now</em></a>) feature prominently in the documentary, as well as ex-Facebook personnel such as Tim Kendall and Justin Rosenstein (remember the Like button?); ex-YouTuber Guillaume Chaslot (who built <a href="https://algotransparency.org">AlgoTransparency</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>), former Twitter executives, and academics such as Shoshana Zuboff. I risk name-dropping if I continue (ok, one more - Cathy O&rsquo;Neil, author of Weapons of Math Destruction). <strong>TL;DR - watch for yourself!</strong></p>
<p>To get a quick peek, this might whet your appetite:</p>
<ul>
<li>Wired&rsquo;s interview with Tristan Harris<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li>
<li>GQ&rsquo;s interview with Jaron Lanier<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
</ul>
<p>If you have read this far, I&rsquo;m assuming some of the material above resonated, or you at least want to find out more. What I&rsquo;ll do next is break down that ineffable &ldquo;something is wrong&rdquo; dissastisfaction I have into several aspects, and suggest ways to address, or at least mitigate, that particular aspect.</p>
<h2 id="too-big-to-fail">Too Big To Fail</h2>
<p>You might have noticed that I deleted my Instagram accounts, but did not delete my Facebook account. There are work reasons I can&rsquo;t get into for why I am not doing that, but many of you might not be able to quit for other reasons: <a href="https://en.wikipedia.org/wiki/Metcalfe%27s_law">Metcalf&rsquo;s Law</a> means it&rsquo;s hard to replace a network once it has achieved critical mass, and Facebook (and other Facebook-owned properties - especially WhatsApp) might be the only way you have of keeping in touch with some of your personal and work contacts &ndash; or even accessing local government services!</p>
<p>Quitting cold turkey might not be an option, but - even if you&rsquo;re otherwise happy with Facebook (or any other proprietary social network you can name) - is this dependence healthy? What if:</p>
<ul>
<li>there is a technical glitch and Facebook is down</li>
<li>&hellip; and some of your content is lost</li>
<li>for political reasons access to Facebook is shut down</li>
<li>your account, rightly or wrongly, is considered in violation and get suspended</li>
</ul>
<p>The last is becoming more worrying as other Facebook-owned properties are increasingly being integrated with Facebook infrastructure. Oculus&rsquo; integration is in full swing, for instance<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup><sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>.</p>
<p>So make sure you have alternate means of reaching your contacts. Keep your own address book (Facebook is an incomplete replacement anyway; you don&rsquo;t use it to store your friends&rsquo; and colleagues&rsquo; addresses there, do you?). Keep track of your friends&rsquo; birthdays there rather than relying on Facebook notifications. I would advise not using Google Contacts or Apple&rsquo;s, but that&rsquo;s a topic for another article, and anyway, most address books including those two tech giants&rsquo; are reasonably compliant with the CardDAV spec that getting your contacts&rsquo; data out is not as painful as getting it out from Facebook.</p>
<p>Make sure you have your contacts&rsquo; email addresses and/or phone numbers. Some messaging systems will auto-detect your contacts once you have their phone numbers (e.g. Signal, Telegram, and yes, WhatsApp); some others (IRC, Matrix) won&rsquo;t so be sure to check if someone is reachable on some other networks and make note of it in your contacts database.</p>
<h2 id="that-algorithmic-news-feed">That algorithmic news feed</h2>
<p>Many are increasingly worn out<sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup> by political posts in their news feeds. The news feed might be intrinsically polarizing<sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>. Facebook won&rsquo;t let you turn it off though - likewise with <em>People You May Know</em><sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>. One draws engagement, the other drives growth &ndash; even though it can sometimes be a privacy nightmare - think sex workers being outed to their johns, or patients being recommended to one another.</p>
<p>There are alternatives, though.</p>
<ul>
<li>on the web, bookmark the parts of Facebook you want to visit and don&rsquo;t visit <a href="https://www.facebook.com">www.facebook.com</a> since that takes you to the News Feed. e.g. <a href="https://www.facebook.com/groups/feed/">visit your groups directly</a></li>
<li>on mobile, you can do the same by using your web browser instead of the Facebook app</li>
<li>if you need an Android app, <a href="https://allanwang.github.io/Frost-for-Facebook/">Frost for Facebook</a> is great. It&rsquo;s open source - so if you use the F-Droid build, you can inspect the code and be sure that what you are running corresponds to the published source. It lets you customize what parts of Facebook you have quick access to, and&hellip; has dark mode long before the official app</li>
<li>there are similar apps for iOS but I can&rsquo;t vouch for them</li>
</ul>
<h2 id="if-youre-not-paying-your-attention-is-the-product">If You&rsquo;re Not Paying, Your Attention Is The Product</h2>
<p>Why does News Feed try so hard to keep you engaged? Think about how Facebook makes money - <a href="https://www.nbcnews.com/video/senator-asks-how-facebook-remains-free-zuckerberg-smirks-we-run-ads-1207622211889">Senator, we run ads</a>. More eyes on the app or site, more opportunities to show ads. If the most engaging content is polarizing and divisive, and advertisers can target those users who respond well to extreme fringe content&hellip; well, it&rsquo;s not intentional, but &hellip; because it&rsquo;s at the intersection of the business model and deep-rooted psychology it&rsquo;s extremely hard to fix.</p>
<p>In an ideal world Facebook would give users the option to pay for the service - as <a href="https://www.reddit.com/premium">Reddit already does</a>. Sure, the most lucrative users are probably worth more as ad targets than as paying members, and many people in poorer countries might not be able to afford to pay. It&rsquo;s questionable if Facebook is serving the latter well though<sup id="fnref:9"><a href="#fn:9" class="footnote-ref" role="doc-noteref">9</a></sup>. As for the former &ndash; weaning the company off ads is probably a worthy goal, even if this might be as hard as weaning a petrostate off oil revenues.</p>
<h2 id="where-should-i-go">Where Should I Go?</h2>
<p>Ideally you start migrating to federated, open protocol platforms, with sustainable business models:</p>
<ul>
<li><a href="https://matrix.org/">Matrix</a> is a decentralized communication network, and <a href="https://element.io/">Element</a>, the company behind the main client and server implementations, sells paid hosting</li>
<li><a href="https://joinmastodon.org/">Mastodon</a> is the most common network on the <a href="https://fediverse.party/en/fediverse">Fediverse</a>. It&rsquo;s basically a decentralized Twitter; many Mastodon instances are supported by their users via subscriptions.</li>
</ul>
<p>My ex-collague Dmitry wrote an excellent <a href="https://medium.com/@angdraug/the-breakout-plan-316ce4a74493">breakout plan</a> for switching to Mastodon.</p>
<p>I would otherwise recommend Signal, but (a) it is not decentralized, and (b) it has no stable business model as of now, so its long-term future is questionable.</p>
<p>For those contacts who insist on using Facebook or Messenger &ndash; well, <a href="https://play.google.com/store/apps/details?id=com.facebook.mlite&amp;hl=en_US">Messenger Lite</a> is still not monetized. You&rsquo;re missing the ability to send or request money to your contacts, but see point 1 on too big to fail.</p>
<h2 id="back-to-you">Back to you</h2>
<p>This is getting overly long, and it&rsquo;s late at night, so I will probably stop here for now. I might post a follow-up if there are any points I did not think of addressing &ndash; and I&rsquo;ll definitely follow up with further posts on how and why you might not want to use Gmail.</p>
<h2 id="would-you-get-in-trouble-for-this">Would you get in trouble for this?</h2>
<p>Hopefully not! I&rsquo;m not recommending anything that is illegal, nor am I divulging any confidential information. A Facebook that is less dependent on advertising income might be more able to address a lot of the issues it now struggles with, after all.</p>
<p>Needless to say, <em>the opinions expressed herein are my own and do not represent my employer’s views in any way. Nothing posted here should be considered official or sanctioned by my employer or any other organization I’m affiliated with.</em></p>
<p><em>This post is day 4 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p>Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to <a href="mailto:~michel-slm/public-inbox@lists.sr.ht">~michel-slm/public-inbox@lists.sr.ht</a> [<a href="https://man.sr.ht/lists.sr.ht/etiquette.md">mailing list etiquette</a>]</p>
<p>Posts are also tooted to <a href="https://floss.social/@michel_slm">@michel_slm@floss.social</a></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://www.technologyreview.com/2018/04/12/143919/an-ex-google-engineer-is-scraping-youtube-to-pop-our-filter-bubbles/">An ex-Google engineer is scraping YouTube to pop our filter bubbles</a>, <em>Technology Review</em>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://www.wired.com/story/our-minds-have-been-hijacked-by-our-phones-tristan-harris-wants-to-rescue-them/">Our Minds Have Been Hijacked by Our Phones. Tristan Harris Wants to Rescue Them</a>, <em>Wired</em>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://www.gq.com/story/jaron-lanier-tech-oracle-profile">The Conscience of Silicon Valley</a>, <em>GQ</em>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://www.theverge.com/2020/8/19/21375118/oculus-facebook-account-login-data-privacy-controversy-developers-competition">Facebook is making Oculus&rsquo; worst feature unavoidable</a>, <em>The Verge</em>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://www.theverge.com/2020/8/25/21399752/oculus-connect-7-date-renamed-facebook-reality-labs-new-quest">Oculus Connect is now &lsquo;Facebook Connect&rsquo;</a>, <em>The Verge</em>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://www.pewresearch.org/fact-tank/2020/08/19/55-of-u-s-social-media-users-say-they-are-worn-out-by-political-posts-and-discussions/">55% of U.S. social media users say they are ‘worn out’ by political posts and discussions</a>, <em>Pew Research</em>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://www.theverge.com/interface/2020/5/28/21272001/facebook-polarization-wall-street-journal-guy-rosen-platform-integrity-twitter-trump">How to think about polarization on Facebook</a>, <em>The Verge</em>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="https://gizmodo.com/people-you-may-know-a-controversial-facebook-features-1827981959">&lsquo;People You May Know:&rsquo; A Controversial Facebook Feature&rsquo;s 10-Year History</a>, <em>Gizmodo</em>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p><a href="https://www.cjr.org/the_media_today/facebook-un-myanmar-genocide.php">Facebook slammed by UN for its role in Myanmar genocide</a>, <em>Columbia Journalism Review</em>&#160;<a href="#fnref:9" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>HOWTO: Run a Fedora 32-bit ARM VM emulated on x86-64</title>
            <link>https://michel-slm.name/posts/2020-08-20-fedora-armhfp-vm/</link>
            <pubDate>Thu, 20 Aug 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-08-20-fedora-armhfp-vm/</guid>
            <description>&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;I am writing this as a memory aid to myself the next time I have to do this, but this might make a nice addition to the &lt;a href=&#34;https://fedoraproject.org/wiki/Architectures/ARM&#34;&gt;Fedora ARM wiki&lt;/a&gt; once cleaned up.&lt;/p&gt;
&lt;p&gt;I need a 32-bit ARM VM to debug some issues with &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1855034&#34;&gt;armhfp image creation&lt;/a&gt;; the most efficient way to do this would be to use KVM on an &lt;code&gt;aarch64&lt;/code&gt; host like a Raspberry Pi 4, but mine is still in storage &amp;ndash; and WFH means I&amp;rsquo;m getting too used to programming from my laptop while wandering around the house anyway. So &amp;hellip; until my Pinebook Pro arrives, &lt;code&gt;armhfp-on-x86_64&lt;/code&gt; it is.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<h2 id="background">Background</h2>
<p>I am writing this as a memory aid to myself the next time I have to do this, but this might make a nice addition to the <a href="https://fedoraproject.org/wiki/Architectures/ARM">Fedora ARM wiki</a> once cleaned up.</p>
<p>I need a 32-bit ARM VM to debug some issues with <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1855034">armhfp image creation</a>; the most efficient way to do this would be to use KVM on an <code>aarch64</code> host like a Raspberry Pi 4, but mine is still in storage &ndash; and WFH means I&rsquo;m getting too used to programming from my laptop while wandering around the house anyway. So &hellip; until my Pinebook Pro arrives, <code>armhfp-on-x86_64</code> it is.</p>
<h2 id="initial-installation">Initial installation</h2>
<p>Per <code>pwhalen</code> on the ever-helpful <code>#fedora-arm</code> IRC channel on Freenode, UEFI installation is not supported yet for 32-bit ARM, and so the otherwise very relevant blog post by Marcin Juszkiewicz, <em>Running VMs on Fedora/AArch64</em><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, does not apply here. <strong>Do not</strong> have <code>edk2-arm</code> installed, otherwise if you create a new ARM VM from <code>virt-manager</code> it will default to using UEFI mode.</p>
<p>Instead, mostly follow the Fedora QA test case<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. I&rsquo;m replicating the instructions here in case something happens to the Fedora wiki:</p>
<ul>
<li>Download the latest arm disk image to $HOME:https://dl.fedoraproject.org/pub/fedora/linux/releases/32/Spins/armhfp/images/Fedora-Minimal-armhfp-32-1.6-sda.raw.xz</li>
<li>Extract the disk image: <code>unxz Fedora-Minimal-armhfp-32-1.6-sda.raw.xz</code></li>
<li>Install virt-builder: <code>sudo dnf install libguestfs-tools-c</code></li>
<li>Extract the kernel/initrd from the disk image: <code>virt-get-kernel -a Fedora-Minimal-armhfp-32-1.6-sda.raw</code></li>
<li>Get kernel args for the the image: <code>virt-cat -a Fedora-Minimal-armhfp-32-1.6-sda.raw /etc/extlinux.conf</code></li>
<li>Copy the media to the the default libvirt image location: <code>sudo mv Fedora-Minimal-armhfp-32-1.6-sda.raw vmlinuz-*.armv7hl initramfs-*.armv7hl.img /var/lib/libvirt/images/</code></li>
<li>Ensure qemu-system-arm is installed: <code>sudo dnf install qemu-system-arm</code></li>
</ul>
<p>There is a typo in the <em>Create the VM with virt-install</em> section - the OS variant should be Fedora 32, not 31. Also I renamed the VM name from the example given, which uses the filename of the disk image, to the shorter <code>fedora-armhfp-32</code>.</p>
<pre tabindex="0"><code>❯ sudo virt-install \
    --name fedora-armhfp-32 --ram 4096 --arch armv7l --machine virt-2.11 --os-variant fedora32 --import \
    --disk /var/lib/libvirt/images/fedora-armhfp-32.raw \
    --boot kernel=/var/lib/libvirt/images/vmlinuz-5.6.6-300.fc32.armv7hl,initrd=/var/lib/libvirt/images/initramfs-5.6.6-300.fc32.armv7hl.img,kernel_args=&#34;console=ttyAMA0 rw root=LABEL=_/ rootwait&#34;
</code></pre><p>I did not want to change too many things at the beginning, but if I were to do this again I&rsquo;d convert the disk image to <code>qcow2</code> before invoking <code>virt-install</code> so I don&rsquo;t have to change the VM configuration. Not only is it more space efficient but you get to take snapshots &ndash; and when the emulation is really slow, you definitely want quick recovery from any mistake.</p>
<pre tabindex="0"><code>❯ sudo qemu-img convert -f raw -O qcow2 fedora-armhfp-32.{raw,qcow2}
</code></pre><h2 id="resizing">Resizing</h2>
<p>The default root partition was overly small &ndash; out of the box it already consumed 1.1G out of 1.3G! You definitely want to resize it ASAP.</p>
<p>RHEL6&rsquo;s Virtualization Administration Guide<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> comes to the rescue here; while dated the information is still very relevant.</p>
<pre tabindex="0"><code>[root@michel-fedora-PC198L6J images]# qemu-img resize fedora-armhfp-32.qcow2 20G
[root@michel-fedora-PC198L6J images]# ls
fedora-armhfp-32.qcow2  fedora-armhfp-32.raw  fedora.qcow2 Fedora-Workstation-armhfp-33-sda.raw  initramfs-5.6.6-300.fc32.armv7hl.img  vmlinuz-5.6.6-300.fc32.armv7hl
[root@michel-fedora-PC198L6J images]# cp -p fedora-armhfp-32.qcow2{,.backup}
[root@michel-fedora-PC198L6J images]# virt-df -h ./fedora-armhfp-32.qcow2
Filesystem                                Size       Used  Available  Use%
fedora-armhfp-32.qcow2:/dev/sda1           76M        25M        51M   34%
fedora-armhfp-32.qcow2:/dev/sda2          457M        89M       353M   20%
fedora-armhfp-32.qcow2:/dev/sda3          1.3G       1.1G       100M   90%
[root@michel-fedora-PC198L6J images]# virt-resize ./fedora-armhfp-32.qcow2.backup ./fedora-armhfp-32.qcow2 --expand /dev/sda3
[   0.0] Examining ./fedora-armhfp-32.qcow2.backup
**********

Summary of changes:

/dev/sda1: This partition will be left alone.

/dev/sda2: This partition will be left alone.

/dev/sda3: This partition will be resized from 1.3G to 19.4G.  The
filesystem ext4 on /dev/sda3 will be expanded using the ‘resize2fs’
method.

**********
[   2.3] Setting up initial partition table on ./fedora-armhfp-32.qcow2
[   3.7] Copying /dev/sda1
[   3.9] Copying /dev/sda2
[   4.5] Copying /dev/sda3
[   7.1] Expanding /dev/sda3 using the ‘resize2fs’ method

Resize operation completed with no errors.  Before deleting the old disk,
carefully check that the resized disk boots and works correctly.
</code></pre><h2 id="kernel-updates">Kernel updates</h2>
<p>Upgrading via <code>dnf upgrade</code> works as usual. However, because we hardcode the kernel and initrd information in the VM configuration, switching to boot the new kernel requires some manual changes: use <code>virt-get-kernel</code>, as done initially to extract the kernel and initrd out of the original disk image; this will now extract the newer versions.</p>
<pre tabindex="0"><code>lib/libvirt/images 
❯ sudo ls -l                          
[sudo] password for michel: 
total 84002632
-rw-r--r--. 1 qemu   qemu    5895618560 Aug 20 18:22 fedora-armhfp-32.qcow2
-rw-r--r--. 1 qemu   qemu    1436942656 Aug 20 15:59 fedora-armhfp-32.qcow2.backup
-rw-rw-r--. 1 qemu   qemu    2088763392 Aug 20 15:57 fedora-armhfp-32.raw
-rw-------. 1 qemu   qemu   71195557888 Aug  8 14:25 fedora.qcow2
-rw-r--r--. 1 root   root    7121928192 Aug 20 12:53 Fedora-Workstation-armhfp-33-sda.raw
-rw-rw-r--. 1 michel michel    51619027 Aug 20 14:39 initramfs-5.6.6-300.fc32.armv7hl.img
-rw-rw-r--. 1 michel michel     7643648 Aug 20 14:39 vmlinuz-5.6.6-300.fc32.armv7hl

lib/libvirt/images took 3s 
❯ sudo virt-get-kernel -a fedora-armhfp-32.qcow2
download: /boot/vmlinuz-5.7.15-200.fc32.armv7hl -&gt; ./vmlinuz-5.7.15-200.fc32.armv7hl
download: /boot/initramfs-5.7.15-200.fc32.armv7hl.img -&gt; ./initramfs-5.7.15-200.fc32.armv7hl.img

lib/libvirt/images took 5s 
❯ sudo ls -l                                    
total 84028332
-rw-r--r--. 1 qemu   qemu    5895618560 Aug 20 18:22 fedora-armhfp-32.qcow2
-rw-r--r--. 1 qemu   qemu    1436942656 Aug 20 15:59 fedora-armhfp-32.qcow2.backup
-rw-rw-r--. 1 qemu   qemu    2088763392 Aug 20 15:57 fedora-armhfp-32.raw
-rw-------. 1 qemu   qemu   71195557888 Aug  8 14:25 fedora.qcow2
-rw-r--r--. 1 root   root    7121928192 Aug 20 12:53 Fedora-Workstation-armhfp-33-sda.raw
-rw-rw-r--. 1 michel michel    51619027 Aug 20 14:39 initramfs-5.6.6-300.fc32.armv7hl.img
-rw-r--r--. 1 root   root      18473488 Aug 20 18:23 initramfs-5.7.15-200.fc32.armv7hl.img
-rw-rw-r--. 1 michel michel     7643648 Aug 20 14:39 vmlinuz-5.6.6-300.fc32.armv7hl
-rw-r--r--. 1 root   root       7836160 Aug 20 18:23 vmlinuz-5.7.15-200.fc32.armv7hl
</code></pre><p>Now we just need to switch the VM configuration to use the new kernel. The configuration files are in <code>/etc/libvirt/qemu</code>:</p>
<pre tabindex="0"><code>❯ sudo find /etc/libvirt/qemu -maxdepth 1 -name &#39;*.xml&#39;
/etc/libvirt/qemu/fedora-armhfp-32.xml
/etc/libvirt/qemu/fedora.xml
</code></pre><p>Either edit the file directly, or from <code>virt-manager</code>, open the VM and select OS information. You must have XML editing enabled though (in Virtual Machine Manager, change this in Edit -&gt; Preferences).</p>
<p>Unfortunately, since the kernel and initrd still have to be specified in the XML configuration, that means they are not part of any snapshot you might take.</p>
<h2 id="conclusion">Conclusion</h2>
<p>There we are! This is definitely not the fastest way to run 32-bit ARM &ndash; on my ThinkPad T490s booting the emulated VMs take minutes, and the initial <code>dnf upgrade</code> probably took over an hour to upgrade and verify a minimal set of ~ 200 packages. But it does get the job done, and apart from the slowness, it behaves just like any other <code>libvirt</code> VM, which is nice.</p>
<p><em>This post is day 3 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://marcin.juszkiewicz.com.pl/2015/04/17/running-vms-on-fedoraaarch64/">Running VMs on Fedora/AArch64</a>, by Marcin Juszkiewicz&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://fedoraproject.org/wiki/QA:Testcase_Virt_ARM_on_x86#Create_the_VM_with_virt-manager">QA:Testcase Virt ARM on x86
</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/virtualization_administration_guide/sect-expand-disk-image">Expanding a Disk Image</a>, RHEL6 Virtualization Administration Guide&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Book Review: The Jakarta Method, by Vincent Bevins</title>
            <link>https://michel-slm.name/posts/2020-08-19-book-review-jakarta-method/</link>
            <pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-08-19-book-review-jakarta-method/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/books/bevins_the-jakarta-method.jpg&#34;  alt=&#34;bevins_the-jakarta-method&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;&lt;strong&gt;5⭐ for content, 4⭐ for writing style&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I grew up in Indonesia, to &lt;a href=&#34;https://en.wikipedia.org/wiki/Chinese_Indonesians&#34;&gt;Chinese Indonesian&lt;/a&gt; parents. As such I considered myself fairly knowledgeable about the events that shook my country in 1965 &amp;ndash; the alleged Communist coup, the &amp;ldquo;counter-coup&amp;rdquo; that brought Gen. Suharto to power, the ban on any Chinese cultural expression - from Chinese-language books to having Chinese names. If you are familiar with Chinese surnames you can probably decipher mine and figure out what my original surname was!&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/books/bevins_the-jakarta-method.jpg"  alt="bevins_the-jakarta-method"  class="center"  />


<p><strong>5⭐ for content, 4⭐ for writing style</strong></p>
<p>I grew up in Indonesia, to <a href="https://en.wikipedia.org/wiki/Chinese_Indonesians">Chinese Indonesian</a> parents. As such I considered myself fairly knowledgeable about the events that shook my country in 1965 &ndash; the alleged Communist coup, the &ldquo;counter-coup&rdquo; that brought Gen. Suharto to power, the ban on any Chinese cultural expression - from Chinese-language books to having Chinese names. If you are familiar with Chinese surnames you can probably decipher mine and figure out what my original surname was!</p>
<p>Even with that background, this book is still an eye-opener. Partly because of the author being able to reference newly-declassified documents, partly because he managed to interview so many victims of the mass persecution of alleged Communists and leftists that took place in 1965-6 (and later in 1975 after Indonesia invaded East Timor). But also, most importantly, because he weaved a master narrative connecting events in Indonesia to previous Western intelligence interventions &ndash; in Iran and Guatemala &ndash; as well as later interventions in South East Asia and Latin America; in the latter region Jakarta became synonymous with right-wing militaristic suppression of leftists, including <em>disappearing</em> them for added terror.</p>
<p>It is published at a very opportune time, when a right-wing authoritarian movement seems ascendant in many countries - capturing the Presidency in the United States, Brazil, and the Philippines; the premiership in India and Hungary; and getting stronger in many others including France and, hello again, Indonesia. Indonesia, the country where we never come to grips with our past, where an attempt at a truth and reconciliation process was quashed, and there is still strong villification of the left and even of liberals.</p>
<p>Similar to how religious mythologies often bear striking parallels to each other, it is quite striking how the alleged events of the night of September 30, 1965 in Indonesia parallel the alleged incident in Brazil in 1935 that became the foundational myth of that country&rsquo;s anti-communist movement. Likewise, the CIA&rsquo;s predilection for funding Islamists &ndash; a policy that backfired most spectacularly with 9/11 &ndash; turns out to be deep-rooted; the book described them secretly funding a political party in Indonesia in the 1950s.</p>
<p>One wonders what the decolonized Third World would look like, had its countries been free to develop along their own paths. More secular and left leaning, and perhaps even more democratic? The author made a suggestion that the turn to authoritarianism among surviving socialist regimes is likely a reaction to the massacre of peaceful socialist and communist parties in Indonesia and Chile.</p>
<p>It often struck me how in many ways, Indonesia is a poor copy of the United States - both post-colonial states, both more religious than their counterparts, both with costly military operations within and outside of their borders. It turns out that the similarities might be less coincidental than I first thought.</p>
<p>In a world where colonialism is dead, but neoliberalism and globalization (and increasingly, large corporations calling the shots) being eerily similar to deposed Indonesian President Sukarno&rsquo;s criticism of neocolonialism, it is more imperative than ever to learn from our history. As Santayana said, those who cannot remember the past are condemned to repeat it.</p>
<p>I highly recommend this book. The prose can be a bit odd at times &ndash; this book feels to me like a non-fictional 1984, if you catch my drift &ndash; but it does not detract from the reading experience. I finished it over 11 days of mostly bedtime reading!</p>
<p><em>Also <a href="https://www.goodreads.com/review/show/3486452793">reviewed on Goodreads</a></em></p>
<p><em>This post is day 2 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
]]></content>
        </item>
        
        <item>
            <title>Breaking out of walled gardens</title>
            <link>https://michel-slm.name/posts/2020-08-12-breaking-out-of-walled-gardens/</link>
            <pubDate>Wed, 12 Aug 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-08-12-breaking-out-of-walled-gardens/</guid>
            <description>&lt;img src=&#34;https://michel-slm.name/img/cretan-labyrinth.svg&#34;  alt=&#34;labyrinth&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;I have been progressively getting more and more dissatisfied with the grip Big Tech firms have over our collective lives, and have been gradually pruning my use of proprietary technologies over the past months.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s quite surprising how much mental energy you save by not engaging with controversial content that algorithmic news feeds at Facebook and Twitter foist on you to keep your eyes glued to the screen (and, with luck, your replies keep other people&amp;rsquo;s eyes glued too) so they&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; can sell you ads!&lt;/p&gt;</description>
            <content type="html"><![CDATA[
    <img src="/img/cretan-labyrinth.svg"  alt="labyrinth"  class="center"  />


<p>I have been progressively getting more and more dissatisfied with the grip Big Tech firms have over our collective lives, and have been gradually pruning my use of proprietary technologies over the past months.</p>
<p>It&rsquo;s quite surprising how much mental energy you save by not engaging with controversial content that algorithmic news feeds at Facebook and Twitter foist on you to keep your eyes glued to the screen (and, with luck, your replies keep other people&rsquo;s eyes glued too) so they<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> can sell you ads!</p>
<p>Not writing posts and comments and tweets all the time - though I do toot on Mastodon - makes me realize that I do miss long-form writing, and that my muscle memory for doing so is a bit rusty after years of neglect. I certainly used to blog more often<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>!</p>
<p>I&rsquo;ve been planning to blog again for a while, but seeing #100DaysToOffload popping up here and there on my Mastodon feed certainly adds a structure to the exercise - being a part of a community, and having a deadline in mind. Let&rsquo;s see if I can make it to the end with others&rsquo; encouragement!</p>
<p>Some of the forthcoming posts will discuss specific tools and services I am abandoning, and what I am replacing them with; some others might discuss the wider issue with proprietary software and services not based on open protocols. There could be discussions about the other &ldquo;Big&quot;s in the economic and political systems too - e.g. the banking system, or the two-party system - though of course I do not claim expertise on all these, so treat these as experiential rather than prescriptive.</p>
<p>I&rsquo;ll be back in a few days with the next instalment.</p>
<p><em>This post is day 1 of my #100DaysToOffload challenge. Visit <a href="https://100daystooffload.com">https://100daystooffload.com</a> to get more info, or to get involved.</em></p>
<p><em><a href="https://commons.wikimedia.org/wiki/File:Cretan-labyrinth-circular-disc.svg">Cretan labyrinth</a> by <a href="https://commons.wikimedia.org/wiki/User:AnonMoos">AnonMoos</a>, released into the public domain</em></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>OK, by &ldquo;they&rdquo; I should say &ldquo;we&rdquo;, since I do work for Facebook. Needless to say, this is my personal opinion and does not express the views or opinions of my employer.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Though most of my posts were lost after several blog moves because I cannot really be bothered to convert them to Markdown. They&rsquo;re not that important, folks. You&rsquo;re not missing much!&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content>
        </item>
        
        <item>
            <title>Linux in the Time of COVID-19</title>
            <link>https://michel-slm.name/posts/2020-04-04-linux-in-the-time-of-covid19/</link>
            <pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2020-04-04-linux-in-the-time-of-covid19/</guid>
            <description>&lt;p&gt;Can&amp;rsquo;t believe I managed to spend more than a year without updating this blog! In
hindsight, perhaps sticking to open-source communication channels should have
been in my 2019 resolutions&amp;hellip;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been meaning to write a comprehensive status update, but perhaps starting
small and updating more often is the way to go. So here goes&amp;hellip;&lt;/p&gt;
&lt;h1 id=&#34;on-wfh-and-moving&#34;&gt;On WFH and moving&lt;/h1&gt;
&lt;p&gt;Thanks to the #COVID19 situation, everyone at Facebook has been working from
home for a few weeks now. It&amp;rsquo;s a blessing and a curse &amp;ndash; my wife and I were in
the process of relocating, so while not having to commute means I have more time
to pack, it also means &amp;ndash; I was working from a tiny apartment where everything
was in the process of being boxed up!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Can&rsquo;t believe I managed to spend more than a year without updating this blog! In
hindsight, perhaps sticking to open-source communication channels should have
been in my 2019 resolutions&hellip;</p>
<p>I&rsquo;ve been meaning to write a comprehensive status update, but perhaps starting
small and updating more often is the way to go. So here goes&hellip;</p>
<h1 id="on-wfh-and-moving">On WFH and moving</h1>
<p>Thanks to the #COVID19 situation, everyone at Facebook has been working from
home for a few weeks now. It&rsquo;s a blessing and a curse &ndash; my wife and I were in
the process of relocating, so while not having to commute means I have more time
to pack, it also means &ndash; I was working from a tiny apartment where everything
was in the process of being boxed up!</p>
<p>The move itself was, luckily, relatively uneventful. If you don&rsquo;t count finding
out the day before, just as we&rsquo;re about to check in, that the airline canceled
all flights on our departure date, and we had to scramble to rebook and fly out
on the same day. On the bright side, the airport was virtually deserted,
everyone was doing the physical distancing thing, and our household goods and
vehicle were both also delivered early. Even the cable guy showed up early to
set up our Internet access!</p>
<p>I still don&rsquo;t have my home office set up yet - another week for that - but my
blood pressure monitor has been much happier with me this week.</p>
<h1 id="on-fedora-centos-and-that-conference-talk">On Fedora, CentOS, and that conference talk</h1>
<p>My team had a presentation accepted for <a href="https://www.socallinuxexpo.org/scale/18x">SCaLE
18x</a> in early March, but unfortunately had to call
it off - we were already on site in Pasadena, but between our company&rsquo;s updated
travel guidance, and not wanting to be sick (or worse, infecting others) just
before an expensive house move, I figured caution is warranted. The talk was
going to be an update on our <a href="https://flock2019.sched.com/event/SDpP/facebook-loves-fedora-and-chef">Flock
2019</a>
talk (<a href="https://www.youtube.com/watch?v=pcMD_5EAB-A">video here</a>), so since the
material has already been approved for public use, here goes.</p>
<h2 id="the-upgrade-firehose-problem">The upgrade firehose problem</h2>
<p>Note: This is of increasing relevance as everyone is working from home, and problems
that can be easily fixed on site &ndash; worse come to worst, you can just reimage a
machine to a known good state &ndash; can leave an employee without access to the
tools they need to perform their job.</p>
<p>I&rsquo;ve quipped at work that &ldquo;move fast, break things&rdquo; (which to be fair we abandon
as a slogan years ago) should really be &ldquo;move slow, fix things&rdquo; - not my
phrasing, I&rsquo;m borrowing it from someone on Mastodon but will need to dig up my
old toots to see who I got it from.</p>
<p>Sadly some Linux components are just updated too fast and does not get enough
quality assurance. Not throwing anyone under the bus here; as long as hardware
manufacturers don&rsquo;t consider Linux as a primary platform, which is the case on
desktops and laptops, there&rsquo;ll never be enough eyes to catch regressions. But it
does seem to get worse recently &ndash; in short order we get hit by:</p>
<ul>
<li>trackpad issues, affecting some but not all new ThinkPad T490s (because of
course within the same SKU you might still get different components)</li>
<li>Intel video lock-ups in kernel 5.4</li>
<li>ThinkPads with Nvidia GPUs locking up if you connect an external monitor,
again on kernel 5.4</li>
<li>built-in microphone not recognized if you have an updated ALSA library but the
latest stable Pulseaudio</li>
<li>after a pre-release Pulseaudio got pushed to Fedora, it fixes that issue but
breaks Bluetooth audio for those on some hardware</li>
</ul>
<p>Ideally we either have at least one Fedora tester for each hardware type in our
fleet, but that&rsquo;s not going to be practical in the short term. So what to do
instead?</p>
<h2 id="move-slow">Move slow</h2>
<p>Rather than consuming the latest upstream kernel within roughly a month of it
coming out (when Fedora releases its build), why not use the CentOS kernel? It&rsquo;s
stable (only critical fixes are backported), and since CentOS 8 is relatively
new it happens to be the newest kernel officially supported by Nvidia anyway.</p>
<p>For Chef users, we open sourced
<a href="https://github.com/facebook/IT-CPE/tree/master/itchef/cookbooks/cpe_kernel_channel">cpe_kernel_channel</a>,
our cookbook for opting to use the CentOS kernel instead of the regular Fedora
kernel.</p>
<p>The next obvious step is to run CentOS itself rather than Fedora. Happily CentOS
8 runs well enough even on most recent ThinkPad laptops (let&rsquo;s forget about that
Yoga with a suspend issue). The one notable exception is Bluetooth audio
support - bouncing bluetooth and pulseaudio repeatedly to get A2DP working is
nobody&rsquo;s idea of fun. We might need to ship backported Fedora components to
address this (ironic, yes). If you see recent commits to our <a href="https://github.com/facebook/IT-CPE">IT-CPE
repo</a> adding CentOS support, that&rsquo;s why.</p>
<h2 id="fix-things">Fix things</h2>
<p>Apart from moving slower on updates to reduce the chance of regressions being
rolled out, the flip side of the coin is to be able to quickly revert from such
breakages.</p>
<p>Switching to Btrfs would help here - being able to snapshot before every Chef
run, and rolling back in case a bad change is deployed, would be a huge time
saver. There&rsquo;s some work to do in kickstarting a system with both LUKS and
Btrfs, but that&rsquo;s not an intractable problem; more interesting would be getting
Btrfs readded to CentOS.</p>
<h1 id="whats-next">What&rsquo;s next?</h1>
<p>One resolution I failed to keep is to learn a new programming language - being
stuck using Python and Ruby at work starts to feel constraining after a while,
and somehow Go never really appealed to me personally. Hoping to work on my Rust
personal project in the next few weeks!</p>
]]></content>
        </item>
        
        <item>
            <title>2019: New Year&#39;s Resolutions</title>
            <link>https://michel-slm.name/posts/2018-12-31-new-year-resolutions/</link>
            <pubDate>Mon, 31 Dec 2018 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2018-12-31-new-year-resolutions/</guid>
            <description>&lt;p&gt;It&amp;rsquo;s that time of the year again, and after a whirlwind 2018 - switching teams, a lot of work-related travel, and all those scandals in the news, it&amp;rsquo;s time to reflect on the year past and plan changes for the coming year ahead.&lt;/p&gt;
&lt;p&gt;With that in mind, here are some resolutions I&amp;rsquo;m aiming for in 2019:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;better work-life balance
&lt;ul&gt;
&lt;li&gt;attend a conference&lt;/li&gt;
&lt;li&gt;exercise more&lt;/li&gt;
&lt;li&gt;healthier social media usage&lt;/li&gt;
&lt;li&gt;more realistic reading challenge target&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;learn a new programming language&lt;/li&gt;
&lt;li&gt;actively support cooperatives&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy New Year everyone!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>It&rsquo;s that time of the year again, and after a whirlwind 2018 - switching teams, a lot of work-related travel, and all those scandals in the news, it&rsquo;s time to reflect on the year past and plan changes for the coming year ahead.</p>
<p>With that in mind, here are some resolutions I&rsquo;m aiming for in 2019:</p>
<ul>
<li>better work-life balance
<ul>
<li>attend a conference</li>
<li>exercise more</li>
<li>healthier social media usage</li>
<li>more realistic reading challenge target</li>
</ul>
</li>
<li>learn a new programming language</li>
<li>actively support cooperatives</li>
</ul>
<p>Happy New Year everyone!</p>
<h2 id="on-work-life-balance">On work-life balance</h2>
<h3 id="attending-a-conference">Attending a conference</h3>
<p>Having not gone to a single conference in 2018, it&rsquo;s time to step up my game. Hoping to be at at least one Linux / free software related conference and one SRE/DevOps type conference, hopefully participating in at least one of them</p>
<h3 id="exercise">Exercise</h3>
<p>Need to walk regularly! My Withings watch has been rather disappointed in 2018. I should probably use the gym more regularly too.</p>
<h3 id="social-media-welcoming-the-fediverse">Social media: welcoming the Fediverse</h3>
<p>Rather than putting all eggs in one social media basket, and wrestling with what the AI thought I want to read / who should be reading my posts, I&rsquo;ve been experimenting towards the end of 2018 with using more federated social media platforms. Facebook is still really useful for catching up with family and friends, and Twitter for following newsworthy items (I follow mostly journalists and organizations I support) but the fediverse is quite great for following non-mainstream topics:</p>
<ul>
<li><a href="https://joinmastodon.org/">Mastodon</a>, a federated Twitter-like service. While using an account on a single instance is possible (and just filtering by hashtags), I find that being on several instances help finding people with similar interests.
<ul>
<li><a href="https://mastodon.social/@michel_slm">mastodon.social</a> for free software / open source / privacy discussions. This is actually the main Mastodon node so the local timeline is like a spigot, so I just tend to read the toots of people I follow</li>
<li><a href="https://social.coop/@michel_slm">social.coop</a> for discussions on cooperatives and economics</li>
</ul>
</li>
<li><a href="https://pleroma.social/">Pleroma</a> - an optimized platform that&rsquo;s lighter on resources than Mastodon. Going to experiment running our own node for the Indonesian Web &amp; Technology Community.</li>
<li><a href="https://pixelfed.social/michel-slm">PixelFed</a> for image sharing</li>
<li><a href="https://social.isurf.ca/profile/michel_slm">Friendica</a> for longer posts and for talking to people using both the OStatus/ActivityPub protocol (Mastodon et al) and Diaspora. Quite good for following all the Google+ refugees and talking politics, art and health.</li>
</ul>
<h3 id="reading-challenge">Reading challenge</h3>
<p>For Goodreads&rsquo; <a href="https://www.goodreads.com/challenges/7501-2018-reading-challenge">2018 Reading Challenge</a> I set a rather ambitious target of reading 42 books. While I did go 8 over in the end (though some of them are short stories, so I&rsquo;m probably closer to just making it) it felt that sometimes I&rsquo;m reading just to make a target rather than for enjoyment. <a href="https://www.goodreads.com/challenges/8863">For 2019</a> I&rsquo;m setting a more relaxed goal of 25.</p>
<h2 id="programming-language">Programming Language</h2>
<p>It&rsquo;s been a while since I pick up a brand new language, and given that at work I get to deal mostly with Python and Chef-style Ruby, it&rsquo;s time to finally pick up a personal project or two and do it in a new language.</p>
<p>Haven&rsquo;t decided which of these to use; I&rsquo;ll probably end up using a combinationof:</p>
<ul>
<li><a href="https://www.erlang.org/">Erlang</a>/<a href="https://elixir-lang.org/">Elixir</a></li>
<li><a href="http://kotlinlang.org/">Kotlin</a></li>
<li><a href="https://www.rust-lang.org/">Rust</a></li>
</ul>
<h2 id="cooperatives-and-free-software">Cooperatives and Free Software</h2>
<p>It&rsquo;s quite sobering to realize the outsized influence a few large companies (both in the technology and finance sectors) have on our everyday lives &ndash; and it&rsquo;s time to put my money in organizations I feel passionate about &ndash; whether credit unions or organizations such as the <a href="https://sfconservancy.org/">Software Freedom Conservancy</a>. Too bad there&rsquo;s not a co-op grocery nearby, I miss <a href="https://www.bloomingfoods.coop/">Bloomingfoods</a>&hellip;</p>
<figure><a href="https://sfconservancy.org/supporter/"><img src="https://sfconservancy.org/img/supporter-badge.png"
			alt="Become a Conservancy Supporter!" width="194" height="90"></a>
</figure>

]]></content>
        </item>
        
        <item>
            <title>Hello GitLab Pages!</title>
            <link>https://michel-slm.name/posts/2018-03-05-hello-gitlab-pages/</link>
            <pubDate>Mon, 05 Mar 2018 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2018-03-05-hello-gitlab-pages/</guid>
            <description>&lt;p&gt;With the &lt;a href=&#34;https://blog.chromium.org/2018/02/a-secure-web-is-here-to-stay.html&#34;&gt;recent Google announcement&lt;/a&gt;
that Chrome 68 will mark all HTTP sites as insecure, it&amp;rsquo;s time to say farewell
to &lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub Pages&lt;/a&gt;, which I
&lt;a href=&#34;https://michel-slm.name/posts/2015-08-01-hello-cryogen/&#34;&gt;switched to&lt;/a&gt; more than two years ago, and
move to &lt;a href=&#34;https://about.gitlab.com/features/pages/&#34;&gt;GitLab Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Main reason being, despite
&lt;a href=&#34;https://github.com/isaacs/github/issues/156&#34;&gt;multiple requests&lt;/a&gt;, GitHub still
does not support HTTPS on custom domains, without using another service like
Cloudflare (which is a bit overkill for a static site!).&lt;/p&gt;
&lt;p&gt;There are several additional advantages to the move:&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>With the <a href="https://blog.chromium.org/2018/02/a-secure-web-is-here-to-stay.html">recent Google announcement</a>
that Chrome 68 will mark all HTTP sites as insecure, it&rsquo;s time to say farewell
to <a href="https://pages.github.com/">GitHub Pages</a>, which I
<a href="/posts/2015-08-01-hello-cryogen/">switched to</a> more than two years ago, and
move to <a href="https://about.gitlab.com/features/pages/">GitLab Pages</a>.</p>
<p>Main reason being, despite
<a href="https://github.com/isaacs/github/issues/156">multiple requests</a>, GitHub still
does not support HTTPS on custom domains, without using another service like
Cloudflare (which is a bit overkill for a static site!).</p>
<p>There are several additional advantages to the move:</p>
<ul>
<li>Making use of GitLab&rsquo;s CI/CD system, so I can update my blog without having
Cryogen installed locally</li>
<li>Certificate renewal can be <a href="https://github.com/rolodato/gitlab-letsencrypt">scripted</a></li>
<li>if there&rsquo;s some private data used to generate your blog, GitLab provides
private repositories for free</li>
</ul>
<p>Since there does not seem to be a tutorial for setting up a Cryogen static site
on GitLab Pages, here&rsquo;s the <code>.gitlab-ci.yml</code> file I&rsquo;m using. Will contribute such a tutorial to Cryogen when I have time (it already took me two weeks to write this announcement; work&rsquo;s getting in the way!)</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#f92672">image</span>: <span style="color:#ae81ff">clojure:lein-2.8.1</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">pages</span>:
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">script</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">lein run</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">artifacts</span>:
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">paths</span>:
</span></span><span style="display:flex;"><span>    - <span style="color:#ae81ff">public</span>
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">only</span>:
</span></span><span style="display:flex;"><span>  - <span style="color:#ae81ff">master</span>
</span></span></code></pre></div>]]></content>
        </item>
        
        <item>
            <title>Property-based Testing in Python with Hypothesis @ GeekCamp.ID</title>
            <link>https://michel-slm.name/posts/2015-10-25-hypothesis-at-geekcamp/</link>
            <pubDate>Sun, 25 Oct 2015 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2015-10-25-hypothesis-at-geekcamp/</guid>
            <description>&lt;p&gt;Several months ago I discovered David R. MacIver&amp;rsquo;s impressive
property-based testing library for Python,
&lt;a href=&#34;https://hypothesis.readthedocs.org/&#34;&gt;Hypothesis&lt;/a&gt;. Having been a big
fan of Haskell&amp;rsquo;s QuickCheck &amp;ndash; but not having much opportunity to use
Haskell in daily life &amp;ndash; this is hugely exciting. A mature
property-testing tool, targeting a popular dynamic language &amp;hellip; soon
afterwards I
&lt;a href=&#34;https://apps.fedoraproject.org/packages/python-hypothesis/overview/&#34;&gt;packaged this library for Fedora&lt;/a&gt;
&amp;ndash; fellow Fedora users can install it with a simple&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dnf install python-hypothesis
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;or, to specify the Python interpreter explicitly,&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>Several months ago I discovered David R. MacIver&rsquo;s impressive
property-based testing library for Python,
<a href="https://hypothesis.readthedocs.org/">Hypothesis</a>. Having been a big
fan of Haskell&rsquo;s QuickCheck &ndash; but not having much opportunity to use
Haskell in daily life &ndash; this is hugely exciting. A mature
property-testing tool, targeting a popular dynamic language &hellip; soon
afterwards I
<a href="https://apps.fedoraproject.org/packages/python-hypothesis/overview/">packaged this library for Fedora</a>
&ndash; fellow Fedora users can install it with a simple</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>dnf install python-hypothesis
</span></span></code></pre></div><p>or, to specify the Python interpreter explicitly,</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>dnf install python2-hypothesis
</span></span><span style="display:flex;"><span>dnf install python3-hypothesis
</span></span></code></pre></div><p>The next step is obviously to evangelize this tool&rsquo;s adoption. After
trialing (&ldquo;alpha testing&rdquo;) the subject at a work study session, and
beta testing it at a recent Python meetup (thanks guys!), the final
version of the presentation debuted at
<a href="http://geekcamp.id">GeekCamp.ID</a> on October 24th.</p>
<p>Currently the
<a href="https://speakerdeck.com/michelslm/property-based-testing-in-python-with-hypothesis">slides</a>
and
<a href="https://github.com/michel-slm/talk--property-based-testing--hypothesis">examples</a>
used in the talk are available; will post the link to the video
recording here when it becomes available.</p>
<p>Do check them out if you are interested, and feel free to hit me with
any question on
<a href="https://plus.google.com/&#43;MichelAlexandreSalim">Google+</a> or
<a href="https://twitter.com/michel_slm">Twitter</a>!</p>
]]></content>
        </item>
        
        <item>
            <title>Assign Phabricator reviewers based on module ownership</title>
            <link>https://michel-slm.name/posts/2015-08-12-phabricator-utils/</link>
            <pubDate>Wed, 12 Aug 2015 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2015-08-12-phabricator-utils/</guid>
            <description>&lt;p&gt;At &lt;a href=&#34;https://www.traveloka.com/&#34;&gt;Traveloka&lt;/a&gt;, Indonesia&amp;rsquo;s leading travel
booking site, we use &lt;a href=&#34;http://phabricator.org/&#34;&gt;Phabricator&lt;/a&gt; for code
reviews - and as a growing company it might not be straightforward to
figure out who is knowledgeable about a particular part of the code
base and thus would be a good reviewer.&lt;/p&gt;
&lt;p&gt;Inspired by Quora&amp;rsquo;s
&lt;a href=&#34;https://engineering.quora.com/Moving-Fast-With-High-Code-Quality&#34;&gt;Moving Fast With High Code Quality&lt;/a&gt;
post, we are thus implementing a review routing system - the code is
live on GitHub at
&lt;a href=&#34;https://github.com/traveloka/phabricator-utils&#34;&gt;phabricator-utils&lt;/a&gt;. It&amp;rsquo;s
written in Python (hey, we&amp;rsquo;re a Java/JS/Python shop), though we do
plan to contribute closer to the Phabricator codebase itself and that
will be in PHP.&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>At <a href="https://www.traveloka.com/">Traveloka</a>, Indonesia&rsquo;s leading travel
booking site, we use <a href="http://phabricator.org/">Phabricator</a> for code
reviews - and as a growing company it might not be straightforward to
figure out who is knowledgeable about a particular part of the code
base and thus would be a good reviewer.</p>
<p>Inspired by Quora&rsquo;s
<a href="https://engineering.quora.com/Moving-Fast-With-High-Code-Quality">Moving Fast With High Code Quality</a>
post, we are thus implementing a review routing system - the code is
live on GitHub at
<a href="https://github.com/traveloka/phabricator-utils">phabricator-utils</a>. It&rsquo;s
written in Python (hey, we&rsquo;re a Java/JS/Python shop), though we do
plan to contribute closer to the Phabricator codebase itself and that
will be in PHP.</p>
<p>Code is licensed under the Mozilla Public License version 2 - if you
find it useful, contribution is welcome!</p>
]]></content>
        </item>
        
        <item>
            <title>Hello Cryogen</title>
            <link>https://michel-slm.name/posts/2015-08-01-hello-cryogen/</link>
            <pubDate>Sat, 01 Aug 2015 00:00:00 +0000</pubDate>
            
            <guid>https://michel-slm.name/posts/2015-08-01-hello-cryogen/</guid>
            <description>&lt;p&gt;I&amp;rsquo;ve been meaning to switch to a statically-generated blog for a
while, and specifically to &lt;a href=&#34;http://cryogenweb.org/&#34;&gt;Cryogen&lt;/a&gt; hosted on
&lt;a href=&#34;https://pages.github.com/&#34;&gt;GitHub Pages&lt;/a&gt;, for a combination of
several reason:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I am already writing my posts in Markdown for
&lt;a href=&#34;https://ghost.org&#34;&gt;Ghost&lt;/a&gt;, and prior to that,
&lt;a href=&#34;http://scriptogr.am/&#34;&gt;Scriptogr.am&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Overhead of maintaining a Ghost blog is hosted on
&lt;a href=&#34;https://www.openshift.com/products/online&#34;&gt;OpenShift Online&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I prefer Clojure to JavaScript&lt;/li&gt;
&lt;li&gt;Cryogen developer &lt;a href=&#34;https://github.com/lacarmen&#34;&gt;lacarmen&lt;/a&gt; is
amazingly responsive. This
&lt;a href=&#34;https://github.com/cryogen-project/cryogen/issues/44&#34;&gt;request for tag-specific RSS feeds&lt;/a&gt;
is done within a day. Ghost dragged its feet on this.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Will set up Disqus integration later &amp;ndash; and need to work on a
better-looking site theme too, but that can wait. For now, hello!&lt;/p&gt;</description>
            <content type="html"><![CDATA[<p>I&rsquo;ve been meaning to switch to a statically-generated blog for a
while, and specifically to <a href="http://cryogenweb.org/">Cryogen</a> hosted on
<a href="https://pages.github.com/">GitHub Pages</a>, for a combination of
several reason:</p>
<ul>
<li>I am already writing my posts in Markdown for
<a href="https://ghost.org">Ghost</a>, and prior to that,
<a href="http://scriptogr.am/">Scriptogr.am</a></li>
<li>Overhead of maintaining a Ghost blog is hosted on
<a href="https://www.openshift.com/products/online">OpenShift Online</a></li>
<li>I prefer Clojure to JavaScript</li>
<li>Cryogen developer <a href="https://github.com/lacarmen">lacarmen</a> is
amazingly responsive. This
<a href="https://github.com/cryogen-project/cryogen/issues/44">request for tag-specific RSS feeds</a>
is done within a day. Ghost dragged its feet on this.</li>
</ul>
<p>Will set up Disqus integration later &ndash; and need to work on a
better-looking site theme too, but that can wait. For now, hello!</p>
]]></content>
        </item>
        
    </channel>
</rss>
