Topics /
Software Engineering
The most popular blog posts about software engineering on Hacker News. 994 posts.
Implement with types, not your brain (2019)
When asked about the virtues of Haskell’s strong type system, most people will say the best part is that it lets you refactor with a zen-like tranquility, or that it stops your program from crashing at runtime. I mean, those are both great. But my favorite part is that having a strong type system means I don’t need to…
Where do argc and argv come from?
Continuing on from our tiny snake game , let's explore more into how binaries work on Unix. Let's figure out how our programs come to obtain their argc and argv parameters.
Blue Team Rust: What Is “Memory Safety”, Really?
A brief technical primer on Rust's key security feature, with embedded-specific context.
You’re better off using Exceptions
Exception handling is an error management paradigm that has often been met with criticism. Such criticisms typically revolve around scoping considerations, exceptions-as-control-flow abuse or even …
C++ still isn't cutting it
A blog about computer science, systems, technology, and sometimes vegan cooking.
Building My Own Chess Engine
Exploring the computational complexity of chess. Code snippets in Python so you can do the same.
A deep dive into the official Docker image for Python
The “official” Python Docker image is useful, but to actually understand why, and to use it correctly, it’s worth understanding how exactly it’s constructed.
Algorithm for Drawing Trees
I recently wanted to take a hierarchy of items and draw them in a nice tree structure. For example, a Family Tree. At the time, I thought “This will be easy, I’ll just Google for an alg…
Why software ends up complex
Complexity in software, whether it’s a programming languages, an API, or a user interface, is generally regarded as a vice. And yet complexity is exceptionally common, even though no one ever sets out to build something complex. For people interested in building easy to use software, understanding the causes of…
Dissecting Lemire's nearly divisionless random number generator
A very late blog post announcing the readability contest winners, a new (very) annotated implementation, and a surprising sort-of security issue found along the way.
A Defer Mechanism for C
An overview of a paper that presents a reference implementation of a defer mechanism (co-authored with Robert C. Seacord) has been accepted for publication at SAC’21. The full version is avai…
Libinput's bus factor is 1 (2019)
A few weeks back, I was at XDC and gave a talk about various current and past input stack developments (well, a subset thereof anyway). On...
Being Glue
Slides and notes for the Being Glue talk.
Rust concurrency: the archetype of a message-passing bug
Whenever I have a chance, I extol the virtues of message-passing and event-loops in structuring concurrent workflows in Rust. However, in…
Writing Python inside Rust
About a year ago, I published a Rust crate called inline-python, which allows you to easily mix some Python into your Rust code using a python!{ .. } macro. In this series, I’ll go through the process of developing this crate from scratch.
Rust for JavaScript Developers – Functions and Control Flow
Part 3 covers functions, closures, if-else, while, for..in, range and iterators
Scripting tmux
I often want to start similar workspaces in tmux; for example I always want to tail those two log files in a pane , or I always want to start both vim and mysql in a pane, etc.
Switching from Vim to Intellij
From Vim To IntelliJ In the beginning, a love affair For the last 10 years or so, I have been a die-hard Vim user. I was introduced to Vim…
Windows Explorer Through the Years
At a glance comparison of every major Explorer release
SwiftUI Defaults Considered Harmful
A few notes on SwiftUI and why UI frameworks should not try to be “smart”
How did software get so reliable without proof?
In 1996, the Turing-award-winning computer scientist C.A.R. Hoare wrote a paper with the title How Did Software Get So Reliable Without Proof? In this paper, Hoare grapples with the observation tha…
Multi-Tenant Architectures
Multi-tenancy Application Deployment Architecture could be modeled in 4 broad ways: Separate Apps & Separate Databases Shared ...
Io_uring By Example: cat, cp and a web server with io_uring
io_uring is a clever new, high-performance interface for asynchronous I/O for Linux without the drawbacks of the aio set of APIs. In this 3-part article series, we look at how to use io_uring to ge…