@prologic@twtxt.net Nothing stops you from programming while in Vietnam. đđđ
FTR, I see one (two) issues with PyQt6, sadly:
- The PyQt6 docs appear to be mostly auto-generated from the C++ docs. And they contain many errors or broken examples (due to the auto-conversion). I found this relatively unpleasent to work with.
- (Until Python finally gets rid of the Global Interpreter Lock properly, itâs not really suited for GUI programs anyway â in my opinion. You canât offload anything to a second thread, because the whole program is still single-threaded. This would have made my fractal rendering program impossible, for example.)
@prologic@twtxt.net Hm, same startup delay. (Go is not an option for me anyway.)
Itâs hard to tell why all this is so slow. Maybe in this particular case it has something to do with fonts: strace shows the program loading the fontconfig configs several times, and that takes up a bulk of the startup time. đ€ (Qt6 or Java donât do that, but theyâre still slow to start up â for other reasons, apparently.)
To be fair, itâs âjustâ the initial program startup (with warm I/O caches). Once itâs running, itâs fine. All toolkits Iâve tried are. But I donât want to accept such delays, not in the year 2025. đ Imagine every terminal window needing half a second to appear on the screen ⊠nah, man.
Be it Java with Swing or PyQt6, it takes ~300 ms until a basic window with a treeview and a listbox appears. That is a very noticeable delay.
Is it unrealistic to expect faster startup times these days? đ€
Once the program is running, a new second window (in the same process) appears very quickly. So itâs all just the initialization stuff that takes so long. I could, of course, do what âfatâ programs have done for ages: Pre-launch the process during boot, windowless. But I was hoping that this wasnât needed. đ (And itâs a bad model anyway. When the main process crashes, all windows crash with it.)
@prologic@twtxt.net Letâs go through it one by one. Hereâs a wall of text that took me over 1.5 hours to write.
The criticism of AI as untrustworthy is a problem of misapplication, not capability.This section says AI should not be treated as an authority. This is actually just what I said, except the AI phrased/framed it like it was a counter-argument.
The AI also said that users must develop âAI literacyâ, again phrasing/framing it like a counter-argument. Well, that is also just what I said. I said you should treat AI output like a random blog and you should verify the sources, yadda yadda. That is âAI literacyâ, isnât it?
My text went one step further, though: I said that when you take this requirement of âAI literacyâ into account, you basically end up with a fancy search engine, with extra overhead that costs time. The AI missed/ignored this in its reply.
Okay, so, the AI also said that you should use AI tools just for drafting and brainstorming. Granted, a very rough draft of something will probably be doable. But then you have to diligently verify every little detail of this draft â okay, fine, a draft is a draft, itâs fine if it contains errors. The thing is, though, that you really must do this verification. And I claim that many people will not do it, because AI outputs look sooooo convincing, they donât feel like a draft that needs editing.
Can you, as an expert, still use an AI draft as a basis/foundation? Yeah, probably. But hereâs the kicker: You did not create that draft. You were not involved in the âthought processâ behind it. When you, a human being, make a draft, you often think something like: âOkay, I want to draw a picture of a landscape and thereâs going to be a little house, but for now, Iâll just put in a rough sketch of the house and add the details later.â You are aware of what you left out. When the AI did the draft, you are not aware of whatâs missing â even more so when every AI output already looks like a final product. For me, personally, this makes it much harder and slower to verify such a draft, and I mentioned this in my text.
Skill Erosion vs. Skill EvolutionYou, @prologic@twtxt.net, also mentioned this in your car tyre example.
In my text, I gave two analogies: The gym analogy and the Google Translate analogy. Your car tyre example falls in the same category, but Geminiâs calculator example is different (and, again, gaslight-y, see below).
What I meant in my text: A person wants to be a programmer. To me, a programmer is a person who writes code, understands code, maintains code, writes documentation, and so on. In your example, a person who changes a car tyre would be a mechanic. Now, if you use AI to write the code and documentation for you, are you still a programmer? If you have no understanding of said code, are you a programmer? A person who does not know how to change a car tyre, is that still a mechanic?
No, youâre something else. You should not be hired as a programmer or a mechanic.
Yes, that is âskill evolutionâ â which is pretty much my point! But the AI framed it like a counter-argument. It didnât understand my text.
(But what if thatâs our future? What if all programming will look like that in some years? I claim: Itâs not possible. If you donât know how to program, then you donât know how to read/understand code written by an AI. You are something else, but youâre not a programmer. It might be valid to be something else â but that wasnât my point, my point was that youâre not a bloody programmer.)
Geminiâs calculator example is garbage, I think. Crunching numbers and doing mathematics (i.e., âcomplex problem-solvingâ) are two different things. Just because you now have a calculator, doesnât mean itâll free you up to do mathematical proofs or whatever.
What would have worked is this: Letâs say youâre an accountant and you sum up spendings. Without a calculator, this takes a lot of time and is error prone. But when you have one, you can work faster. But once again, thereâs a little gaslight-y detail: A calculator is correct. Yes, it could have âbugsâ (hello Intel FDIV), but its design actually properly calculates numbers. AI, on the other hand, does not understand a thing (our current AI, that is), itâs just a statistical model. So, this modified example (âaccountant with a calculatorâ) would actually have to be phrased like this: Suppose thereâs an accountant and you give her a magic box that spits out the correct result in, what, I donât know, 70-90% of the time. The accountant couldnât rely on this box now, could she? Sheâd either have to double-check everything or accept possibly wrong results. And that is how I feel like when I work with AI tools.
Gemini has no idea that its calculator example doesnât make sense. It just spits out some generic âargumentâ that it picked up on some website.
3. The Technical and Legal Perspective (Scraping and Copyright)The AI makes two points here. The first one, I might actually agree with (âbad bot behavior is not the fault of AI itselfâ).
The second point is, once again, gaslighting, because it is phrased/framed like a counter-argument. It implies that I said something which I didnât. Like the AI, I said that you would have to adjust the copyright law! At the same time, the AI answer didnât even question whether itâs okay to break the current law or not. It just said âlol yeah, change the lawsâ. (I wonder in what way the laws would have to be changed in the AIâs âopinionâ, because some of these changes could kill some business opportunities â or the laws would have to have special AI clauses that only benefit the AI techbros. But I digress, that wasnât part of Geminiâs answer.)
tl;drExcept for one point, I donât accept any of Geminiâs âcriticismâ. It didnât pick up on lots of details, ignored arguments, and I can just instinctively tell that this thing does not understand anything it wrote (which is correct, itâs just a statistical model).
And it framed everything like a counter-argument, while actually repeating what I said. Thatâs gaslighting: When Alice says âthe sky is blueâ and Bob replies with âwhy do you say the sky is purple?!â
But it sure looks convincing, doesnât it?
Never againThis took so much of my time. I wonât do this again. đ
âComputação e o ensino superior artĂstico portuguĂȘs: currĂculos e prĂĄticas nos cursos de graduação pĂșblicosâ
âComputing and the Portuguese higher arts education: curricula and practices in public undergraduate programsâ
https://www.scielo.br/j/ep/a/dmVzQzqPXTjdPn7dBFtsvnw/?lang=pt
Javaâs Swing is allegedly in âmaintenance modeâ, so I doubt itâs a good idea to use it for new programs. For example, I very much doubt that it will ever support Wayland.
The replacement is supposed to be JavaFX, but thatâs not included in JREs â anymore! It used to be, now itâs not, even though itâs well over 15 years old now.
This whole thing (âJava GUIsâ) appears to have stagnated a lot. Probably because everything is web stuff these days âŠ
https://www.oracle.com/java/technologies/javafx/faq-javafx.html#6
@movq@www.uninformativ.de Uh, that actually looks not that terrible. Somehow, I remember Swing GUIs being way uglier.
As for Visual Basic, I only had to use VBA once in my life. That was in the beginning of my career when I inherited a project from a leaving coworker. Fuck me, was that awful. Just alone the damn compiler error dialog box popping up in my face all the time while editing and the compiler already trying to parse the unfinished and hence of course uncompilable code. Boy, that left a lasting impression on me. I ported everything to Java very quickly. Luckily, the code base wasnât all that large at that point in time. I had to add a bunch of new features after that, so I was very glad that I convinced my workmate/project manager to do that first. We didnât even need a GUI, the button in Excel was transformed to a command line program that just generated the large file.
But I cannot comment on the VB GUI designer, I never used that. Your screenshot looks very similar to the Delphi one, though. Only towards the end of my Delphi days I found out about the possibility to make the widgets snap to window edges and corners (I donât remember how that was called), so that resizing the windows was actually possible without messing up their entire contents.
Switching to Linux, Delphi wasnât an option anymore. For some reason I couldnât use Kylix. Maybe it was already dead by the time I changed OSes. Or I couldnât get it to run. I just donât remember. I just recall that the unavailability of Delphi was the reason it took me a while to actually settle on Linux. I then fully switched to Java. The GridBagLayout was my absolutely favorite Swing layout manager. I reckon I used it 98% of the time, because it was so powerful and made the windows resize properly, just as I had learned to do in Delphi shortly before.
Up until discovering Swing, I used Javaâs AWT for a short amount of time. That was very limited I think and I hit the limits fairly quickly. Later at uni, we had one project making use of SWT. Didnât convince me either. I could be wrong, but I think there was also a SWT GUI designer plugin for Eclipse. If there really was, that one wasnât in the same street as Delphiâs (there must be a reason I forgot about it ;-)).
The one for Delphi was quite good.
It was! I didnât use Delphi for long, though. Dunno why, I always gravitated towards Visual Basic back then. đ
These days I donât deal with GUI programming anymore.
I also avoid it when possible, because ⊠itâs exhausting, because ⊠the tools that I have/know are âsubparâ. Doing anything regarding GUIs always feels like a chore. That wasnât the case in the VB days.
Well, I made this in ~2009 with Java/Swing and it was pretty nice to work with, custom widgets and all:
https://movq.de/v/de26d5edb3/s.png
I wouldnât dare doing this with GTK.
@movq@www.uninformativ.de The one for Delphi was quite good. But JCreator (I donât remember exactly) was awful and I never looked back to GUI designers. Always layed out the GUI by hand in code myself since then. These days I donât deal with GUI programming anymore.
Theming on Qt6 is a bit unusual (you have to install qt6ct and then set an environment variable for every Qt program?), but at least pcmanfm-qt doesnât look like brain damage anymore now. đ€ (Except thereâs no darkmode. What is this, 1980?)
Oregon State University Teaches âWhite Rageâ as Computer Science
OSUâs Computer Science program â which had a $1 Million Dollar grant for âGender-Inclusive Open Sourceâ â teaches about âWhite Supremacyâ and âReparationsâ instead of programming. â Read more
@dce@hashnix.club Arch is the most stress-free OS Iâve ever run (I last reinstalled it 14 years ago, only rolling updates since then) â but to be honest, I sometimes wonder what role my general choice of software plays. I mostly run minimalistic software or programs that I wrote myself. I guess that greatly reduces the chance of breakage. đ€
Account Take Over | P1âââCritical
It started off like any other day until I got an unexpected emailâââan invite to a private bug bounty program. Curious, I jumped in. TheâŠ
[Continue reading on InfoSec Write-ups »](https://infosecwriteups.com/account-take-over-p1-critical-5468ce8218b9?sour ⊠â Read more
22. How to Get Invites to Private Programs
Unlock the secrets to landing exclusive private program invites and level up your bug bounty journey.
[Continue reading on InfoSec Write-ups »](https://infosecwriteups.com/22-how-to-get-invites-to-private-programs-9bbb5166 ⊠â Read more
Beyond the AI Hype: Guido van Rossum on Pythonâs Philosophy, Simplicity, and the Future of Programming
Comments â Read more
Carney announces long-awaited automatic tax filing, makes school food program permanent â Read more
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.
Lobsters Interview with Zdsmith
I had the pleasure of interviewing, befriending @zdsmith whose passions are very close to my heart. He explores the different forms of notation (Iverson, Naur), makes combinatory programming approachable, ported J to Janet, created an ergonomic notation for requirements gathering, designed his own [shorthands](https://blog.zdsmith.com/series/sh ⊠â Read more
[$] 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
Python 3.14.0 (final) is here
This is the stable release of Python 3.14.0
Python 3.14.0, the newest major release of the Python programming language is here!
Shutdown Threatens Food Aid Program Relied on By Millions of Families
Associated Press Reporters, Â Â - Â MedPage Today | Associated Press
_Stephan: Trump is a psychopath, and so are a number of his vassals like Stephen Miller. They demonstrate their mental illness every day, and it just gets nastier. They obviously care nothing for the wellbeing of American families as this report details. And, meanwhile, the Republican Congressmembers just docilely watch ⊠â 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
A case for learning GPU programming with a compute-first mindset â Maisterâs Graphics Adventures
Comments â Read more
Wheat diversity discovery could provide an urgently-needed solution to global food security
Wheat has a very large and complex genome. Researchers have found that different varieties can use their genes in different ways. By studying RNAâthe molecules that carry out instructions from DNAâresearchers can see which genes are active and when. By mapping this gene activity for the first time, researchers are able to accelerate international wheat breeding programs, developing new varieties of ⊠â 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.comseems 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.comseems 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.comseems 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.comseems 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? đ€šđ«©
CNCF Kubestronaut Program Momentum Highlights Asiaâs Role in Growing Cloud Native Talent
Upcoming Kubestronaut celebrations in China and Japan to honor global program growth Hong Kong, Chinaâ 10 June, 2025 â The Cloud Native Computing FoundationÂź (CNCFÂź), which builds sustainable ecosystems for cloud native software, today announced continued⊠â Read more
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
How can one write blazing fast yet useful compilers (for lazy pure functional languages)?
Iâve decided enough is enough and I want to write my own compiler (seems I caught a bug and lobste.rs is definitely not discouraging it). The language I have in mind is a basic (lazy?) statically-typed pure functional programming language with do notation and records (i.e. mostly Haskell-lite).
I have other ideas Iâd like to explore as well, but mainly, I want the compiler to be so fast (w/ optimisations) that ⊠â Read more
$7,500 Bug: Exposing Any HackerOne Userâs Email via Private Program Invite
How One GraphQL Query Turned Private Invites into Public Data Leaks
[Continue reading on InfoSec Write-ups »](https://infosecwrite ⊠â 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
[ On | No ] syntactic support for error handling - The Go Programming Language
Comments â 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
Senior Canadian diplomat compares Trumpâs Golden Dome missile program to a âprotection racketâ â 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
Part 3: How to Become a Pentester in 2025: Programming & Scripting Foundations for pentester â 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 đ€Łđ€Ż