13
PECL を数えてみた 内山 雄司 @y__uti 2016-03-01 PHPBLT #3

PECL を数えてみた

  • Upload
    y-uti

  • View
    2.732

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PECL を数えてみた

PECLを数えてみた内山 雄司 @y__uti

2016-03-01 PHPBLT #3

Page 2: PECL を数えてみた

PECLThe PHP Extension Community Library

2016-03-01 PHPBLT #3 2

Page 3: PECL を数えてみた

courierauth krb5 PAM radius sasl DTrace inclued memprof APC APCu apcu_bc chdb coherence hidef memcache memcached memorizevarnish WinCache yac ZendOpcache augeas env yaconf zookeeper ncurses newt termbox tvision xmms gnupg libsodium mcrypt_filter

scrypt xxtea cassandra couchbase CUBRID daffodildb dbase DBDO dbplus dbx drizzle filepro hwapi ibm_db2 informix ingresisis lchash leveldb maxdb mdbtools mongo mongodb mysql mysqlnd_memcache mysqlnd_ms mysqlnd_qc mysqlnd_uh notes oci8

odbtp Ovrimos Paradox PDO PDO_4D PDO_CUBRID PDO_DBLIB PDO_FIREBIRD PDO_IBM PDO_INFORMIX PDO_MYSQL PDO_OCI PDO_ODBCPDO_PGSQL PDO_SQLANYWHERE PDO_SQLITE pdo_sqlsrv pdo_user PDO_XML pq redis riak sqlanywhere SQLite sqlite3 sqlsrv tdb

tokyo_tyrant date_time hrtime timezonedb dazuko fuse inotify mogilefs phdfs smbclient xattr html_parse tidy apfd json_postpecl_http txforward uri_template cairo cairo_wrapper framegrab FreeImage GDChart gmagick imagick imlib2 opencv pango

qb rsvg SeasLog mailparse POP3 vpopmail big_int geospatial hdr_histogram lapack stats trader amqp apn ares cvsclientcyrus DBus esmtp event gearman geoip gRPC gupnp IMS ip2location ircclient kadm5 Mosquitto mqseries msession netools Net_Gopher

ocal opendirectory perforce rdkafka sam spread ssh2 tcpwrap uuid yami yaz yp zeroconf zmq Bitset coin_acceptor cybercashcybermut mcve spplus TCLink domxml dom_varimport WBXML xmldiff xmlReader XMLRPCi xmlwriter xslcache axis2 hprose json

jsonc jsond jsonnet oauth SCA_SDO xcommerce yar AOP apd APM automap bcompiler BLENC classkit docblock ffi funcall htscannerigbinary intercept llvm memsession memtrack meta mono operator optimizer params parsekit Parse_Tree pcs phar phk PHPScript

postparser PreProcessor propro raphf runkit scream session_mysql strict tcc trace uopz uploadprogress vld xdebug bloomyJudy quickhash Weakref cld fribidi gender idn intl translit unicode unicodestring binpack clips crack crack_dll crypto

fann filter functional graphdat hash huffman msgpack pcsc PECL_Gen protocolbuffers rsync SPL SPL_Types stomp svm udis86Valkyrie xhprof xrange amfext rrd shape archive bz2 cpdf Fileinfo fpdf haru id3 lzf qqwry rar rpmreader syck yaml zip bz2_filter

oggvorbis openal zlib_filter bbcode colorer doublemetaphone enchant ereg jsmin markdown namazu panda pdflib ps re2 ssdeepstem sundown TextCat xdiff ApacheAccessor dio expect fam printer proctitle pthreads statgrab sync threads w32api win32pswin32ps_dll win32service yaf svn eio ev libevent swoole php_xcb tk win32std WinBinder wxwidgets ecasound ming opengl

sdl xmp FliteTTS KTaglib selinux taint clucene mnogosearch solr sphinx swish lua perl python spidermonkey v8js libvirt

登録モジュール数

2016-03-01 PHPBLT #3 3

2016-02-25時点の情報トップページからリンクを辿って到達できる HTML ページ数をカウントしたもの

Page 4: PECL を数えてみた

カテゴリ別モジュール数

2016-03-01 PHPBLT #3 4

Database 56

PHP 41

Networking 35

Tools and Utilities 24

Text 17System 15File Formats 14

Caching 13

Images 12

Web Service 10

Internationalization 8

XML 8

File System 7

Math 6

Payment 6

Authentication 5

Console 5

Encryption 5

GUI 5

HTTP 5

Languages 5Multimedia 5Search Engine 5

Configuration 4Event 4Streams 4Structures 4Benchmarking 3Date and Time 3Mail 3Processing 3Audio 2HTML 2Security 2Logging 1Numbers 1Version Control 1Virtualization 1

Page 5: PECL を数えてみた

登録モジュール数の推移

2016-03-01 PHPBLT #3 5

4.2.04.3.0

4.4.0

5.0.0

5.1.05.2.0

5.3.0

5.4.0

5.5.0

5.6.07.0.0

0

50

100

150

200

250

300

350

2002/1/1 2006/1/1 2010/1/1 2014/1/1

モジュール数

"Available Releases" の情報を集計したもの。情報のない 37 モジュールを除外, stable 以外のリリースも含むPHP のリリース日は http://www.php.net/releases による

Page 6: PECL を数えてみた

月ごとのリリース数

2016-03-01 PHPBLT #3 6

0

10

20

30

40

50

60

2002/1/1 2006/1/1 2010/1/1 2014/1/1

リリース数

"Available Releases" の情報を集計したもの。情報のない 37 モジュールを除外, stable 以外のリリースも含む

Page 7: PECL を数えてみた

ソースコードリポジトリ

2016-03-01 PHPBLT #3 7

svn.php.net 145

github.com 110

git.php.net 41

記載なし 35

bitbucket.org 3

code.google.com 3

その他 13

"Browse Source" の URLを集計「記載なし」は "Browse Source" が存在しないもの

Page 8: PECL を数えてみた

最新リリースの時期

2016-03-01 PHPBLT #3 8

0

5

10

15

20

25

30

35

40

2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016

モジュール数

最新リリース年 (stable 以外のリリースも含む)

svn.php.net github.com git.php.net

リリースの無いモジュールは除外した該当数:svn.php.net (21), github.com (2), git.php.net (3)

Page 9: PECL を数えてみた

ソースコード行数

2016-03-01 PHPBLT #3 9

3

79

181

46

4

0

20

40

60

80

100

120

140

160

180

200

0 1~1,000 1,001~10,000 10,001~100,000 100,001~

http://pecl.php.net/get/* で正常に取得できた 313 モジュールを対象拡張子 .c, .h, .cc, .cpp, .hhのファイルを find と wcで集計

PECL_Gen

crack_dll

win32ps_dll

crips (153,710)

qb (265,259)

gender (368,049)

wxwidgets (983,756)

Page 10: PECL を数えてみた

テストファイル (phpt) 行数

2016-03-01 PHPBLT #3 10

126

3

34

81

58

11

0

20

40

60

80

100

120

140

0 1~10 10~100 100~1,000 1,001~10,000 10,001~100,000

http://pecl.php.net/get/* で正常に取得できた 313 モジュールを対象拡張子 .phptのファイルを find と wcで集計

Page 11: PECL を数えてみた

ソース行数 vs テスト行数

2016-03-01 PHPBLT #3 11

AOP

APC

APM

CUBRID

Cairo

DBDOEcasoundFileinfoFreeImageIMSJsonNet

Judy

KTaglibLZFMosquitto

Net_Gopher PDO

PDO_CUBRID

PDO_DBLIBPDO_FIREBIRD

PDO_IBM

PDO_INFORMIX

PDO_MYSQLPDO_OCIPDO_ODBCPDO_PGSQLPDO_SQLANYWHEREPDO_USERPECL_GenRSVG SAMSPL_Types SQLite

SeasLogStatgrabTCLink WINCACHEWeakref WinBinderamfext

amqp

apacheaccessor

apcu

apcu_bcapdapfdapn

archive

aresaugeasbbcode

bcompilerbig_intbinpackbitset

blencbloomybz2bz2_filter

cairo_wrapper

cassandraclasskitcldclucenecoin_acceptorcolorer couchbasecourierauthcrackcrack_dll

crypto

cvsclientcybercashcybermutcyrus date_timedazukodbasedbplusdbusdbxdio

docblockdom_varimportdoublemetaphonedrizzledtrace

eioenchantenv esmtp

ev eventexpectfam

fann

ffifilter

framegrabfribidifuncallfunctionalfuse gdchartgearmangeoipgeospatial

gmagick

gnupggraphdatgrpcgupnp haruhashhdr_histogramhidef hprosehrtimehtml_parsehtscannerhuffman

ibm_db2

id3idn

igbinary

imagick

imlib2inclued

ingres

inotifyintercept

intl

ip2locationircclientisisjsmin

json

json_post

jsoncjsond

kadm5 krb5lapacklchashleveldblibeventlibsodiumlua mailparse

markdown

maxdb

mcrypt_filtermcvemdbtools

memcachememcached

memoizememprofmemsessionmemtrackmnogosearchmogilefs mongomono mqseries

msgpack

mysqlnd_memcache

mysqlnd_ms

mysqlnd_qc

mysqlnd_uh

ncursesnetools newtoauth

ocal

oci8

odbtpoggvorbisopenalopendirectoryopengloperator optimizerpam pandaparadoxparams parse_treeparsekitpcspcsc pdflib

pdo_4d

pdo_sqlsrv

pecl_http

perforce

perl

phar

phdfs phkpop3

pq

proctitlepropro

protocolbuffers

ps

pthreads

pythonqqwry quickhashradius

raphf

rar

rdkafkare2

redisriak

rpmreaderrrd rsync

runkit

saslscreamscrypt sdlselinuxshapesmbclient

solr

sphinxspidermonkeyspplusspread sqlsrvssdeep ssh2 statsstemstompstrict

sundown

svm svn

swish

swoolesycksynctainttcctcpwraptdbtermboxtextcattidy timezonedbtktokyo_tyranttrace translittvisiontxforwardudis86

uopzuploadprogress

uri_template

uuid

v8js

valkyrievarnish

vldvpopmailwbxmlwin32pswin32ps_dllwin32servicewin32stdxattrxcommerce xdebugxdiffxhprofxmldiffxmlreaderxmlrpcixmlwriterxmmsxmpxrangexslcachexxtea yacyaconf

yaf

yami

yaml

yaryazyp zendopcachezeroconf

zip

zlib_filter

zmq

zookeeper0

5,000

10,000

15,000

20,000

25,000

30,000

35,000

40,000

45,000

50,000

0 5,000 10,000 15,000 20,000 25,000 30,000 35,000 40,000 45,000 50,000

テストファイル行数

ソースコード行数

Module Source Test

PDO_SQLITE 69,642 0

SCA_SDO 54,873 1,076

clips 153,710 0

gender 368,049 392

mongodb 75,145 12,334

qb 265,259 17,246

sqlite3 87,800 706

trader 90,270 11,099

wxwidgets 983,756 0

50,000 行を超えるモジュール

Page 12: PECL を数えてみた

ソース行数 vs テスト行数

2016-03-01 PHPBLT #3 12

AOP

APM

DBDO

EcasoundFileinfo FreeImage IMS JsonNet

Judy

KTaglibLZF

Mosquitto

Net_Gopher PDOPDO_DBLIBPDO_FIREBIRD

PDO_IBM

PDO_INFORMIX

PDO_MYSQLPDO_OCIPDO_ODBCPDO_PGSQL PDO_SQLANYWHERE

PDO_USER

PECL_GenRSVG SAM

SPL_Types

SeasLogStatgrabTCLink

Weakref

amfext

amqp

apacheaccessorapcu_bc

apdapfd

apn

archive

aresaugeas

bbcode

bcompiler

big_int

binpack

bitset

blencbloomybz2bz2_filter

cairo_wrapper

classkit

cld

clucene

coin_acceptorcolorer couchbasecourierauth crackcrack_dll

crypto

cvsclientcybercashcybermutcyrus

date_time

dazuko dbasedbplus dbus

dbx

dio

docblock

dom_varimport

doublemetaphone drizzledtrace enchantenv esmtpexpectfam

fann

filter

framegrabfribidi funcall

functionalfuse gdchartgearmangeoip

geospatial

gnupg

graphdatgrpcgupnp haru

hashhdr_histogram

hidefhprosehrtime

html_parsehtscanner huffmanid3idn

igbinary

imlib2inclued

ingres

inotifyinterceptip2locationircclientisis

jsmin

json

json_post

jsoncjsond

kadm5krb5

lapack

lchash

leveldb

libevent

libsodiumlua

mailparse

markdown

maxdb

mcrypt_filter mcvemdbtools

memcache

memcached

memoize

memprofmemsessionmemtrack mnogosearch

mogilefs

mono mqseries

mysqlnd_memcache

mysqlnd_uh

ncursesnetools newt

oauth

ocal odbtpoggvorbisopenal opendirectory opengl

operator

optimizerpam panda

paradox

params parsekitpcs

pcsc

pdo_4d

perforce

perl

phdfsphkpop3

pq

proctitlepropro

protocolbuffers

ps

pthreads

pythonqqwry quickhash

radius

raphfrdkafka

re2

rpmreader

rrd

runkit

saslscream scrypt sdlselinuxshape

smbclientsphinxspidermonkey

spplus spreadssdeep ssh2

stompstrict

sundown

svm

svn

swish

sycksync

tainttcc

tcpwrap

tdb

termbox textcattidy tk tokyo_tyrant

trace

tvisiontxforwardudis86

uopz

uploadprogress

uri_template

uuid

v8js

valkyrie

varnish

vldvpopmailwbxmlwin32pswin32ps_dllwin32servicewin32stdxattr

xcommercexdiff

xhprof xmldiff

xmlreaderxmlrpcixmlwriter

xmms

xmpxrange

xslcachexxtea

yacyaconf

yaml

yar

yazypzeroconfzlib_filter zookeeper0

1,000

2,000

3,000

4,000

5,000

6,000

7,000

8,000

9,000

10,000

0 1,000 2,000 3,000 4,000 5,000 6,000 7,000 8,000 9,000 10,000

テストファイル行数

ソースコード行数

Page 13: PECL を数えてみた

お約束クローリングでは過剰な負荷をかけないよう注意しましょう

今回は以下のようにしました◦ HTML ファイル 1 ページ取得ごとに 5 秒 sleep

◦ 拡張モジュール (.tar.gz) 1 モジュール取得ごとに 30 秒 sleep

ちなみに◦ http://pecl.php.net/get は robots.txt で Disarrowと記述されている

2016-03-01 PHPBLT #3 13