SlideShare uma empresa Scribd logo
1 de 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

Mais conteĂşdo relacionado

Mais procurados

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
 
Laravel overview
Laravel overviewLaravel overview
Laravel overviewObinna Akunne
 
Robotframework
RobotframeworkRobotframework
RobotframeworkElla Sun
 
Laravel Tutorial PPT
Laravel Tutorial PPTLaravel Tutorial PPT
Laravel Tutorial PPTPiyush Aggarwal
 
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
 

Mais procurados (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
 

Destaque

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
 
Co-teaching can be wonderful !
Co-teaching can be wonderful !Co-teaching can be wonderful !
Co-teaching can be wonderful !Brent Daigle, Ph.D.
 
Hank torbert
Hank torbertHank torbert
Hank torberthanktorbert
 

Destaque (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
 

Semelhante a 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
 
Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Eurosport's Kodakademi #2
Eurosport's Kodakademi #2Benjamin Baumann
 
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
 

Semelhante a 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...
 

Último

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Último (20)

Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

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