This is the website of Sönke Hahn. (That's me.) I'm a software developer
and live in Sunset Park, in Brooklyn.
Here's one (1) blog post that I've written:
Here are some things that I've done or been involved with:
Games
-
gravity-game:
(Code here.)
This is written in javascript/flow. It
uses React to draw the game scene as
an svg dom element. I was surprised how well that worked out.
-
Nikki and the Robots:
This is an old one. Written in Haskell. Hardly compiles anymore.
But I put binaries for linux
here.
And on youtube you can see
a trailer
and
some gameplay.
(If anyone is interested in making the game compile on Mac or Windows,
please get in touch!)
-
Oversteering Committee:
(Code here.)
Written in elm.
Inspired by the janky steering mechanism of a swan-shaped pedal boat.
Tools
-
write-a-page:
(Code here.)
-
looper:
Tool to easily experiment with sound programming.
-
i3-pretty-tree:
A tool for i3, that prints out the structure of the
windows on your current workspace as a dot graph.
-
scriptkeeper:
This is an experimental tool to check scripts against test specifications.
I think the idea is really cool.
The implementation is a proof of concept.
But it works for some smaller use-cases.
-
touchscreen-instrument:
This is a musical instrument that runs on touchscreen monitors.
I use it on the
1503i touch-monitor.
This was my main project while I was at the
Recurse Center.
Haskell Libraries & Tools
-
string-conversions:
Library to easily convert between the various string types in Haskell.
-
dead-code-detection:
Tool for adding type signatures to Haskell programs. Just kidding, tool
to detect dead code in Haskell programs.
-
generics-eot:
This is a library for Datatype Generic Programming,
that tries to be as easy to understand as possible.
I gave a talk about that at bobkonf in 2016 that you can find
here.
(Don't know bobkonf?
It's awesome, go check it out!)
-
getopt-generics:
A library to quickly generate nice command line interfaces.
Here's the
API documentation.
-
servant:
A library to encode REST API specifications at the type-level.
And then -- based on these API encodings -- you can write
servers, or
clients, or
generate documentation,
or a few other fancy things like
We also wrote a paper about it.
Rust Libraries
-
skipchannel: Rust implementation of skipchannels.
Interestingly, both sending and
receiving are non-blocking operations in this library.
-
cradle: A library that tries to make it
convenient and safe to create child processes.
Heavily inspired by shake's
cmd
function.