Montag, Oktober 29, 2007

Billigflug: Gun Fighter


Erinnern Sie sich noch an Tetris? An die herabfallenden Klötzchen? Es ist eine kleine Ewigkeit her, gell?! Mit Tetris verbindet mich die faszinierende Erfahrung, dass man nach acht oder zehn Stunden ununterbrochenem Tetris-Spiel davon träumt und die ganze Nacht über weiter Klötzchen dreht, sie nach links oder rechts bewegt, Space-Taste drückt und sie herabfallen lässt. Eine ziemlich gute Simulation, die das Hirn da vollbringt; der sogenannte Tetris-Effekt. Das hat mich seinerzeit wirklich beeindruckt. Am frühen Morgen, wieder vorm Computer sitzend (wach, aber eigentlich macht es keinen großen Unterschied ;-), ist der Highscore vom Vorabend mühelos gebrochen. Das Hirn hat im Schlaf gelernt, Tetris noch besser zu spielen. (Dazu gibt es übrigens auch einen netten Artikel auf ScientificAmerican.com von Kristin Leutwyler: Tetris Dreams, October 16, 2000.)

Denk ich an Tetris, denk ich an Space Invaders, Phoenix, Pac Man, Ping Pong und ähnliche Spielchen -- die Computerspiele meiner Jugendjahre. Das ist ein Weilchen her. Vielleicht können Sie sich vorstellen, mit was für großen Augen ich Ende August in Halle in einem Supermarkt diese Pappschachtel entdeckte (siehe Bild). Ballerspiele aus den 80igern im Format zweier handlicher "Joysticks" mit Fernsehanschluss für sagenhafte 6.49 Euro. Klar, das musste ich haben. An dem Abend schwelgte ich mit meinem besten Freund in den guten alten Zeiten. Wir steuerten Raumschiffe, lenkten Panzer, fuhren Autorennen, eroberten den Weltraum, ballerten uns den Weg frei -- und hatten eine Menge Spaß dabei.

Die Nacht schlief ich dann ganz normal. Keine Träume in Pixelgraphik. Schade.

Freitag, Oktober 26, 2007

Sloppy Abstractions

There is a very powerful engineering technique, computer scientists make also use of: abstraction. But did you know that abstractions can be leaky?

I had heard about "The Law of Leaky Abstractions" some time ago; now, it again caught my attention, because Philip Wadler mentioned it on his blog. Reason enough to read Joel Spolsky's post (written November 2002) more carefully.

Spolsky's "Law of Leaky Abstractions" says

All non-trivial abstractions, to some degree, are leaky.

He explains his "law" mainly on the example of the TCP protocol (his actor analogy is brilliant and funny) and concludes:

I said that TCP guarantees that your message will arrive. It doesn't, actually. If your pet snake has chewed through the network cable leading to your computer, and no IP packets can get through, then TCP can't do anything about it and your message doesn't arrive.
[...]
This is what I call a leaky abstraction. TCP attempts to provide a complete abstraction of an underlying unreliable network, but sometimes, the network leaks through the abstraction and you feel the things that the abstraction can't quite protect you from.

Spolsky is absolutely correct with his description on TCP -- but I do not agree to his conclusion. There's nothing leaky here. Take network designers. They are fully aware of the services and the quality of the services TCP provides to the next layer in a protocol stack; they also know the limitations of TCP. They know that TCP can fail. And you do as well! What makes ebay so freaky exciting? To deliver your last bid on the very last moment before the auction is over -- and hope the very best for your network connection. You are very much aware that your network might go down in that very moment; TCP won't safe you! Right?!

If you forget that TCP might fail completely, you weren't that pedantic on understanding TCP. You were quite sloppy with your abstraction -- that's all.

The difference between a junior and a senior developer is that a senior doesn't have that many sloppy abstractions a junior has.

Dienstag, Oktober 16, 2007

Merk Dir mal ein Bit!


Haben Sie schon einmal daran gedacht, sich einfrieren und später, irgendwann in der Zukunft, wieder auftauen zu lassen? Das würde etwa die Wartezeit bei einem Flug zum Mars erheblich verkürzen. Was auch immer Ihr persönlicher Grund für eine solche Aktion sein möge, lassen Sie die Finger davon. Mal abgesehen davon, dass das Einfrieren und Auftauen von Zellen eine äußerst heikle Angelegenheit ist -- es kostet Sie nur Geld und lässt Sie strohdumm werden! Ganz richtig: Es macht Sie dumm! Warum? Lassen Sie mich mit einem kleinen Exkurs beginnen: Wie wird Information gespeichert?

Es gibt zwei Arten der Speicherung von Information. Ich möchte Ihnen das anschaulich an zwei Beispielen erläutern:

Nehmen Sie ein kleines Behältnis, eine Schatulle etwa, die ein Steinchen aufnehmen kann. Ist die Schatulle leer, hat die Schatulle den Wert Null gespeichert. Ist das Steinchen in der Schatulle, wollen wir das als den Wert Eins verstehen.

Das ist das wohl am weitesten verbreitete Verständnis eines Informationsspeichers: in einem Gedächtnis (einer Art Riesenschatulle) kann Wissen "abgelegt" werden.

Doch es gibt eine interessante Alternative dazu: Nehmen Sie eine Tasse mit Kaffee und rühren Sie den Kaffee rechts herum: Eins. Rühren Sie ihn links herum: Null. Die Rotationsrichtung des Kaffees enthält die Information! Wenn Sie zu lange warten, sorgen Reibungsverluste dafür, dass dem System Energie entzogen wird und sich irgendwann ein undefinierter Zustand ergibt: der Kaffee rotiert nicht mehr, die Information ist vergessen.

Wir haben also zwei Fälle vorliegen:

  • Informationsträger ist Materie und örtlich gebunden (Raum)

  • Informationsträger ist Energie und zeitlich gebunden (Fluß)


In technischen Systemen wird das Rotierenlassen von Energie zur Informationsspeicherung durch Rückkopplung erreicht. Rückkopplung ist die Rückführung von Ausgängen an Eingänge. Ein sehr schönes Beispiel ist das Flipflop, das z.B. aus zwei NOR-Gattern besteht. Der Schaltkreis selbst ist materielle Information und räumlich gebunden. Der in die materiellen Bahnen geleitete Energiefluss (vereinfacht gesagt der Strom) kann in eine stabile "Rotationsrichtung" versetzt werden -- und merkt sich darüber ein Bit: linksdrehend bzw. rechtsdrehend.

Was passiert, wenn wir ein Flipflop im laufenden Betrieb einfrieren und wieder auftauen? Der Vorgang des Einfrierens entspricht dem Entzug von Energie. Lediglich bei Supraleitung, also Nahe des absoluten Temperaturnullpunktes wäre ein Flusserhalt möglich. Unter "normalen" Umständen vergisst das Flipflop alles und nimmt nach dem Auftauen eine zufällige Rotationsrichtung an. Das Flipflop hat seine Vergangenheit schlichtweg vergessen.

Unser Gehirn besteht aus Nervenzellen, Neuronen, die sich untereinander vernetzen -- das materielle "Schaltungsbild" unseres Denkapparats. Auch hier ist Rückkopplung der Schlüssel zu unserem Gedächtnis. Ohne Rückkopplung wären wir im wahrsten Sinne des Wortes zu keiner "reflektierten" Handlung fähig. Der Teil unseres Denkens, der sich nicht in der Vernetzung der Neuronen niedergeschlagen hat, "kreist" auf diesen rückgekoppelten Bahnen. Würden wir unser Gehirn einfrieren, käme es zum Stillstand des Denkens und aller Erinnerungen, die in uns ihre Kreise ziehen. Dumm gelaufen.

Also: Legen Sie lieber ein Bit ins Gefrierfach! Auch dumme Hefe löscht den Durst!

Samstag, Oktober 06, 2007

Get Lively


Yesterday (Friday, Oct 5, 2007), Dan Ingalls announced the Sun Labs Lively Kernel on the squeak-dev mailing list. Squeak is an implementation of the Smalltalk programming language and Dan Ingalls is one of the lead developers of Squeak. So, you might guess what Lively is?! Something that is very close in spirit and conception to Smalltalk. You've never heard of Smalltalk? Never mind, have a look at Lively, it's fascinating and quite cool -- and completely implemented in JavaScript using SVG capabilities of a web browser.

The main goal of the Lively Kernel is to bring the same kind of simplicity, generality and flexibility to web programming that we have known in desktop programming for thirty years, but without the installation and upgrade hassles than conventional desktop applications have.

[...]

The Lively Kernel places a special emphasis on treating web applications as real applications, as opposed to the document-oriented nature of most web applications today. In general, we want to put programming into web development, as opposed to the current weaving of HTML, XML and CSS documents that is also sometimes referred to as programming.

(http://research.sun.com/projects/lively/, 2007-10-06)

If you are interested in Dan Ingalls way of reasoning, read "The Design Principles Behind Smalltalk" -- a document, which is more than 25 years old and still worth reading. Two other members of the Lively Project, Tommi Mikkonen and Antero Taivalsaari, have written another interesting paper, which might help understand, why they developed Lively: "Web Applications - Spaghetti Code for the 21st Century".

By the way, my students and I started analyzing Lively in my course "Modeling Software Architecture". I'm curious on the insights we will gain.