Monthly Archives: May 2008

Ein Evolutions-Spiel und die Denkfehler des Kreationismus

Nachdem ich wieder einmal auf eine angeblich wissenschaftliche Begründung für die Unmöglichkeit der Evolution gestoßen bin, habe ich doch das Bedürfnis, mit den paar Denkfehlern aufzuräumen.

Denkfehler 1: Die Kreationisten behaupten, ein komplexer Organismus kann unmöglich durch zufälliges Zusammenstellen und Ändern von DNS entstanden sein.

Dieser Aussage schließe ich mich an. Der Fehler liegt in der Voraussetzung, die davon ausgeht, dass Evolution nur zufällige Änderung bedeutet. Die Annahme beschränkt sich auf die Mutation und ignoriert den weit wichtigeren Schritt, die Selektion.

Im Gegensatz zur Mutation ist Selektion keineswegs zufällig, sondern folgt dem Prinzip Survival of the fittest, also dem Überleben des Stärkeren beziehungsweise angepassteren. Während also die Mutation eine zufällige Änderung eines Individuums bewirkt, sorgt die Selektion dafür, dass nur Verbesserungen beibehalten werden.

Korrekt wäre es deshalb, zu sagen, dass Evolution ein Prozess zufälliger Verbesserungen ist.

Denkfehler 2: Die Kreationisten behaupten, dass Evolution nicht funktionieren kann, weil es sehr unwahrscheinlich ist, dass bei dieser zufälligen Verbesserung der Mensch herauskommt.

Diese Behauptung zeugt von einer gewissen Arroganz, nämlich in der Annahme, dass das Ziel der Evolution immer der Mensch sein müsse. Tatsächlich ist das aber nicht gegeben. Evolution hat kein Ziel in dem Sinne, sondern ist lediglich ein Prozess, bei dem die beteiligten Individuen von Generation zu Generation angepasster sind. Das geschieht durch die oben angesprochene zufällige Verbesserung.

In der Formalisierung der Evolutionstheorie spricht man von einer Fitness-Funktion, die angibt, wie gut ein Individuum angepasst ist. Einziges Ziel der Evolution ist, diese Fitness zu erhöhen.

Würde also der Evolutionsprozess auf der Erde noch einmal starten, käme sehr wahrscheinlich nicht der Mensch heraus. Mir ist aber auch kein Naturgesetz bekannt, nach dem die Erde irgendwann von Menschen bevölkert sein müsse.

Um die Vorgänge bei der Evolution etwas zu verdeutlichen, schlage ich folgendes Evolutionsspiel vor, das an einen “Beweis” der Kreationisten angelehnt ist:

Man nehme sechs Zettel, die mit den Zahlen 1 bis 6 beschrieben sind und lege sie in zufälliger Reihenfolge vor sich auf den Tisch. Weiterhin wird ein W6 (das ist ein “normaler” sechsseitiger Würfel, wie er in jedem gut sortierten Haushalt zu finden ist) benötigt.

Innerhalb der “Spielwelt” wird nun davon ausgegangen, dass diese sechs Zettel ein Individuum darstellen, das umso stärker ist, je besser die Zettel der größe ihrer Zahl nach geordnet sind.

Ein Spielzug besteht aus zwei Aktionen:

  1. Zuerst wird mutiert: Mit dem W6 wird zweimal gewürfelt. Die Zettel, deren Position der Würfel anzeigt, werden zum Vertauschen vorgemerkt. Mit ihnen soll das neue Individuum gebildet werden.
  2. Anschließend wird selektiert: Nur stärkere Individuen sollen überleben, deswegen werden die Zettel nur dann ausgetauscht, wenn anschließend der Zettel auf der niedrigeren Position auch die kleinere Zahl hat.

Wenn man Aktionen ein paarmal wiederholt, wird man sehen, dass die Zettel zunehmend in eine sortierte Reihenfolge gebracht werden. Wichtig ist hier der zweite Schritt, der verhindert, dass schwächere Individuen, also schlechter sortierte Zettelfolgen, sich durchsetzen können. Das ist der Schritt, der in der kreationistischen Denkweise unterschlagen wird.

Das Spiel macht auch deutlich, dass Evolution ein langwieriger Prozess ist. Während sich am Anfang recht schnell eine gewisse Ordnung einstellt, dauert es recht lange, bis wirklich alle Zettel ausgewählt wurden. Jedoch sind die Individuen der späteren Generationen recht stark, enthalten also kaum falsch sortierte Zahlen.

HowTo: Standard-Dateiberechtigungen im Apache

Die Aufgabe: Dateien, die vom Apache HTTP-Server erzeugt werden, sollen bestimmte Zugriffsrechte erhalten.

Seit wir das Antiblau-Blog mit einem Cache versehen haben, bekomme ich regelmäßig E-Mails von dem Script, das sich normalerweise um die Korrektur der Berechtigungen in den WWW-Verzeichnissen kümmert (die Struktur lässt sich mit den Standardmechanismen der Unix-Dateiberechtigungen nicht mehr abbilden und ACLs habe ich nicht). Der Grund ist, dass die Cache-Dateien mit der Gruppe des Apache, statt mit der Gruppe des Webspaces, und mit den falschen Zugriffsrechten erzeugt wurden.

Die Gruppenberechtigung lässt sich leicht korrigieren, indem das Gruppen-Stickybit des übergeordneten Verzeichnisses gesetzt wird:

chmod g+s cache

Schwieriger ist die Anpassung der Zugriffsrechte von 640 auf 660. Hierfür muss der Apache so konfiguriert werden, dass auch Gruppen Schreibrechte erhalten. Das geschieht über die umask-Variable (umasks legen fest, welche Berechtigungen bei einem chmod wieder gelöscht werden), die in der envvars-Konfiguration angegeben werden.

Dazu habe ich in die Datei

/etc/apache2/envvars

den Eintrag

umask 002

eingefügt, den Apache neu gestartet und schon war das Problem behoben.

eisXen und eisfair-2 auf dem Weg

Nachdem ich gerade auf eisfair.org die Ankündigung gelesen habe, dass die Release Candidates von eisXen und eisfair-2 offiziell veröffentlicht wurden, kann ich ja hier auch ein wenig drüber plaudern. Die wichtigsten Weichen wurden ja bereits im November gestellt und einige kleinere Punkte sind auch noch offen, aber wir haben gerade eisXen in den letzten Wochen um einiges voran gebracht und ich freue mich, dass es jetzt im Rahmen des LinuxTag 2008 endlich der weiten Welt vorgestellt wird. Da es »nur« ein RC ist, hätte ich die Wette mit Tux Weihnachten 2007 zwar immernoch verloren, aber ich denke mit dem Input von den Nutzern wird das Projekt jetzt wieder Fahrt aufnehmen. Die Entwicklungsumgebung für eisfair-2 ist auch fast fertig, so dass dann auch bald die Pakete folgen werden.

SME Server

Gestern kurz vor Feierabend wurde ich in ein Gespräch über Trac verwickelt. Im Institut laufen die Projekt-Repositories und die entsprechenden Bugtracker auf einem Linux-System mit der Distribution SME Server. Wissensdurstig wie ich bin, hab ich mich mal umgeschaut. Im Hinterkopf hatte ich noch einen Artikel aus der c’t 4/07, wo das System nicht so schlecht weg kam. Mittlerweile ist Version 7.3 aktuell und die Hardware-Anforderungen sind relativ niedrig. Genau genommen handelt es sich bei dem System um direkte Konkurrenz zu eisfair, nur mit Weboberfläche.

Runterladen des Installations-Images per Bittorrent war kein Problem und Testrechner stehen hier genug rum. Die Wahl viel auf den 700er Duron mit den zwei 20 GB Festplatten. SME Server reißt sich auch gleich beide unter den Nagel und richtet ein RAID 1 drauf ein. Bei der Installation konnte man sich auf der zweiten Konsole daher schön /proc/mdstat anschauen und sehen wie er die Arrays synchronisierte. Das ist auf jeden Fall ein nettes und sinnvolles Feature. Der Installer beschwerte sich auch nicht, dass die Platten nicht exakt gleich groß waren. Das kann der neue Installer von eisXen bzw. eisfair-2 noch nicht – ich werde das mal anregen.

Nachdem alle Dateien auf die Kiste kopiert waren, kam der Rechner beim Reboot bis zum Einbinden der Swap-Partition und blieb dann hängen. Schluss, Ende, das war der Test von SME Server. Nächster Kandidat im bunten Distributions-Hopping: DesktopBSD

Schicke Grafiken aus Matlab in LaTeX

Ich arbeite mit LaTeX und ich arbeite mit Matlab. Bei meiner letzten Arbeit habe ich die Grafiken in Matlab einfach als .eps-Datei exportiert und unverändert in meine TeX-Dateien eingebunden. Das funktioniert problemlos, sieht aber nicht so schick aus, wie es könnte. Da ich für andere Grafiken das wunderbare Paket PGF und TikZ von Till Tantau benutze, habe ich heute Möglichkeiten ausgelotet wie man mit PGF Matlab-Grafiken schick machen könnte. Gründe dafür werden in der Doku von PGF genügend angeführt:

However, there are a number of reasons why you may wish to invest time and energy into mastering the PGF commands for creating plots:

  • Virtually all plots produced by »external programs« use different fonts from the one used in your document.
  • Even worse, formulas will look totally different, if they can be rendered at all.
  • Line width will usually be too large or too small.
  • Scaling effects upon inclusion can create a mismatch between sizes in the plot and sizes in the text.
  • The automatic grid generated by most programs is mostly distracting.
  • The automatic ticks generated by most programs are cryptic numerics. (Try adding a tick reading »π« at the right point.)
  • Most programs make it very easy to create »chart junk« in a most convenient fashion. All show, no content.
  • Arrows and plot marks will almost never match the arrows used in the rest of the document.

The above list is not exhaustive, unfortunately.

Neben PGF selbst gibt es das Paket pgfplots von Christian Feuersänger, das es leicht macht, einheitliche Plots zu erstellen und sogar logarithmische oder semi-logarithmische Achsen ermöglicht. Leider scheint man bei pgfplots im Gegensatz zu PGF selbst noch keine externen Dateien mit den zu plottenden Werten einbinden zu können. Das Skript matlab2pgfplots.m funktioniert leider nicht mit dem steinalten Matlab 6.1 hier im Institut, also habe ich noch nach weiteren Möglichkeiten gesucht.

Paul Wagenaar hat zwei interessante Tools geschrieben. Mathfig2pgf ist ebenfalls ein Matlab-Skript zur Umwandlung in PGF, funktioniert aber leider auch nicht mit Matlab 6.1. Das zweite Tool ist Eps2pgf und erinnert nicht von ungefähr an PSfrag. Beispiele für Ergebnisse von eps2pgf kann man sich auf fauskes.net ansehen.

Da ich nicht nur ein paar wenige Werte zu plotten habe, bin ich mir noch nicht sicher, welche Variante ich wählen werde. In Frage kommt außerdem noch die LowLevel-Variante mit PGF allein. Ein Beispiel wie man dort externe Datenquellen, z.B. den Output von gnuplot einbindet ist dokumentiert, allerdings muss man sich dann wieder Achsen etc. alles selbst bauen, also wird es wahrscheinlich die Variante mit eps2pgf werden, es sei denn pgfplots wird um die Funktion zur Nutzung externer Datenquellen erweitert. Kommt Zeit, kommt Rat, so dringend ist das Problem ja nicht.

Flock – Social Browsing

Eigentlich war ich auf der Suche nach einer Firefox-Integration für Bibsonomy. Aber wie das so ist, bin ich dabei über einige andere Dinge gestolpert. Zum Beispiel Flock.

Flock ist ein sogenannter Social Web Browser, das heisst, neben den üblichen Browser-Features (Flock ist ein Firefox-Abkömmling) gibt es eine Vielzahl von Integrationen für Web 2.0-Dienste, z.B. del.icio.us, Flickr, WordPress (tatsächlich schreibe ich gerade mit der WordPress-Integration von Flock).

Das Interface ist gewöhnungsbedürftig, weil es eine Menge neuer Optionen gibt. Wer aber sowieso viele Web 2.0-Dienste nutzt, wird sich damit wohlfühlen.

Hierarchische Package-Darstellung in Eclipse

Nachdem mir heute wieder ein “Wie machst Du das eigentlich?” begegnet ist, bringe ich als Abwechslung zu ewig langen Text-Einträgen mal ein kurzes Bunte-Bildchen-Howto:

Viele Eclipse-Nutzer sehen in der Java-Perspektive ihre Package-Struktur so:

Package-Explorer - flache Darstellung

Der Nachteil dieser Darstellung ist, dass sich die Baumstruktur der Packages nur schwer nachvollziehen lässt. Die Darstellung ist flach und genauso heisst sie auch: Flat Package Presentation.

Viel günstiger ist aber meist die Hierarchical Package Presentation, bei der Packets wieder in einer Baumstruktur dargestellt werden:

Package Explorer - hierarchische Darstellung

Erreicht wird dies, indem man in der rechten oberen Ecke des Package Explorers das Menü öffnet und die Option Package Presentation von Flat auf Hierarchical umstellt:

Package Explorer - Menü

Dort befinden sich auch einige andere nützliche – oder vielleicht auch nervige – Optionen der Package-Darstellung, die sich je nach Belieben aktivieren oder deaktivieren lassen.

Branches und Merges mit Subversion 1.5

Nachdem letzte Woche der RC 5 von Subversion 1.5 veröffentlicht wurde, beschreibt Ben Collins-Sussman heute in seinem Blog ganz kurz das Feature von Subversion 1.5, auf das viele warten. Subversion 1.5 behält selbst ein Auge auf Branches und Merges und macht das Arbeiten mit Branches damit um einiges leichter. Er demonstriert dies an einem beispielhaften Arbeitsablauf:

1. Make a branch for your experimental work:

$ svn cp trunkURL branchURL
$ svn switch branchURL

2. Work on the branch for a while:

# ...edit files
$ svn commit
# ...edit files
$ svn commit

3. Sync your branch with the trunk, so it doesn’t fall behind:

$ svn merge trunkURL
--- Merging r3452 through r3580 into '.':
U button.c
U integer.c

$ svn commit

4. Repeat the prior two steps until you’re done coding.
5. Merge your branch back into the trunk:

$ svn switch trunkURL
$ svn merge --reintegrate branchURL
--- Merging differences between repository URLs into '.':
U button.c
U integer.c

$ svn commit
6. Go have a beer, and live in fear of feature branches no more.

Wenn man bedenkt, wie aufwändig manuelles Merging bei Subversion vorher war, könnte das jetzt kaum einfacher sein. Man musste in den Commit-Messages die Revisionsnummern mitloggen und aufpassen auch ja die richtigen Sachen von einem Branch in den anderen zu tun. Jetzt brauch man sich um die Revisionsnummern nicht mehr kümmern, das wird alles wegfallen, super coole Sache!

Einsam in der Zwischenablage

Zu den ungelösten Rätseln der Windows-Gemeinschaft (unfreiwillige Mitgliedschaft üblich) gehört auch die Antwort auf die Frage, wieso die Zwischenablage (aka Clipboard) auch bei Windows Vista weiterhin nur die Aufnahme eines einzigen Elements erlaubt, während andere Desktopsysteme schon seit Generationen eine einfache Clipboard-Verwaltung über die Traybar erlauben.

Bislang habe ich mich damit abgefunden, heute wurde es mir zu nervig, ständig Daten aus der Zwischenablage zu verlieren. Deshalb habe ich mich einmal auf die Suche nach entsprechenden Tools gemacht. Folgende Einschränkungen waren gegeben:

  • Lauffähig unter Windows Vista (was auf dem Rechner im Labor installiert ist)
  • OpenSource, wenigstens FreeWare – ich mag für dieses “Feature” nicht auch noch bezahlen
  • möglichst schlank
  • einfach bedienbar, ohne in die gewohnte Arbeitsweise einzugreifen

Schon der erste Punkt hat die Auswahl sehr stark begrenzt, was aber letztendlich auch den Entscheidungsprozess vereinfacht hat. Interessant bis erschreckend fand ich, dass solche Tools nur selten kostenlos verfügbar sind. Letztendlich hab ich mich mit einer Lite-Version zufrieden, die als Freeware erhältlich ist. Selbst mit grundlegenden Funktionen kann man hier noch Geld verdienen.

Drei Kandidaten blieben letztendlich übrig:

  1. ClipMagic
  2. MultiClipBoard
  3. Visual Clipboard LE

ClipMagic erschien mir auf den ersten Blick zu überladen. Ich möchte meine Zwischenablage nicht klassifizieren und auch nicht langzeitarchivieren.

MultiClipBoard entspricht zwar dem gewünschten Funktionsumfang, sieht aber selbst für meinen Geschmack einfach hässlich aus. Das Tool kam auf die Ersatzbank.

Blieb noch Visual Clipboard LE, das zwar nur in abgespeckter Version kostenlos ist, dafür aber ansprechend aussieht und meine funktionalen Anforderungen erfüllt. Es lassen sich eine voreinstellbare Zahl von Texten und Bildern speichern und rudimentäre Einstellungen, insbesondere zur Art der Aktivierung vornehmen. Die Mausaktivierung habe ich ausgestellt – ich werde sie wohl eh nicht nutzen – per Tastatur wird die Auswahl eines Clipboard-Inhaltes per Druck auf Strg+Alt angezeigt. Leider lässt sich diese Einstellung nicht ändern.

Ich werde beobachten, die gut ich mit diesem Tool auskomme. Natürlich nehme ich gern Hinweise für weitere Tools, die den oben genannten Kriterien entsprechen, entgegen.

Noch ein Tipp: Wenn man (jedenfalls unter Vista) beim Öffnen eines Kontextmenüs im Explorer die Shift-Taste gedrückt hält, erscheinen weitere Optionen. Zum Beispiel “Als Pfad kopieren”, um den Pfad einer Datei in die Zwischenablage zu verbringen.

Kernel-Upgrade: Gar nicht so einfach

Nachdem ich die NE2k-Netzwerkkarte aus meinem Server durch eine 3com-Karte ersetzt hatte, dachte ich mir heute, dass ich eigentlich das längst fällige Kernel-Upgrade mal durchführen könnte. Bislang wurde das durch eben jene Netzwerkkarte verhindert, die nur mit einer Kernel-Version <= 2.6.18 lief.

Ganz so einfach, wie ich anfangs dachte, sollte sich das Upgrade dann aber doch nicht gestalten. Meist erzeuge ich die neue Config, indem ich das alte .config-File in das neue Kernelverzeichnis kopiere und dann manuell die Konfiguration anpasse. Die Parameter passen in der Regel so, dass ich am neuen Kernel kaum etwas verändern muss.

Heute nicht: Offenbar hat sich in den Bereichen SATA-Treiber und Netzwerkfilter so viel geändert, dass einige meiner Optionen, nämlich der SATA-Controller-Treiber selbst und die Targets für das NAT, nicht übernommen wurden. Und weil das letzte Kernel-Basteln mit diesem Rechner schon seeehr lange her ist, wusste ich eigentlich nur noch, dass der Treiber meines Controllers komplett anders heisst, als Chipsatz und Karte. Zum Glück hat die alte Kernel-Konfiguration noch aufschlussreiche Hinweise geliefert. SATA-Krams ist jetzt jedenfalls in einem eigenen Bereich und recht komplett vom SCSI getrennt.

Eine spontane Idee, die ich dabei hatte: Man könnte auf einer Webseite (zum Beispiel unter der Domain kernelconfig.org) einen Service einrichten, der Konfigurationen für einen bestimmten Kernel entgegennimmt und auf möglichst gleich funktionierende Konfigurationen für einen neueren Kernel umsetzt. Im gleichen Zuge könnten noch Tipps gegeben werden, wie sich die Konfiguration verbessern lässt und als Plus könnte passend zu einer Systemanalyse (dmesg, lspci, isapnp, lsusb, ….) eine passende Kernel-Konfiguration ausgegeben werden. Falls jemand viel Zeit und Lust hat …

Auf jeden Fall habe ich nun einen aktuellen Kernel (2.6.25) auf meinem Server und kann wieder Uptime sammeln. :)