Teaching Compilers Backward
Jean-Luc Godard is quoted as saying, “A story should have a beginning, a middle and an end, but not necessarily in that order.” What order is best to tell the story of a compiler?
Why Emacs: Redux
redux adjective brought back; resurgent: the Victorian era redux.
Haskell is our first choice for building production software systems
Haskell's features enable rapid development, easy maintainability, and excellent performance, making it a top choice as an industrial-strength programming language.
The Problem with Gradle
Or: How to Remain Sane when Approaching Gradle (with apologies to Hans Dockter).
My Favorite One Liners
My favorite Linux command-line one-liners: turn shell output into an image, find your biggest directories, list your most-used commands, serve files over HTTP.
Generating JSON Directly from Postgres
PostgreSQL has built-in JSON generators that can be used to create structured JSON output right in the database, upping performance and radically simplifying web tiers.
Uncomfortable Truths in Software Engineering
New Post: ADTs in TLA+ Using Abstract Data Types in TLA+. It's an adaptation of part of my TLAConf talk. It's also a lot more advanced than most of the...
The Most Backdoor-Looking Bug I’ve Ever Seen
This is the story of a bug that was discovered and fixed in Telegram’s self-rolled cryptographic protocol about seven years ago. The bug didn’t get any press, and no one seems to know about it, probably because it was only published in Russian.
Zig 0.8.0 Release Notes
Zig is a general-purpose programming language and toolchain for maintaining robust , optimal , and reusable software.
Extracting Objects Recursively with Jq
The Algolia-powered Hacker News API returns nested comment threads that look like this: https://hn.algolia.com/api/v1/items/27941108
Java Virtual Threads Preview
Introduce virtual threads to the Java Platform. Virtual threads are lightweight threads that dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications. This is a preview API .
The Modern Java Platform – 2021 Edition
Many developers were burned by the overly complex world of Java back in the early 2000s. The Gang of Four patterns and middleware / J2EE / Java EE led to…
Folk wisdom on visual programming
I’m a fairly frequent Hacker News lurker, especially when I have some other important task that I’m avoiding. I normally head to the Active page (lots of comments, good for procrastinat…
What the Fastly outage can teach us about writing error messages
As developers, we can *definitely* do better than 'Error 503 Service Unavailable' when it comes to error messages. This article shows you how.
Git Commands Explained with Cats (2017)
git purr, git meowge, and git puss! My doodling on basic git commands, and difference between merge and rebase with cats!
Go 1.17 is deprecating the traditional use of 'go get'
You're probably reading this page because you've attempted to access some part of my blog (Wandering Thoughts) or CSpace , the wiki thing it's part of. Unfortunately you're using a browser version that my anti-crawler precautions consider suspicious, most often because it's too old (most often this applies to versions…
My Go executable files are still getting larger
The original draft of the analysis we presented was reviewed internally, and yet still inaccuracies slipped through. We are a team of humans. We make mistakes. We take full responsibility for the invalid conclusions we published.
Elixir and Phoenix after two years
Thoughts on the Elixir language and its Phoenix framework after two years of professional work.
Sorbet Compiler: An experimental, ahead-of-time compiler for Ruby
For the past year, the [Sorbet](https://sorbet.org/) team has been working on an experimental, ahead-of-time compiler for Ruby, powered by Sorbet and LLVM. Today we're sharing the source code for it. It lives alongside the existing code for Sorbet on GitHub, mostly in the `compiler/` folder:
So you want to write a GUI framework
Through several recent discussions of GUI programming in Rust,I have been left with the impression that the term ‘GUI’ means significantlydifferent things to...
Replit now supports every programming language in Nix
At Replit, we want to give our users the most powerful, flexible, and easy-to-get-started coding environment. However, it has been limiting because we only support a fixed set of languages and OS packages, some of which are outdated. Ideally, users should be able to use any language and install any package with…
Julia 1.6: what has changed since Julia 1.0?
Julia 1.0 came out well over 2 years ago. Since then a lot has changed and a lot hasn’t. Julia 1.0 was a commitment to no breaking changes, but that is not to say no new features have been added to the language.
Thoughts on Clojure UI framework
Ideas and inspirations for new Clojure framework for desktop apps