Thursday, October 10, 2013

OPAR 2.0

Es ist vollbracht! Die letzten drei Tage war ich mit der Umstellung von OPAR auf Mojolicious beschäftigt. Auch auf einen neuen Server ist das jetzt umgezogen. Jetzt müssen nur noch die DNS-Server aktualisiert werden.

Vorher war alles mit CGI::Application umgesetzt.

Der Großteil des Codes musste nicht angefasst werden, sondern nur die Controller. Und dort waren die Arbeiten einfacher als gedacht. Größtenteils war es einfach ein "Suchen und Ersetzen". Die Tests nach der Umstellung haben noch ein paar Fehler zu Tage gebracht, die jetzt auch gefixt sind.

Im Zuge des Umbaus konnte auch einiges an Code gelöscht werden. Ein selbstgeschriebenes Session-Modul und andere Module sind aus OPAR rausgeflogen und auf die CPAN-Version umgestellt worden.

Jetzt läuft das ganze auch nicht mehr mit Apache sondern mit nginx als Frontend-Webserver und die Anwendung ansich mit Starman. Dank perlbrew ist jetzt Perl 5.18.1 statt Perl 5.10.1 (auf dem alten Server) im Einsatz.

Ein paar offene Punkte gibt es noch, aber ich bin mit dem Verlauf sehr zufrieden!

Noch eine wichtige Änderung in Sachen Sicherheit: Die Benutzerpasswörter werden nicht mehr mit einem einfachen crypt gehasht, sondern mittels Crypt::SaltedHash, wobei SHA-256 als Algorithmus eingesetzt wird. Autoren müssen das Passwort neu setzen...

Friday, September 27, 2013

Deutscher Perl-Workshop 2014 - Call for Papers

Du programmierst in Perl oder lehrst den Einsatz von Perl? Du hast neue Ideen, ein tolles Projekt oder eine spannende Geschichte zum Einsatz von Perl? Dann bist Du auf dem Deutschen Perl-Workshop 2014 genau richtig!

Wir bieten: mit dem Deutschen Perl-Workshop die größte deutschsprachige Veranstaltung zum Thema Perl genau die richtige Plattform für Deine Idee, Dein Projekt oder Deinen Erfahrungsbericht. 2014 findet der Deutsche Perl-Workshop vom 26.03. bis zum 28.03. im "Kulturzentrum FAUST Warenannahme" in Hannover statt. Zum Workshop 2013 fanden sich rund 130 Teilnehmer ein.

Wir suchen: Deine Idee. Dein Projekt. Deine Geschichte. Wir suchen anspruchsvolle Vorträge für unser Programm. Das können Lightning Talks (5min), Kurzvorträge (20min) oder Langvorträge (40min) sein. Solltest Du Anregungen für Vortragsthemen suchen, schaue bitte in den FAQ nach.

Vortragsvorschläge bitte über die Webseite einreichen. Ende der Einreichungsfrist ist der 22.12.2013! 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. Bis zum 10. Januar bekommst Du eine Benachrichtigung ob Dein Vortrag angenommen wurde oder nicht.

Wer wir sind: In diesem Jahr wird der Workshop von den Hannover Perlmongers organisiert. Die Perlmongergruppe gehört zu den aktivsten in Deutschland und trifft sich alle zwei Wochen.  Mehr Infos zu unseren regelmäßigen Treffen gibt es auf Twitter unter https://twitter.com/Hannover_pm und unter http://hannover.pm.

Unser Workshop lebt von den Vorträgen und den Teilnehmern. Wir freuen uns auf Dich - als Teilnehmer und als Vortragender.

Thursday, September 19, 2013

Frankfurter Perl-Community Workshop 2013

Neben den großen Veranstaltungen wie dem Deutschen Perl-Workshop oder der YAPC::Europe gibt es auch in jedem Jahr einen kleinen Perl-Workshop in Frankfurt. In diesem Jahr findet er am 26./27. Oktober statt.

Seit einigen Jahren treffen sich 15-20 Perl-Interessierte im Herbst in Frankfurt um über ihre Projekte oder allgemeine Perl-Themen zu reden. Im Gegensatz zu den großen Veranstaltungen gibt es hier keinen festen Vortragsplan. Jeder kann - auch ganz kurzfristig - einen Vortrag halten.

Auch über die Dauer eines Vortrags wird ganz dynamisch entschieden. So gab es vor ein paar Jahren mal einen Kurzvortrag, der vorher mit "der dauert sowieso nur 20 Minuten" angekündigt wurde und schließlich über 2 Stunden dauerte weil das Thema sehr interessant war und zu einigen Diskussionen führte.

Als fester Kern der Veranstaltung kommen in der Regel ca. 8 Frankfurter Perlmongers, der Rest kommt aus der ganzen Republik. Wer also Zeit und Lust hat, kann sich einfach im Wiki anmelden.

Wer schon im Vorfeld weiß, dass er/sie einen Vortrag halten will, bitte auch kurz im Wiki eintragen.

Jetzt das wichtigste: was kostet es und wo findet der Workshop statt? Für die Teilnehmer fallen keine besonderen für den Workshop an. Die Raumkosten und die Kosten für (Standard-)Getränke werden von Frankfurt.pm übernommen. Nur Mittagessen und ggf. Reise-/Übernachtungskosten muss jeder selbst tragen. Der Workshop findet im "Haus der Jugend" statt.

Wednesday, August 28, 2013

Jugend hackt!

Ich glaub es hackt! - und zwar in der nächsten Woche in Berlin. Am 7. und 8. September findet im Jugendhaus Königstadt die Veranstaltung "Jugend hackt" statt. Das Ganze wird von der Open Knowledge Foundation Deutschland organisiert. Und es gibt noch freie Plätze, offenbar gibt es noch freie Plätze.

Wer also zwischen 12 und 18 Jahre alt ist, Lust auf Coden und das Verarbeiten von Daten hat, sollte sich beeilen!

Ich selbst unterstütze das Event mit ein wenig Geld, einigen Perl-Magazinen und ich werde bei der Preisverleihung mal vorbeischauen. Ich bin schon sehr gespannt, was die junge Generation so alles dahinzaubert...

Monday, August 12, 2013

Spiele in Perl - Tetris und Freunde

Petris

Vor einiger Zeit habe ich auf der Suche nach Spielen in Perl/Tk auf backpan eine ältere Tetris-Implementierung gefunden: Petris. Sie stammt von Mark Summerfield und entstand so um 1998/1999.
Spaßeshalber habe ich einmal versucht die Skripten zum Laufen zu bringen. Nach der Installation von Tk::MesgBox, einem Modul, das man mittlerweile wie Petris nicht mehr auf CPAN findet, funktionierte es sogar.
Es reizte mich, dass der alte Quellcode noch voll funktionstüchtig war. Es gibt jetzt auch ein Video davon: Petris - a Perl/Tk implementation inspired by Tetris

tktetris aus Perl/Tk Tools

Nachdem ich ein bisschen mit dem Code herumgespielt habe und die verschiedenen .pl-Skripten in Module aufgelöst habe, habe ich noch eine weitere Implementierung gefunden: tktetris. Diese ist Bestandteil der Perl/Tk Tools und sieht so aus:

Wer also Lust hat mal eben schnell Tetris zu spielen und sich dabei nicht von Perl lösen möchte, der kann sich dieser beiden Varianten bedienen.

Andere Spiele in Perl

Es erschien mir etwas mühselig Spiele in Perl/Tk ausfindig zu machen. Es gibt sie jedoch. In Forum der Perlunity gab es ein Memory-Spiel (Screenshot hier), und Dank Greg Bacon gibt es Solitraire in Perl/Tk. Auf youtube finden sich auch noch weitere Videos von grafisch hübschen Spielen, z.B. einem Pacman-Klon oder nochmal Tetris (mit Sound).

Thursday, July 18, 2013

Perl-Datenstrukturen in grafischer Oberfläche anzeigen

Perl/Tk hat es, und jetzt gibt es auch eine Variante mit dem GUI-Toolkit Prima: ein Widget zum Ausgeben von Datenstrukturen. (nb: gefunden in Perl Weekly)

Mit Data::Dumper::GUI stellt Toby Inkster ein Perl-Modul zur Verfügung das es einem erlaubt eine Perl-Datenstruktur in einer grafischen Oberfläche zu inspizieren.

Beispiel:

#!perl

use strict;
use warnings;
use Data::Dumper::GUI;

my @variables = (
    ['CP',
        [
            ['DP1', ['kein', 'Student']],
            '1',
            ['IP',
                [
                    't1',
                    ['VP',
                        [
                            ['V', ['blamierte'],],
                            'sich1',
                        ],
                    ],
                ],
            ],
        ],
    ], # /CP
);

print Dumper(@variables);
exit(0);

Das Ergebnis sieht wie folgt aus:



Für Perl/Tk gibt es so etwas in Form von Tk::DataTree. Ein Beispiel mit Bild gibt es auf perltk.de zu sehen.

Vielleicht hat ja noch jemand eine weitere Variante im Petto? In Wx oder Gtk2?

Friday, June 14, 2013

OTRS und die Paketverifizierung

Seit kurzem gibt es im OTRS Paketmanager eine Paketverifikation (OTRS >= 3.1.16 bzw. 3.2.7), die zu einigem Unmut geführt hat. Nicht, dass es eine Paketverifikation gibt ist hier das Problem, sondern die Vorgehensweise der Nicht-Kommunikation und Diskreditierung von Drittanbietern (Disclaimer: Ich gehöre zu diesen Drittanbietern). Außerdem bin ich der Hauptentwickler und Betreiber von OPAR, dem OTRS Package Archive, doch dazu später mehr.

Bei der Paketverifikation wird für das Paket eine MD5-Summe erzeugt und zusammen mit dem Paketnamen an einen Webservice der OTRS AG übermittelt. Stimmen die Werte mit denen überein, die bei der OTRS AG hinterlegt sind ist alles in Ordnung. Andernfalls bekommt der Benutzer eine Warnung angezeigt, die auch ganz klar die Empfehlung ausspricht, das Paket nicht zu installieren.

Wie wird denn jetzt ein Paket verifiziert? Man muss seinen kompletten Code an die OTRS AG schicken und die prüfen dann manuell, ob das Paket Auswirkungen auf die Stabilität und die Sicherheit hat.

Hier tauchen schon die ersten Probleme auf:

  •  Welche Kriterien werden angewandt? Auf meine Mails habe ich bisher entweder keine oder nur sehr allgemein formulierte Antworten bekommen.
  •  Wenn die Pakete sehr spezifische Einstellungen oder Code enthält, der "geschäftskritisch" für meinen Kunden ist, dann darf ich den nicht einfach so weitergeben, also kann ich das nie verifizieren lassen.
  •  Es vergeht viel Zeit von der Einreichung des Codes bis zur Verifizierung durch die OTRS AG. Für ein Paket, das ich verifizieren lassen wollte, liegt mir auch nach über einer Woche noch keine Aufwandsabschätzung und Angebot vor.
  •  Wenn ich Code für das Kernprodukt beisteuere muss ich ein "Contributor Agreement" unterschreiben, in dem steht, dass ich alle Rechte an allen Einsendungen die ich für irgendein Projekt der OTRS AG mache an die OTRS AG abtrete. Die Paketverifikation ist ein Projekt der OTRS AG. Ist das Einreichen von Paketen zur Verifikation schon eine "Contribution"?

Die Probleme gehen weiter:

  • Die Verifikation wird nur ausgeführt, wenn ein zusätzliches Modul für https installiert ist
  • Wenn ein Paket den Paketmanager oder das UserAgent-Modul überschreibt ist die Verifikation dahin und der User merkt nichts bzw. die Sicherheit ist nur vorgetäuscht.
  • Die rein manuelle Verifikation ist sehr fehleranfällig. Wer garantiert ein sehr gutes Perl-Wissen desjenigen, der das Paket verifiziert?
  • Was passiert wenn zwei Anbieter den gleichen Paketnamen verwenden? Wenn z.B. Anbieter A ein Paket X verifizieren lässt und Anbieter B sein Paket ebenfalls X nennt und verifizieren lässt?


Die c.a.p.e IT hat mittlerweile das Paket ConfigureCallHome veröffentlicht, mit dem man die Verifikation optional deaktivieren kann. Sie haben auch in einer Pressemitteilung ihren Unmut über die Paketverifikation kundgetan.

Und die OTRS AG hat dazu eine Stellungnahme formuliert. Auf diese möchte ich hier noch eingehen:

"Im Sinne des Open Source-Gedankens begrüßt die OTRS AG weiterhin jedes zur Verifizierung eingereichte Software-Paket..."
Natürlich begrüßen sie jedes eingereichte Software-Paket. Immerhin verdienen sie damit Geld, die Pakete zu verifizieren. Ich begrüße auch jede Gelegenheit, relativ leicht Geld zu verdienen. Was das aber mit "Im Sinne des Open Source-Gedankens" zu tun hat, ist mir schleierhaft. Im Sinne des Open Source begrüße ich jede veröffentlichte OTRS-Erweiterung. Für Open Source braucht es keine Verifizierung, sonst wäre ja Perl und das CPAN - dessen sich die OTRS AG übrigens für die Programmierung von OTRS ja bedient - kein Open Source.

"...und stellt auf Anfrage jedem Interessierten den Katalog der Verifizierungskriterien zur Verfügung."
Davon habe ich bisher noch nichts gemerkt. Ich habe den bisher noch nicht bekommen - obwohl ich lieb bei verify@otrs.com nachgefragt habe.

"Die OTRS AG steht in ständigem und regem Austausch mit der Community."

Ständiger und reger Austausch? Über dieses Thema wurde nicht öffentlich gesprochen - weder auf der Mailingliste noch im Forum. Vielleicht ist es mir durch die Lappen gerutscht, aber vermutlich nicht allen, die ihren Unmut geäußert haben und die Forensuche hat auch nichts ergeben. Zusätzlich hat sich die OTRS AG jetzt erst auf die Pressemitteilung von c.a.p.e IT geäußert und nicht in dem oben verlinkten Thread.

Wenn es einen anständigen Dialog gegeben hätte, hätte man gleich was ordentliches machen und viel Unmut vermeiden können. Das hätte zwar mehr Zeit gekostet, aber der Nutzen wäre viel größer.

"als auch die Tatsache, dass im von der Community betriebenen OTRS Package Archive (OPAR) jeder unter Verwendung eines Pseudonyms ohne jegliche Sicherheitsprüfung Pakete veröffentlichen kann, spricht für ein geringes Sicherheitsbewusstsein, für das die OTRS AG keine Verantwortung übernehmen kann und auch nicht will."
Jetzt setze ich mir den Hut des Hauptentwicklers von OPAR auf: Ja, jeder kann unter Verwendung eines Pseudonyms Pakete veröffentlichen. OPAR ist als CPAN-Pendant für OTRS gedacht. Denn je mehr Entwickler ihre Leistungen der Allgemeinheit bereitstellen, um so besser kann das einzelne OTRS werden. Warum muss für jedes OTRS so etwas wie MultiSMTP neu entwickelt werden? Jeder soll doch von den Erfahrungen und Entwicklungen der anderen profitieren.

Ohne jegliche Sicherheitsprüfung? Jein. Ich habe Perl::Critic::OTRS geschrieben (das anscheinend auch bei der OTRS AG bzw. einigen Entwicklern dort genutzt wird), bei dem auch auf Systemaufrufe geprüft wird. Also nicht ganz ohne einen kleinen Blick auf die Sicherheit zu werfen. Ich würde gerne noch mehr machen, aber der Tag hat nur 24 Stunden.

Aber @OTRS_AG: Wie wäre es, wenn ihr alle Module auf OPAR kostenlos verifizieren würdet (auch ohne Contributor Agreement etc)? Das wäre eine super Sache für die Community!

Der Admin in einem kleinen Unternehmen der eine kleine Erweiterung geschrieben hat, möchter sicherlich kein Geld ausgeben um diese Erweiterung verifizieren zu lassen...

Was ich mir wünschen würde:

  • Ein echter Dialog mit der Community und den Drittanbietern
  • Eine Offenlegung der Kriterien der Verifizierung
  • Die Möglichkeit, dass man selbst Pakete verifizieren kann
  • Die OTRS AG als echter Teil der Community
  • und noch vieles mehr...

Tuesday, May 28, 2013

Neue Version von Perl/Tk - Tk-804.031

Eine neue Version von Perl/Tk ist da!

Am 25.05.2013 wurde Tk v804.031 veröffentlicht. Interessant für alle die gerne mit GUIs in Perl/Tk arbeiten.
Mein letzter Blick auf Tk in CPAN ist schon etwas her. Die Dokumentation sieht mittlerweile ganz schön aus.

Neben einer umfangreichen Einführung in Tk sind die verschiedenen Widgets und Tk-Funktionen übersichtlich aufgeführt: http://search.cpan.org/~srezic/Tk-804.031/Tk.pod

Wer Probleme bei der Installation hat - z.B. unter Windows mit ActiveState Perl via cpan-Shell, der wird in der entsprechenden Readme fündig: http://cpansearch.perl.org/src/SREZIC/Tk-804.031/README-ActiveState.txt
Vielleicht gibt es ja schon bald ein fertiges PPM-Paket.

(der Daumen stammt aus der Open Icon Library)


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/