Blog

Solide

Die vielbesungene deutsche Solidität setzt sich auch in der digitalen Welt durch: Während der US-Geheimdienst ein abgerissenes Poster über Nacht wieder an die Wand tackert, nimmt sich die Polizei des Landes NRW mehrere Wochen Zeit, um eine bessere Aufhängung zu entwickeln.

Lernfähig

Zwei Tage nach dem Rücktritt von Christian Wulff hat auch die CDU zähneknirschend eingestanden, dass er schon im Jahr 2010 nicht der beste denkbare Bundespräsident war.

Lachendes Liebfrauenhaus: Das Dreigestirn und die Heinzelmännchen

Einzug des Dreigestirns zu Musik, die Garde marschiert mit ein und bildet am hinteren Bühnenrand einen weiten Halbkreis. Das Dreigestirn positioniert sich in der Mitte der Bühne, wird begrüßt. Der Prinz will anfangen zu sprechen.

Prinz: Leev Lück! Bei uns in Müllem...

Lautes Handyklingeln unterbricht die Musik. Der Prinz tastet sich ab, zieht ein Handy heraus.

Prinz [verlegen zum Publikum]: Entschuldigung... [ins Handy] Ja? Was? Ich kann jetzt nicht hier... wie hoch denn? 37,1? Das ist doch nicht... ja, natürlich. Ich fahre mit ihm ins Krankenhaus. Nachher. Ja, nachher! Mama! Mir ist das Leben meines Kindes nicht... ja. Ja. Ja! Bis gleich! [legt auf, genervt zum Bauern] Wo waren wir?

Bauer [intoniert leise]: Bei uns in Müllem...

Prinz: Genau! Bei uns in...

... und wieder klingelt ein Handy. Diesmal zuckt der Bauer zusammen.

Bauer [entschuldigend lächelnd zum Prinzen]: Entschuldigung... ja? Nein. Das kann doch wohl nicht wahr sein! Können Sie das denn nicht... ja. ja. Und warum rufen Sie nicht meine Frau an? Deren Handy ist aus, verstehe. Schon gut. Kann ich? [beginnt leise in den Hörer zu singen] La le lu, nur der Mann im Mond schaut zu, wenn die kleinen Babies schlafen, drum schlaf auch Du. So. Schlaf gut, mein Schatz. Was? [seufzt] La le lu, vor dem Bett, da steh'n zwei Schuh, und die sind genau so müde, geh'n jetzt zur Ruh'. Ich Dich auch. [legt auf]

Prinz [hat ungeduldig gewartet, setzt wieder an]: Bei uns in ...

Erneutes Handyklingeln. Prinz und Bauer starren die Jungfrau fassungslos an.

Jungfrau [zuckt mit den Schultern]: Entschuldigung... ja? Hör mal, das ist jetzt nicht so günstig... wieso? Liegt der nicht im Bett? Den habe ich gestern gewaschen und aufgehängt und dann ins Bett gelegt. Doch. Ist nicht da. Ok. Im Wäschekeller auch nicht. Warte mal... [überlegt, Prinz und Bauer lächeln gequält ins Publikum] Ich hab's! Im Brotkorb. Nein, das kann ich jetzt nicht so schnell erklären. Nein, ich hab' nichts gegen den Kuschelhund. Schlaft schön! [legt auf]

Dreigestirn steht unschlüssig auf der Bühne, einer sieht zum anderen.

Prinz [zum Publikum, etwas verzweifelt]: Alaaf.

Jungfrau: Ach komm, die haben doch auch alle Kinder.

Bauer: Und selbst die beste Kita macht um 5 Uhr zu.

Prinz [sinnend]: Wie war in Köln es doch vordem...

Bauer und Jungfrau: Hä?

Prinz [unwillig]: ...mit Heinzelmännchen so bequem.

Bauer und Jungfrau: Heinzelmännchen?

Prinz [schwärmend]: Denn war man faul, man legte sich, hin auf die Bank und pflegte sich.

Jetzt kommt Bewegung in die Garde: Die Heinzelgardisten ziehen ihre Zipfelmützen auf und beginnen einen kurzen Heinzelreigen, das Dreigestirn schaut mit offenem Mund und zunehmender Begeisterung zu. Plötzlich stürmt ein weiterer Heinzelmann (eine weitere Heinzelfrau?) auf die Bühne. Er/sie trägt eine Zipfelmütze mit der Aufschrift Oberheinzel.

Oberheinzel [schnarrend]: Was ist denn hier los?

Die Heinzelmännchen erstarren.

Oberheinzel: Sind wir hier im Karneval?

Das Dreigestirn nickt, Oberheinzel blickt das Dreigestirn streng an, das Dreigestirn sieht betreten zu Boden.

Oberheinzel: So. [zu den Heinzeln, befehlend:] Handschuhe! [ins Publikum, erklärend:] Hygienevorschrift Paragraph 12, Absatz 2.

Die Heinzelmännchen ziehen gehorsam Plastikhandschuhe an, Oberheinzel sieht ungeduldig zu.

Oberheinzel: Und jetzt noch mal ordentlich!

Heinzelmännchen führen einen stramm soldatischen Tanz auf.

Oberheinzel: Gleich viel besser. [zum Dreigestirn] Ich muss mich für meine Mitheinzel entschuldigen. Wir bieten Vollzeitbetreuung und kein Gehampel! Individuell, effizient und professionell!

Prinz [zaghaft]: Eigentlich sind unsere Kinder in der Kita Liebfrauen schon sehr gut...

Oberheinzel [spöttisch]: Tatsächlich? Was war das denn eben für ein Auftritt? [stolz zum Publikum] 24 Stunden am Tag, 7 Tage die Woche!

Jungfrau: Aber wir kümmern uns gern selbst ...

Oberheinzel [vorwurfsvoll]: Selbst kümmern? Sie sind also ausgebildete Erzieher?

Das Dreigestirn blickt peinlich berührt ins Publikum.

Bauer [trotzig]: Es sind immerhin unsere Kinder!

Oberheinzel [abschätzig]: Eben. Ihnen fehlt die professionelle Distanz! Aber ich sehe schon, Kinderbetreuung wird hier nicht gebraucht. [überlegt kurz, schaut das Dreigestirn dann verschmitzt an] Kennen Sie eigentlich unser neuestes Angebot?

[alternativ: Oberheinzel beharrt auf Betreuungsangebot und bietet Wunscherfüllung als Bonus an]

Das Dreigestirn blickt skeptisch.

Oberheinzel [triumphierend]: Wir lesen Wünsche von den Augen ab!

Das Dreigestirn sieht sich ungläubig an. Der Oberheinzel stellt sich vor die Jungfrau und blickt ihr in die Augen.

Oberheinzel [nach kurzem Starren]: Kommt sofort!

Oberheinzel klatscht in die Hände, die Heinzelmännchen bilden eine Kette zum Pittermännchen am Bühnenrand, zapfen und reichen das volle Kölschglas von Hand zu Hand bis zum Oberheinzel, der es der Jungfrau überreicht.

Prinz [schaut die Jungfrau mit dem Kölschglas an]: Darauf wär ich auch noch gekommen.

Der Oberheinzel runzelt die Stirn und stellt sich vor den Prinzen.

Er starrt kurz, klatscht dann in die Hände – Musik setzt ein, die Heinzelmännchen bilden vor der Bühne eine Gasse. Der Prinz lässt sich in die Heinzelhände fallen, wird mit Musik aus dem Saal getragen.

Bauer [ruft hinterher]: Und was ist mit meinem Wunsch?

Jungfrau: Was wünschst Du Dir denn?

Bauer: Erbsensuppe!

Beim Wort Erbsen schreien die Heinzelmännchen entsetzt auf, lassen den Prinzen fallen und rennen aus dem Saal.

Bauer: Entschuldigung.

Learning Haskell: Unicode

Als Angehöriger eines kleinen europäischen Volkes mit eigenwilliger Sprache frage ich mich bei jeder neuen Programmiersprache instinktiv, wie sie mit den ganzen ü, ö, ä und ß klarkommt. Python 2.x war in dieser Hinsicht keine Erleuchtung, aber Haskell funktioniert glücklicherweise wie Python 3: Strings werden intern als Unicode-Zeichenketten gespeichert.

Prelude> let a = "Übelkrähe" Prelude> a "\220belkr\228he" Prelude> putStrLn a Übelkrähe

Wunderbar, die Zeichen \220 und \228 werden bei der Ausgabe durch die Funktion putStrLn automatisch in UTF-8 kodiert. Alles könnte so schön sein, wenn es sich bei Haskell-Strings nicht um linked lists von 32bit-Zeichen handelte. Diese Kombination hat zwei Nachteile: Strings benötigen mit 4 Bytes pro Zeichen relativ viel Platz (weshalb UTF-32 auch nur selten die beste Wahl ist), und linked lists sind bei einigen Listenoperationen viel langsamer als dynamic arrays.

Das ist den Haskell-Leuten auch schon aufgefallen. Die Lösung sind ausgerechnet die vermaledeiten Bytestrings:

Normal Haskell String types are linked lists of 32-bit characters. This has a number of useful properties like coverage of the Unicode space and laziness, however when it comes to dealing with bytewise data, String involves a space-inflation of about 24x and a large reduction in speed. Bytestrings are packed arrays of bytes or 8-bit chars.

Packed arrays of bytes klingt schon mal sehr viel schneller als 32bit-Zeichenketten. Trotzdem sind wir noch nicht ganz am Ziel. Das Modul Data.ByteString.Char8 erlaubt zwar, Zeichenoperationen an Bytestrings vorzunehmen, aber... sehen Sie selbst:

Prelude> import qualified Data.ByteString.Char8 as B Prelude Data.ByteString.Char8> let a = B.pack "Übelkrähe" Prelude Data.ByteString.Char8> a "\220belkr\228he" Prelude Data.ByteString.Char8> B.putStrLn a ?belkr?he

Anders als in Python 2.x enthält ein Wert vom Typ ByteString nicht einen kodierten String (in dem \220 für den Buchstaben Ü stünde), sondern nur eine Kette von Bytes, deren Zeichenhaftigkeit dem Modul reichlich wurscht ist. Entsprechend kommt Data.ByteString.Char8.putStrLn nicht auf die Idee, irgendetwas zu kodieren. Glücklicherweise gibt es ein zusätzliches Paket, utf8-string, mit dessen Hilfe reguläre Strings in UTF-8-kodierte Bytestrings umgewandelt werden können:

Prelude> import qualified Data.ByteString.UTF8 as BU Prelude Data.ByteString.UTF8> import qualified Data.ByteString.Char8 as B Prelude Data.ByteString.UTF8 Data.ByteString.Char8> let a = BU.fromString "Übelkrähe" Prelude Data.ByteString.UTF8 Data.ByteString.Char8> a "\195\156belkr\195\164he" Prelude Data.ByteString.UTF8 Data.ByteString.Char8> B.putStrLn a Übelkrähe

Hier sehen wir auch zum ersten Mal, dass das Zeichen \220 (aus dem Zeichenbereich 000080 – 00009F) in UTF-8 mit zwei Bytes (\195\156) repräsentiert wird. Da der Bytestring nun bereits kodiert ist, liefert auch die unveränderte Ausgabe durch B.putStrLn das gewünschte Ergebnis.

Trotzdem ist das noch nicht ganz befriedigend. Es müsste doch möglich sein, kodierte Bytestrings mit einem einzigen Modul zu verarbeiten – ohne den Zwischenschritt über die langsamen Haskell-Strings. Das ist es auch. Die Kombination der Spracherweiterung OverloadedStrings mit dem Modul Data.Text erlaubt folgendes Vorgehen:

Prelude> :set -XOverloadedStrings Prelude> import qualified Data.Text as T Prelude Data.Text> import qualified Data.Text.IO as T Prelude Data.Text Data.Text.IO> let a = "Übelkrähe"::T.Text Prelude Data.Text Data.Text.IO> a "\220belkr\228he" Prelude Data.Text Data.Text.IO> T.putStrLn a Übelkrähe Prelude Data.Text Data.Text.IO> T.putStrLn "Übelkrähe" Übelkrähe

Dank OverloadedStrings können Zeichenketten innerhalb eines Programms explizit oder über type inference auf den Typ Text bezogen werden, und T.putStrLn übernimmt die UTF-8-Kodierung bei der Ausgabe. Die Behandlung eines Text-Wertes unterscheidet sich dadurch auf den ersten Blick nicht von der eines regulären String-Wertes. Intern allerdings handelt es sich nur bei ersteren um eine time and space-efficient implementation of Unicode text, konkret: Um UTF-16-kodierte Bytestrings.

Einen exzellenten Überblick über das Verhältnis der Haskell-Typen zu den verschiedenen Unicode-Kodierungen und der Dichotomie linked list/packed array bietet Edward Z. Yang:

  • ASCII or 8-bit:
    • Packed and lazy: Data.ByteString.Lazy.Char8
    • Packed and strict: Data.ByteString.Char8, Data.CompactString.ASCII or Data.CompactString with Latin1
  • Unicode:
    • UTF-32, unpacked and lazy: [Char] (not a library, but if it was, this is where it would fall)
    • UTF-16:
      • Packed and lazy: Data.Text.Lazy
      • Packed and strict: Data.Text or Data.CompactString.UTF16
    • UTF-8:
      • Unpacked and lazy: Codec.Binary.UTF8.Generic contains generic operations that can be used to process [Word8].
      • Packed and lazy: Data.ByteString.Lazy.UTF8
      • Packed and strict: Data.CompactString.UTF8 or Data.ByteString.UTF8
    • Compact (UTF-8-like), packed and strict: Data.CompactString with Compact

Theoretisch ist die Verarbeitung von ByteString-Werten noch etwas effizienter als die von Text-Werten – solange die verwendeten Zeichen sich größtenteils im ASCII-Bereich befinden. Praktisch ist der Geschwindigkeitsunterschied zu vernachlässigen, und konzeptuell ist Text eindeutig die adäquatere Lösung.

Integriert

Kaum habe ich verinnerlicht, dass nach Möglichkeit jeder etwas kompliziertere Handgriff in einer Wertschöpfungskette an günstigere Subunternehmer delegiert werden sollte, schwingt das Pendel in die andere Richtung:

As Kobayashi’s businesses grew, he was in a position to start bypassing middlemen. Instead of dealing with distributors, he went straight to producers. Instead of hiring contractors, he purchased required equipment and moved people onto payroll. Everywhere he saw a third party making money, he figured out a way to replace that person or bring them in-house. He reduced costs at every step. He constantly encouraged me to do the same.

Interesting things happen when we cut out the middleman. In addition to reducing cost, we often end up creating an internal byproduct that can be productized and sold to a completely new customer. (Amazon Web Services is an example of this.) Sometimes the middleman’s market is so huge, that a freaking enormous business can be built simply by providing their customers a lower cost and more efficient option. Two-sided marketplace businesses are a textbook example of this type of disruption.

Gilt das nur für halbseidene Geschäfte, oder muss ich meinen Nähbedarfsladen jetzt vollkommen umstrukturieren?

Demokrat wider Willen

Das Bundesuntersuchungsbüro der Vereinigten Staaten führt eine regelmäßig aktualisierte Liste relevanter Toter. Ein großer Teil der Verstorbenen fällt in die Kategorien FBI Officials, Communist, LCN (= La Cosa Nostra) und Pearl Harbor, was die größten Problembereiche der Polizeiarbeit im Jahr 2011 illustriert. Etwas überraschend ist lediglich die Einordnung Nikita Chruschtschows und seiner Frau:

  • Keyserling, Leon H., d. Aug. 1987 – COMMUNIST
  • Khanzadian, Azad Hoohi, b. 1895 – COMMUNIST
  • ...
  • Kheifets, Gregori, (VICE CONSUL SF), b. 1899 - COMMUNIST
  • Khrushchev, Nikita, D. 9/11/1971
  • Khrushchev, Nina, D. 8/8/1984, wife of Nikita Khrushchev
  • ...
  • Stalin, Joseph, aka. Joseph Vissarionivich D. Jughashvili, b. 1879, d. 1953 – COMMUNIST

Wäre ich Chruschtschows Enkel, würde ich gegen diese Unterstellung klagen.

Stressfreie Effizienz

Ich spiele mit dem Gedanken, mich um das betriebliche Vorschlagswesen, die sozialistische Wirtschaftsordnung und das Bruttosozialprodukt verdient zu machen:

Login:

  1. Enter username
  2. Press tabulator key
  3. Enter password
  4. Press return key

Note: Please enter your actual username and password instead of the placeholders username and password.

Find:

  1. Press CTRL-F (Mac: CMD-F)
  2. Enter search term
  3. Press return key

Look ma, no side effects!

HUD

Ubuntu 12.04 führt mit dem Head-Up Display (HUD) eine LaunchBar-artige Zugriffsmöglichkeit auf sämtliche Funktionen eines Programms ein. So nice! Die Linux-Kernzielgruppe tanzt in den Straßen:

The results so far are rather interesting: power users say things like every GUI app now feels as powerful as VIM. EMACS users just grunt and... nevermind. Another comment was it works so well that the rare occasions when it can’t read my mind are annoying!. We’re doing a lot of user testing on heavy multitaskers, developers and all-day-at-the-workstation personas for Unity in 12.04, polishing off loose ends in the experience that frustrated some in this audience in 11.04-10. If that describes you, the results should be delightful. And the HUD should be particularly empowering.

Und alle tanzen mit!

Even casual users find typing faster than mousing. So while there are modes of interaction where it’s nice to sit back and drive around with the mouse, we observe people staying more engaged and more focused on their task when they can keep their hands on the keyboard all the time. Hotkeys are a sort of mental gymnastics, the HUD is a continuation of mental flow.

Ach... Mr. Shuttleworth? Haben Sie eigentlich schon mal mit casual users auf anderen Plattformen zu tun gehabt? Zum Beispiel beim Login? Das sieht nämlich so aus:

  1. Der Mauszeiger wird auf das Feld Benutzername geführt, Klick (Bonuspunkte für das Loslassen der Maus vor dem Klick)
  2. Der Mauszeiger wird aus dem Weg geschoben, um freie Sicht auf das Eingabefeld zu haben.
  3. Der Benutzernamen wird eingegeben.
  4. Der Mauszeiger wird durch hektisches Hin- und Herschieben der Maus lokalisiert.
  5. Der Mauszeiger wird auf das Feld Passwort ...
  6. ...

Es gibt nur wenige Situationen, in denen man das sinnlose Verstreichen der eigenen Lebenszeit noch intensiver empfindet.

Technologiedemonstration

Die iOS-Version von vim versteckt die ESC-Taste in den Sonderzeichen und erlaubt nur die Bearbeitung von Dokumenten, die zuvor via iTunes auf das iPad/iPhone transferiert wurden. Ich hoffe auf Version 2.0 mit angepasster Tastatur und Dropbox-Anbindung. Weihnachten 2012 wäre ein passendes Release-Datum.

Heißohr

Für einen audiophilen Liebhaber ausgefallener Cereals, der außerdem eine meine Lieblingsplattformen betreibt, habe ich natürlich großen Respekt. Aber: Geschlossene Kopfhörer affixed to my head for many hours per day? Nach spätestens einer Stunde würden meine Gedanken nur noch um meine überhitzten Ohren kreisen.

SE Windows

Einerseits rät das BSI zum Kauf eines aktuellen Windows-Systems, andererseits hält es das Microsoft-System für nicht sehr vertrauenswürdig:

Wenn Sie Ihren PC eines Tages entsorgen wollen, dann sollten Sie sicherstellen, dass alle Daten auf der Festplatte vernichtet sind. Ein einfaches Löschen in den "Papierkorb" oder im Windows Explorer ist hierfür nicht ausreichend.

Um Ihre Festplatte unbrauchbar zu machen, können Sie diese ausbauen und physisch zerstören. Ein Verkauf der gebrauchten Festplatte lohnt sich in den meisten Fällen nicht, wenn man den Erlös ins Verhältnis zum Wert Ihrer Daten setzt.

Wollen Sie die Festplatte dennoch erhalten, sollten Sie Ihren PC von einer in das CD-ROM-Laufwerk eingelegten Live-CD starten (z.B. Ubuntu LiveCD), dann die Festplatte in das gestartete Live-System einbinden und schließlich in der Kommandozeile mit der Eingabe des Befehls

dd if=/dev/urandom of=/dev/GERAETENAME

löschen. Dabei steht der GERAETENAME für die erste Festplatte, die meistens mit "hda" oder "sda" bezeichnet wird. Sie sollten auf die Angaben der Kommandozeile achten.

In der nächsten Folge: Wir kompilieren Linux from Scratch und konfigurieren iptables von Hand, um eine Firewall für unseren Windows-Client bereitzustellen.

Punktschmerz

Eine Hamburger Journalistin lernt einen netten, aber ziemlich gehemmten Mann kennen. Sie schreibt über diese frustrierende Erfahrung und verwendet den definiten Artikel versehentlich so, dass unvoreingenommene Leserinnen und Leser den Ausdruck der junge Mann als generisch interpretieren. Prompt wird in Hamburg erregt darüber diskutiert, ob es gehemmte Männer geben dürfe, wer an ihrer Existenz schuld sei und ob nicht gehemmte Männer überhaupt noch zu finden seien. Aus Berlin kommen der gute Rat an die Journalistin, einfach selbst die Initiative zu ergreifen, sowie der etwas unromantische Hinweis, dass es schließlich noch andere Männer gebe.

Frankfurt gibt in einem sauber ausbalancierten Essay zu Protokoll, dass in Liebesdingen eben alles sehr kompliziert sei. Und in München? Dort ist die Welt noch in Ordnung: Männer (konkret: Väter) sind zielstrebige Blender, die aus taktischen Gründen Modernität simulieren.

Da soll noch jemand sagen, in Deutschland gebe es keine engagierte Debattenkultur. Ich wundere mich nur ein bisschen, wie bereitwillig das Feuilleton die Verhältnisse im eigenen Soziotop immer wieder zu gesamtgesellschaftlichen Entwicklungen oder sogar Zuständen aufbläst.