sisyphus.de

rolling stones

Static files for the win!

Octopress blogging frameworkOctopress blogging framework Da ich zuletzt mehr Zeit damit verbracht habe, Security Patches für meine Drupal-Installation einzuspielen als damit, wirklich zu bloggen, habe ich dem Drama jetzt ein Ende bereitet.

Octopress erzeugt mit Ruby und Rake statische HTML Dateien aus Markdown und schiebt sie schliesslich mit Rsync auf den Server. Da dort jetzt keine “beweglichen Teile” mehr involviert sind habe ich jetzt hoffentlich wieder Ruhe. Und vielleicht sogar wieder Zeit zum Bloggen ;-)

Ruby on Rails und Mercurial

Seit einer ganzen Weile bin ich jetzt schon recht glücklich mit Ruby on Rails genauso wie mit dem Mercurial (Hg) VCS.

Leider mögen die beiden sich nicht besonders: Dass sich Rails-Plugins aus Git-Repositories wie Github automatisch installieren lassen, nicht aber aus Mercurial-Repositories wie Bitbucket ist schade, aber erträglich. Anstrengender finde ich, dass beim Anlegen eines neuen Rails Projekts automatisch nur Git-Files angelegt werden (oder mit -G ganz unterdrückt werden).

Mit einem kleinen Shellskript, das ich nach dem Neuanlegen des Projekts aufrufe, habe ich das jetzt wenigstens etwas für mich automatisiert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/sh

(
  echo '#'; echo '# use glob syntax'; echo '#'
  echo syntax: glob
  cat .gitignore

  # apple stuff
  echo .DS_Store
  echo 'Icon?'

  # rails stuff
  echo public/uploads
  echo public/system/dragonfly

  # regexp section
  echo; echo; echo
  echo '#'; echo '# switch to regexp syntax'; echo '#'
  echo syntax: regexp
  echo '#^\.pc/'

) > .hgignore

find . -name '.git*' | xargs rm
find . -type d -empty -exec touch {}/.keep \;

hg init
hg add
hg ci -m 'initial checkin (converted git => hg)'

Das OSX Terminal

Als jemand, der einen Großteil seiner Arbeit lieber auf der Kommandozeile verrichtet, als mit der Maus habe ich MacOS in den letzten Jahren wirklich schätzen gelernt: Allen Komfort, den ich auch von Windows kannte, mit aktuellen Webbrowsern und Microsoft Office auf der einen Seite und aber einer vollwertigen Unixumgebung auf der anderen Seite. Dabei aber beide Welten perfekt integriert, von Drag&Drop über Skriptsteuerung der GUI-Applikationen bis zu Integration eines SSH-Key-Agents in den systemweiten Schlüsselbund. Traumhaft.

Ich habe mich immer gefragt warum so viele Leute andere Terminalapplikationen verwenden, denn ich bin mit der mitgelieferten Terminal.app sehr zufrieden. Die Antwort ist mir jetzt klar: Ich habe erst mit Mac OS X Snow Leopard (10.6) am Mac angefangen. Das Terminal vorher war wohl katastrophal, so das es für Snow Leopard einen kompletten Rewrite gab. Ebenso funktioniert das SSH-Keyhandling wohl erst seit Snow Leopard so gut. Ein paar hilfreiche Tips vom Autor von Terminal.app gibt es hier: http://www.bestechvideos.com/2008/12/08/rubyconf-2008-terminal-app.

Virtuelle Anteilnahme an virtueller Betroffenheit

Wer erinnert sich noch an den Herbst 1992 und die erste öffentliche Wahrnehmung der zunehmenden Fremdenfeindlichkeit? Erst die furchtbaren Ausschreitungen von Rostock-Lichtenhagen (oder auch treffender “Rostocker Pogrom”), kurz darauf der Mordanschlag von Mölln, die durch die Nachrichten geisterten und jedem klarmachten, dass Rechtsextremismus nicht mehr nur eine skurrile Randerscheinung einiger verstreuter Spinner ist, sondern ein gefährlicher Zündstoff für die gesamte Gesellschaft.

Mit diesen Ereignissen untrennbar verknüpft ist für mich die Erinnerung an die Lichterketten. Die ersten Lichterketten, die nach den Brandanschlägen organisiert wurden, waren in ihrer Spontanität noch ein wichtiges Symbol: „Es sind nicht alle so!“. „Es gibt auch noch viele andere!“. Dem durch die ständige Medienpräsenz der Fremdenfeindlichkeit entstehenden Bild, es handle sich bei um ein breites Phänomen der gesamten Gesellschaft, wurde medial ein Zeichen gegenübergesetzt. Ein naiv-unbedarftes, aber ehrliches Zeichen, das sicherlich nötig war, sei es gegenüber dem Ausland aber auch Ausländern in Deutschland.

In den Monaten und Jahren darauf entwickelten sich Lichterketten dann allerdings zu einem bequemen Betroffenheitsvehikel, zur billigen Gewissensbefreiung mit bestmöglichem Return on Investment. Einfacher konnte man nicht „was tun“ gegen alles, jeden und das Böse überhaupt. Der Gipfel waren die Lichterketten gegen den Golfkrieg: Gut erinnern kann ich mich, wie mich Fragen wie „Was? Du gehst nicht zur Lichterkette? Bist du etwa nicht gegen den Krieg?“ in einer Mischung aus ungläubiger Fassungslosigkeit und Verzweiflung über so viel Einfältigkeit sprachlos resignieren ließen.

Mit Unglauben musste ich jetzt feststellen, dass sich diese Geisteshaltung im 21. Jahrhundert sogar noch toppen lässt. Man kann jetzt sogar die Kerze weglassen und muss auch nicht mehr die bequeme Wohnung verlassen, um seine gesellschaftliches Engagement zu demonstrieren: Einfach der Facebook-Gruppe „Jeder Fan bedeutet eine Kerze für die Opfer in Haiti. Mach mit!“ beitreten, so wie 579.487 andere auch bisher.

virtuelle Kerzen für Haitivirtuelle Kerzen für Haiti

Jetzt bin ich wirklich sprachlos.

Termine in’s Auto

Ein ganz großes Ärgernis meines Studiums an der FOM ist die schlechte Vorausplanbarkeit. Die Termine für die Vorlesungen, werden zwar zum Semesteranfang festgelegt und bekanntgegeben, die Räume aber werden oft erst spät bekannt gegeben und dann auch oft noch mehrmals bis kurz vor der Vorlesung geändert.

Das wäre weiter nicht schlimm, wenn es es sich um Räume im gleichen Gebäude handeln würde, dummerweise entscheidet sich damit aber auch, ob die Vorlesung z.B. im Norden oder im Süden von München stattfindet…

Leider ist die Webseite der FOM, auf der man seine Termine abrufen kann nur über einen Web-Login mit schnell ablaufendem Cookie realisiert, so dass der schnelle Zugriff mit dem iPhone auf der Fahrt leider auch keine Option ist. Zum Glück gibt es genug langweilige hochinteressante Vorlesungen, in denen man nebenher etwas basteln kann.

Das folgende Skript logt sich mit meinem Usernamen und Passwort im Intranet der FOM ein und lädt dort die Liste der anstehenden Termine und Räume herunter und stellt diese als RSS-Feed zur Verfügung. Da mein Auto über einen Connected Drive Internetzugang verfügt, kann ich den RSS-Feed so direkt in mein Autocockpit einbinden. Was ich daran am erstaunlichsten finde: Es funktioniert sogar :-)

Hier sieht man nicht nur, dass ich dringend mal wieder den Innenraum putzen sollte, sondern zudem die nächste Vorlesung samt Raumbelegung. (Das fehlende Leerzeichen ist inzwischen gefixt)Hier sieht man nicht nur, dass ich dringend mal wieder den Innenraum putzen sollte, sondern zudem die nächste Vorlesung samt Raumbelegung. (Das fehlende Leerzeichen ist inzwischen gefixt)

So kann ich direkt im Display meines Autos nachlesen, wo und wann genau die nächste Vorlesung stattfindet. Das Skript ist zwar immer noch im Zustand “grausiger Hack”, aber nachdem es jetzt schon 1,5 Jahre unverändert ist und hervorragend funktioniert: Falls es jemand brauchen kann, bedient euch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl
use strict;
use warnings;
use XML::RSS;
use FindBin '$RealBin';
use YAML::Syck;
use Hoeni::FOM;


my $config = LoadFile("$RealBin/../fom2rss.yml") || die "No config file found";
my $rss = new XML::RSS(version => '2.0', encoding => 'ISO-8859-15');
my $fom = new Hoeni::FOM;
$fom->login(user => $config->{user}, pass => $config->{pass});

$rss->channel(title => 'BWI07 Vorlesungen', ttl => 1);
foreach ($fom->get_lectures()) {
    my $title = sprintf('%s', $_->start->day_abbr);
    if ($_->end) {    # start, end
        $title .= sprintf(
                          " %d:%02d - %d:%02d",
                          $_->start->hour, $_->start->minute,
                          $_->end->hour,   $_->end->minute
        );
    } elsif ($_->start->hour != 0) {    # start only
        $title .= sprintf(" %d:%02d", $_->start->hour, $_->start->minute);
    } else {                            # no start, no end
        $title .= sprintf(" %s", $_->alternative_time);
    }

    if ($_->room) {
        $title .= sprintf(" (%s)", $_->room);
    }

    $rss->add_item(
                   title => $title,                   description =>
                     sprintf("<em>%s</em>\n<br/>%s", $_->title, $_->room_info),
    );
}

print "Content-Type: text/xml\n\n" . $rss->as_string;

In diesem Kernstück lässt sich auch einfach die Ausgabe des RSS-Feeds an eigene Wünsche anpassen, das Pagescraping der FOM ist im lib/ Verzeichnis zu finden. Das Skript ist in Perl geschrieben und benötigt XML::RSS, YAML::Syck, Moose, HTML::TreeBuilder::XPath und WWW::Mechanize (man sieht, es sollte mal was richtiges werden). Einfach den Tarball auspacken, in der fom2rss.yml Datei Username und Passwort eintragen und dafür sorgen, dass .rss als CGI ausgeführt werden kann. Bei Fragen fragen! :-)

Hörbücher und Podcasts in mundgerechten Häppchen

Der grösste Segen meines Autos ist der eingebaute USB-Anschluss. Mit einem USB-Stick voll guter Musik und ein paar interessanten Podcasts (wie z.B. dem Chaosradio Express) verfliegt der schlimmste Stau im Nu und sogar der Münchner Berufsverkehr lässt sich entspannt durchschwimmen.

Dumm ist nur, wenn man mitten in einem Podcast dann doch lieber Musik hören möchte, denn wenn man zurück will, darf man eine Viertelstunde am Fast-Forward-Knopf verbringen (da ist es nur ein schwacher Trost, dass der am Lenkrad ist).

Inzwischen habe ich eine komfortable Möglichkeit gefunden, dieses Problem zu umgehen: Mit dem freien Tool mp3splt lässt sich ohne grossen Aufwand eine MP3-Datei z.B. in mundgerechte Zehn-Minuten-Häppchen unterteilen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mp3splt -t 10.00 -o "@f/@l" CRE139\ Medienkompetenz.mp3
 Processing file 'CRE139 Medienkompetenz.mp3' ...
 info: file matches the plugin 'mp3 (libmad)'
 info: MPEG 1 Layer 3 - 48000 Hz - Joint Stereo - 96 Kb/s - Total time: 97m.07s
 info: starting time mode split
   File "CRE139 Medienkompetenz/a.mp3" created                              
   File "CRE139 Medienkompetenz/b.mp3" created                    
   File "CRE139 Medienkompetenz/c.mp3" created                    
   File "CRE139 Medienkompetenz/d.mp3" created                    
   File "CRE139 Medienkompetenz/e.mp3" created                    
   File "CRE139 Medienkompetenz/f.mp3" created                    
   File "CRE139 Medienkompetenz/g.mp3" created                    
   File "CRE139 Medienkompetenz/h.mp3" created                    
   File "CRE139 Medienkompetenz/i.mp3" created                    
   File "CRE139 Medienkompetenz/j.mp3" created                     
 time split ok

Mit diesen Dateien ist es dann relativ problemlos, wieder die Stelle zu finden, wo man aufgehört hat.

Thunderbird 3 + Dovecot Bug (CONDSTORE)

Der Bug, dass ständig irgendwelche anderen, zufälligen, teils auch alten Nachrichten wieder als ungelesen im Thunderbird erscheinen, scheint zum Glück nicht nur bei mir aufzutreten. Auch viele andere Leute scheinen dieses Problem in Thunderbird 3.0.1 in Kombination mit einem Dovecot IMAP-Server zu haben, in Thunderbird 3.0.2 gibt es bereits einen Fix für dieses Problem.

Bis Thunderbird 3.0.2 released wird, kann man behelfsweise in Thunderbird CONDSTORE abschalten:

EinstellungenErweitertKonfiguration bearbeitenmail.server.default.use_condstore auf false setzen.

Danke Werner, du hast mich vor einem Nervenzusammenbruch bewahrt :-)

Hausarbeitsanschubsoundtrack

Als Motivation für den Semesterendspurt (eine Hausarbeit muss ich noch fertigkriegen, die Klausuren habe ich schon alle durch) gab es heute früh einen Besuch beim Saturn (ich bin jedesmal wieder erstaunt, wie gut die dortige Vinylabteilung sortiert ist).

Death Cab for Cutie: Transatlanticism (2003)

Netter Hintergrund-Indiepop

Julian Plenti: Is … Skyscraper (2009)

Das klingt doch wie… Interpol. Ist es auch irgendwie. Solo-Projekt vom Interpol-Sänger. Sehr nett, wenn auch nicht weltbewegend, also genau das richtige beim Denken… (und für die peinlichen Plastik-Fanfaren in “Unwind” gibt es Abzug in der B-Note)

Emiliana Torrini: Love in the Time of Science (1999)

Ich liebe Emiliana Torrini, auch wenn ich sie erst mit der grandiosen “Fisherman’s Woman” kennengelernt habe, auf der sie sich eher Richtung Singer/Songwriter entwickelt hat. Dass es jetzt ihre frühreren Triphop-Sachen als Vinyl-Reissues gibt, ist hochwillkommen. (und wenn mir jetzt einer mit “Jungle Drum” kommt… keine Ahnung wie das passieren konnte ;-) )

Soulsavers: Broken (2009)

Hatte garnicht mitbekommen, dass es von denen was neues gibt. Aber nach dem brillanten “It’s Not How Far You Fall, It’s The Way You Land” greif’ ich sorglos zu.

Get Well Soon: Vexations (2009)

Das deutsche Wunderkind hat auch was neues…

Eels: End Times (2010)

Gab es von den Eels eigentlich schonmal eine schlechte Platte? Nein? Dann wird das sicher nicht die erste sein, hoffe ich und freue mich auf eine neues Meisterwerk :-)

Verschiedene Künstler: Monsieur Gainsbourg revisited (2006)

Franz Ferdinand, Portishead, Placebo, Cat Power, Rakes uvw. verneigen sich zum 15. Todestag vor Serge Gainsbourg. Ich bin gespannt.

Them Crooked Vultures: same (2009)

Dave Grohl (ex-Nirvana, Foo Fighters), Josh Homme (Queens Of The Stone Age, Eagles of Death Metal) und John Paul Jones (Led Zeppelin) stehen als Besetzung auf dem Cover. Somit ist klar was es wird: Straight, laut, dreckig und spassig statt intellektuell tüdelig-komplex. Genau das was ich jetzt brauche.

Dredg: The Pariah, the Parrot, the Delusion (2009)

Ich habe nicht den blassesten Schimmer, was das ist, aber ich habe die jetzt schon so oft im Indie-Fach beim Saturn stehen gesehen und das Cover ist nett. Eine Überraschung pro Einkauf muss sein :-)

Vinyl vs. CD - Der endgültige Beweis

Endlich hat sich mal jemand die Mühe gemacht und einen nachvollziehbaren Hörtest erstellt, der die klanglichen Unterschiede zwischen Vinyl und CD herausarbeiten soll. Wer die klangliche Überlegenheit von Vinyl jetzt noch nicht bemerkt, dem ist wirklich nicht mehr zu helfen ;-)

Ich geh’ mir jetzt mal eine schöne Platte auflegen…

Hello world für Nicht-Programmierer

Auch wenn ich erst jetzt dazu komme:

Am 1.1.2010 um 22:50 bin ich stolzer Onkel geworden.

Der frischgebackenen Familie wünsche ich alles Gute und dem kleinen Marius einen tollen Start und das Beste aus der fröhlichen Zähigkeit seiner Mama und der freundlichen Gelassenheit seines Papas :-) *knuddel*