Tuesday, October 13, 2015

Neues Design auf PerlTk.de

PerlTk.de erstrahlt in neuem Glanz. Seit heute wurde das neue Design freigeschaltet, an dem die letzten Monate gebastelt wurde, freigeschaltet. Auf Perfektion wurde zu Gunsten der Verfügbarkeit verzichtet. Jetzt kann auch unser Suchmaschinenmarktführer nicht mehr über fehlende Unterstützung von mobilen Geräten meckern.

Hier eine kleine Vorschau:


PerlTk.de hat zum Ziel, die Bausteine einer GUI unter Verwendung des Perl-Moduls Tk aufzuzeigen. Die einzelnen Bausteine sind mit Bildern und Beispielquellcodes versehen, damit sich speziell die Zielgruppe deutschsprachiger Anfänger schnell in der Programmierung von grafischen Benutzeroberflächen zurecht findet.

Das neue Design unterstützt dieses Vorhaben hoffentlich.

Wednesday, September 02, 2015

Perl-Veranstaltungen 2016

Jaja, bis Weihnachten ist noch lange hin und bis 2016 erst recht. Ich möchte aber trotzdem schonmal auf zwei Perl-Veranstaltungen im nächsten Jahr hinweisen:

1.) Die nächste YAPC::Europe findet 2016 in Cluj (Rumänien) statt. Das Datum wird noch bekanntgegeben. Das Team von Cluj.pm macht einen Super-Job was die Community-Arbeit angeht. Ich denke, die werden eine Super-Veranstaltung auf die Beine stellen.

2.) Vom 9.-11. März 2016 findet der 18. Deutsche Perl-Workshop in Nürnberg statt. Die Organisation haben die Erlanger Perlmongers übernommen. Das ist mittlerweile der dritte Deutsche Perl-Workshop den die Erlanger organisieren (immer schön im 4-Jahres-Abstand, mal gespannt, ob sie das 2020 wieder machen....).
Die Webseite ist schon online, Anmeldung und Vortragseinreichung sind schon möglich.

Die Ankündigungen sind jetzt lange genug im Voraus, so dass sich jeder Gedanken machen kann, was er/sie vortragen möchte.

Gibt es hier in der Leserschaft irgendwelche Wünsche, über was es Vorträge geben sollte?

Monday, August 31, 2015

Another moment, I love the Perl community for...

Yesterday evening Slaven Rezić created a new issue for one of my Mojolicious plugins. He recognized that there are some FAIL reports on cpantesters.org. I already got several mails from Slaven pointing to FAIL reports for other modules. It's great that some people look at reports and create bugreports when they see a pattern for failing tests (like new versions of a dependency, failing on specific operating systems, ...).

I answered that the tests fail probably due to a new version of CLDR::Number and that I will look into this issue today. But on my way to work this morning I got a mail that there is a new Pull Request for that Mojolicious plugin. The author of CLDR::Number - Nova Patch - has fixed the failing tests. Wow! Thanks for that!

So I was made aware of a problem with my module and I got a fix by two different people within just a few hours. And all I did was sleeping ;-)

Thanks to the CPANTesters for testing my code, Slaven Rezić for the analysis of the FAIL reports and the bugreport. And thanks to Nova Patch for fixing my code.

BTW: CPANTesters is looking for help. CPANTesters helped me several times to find bugs in my code.

Sunday, August 09, 2015

use B; - to the rescue

Wo bleiben die Fehlermeldungen? Das war die Frage, die es galt bei einem Kunden zu beantworten.
Ich möchte hier kurz zeigen, wie wir auf die Lösung gekommen sind. Dazu erst einmal ein paar
grobe Informationen zu der Umgebung:

*  Bei dem Kunden läuft ein selbstgeschriebener Webserver
*  Der Webserver "require"d die einzelnen Seiten

Das sieht dann ungefähr so aus:



Alles wird in den Namensraum "main" importiert und einmal geladene Seiten bleiben natürlich geladen,
so dass im Laufe der Zeit etliche Seiten "required" wurden. Ob die Lösung optimal ist, spielt hier
jetzt keine Rolle.

Um Fehler sauber mitzuloggen gibt es einen Signalhandler:

  $SIG{"__DIE__"} = sub{ log(...) };

Das funktioniert soweit gut. Nur in manchen Situationen - die reproduzierbar waren - blieben die
Fehlermeldungen aus. Die Seite machte aber nichts...

Nach etwas Fehleranalyse haben wir herausgefunden, dass der Signalhandler wohl an irgendeiner Stelle
überschrieben wurde. Festgestellt haben wir das mit zwei einfachen "print"-Statements:

  print "" . $SIG{"__DIE__"};

Einmal im Webserverskript und einmal in der Seite, die nicht mehr funktionierte. Die Subroutine war
in unterschiedlichen Speicherbereichen abgelegt.

Das Modul "B" hat uns dann geholfen. In dem Seitenskript habe ich dann folgendes eingefügt:


In dem SIG-Hash werden Subroutinenreferenzen gespeichert. Mit der Funktion "svref_2object" aus dem Modul
"B" kommt man an das Objekt zu der Referenz. Über dessen Methode "GV" kommt man an das Objekt des "Globs"
und darüber kommt man an den Dateinamen in dem die Sub zu finden ist.

Durch die Ausgabe sind wir darauf gestoßen, dass irgend ein Seitenskript wohl "CGI::Carp" lädt. "CGI::Carp"
überschreibt den Signalhandler, so dass unser eigener Signalhandler nicht greift.

Nachdem das rausgeschmissen war, griff unser Signalhandler wieder und alles war gut...

Wednesday, July 22, 2015

PDF als text/plain - WTF?


Dieser Beitrag hat nichts mit Perl zu tun, aber vielleicht interessiert es doch den Einen oder die Andere...

Einer meiner Kunden meldete sich bei mir und meinte, dass alle PDF-Dateien die er über OTRS verschickte beim Empfänger nur als weiße Seite ankommt. Ich konnte mir das nicht so ganz erklären, weil ich etliche OTRS-Instanzen bei  Kunden betreue und dieser Fehler ist mir bisher noch nicht untergekommen.

In einer Remotesitzung haben wir uns dann alles angeschaut. Erst das OTRS und wie dort das PDF abgelegt ist. Als Content-Type der Datei war "text/plain" angegeben. Das passt für eine PDF-Datei nicht so richtig.

Im OTRS-Code haben wir dann etwas Logging eingebaut und haben wir haben uns den Request über Firebug angeschaut. Und siehe da, es ist kein Fehler im OTRS, sondern das "text/plain" steht schon so im Request. Nach ein wenig Recherche hat sich rausgestellt, dass der Browser für den Content-Type verantwortlich ist und es beim Firefox eine Datei mit dem Namen mimeTypes.rdf gibt.

In dieser Datei war dann so ein Eintrag zu finden:


Dadurch wurden PDF-Dateien als "text/plain" hochgeladen. Nachdem hier der Eintrag für die Dateiendung pdf gelöscht war, hat alles funktioniert...

Friday, March 06, 2015

CPAN PullRequest Challenge: Februar 2015

Ich weiß, es ist kein Februar mehr und ich bin ein bißchen spät dran...

Für den Februar wurde mir DBIx::ThinSQL zugeteilt. Ich hatte davor noch nie von dem gehört hatte. Ich benutze auch - wenn es geht - eher DBIx::Class, aber DBIx::ThinSQL hat in meinen Augen auch ein etwas anderes Zielpublikum.

Es hilft Entwicklern/Entwicklerinnen dabei, SQL zu vermeiden und in Perl-Strukturen zu bleiben.


Nachdem ich mich mit dem Autor in Verbindung gesetzt hatte, habe ich auch eine ganze Auflistung an möglichen Aufgaben bekommen. Ich hatte auch vor einiges davon umzusetzen, aber mir ist die Arbeit dazwischengekommen und ich hatte zu wenig Zeit für die Aufgaben. Also habe ich mich darauf beschränkt, die ganzenen "packages" in einzelne Dateien aufzuteilen.

Mittlerweile wurde der PullRequest auch in einen Devel-Branch integriert... Jetzt freue ich mich auf meine März-Aufgabe.


BTW: Der CPAN PullRequest Challenge hat jetzt auch eine eigene Webseite: http://cpan-prc.org/. Und es ist noch nicht zu spät, damit anzufangen...

Monday, February 16, 2015

[PerlAcademy] Nächste Woche Mojolicious-Schulung (23.-27.02.2015)


Helau! Alaaf! In dieser Woche herrscht noch närrisches Treiben auf den Straßen. In der nächsten Woche kann es mit Spaß und Freude weitergehen - denn Webanwendungen entwickeln mit Mojolicious macht Spaß.

Für die Mojolicious-Schulung in der nächsten Woche haben wir noch einige Plätze frei. Lernen Sie an 5 Tagen das Mojolicious-Framework kennen und entwickeln Sie Ihre ersten Webanwendungen.

Mehr Informationen zu der Schulung finden Sie unter http://perl-academy.de/mojolicious

Haben Sie noch Fragen? Dann schreiben Sie uns doch einfach eine Mail an info@perl-academy.de

Möchten Sie direkt buchen? http://perl-academy.de/buchung?kurs=mojolicious

Wir würde uns freuen, Sie nächste Woche bei der Schulung begrüßen zu dürfen.

Friday, January 30, 2015

"Module des Monats"

Auf Perl-Academy.de schreibe ich jetzt jeden Monat über ein "Modul des Monats". Damit will ich auf einige Module aufmerksam machen, die wir entweder häufig nutzen oder die uns bei einem Problem geholfen haben.

Die ersten Beiträge:

Friday, January 23, 2015

Yak-Shaving January 2015 ;-)

You might know the problem: you work on anything (let's call it "A") and then you realise that you have to work on anything else ("B") before you can finish "A". And then you realize that you have to work on yet another thing ("C") to finish "B".

I wanted to work on a bugreport for my module Task::MojoliciousPlugins::PerlAcademy. I use this module to install a working Mojolicious environment for one of my classes. But how can I know the Plugins that work on a "clean" machine? That's why I wrote a few helper scripts to generate a matrix of all (except some "blacklisted" modules) plugins for Mojolicious. And I wanted the plugins that work with the latest Perl and the latest Mojolicious. Hence another script that installs new versions of Mojolicious for all installed Perl versions.

And finally I wanted a list that is as long as possible. That's why I decided to inform the authors when a problem is reported. So I ended with ~30 Pull Requests since Jan 01st and another 12 issues reported on Github. And there are a few bugs I filed on rt.cpan.org.

But now I get a few more "greens" than three weeks ago.

Contributing to Open Source is so much fun - especially when the Pull Requests where merged within a few seconds! Thanks to all maintainers!

What I've learned while doing all the stuff: I've used the MetaCPAN::Client module a lot. I didn't know anything about a lot of the modules, but then I tried to fix the issues... ;-) And tell other people about your work. After I mentioned the matrix in the #mojo channel on IRC, I got some "feature" requests within seconds and a few issues with my code were found. Thanks!

Next thing to do: automatically create a new version of my module when new plugins came to CPAN. Then I can close the RT ticket...

Monday, January 05, 2015

CPAN PullRequest Challenge 2015 - die andere Seite

Wie im letzten Beitrag geschrieben, nehme ich an der CPAN PullRequest Challenge 2015 teil. Heute mal "von der anderen Seite". Ich habe für eines meiner Module einen PullRequest für Test::CheckManifest bekommen.

Da ich nicht besonders gut darin bin, alles ausführlich zu dokumentieren, ist die Hilfe natürlich sehr willkommen. Danke #cpanpr und @FRACTAL!

Friday, January 02, 2015

CPAN PullRequest Challenge 2015

Neil Bowers hatte mal wieder eine seiner großartigen Ideen: Er organisiert die "CPAN PullRequest Challenge 2015". Dabei bekommt jede/r Teilnehmer/in jeden Monat ein CPAN-Modul zugewiesen, für das er/sie (mindestens) einen PullRequest im Laufe des Monats erstellen soll.

Auch für Perl-Einsteiger ist das eine tolle Gelegenheit. So lernt man einige Module kennen und kommt gleich mit den Möglichkeiten von OpenSource in Berührung.

Es geht nicht (unbedingt) darum, groß am Code rumzuschrauben. Es reicht auch wenn man Tippfehler in der Dokumentation verbessert. Bugfixing ist natürlich gerne gesehen ;-) Man wird auch nicht alleine gelassen. Im IRC-Channel kann man einige Experten fragen und auch auf der Mailingliste ist eine Menge los.

Bisher haben sich über 170 Teilnehmer gemeldet, d.h. wenn alle durchhalten, gibt es über 1700 PullRequests für CPAN-Module - wenn das kein Gewinn für die Perl-Community ist.

Mein erstes Modul ist gleich ein CPAN-Schwergewicht: DateTime. Ein sehr nütliches Modul wenn es zum Datum/Zeit-Aufgaben geht. Sei es zum Formatieren oder Berechnen von Zeitdifferenzen etc.

Ich mache mir den Einstieg in die Challenge einfach und gebe einen Hinweis für die Benutzung von from_epoche mit Time::HiRes.

Das kann doch jede(r), oder? Neil nimmt bestimmt noch Anmeldungen an ;-)