<?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>Born Too Late &#187; Event</title>
	<atom:link href="http://blog.yuyat.jp/archives/category/event/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.yuyat.jp</link>
	<description>Yuya&#039;s tech blog.</description>
	<lastBuildDate>Sat, 04 Feb 2012 11:25:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>闇 PHP 勉強会で Zend Engine の HashTable について発表した</title>
		<link>http://blog.yuyat.jp/archives/1691</link>
		<comments>http://blog.yuyat.jp/archives/1691#comments</comments>
		<pubDate>Sat, 28 Jan 2012 13:25:19 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=1691</guid>
		<description><![CDATA[HashTable と HashDos View more presentations from Yuya Takeyama Zend Engine 初心者による, Zend Engine 初心者のための発表という感じで [...]]]></description>
			<content:encoded><![CDATA[<div style="width:425px" id="__ss_11304293"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/taketyan/hash-table-hashdos" title="HashTable と HashDos" target="_blank">HashTable と HashDos</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11304293" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/taketyan" target="_blank">Yuya Takeyama</a> </div>
</p></div>
<p>Zend Engine 初心者による, Zend Engine 初心者のための発表という感じで話してきました.</p>
<p>今年に入ってから, <strong><a href="http://scribble.yuyat.jp/">scribble</a></strong> というなぐり書き用のブログを始めました.<br />
GitHub Pages 内で <a href="https://github.com/mojombo/jekyll"><strong>Jekyll</strong></a> というツールを使って書いているんですが, Markdown で書いて git commit して git push するだけでサクッと公開できるのでとても気に入っています.</p>
<p>今のところ主に PHP 本体や, そのコアであるところの Zend Engine のコードリーディングが中心で, 今回の発表はこれらの記事をまとめた内容です.</p>
<p>闇 PHP 勉強会でのその他の発表はというと, <a href="http://nimpad.jp/phppeg/">PHP 製のパーサコンビネータ</a>とか, OpenCL とか, <a href="http://d.hatena.ne.jp/do_aki/20110912/1315800142">魔改造 PHP</a> とか様々で, こんな中でハッシュテーブルの実装について話し手も釈迦に説法なんではないかとかいろいろ危惧しましたが, わかりやすかったという声ももらえたようでよかったです.</p>
<p>この発表では, 既に scribble でも紹介している <strong><a href="http://scribble.yuyat.jp/2012/01/21/visualizing-hashdos-with-hashtable-dump.html">hashtable_dump</a></strong> という PHP Extension についても紹介しています.</p>
<p>本当は HashDoS 問題を解決したという Perl や Ruby におけるハッシュテーブルの実装についても調べて発表したかったんですが, 今回は間に合いませんでした.<br />
次回の闇 PHP 勉強会があれば是非それらについて発表できればと思っています.</p>
<p>最後に, 主催の <strong><a href="http://twitter.com/anatoo">@anatoo</a></strong> さん, 会場提供の<a href="http://www.asial.co.jp/">アシアル株式会社</a>さん,  楽しい勉強会をありがとうございました.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/1691/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第57回PHP勉強会＠東京で開発環境構築について話して来た</title>
		<link>http://blog.yuyat.jp/archives/1461</link>
		<comments>http://blog.yuyat.jp/archives/1461#comments</comments>
		<pubDate>Sat, 12 Nov 2011 15:17:27 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php-build]]></category>
		<category><![CDATA[phpenv]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=1461</guid>
		<description><![CDATA[最近イチオシの php-build と phpenv について紹介してきました. Building Development Environment with php-build and phpenv View more  [...]]]></description>
			<content:encoded><![CDATA[<p>最近イチオシの <strong><a href="https://github.com/CHH/php-build">php-build</a></strong> と <strong><a href="https://github.com/CHH/phpenv">phpenv</a></strong> について紹介してきました.</p>
<div style="width:425px" id="__ss_10126898"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/taketyan/building-development-environment-with-phpbuild-and-phpenv" title="Building Development Environment with php-build and phpenv" target="_blank">Building Development Environment with php-build and phpenv</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10126898" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/taketyan" target="_blank">Yuya Takeyama</a> </div>
</p></div>
<p>内容はほぼ最近のブログ記事をまとめた感じです.</p>
<ul>
<li><strong><a href="http://blog.yuyat.jp/archives/1376">php-build で PHP 5.4.0 beta1 をビルドする</a></strong></li>
<li><strong><a href="http://blog.yuyat.jp/archives/1446">phpenv で複数の PHP 環境を管理する</a></strong></li>
</ul>
<p>一度ブログに書いたものを敢えて発表ネタにしたのにはいくつか理由があります.<br />
(もちろん, 一度記事にまとめたネタなのでスライドに起こしやすい, というのもありますが&#8230;)</p>
<ul>
<li>もっと色んな人に知って欲しい</li>
<li>もっといろんな人に使って欲しい</li>
<li>まだまだこなれていない部分があり, フィードバックが必要</li>
<li>フィードバックやパッチによりもっと改善されるはず</li>
</ul>
<p>というわけで皆さんどんどん使いましょう.</p>
<p><strong>類似のツールについて</strong></p>
<p><strong>php-build</strong> および <strong>phpenv</strong> と類似の機能をもったツールは他にもあります.<br />
勉強会でも, 例えば <strong><a href="http://d.hatena.ne.jp/hnw/20090110">phpall</a></strong> とはどう違うのか, という質問がありました.</p>
<p>結論から言うと, 私は他のツールは特に使ったことが無いのでよくわかりません.<br />
ですが, もともと <strong>rbenv</strong> は Ruby コミュニティではかなり人気のツールですし, 便利な機能はいろいろと揃っており, 比較的失敗の無い選択肢だと考えています.</p>
<p>また, <strong>phpall</strong> の違いとして, <strong>phpall</strong> は各バージョンのバイナリをそれぞれ php-5.2.8 といった, バージョン番号付きのファイル名にしているようですが, <strong>phpenv</strong> は php コマンド自体を自由に切り替えます.<br />
特定のコードを複数のバージョンで一気に実行する, というときには <strong>phpall</strong> が便利そうですが, ライブラリの開発等には <strong>phpenv</strong> の方が適していると思われます.<br />
また, <strong>phpenv</strong> においては pyrus, phar, phpunit といったコマンドも各バージョンごとに試すことができる, というのも大きな利点です.</p>
<p><strong>phpenv のプラグイン機能について</strong></p>
<p>元々, これまでのブログ記事をまとめただけの発表にするつもりでしたが, ひとつだけおもしろい機能を見つけたので, そこだけ新ネタです.<br />
<strong>phpenv</strong> の元になっている <strong><a href="https://github.com/sstephenson/rbenv">rbenv</a></strong> にはプラグインという機能があり, 専用のディレクトリにシェルスクリプトを配置するだけで簡単にサブコマンドを登録できる, というものです.<br />
当然 <strong>phpenv</strong> でも使える機能です.</p>
<p><strong>phpenv each によるコマンドの一斉実行</strong></p>
<p><strong>rbenv</strong> のプラグインとして公開されているものの中で, とりあえず <strong><a href="https://github.com/chriseppstein/rbenv-each">rbenv-each</a></strong> というものをつかってみました.<br />
これは <strong>rbnev</strong> (もしくは <strong>phpenv</strong>) の管理下にある全てのバージョンのバイナリで, 指定したコマンドを実行する, というものです.</p>
<p>とりあえず, php -v によるバージョンの確認を試してみました.</p>
<div id="attachment_1472" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.yuyat.jp/archives/1461/9a04e69cdf25063d6644ead4a8636647" rel="attachment wp-att-1472"><img src="http://blog.yuyat.jp/wp-content/uploads/9a04e69cdf25063d6644ead4a8636647-300x239.png" alt="phpenv each によるバージョンの一斉確認" title="phpenv each によるバージョンの一斉確認" width="300" height="239" class="size-medium wp-image-1472" /></a><p class="wp-caption-text">phpenv each によるバージョンの一斉確認</p></div>
<p>これ自体はあまり意味の無い例ですが, 例えば <strong>PHPUnit</strong> によるユニットテストを, 複数のバージョンの PHP で一斉に実行できるすれば, ライブラリ作者に取ってはかなり便利なのではないでしょうか.<br />
それについてはいずれ調べて, また記事にしたいと思います.</p>
<p>このように, <strong>php-build</strong> と <strong>phpenv</strong> にはまだまだ便利な使い方がたくさんあるはずです.<br />
利用者が増えることで, そういったノウハウが発掘され, 共有されることを心から願います.</p>
<p>最後になりますが, 今回の勉強会の主催の <a href="http://twitter.com/gusagi"><strong>@gusagi</strong></a> さん, そして会場提供の<strong><a href="http://voyagegroup.com/">株式会社 VOYAGE GROUP</a></strong> さん, 楽しい勉強会を本当にありがとうございました.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/1461/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第56回PHP勉強会＠関東で PHPUnit について話してきた</title>
		<link>http://blog.yuyat.jp/archives/1386</link>
		<comments>http://blog.yuyat.jp/archives/1386#comments</comments>
		<pubDate>Sun, 02 Oct 2011 11:36:30 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=1386</guid>
		<description><![CDATA[PHPUnit でのテストをよりよく書くことで, アプリケーションの設計まで改善するための方法・考え方についてまとめました.]]></description>
			<content:encoded><![CDATA[<div style="width:425px" id="__ss_9494860"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/taketyan/phpunit-9494860" title="PHPUnit でよりよくテストを書くために" target="_blank">PHPUnit でよりよくテストを書くために</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9494860" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/taketyan" target="_blank">Yuya Takeyama</a> </div>
</p></div>
<p>最近 HTML5 化した Slideshare ですが, エラーで表示できないスライドが多すぎてまともに閲覧できないようです.<br />
この記事に掲載している Flash 版は今まで通りの問題なく表示できるのですが&#8230;</p>
<p>スライドが完成したのが勉強会への出発 15 分前で, 通しで練習することすらできず, 発表はかなりひどいものとなっていまいました.<br />
最低限, スライドの流れぐらいは頭の中に入れて発表すべきですね…</p>
<p>スライドだけ見てわかるような作りにはなっていないので, 以下で補足したいと思います.<br />
ただし, 序盤は省略し, 本論となる書法編とパターン編についてのみとなります.</p>
<p>それぞれ該当するスライド番号も付記してありますので, よければご活用ください.</p>
<p><strong>書法編 1: ヘルパーメソッドを使う (25 ~ 30)</strong></p>
<p>テスト対象のオブジェクト, それを生成するのに必要な依存オブジェクトの生成には, <strong>ヘルパーメソッド</strong>の使用を検討しましょう.<br />
new するだけで済むものであればそれでもいいのですが, <strong>生成に複雑なステップを踏む必要がある場合</strong>に威力を発揮します.</p>
<p>これは一般的なプログラミングにおけるサブルーチンみたいなものだと思って問題無いと思います.<br />
ただし, <strong>可読性</strong>を問題にするのであれば, 多少長くても<strong>説明的でわかりやすいメソッドの命名</strong>を心がける必要があります.</p>
<p>テスト対象の生成が複雑だと, 複数のテストの比較が大変になります.<br />
ヘルパーメソッドを使うことで, テスト A とテスト B はどこに<strong>有意な違い</strong>が有り, 結果に違いが生まれるのか, ということがわかりやすくなります.</p>
<p>書籍 <strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/0131495054/yuyat-22/">xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))</a></span></em></strong> では, Fixture Setup Patterns において <strong>Creation Method</strong> という名前で紹介されています.<br />
また, これの応用として, 引数付きの <strong>Parameterized Creation Method</strong> というものも紹介されています.</p>
<p><strong>書法編 2: テストメソッドを分割する (31 ~ 36)</strong></p>
<p>ひとつのテストメソッド内で, いろんなことをテストしようとすると, <strong>何をテストしようとしているのか</strong>がわかりにくくなります.<br />
例え同じメソッドを対象にしたテストであっても, 前提条件等が違うのであれば, <strong>分割</strong>するべきです.</p>
<p>分割することで, それぞれのテストメソッドには, より<strong>具体的な名前</strong>をつけることができます.<br />
これもまた可読性に寄与すると言えるでしょう.</p>
<p>これは癖のレベルの話なので, 普段からテストを書いている人であれば無意識にそうなると思います.<br />
まずは 1 つのテストメソッドにおいて<strong>アサーションは 1 つまで</strong>, というルールを課すことで自然とそういう書き方に近づくと思います.</p>
<p><strong>パターン編 1: 依存性は外から差し込む (39 ~ 49)</strong></p>
<p>スライドでは, フレームワークによくある Request クラスを例に, $_SERVER といったスーパーグローバル変数を使ったときに起こる問題について説明しました.</p>
<p>$_SERVER を使った実装でもちゃんと動作するので, 問題と見なさないこともできます.<br />
しかし, 問題はテストを書こうとしたときに顕在化します.</p>
<p>スーパーグローバル変数に限らず, グローバル変数を利用した実装だと, <strong>複数のテストが影響し合う</strong>可能性が生まれます.<br />
スライドではコードで例示しているので, 具体的にはスライドの該当箇所を参照してください.<br />
スライドのように unset($_SERVER['HTTPS']) とすることで回避できますが, コードベースが巨大化すると, <strong>暗黙的なコンテキストが肥大化</strong>し, テストを書くのがだんだんと困難になります.</p>
<p>その代わりにどうするのかというと, スーパーグローバル変数 $_SERVER を直接参照するのではなく, コンストラクタやセッターメソッド等で, <strong>引数として差し込む</strong>, という方法を採ります.<br />
<strong>Dependency Injection (DI, 依存性の注入)</strong> というパターンです.<br />
DI を採用することで, <strong>再利用性</strong>が高くなるので, テストを書くことで設計が向上する例としては比較的よく挙げられます.</p>
<p><strong>パターン編 2: 外部への依存を避ける (50 ~ 62)</strong></p>
<p>ひとつ前の話を逆に言っているだけですが, 別の側面から解説しています.</p>
<p>外部への依存としては, 例えば以下のようなものが挙げられます.</p>
<ul>
<li>グローバル変数/スーパーグローバル変数</li>
<li>ファイルシステム</li>
<li>Web API やデータベース等のネットワーク</li>
</ul>
<p>しかし, もちろんこれらを完全に避けてのアプリケーション開発は考えられません.<br />
それではどうするのか, ということで, スライドでは <strong>Active Record</strong> の問題点と, それを解決したパターンとしての <strong>Data Mapper</strong> を例に説明しています.</p>
<p>ここでいう Active Record というのはパターンとしての Active Record で, 書籍 <strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/0321127420/yuyat-22/">Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))</a></span></em></strong> で紹介されています.<br />
Ruby on Rails の ORM としての ActiveRecord は, それを実装したものです.</p>
<p>Active Record においては, 1 つのレコードが 1 つのオブジェクトにマッピングされ, それぞれの<strong>レコードはデータベースを知っています</strong>.<br />
なので, $record->save() といった操作が可能になります.</p>
<p><strong>Data Mapper</strong> でも 1 つのレコードが 1 つのオブジェクトに, という部分は変わりませんが, それぞれの<strong>レコードはデータベースのことを知りません</strong>.<br />
例えば users というテーブルであれば, User クラスがその 1 レコードを表し, UserMapper はテーブルを表します.<br />
(実際にはテーブルをラップしたクラスとして実装されることが多いと思いますが, ここでは単純化しています)<br />
レコードはデータベースのことを知らないので, レコードを保存する際は $mapper->save($record) といったようにする必要があります.</p>
<p>それでは Active Record の何が問題なのか.<br />
Active Record ではレコードが<strong>ドメインロジック (ビジネスロジック) を持ったドメインオブジェクト</strong>としての側面と, <strong>データアクセスを行うオブジェクト</strong>としての側面を持つことになります.<br />
それぞれは全く違った関心事なので, <strong>関心事の分離 (SoC)</strong> や<strong>単一責任原則 (SRP)</strong> といったソフトウェア開発の原則に違反することになります.<br />
テストに関していうと, <strong>データベースへのアクセス無しにドメインロジックをテストできない</strong>, といったことが起こりやすくなります.<br />
(もちろん, 実装によりますが)</p>
<p>逆に <strong>Data Mapper</strong> ではドメインロジック (上の例でいうと User クラス) を<strong>データベース無しでテストできます</strong>.<br />
データベースに対してテストを書きたいときもありますし, そのためのテクニックもいろいろとありますが, まずはそれらを無視してテストできるような<strong>クラス分割</strong>を行うことで, 低コストで確実にテストを書くことができます.</p>
<p><strong>パターン編 3: Singleton を避ける (63 ~ 71)</strong></p>
<p>Singleton は GoF のデザインパターンの中では最も理解しやいもののひとつで, よく使われるパターンのひとつです.<br />
しかし, 同時に批判的意見の多いパターンでもあります.</p>
<p>Singleton ではクラスの static プロパティとしてオブジェクトとその状態がグローバル空間に残ってしまいます.<br />
これはつまり, <strong>グローバル変数と同様の性質を持っている</strong>, ということができます.</p>
<p>また, グローバル変数と違って, <strong>容易に上書くこともできない</strong>ので, テストをする上ではさらに厄介な存在といえます.</p>
<p>対策としては以下が考えられます.</p>
<ul>
<li>状態を初期化するためのメソッドを用意する</li>
<li>アプリケーション本体では getInstance() といった, 常に同一のインスタンスを取得するメソッドの使用を規約化し, テストでは new でそれぞれ独立したオブジェクトを生成し, テストする</li>
</ul>
<p>また, PHPUnit にはこれらを回避するための <strong>&#8211;process-isolation オプション</strong>であったり, <strong>@runTestsInSeparateProcesses アノテーション</strong>といった機能もあるのですが, それらについては説明しませんでした.<br />
Singleton を使わなければ, これらの機能について理解する必要もなくなりますし, これらは <strong>Slow Test (テストの実行が遅くなる) 問題</strong>を引き起こします.</p>
<p>Singleton で実装したくなったとき, <strong>本当に Singleton である必要があるのか</strong>については, 一度考えてみる必要があるでしょう.</p>
<p><strong>参考文献</strong></p>
<p>スライド中に挙げたものです.<br />
書籍へのリンクにはアフィリエイトタグをつけています.</p>
<ul>
<li><strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/0131495054/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41gw3-DOWrL._SL160_.jpg" />xUnit Test Patterns: Refactoring Test Code (Addison-Wesley Signature Series (Fowler))</a></span></em></strong><br />
xUnit とというのは SUnit (Smalltalk), JUnit (Java) といったナントカ Unit 系テスティングフレームの総称です.<br />
例として示されるコードは Java のものが多めですが, PHPUnit も書き方を含めて xUnit と呼べるものなので, この書籍で挙げられている考え方やテクニックは, ほぼそのまま適用できます.<br />
鈍器として人を殺せる程の分量がありますが, 気になるトピックをつまみ食いすることもできます.</li>
<li><strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/0470872497/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51-b3XXNMAL._SL160_.jpg" />Real-World Solutions for Developing High-Quality PHP Frameworks and Applications</a></span></em></strong><br />
PHPUnit の作者 <strong><em>Sebastian Bergmann</em></strong> を初めとする豪華な著者陣による, PHP アプリケーションの品質, テスト, 設計についての書籍.<br />
Symfony の作者 <strong><em>Fabien Potencier</em></strong> による章もあります.<br />
ソフトウェアの品質についての解説などは他の PHP 本にはまず無いものですし, 非常に刺激的な 1 册です.</li>
<li><strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/0321127420/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/511D6FdsbXL._SL160_.jpg" />Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))</a></span></em></strong><br />
アプリケーションのアーキテクチャパターンについての書籍.<br />
全体的な分量からするとほとんど読めていないのですが, スライド中の Active Record や Data Mapper について参考にしました.</li>
<li><strong><em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4798015164/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51BFWSV4WTL._SL160_.jpg" />PHPによるデザインパターン入門</a></span></em></strong><br />
GoF によるデザインパターンを PHP に翻訳して紹介している書籍.<br />
新卒の頃に読んで衝撃を受けました.<br />
残念ながら絶版なので買うことはできませんが, <a href="http://www.doyouphp.jp/book/book_phpdp.shtml">原稿が公開されている</a>ので, 読むことはできます.<br />
是非電子書籍化して欲しい 1 冊です.</li>
</ul>
<p>こちらはスライドです.</p>
<ul>
<li><strong><a href="http://www.slideshare.net/fabpot/dependency-injection-with-php-53">Dependency Injection with PHP 5. 3</a></strong><br />
 Symfony の作者 <strong><em>Fabien Potencier</em></strong> によるスライド.<br />
序盤は Dependency Injection の基礎についての説明で, そのあとに PHP 5.3 における DI コンテナの実装について説明しています.</li>
<li><strong><a href="http://www.slideshare.net/akihito.koriyama/bear-di">BEAR DI</a></strong><br />
リソース指向のフレームワーク <a href="http://code.google.com/p/bear-project/">BEAR</a> の作者の <a href="http://twitter.com/koriym"><strong>@koriym</strong></a> さんによるスライド.<br />
序盤は前のスライドを日本語訳しつつ引用し, 後半では BEAR の DI コンテナについて説明しています.</li>
<li><strong><a href="http://www.slideshare.net/sebastian_bergmann/clean-php-dpc11">Clean PHP</a></strong><br />
PHPUnit の作者 <strong><em>Sebastian Bergmann</em></strong> によるスライド.<br />
これだけ見て何かを理解するのには向きませんが, Active Record と Data Mapper の比較についてはこれを参考にしました.</li>
<li><strong><a href="http://www.slideshare.net/go_oh/singletons-in-php-why-they-are-bad-and-how-you-can-eliminate-them-from-your-applications">Singletons in PHP &#8211; Why they are bad and how you can eliminate them from your applications</a></strong><br />
 Singleton の問題点について, 詳細に説明されています.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/1386/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP カンファレンス 2011 で DSL と [] について LT してきた</title>
		<link>http://blog.yuyat.jp/archives/1355</link>
		<comments>http://blog.yuyat.jp/archives/1355#comments</comments>
		<pubDate>Sun, 11 Sep 2011 11:27:09 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[未分類]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[LisPHP]]></category>
		<category><![CDATA[Paml]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=1355</guid>
		<description><![CDATA[スライドはこちらです. Making DSL with [] View more presentations from Yuya Takeyama また, 当日 Ustream で配信された動画はこちらにアーカイブされて [...]]]></description>
			<content:encoded><![CDATA[<p>スライドはこちらです.</p>
<div style="width:425px" id="__ss_9197238"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/taketyan/making-dsl-with" title="Making DSL with []" target="_blank">Making DSL with []</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9197238" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/taketyan" target="_blank">Yuya Takeyama</a> </div>
</p></div>
<p>また, 当日 Ustream で配信された動画はこちらにアーカイブされています.<br />
動画中の一番最初がボクの発表です.<br />
<strong><a href="http://www.ustream.tv/recorded/17179193">Lightning Talk</a></strong></p>
<p>この LT では DSL のサンプルとして <strong>Paml</strong> というテンプレートエンジンを紹介しています.<br />
また, オチとして, [] で DSL だけじゃなく汎用言語も実装できる, ということで PHP で実装された Lisp ライクな言語 <strong>LisPHP</strong> を紹介しています.</p>
<p>いずれも GitHub にリポジトリを公開しているので, 興味のある方はご覧ください.</p>
<ul>
<li><strong><a href="https://github.com/yuya-takeyama/php-HTML_Paml">Paml</a></strong></li>
<li><strong><a href="https://github.com/yuya-takeyama/LisPHP">LisPHP</a></strong></li>
</ul>
<p>結構ネタ的な要素も強いのですが, この発表でボクが割と真面目に主張したかったのは以下の点です.</p>
<ol>
<li><strong>PHP 5.4 では [] が配列リテラルとして導入された</strong></li>
<li><strong>PHP の array は他の言語と比べて特殊なデータ構造である</strong></li>
<li><strong>その特性を DSL 的に活用することができる</strong></li>
</ol>
<p>スライドのまとめと若干表現が違っていますが, 大筋は変わりありません.</p>
<p>LT の 5 分間ではこれらについて説明しきれなかった部分があるので, この記事で補足しようと思います.</p>
<p>(なお, 同カンファレンスで他の方の発表を聞いての感想などは改めて別の記事に書くつもりです.)</p>
<p><strong>1. PHP 5.4 では [] が配列リテラルとして導入された</strong></p>
<p>特にこれ以上の説明は必要ないとは思いますが, 念のため.</p>
<p>今までは配列を以下のように記述していましたが,</p>
<p><script src="https://gist.github.com/1208512.js?file=normal_array_notation.php"></script></p>
<p>PHP 5.4 alpha 3 以降からは以下のように置き換えることができます.</p>
<p><script src="https://gist.github.com/1208512.js?file=new_array_notation.php"></script></p>
<p>見ての通り, <strong>array()</strong> を <strong>[]</strong> に置き換えることができるようになった, というだけで機能的な変化はありません.</p>
<p>いわゆる Lightweight Language はその多くが配列リテラルとして [] を採用していますが, PHP では長らく使用することができませんでした.<br />
パッチを送った <a href="http://twitter.com/rsky"><strong>@rsky</strong></a> さんを始めとする開発者の皆様のおかげでようやく使用することができるようになったので, 感謝をもって使用しましょう.</p>
<p><strong>2. PHP の array は他の言語と比べて特殊なデータ構造である</strong></p>
<p>これはスライド中でもそのまま説明していますが, PHP が持つ特徴として, <strong>配列とハッシュに区別が無い</strong>, ということが挙げられます.<br />
PHP における array は配列っぽさとハッシュっぽさを持った, 特殊なデータ構造であり, それらを<strong>混合して記述することができ<s>てしまい</s>ます</strong>. </p>
<p>これもスライド中で紹介していますが, PHP では以下のような記述が問題なく通ります.</p>
<p><script src="https://gist.github.com/1208512.js?file=mysterious_data_structure.php"></script></p>
<p>そしてこちらはスライド中に一度入れて後に割愛したものですが, 要素の順序を入れ替えたらどうなるか.</p>
<p><script src="https://gist.github.com/1208512.js?file=another_mysterious_data_structure.php"></script></p>
<p>表示上の順序こそ記述した通りの順番に変わっていますが, 集合としては等しい値であることがわかります.<br />
0 番目の要素のあとに foo という要素を追加して, さらにもう一つ要素を追加しても, その要素には添字として 1 が割り当てられます.</p>
<p><strong>3. その特性を DSL 的に活用することができる</strong></p>
<p>これらを踏まえて, [] で奇妙なデータ構造を記述して, DSL っぽく活用することを思いつきました.</p>
<p>いきなりですが, スライドで紹介したテンプレートエンジン Paml を例に出します.<br />
Paml には REPL (インタラクティブシェル) が同梱されており, Paml のコードを HTML に変換して出力することができます.</p>
<p><script src="https://gist.github.com/1208512.js?file=paml-repl.txt"></script></p>
<p>入力としての Paml (まぁ配列なんですが) の要素は順番が入れ替わっていますが, 出力はいずれも同じになっています.</p>
<p>もちろん, プログラムがそういう実装になっているというのもありますが, 前提としてこの 2 つの配列は集合として等しい, ということが重要です.</p>
<p><script src="https://gist.github.com/1208512.js?file=var_dump.txt"></script></p>
<p>実装の詳細としては, この配列とハッシュが混合したデータ構造から, 配列とハッシュをそれぞれ取り出してから処理するようになっています.</p>
<p>スライドでは, より現実的なフレームワークへの応用として, モデル定義の記述に活用することを提案しています.</p>
<p>例えば, <a href="http://phpdatamapper.com/"><strong>phpDataMapper</strong></a> (なんかここ数日アクセスできない状態ですが) という O/R マッパーのモデル定義は以下のようになっていますが,</p>
<p><script src="https://gist.github.com/1208512.js?file=model_definition_old.php"></script></p>
<p>これを以下のようにしてみてはどうか, ということです.</p>
<p><script src="https://gist.github.com/1208512.js?file=model_definition_new.php"></script></p>
<p>違いとしては, array() の代わりに [] を使っているのもそうですが, 後者ではデータ型の指定時の <strong>type という添字を使っていません</strong>.</p>
<p>イメージとしては, 第一引数に型名を指定して, そのあとにはさらなるオプションがキーワード引数として指定できる, といったような感じです.<br />
型名はどのカラムにも指定する必要で省略不可能なので第一引数としていますが, 後は全てオプションなので<strong>キーワード引数</strong>にする, といった具合です.</p>
<p><strong>おまけ: LisPHP の紹介</strong></p>
<p>スライド上ではコードとその出力を出しただけですが, ちゃんと実装しています.<br />
以下は円周率 PI と円の面積を計算する関数を定義し, 実際に計算する例です.</p>
<p><script src="https://gist.github.com/1208512.js?file=lisphp_example.txt"></script></p>
<p>その他, examples ディレクトリには LisPHP のサンプルコードもあります.<br />
フィボナッチ数列による再帰の例 (スライドに掲載したものです) もあるので, ご興味のある方は是非.</p>
<p>LisPHP の特徴は以下の通りです.</p>
<ul>
<li>PHP の array をコードとして扱う (code as data)</li>
<li>PurePHP で記述されている (ただし, PHP 5.4 alpha3 以降が必要)</li>
<li>同梱の REPL とインタプリタは PHP の eval を利用することで字句解析も構文解析も PHP まかせ</li>
</ul>
<p>実はこれにも元ネタがあって, 元は Python で書かれた Lispy というものです.<br />
こちらは string.split とかで超お手軽に字句解析・構文解析はしていますが.</p>
<p><strong><a href="http://www.aoky.net/articles/peter_norvig/lispy.htm">((Pythonで) 書く (Lisp) インタプリタ</a></strong></p>
<p>発表時, スクリーン上に LisPHP のことが出ていたのはたったの 5 秒間でしたが, 思いのほか笑いを取れて満足しています.<br />
同カンファレンスにスピーカーとして来日していた方にも<a href="http://twitter.com/mugeso/statuses/112558163412271104">ウケていた</a>とのことで, 発表前日夜に思いついて, 5 時間ぐらいかけて実装した甲斐があったというものです.<br />
(逆に Paml へのリアクションは思いのほか薄かった. これもネタだったのに)</p>
<p><strong>まとめ</strong></p>
<p>人前で LT をやるのは初めてで, とても緊張しましたが, とりあえずは満足する形で終えることが出来て良かったです.<br />
素晴らしい機会をくださった PHP カンファレンス 2011 実行委員会の皆様, そして会場で聞いてくださった皆様に感謝致します.</p>
<p>なお, 次回があれば 30 分ぐらいで現場の役に立つ話がしたいと思っているので, 来年以降の開催も楽しみにしています.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/1355/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>日本 RubyKaigi 2011 に行ってきた</title>
		<link>http://blog.yuyat.jp/archives/1246</link>
		<comments>http://blog.yuyat.jp/archives/1246#comments</comments>
		<pubDate>Mon, 18 Jul 2011 15:40:12 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Glitch]]></category>
		<category><![CDATA[RubyKaigi]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=1246</guid>
		<description><![CDATA[最後の日本 RubyKaigi です. 出張の関係で 2 日目の終盤からしか参加できていませんが, 印象に残ったものを簡単にまとめてみました. Advancing Net::HTTP by @wycats さん * ne [...]]]></description>
			<content:encoded><![CDATA[<p>最後の日本 RubyKaigi です.<br />
出張の関係で 2 日目の終盤からしか参加できていませんが, 印象に残ったものを簡単にまとめてみました.</p>
<p><strong>Advancing Net::HTTP</strong> by <a href="http://twitter.com/wycats">@wycats さん</a></p>
<p>* net/http は並列化できない<br />
* 並列化するためにフォークして net2/http というのを作っている<br />
* 並列化するにあたって Reactor パターンを採用した</p>
<p><strong>ergをすごく偲んで</strong> by <a href="http://twitter.com/m_seki">@m_seki さん</a></p>
<p>* カスタマイズは誘惑する<br />
* 安易にオプションを増やすことは「仕様の議論からの逃避」</p>
<p><strong>Visual Glitch, using Ruby</strong> by <a href="http://twitter.com/ucnv">@ucnv さん</a></p>
<p>* とっさにグリッチが必要なときは sed が便利<br />
* チェックサムを壊したりすると表示自体できなくなることがある<br />
* 安全にグリッチするにはどうするか<br />
* 仕様に従って壊すのがマナー<br />
* 動画はキーフレームを抜くことでいい感じに壊せる</p>
<p>ネタ的な発表かと思いましたが, 技術的には思いのほか真摯であり, とても参考になりました.<br />
発表者の方は GitHub に <a href="https://github.com/ucnv/aviglitch"><strong>aviglitch</strong></a> というライブラリを後悔されていますが, API, ドキュメント, spec など, あらゆる面で well-mannered な印象です.<br />
純粋に, Ruby でカジュアルに低レベルなバイナリ操作をする上で参考になりそうです.</p>
<p><strong>Ruby遺産とレガシーコード修理技術</strong> by <a href="http://twitter.com/hsbt">@hsbt さん</a></p>
<p>* tDiary のコミッタ<br />
* tDiary は 25 年使われる予定<br />
* 既に 10 年使われている<br />
* 各レイヤごとのテスト<br />
** ユニットテスト<br />
** エンドツーエンドテスト<br />
** インテグレーションテスト<br />
* 機能の追加は慎重に削除は大胆に<br />
** <em><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4873114799/yuyat-22/">プログラマが知るべき97のこと</a></span></em>における <a href="http://twitter.com/miyagawa">@miyagawa さん</a>の言葉<br />
* 継続的インテグレーション<br />
** <strong><a href="http://travis-ci.org/">travis-ci</a></strong> を使えば GitHub リポジトリで CI できる</p>
<p>長期にわたってソフトウェアを育ててきた経験に基づく, 実践的なお話.<br />
機能の追加に慎重になる, というのは, 特に業務だといろいろなしがらみがあって難しいけど, 常に意識して行きたいものです.<br />
No と言える力重要.</p>
<p><strong>O/R Mapper を支える技術</strong> by <a href="http://twitter.com/makotokuwata">@makotokuwata さん</a></p>
<p>* プログラミング言語の機能は分解, 結合, 抽象化<br />
* SQL にはそれらが欠けている<br />
* それらを補完するのが O/R Mapper<br />
* Ruby で SQL を組み立てること自体は抽象化ではない<br />
* named_scope で抽象化しよう<br />
* プログラミング言語の進化は抽象化機能の進化<br />
* モダンな O/R Mapper の機能<br />
** QueryObject の操作<br />
** Collection のように振る舞うこと<br />
** SQL の抽象化<br />
* N + 1 問題<br />
** DataMapper の Eager loading はうまくやっている</p>
<p>去年ぐらいから仕事で O/R Mapper 的なものを PHP で実装していることもあり, 実装寄りの話では一番参考になりました.<br />
スピーカーの桑田さんのお話は去年の Kwartz についてのものもそうでしたが, 洞察に溢れているだけでなく, 非常に明瞭でわかりやすく, とにかく引きつけられました.</p>
<p><strong>まとめ</strong></p>
<p>昨年から引き続き参加しましたが, レベルの高い技術者の考えに触れることができ, 多いに刺激を受けました.<br />
また, 英語を使いこなし, 海外からの参加者と対等にコミュニケーションを取っている方も多く, その店でも自らの力不足を実感させられました.</p>
<p>スピーカー, スタッフ, 参加者の皆様, お疲れさまでした!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/1246/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python4PHPer 第2回講習会に行ってきた</title>
		<link>http://blog.yuyat.jp/archives/148</link>
		<comments>http://blog.yuyat.jp/archives/148#comments</comments>
		<pubDate>Sun, 31 Jan 2010 13:49:21 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Event]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=148</guid>
		<description><![CDATA[PHP-users のメーリングリストへの告知がきっかけで行って参りました。予想をはるかに越える、素晴らしいイベントだったので、その凄さを簡潔に紹介。 主催者が凄い 主催者である桑田氏は過去に、RubyKaigi、PHP [...]]]></description>
			<content:encoded><![CDATA[<p>PHP-users のメーリングリストへの告知がきっかけで行って参りました。予想をはるかに越える、素晴らしいイベントだったので、その凄さを簡潔に紹介。</p>
<p><strong>主催者が凄い</strong></p>
<p>主催者である桑田氏は過去に、RubyKaigi、PHP Conference、YAPC など様々なイベントにおいて講演を行っている。Web サイト <a href="http://www.kuwata-lab.com/">kuwata-lab homepage</a> においては、Python 向けのテンプレートエンジン pyTenjin を始め、多数の開発者向けプログラムを提供している。根っからのプログラマーという印象。</p>
<p><strong>間口の広さが凄い</strong></p>
<p>タイトルの通り、PHP ユーザーを対象とした講習会であり、プログラミングはある程度できることが求められるものの、「Python に関しては全く知らない」という人でも参加できるようにプログラムされている。それでいて、最後には <strong>Google App Engine</strong> 上で、<strong>Big Table</strong> を利用したプログラムを動作させるところまで行く。</p>
<p>反面、ある程度 Python が書ける人に取っては、退屈な部分もあったかもしれない。講習会前に 3 日ほど予習していただけの私でさえ、最初の数時間は既に覚えた文法のおさらいがほとんどという感じ。</p>
<p>ただ、桑田氏の、プログラミング一般や、Python 言語仕様に関する理解は凄まじいものがあり、「オブジェクト指向の仕組み」や、「メソッドの名前解決の優先順位」などの、興味深い話も聴けるので、Python がある程度書ける人にも、十分楽しめる内容だったことでしょう。</p>
<p><strong>スケジュールが凄い</strong></p>
<p>10:00 ~ 21:00 という予定で、実際にはそれも少しオーバー。それだけの長時間を、桑田氏ひとりで進める。もちろん休憩はあるものの、全員心地よい疲労感とともに講習会を終えたことと思います。</p>
<p><strong>テキストが凄い</strong></p>
<p>講習会は、桑田氏自作のテキストをベースに進められる。その量、PowerPoint で <strong>200 ページ超</strong>。Python と PHP を比較しながらの解説も大変わかりやすい。</p>
<p><strong>コストパフォーマンスが凄い</strong></p>
<p>上記のテキストを始め、準備にはかなりの時間が割かれていることと思われますが、それでも参加費は 1 人 <strong>500 円</strong>と格安。元が取れないわけがない。</p>
<p>また、女性、カップル、中学生以下は無料となるそうです。</p>
<p><strong>まとめ</strong></p>
<p>初心者にもやさしく、全員が一定の目標を達成に到達でき、主催者がともに喜んでくれる、楽しい講習会でした。そんなわけで、次回も是非参加したいと思っています。<br />
(ですが、次回はもうちょい早めに終わって、懇親会とかもあればと思っていたり。)</p>
<p>仕事で Python を使う、という人は、日本にはなかなかいないかと思いますが、純粋にプログラミングが好きな人は、是非次の機会に参加してみてください。</p>
<p><strong>関連リンク</strong></p>
<ul>
<li><a href="http://groups.google.co.jp/group/python4phper/">Python4PHPer</a> on Google グループ</li>
<li><a href="http://search.twitter.com/search?q=%23python4phper">#python4phper</a> on Twitter</li>
<li><a href="http://www.kuwata-lab.com">kuwata-lab homepage</a></li>
</ul>
<p><strong>その他の参加者によるブログ</strong></p>
<ul>
<li><a href="http://d.hatena.ne.jp/kazumeat/20100126/1264529275">「Python4PHPer 第2回講習会 PHPユーザのためのPythonとGoogle AppEngine勉強会」にいってきた</a> by <a href="http://twitter.com/kazumeat">@kazumeat</a></li>
<li><a href="http://moooori-blog.undo.jp/archives/1027">Python4PHPer勉強会　第２回に参加してきました</a> by <a href="http://twitter.com/mo4ri">@mo4ri</a></li>
<li><a href="http://kenjikaeshima.blogspot.com/2010/01/python4phper-2.html">Python4PHPer 第2回講習会参加してきました。 </a> by <a href="http://twitter.com/k_kaeshima">@k_kaeshima</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/148/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>「新春座談会 このコンピュータ書がすごい！2010年版」行ってきた</title>
		<link>http://blog.yuyat.jp/archives/30</link>
		<comments>http://blog.yuyat.jp/archives/30#comments</comments>
		<pubDate>Sun, 10 Jan 2010 15:37:25 +0000</pubDate>
		<dc:creator>yuya</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[Diary]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.yuyat.jp/?p=30</guid>
		<description><![CDATA[日本 Ruby の会会長である高橋征義氏 @takahashim が進行を勤める、「新春座談会 このコンピュータ書がすごい！2010年版」に行ってきた。場所はジュンク堂池袋本店。 2 時間という短時間で、ものすごい数の書 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jp.rubyist.net/">日本 Ruby の会</a>会長である<a href="http://d.hatena.ne.jp/takahashim/">高橋征義氏</a> <a href="http://twitter.com/takahashim">@takahashim</a> が進行を勤める、「新春座談会 このコンピュータ書がすごい！2010年版」に行ってきた。場所はジュンク堂池袋本店。</p>
<p>2 時間という短時間で、ものすごい数の書籍を次々に紹介していくというスタイルで、詳細にはあまり触れない。基本 1 冊に 10 秒もかけずに、次々と進めていく。もちろん、中にはつっこんだ説明があったり、各出版社の編集・営業担当者からのコメントがあったりもするものの、「量が質になる」だけの閾値は超えていたんじゃないだろうか。1 冊平均 60 秒としても 2 時間で 120 冊。とてもライブ感のある、楽しい 2 時間だった。</p>
<p>出版社側からは、WEB+DB Press 編集の稲尾氏 <a href="http://twitter.com/inao">@inao</a> や、<a href="http://blog.livedoor.jp/dankogai/search?q=%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC+%CC%F0%CC%EE+%B8%A5%CB%DC%B8%E6%CE%E9">404 Blog Not Found における献本御礼</a>でお馴染みのオライリー・ジャパン矢野氏をはじめとする方々。それぞれ何冊か担当して、書評を述べたりするんだけど、オライリー矢野氏がとくに凄かった。</p>
<p>矢野氏は、オライリーよりもむしろ他社の書籍の紹介が多く、ある意味「オライリーらしい」感じ。書評はすっきりしていてわかりやすく、興味を惹かれた。<span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4140814047/yuyat-22/">フリー~〈無料〉からお金を生みだす新戦略</a></span>については、出版業界人という立場から、これからのメディア論もからめ、簡潔に大筋を説明。さらにそこから著者のクリス・アンダーソンについてのうんちくへ繋ぎ、オライリーの雑誌 <a href="http://www.oreilly.co.jp/books/make/">Make:</a> の宣伝でオトす。鮮やか過ぎて、まったくいやらしさがなく、会場思わず拍手。さらに、<span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/475000362X/yuyat-22/">美少女ゲームシナリオバイブル</a></span>については、「分析と、受け入れられる物の作り込みは、ビジネス的にはおもてなし、ホスピタリティの参考にもなる」という持論を展開するなど、さすがにオライリースタッフは伊達じゃない思った。</p>
<p><strong>気になった書籍</strong></p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4274066770/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/416ehyynIYL._SL160_.jpg" />マスタリングTCP/IP 入門編 第4版</a></span><br />
エンジニアの教養として、おさえておきたいところ。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4822234312/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41y65zf27LL._SL160_.jpg" />まつもとゆきひろ コードの世界‾スーパー・プログラマになる14の思考法</a></span><br />
『プログラミング言語 Ruby』とあわせて読めば、Ruby のバイブルになるとのことなので。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4780801281/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41qp2e7579L._SL160_.jpg" />デジタルコンテンツをめぐる現状報告―出版コンテンツ研究会報告2009</a></span><br />
業界研究。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4274067750/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/412Ufa2CI%2BL._SL160_.jpg" />プログラミングのための確率統計</a></span><br />
今の仕事の役に立つんじゃないか。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4883376354/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41XHBSHcDqL._SL160_.jpg" />実践バグ管理―プロジェクトを成功に導くための</a></span><br />
これも仕事に直結する内容かと。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4861006740/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51CcOY5g7lL._SL160_.jpg" />ケータイサイトのレイアウト 企業・キャンペーン・サービス・ブランディング……240pxのデザインテクニック</a></span><br />
インターフェイスは大事。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/479811488X/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51AGQgsJPTL._SL160_.jpg" />アクセス解析によるWebサイト改善術 問題解決モデル30</a></span><br />
実践的な仮説検証の本としても読めるとのことなので。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4861005779/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51edtSHtuTL._SL160_.jpg" />IA100 —ユーザーエクスペリエンスデザインのための情報アーキテクチャ設計</a></span><br />
IA についても教養程度にはおさえておきたい。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4798119865/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/518bklf0j0L._SL160_.jpg" />PHP 逆引きレシピ (PROGRAMMER’S RECiPE)</a></span><br />
PHP 本では珍しく、「この人はわかっている」という内容で、安心して読める、とのことなので。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/475000362X/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41vy7sYQcGL._SL160_.jpg" />美少女ゲームシナリオバイブル</a></span><br />
オライリー・ジャパン矢野氏がビジネスマンに推薦するホスピタリティの参考書。</p>
<p><strong>去年おもしろかった本</strong></p>
<p>2009 年に読んだ本からのリストなので、必ずしも新刊ではないですが。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4873113911/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41H0Dk-K3PL._SL160_.jpg" />JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス</a></span><br />
JSON の提唱者である著者の、JavaScript 愛がひしひしと伝わる美書。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4873113296/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/413amOWGgvL._SL160_.jpg" />JavaScript 第5版</a></span><br />
サイ本。JavaScript の言語仕様について網羅的に書かれている。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4873113946/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41CGDEMgyoL._SL160_.jpg" />プログラミング言語 Ruby</a></span><br />
サイ本と同じく David Flanagan 著。Ruby の強力な表現力を知ることができる。まだ読み深め中。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4894712857/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41PNvUxHtgL._SL160_.jpg" />Rubyによるデザインパターン</a></span><br />
GoF パターンだけでなく、Ruby に特化したパターンも含む。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4798015164/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51BFWSV4WTL._SL160_.jpg" />PHPによるデザインパターン入門</a></span><br />
パターンで作ることの楽しさ、パターン化されていることの便利さを教えてくれた本。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4822281957/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51RDV5TN36L._SL160_.jpg" />オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―</a></span><br />
オブジェクト指向に至るまでの、プログラミングの歴史。それは抽象化の歴史でもある。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4844326317/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/41POD7JwBlL._SL160_.jpg" />モバイルユーザビリティ・デザイン Web制作者が身につけておくべき新・100の法則。</a></span><br />
モバイルについては初学ということもあって、ある意味刺激的におもしろかった。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4797339098/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51uraZ6CddL._SL160_.jpg" />ウェブユーザビリティの法則 改訂第2版</a></span><br />
ユーザビリティについてのインデックスを与えてくれた本。</p>
<p><span class="isbn_anchor"><a href="http://www.amazon.co.jp/o/ASIN/4873114101/yuyat-22/"><img src="http://ecx.images-amazon.com/images/I/51hJv2ygkpL._SL160_.jpg" />デザイニング・ウェブナビゲーション ―最適なユーザーエクスペリエンスの設計</a></span><br />
インターフェイスの大事さを教えてくれた本。</p>
<p><strong>関連リンク</strong></p>
<ul>
<li><a href="http://twitter.com/junkudo_ike_pc">ジュンク堂書店 池袋本店 PC 書</a> on Twitter</li>
<li><a href="http://www.ustream.tv/recorded/3853528">このコンピュータ書がすごい！ 2010年版</a> on Ustream</li>
<li><a href="http://gihyo.jp/news/report/2010/01/1201">gihyo.jp によるレポート</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.yuyat.jp/archives/30/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

