<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>candycane development blog</title>
	<atom:link href="http://blog.candycane.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.candycane.jp</link>
	<description></description>
	<lastBuildDate>Wed, 10 Mar 2010 03:26:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lithium0.7がリリースされました(和訳)</title>
		<link>http://blog.candycane.jp/archives/309</link>
		<comments>http://blog.candycane.jp/archives/309#comments</comments>
		<pubDate>Wed, 10 Mar 2010 03:22:27 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=309</guid>
		<description><![CDATA[
PHP5.3専用のもっとも革新的なフレームワークLithiumの最新版である0.7が2010年3月8日にリリースされました。今回はMySQLサポートの正式対応が追加され従来型のアプリケーションの開発が飛躍的に向上しました。またコードの再利用を進める為の内部の最適化も引き続き行われています。詳細はいつものようにリリースノートの和訳を作りましたのでそちらをご覧ください。
またGwooがOrange Countyで行ったプレゼンテーションの資料と音声も公開されているので要チェックです。

Li3 ocphp
View more presentations from G W.

原文
http://rad-dev.org/lithium/wiki/blog/Lithium-0-7-luck-of-the-irish
Lithium0.7 Luck-of-the-irish
私たちは近づいてきたセントパトリックデーのお祝いに夢中になる前に、最新版のLithiumのリリースを準備できました。Lithium0.7は170のコミットを6人の開発者から受け取り、私たちはまた一歩の安定版のリリースに近づきました。
当初よりLithiumはドキュメント指向のデータベースをサポートし、高い比重を置いていました。私たちは依然として高速にパフォーマンスに配慮し、かつ柔軟なアプリケーションの構築と柔軟なアプリケーションの開発にはデータストレージに新しいアプローチを使用する事が大きな利益になると考えています。しかし、我々はまだ従来のリレーショナルデータベースが多くのアプリケーションに有益な事もわかっています。この目的のために、これらの機能を統合しリレーショナルデータベースを使用するために必要な大規模なサブセットをLithium0.7に実装しました。現時点ではMySQLがテストに合格した唯一のデータベース（`SourceTest`）ですが、基盤部分はSQLite3、PostgreSQLなどのその他のデータベースにも適用できます。すでにMSSQLの作業は進行中で、[li3_mssqlプラグインとして進行中]（http://rad-dev.org/li3_mssql/wiki）、もちろんこのデータベースや他のデータベース実装へのコントリビューションは大歓迎です。
また、SQLをサポートする為に`Adaptable`クラスに計画的な実装をLithium0.7で追加しました。計画はどのようにデータが転送され、アダプタに適用される変更を抽象化して提供します。たとえば、あなたが`Cache::write()`を使用してデータを保存し、`Cache::read()`てデータを取り出したいとします。この機能は、コアに含まれている`Serializer`という計画を通じて簡単に実現できます。`Cache`アダプタに対するインターフェイスは`Base64`、`Json`、`Serializer`が実装済みです。また`Adaptable`のそのほかのサブクラスに対するストラテジーは実装中です。
ChangeLogを見てもらえれば（http://rad-dev.org/lithium/wiki/releases/0_7）、g11nのいくつかの大きな改善とテストのカバレッジの向上がした事がわかるでしょう。
いくつかの名前空間とブートストラップのプロセスは、アプリケーションのコア機能を委任しやすいように改良されました。いくつかの変更は、以前のリリースとの互換性がありません：

Dispatcher::run() `Request`オブジェクトが最初のパラメータとして必要になりました。`webroot/index.php`を見てください。
プラグインをすぐに他のライブラリと同じようにできます。app/libraries内の&#8221;plugins&#8221;ディレクトリが削除されています。現在はプラグインの追加はライブラリの追加と同じように行います。例 `Libraries::add(&#8217;li3=docs&#8217;);`
新しいBootstrapファイルと`bootstrap/action.php`の代替の`switchboard.php`の除去。
bootstrap/libraries.php内の `Libraries::Add(&#8217;app&#8217;, array(&#8217;default&#8217; => true));` はあなたのアプリケーションを &#8216;default&#8217; ライブラリとして提供します。
`Connections` はconnections.phpを読み込まなくなりました。有効にするには`config/bootstrap.php`で設定してください。
`Connections::add()の`は現在2つのパラメータを受け取ります。`config/bootstrap/connections.php`を参照してください。

PHP 5.3およびLithiumに関する2時間のプレゼンテーションをここで読めます。（音声あり）：http://lithify.me/presents
我々は、高速開発のスケジュールをイテレーションフライデーと共に進めてきました。私たちは減速するつもりはありません。予定どおり安定版は2010の初夏にリリースできるでしょう。
うまくいけば、このプロジェクトの成功はプロジェクトに関わる全ての人にとってエキサイティングなニュースになるでしょう。いつものように、われわれはどんな形のコントリビューションも大歓迎で待っています。
〜gwoo
&#8211;翻訳ここまで
MySQLなどの従来型のデータベースがサポートされましたが、ドキュメント指向データベースこそが高速で柔軟なアプリケーション開発をもたらすという強い意志が伝わってきます。かつてCakePHPなどが流行り始めた際はDRYなフレームワークこそが高速開発を実現する事を世の中に示したと言えますが、時代は次のステップに向かっていますね。Lithiumは単なる新しいフレームワークではなく、こういったパラダイムシフトを提唱しようとしている事が特に大事な点だと個人的には考えています。
またCakeやsymfonyなどの近代的なフレームワークではプラグインなどを利用した拡張が提供されていますが、なかなか共通部分をプラグインに切り出せないという問題にはまりがちです。その点を考慮してか次世代のフレームワークでは実装そのものとプラグインの境界線が薄くなる方向へと進んでいます。アプリケーション自体をプラグインとして実装するとイメージすると近いかもしれません。
なんにせよこのパラダイムを体感するには実際に試してみるのが一番でしょう！
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_.png"><img src="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_-300x90.png" alt="designall.dll" title="designall.dll" width="300" height="90" class="alignnone size-medium wp-image-188" /></a></p>
<p>PHP5.3専用のもっとも革新的なフレームワークLithiumの最新版である0.7が2010年3月8日にリリースされました。今回はMySQLサポートの正式対応が追加され従来型のアプリケーションの開発が飛躍的に向上しました。またコードの再利用を進める為の内部の最適化も引き続き行われています。詳細はいつものようにリリースノートの和訳を作りましたのでそちらをご覧ください。<br />
またGwooがOrange Countyで行ったプレゼンテーションの資料と音声も公開されているので要チェックです。</p>
<p><img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyNjgxOTEyNDg2MDAmcHQ9MTI2ODE5MTI2MjYxMyZwPTEwMTkxJmQ9c3NfZW1iZWQmZz*yJm89MTdhZDkyNGQwMGU5/NDdiMWI2MzdmMDc*NDI5YTMwM2Emb2Y9MA==.gif" />
<div style="width:425px" id="__ss_3271175"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/gwoo/li3-ocphp" title="Li3 ocphp">Li3 ocphp</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=li3-ocphp-100225013014-phpapp02&#038;stripped_title=li3-ocphp" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=li3-ocphp-100225013014-phpapp02&#038;stripped_title=li3-ocphp" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/gwoo">G W</a>.</div>
</div>
<p><embed type="application/x-shockwave-flash" width="350" height="24" allowfullscreen="true" allowscriptaccess="always" 	src="http://www.archive.org/flow/flowplayer.commercial-3.0.5.swf" 	w3c="true" 	flashvars='config={"key":"#$b6eb72a0f2f1e29f3d4","playlist":[{"url":"http://www.archive.org/download/lithium-ocphp/gwoo.mp3","autoPlay":false}],"clip":{"autoPlay":true},"canvas":{"backgroundColor":"0x000000","backgroundGradient":"none"},"plugins":{"audio":{"url":"http://www.archive.org/flow/flowplayer.audio-3.0.3-dev.swf"},"controls":{"playlist":false,"fullscreen":false,"gloss":"high","backgroundColor":"0x000000","backgroundGradient":"medium","sliderColor":"0x777777","progressColor":"0x777777","timeColor":"0xeeeeee","durationColor":"0x01DAFF","buttonColor":"0x333333","buttonOverColor":"0x505050"}},"contextMenu":[{"Listen+to+lithium-ocphp+at+archive.org":"function()"},"-","Flowplayer 3.0.5"]}'></embed><h3>原文</h3>
<p><a href="http://rad-dev.org/lithium/wiki/blog/Lithium-0-7-luck-of-the-irish">http://rad-dev.org/lithium/wiki/blog/Lithium-0-7-luck-of-the-irish</a></p>
<h3>Lithium0.7 Luck-of-the-irish</h3>
<p>私たちは近づいてきたセントパトリックデーのお祝いに夢中になる前に、最新版のLithiumのリリースを準備できました。Lithium0.7は170のコミットを6人の開発者から受け取り、私たちはまた一歩の安定版のリリースに近づきました。<br />
当初よりLithiumはドキュメント指向のデータベースをサポートし、高い比重を置いていました。私たちは依然として高速にパフォーマンスに配慮し、かつ柔軟なアプリケーションの構築と柔軟なアプリケーションの開発にはデータストレージに新しいアプローチを使用する事が大きな利益になると考えています。しかし、我々はまだ従来のリレーショナルデータベースが多くのアプリケーションに有益な事もわかっています。この目的のために、これらの機能を統合しリレーショナルデータベースを使用するために必要な大規模なサブセットをLithium0.7に実装しました。現時点ではMySQLがテストに合格した唯一のデータベース（`SourceTest`）ですが、基盤部分はSQLite3、PostgreSQLなどのその他のデータベースにも適用できます。すでにMSSQLの作業は進行中で、[<a href="http://rad-dev.org/li3_mssql/wiki">li3_mssql</a>プラグインとして進行中]（http://rad-dev.org/li3_mssql/wiki）、もちろんこのデータベースや他のデータベース実装へのコントリビューションは大歓迎です。<br />
また、SQLをサポートする為に`Adaptable`クラスに計画的な実装をLithium0.7で追加しました。計画はどのようにデータが転送され、アダプタに適用される変更を抽象化して提供します。たとえば、あなたが`Cache::write()`を使用してデータを保存し、`Cache::read()`てデータを取り出したいとします。この機能は、コアに含まれている`Serializer`という計画を通じて簡単に実現できます。`Cache`アダプタに対するインターフェイスは`Base64`、`Json`、`Serializer`が実装済みです。また`Adaptable`のそのほかのサブクラスに対するストラテジーは実装中です。<br />
<a href="http://rad-dev.org/lithium/wiki/releases/0_7">ChangeLog</a>を見てもらえれば（http://rad-dev.org/lithium/wiki/releases/0_7）、g11nのいくつかの大きな改善とテストのカバレッジの向上がした事がわかるでしょう。<br />
いくつかの名前空間とブートストラップのプロセスは、アプリケーションのコア機能を委任しやすいように改良されました。いくつかの変更は、以前のリリースとの互換性がありません：</p>
<ul>
<li>Dispatcher::run() `Request`オブジェクトが最初のパラメータとして必要になりました。`webroot/index.php`を見てください。</li>
<li>プラグインをすぐに他のライブラリと同じようにできます。app/libraries内の&#8221;plugins&#8221;ディレクトリが削除されています。現在はプラグインの追加はライブラリの追加と同じように行います。例 `Libraries::add(&#8217;li3=docs&#8217;);`</li>
<li>新しいBootstrapファイルと`bootstrap/action.php`の代替の`switchboard.php`の除去。</li>
<li>bootstrap/libraries.php内の `Libraries::Add(&#8217;app&#8217;, array(&#8217;default&#8217; => true));` はあなたのアプリケーションを &#8216;default&#8217; ライブラリとして提供します。</li>
<li>`Connections` はconnections.phpを読み込まなくなりました。有効にするには`config/bootstrap.php`で設定してください。</li>
<li>`Connections::add()の`は現在2つのパラメータを受け取ります。`config/bootstrap/connections.php`を参照してください。</li>
</ul>
<p>PHP 5.3およびLithiumに関する2時間のプレゼンテーションをここで読めます。（音声あり）：<a href="http://lithify.me/presents">http://lithify.me/presents</a><br />
我々は、高速開発のスケジュールをイテレーションフライデーと共に進めてきました。私たちは減速するつもりはありません。予定どおり安定版は2010の初夏にリリースできるでしょう。<br />
うまくいけば、このプロジェクトの成功はプロジェクトに関わる全ての人にとってエキサイティングなニュースになるでしょう。いつものように、われわれはどんな形のコントリビューションも大歓迎で待っています。<br />
〜gwoo</p>
<p>&#8211;翻訳ここまで</p>
<p>MySQLなどの従来型のデータベースがサポートされましたが、ドキュメント指向データベースこそが高速で柔軟なアプリケーション開発をもたらすという強い意志が伝わってきます。かつてCakePHPなどが流行り始めた際はDRYなフレームワークこそが高速開発を実現する事を世の中に示したと言えますが、時代は次のステップに向かっていますね。Lithiumは単なる新しいフレームワークではなく、こういったパラダイムシフトを提唱しようとしている事が特に大事な点だと個人的には考えています。<br />
またCakeやsymfonyなどの近代的なフレームワークではプラグインなどを利用した拡張が提供されていますが、なかなか共通部分をプラグインに切り出せないという問題にはまりがちです。その点を考慮してか次世代のフレームワークでは実装そのものとプラグインの境界線が薄くなる方向へと進んでいます。アプリケーション自体をプラグインとして実装するとイメージすると近いかもしれません。</p>
<p>なんにせよこのパラダイムを体感するには実際に試してみるのが一番でしょう！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/309/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.archive.org/download/lithium-ocphp/gwoo.mp3" length="103567386" type="audio/mpeg" />
		</item>
		<item>
		<title>HipHopを実行するには(和訳)</title>
		<link>http://blog.candycane.jp/archives/300</link>
		<comments>http://blog.candycane.jp/archives/300#comments</comments>
		<pubDate>Sun, 21 Feb 2010 07:20:53 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[HipHop]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=300</guid>
		<description><![CDATA[こちらはHipHopの利用法のドキュメントの和訳です。

PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開
HipHopのビルドとインストール方法(和訳)
HipHopを実行するには(和訳)

原文
http://wiki.github.com/facebook/hiphop-php/running-hiphop
HipHopを実行するには
注：これらのコード例では、HipHopコンパイラが完全に組み込まれていると仮定します。
環境設定
まず最初に、2つの環境変数の設定が必要です。
cd .. # into the root of the hphp checkout
export HPHP_HOME=`pwd`
export HPHP_LIB=`pwd`/bin
HipHopを実行するモードの選択
HipHopは5つの異なるモードで実行することができます。これらはHello Worldの例をそれぞれ示しています。すべてのコマンドはこれらの例では、src /ディレクトリから実行されます。
まず、test.phpをと呼ばれるファイルを作成します。テキストを下記のように流し込むなら、&#8221;echo Hello World!&#62; test.php&#8221;のような感じです。次に、以下のようにモードを選択します：
モード1：HipHopでコンパイルし、直接実行する。
 hphp/hphp test.php
モード2：HipHopで一時ディレクトリにコンパイルし、コマンドラインからコンパイルしたプログラムを実行する。
 hphp/hphp test.php --keep-tempdir=1 --log=3
/tmp/hphp_p6vSsP/program    (use your own temporary directory name from output)
--keep-tempdir=1も-k 1で指定することができます。ハイフン一つとkのあとにスペースが空いている事に注意してください。これは、boostのコマンドラインオプションでの作業を監視するものです。
--log=3いくつかの冗長な情報の出力。どの一時ディレクトリが作成されたかを見つけることができる。--output-dir=mypathまたは-o mypathで独自の出力ディレクトリを指定することができます。
モード3：HipHopで一時ディレクトリにコンパイルし、Webサーバーとしてコンパイルしたプログラムを実行する。
 hphp/hphp test.php --keep-tempdir=1 --log=3
sudo /tmp/hphp_p6vSsP/program -m server
その後、別のウィンドウから実行：
 curl localhost/test.php
sudoを使用しない場合は、ポート8080上でHipHopを実行することができます。
 hphp/hphp test.php --keep-tempdir=1 --log=3
/tmp/hphp_p6vSsP/program -m server -p 8080
GET [...]]]></description>
			<content:encoded><![CDATA[<p>こちらはHipHopの利用法のドキュメントの和訳です。</p>
<ul>
<li><a href="http://blog.candycane.jp/archives/275">PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開</a></li>
<li><a href="http://blog.candycane.jp/archives/295">HipHopのビルドとインストール方法(和訳)</a></li>
<li>HipHopを実行するには(和訳)</li>
</ul>
<h3>原文</h3>
<p><a href="http://wiki.github.com/facebook/hiphop-php/running-hiphop">http://wiki.github.com/facebook/hiphop-php/running-hiphop</a></p>
<h3>HipHopを実行するには</h3>
<p><strong>注：</strong>これらのコード例では、HipHopコンパイラが完全に組み込まれていると仮定します。</p>
<h3>環境設定</h3>
<p>まず最初に、2つの環境変数の設定が必要です。</p>
<p><code>cd .. # into the root of the hphp checkout<br />
export HPHP_HOME=`pwd`<br />
export HPHP_LIB=`pwd`/bin</code><br />
<h3>HipHopを実行するモードの選択</h3>
<p>HipHopは5つの異なるモードで実行することができます。これらはHello Worldの例をそれぞれ示しています。すべてのコマンドはこれらの例では、src /ディレクトリから実行されます。</p>
<p>まず、test.phpをと呼ばれるファイルを作成します。テキストを下記のように流し込むなら、&#8221;echo Hello World!&gt; test.php&#8221;のような感じです。次に、以下のようにモードを選択します：</p>
<p><strong>モード1：</strong>HipHopでコンパイルし、直接実行する。</p>
<p> <code>hphp/hphp test.php</code>
<p><strong>モード2：</strong>HipHopで一時ディレクトリにコンパイルし、コマンドラインからコンパイルしたプログラムを実行する。</p>
<p> <code>hphp/hphp test.php --keep-tempdir=1 --log=3<br />
/tmp/hphp_p6vSsP/program    (use your own temporary directory name from output)</code>
<p><code>--keep-tempdir=1</code>も<code>-k 1</code>で指定することができます。ハイフン一つとkのあとにスペースが空いている事に注意してください。これは、boostのコマンドラインオプションでの作業を監視するものです。</p>
<p><code>--log=3</code>いくつかの冗長な情報の出力。どの一時ディレクトリが作成されたかを見つけることができる。<code>--output-dir=mypath</code>または<code>-o mypath</code>で独自の出力ディレクトリを指定することができます。</p>
<p><strong>モード3：</strong>HipHopで一時ディレクトリにコンパイルし、Webサーバーとしてコンパイルしたプログラムを実行する。</p>
<p> <code>hphp/hphp test.php --keep-tempdir=1 --log=3<br />
sudo /tmp/hphp_p6vSsP/program -m server</code>
<p>その後、別のウィンドウから実行：</p>
<p> <code>curl localhost/test.php</code>
<p>sudoを使用しない場合は、ポート8080上でHipHopを実行することができます。</p>
<p> <code>hphp/hphp test.php --keep-tempdir=1 --log=3<br />
/tmp/hphp_p6vSsP/program -m server -p 8080<br />
GET http://localhost:8080/test.php</code>
<p>あなたのサーバーを管理するにはこのコマンドを実行：</p>
<p> <code>GET http://localhost:8088</code>
<p>また、デーモンとしてサーバを実行することができます：</p>
<p> <code>sudo /tmp/hphp_p6vSsP/program -m daemon</code>
<p><strong>モード4：</strong>HipHopインタプリタで直接実行する。</p>
<p> <code>hphpi/hphpi -f test.php  (note the "-f" flag)</code>
<p><strong>モード5：</strong>HipHopインタプリタを逐次変換Webサーバかデーモンとして起動する。</p>
<p> <code>sudo hphpi/hphpi -m server (or daemon)<br />
curl localhost/test.php<br />
curl localhost:8088</code><br />
<h3>大きなコードベースのコンパイル</h3>
<p>まずコンパイラの様々なスイッチを理解しましょう：</p>
<p> <code>hphp/hphp --help</code>
<p>いくつかのフラグを指定する方法が３つあります。 <span class="caps">（1）HDF</span>形式の設定ファイル。hdf形式の詳細については doc/hdf をお読みください。次に、<code>--config</code>で、使用する設定ファイルを指定します。<span class="caps">（2）HDF</span>ファイル内のほぼすべてのオプションは、直接ドット表記形式で列挙することができます。たとえば<code>-v "node.subnode=value"</code> のように。（3）我々は、最も頻繁に使用されるものをいくつかのショートカットを作成しました。このようになります<code>--force</code> 。</p>
<p>最も重要なフラグはインクルードまたは除外するファイルやディレクトリを指定するものです。これらはきれいに設計されていないので、今後改善する必要があると感じています。疑問がある場合は、単にファイル名のリストを別のファイルに準備して<code>--input-list</code>のスイッチを使用します。</p>
<h3>オンデマンド解析モード使用する（オプション）</h3>
<p>コマンドラインから指定されていないファイルは、コンパイラがそれらを見つける事が出来る場合<strong>のみ</strong> 、インクルードされます。あなたの書いたinclude文下記のように扱われる事になります：</p>
<ul>
<li>単純なリテラルの結合、コンパイラはコンパイル時にそれを計算することができます。</li>
<li><code>"include_once $MY_ROOT.'/path/file.php';"</code>のような単純な形式で記述<br /><strong>注：</strong>ここでいう、$ MY_ROOTはこのような内容の設定ファイルを作成する事でコンパイラに指示することができます：</li>
</ul>
<p> <code>IncludeRoots {<br />
  * {<br />
    root = $MY_ROOT<br />
    path = lib/my_code<br />
  }<br />
  * {<br />
    root = $ANOTHER_ROOT<br />
    path = anotherlib<br />
  }<br />
}</code>
<p>この設定ファイルを含むように<code>--config</code>を使用する 。コンパイラは、上記のinclude文を&#8221;lib / my_code/path/file.php&#8221;として解決します。</p>
<p><strong>注：</strong>オンデマンドモードを設定することが困難な場合、すべてのコンパイルしたい<span class="caps">PHP</span>ファイル含めるように<code>--input-list</code>を使用してください。</p>
<h3>distccの使用</h3>
<p>大規模なコンパイルについては、我々は<a href="http://distcc.samba.org">distccの</a>セットアップをお勧めします。</p>
<h3>例：PHPUnitのコンパイル</h3>
<p>1. <span class="caps">PHPUnit</span>の PHPファイルをチェックアウトする：</p>
<p> <code>git clone git://github.com/sebastianbergmann/phpunit.git<br />
cd phpunit<br />
git checkout -b 3.4 origin/3.4</code>
<p>2.確実かつ安全な方法として入力ファイルを指定します。</p>
<p> <code>find . -name "*.php" &gt; files.list</code>
<p>これはコンパイルしたいすべてPHPファイルのリストです。</p>
<p>3.プロジェクトをコンパイルする準備が整いました。</p>
<p> <code>$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \<br />
  --include-path="." --force=1 --cluster-count=50 \<br />
  -v "AllDynamic=true" -v "AllVolatile=true" </code>
<p><code>-k 1</code>または<code>--keep-tempdir=1</code>で、新しい一時的なディレクトリが毎回作成されます。この方法はコンパイルを試している時に便利です。</p>
<p>PHPUnitはPHPUnitのルートディレクトリから相対的にインクルードを行っているので、<code>--include-path</code>が必要です。このオプションを指定しない場合、すべてのこのような形式 &#8220;include &#8217;somepath/file.php&#8217;;&#8221; はそれを含むファイルからの相対パスとして扱われます。</p>
<p>HipHopがコードに発見した警告やエラーを無視するには<code>--force=1</code>が必要です。このオプションがなければ、コンパイラはエラーがあれば画面上にダンプして停止します。<code>--force=1</code>を使った場合、これらのエラーのほとんどは実行時エラーでしょう。この場合もあなたはまだ出力ディレクトリの下に生成された CodeError.js でそれらを確認できます。</p>
<p><code>--cluster-count=50</code>distcc無しでのコンパイルに役立ちます。このフラグがなければ、それぞれの<span class="caps">PHP</span>ファイルに対してcppファイルが1つ生成されます。PHPファイルの数が多い場合、cppファイルのコンパイルがToo Manyで終わる可能性があります。clusteringを使えばPHPファイルの数は重要ではありません。HipHopは指定された数の.cppファイルを生成し、より簡単にdistccに少ない回数でこれを渡す事ができます。クラスタの数はdistccのワーカー数より少し少ないくらいにすべきです。例えば20台のマシンで8つずつのdistccワーカーを動かしている場合はクラスタ数は100がよいでしょう。しかし、ある種の最適値を見つけるにはコンパイル時間を比較しながらにクラスタ数を上げたり下げたりしてください。</p>
<p><code>-v "AllDynamic=true"</code>このオプションにより 、動的な関数や、動的メソッド呼び出しを問題なくサポートすることができます。コーディング中に動的関数呼び出しや動的メソッド呼び出しをしている場合はオンを推奨します。少しパフォーマンスが犠牲になりますが、それが安全です。</p>
<p><code>-v "AllVolatile=true"</code>このオプションにより、関数やクラスの動的な宣言を問題なくサポートすることができます。<code>function_exists()</code>や<code>class_exits()</code>を宣言の前後で実行したり、その順序に意味があるような異常なテストを実行しない限りはオンにすることを推奨します。PHPUnitは、いくつかのクラスファイルをロードした後、新しいクラスを見つけるためその戻り値を比較する為に<code>get_declared_classes()</code>を呼び出すことがあります。したがって、PHPUnitにはこのスイッチを追加する必要があります。ほとんどの場合は、オンにする必要はありません。これは、パフォーマンスが場合によって犠牲になります。</p>
<p>4.これでコンパイルされたPHPUnitのバイナリができたはずです。もしここまで到達することはできない場合は、私たちに報告してください。バイナリを実行するには、</p>
<p> <code>php phpunit.php (in PHP)<br />
/tmp/hphp_po33pK/program -f phpunit.php (in HipHop, note the -f flag)</code> <code>php phpunit.php PHPUnit/Tests/Framework/SuiteTest.php<br />
/tmp/hphp_po33pK/program -v "Server.SourceRoot=`pwd`" \<br />
   -f phpunit.php PHPUnit/Tests/Framework/SuiteTest.php</code>
<p>コンパイルされたバイナリの&#8221;プログラム&#8221;は、通常<code>phpunit.php</code>と同じディレクトリから実行するよう注意してください。PHPUnitは、ローカルディスクから.phpファイルを探す際に<code>file_exists()</code>を使っているからです。より高度な設定をし静的ファイルキャッシュを構築することで、ディスク上の場所の依存関係を削除する事もできます。</p>
<p>注意<code>-v "Server.</code><code>SourceRoot=`pwd`"</code>は、通常は必要ありません。しかし、PHPUnitのかなりの数のファイル操作はいくつかのファイルの場所に基づく、ローカルディスク上にへの<code>realpath()</code>を呼び出しています。だから我々はテストを実行する場合にこれを追加する必要がありました。</p>
<p>5.いくつかの役に立つヒント：</p>
<p>（1）<code>--keep-tempdir=1</code>でバイナリを作ったが、その名前を忘れてしまった場合は、単純なコマンドは、通常それを見つけることができます。</p>
<p> <code>ls -altrd /tmp/hphp_* | tail -1</code>
<p>（2）多くの一時的なディレクトリがディスク容量を使い切る事があります。全てのHipHopの一時ファイルはこのよう削除できます。</p>
<p> <code>rm -fR /tmp/hphp_*</code><br />
<h2>例：HPHPiの下でPHPUnitの実行</h2>
<p> <code>$HPHP_HOME/src/hphpi/hphpi -f phpunit.php<br />
$HPHP_HOME/src/hphpi/hphpi -f phpunit.php PHPUnit/Tests/Framework/SuiteTest.php</code>
<p><font color="red">海平：私たちは、すべてのSuiteTest.php渡すことができますが、我々は、我々はまだ完全に、PHPUnitのいくつかのローカルディスク上の推定といくつかのマイナーなバグをのために、PHPUnit/Tests/Frameworkの下で完全にパスすることはできていません。</font><font color="red">全ての問題を修正する為に今もデバッグ中です。</font></p>
<h3>例：WordPressのコンパイル</h3>
<p>1.WordPressのコピーを取得します。注意、私たちはHipHopでWordPressをコンパイルする前に修正する必要がある2つ、3つの問題を見つけました。これらは、Wordpressの<span class="caps">SVN</span>のトランクにも反映されていますがバックポートはされていません。</p>
<p> <code>wget http://wordpress.org/latest.tar.gz<br />
tar zxvf wordpress-2.9.1.tar.gz<br />
cd wordpress<br />
[patch to fix some PHP coding problems that will cause compilation errors]</code>
<p>2.config.sample.phpをコピーするなどしてconfig.phpを作成し、データベース情報を設定します。このファイルは、 コンパイル<span class="caps">前に</span>準備しなければならないので、最終的なバイナリにされます。このファイルの変更がある場合はパッケージ全体の再コンパイルが必要です。</p>
<p>3.すべてのコンパイルしたいPHPファイルのリストを作成：</p>
<p> <code>find . -name "*.php" &gt; files.list</code>
<p>4.プロジェクトをコンパイルする準備が整いました。</p>
<p> <code>$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \<br />
  --force=1 --cluster-count=50</code>
<p>WordPressはPHPUnitほど動的なコーディングを持っていないためPHPUnitよりも簡単です。</p>
<p>5.コンパイル済みのバイナリが出来たはずです。それを実行するには</p>
<p> <code>sudo /tmp/hphp_xpl7hT/program -m server -v "Server.SourceRoot=`pwd`" \<br />
  -v "Server.DefaultDocument=index.php" -c $HPHP_HOME/bin/mime.hdf</code>
<p><code>sudo</code> WordPressがそのポートのみで動作するのでポート80にListenする為に必要です。</p>
<p><code>-m server</code>  サーバーモードでプログラムを実行します<code>-m daemon</code>としても大丈夫です。</p>
<p><code>-v "Server.SourceRoot=`pwd`"</code> 画像やcssファイルを見つけるには、依然として必要です。</p>
<p><code>-v "Server.DefaultDocument=index.php"</code> http://server/ として動作する為に必要。</p>
<p><code>-c $HPHP_HOME/bin/mime.hdf</code>静的なコンテンツのファイル拡張子に応じて<span class="caps">異なる</span> MIMEヘッダを提供する必要とするサーバーではロードする必要がある。</p>
<p>冗長なログを参照するには、</p>
<p><code>-v "Log.Level=Verbose"</code>これはエラー、警告、情報よりも多く出力します。<br /><code>-v "Log.NoSilencer=on"</code>は、WordPressのコードで多く使用される@演算子でエラーを出力します 。<br /><code>-v "Log.Header=on"</code>ログの各行のヘッダに出力されます 。ほとんどのヘッダは16進数による長い文字列です。これは16進エンコードされたスタックトレースです。これを読めるように変換するには以下のコマンドを実行します。</p>
<p> <code>/tmp/hphp_xpl7hT/program -m translate the-long-hex-string-without-brackets<br />
</code></p>
<p>&#8211;訳ここまで</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/300/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HipHopのビルドとインストール方法(和訳)</title>
		<link>http://blog.candycane.jp/archives/295</link>
		<comments>http://blog.candycane.jp/archives/295#comments</comments>
		<pubDate>Sun, 21 Feb 2010 04:18:54 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[HipHop]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=295</guid>
		<description><![CDATA[ソースコードがついに公開されたHipHop for PHPのビルドとインストール方法のドキュメントの和訳を作成しました。CentOSかFedoraの環境をお持ちの方は早速ビルドに挑戦してみてはいかがでしょうか。利用法のドキュメントの和訳は引き続きアップします。

PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開
HipHopのビルドとインストール方法(和訳)
HipHopを実行するには(和訳)

原文
http://wiki.github.com/facebook/hiphop-php/building-and-installing
ビルドとインストール
HipHopはCentOSとFedora向けに開発されており、他のオペレーティングシステム上でのビルドは現在のところ機能しません。他のオペレーティングシステム向けのサポートは準備ができ次第追加されます。
前提条件
HipHopの前提条件はすべてをを静的にビルドする事です。ほとんどのパッケージは直接あなたのディストリビューションのパッケージ管理システムからインストールすることができます。
必要なパッケージ

cmakeの2.6以上のバージョン
g++ / gccの4.1以上のバージョン
Boost 1.37以上のバージョン
flex
bison
{re2cの{0}0.13.0以上のバージョン
libmysql
libxml2
libmcrypt
libicu 4.2以上のバージョン
openssl
binutils 及び binutils-dev
libcap
gd
zlib
tbb インテルのスレッドビルディングブロック
libmbfl： git clone git：/ /github.com/scottmac/libmbfl.git
Oniguruma
libpcre3
libexpat

カスタムパッケージ
以下のパッケージは若干の変更が加えられており、最新のソースのコピーに対して提供されているパッチを当てる必要があります。

libcurl src/ third_party/libcurl.fb-changes.diff
libevent 1.4 src/third_party/libevent.fb-changes.diff

パッチを適用するにはあなたのビルド環境は： curl-7.20.0 hiphop-php libevent-1.4.13-stable
次のコマンドを入力します： cd libevent-1.4.13-stable cp ../hiphop-php/src/third_party/libevent.fb-changes.diff . patch &#60; libevent.fb-changes.diff cd .. cd curl-7.20.0 cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff . patch -p0 &#60; libcurl.fb-changes.diff
パッチ処理中にエラーが表示される場合は -p0 を入力しないでください。
バンドルパッケージ

src/third_party

libafdt
libmbfl
sqlite3
timelib



ビルド
ソースからIntel TBBを使用する
ソースからTBBの構築した場合や、、手動でバイナリをインストールした場合はいくつかの変数をバージョンと場所のヒントを与えるためにエクスポートする必要があります。
export TBB_INSTALL_DIR="/home/user/tbb22_012oss" export TBB_ARCH_PLATFORM="intel64/cc4.1.2_libc2.5_kernel2.6.20"
目的はls $TBB_INSTALL_DIR/$TBB_ARCH_PLATFORM　に対してリンクするファイルが表示される事です。
ビルド
CMakeは、現在の選択されているビルドツールです。
あなたのカスタムのlibcurl、libeventや、必要に応じてインストールした他のライブラリの場所をCMakeに指し示す必要があります。CMAKE_PREFIX_PATH変数は場所のヒントを与えるために使用されます。
export CMAKE_PREFIX_PATH=/home/user
HipHopのビルドは下記のように行います。
cd /home/user/hiphop git clone git://github.com/facebook/hiphop-php.git cd [...]]]></description>
			<content:encoded><![CDATA[<p>ソースコードがついに公開されたHipHop for PHPのビルドとインストール方法のドキュメントの和訳を作成しました。CentOSかFedoraの環境をお持ちの方は早速ビルドに挑戦してみてはいかがでしょうか。利用法のドキュメントの和訳は引き続きアップします。</p>
<ul>
<li><a href="http://blog.candycane.jp/archives/275">PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開</a></li>
<li>HipHopのビルドとインストール方法(和訳)</li>
<li><a href="http://blog.candycane.jp/archives/300">HipHopを実行するには(和訳)</a></li>
</ul>
<h3>原文</h3>
<p><a href="http://wiki.github.com/facebook/hiphop-php/building-and-installing">http://wiki.github.com/facebook/hiphop-php/building-and-installing</a></p>
<h3>ビルドとインストール</h3>
<p>HipHopはCentOSとFedora向けに開発されており、他のオペレーティングシステム上でのビルドは現在のところ機能しません。他のオペレーティングシステム向けのサポートは準備ができ次第追加されます。</p>
<h2>前提条件</h2>
<p>HipHopの前提条件はすべてをを静的にビルドする事です。ほとんどのパッケージは直接あなたのディストリビューションのパッケージ管理システムからインストールすることができます。</p>
<h3>必要なパッケージ</h3>
<ul>
<li>cmakeの<i>2.6以上のバージョン</i></li>
<li>g++ / gccの<i>4.1以上のバージョン</i></li>
<li>Boost <i>1.37以上のバージョン</i></li>
<li>flex</li>
<li>bison</li>
<li>{re2cの{0}0.13.0以上のバージョン</li>
<li>libmysql</li>
<li>libxml2</li>
<li>libmcrypt</li>
<li>libicu <i>4.2以上のバージョン</i></li>
<li>openssl</li>
<li>binutils 及び binutils-dev</li>
<li>libcap</li>
<li>gd</li>
<li>zlib</li>
<li>tbb <i>インテルのスレッドビルディングブロック</i></li>
<li>libmbfl： git clone git：/ /github.com/scottmac/libmbfl.git</li>
<li><a href="http://www.geocities.jp/kosako3/oniguruma/">Oniguruma</a></li>
<li>libpcre3</li>
<li>libexpat</li>
</ul>
<h3>カスタムパッケージ</h3>
<p>以下のパッケージは若干の変更が加えられており、最新のソースのコピーに対して提供されているパッチを当てる必要があります。</p>
<ul>
<li><a href="http://curl.haxx.se/download.html">libcurl</a> <i>src/ third_party/libcurl.fb-changes.diff</i></li>
<li><a href="http://www.monkey.org/%7Eprovos/libevent/">libevent 1.4</a> <i>src/third_party/libevent.fb-changes.diff</i></li>
</ul>
<p>パッチを適用するにはあなたのビルド環境は：<br /> <code>curl-7.20.0 hiphop-php libevent-1.4.13-stable</code></p>
<p>次のコマンドを入力します：<br /> <code>cd libevent-1.4.13-stable</code><br /> <code>cp ../hiphop-php/src/third_party/libevent.fb-changes.diff .</code><br /> <code>patch &lt; libevent.fb-changes.diff</code><br /> <code>cd ..</code><br /> <code>cd curl-7.20.0</code><br /> <code>cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .</code><br /> <code>patch -p0 &lt; libcurl.fb-changes.diff</code></p>
<p>パッチ処理中にエラーが表示される場合は -p0 を入力しないでください。</p>
<h3>バンドルパッケージ</h3>
<ul>
<li>src/third_party
<ul>
<li>libafdt</li>
<li>libmbfl</li>
<li>sqlite3</li>
<li>timelib</li>
</ul>
</li>
</ul>
<h2>ビルド</h2>
<h3>ソースからIntel <span class="caps">TBB</span>を使用する</h3>
<p>ソースから<span class="caps">TBBの</span>構築した場合や、、手動でバイナリをインストールした場合はいくつかの変数をバージョンと場所のヒントを与えるためにエクスポートする必要があります。</p>
<p><code>export TBB_INSTALL_DIR="/home/user/tbb22_012oss"</code><br /> <code>export TBB_ARCH_PLATFORM="intel64/cc4.1.2_libc2.5_kernel2.6.20"</code></p>
<p>目的は<code>ls $TBB_INSTALL_DIR/$TBB_ARCH_PLATFORM</code>　に対してリンクするファイルが表示される事です。</p>
<h3>ビルド</h3>
<p>CMakeは、現在の選択されているビルドツールです。</p>
<p>あなたのカスタムのlibcurl、libeventや、必要に応じてインストールした他のライブラリの場所をCMakeに指し示す必要があります。<i>CMAKE_PREFIX_PATH</i>変数は場所のヒントを与えるために使用されます。</p>
<p><code>export CMAKE_PREFIX_PATH=/home/user</code></p>
<p>HipHopのビルドは下記のように行います。</p>
<p><code>cd /home/user/hiphop</code><br /> <code>git clone git://github.com/facebook/hiphop-php.git</code><br /> <code>cd hiphop-php</code><br /> <code>git submodule init</code><br /> <code>git submodule update</code><br /> <code>export HPHP_HOME=`pwd`</code><br /> <code>export HPHP_LIB=`pwd`/bin</code><br /> <code>cmake .</code></p>
<p>これが終わるとビルドに必要なファイルが生成されシェルに処理が戻ります。最後にmakeを実行します。エラーが発生した場合は、チェックアウトしたディレクトリ内のCMakeCache.txtの削除が必要です。</p>
<p><code>make</code></p>
<p>&#8211;訳ここまで</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/295/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lithium0.6リリースノート 和訳</title>
		<link>http://blog.candycane.jp/archives/285</link>
		<comments>http://blog.candycane.jp/archives/285#comments</comments>
		<pubDate>Wed, 17 Feb 2010 05:23:55 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=285</guid>
		<description><![CDATA[
PHP5.3以降専用の先進的フレームワーク、Lithiumの0.6がリリースされました。(Lithiumの基本情報はこちらの記事をどうぞ)
良好な開発体制に支えられて安定版のリリースに向けて着実にプロジェクトが進行しているようです。
いつものようにリリースノートを和訳しました。
今回は2009年10月に来日したJoelがリリースノートを記述していますね。
原文
http://rad-dev.org/lithium/wiki/blog/Lithium_0_6_Big_Improvements_A_Brewin
Lithium0.6：大きな改良の醸造
過去3週間のタイムラインをご覧になっていたのであれば、安定版にむけたLithiumの活動が押し寄せている事にお気付きでしょう。
Lithium-0.6 では後方互換性のないいくつかの変更があります。：

新しい最上位レベルの名前空間、`\lithium\net` が作成され、`\lithium\util\Socket`、`\lithium\util\Socket\*`、`\lithium\http` がこの新しい名前空間の下に移動しました。
アプリケーションレベルのブートストラップ設定ディレクトリを `\app\ config\bootstrap` に作成。これはあなたにあなたのブートストラップシーケンスをより小さく、論理的な塊に分割することができます。そしてこれらはすべて、自動的にロードされます。
すべてのプラットフォーム用のコンソール出力にカラー表示をサポート。POSIX互換性のあるエスケープ文字をサポートします。
ほとんどの`li3`コマンド（`test` コマンドも含まれ、、テスト結果を緑赤で表現）で重要な情報をハイライトされカラーで出力されます。
テンプレート層の完全な見直しを行いました。カスタムストリームクラスは今後はレンダリングに使用されません。APCとうまく動作するテンプレート層の為です。ビューテンプレートはコンパイルされて `app/resources/tmp/cache/templates/`に格納されるようになりました。古いバージョンからアップデートを行う場合は、このフォルダパスが存在している事を確認してください。
マイナーなキャッシュの愛をLibrariesを `app/config/bootstrap\cache.php`。(ロスのないフィルタとして)
適切なロケールをアクション、コンソールへのリクエストから検出する機能の追加
G11nの環境設定を一元的および世界的に有効なロケールの切り替えの導入。
g11nのいくつかの名前とメソッドのシグネチャを、より合理的なAPIに変更しました。

`Cache`アダプタのほとんどのAPIの変更：

MemcaceとAPCキャッシュアダプタでのマルチキーのサポート(どのメソッドがこの機能をサポートするかはドキュメントを見てください)。
`Cache::write()`からのキー生成時の不要な&#8217;\_expires&#8217;キーの削除。今後はキャッシュキーを汚染しません。


改善されたドキュメントとテストなど。

Lithiumのハッキングから離れて、我々はいくつかの非常に有用なフィルタシステムのユースケースを管理しました：

[プロファイリング]（http://pastium.org/view/cc7b5d11ced0c4e2ad8cf25227b0bd96用） [xhprof]（http://pecl.php.net/package/xhprof）を使用する。
コンテンツの配信（http://pastium.org/view/e6d0c0cc88010822cb58a7fc4b7a6014） （画像、スタイルシートなど）のプラグインからなど。

上記のような基本的な変更がありましたが、Lithiumのコア部分は確かな状態です。さらに新たな機能は毎日のように追加されています。われわれはフィニッシュライン中間地点より先を通過し、勢いはさらに増しています。
*[変更履歴]（http://rad-dev.org/lithium/wiki/releases/0_6）
*[ダウンロード 0.6]（http://rad-dev.org/lithium/versions）
最新の開発状況は[Rad-Dev]（http://rad-dev.org/lithium）をご覧ください。[APIドキュメント]（http://lithify.me/docs）、IRCチャンネルは`irc.freenode.net`上の`＃li3`と`＃li3-core`です。
〜jperras
&#8212;訳ここまで
国際化対応やビュー、コンソールのカラー表示など出力系の変更が多く入っているようですね。ビュー層の変更がどのようにＡＰＣを考慮しているかなどは実際に動かしてみながらみるのがよいでしょうか。次回のリリース(3/8)ではMySQLやキュー、初期画面などが追加・改良されるようです。ますます楽しみですね。
Lithiumに関する過去の記事
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_.png"><img src="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_-300x90.png" alt="designall.dll" title="designall.dll" width="300" height="90" class="alignnone size-medium wp-image-188" /></a></p>
<p>PHP5.3以降専用の先進的フレームワーク、Lithiumの0.6がリリースされました。(Lithiumの基本情報は<a href="http://blog.candycane.jp/archives/261">こちらの記事</a>をどうぞ)<br />
良好な開発体制に支えられて安定版のリリースに向けて着実にプロジェクトが進行しているようです。</p>
<p>いつものようにリリースノートを和訳しました。<br />
今回は2009年10月に来日したJoelがリリースノートを記述していますね。</p>
<h3>原文</h3>
<p><a href="http://rad-dev.org/lithium/wiki/blog/Lithium_0_6_Big_Improvements_A_Brewin">http://rad-dev.org/lithium/wiki/blog/Lithium_0_6_Big_Improvements_A_Brewin</a></p>
<h3>Lithium0.6：大きな改良の醸造</h3>
<p>過去3週間のタイムラインをご覧になっていたのであれば、安定版にむけたLithiumの活動が押し寄せている事にお気付きでしょう。<br />
Lithium-0.6 では後方互換性のないいくつかの変更があります。：</p>
<ul>
<li>新しい最上位レベルの名前空間、`\lithium\net` が作成され、`\lithium\util\Socket`、`\lithium\util\Socket\*`、`\lithium\http` がこの新しい名前空間の下に移動しました。</li>
<li>アプリケーションレベルのブートストラップ設定ディレクトリを `\app\ config\bootstrap` に作成。これはあなたにあなたのブートストラップシーケンスをより小さく、論理的な塊に分割することができます。そしてこれらはすべて、自動的にロードされます。</li>
<li>すべてのプラットフォーム用のコンソール出力にカラー表示をサポート。POSIX互換性のあるエスケープ文字をサポートします。</li>
<li>ほとんどの`li3`コマンド（`test` コマンドも含まれ、、テスト結果を緑赤で表現）で重要な情報をハイライトされカラーで出力されます。</li>
<li>テンプレート層の完全な見直しを行いました。カスタムストリームクラスは今後はレンダリングに使用されません。APCとうまく動作するテンプレート層の為です。ビューテンプレートはコンパイルされて `app/resources/tmp/cache/templates/`に格納されるようになりました。古いバージョンからアップデートを行う場合は、このフォルダパスが存在している事を確認してください。</li>
<li>マイナーなキャッシュの愛をLibrariesを `app/config/bootstrap\cache.php`。(ロスのないフィルタとして)</li>
<li>適切なロケールをアクション、コンソールへのリクエストから検出する機能の追加</li>
<li>G11nの環境設定を一元的および世界的に有効なロケールの切り替えの導入。</li>
<li>g11nのいくつかの名前とメソッドのシグネチャを、より合理的なAPIに変更しました。
<li>
<li>`Cache`アダプタのほとんどのAPIの変更：
<ul>
<li>MemcaceとAPCキャッシュアダプタでのマルチキーのサポート(どのメソッドがこの機能をサポートするかはドキュメントを見てください)。</li>
<li>`Cache::write()`からのキー生成時の不要な&#8217;\_expires&#8217;キーの削除。今後はキャッシュキーを汚染しません。</li>
</ul>
</li>
<li>改善されたドキュメントとテストなど。</li>
</ul>
<p>Lithiumのハッキングから離れて、我々はいくつかの非常に有用なフィルタシステムのユースケースを管理しました：<br />
<uｌ></p>
<li>[プロファイリング]（http://pastium.org/view/cc7b5d11ced0c4e2ad8cf25227b0bd96用） [xhprof]（http://pecl.php.net/package/xhprof）を使用する。</li>
<li>コンテンツの配信（http://pastium.org/view/e6d0c0cc88010822cb58a7fc4b7a6014） （画像、スタイルシートなど）のプラグインからなど。</li>
</ul>
<p>上記のような基本的な変更がありましたが、Lithiumのコア部分は確かな状態です。さらに新たな機能は毎日のように追加されています。われわれはフィニッシュライン中間地点より先を通過し、勢いはさらに増しています。<br />
*[変更履歴]（http://rad-dev.org/lithium/wiki/releases/0_6）<br />
*[ダウンロード 0.6]（http://rad-dev.org/lithium/versions）<br />
最新の開発状況は[Rad-Dev]（http://rad-dev.org/lithium）をご覧ください。[APIドキュメント]（http://lithify.me/docs）、IRCチャンネルは`irc.freenode.net`上の`＃li3`と`＃li3-core`です。</p>
<p>〜jperras</p>
<p>&#8212;訳ここまで</p>
<p>国際化対応やビュー、コンソールのカラー表示など出力系の変更が多く入っているようですね。ビュー層の変更がどのようにＡＰＣを考慮しているかなどは実際に動かしてみながらみるのがよいでしょうか。次回のリリース(3/8)ではMySQLやキュー、初期画面などが追加・改良されるようです。ますます楽しみですね。</p>
<p><a href="http://blog.candycane.jp/archives/tag/lithium">Lithiumに関する過去の記事</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/285/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開</title>
		<link>http://blog.candycane.jp/archives/275</link>
		<comments>http://blog.candycane.jp/archives/275#comments</comments>
		<pubDate>Wed, 03 Feb 2010 03:19:26 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[HipHop]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=275</guid>
		<description><![CDATA[アメリカ時間の昼ごろに僕のTwitter上が一つのニュースで埋め尽くされました。
PHPをC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。
2/21追記:
マニュアルなどの和訳も行いました。

PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開
HipHopのビルドとインストール方法(和訳)
HipHopを実行するには(和訳)

原文
http://developers.facebook.com/news.php?blog=1&#038;story=358
Facebookにおいて重要なことのひとつが開発スピードが早いことです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。
 
今日、私は2年に渡って作業してきた素晴らし小さなチームのプロジェクトを共有することに興奮しています。
HipHop for PHP。HipHopにより私たちはページによっては、Webサーバー上で約50パーセントのCPU使用量を削減できました。CPUの使用量の少なさは、サーバー台数の削減につながり、それはより少ないオーバーヘッドを意味します。このプロジェクトは、Facebook上で多大な影響を及ぼしました。私たちはHipHopがウェブに大きな利益をもたらすと感じ、今晩オープンソースとしてリリースしPHPによる大規模WEBサイトのスケーリングに新たな方向性が提示されると期待します。いまだ完全ではないHipHopでも信じれれないような結果を残しており、ベータ版であっても心地よいものであるでしょう。
HipHop for PHPは技術的にはコンパイラではありません。むしろ、ソースコードの変換機です。HipHopはあなたのPHPのソースコードをC++に最適化された形に機械的に変換します。そしてg++でコンパイルされます。HipHopは意味的に同等の方法でソースコードを実行しますが、いくつかのまれに使われる機能(eval など)を犠牲としてパフォーマンスを向上させます。HipHopコード変換機は、PHPランタイムの再実装であり、また多くのパフォーマンス向上の為のPHPエクステンションを書き直したものです。
スクリプト言語としてのスケーリングPHP
PHPのルーツは、PerlやPython、Rubyのようなスクリプト言語で、すべてのプログラマの生産性の面で大きな利点があり、迅速かつ継続的な開発を可能にします。これはC++やような伝統的なコンパイル言語やJavaのような中間言語と比較した場合です 。一方、スクリプト言語は一般的にCPUおよびメモリの使用に関して効率的でないことが知られています。このため、月間4000億以上のページビューでPHPをベースにしたFacebookをスケールするという事は挑戦的な事でした。
これらの非効率性に対処する1つの一般的な解決法はPHPアプリケーションの複雑な部分をPHPエクステンションとしてC++で書き直す事です。これによりPHPはフロントエンドのHTMLとC++のロジックをつなぎ合わせる糊のような言語に大きく変化します。技術的な観点はうまくいきますが、アプリケーションに携わる事ができるエンジニアの数を劇的に減らしてしまう事になります。C++を学ぶ事はPHPエクステンションを書くための最初の一歩にすぎません。次にZend APIを理解しなければいけません。我々のエンジニアリングチームは100万ユーザ当たり1人と比較的小さいものですが、私たちのコードベースの一部を他のものよりアクセシブルにするわけにはいかないと考えました。
ほとんどのページがログインしたユーザによってカスタマイズされるFacebookのスケーリングはとりわけ挑戦的です。あなたのホームページを表示する際はすべてのあなたの友人のルックアップする必要があり、関連する更新を検索し、（マルチフィードと呼ばれているカスタムサービス）、お客様のプライバシー設定に基づいてフィルタリングし、コメントや写真などの豊富なデータを補います。そのような豊富なデータが、人々がFacebookの愛している部分です。これらすべてが１秒以下で行われます。HipHopによって最終的にPHPとして組み立てられるロジックを、迅速かつ継続的に書く事ができます。またこのロジックはC++やErlangやJava、Pythonで書かれたバックエンドサービス、ニュースフィード、検索、チャットサービスおよび他のコア部分などと連携しています。
2007年には、これらの問題を解決するための、いくつかの異なる方法を考案しそのうちいくつかの実装を試みました。共通の改善案はFacebookを別の言語で書き換える事でした。ですが、サイト開発の複雑さと速度を達成するためにいくらかの時間がかかると思われました。我々はPHP内部のZendエンジンも書き換えそれらのパッチを寄付しましたが、最終的に必要としてパフォーマンス向上には至りませんでした。HipHopの利益は我々の開発スピードがほとんど変わらない事です
HipHopの誕生
数年前のhackathonでの一夜に（プライムタイムのハック）、PHPをC++に変換するコードを書き始めました。かなりの構文の似ているC++は、CPUとメモリ使用量に関してはPHPを大きく凌いでいます。PHP自体もCで書かれています。我々はこれほどの量のコードを書き直すのが不可能な事はわかっていましたが、もしプログラム的にこれを行うシステムを構築したらどうなるだろうと思いました。
PHPのパフォーマンスを改善するための新しい方法を見つける事は新しいコンセプトではありません。実行時には、Zend EngineはあなたのPHPソースをオペコードに変換し、その後、Zendの仮想マシンを介して実行されます。APCとeAcceleratorのは、この出力をキャッシュしPHPで提供される大多数のウェブサイトで使用されます。またZend Serverは、オペコードの最適化とキャッシュを介してPHPを高速化する商用製品です。その代わりに、我々はPHPのソースコードを直接C++に変換した後にネイティブのマシンコードに変換することを考えました。PHPをコンパイルする事も新しいアイデアではありません。RoadsendとphcはPHPをCにコンパイルし、 QuercusはPHPをJavaにコンパイルし、 Phalanger はPHPを.Netにコンパイルします。
言うまでもなく、一度のhackathonだけでは終わりませんでした。8ヵ月後、私は速くコンパイルされたコードを実行することが可能であることを示すのに十分なコードを得ました。我々はプロジェクトのスピードアップにイアン・プロクターとミンハイ・ヤンをプロジェクトのスピードアップの為にメンバーに加えました。我々は、続く10カ月をすべてのコーディングに、次の6ヶ月を本番サーバー上でのテストに費やしました。我々はリリースから6か月の時点で、Webトラフィックの90％以上のHipHopを使用して提供していると事を誇りに思っています。
HipHopの動作
プロジェクトの主な課題は、PHPとC++の間のギャップを埋めることでした。PHPは動的な弱い型付けを持つスクリプト言語です。C++は静的型付けのコンパイルされた言語です。一方、PHPは魔法のように動的な機能を記述することができ、ほとんどのPHPは比較的簡単です。if(&#8230;){&#8230;} else {..}はfunction foo($x) { include $x; } よりも好ましいです。これは、我々がパフォーマンスを稼いでいるところです。私たちの生成したコードは変数や関数の静的バインディングをいつでも使用可能です。また、変数のほとんどに型推定を用いてメモリを節約します。
変換プロセスは3つの主な手順が含まれます：

収集した情報から何が宣言され、何に依存しているかの静的分析
C++の特定のタイプを、スカラー、文字列、配列、クラス、オブジェクト、およびバリアント型から選ぶ型推定
ほとんどの部分のPHPのステートメントと式をC++のステートメントと式に直接対応されたコード生成

 
また我々はHPHPi も実験的なインタプリタとして設計し開発しました。HPHPiを使用すれば、PHPのソースコードを実行前にコンパイルする必要はありません。これは私達がヒップホップ自体のバグをキャッチする事と、技術者がコードを書く方法を変更せずにPHPコードを書けるようにします。
全体的にはHipHopはC++のパフォーマンス上のメリットを活用しつつ、PHPの良い面を維持することができます。合計では我々30万行のコードとと5000以上のユニットテストを書きました。今夜GitHub上で、全てがPHPライセンスの下でリリースされます。
今夜のお楽しみ
今夜、我々はHipHopの深部へ飛び込む開発者の小さな集まりをストリーミングします。ご覧になりたい場合は太平洋時間19:30に再度こちらのページをご覧ください。
今夜、多くの質問があると思いますが、HipHop wikiを見てください。（リンクを後ほど公開するつもりです）あるいは、 HipHopの開発者メーリングリストに参加してください。また今後数ヶ月、FOSDEM 、 SCALE 、PHP UK、 ConFoo、TEX　X、OSCONなどのイベントで、でHipHop for PHPについて講演をします。我々は非常に盛んなオープンソースプロジェクトに皆さんと一緒にHip Hopが進化することに興奮しています。

海平趙、シニアエンジニア、Facebookがプログラマの楽園と悟っています。
&#8212;訳ここまで
長文という事と、タッチが慣れないという事があって誤訳があるかもしれません。自分なりに咀嚼して書いてみたつもりですがご意見などあればTwitterなどで頂ければと思います。次はだれが最初に試すか、本番に投入するかという勝負ですね。とはいえFacebookでは90%のトラフィックで利用しているとの事ですからコードの書き方に気をつければ安定しているのでしょう。ということでみなさん、お試しあれ！
]]></description>
			<content:encoded><![CDATA[<p>アメリカ時間の昼ごろに僕のTwitter上が一つのニュースで埋め尽くされました。<br />
PHPをC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。</p>
<p>2/21追記:<br />
マニュアルなどの和訳も行いました。</p>
<ul>
<li>PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開</li>
<li><a href="http://blog.candycane.jp/archives/295">HipHopのビルドとインストール方法(和訳)</a></li>
<li><a href="http://blog.candycane.jp/archives/300">HipHopを実行するには(和訳)</a></li>
</ul>
<h4>原文</h4>
<p><a href="http://developers.facebook.com/news.php?blog=1&#038;story=358">http://developers.facebook.com/news.php?blog=1&#038;story=358</a></p>
<p>Facebookにおいて重要なことのひとつが開発スピードが早いことです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。</p>
<p> <img src="http://wiki.developers.facebook.com/images/a/ac/HipHop_logo_white.png" style="float: left; padding-right: 10px;">
<p>今日、私は2年に渡って作業してきた素晴らし小さなチームのプロジェクトを共有することに興奮しています。<br />
HipHop for PHP。HipHopにより私たちはページによっては、Webサーバー上で約50パーセントのCPU使用量を削減できました。CPUの使用量の少なさは、サーバー台数の削減につながり、それはより少ないオーバーヘッドを意味します。このプロジェクトは、Facebook上で多大な影響を及ぼしました。私たちはHipHopがウェブに大きな利益をもたらすと感じ、今晩オープンソースとしてリリースしPHPによる大規模WEBサイトのスケーリングに新たな方向性が提示されると期待します。いまだ完全ではないHipHopでも信じれれないような結果を残しており、ベータ版であっても心地よいものであるでしょう。</p>
<p>HipHop for PHPは技術的にはコンパイラではありません。むしろ、ソースコードの変換機です。HipHopはあなたのPHPのソースコードをC++に最適化された形に機械的に変換します。そしてg++でコンパイルされます。HipHopは意味的に同等の方法でソースコードを実行しますが、いくつかのまれに使われる機能(eval など)を犠牲としてパフォーマンスを向上させます。HipHopコード変換機は、PHPランタイムの再実装であり、また多くのパフォーマンス向上の為のPHPエクステンションを書き直したものです。</p>
<h2>スクリプト言語としてのスケーリングPHP</h2>
<p>PHPのルーツは、PerlやPython、Rubyのような<a href="http://en.wikipedia.org/wiki/Server-side_scripting">スクリプト言語</a>で、すべてのプログラマの生産性の面で大きな利点があり、迅速かつ継続的な開発を可能にします。これはC++やような伝統的な<a href="http://en.wikipedia.org/wiki/Compiled_language">コンパイル言語</a>やJavaのような<a href="http://en.wikipedia.org/wiki/Interpreted_language">中間言語</a>と比較した場合です 。一方、スクリプト言語は一般的にCPUおよびメモリの使用に関して効率的でないことが知られています。このため、月間4000億以上のページビューでPHPをベースにしたFacebookをスケールするという事は挑戦的な事でした。</p>
<p>これらの非効率性に対処する1つの一般的な解決法はPHPアプリケーションの複雑な部分をPHPエクステンションとしてC++で書き直す事です。これによりPHPはフロントエンドのHTMLとC++のロジックをつなぎ合わせる糊のような言語に大きく変化します。技術的な観点はうまくいきますが、アプリケーションに携わる事ができるエンジニアの数を劇的に減らしてしまう事になります。C++を学ぶ事はPHPエクステンションを書くための最初の一歩にすぎません。次に<a href="http://theserverpages.com/php/manual/en/zend.php">Zend API</a>を理解しなければいけません。我々のエンジニアリングチームは100万ユーザ当たり1人と比較的小さいものですが、私たちのコードベースの一部を他のものよりアクセシブルにするわけにはいかないと考えました。</p>
<p>ほとんどのページがログインしたユーザによってカスタマイズされるFacebookのスケーリングはとりわけ挑戦的です。あなたのホームページを表示する際はすべてのあなたの友人のルックアップする必要があり、関連する更新を検索し、（マルチフィードと呼ばれているカスタムサービス）、お客様のプライバシー設定に基づいてフィルタリングし、コメントや写真などの豊富なデータを補います。そのような豊富なデータが、人々がFacebookの愛している部分です。これらすべてが１秒以下で行われます。HipHopによって最終的にPHPとして組み立てられるロジックを、迅速かつ継続的に書く事ができます。またこのロジックはC++やErlangやJava、Pythonで書かれたバックエンドサービス、ニュースフィード、検索、チャットサービスおよび他のコア部分などと連携しています。</p>
<p>2007年には、これらの問題を解決するための、いくつかの異なる方法を考案しそのうちいくつかの実装を試みました。共通の改善案はFacebookを別の言語で書き換える事でした。ですが、サイト開発の複雑さと速度を達成するためにいくらかの時間がかかると思われました。我々はPHP内部の<a href="http://en.wikipedia.org/wiki/Zend_Engine">Zendエンジン</a>も書き換えそれらのパッチを寄付しましたが、最終的に必要としてパフォーマンス向上には至りませんでした。HipHopの利益は我々の開発スピードがほとんど変わらない事です</p>
<h2>HipHopの誕生</h2>
<p>数年前のhackathonでの一夜に（<a href="http://www.facebook.com/video/video.php?v=124728580468&amp;ref=mf">プライムタイムのハック</a>）、PHPをC++に変換するコードを書き始めました。かなりの構文の似ているC++は、CPUとメモリ使用量に関してはPHPを大きく凌いでいます。PHP自体もCで書かれています。我々はこれほどの量のコードを書き直すのが不可能な事はわかっていましたが、もしプログラム的にこれを行うシステムを構築したらどうなるだろうと思いました。</p>
<p>PHPのパフォーマンスを改善するための新しい方法を見つける事は新しいコンセプトではありません。実行時には、Zend EngineはあなたのPHPソースをオペコードに変換し、その後、Zendの仮想マシンを介して実行されます。<a href="http://pecl.php.net/package/APC">APC</a>と<a href="http://eaccelerator.net/">eAcceleratorの</a>は、この出力をキャッシュしPHPで提供される大多数のウェブサイトで使用されます。また<a href="http://en.wikipedia.org/wiki/Zend_Server">Zend Server</a>は、オペコードの最適化とキャッシュを介してPHPを高速化する商用製品です。その代わりに、我々はPHPのソースコードを直接C++に変換した後にネイティブのマシンコードに変換することを考えました。PHPをコンパイルする事も新しいアイデアではありません。<a href="http://www.roadsend.com/">Roadsend</a>と<a href="http://www.phpcompiler.org/">phc</a>はPHPをCにコンパイルし、 <a href="http://www.caucho.com/resin-3.0/quercus/">Quercus</a>はPHPをJavaにコンパイルし、 <a href="http://www.php-compiler.net/">Phalanger</a> はPHPを.Netにコンパイルします。</p>
<p>言うまでもなく、一度のhackathonだけでは終わりませんでした。8ヵ月後、私は速くコンパイルされたコードを実行することが可能であることを示すのに十分なコードを得ました。我々はプロジェクトのスピードアップにイアン・プロクターとミンハイ・ヤンをプロジェクトのスピードアップの為にメンバーに加えました。我々は、続く10カ月をすべてのコーディングに、次の6ヶ月を本番サーバー上でのテストに費やしました。我々はリリースから6か月の時点で、Webトラフィックの90％以上のHipHopを使用して提供していると事を誇りに思っています。</p>
<h2>HipHopの動作</h2>
<p>プロジェクトの主な課題は、PHPとC++の間のギャップを埋めることでした。PHPは動的な弱い型付けを持つスクリプト言語です。C++は静的型付けのコンパイルされた言語です。一方、PHPは魔法のように動的な機能を記述することができ、ほとんどのPHPは比較的簡単です。if(&#8230;){&#8230;} else {..}はfunction foo($x) { include $x; } よりも好ましいです。これは、我々がパフォーマンスを稼いでいるところです。私たちの生成したコードは変数や関数の静的バインディングをいつでも使用可能です。また、変数のほとんどに型推定を用いてメモリを節約します。</p>
<p>変換プロセスは3つの主な手順が含まれます：</p>
<ol>
<li>収集した情報から何が宣言され、何に依存しているかの静的分析</li>
<li>C++の特定のタイプを、スカラー、文字列、配列、クラス、オブジェクト、およびバリアント型から選ぶ型推定</li>
<li>ほとんどの部分のPHPのステートメントと式をC++のステートメントと式に直接対応されたコード生成</li>
</ol>
<p> <a href="http://wiki.developers.facebook.com/images/2/23/HipHop_transformation_process.png"><img src="http://wiki.developers.facebook.com/images/2/23/HipHop_transformation_process.png" width="450" height="281"></a>
<p>また我々はHPHPi も実験的なインタプリタとして設計し開発しました。HPHPiを使用すれば、PHPのソースコードを実行前にコンパイルする必要はありません。これは私達がヒップホップ自体のバグをキャッチする事と、技術者がコードを書く方法を変更せずにPHPコードを書けるようにします。</p>
<p>全体的にはHipHopはC++のパフォーマンス上のメリットを活用しつつ、PHPの良い面を維持することができます。合計では我々30万行のコードとと5000以上のユニットテストを書きました。今夜GitHub上で、全てがPHPライセンスの下でリリースされます。</p>
<h2>今夜のお楽しみ</h2>
<p>今夜、我々はHipHopの深部へ飛び込む開発者の小さな集まりをストリーミングします。ご覧になりたい場合は太平洋時間19:30に再度こちらのページをご覧ください。</p>
<p>今夜、多くの質問があると思いますが、HipHop wikiを見てください。（リンクを後ほど公開するつもりです）あるいは、 <a href="http://groups.google.com/group/hiphop-php-dev">HipHopの開発者メーリングリスト</a>に参加してください。また今後数ヶ月、<a href="http://www.fosdem.org/2010/schedule/events/scalingfacebook">FOSDEM</a> 、 <a href="http://www.socallinuxexpo.org/scale8x/">SCALE</a> 、<a href="http://www.phpconference.co.uk/">PHP UK</a>、 <a href="http://www.confoo.ca/">ConFoo</a>、<a href="http://tek.phparch.com/">TEX　X</a>、<a href="http://en.oreilly.com/oscon2010">OSCON</a>などのイベントで、でHipHop for PHPについて講演をします。我々は非常に盛んなオープンソースプロジェクトに皆さんと一緒にHip Hopが進化することに興奮しています。</p>
<div style="text-align: center;"></div>
<p><em>海平趙、シニアエンジニア、Facebookがプログラマの楽園と悟っています。</em></p>
<p>&#8212;訳ここまで</p>
<p>長文という事と、タッチが慣れないという事があって誤訳があるかもしれません。自分なりに咀嚼して書いてみたつもりですがご意見などあればTwitterなどで頂ければと思います。次はだれが最初に試すか、本番に投入するかという勝負ですね。とはいえFacebookでは90%のトラフィックで利用しているとの事ですからコードの書き方に気をつければ安定しているのでしょう。ということでみなさん、お試しあれ！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/275/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Lithium0.5がリリースされました！(和訳)</title>
		<link>http://blog.candycane.jp/archives/269</link>
		<comments>http://blog.candycane.jp/archives/269#comments</comments>
		<pubDate>Mon, 01 Feb 2010 02:48:14 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=269</guid>
		<description><![CDATA[
最も軽量で拡張性に優れたフレームワーク、Lithiumのバージョン0.5がリリースされました。1.0リリースに向けて折り返し地点と言った所ですね。リリースの速度が速すぎて翻訳する方もちょっと大変ですが、喜ばしいニュースですのでお伝えしたいと思います。
原文
http://rad-dev.org/lithium/wiki/blog/Lithium_0_5_half_way_there
Lithium 0.5, half way there.
Lithiumチームはバージョン0.5のリリースを喜んでお知らせします
バージョン番号から見ると、我々はLithiumの最初の安定版に向けた折り返し地点にいます。Lithiumチームは着実な3週間毎のリリースを続けます。またイテレーション・フライデーが助けになるでしょう。
このリリースにはいくつかの新機能が含まれます:

apps/plugins/extensions を管理するライブラリコマンド
モデル、コントローラー、テストをコード生成する為のコマンド
一般的な利用の為の国際化されたバリデータ
柔軟性とメンテナンス性向上の為のブートストラップの整理
アダプタ化可能な認証API
ビューエレメントのレンダリング
更なるドキュメント
更なるテスト


Lithiumは実際のところかなり安定していていくつかのエキサイティングな機能を含んでいます。MongoDBかCouchDBを使ってアプリケーションを開発する準備は出来ています。しかしあなたがORマッパを必要としているなら、Doctrine用のプラグインがあります。あるいはLithium上で実装されるリリースまで待たなければいけません。エクステンションやヘルパーの作成は本当にシンプルで他のフレームワークからの移植すらも簡単にできます。createコマンドを使ってコード生成をすれば開発を素早く立ち上げられるでしょう。
Lithiumチームは0.5と合わせてその他の更新をお知らせします

私たちは新居を見つけました: http://lithify.me
lab.lithify.meのプレリリース。LaboratoryとLibraryコマンドはLithiumをプラグインを通じて拡張するという目的の一部です。 li3_lab プラグインによってサーバーから提供されるプラグイン・エクステンションを統合し、アプリケーション間でのコードの再利用と共有を容易にします。Libraryコマンドはアプリケーションやプラグインを圧縮・展開出来ます。またプロジェクトを始める為の基本となるアーカイブも添付しました。詳細は li3 help Library でご覧ください。


Lithiumワールドの動きは速く、さらに力強くなっていきます。お見逃しなく！
~gwoo
&#8212;訳ここまで
Lithiumのリリースが3週間毎であることが明言されました。これは前回紹介したイテレーション・フライデーで開発が着実に進んでいるとみてよいでしょう。RDBを利用するのであればDoctrineを利用するのが良いですが、MongoDBやCouchDBを使ってアプリケーションを開発するのであれば問題はないようです。実際に開発チームが運用しているアプリケーションはMongoDBやCouchDBばかりなので安定度が高まるのも当然と言えます。コードの圧縮展開などを実現するコマンドラインの進歩も目覚ましいですね。
次回のリリースは2/15ということで、試すのであればお早目に！
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_.png"><img src="http://blog.candycane.jp/wp-content/uploads/2009/12/designall.dll_-300x90.png" alt="designall.dll" title="designall.dll" width="300" height="90" class="alignnone size-medium wp-image-188" /></a></p>
<p>最も軽量で拡張性に優れたフレームワーク、Lithiumのバージョン0.5がリリースされました。1.0リリースに向けて折り返し地点と言った所ですね。リリースの速度が速すぎて翻訳する方もちょっと大変ですが、喜ばしいニュースですのでお伝えしたいと思います。</p>
<h3>原文</h3>
<p><a href="http://rad-dev.org/lithium/wiki/blog/Lithium_0_5_half_way_there">http://rad-dev.org/lithium/wiki/blog/Lithium_0_5_half_way_there</a></p>
<h3>Lithium 0.5, half way there.</h3>
<h4><strong>Lithiumチームはバージョン0.5のリリースを喜んでお知らせします</strong></h4>
<p>バージョン番号から見ると、我々はLithiumの最初の安定版に向けた折り返し地点にいます。Lithiumチームは着実な3週間毎のリリースを続けます。またイテレーション・フライデーが助けになるでしょう。</p>
<p>このリリースにはいくつかの新機能が含まれます:</p>
<ul>
<li>apps/plugins/extensions を管理するライブラリコマンド</li>
<li>モデル、コントローラー、テストをコード生成する為のコマンド</li>
<li>一般的な利用の為の国際化されたバリデータ</li>
<li>柔軟性とメンテナンス性向上の為のブートストラップの整理</li>
<li>アダプタ化可能な認証API</li>
<li>ビューエレメントのレンダリング</li>
<li>更なるドキュメント</li>
<li>更なるテスト
<li>
</ul>
<p>Lithiumは実際のところかなり安定していていくつかのエキサイティングな機能を含んでいます。MongoDBかCouchDBを使ってアプリケーションを開発する準備は出来ています。しかしあなたがORマッパを必要としているなら、Doctrine用のプラグインがあります。あるいはLithium上で実装されるリリースまで待たなければいけません。エクステンションやヘルパーの作成は本当にシンプルで他のフレームワークからの移植すらも簡単にできます。createコマンドを使ってコード生成をすれば開発を素早く立ち上げられるでしょう。</p>
<h4><strong>Lithiumチームは0.5と合わせてその他の更新をお知らせします</strong></h4>
<ul>
<li>私たちは新居を見つけました: <a href="http://lithify.me">http://lithify.me</a></li>
<li><a href="http://lab.lithify.me">lab.lithify.me</a>のプレリリース。LaboratoryとLibraryコマンドはLithiumをプラグインを通じて拡張するという目的の一部です。 <a href="http://rad-dev.org/li3_lab">li3_lab プラグイン</a>によってサーバーから提供されるプラグイン・エクステンションを統合し、アプリケーション間でのコードの再利用と共有を容易にします。Libraryコマンドはアプリケーションやプラグインを圧縮・展開出来ます。またプロジェクトを始める為の基本となるアーカイブも添付しました。詳細は <em>li3 help Library</em> でご覧ください。
<li>
</ul>
<p>Lithiumワールドの動きは速く、さらに力強くなっていきます。お見逃しなく！<br />
~gwoo</p>
<p>&#8212;訳ここまで</p>
<p>Lithiumのリリースが3週間毎であることが明言されました。これは前回紹介したイテレーション・フライデーで開発が着実に進んでいるとみてよいでしょう。RDBを利用するのであればDoctrineを利用するのが良いですが、MongoDBやCouchDBを使ってアプリケーションを開発するのであれば問題はないようです。実際に開発チームが運用しているアプリケーションはMongoDBやCouchDBばかりなので安定度が高まるのも当然と言えます。コードの圧縮展開などを実現するコマンドラインの進歩も目覚ましいですね。</p>
<p>次回のリリースは2/15ということで、試すのであればお早目に！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/269/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第49回PHP勉強会で「Lithiumラボ #1」を発表した</title>
		<link>http://blog.candycane.jp/archives/261</link>
		<comments>http://blog.candycane.jp/archives/261#comments</comments>
		<pubDate>Sat, 30 Jan 2010 22:41:58 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[スライド]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=261</guid>
		<description><![CDATA[第49回PHP勉強会にリモートから参加しました。
ニューヨークからは時差があるので金曜日の深夜１時頃からの発表になりました。
Skypeでの発表をケアしてくれたgusagiさん、cakephperさんのお陰でひとまず無事に終える事ができました。ありがとうございました。
発表の内容
このブログでもたびたび、紹介しているLithiumの特徴をデモを交えて紹介しました。
CakePHPに良く似た記述量の少ないプログラミングとPHP5.3の機能を活用している部分を感じてもらえればと思います。
おそらく今後はPHP5.3に合わせたプログラミングが一般的になっていくと思いますが、習得には実際に触れるのが一番でしょう。LithiumにはPHP5.3を実際に活用した生きたコードがあり、その優れた拡張性はきっと癖になってしまうでしょう。
ぜひぜひお試しください！
追記
思わぬ反応が得られたのでDig A Ponyのリンクも埋めておきますｗ
歌詞はググれば出てきます。
資料

View more presentations from yandod.
参考： Dig A Pony

勉強会の内容
休日開催という事もあり、盛りだくさんな内容でした。ちょっと眠かったので記憶に残っていない部分もあったりします。CakePHPユーザーの割合が８割程度という事で利用の幅広さを感じました。またcakephperさんのMongoDBの発表はとても刺激的で、CouchDBのセットアップに挫折した自分としてはとても魅力的でした。IRCにはLithiumのJonも来ていて翻訳ソフトを使ってコミュニケーションを取っていました。
PHP勉強会もNoSQLや国際化などの新しい波が来ているのかな、と思うところがありとても楽しかったです。
最後になりましたが、ustreamの配信をしてくださったNEKOGETさん、運営のgusagiさん、発表者、参加者のみなさんおつかれさまでした！
今年もいい年になるといいですね。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://events.php.gr.jp/events/show/88">第49回PHP勉強会</a>にリモートから参加しました。<br />
ニューヨークからは時差があるので金曜日の深夜１時頃からの発表になりました。<br />
Skypeでの発表をケアしてくれたgusagiさん、cakephperさんのお陰でひとまず無事に終える事ができました。ありがとうございました。</p>
<h3>発表の内容</h3>
<p>このブログでもたびたび、紹介しているLithiumの特徴をデモを交えて紹介しました。<br />
CakePHPに良く似た記述量の少ないプログラミングとPHP5.3の機能を活用している部分を感じてもらえればと思います。<br />
おそらく今後はPHP5.3に合わせたプログラミングが一般的になっていくと思いますが、習得には実際に触れるのが一番でしょう。LithiumにはPHP5.3を実際に活用した生きたコードがあり、その優れた拡張性はきっと癖になってしまうでしょう。</p>
<p>ぜひぜひお試しください！</p>
<p>追記<br />
<a href="http://twitter.com/uedatakeshi/status/8428325534">思わぬ反応</a>が得られたのでDig A Ponyのリンクも埋めておきますｗ<br />
歌詞は<a href="http://beatlesbeatles.blog39.fc2.com/blog-entry-177.html">ググれば出てきます</a>。</p>
<p><strong>資料</strong><br />
<object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20100129phpstudy-100130013657-phpapp02&#038;stripped_title=lithium-labo-1" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20100129phpstudy-100130013657-phpapp02&#038;stripped_title=lithium-labo-1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/yandod">yandod</a>.</div>
<p><strong>参考： Dig A Pony</strong><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/tqcJCiFTdwY&#038;hl=ja_JP&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tqcJCiFTdwY&#038;hl=ja_JP&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<h3>勉強会の内容</h3>
<p>休日開催という事もあり、盛りだくさんな内容でした。ちょっと眠かったので記憶に残っていない部分もあったりします。CakePHPユーザーの割合が８割程度という事で利用の幅広さを感じました。またcakephperさんのMongoDBの発表はとても刺激的で、CouchDBのセットアップに挫折した自分としてはとても魅力的でした。IRCにはLithiumのJonも来ていて翻訳ソフトを使ってコミュニケーションを取っていました。<br />
PHP勉強会もNoSQLや国際化などの新しい波が来ているのかな、と思うところがありとても楽しかったです。</p>
<p>最後になりましたが、ustreamの配信をしてくださったNEKOGETさん、運営のgusagiさん、発表者、参加者のみなさんおつかれさまでした！<br />
今年もいい年になるといいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/261/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>NYPHPでNate Abeleの「On the origin of Lithium」を聞いてきた</title>
		<link>http://blog.candycane.jp/archives/259</link>
		<comments>http://blog.candycane.jp/archives/259#comments</comments>
		<pubDate>Wed, 27 Jan 2010 09:57:51 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=259</guid>
		<description><![CDATA[
ニューヨークのPHPコミュニティが毎月開催しているNYPHPに参加してきました。
NYPHPは毎回、一人のスピーカーが1時間半ほど喋り、その後はTGI FRYDAYに行くという形式で開催されている勉強会です。
今回のスピーカーはCakePHPの元リードデベロッパーのNateによるLithiumのお話という事で、疲れ気味の体に鞭を打って参加してきました！
講演の内容のポイントを紹介します。
PHPとフレームワークの歴史
プレゼンテーションは最初にLithiumはもうCakePHPではないという事、枝分かれした存在である事について触れてからLithiumが誕生するまでのPHPの歴史を振り返ります。最初はPHP/FIから始まり、マークアップ的に処理が記述できる例などを示し、そこからPHP3、PHP4、PEAR、PHP5、CakePHP、symfony、CodeIgniter、Zend,,,という風にPHPにさまざまな技術的な進歩がもたらされた事をコメント付きで紹介していきます。ただのスクリプトでしかなかったPHPがだんだんと整理された機能になっていく事がわかります。また特にCakeやsymfonyについてNateがコメントする部分では質問が出る事もありこれだけでかなりの時間が。
これらの進歩により、機能をオブジェクトとしてデザインされたライブラリとして実装するという統一性は達成されましたが、引き換えにフレームワーク内の密結合や、拡張性が失われるといった事が起きています。また機能そのものについての論争のような事は極めて表面的なトピックに過ぎず、答えは人の数だけあり各自の判断でより生産的だと思うものを選択すればよいという事も述べていました。（例としてソースのインデントをタブにするかスペースにするかといった話など）
PHP5.3
そしてPHPに訪れた大きな変化として、Late Static Binding, Namespace, Clousureの話へと進みます。Late Static Bindingによりstaticなメソッドやプロパティを持ったクラスの派生クラスをようやく書くことができるようになりました。（正確には書くことはできるが、継承元のクラスから派生クラスのメソッドをコールバックするような形にできない）またNamespaceによりこれまでは各ライブラリやフレームワークが独自の工夫で解決していたクラスとファイル名をマッピングする為のルールのベースが言語としてようやくサポートされました。そしてClousureはメソッドの呼出しなどのバリエーションをさらに柔軟にする事ができるようにしてくれます。
このあたりからちょっとしたコードを書いて説明したりするようになりめちゃくちゃ面白くなってきます！
Lithiumのデモ
PHP5.3の機能の紹介からLithiumのデモへとセッションは進みます。CakeFestの時にも言っていましたが、Lithiumはブートストラップが非常に薄くなっており、処理は2行しかありません。その後の初期化処理としてはLibrariesクラスを利用してライブラリを登録する処理が行われます。ここでポイントとなるのはLithium内でつかわれるクラス群もこのLibrariesを介して操作するという事です。つまり、このLibrariesクラスを介してZendのライブラリなどを登録した場合、フレームワーク内では特に区別されず、コアクラス自体を差し替える事もできるのです。
通常、多くのフレームワークは内部で特定のクラスをハードコードして呼び合う部分がかなりの部分あり、そこが拡張しづらいポイントとなり制約となります。(symfonyもfactories.ymlである程度制御できますが、ハードコードされている部分もかなりありますね)それをPHP5.3の機能を生かして拡張可能な形を実現したのが大きなアイデアです。
またクロージャを生かして、オブジェクトへの設定などをより柔軟に与える事ができるようになった例をいくつか。たとえばRouterに対するルーティングの設定としてModelからFindした結果をマッピングして渡す、など。PHP5.3以前でやるとすれば、データを取得したのちに配列へ格納し、ループしながら設定するなどの工夫が必要になるところですが、クロージャを利用することで一行で記述できました。
そして最後にLithiumのフィルタ機能についてのデモに入ります。フィルタ機能は任意のクラスの任意の処理の前後に処理を設定する事が出来る機能です。たとえばデータベースのログを取得したければ、Databaseクラスのexecuteにフィルタを設定するといった形です。通常ならこのように処理の前後に介入するならばコールバックを設けるか、派生クラスを作りラッパーメソッドを書くところでしょう。これをシンプルな記述だけで実現する事ができます。
応用の例としてLithiumのコードカバレッジの取得がこのフィルタ機能を使っている事が明かされました。（xDebugのダンプだとデータが大きすぎる）
まとめ
Lithiumの思想についてはこれまでのたびたび、和訳で紹介してきました。しかしながら実際のデモやその他のフレームワークなどに言及しつつNateの話を聞くことでよりはっきりとその思想を理解する事ができました。通常、フレームワークというとどんな機能があるとか何が出来るといったポイントで評価しがちですがこれはNateの言葉を借りるなら「表面的で、人の数だけ答えがある」という話なのだと思います。
LithiumがCakePHPだけでなくさらに多くのフレームワークや技術の反省点を生かした上で「拡張性・軽量性」を追求しているという事がよくわかりました。
Lithiumの拡張性は高く、ORマッパにDoctrineを組み込む実装などが簡単に行えます。機能に気に入らない部分があれば作りかえるなり、他から借りてくればよい。ただしその設定や拡張に複雑な実装が必要ないように。ということですね。
一見難しいフレームワークという印象だったのですが、CakePHPの機能は引き継がれており拡張などをする場合はCakePHPよりもシンプルに記述する事ができます。
いやー、これは面白かったです。
おまけ

懇親会はTGI FRIDAYS。最初にハイネケンを頼んだ後に、バーガーを頼んだら「セットにできるよ」と言われてそれに。最初のビールに付け足してくれるのかと思いきやビールももう一杯きてちょっと大変でした・・・。
]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm5.static.flickr.com/4038/4307163221_f635a55318.jpg"></p>
<p>ニューヨークのPHPコミュニティが毎月開催している<a href="http://www.nyphp.org/">NYPHP</a>に参加してきました。<br />
NYPHPは毎回、一人のスピーカーが1時間半ほど喋り、その後はTGI FRYDAYに行くという形式で開催されている勉強会です。<br />
今回のスピーカーはCakePHPの元リードデベロッパーのNateによるLithiumのお話という事で、疲れ気味の体に鞭を打って参加してきました！</p>
<p>講演の内容のポイントを紹介します。</p>
<h3>PHPとフレームワークの歴史</h3>
<p>プレゼンテーションは最初にLithiumはもうCakePHPではないという事、枝分かれした存在である事について触れてからLithiumが誕生するまでのPHPの歴史を振り返ります。最初はPHP/FIから始まり、マークアップ的に処理が記述できる例などを示し、そこからPHP3、PHP4、PEAR、PHP5、CakePHP、symfony、CodeIgniter、Zend,,,という風にPHPにさまざまな技術的な進歩がもたらされた事をコメント付きで紹介していきます。ただのスクリプトでしかなかったPHPがだんだんと整理された機能になっていく事がわかります。また特にCakeやsymfonyについてNateがコメントする部分では質問が出る事もありこれだけでかなりの時間が。</p>
<p>これらの進歩により、機能をオブジェクトとしてデザインされたライブラリとして実装するという統一性は達成されましたが、引き換えにフレームワーク内の密結合や、拡張性が失われるといった事が起きています。また機能そのものについての論争のような事は極めて表面的なトピックに過ぎず、答えは人の数だけあり各自の判断でより生産的だと思うものを選択すればよいという事も述べていました。（例としてソースのインデントをタブにするかスペースにするかといった話など）</p>
<h3>PHP5.3</h3>
<p>そしてPHPに訪れた大きな変化として、Late Static Binding, Namespace, Clousureの話へと進みます。Late Static Bindingによりstaticなメソッドやプロパティを持ったクラスの派生クラスをようやく書くことができるようになりました。（正確には書くことはできるが、継承元のクラスから派生クラスのメソッドをコールバックするような形にできない）またNamespaceによりこれまでは各ライブラリやフレームワークが独自の工夫で解決していたクラスとファイル名をマッピングする為のルールのベースが言語としてようやくサポートされました。そしてClousureはメソッドの呼出しなどのバリエーションをさらに柔軟にする事ができるようにしてくれます。</p>
<p>このあたりからちょっとしたコードを書いて説明したりするようになりめちゃくちゃ面白くなってきます！</p>
<h3>Lithiumのデモ</h3>
<p>PHP5.3の機能の紹介からLithiumのデモへとセッションは進みます。CakeFestの時にも言っていましたが、Lithiumはブートストラップが非常に薄くなっており、<a href="http://rad-dev.org/lithium/source/app/webroot/index.php">処理は2行しかありません。</a>その後の初期化処理としては<a href="http://rad-dev.org/lithium/source/app/config/bootstrap/libraries.php">Librariesクラスを利用してライブラリを登録する処理が行われます。</a>ここでポイントとなるのはLithium内でつかわれるクラス群もこのLibrariesを介して操作するという事です。つまり、このLibrariesクラスを介してZendのライブラリなどを登録した場合、フレームワーク内では特に区別されず、コアクラス自体を差し替える事もできるのです。<br />
通常、多くのフレームワークは内部で特定のクラスをハードコードして呼び合う部分がかなりの部分あり、そこが拡張しづらいポイントとなり制約となります。(symfonyもfactories.ymlである程度制御できますが、ハードコードされている部分もかなりありますね)それをPHP5.3の機能を生かして拡張可能な形を実現したのが大きなアイデアです。</p>
<p>またクロージャを生かして、オブジェクトへの設定などをより柔軟に与える事ができるようになった例をいくつか。たとえばRouterに対するルーティングの設定としてModelからFindした結果をマッピングして渡す、など。PHP5.3以前でやるとすれば、データを取得したのちに配列へ格納し、ループしながら設定するなどの工夫が必要になるところですが、クロージャを利用することで一行で記述できました。</p>
<p>そして最後にLithiumのフィルタ機能についてのデモに入ります。フィルタ機能は任意のクラスの任意の処理の前後に処理を設定する事が出来る機能です。たとえばデータベースのログを取得したければ、Databaseクラスのexecuteにフィルタを設定するといった形です。通常ならこのように処理の前後に介入するならばコールバックを設けるか、派生クラスを作りラッパーメソッドを書くところでしょう。これをシンプルな記述だけで実現する事ができます。<br />
応用の例としてLithiumのコードカバレッジの取得がこのフィルタ機能を使っている事が明かされました。（xDebugのダンプだとデータが大きすぎる）</p>
<h3>まとめ</h3>
<p>Lithiumの思想についてはこれまでのたびたび、和訳で紹介してきました。しかしながら実際のデモやその他のフレームワークなどに言及しつつNateの話を聞くことでよりはっきりとその思想を理解する事ができました。通常、フレームワークというとどんな機能があるとか何が出来るといったポイントで評価しがちですがこれはNateの言葉を借りるなら「表面的で、人の数だけ答えがある」という話なのだと思います。<br />
LithiumがCakePHPだけでなくさらに多くのフレームワークや技術の反省点を生かした上で「拡張性・軽量性」を追求しているという事がよくわかりました。</p>
<p>Lithiumの拡張性は高く、ORマッパにDoctrineを組み込む実装などが簡単に行えます。機能に気に入らない部分があれば作りかえるなり、他から借りてくればよい。ただしその設定や拡張に複雑な実装が必要ないように。ということですね。<br />
一見難しいフレームワークという印象だったのですが、CakePHPの機能は引き継がれており拡張などをする場合はCakePHPよりもシンプルに記述する事ができます。</p>
<p>いやー、これは面白かったです。</p>
<h3>おまけ</h3>
<p><img src="http://farm3.static.flickr.com/2678/4308320390_5b7dabd83c.jpg"><br />
懇親会はTGI FRIDAYS。最初にハイネケンを頼んだ後に、バーガーを頼んだら「セットにできるよ」と言われてそれに。最初のビールに付け足してくれるのかと思いきやビールももう一杯きてちょっと大変でした・・・。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>イテレーション・フライデーのススメ(和訳)</title>
		<link>http://blog.candycane.jp/archives/251</link>
		<comments>http://blog.candycane.jp/archives/251#comments</comments>
		<pubDate>Sun, 24 Jan 2010 21:35:15 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[アジャイル]]></category>
		<category><![CDATA[和訳]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=251</guid>
		<description><![CDATA[開発が進んでいる、「PHP5.3以降の最も軽量で柔軟なフレームワーク Lithium」ですが、マネージャのGwooから面白い試みが提唱されています。その名も「イテレーション・フライデー」。オープンソースでソフトウェアを開発している人にとっては興味深い運動だと思います。
詳細は下記の和訳をどうぞ。
原文
http://rad-dev.org/lithium/wiki/blog/iteration-friday
Iteration Friday
ここLithiumプロジェクトではJames Martinによって提唱されたRAD(Rapid Application Development)という手法を用いています。Rapid Developmentから発生し、進化した実践としてアジャイル、スクラム、XPがあります。
Union of RADが用いている手法も進化しています。我々は強力なコラボレーション、コミュニケーションの動機、活発なユニットテストと短いイテレーションを重視しています。最後に上げた「短いイテレーション」がこの記事の目的です。
明日、(2010/1/8)は最初のイテレーション・フライデーになります。しかし、これまでやってこなかったということではなく、初めてこの名前で呼ばれる明日という事です。ジーンズを履きハワイアンシャツやファンキーな帽子でも身に着けて、このイテレーションでマージし、利用可能になった変更をアナウンスしてください。
イテレーション・フライデーの目的継続的なリリースの為の自然なスケジュールを推進です。我々は短いイテレーションこそがコードの品質と開発速度を押し上げると信じています。イテレーションの内容は重要ではありません。たった１つの機能であれ、1000の機能であろうがそれは重要ではありません。規則的なスケジュールで変更がマージされる事がチームとコミュニティの為になり、またRapid Developmentの成功の鍵なのです。
我々はイテレーション・フライデーへの皆さんの参加を待っています。あなたのプロジェクトを同じスケジュールで進め、一緒に楽しんでしまいましょう！ iteration-friday.net のウェブサイトを見て、あなたのプロジェクトのイテレーションの準備が出来たらツイートしてください。
~ gwoo ~
&#8211;訳ここまで
オープンソースのソフトウェアを開発する際に開発の速度が安定しないというのは誰もが悩んだ事のある問題でしょう。それを解決する一つの実践がこのイテレーション・フライデーです。この記事ではよく知られているアジャイルやスクラムといったものを包括する概念としてRAD開発に言及しています。アジャイルの定義とはイテレーションであると最近、僕は考えています。頻繁なリリースを実行し、イテレーションを自然に実践する事が出来るイテレーション・フライデーに参加してみませんか？
どんな開発速度であってもかまいません、毎週金曜日に変更をマージし、リリースし #iFrydayのハッシュタグをつけてアナウンスをすればOKです！
大事なのは頻繁に規則的にサイクルが回る事です。
]]></description>
			<content:encoded><![CDATA[<p>開発が進んでいる、「PHP5.3以降の最も軽量で柔軟なフレームワーク Lithium」ですが、マネージャの<a href="http://twitter.com/gwoo">Gwoo</a>から面白い試みが提唱されています。その名も「<a href="http://iteration-friday.net/">イテレーション・フライデー</a>」。オープンソースでソフトウェアを開発している人にとっては興味深い運動だと思います。<br />
詳細は下記の和訳をどうぞ。</p>
<h3>原文</h3>
<p><a href="http://rad-dev.org/lithium/wiki/blog/iteration-friday">http://rad-dev.org/lithium/wiki/blog/iteration-friday</a></p>
<h3>Iteration Friday</h3>
<p>ここLithiumプロジェクトではJames Martinによって提唱されたRAD(Rapid Application Development)という手法を用いています。Rapid Developmentから発生し、進化した実践としてアジャイル、スクラム、XPがあります。</p>
<p>Union of RADが用いている手法も進化しています。我々は強力なコラボレーション、コミュニケーションの動機、活発なユニットテストと短いイテレーションを重視しています。最後に上げた「短いイテレーション」がこの記事の目的です。</p>
<p>明日、(2010/1/8)は最初のイテレーション・フライデーになります。しかし、これまでやってこなかったということではなく、初めてこの名前で呼ばれる明日という事です。ジーンズを履きハワイアンシャツやファンキーな帽子でも身に着けて、このイテレーションでマージし、利用可能になった変更をアナウンスしてください。</p>
<p>イテレーション・フライデーの目的継続的なリリースの為の自然なスケジュールを推進です。我々は短いイテレーションこそがコードの品質と開発速度を押し上げると信じています。イテレーションの内容は重要ではありません。たった１つの機能であれ、1000の機能であろうがそれは重要ではありません。規則的なスケジュールで変更がマージされる事がチームとコミュニティの為になり、またRapid Developmentの成功の鍵なのです。</p>
<p>我々はイテレーション・フライデーへの皆さんの参加を待っています。あなたのプロジェクトを同じスケジュールで進め、一緒に楽しんでしまいましょう！ <a href="http://iteration-friday.net/">iteration-friday.net</a> のウェブサイトを見て、あなたのプロジェクトのイテレーションの準備が出来たらツイートしてください。</p>
<p>~ gwoo ~</p>
<p>&#8211;訳ここまで</p>
<p>オープンソースのソフトウェアを開発する際に開発の速度が安定しないというのは誰もが悩んだ事のある問題でしょう。それを解決する一つの実践がこのイテレーション・フライデーです。この記事ではよく知られているアジャイルやスクラムといったものを包括する概念としてRAD開発に言及しています。アジャイルの定義とはイテレーションであると最近、僕は考えています。頻繁なリリースを実行し、イテレーションを自然に実践する事が出来るイテレーション・フライデーに参加してみませんか？<br />
どんな開発速度であってもかまいません、毎週金曜日に変更をマージし、リリースし <a href="http://twitter.com/#search?q=%23iFriday">#iFryday</a>のハッシュタグをつけてアナウンスをすればOKです！<br />
大事なのは頻繁に規則的にサイクルが回る事です。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/251/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>新年早々、Lithium0.4がリリースされました！(和訳)</title>
		<link>http://blog.candycane.jp/archives/232</link>
		<comments>http://blog.candycane.jp/archives/232#comments</comments>
		<pubDate>Wed, 06 Jan 2010 17:58:48 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[Lithium]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=232</guid>
		<description><![CDATA[
あけましておめでとうございます。
まだ正月ボケが冷めやらずといった時期ですが、Lithium0.4のリリースの知らせがnateから飛び込んできました。前回のリリースが12/9なので1か月たたずのリリースということで開発の活発さが伝わってきます。Lithiumの特徴である究極の拡張性を推し進める為の変更が行われているようです。という事で内容の方を見てみましょう。
原文
http://rad-dev.org/lithium/wiki/blog/Happy_New_Release_of_Lithium_0_4
Happy New Release (of Lithium 0.4):
ホリデーシーズン中は少し静かでしたが、Lithium0.4が利用可能になった事をご案内します。前回のリリースから100以上の変更が行われ、バージョン1.0に向けた執拗な前進は全速力で続いています。リリースのハイライトは以下の通りです。

キャッシュレイヤーの著しい改善:さらにXCacheとRadis用の新しいアダプタの追加。アトミックなインクリメントとデクリメントのサポートと複数キーの読み書きの基礎の追加。
アダプタ設定を扱うベースクラスのリファクタリング:合理的で一貫性のあるAPIを提供する為の努力によりいくつかのフレームワークの設定を扱う core/Adaptable クラスがリファクタリングされました。また data/Connections がこれを継承して書き直され、LithiumのコアAPIがより統一されています。
コンソールコマンド: li3 build コンソールでアプリケーションとライブラリの配布に便利な .phar アーカイブのビルドと展開ができるように。また li3 build test   を起動することでモックを生成できます。有効なオプションについてはAPIドキュメントをご覧ください。
さらなる拡張性の為のリファクタリング:僕らは開発者がカスタムクラスで殆どの依存要素を置き換えられる極めて拡張性の高い柔軟なコアを自負してきました。先週、このコアがどれだけ拡張性に富んでいるかをテストする事を決めました。そのためにフレームワーク内の静的結合を計測する為の小さなツールを書きました。このツールにより僕らはより動的にする事が可能な静的な結合を認識できるようになりました。
この変更の後の分析結果はcoreとutilの二つのパッケージ(フレームワークの基礎を構成するパッケージ)を除いてとても満足いくものでした。たった２つのパッケージだけが内部のパッケージに静的に依存しているのです。これが意味するのはフレームワークのほぼすべてのパッケージを展開し、自分自身のクラスを使う事が出来ると言う事です。それだけではなく、coreとutilのパッケージ小さなアプリケーションやミニフレームワークの基礎やユーティリティとして利用できるフレームワークのマイクロカーネルとして振舞う事に気が付きました。


別のニュースとして、Joëlがli3_queueプラグインの作業を開始しBeanstalkをサポートしようとしています。またMariano IglesiasがDoctrineORマッパをLithiumと共に使うチュートリアルを執筆しました。
という事で、リリースが冷めないうちに試してみる事をお忘れなく。0.5でもこれ以上の変更を予定していますので。
最後にLithiumプロジェクトに集まってくれたり、コードや助言、激励などを頂いた皆さんに感謝を述べたいと思います。これがLithiumコミュニティの始まりならば、僕はとてもとても大きな希望をこのプロジェクトに抱いています。
2010年を大きな年に
~ Nate ~
&#8211;翻訳ここまで
Nate達、開発チームが究極の拡張性を追求しているライブ感が伝わってきますね。またその拡張性の高さ故に一部分を他のプロダクトで差し替えたり、また逆にLithiumの一部分だけを再利用する事も容易になっています。そろそろフィルター機能などを実例を交えて説明できればと思っています。また日本でもおなじみのJoelが作業をしているBeanstalkも興味深いですね。（初めて聞く名前でした）
とはいえ、まずはフレームワークが発展していくこのライブ感を楽しみたいところですね。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2010/01/nate.jpeg"><img src="http://blog.candycane.jp/wp-content/uploads/2010/01/nate-219x300.jpg" alt="nate" title="nate" width="219" height="300" class="alignnone size-medium wp-image-236" /></a></p>
<p>あけましておめでとうございます。<br />
まだ正月ボケが冷めやらずといった時期ですが、Lithium0.4のリリースの知らせが<a href="http://twitter.com/nateabele">nate</a>から飛び込んできました。前回のリリースが12/9なので1か月たたずのリリースということで開発の活発さが伝わってきます。Lithiumの特徴である究極の拡張性を推し進める為の変更が行われているようです。という事で内容の方を見てみましょう。</p>
<h3>原文</h3>
<p><a href="http://rad-dev.org/lithium/wiki/blog/Happy_New_Release_of_Lithium_0_4">http://rad-dev.org/lithium/wiki/blog/Happy_New_Release_of_Lithium_0_4</a></p>
<h3>Happy New Release (of Lithium 0.4):</h3>
<p>ホリデーシーズン中は少し静かでしたが、Lithium0.4が利用可能になった事をご案内します。前回のリリースから<a href="http://rad-dev.org/lithium/wiki/releases/0_4">100以上の変更</a>が行われ、バージョン1.0に向けた執拗な前進は全速力で続いています。リリースのハイライトは以下の通りです。</p>
<ul>
<li><strong>キャッシュレイヤーの著しい改善:</strong><br/>さらにXCacheとRadis用の新しいアダプタの追加。アトミックなインクリメントとデクリメントのサポートと複数キーの読み書きの基礎の追加。</li>
<li><strong>アダプタ設定を扱うベースクラスのリファクタリング:</strong><br/>合理的で一貫性のあるAPIを提供する為の努力によりいくつかのフレームワークの設定を扱う <em>core/Adaptable</em> クラスがリファクタリングされました。また <em>data/Connections</em> がこれを継承して書き直され、LithiumのコアAPIがより統一されています。</li>
<li><strong>コンソールコマンド:</strong><br/> <em>li3 build</em> コンソールでアプリケーションとライブラリの配布に便利な .phar アーカイブのビルドと展開ができるように。また <em>li3 build test <test> <name></em> を起動することでモックを生成できます。有効なオプションについてはAPIドキュメントをご覧ください。</li>
<li><strong>さらなる拡張性の為のリファクタリング:</strong><br/>僕らは開発者がカスタムクラスで殆どの依存要素を置き換えられる極めて拡張性の高い柔軟なコアを自負してきました。先週、このコアがどれだけ拡張性に富んでいるかをテストする事を決めました。そのためにフレームワーク内の静的結合を計測する為の小さなツールを書きました。このツールにより僕らはより動的にする事が可能な静的な結合を認識できるようになりました。<br/><br/><br />
この変更の後の分析結果はcoreとutilの二つのパッケージ(フレームワークの基礎を構成するパッケージ)を除いてとても満足いくものでした。たった２つのパッケージだけが内部のパッケージに静的に依存しているのです。これが意味するのはフレームワークのほぼすべてのパッケージを展開し、自分自身のクラスを使う事が出来ると言う事です。それだけではなく、coreとutilのパッケージ小さなアプリケーションやミニフレームワークの基礎やユーティリティとして利用できるフレームワークのマイクロカーネルとして振舞う事に気が付きました。
</li>
</ul>
<p>別のニュースとして、Joëlが<a href="http://rad-dev.org/li3_queue">li3_queue</a>プラグインの作業を開始し<a href="http://kr.github.com/beanstalkd/">Beanstalk</a>をサポートしようとしています。また<a href="http://twitter.com/mgiglesias">Mariano Iglesias</a>が<a href="http://www.doctrine-project.org/">DoctrineORマッパ</a>をLithiumと共に使う<a href="http://marianoiglesias.com.ar/li3-lithium/building-a-blog-with-lithium-and-doctrine/">チュートリアルを執筆</a>しました。<br />
という事で、<a href="http://rad-dev.org/lithium/versions">リリースが冷めないうち</a>に試してみる事をお忘れなく。0.5でもこれ以上の変更を予定していますので。</p>
<p>最後にLithiumプロジェクトに集まってくれたり、コードや助言、激励などを頂いた皆さんに感謝を述べたいと思います。これがLithiumコミュニティの始まりならば、僕はとてもとても大きな希望をこのプロジェクトに抱いています。</p>
<p>2010年を大きな年に<br />
~ Nate ~</p>
<p>&#8211;翻訳ここまで</p>
<p>Nate達、開発チームが究極の拡張性を追求しているライブ感が伝わってきますね。またその拡張性の高さ故に一部分を他のプロダクトで差し替えたり、また逆にLithiumの一部分だけを再利用する事も容易になっています。そろそろフィルター機能などを実例を交えて説明できればと思っています。また日本でもおなじみのJoelが作業をしているBeanstalkも興味深いですね。（初めて聞く名前でした）<br />
とはいえ、まずはフレームワークが発展していくこのライブ感を楽しみたいところですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/232/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
