Örbenn Ledschänd

Ich hätte es nicht geglaubt, wenn mir jemand anders erzählt hätte, was ich erlebt habe. Ich hätte es als Urban Legend abgetan, in den Bereich dieser neuzeitlichen Mythen, mit denen man so gerne Büros, Stammtische, konspirative Gentoo-Installationsparties und Flashmobs (Fläschmopps — ist das nicht der sprechende Hund von Loriot?) unterhalten kann. Ich hätte mich geweigert, es als wahr zu akzeptieren. Bis eben… (ja, mir ist bewusst, dass ein Absatz wie dieser ebenfalls dazu gehört, wenn man eine fiktive Urban Legend erzählt :-) )

Die Ausgangssituation: Kollege A. beratschlagt sich im Büro mit mir über die Abgründe der gepflegten Zeigerarithmetik und der Typenkonvertierung in der schönen Sprache C(++).

Der Plot: Unsere hitzige Erörterung wird durch Teamassistentin Y. (gelernte Bürokauffrau) unterbrochen, die gerade einige Informationen verteilt. Es dauert keine zwei Minuten, dann kommt Kollege K. herein, der wissen möchte, warum wir gerade über ihn lästern. Kollegin Y. hätte es ja gerade mitgehört und überhaupt fühlt er sich nicht wohl, wenn hinter seinem Rücken Unwahrheiten erzählt werden.

Verdutzt schauen A. und ich uns an und brechen wenige Augenblicke später in schallendes Gelächter aus. Einige Sekunden und eine kurze Erklärung später dann auch der bis dahin sehr konsternierte K.

Meine Worte gegenüber A. waren “Beim Casten passiert leicht mal eine kleine Katastrophe, wenn man nicht höllisch aufpasst.” Und K. heißt Karsten.

Eisfair Entwicklertreffen 2007

Am letzten Wochenende fand das Entwicklertreffen der Entwickler- und Testteams von Fli4l und Eisfair statt. Es waren zwar doppelt so viel Leute von Fli4l da wie von Eisfair, aber für mich war es dann doch eher ein Eisfair-Treffen. Wir hatten sehr viele interessante Gespräche, gute Diskussionen, eine total abgefahrene Keysigning-Party für CAcert und GnuPG (brauch noch jemand Formulare?) und viel Spaß. Ich fand es sehr spannend die Leute auch mal persönlich kennenzulernen, die man sonst nur von E-Mails kennt.

Besonders interessant war die diskutierte Roadmap für Eisfair-2. Vieles davon ist noch intern, einiges sind bisher nur Ideen, aber die Weichen sind gestellt. Es wird zwar kein direktes Upgrade von Eisfair-1 auf Eisfair-2 geben, aber dank Paketen wie Backup-Zip und dem Support in der Newsgroup sollte später auch eine Migration möglich sein. Mit dem Sprung auf Eisfair-2 wird komplett auf UTF-8 umgestellt, wann wenn nicht jetzt?

Außerdem gab’s noch ein paar Anekdoten, wo ich mit meinen jugendlichen 26 Jahren schon gestaunt habe. Ich war schon sehr überrascht, dass Leute Festplatten, die nicht mehr anlaufen, mit einem gezielten Hammerschlag überreden. Dann wurden natürlich alle Daten runter kopiert und die Festplatte danach verschrottet. Jemand anders konnte aber noch einen drauf setzen: Festplatte aufschrauben, die Platten von Hand zum Drehen überreden also quasi anschieben, bei offenem Gehäuse alles runterkopieren, zum Spaß noch auf die ersten Headcrashs warten und dann ebenso in die Tonne. Was will man machen, wenn die Daten wichtig sind und die Motoren zu fest sind zum Anlaufen? *lol*

Alter schützt vor Treibern nicht

Mein aktuelles Bastelprojekt ist ein alter Rechner. Eingebaut ist ein Pentium mit 133 MHz, ein wenig EDO-RAM, eine alte Soundkarte vom Typ Terratec Base 1, 3com Netzwerkkarte und eine große Festplatte, auf der Daten gesichert werden. Für Konsole reicht das gut hin und Musik kann er auch abspielen. Installiert hatte ich Debian Etch.

Die Kiste hängt an einem 17″-Röhrenmonitor, eine Konsole mit 80×25 Zeichen ist nett, aber 800×600 Pixel sind locker drin – immerhin 100×37 Zeichen. Damit lässt sich gut chatten, für E-Mails ist genug Platz und auch im Midnight Commander steigt die Übersicht. Das ganze steht und fällt mit dem dafür nötigen Betrieb der Grafikkarte im Framebuffer-Modus. Bei neuen Karten geht das leicht über den VESA-Treiber, einfach vga=789 an die Kernel-Optionen von Grub angehängt und fertig. Leider ist in dem Rechner eine alte S3 Trio64V+ eingebaut und die unterstützt der VESA-Treiber nicht.

Zum Glück gibt es noch andere Framebuffer-Treiber. Bei der ersten Recherche im Netz stellte sich aber Ernüchterung ein. S3 nur für PPC oder Amiga, warum auch immer. Dann stieß ich auf eine erst ein paar Monate alte Neuigkeit. Da hatte doch tatsächlich jemand für Kernel 2.6.21 noch einen neuen Treiber für die Karte geschrieben. Ich finde das reichlich bemerkenswert, schließlich reden wir hier von einer Grafikkarte aus den späten Neunzigern!

Der Ehrgeiz war geweckt, jetzt galt es das Ding zum Laufen zu bringen. Zunächst schaute ich, was nach Debian Etch an Kernel-Versionen bereit stand. Der aktuelle Testing-Zweig bringt 2.6.22 mit, also machte ich ein Dist-Upgrade von Etch nach Lenny. Das war nicht weiter aufregend, allerdings noch nicht alles. Um den Treiber jetzt auch zu benutzen waren (als root!) folgende Schritte notwendig:

  • s3fb in die Datei /etc/initramfs-tools/modules eintragen
  • update-initramfs -u -k all
  • in /boot/grub/menu.lst die entsprechende Zeile wie folgt ändern:
    # defoptions=video=s3fb:800x600@85

Anschließend neu booten und freuen. Der Rechner läuft tatsächlich mit Framebuffer-Konsole auf S3 Trio64V+.

happy

Meine erste Demo – ohne mich

Heute, am 9. November, hat der Bundestag das Gesetz zur Umsetzung der entsprechenden EU-Richtlinie zur Vorratsdatenspeicherung mit der Mehrheit der großen Koalition verabschiedet. heise online schreibt:

Der rechtspolitische Sprecher der Grünen, Jerzy Montag, sprach dagegen in dem heftigen Schlagabtausch von einem “tiefschwarzen Tag für die Bürgerrechte in Deutschland”.

Dem kann ich mich nur uneingeschränkt anschließen. Für mich persönlich gehen damit drei Wochen mit erhöhtem Adrenalinspiegel zu Ende. Es begann damit, dass Juliane am 17.10. bei Webuni den Aufruf für bundesweite Demonstrationen und Kundgebungen weiterleitete, die am 6.11. stattfinden sollten. Die Diskussion entwickelte sich so, dass ich mich in der Woche darauf (zusammen mit Tux) zur Polizeidirektion begab und eine entsprechende Veranstaltung für Magdeburg anmeldete. Wir hatten uns eine kleine Kundgebung an der Goldschmiedebrücke ausgemalt, niemand anders schien Zeit und Lust zu haben und ich vergaß in einem schwachen Moment meine universitären und privaten Verpflichtungen.

Die folgenden Tage bestanden für mich aus massiver Unlust morgens aufzustehen, stressbedingter Appetitlosigkeit und der Kommunikation mit Leuten, die ich nicht kannte über Sachen die ich nie zuvor gemacht hatte. Zu den unbekannten Dingen gehörte weniger das Pflegen des Orga-Wikis sondern vielmehr die Gespräche mit den Jungen Liberalen und der Grünen Hochschulgruppe, die Koordination von Entwurf und Druck der Plakate und Flyer, Verteilen der Aufgaben für den Demotag selbst und so einiges mehr. Am Ende wurde dann trotz zwei Wochen Vorlauf sogar noch die Zeit knapp.

Dank der Hilfe von vielen engagierten Leuten ging dann am Dienstag alles glatt über die Bühne und wurde sogar noch ein kleiner Erfolg. (An dieser Stelle nochmal vielen Dank dafür!) Ich lag um diese Zeit allerdings leider mit einer fiesen Magen-Darm-Infektion im Bett und nutzte die Zeit den Film »Das Leben der anderen« zu schauen – passend zum Thema und sehr bewegend. Gegen Ende sagt dort der Minister Hempf sinngemäß, dass es in der Bundesrepublik nichts mehr gäbe, wogegen man rebellieren könne. Bei der Mitteilung des AK-Vorratsdatenspeicherung von heute heißt es:

Zur weiteren Arbeit des Arbeitskreis Vorratsdatenspeicherung, der die Proteste der letzten Wochen und Monate koordiniert hat, erklärt Ricardo Cristof Remmert-Fontes: “Der Arbeitskreis Vorratsdatenspeicherung wird weiter die Frage stellen, in welcher Gesellschaft wir in Zukunft leben wollen und daran arbeiten, das Bewusstsein für die Grundwerte unserer freien Gesellschaft zu fördern. Wir sind erst am Anfang unserer gemeinsamen Arbeit.”

In diesem Sinne schalte ich jetzt mal meine Playlist um von den zur Stimmung passenden »Murder Ballads« von Nick Cave zur besten Band der Welt: Die Ärzte mit »Deine Schuld«.

Schicker Minirechner mit Debian

Den Titel der Heise-Meldung musste ich doch nach der Begutachtung des Gerätes glatt mal übernehmen.

Die Rede ist von einem Debian-basierten Desktop-Rechner im Office-Format. Das heißt, er ist nicht überdimensional groß, sondern hat mit (18×11,2×4,8)cm das Format eines etwas dickeren Manuscripts, komplett passiv gekühlt, damit also kaum hörbar und hat dazu nur 12 Watt Leistungsaufnahme, was einen Dauerbetrieb über den gesamten Arbeitstag unbedenklich macht.

Vorinstalliert ist besagtes Debian-System mit dem KDE-Desktop, Firefox und OpenOffice. Damit sollten die meisten Anwendungsfälle abgedeckt sein.

Leider gibt es keinen Testdownload des angebotenen Systems – Debian lässt sich schließlich auf die unterschiedlichsten Arten konfigurieren, wie die verschiedenen Derivate zeigen und auch über die Update-Fähigkeit werden keine Aussagen gemacht. Zweites Manko ist der Preis von 450 Euro – dafür bekommt man durchaus schon einen recht leistungsfähigen PC oder kann einen weniger leistungsfähigen PC 2 Jahre lang mit Strom versorgen. Die Office-Eigenschaften müssen hier gezielt gewünscht und mit viel Geld erkauft werden. Denkbar wäre aber eine Subventionierung solcher Geräte im Rahmen eines Umweltschutzprojektes.

Für mich käme das Gerät wohl nicht in Frage, da es als Entwicklungsrechner nur begrenzt einsetzbar ist. Sowohl Prozessor als auch Hauptspeicher entsprechen nicht mehr den heute üblichen Voraussetzungen. Trotzdem würde ich darauf gern mal ein bis zwei Tage testarbeiten – ich kann mir gut vorstellen, dass sich alle anderen Dinge damit sehr gut erledigen lassen.

Spaß mit Microsoft Robotics Studio

Es ist ja schon angeklungen, dass ich mich mit Microsoft Robotics Studio beschäftige. Gestern habe ich im SimulationTutorial2 eine witzige Stelle gefunden:

// we use the http get handler for something unusual, but fun:
// Whenever a web browser does a GET, we will throw some objects in the simulation

Wie bitte? Einfach per Klick immer mehr und mehr Sachen reinwerfen? Das wird ausprobiert…

Get the Flash Player to see this content.

lol2

KDE PIM: Kalenderreparatur

Ich habe mich vorgestern abend gefreut, dass doch tatsächlich noch eine Version 3.5.8 der KDE mit einer großen Menge von Bugfixes über den Debian Paketstream geliefert wurde. Leider kam dann gestern auch die Ernüchterung: Seit dem Update funktionierte mein Kalender nicht mehr.

Um auch von anderen Rechnern aus auf meine Kalenderdaten zugreifen zu können, benutze ich einen IMAP-Account zur Ablage der Kalenderdaten. Die einzelnen Einträge werden dabei im ical-Format in jeweils eine E-Mail gelegt. Ich finde das sehr praktisch, weil es sich gut speichern lässt, für IMAP eine Menge Bibliotheken vorhanden sind und man so auch mit anderer Software leicht zugreifen kann.Die Fehlermeldung war:

libkcal: ERROR: Can't read uid map file

Damit das im Kontact verwendet werden kann, muss man im KMail einen Groupware-Ordner angeben, unterhalb dem dann die PIM-Daten (Kalender, Notizen, Kontakte und Journal) abgelegt werden. Seit der Version 3.5.8 (bzw nach den Newsgroups wohl schon ein wenig früher) hat sich diese Konfiguration wohl geändert, jedenfalls ist nun ein Eintrag notwendig, um zu kennzeichnen, welcher IMAP-Account für die Daten zuständig ist. Das musste ich von Hand nachpflegen.

Eine Anleitung, was dabei zu tun ist, gibt es in folgendem Foreneintrag: https://bugs.launchpad.net/ubuntu/+source/kdepim/+bug/139433/comments/7

Damit funktioniert mein Kalender nun wieder und ich kann mich auch wieder ordentlich organisieren. Nebenbei ist mir aber mal wieder aufgefallen, wie sehr man sich doch von der Funktion bestimmter Tools abhängig macht. Es wird Zeit, dass ich mir eine zweite Alternative für den Zugriff auf diese Kalenderdaten suche.

shirt shop nicht erreichbar

Beim Versuch noch ein neues Shirt in unseren Shop aufzunehmen bin ich darüber gestolpert, dass das WordPress-Plugin »Spreadshop« 1.8 mit WordPress 2.3 nicht mehr funktioniert. Laut der Homepage des Spreadshop-Plugin wird an dem Problem gearbeitet. Bis dahin nutzt bitte den (nicht angepassten) Shop bei Spreadshirt selbst: http://antiblau.spreadshirt.net

Fangen und Werfen

Als heute im Büro zwischenzeitlich der Subversion-Server nicht erreichbar war, so dass ich meinen Commit nicht machen konnte, unternahm ich einen Spaziergang im Haus zum verantwortlichen Admin. Der war zwar nicht da, aber im gleichen Büro unterhielt ich mich dann mit einem großen Fan von Python. Ich habe dann mal bei Wikipedia nachgelesen und bin über folgenden Satz gestolpert:

Python unterstützt (und nutzt ausgiebig) die Ausnahmebehandlung (engl. exception handling) als ein Mittel, um Fehlerbedingungen zu testen. Dies ist so weit in Python integriert, dass es sogar möglich ist, Syntaxfehler abzufangen und zur Laufzeit zu behandeln.

Das fand ich schon ziemlich krass. Das Programm kann also stellenweise syntaktisch fehlerhaft geschrieben sein, der Compiler meckert nicht und ich kann das selbst abfangen – coole Sache. Weil ich das ganze sowieso noch für die Arbeit mit .NET und C# brauche und mich das auch für den Perl-Parser für IMPULS interessiert, habe ich mich dann mal ganz allgemein mit Exceptions beschäftigt. Richtig schmunzeln musste ich als alter Handballer über die verwendeten Begriffe. Die Exception wird geworfen und irgendwo sitzt ein Catch-Block, der die irgendwann auffängt. Bildlich vorgestellt kann ich da beim Schreiben dieses Satzes gerade immernoch lachen. happy

Meine Glaskoogle hat mir dann für Exceptionhandling mit Perl die Seite Object Oriented Exception Handling in Perl ausgespuckt, wo das alles schön erklärt ist. Jetzt ratet doch mal, was bei der Ausführung des folgenden leicht abgewandelten Beispiels von jener Seite passiert:

#/usr/bin/perl -w
use Error qw(:try);
try {
	some code;
	code that might throw an exception;
	more code;
	return;
}
catch Error with {
	my $ex = shift;	# Get hold of the exception object
	print "handle the exception\n";
}
finally {
	print "do some more cleanup\n";
};	# < -- Remember the semicolon

lol2

MinusPiPiTransform

Da wird sich doch der eine oder andere fragen, was diese seltsame Überschrift zu bedeuten hat. *gg* Also heute in diesem Kino nicht etwa das Wasserlassen von Kleinkindern sondern:
Wie transformiere ich Winkel in das Intervall [−π, π]?

Das Problem stellte sich mir vor einigen Wochen im Rahmen meiner Studienarbeit das erste mal. Ich hatte zunächst einen Algorithmus entwickelt, der sich in einer Schleife so lange dem Zielintervall näherte, bis der Winkel transformiert war. Das ist zuverlässig, leicht zu durchschauen und langweilig. Meine Idee für eine elegante einzeilige Lösung war ein wenig mit der Signum-Funktion rumzuspielen und durch geschicktes Anwenden von Runden und aller vier Grundrechenarten die Geschichte mit der Schleife zu umgehen.

Im Prinzip gehe ich dabei ähnlich vor wie im Schleifenalgorithmus: ich addiere oder subtrahiere solange Vielfache von 2π bis ich im Zielintervall bin. Will ich das in einer Zeile tun, muss ich das notwendige Vielfache rausbekommen und das Vorzeichen.

Stellt man sich den allseits beliebten Zahlenstrahl vor – vorstellen mit Zettel und Stift ist leichter ;-) – erkennt man die Zuordnung:

  • [−5π, −3π] : 2
  • [−3π, −π] : 1
  • [−π, π] : 0
  • [π, 3π] : −1
  • [3π, 5π] : −2

Das Intervall [−π, π] um 0 rum stört. Das erste was ich deshalb tue: ich addiere sign(inAngle)*π zu meinem Einganswinkel inAngel. Dadurch schaffe ich mir zwar einen toten Bereich um 0 rum, aber die neuen Abschnitte haben ihre Grenzen bei vollen Vielfachen von 2π, so dass ich nun durch 2π teilen kann. Das Ergebnis runde ich derart, dass ich auf die nächste volle Zahl in Richtung 0 runde, d.h. ich runde bei positiven Zahlen ab und bei negativen auf oder kurz gesagt: ich schneide einfach die Nachkommastellen des Divisionsergebnisses ab. ;-) Damit habe ich schon die gesuchten Koeffizienten mit richtigem Vorzeichen. Die multipliziere ich dann wieder mit 2π und das Ergebnis ziehe ich vom Eingangswinkel ab, fertig. In Simulink sieht das dann aus wie auf dem folgenden Bild (zum Vergrößern anklicken):

Transformation von minus PI bis PI in Simulink

In Matlab liest sich das wie folgt:

function outAngle = MinusPiPiTransform(inAngle)
    outAngle = inAngle - ...
        fix( (inAngle + sign(inAngle)*pi) / (2*pi) ) * ...
        2*pi;
end%function

Diese Lösung hatte ich wie gesagt vor ein paar Wochen entwickelt. Heute brauchte ich das ganze wieder, allerdings in C# – kein Problem. Einfach den Teil aus dem Matlab-Skript in C# übersetzt und dann sieht das ganze so aus:

public double MinusPiPiTransform(double inAngle) {
    return inAngle -
        Math.Truncate((inAngle + Math.Sign(inAngle) * Math.PI) / (2 * Math.PI)) *
        2 * Math.PI;
}