Using software modules welcome to hell!
-
Upload
baruch-sadogursky -
Category
Technology
-
view
334 -
download
0
description
Transcript of Using software modules welcome to hell!
Using Software Modules - Welcome to
Hell!
2
Who’s talking?
@jbaruchgithub.com/jbaruch
Agenda
25 minutes125 slides30 memes
Packages & Modules
Modules Packages
Packages & Modules
Modules PackagesAPIdevelopment
Packages & Modules
Modules PackagesAPIdevelopment
Installableruntime
For the sake of this talk
Modules, modules, modules
Modules, modules, modules
System dpkg, RPM, tgz, pacman, ipkg, pkgutils, PETget, Upkg, PISI, nix, Equo, Conary, tazpkg, App Store, MacPorts, fink, Homebrew, Google Play, GetJar, Amazon Appstore, Cygwin, Npackd, Steam, Chocolately, NSIS, IPS
Modules, modules, modules
System dpkg, RPM, tgz, pacman, ipkg, pkgutils, PETget, Upkg, PISI, nix, Equo, Conary, tazpkg, App Store, MacPorts, fink, Homebrew, Google Play, GetJar, Amazon Appstore, Cygwin, Npackd, Steam, Chocolately, NSIS, IPS
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Cabal, Composer, CPAN, CRAN, Python eggs, Ivy, Maven, Gradle, sbt, leiningen, PyPI, NuGet, RubyGems, Quicklisp, CocoaPods
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Cabal, Composer, CPAN, CRAN, Python eggs, Ivy, Maven, Gradle, sbt, leiningen, PyPI, NuGet, RubyGems, Quicklisp, CocoaPods
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Ivy, Maven, Gradle, sbt, PyPI, NuGet, RubyGems, CocoaPods
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Ivy, Maven, Gradle, sbt, PyPI, NuGet, RubyGems, CocoaPods
Framework
RoR, Grails, jQuery, Node.js, Spring Roo, JBoss Forge, Play, Chef, Puppet, Eclipse
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Ivy, Maven, Gradle, sbt, PyPI, NuGet, RubyGems, CocoaPods
Framework
RoR, Grails, jQuery, Node.js, Spring Roo, JBoss Forge, Play, Chef, Puppet, Eclipse
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Ivy, Maven, Gradle, sbt, PyPI, NuGet, RubyGems, CocoaPods
Framework
RoR, Grails, jQuery, Node.js, Spring Roo, Chef, Puppet, Eclipse
Modules, modules, modules
System dpkg, RPM, App Store, Homebrew, Google Play, Steam
Dev. Ivy, Maven, Gradle, sbt, PyPI, NuGet, RubyGems, CocoaPods
Framework
RoR, Grails, jQuery, Node.js, Spring Roo, Chef, Puppet, Eclipse
Application
Any pluggable application!
DRAGON STORIES AHEAD!
fACDdb
STORY NUMBER ONE
f
, A STORY OF INDEXES +
, A STORY OF INDEXES +
< KEPT IN WRONG PLACE >
Once Upon A Time…
Once Upon A Time…
Can’t serve…
searches…
Not anymore…
Look ma, no index download!
- Have to download huge files Before Searching
- Have to download huge files Before Searching
- Updated rarely
- Have to download huge files Before Searching
- Updated rarely
- Requires special client
- Have to download huge files Before Searching
- Updated rarely
- Requires special client
F-
Who’s good, who’s not?
NuGet RubyGems
DebRPMMaven
Who’s good, who’s not?
NuGet RubyGems
DebRPMMaven
Good Excuse:old tools
Lesson learned
Index on the server-side,expose query API
STORY NUMBER TWO
A
Heinrich Heine
Heinrich Heine
STORY NUMBER TWO (AND A HALF)
AA
He cut his ear off and died unappreciated
Lesson learned
Authenticate by public identity;
Give credit to the developer
Identified, credited. Well Done.
STORY NUMBER THREE
C
Imagine a typical windows user
Depending on name only
Depending on name onlyWhere’s the
version, dude?!
TIME FOR THE BOROMIR MEME!
You knew it is coming!
Single Namespace TroublesScope Trouble Examples Work-
around
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
RPMs, Ruby, Groovy
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
RPMs, Ruby, Groovy
RVM, GVM,Homebrew
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
RPMs, Ruby, Groovy
RVM, GVM,Homebrew
Platform
Classpath/DLL hell
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
RPMs, Ruby, Groovy
RVM, GVM,Homebrew
Platform
Classpath/DLL hell
Transitive dependency conflicts
Single Namespace TroublesScope Trouble Examples Work-
aroundSystem Can’t
use multiple versions,update all
RPMs, Ruby, Groovy
RVM, GVM,Homebrew
Platform
Classpath/DLL hell
Transitive dependency conflicts
Uberjar /Static compilation
Interlude…
Maven’s Conflict Manager
A v1
Maven’s Conflict Manager
A v1
E v1
Maven’s Conflict Manager
A v1
E v1
D v1
Maven’s Conflict Manager
A v1
B v1E v1
D v1
Maven’s Conflict Manager
A v1
C v1
B v1E v1
D v1
Maven’s Conflict Manager
A v1
C v1
B v1
D v2
E v1
D v1
Maven’s Conflict Manager
A v1
C v1
B v1
D v2
E v1
D v1
Maven’s Conflict Manager
Maven’s Conflict Manager
Maven’s Conflict Manager
BOROMIR RETURNS!Reprise…
Just not very usable…
Lesson learned
Provide isolation and easy uninstall
STORY NUMBER FOUR
g
Version ranges
Stuff Suddenly stops working
Lesson learned
Require explicitdependency versions
STORY NUMBER FIVE
D
Like vodka and
beer…
…Config.
and Metadat
a…
…Just won’t mix.
So, a user had a project…
My Project
‘A1’
My Project
‘A1’
<alwaysUse> <repository>MyRepo</repository></alwaysUse>
MyRepo
My Project
‘A1’<dependency>B1</dependency>
<alwaysUse> <repository>MyRepo</repository></alwaysUse>
MyRepo
My Project
‘A1’<dependency>B1</dependency>
<alwaysUse> <repository>MyRepo</repository></alwaysUse>
MyRepo
Project ‘B1’
My Project
‘A1’<dependency>B1</dependency>
<alwaysUse> <repository>MyRepo</repository></alwaysUse>
MyRepo
Project ‘B1’
BadRepo
<repository>BadRepo</repository><dependency>C1</dependency>
My Project
‘A1’ <dependency>B1</dependency><dependency>C1</dependency>
<repository>MyRepo</repository><repository>BadRepo</repository>
MyRepo
Project ‘B1’
BadRepo
My Project
‘A1’ <dependency>B1</dependency><dependency>C1</dependency>
<repository>MyRepo</repository><repository>BadRepo</repository>
MyRepo
Project ‘B1’
BadRepo
Lesson learned
Don’t mix vodka and beer configuration and
metadata
NO MORE STORIES,ONE MORE THINGOOO
fACDdb
Doc predicts
All you need is cloud