I’ve heard a lot of parallels: “the advent of AIs is like the advent of X back in the days”. I think that is simply the advent of computers. Do you remember what people were saying about the first computers?
Computers are useless. They can only give you answers.
Pablo Picasso 196x
But:
Any sufficiently advanced technology is indistinguishable from magic.
Arthur C. Clarke, 1962
An AI is helping me right now to fix English errors I often make. As well as the computer I am observing now, let me write it. Different helps, but the same thing. People were negative about new computers. Many jobs became obsolete, new job types emerged, and the world changed for the better.
Or not?
The data center where this article’s database will be stored generates more pollution than if I had typed it and hidden the paper in a drawer. This is the world. It changes, with pros and cons. Machines help humans and were invented for that purpose.
A computer? Do I need one? Is my phone enough?
No, you don’t, because something does things for you, and you become smarter and smarter.
I started writing a book about AIs and other cyberpunk-related stuff many years ago (+20). Natura Macchina (in Italian). The world where the protagonist lives has no computers. You can’t have one. People have only terminals. All the computation on your not-so-smartphone and whatever computers are done in the government-controlled central data center.
Those are empty machines, with only enough processing power to display the pixels downloaded from the net. Having a real computer meant fighting for it, building it, and having your AI work offline.
Is this a dystopic future? Of course, because I love dark books.
When WoW came out, I would take the car and drive 40km to a place with an internet connection, then 40 km back. Then ADSL arrived, and that place closed. If I think about it today, I do it with a smile, and I’m sure I will do the same in the future, think about when I wrote this post.
Until next time. And thanks to all the AIs involved in writing this post. Much appreciated.
People hated books when they first came out. They hated horseless carriages. So any new disruptive technology will take a little while for society to digest it, also to evolve.
Matt Mullenweg, 2026
I’ve seen people hating a lot of things when they came out. Like credit cards, crypto, JavaScript private elements syntax, or even a dish in their favorite restaurant that slightly diverges from the one they have eaten for years.
Even I hated things, don’t get me wrong. Even futile things, like the menu arrangement in the new iteration of my favorite OS.
New technologies, and their misuse12, bring both positive and negative effects. But in this case, the positive ones are a couple of magnitudes more than the negative ones.
The world evolves, or better, needs to evolve. Don’t you like how it evolves? So react, and build something better for you and for the rest of the world.
I found that BibLaTeX nowadays supports URLs, Unicode characters, and all the modern stuff. I’ve always been a great LaTeX fan, since my university days. My book had a very complex millimeter-precise pagination such as:
So, why not create a WordPress plugin that generates a BibLaTeX entry of the current post? But, even more funny, why not have something do it for me?
Introducing Telex
I work for Automattic, but it doesn’t take away the fact that I can be happy to use one of our products.
Telex is a “AI-Assisted Authoring Environment for WordPress Blocks”. Today it will help me as a not so popular request.
The prompt:
I want a block that output a biblatex entry of the current page. It should have this identifier "zaerl{YEAR}-{POST SLUG WITHOUT YEAR, MONTH, DAY}.
As author "Francesco Bigiarini"
As title "The title of the post"
As date "The date of the post"
As url "The url of the post"
as urldate "The date of the post"
For example, for this post: https://zaerl.com/2025/08/23/unicode-buffering-and-printf/
The output should be:
@article{zaerl2025-unicode-buffering-and-printf,
author = {Francesco Bigiarini},
title = {Unicode Buffering and printf},
date = {2025-08-23},
url = {https://zaerl.com/2025/08/23/unicode-buffering-and-printf/},
urldate = {2025-08-23}
}
The block should be output in fixed width font.
Isn’t this cool? I downloaded the .zip and tried it on a blank Playground site and it was working. Just needed a second little request. To be sure the style will blend well with the site.
Use the "code" block as the base of the block and not custom CSS or HTML
Plugin installation
Downloaded the .zip
Uploaded the plugin and activated
Added the block to the single post template
And it was done. You can find the Telex project here. And the result after this paragraph. It took more time to write this post than to have this new plugin.
Some years ago, I was at one of those shops where you can buy useless, but funny, objects that you can forget in one of your desk drawers. There was one hand-made of wood, that kind of pretty, creepy one, you can move parts, and that 99% of the time has been positioned to flip you.
Could it have been a good tool for someone who works with drawings? But then I thought that you already have that. It’s your own hand.
When creating something creative like a painting or that handy JS tool, the truth lies somewhere in the middle. Software engineering has a long history, and when creating something new, someone has probably already done it.
Create
Evolve
Adapt
Stop
I am using FreeBSD on my personal computers these days, and it has jails since 2000, 13 years before Docker. Every day it’s a wow moment. And you know why? Because they are at the looping points 2 and 3.
Creating great software means concentrating on that dream and never reaching point 4, because once you get there, it’s challenging to do. There’s no need to add that many new things to a project to evolve it, because you must know when to stop. And once too many are added, stopping is impossible.
One day, during a weekend, I was writing some code for my Mojibake library when I saw a strange output in my CLI for the U+10C0 codepoint chosen by random.
Uh? The Unicode Georgian block (MJB_BLOCK_GEORGIAN) has ID 36, and not 0. Even stranger the name of the block was correct. Just the ID was wrong. I made a quick database query and the data was ok:
select id from blocks where name = 'Georgian';
36
Mojibake is in the alpha status. I probably overwritten the memory or something in the mjb_character_block function?
block->id = (mjb_block)raw_id;
No data truncation or similar here. An enum is an integer in C and sqlite3_column_int return an integer. Did I overwrite something with the strncpy? Nothing. So I added an innocent printf.
printf("ID: %d, block.id)
ID: 0
Nothing changed. Or at least I tought that nothing changed. I output the data inside the CLI code:
🙂. The first time I called a printf the value was zero, the second one it was the right one.
Welcome to the Unicode world
How is it ever possible that printf print something and the same printf one row below something else? The printf function must not change the values it receives. But, what is the printf function?
The printf, like other functions of the stdio.h family outputs a string to a FILE*, in this case stdout. It has a buffer that is flushed when you output a newline. Should this buffer be the problem? Well… yes? By forcing a fflush I solved the problem.
I checked the macOS open source internals but after a while, I gave up. I began working on my library to see if I can solve some of those Latin-1 screwed up èéò characters family.
I like parts of developing that are not very trendy nowadays. Whatever LLVM I use makes a lot of very basic mistakes, produces slow code, and generally makes code that makes me smile.
I had time for myself for the last two days, and I asked Cursor to count the commas in a string, in C. I know how to do it. That’s one of the code snippets in a “Learn how to program in C in ten lessons”.
And it… looped the string, created another with just commas, and ran strlen. Strange? Python style? And I tried again to ask, and it made a code that incremented a variable, like everybody would do.
Does it not have a billion tokens for talking with me? For giving me hints in the context of my not-trendy projects? Was it I who was not gentle enough to explain my needs well?
I took a Campari with the sound of the Arno river in the background, thinking about the servers on the other side of the ocean that worked for me, producing a bit of heat and noise to suggest that strlen.
You have to enjoy the little things in life. And that drink was just at the right temperature.
Why? Yes, literally “WHY”. That’s because “WHY” in italian is written “PERCHÉ?”
But there’s a problem.
Dov’è la lettera grande con l’accento al contrario? (Where is the big letter with the reversed accent?)
Everybody writing something using a Windows/macOS keyboard
Let’s type it on macOS
Is it easy to write É on a macOS keyboard? Of course not. You must hold shift+option (AKA alt) and press V. Or shift+e+wait-one-second+2.
The macOS keyboard shown when you press ⎇ and ⇧
What about Windows?
Well, you must type Alt+1 -> 4 -> 4 or Alt+0 -> 2 -> 0 -> 1. One after another.
Why it’s a curse?
People don’t want to waste time searching for something that can potentially break that system written in Latin-1 that then encodes in UTF-8, maybe later in ASCII, and who knows what. So they write something similar:
PERCHE’
PERCHè
PERCHé
What do we learn about this? When there is a solution to a problem widely accepted by everybody, but not the real solution, then often there is no effort to find a real solution upstream.
I remember when I was in high school (I am from the 80s) and had no money to buy a Sega Saturn. It was the best! And I didn’t like Sony; I’m not sure why. Today, I have my first PlayStation, the first after 30 years. But this is another story.
I started working as a waiter at 16 years old just to buy all the stuff I needed. I worked on Saturday nights, then went to a club, and returned to work on Sundays and school on Mondays.
After I started working, I began to understand the meaning of money and that excessive attachment to things is the source of all evil. So, I gave up the idea of spending my money on consoles, electric guitars, or whatever popped up in my mind.
Fast-forward to when I was 18 years old. My father bought me a computer. It was a Celeron 300A, easily overclocked to 450Mhz. It was my start as a programmer. One day (I was 28 years old), I found that Wipeout 2097, the second installment of the Wipeout series, was ported onto Windows. Wow!
My computer was too performant
Yes, it was. The problem was that my hover car was undrivable. It was too fast and impossible to turn corners without hitting the sides. So, I needed to limit the frame rate to 30 fps.
For obvious reasons, I didn’t want to patch the .exe and redistribute the file, so I discovered that I could inject a DLL on Windows.
I’ve lost my old code, but if I remember well, I disassembled it, found the main rendering loop, and tried a couple of solutions. Both working:
Trick the parent code by changing the return value of GetTickCount()
I was thrilled! It was working well, and the techno soundtrack was great. The game wasn’t that funny, but disassembling was by far the most amusing thing I had ever done.
Why not look forward and help the community?
I then started working on adding the network mode on Guilty Gear X. Why not create a tool to start games and patch them on the fly? There were plenty of poor ports on Windows. People could have a simple tool to start the game executable and have it patched on the fly.
I created a small C program called Gear using the Win32 List View control, a Wipeout 2097 launcher, and the promise for the Guilty Gear X one. You can see the game, click on the executable icon, and enjoy your game. It had as an icon the frame that appears on screen before Justice uses the Overdrive Attack.
I went to WipEoutZone forum and wrote about it. I got this response:
No matter how old these games are, they are still owned and copyrighted by Sony, who are still actively selling them for different consoles than they were originally produced for. IIRC, the copyrights specifically forbid any modification of the games without permission from the copyright holder.
I also received a cease and desist letter promise by email, so I was done playing around with copyrighted materials.
Matt published this post in his blog on 2024-09-17, and these are my ideas.
But first, some context. I’m Francesco. I worked at Automattic for three years and have been an avid user of WordPress since 2.0 Duke and bbPress. I can write whatever I want despite working for Automattic. This is my blog, and I don’t want to appear as a good employee in everyone’s eyes.
Back in the days
Why do I work at Automattic? Back in the day, our system administrator switched the webserver from IIS to Apache, so we started building our first simple sites with WordPress for our customers. We chose something ready and did not move all our ASP code to PHP. I was the only one knowing a little bit of PHP, so we speeded up our work by making small plugins, custom themes, and some core patches here and there. No more strange server objects, no more ADO. It was good!
Back to our days
There have been a lot of discussions about the WPEngine / Automattic / WordPress foundations situation these hours, and it is interesting to read all the comments, whether they mean or not. This is the most interesting to me despite not having the classic +200 comments HN-style: https://news.ycombinator.com/item?id=41652760. Hacker News is the only place nowadays where I am sure that every comment without a text-color similar to the main table #f6f6ef is a good one to read.
Nourish is the trickiest, and most important part: it’s where we water the garden. If you’ve done the previous three steps, you’ve been very successful; now your responsibility is to spread the fruits of your labors around the ecosystem so that everyone can succeed together. This is the philosophy behind Five For the Future, which you’re going to see us emphasize a lot more now.
Matt
This is true, and it is the base of OSS. Many people who are not developers, engineers, or related to the IT world know about it. When you use something for free and can do something to help who provide what you are using, you should do it. I try to do it for all the small things I do every day. Not that you are terrible if you don’t donate money to Nginx, a server you use all day!
A small story from today
I was talking with a new friend and told him that my two favorite books are Roadside Picnic and Catch-22. My library caught fire some years ago and destroyed my 200-book collection. He was very kind. He thought I had only the e-book, so he gave me the physical copy, so I had two copies.
So what about now? Can I do something for somebody or not? Should I hide my old copy inside a drawer and keep the new one given to me with a smile? Yes, I can do something. So today, after my usual espresso at the bar with my friend, we went to our road public library.
It’s a small box where you can leave one of your books, pick another, return it after you read it, or maybe take it from you forever.
What if most people get the significant part of the book and don’t leave anything? Or maybe grab all the books and sell them? You can do it! No problem. But this tiny box is made to share experiences, books that you love, poems, and stories you’ve written. I hope whoever reads Comma-22 will like it as much as I do and leave another book of them. We are about to open another one in the city next to mine. People who know about this they give us what they can.
About WP Engine and that tiny box
Compare the Five For the Future pages from Automattic and WP Engine, two companies that are roughly the same size with revenue in the ballpark of half a billion. These pledges are just a proxy and aren’t perfectly accurate, but as I write this, Automattic has 3,786 hours per week (not even counting me!), and WP Engine has 47 hours. WP Engine has good people, some of whom are listed on that page, but the company is controlled by Silver Lake, a private equity firm with $102 billion in assets under management. Silver Lake doesn’t give a dang about your Open Source ideals. It just wants a return on capital.
Matt
WP Engine is not a charitable organization; they (Silver Lake) want to make money and do a lot. It would be best to give back something when you use software to earn millions of dollars. You can not do it, obviously, but you should.
WP Engine has always had a strong approach to giving back to our community, giving back to our employees, and giving back to our industry. This commitment is woven throughout our core values from Do the right thing to Committed to giving back.
One of the WP Engine core values
And:
WP Engine believes in the power of open source and the power of the WordPress community. Open Future is devoted to increasing open source visibility and capability in the world of WordPress and beyond.
Open Future | Engine for Good at WP Engine
WP Engine gets from the WordPress ecosystem without giving much back. The Open Source community is built by people for people. Everybody should add what they can, like a book in a tiny box.