I've been making software professionally for about nine years and I really love it. I believe software has this empowering potential, I believe everyone should be able to understand it if they want to. This means I prefer open and accessible tools and standards wherever possible. It also means I try to learn in the open, sharing what I learn as I learn it.
My son bought me these polished hematite balls. We're both hematite fans. They're quite magnetic. If you get the rotations right they're happy enough to sit in this arrangement. At the beginning of this year I began a Diploma in Science, at the University of Queensland. For several years I've been thinking about how much I'd like to return to tertiary studies. There's so much I want to learn about…
Some time last year, during one of the many bouts of minor illness which strike children who attend daycare or kindergarten, ours was laid up on the couch watching episode after episode of Go Jetters . We must've watched everything then hosted on ABC iView at least three or four times. I wasn't feeling too well myself so joined in on the binge and after a while my head started wandering off down…
I stumbled into what might be some combinatorial esoterica and I can't stop thinking about it. Books Up until April 2023 we had a pretty special second hand book shop up the road, next to the local café 1 . While it was there my mid morning coffee runs usually involved having a browse and I often picked something up. A lot of the books I was buying were non-fiction, and it's this I'd like to blame…
Lately I've been thinking about really fun solutions. You know, those solutions which use some insight you were completely unaware of and make it all look like magic. It's been more than once that I've found myself stumbling into something called combinatorics when trying to learn more about them. On the way to better understanding these combinatorial solutions I've been reflecting on things more…
I read Elinor Ostrom's book Governing the commons on a whim after seeing it mentioned in a discussion about open source software communities. I believe this isn't an uncommon way for software folk to become aware of this book. Of the many fascinating insights Ostrom presents there are a few that have really stuck with me. My personally sticky insights aren't really related to the core argument,…
Let's say we've written a web app in Haskell. $ curl http://localhost:8000/hello/World Hello, World! $ curl http://localhost:8000/hello/Haskell Hello, Haskell! It sure would be nice if we could share it with other people. Let's deploy this wonderful thing to the internet using Heroku. Haskell and Nix Thanks to the Nix using Haskell community packaging up Haskell libraries and executables is very…
The operations practice of defining infrastructure as code has been popular for a while, and it’s for good reason. Lot's of strange and unexpected things can happen to our very important web-servers, so being able to quickly build another one in a (close to) identical state can be very handy. Sadly, strange and unexpected things don't just happen to web-servers, they can happen our development…
A few years ago I watched the Structure and interpretation of computer programs video lectures , kindly posted publicly by MIT OpenCourseWare. There's so much interesting material in them but one part really struck me, in 5B: Computational Objects Gerald Jay Sussman defines a pair "in terms of nothing but air, hot air". (define (cons x y) (λ (m) (m x y))) (define (car x) (x (λ (a b) a))) (define…
My website has changed a bit over time. It was initially a WordPress blog, contorted to do double-duty as a folio for my design work. More recently it's been a static site, first generated by Metalsmith and later Hakyll . About a month ago I started to feel that hosting my site on Github pages was a little disconnected. I know this sounds odd, but I wanted to have a more active role in its…
This post is about some reasonably advanced type-level features of The Glasgow Haskell Compiler and as such I assume some knowledge of Haskell. Despite this I've made an attempt to link to further resources on Haskell features as I introduce them. My hope is that even if everything here doesn't make perfect sense then at least some part of it might still be helpful. I was shown Servant by a friend…
Before we begin: in order to understand a lot of the following you'll first need some familiarity with Haskell syntax and be somewhat comfortable with what a Functor is. OK, now firstly: why learn about lenses? Every time I've seen lenses in action it's looked like wizardry. I mean, just look at these examples of using lens-aeson : someJson = [json| { packages: [ { version: 1 }, { version: 5 } ]…
Assuming you're a javascript dev who's had to deal with anything aysncronous. Firstly, we're going to talk about promises, so: What do we talk about when we talk about Promises? It's very likely you've done something like this: doSomethingAsync(function (resultOfAsyncThing) { console.log(resultOfAsyncThing) }) There's an interesting concept highlighted in that code above. What if we tried to do…