Skip to content

Instantly share code, notes, and snippets.


@sleepyfox sleepyfox

View GitHub Profile
sleepyfox /
Created Jul 29, 2020
On Hacking and forgetting - a critique

On hacking

Recently I reread 'Programming is Forgetting: Toward a New Hacker Ethic' by A. Parrish as it had come up in conversation with peers. Reading it now there are some fairly large problems with the article which I feel need addressing.

Firstly I want to frame the discussion by saying that the second half of the article, which deals with linguistics, systems thinking and general semantics is good stuff. There are valuable points there which we as an industry could well pay more attention to. The content of the first half of the article however is a condemnation of Steven Levy's 1984 book, 'Hackers : heroes of the computer revolution'.

The author in using Levy's book as a definition of Hacking and hacker culture sets up a straw man and falls victim to their own arguments of not succumbing to cognitive bias and cultural stereotyping. Levy's treatise, written in the era of Margaret Thatcher and Ronald Reagan is full of personal bias, and the bias of the time. Taking a quick look at this review of Lev

sleepyfox /
Last active Jul 27, 2020
Post-commit reviews, the good, the bad and the ugly

Post-commit reviews - 2020/07/13

Recently I read a tweet from @GergelyOrosz:

There are few engineering practices that I've not tried but I really want to. Post-commit reviews are one of them and @copyconstruct has a beyond excellent writeup. I'm thinking now is how to get to the stage that it's safe enough to fly with this:

He links to Cindy Sridharan's post on Medium about post-commit reviews which in it's opening paragraphs references a paper by Amazon on how they automate safe, hands-off deployments.

Then, after some preamble there's a section on what post-commit reviews are, and why you should prefer them over the more prevalent pre-commit reviews.

sleepyfox /
Last active Jul 14, 2020
The exponential horn of testing

The exponential horn of testing

drinking horn

My favourite type of horn, a Viking drinking horn from Horns of Odin.

Inspired by Seb Rose's tweet about 'Eviscerating the Testing Pyramid', which, although containing some reasonable thoughts, I cannot take seriously due to his bizarre choice of language.

"Hey, Rogue boy! You call that an Eviscerate?"
"But Kungen, I crit for over 10,000!"


Anyone can code.

Although we're used to being told that you need to be good at maths in order to learn to code, studies by educators and psychologists prove that this isn't true. Although some people would like to have us believe that e.g. an aptitude for learning languages makes it easier to learn to code, studies show that this isn't really the case either. The truth of the matter is that anyone can learn to code. All it takes is time, effort and persistence. If you're not sure whether you believe it - read this story:

Why learn to code?

  • Because you want to make a thing, and that thing is an app, program, or requires some programming in order to work?
  • Because you want to change the world and you need to code in order to do it?
sleepyfox /
Created Oct 30, 2019
Fruit Ninja pattern - Monlith to Microservices

The Fruit Ninja pattern

In the once popular mobile game 'Fruit Ninja', the player must use their finger like a katana to slice pieces of fruit that fly across the screen to gain points. Sometimes a bomb will replace a piece of fruit, and if the player accidently slices the bomb then they will lose one of their three lives. If you've never played Fruit Ninja before then this video shows the gameplay.

When on the journey from monolith to microservices, it is often the case that we need to slice off a piece of the application into its own service, and the choice and drawing of a seam to cut along is the key to making this approach successful.

Some things to consider:

  • Is the thing a domain entity? (DDD)
  • Does it have a bounded context?
sleepyfox /
Last active Jul 30, 2020
The Code of Cthulhu

The Code of Cthulhu

I did not invent this, I have extensively searched for the original article but failed to find it, so I'll do my best to reproduce it here.

Imagine a large Enterprise software development company. A bright young programmer joins this company, and in their first few weeks sets about the non-trivial task of understanding the gigantic bloated code base for the company's flagship product.

Finally, the young programmer ascends the dizzy spire of the company's office building and storms into the CTO's gloomy office with a stack of fanfold computer printout, pausing as they become aware of the music playing: a cacophany of crazed flutes and pan-pipes emerging from an audiophile system with a turntable that looks like a medieval orrery and a speaker that bears more than a passing resemblance to the monstrous shell of some long-extinct cephalopod. The music stops, the silence replacing it redolent of some awful finality.

Still full of righteous indignation the programmer angrily declares:

sleepyfox /
Created Sep 26, 2019
Languages I've used

Early days

I learned BASIC, 6502 Assembler, Pascal, 68000 Assembler, Modula-2, MATLAB, Logo, Fortran, DCL, Scheme, Ada, Prolog, CSP, VDM, Occam, HyperScript, Redcode, and the binary language of moisture 'vaporators before I left University.

Professional work

Commercially I've been paid for programming in C, Bash, Hitachi DSP assembler, Make, SQL, PL/SQL, Pro*C, Visual C++, Visual Basic, COBOL, C++, Java, Perl, TCL, Python, Objective-C, Scala, Smalltalk, C#, JavaScript, CoffeeScript, LiveScript, Go, Ruby, LISP (Sibilant) and most recently Clojure.

Just for fun

For fun I've dabbled in Emacs LISP, NewtonScript, Forth, Io, Dart, PureScript, Erlang, Ki, Haskell, Lua, Elixir and Elm.


jq cookbook

A series of easy-to-use recipes for helping filter logs et. al. with jq:

Show all logs from production for a service named 'foreboding'

cat*/*.log | jq select(.service == "foreboding")


'Users hate change'

This week NN Group released a video by Jakob Nielsen in which he attempts to help designers deal with the problem of customers being resistant to their new site/product redesign. The argument goes thusly:

  1. Humans naturally resist change
  2. Your change is for the better
  3. Customers should just get used to it and stop complaining

There's slightly more to it than that, he caveats his argument with requiring you to have of course followed their best practices on product design, and allows for a period of customers being able to elect to continue to use the old site, although he says this is obviously only a temporary solution as you don't want to support both.


How many monkeys do you have?

author: @sleepyfox date: 06-Apr-2011

Preamble: A colleague yammered today that he was off to see OutSystems® tomorrow, and wondered whether we had any comments. For the uninitiated: OutSystems® make a 4GL-style tool called agileplatform™ that reminds me very much of PowerBuilder or Visual Basic from the Good Olde Tymes©.

I've often talked over the past couple of years of the devaluation of the 'Agile' currency, in no small part due to the Scrum Alliance's commercial model and the programme that has been put in place to monetise the Certified ScrumMaster™ title. To quote one well known super-villain[^1]:

I'll sell my inventions so that everyone can have powers. Everyone can be super! And when everyone's super... [chuckles evilly] no one will be!

You can’t perform that action at this time.