This is my blog

I enjoy writing about all kinds of stuff, so please don't expect any kind of common theme here.

October 13, 2021

An expensive mistake — a short CTO war story

This story was recounted to me many years ago by the CTO of a startup. He himself was responsible for this error which cost the company tens of thousands of USD. The startup built an online multiplayer game. Users had to register and all registered users were represented by the same type of animal within the game. Let’s say that all users were cats. One day, sometime after the site had launched and was performing really nicely, the backend locked up solid. The tech team rebooted the server and things ticked along...

Read More

October 5, 2021

Why you should launch your product without a login

I’ve launched 2 successful web products (and several unsuccessful ones) that did not have a login. The product that I’m currently working on ( has over 50k pageviews per day, monthly revenue of 2000 USD and has been online for 4 years – and I’ve only just added a user login. So what are the advantages of launching without a login? Summary By deferring implementation of a user-login you are: Speeding up development and reducing code complexity Reducing friction for your users during onboarding Reducing the attack area (no email or password...

Read More

June 22, 2021

Using Python and Docker to generate social images for any website

In today’s attention economy you need to stand out when you post your content on social media: that means having some kind of image as part of the package. This is easy if you’re sharing a blog post with photos (or other images) because you can setup your system to use one of these photos. But what if you’re sharing content that doesn’t come with a pre-made image? This is a problem I was facing. I’m building an online scoreboard and leaderboard app whose content regularly gets shared on Twitter, Facebook and elsewhere. However, these scoreboards do not come...

Read More

June 7, 2021

The top-ranking HTML editor on Google is an SEO scam

This is the story of how I accidentally discovered what appears to be a sizable SEO scam. Summary Some highly-ranked online tools for editing or “cleaning” HTML seem to be secretly injecting links into their output to push themselves and affiliated sites up the search engine rankings. This scam is highly successful and appears to have gone undetected so far. Tools which I suspect of doing this are all made by the same people: … and others Sites that have fallen victim to this include BoingBoing, the official German Football Association and Kaspersky....

Read More

March 30, 2021

Why I'm quitting my job to build an online business

I’m quitting a good job to go it alone: I want to build an online product that can generate revenue. Hopefully it will become a sustainable business. Why am I doing this? I am doing this because I want to have freedom. Creative freedom, financial freedom and the ability to work on my own schedule. Naval Ravikant, an indian-american investor and modern-day internet sage says the following: You’re not going to get rich renting out your time. You must own equity - a piece of a business - to gain your financial...

Read More

March 21, 2021

A parable about startups and tech stacks

Once upon a time there was a young man who lived on an island where life was simple and austere. The young man dreamed of a different life, a life on the mainland, where there were shining cities, culture, exotic ideas and adventure. He spent most of his waking hours making plans about how to get to the mainland. Many young men before him had cultivated the same dream. Many had set off on the journey across the ocean which took many months. A few had made it, sending back...

Read More

February 25, 2021

Google Analytics: Stop feeding the beast

The beast that is Google There was a time when Google was a small, quirky company with a single product so awesome that it blew away the competition. That time is long gone. These days Google is a gigantic multinational mega-corp. But that’s understating it a little. Think of Google as a kind of Godzilla that slurps up data about its users at one end and craps out gold ingots at the other. It does both of these at huge scale. When thinking about Google, there are three things that are not...

Read More

July 14, 2020

Why I am switching to Apple

Because the hardware is great and the software is not made by a gigantic and opaque ad-tech company (Google). That’s all. Bye 👋

Read More

October 3, 2019

Britain believes in a fairy-tale version of its history

This is going to be a rant, so buckle up. I went to school in England, from primary school all the way to higher education. I was taught British history the British way. I had no reason to question anything I was taught. Outside of school I thoroughly absorbed the British point of view concerning their place in the world. However, I have an unusual perspective because after growing up in England, I moved abroad and reflected on my experiences. I have since concluded that children in Britain are taught a naive, incomplete and context-free version of their country’s history....

Read More

July 3, 2019

A new type of basketball scoreboard

Why are basketball scoreboards so expensive? You can easily pay over 3000 USD for a hardware scoreboard! Of course you could download a a basketball scoreboard software for your computer and then display the result on a large monitor or projector. However, the software solutions have other problems: They often only run on one type of computer (e.g. Windows) They have a terrible usability They are still fairly expense They are all ugly! So here’s a new solution: a basketball scoreboard that runs in your browser. It looks like this: This means...

Read More

June 23, 2019

Die atemberaubende Beschissenheit von 3D Secure bei der DKB

Das 3D Secure Verfahren der DKB ist eine Frechheit. Es ist peinlich und grotesk. Es ist ein perfektes Beispiel dafür, wie Deutsche Banken kopfüber und ahnungslos ins Verderben rennen. Was ist überhaupt 3D Secure? Die DKB Webseite sagt: “3D Secure ist ein Service von Visa, Mastercard und der DKB, der Ihnen beim Online-Shopping zusätzlichen Schutz vor der unberechtigten Verwendung Ihrer Kreditkarte bietet und die aktuellen Sicherheitsstandards für Zahlungen im Internet erfüllt.” Ich werde mich hier nur über das Anmelde-Verfahren für 3D Secure auslassen, die Probleme, die bei der Nutzung entstehen, kann man...

Read More

March 29, 2019

A simple theory of consciousness

This is a text I originally posted on Quora. If you find it marginally interesting then it has fulfilled its purpose. What is consciousness? Consciousness is an essential tool for human social interaction. It arises as a result of living in societies of individuals with complex motives. To explain, let’s begin with a fundamental assumption: Being social and cooperating have many benefits. On average, individuals that are better at being social will be more successful at surviving and reproducing than individuals that are less social. Due to limiting factors (e.g. time available) individuals can only be...

Read More

December 21, 2018

How to embed an online scoreboard using an iframe

This is a post demonstrating how to embed a scoreboard or leaderboard using an iframe for What’s quite nice is that it will update automatically without the page reloading. First of all you need to go over to and create your scoreboard. You can do this without registering or providing an email address. Pretty cool, no? Click the “Share” button at the top of your scoreboard. Click the copy button next to the embed code. Paste the code into your page (e.g. Wordpress, Wix, Square, etc.) That’s it! Check this out for the full...

Read More

September 21, 2018

Why you should work for my employer

I want to tell you about my current employer (a Berlin-based company) and why it’s very unusual as well as being an excellent place to work. I’ve been there for around 1.5 years. These opinions are my own and provided of my own volition: I’m not being paid to write this, I was not told to write this, nor is there a gun pointing at my head. Also, I’m writing from the perspective of someone who’s spent their career in the (Berlin) startup world. Let’s begin. Self-organisation and Holacracy The company is well on the way to becoming self-organised....

Read More

June 13, 2018

Lessons from a carpet salesman

How to make a carpet Last week I had a sales experience I will never forget. It began like this: “You are about to receive some very important insights into an ancient industry. Please let me have your undivided attention.” The speaker of these words was a well-groomed alpha male who was not fond of interruptions. I was in Turkey with a group of German tourists and we were visiting a carpet manufacturer and dealership. “My name is Dolunay”, our Turkish host continued. “It means full moon. You will find my name on...

Read More

June 2, 2018

Z-shell in Ubuntu 18.04

All the cool kids are using z-shell instead of bash these days. I won’t go into details here, other than saying: zsh has much better tab completion behavior than bash it makes working with git much more pleasant and productive Here’s what you need to do to install zsh, install Oh-My-Zsh (a prepackaged bunch of themes and addons) and get the fonts working on Ubuntu 16.04. 1. Install prerequisite packages sudo apt install git-core zsh 2. Install Oh My Zsh sh -c "$(curl -fsSL"...

Read More

January 11, 2018

Creating an online scoreboard with Python Flask and SQLite

I recently wanted to learn something new and decided to make a webapp using Python Flask. Webapps are often under-appreciated next to their native cousins, especially when some kind of user collaboration is required. Not only are webapps an order of magnitude easier to implement, their usability can actually be superior to native apps in certain situations: collaboration paired with no-registration onboarding is an unbeatable combination. I think this has been wonderfully demonstrated by, which I made with a bunch of friends. Keeping score online So I searched around for an idea and hit upon making a...

Read More

August 30, 2017

How to quit Facebook gracefully

Facebook is really really awful. I hate Facebook. It chews up too much time. It’s watching you on every website you visit, all the time. It’s basically a massive surveillance operation. How does this work? In short, using those innocent looking 👍 buttons that are plastered all over the web. You don’t even need to interact with them. Facebook makes gazillions of dollars by giving advertises access to you based on what Facebook knows about you. Read more here. It’s bad for your mental health. Yes really. You can Google it right now. It is an...

Read More

July 8, 2017

Empirum auf dem Mac entfernen / deinstallieren

Auf meinem Arbeitsrechner (ein MacBook Pro) läuft der Empirum Agent, eine Software von Matrix24. Sie ermöglich es unseren IT Administratoren viel zu automatisieren: Betriebssysteme und Software installieren, Ausstattung inventarisieren oder regelmäßig Softwareaktualisierungen durchführen. Leider habe ich auch den Eindruck, dass mein Mac deswegen sehr heiß wird. Mit folgeden Shell Kommandos kannst du Empirum in die ewigen Jagdgründe der ungeliebten Software schicken ☠️. Dafür benötigst Du allerdings sudo-Rechte auf deinem Rechner. sudo launchctl unload /Library/LaunchAgents/com.Matrix42.GUIAgent.plist sudo rm -f /Library/LaunchAgents/com.Matrix42.GUIAgent.plist sudo launchctl unload /Library/LaunchDaemons/com.Matrix42.EmpirumD.plist sudo rm -f /Library/LaunchDaemons/com.Matrix42.EmpirumD.plist sudo rm -fR /Library/Application\ Support/matrix42/Empirum sudo rm –fR...

Read More

February 27, 2017

Blankz - a Mad-Libs™ like game that you can play online

For my newest side-project I wanted to use Google App engine. I find PaaS systems to be very alluring for two reasons. Firstly, the fact that (in theory) the system requires zero maintenance or system administration. Secondly, they scale seamlessly. I was prepared to pay the price of consumer lock-in that occurs with Google App Engine, especially when you opt for the Datastore, as I did. I aimed to make something that has inherent virality, like most of my projects. In this case it’s a collaborative form of the famous Mad-Libs™ game. One person can start a game, but it...

Read More

January 14, 2017

Getting hit by an app store penalty

I recently experienced what I can only assume is a penalty on the Google Play app store. One of my apps has around 250 downloads per day. These are purely organic installs and I have not run any campaigns for over a year. On the 5th of January I noticed a sudden usage and install spike. As luck would have it, I had real-time Google analytics open at the time, otherwise I would have missed it. Usually between 1-10 people are using the app at any one time but this suddenly increased to around 40. I’ll never know exactly...

Read More

September 3, 2016

Ein SEO Experiment mit Frau Wirtin

Hin und wieder suche ich etwas im Internet und bin dann erstaunt, wie veraltet die Seiten, die man findet, sind. Oft sind sie mit Werbebannern übersät, ohne HTTPS und nicht mobil-fähig. Trotzdem rangieren sie unter den Suchergebnissen ganz vorne. Daher werde ich ein SEO Experiment starten. Ich nehme einen Inhalt und präsentiere ihn auf einer SEO-freundlichen Seite. Rutscht die Seite dann ganz nach vorne? Als Erstes probiere ich’s mit den so-genanten Frau Wirtin Verse oder Wirtinnenverse. Wikipedia sagt dazu: Wirtinnenverse sind Scherz- oder Spott-Gedichte meist derb obszönen oder zotigen Inhalts auf eine überlieferte Melodie in deren Reimschema. Einfach auf...

Read More

May 9, 2016

Replacing Launchrock with Flask

I’ve being playing around with Python Flask recently and my first project is a self-hosted replacement for Launchrock. All it does is throw up a landing page and a signup form. Get the code on GitHub. My next Flask project will be a web-based scoreboard, or a scorekeeper if you will. Stay tuned!

Read More

May 2, 2016

Z-shell in Ubuntu 16.04

All the cool kids are using z-shell instead of bash these days. I won’t go into details here, other than saying: zsh has much better tab completion behavior than bash it makes working with git much more pleasant and productive Here’s what you need to do to install zsh, install Oh-My-Zsh (a prepackaged bunch of themes and addons) and get the fonts working on Ubuntu 16.04. 1. Install prerequisite packages sudo apt install git-core zsh 2. Install Oh My Zsh sh -c "$(curl -fsSL"...

Read More

March 1, 2016

A tool to present user stories

The legendary computer scientist Donald E. Knuth was in the middle of writing a series of books, when he realised that the typesetting systems of the day weren’t to his satisfaction. So he did what any tinkerer in his situation would do, which is epically procrastinate interrupt his writing and make a better system first. Eight years later his mission was complete and he had built the best typesetting system in the world. He then went back to writing his books. Anyway, I’m no Donald E. Knuth but recently I wanted to discuss a bunch of user stories...

Read More

February 26, 2016

Ubuntu development has stagnated

Last year I ranted about the state of Ubuntu and claimed that it had a general smell of decay and abandonment. This time I decided to try and find some concrete evidence to back up my claim and wondered whether mailing list activity would be a good proxy for measuring the health of the project. So I wrote a small script that analyses some Ubuntu mailing lists (each one can be downloaded as an archive file). The script simply counts the mails sent to each list in a 6 month period. Here’s what I found. Ubuntu...

Read More

February 21, 2016

How to test if your adblocker is working

So you’ve installed an adblocker (or a “content” blocker if you’re on iOS). But how do your actually know that it works? I created a very simple page that will test your adblocker: Adblock detector. The code is available on Github by the way. Of course, if you’re on Android, chances are that you can’t install an Ablocker, which is very sad indeed. If you have questions, do ask below.

Read More

March 23, 2015

Android In App Billing Howto

Here’s how I implemented in App Billing in my app(s). My goal was to implement a donate feature for my wallpaper apps so I set about reading the documentation on the Google developer pages. Events took a familiar course: after 10 minutes of reading, I thought, there’s got to be a less painful way to do this. So I googled the magic words tutorial and found quite a good one. However, the recommended method given by Google is annoying. You have to copy Java classes around by hand and there are no Gradle dependencies to make things...

Read More

March 10, 2015

Using Python to find domains; finding out if a domain is registered

I made a Python script to create domain names and then check if they are free. It uses a python whois module. Here’s what you need to do. 1. Checkout the code This bit is quite easy git clone 2. Create your own building blocks This bit is also quite easy. Open the file input.txt in your favorite text editor. You’ll see that it contains a section called “–prefixes” and one called “–suffixes”. Simply edit these sections as you see fit, taking care not to delete the actual section titles. The...

Read More

November 26, 2013

How to take daily automatic screenshots in Ubuntu / Linux using the command line

For some reason you may want to automatically take screenshots every day. Maybe you want to spy on someone, maybe you want to keep a visual diary of what you’re doing on your computer, maybe you just really really love screenshots. Here’s how to do it using just command-line tools on Ubuntu. Step 1 Install the scrot package sudo apt-get install scrot Step 2 Create the following script and call it screenshots Note: you must give a values for FILEPATH. This must be absolute e.g. /home/bob/Dropbox. You must also give a...

Read More

November 9, 2013

Leverage browser caching in Google App Engine

I’m working on a project that allows friends to work out who owes cash to whom after a joint event: it’s called Kittysplit and is built in Java / Google App Engine. Running the site through Google’s wonderful page speed insights tool resulted in this recommendation: “Leverage browser caching”. Here’s what you need to do to implement caching for static files. Add the following to appengine-web.xml (remembering to substitute the correct directory for /STATIC_DIR/). <!-- Set a long cache expiration time for static files --> <static-files> <include...

Read More

February 8, 2013

Hello World

This is my first post with Github Pages and Jekyll and I’m just futzing around. Here’s an Instagram picture of mine.

Read More