Flowing faster: foundations

I’ve spent the last few years using Gnome 2 and xmonad on Ubuntu. Since both Ubuntu and the Gnome foundation have dropped support for Gnome 2 I’m going to be forced to upgrade sooner or later. Fortunately I have a two week holiday followed by a new desktop at my new job, so now is a good time to break things on my laptop.

Read on →

Flowing faster: saving the cloud

While we’re on the subject of backups – like most people, I rely pretty heavily on cloud services. It sort of snuck up on me. I’m generally trying to move towards using cloud services as dumb servers so I can easily replace them. The first step is to be able to export and backup all my data.

Read on →

Flowing faster: backing up

A lot of the work in this series is going to be about improving my working environment. Let’s start with backups so I don’t lose all this hard work.

Read on →

Flowing faster: external memory

I always want to be a better developer than I am. What work I do that is worthwhile happens in the few hours of flow I manage to achieve every week. A million different things break that flow every day. I suspect that a large part of achieving flow is keeping the current problem in working memory. To improve my chances I can improve my working memory, offload parts of the problem to the computer or prevent context switches. I’m on my own with the first option, but a better development environment can help with the latter two.

Read on →

Search trees and core.logic

I mentioned in an earlier post that I had spent some time working on shackles, an extensible constraint solver based on gecode with extensions for logic programming. I eventually gave up working on shackles in favor of using core.logic which is much more mature and has actual maintainers. Last week David Nolen (the author of core.logic) was visiting Hacker School so I decided to poke around inside core.logic and see what could be brought over from shackles. The first chunk of work adds fair conjunction, user-configurable search and a parallel solver.

Read on →

Strucjure: motivation

I feel that the readme for strucjure does a reasonable job of explaining how to use the library but not of explaining why you would want to. I want to do that here. I’m going to focus on the motivation behind strucjure and the use cases for it rather than the internals, so try not to worry too much about how this all works and just focus on the ideas (the implementation itself is very simple but liable to keep changing).

Read on →

Hacker School

I’ve spent the last ten weeks or so at Hacker School. It’s something like a writer’s retreat for programmers. Unlike a traditional school there is very little structure and the focus is on project-based learning. In order to make the most of this environment, it’s important to be clear exactly what your goals are.

Read on →

Strucjure: reading the readme

I just released strucjure, a clojure library and DSL for parsing and pattern matching based on Ometa.

The readme on github has detailed descriptions of the syntax etc which I won’t repeat here. What I do want to do is run through a realistic example.

Read on →

Causal ordering

Causal ordering is a vital tool for thinking about distributed systems. Once you understand it, many other concepts become much simpler.

Read on →

Frustrations with erlang

With my work on erl-telehash and at Smarkets I find myself fighting erlang more and more. The biggest pains are the dearth of libraries, the lack of polymorphism and being forced into a single model of concurrency.

Read on →