Seeing this run on real hardware is so satisfying, even if it’s just a small example. 😅
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
https://movq.de/v/b27ced6dcb/c.png
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.)
In case you haven’t seen it yet:
Matt Godbolt’s “Advent of Compiler Optimisations”!
https://www.youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2
@prologic@twtxt.net And I froze my ass off yesterday at -5°C and strong winds. 🤣
@prologic@twtxt.net 🎄 Merry Christmas and stuff 😅🎅
@lyse@lyse.isobeef.org Lovely! We also just had some snow. 😃 Not a lot, but still. 😅
(Lol, I totally read that as “rootfs”. 🤪)
@lyse@lyse.isobeef.org Oooh, nice! ⛄ We only have cold stormy weather over here. 🥴
Oh, that’s cute: https://movq.de/v/046fb6ee70/s.png DuckDuckGo puts a little helmet on the duck when you search for Skyrim. (Katria is a Skyrim character.)
@lyse@lyse.isobeef.org Thanks. 😅 (Do I say that? The WM can’t answer. 🤣)
Mastodon has a “Wrapstodon 2025” now, showing you a “wrap up” of the year. Of course, a pointless funny shitpost was my most “successful” post in 2025. 😂
@prologic@twtxt.net I’ve been awake at that time, didn’t notice anything. 🤔 Where was that BGP analyzer again … 😅 There’s a tool that keeps track of these things, right? I forgot what it was.
@prologic@twtxt.net Hm, I didn’t notice anything. Perhaps I was asleep? 😅
@prologic@twtxt.net You write so much code … it’s incredible. 😅
This feels useful: Rust’s Block Pattern
@lyse@lyse.isobeef.org These tables get shuffled around every time your OS switches to another process. It’s crazy that so much is going on behind the scenes.
@lyse@lyse.isobeef.org I was surprised by that as well. 😅 I thought these were features that you can use, but no, you must do all this.
By the way, I now fixed the issue that I mentioned at the end and it works on the netbook now. 🥳
https://www.uninformativ.de/blog/postings/2025-12-21/0/netbook.jpg
@shinyoukai@neko.laidback.moe But I thought Alpine was one of the good distro’s left. 😢 What’s it doing wrong?
@kiwu@twtxt.net Assembly is usually the most low-level programming language that you can get. Typical programming languages like Python or Go are a thick layer of abstraction over what the CPU actually does, but with Assembler you get to see it all and you get full control. (With lots of caveats and footnotes. 😅)
I’m interested in the boot process, i.e. what exactly happens when you turn on your computer. In that area, using Assembler is a must, because you really need that fine-grained control here.
@kiwu@twtxt.net Finally doing some Assembler again. 😅 Just a tiny little bit at least.
@lyse@lyse.isobeef.org Yeah, well, given that I didn’t need this for such a long time, it’s probably not an essential tool. 😅
I’ve often wanted to have an outline of text documents, though, and tagbar/ctags can do that as well:
https://movq.de/v/3c6d1a13d6/tagbar-md.png
https://movq.de/v/abc58e6d66/tagbar-latex.png
This isn’t as powerful as the “Navigator” tool in StarOffice/LibreOffice (which can be used to rearrange the document), but still pretty useful:
https://www.uninformativ.de/blog/postings/2024-05-23/0/so31.mp4
@lyse@lyse.isobeef.org Awww, 03.jpg. 😍 Yeah, we also had a nice sunset. I was on the road, though, so no photos.
Ooooooooooh! If your .vimrc is as messy as mine, you’ll be pleased to learn that Tagbar can show a sorted list of all key mappings:
https://movq.de/v/0f37d13a01/s.png
🤯
@prologic@twtxt.net It is, yes.
I rewrote all my solutions in Rust (except for day 10 part 2) and these are the runtimes on my i7-3770 from 2013 (this measures CLOCK_PROCESS_CPUTIME_ID, not wallclock):
day01/1 [ 00.000501311] Result: 1066
day01/2 [ 00.000400298] Result: 6223
day02/1 [ 00.000358848] Result: 12586854255
day02/2 [ 00.000750711] Result: 17298174201
day03/1 [ 00.000106537] Result: 17405
day03/2 [ 00.000404632] Result: 171990312704598
day04/1 [ 00.000257517] Result: 1626
day04/2 [ 00.007495342] Result: 9173
day05/1 [ 00.000237212] Result: 505
day05/2 [ 00.000142731] Result: 344423158480189
day06/1 [ 00.000229629] Result: 4076006202939
day06/2 [ 00.000279552] Result: 7903168391557
day07/1 [ 00.000204422] Result: 1622
day07/2 [ 00.000283816] Result: 10357305916520
day08/1 [ 00.029427421] Result: 84968
day08/2 [ 00.028089859] Result: 8663467782
day09/1 [ 00.000310304] Result: 4764078684
day09/2 [ 00.015512554] Result: 1652344888
day10/1 [ 00.000796663] Result: 375
day10/2 [ --.---------] Result: 15377 (Z3)
day11/1 [ 00.000416804] Result: 753
day11/2 [ 00.000660528] Result: 450854305019580
day12/1 [ 00.000336081] Result: 577
day12/2 [ 00.000000695] Result: no part 2
A little under 90 ms total.
On my Samsung NC10 netbook from 2011 with its Intel Atom N455 at 1.6 GHz:
day01/1 [ 00.003771326] Result: 1066
day01/2 [ 00.003267317] Result: 6223
day02/1 [ 00.003902698] Result: 12586854255
day02/2 [ 00.006659479] Result: 17298174201
day03/1 [ 00.000747544] Result: 17405
day03/2 [ 00.002737587] Result: 171990312704598
day04/1 [ 00.001263892] Result: 1626
day04/2 [ 00.044985301] Result: 9173
day05/1 [ 00.001696761] Result: 505
day05/2 [ 00.000978962] Result: 344423158480189
day06/1 [ 00.001387660] Result: 4076006202939
day06/2 [ 00.001734248] Result: 7903168391557
day07/1 [ 00.001295528] Result: 1622
day07/2 [ 00.001809659] Result: 10357305916520
day08/1 [ 00.277251443] Result: 84968
day08/2 [ 00.284359332] Result: 8663467782
day09/1 [ 00.003152407] Result: 4764078684
day09/2 [ 00.071123459] Result: 1652344888
day10/1 [ 00.005279527] Result: 375
day10/2 [ --.---------] Result: 15377 (Z3)
day11/1 [ 00.003273342] Result: 753
day11/2 [ 00.005139719] Result: 450854305019580
day12/1 [ 00.002857552] Result: 577
day12/2 [ 00.000004421] Result: no part 2
A little over 700 ms total.
I like this. You get performance that’s more or less in the ballpark of C, but without the footguns.
If your very popular project with lots of stars on GitHub is over 10 years old, and you’re still at a pre-1.0 version because you’re using SemVer and a 1.0 would mean making some kind of commitment and that’s somehow not desirable for you, then I think you’re doing something wrong. 🤔
Got a nice conspiracy theory for you:
https://mastodon.social/@mcc/115670290552252848
Actually wait I just thought about this and realized that the precise timing of the ACTUAL GitHub seed bank, by which I mean the Arctic Code Vault, on 2020-02-02, makes it more or less a perfect snapshot of pre-Copilot GitHub. Also precisely timed before we all got brain damage from COVID. This is the only remaining archive of source code by people with a fully working sense of smell
(Bonus points because the Arctic World Archive is located in Svaldbard and that’s the name of the AI in Stacey Kade’s “Cold Eternity”.)
@prologic@twtxt.net How on earth did you do that so quickly, especially day 10? People were struggling with this a lot. 🤯
@prologic@twtxt.net Jesus, that was quick. 😅
@prologic@twtxt.net How did you optimize that? 🤔
H… Ho… How have I not heard about vim-tagbar before? 😳
Bought more cheap slot plates (with bad reviews and people complaining about the pin order, because I could’nt find a product without such reviews), but those are simply correct now and just work. 🤪
mu only supports ints? 🤔 I'm not sure if I'll need flots for this year's AoC? 🤔
(Well, one part late in the calendar might need floats, depending on how you solve it …)
mu only supports ints? 🤔 I'm not sure if I'll need flots for this year's AoC? 🤔
@prologic@twtxt.net You won’t need floats, but 64 bit integers are mandatory. 😅
@prologic@twtxt.net Whoop, whoop! Nice! And welcome back. 😅
I’m seeing crashes in the 3D subsystem. (Gallium? Glamor? Whatever other Mesa thing they have? No idea.) In the logs I find this:
malloc(): unaligned tcache chunk detected
And that’s why I still care about Rust and want to learn more about it, even though it’s giving me so much headache and I’ve given up so many times. Because Rust currently seems to be the only popular systems programming language that tries to eliminate these error classes.
And of course “the Rust experiment” in the Linux kernel has recently been concluded as “successful”, so that alone is reason enough for me:
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. 🤣
May I turn your attention to this timeless masterpiece:
https://www.youtube.com/watch?v=zkyFHx4ncR0 (Terra Ferma - Floating)
@prologic@twtxt.net Yeah, but isn’t it from 2010? No widespread adoption after 15 years? Is there that much inertia? 🤔 On my box, everything just works – browser, GIMP, ImageMagick, imlib2, … 🤔
Searching the web a bit brings up lots of threads where people hate WebP. The problem being that browsers support WebP but other programs tend to be problematic … ? 🤔
@lyse@lyse.isobeef.org Yeah, no idea why that is. 🤔
@lyse@lyse.isobeef.org Nice! 🌇
Use more WebP, I guess.
- Lossless PNG, 635 kB: https://movq.de/v/b239c54838/scrot.png
- Lossless WebP, 469 kB: https://movq.de/v/b239c54838/scrot.webp
- Lossy WebP, 110 kB: https://movq.de/v/b239c54838/scrot%2Dlossy.webp
- Lossy JPEG, 110 kB: https://movq.de/v/b239c54838/scrot%2Dlossy.jpg
@prologic@twtxt.net Here you go:
(LTT = “Linus Tech Tips”, that’s the host.)
LTT: There was a recent thing from a major tech company, where developers were asked to say how many lines of code they wrote – and if it wasn’t enough, they were terminated. And there was someone here that was extremely upset about that approach to measuring productivity, because–
Torvalds: Oh yeah, no, you shouldn’t even be upset. At that point, that’s just incompetence. Anybody who thinks that’s a valid metric is too stupid to work at a tech company.
LTT: You do know who you just said that about, right?
Torvalds: No.
LTT: Oh. Uh, he was a prominent figure in the, uh, improved efficiency of the US government recently.
Torvalds: Oh. Apparently I was spot on.
In case you haven’t seen it yet:
https://movq.de/v/89c2e025ce/torvalds.mp4
Linus Torvalds about SLOC as a measurement of productivity. 😅
Haha, Amazon is full of bad reviews because the pin order doesn’t match … 🤦🤦🤦
@lyse@lyse.isobeef.org My theory is that these people simply don’t do “code archeology”. When something breaks, they don’t reach for git log. They simply don’t experience the pain that comes with bad commits / commit messages.
Or is that different in your company? 😅
But it is weird that none of the slot plates (that I can find) appear to have the correct pin order. 🤔
The two mainboards I have here use this order:
2468x
13579
But the slot plates use this:
12345
6789x
I tripped over this at first and wondered why it didn’t work.
Has this changed recently or what? 🥴
@prologic@twtxt.net Ah, shit, you might be right. You can even buy these slot plates on Amazon. I didn’t even think to check Amazon, I went straight to eBay and tried to find it there, because I thought “it’s so old, nobody is going to use that anymore, I need to buy second-hand”. 🤦🤦🤦
It really shows that I built my last PC so long ago … I know next to nothing about current hardware. 😢
Currently watching Stranger Things and all I can think of is this: