SlideShare ist ein Scribd-Unternehmen logo
1 von 22
CPAN Curation

Neil Bowers
NEILB
neil@bowers.com




                  1
User’s idealised view of CPAN
• Identify a need
• Go to search.cpan.org
• Find an obvious module to use, which
  •   Does exactly what you want
  •   Is well documented
  •   Has a reassuringly large test-suite
  •   Is stable
  •   Is actively supported
  •   Plays nicely with other CPAN modules




                                             2
I was looking for a module …
• … for generating random passwords
  • A quick search on search.cpan.org turned up 5 candidates

• Decided to use Crypt::RandPasswd
  • Based on a FIPS standard, thorough documentation, looked serious

• But it turns out to have a serious bug
  • Will occasionally get stuck in an infinite loop

• Decided to review all modules and post a summary
  • After more searching I had a list of 8 modules to review
  • After posting, Gabor pointed out a module I‟d missed
  • This prompted more searching, and I found a further 3




                                                                       3
Password modules




                   4
My current process
• Having decided on a topic, first: find all suitable modules
  • Search namespaces of modules found so far, synonyms, google, etc

• Standard format for reviews, which are built with TT2
  • Introduction, with summary table (compiled using MetaCPAN::API)
  • Separate section for each module, with standard SYNOPSIS style
    example
  • Comparisons
  • Conclusions, with recommendations for which module to use when

• Comparisons:
  • Performance, using Benchmark
  • Coverage, which can take a while, as usually have to compile corpus of
    test data
  • Possibly others, e.g. robot coverage for User-Agent modules

• Submit patches and/or bug reports as I go along
                                                                             5
Reviews so far
• Generating passwords
  • 12 modules, 3-5 of them actively maintained
  • No clear winner; App::Genpass or Crypt::YaPassGen

• Looking up the location of an IP address
  • 11 modules, 5 of them actively maintained
  • Coverage testing a challenge
  • Geo::IP best overall (IP::World and IP::info close runners up)

• Spelling out numbers in English
  • 4 modules, 1 actively maintained
  • I‟ve just been granted co-maintainer on Lingua::EN::Numbers

• Parsing User-Agent strings
  • 7 modules, 4 of them actively maintained
  • I‟m adopting HTTP::Headers::UserAgent, to resolve a CPAN confusion
  • Calling out for a unified module



                                                                         6
Observations




               7
It’s hard to find all modules
• Spread across multiple name-spaces
  • 12 password modules in 5 top-level name-spaces
  • I‟ve just discovered another IP Location module (Geo::Coder::HostIP)

• The one line summary sometimes not helpful
  • String::Urandom - An alternative to using /dev/random

• Module pages often don‟t present well in search engines




                                                                           8
More observations
• Volume of documentation not always a good indicator
  • Crypt::RandPasswd – lots of documentation, but don‟t use it
  • HTTP::DetectUserAgent – minimal doc, but good performance &
    coverage

• A wide spread of code quality, Perl generations &
  paradigms
• Module pod rarely puts the module in context
• Version number isn‟t always an accurate indicator
• There are lots of useful Perl web sites, but they‟re poorly
  linked
• Many modules don‟t gracefully handle invalid input
  • Or don‟t document their behaviour (most common reason I read code)   9
Even more observations
• There are some modules that just don‟t work
  • Not the same thing as the test-suite failing
  • No mechanism for retiring such modules (other than author deletion)

• Module authors aren‟t encouraged to cooperate
• It‟s often hard to make changes / contribute
  • Particularly if you come up with a lot of relatively small changes

• Lots of modules stop evolving once the author‟s needs
  are met




                                                                          10
Thoughts for improving the
situation




                             11
Curation of CPAN modules
• “The way to get good ideas is to get lots of ideas, and
  throw the bad ones away.” Linus Pauling
• In R&D a good solution is often found by trying lots of
  ideas
  • Sometimes one good approach floats to the top
  • Other things you pick a bit from here, a bit from there

• CPAN is very good at producing lots of alternatives
  • But there‟s no coordinated force for convergence
  • It‟s not the Perl way to tell people what to do

• So what might CPAN Curation mean?


                                                              12
Module groups and tags
• The ability to tag a module for group
  membership
  • A module could be in more than one group



• CPAN search could show group membership:




• Unified tags across all Perl sites & services
  • Modules, blog posts, documentation



                                                  13
Reviews of module groups
• Ability to associate a URL with a module group
  • Popular/large module groups likely to have multiple reviews
  • E.g. “handling of mobiles by User-Agent parsers” vs general review

• Require a PAUSE login to upload a link
  • Prevent spam

• Benefits of making such reviews highly visible
  •   Reduce likelihood of yet one more module
  •   Cross-pollination between existing modules
  •   Increase usefulness of CPAN?
  •   Encourage others to contribute (to) reviews




                                                                         14
Register use of a module
• Ability to register that you‟re using a module (& version)
  • CPAN shell & friends could do this for your automatically

• When a new version is released, you‟d receive
  notification
  • Differences listed in email, if module follows CPAN::Changes::Spec
  • When you install module, this would be updated (c.f. CPAN::Reporter)

• Would give module authors an estimate of # users
  • And how many people are using old versions
  • Could register “happy to be contacted by author”: anonymous mail
    forwarding

• Could also “follow” a module
  • Not using, but interested in hearing about updates
  • I‟d do this for most of the modules listed in reviews
  • Module authors could follow their competitors
                                                                           15
Semantic versioning
• Semver.org proposes a semantic versioning specification
  • What 0.x means
  • When to change Major, minor and patch version numbers
  • Tagging specification

• Align perlmodstyle with this
• Ability to record that you‟re following this in module
  metadata




                                                            16
Complete your module
• LinkedIn: complete your profile
  • Service works better if you do
  • Broken down into simple steps
  • Explanation of why each step is worthwhile


• This approach would help (new) module authors
  • I just released my first new module in years, and it would sure help me if
    there were such a checklist.
  • I suspect many authors upload their module and think “great, I‟m
    done”, or “er, now what?”
  • This could be provided by MetaCPAN
  • Relate to semantic versioning




                                                                             17
Module SEO
• Put the module one-line summary in <title> element
  • Conventions for how this will be presented, and thus how to write
  • For example, don‟t include “perl module for”

• Convention for providing module summary
  • =head1 SUMMARY?
  • First paragraph of DESCRIPTION?

• Put summary in <meta name=abstract>




                                                                        18
Module author pre-nup
I hereby give modules@perl.org permission to grant co-
maintainership to any of my modules, if the following
conditions are met:
   1.   I haven't released the module for a year or more
   2.   There are outstanding issues on RT which need addressing
   3.   Email to my CPAN email address hasn't been answered after a month
   4.   The requester wants to make worthwhile changes that will benefit CPAN

In the event of my death, then the time-limits in (1) and (3)
do not apply.


Note: there are plenty of „perfect‟ modules, which don‟t see or need releases. See (2) above.

                                                                                        19
Process for retiring modules
              “[in Perl] we never throw anything away” – Stevan Little


• Old, broken, unused modules stop turning up in
  searches
  • Would still be available on CPAN, if you really want to get it
  • E.g. Math::BigInt::Named

• This could be a long careful process
  •   People can nominate modules for retirement
  •   Try and contact the author, to give them opportunity to address problems
  •   Announce candidates, to give other people the chance to step forward
  •   Confirm any registered users, once that‟s implemented 
  •   Be less likely to retire a module if there‟s no real alternative.

• But don‟t rush
  • Long-dormant and broken modules can be given a new lease of life on
    adoption                                                                 20
What next?
• Try and get some of these ideas implemented
  • In metacpan.org, search.cpan.org, PAUSE, as appropriate?

• Publish the reviews as static HTML
  • Blog posts are expected to age, but I‟m keeping the reviews up-to-date
  • Formatting with blogs.perl.org markup is painful

• Update early reviews with tools I‟ve created recently
• Announce impending reviews and solicit input
  • Perlmonks? module-authors? Where else?

• Start doing some SEO and pimping
• More reviews
  • Find some co-curators? curators@perl.org?
  • And be more diligent at submitting bug reports, fixes, doc updates

                                                                             21
Thanks for feedback & ideas
• Olaf Alders
• Andreas Koenig
• Gabor Szabo




                              22

Weitere ähnliche Inhalte

Was ist angesagt?

Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...seleniumconf
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for seleniumapoorvams
 
Symony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP FrameworkSymony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP FrameworkRyan Weaver
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioCristopher Ewing
 
Repeating History...On Purpose...with Elixir
Repeating History...On Purpose...with ElixirRepeating History...On Purpose...with Elixir
Repeating History...On Purpose...with ElixirBarry Jones
 
Robotframework
RobotframeworkRobotframework
RobotframeworkElla Sun
 
Burp Plugin Development for Java n00bs - 44CON 2012
Burp Plugin Development for Java n00bs - 44CON 2012Burp Plugin Development for Java n00bs - 44CON 2012
Burp Plugin Development for Java n00bs - 44CON 201244CON
 
Dependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear youDependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear youRyan Weaver
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1Jason McCreary
 
GenRetry: Simple Exponential Backoff in Elixir
GenRetry: Simple Exponential Backoff in ElixirGenRetry: Simple Exponential Backoff in Elixir
GenRetry: Simple Exponential Backoff in ElixirPete Gamache
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debuggerIulian Dragos
 
CNIT 126 13: Data Encoding
CNIT 126 13: Data EncodingCNIT 126 13: Data Encoding
CNIT 126 13: Data EncodingSam Bowne
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
 
Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Ryan Weaver
 
Creating Perl modules with Dist::Zilla
Creating Perl modules with Dist::ZillaCreating Perl modules with Dist::Zilla
Creating Perl modules with Dist::ZillaMark Gardner
 
Functional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersFunctional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersDiego Freniche Brito
 

Was ist angesagt? (20)

Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
 
Java Basics for selenium
Java Basics for seleniumJava Basics for selenium
Java Basics for selenium
 
Symony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP FrameworkSymony2 A Next Generation PHP Framework
Symony2 A Next Generation PHP Framework
 
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radioAncient To Modern: Upgrading nearly a decade of Plone in public radio
Ancient To Modern: Upgrading nearly a decade of Plone in public radio
 
Repeating History...On Purpose...with Elixir
Repeating History...On Purpose...with ElixirRepeating History...On Purpose...with Elixir
Repeating History...On Purpose...with Elixir
 
Laravel overview
Laravel overviewLaravel overview
Laravel overview
 
Robotframework
RobotframeworkRobotframework
Robotframework
 
Laravel Tutorial PPT
Laravel Tutorial PPTLaravel Tutorial PPT
Laravel Tutorial PPT
 
Burp Plugin Development for Java n00bs - 44CON 2012
Burp Plugin Development for Java n00bs - 44CON 2012Burp Plugin Development for Java n00bs - 44CON 2012
Burp Plugin Development for Java n00bs - 44CON 2012
 
Dependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear youDependency Injection: Make your enemies fear you
Dependency Injection: Make your enemies fear you
 
All Aboard for Laravel 5.1
All Aboard for Laravel 5.1All Aboard for Laravel 5.1
All Aboard for Laravel 5.1
 
GenRetry: Simple Exponential Backoff in Elixir
GenRetry: Simple Exponential Backoff in ElixirGenRetry: Simple Exponential Backoff in Elixir
GenRetry: Simple Exponential Backoff in Elixir
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
 
CNIT 126 13: Data Encoding
CNIT 126 13: Data EncodingCNIT 126 13: Data Encoding
CNIT 126 13: Data Encoding
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 
Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)Being Dangerous with Twig (Symfony Live Paris)
Being Dangerous with Twig (Symfony Live Paris)
 
Creating Perl modules with Dist::Zilla
Creating Perl modules with Dist::ZillaCreating Perl modules with Dist::Zilla
Creating Perl modules with Dist::Zilla
 
Get to Know AtoM's Codebase
Get to Know AtoM's CodebaseGet to Know AtoM's Codebase
Get to Know AtoM's Codebase
 
Getting started with laravel
Getting started with laravelGetting started with laravel
Getting started with laravel
 
Functional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersFunctional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented Programmers
 

Andere mochten auch

Dist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDean Hamstead
 
Hank Torbert Avondale Ventures
Hank Torbert Avondale VenturesHank Torbert Avondale Ventures
Hank Torbert Avondale Ventureshanktorbert
 
Have more fun with Perl via Questhub
Have more fun with Perl via QuesthubHave more fun with Perl via Questhub
Have more fun with Perl via Questhubneilbowers
 
Getting started with Pod::Weaver
Getting started with Pod::WeaverGetting started with Pod::Weaver
Getting started with Pod::WeaverJoshua Keroes
 

Andere mochten auch (7)

Dist::Zilla - A very brief introduction
Dist::Zilla - A very brief introductionDist::Zilla - A very brief introduction
Dist::Zilla - A very brief introduction
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Hank Torbert Avondale Ventures
Hank Torbert Avondale VenturesHank Torbert Avondale Ventures
Hank Torbert Avondale Ventures
 
Have more fun with Perl via Questhub
Have more fun with Perl via QuesthubHave more fun with Perl via Questhub
Have more fun with Perl via Questhub
 
Getting started with Pod::Weaver
Getting started with Pod::WeaverGetting started with Pod::Weaver
Getting started with Pod::Weaver
 
Co-teaching can be wonderful !
Co-teaching can be wonderful !Co-teaching can be wonderful !
Co-teaching can be wonderful !
 
Hank torbert
Hank torbertHank torbert
Hank torbert
 

Ähnlich wie CPAN Curation

Clean code presentation
Clean code presentationClean code presentation
Clean code presentationBhavin Gandhi
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development_morgan
 
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014Michael Miles
 
Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Derek Jacoby
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8Heartin Jacob
 
Finding CPAN adoption candidates
Finding CPAN adoption candidatesFinding CPAN adoption candidates
Finding CPAN adoption candidatesneilbowers
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...SQALab
 
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundNDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundKarel Zikmund
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP WorldIdaf_1er
 
CodeIgniter for Startups, cicon2010
CodeIgniter for Startups, cicon2010CodeIgniter for Startups, cicon2010
CodeIgniter for Startups, cicon2010Joel Gascoigne
 
How to guarantee your change is integrated to Moodle core
How to guarantee your change is integrated to Moodle coreHow to guarantee your change is integrated to Moodle core
How to guarantee your change is integrated to Moodle coreDan Poltawski
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and SymfonyMichalSchroeder
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022 Michael Yagudaev
 
Random thoughts and dev practices / advices to build a great product
Random thoughts and dev practices / advices to build a great productRandom thoughts and dev practices / advices to build a great product
Random thoughts and dev practices / advices to build a great productGuillaume POTIER
 
Introduction to Drupal 7 - SEO
Introduction to Drupal 7 - SEOIntroduction to Drupal 7 - SEO
Introduction to Drupal 7 - SEOKalin Chernev
 
Lessons in Open Source from the MongooseJS ODM
Lessons in Open Source from the MongooseJS ODMLessons in Open Source from the MongooseJS ODM
Lessons in Open Source from the MongooseJS ODMValeri Karpov
 
To Patch or Custom: How to decide when to patch a contrib module or go custom...
To Patch or Custom: How to decide when to patch a contrib module or go custom...To Patch or Custom: How to decide when to patch a contrib module or go custom...
To Patch or Custom: How to decide when to patch a contrib module or go custom...Michael Miles
 

Ähnlich wie CPAN Curation (20)

Clean code presentation
Clean code presentationClean code presentation
Clean code presentation
 
Modern Module Development
Modern Module DevelopmentModern Module Development
Modern Module Development
 
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014
How to R.E.A.D: Steps for how to select the correct module @NEWDCamp 2014
 
Untangling - fall2017 - week 7
Untangling - fall2017 - week 7Untangling - fall2017 - week 7
Untangling - fall2017 - week 7
 
Design p atterns
Design p atternsDesign p atterns
Design p atterns
 
Working With Concurrency In Java 8
Working With Concurrency In Java 8Working With Concurrency In Java 8
Working With Concurrency In Java 8
 
Finding CPAN adoption candidates
Finding CPAN adoption candidatesFinding CPAN adoption candidates
Finding CPAN adoption candidates
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
 
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel ZikmundNDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
NDC London 2020 - Challenges of Managing CoreFx Repo -- Karel Zikmund
 
Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
 
CodeIgniter for Startups, cicon2010
CodeIgniter for Startups, cicon2010CodeIgniter for Startups, cicon2010
CodeIgniter for Startups, cicon2010
 
How to guarantee your change is integrated to Moodle core
How to guarantee your change is integrated to Moodle coreHow to guarantee your change is integrated to Moodle core
How to guarantee your change is integrated to Moodle core
 
SOA with PHP and Symfony
SOA with PHP and SymfonySOA with PHP and Symfony
SOA with PHP and Symfony
 
Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2
 
Prototyping like it is 2022
Prototyping like it is 2022 Prototyping like it is 2022
Prototyping like it is 2022
 
Random thoughts and dev practices / advices to build a great product
Random thoughts and dev practices / advices to build a great productRandom thoughts and dev practices / advices to build a great product
Random thoughts and dev practices / advices to build a great product
 
Introduction to Drupal 7 - SEO
Introduction to Drupal 7 - SEOIntroduction to Drupal 7 - SEO
Introduction to Drupal 7 - SEO
 
Rails tools
Rails toolsRails tools
Rails tools
 
Lessons in Open Source from the MongooseJS ODM
Lessons in Open Source from the MongooseJS ODMLessons in Open Source from the MongooseJS ODM
Lessons in Open Source from the MongooseJS ODM
 
To Patch or Custom: How to decide when to patch a contrib module or go custom...
To Patch or Custom: How to decide when to patch a contrib module or go custom...To Patch or Custom: How to decide when to patch a contrib module or go custom...
To Patch or Custom: How to decide when to patch a contrib module or go custom...
 

Kürzlich hochgeladen

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Kürzlich hochgeladen (20)

The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

CPAN Curation

  • 2. User’s idealised view of CPAN • Identify a need • Go to search.cpan.org • Find an obvious module to use, which • Does exactly what you want • Is well documented • Has a reassuringly large test-suite • Is stable • Is actively supported • Plays nicely with other CPAN modules 2
  • 3. I was looking for a module … • … for generating random passwords • A quick search on search.cpan.org turned up 5 candidates • Decided to use Crypt::RandPasswd • Based on a FIPS standard, thorough documentation, looked serious • But it turns out to have a serious bug • Will occasionally get stuck in an infinite loop • Decided to review all modules and post a summary • After more searching I had a list of 8 modules to review • After posting, Gabor pointed out a module I‟d missed • This prompted more searching, and I found a further 3 3
  • 5. My current process • Having decided on a topic, first: find all suitable modules • Search namespaces of modules found so far, synonyms, google, etc • Standard format for reviews, which are built with TT2 • Introduction, with summary table (compiled using MetaCPAN::API) • Separate section for each module, with standard SYNOPSIS style example • Comparisons • Conclusions, with recommendations for which module to use when • Comparisons: • Performance, using Benchmark • Coverage, which can take a while, as usually have to compile corpus of test data • Possibly others, e.g. robot coverage for User-Agent modules • Submit patches and/or bug reports as I go along 5
  • 6. Reviews so far • Generating passwords • 12 modules, 3-5 of them actively maintained • No clear winner; App::Genpass or Crypt::YaPassGen • Looking up the location of an IP address • 11 modules, 5 of them actively maintained • Coverage testing a challenge • Geo::IP best overall (IP::World and IP::info close runners up) • Spelling out numbers in English • 4 modules, 1 actively maintained • I‟ve just been granted co-maintainer on Lingua::EN::Numbers • Parsing User-Agent strings • 7 modules, 4 of them actively maintained • I‟m adopting HTTP::Headers::UserAgent, to resolve a CPAN confusion • Calling out for a unified module 6
  • 8. It’s hard to find all modules • Spread across multiple name-spaces • 12 password modules in 5 top-level name-spaces • I‟ve just discovered another IP Location module (Geo::Coder::HostIP) • The one line summary sometimes not helpful • String::Urandom - An alternative to using /dev/random • Module pages often don‟t present well in search engines 8
  • 9. More observations • Volume of documentation not always a good indicator • Crypt::RandPasswd – lots of documentation, but don‟t use it • HTTP::DetectUserAgent – minimal doc, but good performance & coverage • A wide spread of code quality, Perl generations & paradigms • Module pod rarely puts the module in context • Version number isn‟t always an accurate indicator • There are lots of useful Perl web sites, but they‟re poorly linked • Many modules don‟t gracefully handle invalid input • Or don‟t document their behaviour (most common reason I read code) 9
  • 10. Even more observations • There are some modules that just don‟t work • Not the same thing as the test-suite failing • No mechanism for retiring such modules (other than author deletion) • Module authors aren‟t encouraged to cooperate • It‟s often hard to make changes / contribute • Particularly if you come up with a lot of relatively small changes • Lots of modules stop evolving once the author‟s needs are met 10
  • 11. Thoughts for improving the situation 11
  • 12. Curation of CPAN modules • “The way to get good ideas is to get lots of ideas, and throw the bad ones away.” Linus Pauling • In R&D a good solution is often found by trying lots of ideas • Sometimes one good approach floats to the top • Other things you pick a bit from here, a bit from there • CPAN is very good at producing lots of alternatives • But there‟s no coordinated force for convergence • It‟s not the Perl way to tell people what to do • So what might CPAN Curation mean? 12
  • 13. Module groups and tags • The ability to tag a module for group membership • A module could be in more than one group • CPAN search could show group membership: • Unified tags across all Perl sites & services • Modules, blog posts, documentation 13
  • 14. Reviews of module groups • Ability to associate a URL with a module group • Popular/large module groups likely to have multiple reviews • E.g. “handling of mobiles by User-Agent parsers” vs general review • Require a PAUSE login to upload a link • Prevent spam • Benefits of making such reviews highly visible • Reduce likelihood of yet one more module • Cross-pollination between existing modules • Increase usefulness of CPAN? • Encourage others to contribute (to) reviews 14
  • 15. Register use of a module • Ability to register that you‟re using a module (& version) • CPAN shell & friends could do this for your automatically • When a new version is released, you‟d receive notification • Differences listed in email, if module follows CPAN::Changes::Spec • When you install module, this would be updated (c.f. CPAN::Reporter) • Would give module authors an estimate of # users • And how many people are using old versions • Could register “happy to be contacted by author”: anonymous mail forwarding • Could also “follow” a module • Not using, but interested in hearing about updates • I‟d do this for most of the modules listed in reviews • Module authors could follow their competitors 15
  • 16. Semantic versioning • Semver.org proposes a semantic versioning specification • What 0.x means • When to change Major, minor and patch version numbers • Tagging specification • Align perlmodstyle with this • Ability to record that you‟re following this in module metadata 16
  • 17. Complete your module • LinkedIn: complete your profile • Service works better if you do • Broken down into simple steps • Explanation of why each step is worthwhile • This approach would help (new) module authors • I just released my first new module in years, and it would sure help me if there were such a checklist. • I suspect many authors upload their module and think “great, I‟m done”, or “er, now what?” • This could be provided by MetaCPAN • Relate to semantic versioning 17
  • 18. Module SEO • Put the module one-line summary in <title> element • Conventions for how this will be presented, and thus how to write • For example, don‟t include “perl module for” • Convention for providing module summary • =head1 SUMMARY? • First paragraph of DESCRIPTION? • Put summary in <meta name=abstract> 18
  • 19. Module author pre-nup I hereby give modules@perl.org permission to grant co- maintainership to any of my modules, if the following conditions are met: 1. I haven't released the module for a year or more 2. There are outstanding issues on RT which need addressing 3. Email to my CPAN email address hasn't been answered after a month 4. The requester wants to make worthwhile changes that will benefit CPAN In the event of my death, then the time-limits in (1) and (3) do not apply. Note: there are plenty of „perfect‟ modules, which don‟t see or need releases. See (2) above. 19
  • 20. Process for retiring modules “[in Perl] we never throw anything away” – Stevan Little • Old, broken, unused modules stop turning up in searches • Would still be available on CPAN, if you really want to get it • E.g. Math::BigInt::Named • This could be a long careful process • People can nominate modules for retirement • Try and contact the author, to give them opportunity to address problems • Announce candidates, to give other people the chance to step forward • Confirm any registered users, once that‟s implemented  • Be less likely to retire a module if there‟s no real alternative. • But don‟t rush • Long-dormant and broken modules can be given a new lease of life on adoption 20
  • 21. What next? • Try and get some of these ideas implemented • In metacpan.org, search.cpan.org, PAUSE, as appropriate? • Publish the reviews as static HTML • Blog posts are expected to age, but I‟m keeping the reviews up-to-date • Formatting with blogs.perl.org markup is painful • Update early reviews with tools I‟ve created recently • Announce impending reviews and solicit input • Perlmonks? module-authors? Where else? • Start doing some SEO and pimping • More reviews • Find some co-curators? curators@perl.org? • And be more diligent at submitting bug reports, fixes, doc updates 21
  • 22. Thanks for feedback & ideas • Olaf Alders • Andreas Koenig • Gabor Szabo 22