9. Deutscher Perl-Workshop - Tag 3
Beitrag von Uwe am 23.02.2007 um 20:30 Uhr | 1 Kommentar
Am letzten Veranstaltungstag nahm die Qualität der Vorträge leider rapide ab. Würde ich die drei schlechtesten Vorträge küren - sie wären alle von heute.
Marc Lehmann - wie gewohnt - interessant mit IO::AIO Dateioperatonen ohne Unterbrechungen. Seine Vorträge erscheinen auf den ersten Blick fast unvorbereitet (keine Vortragsfolien, alles aus der Shell heraus) - ein Blick in den Tagungsband verrät aber das Gegenteil. Dort findet sich ein ausgearbeiteter Vortrag zum Nachlesen. Diese Mischung gefällt mir!
Ein weiterer Lichtblick war Alvar Freude, dessen Vortragstitel Perl [PB]est Practices -- wie schreibe ich sauberen, wartbaren Code mich zu erst an Damian Conway's gleichnamiges Buch erinnerte. Aber Alvar setzte lieber auf abschreckende Beispiele - sehr zur Freude seiner Zuhörer!

Kurz vor der Abschlußbesprechung ergriff Nicholas Clark (Perl-5.8-Pumpkin und regelmäßiger Gast auf dem Deutschen Perl-Workshop) das Wort. Sein Aufruf, Bleadperl (die Entwicklerversion von Perl) zu testen, war in Deutsch. Etwas holprig, aber im großen und ganzen sehr gut zu verstehen. Auf den Workshop-Seiten findet sich eine Anleitung zur Installation von Bleadperl (und sogar fertige Binaries für Windows). Testet Eure Anwendungen und CPAN-Module, ob sie unter dem kommenden 5.10 laufen, damit die Fehler noch vor dem Release behoben werden können.
Bei der abschließenden Verlosung hatte ich auf ein schönes neues Buch von O'Reilly gehofft ("Perl Hacks" hätte mir sehr gut gefallen), stattdessen habe ich ein sieben Jahre altes Buch über IT-Sicherheit (von der Firma Integralis gesponsort) gewonnen :-(
Mein bisher bester Gewinn bleibt damit die rote O'Reilly-Kochschürze :-)
9. Deutscher Perl-Workshop - Tag 2
Beitrag von Uwe am 22.02.2007 um 18:30 Uhr | 0 Kommentare
Firewalls mit Perl

Los ging es mit Steffen Ullrich und Firewalls mit Perl. Steffen's Arbeitgeber, die Firma GeNUA, produziert Firewalls auf Basis von OpenBSD und Perl. Dabei ging es hauptsächlich um Probleme mit chroot-Umgebungen. So müssen etliche Module vorher geladen werden, da nach dem Eintritt in die chroot-Umgebung keine weiteren Module nachgeladen werden können. Insgesamt ein sehr interessanter Vortrag, der allerdings nur wenig mit dem Titel zu tun hatte.
Jifty - ein Web Application Framework

Wolfgang Kinkeldei, dessen Namen ich bereits auf der Jifty-Mailingliste gelesen habe und der auch ein (inoffizielles) Jifty-Wiki pflegt, hielt einen Einsteiger-Vortrag über Jifty (Folien als PDF). Für mich war es leider nur wenig Neues, da ich das Tutorial bereits durchgearbeitet habe.
Es gibt viele Dinge, die mir an Jifty gefallen, aber mit Mason als Template-System komme ich einfach nicht klar. Vielleicht ändert sich dies mit Template::Declare (einem auf Vererbung und minimalem Markup basierenden neuen Template-System).
diff -h CPAN.pm -r 1.8x 1.9x

Bereits auf dem vorherigen Perl-Workshop hat Andreas König (der Maintainer von CPAN.pm) einen kurzen Vortrag über Neuerungen in CPAN.pm gehalten. Damals war das Modul aus einem längeren Dornröschenschlaf erwacht. In diesem Jahr gab es noch viel mehr zu berichten. So steht die Version 1.9 vor der Tür (März/April).
Mit CPAN::SQLite gibt es eine schnelle Alternative zur Speicherung des CPAN-Index. Außerdem wird weniger Speicherplatz benötigt. Statt Storable wird SQLite verwendet.
Die Konfiguration wurde vereinfacht. Mit o conf init /color/ ist es z. B. möglich, nur Fragen zur Farbwahl zu beantworten. Farben in CPAN? Richtig, das ist ebenfalls neu :-)
Aber die beste Neuerung sind für mich Distroprefs. Das sind quasi automatische Antworten auf die lästigen Fragen mancher Module. Darüber werde ich in nächster Zeit ausführlicher berichten.
Für mich war der CPAN-Vortrag einer der interessantesten.
weitere Vorträge

Mark Overmeer's XML::Compile (wie XML::Simple, aber mit Schema) hat mein Interesse geweckt: Für einen Kunden habe ich viel XML zu lesen und zu erzeugen. Ein XML-Schema ist dabei für jeden Nachrichtentyp vorhanden.
In nicht allzu ferner Zukunft soll XML::Compile auch WSDL und SOAP verstehen und könnte damit SOAP::Lite ablösen. Auch dafür hätte ich Verwendung :-)

Nach Marc Lehmann's Vortrag zum Unicode-Modell in Perl war Jonathan Worthington mit Clarifying Roles an der Reihe. Sehr amüsant führte er in das Konzept der Rollen (Objekt-Orientierung) ein.
Außerdem noch dabei: Renee Bäcker mit Vorträgen zu UML und Tests und Thomas Klausner (Organisator der diesjährigen YAPC::Europe in Wien) mit fork und POE.
9. Deutscher Perl-Workshop - Tag 1
Beitrag von Uwe am 21.02.2007 um 23:30 Uhr | 0 Kommentare
Am ersten Tag stehen traditionell Workshops auf dem Programm. Dabei ist ein Workshop quasi ein "extra langer" Vortrag. Dieses Jahr standen zur Auswahl:
- Advanced Perl 5.10 Regular Expressions von Yves Orton
- CPAN6 von Mark Overmeer
Advanced Perl 5.10 Regular Expressions

Ich habe mich für den ersten Workshop (reguläre Ausdrücke) entschieden. Yves "demerphq" Orton ist Maintainer der Perl-RegExp-Engine. Er stellte neue Funktionen für Reguläre Ausdrücke der kommenden Perl-Version 5.10 vor.
Mit Named Capture Buffers kann man Gruppierungen ( .. ) benennen. Bisher ist ein Zugriff ja nur über $1 usw. möglich. Dies ist besonders in der folgenden Situation nützlich:
/(buffer-1) $user_regexp (buffer-nummer-unbekannt)/
Hier ändert sich die Nummer des zweites Buffers, wenn die vom User übergebene RegExp ebenfalls eine Gruppierung enthält.
Mittels benannter Buffer (?<name> .. ) und \k<name> gehört dieses Problem der Vergangenheit an. Dabei sind die Namen nur Aliase für die Nummern. Yves hat dies an ein paar Beispielen demonstriert.
Eine weitere Neuerung sind relative Rückverweise (backreferences) mit \g{-1}. Damit kann z. B. auf die letzte Gruppierung zurückgegriffen werden.
Um den (globalen) Geschwindigkeitsverlust bei der Verwendung von $\`, $& oder $´ zu vermeiden, gibt es einen neuen Modifier /p. Das Ergebnis des Matches steht dann in ${^MATCH}, der Teilstring davor und danach in ${^PREMATCH} bzw. ${^POSTMATCH} zur Verfügung.
Man kann also gespannt sein auf die Version 5.10 von Perl (die noch dieses Jahr erscheinen wird).
Office-Automation mit Perl

Nach der Mittagspause war Max "corion" Maischein dran. Bei ihm ging es um die Fernsteuerung von Microsoft Excel mittels Win32::OLE. OLE steht für "Object Linking and Embedding", ein von Microsoft entwickeltes Protokoll, das die Zusammenarbeit verschiedener Anwendungen erlaubt.
Auf Nicht-Windows-Plattformen können mittels SpreadSheet::ParseExcel und SpreadSheet::WriteExcel Excel-Dokumente bearbeitet werden.
Die Dokumentation ist sehr umfangreich, was allerdings den Einstieg etwas erschwert. Max empfiehlt daher, den Office Makro-Recorder zu benutzen. Dieser erzeugt Visual Basic (VBA) Kode, welcher sich recht einfach in Perl umwandeln läßt.
Als Beispiel dient ein Perl Programm, welches mittels einer Pivot-Tabelle einen Chart erstellt und speichert.
weitere Vorträge
Einige weitere Vorträge möchte ich nur kurz zusammenfassen. Der Catalyst-Vortrag von Simon Dassow war eine Zusammenfassung bewährter Catalyst-Plugins. Alvar Freude's Performance-Optimierung enthielt viel bekanntes. Sehr zu empfehlen ist in diesem Zusammenhang Nicholas Clark's When perl is not quite fast enough (Folien als PDF). Im letzten Vortrag des Tages stellte Marc Lehmann Crossfire+, ein Online-Rollenspiel in Perl, vor.
9. Deutscher Perl-Workshop - Tag 0
Beitrag von Uwe am 20.02.2007 um 22:20 Uhr | 0 Kommentare

Gegen Mittag ging es mit Florian "rafl" Ragwitz, ebenfalls ein Chemnitzer Perl-Monger, los in Richtung München. In unserer Herberge angekommen, haben wir Steffen Schwigon getroffen.

Abends ging es dann ins Bachmaier Wirtshaus. Dort trafen sich das Orga-Team und einige Vortragende (Bilder reiche ich nach).
Treffen der Perl-Programmierer in München
Beitrag von Uwe am 13.02.2007 um 11:42 Uhr | 0 Kommentare
Bald ist es wieder so weit: Vom 21. bis 23. Februar findet der Deutsche Perl-Workshop statt. Dieses Jahr ist bereits das neunte mal. Für mich ist es erst die vierte Teilnahme (2003 in Bonn, 2005 in Dresden, 2006 in Bochum und 2007 in München).
Der Zeitplan hält einige interessante Vorträge bereit (interessant = nach meinem Geschmack):
- Advanced Perl 5.10 Regular Expressions (Workshop mit Yves Orton)
- Office-Automation
- Catalyst und Jifty
- memcached
Ich habe mir fest vorgenommen, jeden Tag in meinem Perl-Blog darüber zu berichten, damit auch "Nicht-Anwesende" sich informieren können.
Andy ist zurück: Template-Toolkit 2.18
Beitrag von Uwe am 09.02.2007 um 22:46 Uhr | 1 Kommentar
Bereits vor kurzem hatte ich von einer neuen Template-Toolkit-Version berichtet. Inzwischen gab es sogar noch ein weiteres "Notfall-Release" von Adam Kennedy. Doch nun hat sich der "echte" Autor Andy Wardley wieder mit einer neuen Version zurückgemeldet.
Neben Adam's Änderungen gibt es auch eine interessante Neuerung:
Changed the parser grammar to accept expressions as arguments to a subroutine, method or virtual method call. I'm embarrassed to admit that it was a one line change that could (and should) have been made long ago, if only I had realised just how trivial it was. Anyway, you can now write nested expressions like this: [% add(a+5, b < 10 ? c : d + e*5) %]
Ich habe mich nämlich schon oft geärgert, daß man als Argument keine Ausdrücke angeben kann. String-Konkatenation war über Interpolation möglich, aber sonst mußte man eine Zwischenvariable verwenden.
Morgen gleich mal installieren...
Template-im-Template mit Template-Toolkit
Beitrag von Uwe am 06.02.2007 um 14:06 Uhr | 4 Kommentare
Das Template-Modul meiner Wahl ist das Template-Toolkit von Andy Wardley (nicht verunsichern lassen, vom Template-Toolkit Version 2.16 von Adam Kennedy). Vor einigen Jahren habe ich noch mein eigenes Template-System verwendet.
Heute möchte ich einen kleinen "Trick" vorstellen, wie man mit einem Template ein Template erstellen kann. Dies kommt bei diesem Perl-Blog zum Einsatz (bei dem CGI-Skript für die Kommentare).
Normalerweise verwendet Template-Toolkit (kurz: TT2 oder TT) [% und %] als öffnendes und schließendes Tag. Möchte man nun mit einem Template ein Template erstellen, soll ja die Ausgabe wiederum diese Tags enthalten. Normalerweise entfernt TT2 ja alle Tags. Man kann sich nun mit Variablen behelfen:
[% SET tag_open = '[%' %] [% SET tag_close = '%]' %] [% SET var = 'data.name' %] [% tag_open _ ' ' _ var _ ' ' _ tag_close %]
Dies würde das folgende Template ergeben:
[% data.name %]
Es gibt aber einen eleganteren Weg: TT2 erlaubt die Verwendung alternativer Tags. Mit START_TAG und END_TAG kann man das öffnende und schließende Tag separat angeben, mit TAG_STYLE kann man zwischen verschiedenen Vorgaben wählen:
| Style | Tags |
|---|---|
| template | [% und %] |
| template1 | [% und %] oder %% und %% |
| metatext | %% und %% |
| star | [* und *] |
| php | <? und ?> |
| asp | <% und %> |
| mason | <% und > |
| html | <!-- und --> |
Das obige Template sähe unter der Verwendung von TAG_STYLE => 'star' folgendermaßen aus:
[% SET var = 'data.name' %] [* [% var %] *]
Natürlich ist das jetzt ein sehr einfaches Beispiel, aber man kann die Ersparnis und Übersichtlichkeit schon erahnen. Zu beachten ist bloß, wo man welche Tags verwendet: Im obigen Beispiel verwendet das template-erzeugende Skript die Standard-Tags ([% und %]), während das erzeugte Template den Tag-Style star ([* und *]) verwendet. Dies gibt man bei der Erzeugung des TT2-Objektes an:
use Template; my $tt2 = Template->new({TAG_STYLE => 'star'}) or die "no TT2"; $tt2->process(...);
Social Event
Doch damit war der Tag noch nicht beendet. Am ersten Veranstaltungstag findet traditionell das "Social Event" statt. (In früheren Jahren von O'Reilly gesponsort - diesmal war davon keine Rede mehr.)
Geschmeckt hat es und wir haben uns auch gut unterhalten. Ich kann mich nur noch an "Pairprogramming" erinnern :-)