Monday, April 01, 2013

Buttons mit Bild in Perl/Tk und Tkx

Heute stand ich vor der Aufgabe in Tkx einen Button mit Bild umzusetzen. Wie das in Tk geht, wusste ich noch. Bei Tkx betrat ich Neuland. Wie es gemacht werden kann, wird in diesem kurzen Artikel aufgezeigt.

Button mit Bild in Perl/Tk

 "Wie das in Tk geht, wusste ich noch." 

#!perl

use strict;
use warnings;
use Tk;
use Tk::PNG;

my $png_image_file = 'media-playback-start-7.png';

my $mw = Tk::MainWindow->new();

my $pic = $mw->Photo(-file => $png_image_file);
my $btn = $mw->Button(

    -text => "Button mit PNG-Datei als Bild",
    -compound => 'top',
    -image => $pic,
);
$btn->pack(-padx => 10, -pady => 10,);

$mw->MainLoop();
exit(0);


Da das Bild eine PNG-Datei war, muss ein entsprechender Loader für Tk eingebunden werden:

use Tk::PNG;

Anschließend wird per Tk::Photo ein Bild-Objekt erzeugt: 

my $pic = $mw->Photo(-file => $png_image_file);

Damit sowohl der Text als auch das Bild angezeigt werden, wird die compound-Option des Buttons angegeben. Der Wert 'top' gibt an, dass sich das Bild oberhalb des Textes befinden soll:

my $btn = $mw->Button(
    -text => "Button mit PNG-Datei als Bild",

    -compound => 'top',
    -image => $pic,
);


Das Ergebnis sieht wie folgt aus:





Button mit Bild in Tkx

Die größte Herausforderung für mich bestand darin, herauszufinden, wie man den Loader für PNG-Dateien in Tkx angibt. Ohne diesen Loader erhält man folgende Fehlermeldung:

couldn't recognize data in image file "<some_png_file_name.png>" at <path_to_script.pl> line <line_number>.

Die Meldung von Perl/Tk gestaltet sich ähnlich: " couldn't recognize data in image file"

Ist die Hürde jedoch überwunden, kann man mit nachfolgendem Code wunderschöne Bilder-Buttons erstellen:

#!perl

use strict;
use warnings;
use Tkx;
Tkx::package_require('img::png');

my $png_image_file = 'media-playback-start-7.png';

my $mw = Tkx::widget->new(".");

Tkx::image_create_photo( 'pic', -file => $png_image_file);
my $btn = $mw->new_ttk__button(

    -text => "Button mit PNG-Datei als Bild",
    -compound => 'top',
    -image => 'pic',
);
$btn->g_pack(-padx => 10, -pady => 10,);

Tkx::MainLoop();
exit(0);


Das Button mit Bild in Perl/Tkx sieht auf Windows 8 so aus:


Quellen

Das Bild stammt aus der Open Icon Library: http://openiconlibrary.sourceforge.net

Saturday, March 23, 2013

Jenkins + nginx

Nur als Notiz für mich selbst:

Nach der Umstellung von Apache auf nginx als Reverse Proxy konnte ich im Jenkins keine Pakete mehr manuell bauen. In den Logs war dann folgendes zu finden:

Mar 23, 2013 5:21:08 PM hudson.security.csrf.CrumbFilter doFilter
WARNING: No valid crumb was included in request for /job/GPW/build. Returning 403.

Bei AJAX-Requests wird ein Header ".crumb" mitgeschickt - zum Schutz vor CSRF. nginx filtert aber invalide Header raus. Ein Workaround wäre, bei nginx das Filtern auszuschalten. Will ich aber nicht. Deswegen einfach in der /etc/init.d/jenkins einfach den Aufruf etwas anpassen:

[...]$JAVA $JAVA_ARGS -Dhudson.security.csrf.requestfield=X-Jenkins-crumb -jar $JENKINS_WAR $JENKINS_ARGS[...]

Damit wird der Header X-Jenkins-crumb verwendet. Und alles funktioniert wieder...

Tuesday, March 05, 2013

Frankfurt.pm // German Perl-Tour Teil 2

Heute gab es den zweiten Teil meiner "German Perl Tour 2013". Zur Erinnerung: Ich habe vor, in diesem Jahr in 8 deutschen Städten an Perlmonger-Treffen teilzunehmen. Nachdem ich im Februar bei den Hannover Perlmongers war, stand heute ein Heimspiel auf dem Plan: Frankfurt.pm

Max und ich haben uns schon etwas früher getroffen, um ein paar Arbeiten für den Deutschen Perl-Workshop in der nächsten Woche zu erledigen: Rechnungen müssen bezahlt werden, iZettle muss aktiviert werden, Listen wer bezahlt hat und wer nicht müssen ausgetauscht werden und noch ein paar Kleinigkeiten mehr. Da fällt mir ein: Wir sind immer noch auf der Suche nach einem Austragungsort für den Perl-Workshop 2014. Welche Perlmonger Gruppe möchte diese Aufgabe übernehmen? Ein paar Aufgaben habe ich mal bei Perl-Community.de gesammelt.

So nach und nach sind noch weitere Perlmonger in die MoschMosch Nudelbar in den Baseler Arkaden gekommen. Auch einen Neuzugang hatten wir heute zu verzeichnen. Herzlich Willkommen, Udo. Wir würden uns freuen, wenn Du jetzt häufiger bei uns auftauchen würdest.

Anfangs haben Thomas, Max und ich noch unsere "Jahresplanung" gemacht. Bei welchen Events wollen wir dabei sein und was wollen wir dort anstreben... So wollen wir versuchen, auf der diesjährigen FrOSCon (24./25. August 2013 in St. Augustin) einen Stand zu bekommen und auch wieder einen Perl Dev-Room zu füllen. Sollten wir den Raum bekommen, wollen wir dort Workshops z.B. zu Mojolicious und/oder Dancer anbieten. Außerdem wollen wir versuchen, zwei oder drei Perl-Vorträge ins Hauptprogramm zu bekommen. Aber noch gibt es keinen "Call for Papers" und "Call for Projects". Wir werden unsere Vorschläge einreichen wenn es soweit ist und hoffen, dass uns die FrOSCon-Orgas wohlgesonnen sind ;-)

Weitere Events sind in der nächsten Woche die Chemnitzer LinuxTage, bei denen Thomas und ich als Teilnehmer dabei sind. Ich werde dann von dort berichten.

Eine weitere Veranstaltung, an der wir teilnehmen wollen ist die OpenRheinRuhr, die nach einem Jahr Pause in diesem Jahr wieder stattfindet.

Gerade bei den FrOSCon-Überlegungen ist Thomas zu der Idee gekommen, dass es ein zentrales Repository mit Schulungsunterlagen und Vorträgen für solche Events geben sollte. Warum sollten wir nicht von den Erlanger Vorbereitungen für den Dancer-Workshop auf den Chemnitzer LinuxTagen oder von rhaens Vorbereitungen des Mojolicious/Moo-Workshops profitieren? Wir würden auch anderen unsere Vorbereitungen zur Verfügung stellen. Ich  werde mich auf dem Perl-Workshop mal mit den anderen darüber unterhalten...

Ich habe auch kurz vom Orgatreffen für das "Große Usergruppentreffen" im Juni berichtet. Dort wollen wir Frankfurt Perlmongers auch vertreten sein.

Auch Nicht-Perl-Themen haben einen Platz bei uns. So war das Milliardenloch der Deutschen Bahn in Stuttgart und das Urteil zu den Regionalbahnhöfen sowie die tollen Anzeigen bei Verspätungen ein Thema. Wobei ich ja immer noch ganz gerne mit der Bahn fahre, so dass ich - wie jetzt auch - Blogartikel oder Artikel fürs Perl-Magazin schreiben kann.

DE-Mail war ein weiteres Thema, und hier haben wir uns gefragt, warum man denn so ein Postfach haben sollte. Dass Behörden und (Versicherungs-)Wirtschaft davon profitieren ist klar, aber für den Verbraucher gibt es in meinen Augen nur "Pseudovorteile".

Weitere Themen des Treffens:

 * Ingres-Game von Google
 * XML-Erzeugung auf Basis eines XML-Schemas, z.B. mit XML::Compile
 * Rechtsschutzversicherungen
 * Berlin vs. Kanada ;-)
 * (Humanoide) Roboter, Drohnen, Einsatz der Roboter
 * Rex, OTRS und CMDB
 * SAP-Einführung, SAP von Perl aus ansprechen
 * COBOL
 * Moe, Groovy, JVM
 * und vieles mehr

Für mich war es ein Frankfurt.pm-Treffen nach längerer Pause. Es hat wieder Spaß gemacht und heute ein neues Gesicht begrüßen zu dürfen war schön. Es dürfen ruhig noch mehr werden ;-)

Friday, March 01, 2013

Perl@Chemnitzer LinuxTage 2013

Wer auf dem Deutschen Perl-Workshop noch nicht genug von Perl bekommt, der kann direkt weiterfahren nach Chemnitz.

Auf den Chemnitzer LinuxTage (16./17. März) gibt es einen Perl-Stand, einen Perl-Vortrag von lichtkind und einen Dancer-Workshop.

Dank an die Erlanger Perlmongers, die den Stand betreuen und den Workshop halten (weitere Hilfe am Stand ist natürlich gern gesehen).

Ich selbst werde am 16. März auch vor Ort sein, mich mit Freunden von c.a.p.e IT und der OTRS-Community treffen und auch ein wenig am Perl-Stand verweilen.

Wednesday, February 27, 2013

Snippets Teil 1 - 100 Distributionen mit den meisten "++" auf MetaCPAN

Mojolicious ist ein Modul, das gewisse Diskussionen auslöst. Zum Einen hat es den Vortreil, dass es alle notwendigen Module mitliefert und somit keine Abhängigkeiten (außer Perl > 5.10) hat, zum Anderen nutzt es nicht CPAN.

Klingt paradox, aber genau so ist es. Viele sagen, dass Mojolicious Anti-CPAN ist und damit die Anti-CPAN-Haltung einiger Unternehmen unterstützen würde. Im Perl-Weekly Newsletter #64 sind ein paar Blogposts zu dem Thema verlinkt.

Ich kann die Argumente nachvollziehen, aber ich persönlich finde es auch eine Stärke von Mojolicious. Man kann das Modul sehr einfach auch auf Shared Webhosting Paketen installieren - man muss nicht erst noch die ganzen Abhängigkeiten installieren.

Außerdem hat Sebastian Riedel ganze Arbeit geleistet. Die Module, die die Basisarbeiten machen, sind ausgereift und haben einige nette Features. Eines der Module, die ich im Moment am häufigsten verwende ist Mojo::UserAgent (und hat damit LWP::UserAgent abgelöst). Gerade wenn ich irgendwelche JSON-APIs von Webseiten abfragen möchte, ist es schnell und einfach. Und ich kann aus der Antwort schon direkt den geparsten JSON-Part holen und mit einem Auszug daraus arbeiten.

Hier ein Beispiel wie man die Distributionen auf MetaCPAN bekommt, die die meisten "++" bekommen haben:



#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';
use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new;

my $res = $ua->post(
    'http://api.metacpan.org/v0/favorite/_search' => json => {
          "query" => { 
            "match_all" => {}
           },
          "facets" => { 
            "leaderboard" => {
              "terms" => {
                "field" => "distribution",
                "size"  => 100
          } } },
          "size" => 0
    }
);

my $terms = $res->res->json( '/facets/leaderboard/terms' );
say $_->{term} for @{$terms};

Saturday, February 23, 2013

Hilfe beim Auffinden von Typos

Für mich ist es recht wichtig, dass Kommentare und Dokumentation keine Rechtschreibfehler haben. Leider lässt sich das nicht immer verhindern. Um in OTRS möglichst viele Fehler auszumerzen habe ich mir ein kleines Hilfsskript geschrieben.

Ich habe vorher noch Text::Aspell installiert, damit es das Wörterbuch etc. von aspell verwendet.


#!/usr/bin/perl

use strict;
use warnings;

use feature 'say';

use PPI;
use Search::Tools::SpellCheck;
use File::Basename;
use File::Find::Rule;
use List::Util qw(first);

my $dir = $ARGV[0];

if ( !$dir || !-d $dir ) {
    say "$0 ";
    exit;
}

my @files = File::Find::Rule->file->in( $dir );

my $spellchecker = Search::Tools::SpellCheck->new(
    max_suggest => 4,
    lang        => 'en_US',
);

FILE:
for my $file ( @files ) {

    # skip hidden files
    my $filename = basename( $file );
    next FILE if $filename =~ m{ \A \. }xms;

    # skip some files
    next FILE if first{ $filename eq $_ }( qw/INSTALL INSTALL.SuSE INSTALL.RedHat README CHANGES/ );
   
    # skip some files based on path
    next FILE if $file =~ m{/scripts/}xms;
    next FILE if $file =~ m{/Language/}xms;

    # skip some file types (based on suffix)
    next FILE if $file =~ m{ \.(?:gif|png|js) \z }xms;

    # check for typos in comments
    my $comments = extract_comments( $file );
    if ( $comments ) {
        $comments =~ s/note:/note/;

        eval {
            my $suggestions_for_comments = $spellchecker->suggest( $comments ) || [];
            print_suggestions( $file, $suggestions_for_comments );
        };
    }

    # skip if the file if it's not a perl file
    next FILE if $file =~ m{ \.(?:pm|pl) \z }xms;

    # check for typos in pod
    my $pod = extract_pod( $file, {} );
    if ( $pod ) {
        $pod =~ s/note:/note/;

        eval {
            my $suggestions_for_pod = $spellchecker->suggest( $pod ) || [];
            print_suggestions( $file, $suggestions_for_pod );
        };
    }
}

sub print_suggestions {
    my ($file, $suggestions) = @_;

    return if !@{ $suggestions };

    say $file, ':';
    for my $suggestion ( @{ $suggestions } ) {
        next if ref $suggestion ne 'HASH';
        next if first{ $suggestion->{word} eq $_ }(qw/agpl txt otrs ag www html/);
        next if $suggestion->{word} =~ m{ \A (?:\d+|\d+-\d+(?:-\d+)?) \z }xms;
       
        say $suggestion->{word}, ' -> ', join ' __ ', @{$suggestion->{suggestions}} 
            if $suggestion->{suggestions} &&; @{ $suggestion->{suggestions} };
    }
}

sub extract_comments {
    my ($file) = @_;

    return if !$file || !-f $file;

    my $content = '';

    if ( open my $fh, '<', $file ) {

        while ( my $line = <$fh> ) {
            my  ($comment) = $line =~ m{ [#](.*) }xms;
            next if !$comment;

            $content .= ' ' . $comment;
        }
    }

    return $content;
}

sub extract_pod {
    my ($file, $config) = @_;

    return if !$file || ! -f $file;

    my $content;

    if ( open my $fh, '<', $file ) {

        if ( $config->{encoding} ) {
            binmode $fh, ':encoding(' . $config->{encoding} . ')';
        }

        local $/;
        $content = <$fh>;
    }

    my $pod = extract_pod_from_code( $content );

    return $pod;
}

sub extract_pod_from_code {
    my ($code) = @_;

    return if !$code;

    my $parser    = PPI::Document->new( \$code );

    return if !$parser;

    my $pod_nodes = $parser->find(
        sub {
             $_[1]->isa( 'PPI::Token::Pod' );
        },
    );

    my $merged = PPI::Token::Pod->merge( @{$pod_nodes || []} );

    return '' if !$merged;
    return $merged->content;
}



Einige Dateien musste ich rausnehmen, weil Search::Tools::SpellCheck ziemlich schnell Fehler wirft. Das ist auch der Grund, warum ich dann "eval" benutzt habe...

Wer noch Ideen hat, wie man das ganze verbessern kann, dann immer her damit. Das Prozedere hat noch einige Schwächen, weil auch Sachen wie "AG", "AGPL", "HTML" etc. agemeckert wird. Dadurch bekommt man ziemlich viele "False Positives" und man muss bei einem Projekt wie OTRS einige zehntausend Zeilen durchschauen um die wirklichen Fehler zu finden.

Es werden auch einige Fehler nicht gefunden...

Thursday, February 14, 2013

Hannover.pm // German Perl-Tour Teil 1

Ich habe mir für 2013 vorgenommen, an Perlmonger-Treffen in mindestens 8 deutschen Städten teilnehmen. Ich finde es immer wieder spannend, andere Gruppen zu treffen und zu sehen was in anderen Städten so
los ist.

Auf Grund Arbeit und Familie war mein erstes Perlmonger-Treffen 2013 nicht in Frankfurt, sondern in dieser Woche in Hannover. Ich war hier vor Ort, weil ich hier eine Perl-Schulung gehalten habe. Das Treffen von Hannover.pm fand dann am 13.02. im PSV Hannover statt. Laut Doodle waren "nur" 6 Personen angemeldet, aber im Endeffekt waren wir zu acht.

Was mir sehr gut gefallen hat war, dass die Gruppe immer/meistens einen extra Nebenraum mit großen Fernseher hat. Man ist in einer Gaststätte (hat damit Verpflegung), hat aber Ruhe um sich zu unterhalten und mit dem großen Fernseher kann man auch mal spontan etwas zeigen.

Delticom, einer der Sponsoren des Deutschen Perl-Workshops, war mit drei Mann ganz stark vertreten. Reifen habe ich online zwar noch nicht gekauft, aber gut zu wissen, dass reifendirekt.de mit Perl umgesetzt wurde.

Ansonsten war noch Wolfgang von heise da und wo die drei anderen gearbeitet haben, habe ich leider wieder vergessen.

burnersk hat eine kurze Tech-Demo gegeben: Er hat eine kleine Anwendung mit Dancer und DBIx::Class geschrieben. Für mich war das interessant, weil ich eher zu den Mojolicious-Anhängern gehöre und noch nicht so viel mit Dancer zu tun hatte.

Es sah ganz nett aus, da Dancer mir -- soweit ich weiß -- keinen Vorteil bringt, bleibe ich bei Mojolicious. Aber der Vortrag hat mich auch wieder daran erinnert, dass ich mit Corion mal einen kleinen Dancer/Mojolicious-Shootout machen wollte.

Jedenfalls will burnersk mit der Anwendung seine "Haushaltsausgaben" tracken und sich dann Einsparvorschläge machen lassen.

Nach dem Essen habe ich kurz ein paar Sachen von mir vorgestellt: Zum einen OPAR, einem Repository für freie OTRS-Erweiterungen. Eigentlich habe ich das nur kurz vorgestellt, weil einer der Anwesenden erzäht hat, dass "sein Unternehmen" OTRS einsetzt. Wir haben uns auch kurz darüber unterhalten, dass es nicht so einfach ist, Patches im OTRS-Kern unterzubringen.

AUf der OTRS-Mailingliste habe ich jetzt gelesen, dass das OTRS-Repository auf Github.com wandern soll. Dann wird es hoffentlich einfacher, Patches einzureichen und dass diese auch in den Kern eingepflegt werden.

Nach OPAR habe ich dann perlybook.org vorgestellt. Mit dieser Seite kann man die Dokumentationen von CPAN-Modulen als ebook (.mobi oder .epub) bekommen.

burnersk hat seinen E-Book-Reader rausgeholt und mal kurz gezeigt, wie die Dokumentation dann auf so einem Reader aussieht. Es macht mir natürlich Freude zu sehen, dass perlybook.org tatsächlich verwendet wird (und nicht nur von mir).

Auch die Perl-Tutorials von perltuts.com gibt es hier als EBooks. Vielleicht auch mal hier der Aufruf an alle, Ideen zu liefern was man noch so einbinden könnte. Wir können relativ einfach alle POD-Quellen einbinden,
Aktuell arbeite ich in meiner Freizeit an einer GithubT-Integration. Viel Dokumentation findet man einfach auf Github. Auch die Texte für den Perl-Adventkalender liegen dort.

Wo wir schon bei Github waren, habe ich auch gleich auf ein Modul hingewiesen, das momentan nur auf Github und nicht auf CPAN zu finden ist: Excel-Reader-XLSX von John McNamara (der auch Spreadsheet::WriteExcel macht). Es gibt zwar einen XLSX-Parser auf CPAN, aber der verbraucht extrem viel Speicher. Bei einem Kunden hat das mal den gesamten Server lahmgelegt. John McNamara sagt zwar, dass das Modul noch im Beta-Status ist, aber es funktioniert einwandfrei.

Ansonsten haben wir uns viel über Ausbildung, (schlechte) Berufsschulen und die aktuelle Situation von Unternehmen die Perl-Programmierer suchen. Es ist für diese immer noch sehr schwer wirklich Perl-Leute zu finden.

Weitere Themen, die mir jetzt so spontan einfallen:

 * Stackoverflow
 * Perlprogrammierende Inder
 * Hotels/Hostels in Hannover
 * airbnb

Mir hat das Treffen viel Spaß gemacht und ich freue mich, einige im nächsten Monat auf dem Deutschen Perl-Workshop wiederzutreffen. Danke @HannoverPM

Monday, February 11, 2013

Helau! - Frühjahrsausgabe des Perl-Magazins ist da...

In wenigen Tagen beginnt die Fastenzeit, aber auf das Perl-Magazin muss man nicht verzichten. Die Frühjahrsausgabe 2013 des Perl-Magazins (http://perl-magazin.de) ist da...


Inhalt dieser Ausgabe:

 * Ist Dein Code Perl-5.18-sicher?

   Am Hashing ändert sich in Perl 5.18 einiges. Für den normalen Programmierer kaum sichtbar, kann es in wenigen Fällen doch zu Problemen kommen - wenn man sich auf die Reihenfolge von Schlüsseln verlässt.

 * HowTo - Algorithm::CheckDigits

   Thomas Fahle stellt das Modul Algorithm::CheckDigits vor, dass die Überprüfung von Prüfziffern z.B. von ISBN oder Kreditkarten umgesetzt werden kann.

 * SEX: Stream EXchange mit F*EX

   Mit F*EX können beliebig große Dateien an beliebige Empfänger verschickt werden. Ullrich Horlacher stellt mit SEX eine Erweiterung vor, mit der ein Datenstrom an einen Empfänger geleitet werden kann.

 * Mojolicious Tutorial - Teil 2

   In diesem Teil des Mojolicious-Tutorials wird das erste Formular umgesetzt. Dabei wird auch gezeigt, wie man auf die unterschiedlichen Parameter (Route, GET und POST) zugreifen kann. Außerdem werden die Unterschiede verschiedener Umgebungen aufgezeigt. Schließlich werden noch die ersten Plugins für Mojolicious vorgestellt.

 * Synchrone Operationen sind überholt

   SawyerX gibt eine Einführung in asynchrone Programmierung. Dazu verwendet er das Modul AnyEvent.

 * Rezension - Leidenschaft und Perl

   Auch in dieser Ausgabe stellt Herbert Breunung zwei Bücher vor: Der leidenschaftliche Programmierer ist kein Perl-Buch, könnte aber trotzdem interessant sein. Perl ist ein Buch aus dem mitp-Verlag -- genau wie das erstgenannte Buch -- das eine Einführung in Perl gibt.

 * Rezension - SQL Performance Explained

   Das Buch "SQL Performance Explained" wird vorgestellt.

 * TPF News

   Jede Menge Neuigkeiten aus der Perl Foundation.

 * CPAN-News

   Neben zwei ausführlicheren Vorstellungen werden wieder vier weitere neue Module auf dem CPAN vorgestellt.

Tuesday, January 29, 2013

Die Veranstaltungszeit beginnt

Hallo Perl-Freunde,

das Jahr ist gerade 4 Wochen alt, da beginnt schon die Veranstaltungssaison:

* FOSDEM mit Perl Dev-Room (2. & 3. Februar)
* 15. Deutscher Perl-Workshop (13.-15. März)
* Chemnitzer LinuxTage (16. & 17. März)
* 1. Schweizer Perl-Workshop (22. März)
* LinuxInfo Tag Augsburg(23. März)


FOSDEM
------

Die FOSDEM ist eine der größten Veranstaltungen rund um Free und Open Source Software. Nachdem es in den ersten Planungen keinen Perl-Raum gegeben hat und kurzfristig eine andere Entwicklergemeinde absagen musste, wurden kurzfristig Vorträge für einen Perl-Raum gesucht. Der Plan ist jetzt online:

https://fosdem.org/2013/schedule/track/perl/



15. Deutscher Perl-Workshop
---------------------------

Die älteste Perl-Konferenz findet zum 15. Mal statt -- diesmal vom 13. bis 15. März in Berlin. An drei Tagen gibt es jede Menge Vorträge und viel Gelegenheit, sich mit anderen Perl-Leuten zu unterhalten.


http://act.yapc.eu/gpw2013/

Mittlerweile ist der Ticketkauf freigeschaltet, also nichts wie hin ;-)



Chemnitzer LinuxTage
--------------------

Direkt im Anschluss an den Deutschen Perl-Workshop kann man weiter nach Chemnitz fahren und den Chemnitzer LinuxTagen beiwohnen. Hier wird es einen Perl-Stand geben und einige Erlanger Perlmongers bereiten einen Dancer-Workshop vor.

http://chemnitzer.linux-tage.de/2013/



1. Schweizer Perl-Workshop
--------------------------

Eine neue Perl-Veranstaltung erblickt das Licht der Welt: am 22. März findet in Bern der erste Schweizer Perl-Workshop statt. Unterstützt unsere eidgenössischen Perl-Freunde und schaut auf dem Workshop vorbei.

http://act.perl-workshop.ch/spw2013/



LinuxInfo Tag Augsburg
----------------------

Von Bern aus geht es direkt nach Augsburg ;-) Am 23. März findet an der Hochschule Augsburg der Linux Infotag statt. Ulrich Habel wird dort einen Workshop zu Moo und Mojolicious halten. Die Teilnahme am Linux Infotag ist kostenlos.

http://www.luga.de/Aktionen/LIT-2013/

Thursday, November 08, 2012

Der Winter kann kommen - die Winterausgabe des Perl-Magazins ist da

Inhalt der  Winter-Ausgabe:

 * Subroutinen Prototypen

   Viele Perl-Programmierer verwenden Subroutinen-Prototypen ohne dass sie verstehen wofür diese Prototypen da sind.

Doch was sagen diese Prototypen aus? In anderen Sprachen werden solche Prototypen/Signaturen dafür verwendet, um herauszufinden welche Subroutine aufgerufen wird (falls mehrere Subroutinen mit dem gleichen Namen existieren) und die weitergegebenen Parameter zu prüfen. 

Dieser Artikel zeigt, wofür man in Perl die Subroutinen-Prototypen verwenden kann und wo Fallen lauern.

 * Compile- vs. Runtime

   #!/usr/bin/perl

$lib = '/path/to/libs';
use lib $lib;
use AnyModule;

So oder so ähnlich findet man es in vielen Programmen und Anfänger wundern sich, warum das nicht funktioniert. Ein Grund, sich etwas näher mit dem Ablauf eines Perl-Programms zu beschäftigen und sich anzuschauen, was wann passiert. Wenn "perl script.pl" aufgerufen wird, werden mehrere Phasen durchlaufen. 

Dieser Artikel zeigt und erläutert die Phasen die durchlaufen werden und welche Fallstricke lauern.

 * Operatoren überladen

    Eigentlich alle Objektorientierten Sprachen kennen den Begriff des Überladens. In den meisten Sprachen - wie z.B. Java - werden Methoden überladen, damit je nach Anzahl oder Art der Parameter die richtige Methode aufgerufen wird. Perl bietet weder Methoden-Signaturen noch das Überladen von Methoden. Deshalb ist der Begriff frei für etwas anderes: Operatoren überladen.

In Perl können alle Built-in Operatoren für eine Klasse mit einer neuen Bedeutung versehen werden, aber wozu das Ganze? 

Genau das zeigt dieser Artikel.

 * WxPerl-Tutorial - Teil 12

   Was tun wenn das gewünschte Widget nicht existiert? Selber bauen! Die letzte Folge des WxPerl-Tutorials deutet an wie es geht, denn alle Techniken wurden bereits beschrieben und Listings zu eigenen Widgets sind ungleich länger und besser im Netz aufgehoben. Dieser Teil beendet zugleich auch dieses Tutorial. Falls ein gesuchtes Thema nicht behandelt wurde, wie etwa 3D-Graphik per Wx::GLCanvas oder Anwendungen die mehrere Prozessorkerne beschäftigen können, sei noch einmal auf das gerade unter http://bitbucket.org/lichtkind/wxperlbook entstehende Wx Perl-Buch verwiesen. Es wird auch einige nützliche Werkzeuge als Beispielprogramme enthalten, gekrönt von einem bequemen Dokumentationsbetrachter namens Dokular, der erst einmal eine bessere Übersicht über Wx Perl bieten soll. 

 * XML::Compile und SOAP

    In der Ausgabe 03/2012 dieses Magazins hat Mark Overmeer die Grundlagen der Handhabung von XML in Perl erklärt. Verwendet hat er hierzu das Modul XML::Compile. Dieses Modul erstellt strikte Konverter von XML-Nachrichten in komplexe Perl-Datenstrukturen und umgekehrt.

Die meisten Perl Module versuchen nach dem DWIM (Do What I Mean) - Prinzip vorzugehen um den Aufwand für den Programmierer so gering wie möglich zu halten: der Code vermutet, wie er sich zu verhalten hat. Wenn die XML Nachricht durch ein "schema" - der formalen Spezifikationssprache von Nachrichtenstrukturen - definiert ist, ist DWI Ming gefährlich: die Prüfung auf Richtigkeit der Struktur ist standardmäßig notwendig. DWI Ming könnte falsch liegen. 

In dieser Ausgabe zeigt Overmeer, wie XML::Compile die Verwendung von SOAP-Schnittstellen vereinfacht und warum SOAP::Lite nicht so wirklich Leichtgewichtig ist.

 * Mojolicious Tutorial - Teil 1

   In der letzten Ausgabe wurde bereits eine Mini-Einführung in Mojolicious gegeben. Ab dieser Ausgabe soll ein ausführlicher Einstieg gezeigt werden. Der Einstieg sollte sehr leicht werden, weil das Framework außer Perl 5.10.x keine Voraussetzungen hat. Alle notwendigen Module werden mitgeliefert. Im Laufe des Tutorials soll eine Webanwendung programmiert und erweitert werden, bei der Läufer ihre täglichen Zeiten und Kilometer eintragen können. 

Im ersten Teil des Tutorials wird auf das Routing eingegangen. Auch die Built-in-Templatesprache von Mojolicious und Stashes sind Thema.

 * Rezension - Arbeitsgrundlage

   Zurück zu den Wurzeln. Dieses Mal geht es um Wissen, dass man für seine professionelle Programmierarbeit unbedingt besitzen sollte. Das neue Beginning Perl will die berechtigte Frage beantworten: "Womit muss man vertraut sein, um reale Aufträge selbständig lösen (... und sich die restlichen Details im Netz selbst heraussuchen) zu können?". Im zweiten Buch von Mathias Geirhos geht es darum, wie das Projekt geplant und durchführt wird, ohne das man selbst oder das Vorhaben darunter leidet. Doch zum Einstieg soll es um winzige Perlskripte gehen, welche bei den kleinen, nebenbei anfallenden, Arbeiten nützlich sind.

 * Sonstiges

   Auch in dieser Ausgabe dürfen die CPAN-News nicht fehlen. Es werden 6 neue Module auf CPAN vorgestellt. Neu ist die Kategorie P5P News, die über die Geschehnisse bei den Perl 5 Porters berichtet. Aber auch die Neuigkeiten aus der Perl Foundation finden in dieserAusgabe einen Platz.

Thursday, October 04, 2012

Frankfurter Perl-Community Workshop

Am 03./04. November findet im Jugendhaus des DGB der diesjährige Frankfurter Perl-Community Workshop statt.

Die Teilnahme ist kostenlos. Ein festes Programm wird es nicht geben, da wir den Zeitplan immer dynamisch erstellen und anpassen. So kann man ein eigentlich "kleines" Thema auch mal zwei Stunden diskutieren oder man kurzfristig noch einen Vortrag einschieben.

Der Workshop ist auch eine gute Gelegenheit, Vorträge für z.B. den nächsten Deutschen Perl-Workshop zu üben ;-)

Wer am Workshop teilnehmen möchte, sollte sich ins Wiki bei Perl-Community.de eintragen.

Tuesday, September 18, 2012

Kundendaten aus vTiger in OTRS nutzen

Kundendaten an mehreren Stellen pflegen ist unklug, da sich dann immer wieder Fehler einschleichen können. Aus diesem Grund ist es gut, wenn mehrere Systeme auf die gleiche Datenbasis zugreifen können.

Hier soll kurz gezeigt werden, wie man Kundendaten aus vTiger in OTRS nutzen kann.

Informationen über Kunden

Um Name und E-Mail bei der Ticketerstellung in OTRS nutzen zu können, muss man einfach nur eine neue Kundendatenquelle hinzufügen. Diese Einstellungen werden in der Datei <otrs_home>/Kernel/Config.pm hinzugefügt:

    $Self->{CustomerUser} = {
        Name   => 'VTiger CRM',
        Module => 'Kernel::System::CustomerUser::DB',
        Params => {
            DSN => 'DBI:mysql:database=vtigercrm520;host=localhost',
            User => 'dbuser',
            Password => '2357KLAFKkjsd',
            Table => 'vtiger_contactdetails',
            CaseSensitive => 0,
        },

        CustomerKey => 'email',
        CustomerID  => 'accountid',
        CustomerUserListFields => [ 'firstname', 'lastname', 'email' ],
        CustomerUserSearchFields => [ 'firstname', 'lastname', 'email'],
        CustomerUserSearchPrefix => '*',
        CustomerUserSearchSuffix => '*', 
        CustomerUserSearchListLimit => 250,
        CustomerUserPostMasterSearchFields => ['email'],
        CustomerUserNameFields             => [ 'title', 'firstname', 'lastname' ],
        CustomerUserEmailUniqCheck         => 1,

        CustomerUserExcludePrimaryCustomerID => 0,
        CustomerCompanySupport => 1,
        ReadOnly => 1,
        Map => [
            [ 'UserTitle',      'Title',      'salutation',      1, 0, 'var', '', 0 ],
            [ 'UserFirstname',  'Firstname',  'firstname', 1, 1, 'var', '', 0 ],
            [ 'UserLastname',   'Lastname',   'lastname',  1, 1, 'var', '', 0 ],
            [ 'UserLogin',      'Username',   'email',      1, 1, 'var', '', 0 ],
            [ 'UserEmail',      'Email',      'email',           1, 1, 'var', '$Env{"CGIHandle"}?Action=AgentTicketCompose&ResponseID=1&TicketID=$Data{"TicketID"}&ArticleID=$Data{"ArticleID"}', 0 ],
            [ 'UserCustomerID', 'CustomerID', 'accountid', 0, 1, 'var', '', 0 ],
            [ 'UserCompanyID',  'CompanyID',  'accountid',  0, 1, 'var', '', 0 ],
            [ 'UserPhone',      'Phone',      'phone',        1, 0, 'var', '', 0 ],
            [ 'UserFax',        'Fax',        'fax',          1, 0, 'var', '', 0 ],
            [ 'UserMobile',     'Mobile',     'mobile',       1, 0, 'var', '', 0 ],
        ],
    };


Ein paar Erläuterungen dazu:

Der "Name" ist frei wählbar, sollta aber möglichst sprechend sein, damit man auch nach ein paar Jahren weiß, was da konfiguriert wird.

Da wir mit der Datenbank von vTiger arbeiten, müssen wir als "Module" Kernel::System::CustomerUser::DB wählen. Grundsätzlich kann man verschiedene Arten von Quellen anbinden. Im Standard-OTRS sind Module für Datenbanken und LDAP dabei.

Mit den "Params" definieren wir, wie die Datenbankverbindung aussieht. Der "DSN" ist die Angabe, die das Perl-Modul DBI für den Verbindungsaufbau benötigt.

       'DBI:mysql:database=vtigercrm520;host=localhost'






Das "mysql" sagt, dass vTiger mit einer MySQL-Datenbank läuft. Wenn Sie mit PostgreSQL arbeiten, müssen Sie das Perl-Modul DBD::Pg installieren und hier im DSN statt "mysql" einfach "pg" eintragen.



Die Angabe "vtigercrm520" ist der Datenbankname und "localhost" der Host, auf dem die Datenbank läuft.


Weiterhin müssen Benutzer und Passwort der vTiger-Datenbank angegeben werden. Es empfiehlt sich, für den Zugriff einen extra Benutzer anzulegen, der nur Leserechte hat. Das CRM soll das führende System bei den Kundendaten sein.

            User          => 'dbuser',
            Password      => '2357KLAFKkjsd',



Der Tabellenname "vtiger_contactdetails" sagt ganz einfach aus, in welcher Tabelle der vTiger-Installation die Kundendaten zu finden sind.

            Table         => 'vtiger_contactdetails',

Danach folgen weitere Einstellungen, die hauptsächlich für die Suche wichtig sind.

Herauszuheben sind "CustomerKey" was aussagt, was die Verbindung zwischen den Tickets und den Kundendaten herstellt. Wenn man sich die Informationen anschaut, die zu den Tickets gespeichert werden, sieht man, dass nicht alle Kundeninformationen am Ticket gespeichert werden, sondern nur eine eindeutige Angabe. Hier eben die E-Mailadresse.

Wir setzen auch "ReadOnly" auf 1, weil keine Kundendaten im OTRS geändert werden sollen. Alles soll über vTiger laufen.

In der "Map" werden Zuordnungen von Spaltennamen in der vTiger-Tabelle zu den Attributen des Objekts und der Anzeige an der Oberfläche vorgenommen. Z.B.:

        [ 'UserFirstname',  'Firstname',  'firstname', 1, 1, 'var', '', 0 ],

sagt aus, dass das Attribut 'UserFirstname' an der Oberfläche mit "Firstname" (bzw. der Übersetzung davon) gekennzeichnet wird und mit Daten der Tabellenspalte "firstname" in vtiger_contactdetails  gefüllt wird.

Zusätzliche Attribute

Jetzt fällt auf, dass einige wichtige Angaben zum Kunden gar nicht in der Zuordnung vorhanden sind. Diese werden natürlich auch nicht an der Oberfläche angezeigt. Warum sind jetzt also nicht "Straße", "Ort" und "Land" dort angegeben? Und warum bekomme ich nur eine Zahl bei der "Kundenfirma" angezeigt?

Das hängt damit zusammen, dass diese Informationen in vTiger über mehrere Tabellen verteilt sind. Das Standard-OTRS-Modul zur Anbindung von Datenbanken kann aber nur mit einer einzelnen Tabelle umgehen.

Um diese Informationen dennoch in OTRS nutzen zu können, kann man folgenden Weg gehen: Man legt eine sogenannte "View" in der Datenbank an. Damit können Daten aus mehreren Tabellen aggregiert werden und nach außen hin sieht es wie eine einzige Tabelle aus.

In MySQL wird dazu einfach folgender Befehl ausgeführt:

CREATE VIEW otrsview
    AS SELECT vcd.*, vca.*, va.accountname
        FROM vtiger_contactdetails vcd
            LEFT OUTER JOIN vtiger_contactaddress vca
                ON contactid = contactaddressid
            LEFT OUTER JOIN vtiger_account va
                ON  vcd.accountid = va.accountid;

Jetzt nur noch in der oben gezeigten Konfiguration die Tabellenangabe von vtiger_contactdetails in otrsview ändern.

In der Map kann man dann noch folgende Einträge hinzufügen:

 [ 'UserStreet', 'Street', 'mailingstreet', 1, 1, 'var', '', 0 ]

Und schon steht die Straßenangabe zur Verfügung.

Kundenlogin ermöglichen
Soll das Kundenportal von OTRS für die Kunden freigeschaltet werden. Dazu müssen sich die Kunden dort anmelden können. Auch hier sollen die Daten aus vTiger genutzt werden.

Die Einstellungen zur Authentifizierung der Kunden müssen auch in der Config.pm von oben vorgenommen werden:

 $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB';
 $Self->{'Customer::AuthModule::DB::Table'} = 'vtiger_portalinfo';
 $Self->{'Customer::AuthModule::DB::CustomerKey'} = 'user_name';
 $Self->{'Customer::AuthModule::DB::CustomerPassword'} = 'user_password';
 $Self->{'Customer::AuthModule::DB::DSN'} = "DBI:mysql:database=vtigercrm520;host=localhost";
 $Self->{'Customer::AuthModule::DB::User'} = "dbuser"; 
 $Self->{'Customer::AuthModule::DB::Password'} = "2357KLAFKkjsd";


Die Angaben von DSN, User und Passwort sind die gleichen wie oben gezeigt. Wichtig sind hier noch die Angaben zur Tabelle ("vtiger_portalinfo") und welche Felder zur Authentifizierung wichtig sind. Der Benutzername steht in vTiger unter "user_name" und das Passwort in "user_password". vTiger speichert die Passwörter leider in Klartext ab. Aus diesem Grund muss der "CryptType" auf "plain" gesetzt werden.

Jetzt können sich die Kunden auch am Kundenportal von OTRS anmelden und dort Tickets erstellen.

vTiger

(Quelle: http://de.wikipedia.org/wiki/Vtiger)
vtiger CRM ist eine freie Open Source Software für das Customer-Relationship-Management. vtiger basiert auf der Skriptsprache PHP und der Datenbank MySQL

OTRS

(Quelle: http://de.wikipedia.org/wiki/OTRS)
Das Open Ticket Request System (OTRS) ist ein Ticketsystem oder Kommunikationsmanagementsystem, welches oft als Helpdesk-System bzw. Issue-Tracking-System eingesetzt wird. OTRS ist freie Software und steht unter der GNU Affero General Public License (AGPL).

Mit Hilfe des webbasierten Ticketsystems OTRS lässt sich jegliche Art von Anfragen (zum Beispiel Störungsmeldungen, Service- und Informationsanfragen) über die Meldewege E-Mail, Telefon und Kunden-Webfrontend strukturiert erfassen, klassifizieren, speichern und weiterverarbeiten.


Perl-Services.de

Perl-Services.de ist ein kleines Unternehmen, das unter anderem auch OTRS-Programmierung anbietet. Wir passen OTRS nach Ihren Wünschen an und helfen Ihnen bei der Einführung und Konfiguration des Ticketsystems.

Wednesday, September 12, 2012

OTRS-Arbeiten...

Seit einigen Tagen kann ich endlich mal wieder ein wenig Zeit für Arbeiten rund um OTRS aufwenden:

Neue OTRS-Pakete bzw. neue Versionen:


 * FixNonRFCCompliantCharsetInMails
 * TicketBarcode für KIX4OTRS (noch nicht veröffentlicht)
 * QuickClose

OPAR:

Ein paar Bugs habe ich gefunden. Endlich werden im RSS-Feed die aktuellsten Uploads angezeigt. Wenn nach "." gesucht wurde, wurde das ab der zweiten Ergebnisseite nicht mitgeführt. Das hing damit zusammen, dass der Suchbegriff in die URL eingebaut wurde und der "." natürlich somit wegfällt.

Ein fehlerhafter Login bringt jetzt eine bessere Fehlermeldung.

Weiterhin gibt es zusätzliche Links auf der Detailseite von Paketen wenn es das Paket für mehrere Framework-Versionen gibt.

Continuous Integration für OTRS-Pakete:

Schon länger habe ich geplant, Jenkins für das Bauen und Testen von OTRS-Paketen zu verwenden. Zum Einen weil mir das viel Arbeit abnimmt und zum Anderen weil ich für eine Auditierung bei einem Kunden solche Prozesse nachweisen muss.

Vor kurzem bin ich dann auf einen Tweet von Roy Kaldung gestoßen, der für OPMZone.org die Pakete mit Jenkins baut.

Leider verwendet er dafür eine OTRS-Installation und das Skript otrs.PackageManager.pl daraus. Für meine Zwecke ist das nicht geeignet, weil auf der Maschine mit Jenkins kein OTRS laufen wird und wenn dann ist es nur eine Version. Ich will aber die Pakete mit verschiedenen Versionen testen.

Ich habe daher angefangen, ein Tool zu schreiben, das OTRS-Pakete erstellt und einige Tests ausführen kann: OTRS-OPM-Maker. Ein CPAN-Release wird in den kommenden Tagen noch folgen.

Umgesetzt ist das mit App::Cmd. Das Modul ist echt klasse für die Erstellung von Konsolenprogrammen.



In den nächsten Tagen werden mit Sicherheit noch weitere Änderungen dazukommen.

Tuesday, June 26, 2012

Europäische Perl-Konferenz 20.-22.08.2012 in Frankfurt/Main

Die 13. Europäische Perl-Konferenz "YAPC::Europe" findet vom 20.-22. August 2012 an der Goethe-Universität Frankfurt/Main statt.
Die Europäische Perl-Konferenz "YAPC::Europe" ist die größte jährliche Konferenz für Anwender und Entwickler der dynamischen Open-Source-Programmiersprache Perl in Europa. In diesem Jahr wird sie von den Frankfurt Perlmongers e.V. ausgerichtet.

Modern Perl

Ein Schwerpunkt der Konferenz ist "Modern Perl". Dabei spielen Module wie Moose, eine neuartige Objektorientierung für Perl, und DBIx::Class als Schicht zwischen Anwendung und Datenbanken eine genauso wichtige Rolle wie die Web-Frameworks Catalyst, Dancer und Mojolicious.

Call for Papers

Die Konferenz steht und fällt mit den Vorträgen, die 5, 20 oder 40 Minuten lang sein können.
Alle Themen, die mit Perl oder dem Perl-Umfeld zu tun haben, können als Vorträge für die Konferenz interessant sein. Vorschläge müssen bis spätestens Sonntag, den 15. Juli 2012 als Abstract eingereicht werden. Der Abstract sollte in rund 2.000 Zeichen das Thema beschreiben.

Sponsoren

Die Konferenz bedeutet neben enormem zeitlichen auch hohen finanziellen Aufwand. Deshalb benötigen wir Unterstützung von Sponsoren, z.B. bei der Ausrichtung der Abendveranstaltung. Für mehr Informationen darüber, wie Sponsoren den Workshop unterstützen können, steht Renée Bäcker (sponsoring@yapc2012.de) zur Verfügung.

Preise

Wie in den Jahren zuvor sind die Preise für die Teilnahme niedrig: Für Studenten liegt der Beitrag bei 50 €, für Privatpersonen bei 110 € und für Firmenteilnehmer bei 450 € für die gesamte Konferenz. Bis zum 8. Juli gibt es für Privatpersonen einen Frühbucherrabatt, so dass das Ticket nur 80 € kostet

Thursday, April 26, 2012

Modul-Dokumentation als E-Book

Heute wurde ein neuer Dienst ins Leben gerufen, mit dem man die Dokumentation von CPAN-Modulen als E-Book bekommen kann: http://perlybook.org. Zur Zeit stehen mit ePub und Mobi zwei Zielformate zur Verfügung, mit denen der Großteil der E-Book-Leser zurechtkommen.

Der Dienst steht noch ganz am Anfang und wird stetig weiterentwickelt. Wir haben den Code auf github gestellt, so dass jeder leicht daran mitarbeiten kann. Natürlich wurde alles mit Perl umgesetzt: Mojolicious als Framework für die Applikation, EPublisher mit Plugins für die Erstellung der E-Books und MetaCPAN::API um an die ganzen Modulinformationen wie das Pod etc. zu kommen.

Falls irgendwelche Fehler auffallen, dann bitte einen Bugreport aufmachen. Wenn irgendwelche Features fehlen, dann bitte einen Feature-Request aufmachen. Ein paar Sachen werden in Kürze noch kommen - eine ROADMAP ist auch auf github zu finden.

Feedback ist jederzeit willkommen: perlybook@perl-services.de

Thursday, March 22, 2012

Chemnitz: LinuxTage und OTRS-Usertreffen

Am vergangenen Wochenende war ich mal wieder in Chemnitz - wie schon im letzten Jahr war ich bei den Chemnitzer LinuxTagen. Diesmal hatten wir einen eigenen Stand, nachdem wir im letzten Jahr man an den Stand der OTRS-Community durften.

Aber bevor es mit den Linuxtagen losging, gab es freitags in den Räumen von cape-IT noch ein OTRS-Usertreffen. Ich bin mit Hannes verspätet dort eingetroffen, aber trotzdem war es noch sehr interessant. Den Vortrag von Rico zu den Neuerungen in KIX4OTRS habe ich verpasst, aber zur "Plauderrunde" waren wir da.

Hannes hat uns gezeigt, womit er sich so beschäftigt. Sehr interessante Ideen ;-) Andre von Otterhub hat auch noch einen guten Review geschrieben.

Samstag früh ging es dann zu den Linuxtagen, der Stand musste ja noch aufgebaut werden. Ich bin mal wieder mit ziemlich viel Gepäck angereist, Flyer, Banner, Sticker, Bücher, Perl-Magazine etc. mussten alle mit nach Chemnitz.


Wir hatten an den beiden Tagen recht gut zu tun, auch wenn es zwischendrin immer wieder Leerlauf gab. Man hat zwar von Einzelnen die typischen Sprüche über Perl wie "das ist doch nicht lesbar", "ach wenn ich schon die ganzen Dollarzeichen sehe" gehört, aber insgesamt waren es gute Gespräche, die wir dort geführt haben. Ich habe auch wieder viele neue Kontakte geknüpft... und neue Ideen gesammelt. Ich muss mir z.B. mal die Archivista-Box anschauen.

Am Sonntag habe ich auch noch einen Vortrag über Jenkins mit Perl gehalten. Ich hoffe, dass die Videoaufnahmen bald im Netz landen. Dann werde ich das hier verlinken.

Mehr oder weniger direkt nach dem Vortrag musste ich dann schon zum Bahnhof, weil die Heimfahrt über 7 Stunden dauerte und ich noch sonntags ankommen wollte.

An dieser Stelle möchte ich mich auch bei Markus bedanken, der den Stand organisiert hat und bei Wolfgang, Steffen und Florian, die am Stand geholfen haben.

Tuesday, January 31, 2012

Frühjahr 2012 - die 21. Ausgabe von $foo ist da!

Gerade wird es so richtig kalt - aber beim Perl-Magazin ist es schon Frühjahr. Die 21. Ausgabe des Magazins ist heute erschienen und die Abonnenten sollten in den nächsten 1-2 Tagen Post bekommen.


Inhalt dieser Ausgabe:

* VMware und Perl

Virtualisierung ist mittlerweile ein großes Thema. Mit VMware und Perl kann man virtuelle Maschinen automatisch ansprechen.
Stefan Oberwahrenbrock zeigt, welche VMware-Produkte es gibt und wie man diese mit Perl ansprechen kann.

* Continuous Integration für Perl-Projekte mit Jenkins

Nichts ist schlimmer, als eine fehlerhafte Software an Kunden auszuliefern. Deshalb sollten Tests und das Zusammenbauen der unterschiedlichen Komponenten regelmäßig auf dem Programm stehen.
Dieser Artikel zeigt, wie Jenkins für Perl-Projekte eingesetzt werden kann.

* Perl in the Cloud - OpenShift Express by Red Hat

Das Thema "Cloud" ist derzeit in aller Munde, jeder will rein und immer mehr Anwendungen wandern in die Cloud.
Thomas Fahle zeigt in diesem Artikel, wie man eigene Anwendungen mit OpenShift von RedHat in die Cloud bringt.

* Rezension - Perl komplett

Herbert Breunung stellt in dieser Ausgabe wieder zwei Bücher vor - Die "Perl Pocket Reference" von Johan Vromans und "Der Perl-Programmierer" von Jürgen Plate.

* Konfigurationsmanagement und Software-Deployment mit Rex

Mit Rex kann das komplette Deployment und die Konfiguration von Servern automatisiert werden. Die Steuerdateien für Rex sind in Perl geschrieben.
Jan Gehring zeigt, wie die sogenannten "Tasks" geschrieben werden und welche Möglichkeiten Rex bietet.

* Ein CPAN für eigene Module

Wie stelle ich Kunden die entwickelten Perl-Module zur Verfügung? Diese Frage stellt sich wahrscheinlich für viele Perl-Programmierer.
Man kennt ja das CPAN, warum also nicht die gleiche Struktur für eigene Projekte nutzen.
Dieser Artikel zeigt, wie man mit Pinto ein CPAN für eigene Module aufbaut.

* WxPerl Tutorial - Teil 9: Mächtige Widgets

Im neunten Teil des WxPerl-Tutorials zeigt Herbert Breunung eine Übersicht über viele Widgets, die man in wxPerl-Programmen nutzen kann. Er geht dabei den Weg von einfachen Widgets über einfache Auswahlwidgets bis zu den Auswahlwidgets für den gehobeneren Anspruch.

Sunday, January 22, 2012

YAPC::Europe 2012: Datum und Ort stehen jetzt fest

Endlich können wir das Datum und den Ort der diesjährigen YAPC::EU bekanntgeben: Die YAPC::Europe 2012 wird vom 20.-22. August 2012 an der Goethe Universität in Frankfurt stattfinden.

Die Webseite werden wir regelmäßig mit neuen Informationen bestücken. Die wichtigsten Informationen wird es auch im Blog geben.

Monday, January 16, 2012

Programm des 14. Deutschen Perl-Workshops

Die Erlanger Perlmongers haben das Programm des 14.Deutschen Perl-Workshops online gestellt. Teilweise gibt es zwei Track, die meiste Zeit ist es aber nur ein einzelner Track.

Ich selbst werde einen längeren Vortrag über Jenkins und Perl halten. Ein Lighting Talk über die YAPC::Europe wird auch dabei sein.

Thursday, January 05, 2012

MP3s mit Perl abspielen

Nett und öfter mal wieder gefragt: MP3-Dateien mit Perl abspielen.
Meistens wird dabei auf Module zurückgegriffen, die einen besondeten Player ansprechen. Win32::MediaPlayer, Bundle::Xmms und Win32::MultiMedia::Mci sind Beispiele dafür.

Ein anderer Ansatz ist, SDL dafür zu verwenden. Das hat beispielsweise gegenüber Win32::MultiMedia::Mci den Vorteil, dass das Programm auch auf Nicht-Windows-Systemen wie Appels OS X oder diversen Linux läuft.

SDL steht für Simple DirectMedia Layer und ist eine plattformunabhängige Multimedabibliothek, die in der Programmiersprache C geschrieben ist.

Das SDL-Perl-Projekt unter http://sdl.perl.org stellt eine Anbindung an die SDL-Bibliothek zur Verfügung. Das Modul kann mittlerweile bequem per CPAN installiert werden. Alien::SDL sorgt dabei für eine angenehm reibungslose Installation der Abhängigkeiten von SDL, imdem es den ganzen Prozess des Kompilieren der Abhängigkeiten erledigt.

SDL auf Mac OS X


Apple bringt zwar ein Perl mit, damit zu arbeiten fand ich bislang aber immer sehr mühselig. Deshalb habe ich mir kurzerhand über perlbrew (http://perlbrew.pl/) ein aktuelles Perl installiert. Damit das alles klappt, sollte man das aktuellste XCode (das man so von Apple kostenlos bekommt) installieren. Auf den Installations-CDs ist normalerweise eins dabei.

Was bleibt ist das nicht von Haus aus in Appels Betriebssystem enthaltene lame. Das wird benötigt, um mittels SDL MP3-Dateien abzuspielen. Da die Installation dieser Voraussetzung nicht Aufgabe von Alien::SDL ist, muss man es von Hand machen. Mir hat der unaufwendige Weg über Homebrew (http://mxcl.github.com/homebrew/) sehr gut gefallen.

Es reicht, den Befehl
> brew install lame

einzugeben, und schon ist lame installiert. Es fehlt dann nurnoch SDL Perl:

cpan> install Alien::SDL
cpan> install SDL


Also nochmal zusammengefasst, was man auf einem Mac alles installieren muss, um MP3s abspielen zu können:

  • XCode (neuste Version, aktualisieren nicht vergessen!)

  • perlbrew

  • ein aktuelles Perl (z.B. 5.14.1)

  • homebrew

  • lame

  • Alien::SDL

  • SDL



Das Programm


Nun zum interessanten Part: wie sieht das Programm aus?


#!perl

use strict;
use warnings;
use SDL;
use SDL::Mixer;
use SDL::Mixer::Music;
use SDLx::App;

# -- Initialisierung
SDL::Mixer::init( SDL_INIT_AUDIO | MIX_INIT_MP3 | MUS_MP3 );
unless( SDL::Mixer::open_audio( 44100, AUDIO_S16SYS, 2, 4096 ) == 0 ) {
Carp::croak "Cannot open audio: ".SDL::get_error();
}

# -- Anwendung erstellen
my $app = SDLx::App->new(
title => 'MP3 abspielen',
w => 400,
h => 200,
exit_on_quit => 1,
depth => 32
);

# -- Diese Datei soll abgespielt werden.
my $sound_file = 'music/Musikdatei.mp3';

# -- Datei in den Speicher laden
my $background_music = SDL::Mixer::Music::load_MUS($sound_file);

unless( $background_music ) {
Carp::croak "Cannot load music file [$sound_file]: " . SDL::get_error();
}

# -- Datei abspielen
my $loops = 0; # 0 = 1mal, -1 = unendlich oft
SDL::Mixer::Music::play_music( $background_music, $loops );

$app->run();

SDL::Mixer::Music::halt_music();
SDL::Mixer::close_audio;
exit(0);


Die Musikdatei, die der Einfachheit halber in der Variable $sound_file fest verdrahtet wurde, muss natürlich existieren. Man kann dort wahlweise MP3-, wav- oder ogg-Dateien eintragen. load_MUS() macht den Rest.

Zuerst wird die Hardware initialisiert, dann die Musikdatei geladen und schlussendlich abgespielt. Es ist möglich, die Anzahl der Wiederholungen festzulegen und natürlich kann man das Musikstück auch anhalten und weiterlaufen lassen - auch mit fading. Wie genau, ist in der Manpage von SDL::Mixer::Music enthalten.

Eventuell hat jemand Lust, das obenstehende Programm zu erweitern, so dass man eine Datei auswählen, starten, anhalten und beenden kann?

Ein paar technische Anmerkungen:
Verwendetes OS: Mac OS X snow leopard 10.6.8
Perl: 5.14.1
SDL::version is 1.2.14
SDL::linked_version is 1.2.14

Friday, December 23, 2011

Mein Perl-Jahr 2011

Wie in den vergangenen Jahren, möchte ich auch in diesem Jahr wieder einen kleinen Rückblick auf mein Perl-Jahr geben. Eins schon vorneweg: Es ist viel passiert und ganz toll verlaufen, aber von vorne...

Januar:
  • Die Smart-Websolutions GbR wurde aufgelöst und ich mache alleine unter Perl-Services.de weiter. Das bringt auch besser zum Ausdruck, was ich mache: Alles rund um Perl ;-)
  • Ich starte planet.perl-magazin.de, ein Aggregator für deutschsprachige Perl-Blogs. Wer noch solche Blogs kennt, meldet sie mir bitte.
  • Ein großes Projekt steht an: OTRS-Einführung und -Anpassungen für ein Bankennahes Unternehmen.
  • Meine Zeit bei der OTRS AG endet.

Februar:

März:
  • Ich habe wieder Zeit für einen Vortrag auf der CeBIT bekommen. Ich nutze das, um das Repository für OTRS-Erweiterungen (OPAR) vorzustellen.
  • Für einen eigenen Perl-Stand bei den Chemnitzer LinuxTage war es zu spät, aber wir waren mit am Stand der OTRS-Community. Außerdem habe ich einen Vortrag über Perl::Critic gehalten.

April:
  • Ich bin wieder bei etecture aktiv. Es ist schön, wenn man immer wieder vertraute Gesichter sieht.

Mai:
  • Die 18. Ausgabe von $foo erscheint

Juni:
  • Ich fahre zum 2. OTRS-Usertreffen in Dormagen und halte einen Vortrag über OPAR

August:
  • Die 19. Ausgabe von $foo erscheint
  • Es wird ein Spendentopf für Perl 5 eingerichtet. Ich finde das eine super Sache und gebe den Gewinn vom Perl-Magazin der Perl Foundation. Vielen Dank an die Leser!
  • Ich bin bei der YAPC::EU 2011 in Riga - mal wieder ein haufen netter Leuter und interessanter Vorträge. Wir haben uns um die Ausrichtung der nächsten YAPC beworben - und gewonnen. Die Frankfurt Perlmongers freuen sich schon auf möglichst viele Besucher im nächsten Jahr!
  • Direkt aus Riga geht es weiter nach St. Augustin zur FrOSCon - Dort gibt es wieder einen Perl-Stand und einen Developer Room. Für das nächste Jahr planen wir, das etwas anders aufzuziehen.

September:

Oktober:

November:
  • Die 20. Ausgabe von $foo erscheint
  • Ich bin zum ersten Mal auf der OpenRheinRuhr. Ich bin nicht nur einfach ein Sponsor, nein, wir haben die $foobar gesponsort. Wir haben dort auch wieder einen Perl-Stand.
  • Die Frankfurt Perlmongers gründen einen Verein. Wir machen schon relativ viel in Sachen Perl (Ausrichten von Perl-Veranstaltungen, Teilnahme an anderen Veranstaltungen, Perl-Stände an Veranstaltungen, etc.) und nächstes Jahr richten wir die YAPC::Europe aus. Eine gute Gelegenheit, einen Verein zu gründen, um alles auf eine solidere Basis zu stellen.
  • Der dritte Mitarbeiter bei Perl-Services.de fängt an.

Dezember:
  • Noch 7 Projekte bis zum Jahresende... Viel zu tun!

Ich hatte extrem viel zu tun über das Jahr, nicht nur ältere Projekte übernehmen und pflegen, sondern auch einige komplett neue Projekte in Perl realisiert. Einige der Kunden sind auch OpenSource-freundlich und werden sehr wahrscheinlich einiges auf CPAN bzw. OPAR einstellen.

So darf es weitergehen!

Ausblick auf 2012:
Natürlich habe ich schon wieder einiges für das nächste Jahr geplant. Deswegen hier ein Ausblick in Kurzfassung: Teilnahme an mehreren Veranstaltungen wie Dt. Perl-Workshop in Erlangen, FrOSCon in St. Augustin und viele mehr... Start eines englischsprachigen Perl-Magazins, Weiterführung "$foo", Start eines OTRS-Magazins, Organisation YAPC::Europe 2012 in Frankfurt. Viele Perl-Projekte, Durchführen eines OTRS-Workshops direkt nach dem Perl-Workshop in Erlangen,...

Tuesday, November 01, 2011

Winter 2011: Die Ausgabe 20 des Perl-Magazins "$foo" ist da!

Auch die Geister, die gestern durch die Straßen geschlichen sind, konnten uns nicht aufhalten. Heute ist die neue Ausgabe des Perl-Magazins "$foo" erschienen. Die Abonnenten sollten in den nächsten Tagen Post bekommen und die Online-Version steht schon zur Verfügung. Viel Spaß beim Lesen!

Webseite: http://www.perl-magazin.de

Inhalt dieser Ausgabe:

* SNMP::Info
Thomas Fahle zeigt in seinem Artikel, wie man mit dem Modul SNMP::Info sehr einfach Informationen z.B. über Cisco Router bekommt.

* Rezension - Programmiersprachen
Für diese Ausgabe hat Herbert Breunung wieder zwei Bücher gelesen. Diesmal sind es "Sieben Sprachen, Sieben Wochen" von Bruce A. Tate und "Visionäre der Programmierung" von Federico Bancuzzi und Shane Warden.

* Perl in Multithreaded Programmen einbetten
Perl ist eine Skriptsprache, die sich einfach in die Programmiersprache C einbetten lässt. Dies ermöglicht Perl-Code direkt aus C zu nutzen und die Vorteile beider Sprachen (schneller Code in C gegenüber schnell geschriebenem Code in Perl) miteinander zu vereinen (bekannt ist dies insbesondere durch mod_perl, welches Perl in den Apache Webserver einbettet). Im Falle von parallelem Zugriff auf Perl aus einem multithreaded Programm ist die Einbettung jedoch nicht mehr trivial, da der Perl Interpreter selbst nicht thread-safe ist.

* $foo als ebook
Die Artikel dieses Magazins werden im Pod-Format geliefert. Doch wie wird daraus ein ebook? Dieser Artikel zeigt, wie mit Hilfe von CPAN-Modulen, das Pod umgewandelt wird und ein ebook daraus generiert wird.

* Perl für Vortragende
Nichts ist peinlicher als eine Live-Demo während eines Vortrags, die nicht funktioniert. In diesem Artikel werden zwei Module vorgestellt, mit denen Vortragende sich das Leben vereinfachen können.

* 2D Spieleprogrammierung mit OpenGL - Teil 2
Im ersten Teil wurde gezeigt, wie Objekte gezeichnet werden und wie die Oberfläche für das Spiel "PONG" gebaut wurde. In dieser Ausgabe zeigt Tom Kirchner, wie die Spieler und der Ball animiert werden. Auch Shader sind ein Thema.

Thursday, October 20, 2011

Perl@OpenRheinRuhr

Der 13. Deutsche Perl-Workshop ist noch in vollem Gange (Bericht folgt noch) und die nächsten Veranstaltungen sind schon wieder in Sichtweite. Eine davon ist die OpenRheinRuhr! Wir werden dort auch einen Perl-Stand haben - direkt neben dem Stand der OTRS-Community.

Für mich ist es die ersten OpenRheinRuhr und ich bin mal gespannt, was ich dort so alles erlebe. Im Hinblick auf die nächste YAPC::Europe, schaue ich mir jetzt Veranstaltungen immer mit etwas anderen Augen an.

Zurück zur OpenRheinRuhr. Wir werden dort nicht nur einen Perl-Stand haben, es wird auch eine $foo-Bar geben ;-) Die Idee aus dem Namen des Perl-Magazins und dem bekannten "foobar" etwas zu machen kam von den ORR-Orgas und ich war sofort begeistert.

Außerdem gibt es einen Vortrag von Gerd Pokorra: Einführung in Perl 6.

Ich freu mich schon auf die Veranstaltung und darauf, viele Leute dort zu treffen.

Friday, September 23, 2011

OTRS-Community-Treffen Frankfurt

Gestern abend fand das OTRS-Community-Treffen Frankfurt statt. Doch vorher habe ich mich noch mit Alexander Halle vom OTRS Community Board getroffen, um verschiedene Sachen wie Perl- bzw. OTRS-Stand auf der OpenRheinRuhr zu besprechen. Dazu haben wir uns im MoschMosch, dem Stammlokal der Frankfurt Perlmongers getroffen.

Nach leckeren gebratenen Nudeln und zwei Stunden Gespräch sind wir in Richtung "Haus der Jugend" gelaufen. Insgesamt waren wir zu sechst bei diesem Treffen, in Zukunft dürfen ruhig etwas mehr Teilnehmer kommen.

Anfangs haben wir eine sehr ausgedehnte Vorstellungsrunde gemacht, in der jeder etwas zu seinem Hintergrund und seiner OTRS-Installation erzählt hat. Mich haben besonders die Zahlen eines Teilnehmers fasziniert, der von 2,5 Millionen Tickets mit über 6 Millionen Artikeln berichtet hat. Das ist doch mal ne fette Installation. Ist ja nur um ein 1200faches größer als meine eigene Instanz.

Bei den großen Installationen werden dann natürlich etliche Anstrengungen unternommen, um das System performant zu halten. Über diese Anstrengungen haben wir auch eine Zeitlang gesprochen - sehr interessant. Da ging es zum Beispiel um eine Volltextsuche mit Sphinx.

Danach habe ich einen Vortrag mit einer Kurzeinführung von OPAR und der Vorstellung von 5 meiner Erweiterungen gehalten. In der anschließenden Diskussion hat sich rausgestellt, dass die meisten der Teilnehmer nichts über die Erstellung von OPM-Paketen wussten. OPM ist das XML-Format für OTRS-Pakete.

Deshalb haben wir vereinbart, dass ich Anfang nächsten Jahres einen kleinen "Hackathon" halte, bei dem gezeigt wird, wie man eigene OTRS-Pakete packen kann.

Alexander hat dann noch seine Arbeit für die OTRS-Community vorgestellt und erläutert, wie die Zukunft des (noch nicht gegründeten) Vereins und der OTRS-Community aussehen könnte.

Monday, August 22, 2011

FrOSCon 2011

Freitags von Riga zurückgekommen, ging es für mich am Samstag früh gleich weiter in Richtung St. Augustin zur FrOSCon 2011.

Wie in den vergangenen Jahren waren wir wieder mit einem Perl-Stand und einem Perl-Dev-Room vertreten. Durch zeitliche Komplikationen habe ich es nicht geschafft, das Vortragsprogramm für den Dev-Room online zu stellen. Sorry!

Ich hatte den Eindruck, dass auf der FrOSCon insgesamt weniger Leute waren als in der Vergangenheit. Und auch bei uns am Stand war es ziemlich ruhig. Dafür hatten wir mehr Zeit, uns mit anderen Projekten zu unterhalten. In unserer Nähe war auch Alexander mit dem Stand der OTRS-Community.

Auch im Dev-Room war wenig los, dafür gab es sehr interessante Diskussionen. Vor allem zum Thema OPAR und Analyse/Tests der Pakete habe ich einige Ansatzpunkte mitgenommen. Die ich demnächst mal genauer betrachten und evaluieren muss.

Auch über Möglichkeiten bei der nächsten YAPC::Europe gab es in einem anderen Raum Diskussionen. Wie man z.B. einen Einsteiger-Workshop gestalten etc.

Für das nächste Jahr könnte ich mir eine etwas andere Vorgehensweise vorstellen: Keine einzelnen Vorträge, sondern eine Art "Hackthon" zu machen. Da könnte man das Thema auch früher ankündigen und muss nicht groß auf Vorschläge warten. Eine Idee wäre, ein bekannteres Modul zu nehmen, das ein paar Bugs hat, diese Bugs zu fixen und Tests dafür zu schreiben. Dann könnte man in dem Hackathon mehrere Sachen abdecken: Profilen des Moduls, Bugfixing, Tests mit Test::More und verwandten Modulen.
Jede Untergruppe könnte dann mal kurz präsentieren was so gemacht wurde und alle hätten etwas davon... Sonstige Ideen?

YAPC::EU 2011 - Tag 3

Leider dauert die YAPC nur drei Tage, das heißt, dass der letzte Tag anstand.

Nach der Eröffnung durch Andrew Shitov, stand die Keynot von Jesse Vincent, aktueller Pumpking von Perl, auf dem Plan. Er hat dabei über seine Pläne für die Zukunft von Perl 5 berichtet. Ich finde, er macht seinen Job als "Manager" sehr gut und es ist eine klarere Linie in die Perl Kernentwicklung gekommen.

Jesse möchte mehr Teile des Kerns in Module auslagern, damit die Wartbarkeit zunimmt. Die Programmierer werden es ihm danken. Außerdem möchte er Perl 5 fit machen, dass es zwei Distributionen gibt: Zum einen eine große Distribution, in der relativ viele Module schon mitgeliefert werden - so wie es zur Zeit auch schon ist - und zum anderen eine sehr schlanke Distribution, in der nur so viel mitgeliefert wird, dass Module von CPAN installiert werden können.
Aus dieser schlanken Distribution können dann andere Perl-Pakete/Perl-Distributionen gebaut werden. Z.B. ein Bio-Perl oder ein Web-Dev-Perl oder oder oder. Ich finde diese Idee sehr spannend.

Nach der Kaffeepause standen wieder die "normalen" Vorträge an. Heute habe ich mir diese Talks angeschaut:

  • ‎Introduction to writing readable and maintainable Perl‎ von Alex Balhatchet
  • ‎Introduction to the Dancer web application framework‎ von Job van Achterberg
  • ‎Running legacy mod_perl with Plack‎ von Peter Makholm
  • ‎‎I <3 my Community‎ von Mark Keating
  • Terms of endearment - the ElasticSearch query language explained‎ von Clinton Gormley
  • ‎ActiveState, Perl and the Cloud‎ von Ingy döt Net

Nach diesen Vorträgen stand die dritte und letzte Serie der Lightning Talks auf dem Plan. Diese Art von Vorträgen ist auch eine gute Möglichkeit, sich als Redner auszuprobieren und vielleicht auch mal das Thema anzutesten.

Anschließend gab es den "State of the Velociraptor" von Matt S Trout. Darin beschreibt er, was so alles im letzten Jahr in der Perl 5 Welt los war. Darin hat er auch gezeigt, wie "Idioten" und "Trolle" bei der Entwicklung helfen können: Indem man sich z.B. von den "Idioten" erklären lässt, was sie alles "blöd" finden und anders machen würden. So kann man sich Ideen für Verbesserungen holen.

Zum Abschluss hat Max noch Frankfurt als Ausrichter der nächsten YAPC::Europe präsentiert.

Mein Fazit: Es war wieder eine wunderbare Konferenz mit vielen alten und neuen Freunden. Ich habe einige gute Punkte für die Orga 2012 mitgenommen und auch etwas Verbesserungspotential ausgemacht.
Riga ist eine tolle Stadt - vor allem im Innenstadtbereich ist vieles restauriert und schön gemacht worden. Etwas außerhalb ist es nicht immer ganz so schön - aber dennoch interessant. Es lohnt sich dort hin zu fahren.

Saturday, August 20, 2011

YAPC::EU 2011 - Tag 2

Da die Voträge erst um 10 Uhr begannen, gab es erst um 9 Uhr Frühstück. Vollkommen ausreichend und der Schlaf war nötig gewesen. Vor 10 Uhr sollten keine Vorträge stattfinden!

Diesmal haben wir zu viert gefrühstückt, bevor es zum Veranstaltungsort ging. Als erster Vortrag stand Damians Keynote auf dem Plan. Darin hat er gezeigt, wie er einige seiner Module von Perl 5 nach Perl 6 umgeschrieben hat - und dabei nur ein Drittel der Zeilen benötigte aber mindestens genauso gut lesbar war.

Diese Vorträge habe ich gehört:

  • Monkey-patching, subclassing, and accidental overriding‎ von Aaron Crane
  • ‎App-ffeedflotr - plot data using Firefox and flot‎ von Max Maischein
  • ‎Dancing into Web Development‎ von Andrew Solomon
  • use types‎ von Reini Urban
  • ‎Cool, bonsai, cool - An introduction to ElasticSearch‎ von Clinton Gormley
  • ‎The Perl Foundation: Year in Review‎ von Karen Pauley
  • ‎Mojolicious - A New Hope von‎ Marcus Ramberg
  • Adventures in Marketing‎ von Mark Keating


Aus dieser Liste möchte ich zwei Vorträge hervorheben:
Den Vortrag über ElasticSearch fand ich sehr gut und hat mir wieder ein paar Ideen gebracht womit ich mich mal beschäftigen könnte. Als Beispiel fiele mir eine bessere Ticketsuche für OTRS ein.

Zum anderen den Vortrag von Karen Pauley über die Perl Foundation. Sie hat hier gezeigt, was die Perl Foundation macht, wofür sie Geld ausgibt und woher das Geld stammt. Auch den Aktuellen Stand zum Perl 5 Core Maintenance Fund hat sie genannt: knapp über 32.000 USD. Wobei das mittlerweile auch nicht mehr aktuell ist, da Net-a-Porter, Dijkmat und Oslo.pm noch während der YAPC::EU Geld für den Spendentopf gegeben, so dass der Topf auf über 48.000 USD angewachsen ist.

Bevor es zum Social Event ging, gab es die zweite Serie von Lightning Talks...

Der Social Event fand in einem Braukeller statt. An sich war es eine nette Location, nur für Unterhaltungen war es nicht ganz so gut geeignet. Die besten Gespräche fanden vor der Tür statt. Hier haben wir einige Anregungen - auch von anderen - mitgenommen. Ich hoffe, wir können das dann umsetzen.

YAPC::EU 2011 - Tag 1

Ich weiß, dass ich der Zeit etwas hinterher hinke, aber ich bin einfach nicht früher dazu gekommen...

Der erste Tag hat mit einem Frühstück mit Michael begonnen. Danach sind wir zum Veranstaltungsort gelaufen - und das lag nur wenige Gehminuten von unserem Hotel entfernt. Wirklich sehr günstig gelegen.

Dort angekommen erwartete uns schon eine gaaaaaanz lange Schlange an der Registrierung. So lange wollte ich aber nicht warten. Also bin ich ohne Anmeldung in den Hauptsaal gegangen und habe auf die Eröffnung gewartet.

Nach der Eröffnung wurde die Ausrichterstadt der nächsten YAPC::EU bekanntgegeben: Frankfurt. Nachdem wir im letzten Jahr vergebens gehofft haben, dürfen wir die 13. YAPC::Europe ausrichten. Dort haben wir auch einen Scheck von der YAPC::Europe Foundation bekommen, der uns mit einer Startfinanzierung ausstattet.

Danach war Larry Wall mit seiner Keynote an der Reihe. Dabei ging es um die verschiedenen Epochen wie Classic, Romantik, Moderne und jetzt natürlich die Postmoderne. Dabei hat er etliche Eindrücke aus Riga mit eingebaut.

Diesen Vorträgen habe ich an diesem Tag gelauscht:

  • Dependency Injection von Zbigniew Lukasiak
  • HTML5: What is is, what it isn't, and should you use it?‎ von Mallory van Achterberg
  • bending syntax with 5.14‎ von Zefram
  • Replacing Relational DB with Redis: a Case Study‎ von Anton Berezin
  • why time is difficult‎ von Zefram
Im Anschluss gab es die erste Serie von Lightning Talks. Diese 5-Minuten-Vorträge sind meistens sehr nütliche kleine Informationshäppchen, die häufig auch recht lustig sind. Hier hat mir der Vortrag von Dave Cross über Perl Marketing/Perl Masons/... besonders gut gefallen! Er hat gesagt, dass man über Perl nicht sprechen sollte und dass es einen geheimen Club geben sollte. Dann wäre alles rund um Perl ganz exklusiv und damit etwas ganz Besonderes.

Als Nick zu mir sagte, dass wir den diesjährigen Deutschen Perl-Workshop doch auch in einem Lightning Talk vorstellen sollten, musst ich das leider von mir weisen - mit dem Hinweis, dass wir ein ganz exklusiver und besonderer Haufen sind ;-)

Als letzer Punkt am heutigen Tag stand die Auktion auf dem Programm. Hier zeigte sich, dass ein vor zwei Jahren ersteigertes Trainingsprogramm mit Damian Conway gute Früchte trägt: Jose Castro schaffte 100 Liegestütze, wobei die Zuschauer 5 EUR pro Liegestütz zahlten. Da die kritischen Stimmen über die Auktion zunehmen und wir (Max und ich) selber nicht besonders große Freunde dieser Art von Auktion sind, wissen wir noch nicht wie wir das bei der "unserer" YAPC machen werden.

Im Anschluss an die Veranstaltung waren Michael und ich noch am Fernsehturm von Riga. Abseits gelegen und weit weg von Touristen, sieht es hier aus, als wäre seit dem Ende der UdSSR kein Geld mehr investiert worden. Und die Fenster an der Aussichtsplattform waren fast komplett blind. Das was man dennoch sehen konnte, lies erahnen, wie schön das hier wäre wenn man den Fernsehturm genaus pflegen würde wie die Innenstadt.

Wir waren dann noch Sushi essen bevor Roman zu uns stieß und wir noch etwas trinken waren. Dabei haben wir noch eine Gruppen spanischer Perl-Programmierer getroffen.

An der Hotelbar ließen wir den Tag dann ausklingen...

Sunday, August 14, 2011

YAPC::EU 2011 - Tag 0

Jetzt beginnt die YAPC-Zeit - und darauf freue ich mich schon ein ganzes Jahr! Nachdem ich im letzten Jahr leider nicht Pisa dabeisein konnte, war die Vorfreude auf Riga umso größer. Heute früh hieß es dann ab zum Flughafen, letzte Besorgungen machen und auf in Richtung Riga.

An meinem Gate angekommen, haben schon ein paar andere Perl-Freunde zusammengesessen und weitere sind im Laufe der Zeit dazugekommen. Auch wenn ich nicht alle (er/ge)kannt habe, bin ich auf mindestens 10 Perl-Leute im Flieger gekommen.

Nach einem ruhigen Flug (naja, ich habe bestimmt die Hälfte verschlafen), sind wir im verregneten Riga angekommen, und die "Dresden-Connection" sowie Markus - von den Erlangen Perlmongers - und ich sind zusammen im Taxi in die Innenstadt gefahren. Markus und ich sind im gleichen Hotel.

Nachdem die Koffer soweit ausgepackt waren sind wir zusammen in die Altstadt gelaufen und nach und nach haben wir immer mehr Perl-Programmierer getroffen und beim Mittagessen war unsere Gruppe um mehrere 100% gewachsen. Das ist das was ich an der YAPC so schätze - jede Menge Leute mit mindestens einer Gemeinsamkeit und man lernt unheimlich schnell viele neue Leute kennen.

Nach dem Mittagessen waren wir noch im "Occupation Museum" und sind quer durch die Altstadt gelaufen, bevor es zumLink Pre-Conference-Meeting ging. Auf dem Domplatz waren schon an die 50 Perl-Programmierer und im Laufe des Abends wurden es bestimmt 120-140 Leute. Und viele nette Bekannte, die ich hier gar nicht aufzählen kann ohne nicht ein paar Leute zu vergessen.

Insgesamt ein toller Abend mit vielen tollen Unterhaltungen wie z.B. mit Gabi, die mir von Ihrer Anreise mit dem Auto quer durch Polen etc. erzählt hat oder mit Mark über Promotion von Perl, Michael über Nachwuchs, und und und.

Jeder der nicht in Riga ist, sollte jetzt neidisch werden ;-) 2006 hat mich das YAPC-Fieber gepackt und ich habe viele neue Freunde kennengelernt und ich freue mich auf 3 spannende Tage mit vielen Vorträgen, lustigen Abenden und jeder Menge interessante Teilnehmer. Ich werde auf jeden Fall weiter berichten. Morgen dann auch wieder mehr mit Bezug auf Perl...

Wednesday, August 03, 2011

Herbst 2011: 19. Ausgabe des Perl-Magazins ist da!

Mit einem Tag Verspätung ist heute morgen die 19. Ausgabe des Perl-Magazins aus der Druckerei eingetroffen. Die Abonnenten werden in den nächsten 2-3 Tagen ihr Heft in den Händen halten können.

Viel Spaß bei der Lektüre!

Inhalt dieser Ausgabe:

* Moose Tutorial V - Introspektion

In diesem Teil des Moose-Tutorials geht es um Introspektion. Damit ist das Sammeln von Informationen über Objekte und Klassen zur Laufzeit gemeint. Auch können die Objekte und Klassen zur Laufzeit geändert werden.

Zu den gesammelten Informationen gehören Daten wie die Attribute eines Objektes, welche Rollen in der Klasse eingebunden werden und welche Methoden ein Objekt kennt. Natürlich gibt es viele weitere Informationen, die gesammelt werden können. Dazu werden ein paar Beispiele von Anwendungsfällen gezeigt.

* 2D Spieleprogrammierung mit OpenGL - Teil 1

In dieser Artikelreihe gibt Tom Kirchner eine kleine Einführung in die Spieleprogrammierung mit OpenGL und GLUT. Dabei wird das Spiel PONG programmiert und in mehreren Ausbaustufen verschönert. Der Einfachheit halber wird die gesamte Spielgrafik in 2D gehalten, aber die vermittelten Konzepte lassen sich leicht in 3D übertragen.

* Rollen für Nicht-Moose-Anwendungen - Role::Basic

In den letzten Jahren wurde Moose immer beliebter und damit auch das Tool "Rollen". Wer sich intensiver mit Rollen auseinandergesetzt hat, wird sie vermutlich nicht mehr missen wollen. Bisher war es so, dass das Stichwort "Rollen" im Zusammenhang mit "Moose" zu sehen war. Für die Standard-Objektorientierung in Perl 5 gab es keine Rollen.

Curtis 'Ovid' Poe hat das geändert und das Modul Role::Basic geschrieben. Aber erst werden die Ideen hinter den Rollen gezeigt, bevor die Möglichkeiten des Moduls näher gezeigt werden.

* WxPerl Tutorial - Teil 8: Reiche Applikationen

In diesem Teil des WxPerl Tutorials von Herbert Breunung dreht sich alles um das Hinzufügen von Bequemlichkeit und Auswahl. Denn TIMTOWTDI bedeutet auch: Es gibt mehr als einen Weg der Ein- und Ausgabe. Deshalb werden Zwischenablage, Drag'n Drop, Drucken und weitere Themen beschrieben.

* Serialisieren von Datenstrukturen in binäre Sequenzen

In diesem Artikel von Rolf Rost geht es um die Erzeugung binärer Sequenzen, wobei dafür ein spezieller Algorithmus auf die vorliegende Datenstruktur angewandt wird. Beispiele für Algorithmen zum Serialisieren von Arrays und Hashes werden im Verlauf des Artikels vorgestellt, ohne dabei einen Anspruch auf Vollständigkeit zu erheben.

* Perl 6 - Der Himmel für Programmierer

Wieder ging ein Jahr, und was tat sich um Perl 6? Nicht sehr viel und das ist gut so. Denn wie aufmerksame Leser dieser Reihe wissen, bezeichnet Perl 6 nur die Sprache. Das umfasst lediglich die Spezifikation in ihren 3 bereits vorgestellten Teilen: Synopsen (menschlich lesbare Form), Testsuite (aka roast) und der STD.pm (Defintion der Syntaxregeln mit Perl 6-Grammatiken).

Herbert Breunung zeigt was sich bei den einzelnen Implementierungen von Perl 6 getan hat.

* Verknüpfte Objekte in OTRS

OTRS bietet aber nicht nur die Möglichkeit, Anfragen zu verknüpfen, sondern beliebige Objekte miteinander zu verbinden. Das ist praktisch wenn die ITSM-Erweiterung im Einsatz ist und man Anfragen mit Configuration Items verknüpfen kann. So kann man schnell die notwendigen Zusatzinformationen für das Ticket finden.

In bestimmten Fällen reichen die eingebauten Verknüpfungsmöglichkeiten nicht aus. In diesem Artikel wird erst gezeigt, wie neue Verknüpfungsmöglichkeiten für existierende Objekte erschaffen werden können und danach wird darauf eingegangen, wie neue Objekte und damit neue Verknüpfungen eingeführt werden.

* Rezension - Perl - Klassiker

Herbert Breunung stellt zwei Klassiker in Sachen Perl-Bücher vor: Einführung in Perl, das mittlerweile in der 6. Ausgabe vorliegt und auf aktuelle Perl-Versionen angepasst wurde und Perl Best Practices.

* Perl Tipps - Modulorte erkennen

Perl-Programmierer fragen nicht "Ey Mann - Wo is' mein Auto?", sie fragen "Ey Mann, Wo is' mein Modul?". Gerade unter Linux, wo schon das Betriebssystem sie an mehreren Orten lagert und eigenmächtige Installationen die Lage noch verkomplizieren, stellt sich die Frage schnell.

Und Herbert Breunung zeigt in diesem Artikel, wie diese Frage beantwortet und noch mehr Informationen besorgt werden können.

Wednesday, July 06, 2011

Frankfurt oder Sofia - das ist hier die Frage...

Heute hat die YAPC::Europe Foundation (YEF) bekanntgegeben, dass es zwei Bewerber um die YAPC::EU 2012 gibt: Frankfurt und Sofia. Jetzt gilt es natürlich Daumen drücken, damit die Veranstaltung im nächsten Jahr in Frankfurt stattfindet...

In den nächsten Wochen wird sich das Venue Committee der YEF für einen der Bewerber entscheiden und es am ersten Tag der diesjährigen YAPC::EU in Riga (15.-17. August) bekanntgeben.

Es wäre toll, wenn wir nach dem 13. Deutschen Perl-Workshop (19.-12. Oktober 2011) auch die 13. YAPC::EU ausrichten dürften... Dann wären wir ja quasi schon voll eingearbeitet und könnten die Organisation gut stemmen ;-)

Übrigens ist unsere Bewerbung unter http://www.perl-magazin.de/stuff/BewerbungYAPC2012.html für jeden ersichtlich.

Friday, June 24, 2011

Deutscher Perl-Workshop - Call for Papers

Besser spät als nie ;-)



Call for Papers / Participation

Vom 19.10.2011 bis 21.10.2011 (Mittwoch bis Freitag) findet der 13. Deutsche Perl-Workshop im Haus der Jugend in Frankfurt am Main statt. Zielgruppe des Workshops sind alle ernsthaften Perl-Anwender und die, die es werden wollen.

Unser Workshop steht und fällt mit den Vorträgen. Üblicherweise sind Vorträge 5, 20 oder 40 Minuten lang. Alle Themen, die in irgendeiner Weise mit Perl oder dem Perl-Umfeld zu tun haben, können als Vorträge für den Workshop interessant sein.

Du hast im Moment nur eine vage Idee für ein Thema? Kein Problem: uns interessieren im Prinzip alle Themen, die in irgendeiner Weise mit Perl zu tun haben. Frag' im Zweifelsfall einfach früh genug bei uns (wsorga@perl-workshop.de) nach. Wir helfen gerne dabei, ein vages Thema zu konkretisieren.

Alle Vorträge werden im Plenum (120 - 150 Teilnehmer) angeboten. Zusätzlich zu den eigentlichen Vorträgen wird es zwei oder drei halbtägige Tutorials zu jeweils einem größeren Thema geben; auch hierzu sind uns Vorschläge von Referenten hochwillkommen. Konferenzsprache ist Deutsch, aber Du kannst Deinen Vortrag auch auf Englisch halten, wenn Deutsch nicht Deine Muttersprache ist.

Deinen Vorschlag schickst Du uns bitte bis spätestens Sonntag, den 14.08.2011 als Abstract. Du kannst natürlich gerne auch mehrere Themen vorschlagen. Dein Abstract sollte in rund 2000 Zeichen (das sind ca. 30 Zeilen a 72 Spalten) das Thema beschreiben, was besonders an Deinem Ansatz ist und weshalb Perl als Sprache in diesem Fall besonders nützlich ist.

Zum Einreichen eines Vorschlages, melde Dich bitte auf der Perlworkshop-Webseite an und verwende danach das Formular unter Neuen Vortrag einreichen.

Die Zuhörer sind, dem Workshop-Charakter gemäß, in erster Linie erfahrene Perl-Anwender. Auf Grund der Räumlichkeiten haben wir aber auch Platz für weniger erfahrene Anwender. Vorträge sollten, müssen aber nicht, technisch ausgerichtet sein. Optimal wäre es, wenn wir Deinem Beitrag praktisch nutzbare Anregungen für die eigene Arbeit entnehmen könnten.

Ultrakurzvorträge (5 Minuten)

Ein Nachmittag des Workshops wird wieder für "Lighting Talks" zur Verfügung stehen. Hier können insbesondere diejenigen, die sich (noch) keinen langen Vortrag zutrauen, einen aktiven Beitrag zum Workshop leisten und ihren ersten Auftritt als Vortragende versuchen.

Ebenso ist hier Platz für Vorträge unter dem Motto "Mein liebstes Modul", in denen ein interessantes, nützliches und evtl. zu wenig bekanntes Perl-Modul kurz vorgestellt wird.

Kurzvorträge (20 Minuten)

Vortrag von 20 Minuten sowie anschliessend 5 Minuten Zeit für Fragen und Antworten. Kurzvorträge sind zum Beispiel zur Vorstellung von Projekten interessant.

Langvorträge (40 Minuten)

Vortrag von 40 Minuten sowie anschliessend 5 Minuten Zeit für Fragen und Antworten. Langvorträge sollten detailliert auf einen oder zwei besonders interessante technische Aspekte des Themas eingehen.
Tagungsband / CD

Wir produzieren zum Workshop im Rahmen unserer Möglichkeiten einen gedruckten Tagungsband sowie eine CD-ROM mit den Beiträgen aller bisherigen Workshops. Dazu benötigen wir eine schriftliche Ausarbeitung Deines Vortrags und Dein schriftliches Einverständnis für die Publikation in den Tagungsmaterialien [und im Web].
Termine

Bis Sonntag, den 14.08.2011, nehmen wir Vorschläge für Vorträge an. Bis Sonntag den 28.08.2011 wirst Du von uns eine Rückmeldung erhalten. Die schriftliche Ausarbeitung des akzeptierten Vortrags muss uns bis spätestens Freitag den 30.09.2011 vorliegen, damit er in den Tagungsband aufgenommen werden kann.

Im Zweifelsfall hilft es uns und Dir, wenn Du frühzeitig mit uns per Email (wsorga@perl-workshop.de) Kontakt aufnimmst, um Fragen zu stellen bzw. Unklarheiten zu klären.

Unverbindliche Themenvorschläge

Als Anregung (nicht als Ausschlussliste!) bieten wir hier eine Reihe von stichwortartigen Anregungen zu Themenbereichen, zu denen wir uns interessante Vorträge oder Tutorials vorstellen können:

* Debugging (Nutzung vorhandener Debugging-Tools)
* Testen (speziell z.B. Unit Testing, Test-First-Ansatz)
* Refactoring (im Sinne von Kent Beck/Martin Fowler)
* Entwurf
* Dokumentation (Automatisierung/Generierung)
* Codegenerierung (Code aus Spezifikationen)
* Mein liebstes CPAN-Modul
* Grundlagen-Vorträge zu den obigen Themen

Weitere Themen, zu denen wir uns interessante Vorträge vorstellen können (ohne Anspruch auf Vollständigkeit):

* Aktuelle Web-Frameworks: Catalyst, Jifty, AxKit2, ...
* Objektorientierung: Moose, Moose::Autobox, ...
* Datenbankabstraktion: DBIx::Class
* SPAM-Abwehr/Erkennung
* Unicode
* Perl-IO
* Perl 6
* Perl6-in-Perl5-Integration und vice versa
* "wirklich große" Perl-Systeme
* Releasemanagement
* Vergleich von "gleichen" Softwaresystemen (Template-Engines, Wikis, XML-Engines, ...)
* Verträglichkeit mit anderen Systemen
* (plattformübergreifende) GUI-Programmierung
* Erfahrungsberichte zum Einsatz von Perl (z.B. Inbetriebnahme grösserer Perl-Systeme (WebGUI, ...))
* Grundlagen-Tutorials zu allen Perl-Themen (XML, Web, DBI, ...)