All articles about Programming
2023
DOM
2022
Some initial thoughts about distributed actors in Swift 5.7
2021
Hexagonal grids
2019
b
, a bug tracker extension for Mercurial
Mercurial and Git
Routing around Git with the hg-git bridge.
2018
necessary-evil
maintainer change
JSON Feed types and utils for node.js
A generic function to forward events
Choosing properties for property-based testing
“Just…” thinking
When to use varargs
Observations on implement functions with variadic arguments.
ORM objects and system layering
Don’t use obsolete
attributes for internal code
Leveraging Pick
to simplify testing
Using some of the advanced types in TypeScript to deal with large interfaces outside of your control.
A minimal TypeScript dependency injector
A barebones dependency injection function that takes advantage of TypeScripts’s mapped types, and Promises.
Classes for structure, plain objects for data
An Idiom from Clojure applied to TypeScript.
Projects in need of homes
Crafting Interpreters
2016
Accessing Local Storage from a Web Worker
A quick how-to to work around the limitations on accessing LocalStorage from within a Web Worker instance.
Structured messaging followup
Short version: prefer interface extension over type aliases for structured message types.
Structured messages with TypeScript
Exploring how to use newer features of the TypeScript type system to work with structured messages in the browser.
2014
Adventure game implementations
A rabbit hole about classic adventure game implementations.
Enterprise
On features of enterprise software.
Clojure/West 2014 talks for web developers
Clojure/West is full of great talks. Here are three that web developers in Clojure should watch.
2013
Triggering CSS transitions on new elements
A work around to ensure that CSS transitions trigger for newly added DOM elements.
A TypeScript & alt JS grab bag
Various and sundry observations about altJS languages, with a focus on TypeScript.
Modeling union types using only functions
The lambda calculus is the basis for functional programming. Church's encodings in the untyped lambda calculus show an interesting pattern that parallels union types in languages like Haskell. Here I try to show how these discriminated union types can be implemented using only javascript functions.
ANN: Color.js 1.0
color.js
, my color management library for JavaScript, has hit 1.0.
A clarification
duck-wrapping types
Duck-wrapping
If it doesn't quack like a duck, wrap it in a duck. Or don't.
In which parables are quoted
I steal from Phil Hagelberg's IRC comments again.
Static types are great, but I don't use them in practise
In which I foolishly chip into a long standing nerd debate.
2012
The right abstraction
In which Phil Hagelberg comments on abstraction.
The Clojure web stack and the CRUD stack
Why it is my opinion that Clojure is better off with out a CRUD web framework.
Reconsidering the relevance of design patterns
Design patterns fell out of favour in the last five or so years. I think there is still some value in them.
Reversible and composable routes?
Unanswered about defining routes in web applications
Templates are functions
An article that looks at templates in web development in the context of pure functions and functional programming.
Knife sharpening
A professional knows when to sharpen their tools.
2011
Simple L‑system generation
A simple but functional implementation of L-Systems in Clojure.
Comprehensions continued
Trevor Burnham's reply to my critique of Coffeescripts comprehensions.
CoffeeScript comprehensions are broken
An examination of List Comprehensions in several languages, how Coffeescript's ‘comprehension’ semantics differ from the common case, and limitations that arise.
A brief overview of the Clojure web stack
Ring is the foundation of web programming in Clojure. It has a broad ecosystem of libraries that fullfil many different roles in the web stack. This article introduces the fundamental concepts of Ring as well as four major libraries, and explains common idioms to help you get started quickly.
Parsers generating parsers
Following my introduction to fnparse
, this article looks at how more common functional programming tools can be leveraged to make parsers that output new parsers.
Start parsing in Clojure: fnparse
Parser combinators are a powerful way of expressing complex parsers as first class operations in a language with first class functions. This tutorial introduces one such library, fnparse
, for Clojure.
Error monads revisited
An error monad in Clojure
2010
ANN: Necessary-Evil
Necessary-Evil is an XML RPC library for Clojure.
SVG maps with Cairo and Mapnik
Using open source technology and data to render maps.
Impedance mismatch with CouchDB
Some observations, both positive and negative, from using CouchDB to build this site.
Monads: redux
Thoughts on the appropriateness of monads in Clojure.
Ghosts in the machine
Following on from looking at state monads in the context of Clojure, this article looks at variations that add different forms of state-m
of non-determinism.
Welcome to the machine
A close look at how the state monad is implemented and used in Clojure.
A couple of lists
Further comparisons between Python and Clojure.
On iteration
How Python's view of iteration lead me to Clojure.