@lyse@lyse.isobeef.org Turns out, this actually was a little machine once (small netbook): https://movq.de/blog/postings/2011-04-28/0/POSTING-de.html And then I moved the whole installation to a different laptop later. I love that you can easily do that on Linux.
GCC 16’s Improved Error Messages, Experimental HTML Output
GCC 16.1 as the first stable version of the GCC 16 compiler is releasing as soon as later this week if all goes well. Among the many improvements in this year’s open-source compiler update are continued enhancements to the error messages as well as having an experimental HTML output option for messages… ⌘ Read more
@movq@www.uninformativ.de LOL. I think I get the idea. I am concerned about AI too. Managers starting with “I don’t know anything about this, but here is what says”. Infuriating.
I came across this one today, here is a gift link: https://www.nytimes.com/2026/04/15/opinion/art-artificial-intelligence.html?unlocked_article_code=1.bFA.XNiu.ZukFfdNl3Al1&smid=nytcore-ios-share
Disclaimer: Can’t guarantee that I’m fully awake and I’m being trained at work not to use my brain anymore, so maybe this is complete bullshit. 😪🧟♀️
It says here that SQLite uses signed integers:
https://sqlite.org/datatype3.html
In pure bits, 1 << 63 would be 0x8000000000000000, but as a signed value, it gets interpreted as -9223372036854775808. Subtracting 1 yields -9223372036854775809 – but that doesn’t fit in 64 bits anymore. It’s possible that SQLite doesn’t want to wrap around but instead saturates? Haven’t checked. 🤔
With 62 bits, there is enough room.
With 1 << 64, I have no idea how SQLite wants to handle this, because this should immediately trigger a warning, because it doesn’t fit right away. Maybe it gets truncated to 0?
sqlite> select printf('0x%x', 2 * (1 << 64));
╭──────────────────────╮
│ printf('0x%x', 2 ... │
╞══════════════════════╡
│ 0x0 │
╰──────────────────────╯
sqlite> select printf('0x%x', 0 - 1);
╭──────────────────────╮
│ printf('0x%x', 0 ... │
╞══════════════════════╡
│ 0xffffffffffffffff │
╰──────────────────────╯
sqlite> select printf('0x%x', 0 - 2);
╭──────────────────────╮
│ printf('0x%x', 0 ... │
╞══════════════════════╡
│ 0xfffffffffffffffe │
╰──────────────────────╯
And another fork: https://drewdevault.com/2026/03/25/2026-03-25-Forking-vim.html
In the interest of fairness and hopefully for the last time, I ever have to address this, Google has flip-flopped again and promised “sideloading” will not be removed from their version of Android, but instead have to be enabled in the developer settings, using the following “advanced flow”:

To be perfectly clear, this still falls short of what I wanted, but at this point, it is a compromise I’m willing to take, over further pursuing this, through the various available European courts, myself.
Here is their full statement:
https://android-developers.googleblog.com/2026/03/android-developer-verification.html
sqlparse is also unsuitable for me: https://github.com/andialbrecht/sqlparse/issues/688
I’m supporting incremental SQLite schema changes to just upgrade from an older database version to whatever the current software version supports. In the past, I already noticed that this is quite expensive in unit tests when each test case runs through the entire schema patches and applies them one by one.
To speed up test execution I now decided that I finally go through the troubles of maintaining both a set of incremental patches and a full schema setup in one go. A unit test verifies that both ways end up with the same structure. This gives me a set of SQLs to check the structures:
SELECT type, name, tbl_name, sql
FROM sqlite_schema
ORDER BY type, name, tbl_name
Unfortunately, the resulting CREATE TABLE SQL queries are formatted differently, depending on whether the full schema was set up in one big step or the structure had been modified with ALTER TABLE. Mainly, added columns are not on their own lines but appended in one physical line. That’s why I wanted an SQL formatting tool. Since I didn’t find one that works decently, I’m now doing some simple string manipulation. Joining consecutive whitespace into a single space character, removing spaces before commas and closing parentheses and spaces after opening parentheses. This works surpringly good enough. Of course, if it fails, the “diff” is absolutely horrendous.
Now for the cool part, my test execution dropped from around 5:05 minutes to just 1:32 minutes! I call that a win.
I just stumbled across PRAGMA table_info('tablename') https://sqlite.org/pragma.html#pragma_table_info, PRAGMA foreign_key_list('tablename') and friends. I guess, I have to play with that, now. It’s probably much better to use than the SQL text approach.
@lyse@lyse.isobeef.org Thanks for letting me know. HTML checkers seem happy now. I’m not sure what to do about the images not loading. The photos have three sizes (thumbnail, photo page, and original if you click the img tag on the photo page); can you at least see the smaller two sizes? Maybe I will do some experimental fetches and/or start measuring things on my web server.
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to “store now, decrypt later” attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
😱😱😱
@falsifian@www.falsifian.org Congrats, mate, no sleep at night anymore! ;-D That’s a cool age measuring blanket. Haven’t seen something like that before.
Btw. the index.html includes an out of place </ul>. And I just wanna let you know that the full-size photos don’t load for me over here across the pond. They always run into a timeout after a few slooow percent. But no worries. :-)
Hello twtxt! I still exist. I have a baby now and put some pictures at https://photos.falsifian.org/ . Album HTML loosely inspried by @lyse@lyse.isobeef.org
Putting obstacles in their way: To make scraping my code slightly less trivial, the repos on my website now only show the newest 15 commits, e.g.: https://movq.de/git/katriawm/log.html
@lyse@lyse.isobeef.org Ah, oh, this page has historical data:
https://kachelmannwetter.com/de/messwerte/baden-wuerttemberg/temperatur/20260217-1400z.html
I would have been too lazy to take photos when my fingers were freezing off. 😅
Fuck me dead! I accidentally confused an HTML file for a YAML file and manually opened it in my browser. Unfortunately, I clicked on the OK button of the popped up dialog a bit too fast, it just caught me off guard. It asked which program to open the YAML file in. Of course Firefox thought that it could handle that and suggested itself by default. Conveniently, the “don’t prompt me again and always use this selection from now on” checkbox was enabled.
And then the endless loop of death started. Turns out, this fucking browser can’t do shit with YAML files and delegated to what had been just configured. Oh, would you look at that!? Firefox! Empty tabs after empty tabs appeared. Killing and restarting Firefox just loaded the last session with all the tabs and the loop continued.
Some bloody snakeoil on my work machine slows down link openening requests by two, three seconds. It’s always absolutely anoying, but luckily, it actually limited the rate of new tabs popping up. I still could not close the many tabs fast enough that had accumulated before I noticed what was going on in the background.
Going to the settings to change them was always interrupted with a new tab opening in the foreground.
Finally, killing Firefox and renaming the file on disk before restarting Firefox did the trick and broke the loop. I was still holding down Ctrl+W for a minute or so to get rid of the useless tabs. I didn’t want to loose the important tabs, so just ditching the session wasn’t an option.
Fell into a bit of a rabbit hole and learned that it took German law until 2008 to actually allow unisex/gender-neutral first names: https://www.bundesverfassungsgericht.de/entscheidungen/rk20081205_1bvr057607.html 🤦
argparse takes 50 ms on my NUC, because this pulls in all kinds of fancy stuff behind the scenes, colorization and what not. 😮💨
Just importing data classes takes another 60 ms … This fancy new stuff is really costly.
Great article by Ploum about chatbots/AI and education: https://ploum.net/2026-01-19-exam-with-chatbots.html
@lyse@lyse.isobeef.org The thing is that’s hard to avoid if TYPE_CHECKING, but documentation tools such as pdoc don’t support that … so it’s either type hints or API docs. 🤷
I hope I can eventually find a way out of this mess …
./bin/mu -B -o ... -p muos/amd64 ... target.
@prologic@twtxt.net I’d love to take a look at the code. 😅
I’m kind of curious to know how much Assembly I need vs. How much of a microkernel can I build purely in Mu (µ)? 🤔
Can’t really answer that, because I only made a working kernel for 16-bit real mode yet. That is 99% C, though, only syscall entry points are Assembly. (The OpenWatcom compiler provides C wrappers for triggering software interrupts, which makes things easier.)
But in long mode? No idea yet. 😅 At least changing the page tables will require a tiny little bit of Assembly.
How Markdown Took Over the World
22 years ago, developer and columnist John Gruber released Markdown, a simple plain-text formatting system designed to spare writers the headache of memorizing arcane HTML tags. As technologist Anil Dash writes in a long piece, Markdown has since embedded itself into nearly every corner of modern computing.
Aaron Swartz, then seventeen years old, served as the beta tester before its quiet March 2004 debut. Goo … ⌘ Read more
Enquanto esperam pelo debate entre todos os candidatos (desta vez mesmo todos, os 11) que vai dar às 22h, estejam à vontade para ler o meu resumo do debate na rádio que aconteceu entre os três “candidatos excluídos” (André Pestana, Humberto Correia e Manuel João Vieira), caso não o tenham ouvido.
Costumo fazer threads para os debates, mas visto que este ouvi em diferido preferi escrever no meu blog em vez de ter aqui uma mega-thread… mas se quiserem comentar, estejam à vontade para comentar aqui 😛
I came across this on “Why Is SQLite Coded In C”, which I found interesting:
“There has lately been a lot of interest in “safe” programming languages like Rust or Go in which it is impossible, or is at least difficult, to make common programming errors like memory leaks or array overruns.”
If that’s true, then encountering those issues means the programmer is, simply, horrible?
Did you miss today’s event on #PublicDomain ? Or you didn’t, but want more? Don’t miss Natick FOSS’s upcoming event, on the 8th of January, where #PublicDomainDay will be celebrated!
2:45PM NY time
7:45PM GMT
And now the event loop is not a simple loop around curses’ getch() anymore but it can wait for events on any file descriptor. Here’s a simple test program that waits for connections on a TCP socket, accepts it, reads a line, sends back a line:
https://movq.de/v/93fa46a030/vid-1767547942.mp4
And the scrollbar indicators are working now.
I’ll probably implement timer callbacks using timerfd (even though that’s Linux-only). 🤔
@movq@www.uninformativ.de I noticed that your feed’s last modification timestamp was missing in my database. I cannot tell for certain, but I think it did work before. Turns out, your httpd now sends the Last-Modified with UTC instead of GMT. Current example:
Sat, 03 Jan 2026 06:50:20 UTC
I’m not a fan of this timestamp format at all, but according to the HTTP specification, HTTP-date must always use GMT for a timezone, nothing else: https://httpwg.org/specs/rfc9110.html#http.date
New post: 2025 - A Year in review (https://www.itsericwoodward.com/journal/2025/12-31-year-in-review.html)
Happy New Year, everyone!
At around 19 seconds in the video, you can see some minor graphical glitches.
Text mode applications in Unix terminals are such a mess. It’s a miracle that this works at all.
In the old DOS days, you could get text (and colors) on the screen just by writing to memory, because the VGA memory was mapped to a fixed address. We don’t have that model anymore. To write a character to a certain position, you have to send an escape sequence to move the cursor to that position, then more escape sequences to set the color/attributes, then more escape sequences to get the cursor to where you actually want it. And then of course UTF-8 on top, i.e. you have no idea what the terminal will actually do when you send it a “🙂”.
Mouse events work by the terminal sending escape sequences to you (https://www.xfree86.org/current/ctlseqs.html#Mouse%20Tracking).
ncurses does an amazing job here. It’s fast (by having off-screen buffers and tracking changes, so it rarely has to actually send full screen updates to the terminal) and reliable and works across terminals. Without the terminfo database that keeps track of which terminal supports/requires which escape sequences, we’d be lost.
But gosh, what a mess this is under the hood … Makes you really miss memory mapped VGA and mouse drivers.
It’s that time again, I’ve just rotated my #twtxt feed!
Find last quarter’s twts at the feed, or see them on the web.
My little toy operating system from last year runs in 16-bit Real Mode (like DOS). Since I’ve recently figured out how to switch to 64-bit Long Mode right after BIOS boot, I now have a little program that performs this switch on my toy OS. It will load and run any x86-64 program, assuming it’s freestanding, a flat binary, and small enough (< 128 KiB code, only uses the first 2 MiB of memory).
Here I’m running a little C program (compiled using normal GCC, no Watcom trickery):
https://movq.de/v/b27ced6dcb/los86%2D64.mp4

Next steps could include:
- Use Rust instead of C for that 64-bit program?
- Provide interrupt service routines. (At the moment, it just keeps interrupts disabled.)
Lab report: Reading a 4th Edition Research Unix tape image on Plan 9 — http://a.9srv.net/reports/index.html#v4
Happy birthday Katrina! https://www.uninformativ.de/blog/postings/2025-12-23/0/POSTING-en.html :-)
Wow, @movq@www.uninformativ.de, so many tables. No idea what I expected (I’m totally clueless on this low-level stuff), but that was quite an interesting surprise to me. https://www.uninformativ.de/blog/postings/2025-12-21/0/POSTING-en.html
I quit LinkedIn
I recently quit LinkedIn. Ironically, the post I made about why I was
quitting was probably the most viewed thing I ever posted. Haha.
If you need to see my CV it’s right here on my website:
This is what I wrote back in November:
I’m terminating my account on LinkedIn next week. This is possibly
some kind of career suicide.I’m very seldom visiting LinkedIn, so I’m probably late to the party,
as usual. Perhaps there has already been a lar … ⌘ Read more
The phone situation
I need to write something about this or I’ll burst.
I have a new phone. It’s an old iPhone SE 2022. Yes, I know. Evil,
evil Apple. Won’t someone please think of the privacy issues? Right,
well, Apple has at least better reputation about these things than
Google does, but we’ll come to that.
It feels like I’m betraying the FLOSS cause. I feel horrible, although
probably not just because of this.
Let’s recap:
- My main phone has been a de-googled (not even microG) Fairphone 4
with CalyxOS. CalyxOS … ⌘ Read more
Alright, Advent of Code is over:
https://www.uninformativ.de/blog/postings/2025-12-12/0/POSTING-en.html
It’s been quite the time sink, especially with the DOS games on top, but it was fun. 🥳
In case you’re wondering: All puzzles (except for part 2 of day 10) were doable in Python 1 on SuSE Linux 6.4 and ran in a finite time on the Pentium 133. Puzzle 10/2 might have been doable as well if I had better education. 🤣
The “AOSP Devs” @aosp_devs@aosp_devs year in review:
Advent of Code 2025 starts tomorrow. 🥳🎄
This year, I’m going to use Python 1 on SuSE Linux 6.4, writing the code on my trusty old Pentium 133 with its 64 MB of RAM. No idea if that old version of Python will be fast enough for later puzzles. We’ll see.

https://fokus.cool/2025/11/25/i-dont-care-how-well-your-ai-works.html
AI systems being egregiously resource intensive is not a side effect — it’s the point.
And someone commented on that with:
I’m fascinated by the take about the resource usage being an advantage to the AI bros.
They’ve created software that cannot (practically) be replicated as open source software / free software, because there is no community of people with sufficient hardware / data sets. It will inherently always be a centralized technology.
Fascinating and scary.
How bad was the “Digital Sovereignty Summit”?
Heise explains: https://www.heise.de/en/opinion/Analysis-of-the-Digital-Sovereignty-Summit-Open-Source-Gets-Scolded-11084765.html
But I’ll highlight one thing - the Declaration for European Digital Sovereignty, published and signed there, has this ridiculous sentence:
“Open-source solutions can play an important role enhancing digital sovereignty, provided they meet high cybersecurity standards and are complemented by reliable proprietary technologies where appropriate.”
And regarding those broken URLs: I once speculated that these bots operate on an old dataset, because I thought that my redirect rules actually were broken once and produced loops. But a) I cannot reproduce this today, and b) I cannot find anything related to that in my Git history, either. But it’s hard to tell, because I switched operating systems and webservers since then …
But the thing is that I’m seeing new URLs constructed in this pattern. So this can’t just be an old crawling dataset.
I am now wondering if those broken URLs are bot bugs as well.
They look like this (zalgo is a new project):
https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
When you request that URL, you get redirected to /git/:
$ curl -sI https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/
HTTP/1.0 301 Moved Permanently
Date: Sat, 22 Nov 2025 06:13:51 GMT
Server: OpenBSD httpd
Connection: close
Content-Type: text/html
Content-Length: 510
Location: /git/
And on /git/, there are links to my repos. So if a broken client requests https://www.uninformativ.de/projects/slinp/zalgo/scksums/bevelbar/, then sees a bunch of links and simply appends them, you’ll end up with an infinite loop.
Is that what’s going on here or are my redirects actually still broken … ?
To everyone previously asking, what my (and other developers) endless complaining about Google, to both every EU body, with a form on their website and every relevant team at Google accomplished…
WE FUCKING WON!!!
“While security is crucial, we’ve also heard from developers and power users who have a higher risk tolerance and want the ability to download unverified apps.”
-source
I was also able to work with my new webhost, to bring back “🐕.fr.to” - everyones favorite vanity redirect domain, for my site, Googles changes to SSL warnings in Chrome, killed at the beginning of this year.
The lesson: I NEED TO COMPLAIN MORE
Our investigation into the suspicious pressure on Archive.today
Article URL: https://adguard-dns.io/en/blog/archive-today-adguard-dns-block-demand.html
Comments URL: https://news.ycombinator.com/item?id=45936460
Points: 500
# Comments: 165 ⌘ Read more
PSOs to be redeployed from train stations in retail crime crackdown
Security patrols at 120 “low-crime rate” train stations will be scaled back as Protective Services Officers’ target major suburban retail hubs and crime hot spots on the rail network. ⌘ Read more
Sydney’s food truck divide: The suburbs with hundreds and those with none
There are close to 2000 food trucks in Sydney. See how many your area has. ⌘ Read more
Eastern suburbs council votes to trade native trees for ocean views
A Sydney council has voted to remove trees in clifftop reserves in some of Sydney’s wealthiest suburbs to restore ocean views for waterfront residents. ⌘ Read more
‘Terrible’: P-plate driver charged after pregnant woman killed in Sydney’s north
A 33-year-old woman who was eight months’ pregnant has died, along with her unborn child, after being struck by a car in Sydney’s north-west. ⌘ Read more
The Age photos of the week, November 15, 2025
The week in photos from our award-winning staff photographers and regular contributing photographers at The Age ⌘ Read more
Amyl and the Sniffers’ free gig shut down over security fears in Melbourne
A free gig by Australian rockers Amyl and the Sniffers has been shut down after security fences at Federation Square “got crushed in”. ⌘ Read more