Zend_Date に落とし穴なんてないんだよ。絶対大丈夫だよ!

Zend Framework 日めくり Calendar 2012の5日目としてZend_Dateの話です。

PHP Advent Calendar jp 2011のエントリーにDateTimeクラスの落とし穴と対策にZend_Dateの紹介がありました。
なるほど、Zend_Date 使っていきたいですね!

早速2012年年初めを確認しましょう。

<?php

$datearray = array(
'year' => 2012,
'month'=>1,
'day'=>1,
'hour'=>1,
'minute'=>0,
'second'=>0
);

$date = new Zend_Date($datearray);
$format1 = 'yyyy-MM-dd HH:mm:ss';
$format2 = 'YYYY-MM-dd HH:mm:ss';
echo $date->toString($format1), // 2012-01-01 01:00:00
     PHP_EOL,
$date->toString($format2),  // 2011-01-01 01:00:00
     PHP_EOL;

$datearray['day'] = 2;
$date = new Zend_Date($datearray);
$format1 = 'yyyy-MM-dd HH:mm:ss';
$format2 = 'YYYY-MM-dd HH:mm:ss';
echo $date->toString($format1), // 2012-01-02 01:00:00
     PHP_EOL,
$date->toString($format2),  // 2012-01-02 01:00:00
     PHP_EOL;

あれれ?これはマニュアルにも注意書きがある通り、
YYYYではISO書式となるためです。

http://framework.zend.com/manual/ja/zend.date.constants.html#zend.date.constants.selfdefinedformats

この点についてはZF-5297で議論もされてるので参照ください。


Zend Framework 2 beta1 がリリースされましたが、ちょっと待ったほうがいい。えっ、待てないっす。(2)

※以下私見でのZF2への開発の話

ところで、最近こんなお便りをいただきました。

@kazusuke JIRAのProject名がZF2なようなので、多分この検索結果であっているとおもうのですが…。あんまりZendFrameworkあたりの開発スタイルが分かっていないのでもし違っていたら教えてもらえると嬉しいです

http://twitter.com/#!/chobi_e/status/131021470540369920

ZF2はZF1からのアップデートです。コンポーネント固有のバグっぽいのがあった場合、
まずZF1で再現するか確認したほうが良いと思います。ZF1でバグぽかったらZF1のBTSへバグ報告をしてください
バグ報告をして、それからパッチが書けそうだった場合にのみパッチを書くと良いと思います。

で、もしZF1でバグの場合のZF2への反映状況についてですが、コアであるLoaderは刷新されていたりアーキテクチャは変わってますが、”ライブラリとして”使う場合のZF2はZF1からのブランチです。ブランチ後のZF1分の変更分については、3,4か月前?にZF1変更分はコミッターはZF2に逐一マージしろって御触れが出たんですが、MLへもそこらへんつっこんだんですけどマージされてない分は、2,3個じゃなくてわりとそこそこあるっぽいですね!!
http://zend-framework-community.634137.n4.nabble.com/Questions-about-current-ZF2-tasks-td3909150.html
https://github.com/sasezaki/zf-merge-status/blob/master/result_output/latest_not_merged.md

注意として、いくつかのコンポーネントはまだ刷新が予定されてるので注意してくださいね!!
http://framework.zend.com/wiki/display/ZFDEV2/Development+Status+Page

…..あ、ZF2のWebアプリケーションフレームワークとしてZend\Mvcを使った場合にバグがあったら、どうみてもZF2のバグです。

ちなみに、ZF2への開発(コントリビュート)に興味がある場合、Zend\Service\*のものがZF1のHttpクライアントメソッド(request->send)を使ってるままなのが結構あるので、そこのアップグレードから始めるのがお勧めです。ZF2はどう開発に参加すればいいか、すべてREADME(README-GIT.txt、README-DEV.txt)に書いてあります!

□その他リンク
ZF2についてのちょいメモ
http://d.hatena.ne.jp/noopable/20111012/1318410005

Zend Framework 2 beta1 がリリースされましたが、ちょっと待ったほうがいい。えっ、待てないっす。(1)

Zend Framework 2 beta1 がリリースされましたね。

リリースアナウンス
http://framework.zend.com/zf2/blog/entry/Zend-Framework-2-0-0beta1-Released
10月のZendConでの講演

2.0ではhttpに大幅なリファクタリングが施され、HTTPクライアントで、リクエストボディがある場合にcontent-lengthを設定する箇所がprepareHeadersに移動になったのですが、mbstring.func_overloadの設定が行われていて、かつmb_internal_encodingでUTF-8のときなどのmb_strlenでバイトサイズでない場合(ようするにたぶんレアケース)に問題があったのですが、直してるので、最新のブランチを使った方がいいです。

https://github.com/zendframework/zf2/pull/546

ということで、問題点↓のと”content-lengthとmbstringまわり”で似てますが割と違います。
CakePHP2.0.1がリリースされましたが、ちょっと待ったほうがいい ->2.0.2リリースで解決
http://d.hatena.ne.jp/cakephper/20111101/1320113739

このアップデートされたHttpクライアント、URIを含むRequestオブジェクトを使用するようになったのでずっとクローラが書きやすくなりました。 いままでZF1だとspizerとかで包括的なものを作っていたのが↓みたいにシンプルに


PHPにbundlerが欲しいって?package.xmlの出番や!

現行のpearパッケージマネージャに対する不備については、最近だと

How Would You Engineer A PEAR2/Pyrus Distribution Architecture?

の記事とかでバンバン議論されてる通りですが、問題点の一つはあるプロジェクトに対するパッケージ管理の場合でしょう。

(ここから先はパッケージマネージャとしてのpearについては小文字のpearと書いていきますが)

単にpearでinstallする場合は、システム上の固定のパスに(ubuntuだと/usr/share/php)、sudoでいれなきゃなりません(pear download使ってうんぬんとかだとバージョン管理の話外なのでおいといて)。また、pear後継のpyrusでは、ユーザローカルに設定するためのmypearっての用意してますが、もちろんユーザ固定になってしまいます。

そのためあるプロジェクトで必要なパッケージを設定する場合は、Cakeやsymfonyだとvendorっていうなぞフォルダを用意するってのはよく知られてる話だと思います(もちろんrails由来でしょうけど)。んで最近だとsymfony一派の皆様方がgit submoduleとか色々駆使してるなあとか遠目で見てます。

pyrusはvendorディレクトリ対策も考えていて、

https://github.com/pear2/PEAR2_VendorCommands

というプラグインでは、その名前の通りvendorディレクトリに設定するためのコマンドを用意してます(まだ開発途中)

使い方はインストールからだと、現在pear2リポジトリにはないっぽいので上記のをpullして

$php pyrus.phar package package.xml
$php pyrus.phar install -p PEAR2_VendorCommands-0.1.0.tgz

として、VendorCommandsをインストールします。インストールが成功していればvendor-updateが追加されているはずなので、

$php pyrus.phar help vendor-update

とヘルプを確認したあとは、任意のディレクトリで

$php pyrus.phar generate-pear2 FOO

などとして単純なpackage.xmlを取得します。(gpしなくても良いですけど)

で、このpackage.xmlに依存するパッケージを書きます。

このpackage.xmlを対象のプロジェクトに配置し、

$php pyrus.phar vendor-update -f

と実効すれば、そのプロジェクトのvendorディレクトリにインストールされます!!
ってことで、package.xmlはnpmのpackage.jsonの先取りだったんですね!!!!!!!cool!!!

似たようなバンドル対策として、

  • composer(https://github.com/composer/composer)
  • phark(https://github.com/lox/phark)
  • pundle(https://github.com/T-Moe/Pundle)

といったライブラリがでてきてますが、やはりpear本家が提供しようとしてるものを改善するのが先じゃないんですかね?(ちなみにさっきインストールに問題あったんでissueあげたら速攻で修正してもらえましたよ。)


Add XmasTree command to your Pyrus.

Nowadays, we know pyrus is so goooood!!!!!!!!!!!!!!!

But, Javascript is most major programming language :)

This IS A EVIDENCE!

So PHP developer should porting JavaScript’s gems!!!!( I don’t refer to Ruby’s.)

One of JavaScript’s gem is npm!!!!!!!!!!!!!!!!

Awesome!

$ npm xmas

What’s happen?

We get signal!!!!!!!!!!!!! Main screen turn on!

Awesome!!!!

 

Actually, I can’t wait  xmas command on pyrus!!!!!!!!!!!!!!

Fortunatly, pyrus has plugin architecture.

So, we can make xmas-command quickly! Following url is a sample plugin.

https://github.com/sasezaki/Acme_Pyrus_Xmas

Let’s try !

$php pyrus.phar xmas

Enjoy!


Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!


Meta