Programming in the sun with Vim and DC1 ā Read more
It happened.
āCan you help me debug this program? I vibe coded it and I have no idea whatās going on. I had no choice ā learning this new language and frameworks would have taken ages, and I have severe time constraints.ā
Did I say ānoā? Of course not, Iām a ānice guyā. So Iām at fault as well, because I endorsed this whole thing. The other guy is also guilty, because he didnāt communicate clearly to his boss what can be done and how much time it takes. And the boss and his bosses are guilty a lot, because theyāre all pushing for āAIā.
The end result is garbage software.
This particular project is still relatively small, so it might be okay at the moment. But normalizing this will yield nothing but garbage. And actually, especially if this small project works out fine, this contributes to the shittiness because management will interpret this as āhey, AI worksā, so they will keep asking for it in future projects.
How utterly frustrating. This is not what I want to do every day from now on.
[$] Gccrs after libcore
Despite its increasing popularity, the Rust programming language is still
supported by a single compiler, the LLVM-based rustc. At the 2025 GNU Tools\āØCauldron, Pierre-Emmanuel Patry said that a lot of people are waiting
for a GCC-based Rust compiler before jumping into the language. Patry, who
is working on just that compiler (known as āgccrsā), provided an update on
the status of that project and what is coming next. ā Read more
New program allows parents of kids with complex needs to take a break
An Australian-first pilot program gets underway in WA in the hope of not only giving the parents of children with complex needs a break, but helping them navigate the maze of different support systems. ā Read more
@movq@www.uninformativ.de I never programmed with Tkinter myself and itās been ages that I ran a program which used it. I always thought that it looks awful. But maybe there are nicer themes these days. I just wanted to give the demo python3 -m tkinter
a try, but this module doesnāt exist. I was always under the wrong impression that Tkinter is bundled with Python.
@lyse@lyse.isobeef.org Xfce is nice, but itās also mostly GTK. I donāt really know the answer yet. For now, Iāll just avoid anything that uses GTK4.
For my own programs, I might have a closer look at Tkinter. I was complaining recently that I couldnāt find a good file manager, so it might be an interesting excercise to write one in Python+Tkinter. š¤ (Or maybe thatās too much work, I donāt know yet.)
2 Ways to Install Homebrew in MacOS Tahoe
Homebrew is a powerful command line package manager that allows you to easily install, update, and manage popular command line programs and tools, as well as traditional graphical apps with cask (and third party tools like Applite help you manage cask through the GUI too). Itās a popular tool with advanced Mac users and those ⦠Read More ā Read more
Spec-driven development: Using Markdown as a programming language when building with AI
I coded my latest app entirely in Markdown and let GitHub Copilot compile it into Go. This resulted in cleaner specs, faster iteration, and no more context loss. āØ
The post [Spec-driven development: Using Markdown as a programming language when building with AI](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-using-markdown-as-a-p ⦠ā Read more
Tiny RISC-V Development Board with WCH CH32V317WCU6 Available from $6.80
The nanoCH32V317 is a compact development board created by MuseLab to simplify prototyping and embedded system development. It integrates USB connectivity, Ethernet support, and a straightforward programming interface through USB Type-C, providing an accessible platform for engineers and hobbyists working with RISC-V microcontrollers. The board is powered by the WCH CH32V317WCU6, a RISC-V microcontro ⦠ā Read more
First Beta of iOS 26.1, MacOS Tahoe 26.1 is Available for Testing
Apple has issued the first beta versions of iOS 26.1, MacOS Tahoe 26.1, iPadOS 26.1, and the rest of the OS 26 suite. The first betas are available for any user registered in the developer beta program, and soon after for public beta testers too. Itās not entirely clear what the focus of iOS 26.1 ⦠[Read More](https://osxdaily.com/2025/09/22/first-beta-of-ios-26-1-macos-tahoe-26-1-is-available-for-testin ⦠ā Read more
This thing about making software run on other peopleās computers can be pretty hard!
No wonder I think Iāve heard this is one of the things that distinguishes professional software development from [my preferred domain of] things such as āend-user programmingā etc.
The problem is that when you start sharing code in the context of a FLOSS project you almost immediately get enmeshed in concerns about packaging and how other people will install stuff, when sometimes you just donāt want to be a professional software developer! šæ
Iām always borrowing terms (learning ideas) from @lr like: incidental complexity. I hate incidental complexity or maybe I just fear incidental complexity. Can we escape incidental complexity? I guess not.
«Welcome to the #AutomatingGIS processes course! Through interactive lessons and hands-on exercises, this course introduces you to #GeographicDataAnalysis using the #Python programming language. If you are new to Python, we recommend you first start with the Geo-Python course (geo-python.readthedocs.io) before diving into using it for GIS analyses in this course.
Geo-Python and Automating GIS Processes (ā#AutoGISā) have been developed by the Department of Geosciences and Geography at the University of Helsinki, Finland. The course has been planned and organized by the #DigitalGeographyLab. The teaching materials are openly accessible for anyone interested in learning.Ā»
«Welcome to the #AutomatingGIS processes course! Through interactive lessons and hands-on exercises, this course introduces you to #GeographicDataAnalysis using the #Python programming language. If you are new to Python, we recommend you first start with the Geo-Python course (geo-python.readthedocs.io) before diving into using it for GIS analyses in this course.
Geo-Python and Automating GIS Processes (ā#AutoGISā) have been developed by the Department of Geosciences and Geography at the University of Helsinki, Finland. The course has been planned and organized by the #DigitalGeographyLab. The teaching materials are openly accessible for anyone interested in learning.Ā»
https://autogis-site.readthedocs.io/en/latest/
(via Paul Walter no linkedin)
«⦠It all went well until 1980 or so, when Ronald Reagan appointed a new head of the EPA. The lady didnāt like her stationery we had designed and with a simple āI want my daisy backā undermined the overall graphic system. If the Queen doesnāt like it, we donāt like it became the attitude, and the program began to crumble. The old logo was fully reinstated and the graphic system was abandoned. A decade later, nobody at the EPA could find a copy of the Graphic Standards System, except a bunch of legalese that you will find on its website.
Iām a fan of the EPA and all its efforts and hope that we helped in some small way for this agency to communicate within itself, to other government agencies, and with the American people. Iām very grateful and appreciative that Jesse Reed and Hamish Smyth of Standards Manual, and Julie Anixter of AIGA, brought this document to life again. Have fun revisiting.Ā»
(from the introduction by Steff Geissbühler)
@lyse@lyse.isobeef.org @dce@hashnix.club Itās pretty cool, I wonāt argue that, but also really simple, to be completely honest. š The BIOS already provides all you need to send data to the printer:
https://helppc.netcore2k.net/interrupt/bios-printer-services
The BIOS actually does provide a great deal of things, which, to me, was one of the most surprising learnings of this project (the project of writing a little 16-bit real-mode OS, that is). It often doesnāt feel like I was writing an operating system ā it felt more like writing a normal program that just uses BIOS calls like we would use syscalls these days.
(Iāve also read a lot of warnings, like ādonāt use the BIOS for this or thatā. Mostly because it tends to be very slow.)
We use all the Microsoft programs at work - Teams and Outlook especially.
After all kinds of technical problems with Teams, that sometimes go unresolved for over a year, Microsoft shifted their priorities away from fixing things and towards adding an annoying AI Copilot button, that just takes up space and all it does, is loads the website in Teams, so I disabled it. Soon they just add it back, but in a different row of icons, therefore itās now a different button, you have to disable (I think they added yet another one, to the Teams, on my work phone and I had to disabled that too). Not too long after, the desktop one just enabled itself, because of āan errorā and I can disable it, but doing so activates a popup, that begs you to turn it back on, every once in a while. You canāt disable the popup and can only click āYesā or āNot nowā on it. I still keep it disabled, out of principle, but yesterday I noticed yet another Copilot button, this time in the top right corner of my Outlook and this one cannot be disabled, on the business version of Outlook and even on the personal one, itās only possible to do it through hidden privacy settings, by prohibiting the program from connecting to Microsoft servers, for extra āfeaturesā.
Thereās people complaining about it online, so itās clear nobody really wants it, but at this point Microsofts position is that you will have at least one useless AI button on your screen, at any given time, and you will be happy. And yes, their AI sucks and if I absolutely have to use AI for something, thereās already 2 better options, we have access to, at work.
** To the surprise of literally no one, Iām working on implementing a programming language all my own **
Inspired by conversation at a recent Future of Coding event, I decided Iād write up a little something about the programming language Iāve been working on (for what feels like forever) before Iāve gotten it to a totally shareable state. I have a working interpreter that Iām pretty pleased with, but I donāt yet have an interact ⦠ā Read more
Back to Win16 8-) New arrivals of fixed programs for Win31. A big collection of tested network software for Win31. gopher://shibboleths.org/1/win31
This is why I love tech from that era.
Write bytes to a parallel port and stuff happens. If itās just ASCII bytes, then it will print ASCII text. Even the simplest programs can use a printer this way.
With a little bit of ESC/P, you can print images and other fancy stuff. Thatās what I did this morning ā never worked with ESC/P before, now I can print images. Itās not that hard.
Hayes-compatible modems are similar: Write some AT commands to the serial port and the modem does things. This isnāt even arcane knowledge, itās explained in the printed manual.
Maybe Iām wearing rose-tinted glasses here, but I think with all this old stuff, you get useful results very quickly and the manuals are usually actually helpful. Itās so much easier to get started and to use this hardware to the full extent. Much less complexity than what we have today, not a ton of libraries and dependencies and SDKs and cloud services and what not.
@thecanine@twtxt.net Wow. Iām not an artist in any way, but I have tried to make icons for programs or fonts every now and then. Making something that is still recognizable at so few pixels is hard. Hats off!
Video: C Programming on System 6 - VCFMW, CMaster ā Read more
I have a #CreativeCoding course at Domestika, teaching the first steps of #Python and #py5. The feedback from students always makes me happy!
Check out this work by a student:
https://www.domestika.org/en/projects/1841169-programacion?ttag=a_b_a_villares
And other testimonials:
I have a #CreativeCoding course at Domestika, teaching the first steps of #Python and #py5. The feedback from students always makes me happy!
Check out this work by a student:
https://www.domestika.org/en/projects/1841169-programacion?ttag=a_b_a_villares
And other testimonials:
Updating my #Processing + #Python tools table:
After some years, things changed and my opinions changed a bit too:
#py5 is going supper strong and the ānew snake_case namesā are not an issue for me anymore. I used to worry a lot about all the Processing Python mode examples and teaching materials out there, and some of my own, with āCamelCase Processing namesā Iām not worried at all about it anymore!
For the record, Processing Python mode is just a legacy thing, no one should start anything with it.
The great pure Python Processing implementation project #p5py seems stalled, latest release in Dec. 2023 :((( Advancing it was always going to be an uphill battleā¦
The unrelated Brython based site
p5py.com
seems to be gone, so I removed it from the table.I added a link to my own #pyp5js hack py5pjs/py5mode because this is what Iām using most nowadays.
Updating my #Processing + #Python tools table:
After some years, things changed and my opinions changed a bit too:
#py5 is going super strong and the ānew snake_case namesā are not an issue for me anymore. I used to worry a lot about all the Processing Python mode examples and teaching materials out there, and some of my own, with āCamelCase Processing namesā Iām not worried at all about it anymore!
For the record, Processing Python mode is just a legacy thing, no one should start anything with it.
The great pure Python Processing implementation project #p5py seems stalled, latest release in Dec. 2023 :((( Advancing it was always going to be an uphill battleā¦
The unrelated Brython based site
p5py.com
seems to be gone, so I removed it from the table.I added a link to my own #pyp5js hack py5pjs/py5mode because this is what Iām using most nowadays.
Updating my #Processing + #Python tools table:
After some years, things changed and my opinions changed a bit too:
#py5 is going super strong and the ānew snake_case namesā are not an issue for me anymore. I used to worry a lot about all the Processing Python mode examples and teaching materials out there, and some of my own, with āCamelCase Processing namesā Iām not worried at all about it anymore!
For the record, Processing Python mode is just a legacy thing, no one should start anything with it.
The great āpure Pythonā (no Java required) Processing implementation project #p5py seems stalled, latest release in Dec. 2023 :((( Advancing it was always going to be an uphill battleā¦
The unrelated Brython based site
p5py.com
seems to be gone, so I removed it from the table.I added a link to my own #pyp5js hack py5pjs/py5mode because this is what Iām using most nowadays.
Updating my #Processing + #Python tools table:
After some years, things changed and my opinions changed a bit too:
#py5 is going super strong and the ānew snake_case namesā are not an issue for me anymore. I used to worry a lot about all the Processing Python mode examples and teaching materials out there, and some of my own, with āCamelCase Processing namesā Iām not worried at all about it anymore!
For the record, Processing Python mode is just a legacy thing, no one should start anything new with it.
The great āpure Pythonā (no Java required) Processing implementation project #p5py seems stalled, latest release in Dec. 2023 :((( Advancing it was always going to be an uphill battleā¦
The unrelated #Brython based site
p5py.com
seems to be gone, so I removed it from the table.I added a link to my own #pyp5js hack py5pjs/py5mode because this is the version of pyp5js Iām using most nowadays.
You can explicitly use colors in manpages. I saw this in the apt
manpage of Ubuntu recently, which, for some reason, uses blue text in one place:
https://movq.de/v/de5ab72016/s.png
Makes little sense to me. Iām glad that most manpages donāt do this. I wouldnāt want unicorn vomit all over the place.
Using colors can be done using the low level commands \m
and \M
:
.TH foo_program 3
\m[blue]I'm blue\m[], da ba dee.
\m[red]\M[yellow]I'm red on yellow.\m[]\M[]
This is quite horrible.
@kat@yarn.girlonthemoon.xyz On the one hand, all these programs have a very long history and the technology behind manpages is actually very powerful ā you can use it to write books:
https://www.troff.org/pubs.html
I have two books from that list, for example āThe UNIX programming environmentā:
https://movq.de/v/c3dab75c97/upe.jpg
Itās a bit older, of course, but it looks and feels like a normal book, and it uses the same tech as manpages ā which I think is really cool. š
Itās comparable to LaTeX (just harder/different to use) but much faster than LaTeX. You can also do stuff like render manpages as a PDF (man -Tpdf cp >cp.pdf
) or as an HTML file (man -Thtml cp >cp.html
). I think I once made slides for a talk this way.
On the other hand, traditional manpages (i.e., ones that are not written in mandoc) do not use semantic markup. They literally say, āthis text is bold, that text over here is italicsā, and so on.
So when you run man foo
, it has no other choice but to show it in black, white, bold, underline ā showing it in color would be wrong, because thatās not what the source code of that manpage says.
Colorizing them is a hack, to be honest. Youāre not meant to do this. (The devs actually broke this by accident recently. They themselves arenāt really aware that people use colors.)
If mandoc and semantic markup was more commonly used, I think it would be easier to convince the devs to add proper customizable colors.
In 1996, they came up with the X11 āSECURITYā extension:
https://www.reddit.com/r/linux/comments/4w548u/what_is_up_with_the_x11_security_extension/
This is what could have (eventually) solved the security issues that weāre currently seeing with X11. Those issues are cited as one of the reasons for switching to Wayland.
That extension never took off. The person on reddit wonders why ā I think itās simple: Containers and sandboxes werenāt a thing in 1996. It hardly mattered if X11 was āinsecureā. If you could run an X11 client, you probably already had access to the machine and could just do all kinds of other nasty things.
Today, sandboxing is a thing. Today, this matters.
Iāve heard so many times that āX11 is beyond fixable, itās hopeless.ā I donāt believe that. I believe that these problems are solveable with X11 and some devs have said āyeah, we could have kept working on itā. Itās that people donāt want to do it:
Why not extend the X server?
Because for the first time we have a realistic chance of not having to do that.
https://wayland.freedesktop.org/faq.html
Iām not in a position to judge the devs. Maybe the X.Org code really is so bad that you want to run away, screaming in horror. I donāt know.
But all this was a choice. I donāt buy the argument that we never would have gotten rid of things like core fonts.
All the toolkits and programs had to be ported to Wayland. A huge, still unfinished effort. If that was an acceptable thing to do, then it would have been acceptable to make an āX12ā that keeps all the good things about X11, remains compatible where feasible, eliminates the problems, and requires some clients to be adjusted. (You could have still made āX11X12ā like āXWaylandā for actual legacy programs.)
I wasnāt really aware until recently that programs canāt choose their own windowās position on Wayland. This is very weird to me, because this was not an issue on X11 to begin with: X11 programs can request a certain position and size, but the X11 WM ultimately decides if that request is being honored or not. And users can configure that.
But apparently, this whole thing is a heated debate in the Wayland world. š¤
New World Chaos 7: Program of Life-and-Death | https://nilfm.cc/mixes.html
@prologic@twtxt.net Cool! What program do you use to draw this up?
I wish I could watch this (maybe theyāll record it⦠but Iām not sure):
āFrom #Fortran to #Python: A Conversation Across Generations of #ScientificComputingā #PyOhio
https://www.pyohio.org/2025/program/talks/from-fortran-to-python/
@movq@www.uninformativ.de Huuuhhh?! Did I get this correctly? There are programs installed that miss (some of) their dependencies?! What the heck! O_o
gomdn: Yet another Static Site Generator
Yet another Static Site Generator (SSG), but this one is mine.
Itās a stupidly simple Go program ( wc
says 229 lines), more like a
hack, really, but I donāt need something like Hugo. Most of the real
work is done by the goldmark package, of course. This is mostly just a
wrapper, deciding if something needs to be rebuilt.
Iāve been using a Perl script together with cmark
(originally
Markdown.pl
) since forever. And before that the old [txt2tags](htt ⦠ā Read more
setpriv
on Linux supports Landlock.
Another example:
$ setpriv \
--landlock-access fs \
--landlock-rule path-beneath:execute,read-file:/bin/ls-static \
--landlock-rule path-beneath:read-dir:/tmp \
/bin/ls-static /tmp/tmp/xorg.atom
The first argument --landlock-access fs
says that nothing is allowed.
--landlock-rule path-beneath:execute,read-file:/bin/ls-static
says that reading and executing that file is allowed. Itās a statically linked ls
program (not GNU ls).
--landlock-rule path-beneath:read-dir:/tmp
says that reading the /tmp
directory and everything below it is allowed.
The output of the ls-static
program is this line:
ārwārāārāāāāx 3000 200 07-12 09:19 22'491 ā /tmp/tmp/xorg.atom
It was able to read the directory, see the file, do stat()
on it and everything, the little x
indicates that getting xattrs also worked.
3000
and 200
are user name and group name ā they are shown as numeric, because the program does not have access to /etc/passwd
and /etc/group
.
Adding --landlock-rule path-beneath:read-file:/etc/passwd
, for example, allows resolving users and yields this:
ārwārāārāāāāx cathy 200 07-12 09:19 22'491 ā /tmp/tmp/xorg.atom
The WM_CLASS
Property is used on X11 to assign rules to certain windows, e.g. āthis is a GIMP window, it should appear on workspace number 16.ā It consists of two fields, name
and class
.
Wayland (or rather, the XDG shell protocol ā core Wayland knows nothing about this) only has a single field called app_id
.
When you run X11 programs under Wayland, you use XWayland, which is baked into most compositors. Then you have to deal with all three fields.
Some compositors map name
to app_id
, others map class
to app_id
, and even others directly expose the original name
and class
.
Apparently, there is no consensus.
@prologic@twtxt.net Yeah, this really could use a proper definition or a āmanifestā. š Many of these ideas are not very wide spread. And I havenāt come across similar projects in all these years.
Letās take the farbfeld image format as an example again. I think this captures the āspiritā quite well, because this isnāt even about code.
This is the entire farbfeld spec:
farbfeld is a lossless image format which is easy to parse, pipe and compress. It has the following format:
āāāāāāāāāā¤āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Bytes ā Description ā
ā āāāāāāāāāŖāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā£
ā 8 ā "farbfeld" magic value ā
āāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¢
ā 4 ā 32-Bit BE unsigned integer (width) ā
āāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¢
ā 4 ā 32-Bit BE unsigned integer (height) ā
āāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¢
ā [2222] ā 4x16-Bit BE unsigned integers [RGBA] / pixel, row-major ā
āāāāāāāāāā§āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
The RGB-data should be sRGB for best interoperability and not alpha-premultiplied.
(Now, I donāt know if your screen reader can work with this. Let me know if it doesnāt.)
I think these are some of the properties worth mentioning:
- The spec is extremely short. You can read this in under a minute and fully understand it. That alone is gold.
- There are no āknobsā: Itās just a single version, itās not like thereās also an 8-bit color depth version and one for 16-bit and one for extra large images and one that supports layers and so on. This makes it much easier to implement a fully compliant program.
- Despite being so simple, itās useful. Iāve used it in various programs, like my window manager, my status bars, some toy programs like ātuxeyesā (an Xeyes variant), or Advent of Code.
- The format does not include compression because it doesnāt need to. Just use something like bzip2 to get file sizes similar to PNG.
- It doesnāt cover every use case under the sun, but it does cover the most important ones (imho). They have discussed using something other than RGBA and decided itās not worth the trouble.
- They refrained from adding extra baggage like metadata. It would have needlessly complicated things.
** Om nom nom LLMs, in which I respond to Simon Willisonās analogy **
I am hesitant to wade into the tumultuous waters that are the discourse around generative AI and LLMs, but this morning I came across a thing that so thoroughly melted my brain I feel uncontrollably compelled to respond.
This morning, at evidently 4:10 AM (no mention of timezone), Simon Willison shared the following blog post, quoted here in full:
Quitting programming as ⦠ā Read more
Just realized: One of the reasons why I donāt like āflat UIsā is that they look broken to me. Like the program has a bug, missing pixmaps or whatever.
Take this for example:
https://movq.de/v/8822afccf0/a.png
Iām talking about this area specifically:
https://movq.de/v/8822afccf0/a%2Dhigh.png
One UI element ends and the other one begins ā no ātransitionā between them.
The style of old UIs like these two is deeply ingrained into my brain:
https://movq.de/v/8822afccf0/b.png
https://movq.de/v/8822afccf0/c.png
When all these little elements (borders, handles, even just simple lines, ā¦) are no longer present, then the program looks buggy and broken to me. And Iām not sure if Iāll ever be able to un-learn that.
I did a ālectureā/āworkshopā about this at work today. 16-bit DOS, real mode. š¾ Pretty cool and the audience (devs and sysadmins) seemed quite interested. š„³
- People used the Intel docs to figure out the instruction encodings.
- Then they wrote a little DOS program that exits with a return code and they used uhex in DOSBox to do that. Yes, we wrote a COM file manually, no Assembler involved. (Many of them had never used DOS before.)
- DEBUG from FreeDOS was used to single-step through the program, showing what it does.
- This gets tedious rather quickly, so we switched to SVED from SvarDOS for writing the rest of the program in Assembly language. nasm worked great for us.
- At the end, we switched to BIOS calls instead of DOS syscalls to demonstrate that the same binary COM file works on another OS. Also a good opportunity to talk about bootloaders a little bit.
- (I think they even understood the basics of segmentation in the end.)
The 8086 / 16-bit real-mode DOS is a great platform to explain a lot of the fundamentals without having to deal with OS semantics or executable file formats.
Now that was a lot of fun. š„³ Itās very rare that we do something like this, sadly. I love doing this kind of low-level stuff.
** Of fairies, compost, and computers **
Lately Iāve buried myself in reading fiction. Stand outs from among the crowd are, of course, Middlemarch but also a lot of sort of scholarly fairy fiction; works that follow the scholastic adventures of studious professorial types in vaugely magical settings. Namely Emily Wildeās Encyclopedia of Faeriesā, Heather Fawcett and The Ten Thousand Doors of January, Alix E. Harrow.
Iāve also been working on a handful of personal utility programs. I ⦠ā Read more
Saw this on Mastodon:
https://racingbunny.com/@mookie/114718466149264471
18 rules of Software Engineering
- You will regret complexity when on-call
- Stop falling in love with your own code
- Everything is a trade-off. Thereās no ābestā 3. Every line of code you write is a liability 4. Document your decisions and designs
- Everyone hates code they didnāt write
- Donāt use unnecessary dependencies
- Coding standards prevent arguments
- Write meaningful commit messages
- Donāt ever stop learning new things
- Code reviews spread knowledge
- Always build for maintainability
- Ask for help when youāre stuck
- Fix root causes, not symptoms
- Software is never completed
- Estimates are not promises
- Ship early, iterate often
- Keep. It. Simple.
Solid list, even though 14 is up for debate in my opinion: Software can be completed. You have a use case / problem, you solve that problem, done. Your software is completed now. There might still be bugs and they should be fixed ā but this doesnāt āaddā to the program. Donāt use āsoftware is never doneā as an excuse to keep adding and adding stuff to your code.
Okay, hereās a thing I like about Rust: Returning things as Option
and error handling. (Or the more complex Result
, but itās easier to explain with Option
.)
fn mydiv(num: f64, denom: f64) -> Option<f64> {
// (Letās ignore precision issues for a second.)
if denom == 0.0 {
return None;
} else {
return Some(num / denom);
}
}
fn main() {
// Explicit, verbose version:
let num: f64 = 123.0;
let denom: f64 = 456.0;
let wrapped_res = mydiv(num, denom);
if wrapped_res.is_some() {
println!("Unwrapped result: {}", wrapped_res.unwrap());
}
// Shorter version using "if let":
if let Some(res) = mydiv(123.0, 456.0) {
println!("Hereās a result: {}", res);
}
if let Some(res) = mydiv(123.0, 0.0) {
println!("Huh, we divided by zero? This never happens. {}", res);
}
}
You canāt divide by zero, so the function returns an āerrorā in that case. (Option
isnāt really used for errors, IIUC, but the basic idea is the same for Result
.)
Option
is an enum. It can have the value Some
or None
. In the case of Some
, you can attach additional data to the enum. In this case, we are attaching a floating point value.
The caller then has to decide: Is the value None
or Some
? Did the function succeed or not? If it is Some
, the caller can do .unwrap()
on this enum to get the inner value (the floating point value). If you do .unwrap()
on a None
value, the program will panic and die.
The if let
version using destructuring is much shorter and, once you got used to it, actually quite nice.
Now the trick is that you must somehow handle these two cases. You must either call something like .unwrap()
or do destructuring or something, otherwise you canāt access the attached value at all. As I understand it, it is impossible to just completely ignore error cases. And the compiler enforces it.
(In case of Result
, the compiler would warn you if you ignore the return value entirely. So something like doing write()
and then ignoring the return value would be caught as well.)
We really are bouncing back and forth between flat UIs and beveled UIs. I mean, this is what old X11 programs looked like:
https://www.uninformativ.de/desktop/2025%2D06%2D21%2D%2Dkatriawm%2Dold%2Dxorg%2Dapps.png
Good luck figuring out which of these UI elements are click-able ā unless you examine every pixel on the screen.
pledge()
and unveil()
syscalls:
@movq@www.uninformativ.de That sounds great! (Well, they actually must have recorded the audio with a potato or so.) You talked about pledge(ā¦)
and unveil(ā¦)
before, right? I somewhere ran across them once before. Never tried them out, but these syscalls seem to be really useful. They also have the potential to make one really rethink about software architecture. I should probably give this a try and see how I can improve my own programs.
@prologic@twtxt.net Iām trying to call some libc functions (because the Rust stdlib does not have an equivalent for getpeername()
, for example, so I donāt have a choice), so I have to do some FFI stuff and deal with raw pointers and all that, which is very gnarly in Rust ā because youāre not supposed to do this. Things like that are trivial in C or even Assembler, but I have not yet understood what Rust does under the hood. How and when does it allocate or free memory ⦠is the pointer that I get even still valid by the time I do the libc call? Stuff like that.
I hope that I eventually learn this over time ⦠but I get slapped in the face at every step. Itās very frustrating and Iām always this š¤ close to giving up (only to try again a year later).
Oh, yeah, yeah, I guess I could ājustā use some 3rd party library for this. socket2 gets mentioned a lot in this context. But I donāt want to. I literally need one getpeername()
call during the lifetime of my program, I donāt even do the socket()
, bind()
, listen()
, accept()
dance, I already have a fully functional file descriptor. Using a library for that is total overkill and Iād rather do it myself. (And look at the version number: 0.5.10
. The library is 6 years old but theyāre still saying: āNah, weāre not 1.0 yet, we reserve the right to make breaking changes with every new release.ā So many Rust libs are still unstable ā¦)
⦠and I could go on and on and on ⦠š¤£
OpenBSD has the wonderful pledge()
and unveil()
syscalls:
https://www.youtube.com/watch?v=bXO6nelFt-E
Not only are they super useful (the program itself can drop privileges ā like, it can initialize itself, read some files, whatever, and then tell the kernel that it will never do anything like that again; if it does, e.g. by being exploited through a bug, it gets killed by the kernel), but they are also extremely easy to use.
Imagine a server program with a connected socket in file descriptor 0. Before reading any data from the client, the program can do this:
unveil("/var/www/whatever", "r");
unveil(NULL, NULL);
pledge("stdio rpath", NULL);
Done. Itās now limited to reading files from that directory, communicating with the existing socket, stuff like that. But it cannot ever read any other files or exec()
into something else.
I canāt wait for the day when we have something like this on Linux. There have been some attempts, but itās not that easy. And itās certainly not mainstream, yet.
I need to have a closer look at Linuxās Landlock soon (āsoonā), but this is considerably more complicated than pledge()
/unveil()
:
On my blog: Developer Diary, Day of the African Child https://john.colagioia.net/blog/2025/06/16/african-child.html #programming #project #devjournal
So I was using this function in Rust:
https://doc.rust-lang.org/std/path/struct.Path.html#method.display
Note the little 1.0.0
in the top right corner, which means that this function has been āstable since Rust version 1.0.0ā. Weāre at 1.87 now, so weāre good.
Then I compiled my program on OpenBSD with Rust 1.86, i.e. just one version behind, but well ahead of 1.0.0.
The compiler said that I was using an unstable library feature.
Turns out, that function internally uses this:
https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.display
And that is only available since Rust 1.87.
How was I supposed to know this? š¤Øš«©
Having some fun with SIRDS this morning.
What you should see: https://movq.de/v/dae785e733/disp.png
And the tutorial I used for my C program: https://www.ime.usp.br/~otuyama/stereogram/basic/index.html
āShe didnāt want to leaveā: Program to help people using libraries as safe spaces
A Perth library trials a social worker program after noticing an increase in people using libraries as a safe space. ā Read more
Queensland shark control plan goes against government commissioned advice
The KPMG report stresses that while ātraditional measuresā are still required, the program needs to transition away from āenvironmentally harmful practicesā, such as drumlines and mesh nets. ā Read more
Killing more than breast and prostate, our deadliest cancer to get screening
After years of lobbying from patients, the first ever national lung cancer screening program will roll out next month for people who have a significant history of smoking. ā Read more
Tasmanian land program yet to deliver affordable lots for homes
Developers in Tasmania can apply for a rebate to offset some of the costs associated with subdivisions. Itās part of a program aimed at fast-tracking lots for āaffordableā sales but, after 10 months not one affordable lot has been sold. ā Read more
The diabetes program lifting people out a āreally dark placeā
When Kelly Anderson suddenly lost her daughter, she became depressed and rapidly gained weight. A community exercise program helped turn her life around. ā Read more
On my blog: Developer Diary, International Sex Workersā Day https://john.colagioia.net/blog/2025/06/02/sex-workers.html #programming #project #devjournal
Brain injury survivors connecting through rhythm and music
The NeuroRhythm program combines dance with Djembe drumming to offer participants a space to express themselves and connect with others. ā Read more
[$] Allowing BPF programs more access to the network
MahƩ Tardy led two sessions about some of the challenges that he, Kornilios Kourtis,
and John Fastabend have run into in their work on
Tetragon (Apache-licensed BPF-based security monitoring software)
at the Linux Storage, Filesystem, Memory Management, and BPF Summit. The session
prompted discussion about the feasibility of letting BPF programs
send data over the network, as well as potential new kfuncs to let BPF firewalls
send TCP reset packets. Tardy pre ⦠ā Read more
Apple Launches Self Service Repair for iPad
Apple today announced that its Self Service Repair program is expanding to the iPad.
The program will provide āiPadā owners with manuals, genuine Apple parts, ⦠ā Read more
On my blog: Developer Diary, Memorial Day https://john.colagioia.net/blog/2025/05/26/memorial.html #programming #project #devjournal
For context, this is a funny
Interaction between an engineer and copilot on Microsoftās core programming Language š¤£š¤Æ
One of the nicest things about Go is the language itself, comparing Go to other popular languages in terms of the complexity to learn to be proficient in:
- Go:
25
keywords (Stack Overflow); CSP-style concurrency (goroutines & channels)
- Python 2:
30
keywords (TutorialsPoint); GIL-bound threads & multiprocessing (Wikipedia)
- Python 3:
35
keywords (Initial Commit); GIL-bound threads,asyncio
& multiprocessing (Wikipedia, DEV Community)
- Java:
50
keywords (Stack Overflow); threads +java.util.concurrent
(Wikipedia)
- C++:
82
keywords (Stack Overflow);std::thread
, atomics & futures (en.cppreference.com)
- JavaScript:
38
keywords (Stack Overflow); single-threaded event loop &async/await
, Web Workers (Wikipedia)
- Ruby:
42
keywords (Stack Overflow); GIL-bound threads (MRI), fibers & processes (Wikipedia)
On my blog: Firefoxās Tabs https://john.colagioia.net/blog/2025/05/21/firefox-tabs.html #programming #techtips
On my blog: Developer Diary, Malcolm X Day https://john.colagioia.net/blog/2025/05/19/malcolm-x.html #programming #project #devjournal
@kat@yarn.girlonthemoon.xyz I only listened to you while going through my photos, so I did not pay very close attention. :-)
Since you have a proper server ā haha, not just one ā and hence are not limited, I suggest you learn a real programming language and donāt waste your time with this PHP mess. It might have improved a wee bit since I was a kid, but it felt like some hacked together shit. The defaults also were questionable at best, it was easier to hold it wrong than right. This stands testament to bad design and is especially terrible from a security point of view.
Youāre right, programming is like any other craft. You only truly learn by actually doing it. And this just takes time. Very long time to master it. Or as close to as it gets. The more you know, the more you realize what else you donāt know (yet). Itās a never ending process. So, take it easy, donāt get discouraged, happy hacking and enjoy the endeavor! :-)
On my blog: Firefoxās Local Storage https://john.colagioia.net/blog/2025/05/14/firefox-local-storage.html #programming #techtips
I have zero mental energy for programming at the moment. š«¤
Iāll try to implement the new hashing stuff in jenny before the ādeadlineā. But I donāt think youāll see any texudus development from me in the near future. ā¹ļø
tar
and find
were written by the devil to make sysadmins even more miserable
@kat@yarn.girlonthemoon.xyz @prologic@twtxt.net Given that all these programs are super old (tar
is from the late 1970ies), while trying to retain backwards-compatibilty, Iām not surprised that the UI isnāt too great. š¤
find
has quite a few pitfalls, that is very true. At work, we donāt even use it anymore in more complex scenarios but write Python scripts instead. find
can be fast and efficient, but fewer and fewer people lack the knowledge to use it ⦠The same goes for Shell scripting in general, actually.
On my blog: Developer Diary, International Nurses Day https://john.colagioia.net/blog/2025/05/12/nurses.html #programming #project #devjournal
** Dad shrapnel **
In a flash I think Iāgetā liveliness in relation to programming. Itās talked so much about in the context of programming systems and languages ā as being something they do or do not intrinsically have or supportā¦but what if itās actually about the process of doing the thing, and not inherent to the thing you do it with. A noun-gerund kinda dichotomy.
Left with dad shrapnel, 5 minutes here, 20 there, 120 on the horizon, with which to poke at projects what if the key to collaboration is liveliness? Sporadic, low ⦠ā Read more
** Collaboration is a scary word **
I like programming partially because itās a practice I can, with appropriate to unhealthy application of effort, usually accomplish something at least proximal to my intention.
This isnāt true for visual art, nor music. Lately Iāve been feeling like the little games and toys I wanna make are sorta hampered by my total inability to make stuff I find aesthetically appealingā¦soā¦Iāve been thinking about collaboration. Which is a scary word because, you know, other people and all, but I figured Iād ⦠ā Read more
[$] LWN.net Weekly Edition for May 8, 2025
Inside this weekās LWN.net Weekly Edition:
Front: Debian and essential packages; Custom BPF OOM killers; Speculation barriers for BPF programs; More LSFMM+BPF 2025 coverage.
Briefs: Deepin on openSUSE; AUTOSEL; Mission Center 1.0.0; OASIS ODF; Redis license; USENIX ATC; Quotes; ā¦
Announcements: Newsletters, conferences, security updates, patches, and more. ā Read more
[$] Hash table memory usage and a BPF interpreter bug
Anton Protopopov led a short discussion at the 2025 Linux Storage, Filesystem,
Memory-Management, and BPF Summit about amount of memory used
by hash tables in BPF programs. He thinks that the current memory layout is
inefficient, and wants to split the structure that holds table entries into two
variants for different kinds of maps. When that proposal proved
uncontroversial, he also took the chance to talk about a bug in BPFās call
instruction. ā Read more
Release Candidate of iOS 18.5, MacOS Sequoia 15.5, iPadOS 18.5 Available, Public Release Coming Soon
A release candidate build for iOS 18.5, iPadOS 18.5, and MacOS Sequoia 15.5 is now available for users enrolled in the beta testing programs. For users not in the beta testing programs, what this basically means is that the final versions of these system software releases is coming soon, perhaps even next week. macOS Sequoia ⦠[Read More ⦠ā Read more
[$] Injecting speculation barriers into BPF programs
The disclosure of the Spectre\āØclass of hardware vulnerabilities created a lot of pain for kernel
developers (and many others). That pain was especially acutely felt in the
BPF community. While an attacker might have to painfully search the kernel
code base for exploitable code, an attacker using BPF can simply write and
load their own speculation gadgets, which is a much more efficient way of
operating. The BPF comm ⦠ā Read more
On my blog: Developer Diary, Day of the Midwife https://john.colagioia.net/blog/2025/05/05/midwives.html #programming #project #devjournal
@andros@twtxt.andros.dev Programming is art. You become good at art by practising your art. You learn artistic patterns by being inspired by and reading others art works. The most importance however is that you practise your art.
Nobody want to be a shitty programmer. The question is: Do you do anything not to not be one?
Reading blogs or social media and watching YouTube videos is fun. After them, your code may be a little better, of course. But you need a lot. You need to study! Read good books and study the code of other programmers, for example. Maybe work with a new language, architectures and paradigms. You need break the routine.
If you know Object-oriented programming, you learn functional programming.
If you know Model-View-Controller, you learn Model-View-ViewModel.
If you donāt know anything about architectures, you learn Clean Architecture, Hexagonal Architecture, etc.
If you know Python, you learn Ruby or Go.
If you know Clojure or Lisp⦠you donāt need to learn anything else. You are already a good programmer. Just kidding. You can learn Elixir or Scala.
Be a good programmer my friend.
@bender@twtxt.net Yes, you right. But is premium for more than that.
I use a feature I love a lot: customising different searches with different themes or links.
Itās easy to understand with an example. I have a search with the name āDjangoā. I set sources: Django documentation, stack overflow, topic āprogrammingā and so on. Itās very quick to find Django solutions.
I also have another way to find my stuff: search my blog and repositories.
I had problems paying for the first mouths, now itās a working tool for me.
Confession:
Iāve never found microblogging like twtxt or the Fediverse or any other āmodernā social media to be truly fulfilling/satisfying.
The reason is that it is focused so much on people. You follow this or that person, everybody spends time making a nice profile page, the posts are all very āego-centricā. Seriously, it feels like everybody is on an ego-trip all the time (this is much worse on the Fediverse, not so much here on twtxt).
I miss the days of topic-based forums/groups. A Linux forum here, a forum about programming there, another one about a certain game. Stuff like that. That was really great ā and it didnāt even suffer from the need to federate.
Sadly, most of these forums are dead now. Especially the nerds spend a lot of time on the Fediverse now and have abandoned forums almost completely.
On Mastodon, you can follow hashtags, which somewhat emulates a topic-based experience. But itās not that great and the protocol isnāt meant to be used that way (just read the snac2 docs on this issue). And the concept of ālikesā has eliminated lots of the actual user interaction. ā¹ļø
@lyse@lyse.isobeef.org Oh, no, this is vastly exaggerated. Neil deGrass Tyson says, the earth is smoother than a cue ball (billiard): https://www.youtube.com/watch?v=OMP5dNsZ-6k That would make for a very dull OpenGL program, though. š
@movq@www.uninformativ.de Agreed, finding the right motivation can be tricky. You sometimes have to torture yourself in order to later then realize, yeah, that was actually totally worth it. Itās often hard.
I think if you find a project or goal in general that these kids want to achieve, that is the best and maybe only choice with a good chance of positive outcome. I donāt know, like building a price scraper, a weather station or whatever. Yeah, these are already too advanced if they never programmed, but you get the idea. If they have something they want to build for themselves for their private life, that can be a great motivator Iāve experienced. Or you could assign āem the task to build their own twtxt client if they donāt have any own suitable ideas. :-)
Showing them that you do a lot of your daily work in the shell can maybe also help to get them interested in text-based boring stuff. Or at least break the ice. Lead by example. The more I think about it, the more I believe this to be very important. Thatās how I still learn and improve from my favorite workmate today in general. Which Iām very thankful of.
Remembered a fun little āhello worldā program I made in 2018:
https://movq.de/v/a1c4a819e6/vid.mp4
(It runs smoothly. My computer just isnāt fast enough for a smooth X11 screengrab at that resolution.)
Weāre all old farts. When we started, there werenāt a lot of options. But today? Iād be completely overwhelmed, I think.
Hence, Iād recommend to start programming with a console program. As for the language, not sure. But Python is probably a good choice
Thatās what I usually do (when we have young people at work who never really programmed before), but it doesnāt really āhitā them. Theyāve seen so much, crazy graphics, web pages, itās all fancy. Just some text output is utterly boring these days. ā¹ļø And thatās my problem: I have no idea how I could possibly spark some interest in things like pointers or something ālow-levelā like that. And I truly believe that you need to understand things like pointers in order to program, in general.
4th Beta of iOS 18.5, MacOS Sequoia 15.5, iPadOS 18.5 Available for Testing
Apple has issued the fourth beta version of iOS 18.5, macOS Sequoia 15.5, and iPadOS 18.5, for users participating in the beta testing programs for apple system software. There are also new betas available for watchOS, tvOS, and visionOS, if those are applicable to you. No significant new features or changes are expected in any ⦠[Read More](https://osxdaily.com/2025/04/28/4th-beta-of- ⦠ā Read more
@xuu@txt.sour.is Hahaha, thatās cool! You were (and still are) way ahead of me. :-)
We started with a simple traffic light phase and then added pedestrian crossing buttons. But only painting it on the canvas. In our computer room there was an actual traffic light on the wall and at the very end of the school year our IT basics teacher then modified the program to actually control the physical traffic light. That was very impressive and completely out of reach for me at the time. That teacher pulled the first lever for me ending up where I am now.
[$] Inline socket-local storage for BPF
Martin Lau gave a talk in the BPF track of the 2025 Linux Storage, Filesystem,
Memory-Management, and BPF Summit about a performance problem
plaguing the networking subsystem, and some potential ways to fix it. He works on
BPF programs that need to store socket-local data; amid other improvements to
the networking and BPF subsystems, retrieving that data has become a noticeable
bottleneck for his use case. His proposed fix prompted a good deal of discussion
about how the data should be laid out ⦠ā Read more
On my blog: Developer Diary, Workersā Memorial Day https://john.colagioia.net/blog/2025/04/28/workers-memorial.html #programming #project #devjournal
@movq@www.uninformativ.de I started with Delphi in school, the book (that we never ever used even once and I also never looked at) taught Pascal. The UI part felt easy at first but prevented me from understanding fundamental stuff like procedures or functions or even begin
and end
blocks for if
s or loops. For example I always thought that I needed to have a button somewhere, even if hidden. That gave me a handler procedure where I could put code and somehow call it. Two or three years later, a new mate from the parallel class finally told me that this wasnāt necessary and how to do thing better.
You know all too well that back in the day there was not a whole lot of information out there. And the bits that did exist were well hidden. At least from me. Eventually discovering planet-quellcodes.de (I donāt remember if that was the original forum or if that got split off from some other board) via my best schoolmate was like finding the Amber Room. Yeah, reading the ITG book would have been a very good idea for sure. :-)
In hindsight, a console program without the UI overhead might have been better. At least for the very start. Much less things to worry about or get lost.
Hence, Iād recommend to start programming with a console program. As for the language, not sure. But Python is probably a good choice, it doesnāt require a lot of surrounding boilerplate like, say Java or Go. It also does exceptionally well in the principle of least surprise.
I should probably clarify: Which language/platform? Something graphical or web-based right from the beginning or do you start with a console program?
To the parents or teachers: How do you teach kids to program these days? š¤
[$] Code signing for BPF programs
The Linux kernel can be configured so that
kernel modules must be signed or
otherwise authenticated to be loaded
into the kernel. Some BPF developers want that to be an option for BPF programs
as well ā after all, if those are going to run as part of the kernel,
they should be subject to the same code-signing requirements. Blaise Boscaccy
and Cong Wang presented two different visions for how BPF code signing could
work at the 2025 Linux Storage, Filesystem, Memory ⦠ā Read more
Beta 3 of iOS 18.5, MacOS Sequoia 15.5, iPadOS 18.5 Released for Testers
In what must be the most exciting thing to happen on a Monday since the prior Monday, Apple has released the third beta version of iOS 18.5, MacOS Sequoia 15.5, and iPadOS 18.5. These new thrilling third beta versions are available to the developer wizards participating in the beta testing programs of Apple system software, ⦠[Read More](https://osxdaily.com/2025/04/21/beta-3-of-ios-18-5-mac ⦠ā Read more
On my blog: Developer Diary, Grounation Day https://john.colagioia.net/blog/2025/04/21/grounation.html #programming #project #devjournal
[$] Taking BPF programs beyond one-million instructions
The BPF verifier is not magic; it cannot solve the
halting problem. Therefore,
it has to err on the side of assuming that a program will run too long if it
cannot prove that the program will not.
The ultimate check on the size of a BPF program is the
one-million-instruction limit ā the verifier will refuse to process more than
one-million instructions, no matter what a BPF program does. Alexei Starovoitov gave
a talk at the 2025 L ⦠ā Read more
CISA extends funding to the CVE program (BleepingComputer)
Sergiu Gatlan reports
that the US government has extended funding for the Common
Vulnerabilities and Exposures (CVE) program, following yesterdayās reports that funding
would run out as of AprilĀ 16.
āThe CVE Program is invaluable to cyber community and a priority of
CISA,ā the U.S. cybersecurity agency told BleepingCompu ⦠ā Read more
MITRE Warns CVE Program Faces Disruption (Security Week)
Security Week is one of several outlets reporting
that the funding for the CVE program at MITRE disappears as of
AprilĀ 16.
Maintained by MITRE Corporation, a not-for-profit organization that
operates federal R&D centers, the CVE program is funded through
multiple channels, including the U.S. government, industry
partnerships, and international organizations.
⦠ā Read more
Beta 2 of iOS 18.5, MacOS Sequoia 15.5, iPadOS 18.5 Released for Testers
New betas are available as iOS 18.5 beta 2, MacOS Sequoia 15.5 beta 2, and iPadOS 18.5 beta 2, for users who are participating in the beta testing programs for Apple system software. No notable new features or major changes are expected in these beta versions, at least thus far, suggesting theyāre likely focused on ⦠[Read More](https://osxdaily.com/2025/04/14/beta-2-of-ios-18-5-macos-sequoi ⦠ā Read more