SlideShare a Scribd company logo
Jeffrey Thalhammer


S o f t w a r e   S y s t e m s




jeff@imaginative-software.com
Using CPAN For Private
        Code
     San Francisco Perlmongers
         February 23, 2010
On The Menu Tonight...

 Reasons To Create CPAN Distros

 Case Study: Foo Financial Company

 Assorted Tools You Can Use
This presentation was originally titled...



Why You Should Create
   CPAN Distros
But it really is about...


Why Perl Applications
 Should Have Build
     Systems
...and CPAN is just one way to do it.
Well, why?
Organization!
   Products
 Distributions

   Modules
  Subroutines
  Statements
A Well-Known Layout
   A proper place for...


         scripts
         libraries
         tests
Dependency
       Management
CPAN.pm Does All The Work
Meta-Version Control
Detect Circular Dependencies
Identify Dependency Flavors:
  “requires”
  “build_requires”
  “configure_requires”
  “author_requires”
Separation Of
           Concerns
Author-time    Build-time     Install-time

         Usernames and Passwords
         Resource Paths
         Configuration Stuff
Sharing And
        Distribution

Easy to identify (i.e. named, versioned)

Easy to transport (as *.tar.gz files)

Well-known install procedure
Tool Chain Support

    CPAN

    Module::Build

    More on this later...
Case Study:
Foo Financial Company
 500k lines of Perl code
 100s of scripts, 100s of modules
 No automated test cases
 RCS-like version control
 Quasi-separate DEV and PROD
 Deploy by manually copying to PROD
Havoc Ensued

Which files need to be deployed?
Which versions of the files?
How do I role back?
What are the parts of this system?
How do changes affect other parts?
A Solution:

Divide product into Distros.
Publish Distros into a private CPAN.
Assemble product from private CPAN.
Automate everything!
SVN                                 CruiseControl
             commit   trunk/
                        Foo-Reporting/               checkout
                                                                     $ ./Build
                        Foo-Interfaces/
                                                                     $ ./Build test
                        Foo-Utilities/
 Empty Distro.                                                       $ ./Build install
Simply depends          Foo-Everything/
 on other top-                                                       $ ./Build dist
  level Foo::*                                         add &                                                     Every
    modules           trunk/CPAN/authors/id/F/FOO/    commit                                                   commit
                        Foo-Reporting-8.01.tar.gz                    Foo-Reporting-8.01.tar.gz                produces a
                                                                                                             Distro with a
                        Foo-Interfaces-2.37.tar.gz                                                           new version
A private CPAN,
   containing
                        Foo-Utilities-6.01.tar.gz                                                              number
everything that         Foo-Everything-1.02.tar.gz
Foo depends on                                       HTTP GET
                                                                      $ cpan Foo-Everything


  A temporary
location, that will    /tmp/lib/perl5/site_perl
contain all Foo::*                                    installs
  modules and           Foo/Reporting.pm
 their non-core         Foo/Interfaces.pm
  dependencies
                        Foo-Utilities.pm
                                                                                         Finished product!

                                                          archives
                                                                                Foo-1.45.tar.gz
Some Tips:
At first, put Everything in one fat Distro.
But later, may 1000 Distros bloom!
Think about how to name & number versions.
Create special accounts for automated jobs.
Any SCM and build server will do the job.
Know your target Perl environment.
Some Supporting Tools
      CPAN::Mini
      CPAN::Mini::Inject
      CPAN::Site
      Module::Starter
      Dist::Zilla
Jeffrey Thalhammer


S o f t w a r e   S y s t e m s




jeff@imaginative-software.com

More Related Content

What's hot

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
Joshua Thijssen
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
Andrey Smirnov
 
Apache solr configuration with drupal 7
Apache solr configuration with drupal 7Apache solr configuration with drupal 7
Apache solr configuration with drupal 7
NewTechFusion Cybertech Pvt Ltd
 
Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1
Sam Kim
 
Tonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rarTonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rar
DeborahPadilla1
 
Linux internet server security and configuration tutorial
Linux internet server security and configuration tutorialLinux internet server security and configuration tutorial
Linux internet server security and configuration tutorial
annik147
 
SquirrelMail for webmail
SquirrelMail for webmailSquirrelMail for webmail
SquirrelMail for webmail
Aryman Gautam
 
Rpi python web
Rpi python webRpi python web
Rpi python web
sewoo lee
 
Porting Gentoo to DragonFly
Porting Gentoo to DragonFlyPorting Gentoo to DragonFly
Porting Gentoo to DragonFly
Naohiro Aota
 
Internet Archive Video Presentation
Internet Archive Video Presentation Internet Archive Video Presentation
Internet Archive Video Presentation
tracey jaquith
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
Cheng Wig
 
PHP selber bauen
PHP selber bauenPHP selber bauen
PHP selber bauen
Walter Ebert
 
FreeBSD - LinuxExpo
FreeBSD - LinuxExpoFreeBSD - LinuxExpo
FreeBSD - LinuxExpo
webuploader
 
Make container without_docker_7
Make container without_docker_7Make container without_docker_7
Make container without_docker_7
Sam Kim
 
ExaBGP at LINX 83
ExaBGP at LINX 83ExaBGP at LINX 83
ExaBGP at LINX 83
Thomas Mangin
 
Deploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRubyDeploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRuby
Joe Kutner
 
Sahul
SahulSahul
Tibet 5.0 / CouchDB
Tibet 5.0 / CouchDBTibet 5.0 / CouchDB
Tibet 5.0 / CouchDB
bedney
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
艾鍗科技
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guide
wensheng wei
 

What's hot (20)

Deploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APTDeploying and maintaining your software with RPM/APT
Deploying and maintaining your software with RPM/APT
 
aptly: Debian repository management tool
aptly: Debian repository management toolaptly: Debian repository management tool
aptly: Debian repository management tool
 
Apache solr configuration with drupal 7
Apache solr configuration with drupal 7Apache solr configuration with drupal 7
Apache solr configuration with drupal 7
 
Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1 Make container without_docker_6-overlay-network_1
Make container without_docker_6-overlay-network_1
 
Tonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rarTonehammer Requiem Professional [KONTAKT] .rar
Tonehammer Requiem Professional [KONTAKT] .rar
 
Linux internet server security and configuration tutorial
Linux internet server security and configuration tutorialLinux internet server security and configuration tutorial
Linux internet server security and configuration tutorial
 
SquirrelMail for webmail
SquirrelMail for webmailSquirrelMail for webmail
SquirrelMail for webmail
 
Rpi python web
Rpi python webRpi python web
Rpi python web
 
Porting Gentoo to DragonFly
Porting Gentoo to DragonFlyPorting Gentoo to DragonFly
Porting Gentoo to DragonFly
 
Internet Archive Video Presentation
Internet Archive Video Presentation Internet Archive Video Presentation
Internet Archive Video Presentation
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
 
PHP selber bauen
PHP selber bauenPHP selber bauen
PHP selber bauen
 
FreeBSD - LinuxExpo
FreeBSD - LinuxExpoFreeBSD - LinuxExpo
FreeBSD - LinuxExpo
 
Make container without_docker_7
Make container without_docker_7Make container without_docker_7
Make container without_docker_7
 
ExaBGP at LINX 83
ExaBGP at LINX 83ExaBGP at LINX 83
ExaBGP at LINX 83
 
Deploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRubyDeploy, Scale and Sleep at Night with JRuby
Deploy, Scale and Sleep at Night with JRuby
 
Sahul
SahulSahul
Sahul
 
Tibet 5.0 / CouchDB
Tibet 5.0 / CouchDBTibet 5.0 / CouchDB
Tibet 5.0 / CouchDB
 
嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain嵌入式Linux課程-GNU Toolchain
嵌入式Linux課程-GNU Toolchain
 
Linux Security Quick Reference Guide
Linux Security Quick Reference GuideLinux Security Quick Reference Guide
Linux Security Quick Reference Guide
 

Viewers also liked

2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event
Flint Group
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
Jeffrey Ryan Thalhammer
 
Blog World East 2011 Recap
Blog World East 2011 RecapBlog World East 2011 Recap
Blog World East 2011 Recap
Flint Group
 
The Importance of Blogging
The Importance of BloggingThe Importance of Blogging
The Importance of Blogging
Flint Group
 
Crisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media WorldCrisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media World
Flint Group
 
Managing social media with limited resources
Managing social media with limited resourcesManaging social media with limited resources
Managing social media with limited resources
Flint Group
 
FM CVB Claiming Social Spaces
FM CVB Claiming Social SpacesFM CVB Claiming Social Spaces
FM CVB Claiming Social Spaces
Flint Group
 
Chamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentationChamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentation
Flint Group
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinos
brian d foy
 
Statistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data LanguageStatistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data Language
maggiexyz
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
Jeffrey Ryan Thalhammer
 

Viewers also liked (11)

2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event2010 St. Cloud KNOW Event
2010 St. Cloud KNOW Event
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Blog World East 2011 Recap
Blog World East 2011 RecapBlog World East 2011 Recap
Blog World East 2011 Recap
 
The Importance of Blogging
The Importance of BloggingThe Importance of Blogging
The Importance of Blogging
 
Crisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media WorldCrisis Planning & Management in a Social Media World
Crisis Planning & Management in a Social Media World
 
Managing social media with limited resources
Managing social media with limited resourcesManaging social media with limited resources
Managing social media with limited resources
 
FM CVB Claiming Social Spaces
FM CVB Claiming Social SpacesFM CVB Claiming Social Spaces
FM CVB Claiming Social Spaces
 
Chamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentationChamber Lunch Time Learning presentation
Chamber Lunch Time Learning presentation
 
Advanced modulinos
Advanced modulinosAdvanced modulinos
Advanced modulinos
 
Statistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data LanguageStatistics and Data Mining with Perl Data Language
Statistics and Data Mining with Perl Data Language
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 

Similar to CPAN For Private Code

Running Symfony
Running SymfonyRunning Symfony
Running Symfony
Wildan Maulana
 
20111011 bigbluebutton
20111011 bigbluebutton20111011 bigbluebutton
20111011 bigbluebutton
hs1250
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
Puppet
 
Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)
Ata Rehman
 
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedoraBringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
Lalatendu Mohanty
 
IPS: Image Packaging System
IPS: Image Packaging SystemIPS: Image Packaging System
IPS: Image Packaging System
Eric Sproul
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
D
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy System
adrian_nye
 
Managing Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and SubversionManaging Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and Subversion
Luciano Rocha
 
Composer - Panada Conference 2014
Composer - Panada Conference 2014Composer - Panada Conference 2014
Composer - Panada Conference 2014
Mulia Nasution
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
guest0de7c2
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
Fabien Potencier
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
guest0de7c2
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
k4ndar
 
Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case
Kanwar Batra
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
Ian Barber
 
Docker for Java developers at JavaLand
Docker for Java developers at JavaLandDocker for Java developers at JavaLand
Docker for Java developers at JavaLand
Johan Janssen
 
Fortran compiling 2
Fortran compiling 2Fortran compiling 2
Fortran compiling 2
najenssr
 
Ruby and Rails Packaging to Production
Ruby and Rails Packaging to ProductionRuby and Rails Packaging to Production
Ruby and Rails Packaging to Production
Fabio Kung
 
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 

Similar to CPAN For Private Code (20)

Running Symfony
Running SymfonyRunning Symfony
Running Symfony
 
20111011 bigbluebutton
20111011 bigbluebutton20111011 bigbluebutton
20111011 bigbluebutton
 
Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013Puppet without Root - PuppetConf 2013
Puppet without Root - PuppetConf 2013
 
Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)Advanced Level Training on Koha / TLS (ToT)
Advanced Level Training on Koha / TLS (ToT)
 
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedoraBringing-it-all-together-overview-of-rpm-packaging-in-fedora
Bringing-it-all-together-overview-of-rpm-packaging-in-fedora
 
IPS: Image Packaging System
IPS: Image Packaging SystemIPS: Image Packaging System
IPS: Image Packaging System
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy System
 
Managing Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and SubversionManaging Plone Projects with Perl and Subversion
Managing Plone Projects with Perl and Subversion
 
Composer - Panada Conference 2014
Composer - Panada Conference 2014Composer - Panada Conference 2014
Composer - Panada Conference 2014
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
 
Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case Foreman and Puppet Master Install process - Customer Used Case
Foreman and Puppet Master Install process - Customer Used Case
 
Deployment Tactics
Deployment TacticsDeployment Tactics
Deployment Tactics
 
Docker for Java developers at JavaLand
Docker for Java developers at JavaLandDocker for Java developers at JavaLand
Docker for Java developers at JavaLand
 
Fortran compiling 2
Fortran compiling 2Fortran compiling 2
Fortran compiling 2
 
Ruby and Rails Packaging to Production
Ruby and Rails Packaging to ProductionRuby and Rails Packaging to Production
Ruby and Rails Packaging to Production
 
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
JavaCro'15 - Conquer the Internet of Things with Java and Docker - Johan Jans...
 

Recently uploaded

Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
FODUU
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 

Recently uploaded (20)

Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 

CPAN For Private Code

  • 1. Jeffrey Thalhammer S o f t w a r e S y s t e m s jeff@imaginative-software.com
  • 2. Using CPAN For Private Code San Francisco Perlmongers February 23, 2010
  • 3. On The Menu Tonight... Reasons To Create CPAN Distros Case Study: Foo Financial Company Assorted Tools You Can Use
  • 4. This presentation was originally titled... Why You Should Create CPAN Distros
  • 5. But it really is about... Why Perl Applications Should Have Build Systems ...and CPAN is just one way to do it.
  • 7. Organization! Products Distributions Modules Subroutines Statements
  • 8. A Well-Known Layout A proper place for... scripts libraries tests
  • 9. Dependency Management CPAN.pm Does All The Work Meta-Version Control Detect Circular Dependencies Identify Dependency Flavors: “requires” “build_requires” “configure_requires” “author_requires”
  • 10. Separation Of Concerns Author-time Build-time Install-time Usernames and Passwords Resource Paths Configuration Stuff
  • 11. Sharing And Distribution Easy to identify (i.e. named, versioned) Easy to transport (as *.tar.gz files) Well-known install procedure
  • 12. Tool Chain Support CPAN Module::Build More on this later...
  • 13. Case Study: Foo Financial Company 500k lines of Perl code 100s of scripts, 100s of modules No automated test cases RCS-like version control Quasi-separate DEV and PROD Deploy by manually copying to PROD
  • 14. Havoc Ensued Which files need to be deployed? Which versions of the files? How do I role back? What are the parts of this system? How do changes affect other parts?
  • 15. A Solution: Divide product into Distros. Publish Distros into a private CPAN. Assemble product from private CPAN. Automate everything!
  • 16. SVN CruiseControl commit trunk/ Foo-Reporting/ checkout $ ./Build Foo-Interfaces/ $ ./Build test Foo-Utilities/ Empty Distro. $ ./Build install Simply depends Foo-Everything/ on other top- $ ./Build dist level Foo::* add & Every modules trunk/CPAN/authors/id/F/FOO/ commit commit Foo-Reporting-8.01.tar.gz Foo-Reporting-8.01.tar.gz produces a Distro with a Foo-Interfaces-2.37.tar.gz new version A private CPAN, containing Foo-Utilities-6.01.tar.gz number everything that Foo-Everything-1.02.tar.gz Foo depends on HTTP GET $ cpan Foo-Everything A temporary location, that will /tmp/lib/perl5/site_perl contain all Foo::* installs modules and Foo/Reporting.pm their non-core Foo/Interfaces.pm dependencies Foo-Utilities.pm Finished product! archives Foo-1.45.tar.gz
  • 17. Some Tips: At first, put Everything in one fat Distro. But later, may 1000 Distros bloom! Think about how to name & number versions. Create special accounts for automated jobs. Any SCM and build server will do the job. Know your target Perl environment.
  • 18. Some Supporting Tools CPAN::Mini CPAN::Mini::Inject CPAN::Site Module::Starter Dist::Zilla
  • 19. Jeffrey Thalhammer S o f t w a r e S y s t e m s jeff@imaginative-software.com