SlideShare a Scribd company logo
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

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked (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
 

Similar to CPAN Curation

Continuous Integration In A PHP World
Continuous Integration In A PHP WorldContinuous Integration In A PHP World
Continuous Integration In A PHP World
Idaf_1er
 
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
Dan Poltawski
 

Similar to 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...
 

Recently uploaded

Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 

Recently uploaded (20)

From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 

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