Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Der Weg zur ersten Millionen....

Renee
April 13, 2016

Der Weg zur ersten Millionen....

Um alle möglichen Mojolicious, Dancer, Dancer2 und Catalyst Plugins zu testen, wurde eine kleine Anwendung geschrieben, so dass ich mittlerweile bei über 1 Millionen übermittelten CPAN-Tests bin.

Renee

April 13, 2016
Tweet

More Decks by Renee

Other Decks in Programming

Transcript

  1. Der Weg zu meiner ersten Million...

    View Slide

  2. Der Weg zu meiner ersten Million...

    View Slide

  3. Leider keine Euros...

    Sondern nur Testreports von CPAN-Modulen

    Aber auch das ist ganz nett...

    View Slide

  4. Der Weg zu meiner ersten Million...
    CPANTesters.org

    View Slide

  5. Tests waren nicht das Ziel...

    Die Tests sind nur ein Nebenprodukt der Arbeit.

    Das eigentliche Ziel ist ein ganz anderes

    Ich werde hier einige markante Wegstellen
    zeigen

    Das eigentliche Ziel war...

    View Slide

  6. Der Anfang...
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  7. Task::MojoliciousPlugins::PerlAcademy

    Task::-Module nur Auflistung von
    Abhängigkeiten

    In diesem Falle alle funktionsfähigen
    Mojolicious-Plugins auf Schulungsrechner
    installieren

    View Slide

  8. Probleme

    Welche Plugins gibt es?

    Welche funktionieren mit der aktuellen
    Mojolicious-Version?

    Welche funktionieren mit der aktuellen Perl-
    Version?

    View Slide

  9. Task::MojoliciousPlugins::PerlAcademy

    View Slide

  10. Meta::CPAN

    Auslesen welche Mojolicious-Plugins es gibt

    Welche Versionen sind aktuell?

    Unter welcher URL sind die zu finden?

    02packages.txt.gz

    MetaCPAN::Client

    View Slide

  11. my $url = 'http://www.cpan.org/modules/'
    . '02packages.details.txt.gz';
    getstore $url, '/tmp/test.txt.gz';
    my $parser = Parse::CPAN::Packages->new(
    '/tmp/test.txt.gz'
    );
    my @distributions = $parser->latest_distributions;
    my %modules;
    for my $dist ( @distributions ) {
    my $name = $dist->dist;
    next if $name !~ m!^Mojo (?:X|licious)?-!x;
    my $version = $dist->version;
    $modules{$name} = $version;
    }

    View Slide

  12. my $mcpan = MetaCPAN::Client->new(
    ua => HTTP::Tiny->new(),
    );
    for my $name ( keys %modules ) {
    my $releases = $mcpan->release(
    {
    all => [
    { distribution => $name },
    { version => $version }
    ]
    }
    )->next;
    my $release = $releases ?
    $releases : $mcpan->release( $name );
    my $abstract = $release->abstract;
    printf “%s (%s): %s\n see %s“,
    $name, $modules{$name}, $abstract,
    $release->download_url;
    }

    View Slide

  13. Zwischenstopp

    Es sind jetzt alle Plugins bekannt

    Und können mit dem installierten Perl u.
    Mojolicious getestet werden

    Darstellung auf einer statischen Webseite für
    einen schnellen Überblick

    View Slide

  14. Probleme

    Wie sieht es mit anderen Perl-Versionen
    (Developer-Releases, …) aus?

    Es soll nicht jedesmal alles getestet werden
    (ca. 400 Plugins) auch wenn sich nichts
    geändert hat.

    View Slide

  15. Webseite +
    Task::MojoliciousPlugins::PerlAcademy
    perlbrew

    View Slide

  16. perlbrew, SQLite

    Mit perlbrew kann man sehr leicht mehrere
    Perl-Versionen nebeneinander betreiben
    → Alternative: plenv

    Ausführen von Programmen auf allen
    installierten Versionen

    View Slide

  17. perlbrew
    perlbrew install 5.23.8
    perlbrew use 5.23.8
    perl -v
    perlbrew install 5.22.1
    perlbrew use 5.22.1
    perl -v
    perlbrew exec perl -v

    View Slide

  18. SQLite
    Webseite +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  19. Zwischenstopp

    Es werden schon frühzeitig Probleme mit
    zukünftigen Perl-Versionen erkannt

    SQLite ist extrem genial um schnell eine
    Datenbank aufzubauen.

    Wunsch im #mojo-IRC: Bei Fehlern soll die
    Fehlermeldung erreichbar sein

    View Slide

  20. SQLite
    BUMM!
    Webseite mit Fehlerdetails +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  21. Probleme

    Durch die Speicherung der Fehlermeldungen
    wurde die SQLite-DB zu groß
    → Zugriffszeiten zu lang
    → Umstieg auf PostgreSQL

    View Slide

  22. Probleme

    Es werden nicht immer die neuesten Versionen
    der Abhängigkeiten getestet

    Wenn zu viele Module schon installiert sind,
    fallen Fehler in der Liste der Abhängigkeiten
    nicht auf
    → Abhängigkeiten werden nicht aufgelistet, sind
    aber durch andere Plugins schon installiert

    View Slide

  23. local::lib
    Webseite mit Fehlerdetails +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  24. local::lib

    Ermöglicht die Installation von Modulen in
    komplett eigenständigen Verzeichnissen
    → Jede Mojolicious-Version wird in ein eigenes
    Verzeichnis installiert
    → Jedes Plugin bekommt ein eigenes Verzeichnis,
    dadurch keine Kenntnis der vorher installierten
    Plugins

    View Slide

  25. local::lib
    cpanm --local-lib $tempdir $pluginname
    cpanm --local-lib $tempdir2 $pluginname2
    perl -I $tempdir -M $pluginname -e 1

    View Slide

  26. „Problem“

    Soll ich die Ergebnisse nur für mich behalten?

    Ich freue mich über Testergebnisse meiner
    Module
    → CPANTester.org

    View Slide

  27. cpanm::
    reporter
    Webseite mit Fehlerdetails +
    Testreports +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  28. App::cpanminus::reporter

    Nach der Installation einmal konfigurieren

    Nach der Installation von Modulen einfach
    cpanm-reporter --build-dir $dir

    View Slide

  29. Problem

    Rückmeldungen der CPANTester-Gurus Slaven
    und Andreas

    „Reportangabe zu Perl-Version passt nicht zu
    Angabe in den Tests“

    „Warum schickst Du so viele Testergebnisse“

    „…“

    View Slide

  30. Umstellung der Programmaufrufe
    PERL5LIB=/mojolib perlbrew --with perl-5.23.8 \
    cpanm --local-lib $tempdir $pluginname
    $perlbrew_path/perl-5.23.8/bin/cpanm-reporter \
    --build-dir $builddir

    View Slide

  31. „Problem“

    Nicht alle Autoren reagieren auf die Mails von
    CPANTesters.org

    Oder sind nicht mehr sehr aktiv

    View Slide

  32. Github
    Webseite mit Fehlerdetails +
    Testreports +
    Bugfixes +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  33. Github

    Die meisten Plugins sind auf Github, macht das
    Patchen sehr einfach
    – Wer einen Account hat, kann auf das Repo gehen,
    auf Bearbeiten klicken, speichern, PullRequest
    erstellen

    Einige PullRequests wurden innerhalb von
    „Sekunden“ angenommen, andere warten sein
    über einem Jahr...

    View Slide

  34. Webseite mit Fehlerdetails +
    Testreports +
    Bugfixes +
    Task::MojoliciousPlugins::PerlAcademy

    View Slide

  35. Übersicht

    Parse::CPAN::Packages + MetaCPAN::Client

    perlbrew

    cpanminus + local::lib

    SQLite vs. PostgreSQL

    CPANTesters

    Github mit PullRequests

    View Slide

  36. http://matrix.perl-services.de

    View Slide

  37. Ausblick

    Aufbau der Testinfrastruktur für eigene
    Webprojekte

    Aktuelles Developer-Release von Perl in allen
    möglichen Konfigurationen

    View Slide