CPAN lesen

Max Maischein

Frankfurt.pm

English Version

https://corion.net/talks/

English Questions are OK

Überblick

  • Wird mir der Vortrag helfen?

  • Modul finden

  • Modul installieren

  • Modul benutzen

  • Beispiele

Wer bin ich

  • Max Maischein

  • DZ BANK Frankfurt

  • Deutsche Zentralgenossenschaftsbank

  • Data Scientist

Leitmotiv

Erfahrung ist etwas, das man dann braucht, wenn man es am wenigsten hat

Abgrenzung

  • Keine feste Liste von Modulen (Task::Kensho, CPAN100, ...)

  • Keine Entscheidung / Einwertung die soll selber getroffen werden

  • Eigene Meinung markiert mit "🚨"

  • Lesehilfe/Entscheidungshilfe für MetaCPAN / CPAN

Ergebnis

  • Domänenkenntnis ist das wichtigste

  • ... bzw. wissen wo man nachschauen kann

  • CPAN ist gar nicht so zentral

    *

Das Problem

  • Wir brauchen X

     1:  X = Single sign on
     2:  X = XML
     3:  X = whatever
  • Wir nutzen Perl

  • Da gibt's doch was auf CPAN

  • Gibt's da was auf CPAN?

  • Das mache ich schnell selber!

Zielgruppe

  • Ihr

  • bzw. eine Teilmenge von Euch

  • hoffentlich eine große Teilmenge

Programmierer

  • Könnt programmieren

  • Noch kein Modul (selber) installiert

  • Noch kein Modul installieren lassen

  • Sollt Module vorschlagen / finden / einwerten

  • Oder selber schreiben

Modulautoren

  • Verbesserung der Themenorientierung

  • Verbesserung der Findbarkeit (-> Suche)

  • Verbesserung der Anwendbarkeit (-> Installation)

  • Verbesserung der Dokumentation (->Anwendung)

Schritte

  1. Wissen sammeln

  2. Module einwerten

  3. Installieren

Wissen sammeln

  • Themengebiet kennenlernen

  • Diskussionsforum finden (Mailingliste, Webseiten, FB Gruppe, ???)

  • Existierende Ansätze sichten

  • Existierende Programm+Programmiererdokumentation sichten

  • Existierende Bibliotheken etc. finden

  • Glück: Mehr als eine

  • Pech: Mehr als zwei

Wissen sammeln

Themengebiet

  • Gibt es Standardtestcases / Standardanwendungen

  • Wann war die letzte Änderung im Umfeld? An der API?

Beispiele zu Ansätzen

  • SAX vs. DOM bei XML Parsern

  • Dokumentenorientiert vs. Relational bei Datenbanken

  • Automatik vs. Getriebe beim Auto

(Perl-spezifische) Bibliotheken suchen

  • Google (ohne "Perl")

  • Google (mit "Perl")

  • CPAN mit gefundenen Schlüsselwörtern

  • StackOverflow

Module einwerten

Schwieriger Teil

"Sollte ich X oder Y nehmen?"

  • Stackoverflow: Closed as Opinion

  • Perlmonks.org: Longer-form, but still, what problem do you want to solve?

  • Datum der Nachrichten

Module einwerten

Also selber einwerten:

  • Gibt es Standardtestcases in der Domäne? (OpenSSL, OWASP Testsuite, ....)

  • Beispiel: Javascript Framework: "To-Do app"

  • When was the last change (module, API, topic)

CPAN vs. MetaCPAN

???

Moduldokumentation lesen

  • CPAN

  • Reading module documentation

  • +documentation, +bugs, +examples, +age, +author, +repositories

  • INSTALL

  • README

Moduldokumentation

POD Sections and what they mean

NAME

NAME - the name of the module

CPAN Metadaten

What's in a name?

  • The name puts you in a long tradition of similar names and expectations

  • The name describes you accurately

CPAN Families

  • "Acme"

  • "Simple" in everything but the name (XML::Simple, Filter::Simple, ...) (But also: LWP::Simple, Keyword::Simple, ...)

  • "Tiny" als Alternative, welche den Umfang auch beschreibt

  • "complexity" vs "complication"

ABSTRACT

single line description

SYNOPSIS

Simplest use possible

SEE ALSO

Where to go next

Prozessuale Abhängigkeiten

  • Lizenzen

  • Lizenzen der benötigten Module

  • API Keys und deren Verwaltung

Technische Abhängigkeiten

  • Benötigte Systemprogramme und -APIs (Win32::, C-Compiler zur Laufzeit)

  • Online-Zugang bei der Installation?

  • Source Filter?

Framework vs. Bibliothek

Framework calls you You call a library

Niemals ein Framework nehmen, da ein Framework monotheistisch ist.

Beispiel: Event-loops (AnyEvent, Mojo, ... )

Module installieren

Ist das Modul installiert?

 1:    perldoc -l Das::Modul
 2:
 3:    perl -MDas::Modul=99999999 -e1

Für Profis mit einem netten Sysadmin:

 1:    perl -MV=Das::Modul

Ist es schon installiert?

  • Sollte ich es kennen?

  • Perl core Module Module::Corelist

  • The best setup steps are no setup steps.

  • Maybe the module is installed already?

  • Authors:

  • every step roughly halves the number of people who will complete the process.

  • Keine zusätzlichen Schritte, fertige Pakete

Ist es schon auf der Zielmaschine installiert?

  • Wird später interessant

  • Works on my machine

  • Strawberryperl ist nicht Perl

  • Red Hat Perl ist nicht Perl

  • ActiveState Perl ist nicht Perl

  • "Jedes" Modul sollte in Makefile.PL / META.* / Build.PL / cpanfile stehen

Wie Modul installieren

/INSTALL-Datei lesen

/README-Datei lesen

Installing a module

Level 0

  • ask your sysadmin

  • zeroth decision:

    Testrun in a VM or on throwaway Google cloud instance

     1:  https://console.cloud.google.com/cloudshell/editor?pli=1&shellonly=true

Installing a module

Level 1

  1. use OS package manager + sysadmin

  2. Never use CPAN with the system perl

  3. apt-get install libwww-mechanize-chrome-perl

  4. ppm libwww-mechanize-chrome-perl

Installing a module

Level 2 (if not available on package repo):

  1. Use local::lib with system Perl

  2. Demo of CPAN setup w/local::lib

Installing a module

Level 3:

install another Perl under /usr/local/lib if available

Installing a module

Level 4:

Compile your own Perl

 1:	sh Configure -de
 2:	make
 3:	make test
 4:	make install

Install modules using cpan

Das Modul verwenden

  • the documentation

  • the links in the documentation (bare minimum the author thinks is needed)

  • the examples in the documentation

  • the examples in the distribution

  • the tests

  • Use the source, Luke

  • Ask the author

Danke

Danke

Fragen?

Danke

Fragen?

Slides sind online:

https://corion.net/talks/

Beispiele

Examples (blacklist, not-black-list):

[ ] IP handling NetAddr::IP / alte Version

Beispiele

Examples (blacklist, not-black-list):

[ ] JSON (JSON, JSON::Tiny, JSON::XS, Cpanel::JSON::XS, Mojo::JSON, keines gut)

Beispiele

Examples (blacklist, not-black-list):

[ ] YAML (YAML::Tiny, YAML::Syck, ...) 🚨 Tina fragen

Beispiele

Examples (blacklist, not-black-list):

[ ] XML: XML::Simple, XML::LibXML, XML::Twig, XML::Parser, XML::Compile, XML::DOM 🚨 XML::Twig (DOM-like) 🚨 XML::LibXML (DOM) 🚨 XML::Compile (Schreiben, wenn XSD vorhanden)

Beispiele

Examples (blacklist, not-black-list):

[ ] Web frameworks: Mojolicious, Dancer (2), CGI::Application, ... 🚨 Keines gut

Beispiele

Examples (blacklist, not-black-list):

[ ] Template: Use whatever your framework suggests

Beispiele

Examples (blacklist, not-black-list):

[ ] Config modules

Beispiele

Examples (blacklist, not-black-list):

[ ] Mail modules 🚨 MIME::Lite

Beispiele

Examples (blacklist, not-black-list):

[ ] Event loop: AnyEvent, Mojolicious, Net::Async, POE, ... 🚨 Future

Beispiele

Examples (blacklist, not-black-list):

[ ] Internationalization

Beispiele

Examples (blacklist, not-black-list):

[ ] Authentication

Beispiele

Examples (blacklist, not-black-list):

[ ] Web Scraping/HTTP 🚨 WWW::Mechanize + HTML::TreeBuilder 🚨 WWW::Mechanize::Chrome 🚨 Mojo::UserAgent

Beispiele

Examples (blacklist, not-black-list):

[ ] ORMs / SQL helpers 🚨 (keine)

Beispiele

Examples (blacklist, not-black-list):

[ ] Class builders 🚨 Moo 2, aber keines macht gute OO-APIs

Beispiele

Examples (blacklist, not-black-list):

[ ] Task::Kensho, Modern::Perl / modernperlbooks.com