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:







Wenger Online#Blog

20.12.2014 10:02:56

Backe, backe Kuchen


Die Kinder waren fleißig und und getreu nach dem Lied “In der Weihnachtsbäckerei gibt es manche Leckerei, Zwischen Mehl und Milch macht so mancher Knilch eine riesengroße Kleckerei.” sah es nachher in der Küche aus…


Wenger Online#Blog

30.11.2014 20:48:25


Super Wetter heute auf der Hornisgrinde, wenig tiefer versinkt alles in den Wolken… 2014-11-30 15.59.19

2014-11-30 13.08.17


Wenger Online#Blog

15.11.2014 10:10:27

Chili Ernte

Nach dem es nun draußen langsam zu kalt für unsere Chilis geworden ist mussten diese nun ins warme Wohnzimmer umziehen. Hier reifen sie jetzt besonders schnell und man kommt mit dem verzehen garnicht mehr hinterher. Ein paar muss ich wohl trocknen oder einlegen.



nomeata’s mind shares

01.11.2014 14:52:28

Can one recommend Debian stable to Desktop users?

My significant other is running Debian stable on her laptop, and it has worked fine for quite a while. But since a week or two, she could not access her University IMAP account via Evolution. Obviously quite a showstopper!

Today I had a closer look, and my suspicion was that the University changed their SSL configuration due to the recent POODLE attack and that Evolution was incompatible with that. After some more searching, I found that Ubuntu had applied a patch, originally from Fedora, two weeks ago. For Debian, there is a bug report but no sign of action.

So I fetched the sources, applied the patch, built the package, installed it and things were working again. Yay for that! But this is obviously not the best way to handle such issues.

I know that Debian is volunteer driven and we often lack the manpower for certain things, so I don’t want to rant about this particular issue. I also continue to be a happy user of Debian unstable on my laptop, and Debian stable on my servers. But I seriously wonder: Can I really recommend Debian stable to users, for their laptops and desktops? If not, what are the alternatives? Ubuntu obviously comes to mind, having some full-time staff for such issues... But that would be giving up on promoting Debian as the universal operating system.

Update (2010-11-3): Laney just uploaded a fixed package. Thanks!


nomeata’s mind shares

14.10.2014 20:26:13

Switching to systemd-networkd

Ever since I read about systemd-networkd being in the making I was looking forward to try it out. I kept watching for the package to appear in Debian, or at least ITP bugs. A few days ago, by accident, I noticed that I already have systemd-networkd on my machine: It is simply shipped with the systemd package!

My previous setup was a combination of ifplugd to detect when I plug or unplug the ethernet cable with a plain DHCP entry in /etc/network/interface. A while ago I was using guessnet to do a static setup depending on where I am, but I don’t need this flexibility any more, so the very simple approach with systemd-networkd is just fine with me. So after stopping ifplugd and

$ cat > /etc/systemd/network/ <<__END__
$ systemctl enable systemd-networkd
$ systemctl start systemd-networkd

I was ready to go. Indeed, systemd-networkd, probably due to the integrated dhcp client, felt quite a bit faster than the old setup. And what’s more important (and my main motivation for the switch): It did the right thing when I put it to sleep in my office, unplug it there, go home, plug it in and wake it up. ifplugd failed to detect this change and I often had to manually run ifdown eth0 && ifup eth0; this now works.

But then I was bitten by what I guess some people call the viral nature of systemd: systemd-networkd would not update /etc/resolve.conf, but rather relies on systemd-resolved. And that requires me to change /etc/resolve.conf to be a symlink to /run/systemd/resolve/resolv.conf. But of course I also use my wireless adapter, which, at that point, was still managed using ifupdown, which would use dhclient which updates /etc/resolve.conf directly.

So I investigated if I can use systemd-networkd also for my wireless account. I am not using NetworkManager or the like, but rather keep wpa_supplicant running in roaming mode, controlled from ifupdown (not sure how that exactly works and what controls what, but it worked). I found out that this setup works just fine with systemd-networkd: I start wpa_supplicant with this service file (which I found in the wpasupplicant repo, but not yet in the Debian package):

Description=WPA supplicant daemon (interface-specific version)

ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I


Then wpa_supplicant will get the interface up and down as it goes, while systemd-networkd, equipped with


does the rest.

So suddenly I have a system without /etc/init.d/networking and without ifup. Feels a bit strange, but also makes sense. I still need to migrate how I manage my UMTS modem device to that model.

The only thing that I’m missing so far is a way to trigger actions when the network configuration has changes, like I could with /etc/network/if-up.d/ etc. I want to run things like killall -ALRM tincd and exim -qf. If you know how to do that, please tell me, or answer over at Stack Exchange.


nomeata’s mind shares

07.10.2014 15:40:54

New website layout

After 10 years I finally got around to re-decorating my website. One reason was ICFP, where just too many people told me that I don’t look like on my old website any more (which is very true). Another reason was that I was visting my brother, who is very good at web design (check out his portfolio), who could help me a bit.

I wanted something practical and maybe a bit staid, so I drew inspiration from typical Latex typography, and also from Edward Z. Yang’s blog: A serif font (Utopia) for the main body, justified and hyphenated text. Large section headers in a knobbly bold sans-serif font (Latin Modern Sans, which reasonably resembles Computer Modern). To intensify that impression, I put the main text on a white box that lies – like a paper – on the background. As a special gimmic the per-page navigation (or, in the case of the blog, the list of categories) is marked up like a figure in a paper.

Of course this would be very dire without a suitable background. I really like the procedural art by Jared Tarbell, espcially substrate and interAggregate. Both have been turned into screensavers shipped with xscreensaver, so I hacked the substrate code to generate a seamless tile and took a screenshot of the result. I could not make up my mind yet how dense it has to be to look good, so I for every page I randomly pick one of six variants randomly for now.

I simplified the navigation a bit. The old News section has been removed recently already. The Links section is gone – I guess link lists on homepages are so 90s. The section Contact and About me are merged and awaiting some cleanup. The link to the satire news Heisse News is demoted to a mention on the Contents section.

This hopefully helps to make the site navigatable on mobile devices (the old homepage was unusable). CSS media queries adjust the layout slightly on narrow screens, and separately for print devices.

Being the nostaltic I am, I still keep the old design, as well as the two designs before that, around and commented their history.


nomeata’s mind shares

07.10.2014 13:55:05

ghc-heap-view for GHC 7.8

Since the last release of ghc-heap-view, which was compatible with GHC-7.6, I got 8 requests for a GHC-7.8 compatible version. I started working on it in January, but got stuck and then kept putting it off.

Today, I got the ninths request, and I did not want to wait for the tenth, so I finally finished the work and you can use the new ghc-heap-view-0.5.2 with GHC-7.8.

I used this chance to migrate its source repository from Darcs to git (mirrored on GitHub), so maybe this means that when 7.10 comes out, the requests to update it come with working patches :-). I also added a small test script so that travis can check it: ghc-heap-view

I did not test it very thoroughly yet. In particular, I did not test whether ghc-vis works as expected.

I still think that the low-level interface that ghc-heap-view creates using custom Cmm code should move into GHC itself, so that it does not break that easily, but I still did not get around to propose a patch for that.


nomeata’s mind shares

02.10.2014 13:47:49

11 ways to write your last Haskell program

At my university, we recently held an exam that covered a bit of Haskell, and a simple warm-up question at the beginning asked the students to implement last :: [a] -> a. We did not demand a specific behaviour for last [].

This is a survey of various solutions, only covering those that are actually correct. I elided some variation in syntax (e.g. guards vs. if-then-else).

Most wrote the naive and straightforward code:

last [x] = x
last (x:xs) = last xs

Then quite a few seemed to be uncomfortable with pattern-matching and used conditional expressions. There was some variety in finding out whether a list is empty:

last (x:xs)
  | null xs == True = x
  | otherwise       = last xs

last (x:xs)
  | length (x:xs) == 1 = x
  | otherwise          = last xs

last (x:xs)
  | length xs == 0 = x
  | otherwise      = last xs

last xs
  | lenght xs > 1 = last (tail xs)
  | otherwise     = head xs

last xs
  | lenght xs == 1 = head xs
  | otherwise      = last (tail xs)

last (x:xs)
  | xs == []  = x
  | otherwise = last xs

The last one is not really correct, as it has the stricter type Eq a => [a] -> a. Also we did not expect our students to avoid the quadratic runtime caused by using length in every step.

The next class of answers used length to pick out the right elemet, either using (!!) directly, or simulating it with head and drop:

last xs = xs !! (length xs - 1)

last xs = head (drop (length xs - 1) xs)

There were two submissions that spelled out an explicit left folding recursion:

last (x:xs) = lastHelper x xs
    lastHelper z [] = z
    lastHelper z (y:ys) = lastHelper y ys

And finally there are a few code-golfers that just plugged together some other functions:

last x = head (reverse x)

Quite a lot of ways to write last!


nomeata’s mind shares

21.09.2014 20:11:07

Using my Kobo eBook reader as an external eInk monitor

I have an office with a nice large window, but more often than not I have to close the shades to be able to see something on my screen. Even worse: There were so many nice and sunny days where I would have loved to take my laptop outside and work there, but it (a Thinkpad T430s) is simply not usable in bright sun. I have seen those nice eInk based eBook readers, who are clearer the brighter they are. That’s what I want for my laptop, and I am willing to sacrifice color and a bit of usability due to latency for being able to work in the bright daylight!

So while I was in Portland for DebConf14 (where I guess I felt a bit more like tinkering than otherwise) I bought a Kobo Aura HD. I chose this device because it has a resolution similar to my laptop (1440×1080) and I have seen reports from people running their own software on it, including completely separate systems such as Debian or Android.

This week, I was able to play around with it. It was indeed simple to tinker with: You can simply copy a tarball to it which is then extracted over the root file system. There are plenty of instructions online, but I found it easier to take them as inspiration and do it my way – with basic Linux knowledge that’s possible. This way, I extended the system boot script with a hook to a file on the internal SD card, and this file then runs the telnetd daemon that comes with the device’s busybox installation. Then I just have to make the device go online and telnet onto it. From there it is a pretty normal Linux system, albeit without an X server, using the framebuffer directly.

I even found an existing project providing a VNC client implementation for this and other devices, and pretty soon I could see my laptop screen on the Kobo. Black and white worked fine, but colors and greyscales, including all anti-aliased fonts, were quite broken. After some analysis I concluded that it was confusing the bit pattern of the pixels. Luckily kvncclient shares that code with koreader, which worked fine on my device, so I could copy some files and settings from there et voilá: I now have an eInk monitor for my laptop. As a matter of fact, I am writing this text with my Kobo sitting on top of the folded-back laptop screen!

I did some minor adjustments to my laptop:

All this is still very manual (going online with the kobo, finding its IP address, logging in via telnet, killing the Kobo's normal main program, starting x11vnc, finding my ip address, starting the vnc client, doing the adjustments mentioned above), so I need to automate it a bit. Unfortunately, there is no canonical way to extend the Kobo by your own application: The Kobo developers made their device quite open, but stopped short from actually encouraging extensions, so people have created many weird ways to start programs on the Kobo – dedicated start menus, background programs observing when the regular Kobo app opens a specific file, complete replacements for the system. I am considering to simply run an SSH server on the device and drive the whole process from the laptop. I’ll keep you up-to-date.

A dream for the future would be to turn the kobo into a USB monitor and simply connect it to any computer, where it then shows up as a new external monitor. I wonder if there is a standard for USB monitors, and if it is simple enough (but I doubt it).

A word about the kobo development scene: It seems to be quite active and healthy, and a number of interesting applications are provided for it. But unfortunately it all happens on a web forum, and they use it not only for discussion, but also as a wiki, a release page, a bug tracker, a feature request list and as a support line – often on one single thread with dozens of posts. This makes it quite hard to find relevant information and decide whether it is still up-to-date. Unfortunately, you cannot really do without it. The PDF viewer that comes with the kobo is barely okish (e.g. no crop functionality), so installing, say, koreader is a must if you read more PDFs than actual ebooks. And then you have to deal with the how-to-start-it problem.

That reminds me: I need to find a decent RSS reader for the kobo, or possibly a good RSS-to-epub converter that I can run automatically. Any suggestions?

PS and related to this project: Thanks to Kathey!


nomeata’s mind shares

08.09.2014 23:04:54

Die ersten hausgemachten Tip-Toi-Bücher

Das letzte halbe Jahr war es sehr ruhig um unser Tip-Toi-Projekt. Das erste Ziel war damals erreicht: Ich konnte existierende Bücher mit neuen Texten versehen, und meinem Neffen eine Freude machen. Und so passierte erstmal lange nichts.

Bis sich vor ein paar Tagen plötzlich ein gewisser „Pronwan“ meldete und erzählte, dass er erfolgreich komplette Tip-Toi-Bücher (naja, Seiten) für seine Kinder gestaltet, gedruckt und mit eigenen Audio-Dateien versehen hat. Er hat das ganze in einem Video-Tutorial beschrieben. Fazit ist: Selber Drucken geht, wenn man die Bilder etwas blasser macht (schwarze Punkte auf schwarzem Grund geht schlecht) und gegebenenfalls erst das Bild mit einem Farb-Laserdrucker druckt und dann die die Punkt-Matrix mit einem Schwarz-Weiß-Drucker drüberlegt.

In dem Video kommt auch mein tttool zum Einsatz, das – obwohl eigentlich eher für mich und für Leute, die das GME-Dateiformat besser verstehen wollen, gedacht – dabei ganz gut wegkommt. Aus ist erwähnenswert dass „Pronwan“ Windows verwendet und vermutlich die von mir unter Wine vorkompilierte exe-Datei verwendet – die Platformunabhängigkeit von Haskell zahlt sich aus.

Das ganze ist wohl für einen interessierten Hobbisten wirklich recht gut zu machen. Ich bin gespannt was da noch alles kommt. Vielleicht gibts ja bald eine Webseite wo man hausgemachte Tip-Toi-Bücher sammeln und tauschen kann! Im Microcontroller-Forum gibts stets die neusten Infos.


nomeata’s mind shares

06.09.2014 22:46:22

ICFP 2014

Another on-my-the-journey-back blog post; this time from the Frankfurt Airport Train Station – my flight was delayed (if I knew that I could have watched the remaining Lightning Talks), and so was my train, but despite 5min of running through the Airport just not enough. And now that the free 30 Minutes of Railway Station Internet are used up, I have nothing else to do but blog...

Last week I was attending ICFP 2014 in Gothenburg, followed by the Haskell Symposium and the Haskell Implementors Workshop. The justification to attend was the paper on Safe Coercions (joint work with Richard Eisenberg, Simon Peyton Jones and Stephanie Weirich), although Richard got to hold the talk, and did so quite well. So I got to leisurely attend the talks, while fighting the jet-lag that I brought from Portland.

There were – as expected – quite a few interesting talks. Among them the first keynote, Kathleen Fisher on the need for formal methods in cars and toy-quadcopters and unmanned battle helicopters, which made me conclude that my Isabelle skills might eventually become relevant in practical applications. And did you know that if someone gains access to your car’s electronics, they can make the seat belt pull you back hard?

Stefanie Weirich’s keynote (and the subsequent related talks by Jan Stolarek and Richard Eisenberg) on what a dependently typed Haskell would look like and what we could use it for was mouth-watering. I am a bit worried that Haskell will be become a bit obscure for newcomers and people that simply don’t want to think about types too much, on the other hand it seems that Haskell as we know it will always stay there, just as a subset of the language.

Similarly interesting were refinement types for Haskell (talks by Niki Vazou and by Eric Seidel), in the form of LiquidTypes, something that I have not paid attention to yet. It seems to be a good way for more high assurance in Haskell code.

Finally, the Haskell Implementors Workshop had a truckload of exciting developments in and around Haskell: More on GHCJS, Partial type signatures, interactive type-driven development like we know it from Agda, the new Haskell module system and amazing user-defined error messages – the latter unfortunately only in Helium, at least for now.

But it’s not the case that I only sat and listened. During the Haskell Implementors Workshop I held a talk “Contributing to GHC” with a live demo of me fixing a (tiny) bug in GHC, with the aim of getting more people to hack on GHC (slides, video). The main message here is that it is not that big of deal. And despite me not actually saying much interesting in the talk, I got good feedback afterwards. So if it now actually motivates someone to contribute to GHC, I’m even more happier.

And then there is of course the Hallway Track. I discussed the issues with fusing a left fold (unfortunately, without a great solution). In order to tackle this problem more systematically, John Wiegley and I created the beginning of a “List Fusion Lab”, i.e. a bunch of list benchmark and the possibility to compare various implementations (e.g. with different RULES) and various compilers. With that we can hopefully better assess the effect of a change to the list functions.

PS: The next train is now also delayed, so I’ll likely miss my tram and arrive home even later...

PPS: I really have to update my 10 year old picture on my homepage (or redesign it completely). Quite a few people knew my name, but expected someone with shoulder-long hair...

PPPS: Haskell is really becoming mainstream: I just talked to a randomly chosen person (the boy sitting next to me in the train), and he is a Haskell enthusiast, building a structured editor for Haskell together with his brother. And all that as a 12th-grader...


nomeata’s mind shares

30.08.2014 15:10:58

DebConf 14

I’m writing this blog post on the plane from Portland towards Europe (which I now can!), using the remaining battery live after having watched one of the DebConf talks that I missed. (It was the systemd talk, which was good and interesting, but maybe I should have watched one of the power management talks, as my battery is running down faster than it should be, I believe.)

I mostly enjoyed this year’s DebConf. I must admit that I did not come very prepared: I had neither something urgent to hack on, nor important things to discuss with the other attendees, so in a way I had a slow start. I also felt a bit out of touch with the project, both personally and technically: In previous DebConfs, I had more interest in many different corners of the project, and also came with more naive enthusiasm. After more than 10 years in the project, I see a few things more realistic and also more relaxed, and don’t react on “Wouldn’t it be cool to have crazy idea” very easily any more. And then I mostly focus on Haskell packaging (and related tooling, which sometimes is also relevant and useful to others) these days, which is not very interesting to most others.

But in the end I did get to do some useful hacking, heard a few interesting talks and even got a bit excited: I created a new tool to schedule binNMUs for Haskell packages which is quite generic (configured by just a regular expression), so that it can and will be used by the OCaml team as well, and who knows who else will start using hash-based virtual ABI packages in the future... It runs via a cron job on to produce output for Haskell and for OCaml, based on data pulled via HTTP. If you are a Debian developer and want up-to-date results, log into and run ~nomeata/binNMUs --sql; it then uses the projectb and wanna-build databases directly. Thanks to the ftp team for opening up, by the way!

Unsurprisingly, I also held a talk on Haskell and Debian (slides available). I talked a bit too long and we had too little time for discussion, but in any case not all discussion would have fitted in 45 minutes. The question of which packages from Hackage should be added to Debian and which not is still undecided (which means we carry on packaging what we happen to want in Debian for whatever reason). I guess the better our tooling gets (see the next section), the more easily we can support more and more packages.

I am quite excited by and supportive of Enrico’s agenda to remove boilerplate data from the debian/ directories and relying on autodebianization tools. We have such a tool for Haskell package, cabal-debian, but it is unofficial, i.e. neither created by us nor fully endorsed. I want to change that, so I got in touch with the upstream maintainer and we want to get it into shape for producing perfect Debian packages, if the upstream provided meta data is perfect. I’d like to see the Debian Haskell Group to follows Enrico’s plan to its extreme conclusion, and this way drive innovation in Debian in general. We’ll see how that goes.

Besides all the technical program I enjoyed the obligatory games of Mao and Werewolves. I also got to dance! On Saturday night, I found a small but welcoming Swing-In-The-Park event where I could dance a few steps of Lindy Hop. And on Tuesday night, Vagrant Cascadian took us (well, three of us) to a blues dancing night, which I greatly enjoyed: The style was so improvisation-friendly that despite having missed the introduction and never having danced Blues before I could jump right in. And in contrast to social dances in Germany, where it is often announced that the girls are also invited to ask the boys, but then it is still mostly the boys who have to ask, here I took only half a minute of standing at the side until I got asked to dance. In retrospect I should have skipped the HP reception and went there directly...

I’m not heading home at the moment, but will travel directly to Göteborg to attend ICFP 2014. I hope the (usually worse) west-to-east jet lag will not prevent me from enjoying that as much as I could.


nomeata’s mind shares

23.08.2014 15:54:43

This blog goes static

After a bit more than 9 years, I am replacing Serendipity, which as been hosting my blog, by a self-made static solution. This means that when you are reading this, my server no longer has to execute some rather large body of untyped code to produce the bytes sent to you. Instead, that happens once in a while on my laptop, and they are stored as static files on the server.

I hope to get a little performance boost from this, so that my site can more easily hold up to being mentioned on hackernews. I also do not want to worry about security issues in Serendipity – static files are not hacked.

Of course there are down-sides to having a static blog. The editing is a bit more annoying: I need to use my laptop (previously I could post from anywhere) and I edit text files instead of using a JavaScript-based WYSIWYG editor (but I was slightly annoyed by that as well). But most importantly your readers cannot comment on static pages. There are cloud-based solutions that integrate commenting via JavaScript on your static pages, but I decided to go for something even more low-level: You can comment by writing an e-mail to me, and I’ll put your comment on the page. This has the nice benefit of solving the blog comment spam problem.

The actual implementation of the blog is rather masochistic, as my web page runs on one of these weird obfuscated languages (XSLT). Previously, it contained of XSLT stylesheets producing makefiles calling XSLT sheets. Now it is a bit more-self-contained, with one XSLT stylesheet writing out all the various html and rss files.

I managed to import all my old posts and comments thanks to this script by Michael Hamann (I had played around with this some months ago and just spend what seemed to be an hour to me to find this script again) and a small Haskell script. Old URLs are rewritten (using mod_rewrite) to the new paths, but feed readers might still be confused by this.

This opens the door to a long due re-design of my webpage. But not today...


nomeata’s mind shares

19.07.2014 17:13:06

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:29

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:14

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:42

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:46

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).


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


Wenger Online#Blog

14.04.2014 10:21:39

Mit dem Fahrrad durch das Murgtal

Wir haben das wunderschöne Frühlingswetter für eine Fahrradtour durch das Murgtal genutzt. Mit der S-Bahn ging es zuerst bis nach Raumünzach hoch. Von dort ein paar schweißtreibende Kilometer bis zum Stausee hinauf, wo wir uns bei einem Picknick in der Sonne am Strand stärkten. Immer an der Murg entlang fuhren wir dann das ganze Tal wieder hinunter und begeneten nicht nur Vögeln und Geißen und Eseln. Auch eine Schlange nutze die Frühlingssonne um sich auf der Straße aufzuwärmen.

Schlange im Murgtal




22.03.2014 16:58:07

Short update…

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


flattr this!


Wenger Online#Blog

19.01.2014 10:42:25


Bald müssen die Projektarbeiten für die Schule fertig sein, so wird nicht nur fleißig geschrieben, sondern auch gehämmert und gefeilt.

Sous Vide Controller Sous Vide Controller - Wie soll das alles da reinpassen? Sous Vide Controller Sous Vide Controller

Davids Sous-Vide Controller mit Arduino und 3D gedruckter Frontplatte (Danke an Obelix für das drucken).

Nach einigen Tuning durchläufen, das autotuning Feature der Arduino PID Bibliothek war nicht wirklich in der Lage passende Parameter zu finden, also hat David die Parameter anhand der aufgezeichneten Temperaturverläufe abgeschätzt,ist die Regelung nun schnell und ohne Überschwingen. Mehr Präzision und vorallem Geschwindigkeit würde Sinnvoll nur mit einer kräftigeren Heizung und mit einer Umwälzpumpe funktionieren.

P1040871 Sous Vide Ente mit Orangen

Das Ergenbiss kann sich sehen lassen, Sous-Vide Entenbrust mit karamelisierten Orangen und Rotwein-Butter Soße.

Teslaspule wickeln

Das wickeln der Teslaspule beansprucht ganz schön die Geduld wenn der Draht wirklich schön neben einander liegen soll. Jede Ungenauigkeit kann später zu Überschlägen an dieser Stelle und zum Abbrennen der Spule führen. Die erste Spule zerstörte sich selbst als sie zum trocknen draußen stand und durch den Temperaturunterschied die Wicklungen plötzlich ganz locker wurden und alle kreuz und Quer verrutschten.


Am Ende mussten dann noch die Bücher gebunden werden…



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. :)



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 east Inflatables. 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!


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.



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.Fayetteville

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!



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!