Composer
-
Upload
nils-adermann -
Category
Technology
-
view
1.309 -
download
0
description
Transcript of Composer
![Page 2: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/2.jpg)
NIH (Not Invented Here)Wikipedias list of template engines:
33 PHP
15 Python
3 Ruby
Lists of >100 PHP engines on the web
Why is PHP at the top?
![Page 3: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/3.jpg)
Symfony2 PackagesLibraries / Components
Bundles
PSR-0 Autoloading
Everyone is using Git(hub)
![Page 4: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/4.jpg)
phpBB PackagesphpBB3
MODX
Extensions (>= 3.1)
phpBB4Regular Symfony2 Bundles
“ ExtensionBundles”
![Page 5: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/5.jpg)
Packages for End-UsersWeb UI
browsing, installing, removing, updating
changes made in copy of vendor directoryA) overwrite old directory after update
B) download & upload vendor directory
C) (S)FTP support
![Page 6: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/6.jpg)
Packages for developersConsistent versions across dev machines
Project specific package versions
Easy definition of dependencies in a file
Ability to work on dependencies' code
Simple definition of own packages
![Page 7: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/7.jpg)
PEAR / PEAR2 / PyrusMost people still use PHP4 PEAR
PEAR2 requires PHP 5.3uses namespaces
Pyrus is the PEAR2 Installerphar archive
per-project package repositories
![Page 8: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/8.jpg)
Problems Pyrus does not solveConsistent versions across machines
Web UI with vendor directoryhardcoded output, paths
directory transactions prevent self-update
Working on dependencies' code
Non-PHP dependencies
![Page 9: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/9.jpg)
Channels in PEARPEAR requires explicit channels
Channels cannot replace foreign package
You need to know channel locations
![Page 10: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/10.jpg)
ComposerSimple JSON declaration of packages
composer.lock file
Virtual Packages
Dependency Resolution with SAT
![Page 11: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/11.jpg)
Composer RepositoriesAnything
Git Repository, tar.gz, Local directory, ...
Restriction to repository of approved packages possible
Repositories can provide same packagesPrefered Repositories
![Page 12: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/12.jpg)
Packagisthttp://packagist.org
Central repository of packages
All kinds of packages allowedLibraries
Framework Bundles/Plugins/whatever
Application Plugins (e.g. Drupal/Wordpress)
![Page 13: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/13.jpg)
SAT?Boolean Satisfiability Problem:
Can (A|B)&(C|D|(E&(A|D))&E be true?
D(isjunctive)NF:(A&B)|(C&D&A)|(B&D)|C
C(onjunctive)NF:(A|B)&(C|D|A)&(B|D)&C
![Page 14: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/14.jpg)
NP?“ hard” problems
polynomial: n, n^2, n^3, 5n^4 + 2n^2 ...100^2 = 10,000100^3 = 1,000,000
exponential: 2^n, 100^n, 100^5n, ...2^100 ~= 1,267,650,600,000,000,000,000,000,000,000
![Page 15: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/15.jpg)
NP?
“ nondeterministic polynomial time”no known polynomial time algorithm which:
- can solve all instances of the problem
- does not need to try all combinations
SAT is NP-complete (Cook's theorem)
![Page 16: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/16.jpg)
Package ManagementPool
Repositories
PackageName & Version
requires, conflicts, provides
![Page 17: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/17.jpg)
Dependency ResolutionUser wants to:
- install some packages
- update some packages
- remove some packages
- keep some packages
![Page 18: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/18.jpg)
Dependency Resolution
EDOS Project Workpackage 2 Team. Report on formal management of software dependencies. EDOS Project Deliverable Work Package 2, Deliverable 2, March 2006. http://www.edos-project.org/xwiki/bin/Main/Deliverables.
![Page 19: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/19.jpg)
Dependency ResolutionIdeal:
![Page 20: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/20.jpg)
Dependency ResolutionAcceptable:
![Page 21: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/21.jpg)
Dependency ResolutionNo solution:
APT
Portage
Poor solution:smart
Urpmi
![Page 22: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/22.jpg)
Dependency Resolution with SATSUSE's libzypper (Michael Schroeder)
Goals:Fast
Complete & Reliable
Understandable messages & explanations
Based on ideas from minisat
![Page 23: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/23.jpg)
Rule GenerationJob Rules:
Install A: (A)
Remove A: (-A)
![Page 24: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/24.jpg)
Rule GenerationDependency Rules:
A requires B: (-A|B1|B2)
A conflicts with B: (-A|-B1), (-A|-B2)
C and D provide A: A requires C or D
Policy Rules:B1 can be updated to B2: (B1|B2)
B2 obsoletes B1: (-B1|-B2)
![Page 25: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/25.jpg)
Solving RulesUnit Propagation:
(A|B|C), (-C), (-A|C)(-C) C: false
(-A|C) A: false (-A: true)
(A|B|C) B: true
![Page 26: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/26.jpg)
Rule Solving AlgorithmUnit Propagation
Contradiction?Add Rule -X or unsolvable
Backtrack to previous assignment
Assign undecided variable X (free choice)
Repeat until solved
![Page 27: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/27.jpg)
Free ChoicesKeep installed packages installed
Do not install unecessary packages
Pick newest version
![Page 28: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/28.jpg)
Composer Demo
![Page 29: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/29.jpg)
Resourceshttps://github.com/composer
http://packagist.org/about
http://packagist.org/about-composer
http://google group ...
![Page 30: Composer](https://reader036.fdocuments.in/reader036/viewer/2022081413/54698bcdaf795946718b6006/html5/thumbnails/30.jpg)
Thank you!
and Michael Schröder at Novell for his slideshttp://files.opensuse.org/opensuse/en/b/b9/Fosdem2008-solver.pdf
http://www.mancoosi.org/edos/manager/http://en.opensuse.org/openSUSE:Libzypp_satsolver
Questions?