jan.krutisch.de

make().break().crush().groove().body().move();

an image of jan, generated by gravatar

I am a software developer, tech writer, speaker and multi purpose geek.

I love web development, like to dabble a bit with hardware, especially music related electronics, and, apart from that, will happily apply my coding skills wherever possible.

Mostly for historic reasons the blog articles on this site are written in two languages: The german articles are usually a bit more personal or even political, while the english articles are more work- and tech related.

How I almost got run over by a car in 2003

Today, I came across a great article by Bodo, a friend from Berlin that can be best summed up with a tweet from him:

I couldn’t agree more - I myself had to learn this the hard way, though. I shared a bit of my own experience on twitter today, but I felt like this could use some more words.

When the impostor syndrome ruins your decision making

One day, I’m going to do a writeup of the technical restructuring I just did on probably one of my most important projects right now. Today is not that day, because I want to talk about the reasoning and the history of that rewrite instead, on a meta level.

I’m currently building an open source library published to npm to parse and render a file format we’ve designed for Open Color Tools. We’ve built a first prototype using a YAML parser and doing some preprocessing, but the format quickly evolved into something that was essentially incompatible with YAML, so we needed a new solution.

The Binary Toolbox (for JavaScript)

The first time I tried my luck in parsing binary files within the browser must have been the Cloudtracker2 project, my (slightly out of date) try to make a good Protracker player/Editor for the web (It sort of lives on in the Halfplayer project if you’re interested). Parsing binary files in the browser is actually no longer a problem, but I thought it might be a fun exercise to write down some notes on what I’ve come across in one of my current projects, which involves intensive binary data munging on a much bigger scale than what I have tried so far.

So, here’s the toolboxes contents:

Additionally, we’re going to talk about file drag and drop, creating object URLs and other things.

The Rails Architecture Fallacy

Someone has been wrong on the internet. I hate it when that happens. And so I started to write a comment and then I thought to my self, hey, this is great blog post material, why should I waste it on someone who is wrong on the internet. So here we go. It reads like a comment on someone who was wrong on the internet at times, because that’s exactly what it is :)

Today, I’ve stumbled across a blog post, via RubyFlow, which is boldly named Ruby on Pains by Facundo Spagnuolo. It is a melange of falsly applied pure OOD wisdom and (I can only assume) juvenile arrogance (Do I sould like an old fart already? I’m in my forties now, I have to sound like an old fart now), that made me a little angry and made me want to reply. Not sure this is a winning move, but I think my reply does contain some parts that bear repeating, so here we go.

The other side of static vs. dynamic typing systems

I’m currently working on a small web application that has to do a fair amount of munging binary data in the front end (meaning: JavaScript). One of the things it needs to do is inspect data packets, unpack them (from a simple 7/8 bit encoding scheme invented in the 80’s) and checksum them. The checksumming is done with a standard CRC32 algorithm. It took me a few hours to find a JavaScript library that uses the same polynomial as the counterpart of the app uses (which, luckily, is a widely used one, for example zlib uses it) and was usable within my Ember/Rails setup.

I tested around a bit and had a setup that worked, until I started testing with bigger packets and suddenly, the checksums wouldn’t match anymore. As it turns out the fact that the library worked in the first place was by chance: It returns a signed 32 bit integer and my test setup in the beginning simply produced a checksum that didn’t have the sign bit set. In parallel, I verified the results with two tools: The Ruby zlib bindings (part of the stdlib) and the crc32 command line tool that comes with OS X. Both return unsigned integers.

My 2015 in Review

I’ve recently taken a look at my blog archive and it seems I never actually did a year-in-review blog post which was kinda surprising to me. 2015 was a year that turned out completely different from what I thought it would, so I thought, this year, it might we worthwhile to reflect on that a little. Also, I’m now slowly becoming somewhat of a senior (with my 40th birthday approaching way faster than I appreciate) and with seniority comes the privilege of sharing your thoughts whether others want to hear it or not. Haha.

Anyway. Let’s start with a simple subject

Having fun with pixels and lua

The following text is somewhat like the long version of a lightning talk I gave at the most excellent Eurucamp. As I used a lot of animated GIFs in Keynote, it’s kinda hard for me to publish a working version of this presentation in any form. So this article must do.

In her keynote at Eurucamp, Joanne talked about awe and how to combine coding with our passions.

For me, one of the ways to get that extra kick is dabble in game programming. I’m bad at it, though. The reason is, I guess that I always lose myself in complexity and then all the fun and awe is lost. This is partly because I tend to over-complect both my thinking and my creations, but also partly because most tools do not keep you from doing that.

A few weeks ago, around the time the amazing SoCoded happened, I stumbled over a thing called Pico-8. It is a so-called fantasy console, a sort of virtual machine or emulator of an imaginary console from the 80’s, designed and built by Joseph “zep” White from lexaloffle games.

Pico-8 is wonderfully quirky, but it also has some very interesting technical limits, artificially but deliberately chosen by its creator.

The Birth of a Radical

Most people who would consider themselves “radical” in a specific sense usually didn’t become “radicals” overnight. It’s a slow process that can take years. And one day you find yourself wondering “how did this happen?”

I’ve been wondering about this for quite some time now. Somehow, between 2010, when I started cycling to work every day, and today, I’ve become a radical. Not in the sense you might imagine if you’re a die-hard motorist, though: I drive conciously, often very asserting, and certainly a bit cheekily, but I try very hard to do this within the boundaries of our “road code” which has the very poetic name “StVO” or “Straßenverkehrsordnung”. The problems actually start right here: In contrast to the many many motorists I run into conflict with every day, I know the relevant parts of the road code very well. It’s a very common phenomenon as a cyclist in Hamburg to be yelled at for basically doing exactly what the law wants you to do. Or to be yelled at for telling a motorist that she or he just violated the road code in a very dangerous and reckless manner.

Service-Wüste Kabel Deutschland

18:50 - Ich komme nach Hause. Das Internet hat offensichtlich gerade noch ausgereicht um meine Hues anzuknippsen, kaum sitze ich am Rechner, ist das Internet weg. Die Outbound-Connection-Lampe am Kabeldeutschland-Router blinkt.

18:55 - Nach durchbooten des O2-Routers (Ja, ich habe zwei Internet-Anschlüsse, und ich weiss auch warum) habe ich zumindest wieder 8 MBit von 116 bezahlten MBit zur Verfügung (16 über O2, 100 über Kabeldeutschland).

18:57 - Ich fange an, mich durch die Hilfe-Seiten von Kabeldeutschland zu klicken. Seit der Vodafone-Übernahme ist da viel kaputt gegangen, aber siehe da: Ich habe den richtigen Knopf gefunden:

Super cheap VPS providers

I am usually not a cheapskate. I love to pay decently for a service or a thing worth paying for. With servers, things are a little different. First of all, the price span between super cheap and super expensive is usually really huge, while it’s often times totally unclear what the difference in service might be. Services like Digital Ocean are able to charge a healthy surplus by providing a superior “experience”, while their machines are, for the most part, beefy, but not exactly outstandingly so. I am writing this being a (happy) Digital Ocean customer, by the way.

So, a few weeks back, I was doing some research (Read: I googled a lot) on VPS hosters with a little twist: I tried to find European or even German services, with the clear goal of finding the cheapest ones. This didn’t become some sort of shootout, because that would have meant that I needed to deploy compareable things to to it, so don’t expect something like that here. I’m going to name a few names, but not to especially endorse them but to make my report a little more concrete.

Via google, I stumbled upon some sort of comparing site, webhostlist.de (unfortunately in German only). They listed a lot of machines way below the 5 EUR mark, which actually caught me by surprise. I remember I rented my first, very small VPS back in 2009 or so and it was a tiny, tiny machine for nearly 10 EUR a month. So this made me curious. I further trimmed down the list to services with more or equal to 1 GB of memory, because I think this is currently a pretty good limit for hosting small things.

I instantly bought three services, all of them high on the webhostlist.de list and as soon as the accounts rolled in, I started to deploy things to it. So far, my list looks like this:

  • An iRedMail Mailserver, which is my testbed for self hosting email again (most likely worth an own article)
  • A server that runs graphite, as a central hub for metrics coming in from other servers
  • An application server for an upcoming little thing