This post summarises some recent experiments and learnings around concurrency & Koka. There’s no immediate application yet, just a bunch of thoughts which might be interesting if you’re into concurrency, parallelism, or Koka. If you’ve never heard of Koka before that’s OK, you don’t really need any prior knowledge (but I wrote about it here ). Koka and concurrency: There are a few active avenues…
It’s been a while since I’ve been excited about a new programming language. I’ve learnt and used a number of languages, either because of necessity or curiosity, but there’s only been a few languages in the past 20+ years where I’ve thought “this could be my new favourite language”. For a long time Python was my preferred language for its simplicity, and then StratifiedJS for its powerful approach…
I’ve long considered fluency in Nix to be a superpower that pays off way more than you might imagine, if you haven’t experienced it yourself. Sure, it helps with the obvious practical things you’d expect - my system setup is declarative, reproducible, and suffers from vanishingly few chaotic state-based issues that tend to plague less reproducible systems (like brew in particular). There are…
Off-topic for this blog, but I have done a few indoor skydiving sessions over the past year at iFLY Melbourne . This is some video from my third session. It’s pure fun and I recommend it to anyone, you get the feeling of flying without the hassle and terror of jumping out of a plane :)
I don’t blog much these days, apparently I just use it to announce roughly one new thing each year. But I do want to post more writing, so here’s a description of how I think about cross-compilation in nix. This post doesn’t assume much nix knowledge. It’s not a how-to post describing the (complex) process of how to cross-compile software, it’s more of an exploration of how cross-compilation…
I think nix is fantastic. Language-agnostic, cross-platform, reproducible, cacheable software building and distribution. It’s not an easy thing to learn, but the payoff is tremendous. But one thing about nix is that you typically need to be all-in. When building software, this makes sense - Nix’s reproducibility only works if all your dependencies are themselves available within nix. But as a…
chored is a utility for handling repetitive chores and files. There are many repositories. Lots of them have similar (tedious!) things they need to do, which aren’t particular to that repository: building linting testing generation of configuration for tools: CI configuration build settings all sorts if common or shared files release management documentation generation pull request automation…
Update: Doing things my own way is too much effort, I just use niv these days :) My last post was more than a year ago, in which I described my long journey towards better package management with nix . Well, it turns out that journey wasn’t over. Since then, I’ve been using the tools I created and found them unfortunately lacking. So, I’ve built just one more tool, to replace those described in…
Update: Doing things my own way is too much effort, I just use niv these days :) This post is targeted at users of nix who write / maintain package derivations for software they contribute to. I’ve spent a lot of time doing (and thinking about) this, although it’s probably quite a niche audience ;) tl;dr : you should check out nix-pin and nix-update-source if you want to have a happy life…
Often you need to progressively build up a set of commandline arguments in bash , like so: FLAGS = "" if [ -n " $LOGFILE " ] ; then FLAGS = " $FLAGS --log $LOGFILE " fi someprogram $FLAGS ... This usually works, but is a bit rubbish: this will break if $LOGFILE has a space in it, because bash will split it into multiple arguments adding a flag is kind of tedious with the FLAGS="$FLAGS ..."…
(cross-posted on the Zendesk Engineering blog ) We use Ruby a lot at Zendesk, and mostly it works pretty well. But one thing that sucks is when it makes the wrong solution easy, and the right solution not just hard, but hard to even find. Spawning a process is one such scenario. Want to spawn a child process to run some system command? Easy! Just pick the method that’s right for you: `backticks`…
or, “I’ve written a lot of software, and now I have regrets” As time goes on, people write more software. Well, at least I do. And these days, it’s pretty easy to put up everything you’ve created on GitHub or somewhere similar. But of course, not all software is created equal. That 100-line JS library I created in one day back in 2011 which has seen 3 commits since is probably not going to be as…
For the past few months, Joe Duffy has been blogging about the most interesting aspects of the design and implementation of Midori , a now-abandoned research OS from Microsoft Research, which has been incredibly interesting to follow. I particularly enjoyed the latest article about the error model , but the whole series is worth a read (and a subscribe, since there are more on the way). (view…
Well, it’s been a little while (something like 10 years) since I’ve done any 3d rendering. After seeing a bunch of inspirational things recently (particularly caminandes 3 and browsing Fi Silva’s work), I thought I’d crack open Blender and have a go at some low-poly artwork. Of course, I pretty much had to make a blue wren: (click for huge wallpaper size) In terms of picking up Blender after not…
TL;DR: install nix and Xephyr , then try this script . I’ve worked on a GNOME Shell tiling window extension ( shellshape ) for 5 years now, since before the first release of gnome-shell. The shell itself is impressively extensible, and it’s pretty amazing that I can distribute a tiling window extension which as just a bunch of javascript. But the development process itself has always been awful:…
Just a quick heads up, in case anyone comes here looking for verification: I’ve changed my twitter & github handle from @gfxmonk to @timbertson . I don’t have particular plans to rename this site, since that’s a lot more complex and it would break All The Links. But “gfxmonk” was a name I picked when I was big into computer graphics (and not a monk, though it sounded cool at the time). A decade or…
I’ve been aware of transducers for a little while, but haven’t actually used them, or even really felt like I fully grokked what they were good for. They come from the clojure community, but are making their way into plenty of other languages and libraries too. I’ve seen claims that they are a game-changing, breathtaking new concept, which didn’t really square with what they looked like . So I…
I use fish-shell as my default shell on my own computer, because it’s a pretty nice shell. Occasionally, though, this causes issues. Software tests in particular have a habit of sloppily running shell command. Typically, this can be fixed by just being more explicit, using execvp(['bash', '-c', '<command>']) (or just use execv* directly instead of going through a shell). But one case I couldn’t…
It’s the new year, and it seems to be a vibrant time for novel Operating System technologies. This is not intended to be an objective list of “the best things”, it’s just some up-and-coming technologies that I’m particularly excited about right now: Nix / NixOS I’ve known about nixos for a while, but not really had much cause to use it. This year, I started using nixos to deploy some cloud…
If I had my way, I would never deploy or administer a linux server that isn’t running NixOS. I’m not exactly a prolific sysadmin - in my time, I’ve set up and administered servers numbering in the low tens. And yet every single time, it’s awful. Firstly, you get out of the notion of doing anything manually, ever. Anytime you do something manually you create a unique snowflake, and then 3 weeks (or…