Building Game Prototypes with LÖVE
Chess, card games, and Lua.
The latest blog posts to take off on Hacker News. 1,116 posts.
Chess, card games, and Lua.
Static or dynamic, a program's design is written in its types.
The product of software development is not code but a mental model, a theory: a specific way of explaining the world.
How does the Linux kernel represent processes and their state: A breakdown of task_struct and mm_struct
The Game Boy Advance is an interesting game console. It has a modern-style CPU (32-bit ARM, lots of registers), but uses an old-fashioned tile based renderer like how the NES did it in the 80s. Don’t get me wrong, since its one of Nintendo’s last tile-based systems, they took the idea as far as it can go with fancy…
Testing against a real database uncovers hidden pitfalls that can appear as the application matures
Some of the interesting and insane facts I learned about SQLite
In the previous post, we established that as long as ruby/json wasn’t competitive on micro-benchmarks, public perception wouldn’t change. Since what made ruby/json appear so bad on micro-benchmarks was its setup cost, we had to find ways to reduce it further.
Why I don't do Domain Driven Design
My long-time collaborator Richard Barnes [1] used to say that "in security, trust is a four letter word" , and yet the dominant experience of using any software-based system—which is, you know, pretty much anything electronic—is trusting the manufacturer. Not only is there no meaningful way to determine what software…
The videos have been uploaded , thank-you notes have been sent, and the kiddo has decided to play a little Minecraft on her own, so now I get to write some quick notes on EmacsConf 2024 .
I have been doing Java in Neovim for quite a while at work, and it’s been a very pleasant experience. As Neovim usage grows (especially amongst the younger crowd), I want to share how I do it.
I recently picked up an embedded project in which I needed to build a highly customized full system image with minimal boot times and NetBSD was the best choice for it. Let's look at why its build system helps.
So I like to joke occasionally on the Fediverse that when looking at Wikipedia's list of programming languages supporting dependent types :
I built a Factorio belt balancer solver. From tiny 2x2 grids to a massive 16x16 monster, every step revealed new solver tricks, numeric hiccups, and devious debugging puzzles.
In 2023, we launched an AI-powered Chief of Staff for engineering leaders—an assistant that unified information across team tools and tracked critical project developments. Within a year, we attrac...
In the context of out-of-order microarchitectures, I was under the impression that execution units remain occupied until the µop they’re processing is complete. This is often not the case.
An implemenation of the SuperMemo-2 algorithm.
In this tutorial, I will teach you how to write your own virtual machine (VM) that can run assembly language programs, such as my friend’s 2048 or my Roguelike . If you know how to program, but would like to gain a deeper understanding of what is going on inside a computer and better understand how programming…
Introduction The more I learn about Lua's design and implementation, the more impressed I am. It's very rare to see software that does so much with so lit...
The Ivory Tower is a blog about software engineering and development philosophy by Anders Sundman.
This is not at all news, but it comes up often enough that I think there should be a concise explanation of the problem. People, myself included, like to say that POSIX time, also known as Unix time, is the number of seconds since the Unix epoch , which was 1970-01-01 at 00:00:00.
So I was working on improving a DOS emulator, when I found that something seemingly trivial wasn’t working right when COMMAND.COM was asked to do the following:
CPS, or continuation-passing style, is an intermediate representation for programs, particularly functional programs. It’s used in compilers for languages such as SML and Scheme. Much of its utility comes from its support for tail calls and nonlocal control flow such as call/cc, but it can also be used as an…
Design decisions core to JavaScript have caused a multitude of problems for benchmarking. Is there a solution to this?
On the concepts involved in a running program. What happens, exactly, when you double click an executable file, or launch it from the command line, and it begins to execute?