This is my blog

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




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

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 various certificates and diplomas on the...
Read More


June 10, 2018

One night in Heaven

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. 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 at least some curiosity...
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 https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 4....
Read More


August 30, 2017

How to quit Facebook gracefully

Facebook is really really awful. 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 organization that ruthlessly maximizes...
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


October 11, 2016

Creating an online scoreboard with Python Flask.

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 Kittysplit.com, 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


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 https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 4....
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 [email protected]:caspii/domainfinder.git 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 python script will...
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: libgfx.so: 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 value for...
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 path= 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