Planet Entropia (CCC Karlsruhe)



This planet is made of fresh clean feeds by members of the Entropia bunch

The software

The Harvester is made of fresh flesh, clean design by Tigion, hacked-together Ruby scripts by Astro and Atom support by Neingeist

To Be Fed

wget the RSS-1.0 feed!


Missing something?
Contact Neingeist via Mail or Jabber:






nomeata’s mind shares

19.07.2014 17:13:00

Good bye GNOME

When I was young...

I have been a user of GNOME for a long time. I must have started using it in either 2000 or 2001, when LinuxTag was in Stuttgart. For some reason I wanted to start using one of the two Desktop Environments available (having used fvwm95 and/or IceWM before, I believe). I approached one of the guys at the GNOME booth and asked the question “Why should I use GNOME over KDE?”, knowing that it is quite a silly question, but unable to come up with a better one. He replied something along the lines of “Because it is part of GNU”, and that was good enough for me. Not that it matters a lot whether I use one or the other, but it was a way to decide it.

Back then GNOME was still version 1.2, with detachable menus and lots of very colorful themes – I first had something with thick yellow borders and then a brushed metal look. Back then, sawfish was the window manager of choice.

I used GNOME for many years. People complained when GNOME 2.0 came out, but I liked the approach they were taking: Simplicity and good defaults are a time saver! I did my bit of customization, such has having my panel vertically on the left edge, and even had a tool running that would react on certain events and make the window manager do stuff, such as removing the title bar and the borders from my terminals – naked terminals are very geeky (I forgot the name of the tool, but surely some will recognize and remember it).

Leaving the path of conformance

In 2009 I got more and more involved in Haskell and stumbled over xmonad, a tiling window manager implemented and configured in Haskell. I found this a user interface that like a lot, so I started using it. This was no problem: GNOME happily let me replace the default window manager (metacity) with xmonad, and continue working. I even implemented the necessary support in xmonad so that it would spare out the gnome-panel, and that the pager (which displays the workspaces and windows) would work, and even interact with xmonad.

I was happy with this setup for a few more years, until GNOME3 came out. Since then, it has become harder and harder to maintain the setup. The main reason is gnome-shell, which replaces both gnome-panel and doesn’t work with any window manager but the new default, mutter. I want to use GNOME’s panel, but not its window manager, so I was stuck with a hardly maintained gnome-panel. I fixed what I could (with some patches applied upstream two years after submission, and some not at all) and lived with the remaining warts.

The end (for now)

But a few days ago, GNOME 3.12 was pushed to Debian and I couldn’t even logout our shut down the computer any more, as gnome-session tries to talk to gnome-shell now to do that. Also, monitor configuration (e.g. remembering what setup to use when which monitors are attached) has been moved to gnome-shell. I tried to work around it a bit, but I quickly realized that it was time to make a decision: Either do it the GNOME way all the way, including using gnome-shell, or ditch GNOME:

Now as I said: I like the design and the philosophy of GNOME, including GNOME3, and I have told people who were complaining about it first to give it a try, and succeeded. I also tried it, but after years using a tiling window manager, I just couldn’t adjust to not having that any more. If xmonad could be changed to remotely control gnome-shell, I this might actually work for me! I think one of the biggest problems I had was to adjust to how gnome-shell handles multiple monitors. In xmonad, my workspaces are independent of the monitors, and I can move any workspace to any monitor.

So I had to ditch GNOME. My session now consists of a shell script making some adjustments (blank black background, loading the xmodmap), starts a few tools (taffybar, mail-notification, nagstamon, xscreensaver and dunst) and executes xmonad. So far it works good. It boots faster, it suspends faster.

I still use some GNOME components. I login using gdm (but it is auto-login, I guess I could try something faster), and gnome-keyring-daemon is also started. And I still use evolution (which has its own set of very disappointing problems in the current version).

Compared to my old setup, I’m still missing my beloved link-monitor-applet, but I guess I can implement an approximation to that in taffybar. The same for some other statistics like cpu temperature. I don’t have the GNOME menu any more, which I did not use regularly, but was useful occasionally.

The biggest problem so far is the lack of session management: I yet have to find a good way to logout and shutdown, while still giving Firefox time to finish without believing it crashed. Dear lazyweb: What is the best solution for that problem? Can systemd help me here somehow?

All in all I want to thank the GNOME guys for providing me with a great desktop environment for over a decade, and I hope I’ll be able to use it again one day (and hopefully not out of necessity and lack of viable alternatives).


nomeata’s mind shares

19.06.2014 20:00:00

Another instance of Haskell Bytes

When I gave my “Haskell Bytes” talk on the runtime representation of Haskell values the first time, I wrote here “It is in German, so [..] if you want me to translate it, then (convince your professor or employer to) invite me to hold the talk again“. This has just happened: I got to hold the talk as a Tech Talk at Galois in Portland, so now you can fetch the text also in English. Thanks to Jason for inviting me!

This was on my way to the Oregon Summer School on Programming Languages in Eugene, where I’m right now enjoying the shade of a tree next to the campus. We’ve got a relatively packed program with lectures on dependent types, categorical logic and other stuff, and more student talks in the evening (which unfortunately always collide with the open board game evenings at the local board game store). So at least we started to have a round of diplomacy, where I am about to be crushed from four sides at once. (And no, I don’t think that this has triggered the “illegal download warning” that the University of Oregon received about our internet use and threatens our internet connectivity.)


nomeata’s mind shares

08.06.2014 19:34:00

ZuriHac 2014

I’m writing this on the train back from the ZuriHac Haskell Hackathon in Zürich, generously sponsored by Better and Google. My goal for this event was to attract new people to work on GHC, the Haskell compiler, so I announced a „GHC bugsquashing project“. I collected a few seemingly simple ticket that have a good effort/reward ratio for beginners and encouraged those who showed up to pick one to work on.

Roughly six people started, and four actually worked on GHC on all three days. The biggest hurdle for them was to get GHC built for the first time, especially those using a Mac or Windows. They also had to learn to avoid recompilation of the whole compiler, which takes an annoying amount of time (~30 minutes for most people). But once such hurdles weren taken all of them managed to find their way around the source code to the place they need to touch and were able to produce a patch, some of which are already merged into GHC master. When I wasn’t giving tips and hints I was working on various small tickets myself, but nothing of great impact. I very much hope that this event will pay off and one or two of the newcomers end up being regular contributors to GHC.

We took breaks from our respective projects to listen to interesting talks by Edward Kmett and Simon Marlow, and on Saturday evening we all went to the shores of the Zurisee and had a nice Barbecue. It was a good opportunity to get into contact with more of the attendees (the hacking itself was separated in multiple smaller office rooms) and I was happy to hear about people having read my recent Call Arity paper, and even found it valuable.

Thanks to the organizers and sponsors for this nice opportunity!


nomeata’s mind shares

28.05.2014 21:43:00

Predicting the livetime of a Hackage package

The Debian Haskell Group has no proper policy about when to update a certain package to a new version from Hackage. So far, we upgrade when one of us personally needs something, when someone nudges us, if its required as a dependency or just when we feel like it. I was thinking about ways to improve that.

One thing that we should definitely do is to upgrade to new versions that differ only in the forth version number, e.g. from to – these are most likely bug fix uploads and have little risk of breaking things. (Unless they are only changes to the .cabal file, then they might not be an improvement for our users or us.) I plan to code that soon.

But what else can we do? Ideally we’d package versions that will be the newest version for a long time, and not versions that are going to be replaced the next day. Unfortunately, deciding that requires visionary powers. But maybe there is a correlation between the upload history and the lifetime of a new package? Maybe there are patterns, e.g. the first upload after a long time tends to be replaced fast, but the third package in a short succession has a high chance to live long? Can we predict the livetime of a freshly uploaded package? So after a bit of hacking I got this graphic:

It needs a bit explanation: Both axis are time differences, the picture is one year by one year. For every release of which we know the lifetime (i.e. there has been an upload later), we draw its history on a vertical line. The horizontal position of the line corresponds to the lifetime of the release: A package that was superseded immediately later (which I sometimes do after spotting annoying typos) would appear on the far left, a package that is stable for one year on the far right.

The history itself is a series of dots, representing the previous uploads of that package, with their distance from the lower edge indicating the time that has passed since then. So if a package had two updates half a year ago, and then no update for another half year, it would contribute two dots right above each other in the middle of the picture.

Unfortunately, the picture does not yield any insight, besides that short-lived packages are more frequent than long-lived packages.

So I tried another view:

I grouped uploads by the livetime of their two preceding uploads. For each such groups, the circle indicates the average livetime. The darkness indicates the absolute number in the sample. So we see a correlation between the packages livetime and the livetime of its predecessor, which is also not very surprising. We can state some hypothesis, like: “A package replacing a very old package is likely to be long-lived if its pre-predecessor lived very long or very shortly, but less so if that lived for a few months.“ But I’m not sure of the significance of these.

I could have also taken into account which uploads are major and which are minor, by looking at the version number, but I didn’t.

What’s the conclusion? Nothing much. I got some funny looking graphs. And there needs to be a way to render pictures like the first within the axes of a Chart diagram. I put the (somewhat hackish) code online – feel free to play with it.



28.05.2014 06:15:42

Mercurial vs. Git vs. Bazaar: The aftermath

Over the last years, the version control system community has fought, what some people would call the “VCS war”. People were arguing on IRC, conferences, mailinglists, they wrote blog posts and upvoted HN articles about which was the best version control system out there. The term “VCS war” is borrowed from the “Editor wars”. A constant fight which people argue which of the major editors VIM, or Emacs and later TextMate or Sublime, or again Vim and Emacs is the best editor. It is similar to programming language discussions, shell environments, window manager and so on and so forth. What they all have in common is that they are tools that are used daily by software engineers, and therefore a lot of people have an opinion on it.

When in 2005 both Git and Mercurial were released and Bazaar followed shortly after, the fight who is the best system of the three started. While early Mercurial versions seemed to be much easier to use than Git, Git was already used in the Linux kernel and built up a strong opinion. Things were even till 2008 Github launched and changed the OpenSource world and is what people would consider Git’s “killer app”. Mercurial’s equivalent Bitbucket never reached the popularity of Github. But people were still writing articles, arguing about merging and rebasing, arguing about performance and abilities to rewrite history, wrote long blog posts about confusing branching strategies. Those were complicated enough that they had to write helper tools, about which they could write articles again….and so on and so forth.

Recently things have become quiet. But why is that? What happend to Git, Mercurial and Bazaar?


I haven’t followed bazaars history much. It’s most notable users were MySQL and Ubuntu. In the early development bazaar lacked performance and couldn’t keep up with Git and Mercurial. It tried to solve this by changing the on-disk format a few times, requiring their users to upgrade their servers and clients. The development was mostly driven by Canonical and they had a hard time reaching out for more active developers. In the end there isn’t much to say about Bazaar. It development slowly deceased and it’s been widely considered the big looser of the VCS wars. Bazaar is dead.


Mercurial started out for the very same reason Git was created and was developed at the same time Linux wrote Git. They both had a fast growing active development group and were equally used in the first years. While Git was the “faster” decentralized version control system, Mercurial was widely considered the more user-friendly system. Nevertheless with the rise of Github, Mercurial lost traction. However the development continued and while more and more people used Git and Github, the Mercurial community worked on some new ideas. Python picked it as it’s version control system in 2012 and Facebook made moved to Mercurial in 2013. So what’s so interesting about Mercurial?

  1. Mercurial is extensible: It’s written mostly in Python and has a powerful extension API. Writing a proof of concept of a new backend or adding additional data that is transferred on cloned is fairly easy. This is a big win for the Python or the Mozilla community that makes it easy for them to adapt Mercurial to their needs.
  2. Mercurial caught up on Git features and performance: Mercurial added “bookmarks”, “rebase” and various other commands to it’s core functionality and constantly improved performance.
  3. Mercurial has new ideas: Mercurial came up with three brilliant ideas in the last 3 years. They first introduced a query language called “revsets” which helps you to easily query the commit graph. Second, they introduced “phases”. A barrier that prevents user from accidentally changing or rebsaing already published changesets – a common mistake for Git users. And last, but not least Evolution Changeset, a experimental feature that helps you to safely modify history and keep track of the history of a changing commit.

So while Mercurial is certainly not the winner, it found a niche with a healthy and enthusiastic community. It’s worth a shot trying it if you are not 100% happy with Git.


The big winner obviously is Git. With the introduction of Github pushed Git usage. Github’s easy to approach fork&merge mechanism revolutionized OpenSource development to a point where most younger projects don’t use mailinglists anymore but rather rely on pull-requests and discussion on Github issues. Github’s feature and community is attractive enough for people to learn git. In addition, Git had a healthy and vocal community creating blog posts, introduction videos and detailed technical explanations. Noways Git market share is big enough that companies move from Subversion to Git because a new hire will more likely know Git than any other version control system (maybe SVN). As an open source developer, there is no way around Git anymore. Moreover the development is going on in rapid pace and the community constantly improves performance and is slowly reaching the v2.0 milestone. It’s yet to be seen if they are going to port some of the ideas from Git. A major challenge for Git however, still, is to deal with large repositories, something that at least the Mercurial community has partly solved. If you haven’t learned it, learn it, there isn’t going to be a way around it anyway – deal with it.

A conclusion

The war is over, and we are all back on working on interesting features with our favorite Version Control System. Nobody needs to write blog posts anymore which system is better and you certainly won’t be able to circumvent Git entirely.

flattr this!


nomeata’s mind shares

26.05.2014 12:10:00

Does list fusion work?

I’m writing this in the lunch break of TFP in Soesterberg. The invited talk this morning was by Geoffrey Mainland, and he talked about the difficulties of (informal) reasoning about performance in high-level languages like Haskell, especially with fancy stuff in the compiler like fusion. So I couldn’t help but think about a (very small) help here.

Consider the the two very similar expressions foldl (+) 0 [0..1000] and foldr (+) 0 [0..1000]. Which of these fuse away the list? Hopefully both, but hard to predict.

So with my list-fusion-probe library, you can write

import Data.List.Fusion.Probe (fuseThis)
main = print $ foldr (+) 0 (fuseThis [0..1001])

and find out. If you compile this (with -O!), it will print


If you change the foldr to foldl, it will print

Test: fuseThis: List did not fuse

So you can see that the function fuseThis :: [a] -> [a] does nothing if the list gets fused away, but causes a run-time error if not. It allows you to annotate your code with your assumptions of list fusion, and get shouted at if your assumptions are wrong.

It wouldn’t be hard to have the compiler give a warning or error message at compile time; we’d just need to introduce a special function abortCompilation that, when found in the code during compilation, does just that.

Note that you’ll have trouble reproducing the above in GHC HEAD, where foldl does fuse (which is what I’m going to talk about tomorrow here).


nomeata’s mind shares

09.05.2014 07:59:00

Going to TFP 2014

Near the end of my internship with Simon Peyton Jones at MSR Cambridge I tackled the problem that foldl is not a good consumer in the sense of list fusion, as the resulting code compiles quite badly. I found an analysis that would allow GHC to safely do the required transformation to fix this in the common case; I dubbed this analysis Call Arity. The code is in GHC master (but not in 7.8), and I get to present at the Trends in Functional Programming conference in Soesterburg in 2½ weeks. If you are curious you can either look at the code in CallArity.hs or the submitted paper, which yet has to go through the formal post-conference peer review in order to be officially accepted.

If you are going to TFP as well and want to get your GPG key signed, just talk to me there!


nomeata’s mind shares

24.04.2014 22:07:00

gtk-vector-screenshot screencast

I recently installed piwik on my website, to get some idea about how it is being used. Piwik is a very nice and shiny tool, although it is slightly scary to watch people walk through your website, click for click. Anyways, I now know that I get around 50 visitors per day.

But I also learn where they are coming from, and this way I noticed that “Shnatsel” did a very nice screencast of my gtk-vector-screenshot tool – if I had not created it myself I would think it was fake.


Uploads from neingeist

17.04.2014 08:10:32

barcode detection for the visually impaired

neingeist posted a video:

barcode detection for the visually impaired

work in progress


nomeata’s mind shares

02.04.2014 21:10:00

Steuerhinterziehung bei Subway?

Kürzlich war ich, wie üblich vor dem (sehr zu empfehlenden) Spieleabend in der Karlsruher Spielepyramide bei Subway essen. Heute wollte ich wissen, wie viel ich da eigentlich ausgegeben habe. Den Kassenzettel hatte ich nicht mitgenommen, aber da ich bei Subway Punkte sammle kann ich da ja problemlos nachschauen, was mich das Essen gekostet hat.

Den Eintrag „Kauf 8.59 €“ an dem Tag finde ich – allerdings am gleichen Tag auch einen Eintrag „Kaufstornierung -8.59 €“, samt entsprechendem Punkteabzug. Das Sandwich hatte ich gegessen, das Geld habe ich auch nicht mehr, also ist irgendwas faul.

Meine Vermutung ist: Steuerhinterziehung. Wie kürzlich in Der Zeit beschrieben ist es wohl unter Gastronomen zum Teil gängige Praxis, am Abend ein paar Einnahmen aus der Kasse zu löschen – weniger Einnahmen heißt weniger Steuerlast. Bevorzugt natürlich jene bei denen der Kunde den Kassenbon nicht mitgenommen hat. Nun scheint die Subway-Kasse direkt an das Punktesammelsystem angeschlossen zu sein, so dass das Stornieren auch meine Punkte gelöscht hat.

Zum einen bin ich etwas sauer: Nicht nur dass sich ja jemand auf unser aller Kosten um seine steuerlichen Pflichten drückt (sozusagen ein 100000000tel Hoeneß), mir entgehen auch noch meine sauer erfressenen Bonuspunkte!

Andererseits haben es Fast-Food-Franchisenehmer alles andere als einfach, und Subway ist hier wohl ein besonders heftiger Fall – gut möglich dass es der Händler solche Tricks nötig hat, um über die Runden zu kommen. Im Vergleich zu z.B. dem Karlsruher Freshsub haben die bei Subway ganz offensichtlich weniger zu lächeln...

Außerdem entgeht so nicht nur dem Staat ein wenig Geld, sondern auch Subway selbst, die – so schätze ich – einen Anteil des Gewinns oder gar des Umsatzes vom Franchisenehmer einfordern. Dazu passt auch dass Subway auf seiner Facebookseite sehr erpicht darauf war, in einem ähnlichen Fall genau zu erfahren, welcher Händler hier ein Storno durchgeführt hat.

Was lerne ich daraus? In Zukunft den Kassenbon mitnehmen, und wenn mir öfter die Punkte durch den Lappen gehen werde ich den Händler mal drauf ansprechen.



22.03.2014 16:58:07

Short update…

$ curl -I | grep X-Powered-By
X-Powered-By: HPHP


flattr this!


nomeata’s mind shares

05.03.2014 15:43:00

Creative use of screen-message

I just learnt that the math and computer science student body is using screen-message to power an information screen in their room:

There are five instances of screen-message, configured to use non-standard colors and a fixed-width fonts, and controlled by the rather new remote control feature, where screen-messages repeatedly keeps reading text from standard input until a form feed character (ASCII 0x0C) comes, and displays that. The window manager ratpoison takes care of tiling the instances.

It looks quite a bit like a poor man’s version of dividuum’s great info-beamer. I was told that they also tried out info-beamer, but the Raspberry Pi was too slow and weak for that, while screen-message and ratpoison run happily on such small hardware.

Correction: Info-beamer was not tried, but rather ruled out as overkill for this task.


nomeata’s mind shares

10.02.2014 22:12:00

Personalisierte Tip-Toi-Datei als Geschenk

Mein Neffe, gerade frisch 5 Jahre alt geworden, ist ein großer Fan der Ravensburger Tip-Toi-Bücher, und ich glaube er hat inzwischen alle für sein Alter geeignete. Wer das Konzept nicht kennt: Man kauft im Spielwarenladen (z.B. die gut sortierte Spielepyramide in Karlsruhe) recht teure Erklärbücher mit vielen Bildern und wenig Text, und dazu braucht man noch so einen dicken Stift. MIt dem kann man auf die Bildchen im Buch zeigen, und dann erzählt einem der Stift etwas. Im Stift ist ein kleiner Micro-Controller, das heißt er kann auch ein bisschen Logik – etwa: Finde alle Mäuse auf der Seite, dann sagt er einem sowas wie „Gut gemacht“ oder „Die Maus hast du schon“ oder „Das ist doch keine Maus!“. Das Video auf erklärt das auch nochmal.

Zu jedem Buch gibt es auf die entsprechende Datei zum Herunterladen und per USB auf den Stift kopieren. Und wer Computer-Freaks kennt weiß was jetzt passiert: Die Datei wird natürlich einmal im Hex-Editor aufgemacht...

Und nach vielen Stunden Hex-Dateien anschauen haben ein paar Leute, die sich nach und nach bei mir gemeldet haben und mitmachen wollten, und ich es letztendlich geschafft, das Dateiformat zu verstehen: Wir können die vorhandenen Dateien dekodieren und die enthaltenen Audio-Dateien als auch die zugehörige Logik, also was wann wie abgespielt wird, auslesen. Und es geht auch andersrum: Aus eigenen Audio-Aufnahmen komplett eigene GME-Dateien erstellen!

Und so gab es für meinen Neffen zum Geburtstag eine Spezial-Edition des Weltatlas-Buches, wo ich zu einigen Sachen auf den ersten beiden Seiten ihm etwas erzählt hab, mal was mir zu dem Land eingefallen ist, mal was den Ort mit unserer Familie verbindet, oder einfach nur die Geräusche eines Lastschiffes oder eines Löwen nachgemacht. Insgesamt 60 Aufnahmen, und trotzdem nur einen kleinen Teil des Buches abgedeckt – kein Wunder sind die so teuer. Beim Geburtstag kam das dann wohl gut an, wurde mir berichtet, wobei ich nicht einschätzen kann ob es nicht die anwesenden Erwachsenen (die ja eher erwarten dass sowas eigentlich nicht geht) mehr beeindruckt hat als das Geburtstagskind selbst.

Der nächste Schritt wäre jetzt, auch eigene Bücher (oder zumindest Bilder) zu erstellen. Theoretisch wären wir soweit, die optischen Codes sind verstanden, nur braucht man wohl einen etwas besseren Drucker als die die man üblicherweise zu Hause hat. Und ich selbst kanns nicht probieren, weil mir die Hardware fehlt; meine bisherigen Experimente musste ich immer durch andere testen lassen.

Du willst auch so eine GME-Datei für deine Verwandschaft erstellen? Sehr schön! Ich habe eine Anleitung (in Englisch) geschrieben; wenn dabei Probleme auftauchen, einfach nachfragen. Und wenn nicht, würde mich trotzdem sehr interessieren, was du draus gemacht hast und wie es angekommen ist.

Es gibt noch mehr zu tun, z.B. die Logik für die Spiele (also das was mit via dem Würfel unten rechts startet) dekodieren. Mithelfer sind sehr willkommen!


nomeata’s mind shares

19.01.2014 17:22:00

Eine Woche Freizeitstress in Cambridge

So als Strohwitwer hat man ja wenig Gründe, den Feierabend einfach nur zu hause herumzusitzen, und daher habe ich meine Woche inzwischen gut mit Programm gefüllt. Die letzte Woche beispielsweise sah so aus:


Montag abends gings zu einem Tanzkurs des Cambridge Dancer’s Club, dem Tanzverein der Universität. Ich habe mich am Kurs „Ballroom and Latin Advanced“ versucht, und eigentlich war das auch mal mein Tanzniveau, aber das ist etwa 11 Jahre her... und so tat ich mich doch recht schwer. In dem Kurs ging die Zahl der Frauen und Männer auf, und so tanzte ich durchgehend mit einer vielleicht 70-jährigen Dame, die ebenso Schwierigkeiten mit den Figuren hatte, was natürlich auch nicht geholfen hat. Direkt im Anschluss war ein etwas einfacherer Kurs, in dem ich besser mithalten konnte. Hinterher habe ich gesehen dass dieser als  „DanceSport Ballroom Improvers“ deklariert ist, also für Leute die in Richtung Tanzwettbewerb gehen wollen, was ja nicht mein Ziel ist. Ich bin mir noch unschlüssig ob ich hier weiter mache, oder den Tag anders füllen will.


Diestag abend ist die traditionelle „Microsoft Research Interns Movie Night“, deren Organisation inzwischen bei mir gelandet ist. Diese Woche haben wir die neuste Folge der BBC-Serie „Sherlock“ im Auditorium – also mit großem Beamer und Kino-mäßigen Sesseln – geschaut; für nächste Woche ist „Gran Turino“ geplant.


Mittwochs gehts stets zu einer Brettspielrunde, die ich übers Internet gefunden habe, mit einer Spielauswahl fast so groß wie beim Spieleabend in der Karlsruhe Spielepyramide, darunter sehr viele Spiele aus Deutschland, oft auch in der deutschen Ausgabe, mit einer aus dem Internet besorgten englischen Übersetzung. Zum Abschluss spielen wir immer noch eine Runde Bohnanza, wobei aus der Brechbohne dann die „Breckbean“ wird.


Ich bei meinem Schüleraustausch in den USA vor 12 Jahren dort ein bisschen Swing, insbesondere Lindy Hop, getanzt, und seit dem nicht mehr. Daher war ich hoch erfreut zu sehen, dass hier gerade wieder ein Kurs beginnt: Diesmal nicht von der Universität aus, sondern von Cambs and Beds Lindy Experience, die in der Village Hall von Grantchester (da wo die berühmten Cambridger Auen sind) erst Lindy Hop und dann Balboa lehren. Von Lindy Hop hab ich sogar noch einen kleinen Rest im motorischen Gedächtnis, welches mir aber beim Balboa Schwierigkeiten macht: Der Tanz ähnelt oberflächlich dem Disco Fox, das heißt wenn ich auf die Füße achte, mache ich plötzlich Disco-Fox-Figuren (und verwirre meine Tanzpartnerin), und wenn ich auf die Figuren achte machen die Füße Mist. Da hilft wohl nur üben...


Freitags kann ich dann üben, allerdings wiederum Latein- und Standardtanz, beim freien Tanzen in der Cafeteria des University Centers. Diese Woche mit dem unerfreulichen Zusatzprogramm „Fahrradschieben“, weil sich ein Glassplitter in den Reifen gebohrt hat. Aber ich bin hier ja ein verwöhnter Leihfahrradfahrer und hab das Rad also auf dem Rückweg beim Fahrradladen am Bahnhof (soweit sehr zu empfehlen!) angeschlossen, den Schlüssel mit einer kleinen Notiz in den Briefkasten geworfen und am nächsten Morgen frisch repariert und gewartet abholen können – daran könnte man sich gewöhnen.


Samstags hab ich noch nichts wöchentlich regelmäßiges; diese Woche war ein Brettspieletag in Ely (etwa 40 Auto-Minuten nördlich von Cambrige), mit noch mehr neuen Brettspielen. Dort wurde ich auch auf hingewiesen, ein Portal, in dem man viele Brettspiele kostenlos und asynchron, also ohne ständig online zu sein, spielen kann. Das wäre die ideale Plattform für meine eigenen Versuche, Brettspiele umzusetzten (zuletzt meine Adaption von Sim Salim als Sum Serum), doch leider ist mir die technische Umsetzung mit .NET und anderen Microsoft-Produkten doch zu fremd – was hab ich denn schon mit Microsoft am Hut?


Aber eigentlich brauch ich ja auch nicht unbedingt mehr Projekte, meine aktuellen langen ja auch um den Sonntag gut zu füllen. Z.B. in dem ich diesen Blogeintrag schreiben. Aber zur Zeit beschäftigt mich allerdings vor allem das Tip-Toi-Reverse-Engineering, bei dem wir inzwischen in der Lage, nicht nur die Audio-Daten der Tip-Toi-Dateien zu extrahieren, sondern sogar solche Dateien mit komplett eigenen Töne und Spiellogiken für existierende Bücher zu erstellen. Und wenn ich das richtig sehe dann scheitert das basteln von eigenen Büchern nur an der meist zu geringen Auflösung von haushaltsüblichen Druckern.

Kleines PS für die Karlsruher: Wenn ihr das Uni-Kino AFK gut fandet, überlegt doch ob ihr auch deren Crowdfunding-Kampagne unterstützen wollt!



16.01.2014 15:26:00

Memo an mich selbst: praktische Programme

Da ich letztens das Arch Linux auf meinem Laptop neu installiert habe und bis heute noch Programme finde, die ich bisher vergessen habe zu installieren, die ich aber total praktisch sind, hier mal meine Liste der Programme, die für mich auf keinem System fehlen dürfen.

Dieser Artikel ist also eher ein Zusammenschrieb für mich selbst, aber vielleicht findet hier ja jemand noch das ein oder andere nützliche Programm oder auch nur  eine Gedankenstütze bei einer Neuinstallation.Mit einem “*” markierte Einträge sind Programme, von denen ich denke, dass sie besonders praktisch und trotzdem eher unbekannt sind. Diese sind also vielleicht mal einen Blick wert.

Disclaimer: ich verwende hier die Paketnamen aus den Arch-Repositories, manche Pakete sind auch aus dem AUR (Arch User Repository). Auf anderen Systemen können die Pakete eventuell etwas anders heißen, oder garnicht gepackt vorliegen.

zsh # Eine Alternative zu bash. Besonders mächtig mit der oh-my-zsh, oder der grml-zsh-config (im Repo)

zsh-syntax-highlighting # Syntax-Highlighting in der Shell (inspiriert von der fish-Shell), muss noch nach der Installation in der zshrc eingetragen werden

gvim # enthält v.A. auch das vim-binary mit Mausunterstützung fürs Terminal

vim-pathogen # kümmert sich um das Laden vom Vim-Plugins

* servefile # Ermöglicht Dateien und Ordner über einen einfachen HTTP-Server freizugeben (ähnlich dem SimpleHTTPServer von Python). Kann auch Upload und Autentifizierung.

* htop # Wie top, nur schöner

mplayer # Spielt eigentlich alle Mediendateien.

libreoffice # vim kann leider keine .docx-Dateien öffnen ;)

dwb # Ein webkit-basierter Browser mit vim-like Tastenkombinationen

i3-wm # Tiling window manager. Mag ich besonders wegen dem Stacking-Modus (Fenster in Tabs), der gut für kleine Bildschirme (Laptop) ist.

i3lock # Der passende Lockscreen zu i3. Sehr minimalistisch.

dmenu # Baut Menüs aus stdin und gibt die Auswahl nach stdout. Wird von i3 als Standard-Programmstarter benutzt.

xautolock # Um mit i3lock nach gewisser Zeit automatisch den Bildschirm zu sperren.

dunst # Notification Daemon. Aussehen ist sehr gut anpassbar.

compton # Compositor. Ermöglicht echte Transparenz und dezente Überblendungseffekte zwischen Workspaces und Fenstern.

rxvt-unicode # Mein Terminalemulator der Wahl. Anpassbar, schnell.

cellwriter # Virtuelle Tastatur mit zeichenbasierter Schrifterkennung (mein Laptop hat Touch- und Stifteingabe).

think-rotate # für das Drehen von Display und Touch-Eingabe (für den Tablet-Modus meines x230t). Praktisch dazu auch libwacom und xf86-input-wacom

xournal # Tool zum auf PDFs rummalen, alternativ jarnal

* mypaint # Einfaches Malprogramm mit Unterstützung für Stifteingabe

* ranger # ein Dateimanager für die Kommandozeile. In Farbe und mit vim-like Tastenkombinationen

* moreutils # Eine Sammlung kleiner, praktischer Programme im Sinne der coreutils. Mehr Infos.

pulseaudio-ctl # Für Lautstärke-Tastenkombinationen

pnmixer # Tray-Applet für Pulseaudio

tmux # Terminalmultiplexer, alternativ screen

conky # Ein leichtgewichtiges Tool um Systeminformationen auf dem Desktop anzuzeigen. Benutze ich momentan um die i3bar mit Informationen zu füllen.

screen-message # Zeigt beliebigen Text im Vollbild auf dem Monitor an. Gut um z.B. URLs zu kommunizieren

Irgendwas Wichtiges habe ich jetzt bestimmt auch noch vergessen, aber das wird mir dann schon irgendwann wieder einfallen. Ich versuche diese Liste regelmäßig zu aktualisieren, wenn ich neue must-have Programme finde.

Falls noch jemandem spontan etwas für diese Liste einfällt, immer her damit. :)


nomeata’s mind shares

29.12.2013 21:08:00

Sim Serim as a browser game

Recently, I gave the very elegant board game “Sim Serim” away as a present, without actually playing it, leaving me curious about the game. One can easily play it on paper (you just need a paper, and 4 tokens like coins for each player, BoardGameGeek has English rules the of game), but I took this as an opportunity to learn more about HTML5 canvas and nodejs, and so I created the browser game “Sum Serum”, implementing the game mechanics of “Sim Serim”. You can play it locally with two people, or over the network. Contributions are welcome! Especially slicker graphics...

In other news, given that in recent years I became one, I’m on BoardGameGeek myself now, see my profile there.



24.12.2013 19:18:50

Mercurial Bundle Reorder

A short reminder to myself. There is a small undocumented feature. It will try to linearize a changegroup by doing a deep first walk of revs and store them in that order. This creates long lines of revisions, in which each revision is stored after it’s parent. This assumes that changes are minimal between a child and a parent. To reorder an existing repository use:

$ hg --config bundle.reorder=True clone --pull repo.hg repo-reordered.hg

Note that you have to use –pull when you pull locally otherwise Mercurial will only use hardlinks or copy and don’t create changegroups for the wireprotocol.

flattr this!


nomeata’s mind shares

19.12.2013 23:05:00

My contribution to XKCD’s #949 is not needed

A few hours ago I posted about share-file, a small tool to make a local file available at a public URL so that it is transferred from my machine, without being stored at some central server. I wanted to create something like FileTea, but usable from the command line.

My post made it to HackerNews (which brought my server to its knees for a while; let’s say I had the opportunity to find out what setting for apache’s MaxClient option works on my machine...), where the comments (besides some misunderstanding about the notable features of share-file) contained interesting links related to solving #949:

  • First of all, James Brechin implemented a command line client for FileTea. It is not clear to me whether he created it in response to my posting, or whether it lay around for a while, but I don’t care: It does precisely what I need, making share-file obsolete for me. Lazyweb works!
  • There is a service very similar to FileTea, but seemingly developed independently, at It seems that this task is best solved using unorthodox programming language choices; while FileTea uses C and glib (not common in web applications), fipes, the software behind fipelines, is implemented in Erlang.
  • The new and shiny thing for peer-to-peer communication without additional software is WebRTC, which only needs a modern browser, and there is a chat- and file-transfer program at I did not test how well it handles the case where both sides are behind a NAT, though, and sending a ready-to-use link is still simpler for the other side.
  • I found another WebRTC-based tool that focuses on sharing files only, and where users who have downloaded a file will, as long as their browser tab is open, help uploading it –  a bit like Bittorrent. So if you need to share a file with many people (all of which are using up-to-date non-IE browsers), sharefest is worth a try.

nomeata’s mind shares

19.12.2013 11:17:00

My contribution to XKCD’s #949

Randall Munroe rightly put shame on all the geeks in the world when he pointed out that transferring files over the internet is still an unsolved problem.

I am a big fan of FileTea’s approach to transferring files, where they are streamed from browser to browser, without registration and without being stored on some central server, and where closing the browser tab reliably cleans up the transfer. But I wanted something that works from the command line, so I created a small tool called share-file that will use SSH port forwarding to serve the files from a local, embedded web server at a publicly available port, as shown in these screenshots:

It works without additional dependencies (but better with python-magic installed) and requires a publicly available SSH server configured with GatewayPorts clientspecified. For more details, see the README, and to try it out, simply fetch it with git clone git://

BTW, if someone implements a command line client for FileTea, I’ll happily dump share-file for it.


nomeata’s mind shares

01.12.2013 10:42:00

Eine Geschichte über Heizungen in Großbritannien

Am Mittwoch nach der Arbeit kam ich nach hause und hörte so ein nerviges Piepen. Meine erste Vermutung war, dass einer der vielen Rauchmelder sich beschwert, dass seine Batterie leer geht. Das Piepen kam aus dem kleinen Zimmer, in dem ich die ersten zwei Nächte wohnte, und es war dann auch tatsächlich ein Melder, aber kein Rauchmelder, sondern ein der Kohlenmonoxidmelder, der unter dem Heizungs-Boiler liegt. Allerdings beschwerte der sich nicht über Kohlenmonoxid, sondern über das Wasser, das kräftig auf ihn drauf tropfte.

Ich hab ihn erstmal abgetrocknet und dann die Batterien rausgenommen, um meinen Ohren eine kleine Pause gönnen zu können. Kurz drauf stellte ich fest dass alle Steckdosen im Haus keinen Strom hatten (die Lichte allerdings gingen). Leider wusste ich nicht wo die Sicherungen sind, ging also erstmal einkaufen und wartete auf meinen Mitbewohner.

Der stellte dann fest, dass wenn man die Sicherung reinmachte, sie gleich wieder raussprang. Das ging so lange so bis wir den Boiler komplett vom Strom trennten – der hat sich wohl selbst einen Kurzschluss verpasst.

Mein Mitbewohner telefonierte dann mit dem Vermieter, der telefonierte dann mit British Gas und brachte die dazu, am gleichen Abend noch einen Techniker zu schicken (wozu er wohl etwas dick auftragen musste und behauptete, der Strom würde gar nicht mehr tun). Und entgegen allen Unkenrufen meiner Mitbewohner und der mittwöchlichen Brettspielrunde, dass man sich bei British Gas keine große Hoffnungen machen muss, kam dann auch ein Techniker. Der stellte dann größere Schäden am Boiler fest, für die erstmal Ersatzteile besorgt werden müssen – bis Freitag bleibt die Heizung kalt.

Ich hab mir zwar inzwischen die dickste Decke gekauft gehabt, die es im Sainsbury gab, aber die Nächte waren doch recht frostelig.

Am Freitag war ich dann von uns vier Mitbewohnern (der fünfte ist ja praktisch nicht existent) wohl der mit den flexibelsten Arbeitszeiten und dem gutmütigsten Chef, so dass ich vormittags zu hause blieb und um 10 Uhr einen freundlichen Menschen von Britisch Gas empfing und mit Tee versorgte, während der – laut über das alte Gerät schimpfend, das wohl schon längst ausgetauscht gehörte – den Boiler wieder instand setzte.

Passend dazu übrigens ein Artikel in der neusten Zeit (leider noch nicht online) über das Verhältnis der Briten zum Heizen, den ich nun voll bestätigen kann – dass ich hier doppelt verglaste Fenster hab muss man schon als Glück bezeichnen.

An der Stelle interessant: Trotz der unglaublich schlechten Isolation der britischen Häuser und deren Einstellung zur Heizeffizienz produzieren wir in Deutschland mehr CO₂ pro Nase. Was vermutlich daran liegt dass die Briten vor einer Weile weitgehend auf ihren industriellen Sektor verzichtet haben.


Wenger Online#Blog

01.11.2013 23:20:35

Ferien in Pianta Monda

Wie in den letzten Herbstferien waren wir auch dieses Jahr wieder in Pianta Monda zu Gast. Trotz oder sogar wegen dem vielen Bergsteigen hat es besonders den Kleinen sehr viel Spaß gemacht.

P1040712 P1040704 P1040699-P1040700 P1040685 P1040682 P1040666 P1040667 P1040645-P1040652 P1040633 P1040634-P1040636



16.09.2013 04:21:10

Play around: BGP and the DN42

As far as I am concerned, networking is one of the most fascinating aspects of computing. Connecting people and systems sounds like an easy problem to solve, but looking into the details and the scale of something like the internet, shows that networking is far from easy. While most developers and administrators understand the basics of local IP routing and maybe even OSPF, not many understand how global scale, carrier focused networking works. To understand how the internet works one has to understand routing. To understanding routing on a global, internet scale level, one has to understand the exterior Border Gateway Protocol (eBGP).

Now with our local setup’s, BGP isn’t really something that we use on a daily base (unless you work on the DE-CIX, ASM-IX or at Level3). We need to a bigger network to learn about the details. While we are obviously not being able to learn about BGP on the real internet, we want to build something similiar to the internet to help us learn and hack on this stuff.

welcome to the dn42

The dn42 is a darknet build by members of the German Chaos Computer Club. It connects people on a ISP level and somewhat replicate common internet services like a registry, anycast DNS, whois, etc. The project aims to facilitate understanding how the internet works and build up a darknet at the same time.

The dn42 uses the address range out of IANAs reserved, non-publicly routed subnets. A participant of the dn42 usually allocates a /24 from this pool by entering the necessary information into the registry. The registry is build similar to the RIPE/ANIC registry. Once a subnet is allocated, a participant has to start peering and announcing the network. The participant has a role similar to a e.g. an ISP in the internet, who announces his allocated subnet to the internet. Just like ISPs and Tier3 up to Tier1 carriers, participants in the DN42 talk eBGP with each other over a secured line.

how the internet works (for dummies and simple..blabla)

So how does your computer know how to get to Your PC got a gateway address from your ISP, so your computer is simply sending everything he doesn’t know how to route to the gateway. But how does the ISP know where the computer is? The internet folks thought about this for a very long time before they came up with “BGP”. In BGP, an internet router advertises which routes he can handle himself to his neighbors. For example the German Telekom asks the European Internet Registry for a subnet. Once it got his subnet allocated, their routers start to announce to their peering partners (e.g. French Telecom, Austrian Telecom, Google, etc) that they are now capable of routing the subnet. The neighbors itself announce this new route to their neighbors and so on. Routes are handled by autonomous systems (AS). The German Telekom owns an autonomous system and within the autonomous system, they do whatever routing necessary to get to the right computer. For other autonomous systems like French Telecoms all that matters is that subnet W.X.Y.Z/NN is handled by the German Telekom AS, so they know to sent a package designated for that subnet to the German Telecom AS and don’t have to deal with it any further.. So if the French Telecom sees a package in their network that they know the German Telekom can handle, they are just forwarding it to it, and be done with it.

In DN42 this the network works just like that, just in small scale. You are a big ISP. You have an AS number, a number of peering AS and you announce the subnet that you can route. All autonomous systems will deliver packages for that subnet to you. It’s your responsibility to route them properly. In addition if you can reach an AS faster (in less hops) than another, your peers will start sending your packages to forward to the appropriate AS. So as an ISP you handle traffic designated for you, but also forward packages to others AS if necessary.

your first subnet

So you allocated your new /24 subnet. As an owner of the fresh subnet, one has to start announcing the subnet within the dn42 by telling all other participants in the network that your router is responsible for routing the whole subnet, therefore “announcing” the particular route to the network. Like in the internet, this is done using the exterior Border Gateway Protocol (eBGP). Common software implementations for small scale purposes like the DN42 are Bird and Quagga. To establish a first connection the network, a participant will need a trusted peer that is willing to start peering with him. The connection to the peer is established using a VPN tunnel, usually OpenVPN or IPsec. Once the tunnel is established the participant configures his BIRD to start announcing the his subnet (

# Configure logging
log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };

# Override router ID
router id;

# This pseudo-protocol performs synchronization between BIRD's routing
# tables and the kernel. If your kernel supports multiple routing tables
# (as Linux 2.2.x does), you can run multiple instances of the kernel
# protocol and synchronize different kernel tables with different BIRD tables.
protocol kernel {
	scan time 20;		# Scan kernel routing table every 20 seconds
	import all;
	export where source != RTS_STATIC;

# This pseudo-protocol watches all interface up/down events.
protocol device {
	scan time 10;		# Scan interfaces every 10 seconds

flattr this!



23.08.2013 22:14:02

Moving again

It’s been a long time since we moved to a new server, but now it’s finally moving time again. This means, no longer we are running Solaris but now we are back on Linux with KVM virtualisation.

There isn’t much to say about it, we are running standard KVM hosts with virtio for both network and block device access. Disks are mapped to LVM partitions on the host and we use Kernel Samepage Merging to overcommit memory. That being said, Solaris served us very well over the years and we are going to miss some of the Solaris capabilities. Zones + ZFS + Crossbow really worked well for us and it was really fun to work with a system that create bootenviroments and snapshots before upading.

It was easy to manage, easy get reallocate memory, space and create complex virtual networks. In the end we moved away not because we think Linux is better, but because there is much more software available for Linux (particularly some experimental stuff I want to get my hands on) and because Solaris went closed source again. It was too hard to get updates and up-to-date software in the end.

Anyway..this is just a short heads up that I am still blogging. More stuff coming up soon.

flattr this!


Wenger Online#Blog

22.08.2013 23:57:36

Schlafen wie auf Wolken

Unser nicht mehr ganz so kleiner Pirat braucht ein neues Bett. Da wie immer alle Besuche in diversen Möbelhäusern umsonst waren, weil die Modelle entweder nicht gefallen, aus Spanplatten gebaut sind oder nicht in den gesteckten Preisrahmen fallen, haben wir das kurzerhand selber gebaut.


Liste der Teile:

Als erstes habe ich die beiden Füße für den Fußteil gebaut. Dazu werden die beiden 9cm breiten Bretter exakt in der mitte durchgesägt. Dazu eignet sich am besten ein Japansäge, viel genauer als die Stichsäge und so schnell das es sich nicht lohnt extra die Kreissäge zu holen.
Jetzt werden immer zwei davon rechtwinklig mit Leim und jeweils 3 Schrauben zu einem Winkel zusammengefügt. Die oberen Ecken mit einem Zirkel rund anzeichnen und mit der Stichsäge rundsägen. Zuerst sehen diese Rundungen etwas grob aus, aber nach der Behandlung aller Kanten mit dem Viertelstabfräser in der Oberfräse ist es schon fast perfekt. Der Rest erledigt später das Schmirgelpapier. Als Verbindung der beiden Füße kommt jetzt ein 90cm (Breite der Matratze) + 2×2,8cm (Dicke der Bettwangen) Brett dazu. Das darf ruhig geleimt und geschraubt werden, der Fußteil ist klein und leicht genug zum Transport und muss nicht auseinandernehmbar sein.

Aus dem 30cm breiten Brett werden dann die beiden Regalseitenwände für das Kopfteil. Durch das senkrechte Bettabschlußbrett was genau zwischen zwei Regalbrettern eingeschraubt wird ist das Kopfteil ziemlich stabil. Aus das Kopfteil wird geleimt ung geschraubt.


Die Bettwangen müssen demontierbar und trotzdem stabil mit dem Kopf- und Fußteil verbunden werden. Ich habe dafür Rampamuffen verwendet. Dazu das Brett mit einer Schraubzwinge am Zielort befestigen und mit einem 8er Bohrer beide Bretter durchbohren. Im sichtbaren Brett mit einem Senkbohrer eine zur Schraube passende Senkung anbringen und die Bohrung im anderen Brett mit einem 11er Bohrer aufbohren (Lt. Baumarktmitarbeiter sollte ein 10er passen, ich habe da die Rampamuffen aber nicht eingedreht bekommen. Gefühlt wäre sogar ein 12 noch besser gewesen. Nur wer hat schon so einen großen Bohrer im Haus) und die Rampamuffe vorsichtig eindrehen. Dabei muß man tierisch aufpassen das diese auch exakt grade wird. Am besten geht das wenn man die spätere Schraube von hinten ein wenig eindreht, dann kann man damit gegenhalten.




Jetzt muss das ganze Holz noch geschmirgelt und 2x geölt werden und fertig ist das neue Bett.




Wenger Online#Blog

04.08.2013 20:20:56


Beim geschätzten zweihundertsten mal stolpern über die Kiste mit den Einzelteilen meiner fürs Wohnzimmer geplanten Lautsprecher habe ich das schöne Wetter genutzt und diese endlich fertig gebaut. Es handelt sich um Sippos, ein Lautsprecher enwickelt von Alexander Gresler der trotz seines günstigen Teilepreises von unter 30€/Seite einen erstaunlichen Klang entwickelt.

Als Material habe ich schlichtes MDF verwendet. Die Kanten habe ich mit einem Viertelstabfräser abgerundet, nach dem Schleifen habe ich das Gehäuse dann mit schwarzer Beize eingelassen. Bis auf ein paar Stellen, wo ich den ausgetretenen Weißleim nicht sofort entfernt habe, sieht die Oberfläche damit schön schwarz, fast wie mit Samt überzogen aus. Beim nächstenmal werde ich da wohl etwas mehr drauf achten.

Eine etwas schwierige Stelle waren die Ausfräsungen für die Bass Chassis. Diese sind leider so geformt das man sie von hinten hinter eine Plastik Frontplatte oder ähnlich schraubt. Würde man diese hinter eine 12mm MDF Platte schrauben so würde der dicke Rand den Klang nicht unerheblich beeinflussen, außerdem würde man auch diesen Rand ja dann sehen, er müsste also sehr gleichmässig gefräst sein. Um die Chassis denoch von vorne anschrauben zu können braucht man eine zweistuffige kreisförmige Fräsung, mit einem Fräszirkel wäre das eine einfache Sache. In Ermangelung dieses Werkzeugs habe ich die Löcher einfach frei Hand gefräst. Wenn man langsam schön dem Strich entlangfräst geht das zur not.

Einpassen der Chassis und des Bassreflexrohrs, anlöten der Kabel.


Alles ist an seinem Platz, fertig zum testen.


Und so sehen sie fertig aus.


Zuerst hatte ich Zweifel ob alles stimmt da sie die Bässe ziemlich überbetont haben und gelegentlich ein starkes Resonieren zu hören war, es lag aber aber am schrottigen Verstärker den ich zum testen verwendet habe. Im Wohnzimmer klingen sie richtig gut, ich werde gleich mal ein paar längere Musikhörsession machen…

mehr... v4

10.07.2013 12:08:00

Your favourite ideology is shit, and why you should be angry at political parties.

Capitalism has failed. I don’t mean this in the revolutionary, lets socialize All The Things way - all I mean is something that should really be obvious right away. Much as there has never been a communist nation (insofar as you can refer to a communist society as a “nation”), there really hasn’t ever been a proper anarcho-capitalist state. None of the various forms of revolutionary socialism have ever managed to transition over to anything but famine and opressive dictatorships, to the point where we’re pretty sure that even trying is a horrible idea, and none of the various attempts at removing as much regulation as possible ever go anywhere before the inevitable huge consolidated organizations pop up, go under, and enough people get hurt that thigs are rolled back very quickly (and lets not even talk about the half a dozen failed attempts at swimming libertopias).

So, if communism isn’t the silver bullet, and capitalism doesn’t work either, what does? Well, look around - what do you see? What is the economic philosophy nearly every nation on earth subscribes to? It goes by many names, depending on whatever seemed like a good idea at the time. Roughly, it can be described as “something somewhere in the middle between the two extremist ideas of no-government-at-all anarcho-capitalism and government-runs-everything centralized-socialism”.

It’s obvious that, while that covers just about everythig everyone does, that different nations still do thigs differently. Some nations have socialized medicine, some don’t. Some have huge economic safety nets, some don’t. Some are libertarian enough to make almost anyone who doesn’t post on the forums happy, some are still so socialist that socialist academia would rather pretend they somehow aren’t. As it turns out, while it is obvious that “some government - but not too much” is a generally sound principle, how much is “too much” is a matter that isn’t settled and might never be. And that is perfectly fine!

Society is a messy, complex thing, and a moving target. There usually is more than one side to any issue and no solution that is great for everybody, and what was perfectly fine yesterday might need reevaluation today, since the world and the people that live in it constantly change. That is why it is good that there are people who have various oftentimes diametrically opposite points of views about issues, so that these people can then get together and figure out how to solve the problems they have in some way that everyone can live with, after considering all the sides of the issue that there are. That way, whatever happens will usually be better than if any one group had just gone ahead and done whatever. Maybe it is a terrible idea to deregulate banking, maybe it isn’t. Maybe it is a terrible idea to regulate what people can and cannot say, maybe it’s fine to allow people to sue for personal insults. Maybe the state should have a monopoly on the exploitation of natural ressources, or maybe not. The wrongest possible thing is blindly following your own ideology without first checking if maybe, just maybe, the other guys have the right idea this time.

As long as we are at the neighbourhood association level, it’s perfectly possible for everyone to participate personally in political decision-making. As soon as a significantly greater number of people get involved, this becomes impractical. A good - not perfect, but pretty good - system for this is political parties. They are instruments of political decision-finding - they stand for various different sets of values and positions, and when voting, people delegate the actual process of talking things through thoroughly to them, so that things can get done. There’s obvious problems with that (lack of granularity, long time between elections, …), which can be offset in various ways, but as time goes on, there is one less-obvious problem that has become quite a bit more problematic recently.

To actually figure out what a good way to handle things is, you usually need discussion. If everyone already agrees, that seems great at the time, but when everyone pretty much agrees on everything, that starts leading to short-sighted, sub-optimal decisions.

But that is exactly what is happening right now.

Political parties should not be like a corporation trying to maximize shareholder value, always trying to get the maximum number of votes. A party should, of course, aim to get the greatest number of votes it can - but it should do that by convincing as many people as possible that its ideas are the way forward, not by constantly shifting their core values around until they aren’t considered inelectable by anyone anymore and then going for the “we are the lesser evil!” vote. Parties should not jump at any opportunity to shift closer to their political opponents in an effort to skim off some votes. Parties should not succumb to populism and do a complete one-eighty every time public opinion seems to shift. All this slow, unstoppable slide to the center leaves is parties with no real positions of their own who cannot possibly effectively represent the spectrum of opinions that there is.

But that is exactly what is happening right now.

Every time you hear a politician say “Some Other Party had this idea first, but we saw it was a good idea so we’re doing it as well!”, you should get angry. Every time you see a party abandon yet another long-held position to move further towards the center, you should get angry. You should tell these people “No! Have some fucking backbone! Risk being in the wrong! Debate with the opposition! If you must, compromise, but not right away!”, or, in other words, “Do your fucking job!” - which is the representation of the electorate, and not the conservation of personal political power. However, inevitably, that seems to be where things end up going, if left unchecked.

What can be done about this? Well, I certainly don’t claim to know. There are some ideas that I find neat - systems like the Pirate Parties “Liquid Democracy” tools, where votes can be delegated on a per-issue basis and the delegation can be changed at any time, or election systems that encourage smaller, more diverse parties - but these probably have terrible problems of their own. A good way to figure out what might work would be to get together and talk and maybe disagree about some things so that we can learn from each other. Lets disagree. Lets talk.


The Turkey Curse

28.06.2013 11:06:00

Abgeordnete mit eigener Whistleblower-Plattform

Ich will hier und jetzt nicht diskutieren, ob es sinnvoll ist, Geheimnisse innerhalb von staatlichen Institutionen und Unternehmen zu haben oder nicht. Es bedarf keiner hellseherischen Fähigkeiten um zu der Überlegung zu kommen, dass der Schutz von Geheimnissen in Zukunft immer aufwändiger wird, und wenn es um Geheimnisse aus Regierung, Verwaltung, Sicherheitsbehörden usw. geht auch um einen Preis, der sehr hoch sein könnte, der dafür zu bezahlen ist - und dabei gilt: Umso schmutziger das Thema, desto eher wird es negativen Fallout geben. Zu dem, was in den USA dazu passiert und meines Erachtens auch hier irgendwann auf die eine oder andere Art zu erwarten sein könnte, siehe den Artikel bei McClatchys. Deswegen gehe ich für die Überlegungen in diesem Text davon aus, dass es Dinge gibt, die nicht an die Öffentlichkeit sollen (z.B. aus Gründen “nationaler Sicherheit” oder wenn Betroffene ganz besonders geschützt werden müssen) aber es trotzdem möglich sein muss, Probleme entsprechend zu adressieren.

Grade wenn am Rande der Verfassung agiert wird, ist funktionierende Kontrolle ganz besonders wichtig. Was es aber zumindest geben muss ist eine Möglichkeit, Verstösse anonym melden zu können - und zwar nicht bei dem direkten Vorgesetzten, sondern entweder “weiter oben” oder an einer Stelle, die der Person, die die Informationen loswerden will, besonders vertrauenswürdig erscheint und Möglichkeiten hat, das entsprechend vertraulich zu thematisieren.

Binney und Drake, zwei NSA-Whistleblower, die auf dem 29C3 (siehe Aufzeichung des Vortrages) gesprochen haben, meinten beispielsweise, sie wären niemals an die Öffentlichkeit gegegangen um auf Mißstände aufmerksam zu machen, wenn es diese Möglichkeit gegeben hätte und sie die Probleme hätten melden können und so abgestellt worden wären. Aber natürlich gibt nicht nur Verfehlungen durch Mitarbeiter von Sicherheitsbehörden, auch in anderen Bereichen von Politik, Behörden und Unternehmen gibt es dieses Problem. Inwieweit Betriebsräte, Journalisten oder andere Strukturen helfen und was es sonst noch gibt, lasse ich aber mal aussen vor.

Eine dieser Stellen sind die Abgeordneten des Bundes und der Länder, und das aus mehreren Gründen: Sie sind die gewählten Vertreter des Volkes, sie besitzen eine verfassungsmässig garantierte Immunität und sind in der Lage, in nicht-öffentlichen Beratungen Dinge zur Sprache zu bringen. Ausserdem sind sie die, die ohnehin verfassungsmässig Kontrollfunktionen wahrnehmen sollen, speziell, wenn es um die Arbeit der Exekutive geht.

Nathan hat mich durch sein Posting auf der Liberationtech-Liste und in Gesprächen in den letzten Tagen noch mal auf das Projekt DeadDrop hingewiesen, das von Aaron Swartz entwickelt wurde und z.B. beim New Yorker unter dem Namen Strongbox seit Mai im Einsatz ist. Eigentlich ist das System für Newssites konzipiert, kann aber prinziell natürlich auch von völlig anderen Entitäten in derselben Art genutzt werden. Ziel dabei ist es einfach, dem Empfänger über Tor. Nachrichten und Daten zukommen lassen zu können.

Die Überlegung wäre also, so eine Strongbox für die Abgeordneten zu haben - und zwar für jeden einzelnen und unabhängig von der Fraktion. So kann also auch, überspitzt gesagt, ein Schlapphut, der Probleme der Auslegung einer Maßnahme hat, sich an Leute wie Uhl und Konsorten wenden, wenn er glaubt, er wäre die Person, die das angehen kann statt dem Parlamentarier einer anderen Fraktion.

Bereitsteller der Infrastruktur könnte der Bundestag (oder der entsprechende Landtag) sein oder die Fraktionen oder auch die Abgeordneten das selbst machen - was für letztere vor allem dann recht einfach gehen könnte, wenn man ihnen ein entsprechendes Device zur Verfügung stellt (vielleicht sowas wie einen Rasberry Pi mit Strongbox). Dazu gehört natürlich auch noch, dass die Abgeordneten alle in der Lage sind, mit einer für Bürger einfach zu benutzender und nicht zentral kontrollierter Crypto ausgestattet werden (also GnuPG/PGP/OpenPGP) und ihre Schlüssel entsprechend hinterlegen.

Da wir grade beim Thema sind: Die Zwiebelfreunde haben auf Indigogo eine Crowdfunding-Kampagne für mehr Tor Exit Nodes und Bridges gestartet, die ihr unbedingt mit ein paar Euro unterstützen solltet, wenn euch etwas an Anonymität und Zensurumgehung gelegen ist!


The Turkey Curse

24.06.2013 13:30:00

Ich gehe nicht zum Reden in den Wald

Ludwig Greven hat bei der Zeit einen Artikel mit dem Titel Wer nicht belauscht werden will, sollte nicht überall reden geschrieben, der mich doch mehr als nur ein wenig irritiert. Er schreibt u.a. folgendes:

Zu glauben, dass die öffentlichen Proteste an der Kontroll- und Datensammelwut der Sicherheitsbehörden daran grundlegend etwas ändern werden, ist weltfremd.

Meint der Autor etwa, es sei besser die Klappe zu halten und diesem gespenstischen Treiben nicht entschlossen entgegen zu treten - und zwar auf allen Ebenen, die in einer demokratischen Gesellschaft zur Verfügung stehen? Wenn es eins gibt, das immer noch wirkt, ist es eine laute und fordernde Öffentlichkeit, die sich nicht von Geheimdiensten, der Polizei, Kriminellen oder Terroristen einschüchtern lässt. Denn wenn das passiert, haben wir ohnehin schon verloren.

Weiter unten schreibt er etwas, was mir schlicht die Sprache verschlägt:

In der DDR gingen Menschen, die sich unbeobachtet von der Stasi unterhalten wollten, in den Wald oder in einen Park und sprachen unter vier Augen miteinander. Wer heute unbeobachtet bleiben möchte, sollte vielleicht nicht im Internet miteinander reden.

Wie bitte? Ich soll zum Reden in den Wald gehen? Wo bin ich denn? Ich habe nicht vor, diesen Staat zu stürzen, sondern mich an demokratischen Diskursen zu beteiligen oder auch gerne mal vertraulich mit meiner Frau, meinen Freunden, meinen Kollegen, meinen Kunden oder meinem Anwalt oder Arzt zu kommunizieren. Kann auch vorkommen, dass ich mal eine Demo mitplane oder ein vertrauensvolles Gespräch oder Mailwechsel mit einem Abgeordneten oder Journalisten habe. Und soviel Wald gibt es auch gar nicht mehr, damit jeder, der das braucht, vertraulich kommunizieren kann.

Es zeugt doch schon von einem echten Problem, wenn ich normale Kommunikation (und das ist so ziemlich alles was ich mache) verschlüsseln muss wie ein Geheimnisträger, nur damit nicht irgend so ein Freak aus VS, BND oder BKA auf den schmalen Trichter kommt, er müsse auf Grund irgendeiner diffusen Bedrohung und falsch interpretierten Zusammenhängen heraus meine intimsten Details kennen. Da macht es auch keinen Unterschied, ob diese Details per Brief, E-Mail, Telefon oder meinen privaten vier Wänden ausgetauscht werden. Diese Kommunikation ist tabu und darf, wenn überhaupt, nur kurzzeitig abgeschnorchelt werden, wenn es dazu einen hinreichenden, strafrechtlich relevanten Anfangsverdacht gibt oder meine Kommunikation ein Problem der nationalen Sicherheit sein sollte.

Wenn ich mal plane, diesen Staat zu stürzen, komme ich vielleicht gerne auf die Idee mit dem Wald zurück. Aber ich bin da sehr weit von entfernt und werde versuchen, mein Recht auf Vertraulichkeit und Intregrität meiner informationstechnischen Systeme durch alle meine bescheidenen Mittel einzufordern.

Ich weiss nicht, wie es anderen geht: Ich werde jedenfalls auch in Zukunft nur in den Wald gehen, um mich zu erholen oder Pilze zu sammeln, aber ganz sicher nicht, um ganz normal privat zu kommunizieren.


The Turkey Curse

23.06.2013 20:15:00

Und er hilft doch!

Niko Härting stellt in seinem Blogeintrag unter dem Titel Prism und Tempora: Konsequenzen für Deutschland einige Betrachungen auf, denen man durchaus folgen kann. Allerdings stellt er eine Sache fest, der ich klar widersprechen muss. Er schreibt unter 5.:

Wer meint, mit Datenschutzgesetzen, einer richterlichen Kontrolle oder sogar einem Informationsfreiheitsgesetz Bürgerrechte gegen die Dienste schützen können, argumentiert naiv.

Naiv ist diese Ansicht keinesfalls, denn Härting scheint nicht zu verstehen, dass Datenschutz wesentlich mehr ist als ein paar bedruckte Zettel, auf denen steht, dass eine Meldung bei einem Einbruch auf Server stattfinden muss. Datenschutz richtig verstanden ist nämlich nicht zuletzt die Frage, wie man Datenabfluss und Mitlesen von Verbindungen verhindert (also genau das, worum es im Kern geht).

Systeme, die ein datenschutztechnisches Design haben, das den Begriff auch verdient, sind gegen Tempora weit besser gefeit als es Härting glauben machen will. Denn was den Diensten in die Hände spielt ist ja nicht nur die fehlende Kontrolle über sie, sondern vor allem, dass sich die wenigsten Betreiber von Internetangeboten Gedanken darum machen, wie man Daten und Kommunikation ordentlich schützt. Denn der Schutz gegen kriminelle Angreifer ist erst einmal derselbe wie der gegen andere, also z.B. staatliche Angreifer. Aus Anwendungs- und Anwendersicht ist da keinerlei Unterschied.

Ich sehe praktisch jeden Tag Verstöße gegen Datenschutz und Einbrüche, die hätten verhindert werden können, wenn sich die Betreiber die Sachen zu Herzen genommen hätten, die im BDSG stehen oder, etwas verklausuliert, dahinter stecken. Und damit meine ich nicht nur Datensparsamkeit oder die Sicherung von Passwörtern als Hashes. Ein einfaches und gleichzeitig überaus effektives Beispiel ist Zertifikats-Pinning bei SSL, bei dem eine Interception zumindest solange ins Leere läuft, wie die Schlapphüte keinen Zugriff auf die Zertifikate haben. Ein anderes Beispiel aus derselben Kategorie ist die Nutzung von sogenannter Perfect Forward Secrecy. Das hilft zwar nicht gegen die Speicherung, aber es hilft ganz hervorragend gegen das Mitlesen und gegen die Auswertung (Härting kann mir ja gerne mal erklären, wie das funktionieren soll). Sogar einen recht großen Teil der Metadaten kann damit abgesichert werden.

Und speziell im Zusammenhang mit Tempora und Prism müssen übrigens zwei andere Dinge gemacht werden, die damit in Zusammenhang stehen: Safe Harbour abzuschaffen oder zumindest ordentlich zu härten sowie ein Vertragsverletzungsverfahren gegen Großbritannien auf EU-Ebene. Damit gibt es noch keine bessere Kontrolle der deutschen Geheimdienste. Aber gegen die hilft, wie schon angedeutet, in weiten Teilen konsequente und vernünftige Krypto. Denn die Zugriffe auf und die Ermächtigung, die der NSA und die GCHQ haben jeweils durch die Geheimgerichtsbarkeit haben, gibt es hier nicht. Ohne die sind aber auch keine vergleichbaren Maßnahmen machbar wie die, die durch die Leaks ganz am Anfang offenbar wurden.

Ein starker Datenschutz ist der elementare Kern einer Gesellschaft, die auf funktionierende Software und sichere Datenverarbeitung angewiesen ist. Das ausser Acht zu lassen ist, mit Verlaub, grob bösartig.


The Turkey Curse

21.06.2013 21:50:00


Die geschätzten SZ-Autoren Johannes Kuhn und Johannes Boie haben sich in der dem angenommen, was Kuhn den #Neuland-Aufschrei nennt und Boie mit dem Text Siedler ohne Selbstkritik noch weiter ausführt. Ich habe das Gefühl, dass ich mit Spiesser und Siedler irgendwie gemeint bin, und vielleicht haben sie sogar irgendwie recht. Aber grade weil ich beide schätze, möchte ich ihnen hier etwas ausführlicher antworten.

Informationstechnologie ist selbstverständlich alles andere als Neuland. Sie gehört nicht nur bei ausgesprochenen IT-Unternehmen zum “Kerngeschäft”, sondern ist in so gut wie allen Bereichen der Gesellschaft, des Handels und der Industrie indirekt oder ganz direkt anzutreffen. Diese Entwicklung ist auch keine, die über Nacht über Deutschland und die Welt hereingebrochen ist, sondern schon Jahrzehnte sehr sichtbar stattfindet. Denn wie sonst sind die Entscheidungen und wunderbar treffenden Wortschöpfungen aus Karlsruhe aus den Achtzigern und aktuell zu deuten, die sich Computern und vernetzter Welt annehmen und meiner Ansicht nach von großem Weitblick zeugen.

Die Zahlen zur Nutzung, auf die sich beide Artikeln beziehen, enthalten wenig wirklich erhellendes. Aber gut, in absoluten Zahlen sind es 53,4 Millionen, die das Netz zumindest gelegentlich nutzen, und sind damit erheblich mehr als die, die gelegentlich Zeitungen oder ein Buch lesen, aber das ist ohnehin nicht der wirklich entscheidene Aspekt. Die politische Relevanz müssen wir aber trotzdem Gott sei Dank im Jahr 2013 nicht mehr diskutieren.

Interessant an Merkels Neuland ist denn auch nicht der Begriff, sondern die Mär davon, dass es irgendwelche ganz neuen und vollkommen anderen Bedrohungen gibt. Diese Bedrohungen sind dieselben, die es auch schon früher gab. Die Konzentration auf den Begriff verstellt die aber die Sicht auf das, was sie eigentlich sogar recht unverblümt zum Ausdruck gebracht hat.

Industriespionage, Betrug, Erpressung, Angriffe auf datenverarbeitende Systeme oder Fragen zum Datenschutz bringen mitnichten neue Herausforderungen, es sind dieselben wie “früher”, lange vor 9/11. Terrorismus ist demnach auch kein neues Thema und sollte in der Betrachtung, wenn es denn darum in einer Zivilgesellschaft überhaupt gehen sollte, nur am Rande in diesem Zusammenhang gesehen werden. Er mag sogar als Argument dienen, vielleicht kurzfristig und unter sehr strengen Auflagen über die Grenzen des demokratisch Erlaubten Bürger zu Überwachen und zu rastern. Krass ist dabei aber nicht zuletzt, wie dies z.B. im Lichte von Cyberwar- oder Cyerbterrorismus-Bullshit geschieht und praktisch nicht zuletzt durch staatliche und Staaten nahestehenden Personen, Gruppen oder auch Firmen hervorrufen wird, die sie selbst ermächtigen.

Das Netz kennt natürlich auch, anders als Kuhn sagt, Grenzen. Zumindest wenn mit dieser Grenzenlosigkeit das Fehlen territorialer Schranken und Regeln gemeint ist, so ist eine Nutzung in einem Netz wie dem chinesischen oder iranischen sicher ein guter Datenreisetipp für zwischendurch, um unterschiedliche Grenzen sehr anschaulich zu erfahren. Diese Grenzen unterscheiden sich nur noch marginal von “realen Grenzen”: Die Entwicklung ist unübersehbar, dass jede Regierung und jede internationale Organisation, die etwas aus sich hält, Einfluss auf das Netz nehmen will und sich bei Gelegenheit auch einfach nimmt, sei es mit legislativer, ökonomischer oder digitaler Gewalt. Und dass schliesslich die Armeen dieses Planeten vor allem zivile Infrastruktur bei ihren Angriffsplanungen im Auge haben, sollte auch im Netz nicht wirklich überraschen, sondern eher die Empörung hervorrufen, die diese Denkweise ganz grundsätzlich verdient und in zivilem Kontext auf sinnvolle Art nur rein defensiv betrachtet werden kann.

Dass sich die Menschen, die Boie Siedler nennt, nicht darum kümmern würden, was die Neulinge tun oder denken, halte ich für eine gewagte These: Eine Veranstaltungen wie z.B. der Chaos Communication Congress jährt sich dieses Jahr zum dreizigsten Mal. Auch die re:publica und unzähle weitere Events mit etwas weniger technischem Fokus sind schon eine Weile am Start - um einige wenige jener Peergroups zu erwähnen, bei denen es um die jeweils aktuellen politischen und technischen Entwicklungen auf meist hohem Niveau geht. Die Veranstaltungen verbindet eine offene Diskussion darüber, welchen Einfluss Technik auf Gesellschaft ausübt. Und ich fange da nicht mal an über einzelne Leute zu reden wie die, die hinter stehen oder viele, viele andere, die sich gefühlt seit Äonen die Finger wund tippen und mittlerweile längst zu “Told you so”-Zynikern geworden sind.

Zugegeben: Eine Teilnehmerin oder ein Teilnehmer sollte schon mal einen Computer benutzt haben, sonst wirken ziemlich viele Vorträge und Workshops dort kaum anders als klingonisch. Aber diese Veranstaltungen sind offen, und die Menschen, die dort anzutreffen sind, zeichnen sich durch einige besondere Eigenschaften aus: Die Lust daran, Erkenntnisse zu teilen, alle möglichen Fragen zu diskutieren und sogar, wenn möglich, zu beantworten, gemeinsame Pläne zu schmieden oder Software benutzbar oder einfach besser zu machen, kurz: Werkzeuge zu schaffen.

Aber hört da irgendwer von den Leuten hin, die “das Netz” als fernes Land betrachten, also jene, die der Meinung sind, es kontrollieren und zerstören zu müssen um irgendwas (ja, was eigentlich? Demokratische Kontrolle ist es jedenfalls nicht) zu erhalten - ohne sich überhaupt die Mühe zu machen zu verstehen, was da grade im Detail eigentlich passiert?

Nun gut, vermutlich verstehen sie es in Ansätzen sogar mittlerweile irgendwie und haben Probleme, weil das, was da passiert, eine Öffentlichkeit darstellt, vor der sich offensichtlich nur noch sehr wenige Dinge so wie früher verstecken lassen. Dinge, über die wir selbstverständlich Bescheid wissen müssen, um überhaupt entscheiden zu können, ob wir sie so wollen.

Die Gruppen und Gäste, die hinter diesen Events stehen, sind indirekt oder direkt damit beschäftigt, die Exekutive mit Druckmitteln wie Informationsfreiheits- und Transparenzgesetzen dazu zu bringen, offen mit Fakten umzugehen oder wenn das nicht reicht, die Informationen selbst öffentlich zu machen.

Aber es müssen tatsächlich auch noch bessere Übersetzungsleistungen her: Selbst wenn ich überaus wohlwollend die Entwicklungen in der deutschen Presselandschaft wahrnehme, digitale Herausforderungen überhaupt mal anders als polemisch zu betrachten, so ist immer noch deutlich zu erkennen, dass die Digital-Ressorts innerhalb der Redaktionen unter einer Art Exotenmalus leiden. Besonders krass zeigt sich das in der Tat bei den Diskussionen wie zum von Boie erwähnten, völlig sinnbefreiten Leistungsschutzrecht für Presseverlage. Was muss da eigentlich noch passieren?

Eine Gesellschaft, die wie unsere von funktionierender Technik wie Computern und Vernetzung elementar abhängig ist, sollte sich im Klaren sein, dass es nicht reicht, wenn ihre parlamentarischen Vertreter das Twittern für sich entdecken und dann wie einen Popanz vor sich her tragen (oder sich dem gezielt widersetzen, was genauso plemplem ist). Unsere Gegenwart und Zukunft ist digital. Und das erzwingt eine Ehrlichkeit und Offenheit, die sich nur noch unter Verlusten elementarer, gesellschaftlicher Grundwerte verhindern lässt.

Themen wie offener Umgang mit Unsicherheit, Überlegungen zur Haftung bei Soft- und Hardwarefehlern oder Verschärfung von Datenschutzregelungen im sicherheitrevelanten Kontext, kartellrechtliche Fragen und Wirtschaftförderung, wenn es um Markt und Wettbewerb geht, Fragen sozialer Umverteilung, Werkzeuge zur besseren Partizipation oder Kontrolle und Schranken beim gespenstischen Treiben von Geheimdiensten, ja selbst Netzneutralität - alles nicht neu, sondern genau die Themen, an denen sich unsere Gesellschaft schon sehr lange auf die eine oder andere Art abarbeitet und wo Antworten leider immer wieder gleich und einseitig erscheinen. Der Kontext hat sich nicht einmal wirklich verschoben: Politik, die auf diffuser Befindlichkeit und Angst basiert, war und ist schlecht beratene Politik.

Gleichzeitig erleben wir an vielen Stellen, dass aus Stärken Schwächen werden. Denn wenn es etwas gibt, was ein echter Exportschlager ist, dann ist es deutsches Ingenieurswesen, übertrieben vielleicht mit einer Floskel wie “Keine Funktion ohne Sicherheit” auf den Punkt gebracht, das einer Denkweise entspringt, die wir glücklicherweise vielerorts verinnerlicht haben und sich letztendlich auch in grade schon erwähnten verfassungsrechtlichen Begriffsmustern widerspiegelt. Ich finde es dann auch bezeichnend, dass sich in der PRISM-Affäre ein Kommentator der New York Times wünscht, die Deutschen mögen doch bitte etwas für Datenschutz auf diesem Planeten tun. Sicherheit meint in dem Kontext nämlich überhaupt nicht, Freiheitsrechte unter Sicherheitsgesetzen zu begraben, die jeden und alles unter Generalverdacht stellen, sondern reale Bedrohungsszenarien und die entscheidenen Fragen dazu anhand der gesellschaftlichen Kosten rational zu diskutieren und zu entscheiden. Neuland ist in dem Kontext einfach ein vollkommen irrationaler Begriff, denn dies ist genau der Kern jeder gesellschaftlichen Aushandlung. Diese Aushandlung findet aber gar nicht mit der Zivilgesellschaft statt.

Die verbale Rechtfertigung für entgrenzte Überwachung, die die Kanzlerin und viele Innen- und Sicherheitspolitiker anstimmen (denn so und nicht anders sehe ich ihre Aussagen), klingt in meinen Ohren wie purer Kolonialismus. Und sie rechtfertigt sehenden Auges, die Zivilgesellschaft zur Geisel zu machen und Stück für Stück in eine militärische Kampfzone, in einem nicht erklärten Krieg gegen die eigene Bevölkerung zu machen, einer Bevölkerung, der bis auf das Mark misstraut wird - einfach weil es extrem leicht fällt, diese Technik an sich als asynchrone Bedrohung zu betrachten. Es passiert also genau das, was bei genauerem Hinsehen einfach nur ganz furchtbar dumm und gefährlich ist. Denn diese “neue Bedrohung” ist vor allem eins: Gefühlt, und sie verleitet zu offensichtlich irrationalem Verhalten und zusehens zu immer stärkerer Machtverschiebung. Sie ist aber im Kern nur Ausdruck von Veränderungen, die mindestens seit Erfindung des Feuers oder des Rades, also von jeher, durch Technik ausgelöst wird.

Ich kenne nicht wenige Akteure, die einfach nach ein, zwei oder gar drei Dekaden die Lust verloren haben, immer und immer wieder zu erklären, dass eine computergestützte, vernetzte Technik sich sehr leicht in sehr repressive Werkzeuge verwandelt - also eben das was mit “Technik hilft vor allem dem Stärkeren” am Besten umschrieben werden kann. Und was gibt es in einem Staatsgebilde stärkeres als Polizei, Geheimdienste und das Militär, denen dazu auch noch die quasi unkontrollierte Macht über die Frage zugestanden wird, welches Verhalten als verdächtig oder problematisch definiert wird? Und dieser Dreiklang ist es auch, der das Ganze so überaus problematisch macht, wenn nicht mal mehr richtige Trennungsgebote existieren.

Wir waren da schon mal viel weiter, denn echte Gewaltenteilung sollte als Errungenschaft einer modernen, vitalen und selbstbewussten Demokratie verstanden werden. Ich habe aber auch mittlerweile vollstes Verständnis für jeden, der es ablehnt an Anhörungen teilzunehmen, die zu reinem Mummenschanz verkommen, und dann lieber Richtung Karlsruhe oder Luxemburg zieht.

Wenn es jedenfalls etwas Neues in Neuland gibt, so ist es nur diese eine Sache: Wie muss der Diskurs der Exekutive mit der zivilen Gesellschaft neu justiert werden - und das schliesst selbstverständlich die Diskussionen ein wie die darüber, wie Kontrolle über die Überwachung unseres Verhaltens gestaltet sein muss und ob wir diese Überwachung überhaupt brauchen. Neuland ist nicht Bastaland und sollte auch nicht unser Ziel sein.

Alle anderen Diskussionen, die aus der Neuland-Meme entstehen, sind glaube ich vergleichsweise uninteressant. Denn diese Meme zeigt höchstens eins: Die ausserordentliche Verzweiflung, die eine Reihe von Menschen seit Jahren, ja teilweise seit Jahrzehnten erleben. Oder anders: Das, was Merkel als Neuland bezeichnet, sehe nicht nur ich als das Neuland, das ein Maß an Kontrolle definiert, die einem seltsamen, demokratischen Grundverständnis entspringt.


The Turkey Curse

08.06.2013 16:51:00

Na und, Thomas?

Ich bin kein Rechtsgelehrter, aber selbst mir fallen manchmal Denkfehler von Thomas Stadler auf, die er in seinem Blog äussert. Normalerweise ignoriere ich solche Aussagen dann einfach, aber grade in der Debatte zur EU-Datenschutzreform kommt die Argumentation oft genauso daher, wie die der Lobbyisten, die es zu bekämpfen gilt.

Diesmal muss ich mich aber doch dazu äussern, denn einige Ansagen in seinem Text Prism ist kein originär amerikanisches Phänomen lassen mir die Nackenhaare zu Berge stehen.

Nach deutschen Recht dürfen deutsche Geheimdienste eben nicht tun und lassen was sie wollen, sie müssen sich an Recht und Gesetz halten - es kommt halt nur selten bis nie zu Verfahren, die es aber durchaus geben könnte, auch wenn sie extrem kompliziert zu führen sind. Das gilt umso mehr, wenn Angehörige von Geheimdiensten fremder Staaten gegen dieses Recht verstossen, und das gilt selbstverständlich auch für Verstösse gegen EU-Recht. Und das gilt erst recht, wenn sie sich dazu illegal Zugriffe auf informationstechnische Systeme verschaffen, durch Backdoors oder einen gezielten Angriff. Wenn man diesem Grundsatz nicht folgen würde, gäbe es keinen Rechtsstaat - den ich aber durchaus noch für existent halte. Denn nur, weil sich Geheimdienste nicht darum scheren, wird ihr handeln nicht legal, sondern unterliegt Rechtsnormen (und sowas wie Prism ist in der Form im deutschen Rechtssystem nicht konstruierbar). Es gibt also durchaus Ansätze, diese Schnüffelei auch mit Hilfe von Gesetzen einzudämmen oder doch zumindest mit einem extrem hohem Preis zu versehen. Von daher ist es sogar ganz entscheidend, die rechtliche Situation entsprechend auszugestalten, ja unerlässlich.

Ob nun ausgerechnet die Datenschutzverordnung der sinnvollste Weg ist sei einmal völlig dahin gestellt (ist es ganz sicher nicht). Das alles ist natürlich wenig wert, wenn es gar keine Sanktionen gibt, sondern einfach akzeptiert wird, dass Geheimdienste so sind wie sie sind (und das tut er ja in seinem Text irgendwie). Diese Akzeptanz ist aber schon längst nicht mehr vorhanden, und es ist nur eine Frage der Zeit, bis sich dieser gesellschaftliche Konsens darüber in konkreten Maßnahmen äussert - wenn auch vielleicht nicht jetzt und gleich. Es gibt aber mehr als genug Anzeichen, dass sich diese Form der geheimen Aktivitäten nicht mehr ewig aufrecht erhalten lassen.

Aber eine Ansage “die scheren sich sowieso nicht darum” geht meiner Ansicht nach total fehl: Selbstverständlich kann Deutschland oder die EU entsprechende Richtlinien schaffen, die auch eine Wirkmacht entfalten - und soweit ich das einschätze ist man damit auch gut beraten. Denn was ist “Staat” anderes als die Gesamtheit seiner Bürger? Und diese muss er gegen die politischen und wirtschaftlichen Interessen fremder Staaten schützen (sonst brauchen wir keinen Staat und müssen auch nicht mehr weiter diskutieren).

Diese Verordnung ist einer der Bausteine, mit dem Rechte und Pflichten von Bürgern unter bestimmten Bedingungen definiert werden sollen, und ich würde es besser finden, wenn er sich als konstruktiver Bürgerrechtler zeigen und mit ordentlichen Vorschlägen um die Ecke kommen würde statt schräg gegen Regelungen zu argumentieren, die die Bürgerrechte und den Datenschutz stärken sollen.

Und es ist ganz nebenbei auch wenig zielführend, die Journalisten in Mithaftung zu nehmen. Denn genauso wie die meisten Menschen keinerlei Bock auf jede Art von Geheimdiensten haben und mit ihnen nichts zu tun haben wollen, geht es auch den allermeisten Journalisten. Ist es ihnen zu verdenken?



25.03.2013 13:01:00

API der Karlsruher Verkehrsbetriebe

Dieser Beitrag interessiert wahrscheinlich hauptsächlich die Karlsruher Leser…

Die Karlsruher Verkehrsbetriebe (KVV) stellten vor kurzem ihre für Smartphones optimierte Web-App vor, mit der man u.a. live Abfahrtsdaten für  alle Haltestellen bekommen kann.

Aber eigentlich will man ja eine API haben, um selbst mit den Daten zu spielen…

Da das ganze natürlich mit AJAX funktioniert kann man schön mitlauschen, wen man was fragen muss, um selbst an diese Daten zu kommen. Es stellte sich sogar raus, dass mein erster Versuch, nämlich die Kommunikation via Wireshark mitzuschneiden, schon Overkill war, denn es handelt sich um reine GET-Anfragen, der API-Key wird als Parameter übergeben. Steht alles im Quellcode der Seite :)

Ich hab mich dann gleich mal drangemacht, die API ein bisschen zu dokumentieren und Python-Bindings zu schreiben. Gibt’s beides auf meinem Github.

Wenn jemand Bindings für andere Sprachen oder coole Statistik-Tools baut, darf er mir die gerne verlinken :)


Wenger Online#Blog

23.03.2013 18:33:42

Reise nach Anshan, Liaoning, China

Ich war eine Woche geschäftlich in Anshan in der Provinz Liaoning in China. Anshan ist für chinesische Verhältnisse eine kleine Stadt mit *nur* etwas mehr als 3 Millionen Einwohnern. Der nächste international erreichbare Flughafen ist in Shenyang von wo aus es noch etwas mehr als eine Stunde mit dem Auto bis Anshan ist.

Für eine Reise nach China benötigt man ein Visum welches man nicht zu knapp vor der Reise besorgen sollte, die eigentliche Einreise geht dann recht unspektakulär über die Runde, man füllt noch im Flugzeug einen Einreisezettel mit der Hoteladresse aus und wird nach einem kurzen Blick in den Ausweis durch den Zoll gewunken.

Als ich in Anshan angekommen war, fehlten mir und noch drei weiteren Reisenden aus Deutschland das Gepäck. Trotz der sehr hilfsbereiten Flughafenmitarbeiter war es nicht gerade einfach die notwendigen Anträge zur Gepäcksuche auszufüllen, da niemand im ganzen Flughafen mehr als 2 Worte englisch sprechen konnte. Im laufe des Abends wurde das Gepäck irgendwo wiedergefunden und am darauffolgenden Tag direkt in das Hotel geliefert.

Ich übernachtete, wie schon bei früheren Besuchen, im Wu Huan Hotel. Die Eingangshalle strotzt China typisch nur so von Marmor, Gold und Glitzer. Der Rest vom Hotel ist im gleichen Stil gebaut, doch vielen Ecken sieht man deutlich an das seit dem Bau wohl noch nie etwas renoviert wurde.

Ganz oben im 27ten Stock gibt es morgens immer das Frühstück und wenn man Glück hat die aufgehende Sonne über der Stadt. Leider ist es schwierig schöne Bilder von hier oben zu machen, da die Fenster wohl länger nicht mehr geputzt wurden.

Trotz der ganzen Arbeit war es mir möglich an einem Tag die größte Jade Buddha Statue der Welt zu besuchen. Der Tempel liegt direkt am Rande der Stadt neben einem riesigen Park.
Blick vom Hotelzimmer DSCF1042 DSCF1046 DSCF1047 DSCF1048 DSCF1057 DSCF1058 DSCF1063


Wenger Online#Blog

15.03.2013 17:00:46

CNC Sticken II


Trauriger Roboter für ein T-Shirt. Vorlage, von Hand reduziert auf wenige Farben und komplizierte Details vereinfacht. Beim ersten Sticken habe ich vergessen zusätzlich dieses Stickfließ unterzulegen und es hat mir ganz viele Löcher in den Stoff gestickt. Leider war das T-Shirt dann nicht mehr zu retten, der zweite Versuch hat dann schon besser geklappt.

Sad Robot - Vorlage SAM_1679 SAM_1681 SAM_1684 SAM_1685 SAM_1686
mehr... v4

19.02.2013 20:11:00

There is no Cyberwar

Recently, there has been widespread hysteria about the Chinese government, like the governments of the United States of America and Israel and Russia before it, possibly endorsing or supporting people breaking into other peoples computer systems. In the light of the panic being spread by people for whom a general state of fear about foreign people breaking into your computers might be advantageous, it is important to remember one thing:

There is no Cyberwar. Cyberwar is not a thing that is happening anywhere or at any time, nor is it a thing that has ever happened. It is not a thing that is likely to happen in the near future.

Lets break the word “Cyberwar” down into parts. It is made from the word “Cyber”, a prefix used by people who are not competent with computers to mean “Computer things we do not understand”, and “War”, which is generally understood to mean “violent conflict between nations”, or at least “violent, armed conflict”. The kind of conflict where destruction is widespread and people die.

You might have noticed that we haven’t really seen anyone dying from supposed “Cyberwarfare” - at best, there has been economic damage from IP violations, and some breakage of Iranian centrifuges - arguably the most war-like “act of cyberwarfare” to date, and funnily enough perpetrated by the people who are now crying the loudest about it.

That there is no cyberwar does not, by any means, mean that there is no computer crime. There is stealing of industrial secrets, there is mass spamming and scamming, there is all around virus writing and breaking into computer systems by criminal organizations.

Which brings us to the actual, important point: Computer crime is a real, existing, hard to solve problem. Which is exactly why the panic about “Cyberwar” is so harmful - it distracts from the problems we actually have, in lieu of problems that are for the most part made up or actually created by the measures that are supposedly taken to prevent them.

There is no Cyberwar, but if a general and a bunch of politicians on a power trip create a “Cyberwarfare Division”, there suddenly is a whole lot more people writing malware and doing things that destabilize the internet and hurt the network as well as society as a whole. There suddenly is pressure on security professionals to let some malware slide and to build backdoors into their systems, which invariably get abused or introduce new security vulnerabilities. There suddenly are people selling “security consulting” to scared companies, making sure they are protected against a threat that for the most part just doesn’t exist while leaving their systems open to the more everyday, less sexy security problems that cannot be solved by applying quickfixes at 90USD/hr.

It is 2013, computer security is not a thing that is solved or can be solved easily, and the “Cyberwar” hysteria is making it worse. So please: Stop. Stop panicing about Cyberwar. There is no Cyberwar, and the panic about Cyberwar is harmful and in the way of making actual progress towards getting more in control of problems we actually have.


Wenger Online#Blog

03.02.2013 21:32:18


Zu Weihnachten habe ich mir eine Stickmaschine geschenkt. Eine Brother Innovis 900. Mit einem XY-Tischchen kann diese bis zu 10x10cm, mit einem Trick auch bis zu 10x20cm, große Bereiche besticken. Über einen USB Anschluß auf der Seite kann man eigene Bilder in die Maschine laden.

Der Geburtstagswunsch unseres Sohnes war nun der Anlaß diese Funktion endlich mal genauer unter die Lupe zu nehmen.

Davor kommt aber erst der beschwerliche Weg das gewünschte Bild ins passende Format zu bringen. Da wir beim Sticken nicht 300 mal die Fadenfarbe wechseln wollen ist es wichtig sich auf möglichst wenige Farben zu beschränken. Die meisten Bilder, auch wenn sie auf den ersten Blick so aussehen als ob sie nur aus wenigen Farben bestehen, haben an den Übergängen ganz viele zwischen Farben.

Für dieses Bild (weil es Comicartige schwarze Ränder um jeden Farbbereich hat) war es die beste Methode das Bild zuerst in Scharz-Weiss zu wandeln und dann die Flächen wieder mit dem Floodfill werkzeug zu füllen.

Normale Bilder und Zeichnungen sind als sogenannte Bitmaps gespeichert. Das heisst für jeden Bildpunkt ist gespeichert welche Farbe er hat, aber es gibt keine Information darüber welche Bildpunkte zum Beispiel eine Linie oder Fläche bilden. Damit ein Bild gestickt werden kann muss diese Information zuerst wieder gewonnen werden, das nennt man vektorisieren. Die meisten Stickprogramme haben dazu eine entsprechende Funktion, hier können dann noch Details eingestellt werden. Zum Beispiel wie genau die Vektoren sich an kleine Zipfel annähern sollen und welche Farben gestickt werden sollen.

Da das Motiv auf einen dunklen Stoff gestickt werden soll, habe ich die äußeren schwarzen Ränder teilweise entfernt, besonders zwischen den Haarsträhnen. Bei einem Test war der schwarze Rand da viel zu dominant. An vielen Stellen können gleichfarbige Flächen allein durch eine Änderung der Stickrichtung sichtbar gemacht werden.

Das Resultat sieht ganz gut gelungen aus, nur die gefüllten Flächen sind leider etwas zu klein geworden, so daß zwischen Umrandung und Rand etwas der unbestickte Stoff zu sehen ist. Das kommt daher das der Orginalstoff weicher ist als der den ich für die Tests verwendet habe. In der Sticksoftware gäbe dafür einen Korrektionsparamater, der die Stiche dann ein paar Prozente größer macht.


Wenger Online#Blog

03.02.2013 20:26:25


unsere Kleinen brauchten neue Mützen für Schnee, gewünscht war was “Drachiges”. Durch den verlängerten Halsteil bleibt es auch bei eisigem Wind schön warm an den Ohren. Wenn gewünsch kann ich gerne ein Schnittmuster hochladen. Passende Handschuhe mit Drachenzacken gabs auch noch dazu.

Mütze-Gelb Mütze-Blau

mgr's weblog

13.12.2012 01:57:04

Alex Wenger, Max-Gerd Retzlaff:

Zum dritten Mal in Folge nehmen Alex Wenger und ich an der Weihnachtsbaumausstellung der Staatlichen Hochschule für Gestaltung Karlsruhe teil:

The Invisible Tree

— shy but photogenic —

Please take a picture!

Alex Wenger & Max-Gerd Retzlaff

The Invisible Tree; click for a larger version (204 kB).


Ein unscheinbarer kleiner Kasten. Miit dem bloßen Auge ist nichts zu sehen. Erst im Blick durch eine Kamera (oder auch ein Handy) erscheint auf dem schwarzem Karton ein lila glimmender Baum.

Gemeinsame, frühere Projekte: »uoısuǝɯıp ɹǝɥʇo«, Tannenbaum braucht Zuwendung, LED Cube Modeller, Paraflows edition, and Hacking OpenGL (in Lisp), LED Cube Modeller, 22C3 Edition, LED-Cube (Entropia-Wiki), 3d Baby Cube (Weblog von Alex).

Read the whole article.



05.12.2012 00:12:39

Probing PHP with Systemtap on Linux

DTrace is a dynamic tracing tool build by Sun Microsystems and is available for Solaris, MacOS and FreeBSD. It features a tracing language which can be used to probe certain “probing” points in kernel or userland. This can be very useful to gather statistics, etc. Linux comes with a separate solution called systemtap. It also features a tracing language and can probe both userland and kernel space. A few Linux distributions such as Fedora enable systemtap in their default kernel.

PHP introduced DTrace support with PHP 5.3, enabling probing points in the PHP executable that can be used to simplify probing of PHP applications without having to the PHP implementation details. We enabled probes on function calls, file compilation, exceptions and errors. But this has always been limited to the operating systems that support DTrace. With the popularity of DTrace, Systemap programmers decided to add a DTrace compatibility layer that allows to use DTrace probes as Systemtap probing points as well.

With my recent commit to the PHP 5.5 branch, we allow DTrace probes to be build on Linux, so people can use Systemtap to probe those userland probes.

To compile PHP with userland probes you need to obtain the PHP 5.5 from git:

$ git clone git:// php-src
$ cd php-src
$ git checkout PHP-5.5
Now build PHP with DTrace support. First we have to rebuild configure as we build directly from the repository. Make sure your Linux distribution comes with systemtap and uprobes support.

$ ./buildconf --force
$ ./configure --disable-all --enable-dtrace
$ make
After being done with building we can see if we found any probes:

$ stap -l 'process.provider("php").mark("*")' -c 'sapi/cli/php -i'
Let’s build us a short Systemtap script that counts the function calls of a specific function. we use the function-return and function-entry probes for that:

$ cat request.stp
global callcount;
probe process.provider("php").mark("function-entry") {
    callcount[user_string($arg1)] += 1;
probe end {
    printf("count : function\n");
    foreach (name in callcount) {
        printf("%5d : %s\n", callcount[name], name);
$ sudo stap -c 'sapi/cli/php test.php' request.stp
count : function
  100 : foo
  101 : bar

So that’s all. You can use systemtap now to probe your PHP. Hope you come up with some useful scripts. Share them!

flattr this!


Wenger Online#Blog

04.11.2012 17:26:26

Ferien auf Pianta Monda

Nachdem wir schon etwas länger die Novita (die Vereinszeitschrift von Pianta Monda) mitlesen, haben wir es in den Herbstferien endlich geschafft einmal wieder ins Tessin zu fahren. Die Hinfahrt verlief ohne größere Staus und so sind wir am späten Nachmittag in Menzonio angekommen. Hier mussten wir all unser Gepäck auf die Schultern nehmen und erstmal einen ziemlich steilen Berg hinaufsteigen. Es gieng mindestens 15min. sehr steil Bergauf und wir waren uns nie ganz sicher ob wir uns auch auf dem richtigen Weg befanden, doch dann war Pianta Monda in Sicht. Ulrico hieß uns Willkommen und Peter zeigte uns unsere Behausung. Wir waren gerade die einzigen Gäste und so hatten wir das ganze Gästehaus für uns aleine.

P1040141 P1040139 P1040143 Sonnenaufgang panorama P1040132-P1040134 panorama P1040266-P1040276 panorama P1040293-P1040298


02.10.2012 01:59:17

Bookmarks Revisited Part II: Daily Bookmarking

It’s been a long time since I’ve written part I of the bookmarks revisited series. In the last two years, bookmarks changed a lot. They became part Mercurial’s core functionality and a lot of of tools became bookmark aware.

The current state of bookmarks

As of Mercurial 1.8 bookmarks are part of the Mercurials core. You don’t have to activate the extension anymore. Bookmarks are supported by every major Mercurial hosting platform. Commands like hg summary or hd id will display bookmark information. In addition, the push and pull mechanism changed. I will go into details about his Part III of the series.It’s safe to say, due to it’s exposure, bookmarks became much more mature of the years. It’s time to take a look at how to use them cheap water slides.

Bookmark semantics

Bookmarks are pointers to commits. Think of it as a name for a specific commit. Unlike branches in Mercurial, bookmarks are not recorded in the changeset. They don’t have a history. If you delete them, they will be gone forever.Bookmarks were initially designed for short living branches. I use them as such. It’s indeed possible to use them in different contexts, but I don’t do that. Please be aware, although they were initially intended to be similar to git branches, they often aren’t. They are not branches, they are bookmarks and they should be used like you would use a bookmark in a book. If you advance to the next site, you move the bookmark (or it gets moved).

A bookmark can be active. Only one bookmark can be active at any time, but it’s okay that no bookmark is active. If you have an active bookmark and you commit a new changeset, the bookmark will be moved to the commit. To set a bookmark active you have to update to the bookmark with hg update <name>. To unset, just update to the current revision with hg update ..

A bookmark can have a diverged markers. Bookmarks that are diverged will have a @NAME suffix. For example test@default. Diverged bookmarks are created during push and pull and will be described in Part III.

A start

I use bookmarks to keep track of short living heads that I use for feature development. One bookmark keeps track of the upstream repository, they rest are my personal markers. Let’s start with creating the initial marker that keeps track of upstream. In this example, I show how I work on Mercurial.First, we are going to clone the Mercurial repository.

$ hg clone hg
destination directory: hg
requesting all changes
adding changesets
adding manifests
adding file changes
added 17684 changesets with 34643 changes to 2168 files
updating to branch default
996 files updated, 0 files merged, 0 files removed, 0 files unresolved

The repository is setup to the current tip of the repository. We mark it with the ‘upstream’ bookmark. The star in front of the bookmark shows that it is marked as the current bookmark. Most Mercurial commands try to not be very verbose and only write necessary information to your terminal. It’s okay that creating a new bookmark doesn’t generate any output.

$ hg bookmark upstream
$ hg bookmark
 * upstream                  17683:6d7db5794e8c

To start out with a new feature, we have to make sure to not accidentally advance the master bookmark if we start to commit now. Either deactivate the current bookmark using hg update . or create the new bookmark for the feature we want to use right away. I am going to work on a feature to warn people if they create a bookmark with an ambiguous name. Therefore I call the branch topic/bm-warn-ambiguous.

$ hg bookmark topic/bm-warn-ambiguous
$ hg bookmark
 * topic/bm-warn-ambiguous   17683:6d7db5794e8c
   upstream                  17683:6d7db5794e8c

We can now go ahead and write our feature. I start out with the initial bits and later use the MQ extension to modify the changeset, so my change evolves slowly. After hacking a few minutes on the initial code, we can go ahead and commit it. As topic/bm-warn-ambiguous is marked as the current bookmark it will be moved automatically during commit.

$ vim mercurial/
$ hg commit -m'bookmarks: warn if bookmark name is ambiguous'
$ hg bookmark
 * topic/bm-warn-ambiguous   17684:d018b3fda542
   upstream                  17683:6d7db5794e8c

Using existing bookmarks

We can use the existing bookmarks and go back to our initial state what we pulled from the main repository. Just use bookmark the same way you use revisions. You can use it together with any command that requires a revision argument.

$ hg update upstream
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg bookmark
   topic/bm-warn-ambiguous   17684:d018b3fda542
 * upstream                  17683:6d7db5794e8c
$ hg log -r upstream
changeset:   17683:6d7db5794e8c
bookmark:    upstream
parent:      17681:a41fd730f230
parent:      17682:829919ef894a
user:        Matt Mackall 
date:        Sat Sep 29 12:28:52 2012 -0500
summary:     merge with stable

I am not too happy with the name of the bookmark. topic/ seems a way to long prefix. Let’s shorten it and rename the existing bookmark. The hg bookmark -m oldname newname can be used to rename existing bookmarks (-m as in move).

$ hg bookmark -m  topic/bm-warn-ambiguous t/warn-ambiguous
$ hg bookmark
   t/warn-ambiguous          17684:d018b3fda542
 * upstream                  17683:6d7db5794e8c

Bookmarks can be deleted with hg bookmark -d name

$ hg bookmark -d t/warn-ambiguous
$ hg bookmark
 * upstream                  17683:6d7db5794e8c
$ hg bookmark -r 17684 t/warn-ambiguous
$ hg bookmark
   t/warn-ambiguous          17684:d018b3fda542
 * upstream                  17683:6d7db5794e8c


Suppose we are done with our nice little feature and want to move it into our main development branch which is tracked by upstream. There are a few behaviors that you might be unfamiliar with. Just go ahead and use hg merge bookmark. Obviously, the bookmark cannot be a descendant of the bookmark to merge. Unlike git there is no way to force the merge. Also Mercurial won’t update the bookmark. It will just abort and stay were you are. (For git users: This means, Mercurial doesn’t have the notion of a fast-forward for bookmarks). I am not super happy with this behavior, but it will stay for the moment.If you have diverged heads and your merge is successful, you can commit the merge. The current bookmark is updated to the new merge commit. The bookmark that was merged stays and doesn’t move. Mercurial always sticks to the rule that only the current bookmark moves.

$ hg bookmark
  t/warn-ambiguous          17684:d018b3fda542
* upstream                  17685:861d6aeee6aa
$ hg merge t/warn-ambiguous
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m'Merge'
$ hg bookmark
   t/warn-ambiguous          17684:d018b3fda542
 * upstream                  17686:c6b62c2e15fc

Bookmarks and revsets

Revset is a query language for revisions and files, build into mercurial. hg help revsets will explain the syntax. It’s a very powerful language. If you have the time, learn it. It makes your Mercurial experience that much better and will probably make you complain about endless lines of command line options in other VCS.The revset language has support for bookmarks. You can use the bookmarks() function to get a set of all revisions that are bookmarked. Use this in combination with the log command to get a detailed list of all bookmarked commits:

$ hg log -r 'bookmark()'
changeset:   17683:6d7db5794e8c
bookmark:    upstream
parent:      17681:a41fd730f230
parent:      17682:829919ef894a
user:        Matt Mackall 
date:        Sat Sep 29 12:28:52 2012 -0500
summary:     merge with stable

changeset:   17684:d018b3fda542
bookmark:    t/warn-ambiguous
tag:         tip
user:        David Soria Parra 
date:        Tue Oct 02 03:07:05 2012 +0200
summary:     bookmarks: warn if bookmake name is ambiguous

More complex queries can be done. If you work with bookmarks on different Mercurial branches you can get a list of all bookmarks of a certain branch with hg log -r ‘branch(stable) and bookmark()’. Have fun playing around. Rewards and cat gifs for posting awesome revset queries the comments.

MQ and bookmarks

So far we have dealt with basic commands. We committed a changeset, we edited a few bookmarks.Bookmarks were designed to work on short living heads. The usual way to work with slowly evolving, unfinished changesets in Mercurial is MQ (also look at Mercurial phases, a new mechanism to help you with published and drafted commits).

MQ is a stack of queues on top of a Mercurial repository. It’s tightly integrated into Mercurial and uses commits and strip commands to push and pop changes. In my example, I have to continue working on my warn-ambiguous feature. We start by importing the topmost commit into MQ to change the commit. We then edit a new file and use hg qrefresh to update the commit with the new changes.

WARNING: qrefresh will throw away your current bookmark before Mercurial 2.4 (which is not yet released).

$ hg update t/warn-ambiguous
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg qimport -r tip
$ hg bookmark
 * t/warn-ambiguous          17684:d018b3fda542
   upstream                  17683:6d7db5794e8c
$ vim mercurial/bookmarks
$ hg qrefresh
$ hg bookmark
 * t/warn-ambiguous          17684:a5bbed225a3f
   upstream                  17683:6d7db5794e8c

If we want to create a new commit, we use the command hg qnew name. It will create a new patch on top of the patch stack. We use it to draft the tests for our new commit. If we want to go back to the previous commit that is still on the stack, we use hg qpop to “pop” the topmost patch (the one with the tests) from the stack. If we want to go back we use hg qpush.

Note that the bookmarks will move back if you qpop and forward if you qpush, following your current state on the stack. Instead of hg commit we have to use hg qrefresh (only on of mq’s oddities).

$ hg qnew tests
$ vim tests/test-bookmarks.t
$ hg qrefresh

So most parts of MQ are aware of bookmarks. If finalize the MQ patches with hg qfinish -a our bookmark will just stay. The main issue with that workflow is the lack of support in qrefresh, but this is hopefully going to change with the next release. With that, bookmarks are going to be super useful for developing short living branches.

Naming conventions and alias

It is useful to have some naming conventions for bookmarks. I personally use the prefix t/<name> to denote short living topic branches. I use release/<version> for release branches. Bookmarks without any prefix are used for upstream bookmarks and bookmarks that were automatically pulled from the remote repository.If you use bookmarks daily, you might want to use setup an alias in your global .hgrc. Just add the entry

bm = bookmark

to your ~/.hgrc and test if it works with hg bm.


Bookmarks changed a lot of the last years and most of Mercurials code base is bookmark aware. With the change to qrefresh, it’s going to be good enough for my workflows. Whats your bookmark story? Also Steve Losh wrote an excellent article about the different ways of branching in Mercurial (it has pictures, wwoooo). He also wrote an excellent article about MQ. He wrote a lot of interesting stuff at all, visit his page.

ps: without flattrs, comments or anything like that, there is probably not going to be a part III

flattr this!



01.10.2012 20:04:13

I should…

blog more. Open topics: DTrace Part II, Mercurial Bookmarks Part II.

flattr this!