This is my blog

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

January 11, 2020

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

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 8, 2019

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

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

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?. Then grab the URL using the “Publish” button. Now add the following (example) code to your page: <iframe height="420px" width="100%" scrolling="no" src="" style="border:none;"> 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...
Read More

September 3, 2018

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

June 23, 2018

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

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 10, 2018

A night in Stringfellow's Night Club

Peter Stringfellows died last week. Here’s what I wrote for the Imperial College student newspaper in 1999 after visiting his eponymous night club. These views are my own, albeit from 20 years ago. The world and I have changed quite a bit since then. Many years ago…. Last night (17th November, 1999) I had the pleasure of spending an evening in Stringfellows, and as a result I think my life has been subtly changed. I would like to share this experience with you because be you male or female, I refuse to believe that you don’t harbour...
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

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

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

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

June 22, 2014

Chromedriver error on Ubuntu

I was seeing the following error when running Chromedriver on Ubuntu /usr/lib/chromium-browser/chromedriver: error while loading shared libraries: cannot open shared object file: No such file or directory This can be simply fixed by placing the following links sudo ln -s /usr/lib/chromium-browser/libs/lib*.so /usr/lib/
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