Slide 1

Slide 1 text

The Ecosystems of Perl & PHP 林佑安 (c9s) Saturday, April 14, 12

Slide 2

Slide 2 text

Speaker • 林佑安 c9s@twitter, c9s@github • Web Developer • CPAN author for ~30 distributions. • 187 repos/projects on GitHub. • Perl programming since 2008. • PHP programming since 2011. Saturday, April 14, 12

Slide 3

Slide 3 text

我本來是個 XXX Developer Saturday, April 14, 12

Slide 4

Slide 4 text

直到我膝蓋中了⼀一箭... Saturday, April 14, 12

Slide 5

Slide 5 text

但是 Saturday, April 14, 12

Slide 6

Slide 6 text

今天不是要來打臉的 Saturday, April 14, 12

Slide 7

Slide 7 text

Let’s take a look at PHP from Perl. 從 Perl 的角度來看 PHP Saturday, April 14, 12

Slide 8

Slide 8 text

Language Saturday, April 14, 12

Slide 9

Slide 9 text

PHP Saturday, April 14, 12

Slide 10

Slide 10 text

Rasmus Lerdorf 於 1995 年發明 PHP Danish Programmer Saturday, April 14, 12

Slide 11

Slide 11 text

PHP3 Zeev Suraski Andi Gutmans Zend Technologies Saturday, April 14, 12

Slide 12

Slide 12 text

A general-purpose server-side scripting language 伺服端的腳本語言 Saturday, April 14, 12

Slide 13

Slide 13 text

A general-purpose server-side scripting language 伺服端的腳本樣板語言 Saturday, April 14, 12

Slide 14

Slide 14 text

動態產生網頁內容 Saturday, April 14, 12

Slide 15

Slide 15 text

PHP • 從 C 語言 CGI 函式庫發展 • 以早期 Perl 的部分語法為雛形 • 2002 年 PHP 4.3.0 新增 CLI SAPI • 2004 年 PHP 5.0.0 新增類 Java 的物件模 型 • 2012 年 PHP 5.4 引進 Trait, 內建 Http Server, 大量改善 Zend Engine 效能 Saturday, April 14, 12

Slide 16

Slide 16 text

Perl Saturday, April 14, 12

Slide 17

Slide 17 text

Larry Wall 程式員, 系統管理員, 語言學家, 作家 1987 年發明 Perl Saturday, April 14, 12

Slide 18

Slide 18 text

There's More Than One Way To Do It. 不只⼀一種方法來做⼀一件事情 Saturday, April 14, 12

Slide 19

Slide 19 text

為了「...」而設計的的 Perl “When Larry designed the first Perl, he was a sysadmin, Perl was designed for sysadmins. When Perl5 was created, Larry was a programmer. Perl5 is designed for programming. It is a programming language. Larry is now a language designer, Perl6 is a language for language design.” - Jesse Vincent from gugod http://gugod.org/2011/11/perl-for-dot-dot-dot/ Saturday, April 14, 12

Slide 20

Slide 20 text

Perl: 以簡馭繁的中心思想

Slide 21

Slide 21 text

Perl: 以簡馭繁的中心思想

Slide 22

Slide 22 text

Perl • 從 Unix scripting language 出發 • 借取了 C, sed, awk, shell 等特性 • 1990 年時大量 CGI 程式使用 Perl 寫作 • 1994 年 Perl5 加入 OOP • 5.8.0 版時加入了 Unicode 支援 • 2006 年第⼀一版 Moose 模組 (後現代物件系統) - 可改 善 Perl 的物件導向功能,包含 Trait, Lazy Attributes 等 功能 • 2009 年 Plack 模組的出現使得 Perl 於 Web 開發上效 能、便利性更是大大提昇。 Saturday, April 14, 12

Slide 23

Slide 23 text

小結 • PHP 在語言設計上,除了 server-side scripting language 外並無明顯的中心思想 • Perl 以命令列發展至 Web,而 PHP 是後來才加 入了命令列支援。 • 類別自動載入機制,是在 PHP 5.x 版後才加 入,因此多數 PHP 模組載入方式、路徑格式差 異相當大,也使得各系統間元件相當難重新使 用 (reuse) Saturday, April 14, 12

Slide 24

Slide 24 text

Package System Saturday, April 14, 12

Slide 25

Slide 25 text

PHP Saturday, April 14, 12

Slide 26

Slide 26 text

PEAR http://pear.php.net Saturday, April 14, 12

Slide 27

Slide 27 text

PECL http://pecl.php.net Saturday, April 14, 12

Slide 28

Slide 28 text

PHP ecosystem • since 1999-11-21 Saturday, April 14, 12

Slide 29

Slide 29 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net Saturday, April 14, 12

Slide 30

Slide 30 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net • 280 extensions on pecl.php.net Saturday, April 14, 12

Slide 31

Slide 31 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net • 280 extensions on pecl.php.net • 19 packages on pear2.php.net Saturday, April 14, 12

Slide 32

Slide 32 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net • 280 extensions on pecl.php.net • 19 packages on pear2.php.net • 840 packages on packagist.org Saturday, April 14, 12

Slide 33

Slide 33 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net • 280 extensions on pecl.php.net • 19 packages on pear2.php.net • 840 packages on packagist.org • no package tester. Saturday, April 14, 12

Slide 34

Slide 34 text

PHP ecosystem • since 1999-11-21 • 586 packages on pear.php.net • 280 extensions on pecl.php.net • 19 packages on pear2.php.net • 840 packages on packagist.org • no package tester & reports • 2 mirror sites (us, de) Saturday, April 14, 12

Slide 35

Slide 35 text

PHP ecosystem • Use `pear` and `pyrus.phar` to install PEAR packages (system-wide). • Pirum, PEAR channel builder. • MiniPear, PEAR channel mirror tool. Saturday, April 14, 12

Slide 36

Slide 36 text

Perl Saturday, April 14, 12

Slide 37

Slide 37 text

CPAN http://search.cpan.org Saturday, April 14, 12

Slide 38

Slide 38 text

CPAN Tester: test matrix http://cpantesters.org Saturday, April 14, 12

Slide 39

Slide 39 text

MetaCPAN https://metacpan.org/ Saturday, April 14, 12

Slide 40

Slide 40 text

CPAN Dependencies Saturday, April 14, 12

Slide 41

Slide 41 text

CPAN • Since October 1995 Saturday, April 14, 12

Slide 42

Slide 42 text

CPAN • Since October 1995 • 77800 Uploads Saturday, April 14, 12

Slide 43

Slide 43 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions Saturday, April 14, 12

Slide 44

Slide 44 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules Saturday, April 14, 12

Slide 45

Slide 45 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules • 9627 Authors Saturday, April 14, 12

Slide 46

Slide 46 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules • 9627 Authors • 245 mirror sites Saturday, April 14, 12

Slide 47

Slide 47 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules • 9627 Authors • 245 mirror sites • Issue Tracker (RT) Saturday, April 14, 12

Slide 48

Slide 48 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules • 9627 Authors • 245 mirror sites • Issue Tracker (RT) • CPAN Tester since 1999 Saturday, April 14, 12

Slide 49

Slide 49 text

CPAN • Since October 1995 • 77800 Uploads • 24637 Distributions • 105724 Modules • 9627 Authors • 245 mirror sites • Issue Tracker (RT) • CPAN Tester since 1999 • MetaCPAN Saturday, April 14, 12

Slide 50

Slide 50 text

1000+ distribution uploads per month. From CPAN Tester statistics http://stats.cpantesters.org/trends.html Saturday, April 14, 12

Slide 51

Slide 51 text

250+ new distribution uploads per month From CPAN Tester statistics http://stats.cpantesters.org/trends.html Saturday, April 14, 12

Slide 52

Slide 52 text

Command-line Tools • cpan (Original CPAN shell) • cpanp (CPANPLUS) • cpanm (CPAN Minus) • carton (Bundler) • pinto (CPAN package repository tool) • CPAN::Mini (CPAN Mirror Tool) Saturday, April 14, 12

Slide 53

Slide 53 text

對此, PHP 表示... Saturday, April 14, 12

Slide 54

Slide 54 text

Saturday, April 14, 12

Slide 55

Slide 55 text

為何有如此巨大差異 ? Why such a big difference ? Saturday, April 14, 12

Slide 56

Slide 56 text

三個問題 Three problems Saturday, April 14, 12

Slide 57

Slide 57 text

Problem #1 PEAR 繁瑣的上傳程序 Saturday, April 14, 12

Slide 58

Slide 58 text

如何上傳 CPAN package ? Saturday, April 14, 12

Slide 59

Slide 59 text

上傳 CPAN Package: 3 Steps • Register a PAUSE account http://pause.perl.org/ Saturday, April 14, 12

Slide 60

Slide 60 text

上傳 CPAN Package: 3 Steps • Register a PAUSE account • Confirm your email http://pause.perl.org/ Saturday, April 14, 12

Slide 61

Slide 61 text

上傳 CPAN Package: 3 Steps • Register a PAUSE account • Confirm your email • Upload! http://pause.perl.org/ Saturday, April 14, 12

Slide 62

Slide 62 text

CPAN Shipping tools • ShipIt • CPAN::Uploader Saturday, April 14, 12

Slide 63

Slide 63 text

CPAN Shipping tools • ShipIt • CPAN::Uploader ⼀一鍵搞定版本釋出 Saturday, April 14, 12

Slide 64

Slide 64 text

那麼如何上傳 PEAR Package ? Saturday, April 14, 12

Slide 65

Slide 65 text

Upload PEAR package • Register a PEAR account Saturday, April 14, 12

Slide 66

Slide 66 text

Upload PEAR package • Register a PEAR account • Confirm Email Saturday, April 14, 12

Slide 67

Slide 67 text

Upload PEAR package • Register a PEAR account • Confirm Email • Are we done yet ? Saturday, April 14, 12

Slide 68

Slide 68 text

And not yet • Join Mailing List Saturday, April 14, 12

Slide 69

Slide 69 text

And not yet • Join Mailing List • Use PHP_CodeSniffer to verify your standard coding convention. Saturday, April 14, 12

Slide 70

Slide 70 text

And not yet • Join Mailing List • Use PHP_CodeSniffer to verify your standard coding convention. • Create a proposal draft Saturday, April 14, 12

Slide 71

Slide 71 text

And not yet • Join Mailing List • Use PHP_CodeSniffer to verify your standard coding convention. • Create a proposal draft • Proposal stage, discuss & discuss ... Saturday, April 14, 12

Slide 72

Slide 72 text

And not yet • Join Mailing List • Use PHP_CodeSniffer to verify your standard coding convention. • Create a proposal draft • Proposal stage, discuss & discuss ... • Waiting for votes Saturday, April 14, 12

Slide 73

Slide 73 text

And not yet • Join Mailing List • Use PHP_CodeSniffer to verify your standard coding convention. • Create a proposal draft • Proposal stage, discuss & discuss ... • Waiting for votes • Proposal finished Saturday, April 14, 12

Slide 74

Slide 74 text

然後呢?等 ... Saturday, April 14, 12

Slide 75

Slide 75 text

等你等到海枯石爛~ Saturday, April 14, 12

Slide 76

Slide 76 text

You don’t even suffer such process on GitHub! Saturday, April 14, 12

Slide 77

Slide 77 text

Problem #2 各自為政的套件庫 Saturday, April 14, 12

Slide 78

Slide 78 text

CPAN PHP Packages are not centralized like CPAN Saturday, April 14, 12

Slide 79

Slide 79 text

CPAN PHP Packages are not centralized like CPAN Saturday, April 14, 12

Slide 80

Slide 80 text

CPAN PHP Packages are not centralized like CPAN Saturday, April 14, 12

Slide 81

Slide 81 text

CPAN PHP Packages are not centralized like CPAN Saturday, April 14, 12

Slide 82

Slide 82 text

PEAR Most packages and libraries are not on PEAR, they have their own channels. Saturday, April 14, 12

Slide 83

Slide 83 text

PHPUnit PEAR Symfony Zend Pyrus phpmd phpspec phrozn Most packages and libraries are not on PEAR, they have their own channels. ezComponents Drupal Packages WordPress Composer pearfarm OpenPEAR Saturday, April 14, 12

Slide 84

Slide 84 text

And no mirrors Saturday, April 14, 12

Slide 85

Slide 85 text

PEAR Most packages and libraries are not on PEAR, they have their own channels. Saturday, April 14, 12

Slide 86

Slide 86 text

It makes channel list longer and longer Saturday, April 14, 12

Slide 87

Slide 87 text

It makes channel list longer and longer Saturday, April 14, 12

Slide 88

Slide 88 text

套件難以搜尋 it’s hard to search packages Saturday, April 14, 12

Slide 89

Slide 89 text

PEAR package hosting pearfarm.org openpear.org Saturday, April 14, 12

Slide 90

Slide 90 text

Problem #3 The Hard Package Meta file Saturday, April 14, 12

Slide 91

Slide 91 text

use inc::Module::Install; name 'Plack'; all_from 'lib/Plack.pm'; readme_from 'lib/Plack.pm'; requires 'LWP::UserAgent', 5.814; requires 'HTTP::Message', 5.814; requires 'URI', 1.36; tests 't/*.t t/*/*.t'; author_tests 'xt'; install_share 'share'; install_script 'scripts/plackup'; auto_install; auto_set_repository; resources homepage => "http://plackperl.org", bugtracker => "https://github.com/ miyagawa/plack/issues"; WriteAll; This is how we do in Perl Saturday, April 14, 12

Slide 92

Slide 92 text

This is how we do in Perl $ perl Makefile.PL Saturday, April 14, 12

Slide 93

Slide 93 text

• Simple Makefile.PL Saturday, April 14, 12

Slide 94

Slide 94 text

• Simple • Clean Makefile.PL Saturday, April 14, 12

Slide 95

Slide 95 text

• Simple • Clean • Flexible Makefile.PL Saturday, April 14, 12

Slide 96

Slide 96 text

• Simple • Clean • Flexible • Pure Perl Makefile.PL Saturday, April 14, 12

Slide 97

Slide 97 text

• Simple • Clean • Flexible • Pure Perl Makefile.PL Saturday, April 14, 12

Slide 98

Slide 98 text

How to build a PEAR package ? Saturday, April 14, 12

Slide 99

Slide 99 text

package.xml Saturday, April 14, 12

Slide 100

Slide 100 text

規格書第⼀一 看完再來 Build package 吧! Saturday, April 14, 12

Slide 101

Slide 101 text

package.xml gearman pecl.php.net PHP wrapper to libgearman This extension uses libgearman library to provide API for communicating with gearmand, and writing clients and workers. James M. Luedke jluedke [email protected] no Herman J. Radtke III hradtke [email protected] yes 2011-12-05 1.0.1 1.0.1 stable stable Saturday, April 14, 12

Slide 102

Slide 102 text

package.xml PHP - Fixed PECL Bug #60438 (wrong version number in php_gearman.h) Saturday, April 14, 12

Slide 103

Slide 103 text

package.xml 5.1.0 6.0.0 6.0.0 1.4.0b1 gearman stable stable 1.0.1 1.0.1 2011-12-05 - Fixed PECL Bug #60438 (wrong version number in php_gearman.h) .... cut .... Saturday, April 14, 12

Slide 104

Slide 104 text

你暈了嗎 Saturday, April 14, 12

Slide 105

Slide 105 text

這應該是要透過工具產生才 對吧 ? Saturday, April 14, 12

Slide 106

Slide 106 text

Build tool • PEAR_PackageFileManager_Cli • Pyrus make, generate-pear2 command Saturday, April 14, 12

Slide 107

Slide 107 text

不過... Saturday, April 14, 12

Slide 108

Slide 108 text

Unfortunately • 既有的 package file builder 幾乎都無法正 常運作 (不斷丟出 Exceptions) Saturday, April 14, 12

Slide 109

Slide 109 text

Unfortunately • 既有的 package file builder 幾乎都無法正 常運作 (不斷丟出 Exceptions) • 無清楚的文件 Saturday, April 14, 12

Slide 110

Slide 110 text

Unfortunately • 既有的 package file builder 幾乎都無法正 常運作 (不斷丟出 Exceptions) • 無清楚的文件 • 操作繁瑣,必須⼀一行行依照詢問輸入 Saturday, April 14, 12

Slide 111

Slide 111 text

Unfortunately • 既有的 package file builder 幾乎都無法正 常運作 (不斷丟出 Exceptions) • 無清楚的文件 • 操作繁瑣,必須⼀一行行依照詢問輸入 • XML Tag 順序不對,就無法建置 Saturday, April 14, 12

Slide 112

Slide 112 text

Unfortunately • 既有的 package file builder 幾乎都無法正 常運作 (不斷丟出 Exceptions) • 無清楚的文件 • 操作繁瑣,必須⼀一行行依照詢問輸入 • XML Tag 順序不對,就無法建置 • 雖然可以用 composer ,但卻是另外的生 態系統。 Saturday, April 14, 12

Slide 113

Slide 113 text

Saturday, April 14, 12

Slide 114

Slide 114 text

Saturday, April 14, 12

Slide 115

Slide 115 text

小結 Saturday, April 14, 12

Slide 116

Slide 116 text

CPAN • 自由且開放: 任何人都可以快速發佈自己 的作品 • 多樣性: ⼀一種目的多種原型、實作,開發 者能有更多的選擇 • 完整的測試系統: 不會隨便亂炸掉 • 以簡馭繁 Saturday, April 14, 12

Slide 117

Slide 117 text

PEAR • 封閉: 上傳套件必須審核審核再審核 • 小團體: PEAR Team < 20 人 • 無系統化測試 • 不友善的 Issue Tracker • 設計複雜、繁瑣 Saturday, April 14, 12

Slide 118

Slide 118 text

如果是如此,該如何改善呢 ? If so, how to improve the PHP package system ? Saturday, April 14, 12

Slide 119

Slide 119 text

The Recent tools • Pyrus: pear2.php.net, is not opened yet. 但工具本 身仍在 Alpha stage. • bundle install = Hack • 仍是使用 package.xml Saturday, April 14, 12

Slide 120

Slide 120 text

The Recent tools • Pyrus: pear2.php.net, is not opened yet. 但工具本 身仍在 Alpha stage. • bundle install = Hack • 仍是使用 package.xml • Composer project by @baderman,@Seldaek inspired from npmjs & opensuse. • JSON meta file Saturday, April 14, 12

Slide 121

Slide 121 text

• 需要⼀一個更簡潔的套件定義檔案 Saturday, April 14, 12

Slide 122

Slide 122 text

• 需要⼀一個更簡潔的套件定義檔案 • 能夠完整產生 package.xml 達到向後相容 PEAR 套件以及 PEAR Channel Saturday, April 14, 12

Slide 123

Slide 123 text

• 需要⼀一個更簡潔的套件定義檔案 • 能夠完整產生 package.xml 達到向後相容 PEAR 套件以及 PEAR Channel • 需能管理套件相依性,如 Bundler Saturday, April 14, 12

Slide 124

Slide 124 text

We Can Do Better Saturday, April 14, 12

Slide 125

Slide 125 text

Onion The PEAR packager https://github.com/c9s/Onion Saturday, April 14, 12

Slide 126

Slide 126 text

The package.ini File [package] name = PackageName desc = description version = 1.2.0 author = “c9s ” channel = pear.host.com Saturday, April 14, 12

Slide 127

Slide 127 text

The package.ini File [package] name = PackageName desc = description version = 1.2.0 author = “c9s ” channel = pear.host.com 5+ lines to create a package. Saturday, April 14, 12

Slide 128

Slide 128 text

How to use it? • Put your class files in `src/` • Tests in `tests/` • documentation in `doc/` Saturday, April 14, 12

Slide 129

Slide 129 text

妥善配置 Class path Saturday, April 14, 12

Slide 130

Slide 130 text

PEAR Class name rule • Twig_Loader_Filesystem => src/Twig/Loader/ Filesystem.php • Foo_Class_Bar => src/Foo/Class/Bar.php • Foo => src/Foo.php Saturday, April 14, 12

Slide 131

Slide 131 text

PHP Standard Working Group Saturday, April 14, 12

Slide 132

Slide 132 text

PSR-0 classname rule • Class\SubClass => src/Class/SubClass.php • Foo => src/Foo.php • Foo\Bar\Zoo => src/Foo/Bar/Zoo.php Saturday, April 14, 12

Slide 133

Slide 133 text

PSR-0 classname rule • Class\SubClass => src/Class/SubClass.php • Foo => src/Foo.php • Foo\Bar\Zoo => src/Foo/Bar/Zoo.php • Foo::Bar => lib/Foo/Bar.pm • Foo => lib/Foo.pm • Foo::Bar::Zoo => lib/Foo/Bar/Zoo.pm Perl: Saturday, April 14, 12

Slide 134

Slide 134 text

Build PEAR package $  curl  -­‐s  http://install.onionphp.org/  |  bash $  vi  package.ini $  onion  build            #  package.xml  is  out $  pyrus  package        #  build  *.tgz Saturday, April 14, 12

Slide 135

Slide 135 text

Saturday, April 14, 12

Slide 136

Slide 136 text

Bundle packages [require] php = 5.3 pearinstaller = 1.4.1 pear.phpspec.net/PHPSpec = 1.2.2beta pear.symfony-project.com/YAML = “> 1.2” pear.twig-project.org/Twig = “< 0.3” pear.phpunit.de/PHPUnit = 0.0.1 PKG = http://host/to/package.tgz Saturday, April 14, 12

Slide 137

Slide 137 text

Bundle packages $ onion bundle # install packages into vendor/ dir. Saturday, April 14, 12

Slide 138

Slide 138 text

Bundle packages $  tree  -­‐d  vendor   vendor !""  pear        #""  CLIFramework        $      !""  Command        #""  CacheKit        #""  GetOptionKit        #""  PEARX        #""  SerializerKit        #""  SymfonyComponents        $      !""  YAML        !""  Universal                #""  ClassLoader                #""  Container                #""  Event                #""  FileSystem Saturday, April 14, 12

Slide 139

Slide 139 text

建置 Autoload Script Saturday, April 14, 12

Slide 140

Slide 140 text

SPL ClassLoaders • Symfony\ClassLoader\UniversalClassLoader • Universal\ClassLoader\SplClassLoader • Universal\ClassLoader\BasePathClassLoader Saturday, April 14, 12

Slide 141

Slide 141 text

SPL ClassLoader # autoload.php 'src', 'CurlKit' => 'src', 'PEARX' => 'vendor/pear', 'CacheKit' => 'vendor/pear', 'CLIFramework' => 'vendor/pear', 'GetOptionKit' => 'vendor/pear', )); $classLoader->useIncludePath(true); $classLoader->register(); Saturday, April 14, 12

Slide 142

Slide 142 text

SPL ClassLoader # autoload.php useIncludePath(true); $loader->register(); Saturday, April 14, 12

Slide 143

Slide 143 text

打包 㱺 Standalone executable Saturday, April 14, 12

Slide 144

Slide 144 text

To build a standalone binary #!/bin/bash onion compile \ --lib src \ --lib vendor/pear \ --classloader \ --bootstrap scripts/onion.embed \ --executable \ --output onion.phar chmod +x onion.phar Saturday, April 14, 12

Slide 145

Slide 145 text

To build a standalone binary $ ./package.phar Saturday, April 14, 12

Slide 146

Slide 146 text

打包 㱺 Standalone library Saturday, April 14, 12

Slide 147

Slide 147 text

To build a standalone binary Saturday, April 14, 12

Slide 148

Slide 148 text

搭配 Pirum PEAR Channel Builder 即可快速佈署、散佈公用/私用套件 Pirum PEAR Channel Client Client Client Saturday, April 14, 12

Slide 149

Slide 149 text

副產品 • PHPBrew - (perlbrew,rvm-like tool) • CLIFramework - Command-Line app framework. • GetOptionKit - getopt parser. • PEARX - PEAR channel client library. • CurlKit - curl download tool. • MiniPear - PEAR channel mirror tool Saturday, April 14, 12

Slide 150

Slide 150 text

Future work • Support VCS repository (github, git, hg, svn) • Lock file • Better channel protocol • Autoloader generator • Authentication support • Support SSH • Fork welcome Saturday, April 14, 12

Slide 151

Slide 151 text

Conclusion • PHP 生態系統雖先天不足,但 PHP 開發者及市場 仍相當大。 最近兩年 PSR (PHP Standard Group - Framework Developers) 逐漸在發展共通的規範, 達到元件 reuse 的目的。 • Composer 雖是獨立的生態系統,且目前主要用 於 Symfony,但可期待未來的發展。 • 期待 PHP 生態系統能有更好的改善 Saturday, April 14, 12

Slide 152

Slide 152 text

Conclusion • PHP 生態系統雖先天不足,但 PHP 開發者及市場 仍相當大。 最近兩年 PSR (PHP Standard Group - Framework Developers) 逐漸在發展共通的規範, 達到元件 reuse 的目的。 • Composer 雖是獨立的生態系統,且目前主要用 於 Symfony,但可期待未來的發展。 • 期待 PHP 生態系統能有更好的改善 ~CoffeePHP ? Saturday, April 14, 12

Slide 153

Slide 153 text

Q & A Thanks! [email protected] Twitter: http://twitter.com/c9s GitHub: http://github.com/c9s Saturday, April 14, 12