<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Deb.News</title>
	<link>https://deb.news</link>
	<language>en</language>
	<description>Deb.News - https://deb.news</description>


<item>
	<title>Matthias Klumpp: Hello old new “Projects” directory!</title>
	<guid>https://blog.tenstral.net/?p=2053</guid>
	<link>https://blog.tenstral.net/2026/04/hello-projects-directory.html</link>
     <description>  &lt;p&gt;If you have recently installed a very up-to-date Linux distribution with a desktop environment, or upgraded your system on a rolling-release distribution, you might have noticed that your home directory has a new folder: “Projects”&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;Why?&lt;/h2&gt;



&lt;p&gt;With the recent 0.20 release of &lt;a href=&quot;https://www.freedesktop.org/wiki/Software/xdg-user-dirs/&quot;&gt;xdg-user-dirs&lt;/a&gt; we enabled the “Projects” directory by default. Support for this has already existed since 2007, but was never formally enabled. This closes a &lt;a href=&quot;https://gitlab.freedesktop.org/xdg/xdg-user-dirs/-/work_items/3&quot;&gt;more than 11 year old bug report&lt;/a&gt; that asked for this feature.&lt;/p&gt;



&lt;p&gt;The purpose of the &lt;em&gt;Projects&lt;/em&gt; directory is to give applications a default location to place project files that do not cleanly belong into one of the existing categories (Documents, Music, Pictures, Videos). Examples of this are software engineering projects, scientific projects, 3D printing projects, CAD design or even things like video editing projects, where project files would end up in the “Projects” directory, with output video being more at home in “Videos”.&lt;/p&gt;



&lt;p&gt;By enabling this by default, and subsequently in the coming months adding support to GLib, Flatpak, desktops and applications that want to make use of it, we hope to give applications that do operate in a “project-centric” manner with mixed media a better default storage location. As of now, those tools either default to the home directory, or will clutter the “Documents” folder, both of which is not ideal. It also gives users a default organization structure, hopefully leading to less clutter overall and better storage layouts.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;This sucks, I don’t like it!&lt;/h2&gt;



&lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.tenstral.net/wp-content/uploads/2026/04/woman-pointing-at-projects-folder.avif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-2055&quot; height=&quot;273&quot; src=&quot;https://blog.tenstral.net/wp-content/uploads/2026/04/woman-pointing-at-projects-folder.avif&quot; width=&quot;548&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;As usual, you are in control and can modify your system’s behavior. If you do not like the “Projects” folder, &lt;strong&gt;simply delete it!&lt;/strong&gt; The &lt;em&gt;xdg-user-dirs&lt;/em&gt; utility will not try to create it again, and instead adjust the default location for this directory to your home directory. If you want more control, you can influence exactly what goes where by editing your &lt;code&gt;~/.config/user-dirs.dirs&lt;/code&gt; configuration file.&lt;/p&gt;



&lt;p&gt;If you are a system administrator or distribution vendor and want to set default locations for the default XDG directories, you can edit the &lt;code&gt;/etc/xdg/user-dirs.defaults&lt;/code&gt; file to set global defaults that affect all users on the system (users can still adjust the settings however they like though).&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;What else is new?&lt;/h2&gt;



&lt;p&gt;Besides this change, the 0.20 release of &lt;code&gt;xdg-user-dirs&lt;/code&gt; brings full support for the Meson build system (dropping Automake), translation updates, and some robustness improvements to its code. We also fixed the “arbitrary code execution from unsanitized input” bug that the Arch Linux Wiki mentions &lt;a href=&quot;https://wiki.archlinux.org/title/XDG_user_directories#Querying_configured_directories&quot;&gt;here&lt;/a&gt; for the &lt;code&gt;xdg-user-dirs&lt;/code&gt; utility, by replacing the shell script with a C binary.&lt;/p&gt;



&lt;p&gt;Thanks to everyone who contributed to this release!&lt;/p&gt; </description> 
	<pubDate>Sat, 18 Apr 2026 08:06:00 +0000</pubDate>

</item> 
<item>
	<title>Russell Coker: Home Battery</title>
	<guid>https://etbe.coker.com.au/?p=5991</guid>
	<link>https://etbe.coker.com.au/2026/04/17/home-battery/</link>
     <description>  &lt;h2&gt;Prices&lt;/h2&gt;
&lt;p&gt;On the 19th of March I got a home battery system installed. The government has a rebate scheme so it had a list price of about $22k for a 40kWh setup and cost me about $12k. It seems that 40KWh is the minimum usable size for the amount of electricity I use, I have 84 cores running BOINC when they have nothing better to do which is 585W of TDP according to Intel. While the CPUs are certainly using less than the maximum TDP (both due to design safety limits and the fact that I have disabled hyper-threading on all systems due to it providing minimal benefits and potential security issues) given some power usage by cooling fans and some inefficiency in PSUs I think that assuming that 585W is accounted for 24*7 by CPUs is reasonable. So my home draws between 800W and 1KW when no-one is home and with an electric car and all electric cooking a reasonable amount of electricity can be used.&lt;/p&gt;
&lt;p&gt;My bills prior to the battery installation were around $200/month which was based on charging my car only during sunny times as my electricity provider (Amber Electric) has variable rates based on wholesale prices. Also the feed in rates if my solar panels produce too much electricity in sunny times often go negative so if I don’t use enough electricity. I haven’t had the electric car long enough to find out what the bills might be in winter without a home battery.&lt;/p&gt;
&lt;p&gt;Before getting the battery my daily bills according to the Amber app were usually between $5 and $10. After getting it the daily bills have almost always been below $5. The only day where it’s been over $5 since the battery installation was when electricity was cheap and I fully charged the home battery and my car which used 50KWh in one day and cost $7.87 which is 16 cents per KWh. 16 cents isn’t the cheapest price (sometimes it gets as low as 10 cents) but is fairly cheap, sometimes even in the cheap parts of the day it doesn’t get that low (the cheapest price on the day I started writing this was 20 cents).&lt;/p&gt;
&lt;p&gt;So it looks like this may save me $100 per month, if so there will be a 10% annual return on investment on the $12K I spent. This makes it a good investment, better than repaying a mortgage (which is generally under 6%) and almost as good as the long term results of index tracker funds. However if it cost $22K (the full price without subsidy) then it would still be ok but wouldn’t be a great investment. The government subsidised batteries because the huge amount of power generated by rooftop solar systems was greater than the grid could use during the day in summer and batteries are needed to use that power when it’s dark.&lt;/p&gt;
&lt;h2&gt;Android App&lt;/h2&gt;
&lt;p&gt;The battery system is from Fox ESS and the FoxCloud 2.0 Android app is a bit lacking in functionality. It has a timer for mode setting with options “Self-use” (not clearly explained), “Feed-in Priority” (not explained but testing shows feeding everything in to the grid), “Back Up”, “Forced Charge”, and “Forced Discharge”. Currently I have “Forced Charge” setup for  most sunny 5 hours of the day for a maximum charge power of 5KW. I did that because about 25KW/day is what I need to cover everything and while the system can do almost 10KW that would charge the battery fully in a few hours and then electricity would be exported to the grid which would at best pay me almost nothing and at worst bill me for supplying electricity when they don’t want it. There doesn’t seem to be a “never put locally generated power into the grid unless the battery is full” option. The force charge mode allows stopping at a certain percentage, but when that is reached there is no fallback to another option. It would be nice if the people who designed the configuration could take as a baseline assumption that the macro programming in office suites and functions in spreadsheets are things that regular people are capable of using when designing the configuration options. I don’t think we need a Turing complete programming language in the app to control batteries (although I would use it if there was one), but I think we need clauses like “if battery is X% full then end this section”.&lt;/p&gt;
&lt;p&gt;There is no option to say “force charge until 100%” or “force charge for the next X minutes” as a one-off thing. If I came home in the afternoon with my car below 50% battery and a plan to do a lot of driving the next day then I’d want to force charge it immediately to allow charging the car overnight. But I can’t do that without entering a “schedule”. For Unix people imagine having to do everything via a cron job and no option to run something directly from the command-line.&lt;/p&gt;
&lt;p&gt;It’s a little annoying that they appear to have spent more development time on animations for the app than some of what should be core functionality.&lt;/p&gt;
&lt;h2&gt;Management&lt;/h2&gt;
&lt;p&gt;Amber has an option to allow my battery to be managed by them based on wholesale pries but I haven’t done that as the feed-in prices are very low. So I just charge my battery when electricity is cheap and use it for the rest of the day. There is usually a factor of 2 or more price difference between the middle of the day and night time so that saves money. It also means I don’t have to go out of my way to try and charge my car in the middle of the day. There is some energy lost in charging and discharging the batteries but it’s not a lot. I configured the system to force charge for the 5 sunniest hours every day for 5KW as that’s enough to keep it charged overnight and 5KW is greater than the amount of solar electricity produced on my house since I’ve been monitoring it so that forces it to all be used for the battery. In summer I might have to change that to 6KW for the sunniest 2 or 3 hours and then 4KW or 5KW surrounding that which will be a pain to manage.&lt;/p&gt;
&lt;p&gt;Instead of charging the car every day during sunny times I charge it once or twice a week, I have a 3.3KW charger and the car has a 40KWh battery so usually it takes me less than 10 hours to fully charge it and I get at least 5 hours of good sunlight in the process.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://foxesscommunity.com/viewtopic.php?t=2397&quot;&gt;There are people hacking on these devices which is interesting to get direct control from computers [1]&lt;/a&gt;, and apparently not banned from the official community for doing so. I’m not enthusiastic enough to do this, I’ve got plenty of other free software things to work on. But it’s good that others are doing so.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://foxesscommunity.com/viewtopic.php?t=2397&quot;&gt; https://foxesscommunity.com/viewtopic.php?t=2397&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2014/02/24/car-charging-melbourne/&quot; rel=&quot;bookmark&quot; title=&quot;Electric Car Charging in Melbourne&quot;&gt;Electric Car Charging in Melbourne&lt;/a&gt; &lt;small&gt;This morning I noticed some parking bays reserved for car...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2007/06/18/backup-for-wind-power/&quot; rel=&quot;bookmark&quot; title=&quot;Backup for Wind Power&quot;&gt;Backup for Wind Power&lt;/a&gt; &lt;small&gt;A question that people often ask about wind power (and...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2007/03/22/power-saving/&quot; rel=&quot;bookmark&quot; title=&quot;power saving&quot;&gt;power saving&lt;/a&gt; &lt;small&gt;Adrian von Bidder made an interesting post in response to...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Fri, 17 Apr 2026 12:58:23 +0000</pubDate>

</item> 
<item>
	<title>Daniel Pocock: ActBlue former IT boss disappearance: Decklin Foster &amp; Debian, Harvard suicide lab, Chris Gleason is wife, whistleblower or both?</title>
	<guid>https://danielpocock.com/en/actblue-disappearance-decklin-foster-debian-former-it-chief-chris-gleason-wife</guid>
	<link>https://danielpocock.com/en/actblue-disappearance-decklin-foster-debian-former-it-chief-chris-gleason-wife/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/pocock.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&lt;/a&gt; is the online fundraising platform used by
&lt;a href=&quot;https://danielpocock.com/en/category/us-democrat/&quot;&gt;
US Democratic&lt;/a&gt; party candidates.  It is the subject of a major scandal
that has gripped the congress.  It has been linked to
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt;, another disappearing developer and in a parody of other
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; scandals, there are possibly two people using the same name,
one being the wife of the missing developer and the other being a
US Senate candidate who claims to have exposed the
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue scandal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These Github screenshots confirm that
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was affiliated with
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&lt;/a&gt; and vanished in 2018:&lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Github, disappearance, director of Information Technology&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/decklin-github-profile-1.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Github, disappearance, director of Information Technology&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/decklin-github-profile-2.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Accusations have been made about the concealment
of illegal foreign donations and deception of Congress.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Chris Gleason&lt;/a&gt; has nominated to represent Florida in the US Senate.
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Gleason&lt;/a&gt; registered using a post office box and created a domain name,
&lt;em&gt;voteforgleason.com&lt;/em&gt; using an anonymous service in
&lt;a href=&quot;https://danielpocock.com/en/category/iceland/&quot;&gt;
Iceland&lt;/a&gt;.  &lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Gleason&#39;s&lt;/a&gt; profile on
&lt;a href=&quot;https://danielpocock.com/en/category/twitter-x/&quot;&gt;
X/Twitter&lt;/a&gt; has no photo while their
&lt;a href=&quot;https://danielpocock.com/en/category/facebook/&quot;&gt;
Facebook&lt;/a&gt; profile is completely disabled.&lt;/p&gt;

&lt;img alt=&quot;Chris Gleason, Florida, Twitter, X, Senate, Republican&quot; src=&quot;https://danielpocock.com/assets/people/chris-gleason-republican/twitter-x-voteforgleason.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Chris Gleason, Florida, Facebook, Senate, Republican&quot; src=&quot;https://danielpocock.com/assets/people/chris-gleason-republican/facebook-voteforgleason.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;A similar web site has been created at
&lt;a href=&quot;https://chris4florida.com/&quot;&gt;
&lt;em&gt;https://chris4florida.com/&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The phone number on
&lt;em&gt;voteforgleason.com&lt;/em&gt; and
&lt;em&gt;chris4florida.com&lt;/em&gt; goes to a pharmacy rather than a campaign
office.&lt;/p&gt;

&lt;p&gt;Nonetheless, I was able to verify
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Christopher Gleason&lt;/a&gt; submitted a nomination that is registered with
the state officials.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Gleason&#39;s&lt;/a&gt; web site tells us:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
Chris Gleason built the forensic tools that exposed &lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;ActBlue&#39;s&lt;/a&gt; billion-dollar money laundering operation. &lt;b&gt;His&lt;/b&gt; evidence ...
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Therefore, the candidate
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Gleason&lt;/a&gt; is not a pharmacist.&lt;/p&gt;

&lt;p&gt;So far, &lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;Chris&lt;/a&gt; appears to be male, intermittently using the name &lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;Christopher&lt;/a&gt; and the
masculin pronouns like &lt;em&gt;His&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;At the height of the
&lt;a href=&quot;https://danielpocock.com/en/category/debian-suicide-cluster/&quot;&gt;
Debian suicide cluster&lt;/a&gt;,
shortly before
&lt;a href=&quot;https://danielpocock.com/en/people/adrian-von-bidder-cmot/&quot;&gt;
Adrian von Bidder-Senn&lt;/a&gt; died on our wedding day
(&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
detailed report&lt;/a&gt;), another Debian Developer,
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; put all his packages up for adoption.&lt;/p&gt;

&lt;p&gt;Up to 2016, we can see that
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was listed in the public filings of ActBlue Civics, Inc
as either a senior engineer or at one point, as
&lt;em&gt;Director of Information Technology&lt;/em&gt;.&lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Director of Information Technology, disappearance&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/2014_ActBlue_Civics_Inc-p1.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Director of Information Technology, disappearance&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/2014_ActBlue_Civics_Inc-p6.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&#39;s&lt;/a&gt; activity on
&lt;a href=&quot;https://github.com/decklin?tab=overview&amp;amp;from=2018-04-01&amp;amp;to=2018-04-30&quot;&gt;
their Github profile&lt;/a&gt; stops abruptly in May 2018.&lt;/p&gt;

&lt;p&gt;ProPublic shows
&lt;a href=&quot;https://projects.propublica.org/527-explorer/expenditures/10453074&quot;&gt;
the last salary payment to Decklin Foster&#39;s bank account&lt;/a&gt; was in
July 2018.&lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Director of Information Technology, disappearance, salary&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/2018-propublica-actblue-decklin-foster-salary.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; disappeared at almost the exact same time as
&lt;a href=&quot;https://danielpocock.com/en/people/arjen-kamphuis/&quot;&gt;
Arjen Kamphuis&lt;/a&gt;, author of the book on Information Security for
Investigative Journalists.
&lt;a href=&quot;https://danielpocock.com/en/arjen-kamphuis-last-years-disappearance-sixth-anniversary-press-freedom/&quot;&gt;
I was one of the last people to see Arjen before he vanished&lt;/a&gt;.
Remarkably, Arjen had even
&lt;a href=&quot;https://danielpocock.com/en/arjen-kamphuis-asked-me-for-protection-from-debian-before-disappearance/&quot;&gt;
asked me for protection&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On 1 January 2015,
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&#39;s&lt;/a&gt; PGP key was removed because it was only 1024 bits.
Most developers had created stronger keys before this mass removal of
insecure keys took place.&lt;/p&gt;

&lt;p&gt;In 2019, the
&lt;a href=&quot;https://danielpocock.com/en/category/debian-account-managers/&quot;&gt;
Debian Account Managers&lt;/a&gt; asked the keyring managers to completely remove
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; from the Debian keyring.  There was no
&lt;em&gt;Statement on Decklin Foster&lt;/em&gt; so far.&lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue, Director of Information Technology, disappearance, Debian keyring&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/2019-10-09-nm-remove-decklin.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Clicking the links to see the statements about the removal does not
work.  An error message tells us the messages about
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&#39;s&lt;/a&gt; removal from
&lt;a href=&quot;https://danielpocock.com/en/category/debianism&quot;&gt;
debianism&lt;/a&gt; are all &lt;b&gt;private&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Foster&#39;s&lt;/a&gt; web site address is
&lt;a href=&quot;https://www.red-bean.com/decklin&quot;&gt;
https://www.red-bean.com/decklin&lt;/a&gt; and it is currently reporting
&quot;The requested URL was not found on this server.&quot;.  Thanks to the
Wayback Machine we can
&lt;a href=&quot;https://web.archive.org/web/20191011044301/http://www.red-bean.com/decklin/&quot;&gt;
find a snapshot from 2019&lt;/a&gt; which reveals an inconvenient truth:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
&lt;p&gt;If you’re interested in me, I have started &lt;a href=&quot;https://web.archive.org/web/20191011044301/https://plus.google.com/102017415603948066436&quot;&gt;using Google
Plus&lt;/a&gt;. If you’re interested in my work, I’m &lt;a href=&quot;https://web.archive.org/web/20191011044301/https://github.com/decklin/&quot;&gt;on Github&lt;/a&gt;. I was a &lt;a href=&quot;https://web.archive.org/web/20191011044301/http://www.debian.org/&quot;&gt;Debian&lt;/a&gt; developer for some time, but
I’ve mostly given that up. I currently work for &lt;a href=&quot;https://web.archive.org/web/20191011044301/http://secure.actblue.com/&quot;&gt;ActBlue&lt;/a&gt; and live in Cambridge, MA with
&lt;b&gt;&lt;a href=&quot;https://web.archive.org/web/20191011044301/http://cgleason.org/&quot;&gt;my wife&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Clicking on &quot;my wife&quot;, we find the web site of &lt;em&gt;Chris Gleason&lt;/em&gt; at
&lt;a href=&quot;http://cgleason.org/&quot;&gt;
http://cgleason.org/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Reading
&lt;a href=&quot;https://cgleason.org/about-me&quot;&gt;
Gleason&#39;s about page&lt;/a&gt;, we find the pronoun &quot;they&quot;:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
chris gleason is a graphic designer, zine creator, and print maker in chicago, illinois. &lt;b&gt;they&lt;/b&gt; love ...
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Therefore, the Debian Developer
(&lt;a href=&quot;https://danielpocock.com/en/what-is-a-debian-developer/&quot;&gt;
What is a Debian Developer?&lt;/a&gt;) who was Director of Information Technology
for
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&lt;/a&gt; was married to a female or transgender
&lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt;.  Is this the same person as the elusive male
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Chris Gleason&lt;/a&gt; who is now running for the US Senate in Florida on
claims about corruption at
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&lt;/a&gt;?  Or is it simply a bizarre coincidence that two people so
closely connected with this scandal share the same name?&lt;/p&gt;

&lt;p&gt;Remember the
&lt;a href=&quot;https://juristgate.com/en/swiss-pimp-usurping-reputation-of-legendary-tissot-boss-francois-thiebaud-from-france-baselworld-swatch-group/&quot;&gt;
case of Francois Thiébaud, the pimp who usurped the reputation of the
legendary boss of Tissot SA&lt;/a&gt;?  They both have
&lt;a href=&quot;https://juristgate.com/en/swiss-pimp-usurping-reputation-of-legendary-tissot-boss-francois-thiebaud-from-france-baselworld-swatch-group/&quot;&gt;
the same name too&lt;/a&gt; but they are different people.&lt;/p&gt;

&lt;img alt=&quot;Francois Thiebaud, Tissot, NBA&quot; src=&quot;https://danielpocock.com/assets/people/francois-thiebaud-tissot/francois-thiebaud-nba-1.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Francois Thiebaud, Tissot, NBA&quot; src=&quot;https://danielpocock.com/assets/people/francois-thiebaud-tissot/francois-thiebaud-nba-2.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In 2017, the &lt;em&gt;Trans Women Writers Collective&lt;/em&gt; published the book
&lt;a href=&quot;https://transreads.org/wp-content/uploads/2024/12/2024-12-20_67651f7ae94ee_NamelessWoman.pdf&quot;&gt;
&lt;em&gt;Nameless Woman&lt;/em&gt;&lt;/a&gt;, written by trans women of colour.  In the credits,
the trans women thank
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
This anthology was made possible by the
generous support of hundreds of people. In
particular, we would like to thank Annaya Youkai, Kieran Todd, Sadie Laett-Babcock, Adelaida
Shelley, Jaime Peschiera, Kai Cheng Thom, Talon
Wilde, David Cope, Alex Meginnis, &lt;b&gt;Decklin Foster&lt;/b&gt;,
and Eli Nelson for their help.
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Here are photos from the respective online profiles of
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; and
&lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Decklin Foster&lt;/h3&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/decklin-foster-yt.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Decklin Foster, ActBlue&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/decklin-github.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;Chris Gleason&lt;/h3&gt;

&lt;img alt=&quot;Chris Gleason, ActBlue&quot; src=&quot;https://danielpocock.com/assets/people/christina-gleason-foster/chris-gleason-about.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;img alt=&quot;Chris Gleason, Florida, Senate, Republican, ActBlue, whistleblower&quot; src=&quot;https://danielpocock.com/assets/people/chris-gleason-republican/cgleason.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;They don&#39;t look too similar but who knows.  Anything is possible in
America today.&lt;/p&gt;

&lt;p&gt;In 2017,
&lt;a href=&quot;https://static1.squarespace.com/static/59b7fa9f0abd04a338381080/t/63c726cce4a92a3547db857f/1673995990383/76_Facts_digital.pdf&quot;&gt;
Bitch Magazine&lt;/a&gt; included
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; in a list of donors.&lt;/p&gt;

&lt;p&gt;In 1999, at the time
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was recruited by
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt;, they had a home page at
&lt;a href=&quot;https://web.archive.org/web/19991004011331/http://members.home.com/decklin/&quot;&gt;&lt;em&gt;
http://members.home.com/decklin/&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Shortly after, the page moved to
&lt;a href=&quot;https://web.archive.org/web/20010104203100/http://www.red-bean.com/~decklin/&quot;&gt;&lt;em&gt;
http://www.red-bean.com/~decklin/&lt;/em&gt;&lt;/a&gt; and that eventually evolved to
&lt;a href=&quot;http://www.red-bean.com/decklin/&quot;&gt;&lt;em&gt;
http://www.red-bean.com/decklin/&lt;/em&gt;&lt;/a&gt;.  The last good capture of the
&lt;a href=&quot;https://web.archive.org/web/20191011044301/https://www.red-bean.com/decklin/&quot;&gt;
site at the Wayback machine was 11 October 2019&lt;/a&gt;.  It looks like
they disabled the web site after that date.&lt;/p&gt;

&lt;p&gt;On 22 July 1999,
&lt;a href=&quot;https://danielpocock.com/en/people/raphael-hertzog/&quot;&gt;
Raphael Hertzog&lt;/a&gt;, known for the
&lt;a href=&quot;https://danielpocock.com/en/category/freexian/&quot;&gt;
Freexian scandals&lt;/a&gt; wrote a message asking people to do unpaid work
on orphaned packages in the hope that their application to become a
&lt;a href=&quot;https://danielpocock.com/en/what-is-a-debian-developer/&quot;&gt;
Debian Developer&lt;/a&gt; would be approved more quickly:&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;To: debian-devel-announce@lists.debian.org, debian-devel@lists.debian.org, debian-qa@lists.debian.org, debian-mentors@lists.debian.org
Subject: [New maintainer] Working for Debian and becoming a registered Debian developer
From: &lt;a href=&quot;https://danielpocock.com/en/people/raphael-hertzog/&quot;&gt;Raphael Hertzog&lt;/a&gt; &amp;lt;rhertzog@hrnet.fr&amp;gt;
Date: Thu, 22 Jul 1999 18:06:26 +0200

[ Large crosspost to start the discussion, please reply to debian-devel
  only. Simply respect the reply-to. ]

Hello everybody,

you may or not be aware that getting a Debian developer is quite long. I
want to propose a solution to facilitate the integration of new
Debian developers.

It&#39;s quite simple. In order to fully learn how Debian works, the best
solution is :
- to adopt orphaned packages and correct their bugs
- that your work should be checked by an official developer (I&#39;ll call
  it the sponsor).

Of course, as long you&#39;re not a registered Debian developers you cannot
upload your packages. The soluton is that the sponsor will upload the
package you&#39;ll do. The official maintainer will be
debian-qa@lists.debian.org. After all when you correct bugs on orphaned
packages, you&#39;re doing Quality Assurance.

This does also allow you to get new bugs in your mailbox. You just need
to subscribe to debian-qa@lists.debian.org. You would be allowed to
open/close/set the severity/forward the bugs since all debian-qa members
can do it on debian-qa packages.

If the sponsor finds that you&#39;ve done a good job with the package, he
will explain that to the new maintainer team in the hope that your
application will be processed faster. And when you&#39;ll be
official Debian developper, you&#39;ll be able to change the Maintainer field
to your name.

I&#39;ll propose myself to be a sponsor. We&#39;ll need more sponsor ... any
volunteers ? Hopefully several people from debian-qa will accept to be
sponsor like me ...

All the future Debian developers interested should also reply ...

Any input appreciated !

Cheers,
-- 
&lt;a href=&quot;https://danielpocock.com/en/people/raphael-hertzog/&quot;&gt;Hertzog Raphaël&lt;/a&gt; &amp;gt;&amp;gt; 0C4CABF1 &amp;gt;&amp;gt; http://prope.insa-lyon.fr/~rhertzog/
&lt;/pre&gt;

&lt;p&gt;
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was one of the people recruited by those tactics.&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;To: debian-devel@lists.debian.org
Cc: debian-mentors@lists.debian.org
Subject: Re: [New maintainer] Working for Debian and becoming a registered Debian developer
From: &lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;Decklin Foster&lt;/a&gt; &amp;lt;decklin@home.com&amp;gt;
Date: Thu, 22 Jul 1999 13:39:13 -0400

Raphael Hertzog writes:

&amp;gt; Of course, as long you&#39;re not a registered Debian developers you cannot
&amp;gt; upload your packages. The soluton is that the sponsor will upload the
&amp;gt; package you&#39;ll do. The official maintainer will be
&amp;gt; debian-qa@lists.debian.org. After all when you correct bugs on orphaned
&amp;gt; packages, you&#39;re doing Quality Assurance.

Sounds good, I&#39;ll subscribe right after I finish writing this. I&#39;m
also trying to work on non-orphaned backages as well (for example
right now i&#39;m fixing a bug in gsfonts-x11.) So keep in mind that you
can always just send patches :)

-- 
Debian GNU/Linux - http://www.debian.org/
The Web is to graphic design as the fax machine is to literature.
&lt;/pre&gt;

&lt;p&gt;Not only was
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin&lt;/a&gt; under the influence of
&lt;a href=&quot;https://danielpocock.com/en/people/raphael-hertzog/&quot;&gt;
Hertzog&lt;/a&gt;, they were also under the influnce of the
&lt;a href=&quot;https://danielpocock.com/en/influencers-red-hat-inc-ipo-1999-post-mortem-on-the-directed-share-offer-community-open-source-developers/&quot;&gt;
Red Hat share offer&lt;/a&gt;.  This email encourages speculation on the
IPO:&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;To: debian-devel@lists.debian.org
Subject: Re: SPAM from Red Hat
From: &lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;Decklin Foster&lt;/a&gt; &amp;lt;decklin@home.com&amp;gt;
Date: Wed, 21 Jul 1999 09:57:45 -0400

&lt;a href=&quot;https://danielpocock.com/en/people/martin-bialasinski-martinb/&quot;&gt;Martin Bialasinski&lt;/a&gt; writes:

&amp;gt; is it only me, or did you also get this &lt;a href=&quot;https://danielpocock.com/en/influencers-red-hat-inc-ipo-1999-post-mortem-on-the-directed-share-offer-community-open-source-developers/&quot;&gt;spam from Red Hat&lt;/a&gt; about stock
&amp;gt; options?
&amp;gt; 
&amp;gt; Oh man - the bigger the company, the less clueful people?

On #debian last night, it was suggested that we use our opportunity to
buy some of this stock and sell it when the price goes up. This money
could then be used to fund Debian, buy new hardware, improve our
network connection, etc. Does anyone else think this is a Good
Idea(TM)? I would be willing to donate as much as I reasonably could.

-- 
Debian GNU/Linux - http://www.debian.org/
The Web is to graphic design as the fax machine is to literature.
&lt;/pre&gt;

&lt;p&gt;Of interest to those watching the
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue saga&lt;/a&gt;, there is an email about hacking and cracking:&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;To: debian-devel@lists.debian.org
Subject: Re: [New maintainer] Working for Debian and becoming a registered Debian developer
From: &lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;Decklin Foster&lt;/a&gt; &amp;lt;decklin@home.com&amp;gt;
Date: Thu, 22 Jul 1999 16:37:40 -0400

&lt;a href=&quot;https://danielpocock.com/en/people/carl-mummert/&quot;&gt;Carl Mummert&lt;/a&gt; writes:

&amp;gt; Hacking is a serious crime

Cracking is a serious crime. Breaking into computer systems without
permission is a serious crime. Violation of privacy and theft of
confidential information is a serious crime.

Now what does this have to do with hacking?

&amp;gt; The fact remains that the debian policy is to discourage new
&amp;gt; developers by making it slow and difficult to get an account.

I have no problem with waiting, and I&#39;d rather not look bad just
because some people keep speaking badly about the new-maintainer team.
We don&#39;t need another flamewar here. People have work to do.

-- 
Debian GNU/Linux - http://www.debian.org/
The Web is to graphic design as the fax machine is to literature.
&lt;/pre&gt;

&lt;p&gt;The
&lt;a href=&quot;https://nm.debian.org/legacy/process/12954/&quot;&gt;
New Maintainer report&lt;/a&gt; tells us they entered the process in the same
month, their application manager was
&lt;a href=&quot;https://danielpocock.com/en/people/craig-small-csmall/&quot;&gt;
Craig Small&lt;/a&gt; and they completed the process in July/August 2000.
The advocacies and the application manager (AM) report are all
&lt;a href=&quot;https://lists.debian.org/debian-newmaint-discuss/&quot;&gt;
missing from the mailing list archives&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They had a page at
&lt;a href=&quot;https://web.archive.org/web/20080515195131/https://people.debian.org/~decklin/&quot;&gt;&lt;em&gt;
https://people.debian.org/~decklin/&lt;/em&gt;&lt;/a&gt; but that has been inaccessible
ever since the peak of the
&lt;a href=&quot;https://danielpocock.com/en/category/debian-suicide-cluster/&quot;&gt;
Debian suicide cluster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;They had a blog on another web site.  It is captured in the Wayback
machine up to 2012.  The last snapshot with the index is here:
&lt;a href=&quot;https://web.archive.org/web/20120107035737/http://blog.rupamsunyata.org/&quot;&gt;&lt;em&gt;
http://blog.rupamsunyata.org/&lt;/em&gt;&lt;/a&gt;.  The last blog post:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
&lt;h3&gt;I&#39;m the fuel that fires the engine of Failure&lt;/h3&gt;
&lt;p&gt;So, the Democrats in my very blue state put up a depressing, entitled, out-of-touch candidate for our vacant senate seat and she lost. The only reason I voted for her was because she wasn&#39;t a Republican. Supporting someone you don&#39;t even slightly like is psychologically draining.&lt;/p&gt;

&lt;p&gt;At this point, I would vote for a Democratic party (or a Republican party!) with the exact same fiscal policy as the current Republicans if they actually made a principled, moral stand on equal protection and civil rights, habeas corpus/due process, and reproductive rights. Those don&#39;t cost anything[1].&lt;/p&gt;

&lt;p&gt;Maybe they should be solved before the stuff that does cost billions of dollars. As it is my choice is weak, almost grudging support for those rights from people who want to hand the economy over to the government, and disgusting, immoral, vehement opposition to them from people who want to hand the economy over to wealthy corporations.&lt;/p&gt;

&lt;p&gt;Neither side is doing anything effective to keep us free, or to keep the market free. Each side says or implies that this is a Christian nation, which it explicitly isn&#39;t, while failing to do what&#39;s right. Sometimes I want to give up and stop voting.&lt;/p&gt;

&lt;p&gt;[1]	Conversely, of course, it doesn&#39;t cost anything to take people&#39;s rights away, or prevent them from getting rights in the first place; I think this is why anti-gay-marriage ballot measures have been more successful in the current recession. Some people get their kicks from the suffering of others.&lt;/p&gt;
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Accessing the blog from 2013 onwards we can see
&lt;a href=&quot;https://web.archive.org/web/20130214221204/http://blog.rupamsunyata.org/&quot;&gt;
the front page&lt;/a&gt; has been replaced with the message:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
This blog is not being updated. Old entries are still around, but I&#39;m turning off the front page for now.
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;From there, we could find a link to
&lt;a href=&quot;https://web.archive.org/web/20080906133011/http://decklin.livejournal.com/profile&quot;&gt;
Decklin Foster on LiveJournal&lt;/a&gt;.  Their profile tells us they like
#Debian-women.  Don&#39;t forget the
&lt;a href=&quot;https://danielpocock.com/en/category/debian-pregnancy-cluster/&quot;&gt;
Debian pregnancy cluster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is a link to a
&lt;a href=&quot;https://web.archive.org/web/20080906133011/http://twitter.com/decklin&quot;&gt;
Twitter/X account for Decklin Foster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;contributors.debian.org&lt;/em&gt; tells us that
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; stopped contributing in February 2011, immediately
before the
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
death of Adrian von Bidder-Senn&lt;/a&gt; on our wedding day.
&lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt; is not on the list at all.  If
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin&lt;/a&gt; had abandoned
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt;, why did it take eight years to remove them from the keyring?
Reading the full history of the
&lt;a href=&quot;https://danielpocock.com/en/debian-history-harassment-abuse-culture-evolution/&quot;&gt;
Debian Harassment culture&lt;/a&gt;, we can see many other co-authors were
removed for purely political reasons and blackmail but keys belonging to the
people who had abandoned the project and people who died were left in
the keyring for years.&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;To: debian-devel &amp;lt;debian-devel@lists.debian.org&amp;gt;
Subject: RFA: all my packages
From: &lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;Decklin Foster&lt;/a&gt; &amp;lt;decklin@red-bean.com&amp;gt;
Date: Thu, 10 Feb 2011 17:11:05 -0500
Message-id: &amp;lt;1297375750-sup-7355@gillespie.rupamsunyata.org&amp;gt;

I&#39;m looking for a new maintainer for, well, any of these. &lt;b&gt;My heart is
not in it anymore&lt;/b&gt; and most of them have been neglected for a while.
Recently my free time has been taken up by other things (mainly my job)
and I forsee that continuing.

http://qa.debian.org/developer.php?login=decklin%40red-bean.com

python-beautifulsoup and mpd need attention for proposed-updates; I
missed getting them into Squeeze. rxvt-unicode is a total clusterfuck.

If any desktop-type packages remain I will orphan them, as I am only
running Debian on servers now. Apart from that, perhaps with a greatly
reduced load I can still make a tiny contribution to the community. If
not, I will retire.

-- 
things change.
decklin@red-bean.com
&lt;/pre&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; is on a list of former members of
&lt;a href=&quot;https://cdasr.mclean.harvard.edu/lab-members/former/&quot;&gt;
Harvard&#39;s Center for Depression, Anxiety and Stress Research&lt;/a&gt;.
They have a photo of him when he was younger.  It appears to be the
same person as the Github profile.
&lt;/p&gt;

&lt;p&gt;Various scholarly articles from Harvard experts on depression have
thanked
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; for their contributions in 2008 and 2009.
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was collaborating on this world-class depression
research at exactly the same time they were part of the
&lt;em&gt;debian-private&lt;/em&gt; discussions that precipitated the
&lt;a href=&quot;https://danielpocock.com/en/why-did-frans-pop-choose-debian-day-for-suicide/&quot;&gt;
Debian Day Volunteer Suicide in 2010&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pizzagalli, Diego A., Avram J. Holmes, Daniel G. Dillon, Elena L. Goetz, Jeffrey L. Birk, Ryan
Bogdan, Darin D. Dougherty, Dan V. Iosifescu, Scott L. Rauch, and Maurizio Fava. 2009.
&lt;a href=&quot;https://dash.harvard.edu/server/api/core/bitstreams/7312037c-78a1-6bd4-e053-0100007fdf3b/content&quot;&gt;Reduced Caudate and Nucleus Accumbens Response to Rewards in Unmedicated
Individuals With Major Depressive Disorder.&lt;/a&gt; The American Journal of Psychiatry 166:
702-710. 2008&lt;/li&gt;

&lt;li&gt;Deveney, Christen M., and Diego A. Pizzagalli. 2008. &lt;a href=&quot;https://dash.harvard.edu/server/api/core/bitstreams/7312037c-6488-6bd4-e053-0100007fdf3b/content&quot;&gt;The cognitive consequences of
emotion regulation: An ERP investigation.&lt;/a&gt; Psychophysiology 45(3): 435-444.&lt;/li&gt;

&lt;li&gt;Wacker, Jan, Daniel G. Dillon, and Diego A. Pizzagalli. 2009. &lt;a href=&quot;https://dash.harvard.edu/server/api/core/bitstreams/7312037c-5cc9-6bd4-e053-0100007fdf3b/content&quot;&gt;The role of the nucleus
accumbens and rostral anterior cingulate cortex in anhedonia: Integration of resting EEG,
fMRI, and volumetric techniques.&lt;/a&gt; Neuroimage 46, no. 1: 327-337.&lt;/li&gt;
&lt;li&gt;Diane L. Santesso, Daniel G. Dillon, Jeffrey L. Birk, Avram J. Holmes, Elena Goetz,
Ryan Bogdan, Diego A. Pizzagalli. 2008. &lt;a href=&quot;https://bogdanlab.com/pdf/Santesso_NI08.pdf&quot;&gt;Individual differences in reinforcement learning: Behavioral, electrophysiological,
and neuroimaging correlates&lt;/a&gt; - NeuroImage&lt;/li&gt;
&lt;li&gt;Daniel G. Dillon, Ryan Bogdan, Jesen Fagerness, Avram J. Holmes,
Roy H. Perlis, and Diego A. Pizzagalli, 2010 - &lt;a href=&quot;https://depressioninstitute.uci.edu/wp-content/uploads/sites/37/dillon_hbm10.pdf&quot;&gt;Variation in TREK1 Gene Linked to DepressionResistant Phenotype is Associated with Potentiated
Neural Responses to Rewards in Humans&lt;/a&gt; - Human Brain Mapping 31:210–221&lt;/li&gt;
&lt;li&gt;Santesso DL, Bogdan R, Birk JL, Goetz EL, Holmes AJ, Pizzagalli DA. &lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC3475354/pdf/nsr054.pdf&quot;&gt;Neural responses to negative feedback are related to negative emotionality in healthy adults&lt;/a&gt; - Soc Cogn Affect Neurosci. 2012 Oct;7(7):794-803. doi: 10.1093/scan/nsr054. Epub 2011 Sep 14. PMID: 21917847; PMCID: PMC3475354.&lt;/li&gt;
&lt;/ul&gt;

&lt;img alt=&quot;Decklin Foster, Harvard, Mclean, Depression, suicide, Diego Pizzagalli&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/pizzagalli-credit.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;The connection to psychiatric research is a really odd coincidence,
given that
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin&lt;/a&gt; sent that RFA (resignation) email immediately before
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
the death of Adrian von Bidder-Senn on our wedding day&lt;/a&gt;.  The death was
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
discussed like a suicide&lt;/a&gt;.&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;Subject: Re: Death of &lt;a href=&quot;https://danielpocock.com/en/people/adrian-von-bidder-cmot/&quot;&gt;Adrian von Bidder&lt;/a&gt;
Date: Fri, 22 Apr 2011 09:39:49 +0200
From: &lt;a href=&quot;https://danielpocock.com/en/people/andrea-mennucci-mennucc1/&quot;&gt;A Mennucc&lt;/a&gt; &amp;lt;mennucc1@debian.org&amp;gt;
To: debian-private@lists.debian.org

Il 19/04/2011 18:17, &lt;a href=&quot;https://danielpocock.com/en/people/martin-krafft-madduck/&quot;&gt;martin f krafft&lt;/a&gt; ha scritto:
&amp;gt; Dear Debian colleagues,
&amp;gt;
&amp;gt; I have the sad task to communicate to you the news of the death of
&amp;gt; &lt;a href=&quot;https://danielpocock.com/en/people/adrian-von-bidder-cmot/&quot;&gt;Adrian von Bidder (avbidder, cmot)&lt;/a&gt;, who passed away last Sunday,
&amp;gt; most probably of a heart attack.

I had contacted &lt;a href=&quot;https://danielpocock.com/en/people/adrian-von-bidder-cmot/&quot;&gt;Adrian&lt;/a&gt; regarding the Debian umbrella.
So I had also a chance of seeing a picture of him
http://blog.fortytwo.ch/archives/80-Yay!-Debian-Logo!.html
In that picture he seemed quite happy and young.
His death is quite shocking and sad.

a.
&lt;/pre&gt;

&lt;p&gt;Remember,
&lt;a href=&quot;https://danielpocock.com/en/psychiatrist-occupational-therapist-debian-toxic-culture-recognized-before-suicides-germanwings/&quot;&gt;
Debianists admitted the group needed a psychiatrist back in 2006&lt;/a&gt;, well
before most of the deaths.&lt;/p&gt;

&lt;p&gt;Around the same time,
&lt;a href=&quot;https://danielpocock.com/en/adrian-von-bidder-homeworking-debian-unexplained-deaths/&quot;&gt;
a petition about suicide prevention was submitted to the Basel city
council and it had the name A. von Bidder at the bottom&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; himself is missing.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/william-lee-irwin-wli/&quot;&gt;
William Lee Irwin III&lt;/a&gt; was another
&lt;a href=&quot;https://danielpocock.com/en/what-is-a-debian-developer/&quot;&gt;
Debian Developer&lt;/a&gt; who asked for help and then vanished.&lt;/p&gt;

&lt;p&gt;There is a
&lt;a href=&quot;https://www.youtube.com/user/decklinfoster&quot;&gt;
Decklin Foster profile on Youtube&lt;/a&gt; that hasn&#39;t been used for nine
years.  There are four subscribers.  One of the videos has the
comment:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
&lt;p&gt;Mixed these together on my show (editsradio.org) this week and really liked the result, so here it is on its own, slowed down and a little extended.&lt;/p&gt;

&lt;p&gt;Photo taken at the Wilbur Theater in Boston on 2012-07-31.&lt;/p&gt;
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;The last snapshot of
&lt;a href=&quot;https://web.archive.org/web/20150406235126/http://editsradio.org/&quot;&gt;&lt;em&gt;editsradio.org&lt;/em&gt;&lt;/a&gt; is on 6 April 2015.  After that, the content is
changed to Arabic.  From 15 August 2015,  it is redirecting to another site,
also in Arabic, at
&lt;a href=&quot;https://web.archive.org/web/20151022170759/http://www.17serialbaran.org/&quot;&gt;&lt;em&gt;
http://www.17serialbaran.org&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;img alt=&quot;Decklin Foster&quot; src=&quot;https://danielpocock.com/assets/people/decklin-t-foster/editsradio-arabic.png&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In January 2015,
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; &amp;amp;
&lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt; are listed as a couple
&lt;a href=&quot;https://danielpocock.com/assets/people/decklin-t-foster/JanFeb_2015-sm.pdf&quot;&gt;
as new members of the Brattle Theatre, Cambridge, Massachusetts&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Later in 2015, a report from the World Science Fiction Society
&lt;a href=&quot;https://danielpocock.com/assets/people/decklin-t-foster/PR_4.pdf&quot;&gt;
lists Decklin Foster as a new member&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.spokeo.com/Christina-Gleason/Illinois/Chicago/p30414512051&quot;&gt;
Spokeo has a report about Christina N Gleason-Foster in Chicago, IL&lt;/a&gt;
with a former address in Cambridge, MA, the same location as
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Going back to 2013, when the blog vanished,
&lt;a href=&quot;https://www.universalhub.com/2013/house-blues-turns-down-heat-adds-ice-water&quot;&gt;
Universal Hub published a report &quot;House of Blues turns down the heat, adds ice water for electronica shows due to Molly scourge&quot;&lt;/a&gt;.
This is not about
&lt;a href=&quot;https://danielpocock.com/en/people/molly-de-blanc-mollydb/&quot;&gt;
Molly de Blanc&lt;/a&gt; it is about the Molly pills.
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; drops a comment in the discussion:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
This sounds like a bad idea. You really don&#39;t want to give huge amounts of water to MDMA users
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;There is a
&lt;a href=&quot;https://www.linkedin.com/in/cpgleason/&quot;&gt;
LinkedIn profile for Chris Gleason in Pinellas County&lt;/a&gt;, in
&lt;a href=&quot;https://danielpocock.com/en/category/florida/&quot;&gt;
Florida&lt;/a&gt;, not far from
&lt;a href=&quot;https://danielpocock.com/en/people/jeremy-bicha-jbicha/&quot;&gt;
Jeremy Bícha&lt;/a&gt;, the
&lt;a href=&quot;https://danielpocock.com/en/category/registered-sex-offender/&quot;&gt;
Registered Sex Offender&lt;/a&gt; who was invited to speak at
&lt;a href=&quot;https://danielpocock.com/en/category/debconf25/&quot;&gt;
DebConf25&lt;/a&gt; in Brest,
&lt;a href=&quot;https://danielpocock.com/en/category/france/&quot;&gt;
France&lt;/a&gt;.  Looking at the photo on LinkedIn, is this an older version of
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&#39;s&lt;/a&gt; wife who has transitioned back to being a man or is it
a completely different person?&lt;/p&gt;

&lt;p&gt;It would be extremely offensive to ask such a question in any other
group of people but in the world of
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; and
&lt;a href=&quot;https://danielpocock.com/en/category/zizian/&quot;&gt;
Zizian&lt;/a&gt; phenomena, there are a disproportionate number of people who
are living such lifestyles.&lt;/p&gt;

&lt;img alt=&quot;Chris Gleason, Pinellas County, Florida, Republican, Senate&quot; src=&quot;https://danielpocock.com/assets/people/chris-gleason-republican/chris-gleason-linkedin.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Let&#39;s not forget the example of another
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; transgender bedmate with at least five identities, that was
&lt;a href=&quot;https://danielpocock.com/en/people/pauline-pommeret/&quot;&gt;
Pauline / Maria Climent / Pommeret&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Republican Chris Gleason&lt;/a&gt; has a
&lt;a href=&quot;https://ballotpedia.org/Chris_Gleason_(Florida)&quot;&gt;
profile on Ballotpedia&lt;/a&gt; where they claim to have come from
Massachusetts, the same Democrat state where we found
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
Chris Gleason was born in Lowell, Massachusetts. Gleason&#39;s career experience includes working as a technology consultant. He served in the U.S. Army National Guard from 1989 to 1999. Gleason earned a bachelor&#39;s degree from the University of Massachusetts, Lowell in 1996. Gleason has been affiliated with Caribbean Christian Center for the Deaf, Michigan -Make-A-Wish, Seniors Helping Seniors.
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;In the recent UK elections, journalists and researchers found various
examples of candidates who didn&#39;t really exist.  At least one political
party was accused of making up fake candidates to make their party
look bigger and attract more donations.&lt;/p&gt; 

&lt;p&gt;I have the impression the
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Chris Gleason&lt;/a&gt; in
&lt;a href=&quot;https://danielpocock.com/en/category/florida/&quot;&gt;
Florida&lt;/a&gt; is a different
person but I&#39;m not ruling out the possibility it is a fake profile
or an alter-ego of
&lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt;, wife of
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue crisis&lt;/a&gt; is real however.  Here is a
&lt;a href=&quot;https://judiciary.house.gov/sites/evo-subsites/republicans-judiciary.house.gov/files/2025-04/04.02.25_FRAUD_ON_ACTBLUE_HOW_THE_DEMOCRATS_TOP_FUNDRAISING_PLATFORM_OPENS_THE_DOOR_FOR_ILLEGAL_ELECTION_CONTRIBUTIONS_w_appendix.pdf&quot;&gt;
committee report on the US house web site&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
The Committee on House Administration, the Committee on the Judiciary, and the
Committee on Oversight and Government Reform are charged with ensuring the integrity of American elections. To that end, the Committees are examining allegations that ActBlue, a leading political fundraising organization, allowed bad actors, including foreign actors, to exploit its online platform to make fraudulent political donations.
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;There is a
&lt;a href=&quot;https://me.sh/profile/chris-gleason&quot;&gt;
profile on Mesh that tells us about Gleason&#39;s career and finishes with
a paragraph about the election fraud claims&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
&lt;h3&gt;Chris Gleason&lt;/h3&gt;
&lt;h4&gt;CEO at NextMed Holdings, LLC CEO at Translational Analytics and Statistics, LLC&lt;/h4&gt;
&lt;p&gt;Chris Gleason is a board member at Our Mayberry, a company focused on revolutionizing charitable giving and fundraising.1 He is a lawyer, entrepreneur, and community philanthropist with multiple leadership roles in charities helping children.3 Gleason has also been involved in various business ventures and has held executive positions in different companies.&lt;/p&gt;

&lt;p&gt;In addition to his role at Our Mayberry, Gleason has served as a board member for the Goldwater Institute since 2013.5 He was also recently appointed as the president and CEO of Moximed, a medical device company, in June 2024.2&lt;/p&gt;

&lt;p&gt;Gleason has a background in sales leadership, having previously worked as VP of sales at Relievant and VP of sales of interventional urology at Teleflex.2 He has also been involved in political activities, receiving income from Election Watch, a Wisconsin-based group, in 2024.4&lt;/p&gt;

&lt;p&gt;&lt;b&gt;It&#39;s worth noting that Gleason has recently entered the political arena, running for the position of Pinellas County Supervisor of Elections in Florida for the 2024 election. His campaign has been controversial, as he has made unsubstantiated claims about election fraud and criticized the incumbent, Julie Marcus.&lt;/b&gt;&lt;/p&gt;
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;On 10 April 2026,
&lt;a href=&quot;https://miamiindependent.com/politics/2026/04/10/florida-election-fraud-dynamic-duo-chris-gleason-jeff-buongiorno/&quot;&gt;
Miami Independent published a video&lt;/a&gt; where they interview
&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Chris Gleason&lt;/a&gt; and
&lt;a href=&quot;https://danielpocock.com/en/people/jeff-buongiorno-florida/&quot;&gt;
Jeff Buongiorno&lt;/a&gt; about vote rigging allegations.  The
&lt;a href=&quot;https://danielpocock.com/en/category/cia/&quot;&gt;
CIA&lt;/a&gt; is mentioned within the first ninety seconds of the video.  I
stopped watching at that point.&lt;/p&gt;

&lt;img alt=&quot;Chris Gleason, Jeff Buongiorno, ActBlue, Florida, Senate, Republican&quot; src=&quot;https://danielpocock.com/assets/people/chris-gleason-republican/gleason-buongiorno.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;In the case of another Debian Developer,
&lt;a href=&quot;https://danielpocock.com/en/people/paul-tagliamonte-paultag/&quot;&gt;
Paul Tagliamonte&lt;/a&gt;, he really was working in the White House and the
Pentagon.  We have a photo to prove it:&lt;/p&gt;

&lt;img alt=&quot;Lisa Disbrow, David L. Goldfein, Chris Lynch, Paul Tagliamonte, Debian, USDS, Rebellion&quot; src=&quot;https://danielpocock.com/assets/people/paul-tagliamonte-paultag/paul-tag-air-force.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/chris-gleason-republican/&quot;&gt;
Chris Gleason&#39;s&lt;/a&gt; campaign web site has the title
&lt;em&gt;Whistleblower&lt;/em&gt; in big letters.  This implies he was an insider
or he was connected to an insider, in other words, his claim to be
a whistleblower encourages us to ask about the bizarre possibility that he
really is or was the transgender wife of
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&#39;s&lt;/a&gt; missing director of
information technology,
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If that was true, did his/her domestic arrangements give them
unauthorized access to servers, laptops or cloud accounts for
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue&lt;/a&gt;?  I was very grateful to receive
&lt;a href=&quot;https://danielpocock.com/en/george-pell-fileserver-three-finance-ministers-peter-eckersley/&quot;&gt;
donations of file servers from the Catholic archdiocese of Melbourne&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;Take a side-step and have a look at the other
&lt;a href=&quot;https://danielpocock.com/en/category/florida/&quot;&gt;
Florida&lt;/a&gt; connection with the
&lt;a href=&quot;https://danielpocock.com/en/category/us-republican/&quot;&gt;
US Republican party&lt;/a&gt;.  In the report about
&lt;a href=&quot;https://danielpocock.com/en/axel-beckert-martin-ebnoether-debian-dirty-men/&quot;&gt;
Senior management and HR email privacy: Martin Ebnoether (venty), Axel Beckert (xtaran) &amp;amp; Debian abuse in Switzerland&lt;/a&gt;, I made the observation that
&lt;a href=&quot;https://danielpocock.com/en/people/axel-beckert-xtaran/&quot;&gt;
Axel Beckert&#39;s&lt;/a&gt; boyfriend and I both worked at the same company.
The owner of that company is one of the top donors of the
&lt;a href=&quot;https://danielpocock.com/en/category/us-republican/&quot;&gt;
US Republican party&lt;/a&gt; and he lives three doors away from Mar-a-Lago,
the home of current US President
&lt;a href=&quot;https://danielpocock.com/en/people/donald-trump/&quot;&gt;
Donald Trump&lt;/a&gt;.  Trump himself was elected for the first time on my
birthday and
&lt;a href=&quot;https://danielpocock.com/en/which-movie-most-accurately-forecasts-the-trump-presidency/&quot;&gt;
I correctly predicted there would be conflict in the Strait of Hormuz&lt;/a&gt;.&lt;/p&gt;

&lt;img alt=&quot;Martin Ebnoether, venty, Zurich, Interactive Brokers&quot; src=&quot;https://danielpocock.com/assets/people/martin-ebnoether-venty/linkedin-1.jpg&quot; width=&quot;100%&quot; /&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin&lt;/a&gt; was using Gists,
&lt;a href=&quot;https://gist.github.com/decklin&quot;&gt;
they also stopped abruptly in 2017&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Red-Bean.com&lt;/em&gt; web site has a
&lt;a href=&quot;https://red-bean.com/people.html&quot;&gt;
list of people associated with their web site and Decklin&#39;s name is not
on the list&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mylife.com/decklin-foster/e229581426456&quot;&gt;Decklin Foster on mylife.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reunion.com/p/decklin-foster-r259a2854c&quot;&gt;Decklin Foster on reunion.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether &lt;em&gt;they&lt;/em&gt; are the same &lt;a href=&quot;https://danielpocock.com/en/people/christina-gleason-foster/&quot;&gt;
Chris Gleason&lt;/a&gt; or not, we can say for sure
that the
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; from
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; is the same
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; who became Director of Information Technology for
disgraced fundraising platform
&lt;a href=&quot;https://danielpocock.com/en/category/actblue/&quot;&gt;
ActBlue Civics, Inc&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is one more interesting leak from the
&lt;em&gt;debian-private&lt;/em&gt; leaked gossip network.  It shows us that
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt; was in favor of the practice of dividing the community
and humiliating people.  It looks like he supported the humiliation of
&lt;a href=&quot;https://danielpocock.com/en/people/sven-luther/&quot;&gt;
Sven Luther&lt;/a&gt; at the very time he was working in the Harvard Medical
School&#39;s depression research team.  Sven&#39;s mother was dying at the time
this bun fight erupted.&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;Subject: Expulsion process: Sven Luther
Date: Thu, 01 Mar 2007 00:00:29 +0100
From: &lt;a href=&quot;https://danielpocock.com/en/people/joerg-jaspert-ganneff/&quot;&gt;Joerg Jaspert&lt;/a&gt; &amp;lt;joerg@debian.org&amp;gt;
Organization: Goliath-BBS
To: debian-private@lists.debian.org

...

Now, the list of people who sent something in for the process:

Anthony - Requestor

Supporters, unordered:

srivasta@debian.org
mbanck@debian.org
tbm@cyrius.com
93sam@debian.org
fs@debian.org
jgoerzen@complete.org
fjp@debian.org
dilinger@debian.org
joeyh@debian.org
liw@iki.fi
stappers@stappers.nl
tolimar@debian.org
jeroen@wolffelaar.nl
tfheen@debian.org
micah@riseup.net
&lt;b&gt;decklin@red-bean.com&lt;/b&gt;
tb@becket.net
tytso.mit.edu
&lt;/pre&gt;

&lt;p&gt;The conflict between
&lt;a href=&quot;https://danielpocock.com/en/people/sven-luther/&quot;&gt;
Sven Luther&lt;/a&gt; and
&lt;a href=&quot;https://danielpocock.com/en/people/frans-pop-fjp/&quot;&gt;
Frans Pop&lt;/a&gt; appears to be a factor in the eventual suicide of
&lt;a href=&quot;https://danielpocock.com/en/people/frans-pop-fjp/&quot;&gt;
Frans Pop&lt;/a&gt;.  The whole group failed.&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;Subject: [Very long] Post-partem rant and retrospective
Date: Thu, 31 May 2007 03:56:11 +0200
From: &lt;a href=&quot;https://danielpocock.com/en/people/frans-pop-fjp/&quot;&gt;Frans Pop&lt;/a&gt; &amp;lt;elendil@planet.nl&amp;gt;
To: debian-private@lists.debian.org


I&#39;ve decided to write this in a separate mail because I&#39;m afraid this may get long. Quite a bit of this has been written before, but I hope some of you will bear with me.


[snip]


So, what has made me decide to leave the project. It&#39;s a combination of just plain emotional stress over the whole Sven Luther issue, frustration with the inability of the project to deal with that and with some other issues, and frustration with the fact that a fair number of members of the project seem to feel that as long as you don&#39;t upload packages with trojans, pretty much anything is OK.
&lt;/pre&gt;

&lt;p&gt;and eventually....&lt;/p&gt;

&lt;pre style=&quot;white-space: pre-wrap;&quot;&gt;Subject: Resignation
Date: Sun, 15 Aug 2010 21:41:18 +0200
From: &lt;a href=&quot;https://danielpocock.com/en/people/frans-pop-fjp/&quot;&gt;Frans Pop&lt;/a&gt; &amp;lt;elendil@planet.nl&amp;gt;
To: debian-private@lists.debian.org


It&#39;s time to say goodbye. I don&#39;t want to say too much about it, except that I&#39;ve been planning this for a long time.


Participating in Debian has been great.

...
&lt;/pre&gt;

&lt;p&gt;To see all the leaked messages from &lt;em&gt;debian-private&lt;/em&gt;,
including the history of
&lt;a href=&quot;https://danielpocock.com/en/people/decklin-t-foster/&quot;&gt;
Decklin Foster&lt;/a&gt;, please see
&lt;a href=&quot;https://danielpocock.com/en/donate/&quot;&gt;
my crowdfunding campaign video&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Thu, 16 Apr 2026 20:30:00 +0000</pubDate>

</item> 
<item>
	<title>Daniel Pocock: Terrorism or accident? Geelong Corio refinery fire, drone attack rumours in news vacuum</title>
	<guid>https://danielpocock.com/en/terrorism-or-accident-geelong-corio-refinery-fire-drone-attack-rumours-news-vacuum</guid>
	<link>https://danielpocock.com/en/terrorism-or-accident-geelong-corio-refinery-fire-drone-attack-rumours-news-vacuum/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/pocock.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;At 11pm local time in eastern Australia, a huge fire broke out at
the Viva Energy refinery in Corio, Geelong.&lt;/p&gt;

&lt;p&gt;There has been a near-total news vacuum.  This may be deliberate or it
may be a consequence of cost-cutting that has replaced many journalists with
&lt;a href=&quot;https://danielpocock.com/en/category/artificial-intelligence/&quot;&gt;
artificial intelligence&lt;/a&gt;.  The few human journalists who remain in
the profession may have already gone to bed when the fire started.&lt;/p&gt;

&lt;p&gt;The national broadcaster, the ABC, was quick to include it in their
list of breaking news items but without much detail.  About three hours
after the fire started, it was present on the web site of 9 News but
not visible on the web sites of 7 News, Herald Sun or The Age.  About
five hours after the fire started, the local newspaper Geelong Advertiser
included it in their
&lt;a href=&quot;https://danielpocock.com/en/category/facebook/&quot;&gt;
Facebook&lt;/a&gt; account.&lt;/p&gt;

&lt;p&gt;The story is newsworthy for a number of reasons.
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australia&lt;/a&gt; previously had eight refineries but six of them were
phased out and never replaced.
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australia&lt;/a&gt; relies on foreign refineries for over eighty percent of
fuel.  With the Corio refinery out of action, there is only one domestic
refinery left.  Therefore, it is surprising the news media have been
so slow to pick up the story.&lt;/p&gt;

&lt;p&gt;The next big reason it is newsworthy is the war in
&lt;a href=&quot;https://danielpocock.com/en/category/iran/&quot;&gt;
Iran&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;None of the news reports have commented on the fact that
&lt;a href=&quot;https://danielpocock.com/en/people/richard-marles/&quot;&gt;
Richard Marles&lt;/a&gt;, the deputy prime minister and the minister for defence
is the local member of parliament for the region where the refinery
is located.&lt;/p&gt;

&lt;p&gt;In the news vacuum, people have been quick to share rumours on
&lt;a href=&quot;https://danielpocock.com/en/category/social-control-media/&quot;&gt;
social control media&lt;/a&gt;.  Some people are speculating about the
prospect of a drone attack.  In Europe last year there were reports about
&lt;a href=&quot;https://danielpocock.com/en/category/russia/&quot;&gt;
Russian&lt;/a&gt; drones launched from cargo ships in international waters and
interfering with European airports.  Other reports have speculated about
cargo ships using their anchors to sabotage pipelines and communications
cables on the sea floor.
&lt;a href=&quot;https://danielpocock.com/en/category/france/&quot;&gt;
France&lt;/a&gt; intercepted and seized a ship connected with
&lt;a href=&quot;https://danielpocock.com/en/category/russia/&quot;&gt;
Russia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another user on
&lt;a href=&quot;https://danielpocock.com/en/category/social-control-media/&quot;&gt;
social control media&lt;/a&gt; has commented that there was a technical incident
at the plant earlier in the day and the fire could be nothing more
than an accident.&lt;/p&gt;

&lt;p&gt;People would be wise not to jump to conclusions.  Even if it is a
terror attack, it may not be
&lt;a href=&quot;https://danielpocock.com/en/category/iran/&quot;&gt;
Iran&lt;/a&gt;.  In recent news reports,
&lt;a href=&quot;https://danielpocock.com/en/category/russia/&quot;&gt;
Russia&lt;/a&gt; announced they had the right to attack any countries who
are sending support to
&lt;a href=&quot;https://danielpocock.com/en/category/ukraine/&quot;&gt;
Ukraine&lt;/a&gt;.  The French company Thales manufacturers the BushMaster
armored personnel carriers in
&lt;a href=&quot;https://danielpocock.com/en/category/bendigo/&quot;&gt;
Bendigo&lt;/a&gt; and the government donated some of them to
&lt;a href=&quot;https://danielpocock.com/en/category/ukraine/&quot;&gt;
Ukraine&lt;/a&gt;.  Low cost cardboard drones manufactured in
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australia&lt;/a&gt; have also been donated to
&lt;a href=&quot;https://danielpocock.com/en/category/ukraine/&quot;&gt;
Ukraine&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 15 Apr 2026 19:30:00 +0000</pubDate>

</item> 
<item>
	<title>Dirk Eddelbuettel: qlcal 0.1.1 on CRAN: Calendar Updates</title>
	<guid>http://dirk.eddelbuettel.com/blog/2026/04/15#qlcal-r_0.1.1</guid>
	<link>http://dirk.eddelbuettel.com/blog/2026/04/15#qlcal-r_0.1.1</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dirk.png&quot; width=&quot;65&quot; height=&quot;90&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;The nineteenth release of the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/qlcal-r.html&quot;&gt;qlcal&lt;/a&gt; package
arrivied at &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; just now, and
has already been built for &lt;a href=&quot;https://eddelbuettel.github.io/r2u/&quot;&gt;r2u&lt;/a&gt;. This version
synchronises with &lt;a href=&quot;https://www.quantlib.org&quot;&gt;QuantLib&lt;/a&gt; 1.42
released this week.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dirk.eddelbuettel.com/code/qlcal-r.html&quot;&gt;qlcal&lt;/a&gt;
delivers the calendaring parts of &lt;a href=&quot;https://www.quantlib.org&quot;&gt;QuantLib&lt;/a&gt;. It is provided (for the R
package) as a set of included files, so the package is self-contained
and does not depend on an external &lt;a href=&quot;https://www.quantlib.org&quot;&gt;QuantLib&lt;/a&gt; library (which can be
demanding to build). &lt;a href=&quot;https://dirk.eddelbuettel.com/code/qlcal-r.html&quot;&gt;qlcal&lt;/a&gt; covers
over sixty country / market calendars and can compute holiday lists, its
complement (&lt;em&gt;i.e.&lt;/em&gt; business day lists) and much more. Examples
are in the README at the &lt;a href=&quot;https://github.com/qlcal/qlcal-r&quot;&gt;repository&lt;/a&gt;, the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/qlcal-r.html&quot;&gt;package page&lt;/a&gt;,
and course at the &lt;a href=&quot;https://cran.r-project.org/package=qlcal&quot;&gt;CRAN package
page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This releases updates to the 2025 holidays for China, Singapore, and
Taiwan.&lt;/p&gt;
&lt;p&gt;The full details from &lt;code&gt;NEWS.Rd&lt;/code&gt; follow.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-version-0.1.1-2026-04-15&quot;&gt;Changes in version 0.1.1
(2026-04-15)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Synchronized with QuantLib 1.42 released two days ago&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Calendar updates for China, Singapore, Taiwan&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/&quot;&gt;CRANberries&lt;/a&gt;, there
is a diffstat report for &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/04/15/#qlcal_0.1.1&quot;&gt;this
release&lt;/a&gt;. See the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/qlcal-r.html&quot;&gt;project page&lt;/a&gt;
and package documentation for more details, and more examples.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;. You can also sponsor my &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/2026/04/03#sponsor_tour_de_shore_202&quot;&gt;Tour
de Shore 2026 ride in support of the Maywood Fine Arts Center&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Wed, 15 Apr 2026 13:07:00 +0000</pubDate>

</item> 
<item>
	<title>Steinar H. Gunderson: Looking for work</title>
	<guid>http://blog.sesse.net/blog/tech/2026-04-14-17-44_looking_for_work.html</guid>
	<link>http://blog.sesse.net/blog/tech/2026-04-14-17-44_looking_for_work.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/sesse.png&quot; width=&quot;74&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;It seems my own plans and life&#39;s plans diverged this spring,
so I am in the market for a new job. So if you&#39;re looking for
someone with a long track record making your code go brrr
really fast, give me a ping (contact information at
&lt;a href=&quot;https://www.sesse.net&quot;&gt;my homepage&lt;/a&gt;). Working from Oslo
(on-site or remote), CV available upon request. No AI boosterism
or cryptocurrency grifters, please :-)&lt;/p&gt; </description> 
	<pubDate>Tue, 14 Apr 2026 16:44:00 +0000</pubDate>

</item> 
<item>
	<title>Dirk Eddelbuettel: anytime 0.3.13 on CRAN: Mostly Minor Bugfix</title>
	<guid>http://dirk.eddelbuettel.com/blog/2026/04/14#anytime_0.3.13</guid>
	<link>http://dirk.eddelbuettel.com/blog/2026/04/14#anytime_0.3.13</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dirk.png&quot; width=&quot;65&quot; height=&quot;90&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;A maintenance release 0.3.13 of the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/anytime.html&quot;&gt;anytime&lt;/a&gt;
package arrived on &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; today,
sticking with the roughly yearly schedule we have now. Binaries for &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt; have been built
already. The package is fairly feature-complete, and code and
functionality remain mature and stable.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dirk.eddelbuettel.com/code/anytime.html&quot;&gt;anytime&lt;/a&gt;
is a very focused package aiming to do just one thing &lt;em&gt;really&lt;/em&gt;
well: to convert &lt;em&gt;anything&lt;/em&gt; in integer, numeric, character,
factor, ordered, … input format to either POSIXct (when called as
&lt;code&gt;anytime&lt;/code&gt;) or Date objects (when called as
&lt;code&gt;anydate&lt;/code&gt;) – and to do so &lt;em&gt;without requiring a format
string&lt;/em&gt; as well as &lt;em&gt;accomodating different formats in one input
vector&lt;/em&gt;. See the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/anytime.html&quot;&gt;anytime&lt;/a&gt; page,
the &lt;a href=&quot;https://github.com/eddelbuettel/anytime&quot;&gt;GitHub repo&lt;/a&gt;
for a few examples, the nice &lt;a href=&quot;https://cloud.r-project.org/web/packages/anytime/vignettes/anytime-introduction.pdf&quot;&gt;pdf
vignette&lt;/a&gt;, and the beautiful &lt;a href=&quot;https://eddelbuettel.github.io/anytime/&quot;&gt;documentation site&lt;/a&gt;
for all documentation.&lt;/p&gt;
&lt;p&gt;This release was triggered by a bizarre bug seen on elementary os 8.
For “reason” &lt;a href=&quot;https://dirk.eddelbuettel.com/code/anytime.html&quot;&gt;anytime&lt;/a&gt; was
taking note on startup where it runs, and used a small and simply piece
of code reading &lt;code&gt;/etc/os-release&lt;/code&gt; when it exists. We assumed
sane content, but this particular operating system and releases managed
to have a duplicate entry throwing us spanner. So now this code is
robust to duplicates, and no longer executed on each startup but “as
needed” which is a net improvement. We also switched the vignette to
being deployed by the new &lt;code&gt;Rcpp::asis()&lt;/code&gt; driver.&lt;/p&gt;
&lt;p&gt;The short list of changes follows.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-anytime-version-0.3.13-2026-04-14&quot;&gt;Changes in anytime
version 0.3.13 (2026-04-14)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Continuous integration has received minor updates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The vignette now use the &lt;code&gt;Rcpp::asis()&lt;/code&gt; driver, and
references have been refreshed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stateful &#39;where are we running&#39; detection is now more robust, and
has been moved from running on each startup to a cached &#39;as needed&#39;
case&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries&quot;&gt;CRANberries&lt;/a&gt;, there
is also a diffstat report of &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2025/07/14#anytime_0.3.12&quot;&gt;changes
relative to the previous release&lt;/a&gt;. The &lt;a href=&quot;https://github.com/eddelbuettel/anytime/issues&quot;&gt;issue tracker&lt;/a&gt;
tracker off the &lt;a href=&quot;https://github.com/eddelbuettel/anytime&quot;&gt;GitHub
repo&lt;/a&gt; can be use for questions and comments. More information about
the package is at the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/anytime.html&quot;&gt;package page&lt;/a&gt;,
the &lt;a href=&quot;https://github.com/eddelbuettel/anytime&quot;&gt;GitHub repo&lt;/a&gt;,
in the &lt;a href=&quot;https://cloud.r-project.org/web/packages/anytime/vignettes/anytime-introduction.pdf&quot;&gt;vignette&lt;/a&gt;,
and at the &lt;a href=&quot;https://eddelbuettel.github.io/anytime/&quot;&gt;documentation&lt;/a&gt;
site.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can now &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;. You can also sponsor my &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/2026/04/03#sponsor_tour_de_shore_202&quot;&gt;Tour
de Shore 2026 ride in support of the Maywood Fine Arts Center&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Tue, 14 Apr 2026 15:07:00 +0000</pubDate>

</item> 
<item>
	<title>Russell Coker: Furilabs FLX1s Finally Working</title>
	<guid>https://etbe.coker.com.au/?p=5976</guid>
	<link>https://etbe.coker.com.au/2026/04/14/furilabs-flx1s-finally-working/</link>
     <description>  &lt;p&gt;I’ve been using the &lt;a href=&quot;https://etbe.coker.com.au/2026/01/19/furilabs-flx1s/&quot;&gt;Furilabs FLX1s phone [1]&lt;/a&gt; as my daily driver for 6 weeks, it’s a decent phone, not as good as I hoped but good enough to use every day and rely on for phone calls about job interviews etc. I intend to keep using it as my main phone and as a platform to improve phone software in Debian as you really can’t effectively find bugs unless you use the platform for important tasks.&lt;/p&gt;
&lt;h2&gt;Support Problems&lt;/h2&gt;
&lt;p&gt;I previously wrote about the phone after I received it without a SIM caddy on the 13th of Jan. I had a saga with support about this, on the 16th of Jan one support person said that they would ship it immediately but didn’t provide a tracking number or any indication of when it would arrive. On the 5th of Feb I contacted support again and asked how long it would be, the new support person seemed to have no record of my previous communication but said that they would send it. On the 17th of Feb I made another support request including asking for a way of direct communication as the support email came from an address that wouldn’t accept replies, I was asked for a photo showing where the problem is. The support person also said that they might have to send a replacement phone!&lt;/p&gt;
&lt;p&gt;The last support request I sent included my disappointment at the time taken to resolve the issue and the proposed solution of replacing the entire phone (why have two international shipments of a fragile and expensive phone when a single letter with a cheap SIM caddy would do?). I didn’t receive a reply but the SIM caddy arrived on the 2nd of Mar. Here is a pic of the SIM caddy and the package it came in:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.coker.com.au/blogpics/2026/simpackage-big.jpg&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;540px&quot; src=&quot;https://www.coker.com.au/blogpics/2026/simpackage.jpg&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One thing that should be noted is that some of the support people seemed to be very good at their jobs and they were all friendly. It was the system that failed here, turning a minor issue of a missing part into a 6 week saga.&lt;/p&gt;
&lt;p&gt;Furilabs needs to do the following to address this issue:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make it possible to reply directly to a message from a support person. Accept email with a custom subject to sort it, give a URL for a web form, anything. Collating discussions with a customer allows giving better support while taking less time for the support people.&lt;/li&gt;
&lt;li&gt;Have someone monitor every social media address that is used by the company. When someone sends a support request in a public Mastodon post it indicates that something has gone wrong and you want to move quickly to resolve it.&lt;/li&gt;
&lt;li&gt;Take care of the little things, like sending a tracking number for every parcel. If it’s something too small for a parcel (the SIM caddy could have fit in a regular letter) then just tell the customer what date it was posted and where it was posted from so they have some idea of when it will arrive.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not just a single failure of Furilabs support, it’s a systemic failure of their processes.&lt;/p&gt;
&lt;h2&gt;Problems I Will Fix – Unless Someone Beats Me to it&lt;/h2&gt;
&lt;p&gt;Here are some issues I plan to work on.&lt;/p&gt;
&lt;h3&gt;Smart Watch Support&lt;/h3&gt;
&lt;p&gt;I need to port one of the smart watch programs to Debian. Also I want to make one of them support the &lt;a href=&quot;https://etbe.coker.com.au/2025/08/19/colmi-p80-smartwatch/&quot;&gt;Colmi P80 [2]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A smart watch significantly increases the utility of a phone even though IMHO they aren’t doing nearly all the things that they could and should do. When we get Debian programs talking to the PineTime it will make a good platform for development of new smart phone and OS features.&lt;/p&gt;
&lt;h3&gt;Nextcloud&lt;/h3&gt;
&lt;p&gt;I have ongoing issues of my text Nextcloud installation on a Debian VM not allowing connection from the Linux desktop app (as packaged in Debian) and from the Android client (from f-droid). The desktop client works with a friend’s Nextcloud installation on Ubuntu so I may try running it on an Ubuntu VM I run while waiting for the Debian issue to get resolved. There was a bug recently fixed in Nextcloud that appears related so maybe the next release will fix it.&lt;/p&gt;
&lt;p&gt;For the moment I’ve been running without these features and I call and SMS people from knowing their number or just returning calls. Phone calls generally aren’t very useful for me nowadays except when applying for jobs. If I could deal with recruiters and hiring managers via video calls then I would consider just not having a phone number.&lt;/p&gt;
&lt;h3&gt;Wifi IPv6&lt;/h3&gt;
&lt;p&gt;Periodically IPv6 support just stops working, I can’t ping the gateway. I turn wifi off and on again and it works. This might be an issue with my wifi network configuration. This might be an issue with the way I have configured my IPv6 networking, although that problem doesn’t happen with any of my laptops.&lt;/p&gt;
&lt;h3&gt;Chatty Sorting&lt;/h3&gt;
&lt;p&gt;Chatty is the program for SMS that is installed by default (part of the phosh/phoc setup), it also does Jabber. Version 0.8.7 is installed which apparently has some Furios modifications and it doesn’t properly support sorting SMS/Jabber conversations. Version 0.8.9 from Debian sorts in the same way as most SMS and Jabber programs with the most recent at the top. But the Debian version doesn’t support Jabber (only SMS and Matrix). When I went back to the Furilabs version of Chatty it still sorted for a while but then suddenly stopped. Killing Chatty (not just closing the window and reopening it) seems to make it sort the conversations sometimes.&lt;/p&gt;
&lt;h2&gt;Problems for Others to Fix&lt;/h2&gt;
&lt;p&gt;Here are the current issues I have starting with the most important.&lt;/p&gt;
&lt;h3&gt;Important&lt;/h3&gt;
&lt;p&gt;The following issues seriously reduce the usability of the device.&lt;/p&gt;
&lt;h4&gt;Hotspot&lt;/h4&gt;
&lt;p&gt;The Wifi hotspot functionality wasn’t working for a few weeks, &lt;a href=&quot;https://github.com/FuriLabs/issue-tracker/issues/216&quot;&gt;this Gitlab issue seems to match it [3]&lt;/a&gt;. It started working correctly for a day and I was not sure if an update I applied fixed the bug or if it’s some sort of race condition that worked for this boot and will return next time I reboot it. Later on I rebooted it and found that it’s somewhat random whether it works or now.&lt;/p&gt;
&lt;p&gt;Also while it is mostly working it seemed to stop working about every 25 minutes or so and I had to turn it off and on again to get it going.&lt;/p&gt;
&lt;p&gt;On another day it went to a stage where it got repeated packet loss when I pinged the phone as a hotspot from my laptop. A pattern of 3 ping responses and 3 “Destination Host Unreachable” messages was often repeated.&lt;/p&gt;
&lt;p&gt;I don’t know if this is related to the way Android software is run in a container to access the hardware.&lt;/p&gt;
&lt;h4&gt;4G Reliability&lt;/h4&gt;
&lt;p&gt;Sometimes 4G connectivity has just stopped, sometimes I can stop and restart the 4G data through software to fix it and sometimes I need to use the hardware switch. I haven’t noticed this for a week or two so there is a possibility that one fix addressed both Hotspot and 4G.&lt;/p&gt;
&lt;p&gt;One thing that I will do is setup monitoring to give an alert on the phone if it can’t connect to the Internet. I don’t want it to just quietly stop doing networking stuff and not tell me!&lt;/p&gt;
&lt;h4&gt;On-screen Keyboard&lt;/h4&gt;
&lt;p&gt;The compatibility issues of the GNOME and KDE on-screen keyboards are getting me. I use phosh/phoc as the login environment as I want to stick to defaults at first to not make things any more difficult than they need to be. When I use programs that use QT such as Nheko the keyboard doesn’t always appear when it should and it forgets the setting for “word completion” (which means spelling correction).&lt;/p&gt;
&lt;p&gt;The spelling correction system doesn’t suggest replacing “dont” with “don’t” which is really annoying as a major advantage for spelling checkers on touch screens is inserting an apostrophy. An apostrophy takes at least 3* longer than a regular character and saving that delay makes a difference to typing speed.&lt;/p&gt;
&lt;p&gt;The spelling correction doesn’t correct two words run together.&lt;/p&gt;
&lt;h3&gt;Medium Priority&lt;/h3&gt;
&lt;p&gt;These issues are ongoing annoyances.&lt;/p&gt;
&lt;h4&gt;Delay on Power Button&lt;/h4&gt;
&lt;p&gt;In the best case scenario this phone has a much slower response to pressing the power button than the Android phones I tested (Huawei Mate 10 Pro and Samsung Galaxy Note 9) and a much slower response than my recollection of the vast majority of Android phones I’ve ever used. For testing pressing buttons on the phones simultaneously resulted in the Android phone screens lighting up much sooner. Something like 200ms vs 600ms – I don’t have a good setup to time these things but it’s very obvious when I test.&lt;/p&gt;
&lt;p&gt;In a less common case scenario (the phone having been unused for some time) the response can be something like 5 seconds. The worst case scenario is something in excess of 20 seconds.&lt;/p&gt;
&lt;p&gt;For UI designers, if you get multiple press events from a button that can turn the screen on/off please make your UI leave the screen on and ignore all the stacked events. Having the screen start turning on and off repeatedly when the phone recovers and processes all the button presses isn’t good, especially when each screen flash takes half a second.&lt;/p&gt;
&lt;h4&gt;Notifications&lt;/h4&gt;
&lt;p&gt;Touching on a notification for a program often doesn’t bring it to the foreground. I haven’t yet found a connection between when it does and when it doesn’t.&lt;/p&gt;
&lt;p&gt;Also the lack of icons in the top bar on the screen to indicate notifications is annoying, but that seems to be an issue of design not the implementation.&lt;/p&gt;
&lt;h4&gt;Charge Delay&lt;/h4&gt;
&lt;p&gt;When I connect the phone to a power source there is a delay of about 22 seconds before it starts to charge. Having it miss 22 seconds of charge time is no big deal, having to wait 22 seconds to be sure it’s charging before leaving it is really annoying. Also the phone makes an audible alert when it gets to 0% charge which woke me up one night when I had failed to push the USB-C connector in hard enough. This phone requires a slightly deeper connector than most phones so with some plugs it’s easy to not quite insert them far enough.&lt;/p&gt;
&lt;h4&gt;Torch aka Flash&lt;/h4&gt;
&lt;p&gt;The light for the “torch” or flash for camera is not bright at all. In a quick test staring into the light from 40cm away wasn’t unpleasant compared to my Huawei Mate 10 Pro which has a light bright enough that it hurts to look at it from 4 meters away.&lt;/p&gt;
&lt;p&gt;Because of this photos at night are not viable, not even when photographing something that’s less than a meter away.&lt;/p&gt;
&lt;p&gt;The torch has a brightness setting which doesn’t seem to change the brightness, so it seems likely that this is a software issue and the brightness is set at a low level and the software isn’t changing it.&lt;/p&gt;
&lt;h4&gt;Audio&lt;/h4&gt;
&lt;p&gt;When I connect to my car the Lollypop player starts playing before the phone directs audio to the car, so the music starts coming from the phone for about a second. This is an annoying cosmetic error. Sometimes audio playing pauses for no apparent reason.&lt;/p&gt;
&lt;p&gt;It doesn’t support the phone profile with Bluetooth so phone calls can’t go through the car audio system. Also it doesn’t always connect to my car when I start driving, sometimes I need to disable and enable Bluetooth to make it connect.&lt;/p&gt;
&lt;p&gt;When I initially set the phone up Lollypop would send the track name when playing music through my car (Nissan LEAF) Bluetooth connection, after an update that often doesn’t happen so the car doesn’t display the track name or whether the music is playing but the pause icon works to pause and resume music (sometimes it does work).&lt;/p&gt;
&lt;p&gt;About 30 seconds into a phone call it switches to hands-free mode while the icon to indicate hands-free is not highlighted, so I have to press the hands-free button twice to get it back to normal phone mode.&lt;/p&gt;
&lt;h3&gt;Low Priority&lt;/h3&gt;
&lt;p&gt;I could live with these things remaining as-is but it’s annoying.&lt;/p&gt;
&lt;h4&gt;Ticket Mode&lt;/h4&gt;
&lt;p&gt;There is apparently some code written to display tickets on screen without unlocking. I want to get this working and store screen-caps of the Android barcode screens of the different loyalty cards so I can scan them without unlocking. My threat model does not include someone trying to steal my phone to get a free loaf of bread on the bakery loyalty program.&lt;/p&gt;
&lt;h4&gt;Camera&lt;/h4&gt;
&lt;p&gt;The camera app works with both the back and front cameras, which is nice, and sadly based on my experience with other Debian phones it’s noteworthy. The problem is that it takes a long time to take a photo, something like a second after the button is pressed – long enough for you to think that it just silently took a photo and then move the phone.&lt;/p&gt;
&lt;p&gt;The UI of the furios-camera app is also a little annoying, when viewing photos there is an icon at the bottom left of the screen for a video camera and an icon at the bottom right with a cross. Which every time makes me think “record videos” and “leave this screen” not “return to taking photos” and “delete current photo”. I can get used to the surprising icons, but being so slow is a real problem.&lt;/p&gt;
&lt;h4&gt;GUI App Installation&lt;/h4&gt;
&lt;p&gt;The program for managing software doesn’t work very well. It said that there were two updates for Mesa package needed, but didn’t seem to want to install them. I ran “flatpak update” as root to fix that. The process of selecting software defaults to including non-free, and most of the available apps are for desktop/laptop with no way to search for phone/tablet apps.&lt;/p&gt;
&lt;p&gt;Generally I think it’s best to just avoid this and use apt and flatpak directly from the command-line. Being able to ssh to my phone from a desktop or laptop is good!&lt;/p&gt;
&lt;h4&gt;Android Emulation&lt;/h4&gt;
&lt;p&gt;The file &lt;b&gt;/home/furios/.local/share/andromeda/data/system/uiderrors.txt&lt;/b&gt; is created by the Andromeda system which runs Android apps in a LXC container and appears to grow without end. After using the phone for a month it was 3.5G in size. The disk space usage isn’t directly a problem, out of the 110G storage space only 17G is used and I don’t have a need to put much else on it, even if I wanted to put backups of /home from my laptop on it when travelling that would still leave plenty of free space. But that sort of thing is a problem for backing up the phone and wasting 3.5G out of 110G total is a fairly significant step towards breaking the entire system.&lt;/p&gt;
&lt;p&gt;Also having lots of logging messages from a subsystem that isn’t even being used is a bad sign.&lt;/p&gt;
&lt;p&gt;I just tried using it and it doesn’t start from either the settings menu or from the f-droid icon. Android isn’t that important to me as I want to get away from the proprietary app space so I won’t bother trying this any more.&lt;/p&gt;
&lt;h2&gt;Unfixable Problems&lt;/h2&gt;
&lt;h3&gt;Unlocking&lt;/h3&gt;
&lt;p&gt;After getting used to fingerprint unlocking going back to a password is a pain. I think that the hardware isn’t sufficient for modern quality face recognition that can’t be fooled by a photo and there isn’t fingerprint hardware.&lt;/p&gt;
&lt;p&gt;When I first used an Android phone using a pin to unlock didn’t seem like a big deal, but after getting used to fingerprint unlock it’s a real drag to go without. This is a real annoyance when doing things like checking Wikipedia while watching TV.&lt;/p&gt;
&lt;p&gt;This phone would be significantly improved with a fingerprint sensor or a camera that worked well enough for face unlock.&lt;/p&gt;
&lt;h3&gt;Plasma Mobile&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/linux/comments/1o0ylc5/furios_a_linux_phone_that_works/&quot;&gt;According to Reddit Plasma Mobile (KDE for phones) doesn’t support Halium and can never work on this phone because of it [4]&lt;/a&gt;. This is one of a number of potential issues with the phone, running on hardware that was never designed for open OSs is always going to have issues.&lt;/p&gt;
&lt;h3&gt;Wifi MAC Address&lt;/h3&gt;
&lt;p&gt;The MAC keeps changing on reboot so I can’t assign a permanent IPv4 address to the phone. It appears from the MAC prefix of 00:08:22 that the network hardware is made in InPro Comm which is well known for using random addresses in the products it OEMs. They apparently have one allocation of 2^24 addresses and each device randomly chooses a MAC from that range on boot.&lt;/p&gt;
&lt;p&gt;In the settings for a Wifi connection the “Identity” tab has a field named “Cloned Address” which can be set to “Stable for SSID” that prevents it from changing and allows a static IP address allocation from DHCP. It’s not ideal but it works.&lt;/p&gt;
&lt;p&gt;Network Manager can be configured to have a permanent assigned MAC address for all connections or for just some connections. In the past for such things I have copied MAC addresses from ethernet devices that were being discarded and used them for such things. For the moment the “Stable for SSID” setting does what I need but I will consider setting a permanent address at some future time.&lt;/p&gt;
&lt;h3&gt;Docks&lt;/h3&gt;
&lt;p&gt;Having the ability to connect to a dock is really handy. The PinePhonePro and Librem5 support it and on the proprietary side a lot of Samsung devices do it with a special desktop GUI named Dex and some Huawei devices also have a desktop version of the GUI. It’s unfortunate that this phone can’t do it.&lt;/p&gt;
&lt;h2&gt;The Good Things&lt;/h2&gt;
&lt;p&gt;It’s good to be able to ssh in to my phone, even if the on-screen keyboard worked as well as the Android ones it would still be a major pain to use when compared to a real keyboard. The phone doesn’t support connecting to a dock (unlike Samsung phones I’ve used for which I found Dex to be very useful with a 4K monitor and proper keyboard) so ssh is the best way to access it.&lt;/p&gt;
&lt;p&gt;This phone has very reliable connections to my home wifi. I’ve had ssh sessions from my desktop to my phone that have remained open for multiple days. I don’t really need this, I’ve just forgotten to logout and noticed days later that the connection is still running. None of the other phones running Debian could do that.&lt;/p&gt;
&lt;p&gt;Running the same OS on desktop and phone makes things easier to test and debug.&lt;/p&gt;
&lt;p&gt;Having support for all the things that Linux distributions support is good. For example none of the Android music players support all the encodings of audio that comes from YouTube so to play all of my music collection on Android I would need to transcode most of them which means either losing quality, wasting storage space, or both. While Lollypop plays FLAC0, mp3, m4a, mka, webm, ogg, and more.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is a step towards where I want to go but it’s far from the end goal.&lt;/p&gt;
&lt;p&gt;The PinePhonePro and Librem5 are more open hardware platforms which have some significant benefits. But the battery life issues make them unusable for me.&lt;/p&gt;
&lt;p&gt;Running Mobian on a OnePlus 6 or Droidian on a Note 9 works well for the small tablet features but without VoLTE. While the telcos have blocked phones without VoLTE data devices still work so if recruiters etc would stop requiring phone calls then I could make one of them an option.&lt;/p&gt;
&lt;p&gt;The phone works well enough that it could potentially be used by one of my older relatives. If I could ssh in to my parents phones when they mess things up that would be convenient.&lt;/p&gt;
&lt;p&gt;I’ve run this phone as my daily driver since the 3rd of March and it has worked reasonably well. 6 weeks compared to my previous use of the PinePhonePro for 3 days. This is the first time in 15 years that a non-Android phone has worked for me personally. I have briefly used an iPhone 7 for work which basically did what it needed to do, it was at the bottom of the pile of unused phones at work and I didn’t want to take a newer iPhone that could be used by someone who’s doing more than the occasional SMS or Slack message.&lt;/p&gt;
&lt;p&gt;So this is better than it might have been, not as good as I hoped, but a decent platform to use it while developing for it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://etbe.coker.com.au/2026/01/19/furilabs-flx1s/&quot;&gt; https://etbe.coker.com.au/2026/01/19/furilabs-flx1s/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://etbe.coker.com.au/2025/08/19/colmi-p80-smartwatch/&quot;&gt; https://etbe.coker.com.au/2025/08/19/colmi-p80-smartwatch/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[3]&lt;a href=&quot;https://github.com/FuriLabs/issue-tracker/issues/216&quot;&gt; https://github.com/FuriLabs/issue-tracker/issues/216&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[4]&lt;a href=&quot;https://www.reddit.com/r/linux/comments/1o0ylc5/furios_a_linux_phone_that_works/&quot;&gt; https://tinyurl.com/27vkulbr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/01/19/furilabs-flx1s/&quot; rel=&quot;bookmark&quot; title=&quot;Furilabs FLX1s&quot;&gt;Furilabs FLX1s&lt;/a&gt; &lt;small&gt;The Aim I have just got a Furilabs FLX1s [1]...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2010/01/31/my-ideal-mobile-phone/&quot; rel=&quot;bookmark&quot; title=&quot;My Ideal Mobile Phone&quot;&gt;My Ideal Mobile Phone&lt;/a&gt; &lt;small&gt;Based on my experience testing the IBM Seer software on...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2024/12/15/oneplus-6-debian/&quot; rel=&quot;bookmark&quot; title=&quot;OnePlus 6 Debian&quot;&gt;OnePlus 6 Debian&lt;/a&gt; &lt;small&gt;I recently got a OnePlus 6 for the purpose of...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Tue, 14 Apr 2026 09:31:17 +0000</pubDate>

</item> 
<item>
	<title>Dirk Eddelbuettel: littler 0.3.23 on CRAN: Mostly Internal Fixes</title>
	<guid>http://dirk.eddelbuettel.com/blog/2026/04/12#littler_0.3.23</guid>
	<link>http://dirk.eddelbuettel.com/blog/2026/04/12#littler_0.3.23</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dirk.png&quot; width=&quot;65&quot; height=&quot;90&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;&lt;img alt=&quot;max-heap image&quot; height=&quot;100&quot; src=&quot;https://dirk.eddelbuettel.com/images/letter-r.png&quot; style=&quot;float: left; margin: 15px 30px 15px 15px;&quot; width=&quot;100&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The twentyfourth release of &lt;a href=&quot;https://dirk.eddelbuettel.com/code/littler.html&quot;&gt;littler&lt;/a&gt; as a
&lt;a href=&quot;https://cran.r-project.org/package=littler&quot;&gt;CRAN package&lt;/a&gt;
landed on CRAN just now, following in the now twenty-one year history
(!!) as a (initially non-CRAN) package started by &lt;a href=&quot;https://jeffreyhorner.blogspot.com/&quot;&gt;Jeff&lt;/a&gt; in 2006, and joined
by me a few weeks later.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dirk.eddelbuettel.com/code/littler.html&quot;&gt;littler&lt;/a&gt;
is the first command-line interface for R as it predates
&lt;code&gt;Rscript&lt;/code&gt;. It allows for piping as well for &lt;em&gt;shebang&lt;/em&gt;
scripting via &lt;code&gt;#!&lt;/code&gt;, uses command-line arguments more
consistently and still &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/2014/09/02#littler-faster-at-doing-nothing&quot;&gt;starts
faster&lt;/a&gt;. It also always loaded the &lt;code&gt;methods&lt;/code&gt; package which
&lt;code&gt;Rscript&lt;/code&gt; only began to do in later years.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dirk.eddelbuettel.com/code/littler.html&quot;&gt;littler&lt;/a&gt;
lives on Linux and Unix, has its difficulties on macOS due to
some-braindeadedness there (who ever thought case-insensitive
filesystems as a default were a good idea?) and simply does not exist on
Windows (yet – the build system could be extended – see &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rinside.html&quot;&gt;RInside&lt;/a&gt; for
an existence proof, and volunteers are welcome!). See the &lt;a href=&quot;https://cran.r-project.org/web/packages/littler/vignettes/littler-faq.html&quot;&gt;FAQ
vignette&lt;/a&gt; on how to add it to your &lt;code&gt;PATH&lt;/code&gt;. A few examples
are highlighted at the &lt;a href=&quot;https://github.com/eddelbuettel/littler&quot;&gt;Github repo&lt;/a&gt;:, as well
as in the &lt;a href=&quot;https://cran.r-project.org/web/packages/littler/vignettes/littler-examples.html&quot;&gt;examples
vignette&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release, which comes just two months after the previous &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/2026/02/04#littler_0.3.22&quot;&gt;0.3.22
release&lt;/a&gt; that brought a few new features, is mostly internal. (The
previous release erroneously had 0.3.23 in its blog and social media
posts, it really was 0.3.22 and this one now is is 0.3.23.) Mattias
Ellert address a nag (when building for a distribution) about one
example file with a shebang not have excutable modes. I accommodated the
ever-changing interface the C API of R (within about twelve hours of
being notified). A few other smaller changes were made as well polishing
a script or two or usual, see below for more.&lt;/p&gt;
&lt;p&gt;The full change description follows.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-littler-version-0.3.23-2026-04-12&quot;&gt;Changes in littler
version 0.3.23 (2026-04-12)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Changes in examples scripts&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Correct spelling in &lt;code&gt;installGithub.r&lt;/code&gt; to lower-case
h&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;r2u.r&lt;/code&gt; now recognises ‘resolute’ aka
26.06&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;installRub.r&lt;/code&gt; can install (more easily) from
r-multiverse&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A file permission was corrected (Mattias Ellert in &lt;a href=&quot;https://github.com/eddelbuettel/littler/pull/131&quot;&gt;#131&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes in package&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Update script count and examples in README.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuous intgegration scripts received minor updates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The C level access to the R API was updated to reflect most
recent standards (Dirk in &lt;a href=&quot;https://github.com/eddelbuettel/littler/pull/132&quot;&gt;#132&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;My &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/&quot;&gt;CRANberries&lt;/a&gt;
service provides a comparison to &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/02/04/#littler_0.3.22&quot;&gt;the
previous release&lt;/a&gt;. Full details for the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/littler.html&quot;&gt;littler&lt;/a&gt;
release are provided as usual at the &lt;a href=&quot;https://github.com/eddelbuettel/littler/blob/master/ChangeLog&quot;&gt;ChangeLog&lt;/a&gt;
page, and also on the &lt;a href=&quot;https://eddelbuettel.github.io/littler/&quot;&gt;package docs website&lt;/a&gt;.
The code is available via the &lt;a href=&quot;https://github.com/eddelbuettel/littler&quot;&gt;GitHub&lt;/a&gt; repo, from
tarballs and now of course also from &lt;a href=&quot;https://cran.r-project.org/package=littler&quot;&gt;its CRAN page&lt;/a&gt; and
via &lt;code&gt;install.packages(&quot;littler&quot;)&lt;/code&gt;. Binary packages are
available directly in &lt;a href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt; as
well as (in a day or two) &lt;a href=&quot;https://cran.r-project.org/bin/linux/ubuntu&quot;&gt;Ubuntu binaries at
CRAN&lt;/a&gt; thanks to the tireless Michael Rutter. Comments and suggestions
are welcome at the &lt;a href=&quot;https://github.com/eddelbuettel/littler&quot;&gt;GitHub&lt;/a&gt; repo.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;. You can also sponsor my &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/2026/04/03#sponsor_tour_de_shore_2026&quot;&gt;Tour
de Shore 2026 ride in support of the Maywood Fine Arts Center&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Sun, 12 Apr 2026 14:47:00 +0000</pubDate>

</item> 
<item>
	<title>Colin Watson: Free software activity in March 2026</title>
	<guid>tag:www.chiark.greenend.org.uk,2026-04-12:/~cjwatson/blog/activity-2026-03.html</guid>
	<link>https://www.chiark.greenend.org.uk/~cjwatson/blog/activity-2026-03.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/cjwatson.png&quot; width=&quot;70&quot; height=&quot;82&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;My Debian contributions this month were all &lt;a href=&quot;https://www.freexian.com/about/debian-contributions/&quot;&gt;sponsored&lt;/a&gt; by Freexian.&lt;/p&gt;
&lt;p&gt;You can also support my work directly via &lt;a href=&quot;https://liberapay.com/cjwatson&quot;&gt;Liberapay&lt;/a&gt; or &lt;a href=&quot;https://github.com/sponsors/cjwatson&quot;&gt;GitHub Sponsors&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;OpenSSH&lt;/h2&gt;
&lt;p&gt;I fixed &lt;a href=&quot;https://security-tracker.debian.org/tracker/CVE-2026-3497&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2026-3497&lt;/a&gt; in unstable, thanks to a fix in Ubuntu by Marc Deslauriers.  Relatedly, I applied an Ubuntu patch by Athos Ribeiro to &lt;a href=&quot;https://bugs.debian.org/1131206&quot;&gt;not default to weak &lt;span class=&quot;caps&quot;&gt;GSS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; exchange algorithms&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’m looking forward to being able to split out &lt;span class=&quot;caps&quot;&gt;GSS&lt;/span&gt;-&lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; key exchange support in OpenSSH once Ubuntu 26.04 &lt;span class=&quot;caps&quot;&gt;LTS&lt;/span&gt; has been released!  This stuff will still be my problem, but at least it won’t be in packages that &lt;a href=&quot;https://qa.debian.org/popcon.php?package=openssh&quot;&gt;nearly everyone has installed&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Python packaging&lt;/h2&gt;
&lt;p&gt;New upstream versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dill&lt;/li&gt;
&lt;li&gt;django-modeltranslation&lt;/li&gt;
&lt;li&gt;isort&lt;/li&gt;
&lt;li&gt;langtable&lt;/li&gt;
&lt;li&gt;pathos&lt;/li&gt;
&lt;li&gt;pendulum&lt;/li&gt;
&lt;li&gt;pox&lt;/li&gt;
&lt;li&gt;ppft&lt;/li&gt;
&lt;li&gt;pydantic-extra-types&lt;/li&gt;
&lt;li&gt;pytango&lt;/li&gt;
&lt;li&gt;python-asyncssh&lt;/li&gt;
&lt;li&gt;python-datamodel-code-generator&lt;/li&gt;
&lt;li&gt;python-evalidate&lt;/li&gt;
&lt;li&gt;python-packaging (including fixes for python-hatch-requirements-txt and python-pyproject-examples)&lt;/li&gt;
&lt;li&gt;python-zxcvbn-rs-py&lt;/li&gt;
&lt;li&gt;rpds-py&lt;/li&gt;
&lt;li&gt;smart-open&lt;/li&gt;
&lt;li&gt;trove-classifiers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I packaged &lt;a href=&quot;https://bugs.debian.org/1130121&quot;&gt;pybind11-stubgen&lt;/a&gt;, needed for new upstream versions of pytango.  Tests of reproducible builds revealed that it didn’t generate imports in a stable order; I &lt;a href=&quot;https://github.com/pybind/pybind11-stubgen/pull/293&quot;&gt;contributed a fix for that upstream&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I worked with the security team to release &lt;a href=&quot;https://lists.debian.org/debian-security-announce/2026/msg00070.html&quot;&gt;&lt;span class=&quot;caps&quot;&gt;DSA&lt;/span&gt;-6161-1&lt;/a&gt; in multipart, fixing &lt;a href=&quot;https://security-tracker.debian.org/tracker/CVE-2026-28356&quot;&gt;&lt;span class=&quot;caps&quot;&gt;CVE&lt;/span&gt;-2026-28356&lt;/a&gt; (&lt;a href=&quot;https://github.com/defnull/multipart/security/advisories/GHSA-p2m9-wcp5-6qw3&quot;&gt;upstream discussion&lt;/a&gt;).  (Most of the work for this was in February, but the vulnerability was still embargoed when I published my last monthly update.)&lt;/p&gt;
&lt;p&gt;In trixie-backports, I updated pytest-django to 4.12.0.&lt;/p&gt;
&lt;p&gt;I fixed a number of packages to support building with pyo3 0.28:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pendulum&lt;/li&gt;
&lt;li&gt;pydantic-core&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131586&quot;&gt;python-jellyfish&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;python-zxcvbn-rs-py&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131590&quot;&gt;rpds-py&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other build/test failures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1130519&quot;&gt;python-bcrypt: Upcoming rust-getrandom update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131677&quot;&gt;python-cotengrust: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: error[E0432]: unresolved import &lt;code&gt;rand::rngs::OsRng&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1127499&quot;&gt;austin: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: E ModuleNotFoundError: No module named ‘pycparser.plyparser’&lt;/a&gt; (&lt;a href=&quot;https://github.com/P403n1x87/austin/pull/349&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1122488&quot;&gt;taurus: &lt;span class=&quot;caps&quot;&gt;FTBFS&lt;/span&gt;: dh_auto_build: error: pybuild —build -i python{version} -p “3.14 3.13” returned exit code 13&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1129211&quot;&gt;python-datamodel-code-generator: Depends: python3-isort (&amp;lt; 8) but 8.0.0-1 is to be installed&lt;/a&gt; (&lt;a href=&quot;https://github.com/koxudaxi/datamodel-code-generator/pull/3011&quot;&gt;contributed upstream&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Rust packaging&lt;/h2&gt;
&lt;p&gt;New upstream versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rust-rpds&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Other bits and pieces&lt;/h2&gt;
&lt;p&gt;I upgraded tango to 10.1.2, and yubihsm-shell to 2.7.2.&lt;/p&gt;
&lt;h2&gt;Code reviews&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1130913&quot;&gt;python-backports.zstd: Obsolete with Python 3.14&lt;/a&gt; (sponsored partial fix from &lt;span class=&quot;caps&quot;&gt;YOKOTA&lt;/span&gt; Hiroshi)&lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Sun, 12 Apr 2026 10:13:15 +0000</pubDate>

</item> 
<item>
	<title>Russ Allbery: Review: The Teller of Small Fortunes</title>
	<guid>https://www.eyrie.org/~eagle/reviews/books/0-593-81590-4.html</guid>
	<link>https://www.eyrie.org/~eagle/reviews/books/0-593-81590-4.html</link>
     <description>  &lt;p&gt;Review: &lt;cite&gt;The Teller of Small Fortunes&lt;/cite&gt;, by Julie Leong&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Ace&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;November 2024&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-593-81590-4&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;324&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;The Teller of Small Fortunes&lt;/cite&gt; is a cozy found-family fantasy with a
roughly medieval setting. It was Julie Leong&#39;s first novel.
&lt;/p&gt;

&lt;p&gt;
Tao is a traveling teller of small fortunes. In her wagon, pulled by her
friendly mule Laohu, she wanders the small villages of Eshtera and reads
the trivial fortunes of villagers in the tea leaves. An upcoming injury, a
lost ring, a future kiss, a small business deal... she looks around the
large lines of fate and finds the small threads. After a few days, she
moves on, making her solitary way to another village.
&lt;/p&gt;

&lt;p&gt;
Tao is not originally from Eshtera. She is Shinn, which means she
encounters a bit of suspicion and hostility mixed with the fascination of
the exotic. (Language and culture clues lead me to think Shinara is
intended to be this world&#39;s not-China, but it&#39;s not a direct mapping.) Tao
uses the fascination to help her business; fortune telling is more
believable from someone who seems exotic. The hostility she&#39;s learned to
deflect and ignore. In the worst case, there&#39;s always another village.
&lt;/p&gt;

&lt;p&gt;
If you&#39;ve read any cozy found-family novels, you know roughly what happens
next. Tao encounters people on the road and, for various reasons, they
decide to travel together. The first two are a massive mercenary (Mash)
and a semi-reformed thief (Silt), who join Tao somewhat awkwardly after
Tao gives Mash a fortune that is far more significant than she intended.
One town later, they pick up an apprentice baker best known for her
misshapen pastries. They also collect a stray cat, because of course they
do. It&#39;s that sort of book.
&lt;/p&gt;

&lt;p&gt;
For me, this sort of novel lives or dies by the characters, so it&#39;s good
news that I liked Tao and enjoyed spending time with her. She&#39;s quiet,
resilient, competent, and self-contained, with a difficult past and some
mysteries and emotions the others can draw over time. She&#39;s also
thoughtful and introspective, which means the tight third-person narration
that almost always stays on Tao offers emotional growth to mull over. I
also liked Kina (the baker) and Mash; they&#39;re a bit more obvious and
straightforward, but Kina adds irrepressible energy and Mash is a good
example of the sometimes-gruff soldier with a soft heart. Silt was a bit
more annoying and I never entirely warmed to him, but he&#39;s tolerable and
does get a bit of much-needed (if superficial) character development.
&lt;/p&gt;

&lt;p&gt;
It takes some time for the reader to learn about the primary conflict of
the story (Tao does not give up her secrets quickly), so I won&#39;t spoil it,
but I thought it worked well. I was momentarily afraid the story would
develop a clear villain, but Leong has some satisfying alternate surprises
in store. The ending was well-done, although it is very happily-ever-after
in a way that may strike some readers as too neat. &lt;cite&gt;The Teller of
Small Fortunes&lt;/cite&gt; aims for a quiet and relaxed mood rather than forcing
character development through difficult choices; it&#39;s a fine aim for a
novel, but it won&#39;t match everyone&#39;s mood.
&lt;/p&gt;

&lt;p&gt;
I liked the world-building, although expect small and somewhat
disconnected details rather than an overarching theory of magic. Tao&#39;s
ability gets the most elaboration, for obvious reasons, and I liked how
Leong describes it and explores its consequences. Most of the attention in
the setting is on the friction, wistfulness, and small reminders of coming
from a different culture than everyone around you, but so long ago that
you are not fully a part of either world. This, I thought, was very
well-done and is one of the places where the story is comfortable with
complex feelings and doesn&#39;t try to reach a simplifying conclusion.
&lt;/p&gt;

&lt;p&gt;
There is one bit of the story that felt like it was taken directly out of
a &lt;cite&gt;Dungeons &amp;amp; Dragons&lt;/cite&gt; campaign to a degree that felt jarring, but
that was the only odd world-building note.
&lt;/p&gt;

&lt;p&gt;
This book felt like a warm cup of tea intended to comfort and relax,
without large or complex thoughts about the world. It&#39;s not intended to be
challenging; there are a few plot twists I didn&#39;t anticipate, but nothing
that dramatic, and I doubt anyone will be surprised by the conclusions it
reaches. It&#39;s a pleasant time with some nice people and just enough
tension and mystery to add some motivation to find out what happens next.
If that&#39;s what you&#39;re in the mood for, recommended. If you want a book
that has Things To Say or will put you on the edge of your seat, maybe
save this one for another mood.
&lt;/p&gt;

&lt;p&gt;
All the on-line sources I found for this book call it a standalone, but
&lt;cite&gt;The Keeper of Magical Things&lt;/cite&gt; is set in the same world, so I would
call it a loose series with different protagonists. &lt;cite&gt;The Teller of
Small Fortunes&lt;/cite&gt; is a complete story in one book, though.
&lt;/p&gt;

&lt;p&gt;Rating: 7 out of 10&lt;/p&gt; </description> 
	<pubDate>Sun, 12 Apr 2026 02:53:00 +0000</pubDate>

</item> 
<item>
	<title>Reproducible Builds: Reproducible Builds in March 2026</title>
	<guid>https://reproducible-builds.org/reports/2026-03/</guid>
	<link>https://reproducible-builds.org/reports/2026-03/</link>
     <description>  &lt;p class=&quot;lead&quot;&gt;&lt;strong&gt;Welcome to the March 2026 report from the &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible Builds&lt;/a&gt; project!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/reproducible-builds.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These reports outline what we’ve been up to over the past month, highlighting items of news from elsewhere in the increasingly-important area of software supply-chain security. As ever, if you are interested in contributing to the Reproducible Builds project, please see the &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#linux-kernel-hash-based-integrity-checking-proposed&quot;&gt;Linux kernel hash-based integrity checking proposed&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#distribution-work&quot;&gt;Distribution work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#tool-development&quot;&gt;Tool development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#upstream-patches&quot;&gt;Upstream patches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#documentation-updates&quot;&gt;Documentation updates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#two-new-academic-papers&quot;&gt;Two new academic papers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#misc-news&quot;&gt;Misc news&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;linux-kernel-hash-based-integrity-checking-proposed&quot;&gt;Linux kernel hash-based integrity checking proposed&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://lore.kernel.org/lkml/20260113-module-hashes-v4-0-0b932db9b56b@weissschuh.net/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/tux.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eric Biggers posted to the &lt;a href=&quot;https://lkml.org/&quot;&gt;Linux Kernel Mailing List&lt;/a&gt; in response to a &lt;a href=&quot;https://lore.kernel.org/lkml/20260113-module-hashes-v4-0-0b932db9b56b@weissschuh.net/&quot;&gt;patch series posted by Thomas Weißschuh&lt;/a&gt; to introduce a calculated hash-based system of integrity checking to complement the existing &lt;em&gt;signature&lt;/em&gt;-based approach. Thomas’ &lt;a href=&quot;https://lore.kernel.org/lkml/20260113-module-hashes-v4-0-0b932db9b56b@weissschuh.net/&quot;&gt;original post&lt;/a&gt; mentions:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The current signature-based module integrity checking has some drawbacks in combination with reproducible builds. Either the module signing key is generated at build time, which makes the build unreproducible, or a static signing key is used, which precludes rebuilds by third parties and makes the whole build and packaging process much more complicated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;However, &lt;a href=&quot;https://lore.kernel.org/lkml/20260311011218.GA212983@quark/&quot;&gt;Eric’s followup message&lt;/a&gt; goes further:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I think this actually undersells the feature. It’s also much simpler than the signature-based module authentication. The latter relies on PKCS#7, X.509, ASN.1, OID registry, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;crypto_sig&lt;/code&gt; API, etc in addition to the implementations of the actual signature algorithm (RSA / ECDSA / ML-DSA) and at least one hash algorithm.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;distribution-work&quot;&gt;Distribution work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://debian.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/debian.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Debian this month,&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Lucas Nussbaum &lt;a href=&quot;https://lists.debian.org/debian-devel-announce/2026/03/msg00004.html&quot;&gt;announced &lt;em&gt;Debaudit&lt;/em&gt;&lt;/a&gt;, a “new service to verify the reproducibility of Debian source packages”:&lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;&lt;em&gt;debaudit&lt;/em&gt; complements the work of the Reproducible Builds project. While &lt;a href=&quot;https://reproduce.debian.net/&quot;&gt;reproduce.debian.net&lt;/a&gt; focuses on ensuring that binary packages can be bit-for-bit reproduced from their source packages, &lt;em&gt;debaudit&lt;/em&gt; focuses on the preceding step: ensuring that the source package itself is a faithful and reproducible representation of its upstream source or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Vcs-Git&lt;/code&gt; repository.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1130772&quot;&gt;filed a bug against the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;librust-const-random-dev&lt;/code&gt; package&lt;/a&gt; reporting that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;compile-time-rng&lt;/code&gt; feature of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ahash&lt;/code&gt; crate uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;const-random&lt;/code&gt; crate in turn, which uses a macro to read/generate a random number generator during the build. This issue was also &lt;a href=&quot;https://github.com/jonhoo/flurry/issues/135&quot;&gt;filed upstream&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;60 reviews of Debian packages were added, 4 were updated and 16 were removed this month adding to &lt;a href=&quot;https://tests.reproducible-builds.org/debian/index_issues.html&quot;&gt;our knowledge about identified issues&lt;/a&gt;. One new issue types was added, &lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-notes/commit/e1457606&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pkgjs_lock_json_file_issue&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/opensuse.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, Bernhard M. Wiedemann posted another &lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;strong&gt;openSUSE&lt;/strong&gt;&lt;/a&gt; &lt;a href=&quot;https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/Y4UFWITC7EWEMPU2LCE7BIMNXUQW5CNI/&quot;&gt;monthly update&lt;/a&gt; for their work there.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;tool-development&quot;&gt;Tool development&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/diffoscope.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org&quot;&gt;&lt;strong&gt;diffoscope&lt;/strong&gt;&lt;/a&gt; is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made a number of changes, including preparing and uploading versions, &lt;a href=&quot;https://tracker.debian.org/news/1729381/accepted-diffoscope-314-source-into-unstable/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;314&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://tracker.debian.org/news/1732739/accepted-diffoscope-315-source-into-unstable/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;315&lt;/code&gt;&lt;/a&gt; to Debian.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Don’t run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test_code_is_black_clean&lt;/code&gt; test in the autopkgtests. (&lt;a href=&quot;https://bugs.debian.org/1130402&quot;&gt;#1130402&lt;/a&gt;). [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/fbdc9b0d&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
      &lt;li&gt;Add some debugging info for PyPI debugging. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/e881f4fa&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jelle van der Waa:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Fix compatibility with &lt;a href=&quot;https://llvm.org/&quot;&gt;LLVM&lt;/a&gt; version 22. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/6ea43da2&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
      &lt;li&gt;Adjust the PGP file detection regular expression. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/1bb658f7&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Michael R. Crusoe:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Reformat the source code using &lt;a href=&quot;https://github.com/psf/black&quot;&gt;Black&lt;/a&gt; version 26.1.0 [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/3906fd77&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/9adf36d5&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, Vagrant Cascadian &lt;a href=&quot;https://codeberg.org/guix/guix/commit/61849b667726dd30d623b517380f5b12655b115a&quot;&gt;updated &lt;em&gt;diffoscope&lt;/em&gt; in GNU Guix to version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;315&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproduce.debian.net&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/reproduce.debian.net.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/kpcyrd/rebuilderd&quot;&gt;&lt;strong&gt;rebuilderd&lt;/strong&gt;&lt;/a&gt;, our server designed monitor the official package repositories of Linux distributions and attempt to reproduce the observed results there; it powers, amongst other things, &lt;a href=&quot;https://reproduce.debian.net/&quot;&gt;&lt;em&gt;reproduce.debian.net&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A new version, &lt;a href=&quot;https://github.com/kpcyrd/rebuilderd/releases/tag/v0.26.0&quot;&gt;0.26.0&lt;/a&gt;, was released this month, with the following improvements:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Much smoother onboarding/installation.&lt;/li&gt;
  &lt;li&gt;Complete database redesign with many improvements.&lt;/li&gt;
  &lt;li&gt;New REST HTTP API.&lt;/li&gt;
  &lt;li&gt;It’s now possible to artificially delay the first reproduce attempt. This gives archive infrastructure more time to catch up.&lt;/li&gt;
  &lt;li&gt;And &lt;a href=&quot;https://github.com/kpcyrd/rebuilderd/releases/tag/v0.26.0&quot;&gt;many, many other changes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;upstream-patches&quot;&gt;Upstream patches&lt;/h3&gt;

&lt;p&gt;The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where appropriate. This month, we wrote a large number of such patches, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Bernhard M. Wiedemann:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/wilsonzlin/minify-html/pull/275&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;minify&lt;/code&gt;&lt;/a&gt; (rust random HashMap) / (&lt;a href=&quot;https://github.com/wilsonzlin/minify-html/pull/276&quot;&gt;alternative&lt;/a&gt; by &lt;em&gt;kpcyrd&lt;/em&gt;)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/openSUSE/rpm-config-SUSE/pull/95&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rpm-config-SUSE&lt;/code&gt;&lt;/a&gt; (toolchain)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1129544&quot;&gt;#1129544&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/python-nxtomomill&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-nxtomomill&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1130622&quot;&gt;#1130622&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/dh-fortran&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dh-fortran&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1130623&quot;&gt;#1130623&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/python-discovery&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-discovery&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1130666&quot;&gt;#1130666&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/kanboard&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kanboard&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131168&quot;&gt;#1131168&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/moltemplate&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;moltemplate&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131384&quot;&gt;#1131384&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/stacer&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;stacer&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131385&quot;&gt;#1131385&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/libcupsfilters&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libcupsfilters&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131395&quot;&gt;#1131395&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/django-ninja&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;django-ninja&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1131403&quot;&gt;#1131403&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/python-agate&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-agate&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1132074&quot;&gt;#1132074&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/aetos&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aetos&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1132508&quot;&gt;#1132508&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/python-bayespy&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-bayespy&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/16691&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cargo&lt;/code&gt;&lt;/a&gt; (HashMap random order issue; &lt;a href=&quot;https://github.com/rust-lang/cargo/issues/16693&quot;&gt;more info&lt;/a&gt;)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;documentation-updates&quot;&gt;Documentation updates&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/website.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once again, there were a number of improvements made to our website this month including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt;:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Add a new page about &lt;a href=&quot;https://reproducible-builds.org/docs/rust/&quot;&gt;&lt;em&gt;Rust&lt;/em&gt;&lt;/a&gt; specifics. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/3ed014bd&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/4bf02f0d&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/46c9f1e3&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Robin Candau:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Add link to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;diffoci&lt;/code&gt; Arch Linux package on the &lt;a href=&quot;https://reproducible-builds.org/tools/&quot;&gt;&lt;em&gt;Tools&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/0ca6c946&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Timo Pohl:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;Add new &lt;em&gt;From Constrictor to Serpent: Investigating the Threat of Cache Poisoning in the Python Ecosystem&lt;/em&gt; paper to the &lt;a href=&quot;https://reproducible-builds.org/docs/publications/&quot;&gt;&lt;em&gt;Academic publications&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/8577c2d5&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
      &lt;li&gt;Add GitLab registration confirmation to &lt;a href=&quot;https://reproducible-builds.org/contribute/salsa/&quot;&gt;&lt;em&gt;How to join the Salsa group&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/b4f72f5a&quot;&gt;…&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;two-new-academic-papers&quot;&gt;Two new academic papers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://dl.gi.de/items/07a895be-d49c-4d73-b14d-cb533e850ca2&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/epub.gi.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Marc Ohm, Timo Pohl, Ben Swierzy and Michael Meier published a paper on the &lt;a href=&quot;https://dl.gi.de/items/07a895be-d49c-4d73-b14d-cb533e850ca2&quot;&gt;&lt;em&gt;threat of cache poisoning in the Python ecosystem&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;Attacks on software supply chains are on the rise, and attackers are becoming increasingly creative in how they inject malicious code into software components.
This paper is the first to investigate Python cache poisoning, which manipulates bytecode cache files to execute malicious code without altering the human-readable source code.
We demonstrate a proof of concept, showing that an attacker can inject malicious bytecode into a cache file without failing the Python interpreter’s integrity checks.
In a large-scale analysis of the Python Package Index, we find that about 12,500 packages are distributed with cache files.
Through manual investigation of cache files that cannot be reproduced automatically from the corresponding source files, we identify classes of reasons for irreproducibility to locate malicious cache files.
While we did not identify any malware leveraging this attack vector, we demonstrate that several widespread package managers are vulnerable to such attacks.&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://dl.gi.de/items/07a895be-d49c-4d73-b14d-cb533e850ca2&quot;&gt;PDF&lt;/a&gt; of the paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://epub.jku.at/obvulihs/content/titleinfo/13440717&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-03/epub.jku.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mario Lins of the University of Linz, Austria, has published their PhD doctoral thesis on the topic of &lt;a href=&quot;https://epub.jku.at/obvulihs/content/titleinfo/13440717&quot;&gt;&lt;em&gt;Software supply chain transparency&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;We begin by examining threats to the software distribution stage — the point at which artifacts (e.g., mobile apps) are delivered to end users — with an emphasis on mobile ecosystems [and] we next focus on the operating system on mobile devices, with an emphasis on mitigating bootloader-targeted attacks. We demonstrate how to compensate lost security guarantees on devices with an unlocked bootloader. This allows users to flash custom operating systems on devices that no longer receive security updates from the original manufacturer without compromising security. We then move to the source code stage. [Also,] we introduce a new architecture to ensure strong source-to-binary correspondence by leveraging the security guarantees of Confidential Computing technology. Finally, we present The Supply Chain Game, an organizational security approach that enhances standard risk-management methods. We demonstrate how game-theoretic techniques, combined with common risk management practices, can derive new criteria to better support decision makers.&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://epub.jku.at/obvulihs/download/pdf/13440717&quot;&gt;PDF&lt;/a&gt; of the paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;misc-news&quot;&gt;Misc news&lt;/h3&gt;

&lt;p&gt;On &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general/&quot;&gt;our mailing list&lt;/a&gt; this month:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Holger Levsen &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-March/004060.html&quot;&gt;announced that this year’s Reproducible Builds summit&lt;/a&gt; will almost certainly be held in Gothenburg, Sweden, from September 22 until 24, followed by two days of hacking. However, these dates are preliminary and not 100% final — an official announcement is forthcoming.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mark Wielaard posted to our list &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-March/004062.html&quot;&gt;asking a question&lt;/a&gt; on the difference between &lt;a href=&quot;https://sourceware.org/debugedit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debugedit&lt;/code&gt;&lt;/a&gt; and relative debug paths based on a comment on the &lt;a href=&quot;https://reproducible-builds.org/docs/build-path/&quot;&gt;&lt;em&gt;Build path&lt;/em&gt;&lt;/a&gt; page: “Have people tried more modern versions of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;debugedit&lt;/code&gt; to get deterministic (absolute) DWARF paths and found issues with it?&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Finally, if you are interested in contributing to the Reproducible Builds project, please visit our &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website. However, you can get in touch with us via:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;IRC: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#reproducible-builds&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;irc.oftc.net&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mastodon: &lt;a href=&quot;https://fosstodon.org/@reproducible_builds&quot;&gt;@reproducible_builds@fosstodon.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mailing list: &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rb-general@lists.reproducible-builds.org&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Fri, 10 Apr 2026 16:13:12 +0000</pubDate>

</item> 
<item>
	<title>Jamie McClelland: AI Hacking the Planet</title>
	<guid>https://current.workingdirectory.net/posts/2026/ai-hacking-the-planet/</guid>
	<link>https://current.workingdirectory.net/posts/2026/ai-hacking-the-planet/</link>
     <description>  &lt;p&gt;A colleague asked me if we should move all our money to our pillow cases after
reading the latest AI editorial from &lt;a href=&quot;https://www.nytimes.com/2026/04/07/opinion/anthropic-ai-claude-mythos.html&quot;&gt;Thomas
Friedman&lt;/a&gt;.
The article reads like a press release from Anthropic, repeating the claim that
their latest AI model is so good at finding software vulnerabilities that it is
a danger to the world.&lt;/p&gt;
&lt;p&gt;I think I now know what it’s like to be a doctor who is forced to watch Gray’s
Anatomy.&lt;/p&gt;
&lt;p&gt;By now every journalist should be able to recognize the AI publicity playbook:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Start with a wildly unsubstantiated claim about how dangerous your
product is:&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;em&gt;AI will cause human extinction before we have a chance to colonize mars&lt;/em&gt;&lt;/del&gt;
(remember that one? Even Kim Stanley Robinson, author of perhaps the most
compelling science fiction on colonizing mars &lt;a href=&quot;https://www.newscientist.com/article/2520312-author-of-red-mars-calls-bullshit-on-emigrating-to-the-planet/&quot;&gt;calls bull
shit&lt;/a&gt;
on it).&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;em&gt;AI will eliminate all of our jobs&lt;/em&gt;&lt;/del&gt; (this one was extremely effective at
providing cover for software companies laying off staff but it has quickly
dawned on people that the companies that did this are living in chaos not
humming along happily with functional robots)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;AI will discover massive software vulnerabilities allowing bad actors to “hack
pretty much every major software system in the world”.&lt;/em&gt; (Did Friedman pull that
directly from Anthropic’s press release or was that his contribution?)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; To help stave off human collapse, only release the new version to a
vetted group of software companies and developers, preferably ones with big
social media followings&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Wait for the limited release developers to spew unbridled
enthusiasm and shocking examples that seem to suggest this new AI produce is
truly unbelievable&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Watch stock prices and valuations soar&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Release to the world, and experience a steady stream of mockery as
people discover how wrong you are&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Start over&lt;/p&gt;
&lt;p&gt;Even if Friedman missed the text book example of the playbook, I have to ask:
if you think bad actors compromising software resulting in massive loss of
private data, major outages and wasted resources needs to be reported on, then
where have you been for the last 10 years? This literally happens &lt;a href=&quot;https://www.bleepingcomputer.com/news/security/&quot;&gt;on a daily
basis&lt;/a&gt; due to the
fundamentally flawed way capitalism has been writing software even before the
invention of AI. A small part of me wonders - maybe AI writing software is not
so bad, because how could it be any worse than it is now?&lt;/p&gt;
&lt;p&gt;Also, let’s keep in mind that AI’s super ability at finding vulnerable software
depends on having access to the software’s source code, which most companies
keep locked up tight. That means the owners of the software can use AI to find
vulnerabilities and fix them but bad actors can’t.&lt;/p&gt;
&lt;p&gt;Oh, but wait, what if a company is so incompetent that they &lt;a href=&quot;https://www.cnbc.com/2026/03/31/anthropic-leak-claude-code-internal-source.html&quot;&gt;accidentally
release their proprietary software to the
Internet&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Surely that would allow AI bots to discover their vulnerabilities and destroy
the company right? I’m not sure if anyone has discovered world ending
vulnerabilities in Anthropic’s Claude code since it was accidentally released,
but it is fun to watch people &lt;a href=&quot;https://neuromatch.social/@jonny/116325668039992121&quot;&gt;mock
software&lt;/a&gt; that is clearly
written by AI (and spoiler alert, it seems way worse that software written
now).&lt;/p&gt;
&lt;p&gt;Well… we probably should all be keeping our money in a pillow case anyway.&lt;/p&gt; </description> 
	<pubDate>Fri, 10 Apr 2026 12:27:10 +0000</pubDate>

</item> 
<item>
	<title>Russell Coker: HP Z640 and E5-2696 v4</title>
	<guid>https://etbe.coker.com.au/?p=6021</guid>
	<link>https://etbe.coker.com.au/2026/04/10/hp-z640-e5-2696-v4/</link>
     <description>  &lt;p&gt;I recently decided to upgrade the CPU in my workstation, the &lt;a href=&quot;https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+E5-2696+v3+%40+2.30GHz&amp;amp;id=2526&quot;&gt;E5-2696 v3 CPU was OK (passmark 2045 for single thread and 21,380 for multi thread) [1]&lt;/a&gt; but I felt like buying something better so I got a &lt;a href=&quot;https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+E5-2696+v4+%40+2.20GHz&amp;amp;id=2750&quot;&gt;E5-2696 v4 (passmark 2115 and 24,643) [2]&lt;/a&gt;. I chose the E5-2696 v4 because I was looking for a E5-2699 v4 and found an ebay seller who had them at $140 but was offering the E5-2696 v4 for $99 and the passmark results for the two CPUs are almost identical.&lt;/p&gt;
&lt;p&gt;After buying the CPU and waiting for it to be delivered I realised that the Z640 doesn’t include it in the list of supported CPUs and that the maximum TDP of any supported CPU is 145W while according to passmark it has a TDP of 150W. I looked for information about it on Intel ARK (the official site for specs of Intel CPUs) and discovered that &lt;a href=&quot;https://community.intel.com/t5/Mobile-and-Desktop-Processors/where-is-Intel-Xeon-E5-2696-v4-CPU-specifications-on-INTEL-ark/td-p/1373164&quot;&gt;“The Intel® Xeon® Processor E5-2696 v4 is designed to be used by system manufacturers (OEMs), and this means they can modify its specifications depending on the system where it will be implemented” and “The processor does not have an ARK page for this reason, since it has no standard specification from Intel, so depending on the original system, it is necessary to contact that system manufacturer for information” [3]&lt;/a&gt;. That’s the official response from an Intel employee saying that there are no standard specs for that CPU!!!&lt;/p&gt;
&lt;p&gt;Somehow I had used a E5-2696 v3 for 3 years without realising that &lt;a href=&quot;https://community.intel.com/t5/Mobile-and-Desktop-Processors/Can-not-find-specifications-of-Intel-Xeon-E5-2696-v3/m-p/636614&quot;&gt;the same lack of support and specs applies to it [4]&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;I installed the new CPU in another Z640 which had a E5-1620 v3 CPU and it worked. I was a little surprised to discover that the hole in the corner is in the bottom right (according to the alignment of the printed text on the top) for all my E5-26xx CPUs while it’s in the top left on the E5-1620 v3. Google searches for things like “e5-2600 e5-1600 difference” and “e5-2600 e5-1600 difference hole in corner” didn’t turn up any useful information. The best information I found was from the &lt;a href=&quot;https://linustechtips.com/topic/820213-why-is-there-a-hole-in-my-cpu-is-this-normal/&quot;&gt;Linus Tech Tips forum which says that the hole is to allow gasses to escape when the CPU package is glued together [5]&lt;/a&gt; which implies (but doesn’t state) that the location of the hole has no meaning. I had previously thought that the hole was to indicate the location of “pin 1” and was surprised when the new CPU had the hole in the opposite corner. Hopefully in future when people have such concerns they can find this post and not be worried that they are about to destroy their CPU, PC, or both when upgrading the CPU.&lt;/p&gt;
&lt;p&gt;The previous Z640 was one I bought from Facebook marketplace for $50 in “unknown condition” in the expectation that I would get at least $50 of parts but it worked perfectly apart from one DIMM socket. The Z640 I’m using now is one I bought from Facebook marketplace for $200 and it’s working perfectly with 4 DIMMs, 128G of RAM, and the E5-2696 v4 CPU. $300 for a workstation with ECC RAM and a 22 core CPU is good value for money!&lt;/p&gt;
&lt;p&gt;There are some accounts of the E5-2696 v4 not working on white-box motherboards including a claim that when it was selling for $4000US someone’s motherboard destroyed one. The best plan for such CPUs is to google for someone who’s already got it working in the same machine, which means a name-brand server. That doesn’t guarantee that it will work (Intel refuses to supply specs and states that different items may work differently) but greatly improves the probability.&lt;/p&gt;
&lt;p&gt;This system has the HP BIOS version 2.61, note that the Linux &lt;b&gt;fwupd&lt;/b&gt; package doesn’t seem to update the BIOS on HP workstations so you need to manually download it and install it. There is a possibility that a Z640 with an older BIOS won’t work with this CPU.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://etbe.coker.com.au/2025/04/05/hp-ml110-gen9-z640/&quot;&gt;Here is the previous post in my Z640 saga [6]&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+E5-2696+v3+%40+2.30GHz&amp;amp;id=2526&quot;&gt; https://tinyurl.com/2hrrnqfr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+E5-2696+v4+%40+2.20GHz&amp;amp;id=2750&quot;&gt; https://tinyurl.com/2j2gg3es&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[3]&lt;a href=&quot;https://community.intel.com/t5/Mobile-and-Desktop-Processors/where-is-Intel-Xeon-E5-2696-v4-CPU-specifications-on-INTEL-ark/td-p/1373164&quot;&gt; https://tinyurl.com/2742z4qm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[4]&lt;a href=&quot;https://community.intel.com/t5/Mobile-and-Desktop-Processors/Can-not-find-specifications-of-Intel-Xeon-E5-2696-v3/m-p/636614&quot;&gt; https://tinyurl.com/25nzpa5t&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[5]&lt;a href=&quot;https://linustechtips.com/topic/820213-why-is-there-a-hole-in-my-cpu-is-this-normal/&quot;&gt; https://tinyurl.com/25ebra97&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[6]&lt;a href=&quot;https://etbe.coker.com.au/2025/04/05/hp-ml110-gen9-z640/&quot;&gt; https://etbe.coker.com.au/2025/04/05/hp-ml110-gen9-z640/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2025/04/05/hp-ml110-gen9-z640/&quot; rel=&quot;bookmark&quot; title=&quot;More About the HP ML110 Gen9 and z640&quot;&gt;More About the HP ML110 Gen9 and z640&lt;/a&gt; &lt;small&gt;In May 2021 I bought a ML110 Gen9 to use...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2025/04/05/hp-z840/&quot; rel=&quot;bookmark&quot; title=&quot;HP z840&quot;&gt;HP z840&lt;/a&gt; &lt;small&gt;Many PCs with DDR4 RAM have started going cheap on...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2023/02/12/t320-idrac-failure-hp-z640/&quot; rel=&quot;bookmark&quot; title=&quot;T320 iDRAC Failure and new HP Z640&quot;&gt;T320 iDRAC Failure and new HP Z640&lt;/a&gt; &lt;small&gt;The Dell T320 Almost 2 years ago I made a...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Thu, 09 Apr 2026 23:33:19 +0000</pubDate>

</item> 
<item>
	<title>Jonathan Dowland: nvim-µwiki</title>
	<guid>https://jmtd.net/log/nvim-%C2%B5wiki/</guid>
	<link>https://jmtd.net/log/nvim-µwiki/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/jmtd.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;In January 2025,
as a pre-requisite for something else, I published a minimal &lt;a href=&quot;https://jmtd.net/log/neovim/&quot;&gt;neovim&lt;/a&gt;
plugin called &lt;a href=&quot;https://github.com/jmtd/nvim-microwiki&quot;&gt;nvim-µwiki&lt;/a&gt;. It&#39;s essentially just the features from
&lt;a href=&quot;https://jmtd.net/log/vimwiki/&quot;&gt;vimwiki&lt;/a&gt; that I regularly use, which is a small fraction them.
I forgot to blog about it. I recently dusted it off and cleaned it up.
You can find it here, along with a longer list of its features and
how to configure it: &lt;a href=&quot;https://github.com/jmtd/nvim-microwiki&quot;&gt;https://github.com/jmtd/nvim-microwiki&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had a couple of design goals. I didn&#39;t want to define a new &lt;code&gt;filetype&lt;/code&gt;,
so this is designed to work with the existing markdown one. I&#39;m
using neovim, so I wanted to leverage some of its features: this plugin
is written in &lt;a href=&quot;https://jmtd.net/lua/&quot;&gt;Lua&lt;/a&gt;, rather than vimscript. I use the parse trees
provided by &lt;a href=&quot;https://neovim.io/doc/user/treesitter.html&quot;&gt;TreeSitter&lt;/a&gt; to navigate the structure of a document.
I also decided to &quot;plug into&quot; the existing tag stack navigation, rather
than define another dimension of navigation (along with buffers, etc.)
to track: Following a wiki-link pushes onto the tag stack, just as if
you followed a tag.&lt;/p&gt;

&lt;p&gt;This was my first serious bit of &lt;a href=&quot;https://jmtd.net/lua/&quot;&gt;Lua&lt;/a&gt; programming, as well as my first
dive into neovim (or even vim) internals.
&lt;a href=&quot;https://jmtd.net/lua/&quot;&gt;Lua&lt;/a&gt; is quite reasonable. Most
of the vim and neovim architecture is reasonable. The emerging conventions
about structuring neovim plugins are mostly reasonable. TreeSitter is, well,
interesting, but the devil is very much in the details. Somehow all
together the experience for me was largely just frustrating, and I didn&#39;t
really enjoy writing it.&lt;/p&gt; </description> 
	<pubDate>Wed, 08 Apr 2026 20:31:44 +0000</pubDate>

</item> 
<item>
	<title>Thorsten Alteholz: My Debian Activities in March 2026</title>
	<guid>http://blog.alteholz.eu/?p=2795</guid>
	<link>http://blog.alteholz.eu/2026/04/my-debian-activities-in-march-2026/</link>
     <description>  &lt;h3&gt;&lt;strong&gt;Debian LTS/ELTS&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;&lt;/p&gt;&lt;p&gt;This was my hundred-forty-first month that I did some work for the Debian LTS initiative, started by Raphael Hertzog at Freexian.
&lt;/p&gt;
&lt;p&gt;
During my allocated time I uploaded or worked on:  
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2026/03/msg00005.html&quot;&gt;DLA 4500-1&lt;/a&gt;] gimp security update to fix four CVEs related to denial of service or execution of arbitrary code.
&lt;/li&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2026/03/msg00007.html&quot;&gt;DLA 4503-1&lt;/a&gt;] evolution-data-server to fix one CVE related to a missing canonicalization of a file path.
&lt;/li&gt;&lt;li&gt;[&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/2026/03/msg00016.html&quot;&gt;DLA 4512-1&lt;/a&gt;] strongswan security update to fix one CVE related to a denial of service.
&lt;/li&gt;&lt;li&gt;[ELA-1656-1] gimp security update to fix four CVEs in Buster and Stretch related to denial of service or execution of arbitrary code.&lt;/li&gt;&lt;li&gt;[ELA-1660-1] evolution-data-server security update to fix one CVE in Buster and Stretch related to  a missing canonicalization of a file path.&lt;/li&gt;&lt;li&gt;[ELA-1665-1] strongswan security update to fix one CVE in Buster related to a denial of service.&lt;/li&gt;&lt;li&gt;[ELA-1666-1] libvpx security update to fix one CVE in Buster and Stretch related to a denial of service or potentially execution of arbitrary code.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;
I also worked on the &lt;i&gt;check-advisories&lt;/i&gt; script and proposed a fix for cases where issues would be assigned to the coordinator instead of the person who forgot doing something. 
I also did some work for a kernel update and packages &lt;i&gt;snapd&lt;/i&gt; and &lt;i&gt;ldx&lt;/i&gt; on security-master and attended the monthly LTS/ELTS meeting. Last but not least I started to work on &lt;i&gt;gst-plugins-bad1.0&lt;/i&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Printing&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream versions:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/epson-inkjet-printer-escpr&quot;&gt;epson-inkjet-printer-escpr&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/sane-airscan&quot;&gt;sane-airscan&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/printer-driver-oki&quot;&gt;printer-driver-oki&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;Several packages take care of group lpadmin in their maintainer scripts. With the upload of version 260.1-1 of &lt;i&gt;systemd&lt;/i&gt; there is now a central package (&lt;i&gt;systemd | systemd-standalone-sysusers | systemd-sysusers&lt;/i&gt;) that takes care of this. Other dependencies like &lt;i&gt;adduser&lt;/i&gt; can now be dropped.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;This work is generously funded by &lt;a href=&quot;https://www.freexian.com&quot;&gt;Freexian&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Lomiri&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I continued to work on unifying packaging on Debian and Ubuntu. This makes it easier to work on those packages independent of the used platform. I am also able to upload Debian packages to the corresponding Ubuntu PPA now. A small bug had to be fixed in the python script to allow the initial configuration in Launchpad. &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;This work is generously funded by &lt;a href=&quot;https://freiesoftware.gmbh/&quot;&gt;Fre(i)e Software GmbH&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian Astro&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/libplayerone&quot;&gt;libplayerone&lt;/a&gt; to experimental. For a list of other packages please see below.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;I also uploaded lots of indi-drivers (&lt;i&gt;libplayerone, libsbig, libricohcamerasdk, indi-asi, indi-eqmod, indi-fishcamp, indi-inovaplx, indi-pentax, indi-playerone, indi-sbig, indi-mi, libahp-xc, indi-aagcloudwatcher, indi-aok, indi-apogee, libapogee3, indi-nightscape, libasi, libinovasdk, libmicam, indi-avalon, indi-beefocus, indi-bresserexos2, indi-dsi, indi-ffmv, indi-fli, indi-gige, info-gphoto, indi-gpsd, indi-gpsnmea, indi-limesdr, indi-maxdomeii, indi-mgen, indi-rtklib, indi-shelyak, indi-starbook, indi-starbookten, indi-talon6, indi-weewx-json, indi-webcam, indi-orion-ssg3, indi-armadillo-playtypus&lt;/i&gt; ) to experimental to make progress with the indi-transition. No problems with those drivers appeared and the next step would be the upload of indi version 2.x to unstable. I hope this will happen soon, as new drivers are already waiting in the pipeline. There have been also four packages, that migrated to the official indi package and are no longer needed as 3rdparty drivers (indi-astrolink4, indi-astromechfoc, indi-dreamfocuser, indi-spectracyber).&lt;/p&gt;



&lt;p&gt;While working on these packages, I thought about testing them. Unfortunately I don’t have enough hardware to really check out every package, so I can upload most of them only as is. In case anybody is interested in a better testing coverage and me being able to provide upstream patches, I would be very glad about hardware donations.&lt;/p&gt;



&lt;h3&gt;&lt;strong&gt;Debian IoT&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/pywws&quot;&gt;pywws&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;h3&gt;&lt;strong&gt;Debian Mobcom&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/osmo-trx&quot;&gt;osmo-trx&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;h3&gt;&lt;strong&gt;misc&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;This month I uploaded a new upstream version  or a bugfix version of:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/cc-tool&quot;&gt;cc-tool&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/mailio&quot;&gt;mailio&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/gnupksc11-scd&quot;&gt;gnupg-pkcs11-scd&lt;/a&gt; to unstable.&lt;/li&gt;&lt;li&gt;… &lt;a href=&quot;https://tracker.debian.org/odoo&quot;&gt;odoo&lt;/a&gt; to unstable.&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;I also sponsored the upload of Matomo. Thanks a lot to William for preparing the package.&lt;/p&gt; </description> 
	<pubDate>Mon, 06 Apr 2026 17:45:48 +0000</pubDate>

</item> 
<item>
	<title>Dima Kogan: Simple gpx export from ridewithgps</title>
	<guid>https://notes.secretsauce.net/notes/2026/04/04_simple-gpx-export-from-ridewithgps.html</guid>
	<link>http://notes.secretsauce.net/notes/2026/04/04_simple-gpx-export-from-ridewithgps.html</link>
     <description>  &lt;p&gt;
The &lt;a href=&quot;https://tourdelospadres.weebly.com/&quot;&gt;Tour de Los Padres&lt;/a&gt; is coming! The race organizer post &lt;a href=&quot;https://ridewithgps.com/routes/54493422&quot;&gt;the route on
ridewithgps&lt;/a&gt;. This works, but has convoluted interfaces for people not wanting to
use their service. I just wrote a simple script to export their data into a
plain .gpx file, &lt;i&gt;including&lt;/i&gt; all the waypoints; their exporter omits those.
&lt;/p&gt;

&lt;p&gt;
I&#39;ve seen two flavors of their data, so here&#39;re two flavors of the
&lt;code&gt;gpx-from-ridewithgps.py&lt;/code&gt; script:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-python&quot;&gt;&lt;span style=&quot;color: #cdcd00;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #cdcd00;&quot;&gt;!/usr/bin/python3&lt;/span&gt;
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;import&lt;/span&gt; sys
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;import&lt;/span&gt; json

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;quote_xml&lt;/span&gt;(s):
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;return&lt;/span&gt; s.replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;amp;&quot;&lt;/span&gt;).replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;lt;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;lt;&quot;&lt;/span&gt;).replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;gt;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;gt;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;Reading stdin&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;file&lt;/span&gt;=sys.stderr)
&lt;span style=&quot;color: #cdcd00;&quot;&gt;data&lt;/span&gt; = json.load(sys.stdin)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(r&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&quot;&quot;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #00cd00;&quot;&gt;&amp;lt;gpx version=&quot;1.1&quot; creator=&quot;gpx-from-ridewithgps.py&quot; xmlns=&quot;http://www.topografix.com/GPX/1/1&quot;&amp;gt;&quot;&quot;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;for&lt;/span&gt; item &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;in&lt;/span&gt; data[&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;extras&quot;&lt;/span&gt;]:
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;if&lt;/span&gt; item[&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;type&quot;&lt;/span&gt;] != &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;point_of_interest&quot;&lt;/span&gt;:
        &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;continue&lt;/span&gt;
    &lt;span style=&quot;color: #cdcd00;&quot;&gt;poi&lt;/span&gt; = item[&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;point_of_interest&quot;&lt;/span&gt;]
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;wpt lat=&quot;{poi[&quot;lat&quot;]}&quot; lon=&quot;{poi[&quot;lng&quot;]}&quot;&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;name&amp;gt;{quote_xml(poi[&quot;name&quot;])}&amp;lt;/name&amp;gt;&#39;&lt;/span&gt;)

    &lt;span style=&quot;color: #cdcd00;&quot;&gt;desc&lt;/span&gt; = poi.get(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;description&quot;&lt;/span&gt;,&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;len&lt;/span&gt;(desc):
        &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;desc&amp;gt;{quote_xml(desc)}&amp;lt;/desc&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;/wpt&amp;gt;&#39;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;  &amp;lt;trk&amp;gt;&amp;lt;trkseg&amp;gt;&quot;&lt;/span&gt;)
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;for&lt;/span&gt; pt &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;in&lt;/span&gt; data.get(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;route&quot;&lt;/span&gt;, {}).get(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;track_points&quot;&lt;/span&gt;, []):
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;trkpt lat=&quot;{pt[&quot;y&quot;]}&quot; lon=&quot;{pt[&quot;x&quot;]}&quot;&amp;gt;&amp;lt;ele&amp;gt;{pt[&quot;e&quot;]}&amp;lt;/ele&amp;gt;&amp;lt;/trkpt&amp;gt;&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;  &amp;lt;/trkseg&amp;gt;&amp;lt;/trk&amp;gt;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;lt;/gpx&amp;gt;&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-python&quot;&gt;&lt;span style=&quot;color: #cdcd00;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #cdcd00;&quot;&gt;!/usr/bin/python3&lt;/span&gt;
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;import&lt;/span&gt; sys
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;import&lt;/span&gt; json

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;quote_xml&lt;/span&gt;(s):
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;return&lt;/span&gt; s.replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;amp;&quot;&lt;/span&gt;).replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;lt;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;lt;&quot;&lt;/span&gt;).replace(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;gt;&quot;&lt;/span&gt;, &lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;amp;gt;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;Reading stdin&quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;file&lt;/span&gt;=sys.stderr)
&lt;span style=&quot;color: #cdcd00;&quot;&gt;data&lt;/span&gt; = json.load(sys.stdin)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(r&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&quot;&quot;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #00cd00;&quot;&gt;&amp;lt;gpx version=&quot;1.1&quot; creator=&quot;gpx-from-ridewithgps.py&quot; xmlns=&quot;http://www.topografix.com/GPX/1/1&quot;&amp;gt;&quot;&quot;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;for&lt;/span&gt; poi &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;in&lt;/span&gt; data[&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;points_of_interest&quot;&lt;/span&gt;]:
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;wpt lat=&quot;{poi[&quot;lat&quot;]}&quot; lon=&quot;{poi[&quot;lng&quot;]}&quot;&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;name&amp;gt;{quote_xml(poi[&quot;name&quot;])}&amp;lt;/name&amp;gt;&#39;&lt;/span&gt;)

    &lt;span style=&quot;color: #cdcd00;&quot;&gt;desc&lt;/span&gt; = poi.get(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;description&quot;&lt;/span&gt;,&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&quot;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #0000ee; font-weight: bold;&quot;&gt;len&lt;/span&gt;(desc):
        &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;desc&amp;gt;{quote_xml(desc)}&amp;lt;/desc&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;/wpt&amp;gt;&#39;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;for&lt;/span&gt; poi &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;in&lt;/span&gt; data[&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;course_points&quot;&lt;/span&gt;]:
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;wpt lat=&quot;{poi[&quot;y&quot;]}&quot; lon=&quot;{poi[&quot;x&quot;]}&quot;&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;name&amp;gt;{quote_xml(poi[&quot;n&quot;])}&amp;lt;/name&amp;gt;&#39;&lt;/span&gt;)
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;  &amp;lt;/wpt&amp;gt;&#39;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;  &amp;lt;trk&amp;gt;&amp;lt;trkseg&amp;gt;&quot;&lt;/span&gt;)
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;for&lt;/span&gt; pt &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;in&lt;/span&gt; data[&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;track_points&#39;&lt;/span&gt;]:
    &lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(f&lt;span style=&quot;color: #00cd00;&quot;&gt;&#39;    &amp;lt;trkpt lat=&quot;{pt[&quot;y&quot;]}&quot; lon=&quot;{pt[&quot;x&quot;]}&quot;&amp;gt;&amp;lt;ele&amp;gt;{pt[&quot;e&quot;]}&amp;lt;/ele&amp;gt;&amp;lt;/trkpt&amp;gt;&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;  &amp;lt;/trkseg&amp;gt;&amp;lt;/trk&amp;gt;&quot;&lt;/span&gt;)

&lt;span style=&quot;color: #00cdcd; font-weight: bold;&quot;&gt;print&lt;/span&gt;(&lt;span style=&quot;color: #00cd00;&quot;&gt;&quot;&amp;lt;/gpx&amp;gt;&quot;&lt;/span&gt;)
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
You invoke it by downloading the route and feeding it into the script:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;src src-sh&quot;&gt;curl -s https://ridewithgps.com/routes/54493422.json | ./ridewithgps-to-gpx.py &amp;gt; out.gpx
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
Note that the route number 54493422 is in the url above.&lt;/p&gt; </description> 
	<pubDate>Sat, 04 Apr 2026 17:21:00 +0000</pubDate>

</item> 
<item>
	<title>Dirk Eddelbuettel: Sponsor me for Tour de Shore 2026 to support MFA</title>
	<guid>http://dirk.eddelbuettel.com/blog/2026/04/03#sponsor_tour_de_shore_2026</guid>
	<link>http://dirk.eddelbuettel.com/blog/2026/04/03#sponsor_tour_de_shore_2026</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dirk.png&quot; width=&quot;65&quot; height=&quot;90&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;&lt;a href=&quot;https://www.letourdeshore.com/&quot;&gt;
&lt;img alt=&quot;tour de shore 2026&quot; src=&quot;https://eddelbuettel.github.io/images/2026-04-03/tour_de_shore_2026.png&quot; style=&quot;float: left; margin: 10px 10px 10px 10px;&quot; width=&quot;45%&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On June 19 and 20, I will cycle a little over 100 miles from downtown
Chicago and its wonderful Millenium Park to New Buffalo, Michigan, as
part of the &lt;a href=&quot;https://www.letourdeshore.com/&quot;&gt;Tour de Shore
2026&lt;/a&gt;. The ride passes through northwest Indiana and the extended &lt;a href=&quot;https://www.nps.gov/indu/index.htm&quot;&gt;Indiana Dunes National
Park&lt;/a&gt; ending the next morning in the southwestern Michigan town of
New Buffalo. I rode Tour de Shore once before in 2024 and had a
generally wonderful time (even considering some soreness after a century
of miles over 1 1/2 days).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.letourdeshore.com/&quot;&gt;Tour de Shore&lt;/a&gt; is riding
in support of &lt;a href=&quot;https://maywoodfinearts.org/&quot;&gt;Maywood Fine Arts
Center&lt;/a&gt;, a local arts and sports center in &lt;a href=&quot;https://en.wikipedia.org/wiki/Maywood,_Illinois&quot;&gt;Maywood,
Illinois&lt;/a&gt;, a suburb one over from where I live and hence just a few
good miles west of downtown. &lt;a href=&quot;https://en.wikipedia.org/wiki/Maywood,_Illinois&quot;&gt;Maywood,
Illinois&lt;/a&gt; is home to legends such as the late &lt;a href=&quot;https://en.wikipedia.org/wiki/John_Prine&quot;&gt;John Prine&lt;/a&gt; as well
as several NBA players such as player and coach &lt;a href=&quot;https://en.wikipedia.org/wiki/Doc_Rivers&quot;&gt;Doc Rivers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.pledgereg.com/536435&quot;&gt;
&lt;img alt=&quot;tour de shore 2026 donation page&quot; src=&quot;https://eddelbuettel.github.io/images/2026-04-03/tour_de_shore_2026_fundraising.png&quot; style=&quot;float: right; margin: 10px 10px 10px 10px;&quot; width=&quot;45%&quot; /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But &lt;a href=&quot;https://en.wikipedia.org/wiki/Maywood,_Illinois&quot;&gt;Maywood,
Illinois&lt;/a&gt; is also little less well off than other western suburbs.
The &lt;a href=&quot;https://maywoodfinearts.org/&quot;&gt;Maywood Fine Arts Center&lt;/a&gt;
is simply legendary is what they do for this community (and surrounding
communities), and especially the youth support. They can use a dollar a
two. &lt;a href=&quot;https://maywoodfinearts.org/why-we-ride-le-tour-de-shore/&quot;&gt;Their
story about Tour de Shore&lt;/a&gt; is worth a read too for background and
motivation.&lt;/p&gt;
&lt;p&gt;I have bootstrapped &lt;a href=&quot;https://www.pledgereg.com/536435&quot;&gt;my
donation page&lt;/a&gt; page with a dollar for each mile to be cycled. It
would be simply terrific if you could join me. A nickel, a dime, or a
quarter per mile cycled would help. Multiples of that help too: More is
of course still always better.&lt;/p&gt;
&lt;p&gt;Anything you can afford will go a long way towards a worthy goal in a
community that could use the help.&lt;/p&gt;
&lt;p&gt;Of and if you are local to the area, I believe you can &lt;a href=&quot;https://www.bikereg.com/letourdeshore&quot;&gt;still register for Tour de
Shore 2026&lt;/a&gt;. So see you out there in June? And if not, maybe help
with a dollar or two?&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Sat, 04 Apr 2026 01:08:00 +0000</pubDate>

</item> 
<item>
	<title>Joerg Jaspert: Building a house - 1 year in</title>
	<guid>https://blog.ganneff.de/2026/04/house</guid>
	<link>https://blog.ganneff.de/2026/04/house.html</link>
     <description>  &lt;p&gt;Haven’t written here about it, but last March we finally started on
our journey to get our own house build, so we can move out of the
rented flat here.&lt;/p&gt;

&lt;p&gt;That will be a big step, both the actual building, but also the
moving - I am living at this one single place for 36 years now.&lt;/p&gt;

&lt;p&gt;If you can read german there is &lt;a href=&quot;https://haus.ganneff.de/&quot;&gt;a dedicated
webpage&lt;/a&gt; where I sometimes write about the
process. Will have much more details (and way more ramblings) than the
following part.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you can’t read german, a somewhat short summary follows&lt;/strong&gt;. Yes,
still a lot of text, but shortened, still.&lt;/p&gt;

&lt;h3 id=&quot;what-why-now&quot;&gt;What? Why now?&lt;/h3&gt;
&lt;p&gt;Current flat has 83m² - which simply isn’t enough space. And
the number of rooms also doesn’t fit anymore. But it is hard to find a
place that fits our requirements (which do include location).&lt;/p&gt;

&lt;p&gt;Moving to a different rented place would also mean changed amount of
rent. And nowadays that would be huge increase (my current rent is
still the price from about 30 years ago!).&lt;/p&gt;

&lt;p&gt;So if we go and pay more - we could adjust and pay for something we
own instead. And both, my wife and I had changes in our jobs that made
it possible for us now, so we started looking.&lt;/p&gt;

&lt;h3 id=&quot;market&quot;&gt;Market&lt;/h3&gt;
&lt;p&gt;Brrrr, looking is good, actually finding something that fits - not so.
We never found an offer that fit. Space wise, sure. But then location
was off, or price was idiotically high. Location fit, but then size
was a joke, and guess about the price… Who needs 200 square meters
with 3 rooms? Entirely stupid design choices there. Or how about 40
square meters of hallway - with 50m² of tiny rooms around. What are
they smoking? Oh, there, useful size, good rooms - but now you want
more money than a kidney is worth, or something. Thanks, no.&lt;/p&gt;

&lt;h3 id=&quot;new-place&quot;&gt;New place&lt;/h3&gt;
&lt;p&gt;In February 2025 we finally got lucky and found a (newly opened) area
with a large number of places to build a house on. Had multiple talks
with someone from on of the companies developing that area (there are
two you can select from), then talked with banks and signed a contract
in March 2025. We got promised that actual house construction would be
first quarter of 2026, finished in second quarter.&lt;/p&gt;

&lt;h3 id=&quot;house-type&quot;&gt;House type&lt;/h3&gt;
&lt;p&gt;There are basically 2 ways of building a new house (that matter here).
First is called “Massivhaus”, second is called “Fertighaus” in german,
roughly translating to solid and prefabricated. The latter commonly a
wood based construction, though it doesn’t need to be. The important
part of it is the prefabrication, walls and stuff get assembled in a
factory somewhere and then transported to your place, where they play
“big kid lego” for a day and suddenly a house is there.&lt;/p&gt;

&lt;p&gt;A common thought is “prefabricated” is faster, but that is only a half
true. Sure, the actual work on side is way shorter - usually one or
two days and the house is done - while a massive construction usually
takes weeks to build up. But that is only a tiny part of the time
needed, the major part goes of into planning and waiting and in there
it doesn’t matter what material you end up with.&lt;/p&gt;

&lt;h2 id=&quot;money-fun&quot;&gt;Money fun&lt;/h2&gt;
&lt;p&gt;Last year already wasn’t the best time to start a huge loan - but
isn’t it always “&lt;em&gt;a few years ago would have been better&lt;/em&gt;”? So we had
multiple talks with different banks and specialised consultants until
we found something that we thought is good for us.&lt;/p&gt;

&lt;p&gt;Thinking about it now - we should have put even more money on top as
“reserve”, but who could have thought that 2026 turns into such a
shitshow? Does not help at all, quite the contrary. And that damn
lotto game always ends up with the wrong numbers, meh.&lt;/p&gt;

&lt;h1 id=&quot;plans-and-plans-and-more-plans---and-rules&quot;&gt;Plans and plans and more plans - and rules&lt;/h1&gt;
&lt;p&gt;For whichever reason you can not just go and put something on your
ground and be happy. At least not if you are part of the normal people and not
enormously rich. There is a large set of rules to follow. Usually that
is a good thing, even though some rules are sometimes hard to understand.&lt;/p&gt;

&lt;p&gt;In Germany, besides the usual laws, we have something that is called
“Bebauungsplan”, which translates to “development plan” (don’t know if
that carries the right meaning, it’s a plan on what and how may be
build, which can have really detailed specifications in). It basically
tells you every aspect &lt;em&gt;on top&lt;/em&gt; of the normal law that you have to
keep in mind.&lt;/p&gt;

&lt;p&gt;In our case we have the requirement of 2 full floors and CAN have a
third smaller on top, it limits how high the house can be &lt;em&gt;and&lt;/em&gt; also
how high our ground floor may be compared to the street. It regulates
where on the property we may build and how much ground we may cover
with the house, it gives a set of colors we are allowed to use, it
demands a flat roof that we must have as a green roof and has a number
of things more that aren’t important enough to list here. If you do
want to see the full list, &lt;a href=&quot;https://haus.ganneff.de/baustellen/2025/03/bebauungsplan/&quot;&gt;my german post on it has all the details
that matter to
us&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;With all that stuff in mind - off to plans. Wouldn’t have believed how
many details there are to take in. Room sizes are simple, but how to
arrange them for ideal usage of the sun, useful ways inside the house,
but also keeping in mind that water needs to flow through and out.
Putting a bath room right atop a living room means a water pipe needs
to go down there. Switch the bath room side in the house, and it
suddenly is above the kitchen - means you can connect the pipes from
it to the ones from kitchen, which is much preferred than going
through the living room. And lots more such things.&lt;/p&gt;

&lt;p&gt;It took us until nearly end of October to finalize the plans! And we
learned a whole load from it. We started with a lot of wishes. The
planner tried to make them work. Then we changed our minds. Plans
changed. Minds changed again. Comparing the end result with the first
draft we changed most of the ground floor around, with only the stairs
and the entrance door at the same position. Less changes for the upper
floor, but still enough.&lt;/p&gt;

&lt;h1 id=&quot;side-quests&quot;&gt;Side quests&lt;/h1&gt;
&lt;p&gt;The whole year was riddled with something my son named side quests. We
visited a construction exhibition near us, we went to the house
builders factory and took a look on how they work. We went to many
different other companies that do SOME type of work which we need
soon, say inside floors, painters, kitchen and more stuff.&lt;/p&gt;

&lt;p&gt;Of course the most important side quest was a visit to the notary to
finalize the contracts, especially for the plot of land (in Germany
you must have a notary for that to get entered into the governments
books). Creates lots of fees, of course, for the notary and also the
government (both fees and taxes here).&lt;/p&gt;

&lt;h1 id=&quot;building-permit&quot;&gt;Building permit&lt;/h1&gt;
&lt;p&gt;We had been lucky and only needed a small change to the plans to get
the building permit - and the second part, the wastewater permit (yes,
you need a separate one for this) also got through without trouble.&lt;/p&gt;

&lt;h1 id=&quot;choices-so-many-of-them&quot;&gt;Choices, so many of them&lt;/h1&gt;
&lt;p&gt;So in January we finally had an appointment for something that’s
called “Bemusterung” which badly translates to “Sampling”. Basically
two days at the house builders factory to select all of what’s needed
for the house that you don’t do in the plans. Doors, inside and out
and their type and color and handles. Same things for the windows and
the blinds and the protection level you want the windows to have.
Decide about stairs, design for the sanitary installations - and also
the height of the toilet! - and the tiles to put into the bathrooms.
Decisions on all the tech needed (heating system, ventilation and
whatnot.&lt;/p&gt;

&lt;p&gt;Two days, busy ones - and you can easily spend a lot of extra money
here if you aren’t careful. We managed to get “out of it” with only
about 4000€ extra, so pretty good.&lt;/p&gt;

&lt;h1 id=&quot;electro-and-automation&quot;&gt;Electro and automation&lt;/h1&gt;
&lt;p&gt;Now, here I am special. Back when I was young the job I learned is
electrician. So here I have very detailed wishes. I am also running
lots of automatism in my current flat - obviously the new house should
be better than that. So I have a lot of ideas and thoughts on it, so
this is entirely extra and certainly out of the ordinary the house
builder usually see.&lt;/p&gt;

&lt;p&gt;Which means I do all of that on my own. Well, the planning and some of
the work, I must have a company at hand for certain tasks, it is
required by some rules. But they will do what I planned, as long as I
don’t violate regulations.&lt;/p&gt;

&lt;p&gt;Which means the whole electrical installation is … different.
Entirely planned for automatisms and using KNX for it. I am so happy
to ditch Homeassistant and the load of Homematic, Zigbee and ZWave
based wireless things.&lt;/p&gt;

&lt;p&gt;Ok, Homeassistant is a nice thing - it can do a lot. And it can bridge
between about any system you can find. But it is a central single point of
failure. And it is a system that needs constant maintenance. Not
touched for a while? Plan for a few hours playing update whack-a-mole.
And often enough a component here or there breaks with an update. Can
be fixed, but takes another hour or two.&lt;/p&gt;

&lt;p&gt;So I change. Away from wireless based stuff. To wires. To a system
thats a standard for decades already. And works entirely without a
SPOF. (Yes, you can add one here too). And, most important, should I
ever die - can easily be maintained by anyone out there dealing with
KNX, which is a large number of people and companies. Without digging
through dozens of specialised integrations and whatnot.&lt;/p&gt;

&lt;p&gt;I may even end up with Homeassistant again - but that will entirely be
as a client. It won’t drive automations. It won’t be the central point
to do anything for the house. It will be a logging and data collecting
thing that enables me to put up easy visualizations. It may be an easy
interface for smartphones or tablets to control parts of the house,
for those parts where one wants this to happen. Not the usual
day-to-day stuff, extras on top.&lt;/p&gt;

&lt;h1 id=&quot;actual-work-happening&quot;&gt;Actual work happening&lt;/h1&gt;
&lt;p&gt;Since march there &lt;em&gt;finally&lt;/em&gt; is action visible. The base of the house
is getting build. Wednesday the 1st April we finally got the base
slab poured on the construction site and in another 10 days the house
is getting delivered and build up. A 40ton mobile crane will be there.&lt;/p&gt; </description> 
	<pubDate>Thu, 02 Apr 2026 21:23:23 +0000</pubDate>

</item> 
<item>
	<title>Joey Hess: banning all Anthropic employees</title>
	<guid>http://joeyh.name/blog/entry/banning_all_Anthropic_employees/</guid>
	<link>http://joeyh.name/blog/entry/banning_all_Anthropic_employees/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/joeyh2.png&quot; width=&quot;84&quot; height=&quot;75&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Per &lt;a href=&quot;https://joeyh.name/blog/entry/policy_on_adding_AI_generated_content_to_my_software_projects/&quot;&gt;my policies&lt;/a&gt;,
I need to ban every employee and contractor of Anthropic Inc from ever
contributing code to any of my projects. Anyone have a list?&lt;/p&gt;

&lt;p&gt;Any project that requires a Developer Certificate of Origin or similar should
be doing this, because Anthropic is making tools that explicitly lie about
the origin of patches to free software projects.&lt;/p&gt;

&lt;blockquote&gt;&lt;h2&gt;UNDERCOVER MODE â€” CRITICAL&lt;/h2&gt;

&lt;p&gt;You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. [...]
Do not blow your cover.&lt;/p&gt;

&lt;p&gt;NEVER include in commit messages or PR descriptions:&lt;/p&gt;

&lt;p&gt;[...]
The phrase &#39;Claude Code&#39; or any mention that you are an AI&lt;br /&gt;
Co-Authored-By lines or any other attribution&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;-- &lt;a href=&quot;https://x.com/vedolos/status/2039028274047893798&quot;&gt;via @vedolos&lt;/a&gt;&lt;/p&gt; </description> 
	<pubDate>Wed, 01 Apr 2026 16:41:33 +0000</pubDate>

</item> 
<item>
	<title>Ben Hutchings: FOSS activity in March 2026</title>
	<guid>https://www.decadent.org.uk/ben/blog/2026/04/01/foss-activity-in-march-2026</guid>
	<link>https://www.decadent.org.uk/ben/blog/2026/04/01/foss-activity-in-march-2026.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/benh.png&quot; width=&quot;109&quot; height=&quot;100&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;ul&gt;
  &lt;li&gt;Debian packages:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/firmware-nonfree&quot;&gt;firmware-nonfree&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:firmware-nonfree&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1064620&quot;&gt;#1064620: firmware-nonfree: suggestions for the packaging, gencontrol.py and debian/rules&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1126797&quot;&gt;#1126797: firmware-intel-graphics: Please ship irci_irci_ecr-master_20161208_0213_20170112_1500.bin as ipu3-fw.bin&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1131751&quot;&gt;#1131751: ABI break in amdxdna npu firmware&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;opened and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/firmware-nonfree/-/merge_requests/140&quot;&gt;!140: Update to 20260309&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/firmware-nonfree/-/merge_requests/141&quot;&gt;!141: Clean up packaging (from Nicolas Boulenguez)&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/kernel-team/firmware-nonfree/-/merge_requests/142&quot;&gt;!142: Replace copy-firmware.sh; install files and generate metainfo.xml at build time&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/firmware-nonfree/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 20260110-1~bpo13+1 to trixie-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 20260221-1 to unstable&lt;/li&gt;
              &lt;li&gt;uploaded version 20260221-1~bpo13+1 to trixie-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 20260309-1 to unstable&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/hexagon-dsp-binaries&quot;&gt;hexagon-dsp-binaries&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:hexagon-dsp-binaries&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to and reassigned &lt;a href=&quot;https://bugs.debian.org/1130844&quot;&gt;#1130844: firmware-qcom-soc depends on unavailable package firmware-qcom-dsp&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/initramfs-tools&quot;&gt;initramfs-tools&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/initramfs-tools/-/merge_requests/172&quot;&gt;!172: Use 3cpio for unmkinitramfs/lsinitramfs if available&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/initramfs-tools/-/merge_requests/186&quot;&gt;!186: update-initramfs: support loading post-update hooks from /usr/share/ too&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/initramfs-tools/-/merge_requests/190&quot;&gt;!190: autopkgtest: increase timeout to 240s on s390x&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/libtirpc&quot;&gt;libtirpc&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:libtirpc&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to and reassigned &lt;a href=&quot;https://bugs.debian.org/1132176&quot;&gt;#1132176: rpc.mountd: symbol lookup error: rpc.mountd: undefined symbol: rpc_gss_getcred, version TIRPC_0.3.0&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/libvirt&quot;&gt;libvirt&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:libvirt&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to and reassigned &lt;a href=&quot;https://bugs.debian.org/1130974&quot;&gt;#1130974: libvirt: Should use nftables for IP masquerading to work with PREEMPT_RT&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux&quot;&gt;linux&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:linux&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1128861&quot;&gt;#1128861: linux: when serving NFS, client attempts to lock served files fail with “No locks available”&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;replied to &lt;a href=&quot;https://bugs.debian.org/1130656&quot;&gt;#1130656: [grub2] wrong kernel version order&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1132224&quot;&gt;#1132224: linux: nouveau regression on GK208B/GT 730 after kernel update: artifacts and X crashes&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;Merge requests:
            &lt;ul&gt;
              &lt;li&gt;reviewed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1842&quot;&gt;!1842: Merge kernel-wedge and use directly&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;reviewed and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1849&quot;&gt;!1849: Cleanup installer&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1853&quot;&gt;!1853: [amd64] drivers/platform/x86/uniwill: Enable UNIWILL_LAPTOP as module&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened and merged &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1854&quot;&gt;!1854: Fix ordering of kernel version strings for multiple Debian revisions&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;reviewed and closed &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1857&quot;&gt;!1857: crypto: padlock-sha - Disable for Zhaoxin processor&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1862&quot;&gt;!1862: Fix regressions in debian/bin/test-patches&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/kernel-team/linux/-/merge_requests/1865&quot;&gt;!1865: Draft: hyperv-daemons: Build using upstream Makefile; install hv_fcopy_uio_daemon&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;(LTS) worked on backports to 5.10 and 6.1 of the fixes for
“&lt;a href=&quot;https://blog.qualys.com/vulnerabilities-threat-research/2026/03/12/crackarmor-critical-apparmor-flaws-enable-local-privilege-escalation-to-root&quot;&gt;CrackArmor&lt;/a&gt;”
security flaws&lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;(LTS) uploaded version 5.10.251-1 to bullseye-security&lt;/li&gt;
              &lt;li&gt;uploaded version 6.12.74-2~bpo12+1 to bookworm-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 6.18.15-1~bpo13+1 to trixie-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 6.19.6-2~bpo13+1 to trixie-backports&lt;/li&gt;
              &lt;li&gt;uploaded version 6.19.8-1~bpo13+1 to trixie-backports&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;(LTS) &lt;a href=&quot;https://tracker.debian.org/pkg/linux-6.1&quot;&gt;linux-6.1&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-6.1/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 6.1.164-1~deb11u1 to bullseye-security&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-base&quot;&gt;linux-base&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/linux-base/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 4.12.1~bpo12+1 to bookworm-backports&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/sgt-puzzles&quot;&gt;sgt-puzzles&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/src:sgt-puzzles&quot;&gt;Bugs&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/363441&quot;&gt;#363441: It’s too easy to quit&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/550311&quot;&gt;#550311: slant: Please make shading of filled squares configurable&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1079717&quot;&gt;#1079717: sgt-puzzles: [Mozaic] crashes when copying the game&lt;/a&gt;&lt;/li&gt;
              &lt;li&gt;closed &lt;a href=&quot;https://bugs.debian.org/1116973&quot;&gt;#1116973: sgt-puzzles: Loopy Spectres type&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/sgt-puzzles/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;uploaded version 20250730.a7c7826-1 to unstable&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/wireless-regdb&quot;&gt;wireless-regdb&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://tracker.debian.org/pkg/wireless-regdb/news/&quot;&gt;Uploads&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;(LTS) uploaded version 2026.02.04-1~deb11u1 to bullseye-security&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Debian non-packages:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/kernel-team/kernel-team&quot;&gt;kernel-team&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;added script to show status of all kernel team backports&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/salsa-ci-team/pipeline&quot;&gt;pipeline&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://salsa.debian.org/salsa-ci-team/pipeline/-/issues/&quot;&gt;Issues&lt;/a&gt;:
            &lt;ul&gt;
              &lt;li&gt;opened &lt;a href=&quot;https://salsa.debian.org/salsa-ci-team/pipeline/-/issues/552&quot;&gt;#552: piuparts job fails to install dependencies outside of main&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Mailing lists:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://lists.debian.org/debian-kernel/&quot;&gt;debian-kernel&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;posted and replied to &lt;a href=&quot;https://lists.debian.org/85a5f56ec15a212d00e9e6ea8b117467a1ab4b78.camel@decadent.org.uk&quot;&gt;Agenda items for kernel-team meeting on 2026-03-18&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;replied to &lt;a href=&quot;https://lists.debian.org/7cfabf67aee21b9e8bc64a777cd4b95e4e1ddf18.camel@decadent.org.uk&quot;&gt;How is “keep two last kernels” policy implemented?&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lists.debian.org/debian-lts-announce/&quot;&gt;debian-lts-announce&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/abQNlK3I7kb22ztP@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4498-1] linux security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/abQNrf0ok3F3r0ID@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4499-1] linux-6.1 security update&lt;/a&gt;&lt;/li&gt;
          &lt;li&gt;posted &lt;a href=&quot;https://lists.debian.org/abWnpdMMHCmuNXXw@decadent.org.uk&quot;&gt;[SECURITY] [DLA 4501-1] wireless-regdb new upstream version&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/linux-bluetooth/&quot;&gt;linux-bluetooth&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;(LTS) replied to &lt;a href=&quot;https://lore.kernel.org/linux-bluetooth/249b111f2618ea16b98201dae672b578d501ec4a.camel@decadent.org.uk/T/&quot;&gt;[PATCH v3] Bluetooth: L2CAP: Fix invalid response to L2CAP_ECRED_RECONF_REQ&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/netdev/&quot;&gt;netdev&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;(LTS) replied to &lt;a href=&quot;https://lore.kernel.org/netdev/cfbb231e80caceb4138e37d036de7dca39ec7e7b.camel@decadent.org.uk/T/&quot;&gt;[PATCH net v2] net: consume xmit errors of GSO frames&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://lore.kernel.org/stable/&quot;&gt;stable&lt;/a&gt;/&lt;a href=&quot;https://lore.kernel.org/patches/&quot;&gt;patches&lt;/a&gt;:
        &lt;ul&gt;
          &lt;li&gt;(LTS) reviewed
&lt;a href=&quot;https://lore.kernel.org/stable/992df439ca66e562353d285642c6ab8e1c69e2e6.camel@decadent.org.uk/T/&quot;&gt;5.10.252&lt;/a&gt;
and replied to
&lt;a href=&quot;https://lore.kernel.org/stable/f7285cc36ec39c4a6cef633add170518f2e34b3a.camel@decadent.org.uk/T/&quot;&gt;various&lt;/a&gt;
&lt;a href=&quot;https://lore.kernel.org/stable/c48bc87973a165e0a944f7a7665338626187b4fd.camel@decadent.org.uk/T/&quot;&gt;patches&lt;/a&gt;
&lt;a href=&quot;https://lore.kernel.org/patches/f7f34b5cf1ddd5a880e0ceba52670bb73f2d21e2.camel@decadent.org.uk/T/&quot;&gt;included&lt;/a&gt;
&lt;a href=&quot;https://lore.kernel.org/patches/8b929c0ed7884212931668cc77074cbffa2b2d45.camel@decadent.org.uk/T/&quot;&gt;in it&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Wed, 01 Apr 2026 15:30:53 +0000</pubDate>

</item> 
<item>
	<title>Daniel Pocock: Losing Debian: Sruthi Chandran election flop</title>
	<guid>https://danielpocock.com/en/losing-debian-sruthi-chandran-election-flop</guid>
	<link>https://danielpocock.com/en/losing-debian-sruthi-chandran-election-flop/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/pocock.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;The fact that only one candidate is running in the
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; elections gives a stark reminder about the state of the
so-called community.  The main reason why other people did not contest
the election is because of fear.  Fear of a circle of reprisals that began
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
when Adrian von Bidder-Senn died on our wedding day&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When CentOS died, people tried to carry on in various ways.  That tells
us a lot about human psychology.  People knew the game was over but they
tried to continue as if it was business as usual, as if the situation
could be salvaged, as if it was only a temporary crisis.&lt;/p&gt;

&lt;p&gt;Due to years of
&lt;a href=&quot;https://danielpocock.com/en/category/censorship/&quot;&gt;
censorship&lt;/a&gt;, including the
&lt;a href=&quot;https://danielpocock.com/en/how-much-does-google-pay-to-destroy-a-man-and-his-family/&quot;&gt;
payment of $120,000 to steal Debian-related domain names&lt;/a&gt;, the
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianists&lt;/a&gt; have been living in a bubble and deluding themselves.  When
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt; nominated on Friday 13th, people acted as if this was
a good thing.&lt;/p&gt;

&lt;p&gt;Now Sruthi has stopped answering questions on the
&lt;a href=&quot;https://lists.debian.org/debian-vote/&quot;&gt;
Debian-vote mailing list&lt;/a&gt; and it seems reality has started to sink in.
People are coming to realize that the position of Debian Project Leader
is the interface between
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; and the outside world.  People can fool themselves and
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
use the Code of Conduct gaslighting&lt;/a&gt; to blackmail other volunteers to
pretend that
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi&lt;/a&gt; is a great leader.  People are coming to realise that these
tricks won&#39;t work on the wider community.  Given that
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi&lt;/a&gt; would be Debian&#39;s interface to the outside world, we can&#39;t
just ignore how the world views
&lt;a href=&quot;https://danielpocock.com/en/sruthi-chandran-debian-diversity-favoritism-hidden-conflicts-interest/&quot;&gt;
the candidate who is the wife of another developer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;She has ignored the most serious questions on
&lt;a href=&quot;https://lists.debian.org/debian-vote/&quot;&gt; 
Debian-vote mailing list&lt;/a&gt;.  A woman trying to run Debian from a
&lt;a href=&quot;https://danielpocock.com/en/category/social-control-media/&quot;&gt;
social control media&lt;/a&gt;
account is the death of Debian.  Here is a tally of the number of replies
she provided each day for those who use email, the mainstay of Debian
communication:&lt;/p&gt;

&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Day&lt;/th&gt;&lt;th&gt;Count&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;14 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;15 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;16 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;17 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;18 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;19 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;20 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;21 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;22 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;23 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;24 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;25 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;26 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;27 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;28 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;29 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;30 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;31 March&lt;/th&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;That is a total of only 15 replies.  She has been largely silent for a
whole week since 24 March.&lt;/p&gt;

&lt;p&gt;Technically, questions and their answers are supposed to be completed
before midnight on Friday, 3 April.  The most critical questions have not
been answered.  In her platform,
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt; boasts about being the &quot;Chief orga DebConf India 2023&quot;
but there has never been an official report about the
&lt;a href=&quot;https://lists.debian.org/debian-vote/2026/03/msg00090.html&quot;&gt;
death of Abraham Raji at the conference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Voting runs from 4 April to 17 April, which is the 15th anniversary of
the day
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
Adrian von Bidder-Senn died on our wedding day&lt;/a&gt;.  It was discussed like
a copy-cat suicide but there was no official report about those deaths
either.&lt;/p&gt;

&lt;p&gt;Remember the words
&lt;a href=&quot;https://abrahamraji.in/post/debian/&quot;&gt;
from Abraham Raji himself&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
Everything in Debian is transparent, all forms of official communication are a matter of public record, the amount of unresolved bugs, every step taken by debian as an organization, everything is in the open! I appreciate that from my distribution. There is no room for underhand corporate deals, no unfair treatment behind private mails and everything can be reviewed by the public.
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Does
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt; spend more time in &lt;em&gt;debian-private&lt;/em&gt; (leaked)
and WhatsApp groups than the public communication channels that Debian
is supposed to be using?&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt;&#39;s platform tells us she wants to put diversity ahead
of traditional goals like freedom and security.  She has been very vague
about this.  As a consequence, more evidence is going to be published
during the voting period to prove that Debian &quot;diversity&quot; means some men who
did the real work are not being given credit while some large sums of
money were assigned to the wives and girlfriends of cabal members.&lt;/p&gt;

&lt;img alt=&quot;Sruthi Chandran, platform, Debian Project Leader, 2026, Abraham Raji&quot; src=&quot;https://danielpocock.com/assets/people/sruthi-chandran-srud/2026-platform-debconf23.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;I&#39;ve never stated whether people should vote for
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt; or not.  Looking at the tone of the discussion, I feel
people are coming to realise the way the outside world views candidates
like this is not the same way that people view it from inside the bubble.&lt;/p&gt;

&lt;p&gt;Consider the irony: they spent all that money in arguments about
leaks that are &quot;tarnishing&quot; the trademark.  The implication of these
arguments about tarnishing is that the way the outside world views
Debianism does matter.  Can anybody see the risk that
&lt;a href=&quot;https://danielpocock.com/en/people/sruthi-chandran-srud/&quot;&gt;
Sruthi Chandran&lt;/a&gt; and a lop-sided diversity crusade could do far more
to tarnish the trademark than any leaks that have appeared up to this
moment?&lt;/p&gt;

&lt;p&gt;Debian may not die exactly the same way that CentOS died.  At some
point, as with CentOS, we will go past the point of no return.  Maybe
we already did.  Will people have the courage to ask questions before
that threshold is crossed or will they continue acting as if nothing is
wrong even long after the life support system has been unplugged from
the corpse?&lt;/p&gt;

&lt;p&gt;Remember,
&lt;a href=&quot;https://danielpocock.com/en/how-much-does-google-pay-to-destroy-a-man-and-his-family/&quot;&gt;
Debianists gave over $120,000 in kill money to racist Swiss lawyerists to
attack my family&lt;/a&gt; but they didn&#39;t pay
&lt;a href=&quot;https://danielpocock.com/en/people/abraham-raji/&quot;&gt;
Abraham Raji&lt;/a&gt; anything for the work he did helping organise
&lt;a href=&quot;https://danielpocock.com/en/category/debconf23/&quot;&gt;
DebConf23&lt;/a&gt;.  When Raji joined the other developers on the day trip,
&lt;a href=&quot;https://danielpocock.com/en/bad-faith-lawyers-get-lifejackets-abraham-raji-gets-none/&quot;&gt;
they asked him to contribute some of his own money, he was left behind
to swim alone and he drowned&lt;/a&gt;.  Yet the lawyerists
&lt;a href=&quot;https://danielpocock.com/en/how-much-does-google-pay-to-destroy-a-man-and-his-family/&quot;&gt;
were given $120,000&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The best way to encourage people to nominate for the election will be for
the existing leader,
&lt;a href=&quot;https://danielpocock.com/en/people/andreas-tille/&quot;&gt;
Andreas Tille&lt;/a&gt;, to withdraw all the privacy attacks, settle the lawsuits
proactively and ensure the next leader can walk in and find the desk is clean
ready to work on productive things.&lt;/p&gt;

&lt;p&gt;Don&#39;t hold your breath waiting for transparency about these attacks on my
family.  There is still time to watch my video and
&lt;a href=&quot;https://danielpocock.com/en/donate/&quot;&gt;
contribute to the crowdfunding campaign&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 01 Apr 2026 13:30:00 +0000</pubDate>

</item> 
<item>
	<title>Daniel Pocock: French judgment: parasitisme by FSFE &amp; Matthias Kirschner (CO23.002709)</title>
	<guid>https://danielpocock.com/en/french-judgment-parasitism-fsfe-matthias-kirschner-CO23-002709</guid>
	<link>https://danielpocock.com/en/french-judgment-parasitism-fsfe-matthias-kirschner-CO23-002709/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/pocock.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;In previous reports, we&#39;ve described the tactics of the
&lt;a href=&quot;https://danielpocock.com/en/category/fsfe-misfits/&quot;&gt;
FSFE misfits&lt;/a&gt; using terms like
&lt;a href=&quot;https://danielpocock.com/en/matthias-fsfe-analogous-identity-fraud/&quot;&gt;
identity fraud&lt;/a&gt; and
&lt;a href=&quot;https://danielpocock.com/en/nigerian-fraud-in-fsfe-constitution/&quot;&gt;
Nigerian fraud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the French justice system, they have their own name for this
type of scam: &lt;em&gt;parasitisme&lt;/em&gt;.&lt;/p&gt;

&lt;a href=&quot;https://danielpocock.com/assets/fsfe/2026-04-01-judgment.pdf&quot;&gt;
&lt;img alt=&quot;FSFE, judgment, Matthias Kirschner, Galia Mancheva, Jonas Oberg, Elias Diem, Parasitisme, Richard Stallman, FSF, FSFE, John Sullivan, Daniel Pocock, Fellowship&quot; src=&quot;https://danielpocock.com/assets/fsfe/fsfe-insect.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Parasitisme&lt;/em&gt; is the French legal concept of one person or organisation
trying to usurp the reputation of another person or organisation to
obtain money or procure the work of volunteers.&lt;/p&gt;

&lt;p&gt;As an
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australian&lt;/a&gt;, the Fellowship elected me on
&lt;a href=&quot;https://danielpocock.com/en/category/anzac/&quot;&gt;
ANZAC Day&lt;/a&gt; in 2017 to investigate the
&lt;a href=&quot;https://danielpocock.com/en/category/fsfe-misfits/&quot;&gt;
FSFE misfits&lt;/a&gt; in Berlin.
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australians&lt;/a&gt; don&#39;t know a lot of French but we know parasites.&lt;/p&gt;

&lt;p&gt;Is the judgment real or is it just another April fools day joke?
The facts and the leaks are certainly real.  The French courts really
use the word &lt;em&gt;Parasitisme&lt;/em&gt; to describe this type of scam.
However, some fake judgments are being distributed with the number
&lt;em&gt;CO23.002709&lt;/em&gt; and the names of
&lt;a href=&quot;https://juristgate.com/en/people/caroline-kuhnlein-hofmann/&quot;&gt;
Caroline Kuhnlein-Hofmann&lt;/a&gt; and
&lt;a href=&quot;https://juristgate.com/en/people/melanie-bron/&quot;&gt;
MÃ©lanie Bron&lt;/a&gt;.  You can recognise the fake judgments because they
have the date of the Kristallnacht, 10 November,
&lt;a href=&quot;https://danielpocock.com/en/debian-human-rights-violations-swiss-women-nazi-symbolism/&quot;&gt;
on the first page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Click for the
&lt;a href=&quot;https://danielpocock.com/assets/fsfe/2026-04-01-judgment.pdf&quot;&gt;
&lt;em&gt;parasitisme&lt;/em&gt; judgment and punishments&lt;/a&gt;:&lt;/p&gt;

&lt;a href=&quot;https://danielpocock.com/assets/fsfe/2026-04-01-judgment.pdf&quot;&gt;
&lt;img alt=&quot;FSFE, judgment, Matthias Kirschner, Galia Mancheva, Jonas Oberg, Elias Diem, Parasitisme, Richard Stallman, FSF, FSFE, John Sullivan, Daniel Pocock, Fellowship&quot; src=&quot;https://danielpocock.com/assets/fsfe/2026-04-01-judgment-top.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;/a&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;If you want
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australians&lt;/a&gt; to continue working to put these dangerous pests to rest,
please
&lt;a href=&quot;https://danielpocock.com/en/donate/&quot;&gt;
watch my crowdfunding campaign video and discuss it with your community
today&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 01 Apr 2026 09:30:00 +0000</pubDate>

</item> 
<item>
	<title>Daniel Pocock: Red Hat: Latin-1 character set under threat from Bishop Michael Martin, North Carolina</title>
	<guid>https://danielpocock.com/en/red-hat-latin-1-charset-under-threat-bishop-north-carolina</guid>
	<link>https://danielpocock.com/en/red-hat-latin-1-charset-under-threat-bishop-north-carolina/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/pocock.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;If religion is a form of
&lt;a href=&quot;https://danielpocock.com/en/category/social-engineering/&quot;&gt;
social engineering attack&lt;/a&gt;, having your own language is the
ultimate mind-control trick.&lt;/p&gt;

&lt;p&gt;Latin is the language of God - or control.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_8859-1&quot;&gt;
Latin-1&lt;/a&gt; character set (ISO 8859-1) is natively supported in the
&lt;a href=&quot;https://danielpocock.com/en/category/linux/&quot;&gt;
Linux&lt;/a&gt; console driver, including
&lt;a href=&quot;https://danielpocock.com/en/category/red-hat/&quot;&gt;
Red Hat&lt;/a&gt; Linux systems.&lt;/p&gt;

&lt;p&gt;On 12 December 1924, Pope Pius XI created the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Diocese_of_Charlotte#Diocese_of_Raleigh&quot;&gt;
Diocese of Raleigh, North Carolina&lt;/a&gt;.  In 1971, Pope Paul VI forked the
diocese to create a separate
&lt;a href=&quot;https://en.wikipedia.org/wiki/Diocese_of_Charlotte#Diocese_of_Charlotte&quot;&gt;
Diocese of Charlotte.&lt;/a&gt;&lt;/p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Diocese_of_Charlotte#Diocese_of_Charlotte&quot;&gt;

&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Diocese_of_Charlotte#Diocese_of_Charlotte&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://danielpocock.com/en/category/red-hat/&quot;&gt;
Red Hat&lt;/a&gt; was founded in Durham.  They subsequently relocated to Raleigh
and in 2009 they began preaching about the need for
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
Codes of Conduct&lt;/a&gt; demagoguery.&lt;/p&gt;

&lt;p&gt;From
&lt;a href=&quot;https://fedoraproject.org/wiki/Meeting:Board_meeting_2009-05-14&quot;&gt;
2009 meeting minutes&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
Paul: There are just as many RHT&#39;ers contributing to the negativity as volunteers
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;In the rival Diocese of Charlotte,
&lt;a href=&quot;https://en.wikipedia.org/wiki/Michael_T._Martin&quot;&gt;
Bishop Michael Martin&lt;/a&gt; was appointed on 9 April 2024.&lt;/p&gt;

&lt;p&gt;In May 2025, a draft
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
Code of Conduct&lt;/a&gt; was leaked from Bishop Martin in Charlotte, North Carolina.
The document includes harsh new restrictions on the use of practices from the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Tridentine_Mass&quot;&gt;
Traditional Latin Mass&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In a
&lt;a href=&quot;https://infovaticana.com/en/2026/03/31/the-bishop-of-charlotte-usa-reaffirms-there-will-be-no-going-back-on-the-traditional-mass/&quot;&gt;
report from 31 March 2026&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;em&gt;
&lt;h3&gt;The Diocese of Charlotte, a focal point of liturgical conflict&lt;/h3&gt;

&lt;p&gt;The controversy is not new. Since his arrival in the diocese in 2024, following the resignation for health reasons of Bishop Peter Jugis, Michael Martin has been the target of strong criticism from the faithful attached to the traditional liturgy.&lt;/p&gt;

&lt;/em&gt;&lt;p&gt;&lt;em&gt;The most significant episode occurred in May 2025, when he reduced from four to one the authorized locations for the celebration of the traditional Latin Mass, leaving only one chapel for these celebrations. The measure was presented expressly as part of the application of &lt;/em&gt;Traditionis Custodes&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;&lt;em&gt;

&lt;p&gt;This was followed by leaked diocesan documents that pointed to new restrictions, including possible limits on the use of Latin in the liturgy, certain traditional vestments, and some habitual postures of the faithful at the moment of Communion.&lt;/p&gt;

&lt;h3&gt;Prohibition of kneelers and Communion rails&lt;/h3&gt;

&lt;p&gt;The tension increased even further in September 2025, when Martin prohibited the use of an altar rail in a Catholic school in Charlotte.&lt;/p&gt;
&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;The fact the 2025 document is a draft should not be understated.  It is
not unusual for managers to ask their subordinates to write drafts like
this full of ideas from brainstorming sessions.  The bishop may have
asked different subordinates or theology students to write competing
drafts with the intention of cherry-picking ideas from each of them
rather than using the draft verbatim.  Therefore, as one of possibly
many drafts, it has no meaning until Bishop Martin decides to make a
public statement.&lt;/p&gt;

&lt;p&gt;Nonetheless, the leaking of a draft is a great way to get people
talking about the
&lt;a href=&quot;https://danielpocock.com/en/category/catholic/&quot;&gt;
Catholic Church&lt;/a&gt;.  Many companies deliberately leak their own
documents to gain attention on
&lt;a href=&quot;https://danielpocock.com/en/category/social-control-media/&quot;&gt;
social control media&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are some of the key points and benefits of the Latin language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Universal - people can attend a Latin mass in any country and it will
sound the same, whether they understand it or not&lt;/li&gt;
&lt;li&gt;The language and the Catholic affinity for Latin have survived much
longer than the Roman empire&lt;/li&gt;
&lt;li&gt;The meaning of any original Latin text is usually more specific and less ambiguous than any translations to English or other modern languages.&lt;/li&gt;
&lt;li&gt;The Latin &lt;a href=&quot;https://www.missalemeum.com/en/calendar&quot;&gt;calendar of saints, readings and seasons&lt;/a&gt; provides structure throughout the calendar year&lt;/li&gt;
&lt;li&gt;Latin language is also used in medicine, law, our alphabet and many words in European languages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, Latin has been challenged over the years.  English bibles
have been around for centuries.&lt;/p&gt;

&lt;p&gt;Can you put candles on the altar?  The candles are part of the
Traditional Latin Mass but there have been arguments about whether
they are permitted or even banned in the post-Latin world.  My first
ever voluntary role was being an altar boy at our local church.  Lighting
the candles before mass and extinguishing them at the end of the mass
were among our responsibilities.  Was I breaking the
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
Code of Conduct&lt;/a&gt; by lighting these candles for an English-language mass?&lt;/p&gt;

&lt;p&gt;In fact, due to the extreme temperatures in
&lt;a href=&quot;https://danielpocock.com/en/category/australia/&quot;&gt;
Australia&lt;/a&gt;, we have many days of the year when all types of fire
are banned.  If the altar boys still light the candles on one of the
&lt;em&gt;total fire ban&lt;/em&gt; days, are they simultaneously violating two
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
Codes of Conduct&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Latin was both the language of the empire and the language of the
official state religion.  Today, English is the language of business,
but more people speak Chinese or Spanish.  There are many more religions
and sects.  When children are born into a family that practices the
Traditional Latin Mass, they have the opportunity to learn Latin from
childhood.  When modern day religions and cults recruit adult members
who never practiced a religion before, they don&#39;t have the same
opportunitity to indoctrinate those people into a language.&lt;/p&gt;

&lt;p&gt;The use of the Latin language has disadvantages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Many people don&#39;t understand Latin, either spoken or written.&lt;/li&gt;
&lt;li&gt;Latin can be and has been used to fool people.  In historic times,
the jurists and priests were the only people who could read the Latin texts.
They would find some paragraph in the bible to justify their own opinions
or decisions and they would pretend to translate and explain it to the
lay people.&lt;/li&gt;
&lt;li&gt;The church parted with it in 1962, new generations abandoned it.  For
example, very few schools still teach Latin.&lt;/li&gt;
&lt;li&gt;Compared to other languages, there are very few opportunities to
practice speaking and reading in Latin.&lt;/li&gt;
&lt;li&gt;The Catholic church is now competing with many other Christian religions.
The use of the Latin language began at a time when other forms of
Christianity did not exist.  Moreover, the church is competing in
countries without a state religion.  Only in Italy and Rome are people
ninety-nine percent Catholic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Vatican has not completely banned use of the Traditional Latin Mass.
They have not completely banned candles and some other traditions
that are associated with the Traditional Latin Mass.  Nonetheless, there is a
&lt;a href=&quot;https://danielpocock.com/en/category/code-of-conduct-gaslighting/&quot;&gt;
Code of Conduct&lt;/a&gt; that every modern day diocese is expected to follow
and that means the majority of masses should be offered in the local
language(s) understood by the congregation.&lt;/p&gt;

&lt;h3&gt;Related web sites about the Traditional Latin Mass&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://onepeterfive.com/helping-children-enter-into-the-traditional-latin-mass-part-1/&quot;&gt;Helping Children Enter into the Traditional Latin Mass – Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.traditionsanity.com/p/raised-in-the-fear-and-love-of-god&quot;&gt;Raised in the Fear and Love of God: Why the Traditional Mass Is Good for Children (Part 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newliturgicalmovement.org/2015/03/ex-ore-infantium-children-and.html&quot;&gt;Ex ore infantium: Children and the Traditional Latin Mass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/General_Roman_Calendar_of_1960&quot;&gt;General Roman Calendar of 1960&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Second_Vatican_Council&quot;&gt;Second Vatican Council (Vatican II)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Related blogs about the church&lt;/h3&gt;

&lt;ul&gt;

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/eulogy-father-john-brosnan-peter-norden/&quot;&gt;Eulogy for Father John Brosnan by Peter Norden AO&lt;/a&gt;&lt;/li&gt;
  

  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/prison-gate-backdrop-baptism-fr-sean-o-connell-st-pauls-coburg/&quot;&gt;Prison gate backdrop to baptism by Fr Sean O&#39;Connell, St Paul&#39;s, Coburg&lt;/a&gt;&lt;/li&gt;
  

  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/cyber-polygamy-catholic-synod-synodality-social-control-media-open-source-relationships/&quot;&gt;Polygamy, from Catholic Synod on Synodality to Social Control Media &amp;amp; Debian CyberPolygamy&lt;/a&gt;&lt;/li&gt;
  

  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/social-control-media-technology-catholicism-synod-on-synodality-progress-review-feedback/&quot;&gt;Social Control Media, Technology &amp;amp; Catholicism: Synod on Synodality review and feedback&lt;/a&gt;&lt;/li&gt;
  

  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/conviction-overturned-helped-but-not-harbored-by-catholic-priest/&quot;&gt;Conviction overturned: helped but not harbored by Catholic priest Fr Sean O&#39;Connell&lt;/a&gt;&lt;/li&gt;
  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/conspiracy-grooming-alex-jurado-voice-of-reason-compared-to-outreachy/&quot;&gt;Conspiracy or grooming? Alex Jurado, Voice of Reason compared to Outreachy&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/hacking-revelations-at-vatican-jubilee-digital-missionaries/&quot;&gt;Hacking revelations at Vatican Jubilee of Digital Missionaries&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/riot-for-peace-with-catholic-influencers-digital-missionaries-jubilee/&quot;&gt;Riot for peace &amp;amp; Love: Catholic Influencers and Digital Missionaries welcome Jubilee of Youth&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-opening-sessions-photos/&quot;&gt;Jubilee of Digital Missionaries, opening sessions photos&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-adoration-eucharist-photos/&quot;&gt;Jubilee of Digital Missionaries, adoration of the Eucharist (photos)&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-holy-door-mass-pope-photos/&quot;&gt;Jubilee of Digital Missionaries, Holy Door and mass with the Pope (photos)&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-tuesday-afternoon-photos/&quot;&gt;Jubilee of Digital Missionaries, Tuesday afternoon sessions (photos)&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-vatican-gardens-photos/&quot;&gt;Jubilee of Digital Missionaries, Vatican gardens (photos)&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/jubilee-digital-missionaries-catholic-influencers-concert-photos/&quot;&gt;Jubilee of Digital Missionaries, Catholic Influencers concert (photos)&lt;/a&gt;&lt;/li&gt;
  

  

  

  

  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/assumption-procession-fourviere-lyon-france/&quot;&gt;Feast of the Assumption, procession at Fourvière, Lyon, France&lt;/a&gt;&lt;/li&gt;
  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/ordination-father-billy-maurice-honzounnon-sainte-irenee/&quot;&gt;Ordination of Fr Billy Maurice Honzounnon, Sainte-Irénée, Lyon&lt;/a&gt;&lt;/li&gt;
  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/catholic-pro-life-teaching-includes-artificial-intelligence-risks/&quot;&gt;Catholic Pro-Life teaching includes artificial intelligence risks&lt;/a&gt;&lt;/li&gt;
  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/invitation-to-live-next-door-to-george-amal-clooney/&quot;&gt;Invitation to live next door to George and Amal Clooney&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/tom-silvagni-appeal-secret-baby-alannah-iaconis-admits-sinfulness-condoms-text-messages/&quot;&gt;Tom Silvagni appeal, secret baby, Sinful confession of Alannah Iaconis: condoms in text messages&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/red-hat-latin-1-charset-under-threat-bishop-north-carolina/&quot;&gt;Red Hat: Latin-1 character set under threat from Bishop Michael Martin, North Carolina&lt;/a&gt;&lt;/li&gt;
  

&lt;/ul&gt;

&lt;h3&gt;Related blogs about the death of Adrian von Bidder on Palm Sunday, our wedding day&lt;/h3&gt;

&lt;ul&gt;

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/adrian-von-bidder-homeworking-debian-unexplained-deaths/&quot;&gt;Adrian von Bidder, homeworking &amp;amp; Debian unexplained deaths&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/undrr-phe-criteria-match-debian-suicide-cluster/&quot;&gt;UN DRR and Public Health England criteria match Debian Suicide Cluster&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/diana-von-bidder-evp-basel-debian-suicide-cluster/&quot;&gt;Diana von Bidder (EVP, Basel) &amp;amp; Debian suicide cluster&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/euthanasia-legacy-debian-suicide-cluster/&quot;&gt;Euthanasia perception, legacy &amp;amp; Debian Suicide Cluster&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/swiss-corruption-greens-liip-debian/&quot;&gt;Swiss corruption, Greens, Liip &amp;amp; Debian human rights violations&lt;/a&gt;&lt;/li&gt;
  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/zurich-ceo-suicide-martin-senn-proximity-adrian-diana-von-bidder-debian/&quot;&gt;Zurich CEO suicide, Martin Senn proximity to Adrian and Diana von Bidder-Senn, Debian&lt;/a&gt;&lt;/li&gt;
  

  

  

  
    &lt;li&gt;&lt;a href=&quot;https://danielpocock.com/en/diana-adrian-von-bidder-senn-evp-palm-sunday-debian-death-wedding-day/&quot;&gt;Diana &amp;amp; Adrian von Bidder-Senn, EVP, Palm Sunday &amp;amp; Debian death on wedding day&lt;/a&gt;&lt;/li&gt;
  

  

  

  

&lt;/ul&gt;

&lt;h3&gt;Catholic.Community&lt;/h3&gt;

&lt;p&gt;Please
&lt;a href=&quot;https://Catholic.Community&quot;&gt;
follow the Catholic.Community web site&lt;/a&gt; and make it your
home page.&lt;/p&gt; </description> 
	<pubDate>Wed, 01 Apr 2026 07:00:00 +0000</pubDate>

</item> 
<item>
	<title>Junichi Uekawa: April already.</title>
	<guid>http://www.netfort.gr.jp/~dancer/diary/daily/2026-Apr-1.html.en#2026-Apr-1-08:27:51</guid>
	<link>http://www.netfort.gr.jp/~dancer/diary/daily/2026-Apr-1.html.en#2026-Apr-1-08:27:51</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dancer.png&quot; width=&quot;75&quot; height=&quot;97&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  April already. Wondering how bazel update is going in Debian. Seems like a large undertaking.
        &lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Tue, 31 Mar 2026 23:27:51 +0000</pubDate>

</item> 
<item>
	<title>Benjamin Mako Hill: Quote #75514</title>
	<guid>https://mako.cc/copyrighteous/?p=3356</guid>
	<link>https://mako.cc/copyrighteous/quote-75514</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/mako.gif&quot; width=&quot;65&quot; height=&quot;93&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Although I never submitted to it, I made several appearances in the now-defunct quote database on bash.org (QDB). I’m dealing with a broken keyboard now, and went to dig hard to find &lt;a href=&quot;https://web.archive.org/web/20221210050632/http://bash.org/?75514&quot;&gt;this classic in the Wayback machine&lt;/a&gt;. I thought I would put it back on the web:&lt;/p&gt;



&lt;pre class=&quot;wp-block-code&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;p class=&quot;quote&quot;&gt;&lt;code&gt;&amp;lt;mako&amp;gt; my letter &quot;eye&quot; stopped worng
&amp;lt;luca&amp;gt; k, too?
&amp;lt;mako&amp;gt; yeah
&amp;lt;luca&amp;gt; sounds like a mountain dew spill
&amp;lt;mako&amp;gt; and comma
&amp;lt;mako&amp;gt; those three
&amp;lt;mako&amp;gt; ths s horrble
&amp;lt;luca&amp;gt; tme for a new eyboard
&amp;lt;luca&amp;gt; &#39;ve successfully taen my eyboard apart and fxed t by cleanng t wth alcohol
&amp;lt;mako&amp;gt; stop mang fun of me
&amp;lt;mako&amp;gt; ths s a laptop!&lt;/code&gt;&lt;/p&gt;&lt;/pre&gt;



&lt;p&gt;It was, in fact, horrble.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Tue, 31 Mar 2026 21:13:00 +0000</pubDate>

</item> 
<item>
	<title>C.J. Adams-Collier: Finding: Promoting SeaBIOS Cloud Images to UEFI Secure Boot (Proxmox)</title>
	<guid>https://wp.c9h.org/cj/?p=2133</guid>
	<link>https://wp.c9h.org/cj/?p=2133</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/cj.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;h2 id=&quot;discovery&quot;&gt;Discovery&lt;/h2&gt;
&lt;p&gt;Legacy cloud templates often lack the partitioning and bootloader&lt;br /&gt;
binaries required for UEFI Secure Boot. Attempting to switch such a VM&lt;br /&gt;
to OVMF in Proxmox results in “not a bootable disk.” We discovered that&lt;br /&gt;
a surgical promotion is possible by manipulating the block device and&lt;br /&gt;
EFI variables from the hypervisor.&lt;/p&gt;
&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;/h2&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;&lt;strong&gt;Protective MBR Flags:&lt;/strong&gt; Legacy installers often set&lt;br /&gt;
the &lt;code&gt;pmbr_boot&lt;/code&gt; flag on the GPT’s protective MBR. Strict UEFI&lt;br /&gt;
implementations (OVMF) will ignore the GPT if this flag is present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing ESP:&lt;/strong&gt; Cloud images often lack a FAT32 EFI&lt;br /&gt;
System Partition (ESP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variable Store:&lt;/strong&gt; A fresh Proxmox&lt;br /&gt;
&lt;code&gt;efidisk0&lt;/code&gt; is empty and lacks both the trust certificates&lt;br /&gt;
(PK/KEK/db) and the BootOrder entries required for an automated&lt;br /&gt;
boot.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;the-promotion-rule&quot;&gt;The “Promotion” Rule&lt;/h2&gt;
&lt;p&gt;To upgrade a SeaBIOS VM to Secure Boot without a full OS reinstall:&lt;br /&gt;
1. &lt;strong&gt;Surgical Partitioning:&lt;/strong&gt; Map the disk on the host and&lt;br /&gt;
add a FAT32 partition (Type &lt;code&gt;EF00&lt;/code&gt;). Clear the&lt;br /&gt;
&lt;code&gt;pmbr_boot&lt;/code&gt; flag from the MBR. 2. &lt;strong&gt;Binary&lt;br /&gt;
Preparation:&lt;/strong&gt; Boot the VM in SeaBIOS mode to install&lt;br /&gt;
&lt;code&gt;shim&lt;/code&gt; and &lt;code&gt;grub-efi&lt;/code&gt; packages. Use&lt;br /&gt;
&lt;code&gt;grub2-mkconfig&lt;/code&gt; to populate the new ESP. 3. &lt;strong&gt;Trust&lt;br /&gt;
Injection:&lt;/strong&gt; Use the &lt;code&gt;virt-fw-vars&lt;/code&gt; utility on the&lt;br /&gt;
hypervisor to programmatically enroll the Red Hat/Microsoft CA keys and&lt;br /&gt;
any custom certificates (e.g., FreeIPA CA) into the VM’s&lt;br /&gt;
&lt;code&gt;efidisk&lt;/code&gt;. 4. &lt;strong&gt;Boot Pinning:&lt;/strong&gt; Explicitly set&lt;br /&gt;
the UEFI &lt;code&gt;BootOrder&lt;/code&gt; to point to the &lt;code&gt;shimx64.efi&lt;/code&gt;&lt;br /&gt;
path via &lt;code&gt;virt-fw-vars --append-boot-filepath&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;solution-example-command-sequence&quot;&gt;Solution (Example Command&lt;br /&gt;
Sequence)&lt;/h2&gt;
&lt;p&gt;On the Proxmox Host (&lt;code&gt;root&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;
&lt;pre class=&quot;sourceCode bash&quot;&gt;&lt;code class=&quot;sourceCode bash&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Map and Clean MBR&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;va&quot;&gt;DEV&lt;/span&gt;&lt;span class=&quot;op&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;va&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;ex&quot;&gt;rbd&lt;/span&gt; map pool/disk&lt;span class=&quot;va&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;parted&lt;/span&gt; &lt;span class=&quot;at&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;va&quot;&gt;$DEV&lt;/span&gt; disk_set pmbr_boot off&lt;/span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Inject Trust and Boot Path (VM must be stopped)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;ex&quot;&gt;virt-fw-vars&lt;/span&gt; &lt;span class=&quot;at&quot;&gt;--inplace&lt;/span&gt; /dev/rbd/mapped_efidisk &lt;span class=&quot;dt&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;  &lt;span class=&quot;at&quot;&gt;--enroll-redhat&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;  &lt;span class=&quot;at&quot;&gt;--add-db&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;&amp;lt;&lt;/span&gt;GUID&lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;/span&gt; /path/to/ipa-ca.crt &lt;span class=&quot;dt&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-9&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-9&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;  &lt;span class=&quot;at&quot;&gt;--append-boot-filepath&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&#39;\EFI\centos\shimx64.efi&#39;&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-10&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-10&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;  &lt;span class=&quot;at&quot;&gt;--sb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;This workflow enables high-integrity Secure Boot environments using&lt;br /&gt;
existing SeaBIOS infrastructure templates.&lt;/p&gt;

&lt;div class=&quot;twitter-share&quot;&gt;&lt;a class=&quot;twitter-share-button&quot; href=&quot;https://twitter.com/intent/tweet?url=https%3A%2F%2Fwp.c9h.org%2Fcj%2F%3Fp%3D2133&amp;amp;via=cjamescollier&quot;&gt;Tweet&lt;/a&gt;&lt;/div&gt; </description> 
	<pubDate>Tue, 31 Mar 2026 21:03:24 +0000</pubDate>

</item> 
<item>
	<title>Thomas Lange: FAIme using apt-cacher-ng</title>
	<guid>http://blog.fai-project.org/posts/acng/</guid>
	<link>http://blog.fai-project.org/posts/acng/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/mrfai.png&quot; width=&quot;76&quot; height=&quot;100&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;The &lt;a href=&quot;https://fai-project.org/FAIme&quot;&gt;FAI.me service&lt;/a&gt;
has become faster over the past two months.&lt;/p&gt;

&lt;p&gt;First, the tool fai-mirror can now download all packages
in one go (with all their dependencies) instead of downloading one by
one. This helped a lot for the Linux Mint ISO because it uses a long
list of packages.&lt;/p&gt;

&lt;p&gt;I&#39;ve also added a local apt cache (using &lt;a href=&quot;https://www.unix-ag.uni-kl.de/~bloch/acng/&quot;&gt;apt-cacher-ng&lt;/a&gt;),
so the network speed does not matter any more in most cases.
This led to the following improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux Mint install ISOs went from around 6-7 min to now only 2min.&lt;/li&gt;
&lt;li&gt;Ubuntu install ISO went from average 3min to around 90 seconds.&lt;/li&gt;
&lt;li&gt;The average time for a Debian Linux install ISO dropped from 2min
to 40 seconds.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;So far we only had once a problem with apt-cacher-ng, because the
underlying partition was full.&lt;/p&gt;

&lt;p&gt;Building cloud and live images do not gain that much from the local
package cache, because most time is spend in extracting and installing
the packages.&lt;/p&gt; </description> 
	<pubDate>Tue, 31 Mar 2026 13:50:57 +0000</pubDate>

</item> 
<item>
	<title>Russ Allbery: Review: Code Blue—Emergency</title>
	<guid>https://www.eyrie.org/~eagle/reviews/books/0-7653-0663-8a.html</guid>
	<link>https://www.eyrie.org/~eagle/reviews/books/0-7653-0663-8a.html</link>
     <description>  &lt;p&gt;Review: &lt;cite&gt;Code Blue—Emergency&lt;/cite&gt;, by James White&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Sector General #7&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Orb&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;1987&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Printing:&lt;/td&gt;
    &lt;td&gt;May 2003&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-7653-0663-8&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Trade paperback&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;252&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;Code Blue—Emergency&lt;/cite&gt; (annoying em-dash in original title) is the
seventh book of James White&#39;s Sector General science fiction series about
a vast multi-species hospital station. While there are some references to
(and spoilers for) earlier books in the series, you don&#39;t have to remember
the previous books to read this one. I had no trouble despite a nine-year
gap.
&lt;/p&gt;

&lt;p&gt;
I read this as part of the Orb &lt;cite&gt;General Practice&lt;/cite&gt; omnibus, which
collects this novel and &lt;cite&gt;The Genocidal Healer&lt;/cite&gt;.
&lt;/p&gt;

&lt;p&gt;
Cha Thrat is a Sommaradvan warrior-surgeon, member of a newly-discovered
species that is beginning the process of contact with the Federation. She
saved a Monitor corps human after an accident on her world, performing
some some highly competent surgery on a species she had never seen before.
That plus her somewhat outcast status on her own world due to her very
traditional attitude towards medical ethics led Sector General to extend
an offer of medical internship, and led her to leap into the unknown by
accepting. This may have been a mistake; there is a great deal that Sector
General does not understand about Sommaradvan medical ethics.
&lt;/p&gt;

&lt;p&gt;
This series entry is another proper (if somewhat episodic) novel and the
first book of the series that doesn&#39;t primarily focus on Conway. He makes
an appearance in his new role as Diagnostician, but only as a supporting
character. &lt;cite&gt;Code Blue—Emergency&lt;/cite&gt; is told in the tight third-person
perspective of Cha Thrat, an alien who finds many things about Sector
General baffling, confusing, and ethically troubling (and who therefore
provides a good reader surrogate for reintroducing the basics of how the
hospital works).
&lt;/p&gt;

&lt;p&gt;
Using an alien viewpoint is a more sophisticated narrative technique than
White has used previously. I&#39;m glad he tried it, and it mostly works,
although I have some complaints. Cha Thrat comes from the middle caste of
a strictly hierarchical society of three castes, but is also immensely
stubborn and used to a medical system in which doctors take sole
responsibility for their patients. This creates a lot of cultural
conflicts, and I do enjoy science fiction where the human attitudes are
portrayed as the strange ones, but the cultural analysis offered by this
novel is not very deep.
&lt;/p&gt;

&lt;p&gt;
The pattern of this book is for Cha Thrat to stumble into a successful
approach to a problem while being either oblivious to or hostile to the
normal hierarchical structure expected of medical trainees. This is
believable as far as it goes. She is a skilled and intelligent doctor with
some good instincts and a strong commitment to patient care, but is also
culturally inclined to not ask for help. It makes sense for that to be a
serious problem in a hospital. Unfortunately, no one says this directly.
Sector General staff get quite upset in ways that seem more territorial
than oriented towards patient safety, no one directly explains to Cha
Thrat why following a process is important or shows examples of what could
go wrong, and plot armor means that her mistakes usually have positive
outcomes. One can extrapolate the reasons why she is not a good medical
student, but the reader is forced to do the extrapolation.
&lt;/p&gt;

&lt;p&gt;
This is the sort of book where the narration makes clear there are
unresolved cultural clashes that are going to cause problems but hides the
details. To Cha Thrat, her perspective is so obvious she never bothers to
explain it to the reader, so the specifics come as a surprise. As with the
alien perspective, I&#39;ve seen this technique used with more subtlety and
sophistication in other books, but White&#39;s version mostly works. Cha Thrat
is a sympathetic protagonist because she is truly trying to take the most
ethical and empathetic action in every situation and is clearly competent.
Most of my frustration as a reader, ironically, lands on the other Sector
General doctors who seem to make little to no effort to understand her
perspective when she fails to conform to their expectations. This is
believable in the abstract, but the whole point of Sector General is that
they&#39;re supposed to be wiser about interspecies difference than this.
&lt;/p&gt;

&lt;p&gt;
Also, sometimes their reactions just seem petty. Cha Thrat has a very
hierarchical concept of medicine that matches the social classes of her
culture. For her, the highest tier of doctor are wizards who treat rulers,
because the work of rulers is mostly mental and intellectual and therefore
the diseases of rulers are treated with magic spells performed with words
to reshape their thinking rather than surgery on their bodies. O&#39;Mara and
the other Sector General psychologists take great offense at this,
muttering about being called witch doctors, which I found completely
absurd. This is a comprehensible, if odd, description of psychology from a
wholly alien species. Surely one&#39;s first reaction should be that words
like &quot;wizard&quot; or &quot;magic&quot; are translation errors. Don&#39;t get offended; look
to see if the underlying substance matches, which it clearly does.
&lt;/p&gt;

&lt;p&gt;
Apart from cultural and psychological clashes, &lt;cite&gt;Code Blue—Emergency&lt;/cite&gt;
has the standard episodic Sector General structure of interesting medical
mysteries that require lateral thinking. I find this sort of puzzle story
satisfying, particularly given the firm belief of every character in an
essentially pacifist and empathetic approach to even the most alien of
creatures. This determined non-violence is one of the more interesting
things about this series, and it continues here.
&lt;/p&gt;

&lt;p&gt;
White does tend towards both biological and gender essentialism for
everyone other than the protagonist and main supporting characters, but he
seemed to be walking back some of the more outrageous limitations on women
that appeared in previous books. There is still some nonsense in here
about how females of any species can&#39;t be Diagnosticians, but then Cha
Thrat, who is female, seems to violate the justification for that rule
over the course of this novel (sadly without comment). Perhaps he&#39;s
setting up for proving Sector General wrong about this prejudice.
&lt;/p&gt;

&lt;p&gt;
I picked this up after reading Elizabeth Bear&#39;s &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/1-5344-0303-5.html&quot;&gt;&lt;cite&gt;Machine&lt;/cite&gt;&lt;/a&gt;, which is essentially a (better written) Sector General
novel that got me in the mood for reading more. I wouldn&#39;t give &lt;cite&gt;Code
Blue—Emergency&lt;/cite&gt; any awards, but it delivered exactly what I was looking
for. This series is not as deep or well-written as some more recent SF,
but it is reliably itself and reliably entertaining. There are worse
things in a series. Recommended if you&#39;re in the mood for alien &lt;cite&gt;ER&lt;/cite&gt;
in space.
&lt;/p&gt;

&lt;p&gt;
The omnibus edition that I read has an introduction to both novels by John
Clute. It does add some interesting insights, but (as is somewhat typical
for Clute) it also spoils parts of both books. You may want to read it
after you read the novels.
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;The Genocidal Healer&lt;/cite&gt;.
&lt;/p&gt;

&lt;p&gt;Rating: 7 out of 10&lt;/p&gt; </description> 
	<pubDate>Tue, 31 Mar 2026 03:08:00 +0000</pubDate>

</item> 
<item>
	<title>Jamie McClelland: Mailman3 has 2 databases. Whoops.</title>
	<guid>https://current.workingdirectory.net/posts/2026/mailman3-migration/</guid>
	<link>https://current.workingdirectory.net/posts/2026/mailman3-migration/</link>
     <description>  &lt;p&gt;At &lt;a href=&quot;https://mayfirst.coop/&quot;&gt;May First&lt;/a&gt; we have been carefully planning our
migration of about 1200 lists from mailman2 to mailman3 for almost six months
now. We did a lot of user communications, had several months of beta testing
with a handful of lists ported over, and everything was looking good. So we
kicked off the migration!&lt;/p&gt;
&lt;p&gt;But, about 15% of the way through I started seeing sqlite lock errors. Wait,
what? I carefully re-configured mailman3 to use postgres, not sqlite. Well,
yes, but apparently that was for the database managing the email list
configuration, not the database powering the django web app, which,
incidentally, also includes hundresds of gigabytes of archives. In other words,
the one we &lt;em&gt;really&lt;/em&gt; need in postgres, not sqlite.&lt;/p&gt;
&lt;h2 id=&quot;moving-from-sqlite-to-postgres&quot;&gt;Moving from sqlite to postgres&lt;/h2&gt;
&lt;p&gt;Well that sucks. We immediately stopped the migration to deal with this.&lt;/p&gt;
&lt;p&gt;I noticed that the web is full of useful django instructions on how to migrate
your database from one database to antoher. However, if you read the fine
print, those convenient looking “&lt;code&gt;dumpdata&lt;/code&gt; &lt;code&gt;loaddata&lt;/code&gt;” workflows are designed
to move the table definitions and a small amount of data. In our case, even
after just 15% of our lists moved, our sqlite database was about 30GB.&lt;/p&gt;
&lt;p&gt;I considered some of the hacks to manage memory and try to run this via django,
but eventually decided that &lt;a href=&quot;https://pgloader.io/&quot;&gt;pgloader&lt;/a&gt; was a more robust
option. This option also allowed me to more easily test things out on a copy of
our sqlite database (made while mailman was turned off). This way I could
migrate and re-migrate the sqlite database over and over without impacting our
live installation until I was satisfied it was all working.&lt;/p&gt;
&lt;p&gt;My first decision was to opt out of pgloader’s schema creation. I used django’s
schema creation tool by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Turning off mailman3 and mailman3-web and changing the mailman web
configuration to use the new postgresql database.&lt;/li&gt;
&lt;li&gt;Running &lt;code&gt;mailman-web migrate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Changing the mailman web configuration back to sqlite and starting
everything again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: I tried just adding new database settings in the mailman web
configuration indexed to ’new’ - django has the ability to define different
databases by name, then you can run &lt;code&gt;mailman-web migrate --database new&lt;/code&gt;. But,
during the migration, I caught django querying the sqlite database for some
migrations that required referencing existing fields (specifically hyperkitty’s
&lt;code&gt;0003_thread_starting_email&lt;/code&gt;). I didn’t want any of these steps to touch the
live database so I opted for the cleaner approach.&lt;/p&gt;
&lt;p&gt;Once I had a clean postgres schema, I dumped it so I could easily return to
this spot.&lt;/p&gt;
&lt;p&gt;Next I started working on our &lt;code&gt;pgloader&lt;/code&gt; load file. After a lot of trial and
error, I ended with:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-gdscript3&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;n&quot;&gt;LOAD&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DATABASE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sqlite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;///&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mailman3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sqlite&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;postgres&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;migration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mailman3web&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;clean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;backup&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;db&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;postgresql&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;//&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mailmanweb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;xxxxxxxxxxx&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;localhost&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5432&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mailmanweb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;n&quot;&gt;WITH&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;reset&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sequences&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;drop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;disable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;triggers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tables&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;batch&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;size&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MB&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;batch&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rows&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;prefetch&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rows&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;workers&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;concurrency&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;n&quot;&gt;SET&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;work_mem&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;64MB&#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;maintenance_work_mem&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&#39;512MB&#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;n&quot;&gt;CAST&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;datetime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;timestamptz&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;drop&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;ne&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;precision&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tinyint&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;    &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;varchar&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;remove&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;characters&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The batch, prefetch, workers and concurreny settings are all there to ensure
memory doesn’t blow up.&lt;/p&gt;
&lt;p&gt;I also discovered that I had to make some changes to the schema before loading
data. Mostly truncating tables that the django migrate command populated to
avoid duplicate key errors:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-zed&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;n&quot;&gt;TRUNCATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TABLE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;django_migrations&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUNCATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TABLE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;django_content_type&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUNCATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TABLE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;auth_permission&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUNCATE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TABLE&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;django_site&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CASCADE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And also, I had to change a column type. Apparently the mailman import process
allowed an attachment file name that exceeds the limit for postgres, but was
allowed into sqlite:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;ALTER TABLE hyperkitty_attachment ALTER COLUMN name TYPE text
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When &lt;code&gt;pgloader&lt;/code&gt; runs, we still get a lot of warnings from pgloader, which wants
to cast columns differently than django does. These are harmless (I was able to
import the data without a problem).&lt;/p&gt;
&lt;p&gt;And there are still a lot of warnings along the lines of:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2026-03-30T14:08:01.691990Z WARNING PostgreSQL warning: constraint “hyperkitty_vote_email_id_73a50f4d_fk_hyperkitty_email_id” of relation “hyperkitty_vote” does not exist, skipping&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;These are harmless as well. They appear because &lt;code&gt;disable triggers&lt;/code&gt; disables
foreign key constraints. Without it, we wouldn’t be able to load tables that
require values in tables that have not yet been populated.&lt;/p&gt;
&lt;p&gt;After all the tweaking, the import of our 30GB sqlite database took about 40
minutes.&lt;/p&gt;
&lt;h2 id=&quot;final-steps&quot;&gt;Final Steps&lt;/h2&gt;
&lt;p&gt;I think the &lt;code&gt;reset sequences&lt;/code&gt; from &lt;code&gt;pgloader&lt;/code&gt; should take care of this, but just in case:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;mailman-web sqlsequencereset hyperkitty mailman_django auth | mailman-web dbshell
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And, just to ensure postgres is optimized, run this in the psql shell:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-fallback&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;ANALYZE VERBOSE;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&quot;last-thoughts&quot;&gt;Last thoughts&lt;/h2&gt;
&lt;p&gt;I understand very well all the decisions the mailman3 devs made in designing
the next version of mailman, and if I was in the same place I may have made
them the same ones. For example, separating the code running the mailing list
from the code managing the archives and the web interface makes perfectly good
sense - many people might want to run just the mailing list part without a web
interface. And building the web interface in django makes a lot of sense as
well - why re-invent the wheel? I’m sure a lot of time and effort was saved by
simply using the built in features you get for free with django.&lt;/p&gt;
&lt;p&gt;But the unfortunate consequence of these decisions is that sys admins have a
much harder time. Almost everyone wants the email lists along with the web
interface and the archives. But nobody wants two different configuration files
with different syntaxes and logic, not to mention two different command lines
to use for maintenance and configuration with completely different APIs. Trying
to understand how to change a default template or set list defaults requires a
lot of research and usually you have to write a python script to do it.&lt;/p&gt;
&lt;p&gt;I have finally come to the conclusion that mailman2 is designed for sys admins,
while mailman3 is designed for developers.&lt;/p&gt;
&lt;p&gt;Despite these short comings, I am impressed with the community and their quick
and friendly responses to the questions of a confused sys admin. That might be
more valuable than anything else.&lt;/p&gt; </description> 
	<pubDate>Mon, 30 Mar 2026 12:27:10 +0000</pubDate>

</item> 
<item>
	<title>Russ Allbery: Review: The Cloak and Its Wizard</title>
	<guid>https://www.eyrie.org/~eagle/reviews/books/1-917849-15-X.html</guid>
	<link>https://www.eyrie.org/~eagle/reviews/books/1-917849-15-X.html</link>
     <description>  &lt;p&gt;Review: &lt;cite&gt;The Cloak and Its Wizard&lt;/cite&gt;, by R.Z. Nicolet&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;UpLit Press&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;February 2026&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;1-917849-15-X&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;423&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;The Cloak and Its Wizard&lt;/cite&gt; is a standalone (at least so far) urban
fantasy superhero (sort of) novel. R.Z. Nicolet is the marketing pseudonym
for Rachel Reddick. This is her first novel.
&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    I&#39;m picky about wizards.
&lt;/p&gt;

&lt;p&gt;
    The wizards themselves will complain about that, but of course I&#39;m
    picky. When I choose a wizard, barring utter abandonment of moral
    scruples, it&#39;s a till-death-do-us-part situation. (Their death, not
    mine. I&#39;m the next best thing to indestructible.)
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
The Cloak of Sunset and Starlight is a major artifact, meaning that it has
its own preferences and is capable of independent action. It has been
sitting in a glass case in the wizards&#39; library for about a hundred years,
waiting for someone interesting. (Well, mostly sitting. Occasionally it
sneaks out to eavesdrop or move the books around.)
&lt;/p&gt;

&lt;p&gt;
Veronica Noble is interesting. She&#39;s older than most initiates,
thoughtful, observant, and clearly had some mundane career before joining
the Order. Her aura is appealing, and her mental shields and resistance to
influence are intriguing. Normally, the Cloak would take its time
investigating a new potential wizard, but the Sword was making thoughtful
rattling sounds, and no way is the Cloak going to let the Sword claim her
first. Time to choose a new wizard!
&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;
    It was nice, being draped over warm shoulders, and feeling a heartbeat
    again.
&lt;/p&gt;

&lt;p&gt;
    I could tell she closed her eyes without even looking.
&lt;/p&gt;

&lt;p&gt;
    She sighed. &quot;I just got picked by the intransigent one, didn&#39;t I?&quot;
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;
The last time I picked a book from the Big Idea feature in Scalzi&#39;s
&lt;a href=&quot;https://whatever.scalzi.com/&quot;&gt;Whatever blog&lt;/a&gt;, it
&lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/1-958880-27-2.html&quot;&gt;didn&#39;t go that well&lt;/a&gt;, but if you&#39;re going to
write a book specifically for me, I&#39;m going to read it. There are very few
tropes of SFF that I love more than intelligent companion objects, and
Nicolet&#39;s
&lt;a href=&quot;https://whatever.scalzi.com/2026/02/23/the-big-idea-r-z-nicolet/&quot;&gt;introduction to the story&lt;/a&gt; was compelling. So I gave this book discovery
method another chance.
&lt;/p&gt;

&lt;p&gt;
I&#39;m glad I did, because this was exactly what I was in the mood for and a
delight from cover to cover.
&lt;/p&gt;

&lt;p&gt;
Veronica Noble is not a typical wizard. She&#39;s a surgeon and was quite
happy to be a surgeon until an unexpected encounter with a magical
creature killed her brother. The forgetting spell cast by the wizards who
came to handle the Cassandra wyrm didn&#39;t work on her, so she was dragged
reluctantly into the secret magical world of the Order. This long-lived
society of wizards quietly defends the world against magical intrusions
from other planes of existence. Now she&#39;s a wizard with a magical cloak,
which she is not at all sure she wants.
&lt;/p&gt;

&lt;p&gt;
Veronica is not the protagonist, though. The Cloak of Sunset and Starlight
is. As far as it is concerned, its job is to assist its wizard, enjoy
watching interesting feats of magic, and look fabulous doing so. It&#39;s
protective, dramatic, rather vain, endlessly curious, easily bored, and
intensely loyal. When it becomes clear that the Order has some serious
problems, the Cloak knows what side it&#39;s on.
&lt;/p&gt;

&lt;p&gt;
This sounds a bit like urban fantasy, so I was surprised when the first
superheroes showed up, although given the explicit Doctor Strange
inspiration I probably should have expected them. The Order and the
superheroes do not mix, at least at the start of the novel. The wizards
view the superheroes as a loud and irritating intrusion and hide magical
activities from them the same as they do the rest of the world. Veronica&#39;s
opening opinion on superheroes is based on being a trauma surgeon in a
hospital dealing with the aftermath of their fights (which makes me wonder
if the author has read &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-06-297859-4.html&quot;&gt;&lt;cite&gt;Hench&lt;/cite&gt;&lt;/a&gt;, although
the idea is older than that book). As with the Order, the role of
superheroes in this world gets more complicated as the plot develops.
&lt;/p&gt;

&lt;p&gt;
There is a surprising amount of plot and some very nice world-building
here, including multiple twists that I was not expecting. Veronica is the
sort of stubborn and deeply ethical person who will not leave a problem
alone if she has the ability to fix it, which is a good recipe for getting
deeper and deeper into a complex plot. She&#39;s believable as a surgeon:
somewhat taciturn, calm in emergencies, detail-oriented, methodical, and
not at all dramatic. This makes the Cloak a perfect foil and complement.
Watching their partnership develop was very satisfying.
&lt;/p&gt;

&lt;p&gt;
This is a sidekick novel, and like the best sidekick novels it makes the
not-protagonist more interesting and more relatable by showing them from
an outside and skewed perspective. Piecing together what Veronica must be
thinking is part of the fun, as is sharing the Cloak&#39;s protectiveness
towards her as it becomes clear how much she&#39;s been through and how good
of a person she is. The Cloak&#39;s personality was a little too much like a
cat for me â€” I would have preferred a more unique viewpoint, fewer
cat-coded shenanigans, and a bit less of the running laundry machine joke.
But that&#39;s a quibble. Its endless curiosity drives the plot forward and
uncovers more of the world-building, and I just love reading stories from
the perspective of this sort of loyal and protective magical creature.
&lt;/p&gt;

&lt;p&gt;
I had so much fun with this book. It&#39;s a popcorn sort of book, and I
thought the ending sputtered a little, but overall it was great. Parts of
it could have been designed in a lab to appeal to me specifically, so I&#39;m
not sure if other people will enjoy it as much, but its hit rate with my
friends so far has been good.
&lt;/p&gt;

&lt;p&gt;
Highly recommended, and I will be watching for any further novels from
Nicolet.
&lt;/p&gt;

&lt;p&gt;
&lt;cite&gt;The Cloak and Its Wizard&lt;/cite&gt; reaches a satisfying conclusion and
doesn&#39;t advertise itself as part of a series, but there is room for a
sequel. If Nicolet ever writes one, I&#39;d read it.
&lt;/p&gt;

&lt;p&gt;Rating: 8 out of 10&lt;/p&gt; </description> 
	<pubDate>Mon, 30 Mar 2026 02:46:00 +0000</pubDate>

</item> 
<item>
	<title>Russell Coker: Ebook Readers in Debian</title>
	<guid>https://etbe.coker.com.au/?p=6006</guid>
	<link>https://etbe.coker.com.au/2026/03/29/ebook-readers-debian/</link>
     <description>  &lt;h2&gt;Laptop&lt;/h2&gt;
&lt;p&gt;For a while I’ve been using Calibre 8.5.0+ds-1+deb13u1 in Debian/Trixie running KDE for reading ebooks on my laptop, it generally works well and has a large font size. The only downsides of it for that use are taking more RAM than I would prefer (about 780M RSS which seems a lot for a relatively simple task) and having separate windows for the list of books and reading an actual book without any options to just open the last book and not delay me.&lt;/p&gt;
&lt;p&gt;I tried Arianna 25.04.0-1 in Debian/Trixie, it has a significantly smaller font size and doesn’t allow high contrast colors as the default is black on gray with the dark theme in KDE. It also only allows left and right arrows for moving through the book while Calibre uses up/down, left/right, or pgup/pgdn so whatever keys seem reasonable to you are going to work. The RSS was 762M which wasn’t great but wasn’t the real problem. Rumours of Arianna using less RAM than Calibre seem exaggerated.&lt;/p&gt;
&lt;h2&gt;Librem5&lt;/h2&gt;
&lt;p&gt;On my Librem5 phone with Plasma Mobile Calibre 8.5.0+ds-1+deb13u1 both the initial setup screen and the main screen for selecting a book to read don’t work in the width of portrait view on the phone. After putting it in landscape mode it worked, but I couldn’t touch on a book title to select it I had to touch on the number of the book at the left of the list box. But once it was loaded everything was fine. On the Librem5 Arianna 25.04.0-1 just worked fine, although only using left/right swipes to change pages instead of up/down was annoying.&lt;/p&gt;
&lt;h2&gt;Furilabs FLX1s&lt;/h2&gt;
&lt;p&gt;On my Furilabs FLX1s with phosh Arianna 25.04.0-1 and Calibre 8.16.2+ds+~0.10.5-3 both gave the same result of not displaying text or images from the book, I’m not sure if it’s phosh or some other aspect of the FLX1s configuration at fault.&lt;/p&gt;
&lt;h2&gt;PinePhonePro&lt;/h2&gt;
&lt;p&gt;On my PinePhonePro running Debian/Testing with Plasma Mobile Arianna 25.12.3-1 worked without any issue and up/down swipes worked. Calibre 9.5.0+ds+~0.10.5-1 had the initial screen work fine in portrait mode but the main screen was too wide and needed landscape. Also the issue of having to touch the number applied.&lt;/p&gt;
&lt;h2&gt;Laptop running Debian/Unstable&lt;/h2&gt;
&lt;p&gt;Calibre 9.6.0+ds+~0.10.5-2 and Arianna 25.12.3-1 worked quite nicely on a Thinkpad running Debian/Unstable. One thing I discovered while testing it is that Calibre supports the CTRL-PLUS and CTRL-MINUS key combinations to change font sizes and that also works on the version in Debian/Trixie. Arianna doesn’t support CTRL-PLUS/MINUS.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The problems I had were Arianna on a laptop, everything on the Furilabs FLX1s, and Calibre’s UI not being well adjusted for mobile devices.&lt;/p&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2006/12/22/encryption-speed-debian-vs-fedora/&quot; rel=&quot;bookmark&quot; title=&quot;encryption speed – Debian vs Fedora&quot;&gt;encryption speed – Debian vs Fedora&lt;/a&gt; &lt;small&gt;I’m in the process of converting my Fedora/rawhide laptop to...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/01/05/phone-charging-speeds/&quot; rel=&quot;bookmark&quot; title=&quot;Phone Charging Speeds With Debian/Trixie&quot;&gt;Phone Charging Speeds With Debian/Trixie&lt;/a&gt; &lt;small&gt;One of the problems I encountered with the PinePhone Pro...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/01/19/furilabs-flx1s/&quot; rel=&quot;bookmark&quot; title=&quot;Furilabs FLX1s&quot;&gt;Furilabs FLX1s&lt;/a&gt; &lt;small&gt;The Aim I have just got a Furilabs FLX1s [1]...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Sun, 29 Mar 2026 12:29:53 +0000</pubDate>

</item> 
<item>
	<title>Russ Allbery: Review: The Sovereign</title>
	<guid>https://www.eyrie.org/~eagle/reviews/books/0-316-54286-5.html</guid>
	<link>https://www.eyrie.org/~eagle/reviews/books/0-316-54286-5.html</link>
     <description>  &lt;p&gt;Review: &lt;cite&gt;The Sovereign&lt;/cite&gt;, by C.L. Clark&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Magic of the Lost #3&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Orbit&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;September 2025&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-316-54286-5&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Kindle&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;575&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;The Sovereign&lt;/cite&gt; is the third and concluding book of C.L. Clark&#39;s
Magic of the Lost high fantasy trilogy. I recommend reading the books of
this series close together, since there are a lot of characters and a lot
of continuity between books that is helpful to remember, but it was not
quite as difficult this time to remember where the story left off.
&lt;/p&gt;

&lt;p&gt;
At the end of &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-316-54283-0.html&quot;&gt;&lt;cite&gt;The Faithless&lt;/cite&gt;&lt;/a&gt;, the
political situation in Balladaire (not-France) was more stable, but the
threat of a plague lay on the horizon. That threat arrives in earnest in
this book, along with new threats from both Balladaire&#39;s former colonial
conscript soldiers and from neighboring Taargen (not-Germany, sort of,
although the parallel isn&#39;t as close). Luca and Touraine have finally
admitted that they&#39;re deeply in love, but they are still very different
people with different goals and ethics. Luca is determined to do anything
necessary to save her kingdom, but her definition of her kingdom is sharp
and brittle. Touraine is torn between far too many loyalties, plus the
lingering worry that her morals and Luca&#39;s may not be compatible.
&lt;/p&gt;

&lt;p&gt;
I think the hardest part of this sort of series is finding an ending the
reader will find satisfying. This one, unfortunately, did not work for me,
but that may be more due to personal preference than objective flaws.
&lt;/p&gt;

&lt;p&gt;
There have been two threads through this series: an improbable romance
embedded in a network of complex personal relationships, and a political
commentary on colonialism and post-colonial wars. I was enjoying the
former, but it was the latter that felt fresh and interesting to me. The
plot threads in &lt;cite&gt;The Faithless&lt;/cite&gt; outside of Balladaire expanded that
complexity, and I was hoping the final volume would continue in that
direction. How could a colonial power atone for its history? How does the
former colony establish its own governance? Is there a path to freedom
without violence? Are attempts to chart a more moral course doomed to open
lines of attack for one&#39;s other enemies?
&lt;/p&gt;

&lt;p&gt;
It&#39;s clear that Clark was thinking about similar themes, but &lt;cite&gt;The
Sovereign&lt;/cite&gt; narrows the field instead of widens it, restricts the political
options, and then resolves most questions in a massive war. This is not
that surprising of a conclusion, but it&#39;s one that I found unsatisfying
and, honestly, a little boring. Yes, one way to resolve all the competing
tensions is for everyone to try to kill each other and whoever survives
wins, and historically that&#39;s one of the more likely outcomes, but that
ending doesn&#39;t wrestle with the politics as much as it collapses them.
&lt;/p&gt;

&lt;p&gt;
Clark instead focuses this concluding volume on the romance, which becomes
even more fraught, tragic, and dramatic than it was in previous books (and
that&#39;s saying something). The hard questions of divided loyalties and
moral conflicts are mostly framed by questions about Touraine&#39;s loyalty to
Luca and Luca&#39;s trust of Touraine. This is all very Shakespearean, full of
hard choices, sudden reversals, miscommunication, and a very deep conflict
between Luca&#39;s realpolitik and Touraine&#39;s stubborn personal morality. If
this is what you were reading the series for, if you were hoping for a
maximum-drama sapphic relationship, you may thoroughly enjoy this. I
thought it had its moments, but I wish they had been balanced by more
moments of cool-headed practicality and creative political ingenuity.
&lt;/p&gt;

&lt;p&gt;
My biggest frustration with this ending is that the characters largely
stop doing politics. The political complexity was the strength of both
&lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-316-54267-9.html&quot;&gt;&lt;cite&gt;The Unbroken&lt;/cite&gt;&lt;/a&gt; and &lt;cite&gt;The Faithless&lt;/cite&gt;:
People who intensely dislike each other negotiate because there is
something larger to be gained, personal decisions made without considering
the political ramifications have costs, and multiple characters are trying
hard to find a way to turn a nasty, exploitative world into something
better without simply killing everyone who disagrees. Many of the
characters were objectively bad at politics, inexperienced and immature,
but they stumbled or dragged or fought their way into political solutions
anyway. I thought Clark moved too far away from that in &lt;cite&gt;The
Sovereign&lt;/cite&gt;. Everyone goes deep into their own emotions and desire for
vengeance or conquest or revolution and stops compromising. To a
depressingly large extent, the story is resolved by killing everyone who
disagrees. I think the story is poorer for it.
&lt;/p&gt;

&lt;p&gt;
One of the other threads of the series is Balladairan magic, or rather its
odd absence. Luca has one understanding of it, the rebels introduced in
&lt;cite&gt;The Faithless&lt;/cite&gt; have a different understanding of it, and its pursuit
is set up as critical to resolving the threat of a plague. We do get an
explanation of sorts, but it&#39;s not as complete or as satisfying as I was
hoping, and the symbolism of Balladaire&#39;s missing magic is left
frustratingly murky. For me, this has some of the same problems as the
political conclusion: I wanted an intellectual catharsis alongside the
emotional catharsis, but that was not the direction Clark was taking the
story.
&lt;/p&gt;

&lt;p&gt;
I like reading about these characters. All of Luca, Touraine, and Pruett
are complex, comprehensible, flawed, and often intriguing. But my favorite
character in the story, the person I latched on to as an emotional path
through the story, was Sabine. Her refreshingly straightforward loyalty
and lack of drama was a breath of fresh air. She has some great moments in
this book, but there too I got wrong-footed by the direction Clark went
with her arc and found its conclusion deeply unsatisfying.
&lt;/p&gt;

&lt;p&gt;
I&#39;m not sure how many of these complaints are because of missed
opportunities in the novel, how many were due to a mismatch of taste, and
how many were due to not being in the right mood to read this conclusion.
I&#39;m sure that it didn&#39;t help that I read this simultaneous with
&lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-7653-1340-5.html&quot;&gt;another novel in which the characters were
always miserable&lt;/a&gt;, or that I read it in early 2026 with, uh, all that
entails. I suspect that if you came away from the first two books invested
in the messy romance and wanting MOAR DRAMA, you may get exactly what you
were hoping for. That, sadly, was not what I was hoping for.
&lt;/p&gt;

&lt;p&gt;
I can&#39;t really recommend this. I thought it dragged in places and didn&#39;t
deliver the ending I wanted. But it has some great moments, it does wrap
up the threads of the trilogy as advertised, and at least the romance gets
a dramatic climax worthy of the tension that has been built through the
previous books. If that matches what you were enjoying in the previous
books, you may well enjoy this more than I did.
&lt;/p&gt;

&lt;p&gt;Rating: 5 out of 10&lt;/p&gt; </description> 
	<pubDate>Sun, 29 Mar 2026 04:51:00 +0000</pubDate>

</item> 
<item>
	<title>Evgeni Golov: Converting Dovecot password schemes on the fly without (too much) cursing</title>
	<guid>https://www.die-welt.net/2026/03/converting-dovecot-password-schemes-on-the-fly-without-too-much-cursing/</guid>
	<link>https://www.die-welt.net/2026/03/converting-dovecot-password-schemes-on-the-fly-without-too-much-cursing/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/evgeni.png&quot; width=&quot;100&quot; height=&quot;100&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;I finally upgraded my mail server to Debian 13 and, as expected, the Dovecot part was quite a ride.&lt;/p&gt;
&lt;p&gt;The configuration syntax changed between Dovecot 2.3 (Debian 12) and Dovecot 2.4 (Debian 13),
so I started first with diffing my configuration against a vanilla Debian 12 one (this setup is slightly old) and then applied the same (logical) changes to a vanilla Debian 13 one.
This mostly went well.
Mostly because my user database is stored in SQL and while the &lt;a href=&quot;https://dovecot.org/upgrader/&quot;&gt;Dovecot Configuration Upgrader&lt;/a&gt; says it can convert old &lt;code&gt;dovecot-auth-sql.conf.ext&lt;/code&gt; files to the new syntax,
it only does so for the structure, not the SQL queries themselves.
While I don&#39;t expect it to be able to parse the queries and adopt them correctly,
at least a hint that the field names in &lt;a href=&quot;https://doc.dovecot.org/2.4.3/core/config/auth/userdb.html&quot;&gt;userdb&lt;/a&gt; changed and might require adjustment would&#39;ve been cool.&lt;/p&gt;
&lt;p&gt;Once I got that all sorted, Dovecot would still refuse to let me in:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code literal-block&quot;&gt;Error: sql: Invalid password in passdb: Weak password scheme &#39;MD5-CRYPT&#39; used and refused
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Yeah, right.
Did I mention that this setup is old?&lt;/p&gt;
&lt;p&gt;The quick cure against this is a &lt;code&gt;auth_allow_weak_schemes = yes&lt;/code&gt; in &lt;code&gt;/etc/dovecot/conf.d/10-auth.conf&lt;/code&gt;,
but long term I really should upgrade the password hashes in the database to something more modern.&lt;/p&gt;
&lt;p&gt;And this is what this post is about.&lt;/p&gt;
&lt;p&gt;My database only contains hashed (and salted) passwords,
so I can&#39;t just update them without changing the password.
And while there are only 9 users in total,
I wanted to play nice and professional.
(LOL)&lt;/p&gt;
&lt;p&gt;There is a &lt;a href=&quot;https://doc.dovecot.org/2.4.3/howto/convert_password_schemes.html&quot;&gt;Converting Password Schemes&lt;/a&gt; howto in the Dovecot documentation,
but it uses a rather odd looking PHP script, wrapped in a shell script which leaks the plaintext password to the process list,
and I really didn&#39;t want to remember how to write PHP to complete this task.&lt;/p&gt;
&lt;p&gt;Luckily, &lt;a href=&quot;https://xkcd.com/208/&quot;&gt;I know Python&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The general idea is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As we&#39;re using plaintext authentication (&lt;code&gt;auth_mechanisms = plain login&lt;/code&gt;),
  the plaintext password is available during login.&lt;/li&gt;
&lt;li&gt;After Dovecot&#39;s &lt;code&gt;imap-login&lt;/code&gt; has verified the password against the old (insecure) hash in the database,
  we can &lt;a href=&quot;https://doc.dovecot.org/2.4.3/core/config/post_login_scripting.html&quot;&gt;execute a post-login script&lt;/a&gt;,
  which will connect to the database and update it with a new hash of the plaintext password.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To make the plaintext password available to the post-login script,
we add &lt;code&gt;&#39;%{password}&#39; as userdb_plain_pass&lt;/code&gt; to the &lt;code&gt;SELECT&lt;/code&gt; statement of our &lt;code&gt;passdb&lt;/code&gt; query.
The original howto also says to add a &lt;code&gt;prefetch&lt;/code&gt; &lt;code&gt;userdb&lt;/code&gt;, which we do.
The &lt;code&gt;sql&lt;/code&gt; &lt;code&gt;userdb&lt;/code&gt; remains, as otherwise Postfix can&#39;t use Dovecot to deliver mail.&lt;/p&gt;
&lt;p&gt;Now comes the interesting part.
We need to write a script that is executed by Dovecot&#39;s &lt;code&gt;script-login&lt;/code&gt; and that will update the database for us.
Thanks to Python&#39;s &lt;a href=&quot;https://passlib.readthedocs.io/&quot;&gt;&lt;code&gt;passlib&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/PyMySQL/mysqlclient&quot;&gt;&lt;code&gt;mysqlclient&lt;/code&gt;&lt;/a&gt;,
the database and hashing parts are relatively straight forward:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code literal-block&quot;&gt;&lt;span class=&quot;ch&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;os&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MySQLdb&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;passlib.hash&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;DB_SETTINGS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;SELECT_QUERY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;SELECT password_enc FROM mail_users WHERE username=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(username)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;UPDATE_QUERY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;UPDATE mail_users SET password_enc=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(pwhash)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; WHERE username=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(username)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;SCHEME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bcrypt&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;EXPECTED_PREFIX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$2b$&quot;&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# https://doc.dovecot.org/2.4.3/core/config/post_login_scripting.html&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# https://doc.dovecot.org/2.4.3/howto/convert_password_schemes.html&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;USER&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PLAIN_PASS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MySQLdb&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DB_SETTINGS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SELECT_QUERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fetchone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;current_pwhash&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;current_pwhash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;startswith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EXPECTED_PREFIX&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;hash_module&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;passlib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SCHEME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;pwhash&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hash_module&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;pwhash&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pwhash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UPDATE_QUERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;vm&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;But if we add that as &lt;code&gt;executable = script-login /etc/dovecot/dpsu.py&lt;/code&gt; to our &lt;code&gt;imap-postlogin&lt;/code&gt; &lt;code&gt;service&lt;/code&gt;,
as the howto suggests, the users won&#39;t be able to login anymore:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code literal-block&quot;&gt;Error: Post-login script denied access to user
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;WAT?&lt;/p&gt;
&lt;p&gt;Remember that shell script I wanted to avoid?
It ends with &lt;code&gt;exec &quot;$@&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Turns out the &lt;code&gt;script-login&lt;/code&gt; &quot;API&quot; is rather interesting.
It&#39;s not &quot;pass in a list of scripts to call and I&#39;ll call all of them&quot;.
It&#39;s &quot;pass a list of scripts, I&#39;ll &lt;a href=&quot;https://linux.die.net/man/3/execv&quot;&gt;&lt;code&gt;execv&lt;/code&gt;&lt;/a&gt; the first item and pass the rest as args, and every item is expected to &lt;code&gt;execv&lt;/code&gt; the next one again&quot;. ðŸ¤¯&lt;/p&gt;
&lt;p&gt;With that (cursed) knowledge, the script becomes:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;code literal-block&quot;&gt;&lt;span class=&quot;ch&quot;&gt;#!/usr/bin/env python3&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;os&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;sys&lt;/span&gt;

&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;MySQLdb&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;passlib.hash&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;DB_SETTINGS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;user&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;SELECT_QUERY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;SELECT password_enc FROM mail_users WHERE username=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(username)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;UPDATE_QUERY&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;UPDATE mail_users SET password_enc=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(pwhash)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; WHERE username=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;%(username)s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;SCHEME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;bcrypt&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;EXPECTED_PREFIX&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;$2b$&quot;&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# https://doc.dovecot.org/2.4.3/core/config/post_login_scripting.html&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# https://doc.dovecot.org/2.4.3/howto/convert_password_schemes.html&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;USER&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;environ&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;PLAIN_PASS&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MySQLdb&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DB_SETTINGS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SELECT_QUERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fetchone&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;current_pwhash&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;ow&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;current_pwhash&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;startswith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;EXPECTED_PREFIX&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;hash_module&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;passlib&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SCHEME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;pwhash&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hash_module&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;plain_pass&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;pwhash&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pwhash&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;user&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;UPDATE_QUERY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cursor&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;db&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;os&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;execv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:])&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;vm&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;__main__&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And the passwords are getting gradually updated as the users log in.
Once all are updated, we can remove the post-login script and drop the &lt;code&gt;auth_allow_weak_schemes = yes&lt;/code&gt;.&lt;/p&gt; </description> 
	<pubDate>Sat, 28 Mar 2026 22:11:57 +0000</pubDate>

</item> 
<item>
	<title>Russell Coker: Communication and Hostile AIs</title>
	<guid>https://etbe.coker.com.au/?p=5962</guid>
	<link>https://etbe.coker.com.au/2026/03/29/communication-hostile-ais/</link>
     <description>  &lt;p&gt;We seem to be entering an “AI” apocalypse of sorts, they aren’t going to kill us or even take our jobs. What they are doing is destroying the Internet commons by filling it with rubbish. This isn’t even real AI, just pattern matching and prediction systems, mostly LLMs.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/&quot;&gt;Scott Shambaugh’s saga of being attacked and defamed by an OpenClaw AI bot is interesting and raises some disturbing possibilities for future online discussion [1]&lt;/a&gt;. Imagine what it would be like if everyone who was in any way notable for free software work had 100 such bots going after them.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.aikido.dev/blog/why-trying-to-secure-openclaw-is-ridiculous&quot;&gt;Dania Dumas wrote an insightful blog post about why OpenClaw is impossible to secure and why it won’t go away [2]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.schneier.com/blog/archives/2026/02/the-ai-generated-text-arms-race.html&quot;&gt;Bruce Schneier and Nathan E. Sanders wrote an insightful article about the AI generated text arms race [3]&lt;/a&gt; primarily concentrating on situations in which text that was assumed to be written by humans but was actually written in bulk by bots was performing a DOS attack on people who were reviewing it. There are many situations such as book publishing and publishing letters to the editor of newspapers where getting new material from unknown people is an important part of the job but where there are also people making low quality submissions that are almost a DOS attack at the best of times.&lt;/p&gt;
&lt;p&gt;Currently the email spam problem continues to get worse and when LLM use increases it will get significantly worse. &lt;a href=&quot;https://soatok.blog/2026/01/04/everything-you-need-to-know-about-email-encryption-in-2026/&quot;&gt;Email encryption isn’t viable [4]&lt;/a&gt;. The PGP web of trust never really worked well as it’s too difficult for most users.&lt;/p&gt;
&lt;p&gt;The amount of “AI” generated content that’s being recommended to users on platforms like YouTube and Facebook is steadily increasing and the amount of LLM generated commentary that purports to be from real people on Twitter and Facebook is also increasing. &lt;a href=&quot;https://www.vitavonni.de/blog/202602/20260213dogfood-the-AI.html&quot;&gt;Here’s an informative blog post by Erich Schubert about this [5]&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Potential Solutions&lt;/h2&gt;
&lt;h3&gt;Surrender?&lt;/h3&gt;
&lt;p&gt;One option and possibly the default option is to surrender to this and just let everything we built on the Internet over decades get destroyed. Whether to surrender is a decision that can be made on a per-service basis.&lt;/p&gt;
&lt;p&gt;Twitter is pretty much useless anyway, &lt;a href=&quot;https://etbe.coker.com.au/2026/03/25/death-of-twitter/&quot;&gt;I quit Twitter because Elon deliberately made it suck [6]&lt;/a&gt;. In my opinion this is not surrendering to what’s being done there, I’m just stopping wasting time on it and using better options. I used to have about 300 followers on Twitter and I don’t think that many of them would ever choose to stop following me, so I presume that about 1/3 of the people following me have decided to totally quit Twitter and delete their accounts. I also presume that some of the remainder have done the same as me and just kept a mostly inactive account. If Elon suddenly stopped being a stupid asshole it probably wouldn’t change anything as the value of the system was connections to others. Some people will consider my abandonment of Twitter as surrender and I accept that it’s not an unreasonable opinion. I think that the possibly 100 Twitter followers of mine who deleted their accounts surrendered.&lt;/p&gt;
&lt;p&gt;Facebook has been becoming a worse service, it’s business model is becoming increasingly exploitative and it’s interface is designed to be addictive. It’s probably best avoided unless you really need it. The only good thing about Facebook at the moment is that Facebook Marketplace doesn’t take a cut on sales and there are some really good deals on computers if you know what to look for. Unfortunately Facebook has a large number of users who are from marginalised communities and have no other alternatives for communication. It would be good to get them migrated to other platforms.&lt;/p&gt;
&lt;p&gt;We could just give up on a lot of general communications services and have everyone accept that good content is drowned out by rubbish and have the Internet become divided between people who accept the rubbish and those who cease using large portions of the Internet environment to avoid it.&lt;/p&gt;
&lt;h3&gt;Using Non Commercial Services&lt;/h3&gt;
&lt;p&gt;Lemmy is a good FOSS federated alternative to Reddit which also covers some of the uses of Facebook. It needs more users to get critical mass but is still quite usable. A post that might get a dozen comments on Reddit may get 1 comment on Lemmy but that one comment will be a good one. Reddit doesn’t appear to be attacked much by LLM generated content at least not yet. Even if the Reddit model proves to be resilient to LLM attack the Lemmy software can be used to replace some things that are done on Facebook, &lt;/p&gt;
&lt;p&gt;Mastodon is a good FOSS federated replacement for Twitter, it has a decent user-base including some VIPs. While it is aimed at the Twitter use case it can also cover a significant part of the Facebook use case.&lt;/p&gt;
&lt;p&gt;There are some other FOSS social media programs which could take over other parts of the commercial social media environment.&lt;/p&gt;
&lt;p&gt;Generally commercially run Internet services will have a financial incentive to allow the problems to get worse so we need to rely on FOSS software, non-commercial implementations, and government services.&lt;/p&gt;
&lt;h3&gt;Web Search&lt;/h3&gt;
&lt;p&gt;For a long time Google has had a monopoly on web search, but now they default to including an “AI Overview” at the start of the results which is sometimes useful but also sometimes very wrong. You can use the search URL “&lt;b&gt;https://www.google.com/search?q=%s&amp;amp;udm=web&lt;/b&gt;” to get google results without rubbish. But I presume that they will break that if it gets too popular.&lt;/p&gt;
&lt;p&gt;Searxng is a AGPL licensed metasearch engine that aggregates results from other engines, &lt;a href=&quot;https://github.com/searxng/searxng&quot;&gt;here’s the Searxng source [7]&lt;/a&gt; and &lt;a href=&quot;https://searx.space/&quot;&gt;here’s a list of Searxng instances if you want to try one [8]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even using meta search engines like Searxng won’t help if the original data is overloaded with spam, but alleviating the problem is a good temporary measure.&lt;/p&gt;
&lt;h3&gt;Web of Trust for the Web?&lt;/h3&gt;
&lt;p&gt;I’ve idly considered the possibility of having some sort of rating system for web pages that uses a web of trust so that you can securely use trust ratings of friends of friends etc. But given all the difficulties in using a web of trust for signing GPG key for software developers (the demographic that is most skilled at doing such things) it doesn’t seem viable.&lt;/p&gt;
&lt;p&gt;Should we surrender the idea of having a usable public web?&lt;/p&gt;
&lt;p&gt;In the early days of the web (before Google) it was standard practice to rely on recommendations from other people or from trusted sites to find other sites, that could be considered to be an informal web of trust. We could go back to that sort of usage pattern if Google and many of the big sites get overwhelmed by LLM generated spam.&lt;/p&gt;
&lt;h3&gt;Wikipedia&lt;/h3&gt;
&lt;p&gt;I believe that Wikipedia will be at the front lines of this battle. It’s model has always included anonymous contributions. &lt;a href=&quot;https://mako.cc/copyrighteous/how-taboo-shapes-knowledge-production-on-wikipedia&quot;&gt;Benjamin Mako Hill wrote an interesting blog post about research he did with Kaylea Champion into Wikipedia pages on taboo topics which have a larger portion of contributors choosing to be anonymous than non-taboo pages [9]&lt;/a&gt;. Wikipedia also has a long history of being abused for various reasons, one that I witnessed was someone putting false content into Wikipedia pages to immediately cite them in support of their facebook arguments. That sort of thing can be dealt with at human scale but a large scale attack by bots is a different problem to solve. Also with the recent developments in AI developing multiple web sites entirely populated for the purpose of supporting one fake entry in Wikipedia is plausible.&lt;/p&gt;
&lt;p&gt;The upside of these attacks that I predict is that they will attract the attention of all the people who have skills related to developing counter-measures. While LLM bots are filling the inboxes of publishers with rubbish and messing up the stackoverflow comments section not a lot of people are bothered, but once the attacks on Wikipedia get serious everyone will take notice.&lt;/p&gt;
&lt;h3&gt;National AI&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.schneier.com/blog/archives/2026/03/canada-needs-nationalized-public-ai.html&quot;&gt;Bruce Schneier and Nathan E. Sanders wrote an interesting blog post about nationalised public AI [10]&lt;/a&gt;. While that won’t directly address this issue it will get the right technology in the hands of people who can use it in the right way.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is going to be a difficult problem to solve, more difficult than the email spam problem we have been unable to solve after 30 years of working on it.&lt;/p&gt;
&lt;p&gt;This is also a very important problem, we are currently in an age where we have access to information that most people couldn’t even dream of 30 years ago. We also have disinformation that combines some of the worst aspects of authoritarian regimes throughout history combined with the worst aspects of cult brainwashing. If we lose access to the information but the disinformation remains (or get worse) then the result will be terrible.&lt;/p&gt;
&lt;p&gt;I don’t have great ideas for solving this. I have outlined some small ideas to mitigate things and I hope that others can expand on them.&lt;/p&gt;
&lt;p&gt;Please write comments with any good ideas you have, or even ideas that don’t totally suck. A problem this difficult is not going to be solved in a blog comment, but a blog comment might point in the right direction.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[1]&lt;a href=&quot;https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/&quot;&gt; https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[2]&lt;a href=&quot;https://www.aikido.dev/blog/why-trying-to-secure-openclaw-is-ridiculous&quot;&gt; https://tinyurl.com/26wm43e2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[3]&lt;a href=&quot;https://www.schneier.com/blog/archives/2026/02/the-ai-generated-text-arms-race.html&quot;&gt; https://tinyurl.com/22ghka6s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[4]&lt;a href=&quot;https://soatok.blog/2026/01/04/everything-you-need-to-know-about-email-encryption-in-2026/&quot;&gt; https://tinyurl.com/29to4cw5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[5]&lt;a href=&quot;https://www.vitavonni.de/blog/202602/20260213dogfood-the-AI.html&quot;&gt; https://www.vitavonni.de/blog/202602/20260213dogfood-the-AI.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[6]&lt;a href=&quot;https://etbe.coker.com.au/2026/03/25/death-of-twitter/&quot;&gt; https://etbe.coker.com.au/2026/03/25/death-of-twitter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[7]&lt;a href=&quot;https://github.com/searxng/searxng&quot;&gt; https://github.com/searxng/searxng&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[8]&lt;a href=&quot;https://searx.space/&quot;&gt; https://searx.space/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[9]&lt;a href=&quot;https://mako.cc/copyrighteous/how-taboo-shapes-knowledge-production-on-wikipedia&quot;&gt; https://tinyurl.com/26m98gca&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[10]&lt;a href=&quot;https://www.schneier.com/blog/archives/2026/03/canada-needs-nationalized-public-ai.html&quot;&gt; https://tinyurl.com/24xt9gst&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;yarpp yarpp-related yarpp-related-rss yarpp-template-list&quot;&gt;

&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2010/11/01/communication-shutdown/&quot; rel=&quot;bookmark&quot; title=&quot;Communication Shutdown and Autism&quot;&gt;Communication Shutdown and Autism&lt;/a&gt; &lt;small&gt;The AEIOU Foundation The AEIOU Foundation [1] is a support...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2026/03/25/death-of-twitter/&quot; rel=&quot;bookmark&quot; title=&quot;The Death of Twitter&quot;&gt;The Death of Twitter&lt;/a&gt; &lt;small&gt;At the end of last year I uninstalled the Twitter...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://etbe.coker.com.au/2016/10/02/hostile-web-sites/&quot; rel=&quot;bookmark&quot; title=&quot;Hostile Web Sites&quot;&gt;Hostile Web Sites&lt;/a&gt; &lt;small&gt;I was asked whether it would be safe to open...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Sat, 28 Mar 2026 15:08:11 +0000</pubDate>

</item> 
<item>
	<title>Jonathan Dowland: Digital gardening</title>
	<guid>https://jmtd.net/log/gardening/</guid>
	<link>https://jmtd.net/log/gardening/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/jmtd.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;I was reading &lt;a href=&quot;https://alexwlchan.net/2026/mosaic/&quot;&gt;a post&lt;/a&gt; on &lt;a href=&quot;https://alexwlchan.net/&quot;&gt;Alex Chan&#39;s
website&lt;/a&gt;&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://jmtd.net/log/#fn:1&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; that referenced the concept of
&lt;a href=&quot;https://tomcritchlow.com/2019/02/17/building-digital-garden/&quot;&gt;digital gardens&lt;/a&gt;,
a concept/analogy for organising information which dates back to the 90s.
This old concept is getting new traction today by contrasting the approach
with &quot;endless stream&quot; as used and abused by social media, but also how blogs
are typically presented.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This site&lt;/em&gt;, my homepage, has a blog, and that&#39;s the bit that most people who
interact with the site will experience. Partly, because it&#39;s the bit that gets
syndicated out: via &lt;a href=&quot;https://jmtd.net/log/feed/&quot;&gt;feeds&lt;/a&gt;; on &lt;a href=&quot;https://planet.debian.org&quot;&gt;Planet
Debian&lt;/a&gt; and downstream from it; once upon a time on
Twitter; nowadays on &lt;a href=&quot;https://pleroma.debian.social/jmtd&quot;&gt;the Fediverse&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However there&#39;s more to my homepage than that. The rest of it may be of little
interest to anyone beside me, but it&#39;s useful to me, at least. So I may switch
focus a little bit from mainly writing blog posts, and tend to the rest of the
garden a bit more.&lt;/p&gt;

&lt;p&gt;Some recent seeding and pruning:
Recently my guest status at Newcastle University came up for renewal, so I
wrote down my goals in the Historic Computing Committee for the next year or
so, and put them here: &lt;a href=&quot;https://jmtd.net/nuhcc/&quot;&gt;nuhcc&lt;/a&gt;. I&#39;ve also been pondering what I&#39;m up to in
&lt;a href=&quot;https://jmtd.net/debian/&quot;&gt;Debian&lt;/a&gt; at the moment, so took some time to add my current projects to
that page.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn:1&quot;&gt;
I&#39;m reminded that I should really publish a &quot;blog roll&quot; of cool
  blogs I&#39;m following at the moment, of which Alex Chan&#39;s is one.&lt;a href=&quot;https://jmtd.net/log/#fnref:1&quot; rev=&quot;footnote&quot;&gt;↩&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Fri, 27 Mar 2026 22:05:39 +0000</pubDate>

</item> 
<item>
	<title>Bits from Debian: New Debian Developers and Maintainers (January and February 2026)</title>
	<guid>tag:bits.debian.org,2026-03-27:/2026/03/new-developers-2026-03.html</guid>
	<link>https://bits.debian.org/2026/03/new-developers-2026-03.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dwn.png&quot; width=&quot;77&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;The following contributors got their Debian Developer accounts in the last two
months:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jongmin Kim (jmkim)&lt;/li&gt;
&lt;li&gt;Yifei Zhan (yifei)&lt;/li&gt;
&lt;li&gt;Sébastien Noel (twolife)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following contributors were added as Debian Maintainers in the last two
months:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Andreas Dolp&lt;/li&gt;
&lt;li&gt;Dandan Zhang&lt;/li&gt;
&lt;li&gt;M Hickford&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Congratulations!&lt;/p&gt; </description> 
	<pubDate>Fri, 27 Mar 2026 22:00:00 +0000</pubDate>

</item> 
<item>
	<title>Arturo Borrero González: New job at Chainguard</title>
	<guid>https://ral-arturo.org/2026/03/27/chainguard.html</guid>
	<link>https://ral-arturo.org/2026/03/27/chainguard.html</link>
     <description>  &lt;p&gt;&lt;img alt=&quot;Chainguard logo&quot; src=&quot;https://ral-arturo.org/assets/chainguard-logo.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A few months ago, in June 2025, I joined &lt;a href=&quot;https://www.chainguard.dev&quot;&gt;Chainguard&lt;/a&gt;, a company focused on software supply chain security.
This post is a reflection on how I got here, what I’ve been doing, and why this role feels like a natural
fit for my interests in Linux and open source technology.&lt;/p&gt;



&lt;h2 id=&quot;the-company-and-its-mission&quot;&gt;The company and its mission&lt;/h2&gt;

&lt;p&gt;Chainguard’s mission is to make the software supply chain secure by default. The company is built around
the idea that the software we all depend on — from operating system packages to container base images — carries
hidden risk in the form of vulnerabilities, unverified provenance, and untrusted build processes.&lt;/p&gt;

&lt;p&gt;The company is perhaps best known for &lt;a href=&quot;https://www.chainguard.dev/chainguard-images&quot;&gt;Chainguard Images&lt;/a&gt;: a catalog of minimal, hardened container
base images that are continuously rebuilt and kept free of known CVEs. Each image is accompanied by a signed
&lt;a href=&quot;https://www.cisa.gov/sbom&quot;&gt;SBOM&lt;/a&gt; (Software Bill of Materials) and a verifiable &lt;a href=&quot;https://slsa.dev&quot;&gt;provenance attestation&lt;/a&gt;, making it possible
to cryptographically verify what went into a given image and how it was built.&lt;/p&gt;

&lt;p&gt;Chainguard has an extensive catalog of software, and maintaining it up-to-date and CVE-free is a significant
engineering challenge.&lt;/p&gt;

&lt;h2 id=&quot;what-i-do&quot;&gt;What I do&lt;/h2&gt;

&lt;p&gt;I joined the Chainguard Sustaining Engineering team as a Senior Software Engineer. We are responsible
for maintaining packages and images in the software catalog up-to-date and CVE-free. The core of the business, basically.&lt;/p&gt;

&lt;p&gt;We focus on the horizontal dimension of the catalog (pretty much all packages and images).&lt;/p&gt;

&lt;p&gt;With +30,000 packages and +2,000 images, this is indeed an interesting task.&lt;/p&gt;

&lt;p&gt;My role as Debian Developer, and my experiencie in the &lt;a href=&quot;https://ral-arturo.org/2025/04/17/lts.html&quot;&gt;Debian LTS project&lt;/a&gt; was extremely valuable when joning this
new team.&lt;/p&gt;

&lt;h2 id=&quot;looking-ahead&quot;&gt;Looking ahead&lt;/h2&gt;

&lt;p&gt;Software supply chain is truly a deep topic, gaining more and more relevance every day, especially as new technologies emerge
and get adopted everywhere.&lt;/p&gt;

&lt;p&gt;Since early in my career, I saw a recurrent problem of how companies, enterprises, or even governments, relate to and consume
open source software, in a reliable, secure way. I believe Chainguard is doing the right things in the ecosystem,
and I’m happy to be participating in the effort.&lt;/p&gt; </description> 
	<pubDate>Fri, 27 Mar 2026 08:00:00 +0000</pubDate>

</item> 
<item>
	<title>John Goerzen: Artificial Intelligence: Shades of Gray</title>
	<guid>https://changelog.complete.org/?p=42503</guid>
	<link>https://changelog.complete.org/archives/42503-artificial-intelligence-shades-of-gray</link>
     <description>  &lt;p&gt;AI sure is a hot topic right now, and I see a lot of people arguing about it.  To a lot of people around here, I’m the “computer person” they know and I get asked a lot about AI.&lt;/p&gt;
&lt;p&gt;I’m going to suggest a lot of things can be true at once.  For instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LLMs are changing how we work and will continue to do so.&lt;/li&gt;
&lt;li&gt;LLMs are vastly over-hyped by vested interests, and may be in a bubble.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Or how about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Huge investment in GenAI is having many negative consequences, ranging from environmental to causing affordability problems in many industries that use hardware (ie, everywhere)&lt;/li&gt;
&lt;li&gt;Useful results can be had from models that run on local hardware, even battery-powered hardware, which may have negligible harm or even some benefit&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GenAI is further concentrating wealth and power in megacorps, with the effect of squeezing out the smaller players even more.&lt;/li&gt;
&lt;li&gt;GenAI is lowering the cost of entry for people without a lot of resources already.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have sympathy for the naysayers; those that say it’s nothing but a stochastic parrot.  But I don’t have a lot of sympathy for the naysayers that deny ever using it; you can’t form a credible argument against something without having an understanding of it informed by experience.&lt;/p&gt;
&lt;p&gt;I also have sympathy for the cheerleaders.  I have seen some impressive things from AI; for instance, a story from an engineer who has a child with a rare disease without a credible cure.  The engineer did a lot of research on it, started feeding research papers into AI to analyze, and the AI started finding correlations between different areas of research that humans hadn’t yet found — leading to a positive result for the child.&lt;/p&gt;
&lt;p&gt;To be fair, I have rarely seen an AI deliver a 100% correct answer on anything with any real level of complexity.  I have seen it both waste more time than it saves, and save a ton of time.&lt;/p&gt;
&lt;p&gt;My point here is: It is neither always fantastic nor always terrible.&lt;/p&gt;
&lt;p&gt;Let me talk you through an example.&lt;/p&gt;
&lt;p&gt;I am a fan of inbox zero for email.  That is, the inbox should be empty.  Unfortunately, mine has 8000 messages in it.  According to the oldest messages in my inbox, I last had inbox zero 8 years ago.  But really, only a handful are older than 2020.  I guess something must have happened that year…&lt;/p&gt;
&lt;p&gt;I’ve been chipping away at this for quite some time now.  The problem is, there are certain emails in there that really do still need some action – maybe it’s photos to save off into our photo collection, for instance.  But when looking at things sorted by date or thread, there are old shipping confirmations next to phishing attempts and family photos.  One can’t just scan down the list.&lt;/p&gt;
&lt;p&gt;I’ve tried all the usual tricks, most of which involve selecting groups of message that are easy to bulk erase, or at least easy to scan visually for the occasional thing worth saving.  Sort by sender or subject line, for instance.  Then I can, for instance, delete all the old messages from the shopping sites I commonly use all at once.  But then they start using different senders and different subject lines and that doesn’t get all of them.  I’ve tried keyword searches for this sort of thing too.  Still, that got me down to about 8000 messages.&lt;/p&gt;
&lt;p&gt;So I thought: why not see if an LLM could help me classify these?  Maybe it could categorize them, and then I could look at emails grouped by category.&lt;/p&gt;
&lt;p&gt;I have one machine with a discrete GPU, an Nvidia RTX 4070.  It’s a desktop machine I don’t use all that often.  But I set up Ollama on it, running in a Docker container.  Ollama runs models locally.&lt;/p&gt;
&lt;p&gt;I should also mention at this point that we are solar-powered, and this time of year is a time of peak production of excess solar, because it is sunny and not much heat or AC is required.  So that machine is solar-powered and isn’t causing environmental harm.  In any case, charging the EV uses much more power than that GPU.&lt;/p&gt;
&lt;p&gt;I figured I would do this in two passes.  First, ask the LLM to classify each message (or a sampling of them would probably work too), letting it pick its own categories for each.  Then, look at the patterns that emerge and give it a single, much smaller, set of broad categories to use and rerun it over that.&lt;/p&gt;
&lt;p&gt;Then I can easily select messages from my Maildirs by category and process them in bulk.&lt;/p&gt;
&lt;p&gt;I used &lt;a href=&quot;https://github.com/OpenInterpreter/open-interpreter&quot;&gt;open-interpreter&lt;/a&gt; pointing to that GPU on my network to help me write the scripts for this.  It didn’t get things right on its own; for instance, it didn’t call the Ollama API correctly, and insisted on appending “/cur” to the path to the Maildir (which was not going to fly with Python’s maildir module).  It took roughly an hour to classify those 8000 messages (or, as I had it do, the first 2000 characters of them), and then the same to do it a second time.  I had it output lines in the form of “filename\tcategory” and hand-wrote the shell script that processed those.&lt;/p&gt;
&lt;p&gt;In the end, was it useful?  Yes, quite.  Its classifications weren’t perfect (and it didn’t even follow my prompt perfectly; sometimes it would give me a long discussion on why it picked a certain category rather than just that category, and occasionally it picked categories not on the list).  But then, neither were my manual keyword searches.  So far I’ve gotten rid of nearly 1000 more messages.  Several categories were a “visual scan for sanity and then delete all” sort of thing.&lt;/p&gt;
&lt;p&gt;My emails never left my network.  I didn’t rely on a cloud AI to process them.  I didn’t contribute to global warming (this may have even been a case of saving energy, since it no doubt will offset quite a bit of manual time that would keep screens and room lights energized and so forth).  I used about as much energy as watching a movie on a TV.&lt;/p&gt;
&lt;p&gt;Did it complete the task for me entirely autonomously?  Also no.  AI isn’t a mind reader and it can’t possibly evaluate exactly what my thought process would be for a given task.  But it can do a decent enough job to save me some time.&lt;/p&gt;
&lt;p&gt;Still, this didn’t require hyperscaler datacenters.  AI even runs on-phone (Google Translate being one of the most useful AI-driven apps I’ve ever seen, and it can run on-device).&lt;/p&gt; </description> 
	<pubDate>Wed, 25 Mar 2026 04:12:18 +0000</pubDate>

</item> 
<item>
	<title>Russ Allbery: Review: A Shadow in Summer</title>
	<guid>https://www.eyrie.org/~eagle/reviews/books/0-7653-1340-5.html</guid>
	<link>https://www.eyrie.org/~eagle/reviews/books/0-7653-1340-5.html</link>
     <description>  &lt;p&gt;Review: &lt;cite&gt;A Shadow in Summer&lt;/cite&gt;, by Daniel Abraham&lt;/p&gt;

&lt;table&gt;
  &lt;tbody&gt;&lt;tr&gt;
    &lt;td&gt;Series:&lt;/td&gt;
    &lt;td&gt;Long Price Quartet #1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Publisher:&lt;/td&gt;
    &lt;td&gt;Tor&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Copyright:&lt;/td&gt;
    &lt;td&gt;March 2006&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;ISBN:&lt;/td&gt;
    &lt;td&gt;0-7653-1340-5&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Format:&lt;/td&gt;
    &lt;td&gt;Hardcover&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Pages:&lt;/td&gt;
    &lt;td&gt;331&lt;/td&gt;
  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;
&lt;cite&gt;A Shadow in Summer&lt;/cite&gt; is a high fantasy novel, the first of (as the
name implies) a completed four-book series. Daniel Abraham is perhaps
better known as half of the writing pair behind James S.A. Corey, author
of the &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-316-13467-8a.html&quot;&gt;Expanse series&lt;/a&gt;. This was his first
novel.
&lt;/p&gt;

&lt;p&gt;
Otah was the sixth son of a Khai, sent like many of the unwanted later
children of the powerful to learn the secrets of the andat and be trained
as a poet. He learned his lessons well enough to reject the school and its
teachings and walk away.
&lt;/p&gt;

&lt;p&gt;
Amat Kyaan has worked her way up from nothing to become the senior
overseer of the foreign Galtic House Wilsin in the sun-drenched port city
of Saraykeht. Liat is her apprentice, distracted by young love. Maati is a
new apprentice poet, having endured his training and sent to learn from
Heshai how to eventually hold the andat Removing-The-Part-That-Continues,
better known as Seedless. None of them know they will find themselves
entangled in a plot to destroy the poet of Saraykeht and, through him, the
city&#39;s most potent economic tool.
&lt;/p&gt;

&lt;p&gt;
A poet in this world is not what we would think of a poet. They are, in
essence, magical slave-drivers who capture the essence of an andat, a
spirit embodying an idea that is coerced into the prison of volition and
obedience by the poet. The andat Seedless, the embodiment of the concept
of removing the spark of life, is central to the economic wealth of
Saraykeht in a way that is startling in its simplicity: Seedless can
remove the seeds from a warehouse full of cotton at a thought. This gives
Saraykeht a massive productivity advantage in the cotton trade.
&lt;/p&gt;

&lt;p&gt;
Seedless is also a powerful potential weapon. What he can do to cotton, he
could as easily do to any other crop, or to people. The Galts are not fond
of the independence and power of Saraykeht, but as long as the city
controls a powerful andat, they do not dare to attack it directly.
Indirectly, though... that&#39;s another matter.
&lt;/p&gt;

&lt;p&gt;
This is one of those fantasy novels with meticulous and thoughtful
world-building, careful and evocative prose, and a complex ensemble cast
of interesting characters that the novel then attempts to make utterly
miserable and complicit in their own misery. There should be a name for
this style of writing. It&#39;s not tragedy because the ending is not tragic,
precisely. It&#39;s not magic realism; the andats are openly magical, which
makes this clearly high fantasy. But Abraham approaches the story from the
type of realist frame that considers the pain and desperation of the
characters to be more interesting than their ability to overcome
challenges.
&lt;/p&gt;

&lt;p&gt;
Amat starts the story as an admirable, sharp-witted expert manager, so her
life is destroyed and she&#39;s subjected to sexual violence. Heshai loathes
himself and veers between a tragic figure and a wastrel as the story
systematically undermines opportunities for redemption. Maati is young and
idealistic, so of course every character in the book sets out to crush his
idealism under the weight of unforeseen consequences. There is a sad and
depressing love triangle, because this is exactly the sort of book that
has a sad and depressing love triangle. At the end of the novel, everyone
who survives is older and wiser in the sense that some stories seem to
think wisdom comes from the accumulation of trauma.
&lt;/p&gt;

&lt;p&gt;
I find books like this so immensely frustrating because their merits are
so clear. The world-building is careful and detailed in a way that
includes economic systems, unlike so much fantasy. It is full of small,
intriguing touches, such as the use of posture and gesture to communicate
the emotional valence of one&#39;s words. Abraham understands the moral
implications of poets and andats and the story tackles them head-on. The
writing flows beautifully and gave me a strong sense of the city. I wanted
to like this book for the obvious skill that went into it, and sometimes I
even managed.
&lt;/p&gt;

&lt;p&gt;
And yet, it&#39;s taken me three months to finish &lt;cite&gt;A Shadow in Summer&lt;/cite&gt;
because I simply do not want to spend this much time around miserable
people. I would get through one or two chapters in a night and then wanted
to read something happy or defiant or heroic, rather than watching
slow-motion train wrecks intermixed with desperate attempts to navigate
stifling layers of immoral systems. It&#39;s not that the story lacks a moral
compass. The characters are sincerely trying to make the world a better
place, with some success. It even delivers a happy ending of sorts. But so
much of the journey was watching the lives of the characters fall apart.
&lt;/p&gt;

&lt;p&gt;
I am completely unsurprised that some people loved this book. I&#39;m still
intrigued enough by the world-building that I&#39;m half-tempted to try to
read the sequel even after having to drag myself through this one. I had a
similar reaction to Abraham&#39;s &lt;a href=&quot;https://www.eyrie.org/~eagle/reviews/books/0-316-13467-8b.html&quot;&gt;&lt;cite&gt;The
Dragon&#39;s Path&lt;/cite&gt;&lt;/a&gt;, though, so I think Abraham is just not for me. I may get
back to the Expanse at some point, but having to drag myself through both
of his solo novels I&#39;ve tried, in two different series, probably indicates
an incompatibility between author and reader. That&#39;s a shame, given the
quality of the writing.
&lt;/p&gt;

&lt;p&gt;
Followed by &lt;cite&gt;A Betrayal in Winter&lt;/cite&gt;.
&lt;/p&gt;

&lt;p&gt;
Content notes: Sexual and reproductive violence as significant plot
elements.
&lt;/p&gt;

&lt;p&gt;Rating: 6 out of 10&lt;/p&gt; </description> 
	<pubDate>Tue, 24 Mar 2026 04:40:00 +0000</pubDate>

</item> 
<item>
	<title>Marco d&#39;Itri: systemd has not implemented age verification</title>
	<guid>tag:https:,2026:id_473</guid>
	<link>https://blog.bofh.it/debian/id_473</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/md.jpg&quot; width=&quot;96&quot; height=&quot;95&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;This needs to be clear: systemd is under attack by a trolling campaign orchestrated by fascist elements. Nobody is forced to like or use systemd, but anybody who wants to pick a side should know the facts.&lt;/p&gt;

&lt;p&gt;Recently, the free software &lt;a href=&quot;https://en.wiktionary.org/wiki/Nazi_bar&quot;&gt;Nazi bar&lt;/a&gt; crowd styling themselves as &quot;concerned citizens&quot; has tried to start a &lt;a href=&quot;https://en.wikipedia.org/wiki/Moral_panic&quot;&gt;moral panic&lt;/a&gt; by saying that systemd is implementing age verification checks or that somehow it will require providing personally identifiable information.&lt;/p&gt;

&lt;p&gt;This is a lie: the facts are simply that the systemd &lt;a href=&quot;https://www.freedesktop.org/software/systemd/man/latest/systemd-userdbd.service.html&quot;&gt;users database&lt;/a&gt; has gained an optional &quot;date of birth&quot; field, which the desktop environments may use or not as they deem appropriate. Of course there is no &quot;identity verification&quot; or requirements to provide any data, which in any case would not be shared beyond authorized local applications.&lt;/p&gt;

&lt;p&gt;While the multiple recent bills proposing that general purpose operating systems implement age verification mechanisms are often concerning, both from a social and technical point of view, this is not the topic being discussed here. They are often suboptimal, but for a long time I have been opposing attempts to implement parental control at the network level and argued that it should be managed locally, by parents on their own machines: I cannot see why I should outright reject an attempt to implement the infrastructure to do that.&lt;/p&gt;

&lt;p&gt;If we want to keep age-appropriate controls out of the hands of centralized authorities, the alternative is giving families the means to manage it themselves: this is what this field enables. Whether desktop environments use it for parental controls, for birthday reminders, or for nothing at all, is their users&#39; decision.&lt;/p&gt;

&lt;p&gt;By the way, the original UNIX users database has allowed storing PII in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gecos_field&quot;&gt;GECOS field&lt;/a&gt; since it was invented in the &#39;70s. Similar fields are also specified by many popular LDAP schemes: adding such an optional field is consistent with the UNIX tradition.&lt;/p&gt;

&lt;p&gt;And while we are at it, let&#39;s also refute the other smear campaign started by the same people: the systemd project is not accepting &quot;AI slop&quot;. What happened is that &lt;a href=&quot;https://github.com/systemd/systemd/blob/main/AGENTS.md&quot;&gt;a documentation file for the benefit of coding agents&lt;/a&gt; was added to the repository. To be clear: agents still cannot submit merge requests. The file itself remarks that all contributions must be reviewed in detail by humans, and this is basically the same policy used by the Linux kernel.&lt;/p&gt; </description> 
	<pubDate>Mon, 23 Mar 2026 15:47:22 +0000</pubDate>

</item> 
<item>
	<title>Benjamin Mako Hill: How taboo shapes knowledge production on Wikipedia</title>
	<guid>https://mako.cc/copyrighteous/?p=3351</guid>
	<link>https://mako.cc/copyrighteous/how-taboo-shapes-knowledge-production-on-wikipedia</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/mako.gif&quot; width=&quot;65&quot; height=&quot;93&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p class=&quot;has-small-font-size&quot;&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt; I have not published blog posts about my academic papers over the past few years. To ensure that my blog contains a more comprehensive record of my published papers and to surface them for folks who missed them, I will periodically (re) publish blog posts about some “older” published projects. This post draws material from &lt;a href=&quot;https://blog.communitydata.science/lets-talk-about-taboo-a-new-paper-on-how-taboo-shapes-activity-on-wikipedia/&quot;&gt;a previously published post&lt;/a&gt; by &lt;a href=&quot;https://zarine.net/&quot;&gt;Kaylea Champion&lt;/a&gt; on &lt;a href=&quot;https://blog.communitydata.science/&quot;&gt;the Community Data Science Blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;



&lt;p id=&quot;block-419f7d04-082e-4c82-8605-89baefb2ee2d&quot;&gt;Taboo subjects—such as sexuality and mental health—are as important to discuss as they are difficult to raise in conversation. Although many people turn to online resources for information on taboo subjects, censorship and low-quality information are common in search results. In two papers I recently published at CSCW—both led by Kaylea Champion—we presented a series of analyses showing how taboo shapes the process of collaborative knowledge building on English Wikipedia.&lt;/p&gt;



&lt;p id=&quot;block-419f7d04-082e-4c82-8605-89baefb2ee2d&quot;&gt;The first study is a quantitative analysis showing that articles on taboo subjects are much more popular and are the subject of more vandalism than articles on non-taboo topics. In surprising news, we also found that they were edited more often and were of higher quality!&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;

&lt;/div&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Short video of Kaylea’s presentation of the work given at Wikimania in August 2023.&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p id=&quot;block-2779c102-6740-41cc-a53f-e3fbe94131db&quot;&gt;The first challenge we faced in conducting this work was identifying taboo articles. Kaylea had a brilliant idea for a new computational approach to doing so without relying on our individual intuitions about what qualifies as taboo (something we understood would be highly specific to our own culture, class, etc). Her approach was to make use of an insight from linguistics: &lt;em&gt;people develop euphemisms as ways to talk about taboos&lt;/em&gt; (i.e., think about all the euphemisms we’ve devised for death, or sex, or menstruation, or mental health).&lt;/p&gt;



&lt;p id=&quot;block-2779c102-6740-41cc-a53f-e3fbe94131db&quot;&gt;We used this insight to build a new machine-learning classifier based on English Wiktionary definitions. If a ‘sense’ of a word was tagged as euphemistic, we treated the words in the definition as indicators of taboo. The end result was a series of words and phrases that most powerfully differentiate taboo from non-taboo. We then did a simple match between those words and phrases and the titles of Wikipedia articles. The topics were taboo enough that we were a little uncomfortable discussing them in our meetings! We built a comparison sample of articles whose titles are words that, like our taboo articles, appear in Wiktionary definitions.&lt;/p&gt;



&lt;p&gt;In the first paper, we used this new dataset to test a series of hypotheses about how taboo shapes collaborative production in Wikipedia. Our initial hypotheses were based on the idea that taboo information is often in high demand but that Wikipedians might be reluctant to associate their names (or usernames) with taboo topics. The result, we argued, would be articles that were in high demand but of low quality. &lt;/p&gt;



&lt;p&gt;We found that taboo articles are thriving on Wikipedia! In summary, we found that in comparison to non-taboo articles:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Taboo articles are more popular  (&lt;em&gt;as expected&lt;/em&gt;).&lt;/li&gt;



&lt;li&gt;Taboo articles receive more contributions (&lt;em&gt;contrary to expectations&lt;/em&gt;).&lt;/li&gt;



&lt;li&gt;Taboo articles receive more low-quality contributions (&lt;em&gt;as expected&lt;/em&gt;).&lt;/li&gt;



&lt;li&gt;Taboo articles are higher quality (&lt;em&gt;contrary to expectations&lt;/em&gt;).&lt;/li&gt;



&lt;li&gt;Taboo article contributors are more likely to contribute without an account (&lt;em&gt;as expected&lt;/em&gt;), and have less experience (&lt;em&gt;as expected&lt;/em&gt;), but that accountholders are more likely to make themselves more identifiable by having a user page, disclosing their gender, and making themselves emailable (&lt;em&gt;all three of these are contrary to expectation&lt;/em&gt;!).&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-3352&quot; height=&quot;889&quot; src=&quot;https://mako.cc/copyrighteous/wp-content/uploads/2026/03/screenshot-20260323_180937.png&quot; width=&quot;916&quot; /&gt;&lt;figcaption class=&quot;wp-element-caption&quot;&gt;Image of the estimated qualiy of articles of the four articles in the second mixed-methods paper. Extreme dips reflect periods of frequent vandalism.&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;Kaylea attempted to understand these somewhat confusing results by designing a fantastic mixed-methods analysis that sought to unpack some of the nuance missing in the quantitative analysis by delving deep into the “life histories” of four articles on English Wikipedia: two on taboo topics related to women’s anatomy (&lt;a href=&quot;https://en.wikipedia.org/wiki/Clitoris&quot;&gt;Clitoris&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Menstruation&quot;&gt;Menstration&lt;/a&gt;) and two nontaboo articles chosen for comparison (&lt;a href=&quot;https://en.wikipedia.org/wiki/Cell_membrane&quot;&gt;Cell membrance&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Philip_Pullman&quot;&gt;Philip Pullman&lt;/a&gt;).&lt;/p&gt;



&lt;p&gt;Although the findings from the analysis can be difficult to summarize succinctly (as with many qualitative studies), we showed how the taboo example articles’ success was hard-won amid real challenges and attacks. The paper describes how challenges were overcome through resilient leadership, often provided by a single dedicated individual. The paper provides a template for how taboo can be—and frequently is—overcome by dedicated Wikipedians in ways that provide useful knowledge resources in real demand.&lt;/p&gt;



&lt;p&gt;For more details, visualizations, statistics, and more, we hope you’ll take a look at our papers, both linked below.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p class=&quot;has-small-font-size&quot;&gt;The full citation for the papers are: (1) Champion, Kaylea, and Benjamin Mako Hill. 2023. “Taboo and Collaborative Knowledge Production: Evidence from Wikipedia.” &lt;em&gt;Proceedings of the ACM on Human-Computer Interaction&lt;/em&gt; 7 (CSCW2): 299:1-299:25. &lt;a href=&quot;https://doi.org/10.1145/3610090&quot;&gt;https://doi.org/10.1145/3610090&lt;/a&gt;. (2) Champion, Kaylea, and Benjamin Mako Hill. 2024. “Life Histories of Taboo Knowledge Artifacts.” &lt;em&gt;Proceedings of the ACM: Human-Computer Interaction&lt;/em&gt; 8 (CSCW2): 505:1-505:32. &lt;a href=&quot;https://doi.org/10.1145/3687044&quot;&gt;https://doi.org/10.1145/3687044&lt;/a&gt;. &lt;/p&gt;



&lt;p class=&quot;has-small-font-size&quot;&gt;We have also released &lt;a href=&quot;https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/5OKEEO&quot;&gt;replication materials for the paper&lt;/a&gt;, including all the data and code used to conduct the analyses.&lt;/p&gt;



&lt;p class=&quot;has-small-font-size&quot;&gt;This blog post and the paper it describes are collaborative work by &lt;a href=&quot;https://kayleachampion.com/&quot;&gt;Kaylea Champion&lt;/a&gt; and &lt;a href=&quot;https://mako.cc/academic/&quot;&gt;Benjamin Mako Hill&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Mon, 23 Mar 2026 09:33:53 +0000</pubDate>

</item> 
<item>
	<title>Vincent Bernat: Calculate “1/(40rods/hogshead) to L/100km” from your Zsh prompt</title>
	<guid>http://www.luffy.cx/en/blog/2026-zsh-calculator.html</guid>
	<link>https://vincent.bernat.ch/en/blog/2026-zsh-calculator</link>
     <description>  &lt;p&gt;I often need a quick calculation or a unit conversion. Rather than reaching for
a separate tool, a few lines of &lt;em&gt;Zsh&lt;/em&gt; configuration turn &lt;code&gt;=&lt;/code&gt; into a calculator.
Typing &lt;code&gt;= 660km / (2/3)c * 2 -&amp;gt; ms&lt;/code&gt; gives me &lt;code&gt;6.60457 ms&lt;/code&gt;&lt;sup id=&quot;fnref-marseille&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://vincent.bernat.ch#fn-marseille&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; without
leaving my terminal, thanks to the Zsh line editor.&lt;/p&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vincent.bernat.ch#the-equal-alias&quot;&gt;The equal alias&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vincent.bernat.ch#the-quoting-problem&quot;&gt;The quoting problem&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vincent.bernat.ch#automatic-quoting-with-zle&quot;&gt;Automatic quoting with ZLE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vincent.bernat.ch#storing-unquoted-history&quot;&gt;Storing unquoted history&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h1 id=&quot;the-equal-alias&quot;&gt;The equal alias&lt;/h1&gt;
&lt;p&gt;The main idea looks simple: define &lt;code&gt;=&lt;/code&gt; as an alias to a calculator command. I
prefer &lt;a href=&quot;https://numbat.dev/&quot; title=&quot;Numbat: a statically typed programming language for scientific computations&quot;&gt;Numbat&lt;/a&gt;, a scientific calculator that supports unit conversions.
&lt;a href=&quot;https://qalculate.github.io/&quot; title=&quot;Qalculate!: the ultimate desktop calculator&quot;&gt;Qalculate&lt;/a&gt; is a close second.&lt;sup id=&quot;fnref-qalc&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;https://vincent.bernat.ch#fn-qalc&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; If neither is available, we fall back to
Zshâ€™s built-in &lt;em&gt;zcalc&lt;/em&gt; module.&lt;/p&gt;
&lt;p&gt;As the &lt;code&gt;alias&lt;/code&gt; built-in uses &lt;code&gt;=&lt;/code&gt; as a separator for name and value, we need to
alter the &lt;code&gt;aliases&lt;/code&gt; associative array:&lt;/p&gt;
&lt;div class=&quot;language-bash codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;$+commands&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;numbat&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;aliases&lt;span class=&quot;o&quot;&gt;[=]=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;numbat -e&#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;elif&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;$+commands&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;qalc&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;then&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;aliases&lt;span class=&quot;o&quot;&gt;[=]=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;qalc&#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;autoload&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-Uz&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;zcalc
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;aliases&lt;span class=&quot;o&quot;&gt;[=]=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;zcalc -f -e&#39;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;With this in place, &lt;code&gt;= 847/11&lt;/code&gt; becomes &lt;code&gt;numbat -e 847/11&lt;/code&gt;.&lt;/p&gt;
&lt;h1 id=&quot;the-quoting-problem&quot;&gt;The quoting problem&lt;/h1&gt;
&lt;p&gt;The first problem surfaces quickly. Typing &lt;code&gt;= 5 * 3&lt;/code&gt; fails: Zsh expands the &lt;code&gt;*&lt;/code&gt;
character as a glob pattern before passing it to the calculator. The same issue
applies to other characters that Zsh treats specially, such as &lt;code&gt;&amp;gt;&lt;/code&gt; or &lt;code&gt;|&lt;/code&gt;. You
must quote the expression:&lt;/p&gt;
&lt;div class=&quot;language-bash-session codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;5 * 3&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;15&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;We fix this by hooking into the Zsh line editor to &lt;strong&gt;quote the expression&lt;/strong&gt;
before executing it.&lt;/p&gt;
&lt;h2 id=&quot;automatic-quoting-with-zle&quot;&gt;Automatic quoting with &lt;abbr title=&quot;Zsh Line Editor&quot;&gt;ZLE&lt;/abbr&gt;&lt;/h2&gt;
&lt;p&gt;Zsh calls the &lt;code&gt;line-finish&lt;/code&gt; widget before submitting a command. We hook a
function that detects the &lt;code&gt;=&lt;/code&gt; prefix and quotes the expression:&lt;/p&gt;
&lt;div class=&quot;language-bash codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;_vbe_calc_quote&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;case&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$BUFFER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;=&quot;&lt;/span&gt;*&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;typeset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-g&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;_vbe_calc_expr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$BUFFER&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;# not used yet&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;BUFFER&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;= &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(q-)&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;BUFFER&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;#=&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;# &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;;&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;esac&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
add-zle-hook-widget&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;line-finish&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;_vbe_calc_quote
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;When you type &lt;code&gt;= 5 * 3&lt;/code&gt; and press &lt;kbd&gt;â†²&lt;/kbd&gt;, &lt;code&gt;_vbe_calc_quote&lt;/code&gt; strips the &lt;code&gt;=&lt;/code&gt;
prefix, quotes the remainder with the &lt;a href=&quot;https://manpages.debian.org/zshexpn.1.html#q~2&quot; title=&quot;zshexpn(1) manual page&quot;&gt;&lt;code&gt;(q-)&lt;/code&gt; parameter expansion flag&lt;/a&gt;,
and rewrites the buffer to &lt;code&gt;= &#39;5 * 3&#39;&lt;/code&gt; before Zsh submits the command. As a
bonus, you can save a few keystrokes with &lt;code&gt;=5*3&lt;/code&gt;! ğŸš€&lt;/p&gt;
&lt;p&gt;You can now compute math expressions and convert units directly from your shell.
Zsh automatically quotes your expressions:&lt;/p&gt;
&lt;div class=&quot;language-bash-session codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;1 + 2&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;pi/3 + pi |&amp;gt; cos&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;-0.5&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;17 USD -&amp;gt; EUR&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;14.7122 â‚¬&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;180*500mg -&amp;gt; g&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;90 g&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;5 gigabytes / (2 minutes + 17 seconds) -&amp;gt; megabits/s&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;291.971 Mbit/s&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;now() -&amp;gt; tz(&quot;Asia/Tokyo&quot;)&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;2026-03-22 22:00:03 JST (UTC +09), Asia/Tokyo&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;1 / (40 rods / hogshead) -&amp;gt; L / 100km&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;118548 Ã— 0.01 l/km&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;figure&gt;&lt;div class=&quot;lf-media-outer&quot;&gt;&lt;span class=&quot;lf-media-inner&quot;&gt;&lt;img alt=&quot;â€œThat&#39;s the way I like it!â€� says Grampa Simpson&quot; class=&quot;lf-media lf-opaque&quot; height=&quot;299&quot; src=&quot;https://d2pzklc15kok91.cloudfront.net/images/simpson-s06e18@1x.27ade3072859d5.jpg&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;figcaption&gt;The metric system is the tool of the devil! My car gets forty rods to the hogshead, and that&#39;s the way I like it! â€• &lt;em&gt;Grampa Simpson&lt;/em&gt;, A Star Is Burns&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id=&quot;storing-unquoted-history&quot;&gt;Storing unquoted history&lt;/h2&gt;
&lt;p&gt;As is, Zsh records the &lt;em&gt;quoted&lt;/em&gt; expression in history. You must unquote it
before submitting it again. Otherwise, the &lt;abbr title=&quot;Zsh Line Editor&quot;&gt;ZLE&lt;/abbr&gt; widget quotes it a second time.
&lt;a href=&quot;https://www.zsh.org/mla/users/2026/msg00021.html&quot; title=&quot;Re: A ZLE widget for calculator&quot;&gt;Bart Schaefer&lt;/a&gt; provided a solution to store the
original version:&lt;/p&gt;
&lt;div class=&quot;language-bash codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;_vbe_calc_history&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;+_vbe_calc_expr&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
add-zsh-hook&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;zshaddhistory&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;_vbe_calc_history

_vbe_calc_preexec&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;+_vbe_calc_expr&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;print&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_vbe_calc_expr&lt;/span&gt;
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;unset&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;_vbe_calc_expr
&lt;span class=&quot;w&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
add-zsh-hook&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;preexec&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;_vbe_calc_preexec
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;zshaddhistory&lt;/code&gt; hook returns 1 if we are evaluating an expression, telling
&lt;em&gt;Zsh&lt;/em&gt; not to record the command. The &lt;code&gt;preexec&lt;/code&gt; hook then adds the original,
unquoted command with &lt;code&gt;print -s&lt;/code&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The complete code is available in my &lt;a href=&quot;https://github.com/vincentbernat/zshrc/blob/9af588820bed37b3b64b2f06777a77d32f4654c4/rc/alias.zsh#L451-L480&quot;&gt;zshrc&lt;/a&gt;. A common alternative is the
&lt;a href=&quot;https://manpages.debian.org/zshmisc.1.html#noglob&quot; title=&quot;zshmisc(1) manual page&quot;&gt;&lt;code&gt;noglob&lt;/code&gt;&lt;/a&gt; precommand modifier. If you stick with &lt;code&gt;to&lt;/code&gt; instead of &lt;code&gt;-&amp;gt;&lt;/code&gt;
for unit conversion, it covers 90% of use cases. For a related Zsh line editor
trick, see how I use &lt;a href=&quot;https://vincent.bernat.ch/en/blog/2025-zsh-autoexpand-aliases&quot; title=&quot;Auto-expanding aliases in Zsh&quot;&gt;auto-expanding aliases&lt;/a&gt; to fix common typos.&lt;/p&gt;
&lt;div class=&quot;footnote&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-marseille&quot;&gt;
&lt;p&gt;This is the fastest a packet can travel back and forth between
Paris and Marseille over optical fiber.Â &lt;a class=&quot;footnote-backref&quot; href=&quot;https://vincent.bernat.ch#fnref-marseille&quot; title=&quot;Jump back to footnote 1 in the text&quot;&gt;â†©ï¸�&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn-qalc&quot;&gt;
&lt;p&gt;Qalculate is less understanding with units. For example, it parses
â€œMbpsâ€� as megabarn per picosecond: â˜¢ï¸�&lt;/p&gt;
&lt;div class=&quot;language-bash-session codehilite&quot;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;numbat&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-e&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&#39;5 MB/s -&amp;gt; Mbps&#39;&lt;/span&gt;
&lt;span class=&quot;go&quot;&gt;40 Mbps&lt;/span&gt;
&lt;span class=&quot;gp&quot;&gt;$ &lt;/span&gt;qalc&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;MB/s&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;to&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;Mbps
&lt;span class=&quot;go&quot;&gt;5 megabytes/second = 0.000005 B/ps&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a class=&quot;footnote-backref&quot; href=&quot;https://vincent.bernat.ch#fnref-qalc&quot; title=&quot;Jump back to footnote 2 in the text&quot;&gt;â†©ï¸�&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt; </description> 
	<pubDate>Sun, 22 Mar 2026 13:37:09 +0000</pubDate>

</item> 
<item>
	<title>Jonathan Dowland: Ladytron</title>
	<guid>https://jmtd.net/log/ladytron/</guid>
	<link>https://jmtd.net/log/ladytron/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/jmtd.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;I saw Ladytron perform in Digital, Newcastle last night. The
last time I saw them was, I think, at the same venue, 18 years ago. Time flies!&lt;/p&gt;

&lt;div class=&quot;centre&quot;&gt;
&lt;div class=&quot;image+centre&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/ladytron/2026-03-20.jpg&quot;&gt;&lt;img alt=&quot;Photo of the trio performing on stage&quot; class=&quot;img&quot; height=&quot;281&quot; src=&quot;https://jmtd.net/log/ladytron/500x-2026-03-20.jpg&quot; width=&quot;499&quot; /&gt;&lt;/a&gt;

&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Back in the day (perhaps their heyday, perhaps not!) Ladytron ploughed a
particular sonic furrow and did it very well. Going into the gig I had set my
expectations that, should they play just these hits, I&#39;d have a good time.&lt;/p&gt;

&lt;p&gt;The gig exceeded my expectations. The setlist very much did &lt;em&gt;not&lt;/em&gt; lean into
their best-known period: the more recent few albums were very well represented
and to me this felt very confident. The lead singer, Helen Marnie, demonstrated
some excellent range, particularly on some of the new songs. Daniel Hunt did a
lot of backing vocals and they were really complementary to Helen&#39;s: underscoring
but not overpowering. I enjoyed nerding out watching Mira Ayoro&#39;s excellent
wrangling of her Korg MS-20. One highlight was an encore performance of
&lt;em&gt;Light &amp;amp; Magic&lt;/em&gt;, which was arguably the &quot;alternate version&quot; as available on the
expanded versions of that album or the &lt;em&gt;Remixed and Rare&lt;/em&gt; companion.&lt;/p&gt;

&lt;p&gt;I thought I&#39;d try to put together a 5-track playlist for a friend who attended
the gig but isn&#39;t super familiar with them. As usual this is hard. I&#39;m going
to avoid the obvious hits, try to represent their whole career and try to
ensure the current trio each get a vocal turn in the selection.&lt;/p&gt;

&lt;p&gt;They actually released their latest album, &lt;em&gt;Paradises&lt;/em&gt;, yesterday as well. One
track from it is in the list below.&lt;/p&gt;

&lt;a href=&quot;https://ladytron.bandcamp.com/album/velocifero&quot;&gt;I&#39;m Not Scared by Ladytron&lt;/a&gt;




&lt;a href=&quot;https://ladytron.bandcamp.com/album/paradises&quot;&gt;Kingdom Undersea by Ladytron&lt;/a&gt;




&lt;a href=&quot;https://ladytron.bandcamp.com/album/light-magic&quot;&gt;Blue Jeans by Ladytron&lt;/a&gt;




&lt;a href=&quot;https://ladytron.bandcamp.com/album/604&quot;&gt;He took her to a movie by Ladytron&lt;/a&gt;




&lt;a href=&quot;https://ladytron.bandcamp.com/album/gravity-the-seducer&quot;&gt;Transparent Days by Ladytron&lt;/a&gt;


&lt;p&gt;(If you can&#39;t see anything, the bandcamp embeds have been stripped out by
whatever you are viewing this with)&lt;/p&gt; </description> 
	<pubDate>Sat, 21 Mar 2026 22:18:11 +0000</pubDate>

</item> 
<item>
	<title>Steinar H. Gunderson: A286874(16) &gt;= 48</title>
	<guid>http://blog.sesse.net/blog/tech/2026-03-21-16-19_a286874_16_48.html</guid>
	<link>http://blog.sesse.net/blog/tech/2026-03-21-16-19_a286874_16_48.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/sesse.png&quot; width=&quot;74&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Following up on the &lt;a href=&quot;https://blog.sesse.net/blog/tech/2026-03-07-10-54_a286874_14_28&quot;&gt;previous post&lt;/a&gt;,
here are some heuristic results:&lt;/p&gt;

&lt;p&gt;First, if restricting oneself to 5-uniform values (all values have exactly
five bits set), the best 15-bit code one can make is indeed 42 elements,
and there are two distinct solutions:
{31, 227, 364, 692, 1240, 1577, 1606, 2353, 3008, 3205, 3338, 4434, 4746, 4869, 5536, 6182, 6217, 7696, 8582, 8984, 9266, 9537, 10324, 10408, 10755, 12433, 12896, 13324, 16777, 16977, 17186, 17684, 18578, 18956, 19552, 20536, 20676, 21507, 24613, 24650, 26240, 30976}
and
{31, 227, 364, 692, 849, 906, 1240, 2354, 3206, 3337, 3680, 4485, 5169, 5442, 5644, 6228, 6312, 6659, 8745, 9285, 9632, 9746, 10314, 10385, 11012, 12326, 12568, 12992, 16966, 17450, 17684, 18049, 18469, 18880, 18968, 20553, 20626, 21280, 24688, 24716, 24835, 31744}.
This supports, but does not prove, the conjecture that A286874(15) = 42.&lt;/p&gt;

&lt;p&gt;Second, A286874(16) &amp;gt;= 48 (the best previously known bound was 45), since
this is a valid 48-element solution:&lt;/p&gt;

&lt;pre&gt;0000000000011111
0000000011100011
0000000101101100
0000001010110100
0000010011011000
0000011100000011
0000100100110001
0000101000101010
0000101111000000
0001000110001001
0001010000110010
0001011000001100
0001100100000110
0001110001000001
0010000110010010
0010010010000101
0010011001100000
0010100001010100
0010110100001000
0011000001001010
0011001000010001
0011100010100000
0100001001001001
0100010001000110
0100010110100000
0100100010001100
0100111000010000
0101000000100101
0101000101010000
0101001010000010
0110000000111000
0110001100000100
0110100000000011
1000001001010010
1000010000101001
1000010100010100
1000101000000101
1000110010000010
1001000011000100
1001001100100000
1001100000011000
1010000000100110
1010000101000001
1010001010001000
1100000010010001
1100000100001010
1100100001100000
1111010000000000
&lt;/pre&gt;

&lt;p&gt;I won&#39;t be sweeping all of the 15- or 16-bit spaces.&lt;/p&gt; </description> 
	<pubDate>Sat, 21 Mar 2026 15:19:00 +0000</pubDate>

</item> 
<item>
	<title>C.J. Adams-Collier: The WWW::Mechanize::Chrome Saga: A Comprehensive Narrative of PR #104</title>
	<guid>https://wp.c9h.org/cj/?p=2129</guid>
	<link>https://wp.c9h.org/cj/?p=2129</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/cj.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;h1 id=&quot;the-wwwmechanizechrome-saga-a-comprehensive-narrative-of-pr-104&quot;&gt;The&lt;br /&gt;
WWW::Mechanize::Chrome Saga: A Comprehensive Narrative of PR #104&lt;/h1&gt;
&lt;p&gt;This document synthesizes the extensive work performed from March&lt;br /&gt;
13th to March 20th, 2026, to harden, stabilize, and refactor the&lt;br /&gt;
&lt;code&gt;WWW::Mechanize::Chrome&lt;/code&gt; library and its test suite. This&lt;br /&gt;
effort involved deep dives into asynchronous programming,&lt;br /&gt;
platform-specific bug hunting, and strategic architectural&lt;br /&gt;
decisions.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-i-the-quest-for-cross-platform-stability-march-13---16&quot;&gt;Part I:&lt;br /&gt;
The Quest for Cross-Platform Stability (March 13 – 16)&lt;/h2&gt;
&lt;p&gt;The initial phase of work focused on achieving a “green” test suite&lt;br /&gt;
across a variety of Linux distributions and preparing for a new release.&lt;br /&gt;
This involved significant hardening of the library to account for&lt;br /&gt;
different browser versions, OS-level security restrictions, and&lt;br /&gt;
filesystem differences.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones-engineering-decisions&quot;&gt;Key Milestones &amp;amp;&lt;br /&gt;
Engineering Decisions:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fedora &amp;amp; RHEL-family Success:&lt;/strong&gt; A major effort&lt;br /&gt;
was undertaken to achieve a 100% pass rate on modern Fedora 43 and&lt;br /&gt;
CentOS Stream 10. This required several key engineering decisions to&lt;br /&gt;
handle modern browser behavior:&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decision: Implement Asynchronous DOM Serialization&lt;br /&gt;
Fallback.&lt;/strong&gt; Synchronous fallbacks in an async context are&lt;br /&gt;
dangerous. To prevent &lt;code&gt;Resource was not cached&lt;/code&gt; errors during&lt;br /&gt;
&lt;code&gt;saveResources&lt;/code&gt;, we implemented a fully asynchronous fallback&lt;br /&gt;
in &lt;code&gt;_saveResourceTree&lt;/code&gt;. By chaining&lt;br /&gt;
&lt;code&gt;_cached_document&lt;/code&gt; with &lt;code&gt;DOM.getOuterHTML&lt;/code&gt;&lt;br /&gt;
messages, we can reconstruct document content without blocking the event&lt;br /&gt;
loop, even if Chromium has evicted the resource from its cache. This&lt;br /&gt;
also proved resilient against Fedora’s security policies, which often&lt;br /&gt;
block &lt;code&gt;file://&lt;/code&gt; access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Truncate Filenames for Cross-Platform&lt;br /&gt;
Safety.&lt;/strong&gt; To avoid &lt;code&gt;File name too long&lt;/code&gt; errors,&lt;br /&gt;
especially on Windows where the &lt;code&gt;MAX_PATH&lt;/code&gt; limit is 260&lt;br /&gt;
characters, &lt;code&gt;filenameFromUrl&lt;/code&gt; was hardened. The filename&lt;br /&gt;
truncation was reduced to a more conservative &lt;strong&gt;150&lt;br /&gt;
characters&lt;/strong&gt;, leaving ample headroom for deeply nested CI&lt;br /&gt;
temporary directories. Logic was also added to preserve file extensions&lt;br /&gt;
during truncation and to sanitize backslashes from URI paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Expand Browser Discovery Paths.&lt;/strong&gt; To&lt;br /&gt;
support RHEL-based systems out-of-the-box, the&lt;br /&gt;
&lt;code&gt;default_executable_names&lt;/code&gt; was expanded to include&lt;br /&gt;
&lt;code&gt;headless_shell&lt;/code&gt; and search paths were updated to include&lt;br /&gt;
&lt;code&gt;/usr/lib64/chromium-browser/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Mitigate Race Conditions with Stabilization Waits&lt;br /&gt;
and Resilient Fetching.&lt;/strong&gt; On fast systems,&lt;br /&gt;
&lt;code&gt;DOM.documentUpdated&lt;/code&gt; events could invalidate&lt;br /&gt;
&lt;code&gt;nodeId&lt;/code&gt;s immediately after navigation, causing XPath queries&lt;br /&gt;
to fail with “Could not find node with given id”. A small stabilization&lt;br /&gt;
&lt;code&gt;sleep(0.25s)&lt;/code&gt; was added after page loads to ensure the DOM&lt;br /&gt;
is settled. Furthermore, the asynchronous DOM fetching loop was hardened&lt;br /&gt;
to gracefully handle these errors by catching protocol errors and&lt;br /&gt;
returning an empty string for any node that was invalidated during&lt;br /&gt;
serialization, ensuring the overall process could complete.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Hardening:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decision: Adopt Platform-Aware Watchdogs.&lt;/strong&gt; The test&lt;br /&gt;
suite’s reliance on &lt;code&gt;ualarm&lt;/code&gt; was a blocker for Windows, where&lt;br /&gt;
it is not implemented. The &lt;code&gt;t::helper::set_watchdog&lt;/code&gt; function&lt;br /&gt;
was refactored to use standard &lt;code&gt;alarm()&lt;/code&gt; (seconds) on Windows&lt;br /&gt;
and &lt;code&gt;ualarm&lt;/code&gt; (microseconds) on Unix-like systems, enabling&lt;br /&gt;
consistent test-level timeout enforcement.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version 0.77 Release:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decision: Adopt SOP for Version Synchronization.&lt;/strong&gt;&lt;br /&gt;
The project maintains duplicate version strings across 24+ files. A&lt;br /&gt;
Standard Operating Procedure was adopted to use a batch-replacement tool&lt;br /&gt;
to update all sub-modules in &lt;code&gt;lib/&lt;/code&gt; and to always run&lt;br /&gt;
&lt;code&gt;make clean&lt;/code&gt; and &lt;code&gt;perl Makefile.PL&lt;/code&gt; to ensure&lt;br /&gt;
&lt;code&gt;META.json&lt;/code&gt; and &lt;code&gt;META.yml&lt;/code&gt; reflect the new&lt;br /&gt;
version. After achieving stability on Linux, the project version was&lt;br /&gt;
bumped to 0.77.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure &amp;amp; Strategic Work:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;ad2&lt;/code&gt; Windows Server 2025 instance was restored and&lt;br /&gt;
optimized, with Active Directory demoted and disk I/O performance&lt;br /&gt;
improved.&lt;/li&gt;
&lt;li&gt;A strategic proposal for the &lt;strong&gt;Heterogeneous Directory&lt;br /&gt;
Replication Protocol (HDRP)&lt;/strong&gt; was drafted and published.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-ii-the-great-async-refactor-march-17---18&quot;&gt;Part II: The&lt;br /&gt;
Great Async Refactor (March 17 – 18)&lt;/h2&gt;
&lt;p&gt;Despite success on Linux, tests on the slow &lt;code&gt;ad2&lt;/code&gt; Windows&lt;br /&gt;
host were still plagued by intermittent, indefinite hangs. This&lt;br /&gt;
triggered a fundamental architectural shift to move the library’s core&lt;br /&gt;
from a mix of synchronous and asynchronous code to a fully non-blocking&lt;br /&gt;
internal API.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones-engineering-decisions-1&quot;&gt;Key Milestones &amp;amp;&lt;br /&gt;
Engineering Decisions:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Expose a &lt;code&gt;_future&lt;/code&gt; API.&lt;/strong&gt;&lt;br /&gt;
Instead of hardcoding timeouts in the library, the core strategy was to&lt;br /&gt;
refactor all blocking methods (&lt;code&gt;xpath&lt;/code&gt;, &lt;code&gt;field&lt;/code&gt;,&lt;br /&gt;
&lt;code&gt;get&lt;/code&gt;, etc.) into thin wrappers around new non-blocking&lt;br /&gt;
&lt;code&gt;..._future&lt;/code&gt; counterparts. This moved timeout management to&lt;br /&gt;
the test harness, allowing for flexible and explicit handling of&lt;br /&gt;
stalls.&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb1&quot;&gt;
&lt;pre class=&quot;sourceCode perl&quot;&gt;&lt;code class=&quot;sourceCode perl&quot;&gt;&lt;span id=&quot;cb1-1&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Example library implementation&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-2&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;xpath&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$&lt;/span&gt;self, &lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;) {&lt;/span&gt;
&lt;span id=&quot;cb1-3&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$self&lt;/span&gt;-&amp;gt;&lt;span class=&quot;dt&quot;&gt;xpath_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;)-&amp;gt;get;&lt;/span&gt;
&lt;span id=&quot;cb1-4&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;
&lt;span id=&quot;cb1-5&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-6&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;xpath_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$&lt;/span&gt;self, &lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;) {&lt;/span&gt;
&lt;span id=&quot;cb1-7&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;co&quot;&gt;# Async implementation using $self-&amp;gt;target-&amp;gt;send_message(...)&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb1-8&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb1-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Centralize Test Hardening in a Helper.&lt;/strong&gt;&lt;br /&gt;
A dedicated test library, &lt;code&gt;t/lib/t/helper.pm&lt;/code&gt;, was created to&lt;br /&gt;
contain all stabilization logic. “Safe” wrappers (&lt;code&gt;safe_get&lt;/code&gt;,&lt;br /&gt;
&lt;code&gt;safe_xpath&lt;/code&gt;) were implemented there, using&lt;br /&gt;
&lt;code&gt;Future-&amp;gt;wait_any&lt;/code&gt; to race asynchronous operations against&lt;br /&gt;
a timeout, preventing tests from hanging.&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb2&quot;&gt;
&lt;pre class=&quot;sourceCode perl&quot;&gt;&lt;code class=&quot;sourceCode perl&quot;&gt;&lt;span id=&quot;cb2-1&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Example test helper implementation&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb2-2&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;safe_xpath&lt;/span&gt; {&lt;/span&gt;
&lt;span id=&quot;cb2-3&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;my&lt;/span&gt; (&lt;span class=&quot;dt&quot;&gt;$mech&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;) = &lt;span class=&quot;dt&quot;&gt;@_&lt;/span&gt;;&lt;/span&gt;
&lt;span id=&quot;cb2-4&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$timeout&lt;/span&gt; = &lt;span class=&quot;fu&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$options&lt;/span&gt;{timeout} || &lt;span class=&quot;dv&quot;&gt;5&lt;/span&gt;;&lt;/span&gt;
&lt;span id=&quot;cb2-5&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$call_f&lt;/span&gt; = &lt;span class=&quot;dt&quot;&gt;$mech&lt;/span&gt;-&amp;gt;&lt;span class=&quot;dt&quot;&gt;xpath_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;);&lt;/span&gt;
&lt;span id=&quot;cb2-6&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$timeout_f&lt;/span&gt; = &lt;span class=&quot;dt&quot;&gt;$mech&lt;/span&gt;-&amp;gt;&lt;span class=&quot;dt&quot;&gt;sleep_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$timeout&lt;/span&gt;)-&amp;gt;then(&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;{ Future-&amp;gt;fail(&lt;span class=&quot;ot&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;st&quot;&gt;Timeout&lt;/span&gt;&lt;span class=&quot;ot&quot;&gt;&quot;&lt;/span&gt;) });&lt;/span&gt;
&lt;span id=&quot;cb2-7&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; Future-&amp;gt;wait_any(&lt;span class=&quot;dt&quot;&gt;$call_f&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;$timeout_f&lt;/span&gt;)-&amp;gt;get;&lt;/span&gt;
&lt;span id=&quot;cb2-8&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb2-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Refactor Node Attribute Cache.&lt;/strong&gt;&lt;br /&gt;
Investigations into flaky checkbox tests (&lt;code&gt;t/50-tick.t&lt;/code&gt;)&lt;br /&gt;
revealed that &lt;code&gt;WWW::Mechanize::Chrome::Node&lt;/code&gt; was storing&lt;br /&gt;
attributes as a flat list (&lt;code&gt;[key, val, key, val]&lt;/code&gt;), which was&lt;br /&gt;
inefficient for lookups and individual updates. The cache was refactored&lt;br /&gt;
to definitively use a &lt;strong&gt;HashRef&lt;/strong&gt;, providing O(1) lookups&lt;br /&gt;
and enabling atomic dual-updates where both the browser property (via&lt;br /&gt;
JS) and the internal library attribute are synchronized&lt;br /&gt;
simultaneously.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Implement Self-Cancelling Socket&lt;br /&gt;
Watchdog.&lt;/strong&gt; On Windows, traditional watchdog processes often&lt;br /&gt;
failed to detect parent termination, leading to 60-second hangs after&lt;br /&gt;
successful tests. We implemented a new socket-based watchdog in&lt;br /&gt;
&lt;code&gt;t::helper&lt;/code&gt; that listens on an ephemeral port; the background&lt;br /&gt;
process terminates immediately when the parent socket closes,&lt;br /&gt;
eliminating these cumulative delays.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Deep Recursive Refactoring &amp;amp; Form&lt;br /&gt;
Selection.&lt;/strong&gt; To make the API truly non-blocking, the entire&lt;br /&gt;
internal call stack had to be refactored. For example, making&lt;br /&gt;
&lt;code&gt;get_set_value_future&lt;/code&gt; non-blocking required first making its&lt;br /&gt;
dependency, &lt;code&gt;_field_by_name&lt;/code&gt;, asynchronous. This culminated&lt;br /&gt;
in refactoring the entire form selection API (&lt;code&gt;form_name&lt;/code&gt;,&lt;br /&gt;
&lt;code&gt;form_id&lt;/code&gt;, etc.) to use the new asynchronous&lt;br /&gt;
&lt;code&gt;_future&lt;/code&gt; lookups, which was a key step in mitigating the&lt;br /&gt;
Windows deadlocks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Decision: Fix Critical Regressions &amp;amp; Memory&lt;br /&gt;
Cycles.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Evaluation Normalization:&lt;/strong&gt; Implemented a&lt;br /&gt;
&lt;code&gt;_process_eval_result&lt;/code&gt; helper to centralize the parsing of&lt;br /&gt;
results from &lt;code&gt;Runtime.evaluate&lt;/code&gt;. This ensures consistent&lt;br /&gt;
handling of return values and exceptions between synchronous&lt;br /&gt;
(&lt;code&gt;eval_in_page&lt;/code&gt;) and asynchronous (&lt;code&gt;eval_future&lt;/code&gt;)&lt;br /&gt;
calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Memory Cycle Mitigation:&lt;/strong&gt; A significant memory&lt;br /&gt;
leak was discovered where closures attached to CDP event futures (like&lt;br /&gt;
for asynchronous body retrieval) would capture strong references to&lt;br /&gt;
&lt;code&gt;$self&lt;/code&gt; and the &lt;code&gt;$response&lt;/code&gt; object, creating a&lt;br /&gt;
circular reference. The established rule is to now always use&lt;br /&gt;
&lt;code&gt;Scalar::Util::weaken&lt;/code&gt; on both &lt;code&gt;$self&lt;/code&gt; and any&lt;br /&gt;
other relevant objects before they are used inside a&lt;br /&gt;
&lt;code&gt;-&amp;gt;then&lt;/code&gt; block that is stored on an object.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Context Propagation (&lt;code&gt;wantarray&lt;/code&gt;):&lt;/strong&gt; A&lt;br /&gt;
major regression was discovered where Perl’s &lt;code&gt;wantarray&lt;/code&gt;&lt;br /&gt;
context, which distinguishes between scalar and list context, was lost&lt;br /&gt;
inside asynchronous &lt;code&gt;Future-&amp;gt;then&lt;/code&gt; blocks. This caused&lt;br /&gt;
methods like &lt;code&gt;xpath&lt;/code&gt; to return incorrect results (e.g., a&lt;br /&gt;
count instead of a list of nodes). The solution was to adopt the “Async&lt;br /&gt;
Context Pattern”: capture &lt;code&gt;wantarray&lt;/code&gt; in the synchronous&lt;br /&gt;
wrapper, pass it as an option to the &lt;code&gt;_future&lt;/code&gt; method, and&lt;br /&gt;
then use that captured value inside the future’s final resolution&lt;br /&gt;
block.&lt;/p&gt;
&lt;div class=&quot;sourceCode&quot; id=&quot;cb3&quot;&gt;
&lt;pre class=&quot;sourceCode perl&quot;&gt;&lt;code class=&quot;sourceCode perl&quot;&gt;&lt;span id=&quot;cb3-1&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-1&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Synchronous Wrapper&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-2&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-2&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;xpath&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$&lt;/span&gt;self, &lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;) {&lt;/span&gt;
&lt;span id=&quot;cb3-3&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-3&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;dt&quot;&gt;$options&lt;/span&gt;{ &lt;span class=&quot;fu&quot;&gt;wantarray&lt;/span&gt; } = &lt;span class=&quot;fu&quot;&gt;wantarray&lt;/span&gt;; &lt;span class=&quot;co&quot;&gt;# 1. Capture&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-4&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-4&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$self&lt;/span&gt;-&amp;gt;&lt;span class=&quot;dt&quot;&gt;xpath_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;)-&amp;gt;get; &lt;span class=&quot;co&quot;&gt;# 2. Pass&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-5&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-5&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;
&lt;span id=&quot;cb3-6&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-6&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-7&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-7&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;co&quot;&gt;# Asynchronous Implementation&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-8&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-8&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;&lt;span class=&quot;fu&quot;&gt;xpath_future&lt;/span&gt;(&lt;span class=&quot;dt&quot;&gt;$&lt;/span&gt;self, &lt;span class=&quot;dt&quot;&gt;$query&lt;/span&gt;, &lt;span class=&quot;dt&quot;&gt;%options&lt;/span&gt;) {&lt;/span&gt;
&lt;span id=&quot;cb3-9&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-9&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;my&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$wantarray&lt;/span&gt; = &lt;span class=&quot;fu&quot;&gt;delete&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$options&lt;/span&gt;{ &lt;span class=&quot;fu&quot;&gt;wantarray&lt;/span&gt; }; &lt;span class=&quot;co&quot;&gt;# 3. Retrieve&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-10&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-10&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;co&quot;&gt;# ... async logic ...&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-11&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-11&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;dt&quot;&gt;$doc&lt;/span&gt;-&amp;gt;&lt;span class=&quot;dt&quot;&gt;then&lt;/span&gt;(&lt;span class=&quot;kw&quot;&gt;sub &lt;/span&gt;{&lt;/span&gt;
&lt;span id=&quot;cb3-12&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-12&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;        &lt;span class=&quot;kw&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;dt&quot;&gt;$wantarray&lt;/span&gt;) { &lt;span class=&quot;co&quot;&gt;# 4. Respect&lt;/span&gt;&lt;/span&gt;
&lt;span id=&quot;cb3-13&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-13&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;            &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; Future-&amp;gt;done(&lt;span class=&quot;dt&quot;&gt;@results&lt;/span&gt;);&lt;/span&gt;
&lt;span id=&quot;cb3-14&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-14&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;        } &lt;span class=&quot;kw&quot;&gt;else&lt;/span&gt; {&lt;/span&gt;
&lt;span id=&quot;cb3-15&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-15&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;            &lt;span class=&quot;kw&quot;&gt;return&lt;/span&gt; Future-&amp;gt;done(&lt;span class=&quot;dt&quot;&gt;$results&lt;/span&gt;[&lt;span class=&quot;dv&quot;&gt;0&lt;/span&gt;]);&lt;/span&gt;
&lt;span id=&quot;cb3-16&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-16&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;        }&lt;/span&gt;
&lt;span id=&quot;cb3-17&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-17&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;    });&lt;/span&gt;
&lt;span id=&quot;cb3-18&quot;&gt;&lt;a href=&quot;http://wp.colliertech.org/cj/?cat=17&amp;amp;feed=rss2#cb3-18&quot; tabindex=&quot;-1&quot;&gt;&lt;/a&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Asynchronous Body Retrieval &amp;amp; Robust Content&lt;br /&gt;
Fallbacks:&lt;/strong&gt; Fixed a bug where &lt;code&gt;decoded_content()&lt;/code&gt;&lt;br /&gt;
would return empty strings by ensuring it awaited a&lt;br /&gt;
&lt;code&gt;__body_future&lt;/code&gt;. This was implemented by storing the&lt;br /&gt;
retrieval future directly on the response object&lt;br /&gt;
(&lt;code&gt;$response-&amp;gt;{__body_future}&lt;/code&gt;). To make this more robust,&lt;br /&gt;
a tiered strategy was implemented: first try to get the content from the&lt;br /&gt;
network response, but if that fails (e.g., for &lt;code&gt;about:blank&lt;/code&gt;&lt;br /&gt;
or due to cache eviction), fall back to a JavaScript&lt;br /&gt;
&lt;code&gt;XMLSerializer&lt;/code&gt; to get the live DOM content.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Signature Hardening:&lt;/strong&gt; Fixed “Too few arguments”&lt;br /&gt;
errors when using modern Perl signatures with&lt;br /&gt;
&lt;code&gt;Future-&amp;gt;then&lt;/code&gt;. Callbacks were updated to use optional&lt;br /&gt;
parameters (&lt;code&gt;sub($result = undef) { ... }&lt;/code&gt;) to gracefully&lt;br /&gt;
handle futures that resolve with no value.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;XHTML “Split-Brain” Bug:&lt;/strong&gt; Resolved a&lt;br /&gt;
long-standing Chromium bug (40130141) where content provided via&lt;br /&gt;
&lt;code&gt;setDocumentContent&lt;/code&gt; is parsed differently than content&lt;br /&gt;
loaded from a URL. A workaround was implemented: for XHTML documents,&lt;br /&gt;
WMC now uses a JavaScript-based XPath evaluation&lt;br /&gt;
(&lt;code&gt;document.evaluate&lt;/code&gt;) against the live DOM, bypassing the&lt;br /&gt;
broken CDP search mechanism.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;derived-architectural-rules-sops&quot;&gt;Derived Architectural Rules&lt;br /&gt;
&amp;amp; SOPs:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rule: Always provide &lt;code&gt;_future&lt;/code&gt; variants.&lt;/strong&gt;&lt;br /&gt;
Every library method that interacts with the browser via CDP must have a&lt;br /&gt;
non-blocking asynchronous counterpart.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule: Centralize stabilization in the test layer.&lt;/strong&gt;&lt;br /&gt;
All timeout and retry logic should reside in the test harness&lt;br /&gt;
(&lt;code&gt;t/lib/t/helper.pm&lt;/code&gt;), not in the core library.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule: Explicitly propagate &lt;code&gt;wantarray&lt;/code&gt;&lt;br /&gt;
context.&lt;/strong&gt; Synchronous wrappers must capture the caller’s context&lt;br /&gt;
and pass it down the &lt;code&gt;Future&lt;/code&gt; chain to ensure correct&lt;br /&gt;
scalar/list behavior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rule: The entire call chain must be asynchronous.&lt;/strong&gt;&lt;br /&gt;
To enable non-blocking timeouts, even a single “hidden” blocking call in&lt;br /&gt;
an otherwise asynchronous method will cause a stall.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SOP: Reduce Library Noise.&lt;/strong&gt; Diagnostic messages&lt;br /&gt;
(&lt;code&gt;warn&lt;/code&gt;, &lt;code&gt;note&lt;/code&gt;, &lt;code&gt;diag&lt;/code&gt;) should be&lt;br /&gt;
removed from library code before commits. All such messages should be&lt;br /&gt;
converted to use the internal &lt;code&gt;$self-&amp;gt;log(&#39;debug&#39;, ...)&lt;/code&gt;&lt;br /&gt;
mechanism, ensuring a clean TAP output for CI systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-iii-the-mutationobserver-saga-march-19&quot;&gt;Part III: The&lt;br /&gt;
&lt;code&gt;MutationObserver&lt;/code&gt; Saga (March 19)&lt;/h2&gt;
&lt;p&gt;With most of the library refactored to be asynchronous, one stubborn&lt;br /&gt;
test, &lt;code&gt;t/65-is_visible.t&lt;/code&gt;, continued to fail with timeouts.&lt;br /&gt;
This led to an ambitious, but ultimately unsuccessful, attempt to&lt;br /&gt;
replace the &lt;code&gt;wait_until_visible&lt;/code&gt; polling logic with a more&lt;br /&gt;
“modern” &lt;code&gt;MutationObserver&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones-challenges&quot;&gt;Key Milestones &amp;amp; Challenges:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Theory:&lt;/strong&gt; The goal was to replace an inefficient&lt;br /&gt;
&lt;code&gt;repeat { sleep }&lt;/code&gt; loop with an event-driven&lt;br /&gt;
&lt;code&gt;MutationObserver&lt;/code&gt; in JavaScript that would notify Perl&lt;br /&gt;
immediately when an element’s visibility changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementation &amp;amp; Cascade Failure:&lt;/strong&gt; The&lt;br /&gt;
implementation proved incredibly difficult and introduced a series of&lt;br /&gt;
new, hard-to-diagnose bugs:&lt;p&gt;&lt;/p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;An incorrect function signature for&lt;br /&gt;
&lt;code&gt;callFunctionOn_future&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A critical unit mismatch, passing seconds from Perl to JavaScript’s&lt;br /&gt;
&lt;code&gt;setTimeout&lt;/code&gt;, which expected milliseconds.&lt;/li&gt;
&lt;li&gt;A fundamental hang where the &lt;code&gt;MutationObserver&lt;/code&gt;’s&lt;br /&gt;
JavaScript &lt;code&gt;Promise&lt;/code&gt; would never resolve, even after the&lt;br /&gt;
underlying DOM element changed.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debugging Maze:&lt;/strong&gt; Multiple attempts to fix the&lt;br /&gt;
&lt;code&gt;checkVisibility&lt;/code&gt; JavaScript logic inside the observer&lt;br /&gt;
callback, including making it more robust by adding DOM tree traversal&lt;br /&gt;
and extensive &lt;code&gt;console.log&lt;/code&gt; tracing, failed to resolve the&lt;br /&gt;
hang. This highlighted the opacity and difficulty of debugging complex,&lt;br /&gt;
cross-language asynchronous interactions, especially when dealing with&lt;br /&gt;
low-level browser APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;procedural-learning-granular-edits&quot;&gt;Procedural Learning:&lt;br /&gt;
Granular Edits&lt;/h3&gt;
&lt;p&gt;The effort was plagued by procedural missteps in using automated&lt;br /&gt;
file-editing tools. Initial attempts to replace large code blocks in a&lt;br /&gt;
single operation led to accidental code loss and match failures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decision: Adopt “Delete, then Add” Workflow.&lt;/strong&gt;&lt;br /&gt;
Following forceful user correction, a new SOP was established for all&lt;br /&gt;
future modifications:&lt;p&gt;&lt;/p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;&lt;strong&gt;Isolate:&lt;/strong&gt; Break the file into small, manageable&lt;br /&gt;
chunks (e.g., 250 lines).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delete:&lt;/strong&gt; Perform a “delete” operation by replacing&lt;br /&gt;
the old code block with an empty string.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add:&lt;/strong&gt; Perform an “add” operation by inserting the&lt;br /&gt;
new code into the empty space.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify:&lt;/strong&gt; Verifying each atomic step before&lt;br /&gt;
proceeding. This granular process, while slower, ensured surgical&lt;br /&gt;
precision and regained technical control over the large&lt;br /&gt;
&lt;code&gt;Chrome.pm&lt;/code&gt; module.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The consistent failure of the &lt;code&gt;MutationObserver&lt;/code&gt; approach&lt;br /&gt;
eventually led to the decision to abandon it in favor of stabilizing the&lt;br /&gt;
original, more transparent implementation.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-iv-reversion-and-final-stabilization-march-20&quot;&gt;Part IV:&lt;br /&gt;
Reversion and Final Stabilization (March 20)&lt;/h2&gt;
&lt;p&gt;After exhausting all reasonable attempts to fix the&lt;br /&gt;
&lt;code&gt;MutationObserver&lt;/code&gt;, a strategic decision was made to revert&lt;br /&gt;
to the simpler, more transparent polling implementation and fix it&lt;br /&gt;
correctly. This proved to be the correct path to a stable solution.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones-engineering-decisions-2&quot;&gt;Key Milestones &amp;amp;&lt;br /&gt;
Engineering Decisions:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decision: Perform Strategic Reversion.&lt;/strong&gt; The&lt;br /&gt;
&lt;code&gt;MutationObserver&lt;/code&gt; implementation, when integrated via&lt;br /&gt;
&lt;code&gt;callFunctionOn_future&lt;/code&gt; with &lt;code&gt;awaitPromise&lt;/code&gt;,&lt;br /&gt;
proved fundamentally unstable. Its JavaScript promise would consistently&lt;br /&gt;
fail to resolve, causing indefinite hangs. A decision was made to&lt;br /&gt;
&lt;strong&gt;revert all &lt;code&gt;MutationObserver&lt;/code&gt; code&lt;/strong&gt; from&lt;br /&gt;
&lt;code&gt;WWW::Mechanize::Chrome.pm&lt;/code&gt; and restore the original&lt;br /&gt;
&lt;code&gt;repeat { sleep }&lt;/code&gt; polling mechanism. A stable,&lt;br /&gt;
understandable solution was prioritized over an elegant but broken&lt;br /&gt;
one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Correct Timeout Delegation in the&lt;br /&gt;
Harness.&lt;/strong&gt; The root cause of the original timeout failure was&lt;br /&gt;
identified as a race condition in the &lt;code&gt;t/lib/t/helper.pm&lt;/code&gt;&lt;br /&gt;
test harness. The &lt;code&gt;safe_wait_until_*&lt;/code&gt; wrappers were&lt;br /&gt;
implementing their own timeout (via &lt;code&gt;wait_any&lt;/code&gt; and&lt;br /&gt;
&lt;code&gt;sleep_future&lt;/code&gt;) that raced against the underlying polling&lt;br /&gt;
function’s internal timeout. This led to intermittent failures on slow&lt;br /&gt;
machines. The helpers were refactored to &lt;strong&gt;delegate all timeout&lt;br /&gt;
management to the library’s polling functions&lt;/strong&gt;, ensuring a&lt;br /&gt;
single, authoritative timer controlled the operation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Optimize Polling Performance.&lt;/strong&gt; At the&lt;br /&gt;
user’s request, the polling interval was reduced from 300ms to&lt;br /&gt;
&lt;strong&gt;150ms&lt;/strong&gt;. This modest performance improvement reduced the&lt;br /&gt;
test suite’s wallclock execution time by over a second while maintaining&lt;br /&gt;
stability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision: Tune Test Watchdogs.&lt;/strong&gt; The global watchdog&lt;br /&gt;
timeout was adjusted to 12 seconds, specifically calculated as 1.5x the&lt;br /&gt;
observed real execution time of the optimized test. This provides a&lt;br /&gt;
data-driven safety margin for CI.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-v-the-last-bug---a-platform-specific-memory-leak-march-20&quot;&gt;Part&lt;br /&gt;
V: The Last Bug – A Platform-Specific Memory Leak (March 20)&lt;/h2&gt;
&lt;p&gt;With all other tests passing, a single memory leak failure in&lt;br /&gt;
&lt;code&gt;t/78-memleak.t&lt;/code&gt; persisted, but only on the Windows&lt;br /&gt;
&lt;code&gt;ad2&lt;/code&gt; environment. This required a different approach than&lt;br /&gt;
the timeout fixes.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones&quot;&gt;Key Milestones:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Bug:&lt;/strong&gt; A strong reference cycle involving the&lt;br /&gt;
&lt;code&gt;on_dialog&lt;/code&gt; event listener was not being broken on Windows,&lt;br /&gt;
despite multiple attempts to fix it. Fixes that worked on Linux (such as&lt;br /&gt;
calling &lt;code&gt;on_dialog(undef)&lt;/code&gt; in &lt;code&gt;DESTROY&lt;/code&gt;) were not&lt;br /&gt;
sufficient on the Windows host.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Diagnosis:&lt;/strong&gt; The issue was determined to be a&lt;br /&gt;
deep, platform-specific interaction between Perl’s garbage collector,&lt;br /&gt;
the &lt;code&gt;IO::Async&lt;/code&gt; event loop implementation on Windows, and the&lt;br /&gt;
&lt;code&gt;Test::Memory::Cycle&lt;/code&gt; module. The cycle report was identical&lt;br /&gt;
on both platforms, but the cleanup behavior was different.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failed Attempts:&lt;/strong&gt; A series of increasingly&lt;br /&gt;
aggressive fixes were attempted to break the cycle, including:&lt;p&gt;&lt;/p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Moving the &lt;code&gt;on_dialog(undef)&lt;/code&gt; call from&lt;br /&gt;
&lt;code&gt;close()&lt;/code&gt; to &lt;code&gt;DESTROY()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Explicitly &lt;code&gt;delete&lt;/code&gt;ing the listener and callback&lt;br /&gt;
properties from the object hash in &lt;code&gt;DESTROY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Swapping between &lt;code&gt;$self-&amp;gt;remove_listener&lt;/code&gt; and&lt;br /&gt;
&lt;code&gt;$self-&amp;gt;target-&amp;gt;unlisten&lt;/code&gt; in a mistaken attempt to find&lt;br /&gt;
the correct un-registration method.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pragmatic Solution:&lt;/strong&gt; After exhausting all reasonable&lt;br /&gt;
code-level fixes without a resolution on Windows, the user opted to mark&lt;br /&gt;
the failing test as a known issue for that specific platform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final Fix:&lt;/strong&gt; The single failing test in&lt;br /&gt;
&lt;code&gt;t/78-memleak.t&lt;/code&gt; was wrapped in a conditional&lt;br /&gt;
&lt;code&gt;TODO&lt;/code&gt; block that only executes on Windows&lt;br /&gt;
(&lt;code&gt;if ($^O =~ /MSWin32/i)&lt;/code&gt;), formally acknowledging the bug&lt;br /&gt;
without blocking the build. This allows the test suite to pass in CI&lt;br /&gt;
environments while flagging the issue for future, deeper&lt;br /&gt;
investigation.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;part-vi-ci-hardening-march-20&quot;&gt;Part VI: CI Hardening (March&lt;br /&gt;
20)&lt;/h2&gt;
&lt;p&gt;A final failure in the GitHub Actions CI environment revealed one&lt;br /&gt;
last configuration flaw.&lt;/p&gt;
&lt;h3 id=&quot;key-milestones-1&quot;&gt;Key Milestones:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Bug:&lt;/strong&gt; The CI was running&lt;br /&gt;
&lt;code&gt;prove --nocount --jobs 3 -I local/ -bl xt t&lt;/code&gt; directly. This&lt;br /&gt;
command was missing the crucial &lt;code&gt;-It/lib&lt;/code&gt; include path, which&lt;br /&gt;
is necessary for test files to locate the &lt;code&gt;t::helper&lt;/code&gt; module.&lt;br /&gt;
This resulted in nearly all tests failing with&lt;br /&gt;
&lt;code&gt;Can&#39;t locate t/helper.pm in @INC&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Investigation:&lt;/strong&gt; An analysis of&lt;br /&gt;
&lt;code&gt;Makefile.PL&lt;/code&gt; revealed a custom &lt;code&gt;MY::test&lt;/code&gt; block&lt;br /&gt;
specifically designed to inject the &lt;code&gt;-It/lib&lt;/code&gt; flag into the&lt;br /&gt;
&lt;code&gt;make test&lt;/code&gt; command. This confirmed that&lt;br /&gt;
&lt;code&gt;make test&lt;/code&gt; is the correct, canonical way to run the test&lt;br /&gt;
suite for this project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Fix:&lt;/strong&gt; The&lt;br /&gt;
&lt;code&gt;.github/workflows/linux.yml&lt;/code&gt; file was modified to replace&lt;br /&gt;
the direct &lt;code&gt;prove&lt;/code&gt; call with &lt;code&gt;make test&lt;/code&gt; in the&lt;br /&gt;
&lt;code&gt;Run Tests&lt;/code&gt; step. This ensures the CI environment runs the&lt;br /&gt;
tests in the exact same way as a local developer, with all necessary&lt;br /&gt;
include paths correctly configured by the project’s build system.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;final-outcome&quot;&gt;Final Outcome&lt;/h2&gt;
&lt;p&gt;After this long and arduous journey, the&lt;br /&gt;
&lt;code&gt;WWW::Mechanize::Chrome&lt;/code&gt; test suite is now stable and&lt;br /&gt;
&lt;strong&gt;passing on all targeted platforms&lt;/strong&gt;, with known&lt;br /&gt;
platform-specific issues clearly documented in the code. The project is&lt;br /&gt;
in a vastly more robust and reliable state.&lt;/p&gt;

&lt;div class=&quot;twitter-share&quot;&gt;&lt;a class=&quot;twitter-share-button&quot; href=&quot;https://twitter.com/intent/tweet?url=https%3A%2F%2Fwp.c9h.org%2Fcj%2F%3Fp%3D2129&amp;amp;via=cjamescollier&quot;&gt;Tweet&lt;/a&gt;&lt;/div&gt; </description> 
	<pubDate>Sat, 21 Mar 2026 01:52:46 +0000</pubDate>

</item> 
<item>
	<title>Dirk Eddelbuettel: RcppSpdlog 0.0.28 on CRAN: Micro-Maintenance</title>
	<guid>http://dirk.eddelbuettel.com/blog/2026/03/20#rcppspdlog_0.0.28</guid>
	<link>http://dirk.eddelbuettel.com/blog/2026/03/20#rcppspdlog_0.0.28</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dirk.png&quot; width=&quot;65&quot; height=&quot;90&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Version 0.0.28 of &lt;a href=&quot;https://github.com/eddelbuettel/rcppspdlog&quot;&gt;RcppSpdlog&lt;/a&gt; arrived
on &lt;a href=&quot;https://cran.r-project.org&quot;&gt;CRAN&lt;/a&gt; today, has been
uploaded to &lt;a href=&quot;https://www.debian.org&quot;&gt;Debian&lt;/a&gt; and built for &lt;a href=&quot;https://eddelbuettel.github.io/r2u&quot;&gt;r2u&lt;/a&gt;. The (nice) &lt;a href=&quot;https://eddelbuettel.github.io/rcppspdlog/&quot;&gt;documentation site&lt;/a&gt;
has been refreshed too. &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.spdlog.html&quot;&gt;RcppSpdlog&lt;/a&gt;
bundles &lt;a href=&quot;https://github.com/gabime/spdlog&quot;&gt;spdlog&lt;/a&gt;, a
wonderful header-only C++ logging library with all the bells and
whistles you would want that was written by &lt;a href=&quot;https://github.com/gabime&quot;&gt;Gabi Melman&lt;/a&gt;, and also includes &lt;a href=&quot;https://github.com/fmtlib/fmt&quot;&gt;fmt&lt;/a&gt; by &lt;a href=&quot;https://github.com/vitaut&quot;&gt;Victor Zverovich&lt;/a&gt;. You can learn
more at the nice &lt;a href=&quot;https://eddelbuettel.github.io/rcppspdlog/&quot;&gt;package
documention&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;This release contains a rebuild &lt;code&gt;RcppExports.cpp&lt;/code&gt; to aid
&lt;a href=&quot;https://www.rcpp.org&quot;&gt;Rcpp&lt;/a&gt; in the transition towards
&lt;code&gt;Rcpp::stop()&lt;/code&gt; and away from &lt;code&gt;Rf_error()&lt;/code&gt; in its
user packages. No othe&lt;/p&gt;
&lt;p&gt;The NEWS entry for this release follows.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h4 id=&quot;changes-in-rcppspdlog-version-0.0.28-2026-03-19&quot;&gt;Changes in
RcppSpdlog version 0.0.28 (2026-03-19)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Regenerate &lt;code&gt;RcppExports.cpp&lt;/code&gt; to switch to
&lt;code&gt;(Rf_error)&lt;/code&gt; aiding in &lt;span class=&quot;pkg&quot;&gt;Rcpp&lt;/span&gt;
transition to &lt;code&gt;Rcpp::stop()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Courtesy of my &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/&quot;&gt;CRANberries&lt;/a&gt;, there
is also a &lt;a href=&quot;https://dirk.eddelbuettel.com/cranberries/2026/03/20/#RcppSpdlog_0.0.28&quot;&gt;diffstat
report&lt;/a&gt; detailing changes. More detailed information is on the &lt;a href=&quot;https://dirk.eddelbuettel.com/code/rcpp.spdlog.html&quot;&gt;RcppSpdlog
page&lt;/a&gt;, or the &lt;a href=&quot;https://eddelbuettel.github.io/rcppspdlog/&quot;&gt;package documention
site&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot;font-size: 80%; font-style: italic;&quot;&gt;
This post by &lt;a href=&quot;https://dirk.eddelbuettel.com&quot;&gt;Dirk
Eddelbuettel&lt;/a&gt; originated on his &lt;a href=&quot;https://dirk.eddelbuettel.com/blog/&quot;&gt;Thinking inside the box&lt;/a&gt;
blog. If you like this or other open-source work I do, you can &lt;a href=&quot;https://github.com/sponsors/eddelbuettel&quot;&gt;sponsor me at
GitHub&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Fri, 20 Mar 2026 21:47:00 +0000</pubDate>

</item> 
<item>
	<title>Bits from Debian: Debian pt_BR localization team and UFABC&#39;s mentoring program</title>
	<guid>tag:bits.debian.org,2026-03-18:/2026/03/debian-pt-BR-and-ufabc-mentoring-program.html</guid>
	<link>https://bits.debian.org/2026/03/debian-pt-BR-and-ufabc-mentoring-program.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dwn.png&quot; width=&quot;77&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Between July and November 2025, the &lt;a href=&quot;https://debianbrasil.org.br/pt-br/traduzir&quot;&gt;Debian pt_BR translation team&lt;/a&gt; received
five students for an online mentoring program. The initiative was carried
out in partnership with the &lt;a href=&quot;https://www.ufabc.edu.br/en/&quot;&gt;Federal University of ABC&lt;/a&gt; through the
extension project &lt;a href=&quot;https://moodlearquivo.ufabc.edu.br/course/view.php?id=3788&quot;&gt;&quot;Immersion in Free Software&quot;&lt;/a&gt;, coordinated by
professors Suzana Santos and Miguel Vieira.&lt;/p&gt;
&lt;p&gt;During the mentorship the mentees acted on several of the team&#39;s translation
efforts and joined presentations about the &lt;a href=&quot;https://www.debian.org/&quot;&gt;Debian Project&lt;/a&gt; and its
community given by the mentors. We thank the dedication and contributions of
Ana Parra, Bruno Freitas, Henrique Barbosa, Raul Banzatto and Vitoria Cordeiro.
And we also thank the members of the team who have reviewed the work of the
mentees, specially the ones who were designated as official mentors, namely
Allythy Rennan, Daniel Lenharo, Thiago Pezzo, and Victor Marinho.&lt;/p&gt;
&lt;p&gt;Results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Package descriptions, translations: 27&lt;/li&gt;
&lt;li&gt;Package descriptions, revisions: 190&lt;/li&gt;
&lt;li&gt;Web pages: 11&lt;/li&gt;
&lt;li&gt;Revisions to the Debian Administrator&#39;s Handbook&lt;/li&gt;
&lt;li&gt;Revisions to the Debian Edu documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We hope that this experience will inspire new paths and that you continue to
contribute to Free Software â€“ especially to Debian.&lt;/p&gt; </description> 
	<pubDate>Wed, 18 Mar 2026 16:45:00 +0000</pubDate>

</item> 
<item>
	<title>Sven Hoexter: container image with ECH enabled curl</title>
	<guid>http://sven.stormbind.net/blog/posts/misc_ech_enabled_curl_oci_image/</guid>
	<link>http://sven.stormbind.net/blog/posts/misc_ech_enabled_curl_oci_image/</link>
     <description>  &lt;p&gt;As an opportunity to rewire my brain from &quot;docker&quot; to &quot;podman&quot; and &quot;buildah&quot;
I started to create an image build with an ECH enabled curl at
&lt;a href=&quot;https://gitlab.com/hoexter/ech&quot;&gt;https://gitlab.com/hoexter/ech&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Not sure if it helps anyone, but setup should be like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git clone https://gitlab.com/hoexter-experiments/ech
cd ech
buildah build --layers -f Dockerfile -t echtest
podman run -ti echtest /usr/local/bin/curl \
  --ech true --doh-url https://one.one.one.one/dns-query \
  https://crypto.cloudflare.com/cdn-cgi/trace.cgi
fl=48f121
h=crypto.cloudflare.com
ip=2.205.251.187
ts=1773410985.168
visit_scheme=https
uag=curl/8.19.0
colo=DUS
sliver=none
http=http/2
loc=DE
tls=TLSv1.3
sni=encrypted
warp=off
gateway=off
rbi=off
kex=X25519
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It also builds nginx and you can use that for a local test within
the image. More details in the
&lt;a href=&quot;https://gitlab.com/hoexter/ech/-/blob/main/README.md&quot;&gt;README&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 18 Mar 2026 09:32:54 +0000</pubDate>

</item> 
<item>
	<title>Jonathan Dowland: My Prusa Mini+ is broken</title>
	<guid>https://jmtd.net/log/prusa_mini/broken/</guid>
	<link>https://jmtd.net/log/prusa_mini/broken/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/jmtd.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;div class=&quot;image&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/prusa_mini/gunge.jpg&quot;&gt;&lt;img alt=&quot;my prints kept turning into gunge&quot; class=&quot;img&quot; height=&quot;300&quot; src=&quot;https://jmtd.net/log/prusa_mini/broken/400x-gunge.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;

&lt;p&gt;my prints kept turning into gunge&lt;/p&gt;

&lt;/div&gt;




&lt;div class=&quot;image&quot;&gt;
&lt;a href=&quot;https://jmtd.net/log/prusa_mini/snapped.jpg&quot;&gt;&lt;img alt=&quot;View of heatblock, with snapped nozzle&quot; class=&quot;img&quot; height=&quot;300&quot; src=&quot;https://jmtd.net/log/prusa_mini/broken/400x-snapped.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;

&lt;p&gt;View of heatblock, with snapped nozzle&lt;/p&gt;

&lt;/div&gt;


&lt;p&gt;Oh dear! I&#39;ve been suffering print reliability issues on my Prusa
Mini+ for quite a while, roughly since they introduced &lt;a href=&quot;https://jmtd.net/log/feed/&quot;&gt;Input Shaping&lt;/a&gt;
(although that might not be the culprit). Whilst trying different
things to resolve it, I managed to sheer off the brass nozzle within
the heatblock. I now have half the nozzle stuck in the ratchet spanner,
and half in the heatblock.&lt;/p&gt;

&lt;p&gt;What to do next?&lt;/p&gt;

&lt;p&gt;I can try and get the nozzle out of the heatblock, &lt;a href=&quot;https://pleroma.debian.social/notice/B4JKWxDGje9fg4MPZI&quot;&gt;by screwing something
into it&lt;/a&gt; or using an extraction
screw. &lt;a href=&quot;https://pleroma.debian.social/notice/B4KDqOPlJtCd1SUCI4&quot;&gt;I&#39;ve been warned this could be messy and dangerous&lt;/a&gt;.
Less risky might be to change out the whole heatblock. They don&#39;t seem
to be expensive.&lt;/p&gt;

&lt;p&gt;Back in &lt;a href=&quot;https://jmtd.net/log/fosdem/2026/&quot;&gt;FOSDEM&lt;/a&gt; I asked the Prusa folks what cool projects
I could do with the Mini+â€¦ they looked a little blank (I think the Mini+
is now a somewhat forgotten product) but they did say somebody had managed
to port over the &quot;Nextruder&quot; from the more recent Prusa XL/MK4. I could
take a look at that.&lt;/p&gt;

&lt;p&gt;Another thing I&#39;ve always wanted to explore (although I had intended it to
be temporary/reversible) was converting it into a &lt;a href=&quot;https://penplotter.art/&quot;&gt;plotter, for plotter
art&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Somehow this is my first 3d printing blog post in over a year. The
&lt;a href=&quot;https://jmtd.net/log/printables_feed/&quot;&gt;printables.com feed&lt;/a&gt; I linked to is still going,
I&#39;m happy to report (as is the one I wrote but didn&#39;t publish, slightly
more surprisingly)&lt;/p&gt; </description> 
	<pubDate>Mon, 16 Mar 2026 20:45:19 +0000</pubDate>

</item> 
<item>
	<title>Phil Hands: Mathilda Hands: lost Lenovo X230 Laptop</title>
	<guid>http://wiki.hands.com/chezfil/entry/mathilda_lost_laptop/</guid>
	<link>http://wiki.hands.com/chezfil/entry/mathilda_lost_laptop/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/philh.png&quot; width=&quot;99&quot; height=&quot;104&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;On our way to Austria last week, on March 6th, we left my daughter&#39;s laptop on a train: ICE 1201 (Hamburg-Harburg to Bludenz).&lt;/p&gt;

&lt;p&gt;The laptop is a &lt;a href=&quot;https://thinkwiki.de/X230&quot;&gt;Lenovo X230&lt;/a&gt; notebook. The most obvious distinguishing feature is a &lt;em&gt;Mathilda Hands&lt;/em&gt; sticker in the middle of the lid:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wiki.hands.com/chezfil/pics/mathilda_sticker.jpg&quot;&gt;&lt;img alt=&quot;Mathilda Hands sticker&quot; class=&quot;img&quot; height=&quot;20&quot; src=&quot;http://wiki.hands.com/chezfil/entry/mathilda_lost_laptop/128x-mathilda_sticker.jpg&quot; width=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I seem to remember that it also has some hexagonal stickers, one probably being one of these:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wiki.hands.com/chezfil/pics/phosh_sticker.jpg&quot;&gt;&lt;img alt=&quot;hexagonal, black and white, Phosh sticker&quot; class=&quot;img&quot; height=&quot;115&quot; src=&quot;http://wiki.hands.com/chezfil/entry/mathilda_lost_laptop/128x-phosh_sticker.jpg&quot; width=&quot;128&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The keyboard layout is British (with a &lt;strong&gt;£&lt;/strong&gt; above the &lt;strong&gt;3&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;It was left in coach 24 of ICE 1201, next to seats 51-54, in the luggage gap between the seats, on the floor.&lt;/p&gt;

&lt;p&gt;My hope is that whoever found it will end up searching for Mathilda Hands and see this. If that&#39;s how you got here, please email me:
&lt;a href=&quot;mailto:phil-lostlaptop2026@hands.com&quot;&gt;phil-lostlaptop2026@hands.com&lt;/a&gt; - doing so will make Mathilda (and me) most cheerful.&lt;/p&gt; </description> 
	<pubDate>Mon, 16 Mar 2026 07:55:34 +0000</pubDate>

</item> 
<item>
	<title>Dimitri John Ledkov: Security-only OpenSSL tarball releases for CVE-2026-2673</title>
	<guid>tag:blogger.com,1999:blog-347582618045055410.post-5141722112747117887</guid>
	<link>http://blog.surgut.co.uk/2026/03/security-only-openssl-tarball-releases.html</link>
     <description>  &lt;p&gt;On Friday May the 13th OpenSSL project has published advisory details for &lt;a href=&quot;https://openssl-library.org/news/vulnerabilities/index.html#CVE-2026-2673&quot;&gt;CVE-2026-2673&lt;/a&gt;. The CVE is treated as non-important by the project. The patches are only provided as commits on the stable branches. No git tag, no precise fixed version, and no source tarballs provided.&lt;/p&gt;&lt;p&gt;The patches that were merged to openssl-3.5 and openssl-3.6 branches were not based on top of the last stable point release and did not split code changes &amp;amp; documentation updates. It means that cherry-picking the commits referenced in the advisory will always lead to conflicts requiring manual resolution. It is not clear if support is provided for snapshot builds off the openssl-3.5 and openssl-3.6 branches. As the builds from the stable branches declare themselves as dev builds of the next unreleased point release. For example, in contrast to projects such as vim and glibc, with every commit to stable branches explicitly recommended for distributors to ship and is supported.&lt;/p&gt;&lt;p&gt;I have requested OpenSSL upstream in the past for the security fixes to branch off the last point release, commit code changes separate from the NEWS.md / CHANGES.md updates, and then merge that into the stable branches. This way the advisory that recommends cherry-picking individual commits, would actually apply conflict free - at no additional maintenance burden to the OpenSSL project and everyone who has to cherry-pick these updates. There is a wide support voiced for such strategy by the OpenSSL distributors and the OpenSSL Corporation. But this is not something that OpenSSL Project is yet choosing to provide.&lt;/p&gt;&lt;p&gt;To avoid duplication of work, I am starting to provide stable OpenSSL re-releases of the last upstream tagged stable point release with security only patches split into code-change only; documentation update; version update to create security only source tarball releases that are easy to build; easy to identify by the security scanners; and which cherry-pick changes without conflicts. The first two releases are published on GitHub as immutable releases with attestations:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/openssl-stable/openssl-stable/releases/tag/openssl-3.6.1%2B1&quot;&gt;OpenSSL 3.6.1+1&lt;/a&gt; - OpenSSL 3.6.1 with fix for CVE-2026-2673&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://github.com/openssl-stable/openssl-stable/releases/tag/openssl-3.5.5%2B1&quot;&gt;OpenSSL 3.5.5+1&lt;/a&gt; - OpenSSL 3.5.5 with fix for CVE-2026-2673&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If there are any other branches, CVEs, point releases that would be useful for similar style releases, do open discussion on the &lt;a href=&quot;https://github.com/openssl-stable/openssl-stable/discussions&quot;&gt;GitHub Project&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you find these releases useful, do star the project and download these releases. If this project gets popular, I hope that OpenSSL upstream will reconsider their releases strategy for all security releases. If you have support contracts with OpenSSL - please request OpenSSL corporation to release tagged releases and versioned tarballs.&lt;/div&gt;&lt;p&gt;&lt;/p&gt; </description> 
	<pubDate>Mon, 16 Mar 2026 02:11:00 +0000</pubDate>
  <author>noreply@blogger.com (Dimitri John Ledkov)</author>  
</item> 
<item>
	<title>Marco d&#39;Itri: Bypassing deep packet inspection with socat and HTTPS tunnels</title>
	<guid>tag:https:,2026:id_472</guid>
	<link>https://blog.bofh.it/debian/id_472</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/md.jpg&quot; width=&quot;96&quot; height=&quot;95&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;Recently I found myself with a few hours to kill, but with the only
available connectivity provided by an annoying firewall which would
normally allow requests only to a few very specific web sites.
This post shows how to work around this kind of restrictions by hiding
SSH in an HTTPS connection, which then can be used as a SOCKS proxy to
allow general connectivity.
&lt;a href=&quot;http://www.dest-unreach.org/socat/&quot;&gt;&lt;code&gt;socat&lt;/code&gt;&lt;/a&gt;
does all the hard work.&lt;/p&gt;

&lt;p&gt;First, create two self-signed RSA keys pairs, one for the client
(bongo) and one for the server (attila):&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;domain=bongo.example.net
openssl req -x509 -newkey rsa:2048 -days 7300 \
  -subj /CN=$domain -addext &quot;subjectAltName = DNS:$domain&quot; \
  -keyout socat.key -nodes \
  -out socat.pem
&lt;/pre&gt;

&lt;p&gt;Then, concatenate the public and private keys to create the file
provided to the &lt;code&gt;cert&lt;/code&gt; option, and use the public key as
the file for the &lt;code&gt;cafile&lt;/code&gt; option &lt;strong&gt;on the other
side&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On the client side, if you normally would connect to
&lt;code&gt;attila.example.net&lt;/code&gt; then you can add something like this to
&lt;code&gt;~/.ssh/config&lt;/code&gt;:&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;Host httpstunnel-attila.example.net
 ProxyCommand socat --statistics STDIO OPENSSL:attila.example.net:443,↩️
   cert=$HOME/.ssh/socat-bongo.pem,cafile=$HOME/.ssh/socat-attila.pem,↩️
   snihost=${SOCAT_SNI:-x.com}
 DynamicForward 1080
 Compression yes
 HostKeyAlias attila.example.net
 ControlMaster yes
 ControlPath ~/.ssh/.control_attila.example.net_22_%r
&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;ProxyCommand&lt;/code&gt; directive uses &lt;code&gt;socat&lt;/code&gt; to
provide the connectivity which &lt;code&gt;ssh&lt;/code&gt; will use over stdio
instead of connecting to port 22 of the server.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;snihost&lt;/code&gt; option is enough to make many firewalls
believe that this is an authorized HTTPS request.&lt;/p&gt;

&lt;p&gt;On the server side we use a simple systemd unit to start a forking
instance of &lt;code&gt;socat&lt;/code&gt;, which will accept and process requests
from the client (and from random crawlers on the Internet: expect a lot
of cruft in that log...):&lt;/p&gt;

&lt;pre class=&quot;code&quot;&gt;[Unit]
Description=socat tunnel
After=network.target

[Service]
Type=exec
ExecStart=socat -ly OPENSSL-LISTEN:443,fork,reuseaddr,↩️
  cert=%d/tlskey,cafile=%d/tlsca TCP:localhost:22
SuccessExitStatus=143
LoadCredential=tlskey:/etc/ssh/socat-attila.pem
LoadCredential=tlsca:/etc/ssh/socat-bongo.pem
Restart=on-abnormal
RestartSec=5s
DynamicUser=yes
PrivateDevices=yes
PrivateTmp=yes
ProtectClock=yes
ProtectControlGroups=yes
ProtectHome=yes
ProtectHostname=yes
ProtectKernelLogs=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectProc=invisible
ProtectSystem=strict
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
LockPersonality=yes
MemoryDenyWriteExecute=yes
NoNewPrivileges=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
SystemCallArchitectures=native
SystemCallErrorNumber=EPERM
SystemCallFilter=@system-service
SystemCallFilter=~@resources
SystemCallFilter=~@privileged

[Install]
WantedBy=multi-user.target
&lt;/pre&gt;

&lt;p&gt;Strong sandboxing is enabled, so the &lt;code&gt;socat&lt;/code&gt; instance
is confined with very limited privileges. An interesting point is the
use of &lt;a href=&quot;https://systemd.io/CREDENTIALS/&quot;&gt;systemd credentials&lt;/a&gt;
to provide the cryptographic keys, since it allows to store them in a
part of the file system which would not be accessible to the program.
Advanced users can use this method to provide the keys from secure
storage.&lt;/p&gt; </description> 
	<pubDate>Sun, 15 Mar 2026 13:45:31 +0000</pubDate>

</item> 
<item>
	<title>Jonathan Dowland: debian swirl font glyph</title>
	<guid>https://jmtd.net/log/debian_glyph/</guid>
	<link>https://jmtd.net/log/debian_glyph/</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/jmtd.png&quot; width=&quot;65&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;When I wrote about &lt;a href=&quot;https://jmtd.net/log/redhat_prompt/&quot;&gt;the redhat logo in a shell prompt&lt;/a&gt;,
a commenter said it would be nice to achieve something similar for Debian, and
suggested &quot;ğŸ�¥&quot; (U+1F365 FISH CAKE WITH SWIRL DESIGN) which, in some renderings,
looks to have a red swirl on top. This is not bad, but I thought we could do
better.&lt;/p&gt;

&lt;p&gt;On Apple systems, the character &quot;ï£¿&quot; (&lt;code&gt;U+F8FF&lt;/code&gt;) displays as the corporate
Apple logo. That particular unicode code point is reserved: systems are free
to use it for something private and internal, but other systems won&#39;t use it
for the same thing. So if an Apple user tries to send a document with that
character in it to someone else, they won&#39;t see the Apple unless they are also
viewing it on an Apple computer. (&lt;a href=&quot;https://www.evertype.com/standards/csur/conscript-table.html0&quot;&gt;Some folks use it for Klingon&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jmtd.net/log/DebianSwirlFont.zip&quot;&gt;Here&#39;s a font that maps the Debian swirl to the same code point&lt;/a&gt;.
It&#39;s covered by the &lt;a href=&quot;https://www.debian.org/logos/&quot;&gt;Debian logo license terms&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Font&lt;/a&gt; maps the Debian swirl logo to codepoints &lt;code&gt;e77d&lt;/code&gt;, &lt;code&gt;f306&lt;/code&gt;, &lt;code&gt;ebc5&lt;/code&gt; and
&lt;code&gt;f08da&lt;/code&gt; (all of which are also in the Private Use Area). I&#39;ve gone ahead and mapped
it to all those points but the last one (simply because I couldn&#39;t find it in FontForge.)&lt;/p&gt;

&lt;p&gt;Note that, unless your recipients have this font, or the Nerd Font, or similar
set up, they aren&#39;t going to see the swirl. But enjoy it for private use. Getting
your system to actually &lt;em&gt;use&lt;/em&gt; the font is, I&#39;m afraid, left as an exercise for the
reader (but feel free to leave comments)&lt;/p&gt;

&lt;p&gt;Thanks to mirabilos for chatting to me about this back in 2019. It&#39;s taken me
that long to get this blog post out of draft!&lt;/p&gt; </description> 
	<pubDate>Fri, 13 Mar 2026 22:11:03 +0000</pubDate>

</item> 
<item>
	<title>Sven Hoexter: RFC 9849 - Encrypted Client Hello</title>
	<guid>http://sven.stormbind.net/blog/posts/misc_rfc9849_ech/</guid>
	<link>http://sven.stormbind.net/blog/posts/misc_rfc9849_ech/</link>
     <description>  &lt;p&gt;Now that ECH is standardized I started to look into it to understand what&#39;s coming.
While generally desirable to not leak the SNI information, I&#39;m not sure if it will
ever make it to the masses of (web)servers outside of big CDNs.&lt;/p&gt;

&lt;p&gt;Beside of the extension of the TLS protocol to have an inner and outer ClientHello,
you also need (frequent) updates to your HTTPS/SVCB DNS records. The idea is to
rotate the key quickly, the OpenSSL APIs document talks about hourly rotation.
Which means you&#39;ve to have encrypted DNS in place (I guess these days DNSoverHTTPS
is the most common case), and you need to be able to distribute the private key
between all involved hosts + update DNS records in time.
In addition to that you can also use a &quot;shared mode&quot; where you handle the outer
ClientHello (the one using the public key from DNS) centrally and the inner
ClientHello on your backend servers. I&#39;m not yet sure if that makes it easier or
even harder to get it right.&lt;/p&gt;

&lt;p&gt;That all makes sense, and is feasible for setups like those at Cloudflare where the
common case is that they provide you NS servers for your domain, and terminate your
HTTPS connections. But for the average webserver setup I guess we will not see a
huge adoption rate. Or we soon see something like a Caddy webserver on steroids
which integrates a DNS server for DoH with not only automatic certificate renewal
build in, but also automatic ECHConfig updates.&lt;/p&gt;

&lt;p&gt;If you want to read up yourself here are my starting points:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9849.html&quot;&gt;RFC 9849 TLS Encrypted Client Hello&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9848&quot;&gt;RFC 9848 Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9934.html&quot;&gt;RFC 9934 Privacy-Enhanced Mail (PEM) File Format for Encrypted ClientHello (ECH)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/openssl/openssl/blob/openssl-4.0/doc/designs/ech-api.md&quot;&gt;OpenSSL 4.0 ECH APIs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/curl/curl/blob/master/docs/ECH.md&quot;&gt;curl ECH Support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.nginx.org/blog/encrypted-client-hello-comes-to-nginx&quot;&gt;nginx ECH Support&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/encrypted-client-hello/&quot;&gt;Cloudflare Good-bye ESNI, hello ECH!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you&#39;re looking for a test endpoint, I see one hosted by Cloudflare:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ dig +short IN HTTPS cloudflare-ech.com
1 . alpn=&quot;h3,h2&quot; ipv4hint=104.18.10.118,104.18.11.118 ech=AEX+DQBBFQAgACDBFqmr34YRf/8Ymf+N5ZJCtNkLm3qnjylCCLZc8rUZcwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700::6812:a76,2606:4700::6812:b76
&lt;/code&gt;&lt;/pre&gt; </description> 
	<pubDate>Fri, 13 Mar 2026 09:49:48 +0000</pubDate>

</item> 
<item>
	<title>Reproducible Builds: Reproducible Builds in February 2026</title>
	<guid>https://reproducible-builds.org/reports/2026-02/</guid>
	<link>https://reproducible-builds.org/reports/2026-02/</link>
     <description>  &lt;p class=&quot;lead&quot;&gt;&lt;strong&gt;Welcome to the February 2026 report from the &lt;a href=&quot;https://reproducible-builds.org&quot;&gt;Reproducible Builds&lt;/a&gt; project!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/reproducible-builds.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These reports outline what we’ve been up to over the past month, highlighting items of news from elsewhere in the increasingly-important area of software supply-chain security. As ever, if you are interested in contributing to the Reproducible Builds project, please see the &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#reproducedebiannet&quot;&gt;&lt;em&gt;reproduce.debian.net&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#tool-development&quot;&gt;Tool development&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#distribution-work&quot;&gt;Distribution work&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#miscellaneous-news&quot;&gt;Miscellaneous news&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#upstream-patches&quot;&gt;Upstream patches&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#documentation-updates&quot;&gt;Documentation updates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://reproducible-builds.org/blog/index.rss#four-new-academic-papers&quot;&gt;Four new academic papers&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;reproducedebiannet&quot;&gt;&lt;a href=&quot;https://reproduce.debian.net/&quot;&gt;&lt;em&gt;reproduce.debian.net&lt;/em&gt;&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://reproduce.debian.net&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/reproduce.debian.net.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The last year has seen the introduction, development and deployment of &lt;a href=&quot;https://reproduce.debian.net&quot;&gt;&lt;em&gt;reproduce.debian.net&lt;/em&gt;&lt;/a&gt;. In technical terms, this is an instance of &lt;a href=&quot;https://github.com/kpcyrd/rebuilderd&quot;&gt;&lt;em&gt;rebuilderd&lt;/em&gt;&lt;/a&gt;, our server designed monitor the official package repositories of Linux distributions and attempt to reproduce the observed results there.&lt;/p&gt;

&lt;p&gt;This month, however, Holger Levsen added suite-based navigation (eg. Debian &lt;em&gt;trixie&lt;/em&gt; vs &lt;em&gt;forky&lt;/em&gt;) to the service (in addition to the already existing architecture based navigation) which can be observed on, for instance, the &lt;a href=&quot;https://reproduce.debian.net/trixie-backports.html&quot;&gt;Debian &lt;em&gt;trixie-backports&lt;/em&gt;&lt;/a&gt; or &lt;a href=&quot;https://reproduce.debian.net/trixie-security.html&quot;&gt;&lt;em&gt;trixie-security&lt;/em&gt;&lt;/a&gt; pages.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;tool-development&quot;&gt;Tool development&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/diffoscope.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://diffoscope.org&quot;&gt;&lt;strong&gt;diffoscope&lt;/strong&gt;&lt;/a&gt; is our in-depth and content-aware diff utility that can locate and diagnose reproducibility issues. This month, Chris Lamb made a number of changes, including preparing and uploading versions, &lt;a href=&quot;https://tracker.debian.org/news/1713576/accepted-diffoscope-312-source-into-unstable/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;312&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://tracker.debian.org/news/1719459/accepted-diffoscope-313-source-into-unstable/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;313&lt;/code&gt;&lt;/a&gt; to Debian.&lt;/p&gt;

&lt;p&gt;In particular, Chris updated the post-release deployment pipeline to ensure that the pipeline does not fail if the automatic deployment to &lt;a href=&quot;https://pypi.org/&quot;&gt;PyPI&lt;/a&gt; fails [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/3beea8cb&quot;&gt;…&lt;/a&gt;]. In addition, Vagrant Cascadian updated an external reference for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;7z&lt;/code&gt; tool for &lt;a href=&quot;https://guix.gnu.org/&quot;&gt;GNU Guix&lt;/a&gt;. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/diffoscope/commit/a826a008&quot;&gt;…&lt;/a&gt;]. Vagrant Cascadian also updated &lt;em&gt;diffoscope&lt;/em&gt; in GNU Guix to version &lt;a href=&quot;https://codeberg.org/guix/guix/commit/27255149743362496eebdccca94d5df680ef7fdd&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;312&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://codeberg.org/guix/guix/commit/43f71df9ceb7f10db7d1d16a2adb46da4adc1a3f&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;313&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;distribution-work&quot;&gt;Distribution work&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://debian.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/debian.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Debian this month:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;26 reviews of Debian packages were added, 5 were updated and 19 were removed this month adding to &lt;a href=&quot;https://tests.reproducible-builds.org/debian/index_issues.html&quot;&gt;our extensive knowledge about identified issues&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A new &lt;a href=&quot;https://tracker.debian.org/pkg/debsbom&quot;&gt;&lt;em&gt;debsbom&lt;/em&gt;&lt;/a&gt; package was uploaded to &lt;em&gt;unstable&lt;/em&gt;. According to the package description, this package “generates SBOMs (Software Bill of Materials) for distributions based on Debian in the two standard formats, SPDX and CycloneDX. The generated SBOM includes all installed binary packages and also contains Debian Source packages.”&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;In addition, a &lt;a href=&quot;https://tracker.debian.org/pkg/sbom-toolkit&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sbom-toolkit&lt;/code&gt;&lt;/a&gt; package was uploaded, which “provides a collection of scripts for generating SBOM. This is the tooling used in &lt;a href=&quot;https://www.apertis.org/architecture/platform/software_bill_of_materials/&quot;&gt;Apertis to generate the Licenses SBOM and the Build Dependency SBOM&lt;/a&gt;. It also includes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dh-setup-copyright&lt;/code&gt;, a &lt;a href=&quot;https://wiki.debian.org/Debhelper&quot;&gt;Debhelper&lt;/a&gt; addon to generate SBOMs from &lt;a href=&quot;https://en.wikipedia.org/wiki/DWARF&quot;&gt;DWARF debug information&lt;/a&gt;, which are “extracted from DWARF debug information by running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dwarf2sources&lt;/code&gt; on every ELF binaries in the package and saving the output.”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/opensuse.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, Bernhard M. Wiedemann posted another &lt;a href=&quot;https://www.opensuse.org/&quot;&gt;&lt;strong&gt;openSUSE&lt;/strong&gt;&lt;/a&gt; &lt;a href=&quot;https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/QH2ULPPQD5U54TEK5OMWLUEFWSGMLIS5/&quot;&gt;monthly update&lt;/a&gt; for their work there.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;miscellaneous-news&quot;&gt;Miscellaneous news&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://notes.8pit.net/&quot;&gt;Sören Tempel (&lt;em&gt;nmeum&lt;/em&gt;)&lt;/a&gt; wrote up their insightful notes on &lt;a href=&quot;https://notes.8pit.net/notes/iqfs.html&quot;&gt;&lt;em&gt;Debugging Reproducibility Issues in Rust Software&lt;/em&gt;&lt;/a&gt; after nondeterministic issues were &lt;a href=&quot;https://codeberg.org/guix/guix/pulls/4551#issuecomment-10997750&quot;&gt;found and investigated for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pimsync&lt;/code&gt; in the GNU Guix review process&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Jeremy Bicha reported a bug in &lt;a href=&quot;https://apps.gnome.org/en-GB/Clocks/&quot;&gt;GNOME Clocks&lt;/a&gt; after they noticed that &lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-clocks/-/issues/436&quot;&gt;version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;50.beta&lt;/code&gt; regressed in reproducibility compared to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;49.0&lt;/code&gt;&lt;/a&gt;. Specifically, “the new generated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.oga&lt;/code&gt; files differ in their &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Serial No.&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Checksum&lt;/code&gt; [fields]”. However, &lt;a href=&quot;https://gitlab.gnome.org/GNOME/gnome-clocks/-/commit/dbeb4fa3502a1ab8e05069e24319a9f276f2b4e1&quot;&gt;Jeremy ended up fixing the issue&lt;/a&gt; by replacing &lt;a href=&quot;https://www.ffmpeg.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffmpeg&lt;/code&gt;&lt;/a&gt; with &lt;a href=&quot;https://www.rarewares.org/ogg-oggenc.php&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;oggenc&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-February/004022.html&quot;&gt;shared some information&lt;/a&gt; from the &lt;a href=&quot;https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;archlinux-dev-public&lt;/code&gt;&lt;/a&gt; mailing list on our &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general/&quot;&gt;mailing list&lt;/a&gt; this month after a discussion at &lt;a href=&quot;https://reproducible-builds.org/events/vienna2025/&quot;&gt;our latest Summit meeting&lt;/a&gt; on the topic of &lt;a href=&quot;https://llvm.org/docs/LinkTimeOptimization.html&quot;&gt;Link-Time Optimisation&lt;/a&gt; (LTO) — specifically on the reasons &lt;a href=&quot;https://lists.archlinux.org/archives/list/arch-dev-public@lists.archlinux.org/message/BSAAFYOJ3KTYZXACIQ26RP5II4JULLS4/&quot;&gt;why LTO often needs to be disabled&lt;/a&gt; in relation to &lt;a href=&quot;https://archlinux.org&quot;&gt;Arch Linux&lt;/a&gt;’s approach to binary hardening.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Janneke Nieuwenhuizen &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-February/004037.html&quot;&gt;posed a question&lt;/a&gt; to our list about whether there might be situations where using the UNIX epoch itself (i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt;) may materially differ from using &lt;a href=&quot;https://reproducible-builds.org/docs/source-date-epoch/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SOURCE_DATE_EPOCH&lt;/code&gt;&lt;/a&gt;) when a situation demands the use of a fixed timestamp.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Laurent Huberdeau &lt;a href=&quot;https://lists.reproducible-builds.org/pipermail/rb-general/2026-February/004031.html&quot;&gt;announced that they had recently finished their masters thesis&lt;/a&gt; “arguing for the use of &lt;a href=&quot;https://umontreal.scholaris.ca/items/2f44323a-9f4f-482a-98be-542d8ee5b9fb&quot;&gt;POSIX shell for diverse double-compilation and reproducible builds”&lt;/a&gt;. Laurent also presents &lt;a href=&quot;https://github.com/udem-dlteam/pnut&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pnut&lt;/code&gt;&lt;/a&gt;, a C compiler capable of bootstrapping itself and &lt;a href=&quot;https://en.wikipedia.org/wiki/Tiny_C_Compiler&quot;&gt;TCC&lt;/a&gt; from “any &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_shell#Bourne_shell&quot;&gt;POSIX-compliant shell&lt;/a&gt; and human-readable source files.”&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;upstream-patches&quot;&gt;Upstream patches&lt;/h3&gt;

&lt;p&gt;The Reproducible Builds project detects, dissects and attempts to fix as many currently-unreproducible packages as possible. We endeavour to send all of our patches upstream where appropriate. This month, we wrote a large number of such patches, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Bernhard M. Wiedemann:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/aio-libs/aiohttp/pull/12088&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aiohttp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/lima-vm/lima/pull/4561&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lima&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/mesonbuild/meson/pull/15529&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;meson&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1335456&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;obs-studio&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1331443&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;paracon&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/KimiNewt/pyshark/issues/747&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pyshark&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://build.opensuse.org/request/show/1331718&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;python-flake8-comprehensions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/MariaDB/server/pull/4667&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;server&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://github.com/vlang/v/issues/26664&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vlang&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Gioele Barabucci:&lt;/p&gt;

    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1127641&quot;&gt;#1127641&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/bitsnpicas&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitsnpicas&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1127643&quot;&gt;#1127643&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/fonts-topaz-unicode&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fonts-topaz-unicode&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugs.debian.org/1128901&quot;&gt;#1128901&lt;/a&gt; filed against &lt;a href=&quot;https://tracker.debian.org/pkg/bitsnpicas&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bitsnpicas&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;documentation-updates&quot;&gt;Documentation updates&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/website.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once again, there were a number of improvements made to our website this month including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Aman Sharma added a Java reproducible builds paper to the &lt;a href=&quot;https://reproducible-builds.org/docs/publications/&quot;&gt;&lt;em&gt;Academic publications&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/a43a33b3&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Chris Lamb added a reference to the &lt;a href=&quot;https://github.com/freedomofpress/repro-build&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;repro-build&lt;/code&gt;&lt;/a&gt; to the &lt;a href=&quot;https://reproducible-builds.org/tools/&quot;&gt;&lt;em&gt;Tools&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/c3ae179f&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Michiel Hendriks corrected an issue on the &lt;a href=&quot;https://reproducible-builds.org/docs/jvm/&quot;&gt;&lt;em&gt;JVM&lt;/em&gt;&lt;/a&gt; page in relation to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.properties&lt;/code&gt; files. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/c77b3931&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;em&gt;kpcyrd&lt;/em&gt; added &lt;a href=&quot;https://docs.brew.sh/Reproducible-Builds&quot;&gt;Homebrew&lt;/a&gt; to the &lt;a href=&quot;https://reproducible-builds.org/docs/projects/&quot;&gt;&lt;em&gt;Who is involved&lt;/em&gt;&lt;/a&gt; page. [&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/db7a2a97&quot;&gt;…&lt;/a&gt;][&lt;a href=&quot;https://salsa.debian.org/reproducible-builds/reproducible-website/commit/86eae61a&quot;&gt;…&lt;/a&gt;]&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 id=&quot;four-new-academic-papers&quot;&gt;Four new academic papers&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2601.20662&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/2601.20662.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Julien Malka and Arnout Engelen published a paper titled &lt;a href=&quot;https://arxiv.org/abs/2601.20662&quot;&gt;&lt;em&gt;Lila: Decentralized Build Reproducibility Monitoring for the Functional Package Management Model&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[While] recent studies have shown that high reproducibility rates are achievable at scale — demonstrated by the Nix ecosystem achieving over 90% reproducibility on more than 80,000 packages — the problem of effective reproducibility monitoring remains largely unsolved. In this work, &lt;strong&gt;we address the reproducibility monitoring challenge by introducing &lt;em&gt;Lila&lt;/em&gt;, a decentralized system for reproducibility assessment tailored to the functional package management model.&lt;/strong&gt; Lila enables distributed reporting of build results and aggregation into a reproducibility database […].&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2601.20662&quot;&gt;PDF&lt;/a&gt; of their paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2602.11887&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/2602.11887.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Javier Ron and Martin Monperrus of &lt;a href=&quot;https://www.kth.se/en&quot;&gt;KTH Royal Institute of Technology&lt;/a&gt;, Sweden, also published a paper, titled &lt;a href=&quot;https://arxiv.org/abs/2602.11887&quot;&gt;&lt;em&gt;Verifiable Provenance of Software Artifacts with Zero-Knowledge Compilation&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Verifying that a compiled binary originates from its claimed source code is a fundamental security requirement, called source code provenance. Achieving verifiable source code provenance in practice remains challenging. The most popular technique, called reproducible builds, requires difficult matching and reexecution of build toolchains and environments. &lt;strong&gt;We propose a novel approach to verifiable provenance based on compiling software with zero-knowledge virtual machines (zkVMs).&lt;/strong&gt; By executing a compiler within a zkVM, our system produces both the compiled output and a cryptographic proof attesting that the compilation was performed on the claimed source code with the claimed compiler. […]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2602.11887&quot;&gt;PDF&lt;/a&gt; of the paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2602.17678&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/2602.17678.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oreofe Solarin of &lt;a href=&quot;https://engineering.case.edu/computer-and-data-sciences&quot;&gt;Department of Computer and Data Sciences&lt;/a&gt;, &lt;a href=&quot;https://case.edu/&quot;&gt;Case Western Reserve University&lt;/a&gt;, Cleveland, Ohio, USA, published &lt;a href=&quot;https://arxiv.org/abs/2602.17678&quot;&gt;&lt;em&gt;It’s Not Just Timestamps: A Study on Docker Reproducibility&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Reproducible container builds promise a simple integrity check for software supply chains: rebuild an image from its Dockerfile and compare hashes. &lt;strong&gt;We built a Docker measurement pipeline and apply it to a stratified sample of 2,000 GitHub repositories that contained a Dockerfile. We found that only 56% produce any buildable image, and just 2.7% of those are bitwise reproducible without any infrastructure configurations.&lt;/strong&gt; After modifying infrastructure configurations, we raise bitwise reproducibility by 18.6%, but 78.7% of buildable Dockerfiles remain non-reproducible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2602.17678&quot;&gt;PDF&lt;/a&gt; of Oreofe’s paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2602.19383&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://reproducible-builds.org/images/reports/2026-02/2602.19383.png#right&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, Jens Dietrich and Behnaz Hassanshahi published &lt;a href=&quot;https://arxiv.org/abs/2602.19383&quot;&gt;&lt;em&gt;On the Variability of Source Code in Maven Package Rebuilds&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;[In] this paper we test the assumption that the same source code is being used [by] alternative builds. To study this, we compare the sources released with packages on Maven Central, with the sources associated with independently built packages from Google’s &lt;a href=&quot;https://cloud.google.com/security/products/assured-open-source-software&quot;&gt;Assured Open Source&lt;/a&gt; and Oracle’s Build-from-Source projects. […]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A &lt;a href=&quot;https://arxiv.org/pdf/2602.19383&quot;&gt;PDF&lt;/a&gt; of their paper is available online.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Finally, if you are interested in contributing to the Reproducible Builds project, please visit our &lt;a href=&quot;https://reproducible-builds.org/contribute/&quot;&gt;&lt;em&gt;Contribute&lt;/em&gt;&lt;/a&gt; page on our website. However, you can get in touch with us via:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;IRC: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#reproducible-builds&lt;/code&gt; on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;irc.oftc.net&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mastodon: &lt;a href=&quot;https://fosstodon.org/@reproducible_builds&quot;&gt;@reproducible_builds@fosstodon.org&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Mailing list: &lt;a href=&quot;https://lists.reproducible-builds.org/listinfo/rb-general&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rb-general@lists.reproducible-builds.org&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt; </description> 
	<pubDate>Thu, 12 Mar 2026 19:08:40 +0000</pubDate>

</item> 
<item>
	<title>Mike Gabriel: Debian Lomiri Tablets 2025-2027 - Project Report (Q4/2025)</title>
	<guid>152 at https://sunweavers.net/blog</guid>
	<link>https://sunweavers.net/blog/node/152</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/sunweaver.png&quot; width=&quot;82&quot; height=&quot;82&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;On 25th Oct 2025, I announced via my personal blog and on Mastodon that Fre(i)e Software GmbH was hiring. The hiring process was a mix of asking developers I know and waiting for new people to apply.&lt;/p&gt;

&lt;p&gt;At the beginning of November 2025 / in mid November 2025, we started with 13 developers (all part-time) to work on various topics around Lomiri (upstream and downstream).

Note that the below achievements don&#39;t document the overall activity in the Lomiri project, but that part that our team at Fre(i)e Software GmbH contributed to.&lt;/p&gt;

&lt;h3&gt;Organizational Achievements&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Setup management board for Qt6 migration in Lomiri [1]&lt;/li&gt;
&lt;li&gt;Setup management board for salsa2ubports package syncing [2]&lt;/li&gt;
&lt;li&gt;Bootstrap Qt 6.8 in UBports APT repository&lt;/li&gt;
&lt;li&gt;Bootstrap Qt 6.8 in Lomiri PPA&lt;/li&gt;
&lt;li&gt;Fix Salsa CI for all Lomiri-related Debian packages&lt;/li&gt;
&lt;li&gt;Facilitate contributor&#39;s project around XDG Desktop Portal support
for Lomiri.&lt;/li&gt;
&lt;li&gt;Plan how to bring DeltaTouch and DeltaChat core to Debian&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Maintenance Development&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Replace libofono-qt by libqofono in telepathy-ofono&lt;/li&gt;
&lt;li&gt;Rework unit tests in telepathy-ofono utilizing ofone-phonesim&lt;/li&gt;
&lt;li&gt;Obsolete not-used-anymore u1db-qt&lt;/li&gt;
&lt;li&gt;Fixing wrong bin:pkg names regarding snapd-glib&#39;s QML module&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Qt6 Porting&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;qmake -&amp;gt; CMake porting (if needed) and Qt6 porting of shared libraries and QML modules
consumed by Lomiri shell and Lomiri apps:

&lt;ul&gt;
&lt;li&gt;biometryd&lt;/li&gt;
&lt;li&gt;libqofono&lt;/li&gt;
&lt;li&gt;libqofonoext&lt;/li&gt;
&lt;li&gt;libqtdbusmock&lt;/li&gt;
&lt;li&gt;lomiri-account-polld&lt;/li&gt;
&lt;li&gt;lomiri-action-api&lt;/li&gt;
&lt;li&gt;lomiri-api&lt;/li&gt;
&lt;li&gt;lomiri-download-manager&lt;/li&gt;
&lt;li&gt;lomiri-location-service&lt;/li&gt;
&lt;li&gt;lomiri-online-accounts&lt;/li&gt;
&lt;li&gt;lomiri-push-qml&lt;/li&gt;
&lt;li&gt;lomiri-push-service&lt;/li&gt;
&lt;li&gt;maliit-framework&lt;/li&gt;
&lt;li&gt;mediascanner2&lt;/li&gt;
&lt;li&gt;qtlomiri-appmenutheme&lt;/li&gt;
&lt;li&gt;qtpim (started, work in progress)&lt;/li&gt;
&lt;li&gt;qwebdavlib&lt;/li&gt;
&lt;li&gt;signond (flaws spotted in Debian&#39;s porting of signond to Qt6)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Feature Development&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Continuing with Morph Browser Qt6 / LUITK

&lt;ul&gt;
&lt;li&gt;Build, run and fix LUITK unit tests for Qt6&lt;/li&gt;
&lt;li&gt;various bug fixes and improvements for Morph Qt6&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Add mbim modem support to ofono upstream&lt;/li&gt;
&lt;li&gt;Improve ofono support in Network Manager&lt;/li&gt;
&lt;li&gt;Improve mbim modem support in lomiri-indicator-network&lt;/li&gt;
&lt;li&gt;Package kazv (convergent Matrix client) and dependencies for Debian&lt;/li&gt;
&lt;li&gt;Provide Lomiri images for Mobian&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Research&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Research on fuse-based caching Webdav client
for lomiri-cloudsync-app.&lt;/li&gt;
&lt;li&gt;Research on alternative ORM instead of QDjango in libusermetrics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[1] &lt;a href=&quot;https://gitlab.com/groups/ubports/development/-/boards/9895029?label_name%5B%5D=Topic%3A%20Qt%206&quot;&gt;https://gitlab.com/groups/ubports/development/-/boards/9895029?label_name%5B%5D=Topic%3A%20Qt%206  &lt;/a&gt;&lt;br /&gt;
[2] &lt;a href=&quot;https://gitlab.com/groups/ubports/development/-/boards/10037876?label_name[]=Topic%3A%20salsa2ubports%20DEB%20syncing&quot;&gt;https://gitlab.com/groups/ubports/development/-/boards/10037876?label_name[]=Topic%3A%20salsa2ubports%20DEB%20syncing&lt;/a&gt;&lt;/p&gt; </description> 
	<pubDate>Thu, 12 Mar 2026 08:59:05 +0000</pubDate>

</item> 
<item>
	<title>Swiss JuristGate: Suicide of disgruntled employee? Bus fire at Kerzers / Chiètres, Switzerland, at least six dead</title>
	<guid>https://juristgate.com/en/suicide-bus-fire-kerzers-chietres-switzerland/</guid>
	<link>https://juristgate.com/en/suicide-bus-fire-kerzers-chietres-switzerland/</link>
     <description>  &lt;p&gt;News reports have appeared about a bus catching fire in Kerzers,
Switzerland, which is also known as ChiÃ¨tres in French.   Reports suggest
one person doused himself in fire.  Police confirm it was deliberate and
they say it is not a terrorist.  The possibility that remains for us
to contemplate is that it was somebody who has been humiliated by their
employer or the jurists in a tribunal.&lt;/p&gt;

&lt;p&gt;This web site has gone to great lengths to reveal the extent to which
jurists take money from people and then fail to provide any solution to
the needs of their clients.  In many cases, the jurists make disputes
even worse in the hope that parties on both sides of the dispute, or
their insurers, will end up paying even more legal fees.&lt;/p&gt;

&lt;p&gt;When employers make somebody redundant in Switzerland, they normally
have to give the workers three to six months notice or a lump sum payment,
sometimes both.  To avoid making these payments, some employers and
some of the agencies responsible for contract employees will try
to blame one of the workers.  Many of these disputes are settled by
a tribunal.  Both the employer and employee want to save face and so
the judgments are kept totally secret.&lt;/p&gt;

&lt;p&gt;There are parallel cases in Germany.
&lt;a href=&quot;https://danielpocock.com/en/evidence-psychological-abuse-stalking-galia-mancheva-susanne-eiswirt-fsfe/&quot;&gt;
Galia Mancheva&lt;/a&gt;&#39;s abuse report describes her experience of taking the
&lt;a href=&quot;https://danielpocock.com/en/category/fsfe-misfits/&quot;&gt;
FSFE misfits&lt;/a&gt; to an employment tribunal.  The tribunal forced her to
listen to lies from the men and then they humiliated her by telling her
she can&#39;t have justice because she had been in the job for less than
twelve months.&lt;/p&gt;

&lt;p&gt;Due to the
&lt;a href=&quot;https://juristgate.com/en/&quot;&gt;
JuristGate&lt;/a&gt; scandal, when the illegal legal fees insurance scheme
vanished overnight,
&lt;a href=&quot;https://juristgate.com/en/2024/04/19/twenty-thousand-victims-unauthorized-swiss-legal-insurance/&quot;&gt;
up to 20,000 clients suddenly found themselves without a lawyer&lt;/a&gt;.  Some
of those people were in the middle of legal disputes with employers or
employees.  Some of those disputes involve sensitive matters, such as
accusations of sexual impropriety and employee illness.   FINMA has not
made any comment on how these case files were protected or compromised.
&lt;a href=&quot;https://juristgate.com/en/people/mathieu-elias-parreaux/&quot;&gt;
Matthieu Parreaux&lt;/a&gt;, the founder of the rogue firm, suggested that
&lt;a href=&quot;https://softwarefreedom.institute/en/2024/11/18/recognizing-invalid-legal-judgments/&quot;&gt;
all the case files have fallen into the hands of other lawyers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When we began examining the
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
Adrian von Bidder death in Basel&lt;/a&gt;, where his wife subsequently became
the mayor, we looked at a petition to the
&lt;a href=&quot;https://juristgate.com/en/category/canton-basel/&quot;&gt;
Basel Kanton&lt;/a&gt; about the way they are hiding the number of suicides and
the reasons for them.  We were shocked to find
&lt;a href=&quot;https://danielpocock.com/en/adrian-von-bidder-homeworking-debian-unexplained-deaths/&quot;&gt;
the name A. von Bidder&lt;/a&gt; on the petition shortly before
&lt;a href=&quot;https://danielpocock.com/en/adrian-diana-von-bidder-senn-debian-detailed-history-death/&quot;&gt;
Adrian von Bidder-Senn died at age 32&lt;/a&gt;.  No official reasons have been
given.  The only fact we know is that he died eight months after the
&lt;a href=&quot;https://danielpocock.com/en/category/debian-day-volunteer-suicide/&quot;&gt;
Debian Day volunteer suicide&lt;/a&gt; and people discussed it like a copy-cat
suicide.  Nonetheless, if
&lt;a href=&quot;https://danielpocock.com/en/category/debianism/&quot;&gt;
Debianism&lt;/a&gt; was not the only influence in his death, we need to start
asking if he had simultaneously been the victim of rogue employment
practices or incompetence by jurists.&lt;/p&gt;

&lt;p&gt;As noted in the
&lt;a href=&quot;https://danielpocock.com/en/adrian-von-bidder-homeworking-debian-unexplained-deaths/&quot;&gt;
Basel Kanton suicide petition&lt;/a&gt;, many of these cases involve total
secrecy and the employment tribunals also operate in secrecy.  From
time to time, news reports appear about cases where multiple people are
attacked or killed, for example,
&lt;a href=&quot;https://www.srf.ch/news/schweiz/taeter-ist-gefasst-der-kettensaegen-angriff-von-schaffhausen&quot;&gt;
a chainsaw attack at the office of CSS insurance in Kanton Schaffhausen&lt;/a&gt;.
I went to some detail to explain the
&lt;a href=&quot;https://danielpocock.com/en/harassment-evidence-overcrowded-fitness-yoga-gym-incompetence-racism-accident-response-zurich-switzerland/&quot;&gt;
incompetence, corruption and racism we encountered when somebody
fell on Carla at a Zurich yoga studio and the people at the accident
insurance spent two years giving us excuses&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Police confirm the Postbus fire occurred deliberately.  It happened
at peak hour when the bus had the maximum number of passengers.  The
victim chose to die in a
&lt;a href=&quot;https://swissfederalism.ch/en/postbus/&quot;&gt;
Postbus&lt;/a&gt;.  These buses are iconic of Swiss rural life and the tourism
industry.  Did the victim of this suicide intend to send some kind of
signal, like the distinctive three-tone horn of the bus itself?&lt;/p&gt;

&lt;img alt=&quot;Swiss Postbus&quot; src=&quot;https://juristgate.com/assets/postbus-1.jpg&quot; width=&quot;100%&quot; /&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Will the victims of this tragedy spend two years waiting for
an answer or will they never get answers at all?&lt;/p&gt;

&lt;p&gt;Read more about
&lt;a href=&quot;https://juristgate.com/en/&quot;&gt;
JuristGate&lt;/a&gt;, the illegal legal insurance that
&lt;a href=&quot;https://juristgate.com/en/swiss-financial-regulator-resigned-blog-mit-dedp-micromasters-online-learner-exposed-cover-up/&quot;&gt;
Swiss regulator FINMA knew about for five years&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 11 Mar 2026 07:30:00 +0000</pubDate>

</item> 
<item>
	<title>Bits from Debian: Infomaniak Platinum Sponsor of DebConf26</title>
	<guid>tag:bits.debian.org,2026-03-11:/2026/03/infomaniak-platinum-debconf26.html</guid>
	<link>https://bits.debian.org/2026/03/infomaniak-platinum-debconf26.html</link>
     <description>  &lt;img src=&quot;http://planet.debian.org/heads/dwn.png&quot; width=&quot;77&quot; height=&quot;85&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;  &lt;p&gt;&lt;a href=&quot;https://infom aniak.com&quot;&gt;&lt;img alt=&quot;infomaniak-logo&quot; src=&quot;https://bits.debian.org/images/infomaniak-ethical-cloud.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We are pleased to announce that &lt;strong&gt;&lt;a href=&quot;https://infomaniak.com&quot;&gt;Infomaniak&lt;/a&gt;&lt;/strong&gt; has
committed to sponsor &lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26&lt;/a&gt; as a &lt;strong&gt;Platinum
Sponsor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Infomaniak is an independent, employee-owned Swiss technology company that
designs, develops, and operates its own cloud infrastructure and digital
services entirely in Switzerland. With over 300 employees — more than 70%
engineers and developers — the company reinvests all profits into R&amp;amp;D. Its
public cloud is built on OpenStack, with managed Kubernetes, Database as a
Service, object storage, and sovereign AI services accessible via OpenAI-
compatible APIs, all running on its own Swiss infrastructure. Infomaniak also
develops a sovereign collaborative suite — messaging, email, storage, online
office tools, videoconferencing, and a built-in AI assistant — developed in-
house and as a privacy-respecting solution to proprietary platforms. Open
source is central to how Infomaniak operates. Its latest data center (D4) runs
on 100% renewable energy and uses no traditional cooling: all the heat
generated by its servers is captured and fed into Geneva&#39;s district heating
network, supplying up to 6,000 homes in winter and hot water year-round. The
entire project has been documented and open-sourced at &lt;a href=&quot;https:// d4project.org/&quot;&gt;d4project.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With this commitment as Platinum Sponsor, Infomaniak is contributing to the
Debian annual Developers&#39; conference, directly supporting the progress of
Debian and Free Software. Infomaniak contributes to strengthen the community
that collaborates on Debian projects from all around the world throughout all
of the year.&lt;/p&gt;
&lt;p&gt;Thank you very much, Infomaniak, for your support of DebConf26!&lt;/p&gt;
&lt;h2&gt;Become a sponsor too!&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://debconf26.debconf.org/&quot;&gt;DebConf26&lt;/a&gt; will take place &lt;strong&gt;from 20th to July
25th 2026 in Santa Fe, Argentina,&lt;/strong&gt; and will be preceded by DebCamp, from 13th
to 19th July 2026.&lt;/p&gt;
&lt;p&gt;DebConf26 is accepting sponsors! Interested companies and organizations may
contact the DebConf team through
&lt;a href=&quot;mailto:sponsors@debconf.org&quot;&gt;sponsors@debconf.org&lt;/a&gt;, and visit the DebConf26
website at
&lt;a href=&quot;https://debconf26.debconf.org/sponsors/become-a-sponsor/&quot;&gt;https://debconf26.debconf.org/sponsors/become-a-sponsor/&lt;/a&gt;.&lt;/p&gt; </description> 
	<pubDate>Wed, 11 Mar 2026 00:12:00 +0000</pubDate>

</item> 
<item>
	<title>Sven Hoexter: debian/watch version 5 is a beauty</title>
	<guid>http://sven.stormbind.net/blog/posts/deb_watch_v5/</guid>
	<link>http://sven.stormbind.net/blog/posts/deb_watch_v5/</link>
     <description>  &lt;p&gt;Kudos to &lt;a href=&quot;https://lists.debian.org/debian-devel/2025/08/msg00143.html&quot;&gt;yadd@&lt;/a&gt; (and who
else was involved to make that happen), for the new
&lt;a href=&quot;https://manpages.debian.org/testing/devscripts/debian-watch.5.en.html&quot;&gt;watch file v5 format&lt;/a&gt;.
Especially &lt;a href=&quot;https://manpages.debian.org/testing/devscripts/uscan-templates.5.en.html&quot;&gt;templates&lt;/a&gt;
for the big git hoster make it much nicer.
Prepared two of my packages to switch on the next upload,
&lt;a href=&quot;https://salsa.debian.org/debian/exfatprogs/-/blob/master/debian/watch&quot;&gt;exfatprogs tracking github releases&lt;/a&gt; and
&lt;a href=&quot;https://git.sven.stormbind.net/?p=sven/pflogsumm.git;a=blob;f=debian/watch&quot;&gt;pflogsumm scraping a web page&lt;/a&gt;. That is much easier to read and less error prone.&lt;/p&gt;

&lt;p&gt;Update 2026-03-10: Realized that the github template is not useful if you need to pull maintainer
created release tarballs from GitHub. The best I could come up so far is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Version: 5
Search-Mode: plain
Pgp-Mode: auto
Source: https://api.github.com/repos/&amp;lt;user or org&amp;gt;/@PACKAGE@/releases?per_page=50
Matching-Pattern: https://github.com/[^/]+/[^/]+/releases/download/(?:[\d\.]+)/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That pulls the download information from the API endpoint and
preferes &lt;code&gt;.xz&lt;/code&gt; over &lt;code&gt;.gz&lt;/code&gt; when available.&lt;/p&gt; </description> 
	<pubDate>Tue, 10 Mar 2026 18:54:34 +0000</pubDate>

</item> 
</channel>
</rss>
