Recently I have been working on what I guess is called an LLM agent, but it’s more just building more ergonomic tools for myself to use LLMs in my life. The code base keeps growing, and I use it to help write itself. What I have noticed is that the patterns I have made for making code more intelligible to LLMs also apply to making code more...
hytradboi 2025 HYTRADBOI is coming back in 2025, this time with a programming languages track. I have 14 speakers confirmed so far, but there is still plenty of room. Let me know who you want to see!
This evening, I started to think about what the experience should be on audio notes. Could I offer transcriptions? What would that look like? What design elements should I have on the page? What features could I add to afford greater utility to the transcript, like search? I explore these questions in the below audio note, with additional...
I have recently been reflecting on how technical writing goes out of date, and what that means as a technical writer. In the voice note below, I explore how technical documents have relevance far beyond their immediate utility as a reference material. Your browser does not support the audio tag.
At Homebrew Writing Club this evening, we spoke about modalities of content: of writing, audio, video, and more. We also spoke about the best way to make something is to get started, and to make it as easy as possible to get started. For example, instead of worrying about how to classify content, you can write or make it, then classify it later....
In front of you are two personal websites, each used as a blog and to display basic contact info of the owner:One is a complex CMS written in PHP that requires a web server, multiple workers, a Redis cache, and a SQL database. The site also has a big frontend component that loads as a Single Page Application and then performs navigation by requesting the content in JSON form, which then gets "rehydrated" client-side.The other is a collection of static HTML files...
Before we look at making our server multi-threaded, and then move to polling, there are two optimization techniques worth exploring. You might think that we should finalize our code before applying optimizations, but I think optimizations in general can teach us things to look out for / consider, and it's particularly true in both these cases. In...
An article about a couple of relatively recent additions to my workflow which I wish I knew about years ago.
Most of the Internet is held together by best practices and good intentions, and WHOIS servers are one of those. One security company was investigating vulnerabilities in WHOIS and got a whole lot more than they bargained for: Each TLD (the bit at the end of the domain), you see, has a separate WHOIS server, and there’s no real standard to...
The UK will give sovereignty of Chagos Islands to Mauritius: Half a century or more after the UK relinquished control over almost all its global empire, it has finally agreed to hand over one of the very last pieces. It has done so reluctantly, perhaps, but also peacefully and legally. The Chagos Islands are also known as the British Indian Ocean...
When the gov.uk team offer a rundown like this, you have to read it because that team are some of the best in the business of great user experience. We’re so lucky in the UK because anything government related is so easy to use. They are, of course very into progressive enhancement to achieve those excellent results. For users to experience a...
Thoughts on the Treasurer Role at Tech NonProfits Will Vincent, Django Software Foundation treasurer from 2020-2022, explains what’s involved in the non-profit role with the highest level of responsibility and trust. Tags: dsf, django
The strange character in the middle of the title is a maths symbol pronounced therefore. When looking for a new job I got interviewed by a ceo who had formerly worked as a security advisory consultant. This meant their job used to be advising large organisations on the status of the softer parts of their security systems: people, processes, information barriers, etc. This was something I’d always been curious about, so I...
Those who follow me on various places such as Discord, or Bluesky, or Void will know that I have a great time making a silly little comic called Niceferatu about a nice Vampire fella and his friend ‘Stalk,’ and cat...
I’m down with the first flu of the season, so I thought I’d write up my notes on the Banana Pi M5 Pro and how it’s fared as part of my increasingly eclectic collection of single-board computers in the post-Raspberry Pi age. Disclaimer: Banana Pi sent me a review unit (for which I thank them), and this article follows my Review Policy. Also known...
Recommendations of works of fiction of interest to financial practitioners or enthusiasts.
Windows paths have been WTF-16-encoded for decades, but module names in the import tables of Portable Executable are octets. If a name contains values beyond ASCII — technically out of spec — then the dynamic linker must somehow decode those octets into Unicode in order to construct a lookup path. There are multiple ways this could be done, and...
What's New In Python 3.13 It's Python 3.13 release day today. The big signature features are a better REPL with improved error messages, an option to run Python without the GIL and the beginnings of the new JIT. Here are some of the smaller highlights I spotted while perusing the release notes. iOS and Android are both now Tier 3 supported...
What's New in Ruby on Rails 8 Rails 8 takes SQLite from a lightweight development tool to a reliable choice for production use, thanks to extensive work on the SQLite adapter and Ruby driver. With the introduction of the solid adapters discussed above, SQLite now has the capability to power Action Cable, Rails.cache, and Active Job effectively,...
Ryan Dahl was on The Changelog to talk about Deno 2 specifically and his work on JavaScript more broadly. What follows are a few things that stood out to me. His Regrets From Node Are Now in Deno I think it’s interesting that Ryan’s famous talk 10 Things I Regret About Node.js served as the manifesto and launching point for Deno. And yet, he’s...
Abstract: When I use a calculator to tell me that 245 × 46 = 11,270, I learn something that I didn’t know before, even though calculators don’t have any beliefs or knowledge. Even small children know how to count things, and it is through our own capacity to enumerate and count things that we learn basic arithmetic. Calculators do not count...
Datasette 0.65 Python 3.13 was released today, which broke compatibility with the Datasette 0.x series due to an issue with an underlying dependency. I've fixed that problem by vendoring and fixing the dependency and the new 0.65 release works on Python 3.13 (but drops support for Python 3.8, which is EOL this month). Datasette 1.0a16 added...
Last week we talked about the notion of the relational derivative and its application to enforcing integrity constraints in databases. The relational derivative is defined by And we can compute it by rearranging: We can use this to do things like incrementally update a query in response to new data, or to tell whether or not a query will change...
Last week we talked about the notion of the relational derivative and its application to enforcing integrity constraints in databases. The relational derivative is defined by And we can compute it by rearranging: We can use this to do things like incrementally update a query in response to new data, or to tell whether or not a query will change...
For weeks I agonized over what, if anything, this post should say. How does one commemorate a tragedy that isn’t over for millions of innocents on either side? How do I add to what friend-of-the-blog Boaz Barak and countless others have already written? Do I review the grisly details of Black Shabbat, tell the stories […]
If you read my previous article on DOS memory models, you may have dismissed everything I wrote as “legacy cruft from the 1990s that nobody cares about any longer”. After all, computers have evolved from sporting 8-bit processors to 64-bit processors and, on the way, the amount of memory that these computers can leverage has grown orders of...
In September, I went to Belgium for a digital preservation conference. I wrote about what I learnt and what I saw for the Flickr.org blog.
I often come across developers who know the mechanics of Python error handling well, yet when I review their code I find it to be far from good. Exceptions in Python is one of those areas that have a surface layer that most people know, and a deeper, almost secret one that a lot of developers don't even know exists. If you want to test yourself...
Today a friend shared a video on TikTok with me that I promptly sent to my wife because I knew she would find it funny. It is funny (this is a non-tracked link). A few hours later that friend said "Oh your wife has watched it" because TikTok notified him, with her username, that she had watched it. What the actual fuck. Every time you share a...
I’m excited to offer the next giveaway, 10 [Eloquent Javascript] e-books ($39.99 value each). Whether you’re just getting into web development or are an old hand, this book contains excellent knowledge and tips for Javascript developers. The latest edition updates for current web development practices and tools. From the developer: The fourth...
I was at a wedding on Friday and when we sat down for the wedding breakfast there was a QR code on the table to prompt us to take photos. I scanned it and to my surprise it was an App Clip for POV camera[1]. This is the first time the seven years since they were introduced that I've seen one - I assumed they didn't exist any more. POV camera is...
Warning: this is a post about very boring yakshaving, probably only of interest to people who are trying to upgrade Hugo from a very old version to a new version. But what are blogs for if not documenting one’s very boring yakshaves from time to time? So yesterday I decided to try to upgrade Hugo. There’s no real reason to do this – I’ve been...
Being a developer sometimes feels like being the goalkeeper in a soccer match. You make a hundred great saves, and no one bats an eye. But let one ball slip through, and suddenly you're the village idiot.
Learn the art of scope management to keep your projects fixed in time and cost
Pure Python is generally a slow language. Written for performance, it will often be around 40-50 times slower than C, and Python “written for performance” is Python that is very straightforward and does not use many of its features. Python code that has a couple of methods on inherited classes, maybe a non-trivial decorator, and some __getattr__...
Did you know that the files originating from an file input don’t have all their data buffered into memory? Seems intuitive that this is how JS would work, otherwise web sites operating over files would be terribly memory inefficient. Don’t let this efficient File deceive you. If you create one yourself, you’ll soon find that you need to buffer...
People talk about htmx as though it's saving the web from single-page apps. Well, I guess I missed the memo, because I used htmx to build a single-page app.
One of things that I hate the most about the fact that we are all using wireless earbuds instead of wired earphones is the latency: it is bad, getting up to seconds(!) depending on your particular combination of OS/earbuds/device. There is a solution though: Bluetooth LE Audio, that is supposed to fix multiple issues with the original design for...
By David Buchanan, 7th October 2024 Spoiler alert: Yes. the elite hacking tool they don't want you to know you already own Before you can write an exploit, you need a bug. When there are no bugs, we have to get creative—that's where Fault Injection comes in. Fault injection can take many forms, including software-controlled data...
The melody of The Sound by Carly Rae Jepsen plays in the background as I write the opening sentence for this blog post. When I hear a song in a playlist that I love, I often take a screenshot of the song name to remind me to listen to the song later. I often forget to go back and look at the songs. This weekend, however, I decided to look through...
Software licenses are a reflection of our values. How you choose to license a piece of software says a lot about what you want to achieve with it. Do you want to reach the maximum amount of users? Do you want to ensure future versions remain free and open source? Do you want to preserve your opportunity to make a profit? They can also be used to...
For the past years Vitto and I have used Tricount to track our shared expenses. The app is actually pretty good, but there’s one small thing that annoys me quite a bit. Even though we spoke English to each other for the first month, we’ve since spoken a …
When I hover over an image, I can add a border to a link, or change the colours of an SVG icon.
I have travelled a lot this year, and after yet another trip where I lugged too many things around, I’ve been thinking about ways to cut back. The classic guide for this is onebag.com, which covers a very interesting mix of techniques and some carefully-chosen lightweight gear that will take you to the farthest corners of the map. Perma-nomad...
[IMG_0764.jpeg]I saw a post on Mastodon the other day, suggesting you post about the 20 games had a big impact on you. The challenge was to share one game a day,...
In order to further iterate on Fischer, I'm going to need to be able to test with a reasonably large pile of bookmarks. That's going to get tedious quickly if I can't import and export them as I experiment. In the past, the shortest path to doing this has been using django-import-export and either a script or django admin integration. I'd prefer...
Justine Tunney recently wrote a blog post titled The Fastest Mutexes where she describes how she implemented mutexes in Cosmopolitan Libc. The post discusses how her implementation uses futexes by way of Mike Burrows’s nsync library. From her post nsync enlists the help of the operating system by using futexes. This is a great abstraction …...
Local programmer is inconvenienced by error-handling boiler plate, writes uninformed article about experimental programming language features. More at 11.
PDF generation and processing is a common requirement in many web applications, especially for generating invoices, reports, or documents dynamically. PHP provides various libraries to handle PDF creation, manipulation, and extraction. In this article, we will evaluate the most popular PHP libraries for PDF handling, breaking down their pros and...
Anyone who has implemented a simple HTTP 1.1 server can tell you that it is a really simple protocol. Basically, it’s a text file that has some specific rules to make parsing it easier. All HTTP requests look something like this: 1 GET /path HTTP/1.1\r\n Host: aarol.dev\r\n Accept-Language: en,fi-FI\r\n Accept-Encoding: gzip, deflate\r\n \r\n The...
Oct 06 2024Oct 06 2024 Rust has two main string types: Rust has two main string types: StringString and and &str&str. Sometimes, people argue that these two types make Rust code difficult to write, because you have to think about which one you should be using in a given situation. My experience of writing Rust is that I don’t really think about this very much, and this post is about some rules of thumb that you can use to be like me.. Sometimes, people argue that these two types make Rust code difficult to write, because you have to think about which one you should be using in a given situation. My experience of writing Rust is that I don’t really think about this very much, and this post is about some rules of thumb that you can use to be like me. Level 1: Don’t...Level 1: Don’t...
Some thoughts on how programming’s unlikely relations to poetry, and some implications of those relations I don’t have much time recently to work on articles about programming (especially considering my typical article length); but I have some previously written content to share. This article was drafted as a Twitter thread on my 39th birthday:...
Asheville is in crisis right now. They're without drinking water, faucets run dry, and it's difficult to flush toilets. As of yesterday, the hospital has water (via tanker trucks), but 80% of the public water system is still without running water. Things are really bad. Lots of infrastructure has been washed away. Even when water is back, there...
(This is part of a series on the design of a language. See the list of posts here.) Many 'scripting' languages use a hashmap for their default associative data-structure (javascript objects, python dicts, etc). Hashtables have a lot of annoying properties: Vulnerable to hash flooding....
Besides retries, circuit breakers1 are probably one of the most commonly employed resilience patterns in distributed systems. While writing a retry routine is pretty simple, implementing a circuit breaker needs a little bit of work. I realized that I usually just go for off-the-shelf libraries for circuit breaking and haven’t written one from...
Why are there so many programming languages? One of the driving reasons for this is that some languages tend to produce fast code, but are a bit of a pain to use (C++), while others are a breeze to write, but run somewhat slow (Python). Depending on the ratio of CPUs to programmers, one or the other might be relatively more important.
In the article about using mrbgems we had a situation when ARGV constant was not defined, but referenced. As a result the code execution failed (the side-effects were not produced), however it did that completely silently. No error message was emitted. And even the exit code was zero. This is obviously bad. So I set to fix it. By examining mruby...
At the end of his apologia for the Social Web Foundation, Ben Werdmuller says this of what he terms both the growth fediverse and the movement fediverse: “Each group is approaching the problem in good faith.” The foundation’s very name disputes this contention. Inherent to the foundation’s formulation of itself and of the social web is the...