Github has a history of not giving a frack what their users want12. For example, a few developer friends of mine were reluctant to click any links in their notifications-page, since after they clicked the link, the notification was marked as read and you might lose track of it, if you just close the browser tab3. So David Badura4 and I decided to fix this problem by writing a browser extension. The result can be found on Github: After installation (also possible in Opera btw, the best browser there is), the extension injects an "Add ToDo" button on every issue page and pull request. When clicking, it, the URL gets saved to the local storage of the browser5. The list of all URLs added like this can then be access through a new button in the header toolbar of github. You can clone the project from github and add it as an "Unpacked extension" or just head to the Github ToDos on the Chrome Store and just install it from there. Pull requests are welcome, open an issue, if you find a bug, open source yadayada.
  1. []
  2. []
  3. on a side note, is pretty handy to avoid too many notifications in the first place []
  4. []
  5. Using local storage is handy for people that are not very concerned about privacy and just use the cloud synchronization feature of their browser: the content of their ToDo list will then also just be synced to all their devices. []

I wanted to crop out a specific rectangle in a few dozen scanned documents with ImageMagick like this:
convert -crop 1600x1880+100+420 image.nrm.png cropped.png
Scanning often results in a tiny skew, which would lead to a slightly different rectangle location on every image. It seems that a common preprocessing step when doing OCR is to automatically correct this skew. The Python toolset ocropy1 for example contains a tool to do this: ./ocropus-nlbin image.jpg creates the file image.nrm.png which is optimized for OTR and has corrected skew.
  1. []

Obviously, my Bank does not provide a REST API to download the transactions happening on my accounts. After I asked for "machine parseable" data, they told me that I can download CSV files. Awesome! So I wrote a parser and lived happily ever after. Except that they change their CSV format without notice every few months and at some point they started to mix different encodings in the same file. So I lived unhapply, regularly fixing the script reading the CSV file. What did not change for around 10 years now are their banking statements. And this also holds for the PDFs you have to download, if you want to avoid getting them via snail mail (and paying for the postage of course). I decided to parse the PDFs instead and this went pretty well for may years... up to recently, when something changed (it may have been a software update of the parser I use or something on their side). Do you want to know more?

I finally decided to set up a real router in front of my router. The main use cases, I wanted to cover were the following: * nice local domain names: Since I run a FritzBox (which is a pretty common plastic router in Germany), all local host names (sometimes!) get suffixed by This domain cannot be configured to .something.awesome and the whole setup is quite in-transparent, that I could not figure out, in which cases, the suffix is mandatory when resolving host names. * play around with [snort]( * bandwidth monitoring: to replace the current workflow of randomly killing machines, when the internet connection is slow and one needs bandwidth to do something important™. In this blog post I will cover nothing of this. Instead, I'll explain, how I set up a RaspberryPi to enable me to do all the above in the future. Do you want to know more?

Just another quick Zabbix related post: Since WordPress is known to be a remote shell with the extra feature of being a web blog1, it is a good idea, to at least keep your WordPress installations up-to-date. In the currently ongoing effort to replace myself with a more or less clever collection of servers, VMs and shell scripts, I decided to use Zabbix to track the most recent WordPress version and get notifications, when it changes. If you want to do the same, keep reading!
  1. []

As you may have noticed: the folk at this blog recently started to play around with FreeBSD (mainly as FreeNAS jails). And since I recently started to <3 Zabbix. Here is an explanation on how to compile and use the agent on such a jail. Do you want to know more?

I set up monit, a utility for monitoring services on a Unix system. My concrete use case is a FreeBSD machine, that runs "N2N Edge", a Peer-to-peer (P2P) virtual private network (VPN) software. monit pretty much automates the "have you tried turning it off and on again?" process. Configurations like the following illustrate this:
check process myproc
        matching "myproc"
        start program = "/etc/init.d/myprocstart"
        stop program = "/usr/bin/killall myproc"
        if cpu usage > 95% for 10 cycles then restart
Do you want to know more?

TaskWarrior is my tool of choice to manage my list of next actions. I like it because the data is as open as it can be: it is stored as plain-text, there are many different tools to access it and TaskWarrior itself is open source. To access the same data on different devices, an easy solution is, to just copy the TaskWarrior database over to the other devices. Software like OwnCloud, Dropbox or Super Flexible File Synchronizer (this is not a recommendation) can help automate the process. With the configuration variable data.location one can control, which folder TaskWarrior uses to read and write the data and as long as you don't go crazy and execute TaskWarrior faster then you sync, everything works quite well (in case you end up with conflicts you could always use the merge command and hope for the best). A very important use case, that was not easy to cover with this was my smartphone: My solution always was, to SSH to a server, where TaskWarrior is installed and use it there. But since I seem to be one of very very few people in the world, that would prefer a hardware QWERTY keyboard on their smartphone, there are no decent options, that make SSH user friendly enough to use it on a daily basis (yes, I tried stuff like this but quickly ran out of hands to handle it on the bus). Do you want to know more?

I was promised (and am paying for) a certain bandwidth $X$. But sites like indicated a bandwidth $Y$ (much smaller than $X$). To gather more empirical data over time and to make sure, that I am not hallucinating, I installed a Zabbix server on a Raspberry Pi1 and set up a monitoring for my Fritz!Box2. The data for the item "Fritz!Box DSL-Downstream" clearly indicated that $Y$ was around 6 Mbps. So I called my ISP and they ultimately sent the tech-guy to the rescue: He was at my home around 8:30 in the morning and measured the bandwidth with a small magical device. First at the basement where the cable enters the house and then at my office on the first floor. To my surprise, both measurements indicated a much bigger number $Y'$ (which was bigger than $Y$ and looks much more like $X$). He also left me under the impression, that everything was fine with my internet connection the whole time, which I might have believed. But: netcologne-zabbix-bandwidth Note the time, when something changed! I rest my case. He doesn't have magic hands. He cheated!
  1. []
  2. []

Since everyone now uses TextSecure (no, really, you should switch too!), everything close to a TextSecure desktop client is not finished enough and I want to type messages from my computer (in the old SMS ages, I did this with MyPhoneExplorer), I decided to remote control my Android device. The setup is straight forward (if you already have root privileges on your device): * Install a VNC-Client for Windows (for example RealVNC) * Install a VNC-Server for Android (for example droid VNC server) * Go through the settings of the VNC-Server For some reason I cannot connect from my Computer to the Phone, but "Reverse Connection" works like a charm (don't forget to start the VNC Viewer in listening mode ... as ... some friend of mine did). Edit: And after a restart of my phone, the normal direction also works.

A lot of people are in the situation where they want to use more than one Dropbox account on one (windows) machine (for whatever reason). The default way of doing this is the following: * create a new local user account * log in as that user and install Dropbox * log back in as the default user and use something like psexec to execute the installed Dropbox as the other user account while being logged in as default user To automate this process, I wrote the following script that also takes care of cosmetics like "hiding the newly created user from the login screen". Do you want to know more?

Hetzner has a webinterface to manage DNS zonefiles. Since their API does not support the management of zonefiles I decided to write a small python script that does the job1. You can download it on github (use it at your own risk and read the code if you want to be sure). (more…)
  1. There actually is a perl script that claims to do the same but it has the (long expired) "session id" hard coded I think. []

Meine Mission: Die App Withings Health Mate für das Withing Pulse auf meinem Motorola Milestone 2 zum laufen bringen. Zeitansatz: Der erste Weihnachtsfeiertag Status: 23:56 und erfolgreich. Möchtest du mehr wissen?