Jeremy Keith:

If that’s the case, then it really doesn’t matter what we think about Chrome removing visible URLs. What appears to be a design decision about the user interface is in fact a manifestation of a much deeper vision. It’s a vision of a future where people can have everything their heart desires without having to expend needless thought. It’s a bright future filled with seamless experiences. Welcome aboard The Axiom.

I love this post. It’s not only about why Google Chrome might have removed the URL from the browser UI but also more in general what it might mean if the “seamlessness” is overdone. Spoiler: You might have already seen it.

Octopress 3

For over a year this blog has been powered by Octopress 2. I learnt a lot about Jekyll and Octopress in the meanwhile and tweaked my system on various occasions. And I still love the system and the ideas behind it. So today I rebuilt my blog with Octopress 3.

It wasn’t an upgrade in the common way. Octopress is no more a full-fledged wrapper around Jekyll but has been split into various components that can be hooked into a Jekyll installation. Have a look at their github profile: there now is octopress, ink, deploy, code-hightlighter and some more.

It is not yet officially released (as of now it’s release candidate 8) – probably also because large parts of the documentation are still missing. So it took me quite some time to get it all up and running, and I’ve likely not yet discovered it’s full potential. Once the documentation and some more explanations are public, I’m happy to write a more extended post on how to use it.

If you encounter any problems with this site be sure to let me know.

Small Screen Productivity


For the vast bulk of stuff that most people will want to do on a computer, though, most of the time you don’t need a desktop monster. I don’t think you even need a 15” screen, which is essentially a portable desktop. You just have to use a small screen productively. Matt Gemmel

Ever since I moved to Aarhus four months ago I have been limited to the 13 inch display of my (non-retina) MacBook Pro. Beforehand I thought it would be quite annoying to be limited to this small screen (I have an external 27 inch monitor at home in Munich).

But as Matt writes, it’s mostly a question of what you make of it, and I didn’t miss a bigger display as much as I anticipated. But my workflows changed quite a bit: I run a lot more applications in Fullscreen mode and use on quite a few helper tools to coordinate stuff and switch between programms. Here a short list:

  • First off: Alfred for launching apps and invoking various workflows.
  • Better Touch Tool enables the Windows-7-style window snapping on my Mac.
  • A combination of KeyRemap4MacBook and NoEjectDelay enabled the use of the eject-key (I replaced the optical drive w/ a second HDD some time ago) as an hotkey for iTerm21.
  • Furthermore I use HyperSwitch as a finer enhancement for the system application switcher.

Still higher resolutions are always tempting. Especially when dealing with visual stuff, no matter if Lightroom, Pixelmator or just the iOS Simulator, more screen estate equals more productivity in my opinion. For that reason I keep checking out the 13 inch Retina MacBook Pros and I also have high hopes for the rumored 12’’ Retina Air.

Hej Århus!

Almost two weeks ago I moved from Munich to Århus, Denmark, in order to spend an Erasmus semester here. It’s going to be my last semester as a media informatics student so I want to get as much out of it as possible. These are my first impressions after two weeks in Denmark.

Arriving in Århus

The cheapest way and the one where I was able to carry the most stuff with me, was to travel by train. After a eight hour ride with the night train to Hamburg and another four hours on a regional train, I made it to Århus a bit exhausted. But arriving during daytime had the big advantage of being able to complete most of the organizational directly. Guided by a mentor, we first went to the university in order to register and especially to get the keys for my room.

After a little tour across campus I got to see my place and meet my housemates. So I will spend the next six months with eight other students from all over the world in a house located just outside the city. It’s a fine place close to the sea and a forest which might be a bit more enjoyable once the weather improves. The people are great and I’m sure I will enjoy the time here.

First Impressions

I’m quite settled by now and the everyday life is about to start as I had the first lecture today. What I can tell so far is that the Danish people are extremely nice and speak prefect English. I don’t speak any Danish so far but I never found myself in a situation where it would have been necessary. No matter if you talk to any student or the elderly lady at the bus stop, apparently everybody speaks English quite fluently.

Something I do like as well is the informality which Danish people use in their communication. You’re supposed to address everybody with a simple you and call them by their firstname. This is true for all the professors at university as well. But it still feels a bit awkward for me.

University Intro Week

The university takes a lot of care for incoming students and the computer science faculty is so modern and well equipped that a comparison to Munich feels a bit saddening. So there were three full days of program to show all us international students around the campus, introduce us a bit to Danish culture and to provide a lot of opportunities to socialize among all faculties. It ended with a day that was focused on the particular faculty during which I finally met some more computer science students. The mentors did a really good job here.

Money, Food and Drinks

But Denmark is rather expensive: Food and drinks in the supermarket are a bit more expensive than in Germany but in restaurants and bars it might quickly get expensive. Yet I have been shown some cool bars with specials and happy hours, so I should be able to navigate my evenings trough downtown soon. The best occasion to meet other students and enjoy a cheap beer are the Friday Bars. In almost every faculty they start to build a bar on Friday afternoons where students and staff meet and can talk over a freshly tapped beer. Foodwise I might have to start cooking more.

The University

So much space! Coming from the LMU Munich where rooms are scarce it feels a bit like in a different world. They have huge areas equipped with desks and couches that are meant to be used by students either to hangout or to work. Table soccer, billiard and table tennis – everything is there. To be fair the buildings are only a few years old.

Organizational there is a similar mess of different accounts and logins one has to use in order to get to study materials and to signup for courses. I suspect some sort of conspiracy. How can it be that the software that runs especially the computer science department is fragmented so heavily and is so user unfriendly?

In difference to the German semesters, Denmark uses quarters. This implies that courses are much shorter but require more work within this short timeframe. For computer science this mostly means to do assignments (often programming) which is also part of the final grade. But that’s stuff I will figure out more exactly in the upcoming weeks.

border:none 2013

Yesterday I attended the first ever border:none conference in Nuremberg, a conference focused on the mobile we. I really enjoyed the day there and am still have to wrap my head around all the things I learned there. The talks spread over technical and conceptual topics around the web (not only the “mobile” one) and I came home with a long list of things to think about and to try out. Let me try to summarize the talks a bit.

The Talks

As already mentioned the talks spread across a diverse set of topics. It started with Jay talking about some great new layout features that are coming to CSS and how they allow new ways of presenting your content.

Where as Tobias talked on something completely different topic: How to actually test the performance of your websites under real-life conditions and how to automate this process for desktop and mobile browsers. I think that performance measurement is generally a topic that will get more and more into focus, as the responsive hype becomes a standard.

Keeping the testing topic Rodney got into “test the web forward” – writing test for browser to ensure they comply with the actual specifications. So instead of just working around a bug in your current project, write a test for all and make the web a little less broken.

After lunch Vasilis got back towards a more design-y direction. Using the idea that on the web there is no fixed canvas. Still there are a lot of aspects that can define a good design which should all focus around the actual content.

Vitaly afterwards did a wrap-up of the various tools and techniques that are out there for responsive webdesign. He managed to bring up the pieces that you might have heard of at some point but which aren’t widely used (yet).

Having read Bastian’s Let’s build a better web a couple of weeks ago, I was quite excited about his talk. I like such talks that go beyond the scope of the every day work and get to the bigger picture about how the web works and where we can bring it.

One of the best speakers I’ve seen is Jeremy. To close this awesome conference day he got back to very basic ideas that are already built into HTML, CSS and JavaScript. That our goal shouldn’t be to make the web accessible and responsive, because the web already is this way. Instead we should try to not screw it up.

This list is surely not complete and only reflects a few bits of what I took from this conference. If you weren’t able to attend the conference, make sure you watch the videos once they are up, I highly recommend them.

The Conference

At the unbeatable price of only 30€ it was a no-brainer for Jojo, Fabian, Sonja and me to go there. Despite a large traffic jam on the autobahn we arrived at the venue just in time for the first talk.

The venue was an amazing old movie theater, the Orpheum, where the team behind border:none – especially Marc and Joschi – had to bring and install everything themselves. A huge thanks to all the people who made this conference possible and ensured the nice atmosphere.

The only particular wish I have for the next border:none: Chairs which are a bit more comfortable.

Easier vHost setup

Starting development on a new web project is a pretty mundane task: Probably cloning some existent repository or creating the initial folder structure and then setting up a local virtual host, so each project got it’s own development domain, like

Especially the last part is quite annoying: Manually editing the hosts-file and adding a new vHost in the Apache config files.

After years of just going with this workflow, I found a way to cut this whole process. Using dnsmasq and wildcards in the Apache config do the same thing without having to change a single line of config files.


dnsmasq is a little DNS server and I only use it to route all request targeted at *.dev to the local machine and thereby make editing the /etc/hosts file redundant.

For installing it on a Mac I suggest using Homebrew, following these steps (mostly in the terminal of your choice):

$ brew install dnsmasq

$ cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

Editing /usr/local/etc/dnsmasq.conf and adding at the end:

# dnsmasq.conf
# ...

Then adding dnsmasq to the startup elements by executing $ sudo cp -fv /usr/local/opt/dnsmasq/*.plist /Library/LaunchDaemons

To start it this time, execute $ sudo launchctl start homebrew.mxcl.dnsmasq

It might be necessary to add as the first DNS-Server in your Network Settings.

Apache Config

As it turns out you can use wildcards in the Apache config to automatically map all <project-name>.dev to .../projects/<project-name>/. Far better than editing the httpd-vhosts.conf all the time.

The single VirtualHost entry necessary is this one (Keep in mind to change the paths):

NameVirtualHost *:80

<VirtualHost *:80>
    <Directory /<path-to-your-projects-root>/>
        Options Indexes MultiViews FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    UseCanonicalName off
    ServerName localhost
    ServerAlias *.dev
    VirtualDocumentRoot /<path-to-your-projects-root>/%1/

Voilá! Now all I need to do is create a new directory and drop the files in. The vHost comes automatically.

Raspberry Pi: Dynamically mounting an external drive

A couple of weeks ago I wrote about how I use my rpi as a TimeMachine. It quickly turned out that things weren’t as nice and easy as I imagined. The hassle of dealing with corrupted HFS+ file systems was a real annoyance. But it was the silent buzzing of the external HDD made that annoyed me enough to do something about it.

Fighting the buzzing

I own a mildly aged WesternDigital MyBook Essential and even while unmounted I can hear a constant buzzing. Throughout the day it’s not a real problem but at night quite annoying. So I tried to find the cause.

Turns out there are the internet knows about a few issues with the internal system of the drive (which has its own power supply) that might keep the drive from completely shutting down. The first suggested solutions were all about compiling a custom kernel. That seemed a bit over the top and frankly, I am not that familiar with these things yet.

Unmounting, Detaching and how to get it back

udisks --detach finally led to success: The drive would now spin down completely and stay totally silent. But the system won’t recognize a detached device anymore, so no easy mounting.

It took a few attempts to get the Raspberry Pi to recognize a detached device again without physically plugging cables. The solution is to temporarily deauthorize the USB device. Once it is authorized again, the system recognizes it as a new device and allows to mount it again.

Cleaning up

From the beginning I had the plan to automatically mount and unmount the external drive based on whether it’s needed. It’s sole purpose is to be used as backup storage, so it only needs to be available while my computer is on and likely to run a backup.

The best indicator is whether my notebook is currently in the network or not. Therefore I wrote a little bash script (Gist)1 to check the presence of my computer in the network and then mount or unmount the drive as needed. A cronjob runs this script every ten minutes.

While I’m on it… Fixing the filesystem issue

And coming back one last time to the file system thing: I decided to reformat the drive as FAT32 and use it as regular network share. Luckily TimeMachine can be tricked into accepting regular network shares. It works without problems so far. Especially without corrupted filesystems.

  1. As I am still new to these scripts, don’t hesitate to share some feedback on this. 

Raspberry Pi

I often thought about having a Raspberry Pi and doing all kinds of supercool stuff with it. But it took me until last week to actually get one and play with it.

First Steps


I didn’t want to buy any HDMI cables and decided to run it completely headless, meaning I will use it only over SSH and never connect it to an actual display. After putting Raspbian onto a SD card as operating system, I hooked it up to the network. I did buy a Wifi USB Adapter beforehand, but for the configuration process it’s easier to go with the wire option.


AirPlay was the first thing I wanted to give a shot. It often bugs me that I have to mess around with the cables when I want to use the notebook on my couch rather than on my desk.

Thanks to ShairPort1 that’s really easy and works like a charm with both my MacBook and my iPhone.

ProTip: If you are not alone in your network, make sure to set a password.


The next cable on my desk is the one of my external backup hard drive. Why not doing backups over Wifi? It turned out to be a bit more tricky. There are quite a few tutorials on running using your Pi as full-fledged TimeCapsule.

There are quite a few tutorials on this. One of my biggest problems was that the external drive was always getting mounted as read-only. Turns out that if you don’t eject the drive correctly the Linux driver won’t mount it writable the next time. Although Apple tells one not to do it, disabling journaling seems to fix this problem.

I tried a lot to get TimeMachine accepting my previous backups and continue there. Turns out Mac OSX handles local (= USB) backups way differently than network backups. I didn’t find any way to do so and decided to connect my MacBook and the Pi with a LAN cable directly. After doing the initial backup that way, it’s no problem to change to wireless later on.

What’s next?

Currently the external drive is permanently mounted and powered. I am experimenting a bit with dynamically mounting it whenever my MacBook is in the network.

I stumbled upon GroundControl, a neat control center for the Pi with statistics and the possibility to execute commands. As I am missing a few features I hope to make some time for forking and exiting it a bit.

But for new functionality I don’t know what to do next. If you have got some cool idea, shoot me a tweet.

  1. Be sure you get version 1.0, at the time of writing it is still in development but has proven to be more reliable on my system. 

Automatically Sync PhotoStream to Dropbox

The sync behind Apple’s photostream is really comfortable. My photos are uploaded when my iPhone has WiFi and my mac downloads them instantly. So when I want to get an image from my phone I just have to tap into the PhotoStream.

But all regular solutions are in some way inconvenient. To access the PhotoStream you have to use the somewhat bloated iPhoto and Dropbox requires you to either start the iOS app or connect your iPhone via USB. None of these options are really comfortable.

Digging into Photostream

Turns out OS X saves the images as regular files, but puts each in a separate subfolder – not that cool for direct use. But at least that’s automatically done by a system service, so no need for iPhoto.

In a quick Google search I found an AppleScript that copies images from the PhotoStream to the Dropbox folder. That seemed great until I noticed it freezes the Finder for the duration of the sync.

Copying the PhotoStream into your Dropbox

That’s why I came up a little bash script that does the same but it runs faster and doesn’t freeze the Finder. You can find it below or on GitHub Gist.

The script just takes all files starting with IMG_ from the PhotoStream folder and copies them into the subfolder photostream of my Dropbox. Make sure you adjust the second path and make the script executable.

cd ~/Library/Application\ Support/iLifeAssetManagement/assets/sub/
find . -name 'IMG_*' -exec cp -n -p {} /Volumes/HDD/max/Dropbox/photostream \;

Additionally I registered the script as a LaunchAgent, so it automatically gets started every 5 minutes. Again, make sure you adjust the paths and save the .plist-File (is.justcurious.photostreamsync.plist) in ~/Library/LaunchAgents/ . (A restart is required to actually register the LaunchAgent.)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">