Build your own SQLite, Part 1: Listing tables
As developers, we use databases all the time. But how do they work? In this series, we'll try to answer that question by building our own SQLite-compatible…
Topics /
The most popular blog posts about software engineering on Hacker News. 1,116 posts.
As developers, we use databases all the time. But how do they work? In this series, we'll try to answer that question by building our own SQLite-compatible…
Testing against a real database uncovers hidden pitfalls that can appear as the application matures
Spaced repetition is complicated in hierarchical bodies of knowledge, like mathematics, because repetitions on advanced topics should trickle down to update the repetition schedules of simpler topics that are implicitly practiced (while being discounted appropriately since these repetitions are often too early to…
We can use the `createWebArchiveData` method on `WKWebView` to write a Swift script that creates Safari webarchive files.
Sampling is one of the most powerful tools you can wield to extract meaning from large datasets. It lets you reduce a massive pile of data into a small yet representative dataset that’s fast and easy to use.
In this series of tutorials, we will delve into creating simple 2D games in Common Lisp. The result of the first part will be a development environment setup and a basic simulation displaying a 2D sce...
A wrap-up of several years of development and the alpha release of Liikennematto.
I started learning Rust about 3 or 4 years ago. I am now knee-deep in several very complex Rust projects that keep slamming into the limitations of the Rust compiler. One of the most common and obnoxious problems is hitting a situation the borrow-checker can’t deal with and realizing that I need to completely…
1500 bytes is a bit out there as numbers go, or at least it seems that way if you touch computers for a living. It’s not a power of two or anywhere close, it’s suspiciously base-ten-round, and computers don’t care all that much about base ten, so how did we get here?
A detailed explanation of the architecture I used to rebuild react
Review about V programming language in 2023
Let's talk about shell history.
Or how to find the largest power of 2 that divides x?
I am responsible for the reliability of the firmware updates on our devices and this work never gets boring. The thing about firmware updates is that by definition, every bug is caused by the updater because before installing the affected version, the bug was not present. You could say that updates are the cause and…
Tech babble and other stuff
Unit tests are always in sync with the code, making them a powerful tool for up-to-date documentation.
UPDATE: This blog post has been updated based on feedback from Reddit and Hacker News. HN discussion: https://news.ycombinator.com/item?id...
Collectively, we have been thinking about sorting for longer than we have had computers. There is still an active literature 1 , 2 , 3 . We are taught that how the counts of comparisons and swaps vary with problem size is what matters: as problems get bigger, order dominates, and anything else is buried in the noise…
Sometime recently in the past I complained about Maildir. You can go read the post, but the executive summary is that I think Maildir uses an actively user-hostile directory structure and extremely convoluted filenames that do not convey any meaning at all. For good measure, I will also reiterate that Maildir does…
Why call-by-push-value is the best evaluation strategy, and why it's going to take over
I’ve been reading Pearl’s Causal Inference in Statistics , and one of the exercises poses this problem:
Today we're running Apache NuttX RTOS inside a Web Browser. What if we could compile and test NuttX Apps in the Web Browser? Let's explore with TCC 64-bit RISC-V Compiler, compiled to WebAssembly with Zig Compiler.
As we approach the final release date for Python 3.13, I’ve seen an uptick in discussion regarding 3.13’s introduction of an optional GIL. While removing the GIL has been a long time coming for the average user (I’ve dreamt of this for nearly 20 years), there have actually been two concurrent efforts to improve…
Lisp lets programs define new setf forms for assignment. The most common example is from CLOS , where a class like this:
databases plus wibbly wobbly timey wimey stuff
Handling errors in Go is simple and flexible – yet no structure! It’s supposed to be simple, right? Just return an error , wrapped with a message, and move on. Well, that simplicity quickly turns into chaotic as our codebase grows with more packages, more developers, and more “quick fixes” that stay there forever…
Musings about async await again and why I think virtual threads