Sunday, September 19, 2010

FrOSCamp Zürich 2010

Am Donnerstag 16.09.2010 bin ich in Richtung Zürich aufgebrochen, um am 1. FrOSCamp teilzunehmen. Im Vorfeld hatte ich nach Unterstützung aus der Schweizer Perl-Community gefragt. Leider war die Resonanz ziemlich niedrig. Einige, die sich bei mir gemeldet hatten, waren schon mit anderen Ständen auf dem FrOSCamp beschäftigt.

Donnerstag abend bin ich dann am Zürcher Hauptbahnhof angekommen und habe den Weg zum Hotel angetreten. Irgendwo habe ich mich verlaufen, so dass ich in irgendwelchen Seitengassen gelandet bin, die nicht mehr auf meinem Plan aus Google Maps verzeichnet waren.

Mit rund 45 Minuten Verspätung war ich dann doch noch am Hotel. Dort habe ich mitgeteilt bekommen, dass ich "noch viel vor mir" hätte. Auf meinen verwunderten Blick teilte man mir mit, dass ich ein Versuchskaninchen wäre, weil mein Zimmer ganz neu renoviert wäre und ich dann doch bitte Feedback geben soll, wie ich das Zimmer finde - es hat sich gelohnt. Ich habe ein tolles Zimmer bekommen.

Abends durfte ich dann das Zürcher Preisniveau bei Essen erfahren: Eine Portion gebratener Nudeln zum Mitnehmen für knapp 15 sFr (~11,40 EUR). Aber es war lecker. Im Bett habe ich dann meinen Vorträgen noch den letzten Schliff verpasst.

Am nächsten Morgen bin ich dann relativ früh aufgestanden. Ich wusste noch nicht genau, wo der Veranstaltungsort (ETH Zürich) war und ich hatte mir vorgenommen, alles zu Fuß zu laufen. Mit dem ganzen Material für unseren Stand. Kurz vor acht Uhr war ich dort und habe mit dem Aufbau der Sachen begonnen.

Ziemlich früh kam dann auch Dirk von Ubuntu vorbei und hat mir einen Adapter für deutsche Stecker auf das schweizer System gebracht. Ich hatte erst wenige Tage vor der Reise realisiert, dass die Schweizer ein eigenes System haben. Aber immer wieder super, wenn man so hilfsbereite Leute kennt.

Kurz darauf kam auch Roman. Ein weiteres Gesicht, das ich zwar schon länger über das Internet kannte - und auch wohl schon auf YAPC::EUs gesehen hatte - aber hier erst wirklich kennenlernte. Roman hatte sich bereit erklärt, mir an den zwei Tagen am Stand zu helfen. Den Freitag musste er auch fast alleine am Stand verbringen, weil ich insgesamt 3 Vorträge gehalten habe.

Die Vorträge sind ganz gut gelaufen. Meinen Perl::Critic-Vortrag sollte ich dringend mal überarbeiten. Der hätte wesentlich besser laufen können.



Meine beiden anderen Vorträge:

Padre:


Moose:


Am Nachbarstand war auch wieder PostgreSQL vertreten. Auch 'ads' war wieder mit von der Partie, so haben wir uns schon das x-te Mal in diesem Jahr auf einer Veranstaltung getroffen. Die PostgreSQL-Leute sind allesamt sehr nett.

Abends war noch der Social Event des FrOSCamp, aber weder Roman noch ich haben daran teilgenommen. Wir waren beide zu K.O.

Am nächsten Morgen ging es dann wieder um acht Uhr weiter. Heute stand für mich kein Vortrag an; ich konnte also die ganze Zeit am Stand sein.

Insgesamt war das FrOSCamp noch relativ klein (von der Besucherzahl), aber trotzdem sehr gut. Ich hoffe, die Organisatoren machen das im nächsten Jahr wieder.

Was ich auch extrem gut fand war, dass alle Vorträge aufgenommen wurden. Aber nicht mit Videokamera wie bei der YAPC::EU, sondern das VGA-Signal wurde direkt abgegriffen und die Tonspur wurde auch direkt aufgenommen. Ich hoffe, die Leute von der ETH Zürich stellen die Aufnahmen bald online.

Insgesamt hatten wir interessante Gespräche, auch wenn wir nicht überlastet waren. An den zwei Tagen ist mehrmals angesprochen worden, dass ein aktives Zürich.pm gewünscht ist. Wäre toll, wenn ich im nächsten Jahr einfach zwei Tage früher kommen könnte und dann ein Zürich.pm-Treffen stattfindet ;-)

Ganz besonders möchte ich an dieser Stelle Roman danken, mit dem es richtig Spaß gemacht hat, den Stand zu betreiben und über alles mögliche zu reden!

Wednesday, September 08, 2010

Mein Log::Log4perl-Vortrag auf der FrOSCon 2010

Etwas verspätet, aber jetzt habe ich es endlich mal geschafft, den Blogartikel über meinen Log::Log4perl-Vortrag zu schreiben.

Ich hatte schon beim CfP für den Perl-Developer-Room die Idee, einen Vortrag über Log::Log4perl zu halten. Dabei war die erste Idee, wie sonst auch die Folien mit OpenOffice zu machen. Knapp zwei Wochen vor der FrOSCon hat Thomas Fahle dann einen Blogpost über Gtk2::Notify und Log::Dispatch::Gtk2::Notify veröffentlicht. Der hat mich auf die Idee "Warum einen Logging-Vortrag nicht mit Logging realisieren" gebracht. Ich konnte ja nicht ahnen, dass das jede Menge Arbeit bedeutet.

Meine Idee war es, die Folieninhalte in einer YAML-Konfiguration festzulegen und dann die Inhalte in Notifications darzustellen. Das ganze sollte in einer Ubuntu-VM passieren. Also dort ein Testskript für Notifications geschrieben:

 #!/usr/bin/perl
use warnings;
use strict;

use Gtk2::Notify -init, 'testapp';

for my $x ( 0 .. 3 ) {
my $notification = Gtk2::Notify->new( 'Hallo', 'Test' . $x );
$notification->set_hint_int32( 'x', $x * 100 );
$notification->set_hint_int32( 'y', $y * 50 );
$notification->set_timeout( 12_000 );
$notification->show;

sleep int rand 10;

$notification->close;
}


Notifications werden angezeigt, aber das Ausblenden und das Bestimmen der Position funktioniert nicht, außerdem war die Breite der Notifications fest. Der Daemon für die Notifications war Notify-OSD. Dann habe ich ein Tool gefunden, mit dem ich wenigstens die Breite der Notifications beeinflussen konnte. Aber die anderen Probleme blieben. Damit war es nicht wirklich tauglich für den Vortrag.

Von einem Kollegen habe ich dann den Tipp mit notification-daemon aus dem Galago-Projekt bekommen: Ausblenden funktioniert, Position bestimmen funktioniert. Aber wieder feste Breite. In den Sourcen habe ich gesehen, dass die Themes das hardcodiert haben. Also anpassen und selbst kompilieren.

Dafür waren zig Sachen notwendig, die teilweise nicht in den Repositories waren und auch selbst kompiliert werden mussten. Das hat alles seine Zeit gebraucht. Nachdem ich ein extra Theme erzeugt hatte und das im notification-daemon aktiviert hatte, waren die Vorbereitungen abgeschlossen.

Der Code für das Theme und das kompilierte Paket sind in dem Paket zu dem Vortrag zu finden.

Die Vortragsfolien habe ich - wie schon gesagt - in einer YAML-Datei abgelegt.

 ---
slides:
-
summary: Perl@FrOSCon 2010
body: Logging für Perl-Programme
-
summary: Logging - allgemein
body: Ein Protokoll, was während des Programmlaufs so alles passiert.


Ein Skript liest diese Datei aus und blendet mit Log::Log4perl die Notifications ein. Das schon existierende Log::Dispatch::Gtk2::Notify konnte ich allerdings nicht benutzen, weil es die Notifications nicht so lange offen hält bis die nächste Notification angezeigt werden soll. Es macht sich in einem Vortrag natürlich schlecht, wenn mitten im Satz die Notification mit den Informationen verschwinden. Also noch ein neues Modul geschrieben...

 package Log::Log4perl::Appender::Notification;

our @ISA = qw(Log::Log4perl::Appender);

use warnings;
use strict;
use Log::Log4perl::Config::Watch;
use Gtk2::Notify -init, 'Perl@FrOSCon';

my $notification;

sub new {
my($class, @options) = @_;

my $self = {
name => "unknown name",
@options,
};

bless $self, $class;

return $self;
}

sub log {
my($self, %params) = @_;

return if $params{message} !~ /^SUMMARY/;

$notification->close if ref $notification and $notification->isa( 'Gtk2::Notify' );

my ($summary,$body) = $params{message} =~ m{
SUMMARY: \s+ (.*?) \s+
BODY: \s (.*)
}xms;

my $icon = '/usr/share/app-install/icons/podbrowser.png';
if ( $summary eq 'Frage' ) {
$icon = '/usr/share/icons/gnome/32x32/status/dialog-question.png';
}
elsif ( $summary eq 'Antwort' ) {
$icon = '/usr/share/icons/gnome/32x32/status/dialog-warning.png';
}

$notification = Gtk2::Notify->new( $summary, $body, $icon );
$notification->set_timeout( 1_000_000 );
$notification->set_hint_int32( 'x', 0 );
$notification->set_hint_int32( 'y', 20 );

$notification->show;
}

1;


Wie kann ich durch die Folien "navigieren", wie kann ich auf Fragen reagieren? Also musste das Skript, das die "Folien" anzeigt, noch mehr können. Mit IO::Prompt habe ich dann immer eine Tastatureingabe abgefangen und dann darauf reagiert.

   # ask for any input to show the next slide.
prompt -1, -echo=>'';

if ( $_ eq 'd' ) {
$counter--; # we want a former slide
}
elsif ( $_ eq 'q' ) {
my $summary = 'Frage';
chomp( my $body = );
splice @slides, ++$counter, 0, { summary => $summary, body => $body };
}
elsif ( $_ eq 'a' ) {
my $summary = 'Antwort';
chomp ( my $body = );
splice @slides, ++$counter, 0, { summary => $summary, body => $body };
}
else {
$counter++;
}

Insgesamt ziemlich viel Aufwand für einen einzelnen Vortrag, aber ich werde den Vortrag auch nochmal auf dem Frankfurter Perl-Community Workshop halten. Bis dahin muss ich wieder eine Erweiterung machen, weil ich nicht nur in Notifications geloggt habe, sondern auch Twitter-Meldungen erstellt habe. Und Twitter erlaubt jetzt nur noch OAuth für die Authentifizierung.