Revitalising a 20+ year-old GTK mail client with Zig.
Talons[1] is my stripped down fork of claws-mail[2] which itself is a fork of Sylpheed[3].
Moving from auto tools to Zig’s build system was a huge quality of life improvement. Most of the work since has been deleting features and tidying up the code to make it easier to reason about. I realise there may not be that much value porting C to Zig the more I work on the project. Instead I see is there’s huge value in the usual stuff: clearly defined functions, preferring stack to heap allocation, minimising global state.
But it’s still quite early days. I’m looking forward to porting the trickier network code to Zig and using its built-in testing.
I was lost, literally, hitchhiking across the Australian outback when this article was published. Going home felt scary because I was afraid to be alone with no one else sharing my interests. Travelling made life enjoyable again because just surviving felt like an achievement. But I felt so, so isolated (again, literally!) from modern society. I wanted to find out why I was so deeply interested in computers but not in “tech”. They must work somehow… why did my iPhone (sold that) feel similar to my PC (sold that too) but only one is called a computer? This article framed things in a way that shook me out of a physically dangerous, homeless, jobless rut. It was all code. And I could learn it if I had the time.
Perhaps it was the way it was written; I couldn’t believe intrigue and passion of computing could be weaved together like this. But there it was.
I did make it home eventually. Fortunately the first 2000km lift back from western Australia to the eastern states with a crystal meth addict on the run from the police didn’t end violently. A few weeks back in Sydney with family some Linux nerds found me working as a receptionist answering phones and scanning paper records in at a failing medical practice. They got me doing desktop Windows and Linux server support. I’m an official software engineer now. I guess I should print this article out to show to my kids!
Haha thanks for saying that. It’s real! It’s relatively easy to get into the middle of nowhere in Australia after all ;) Actually still haven’t published my journal scribblings on my blog 10 years on..
>some Linux nerds found me working as a receptionist answering phones and scanning paper records in at a failing medical practice. They got me doing desktop Windows and Linux server support. I’m an official software engineer now
There is a gap between receptionist and official software engineer. Please, give us more details about your journey and what happened in between
> There is a gap between receptionist and official software engineer.
At many companies (especially old, stodgy companies) this gap is artificial. The day you get asked "hey, I've got some data .... and I need ..." and you successfully solve the person's problem, is the day you become the office's live-in software engineer. That person you helped will be back, and they will bring friends.
Not sure what country you live in, but where I live, a receptionist doesn't have access to any data processing tools that are not within the realm of a receptionist, and therefore this mobility does not happen. The receptionist ends up redirect the query to someone who has access to the relevant systems.
What sort of companies are those were receptionists have access to tools beyond their role? and why are people approaching the receptionists asking for data queries?
Like having to run a script on that data when your machine doesn't have the permissions to run arbitrary software without permission from the IT team
You're still thinking too much in a "tech company" mindset. At the kind of company I'm talking about, concepts like "access" and "permissions" are irrelevant. Most of the company's employees barely know how a computer works.
You seemed vaguely tech savvy, so someone asked you for help and emailed you a file containing the data (or perhaps just handed you a laptop and turned you loose). The rest is history.
It's a modern invention that companies have separate software engineering orgs, software engineering roadmaps, software engineering managers. At older companies, a software developer is just another businessperson in a cubicle. Your manager probably has an English degree.
> You seemed vaguely tech savvy, so someone asked you for help and emailed you a file containing the data (or perhaps just handed you a laptop and turned you loose). The rest is history.
I know that someday I'll work in something other than IT. When I do I am going to make for damned sure that I don't express even the slightest bit of tech savvy for exactly this reason.
It's similar to playing dumb w/ people I encounter outside work who find out I work in IT. If I get asked a question I play dumb and cop to working on some highly siloed subject (usually I'll claim to only work on "networking" or firewalls... >smile<).
The first job I had where I did anything technical (basic JS and HTML) also had me cold calling, answering phones, designing brochures, fiberglass repair, and some other stuff I’m forgetting. Small businesses frequently have more niche jobs than people and are more than happy to have people help where they are interested.
My first full software job was a direct to consumer company, and during the Christmas rush the entire front office was on the packing line.
Larger companies tend to appreciate people staying in their lane.
> What sort of companies are those were receptionists have access to tools beyond their role? and why are people approaching the receptionists asking for data queries?
It's a fair question. I questioned myself all the time doing the job. The couple of competent doctors couldn't see other patients as the doctors couldn't get paper records themselves. The old retiring doctors (one had a genuine diagnosis of vascular dementia) sometimes hid the paper records for themselves. Admin staff stopped bothering sorting the records properly some years back too. You needed to just know where some group of patient's records were in which cabinet. The workflow for accessing records, in the morning:
1. study the appointment book
2. open delivered snail mail, set aside ones for patients who had appointments that day
3. get each patient's records, attach any new mail (real attachments with paperclips!)
4. place them on each doctor's desks
By scanning the records in other doctors, competent ones, could see other patients. For me, I was ok with doing this job even though it is officially inappropriate.
Despite this strict paper workflow, there were 3 PCs on the front desk to be used by any admin staff at any time. No password to log in ("too slow" otherwise). The password to log in to the medical software was "1234" ("too slow" otherwise... again). The practice purchased computers only to be able to bill patients using credit/debit cards and to get rebates more quickly from the government.
> ... permissions to run arbitrary software without permission from the IT team
There was no IT team. The practice called an IT support company who billed per 10 minutes - no contracts - if the "server" didn't come back up again after a disk failed or somebody kicked the cables. The practice staff stopped calling the IT team once they saw that I could do the job myself (see my longer comment)
In a small business, the receptionist may be responsible for inputting much of that data in the first place, and it may just live on the receptionist's computer.
In fact in some companies outside of tech proper with smaller headcount and less technically minded management, by the time the boss decides to look into systems like HRIS, CRM, ERM, and such the receptionist, office manager, and/or the interns already have about 837 Excel macros doing most of that work.
>receptionist answering phones and scanning paper records in
They were also converting paper records to digital. Asking the data entry person where the data is or how to find paper record xyz in the digital system doesn't seem odd.
Microsoft Excel is the #1 tool at the top of that rather narrowly envisioned slippery slope, since you ask. Followed by any web browser.
As for data access; the vast majority of firms, worldwide, in every country, have abysmal internal controls, and in many cases, none at all. The filing cabinet is unlocked all day, everything from payroll to posters is in a share that every network login can R/W, and nobody cares.
That's pretty much how it happened. A neighbour bought a medical practice from two retiring doctors in their 80s. One had officially diagnosed vascular dementia but was still practicing. The place was losing money because they couldn't reliably bill appointments. Nobody really knew how to use computers except for that neighbour who was himself busy seeing patients. That neighbour knew I was interested in "computers" because I picked up some old desktop he put out on the side of the road for rubbish collection, and asked if I was up for scanning papers in for hourly cash. "Ummm, sure". I never knew I could really make money using computers.
Every couple of days "the server" would crash. It was an old dusty Windows box under one of the admin staff's desk. I offered to move it out so they wouldn't keep accidentally kicking out the power cable or disturb the wobbly ethernet switch making it fall down off the top of it down into the corner where the mice and moths hid. I was sick of crawling down there after a while.
Once staff saw that I knew how to plug network cables back in after moving IT gear, they stopped calling in the IT company meant to be keeping all this stuff on life support. From there you hear about every tiny little problem, you get busier, learn to automate bits of your job piece by piece to keep up with the demands.
For example, a doctor complained about waiting for me to scan in pathology reports delivered by snail mail. The fax machine kept running out of toner & paper as it was also the practice's main printer. I researched and found that the pathology providers could install some software on a Windows machine which would deliver reports directly into the medical software the doctors were starting to use. That software would crash, too. How can I monitor that Windows service and have it send me an email if it goes down? What if I could get it to try to start it back up again before it sent me an email?
Eventually the dementia doctor retired as he kept falling asleep during appointments.
The other old doctor voluntarily quit when the filing cabinets containing all the paper records moved to a locked room with just a scanner and shredder.
A doctor wanted to be able to connect to the practice remotely. I learned about VPNs, but I had no idea if I could set that up using the modem/router provided by the ISP. Some family friend referred me to the IT company who took care of their email. Turned out that company were real Linux purists running all their own mail system in a datacenter. They were impressed by my proposed network diagram for the medical practice. They thought it was cool that I installed Linux on old PCs to keep using them for fun.
Instead of me hiring them for support, they just offered me a real salary job at a bit over minimum wage.
Particularly those of us who don't have computer science training kind of end up falling into this stuff.
One of my first jobs was as an admin assistant at a utilities company. We logged data about pipe replacement, which was done in something like five different spreadsheets, each optimized for its printed form (legal requirements for paper copies of various things). I knew just about enough about Access to know that entering the same thing in 5 different spreadsheets is a waste of everyone's time so set up a database where people entered the information once and Access forms generated the five printable versions. Management were impressed and asked me what else I think might be possible. Cue me diving into the world of complex forms, eventually VBA, then once I got frustrated with that, VB.NET via SharpDevelop (they sure as hell weren't paying for Visual Studio), on and on. I was doing software engineering while still keeping the job title of admin assistant.
...then I went and got a real engineering job with a real salary.
Work may enable altruism outside of your actual job. For example, I got fulfillment from sharing my journey publishing some open source software over the course of a few months. Having savings helped make that possible.
SMART criteria[1] can help to get out of a rut. "Making the world a better place" is very difficult to satisfy. How many people? What is better? How much better?
I don't advocate for quantising abstract ideas in general but sometimes the thought process of coming up with a number and hitting it helps to get going.
My current dayjob involves me wrangling a clunky Java system written like FizzBuzz Enterprise Edition[2]. Keeping this abomination running and getting paid for it feels soulless. Yet I genuinely believe I'm able to stick to my values.
For example, there are 3 components tightly coupled to proprietary AWS systems (AWS Lambda and Simple Queue Service). I feel this has made the world a (very slightly!) worse place; Amazon to me represents the bad side of humanity (greed, scrupulousness).
Furthermore, people new to the software dev industry may never know that it's possible to implement these kinds of systems using significantly simpler, portable designs without making a deal with the devil!
My goal is to refactor the system to instead use the language's built-in concurrency primitives to perform the same work.
The next person who sees the refactored work can more easily take it and run with it without needing to know anything about AWS. That person doesn't need to care either; I can always share this story with others who I don't work with. Maybe AWS does something so egregious that it's distasteful even to company executives; I can confidently say that we're not as tied to AWS as we think.
I'm not changing the entire world for all eternity. But in a way I am changing my little tiny insignificant slice of this world today in ways that I hope to inspire even just 1 other person in their own tiny insignificant slice :)
Could you cast your mind 10 years back to 2015 and ask yourself the same question? Then fast-forward to today. What could you have done in 2015 that could have prepared you better for 2025? You may be able to do the same for 2005 and 2015.
It may be worth trying to ignore the feeling of "AI taking over the field". There's so much noise around this stuff as, personally, it's very difficult to differentiate hype and utility at the moment.
Plan 9 (a Bell Labs successor to Unix) did away with the whole bin, sbin, usr/sbin thing and its shell only looked in /bin. How things got into /bin is a different story.
For me this was an eye-opener. I kept trying to wrap my head around all these different paths and "standards" because I thought it was correct and deliberately designed. Looking back through the history this doesn't seem to be the case; I feel much better for being confused by all the different PATH conventions and strict hierarchies.
It's stuff like this that makes me want to scurry right back into the SRE/sysadmin space. Currently back in webdev after a few years out. I just feel like I'm being a pain in the arse to comment "could just write the HTML...?".
This very article loaded 2.49MB (uncompressed) over 30 requests. It's served using Next.js (it does actually load fine with JS disabled).
Ironically this is a great opportunity for the author to have made a stronger point. It could have gone beyond the abstract desire of "going back to basics" to perhaps demo reworking itself to be served using plain HTML and CSS without any big server-side frameworks.
> If this had been available in 2010, Redis scripting would have been JavaScript and not Lua.
With that in mind we can do a quick search to see how Lua is used. I found an article on Wikipedia titled "List of applications using Lua"[2]. Of course that's not an exhaustive list but it gives you a bit of an idea. Off the top of my head, the places I've personally seen Lua used:
1. modifying DNS responses in PowerDNS
2. neovim plugins
3. video game mods like Factorio
Personally I got into programming by writing shell scripts. I never studied computer science or IT. Instead it was the ability to write basic code for existing software that gave me this accidental introduction to the world of writing logic down as a set of machine-readable instructions. For me, MicroQuickJS is another one of those ways for "power users" (who may themselves be professional software developers) to extend some existing software without getting into the nitty gritty of the big bad upstream dev project.
Think about it this way: you've spent a decade writing software.
> Does it make sense to change direction at this point?
Changing direction isn't a binary thing. You can aim, say, 4.5 degrees to the left to change your trajectory ever so slightly. This is possible because whether you're working on CRUD forms or self-driving car data analytics pipelines many principles of software engineering are the same. For example good software is usually simple, clear, and portable [1].
Specialise in an industry vertical that is not just web development. Let's use healthcare as an example. If you're doing dropdowns and modals in healthcare software - try and understand if those widgets could be easily used in other healthcare software. Why or why not? Could that same dropdown be implemented in a native app using GTK and/or WinUI? Perhaps given the type of data you're working with a dropdown isn't the best way that it could be represented. Try loading up some disease definitions into Typesense[2] and presenting a more free-form text search for particular diseases. From there you can think beyond UI widgets and think more about general problem solving.
Moving from auto tools to Zig’s build system was a huge quality of life improvement. Most of the work since has been deleting features and tidying up the code to make it easier to reason about. I realise there may not be that much value porting C to Zig the more I work on the project. Instead I see is there’s huge value in the usual stuff: clearly defined functions, preferring stack to heap allocation, minimising global state.
But it’s still quite early days. I’m looking forward to porting the trickier network code to Zig and using its built-in testing.
[1]: https://git.olowe.co/?action=summary&path=talons
[2]: https://claws-mail.org
[3]: https://sylpheed.sraoss.jp/en/