Auto

Termine ins 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 :-)

Autocockpit BMW

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:

#!/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! :-)

Download: fom2rss.tar.bz2

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:

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.
Inhalt abgleichen