Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.

My progress at Georgia Tech

I am in the middle of my studies at the Georgia Institute of Technology, where I’m pursuing a Master’s degree in Computer Science. I expect to graduate in Fall 2017. Here are the courses I will have completed by the end of the Spring 2016 semester:

  • Introduction to Operating Systems
  • Software Development Processes
  • Knowledge-based Artificial Intelligence
  • Advanced Operating Systems
  • Introduction to Information Security
  • Software Analysis & Test

The last two will bring me to 18 points, so I’ve got 12 points or 4 courses left to complete the minimum requirement.

The current plan for the remainder of my studies is:

  • Artificial Intelligence for Robotics
  • Database Systems Design
  • Computation, Complexity and Algorithms
  • Data Analytics and Visualization

Buzz Georgia Tech Logo


Trying out the “Push to deploy” feature of Git 2.3

Git 2.3 was recently released with an interesting new feature called “Push to deploy”. It allows a non-bare repository on a remote server be automatically updated. This was previously only possible with bare repositories, updating the current branch in non-bare repositories was denied by default.

A common scenario would be a web application that gets automatically updated when a developer pushes commits on the production branch to the repository on the web server. Of course there are a variety of other scenarios where this would come in handy, and also plenty of risks.

Still, I wanted to try out, here are my notes. I used meaningful names for the directory to “simulate” the scenario described above (local -> webserver). All commands assume are operating from a home folder.

Create git repository

We are creating our “local” repository and create an initial commit.

$ mkdir ~/local
$ cd ~/local
$ git init
$ touch file && git add file && git commit -am "a file"

Clone repository on webserver

Now we’re cloning the repository to the “webserver”.

$ git clone ~/local ~/webserver

At this point, the two repositories have the same commit graph, namely the one commit “a file” we created in the first part.

Adding the webserver as a remote

$ cd ~/local
$ git remote add server ~/webserver

Deploy to the webserver?

Let’s see how this works without the new feature.

$ cd ~/local
$ touch file2 && git add file2 && git commit -am "file2"
$ git push server master

Whoops, this doesn’t work. The following warning appears:

remote: error: refusing to update checked out branch: refs/heads/master
By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent with what you pushed, and will require ‘git reset –hard’ to match the work tree to HEAD.

You can set ‘receive.denyCurrentBranch’ configuration variable to ‘ignore’ or ‘warn’ in the remote repository to allow pushing into its current branch; however, this is not recommended unless you arranged to update its work tree to match what you pushed in some other way.

To squelch this message and still keep the default behaviour, set ‘receive.denyCurrentBranch’ configuration variable to ‘refuse’.

Set-up “Push to deploy”

For this to work, we’re now setting up “Push to deploy” on the webserver.

$ cd ~/webserver
$ git config receive.denyCurrentBranch updateInstead

Push to deploy!

$ cd ~/local
$ git push server master
4d5947f..d71e13e master -> master

And the webserver repository is updated!


Running Puppet-Lint in Intellij IDEA

I have recently begun editing Puppet modules, Hiera configuration files, Bash and Python scripts with Intellij IDEA. To prevent unstable build due to puppet-lint errors I have configured the IDE to run puppet-lint as follows.

  1. Install puppet-lint for your user account:
    gem install puppet-lint
  2. Add puppet-lint as an external tool in Intellij IDEA
    External Tool: Puppet-Lint
  3. Add a keyboard short-cut for the external tool
    External Tool Shortcut

Now, everytime you want to make sure the file is okay according to puppet-lint, press CTRL+SHIFT+ALT+L.

For bonus points, you could probably also set up an automatic run of puppet-lint with every save. See section 3 and 4 in this blog post for inspiration.


Technical meet-ups in Zurich

Together with Stefanie, a co-worker of mine, I kicked off a bi-monthly informal gathering over lunch. The aim is to geek out a bit and discuss things that are far away from daily business (or a new angle on an aspect of our work). Thomas held such a “Breeze In” last week and he gave us an overview over the current regular meetings about technical topics in the Zurich area. As I am moving to Zurich I was interested in opportunities to listen to interesting talk and meet new people. I took his slide with the overview and searched for the links. Here it is, for your (and mine) convenience.


zhgeeks –

WebTuesday –

Big Data Developers Zurich –

Swiss Big Data –

Coders Only | Zurich –

Java Users Group –

Zurich Erlang User Group –


HaskellerZ –

JSZurich –

Swiss OpenStack user group –

Zurich .NET Developers –

Zurich Python User Group –


WebMonday –

gamespace lab, Zurich Game Developers –

IOT/ZH – Internet of Things –

Creative Mornings Zurich –

PanTalks (Panter AG) –


Mozilla Meetup Switzerland –

Zurich Scala Enthusiasts –

Zurich Semantic Web Meetup  –


Moved my motorcycle to Zurich

And on the way I was wondering what the strange metallic round object in the forest above Dielsdorf ZH was. Turns out, it is a secondary radar station operated by SkyGuide, the Swiss air traffic control company. More information on the Wikipedia article about SkyGuide (deutsch).

View Larger Map


NewsBlur with refreshing design update

I’ve been using NewsBlur as an alternative to Google Reader in the past 3 months. So far, I’ve been quite pleased with the experience. The Android app still has its problems with syncing my read articles but I have a feeling that this will be fixed in future upgrades. The web application offers many keyboard shortcuts which allows me to browse through new posts very smoothly. The 36$ I spent for a two-year premium subscription have so far proven to be worth it. And did I mention that it was open-source and written in Django and node.js? Anyhow, the web app has undergone a design update today which gave me the reason to write this post. Trying to no let this blog die…


An interesting feature is shared stories which will appear in one’s personal “blurblog”: It even comes with an RSS feed, so if you would like to follow my shared stories, add this feed to your reader. Or subscribe to me on NewsBlur once you switched 😉



Vier Jahre Piraten

Fuck The System

Heute findet die ordentliche Piratenversammlung der Piratenpartei beider Basel statt. Bereits vor einigen Wochen habe mich entschlossen, nicht mehr als Präsident der Sektion zu kandidieren. De facto trete ich damit zurück. More…


The dw2pdf DokuWiki plug-in cannot handle RGBA

I was happily using the dw2pdf plug-in for the DokuWiki installation at work when users began reporting broken images in the exported PDFs. One page in particular featured two images – one worked, the other did not. The only difference I found was in the palette used:

$ file deps.png 
deps.png: PNG image data, 361 x 256, 8-bit/color RGBA, non-interlaced
$ file deps-legend.png 
deps-legend.png: PNG image data, 3476 x 800, 8-bit/color RGB, non-interlaced

The first one was missing in the exported PDF. Apparently dw2pdf cannot handle an alpha channel. Since my theme has a white background, I simply replaced it with white:

$ convert deps.png -background white -alpha remove deps.png && convert deps.png -alpha off deps.png

Be careful, like written here the command replaces the original file. The last file is now in RGB with a white background:

$ file deps.png
deps.png: PNG image data, 361 x 256, 8-bit/color RGB, non-interlaced

Note: convert is a tool of the ImageMagick suite (sudo apt-get install imagemagick).

For files that are 8-bit gray+alpha, the following command does the trick:

$ convert file.png -background white -type Palette file.png

These tricks are mere workarounds, but time restraints did not permit further investigation into the inner workings of the plug-in.


Setting memory of Vagrant box

When constructing a new Vagrantfile for the brilliant tool vagrant, I had quite some trouble finding the configuration setting which sets the amount of memory. I found an old variant first:

config.vm.customize do |vm|
 vm.memory_size = 800

Turns out this syntax has changed at some point, at least after version it is now:

config.vm.customize ["modifyvm", :id, "--memory", "800"]

This has worked on my machine (vagrant 1.0.3). Thanks to “miketheman” and his post to the Google Group.


Learning VIM, again

I remember trying to learn how to use vim in my early teens. The first basic steps are easy: navigating, saving and quitting I could quickly pick up. Then I was stuck and gradually moved over to joe. I need to somewhat shamefully admit that until recently, my editor of choice was nano. But then, a co-worker of mine suggested I pick vim up again and I gave it a try. I have to admit, once you learn some of the more intermediate short-cuts, you begin to feel the power of this robust and long around software.

Without a tutorial of some sorts, vim is hard to learn. I was very happy to stumble upon VIM Adventures. It is a brilliant game and an excellent vim introduction at the same time. The ten dollars were well invested!


Increasingly, I miss having the easy but powerful commands available in my other editors. I switched from my evaluation copy of Sublime to vim-gtk and installed the IdeaVIM plugin to have a (limited) vim environment in my development environment.