<?xml version="1.0" encoding="UTF-8"?> 
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>満足せる豚。眠たげなポチ。</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/" />
<link rel="service.post" type="application/x.atom+xml" href="http://cms.blog.livedoor.com/atom/blog_id=102948" title="満足せる豚。眠たげなポチ。" />
<modified>2009-08-07T01:47:58Z</modified> 
<tagline><![CDATA[]]></tagline> 
<id>tag:blog.livedoor.jp,2009:zep716</id> 
<author>
<name>zep716</name> 
</author>
<generator url="http://blog.livedoor.com/" version="1.0">livedoor Blog</generator> 
<copyright>Copyright (c) 2009, zep716 </copyright>
<entry>
<title>最近のこと</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51909817.html" />
<modified>2009-08-06T16:47:54Z</modified> 
<issued>2009-08-07T01:47:54+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51909817</id> 
<summary type="text/plain">日本Ruby会議2009の実行委員でした。

るびまの編集に立候補してみた。

rubykaigi2009 スタッフのその後を追いたくて今さら twitter のアカウントとってみた。@sunaot

非公開の人にリクエストを送っていいものかよくわからず立ち往生。＜いまここ

</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51909817.html">
<![CDATA[<p>日本Ruby会議2009の実行委員でした。</p>

<p>るびまの編集に立候補してみた。</p>

<p>rubykaigi2009 スタッフのその後を追いたくて今さら twitter のアカウントとってみた。@<a href="http://twitter.com/sunaot">sunaot</a></p>

<p>非公開の人にリクエストを送っていいものかよくわからず立ち往生。＜いまここ</p>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>2009年春 オブヒロ＆オブラブ合同イベント「田町deナイト～SAMURAI meets VIKING～」</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51849008.html" />
<modified>2009-05-01T00:59:28Z</modified> 
<issued>2009-04-27T09:35:58+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51849008</id> 
<summary type="text/plain">このイベントへ行ってきたので、遅ればせながら感想とか。

自己紹介とパネルディスカッションという構成で事前に準備された質問に各国、各開発スタイルの立場から意見を答えていくというスタイルで進行していた。

イベントとしてのわくわく感がとても高いものだった。...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51849008.html">
<![CDATA[<p><a href="http://atnd.org/events/535">このイベント</a>へ行ってきたので、遅ればせながら感想とか。</p>

<p>自己紹介とパネルディスカッションという構成で事前に準備された質問に各国、各開発スタイルの立場から意見を答えていくというスタイルで進行していた。</p>

<p>イベントとしてのわくわく感がとても高いものだった。会全体の雰囲気による部分が大きいと思う。</p>

<p>細かい話はいろいろあるんだが、とりあえず受け取った大きなメッセージを二つあげると、</p>

<dl>
<dt>顧客に価値を提供しろ</dt>
<dd>最終的には顧客に価値を提供できたかどうかだけが意味を持つ。そして顧客に価値を提供するためには、顧客が得たいものを正しく見極めなければならない。ソフトウェアに価値はない。ソフトウェアを通して、何を実現したいのか。それを顧客と共に発見することが大切だ。「顧客が言うことを正しく聞きとってそれを間違いなく作る」というのはゴールじゃない。顧客の本当の課題を理解しそれを解決して顧客が価値を得るためには何ができるのか。それをゴールにするべきだ。</dd>

<dt>values と principles を基に行動せよ</dt>
<dd>アジャイルかどうかはプラクティスでは計れない。values と priciples を理解し、それを規範にチームの行動を進化させるのが一番大切なこと。そのための基本的なツールは、フィードバックとレトロスペクティブ（ふりかえり）。やってみて結果を受けて次の行動を変える。それを繰り返してチームを成長させる。</dd>

</dl>

<p>こう書いてしまうと当たり前すぎるのかもしれないけど、実際にそれをやっていて体験として語れる人たちが言うと説得力が違う。</p>

<p>あとは細かい発言からいくつか拾う。『』は発言を意訳したもの。</p>

<ul>
<li>アジャイルは「変化に柔軟に対応する」「変化を許容する」というところから、むしろ「本質的に変化が必要な状態なのだから、変化を促す。変化を通じて結果を求める。」というスタンスに進んでいる気がした。(アジャイル門外漢の単なる感想ね。)</li>
<li>『レトロスペクティブ、レトロスペクティブ、レトロスペクティブ。』</li>
<li>『一番大切だと感じるのは「顧客に価値を届けるまでの時間を０に近づけること」。これは大野耐一氏の言葉から学んだ。』</li>
<li>契約に銀の弾丸はないらしい。</li>
<ul>
<li>いろいろあるけど、とにかく顧客と信頼関係を結んで合意したところでスタートしているよ。というのが実情っぽい。</li>
<li>どの話がフックになって顧客はハンコ押してくれるのかを聞こうと思ったけど、聞きそびれた。</li>
</ul>
<li>『アジャイル開発に個人の資質は必要。でもそれは先立つチームの文化がないときの話。チームに文化があれば個人の資質をこえてチームに受け入れることもできる。』</li>
</ul>

<p>懇親会への移動の際、ゲストに会を欠席して帰るという人がいたので、田町の駅まで案内した。道中に SCRUM の話をいろいろ話していて、この間の話もとても楽しかった。「イテレーションの期間は変えてはいけないよ。あれは期間を固定してチームにリズムを作って、違いが出たときに気づきを得るためのものだから。」とか。「東京駅まで行けたらあとはホテルまで帰れるから大丈夫なんだ。あーっと、ハママッチョーとかいうとこ。」「それ隣りだよ。」とか。</p>

<p>懇親会はあまりアジャイルの話はしていなかった気がする。ウォーターフォールプロセスはどう評価している？とか聞いてみたりしたかな。</p>

<p>最後に懇親会の雑談メモ。</p>

<ul>
<li>音楽とサッカーの話は国境を越えやすい。</li>
<li>MUSE が好き。デペッシュモードが好き。とか、ふつうに理解できるし話ができる。「MUSE は最初はよかったんだけど、どんどん方向性に同意できなくなってきた。」「あー、わかる、わかる。」</li>
<li>「サッカー好きだよ。」「おー！好きなサッカー選手は？」「ミカエル・ラウドルップ」「(爆笑)」みたいな。(昔日本に居たんだよと説明したり。)</li>
<li>「じゃあじゃあ、イブラヒモビッチ知ってる？」「当然でしょ」とか。</li>
<li>「『乾杯』てどういう意味なの？」「make your glass empty.」これもえらい喜ばれた。</li>
</ul>]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>「ソフトウェア開発はカオスであり、かつフラクタルである」</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51845279.html" />
<modified>2009-04-20T18:32:19Z</modified> 
<issued>2009-04-21T03:32:19+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51845279</id> 
<summary type="text/plain">ということで、戦術的ピリオダイゼーション理論(以下、PTP)に夢中な今日この頃です。先に言っておくと今日の話は強力に電波なので気をつけるように。(PTP がではなく、ソフトウェア開発の類似性を云々しているこのエントリが。)

PTP というのは要約すると、「フッボールの...</summary> 
<dc:subject>programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51845279.html">
<![CDATA[<p>ということで、戦術的ピリオダイゼーション理論(以下、PTP)に夢中な今日この頃です。先に言っておくと今日の話は強力に電波なので気をつけるように。(PTP がではなく、ソフトウェア開発の類似性を云々しているこのエントリが。)</p>

<p>PTP というのは要約すると、「フッボールの本質は予測不可能性にある。だから様々なレベルでの状況判断(=戦術)を強化することでフッボールが上達する。」(フッボールという表記はネタ元の村松さんブログの表記に合わせた。まぁ、サッカーです。)というコンセプトだと理解した。ポイントは状況判断が予測不可能性を押さえ込んでねじ伏せる道具ではなく、柔軟に状況に応じて自分が変化し対処していくための道具と位置づけられているところ。</p>

<p>つまるところ、<a href="http://www.plus-blog.sportsnavi.com/naoto/">村松尚登さんのブログを読め</a>。と。</p>

<p>で、これが(というか、村松さんがというべきか)いろいろ良いこと言ってる。</p>

<ul>
<li>戦術の基本はチーム戦術</li>
<li>「個を育てる」というコンセプトはありません。あくまでも『トレーニングはチームプレーの改善のために存在する』というコンセプト</li><li>フッボールの本質が“テクニック”ではなく“カオス”だとすると、フッボールにおける最重要課題はボールと友達になることはでなく“カオス”と友達になることなのではないでしょうか。</li>
<li>“カオス”は混乱です。そして、混乱の中で闇雲に戦っていては敵を倒すことはできません。その混乱の中に存在する小さな法則（＝定跡）をなるべく多く見つけ出し、混乱により良い形で適応できる術を身に付けることが、混乱の中での戦い方なのではないでしょうか。</li>
<li>つまり、カオスと友達になるということは、「他人の指示の声さえもがカオスに影響を及ぼす可能性がある」ということをしっかりと認識し、他人の指示やアドバイスに耳を傾けつつも、自らの判断でその瞬間の状況に合わせてジャズピアノ的に即興演奏を続けて行くこと</li>
<li>カオスと友達になるというのは、途絶えることなく続くカオスの変化に柔軟に適応することを可能にするために武士のようにニュートラルな姿勢と心をキープすること</li>
<li>その証拠に、リフティングをしている子供の邪魔をしようとすると「邪魔をするな！」と怒られます。予期せぬ変化（＝邪魔）を許容していない時点で、彼がしているリフティングは“カオス”ではないのだと思います。</li>
</ul>

<p>言いたいことは伝わる人には伝わるだろうから、こんなもんでいいか。</p>

<p>あとは、この文章なんて「<a href="http://www.jitu.org/~tko/cgi-bin/bakagaiku.rb?bakaid=20070726">あれ、どっかで読んだな</a>」とか思ってしまって、読み返してもやっぱり同じようなことを言っているとしか思えない。</p>

<blockquote>
だって、フッボールの原型は試合なのですから、明日の試合に直結するチーム戦術の方が１対１の間合いの取り方よりもよっぽど大切だと思うからです。
</blockquote>

<p>これも村松さんのブログで見つけた引用。元は<a href="http://ebisukeiko.ld.infoseek.co.jp/991106.htm">ここの文章</a>らしい。</p>

<blockquote>
<p>学校を代表とする教育の一般的な方法は、完全な部分を積み上げていけば、完全な全体ができ上がるというものです。極端な場合は完全な部分が出来ないうちは、次の部分を見せない、あるいは学習者が漠然とした全体も掴めないうちに、完全な部分の習得を求めるというようなこともあります。</p>

<p>しかし学びの自然な姿は、大まかな全体が大まかな部分の総体へ少しずつ割れていき、部分が総体的に深まっていくというものです。つまり「大まかな全体から細かな全体へ」ということです。決して「細かな部分から細かな全体へ」ではありません。</p>
</blockquote>

<p>もはや何を言いたいか、解説はいらないはず。完成に至るまでの学習と理解のプロセスだという視点で見たときには、「あー、あのことか」と。</p>

<p>神々の開発はまた別なのかもしれないけど、普通の人が普通の人とチームを組んで働いて、結果を求めるというのは、結局そういうことなんじゃないかなぁとしか言えない。</p>

<blockquote>
<p>「守備も攻撃もテクニックもフィジカルも切り離してはいけない。<br />
　それぞれの要素を切り離してトレーニングしても各要素が上達するだけで<br />
　サッカーは上達しない。サッカーの上達はサッカーのトレーニングからしか<br />
　生まれない」</p>
<a href="http://www.plus-blog.sportsnavi.com/naoto/article/24">via フットボールはフットボールをトレーニングすることによってのみ上達する</a>
</blockquote>

<blockquote>
<p>では“戦術的ピリオダイゼーション”では「個の成長」をおろそかにしているかというと決してそうではありません。“戦術的ピリオダイゼーション”では『フッボールチームが成長する過程でこそフッボール選手個人が伸びる。なぜならば、フッボールはチームスポーツであり戦術だからだ。このような特徴を持ったフッボールの世界で活躍できる優秀なフッボール選手は、チームが成長する過程でのみ成長する』と考えているのです。</p>
<a href="http://www.plus-blog.sportsnavi.com/naoto/article/291">via 戦術的ピリオダイゼーション哲学の概要</a>
</blockquote>


<p>あまり一般化するのも危険なので、深入りはしないけど、いろいろヒントをもらった。</p>

<p>勢い余って本も買ったけど、値段分以上に得たものは大きい。フラクタルの話なんて読みながらその類似にニヤニヤしたくなる。(あ、でも本は PTP に割いているページ数は少なくて純粋にサッカーのトレーニング方法に割いているページが多いから、ソフトウェア開発的視点での興味であればまずブログを読むべき。)</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4757215835/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51GZ3rwTlAL._SL160_.jpg" alt="FCバルセロナスクールの現役コーチが教えるバルサ流トレーニングメソッド" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4757215835/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">FCバルセロナスクールの現役コーチが教えるバルサ流トレーニングメソッド</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4757215835/nemutagenapot-22/ref=nosim/" title="FCバルセロナスクールの現役コーチが教えるバルサ流トレーニングメソッド" target="_blank">amazlet</a> at 09.04.21</div></div><div class="amazlet-detail">村松 尚登 <br />アスペクト <br />売り上げランキング: 1171<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4757215835/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062133350/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51JFBB8X1JL._SL160_.jpg" alt="ジョゼ・モウリーニョ" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062133350/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">ジョゼ・モウリーニョ</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4062133350/nemutagenapot-22/ref=nosim/" title="ジョゼ・モウリーニョ" target="_blank">amazlet</a> at 09.04.21</div></div><div class="amazlet-detail">ルイス ローレンス ジョゼ モウリーニョ 西岡 明彦 <br />講談社 <br />売り上げランキング: 10281<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4062133350/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<p>「あとで書く」と言いつつまだ感想書いていないけど、この本も同じメッセージを受け取った。個より全体。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839924023/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51N9wG%2B0BgL._SL160_.jpg" alt="アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839924023/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4839924023/nemutagenapot-22/ref=nosim/" title="アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~" target="_blank">amazlet</a> at 09.04.21</div></div><div class="amazlet-detail">Mike Cohn マイク コーン <br />毎日コミュニケーションズ <br />売り上げランキング: 5078<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839924023/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>最近のこと</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51829816.html" />
<modified>2009-03-27T22:49:37Z</modified> 
<issued>2009-03-28T07:49:37+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51829816</id> 
<summary type="text/plain">年明けくらいに「今年はたくさん更新を」と書いたような気がしないでもないが、早々に挫折しずいぶんと間隔が開いた。

いろいろと忙しかったという言い訳があるのだけど、その間に読んだ本で思ったことがけっこうあるのであとで書くしておく。

これらについて、あとで...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51829816.html">
<![CDATA[<p>年明けくらいに「今年はたくさん更新を」と書いたような気がしないでもないが、早々に挫折しずいぶんと間隔が開いた。</p>

<p>いろいろと忙しかったという言い訳があるのだけど、その間に読んだ本で思ったことがけっこうあるのであとで書くしておく。</p>

<p>これらについて、あとで書く。</p>

<ul>
<li>アジャイルな見積りと計画づくり</li>
<li>コーディングの掟</li>
<li>Release It!</li>
<li>「日本の経営」を創る(三枝匡)</li>
<li>企業戦略としてのデザイン</li>
</ul>

<p>今年は仕事以外でもいろいろできるといいなぁと思います。ikebukuro.rb とかして、ジュンク堂近くのスタバで一人コーディングとか。</p>]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>お疲れ様でした。</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51829797.html" />
<modified>2009-03-27T21:30:45Z</modified> 
<issued>2009-03-28T06:30:45+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51829797</id> 
<summary type="text/plain">チームに今月末で退職する方がいたので、送別会でした。

前の職場を自分が辞めるときにも強く感じたことですが、本当に自分はチームで働くということと、単純にそのチームの人たちがすごく好きなんだなぁと感じました。

「初めてのRuby」勉強会継続中なので、また会う...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51829797.html">
<![CDATA[<p>チームに今月末で退職する方がいたので、送別会でした。</p>

<p>前の職場を自分が辞めるときにも強く感じたことですが、本当に自分はチームで働くということと、単純にそのチームの人たちがすごく好きなんだなぁと感じました。</p>

<p>「初めてのRuby」勉強会継続中なので、また会う（のだろう）けど、その一風変わったセンスでこれからも活躍してほしいです。</p>

<p># といいつつ、このブログ職場ばれしてないから読まれないな。うん。</p>]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>Ruby で 50 行ほどのルールエンジンを書いてみた。</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51817590.html" />
<modified>2009-03-09T17:25:09Z</modified> 
<issued>2009-03-10T02:25:09+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51817590</id> 
<summary type="text/plain">drools の記法が DSL らしくて「へー、いいなー」と思ったりしたので、なんとなく書いてみた。バックトラックを考慮していない(最初の答えを見つけたら break する)うえに速度が速いわけでもないので記法の違う if 文と言われると返す言葉もない。

要は rule, when, then ...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51817590.html">
<![CDATA[<p><a href="http://d.hatena.ne.jp/wkzk/20090305#1236179798">drools の記法が DSL らしくて「へー、いいなー」と思ったりした</a>ので、なんとなく書いてみた。バックトラックを考慮していない(最初の答えを見つけたら break する)うえに速度が速いわけでもないので記法の違う if 文と言われると返す言葉もない。</p>

<p>要は rule, when, then のブロックでルールを定義するというのをやってみたかったということで。</p>

<p>when と then はメソッド定義まではできるんだけど DSL 風なアクセスをうまいこと API として定義できなくて _when と _then で妥協した。残念。</p>

<pre class="syntax-highlight"><span class="synPreProc">class </span><span class="synType">Rrools</span>
  <span class="synPreProc">class </span><span class="synType">Rule</span>
    <span class="synPreProc">def </span><span class="synIdentifier">initialize</span>
      <span class="synIdentifier">@rule</span> = {}
    <span class="synPreProc">end</span>

    <span class="synPreProc">def </span><span class="synIdentifier">_when</span> &amp;condition
      <span class="synIdentifier">@rule</span>[<span class="synIdentifier">:condition</span>] = condition
    <span class="synPreProc">end</span>
    <span class="synStatement">alias</span> on _when

    <span class="synPreProc">def </span><span class="synIdentifier">_then</span> &amp;consequence
      <span class="synIdentifier">@rule</span>[<span class="synIdentifier">:consequence</span>] = consequence
    <span class="synPreProc">end</span>
    <span class="synStatement">alias</span> run _then

    <span class="synPreProc">def </span><span class="synIdentifier">pack</span> context
      <span class="synStatement">instance_eval</span> &amp;context
      <span class="synIdentifier">@rule</span>[<span class="synIdentifier">:context</span>] = <span class="synConstant">self</span>
      <span class="synIdentifier">@rule</span>
    <span class="synPreProc">end</span>
  <span class="synPreProc">end</span>

  <span class="synPreProc">def </span><span class="synIdentifier">self.describe</span> &amp;block
    rools = <span class="synConstant">self</span>.new
    rools.instance_eval &amp;block
    <span class="synIdentifier">Proc</span>.new {|&amp;context| rools.valuate &amp;context }
  <span class="synPreProc">end</span>

  <span class="synPreProc">def </span><span class="synIdentifier">initialize</span>
    <span class="synIdentifier">@rules</span> = []
    <span class="synIdentifier">@description_context</span> = <span class="synIdentifier">Proc</span>.new {}
  <span class="synPreProc">end</span>

  <span class="synPreProc">def </span><span class="synIdentifier">rule</span> &amp;rule_block
    rule = <span class="synIdentifier">Rule</span>.new
    rule.instance_eval &amp;rule_block
    <span class="synIdentifier">@rules</span> &lt;&lt; rule.pack(<span class="synIdentifier">@description_context</span>)
  <span class="synPreProc">end</span>

  <span class="synPreProc">def </span><span class="synIdentifier">context</span> &amp;context <span class="synComment"># rule の生成時に都度評価される</span>
    <span class="synIdentifier">@description_context</span> = context
  <span class="synPreProc">end</span>

  <span class="synPreProc">def </span><span class="synIdentifier">valuate</span> &amp;context
    <span class="synIdentifier">@rules</span>.each <span class="synStatement">do</span> |<span class="synIdentifier">rule</span>|
      rule[<span class="synIdentifier">:context</span>].instance_eval &amp;context
      <span class="synStatement">if</span> rule[<span class="synIdentifier">:condition</span>].call
        <span class="synStatement">break</span> rule[<span class="synIdentifier">:consequence</span>].call
      <span class="synStatement">end</span>
    <span class="synStatement">end</span>
  <span class="synPreProc">end</span>
<span class="synPreProc">end</span>
</pre>


<p>使い方はこんなかんじ。</p>

<pre class="syntax-highlight">rule = {}
rule[<span class="synSpecial">"</span><span class="synConstant">入場料</span><span class="synSpecial">"</span>] = <span class="synIdentifier">Rrools</span>.describe <span class="synStatement">do</span>
  rule <span class="synStatement">do</span>
    _when { <span class="synIdentifier">@people</span> &gt; <span class="synConstant">4</span> }
    _then { <span class="synConstant">5000</span> * <span class="synIdentifier">@people</span> }
  <span class="synStatement">end</span>

  rule <span class="synStatement">do</span> 
    _when { <span class="synIdentifier">@people</span> &lt;= <span class="synConstant">4</span> }
    _then { <span class="synConstant">6000</span> * <span class="synIdentifier">@people</span> }
  <span class="synStatement">end</span>
<span class="synStatement">end</span>

people = <span class="synConstant">3</span>
puts rule[<span class="synSpecial">"</span><span class="synConstant">入場料</span><span class="synSpecial">"</span>].call { <span class="synIdentifier">@people</span> = people }  <span class="synComment"># =&gt; 18000</span>

people += <span class="synConstant">1</span>
puts rule[<span class="synSpecial">"</span><span class="synConstant">入場料</span><span class="synSpecial">"</span>].call { <span class="synIdentifier">@people</span> = people }  <span class="synComment"># =&gt; 24000</span>

people += <span class="synConstant">1</span>
puts rule[<span class="synSpecial">"</span><span class="synConstant">入場料</span><span class="synSpecial">"</span>].call { <span class="synIdentifier">@people</span> = people }  <span class="synComment"># =&gt; 25000</span>


<span class="synComment"># やってみる。</span>
<span class="synComment"># http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=Drools</span>

<span class="synPreProc">class </span><span class="synType">User</span>
  <span class="synStatement">attr_accessor</span> <span class="synIdentifier">:age</span>, <span class="synIdentifier">:name</span>
  <span class="synPreProc">def </span><span class="synIdentifier">initialize</span> name, age
    <span class="synIdentifier">@age</span> = age
    <span class="synIdentifier">@name</span> = name
  <span class="synPreProc">end</span>
<span class="synPreProc">end</span>

is_adult = <span class="synIdentifier">Rrools</span>.describe <span class="synStatement">do</span>
  rule <span class="synStatement">do</span>
     on { <span class="synIdentifier">@user</span>.age &gt;= <span class="synConstant">20</span> }
    run { puts <span class="synSpecial">"#{@user.name}</span><span class="synConstant"> is an adult.</span><span class="synSpecial">"</span> }
  <span class="synStatement">end</span>

  rule <span class="synStatement">do</span>
     on { <span class="synIdentifier">@user</span>.age &lt; <span class="synConstant">20</span> }
    run { puts <span class="synSpecial">"#{@user.name}</span><span class="synConstant"> isn't an adult.</span><span class="synSpecial">"</span> }
  <span class="synStatement">end</span>
<span class="synStatement">end</span>

is_adult.call { <span class="synIdentifier">@user</span> = <span class="synIdentifier">User</span>.new(<span class="synSpecial">"</span><span class="synConstant">Bob</span><span class="synSpecial">"</span>, <span class="synConstant">21</span>) }
is_adult.call { <span class="synIdentifier">@user</span> = <span class="synIdentifier">User</span>.new(<span class="synSpecial">"</span><span class="synConstant">Amy</span><span class="synSpecial">"</span>, <span class="synConstant">17</span>) }
</pre>
]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>「大規模サービスの運用事例まとめ」に補記</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51792639.html" />
<modified>2009-02-03T18:11:43Z</modified> 
<issued>2009-02-04T02:42:07+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51792639</id> 
<summary type="text/plain">「大規模サービスの運用事例まとめ」をすべて読んでいる時間がない人はこの一枚のスライドだけでも見ておくといいかもしれない。

tech days Japan 2009 の萩原正義さんのセッション「クラウドコンピューティングのエッセンス」のスライド 33 枚目にこう書いてある。（ちな...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51792639.html">
<![CDATA[<p>「大規模サービスの運用事例まとめ」をすべて読んでいる時間がない人はこの一枚のスライドだけでも見ておくといいかもしれない。</p>

<p>tech days Japan 2009 の萩原正義さんのセッション「クラウドコンピューティングのエッセンス」のスライド 33 枚目にこう書いてある。（ちなみにこれはエンタープライズアプリケーションの話。）</p>

<ul>
<li>N-tier モデル</li>
<ul>
<li>密結合が条件</li>
<li>障害がないことが前提</li>
<li>ACID トランザクションが前提</li>
<li>データ層がボトルネック</li>
</ul>
</ul>

<ul>
<li>新しいアーキテクチャ</li>
<ul>
<li>Scale out</li>
<li>Key-value データ</li>
<li>非一貫性モデル</li>
<li>非同期</li>
<li>REST, AtomPub</li>
<li>関数型での処理</li>
</ul>
</ul>

<p>via <a href="http://www.microsoft.com/japan/powerpro/techdays/default.mspx">http://www.microsoft.com/japan/powerpro/techdays/default.mspx</a> の T1-401 のセッション。</p>

<p>それぞれについての詳しい解説は上記からダウンロードできる資料をどうぞ。</p>

<p>一転して Web に戻って、<a href="http://yohei-y.blogspot.com/2005/05/web-services-considered-harmful.html">Adam Bosworth に言わせると Web は simple, sloppy, standards, scalable</a> らしい。scale out のためのアーキテクチャもなんだかんだで同じ要素で構成されているというのがなんだかおもしろい。</p>

<p>ちなみに <a href="http://itc.conversationsnetwork.org/shows/detail571.html">Adam Bosworth の MySQL Users Conference(2005-04-21)</a> の内容はまだダウンロードして聞くことができる。</p>
]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>あわてて入会</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51791853.html" />
<modified>2009-08-04T17:44:30Z</modified> 
<issued>2009-02-03T01:50:40+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51791853</id> 
<summary type="text/plain">のんきなことを書いていたのですが、RubyNews を見てあわてて入会メールを出しました。

すいません、すいません＞＜

# ずっと気になりながら楽しく見ているのだけど、RubyNews て誰がやっているんだろう？
# コメントの抽出に意思を感じるから機械的に post してるわ...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51791853.html">
<![CDATA[<p>のんきなことを書いていたのですが、RubyNews を見てあわてて入会メールを出しました。</p>

<p>すいません、すいません＞＜</p>

<p># ずっと気になりながら楽しく見ているのだけど、<a href="http://d.hatena.ne.jp/rubynews/">RubyNews</a> て誰がやっているんだろう？<br />
# コメントの抽出に意思を感じるから機械的に post してるわけじゃないよねぇ。</p>]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>大規模サービスの運用事例まとめ</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51788873.html" />
<modified>2009-02-23T12:48:28Z</modified> 
<issued>2009-01-30T09:39:31+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51788873</id> 
<summary type="text/plain">ここ数年の大規模サービスのシステム運用について調べてみたので参照したページやファイル、本へのリンクをまとめておく。PDF へのリンクも多数含まれているのでご注意を。

時代が時代なら企業のノウハウとして隠されていたような情報がこれだけ公開してもらえているとい...</summary> 
<dc:subject>Web</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51788873.html">
<![CDATA[<p>ここ数年の大規模サービスのシステム運用について調べてみたので参照したページやファイル、本へのリンクをまとめておく。PDF へのリンクも多数含まれているのでご注意を。</p>

<p>時代が時代なら企業のノウハウとして隠されていたような情報がこれだけ公開してもらえているというのが非常にありがたい。公開してくれている各企業や公開してくれている人に感謝。</p>

<p>あとで気付いたが、Google や Facebook の事例も探しておけばよかった。Thrift とかあったのに。「こんな情報もあったよ」などあればぜひ教えてください。追記していきます。</p>

<ul class="list1" style="padding-left:16px;margin-left:16px"><li>youtube
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/stanaka/20070427/1177651323">http://d.hatena.ne.jp/stanaka/20070427/1177651323</a> </li></ul></li> 
<li>digg
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/stanaka/20070427/1177651323">http://d.hatena.ne.jp/stanaka/20070427/1177651323</a> </li></ul></li> 
<li>livedoor
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://labs.cybozu.co.jp/blog/takesako/2005/12/livedoor.html">http://labs.cybozu.co.jp/blog/takesako/2005/12/livedoor.html</a> </li> 
<li><a href="http://blog.livedoor.jp/techblog/archives/2008-02.html?p=3#20080212">livedoor Blog モバイル</a></li> 
<li><a href="http://blog.livedoor.jp/techblog/archives/64704429.html">livedoor プチプロフ</a></li> 
<li><a href="http://blog.livedoor.jp/techblog/archives/64943619.html">livedoor スパムフィルタの話</a></li> 
<li><a href="http://blog.livedoor.jp/techblog/archives/64698834.html">livedoor nowa</a></li> 
<li><a href="http://blog.livedoor.jp/techblog/paper/ldtech2006/">livedoor Reader</a></li></ul></li> 
<li>hatena
<ul style="padding-left:16px;margin-left:16px">
<li><a href="http://d.hatena.ne.jp/naoya/20061214/1166063145">はてなブックマーク</a> </li> 
<li><a href="http://d.hatena.ne.jp/naoya/20060404/1144121846">はてなブックマーク YAPC2006</a> </li> 
<li><a href="http://d.hatena.ne.jp/naoya/20081111/1226395400">http://d.hatena.ne.jp/naoya/20081111/1226395400</a> 
<ul class="list3" style="padding-left:16px;margin-left:16px"><li>補足 <a href="http://d.hatena.ne.jp/naoya/20081119/1227089814">http://d.hatena.ne.jp/naoya/20081119/1227089814</a></li></ul></li>
<li><a href="http://hatena.g.hatena.ne.jp/hatenatech/20050921/tech050921">http://hatena.g.hatena.ne.jp/hatenatech/20050921/tech050921</a></li>
</ul></li> 
<li>LiveJournal
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://www.danga.com/words/2004_mysqlcon/mysql-slides.pdf">Inside LiveJournal's Backend</a></li> 
<li><a href="http://www.danga.com/words/2007_yapc_asia/yapc-2007.pdf">LiveJournal: Behind the scenes scaling storytime</a></li> 
<li><a href="http://www.danga.com/words/2005_oscon/oscon-2005.pdf">LiveJournal's Backend</a></li></ul></li> 
<li>flickr
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://www.niallkennedy.com/blog/uploads/flickr_php.pdf">flickr architecture</a></li> 
<li><a href="http://www.ludicorp.com/flickr/zend-talk.ppt">flickr architecture2</a> 
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/koyachi/20051127/1133026272">邦訳</a> </li></ul></li> 
<li><a href="http://www.chikawatanabe.com/blog/2007/05/flickrcaterina_.html">flickr の歩み</a> </li> 
<li><a href="http://d.hatena.ne.jp/stanaka/20070427/1177651323">http://d.hatena.ne.jp/stanaka/20070427/1177651323</a> </li></ul></li> 
<li>twitter
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/kazuk_i/20081016/1224133476">http://d.hatena.ne.jp/kazuk_i/20081016/1224133476</a></li></ul></li> 
<li>ebay
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf">http://www.addsimplicity.com/downloads/eBaySDForum2006-11-29.pdf</a></li> 
<li><a href="http://www.softwaresummit.com/2007/speakers/presentations/PritchettArchitectingForLatency.pdf">http://www.softwaresummit.com/2007/speakers/presentations/PritchettArchitectingForLatency.pdf</a></li> 
<li><a href="http://www.addsimplicity.com/downloads/ScalingVectors.pdf">http://www.addsimplicity.com/downloads/ScalingVectors.pdf</a></li> 
<li><a href="http://www.infoq.com/jp/articles/ebay-scalability-best-practices">http://www.infoq.com/jp/articles/ebay-scalability-best-practices</a> </li> 
<li><a href="http://qconsf.com/sf2007/file?path=/QConSF2007/slides/public/RandyShoup_eBayArchPrinciples.pdf">http://qconsf.com/sf2007/file?path=/QConSF2007/slides/public/RandyShoup_eBayArchPrinciples.pdf</a></li> 
<li>M.Fowler <a href="http://capsctrl.que.jp/kdmsnr/wiki/bliki/?Transactionless">http://capsctrl.que.jp/kdmsnr/wiki/bliki/?Transactionless</a></li></ul></li> 
<li>del.icio.us
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/koyachi/20060211/1139644433">http://d.hatena.ne.jp/koyachi/20060211/1139644433</a> </li></ul></li> 
<li>Pathtraq
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://www.slideshare.net/kazuho/yapcasia-2008-tokyo-pathtraq-building-a-computationcentric-web-service?nocache=2766">http://www.slideshare.net/kazuho/yapcasia-2008-tokyo-pathtraq-building-a-computationcentric-web-service?nocache=2766</a> </li></ul></li> 
<li>Fotolog
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://highscalability.com/bunch-great-strategies-using-memcached-and-mysql-better-together">http://highscalability.com/bunch-great-strategies-using-memcached-and-mysql-better-together</a> 
<ul class="list3" style="padding-left:16px;margin-left:16px"><li>一部の邦訳 <a href="http://d.hatena.ne.jp/kazuk_i/20081021/1224564880">http://d.hatena.ne.jp/kazuk_i/20081021/1224564880</a></li></ul></li></ul></li> 
<li>mixi
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://techtarget.itmedia.co.jp/tt/news/0709/12/news01.html">http://techtarget.itmedia.co.jp/tt/news/0709/12/news01.html</a></li> 
<li><a href="http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/">http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/</a></li> 
<li><a href="http://paranoids.sakura.ne.jp/kaworu/2007-08-08-1.html">http://paranoids.sakura.ne.jp/kaworu/2007-08-08-1.html</a> </li> 
<li><a href="http://stuff.harperreed.org/misc/mysql/mixi_update.pdf">http://stuff.harperreed.org/misc/mysql/mixi_update.pdf</a> </li> 
<li><a href="http://hatena.g.hatena.ne.jp/hatenatech/20050921/tech050921">http://hatena.g.hatena.ne.jp/hatenatech/20050921/tech050921</a></li>
<li>年末年始対策
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=272">http://alpha.mixi.co.jp/blog/?p=272</a></li></ul></li> 
<li>画像配信 
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=204">http://alpha.mixi.co.jp/blog/?p=204</a></li> 
<li><a href="http://alpha.mixi.co.jp/blog/?p=214">http://alpha.mixi.co.jp/blog/?p=214</a></li></ul></li> 
<li>memcached 
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://gihyo.jp/dev/feature/01/memcached/0005">http://gihyo.jp/dev/feature/01/memcached/0005</a></li> 
<li><a href="http://alpha.mixi.co.jp/blog/?p=259">http://alpha.mixi.co.jp/blog/?p=259</a></li> 
<li><a href="http://alpha.mixi.co.jp/blog/?p=169">http://alpha.mixi.co.jp/blog/?p=169</a></li></ul></li> 
<li>かんたん友人検索
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=219">http://alpha.mixi.co.jp/blog/?p=219</a></li></ul></li> 
<li>エコー
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=195">http://alpha.mixi.co.jp/blog/?p=195</a></li></ul></li> 
<li>RSS クローラ
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=123">http://alpha.mixi.co.jp/blog/?p=123</a></li> 
<li><a href="http://alpha.mixi.co.jp/blog/?p=169">http://alpha.mixi.co.jp/blog/?p=169</a></li></ul></li> 
<li>最終ログイン時刻
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=166">http://alpha.mixi.co.jp/blog/?p=166</a></li></ul></li> 
<li>コミュニティブラウザ
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=135">http://alpha.mixi.co.jp/blog/?p=135</a></li></ul></li> 
<li>日記キーワードランキング
<ul class="list3" style="padding-left:16px;margin-left:16px"><li><a href="http://alpha.mixi.co.jp/blog/?p=25">http://alpha.mixi.co.jp/blog/?p=25</a></li></ul></li></ul></li> 
<li>GREE
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://www.php.gr.jp/seminar/20070901/data/phpcon-2007-dist.pdf">http://www.php.gr.jp/seminar/20070901/data/phpcon-2007-dist.pdf</a></li></ul></li>
<li>モバオク</li>
<ul style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/tokiharu/20070406/1175870857">http://d.hatena.ne.jp/tokiharu/20070406/1175870857</a></li></ul>
<li>クックパッド</li>
<ul style="padding-left:16px;margin-left:16px">
<li><a href="http://www.sssg.org/blogs/naoya/archives/1126">http://www.sssg.org/blogs/naoya/archives/1126</a></li>
</ul>
</ul> 


<hr class="full_hr" /> 
<p>オマケ</p> 
<p>あちこちの構成の情報</p> 
<ul class="list1" style="padding-left:16px;margin-left:16px"><li><a href="http://d.hatena.ne.jp/stanaka/20080421/1208749897">http://d.hatena.ne.jp/stanaka/20080421/1208749897</a></li></ul> 


<p>はてなと KLab(DSAS) の知恵が書いてある定番書。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774135666/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51uK4ACymiL._SL160_.jpg" alt="[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESS plusシリーズ)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774135666/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESS plusシリーズ)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4774135666/nemutagenapot-22/ref=nosim/" title="[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESS plusシリーズ)" target="_blank">amazlet</a> at 09.01.30</div></div><div class="amazlet-detail">安井 真伸 横川 和哉 ひろせ まさあき 伊藤 直也 田中 慎司 勝見 祐己 <br />技術評論社 <br />売り上げランキング: 1160<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774135666/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<p>こちらは Yahoo! のパフォーマンス担当。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311361X/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51hIDIWHmYL._SL160_.jpg" alt="ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311361X/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/487311361X/nemutagenapot-22/ref=nosim/" title="ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール" target="_blank">amazlet</a> at 09.01.30</div></div><div class="amazlet-detail">Steve Souders スティーブ サウダーズ <br />オライリージャパン <br />売り上げランキング: 1469<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/487311361X/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<p>これは Flickr の知恵が。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113113/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/518TeUi%2BOwL._SL160_.jpg" alt="スケーラブルWebサイト" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113113/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">スケーラブルWebサイト</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4873113113/nemutagenapot-22/ref=nosim/" title="スケーラブルWebサイト" target="_blank">amazlet</a> at 09.01.30</div></div><div class="amazlet-detail">Cal Henderson <br />オライリー・ジャパン <br />売り上げランキング: 90613<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113113/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>


<p>ちと古いけど、Livedoor Reader とはてなブックマークの事例が。</p>


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844322893/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51FB39GH11L._SL160_.jpg" alt="まるごとPerl! Vol.1" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844322893/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">まるごとPerl! Vol.1</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4844322893/nemutagenapot-22/ref=nosim/" title="まるごとPerl! Vol.1" target="_blank">amazlet</a> at 09.01.30</div></div><div class="amazlet-detail">小飼 弾 宮川 達彦 伊藤 直也 川合 孝典 水野 貴明 <br />インプレスコミュニケーションズ <br />売り上げランキング: 153077<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844322893/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>とか言った舌の根もかわかぬうちに。</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51788082.html" />
<modified>2009-01-28T18:29:39Z</modified> 
<issued>2009-01-29T03:29:39+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51788082</id> 
<summary type="text/plain">Amazon のこのレビューが気になって、この本買うか迷っていたり（笑）下で言ったこと台無しだな。


最近、マッキンゼーなど戦略コンサルタント出身者が肩書きを売り文句に軽薄短小な問題解決方法に関する本を出版していたが、ツールの解説に留まっている感があった。 
...</summary> 
<dc:subject>business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51788082.html">
<![CDATA[<p>Amazon のこのレビューが気になって、この本買うか迷っていたり（笑）下で言ったこと台無しだな。</p>

<blockquote>
<p>最近、マッキンゼーなど戦略コンサルタント出身者が肩書きを売り文句に軽薄短小な問題解決方法に関する本を出版していたが、ツールの解説に留まっている感があった。</p> 
<p>本書は従来の戦略本になかったツールも含めて多くのツールについて、その活用法、難易度、メリット・デメリットについて出し惜しみせずに丁寧に解説している。さらに問題解決に関する思考様式も大変わかりやすく解説している。本書で得られる力は経営に関する問題解決力のみならず日常の様々な面で力を発揮するはずだ。 </p>

<p>私には元マッキンゼーの大前研一氏による企業参謀以来のインパクトのある本だった。</p> 
<p>既に手元にある下巻を読むのが楽しみであると同時に、本書を繰り返し読んで血と肉にしたい。 </p>
</blockquote>

<p>レビューコメントは上巻のほうについていたもの。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256026/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/418ww4cRfDL._SL160_.jpg" alt="問題解決の全体観 上巻 ハード思考編" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256026/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">問題解決の全体観 上巻 ハード思考編</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4904256026/nemutagenapot-22/ref=nosim/" title="問題解決の全体観 上巻 ハード思考編" target="_blank">amazlet</a> at 09.01.29</div></div><div class="amazlet-detail">中川 邦夫 <br />コンテンツ・ファクトリー <br />売り上げランキング: 1531<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-5.gif" alt="4.5" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 初学者に薦めたい本<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 問題解決一般としてよい<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 読んで実践すれば役に立つ<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 読むだけで血や肉になりそう<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 問題解決に関する名著誕生<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256026/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256034/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41LmvcZcrIL._SL160_.jpg" alt="問題解決の全体観 下巻 ソフト思考編" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256034/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">問題解決の全体観 下巻 ソフト思考編</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4904256034/nemutagenapot-22/ref=nosim/" title="問題解決の全体観 下巻 ソフト思考編" target="_blank">amazlet</a> at 09.01.29</div></div><div class="amazlet-detail">中川 邦夫 <br />コンテンツ・ファクトリー <br />売り上げランキング: 2728<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> 好みが分かれる<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 使い慣れることが必要<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 目からウロコ<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 「問題解決に取組む心構え」としてとても参考になっています<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4904256034/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>ブルーオーシャン戦略はレッドオーシャンの反対！。。。じゃないよ</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51788081.html" />
<modified>2009-05-10T19:51:00Z</modified> 
<issued>2009-01-29T03:23:10+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51788081</id> 
<summary type="text/plain">あと、これは蛇足だけどブルーオーシャン戦略の紹介についてはウソに近いので信じないように。まぁ、あのエントリだけじゃなく Web で情報を読むとたいていポイントがずれてます。「戦略」と付いているのをなぜか無視しようとするものが多すぎます。

本を読めば一発でわか...</summary> 
<dc:subject>business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51788081.html">
<![CDATA[<p>あと、これは蛇足だけどブルーオーシャン戦略の紹介についてはウソに近いので信じないように。まぁ、あのエントリだけじゃなく Web で情報を読むとたいていポイントがずれてます。「戦略」と付いているのをなぜか無視しようとするものが多すぎます。</p>

<p>本を読めば一発でわかることですが、「ブルーオーシャンを行け！」なんて言葉に価値はないんです。そんなの最初から誰でもわかっている。そこに顧客にとっての新しい価値軸を生み出すためのツールとフレームワークを紹介している（そしてそこに戦略的に思考するための仕組みが入っている）のがすごいんです。（チャン・キムのチームはそのための体系だった分析と立案のプロセスも持っているはず。だからあの本は元からできる人はあの本でもやれるけど、できない人は読んでもできずにコンサルを依頼するというそういう本です。）</p>

<p>ブルーオーシャン戦略だって、けっきょくは魅力的で説得力をもった戦略キャンバスを描くことにほとんどの価値があるわけで、じゃ、その戦略キャンバスを描くための分析はどうするの？顧客を魅了する価値曲線はどういう風に見つけるの？と考えて、そこをある程度ロジカルに系統だててやろうとするとけっきょく必要になるのは kaz_ataka さんが言っていることがすべてなんじゃないの？ってことです。</p>

<p>Web でブルーオーシャン戦略の話を見ると、「ブルーオーシャンがあります。レッドオーシャンというものがあります。ブルーオーシャンを行きましょう。」というのをあたかもブルーオーシャン戦略かのように言っているものが多く、皆本当にチャン・キムの本を読んだのか不思議になります。</p>

<p>本としての「ブルーオーシャン戦略」は実はけっこうチャン・キムのそれまでの主張の総まとめみたいなものになっていて、Ajax のように良い名前をつけた瞬間爆発的に有名になった観があります。なんせ1999年にすでに「バリュー・ブレークスルー」「バリュー・イノベーション」と呼んで新市場を創造せよと言い「バリュー・ブレークスルー・マーケティング」という論文を HBR に発表していたわけです。書籍「ブルーオーシャン戦略」に出てくる「戦略キャンバス」も「ティッピング・ポイント・リーダーシップ」も自身の過去の論文を元にした内容です。</p>

<p>個人的には HBR で読んだ「<a href="http://www.bookpark.ne.jp/cm/contentdetail.asp?content_id=DHBL-HB200312-007">ティッピング・ポイント・リーダーシップ</a>」が忘れられません。ソフトウェア開発をよくするために組織を変えようとやってきた発想のベースはほとんどこれだったりします。達人プログラマーや XP を読んだのはこれよりも後、実際に組織を変えようとしていく中ででした。</p>

<p>ということで（？）、チャン・キムのすばらしい書籍を読みましょう。という話でした。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4270000708/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51QD4635Z6L._SL160_.jpg" alt="ブルー・オーシャン戦略 競争のない世界を創造する (Harvard business school press)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4270000708/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">ブルー・オーシャン戦略 競争のない世界を創造する (Harvard business school press)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4270000708/nemutagenapot-22/ref=nosim/" title="ブルー・オーシャン戦略 競争のない世界を創造する (Harvard business school press)" target="_blank">amazlet</a> at 09.01.29</div></div><div class="amazlet-detail">W・チャン・キム レネ・モボルニュ <br />ランダムハウス講談社 <br />売り上げランキング: 371<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4270000708/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>フレームワークについて読む暇あったら、このエントリを100回読むべき</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51788078.html" />
<modified>2009-01-28T18:14:30Z</modified> 
<issued>2009-01-29T03:14:24+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51788078</id> 
<summary type="text/plain">はてブをちら見してあれだったんで、書いておきます。タイトルは釣りタイトルっぽいですが、そんなこともなくまったくもって正直な気持ちです。

圧倒的に生産性の高い人（サイエンティスト）の研究スタイル

フレームワークに踊らされるヒマがあったら、このエントリを...</summary> 
<dc:subject>business</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51788078.html">
<![CDATA[<p>はてブをちら見してあれだったんで、書いておきます。タイトルは釣りタイトルっぽいですが、そんなこともなくまったくもって正直な気持ちです。</p>

<p><a href="http://d.hatena.ne.jp/kaz_ataka/20081018/1224287687">圧倒的に生産性の高い人（サイエンティスト）の研究スタイル</a></p>

<p>フレームワークに踊らされるヒマがあったら、このエントリを繰り返し100回でも200回でも読んで実践してみるべきです。（こちらも1,000オーバーのブクマが付いてはいますね。）</p>

<p>それだけの価値がこのエントリにはあります。</p>

<p>どうしてもフレームワークについて読みたいなら、大前研一さんの「企業参謀」「続企業参謀」をやっぱり100回でも200回でも読んで、その後で「マッキンゼー現代の経営戦略」を読んで衝撃を受けて、そこで「企業参謀」に戻ってみたら衝撃を受けたはずのことがすべてその何べんも読んだはずのその本に書いてあったことに気付いてぶっとんでみればいいと思います。</p>

<p>最近では斉藤嘉則さんの本のほうが人気のようですが、本気で「考えること」のやり方と姿勢について書いてあるのは企業参謀だけです。表面上はツールもたくさん紹介されるので、そこにだまされずに読み込んでください。道に迷いそうになったら、kaz_ataka さんのエントリに戻って読み返せばよいと思います。最高のガイドラインです。（技術書でいえば、リファクタリングをツール集として読むか設計について考える本として読み解こうとするかの違いとでも言えばいいでしょうか。）</p>

<p>で、やっぱりイディオムとして知っておきたいなら最後に好きなだけフレームワークの紹介を読めばいいと思うのです。そういう本がいくらでも出てますし。（とはいえ、そもそもありものを使うのがフレームワークだというのに違和感があります。漠然と考えようとすると答えに向かわずに際限なく可能性を検討しちゃうから、そこを答えに向けて収束させていくために補助線を引くのがフレームワークであって、別に誰かが考えた思考の枠組みを使うのがフレームワークじゃないと思ってます。結果として選んだ道具がよく知られたフレームワークだった、というのは当然いくらでもありますが。）</p>

<p>最後に同じく kaz_ataka さんのブログから「<a href="http://d.hatena.ne.jp/kaz_ataka/20081223/1229991151">噛みしめることを大切にしよう</a>」を紹介しておきます。上で紹介したエントリと両輪にして「考える」ということについての指針にしています。</p>

<p># この kaz_ataka さんの「<a href="http://d.hatena.ne.jp/kaz_ataka/">ニューロサイエンスとマーケティングの間</a>」と出会えたことは 2008 年の最高に幸せだったことの一つで、ここで紹介した話に限らずマーケティングの話についても過去のエントリを探してむさぼるように読んでしまった。言葉で言い表せないほどの感謝をしている。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836307/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41-aTq1lv%2BL._SL160_.jpg" alt="企業参謀 (講談社文庫)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836307/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">企業参謀 (講談社文庫)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4061836307/nemutagenapot-22/ref=nosim/" title="企業参謀 (講談社文庫)" target="_blank">amazlet</a> at 09.01.29</div></div><div class="amazlet-detail">大前 研一 <br />講談社 <br />売り上げランキング: 1258<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836307/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836773/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41XRAQXEZDL._SL160_.jpg" alt="続・企業参謀 (講談社文庫)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836773/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">続・企業参謀 (講談社文庫)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4061836773/nemutagenapot-22/ref=nosim/" title="続・企業参謀 (講談社文庫)" target="_blank">amazlet</a> at 09.01.29</div></div><div class="amazlet-detail">大前 研一 <br />講談社 <br />売り上げランキング: 3974<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4061836773/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>Ruby 1.9 の情報募集中だそうです</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51787391.html" />
<modified>2009-01-28T16:06:31Z</modified> 
<issued>2009-01-28T03:22:05+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51787391</id> 
<summary type="text/plain">ruby-list から。


今度，Ruby 1.9.1 がリリースされますが，そのころ，次の Rubyist Magazine
をリリースできるよう，作業中です．

　で，Ruby 1.9 の紹介を網羅的に書くのは大変なので，Ruby 1.9 を紹介した記
事を紹介する記事を書こうと考えています．というわ...</summary> 
<dc:subject>Ruby</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51787391.html">
<![CDATA[<p>ruby-list から。</p>

<blockquote>
<p>今度，Ruby 1.9.1 がリリースされますが，そのころ，次の Rubyist Magazine
をリリースできるよう，作業中です．</p>

<p>　で，Ruby 1.9 の紹介を網羅的に書くのは大変なので，Ruby 1.9 を紹介した記
事を紹介する記事を書こうと考えています．というわけで，以下のような心当た
りがあったら，教えて下さい．どんなに短いモノでも歓迎します．</p>

<p>
・Ruby 1.9 の記事を読んだことがある人（そのURL）<br />
・Ruby 1.9 の記事を書いたことがある人（そのURL）<br />
・Ruby 1.9 の記事を書いてやろう，という人（その内容とURL）<br />
</p>

<p>　日本Rubyの会のWikiにページを作りました．こちらまで情報をお寄せ頂ければ
と思います．</p>

<p>　<a href="http://jp.rubyist.net/?1.9+Links">http://jp.rubyist.net/?1.9+Links</a></p>

<p><a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45818">http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45818</a></p>
</blockquote>

<p>これならまったくハカーじゃない人でも協力できますね。</p>

<p>てことで、いくつか追加してきました。自分の delicious で ruby+1.9 しただけの手抜きですがそれでもけっこうありました。</p>

<p># あ、そういえば日本Rubyの会会員ではないなー。編集した後で気付いたよ。。公開されているんだから編集してしまってもよかったんだろう。うん。</p>]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>InfoQ の &quot;EventMachine: Fast and Scalable Event-Driven I/O Framework&quot; を訳してみた</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51787384.html" />
<modified>2009-01-27T18:01:49Z</modified> 
<issued>2009-01-28T03:01:49+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51787384</id> 
<summary type="text/plain">InfoQ の &quot;EventMachine: Fast and Scalable Event-Driven I/O Framework&quot; には「EventMachine: 高速でスケーラブルなEvent-Driven I/Oフレームワーク」という公式な邦訳があるんだが、これが何度読んでもよく意味がわからない。

もちろん、ぼく自身がイベントドリブンと...</summary> 
<dc:subject></dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51787384.html">
<![CDATA[<p>InfoQ の "<a href="http://www.infoq.com/news/2008/06/eventmachine">EventMachine: Fast and Scalable Event-Driven I/O Framework</a>" には「<a href="http://www.infoq.com/jp/news/2008/07/eventmachine">EventMachine: 高速でスケーラブルなEvent-Driven I/Oフレームワーク</a>」という公式な邦訳があるんだが、これが何度読んでもよく意味がわからない。</p>

<p>もちろん、ぼく自身がイベントドリブンというものをよく理解していないという問題が大きな壁になっているのは間違いない。でも、そもそもよく理解していないから読みたいわけで、困ってしまった。EventMachine の開発者 Francis Cianfrocca のインタビューもあり、内容はよさそうな気がする。</p>

<p>で、何度か読むうちに「これは原文あたったほうが早いんじゃないか」と気付き、ちまちまと理解を進めながら訳したので公開しておく。</p>

<p>全文訳は公式のものがあるので開発者インタビューを中心に重要なところをまとめる。</p>

<p>誤りのご指摘大歓迎。特に技術的な意味での妥当性に不安があるので「これ、おかしくね？」とか言ってもらえると大変助かります。</p>

<hr />

<blockquote>
The key technical reason to use EM is because it enables a programming model that avoids threads. Threaded programming is of course a very well-known model, especially for network servers, but it has some very deep problems. There is a relatively small class of problems which are a good match for the threaded model. Network servers happen to be one of them, because it's usually possible to construct a non-overlapping working set for each request. But of course it's very difficult to get a threaded program 100% correct if it has any shared state between threads, or if it relies on operations to be properly sequenced across threads. And in Ruby, there's the additional problem that threading is very expensive.
</blockquote>

<blockquote>
EM を使う技術的な理由のポイントは、スレッドプログラミングを避けられるという点です。もちろんスレッドプログラミングはよく知られたモデルです。特にネットワークサーバーにおいてはそうでしょう。ですが、いくつかの非常に深い問題もはらんでいます。スレッドモデルに適した比較的小さな課題というのもあります。通常リクエスト間での状態の共有を必要としないネットワークサーバーはその一例と言えるでしょう。しかし、ひとたびスレッド間での状態の共有を必要とするプログラムを書くとなったり、スレッド間で一連の手続きを正しい順に実行しなければならなくなったりすると、100%正しいプログラムを書くのは非常に困難になります。そして Ruby にはスレッドが高価だという問題もあります。
</blockquote>

<p>てなとこかな。</p>

<blockquote>
A lot has been written about the fact that event-driven programs are not theoretically any faster than threaded ones, and that is true. But in practice, I think the event-driven model is easier to work with, if you want to get to extremely high scalability and performance while still ensuring maximum robustness. I write programs that have to run for months or years without crashing, leaking memory, or exhibiting any kind of lumpy performance, so in practice, event-driven programming works better. Now, here's the problem with event-driven programming: you have to write "backwards." A threaded model stores your program state (inefficiently) in local variables on a runtime stack. In EM you have to do that yourself, which is very unintuitive to programmers who are used to threads. This is why I'm interested in fibers, because it opens the possibility of writing what looks to the programmer like blocking I/O, but still is evented and uses no threads.
</blockquote>

<p>邦訳の最後がいまいちよくわからんので原文に当たる。</p>

<blockquote>
イベントドリブンプログラミングの問題も紹介しましょう。あなたは逆向きにプログラミングをしなければなりません。スレッドモデルでは状態を(効果的ではないのですが)ローカル変数に入れてスタックに積めます。EM ではこれを自分自身で行う必要があります。これはスレッドに慣れたプログラマにとっては直感的でなく感じます。そして、この点が私が Fiber に興味をひかれる理由でもあります。スレッドを使わずイベントドリブンなままで、まるでブロッキング I/O のようにプログラムを書くことができる可能性が開けるからです。
</blockquote>

<p>か。ほうほう。でも、原文読んでも "backwards" の意味がよくわからない。スレッドモデルに対し、backwards なの？</p>

<p>でありがたいことに具体例に続く。(でも正直何が backwards かはいまだによくわかっていない。。)</p>

<blockquote>
Think of an HTTP server. With threads, you simply read the socket and block until all the data has been retrieved from the remote peer. With events, you get the data as soon as it appears, with no waiting and no scheduling overhead-But it may not be complete! Your program has to detect that it hasn't yet received enough data to interpret the request, and it needs to store the partial data. But the next event that your program handles will possibly contain data for a different connection, so you have to keep all of this straight. The threading abstraction is a very heavyweight way of keeping those working sets separate, so it makes the programming task arguably more intuitive. But the evented model is not really so hard to learn. Nevertheless, I think this is the biggest barrier to wider use of event-driven programming.
</blockquote>


<p>スレッドモデルだと、</p>

<blockquote>With threads, you simply read the socket and block until all the data has been retrieved from the remote peer.</blockquote>

<p>単にソケットを読み込んで、リモートから送られてきたデータがすべてそろうまで待たせれば（ブロックすれば）いい。ってこと。</p>

<p>イベントだと、</p>

<blockquote>With events, you get the data as soon as it appears, with no waiting and no scheduling overhead-But it may not be complete!</blockquote>


<p>データが送られてきた端から即座に受け取る。待たされることはないし、スケジューリングのオーバーヘッドもない。でも、データはすべてそろっていないかもしれない（笑）</p>

<p>なんとも、わかりやすい。</p>

<p>イベントモデルの解説は続き、</p>

<blockquote>
Your program has to detect that it hasn't yet received enough data to interpret the request, and it needs to store the partial data. But the next event that your program handles will possibly contain data for a different connection, so you have to keep all of this straight.
</blockquote>

<p>ふむふむ。</p>

<p>イベントモデルなアプリケーションがしないといけないのは、</p>

<ul><li>解釈して実行するのに十分なデータが送られてきたかどうかの判断</li></ul>

<p>と</p>

<ul><li>不十分であれば送られてきた部分的なデータを貯めておくこと</li>
</ul>

<p>なのか。</p>

<p>一方で、次のイベントとして処理されるのは別のコネクション（別もののリクエスト）からのものでありえるので、これらを続けて実行できるようにしておく必要がある、と。</p>

<p>で、</p>

<blockquote>
The threading abstraction is a very heavyweight way of keeping those working sets separate</blockquote>

<p>
スレッドモデルはこのコネクションごとに状態を管理しておくための非常に重たいやり方であり、その恩恵としてプログラミングがより直感的になる。</p>

<blockquote>
But the evented model is not really so hard to learn. Nevertheless, I think this is the biggest barrier to wider use of event-driven programming.</blockquote>

<p>でも、イベントモデルを学ぶのもそんなにむずかしいわけじゃないよ。まぁ、それはともかく、これが EM なプログラミングが広く使われるにあたっての一番の壁だと思ってる。</p>

<blockquote>
Now one of the things that EM does is to wrap up the standard protocols so that all of this is largely hidden from the programmer. Unlike low-level libraries like libev, which provide only a reactor core, EM seeks to provide robust implementations for all the standard network protocols, for example, email. EM includes a well-written handler for both the client and server side of SMTP. So an EM programmer only has to write code to handle events associated with complete email messages. There's no need to touch the underlying protocol. But still you have all the other benefits of the evented model (high speed, high scalability).
</blockquote>

<p>EM のやっていることとして Email の例があるので、具体的なところだけ訳す。</p>

<blockquote>
EM includes a well-written handler for both the client and server side of SMTP. So an EM programmer only has to write code to handle events associated with complete email messages. There's no need to touch the underlying protocol. But still you have all the other benefits of the evented model (high speed, high scalability).
</blockquote>

<p>EM は SMTP プロトコルのためのよくできたサーバとクライアントのハンドラーを持っているので、EM プログラマは Eメールの受信に関するイベントを扱うだけでよくて、SMTP についてはケアする必要がない。そして、それでも（高速でスケーラブルだという）イベントモデルによる恩恵はすべて得ることができる。</p>

<p>というような意味か。</p>

<p>ノンブロッキング IO だという利点はわかるんだけど、どういった利用があるのかがイメージついていない。Thin とかで実装を見たほうがイメージしやすいのかなぁ。</p>

<p>あとはこの辺読んで基礎をちゃんと学べってところですね。はい。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/213B9PVJD1L._SL160_.jpg" alt="UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4894712059/nemutagenapot-22/ref=nosim/" title="UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI" target="_blank">amazlet</a> at 09.01.28</div></div><div class="amazlet-detail">W.リチャード スティーヴンス <br />ピアソンエデュケーション <br />売り上げランキング: 74470<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/nemutagenapot-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>

<entry>
<title>レベル1分散でも DB で JOIN させる方法</title> 
<link rel="alternate" type="text/html" href="http://blog.hacklife.net/archives/51786357.html" />
<modified>2009-01-26T18:18:59Z</modified> 
<issued>2009-01-26T21:41:42+09:00</issued> 
<id>tag:blog.livedoor.jp,2009:zep716.51786357</id> 
<summary type="text/plain">いわゆる mixi のレベル1分散というものがあって、「join は使わない(方がいいケースもある)」というような話も出てきたりするんですが、join で解決できる問題はアプリケーションコード書くよりも DB にやらせたかったりします。

一方でそれぞれのテーブルは別の DB 上に...</summary> 
<dc:subject>programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://blog.hacklife.net/archives/51786357.html">
<![CDATA[<p><a href="http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/">いわゆる mixi のレベル1分散</a>というものがあって、「<a href="http://d.hatena.ne.jp/naoya/20081119/1227089814">join は使わない(方がいいケースもある)</a>」というような話も出てきたりするんですが、join で解決できる問題はアプリケーションコード書くよりも DB にやらせたかったりします。</p>

<p>一方でそれぞれのテーブルは別の DB 上に載っているので、ふつうに join するわけにはいきません。</p>

<p>てことで、無理やり join しようとやってみた手。</p>

<p>まず、db_a に載っている table_a の必要なレコードを取得します。</p>

<p>んで、そいつの1レコードにつき一つの select 句をアプリケーションで生成します。</p>

<class="code"><pre>
select
  v1 as name1
, v2 as name2
, v3 as name3
, v4 as name4 
</pre></class>

<p>そしてできあがった select 句を union all.</p>

<p>ポータブルな即席 view のできあがり。</p>

<p>このできあがったものを一つのテーブルとみなして join の対象とし db_b に載っている table_b, ... たちとのクエリを生成します。</p>

<p>これで二つの DB にまたがった似非 join が使えます。アプリケーションで妙なループを連発してコードの可読性を下げるよりもマシに使えるような気がするんですが、どうでしょうか？</p>

<p>発行される SQL クエリのイメージはこんなかんじ。（実際はアプリケーションの中でもう少し見通しがよいようにまとめたり整理したりしますが。）</p>

<pre>
select
  *
from
  (select v1 as name1, v2 as name2, v3 as name3, v4 as name4
  union all
  select v5 as name1, v6 as name2, v7 as name3, v8 as name4
  union all
  select v9 as name1, v10 as name2, v11 as name3, v12 as name4
  union all
   ...
  ) t1
  join
  table_b t2
    on (t1.name1 = t2.name1)
  join
  table_c
    on (t1.name3 = t3.name3)
where
  ...
</pre>

<p>もちろん、uninon all で作ったほうは index も何もあったもんではないので、そちらはそれなりにレコード数が限られていないと使い物にならないと思います。</p>

<p>案外パフォーマンスもまともに出る（インラインで作ってる区分テーブルみたいなもんなんで）ので、下手なアプリケーション join よりも使えるんじゃないかなーなどと思ってたりします。</p>


]]> 
</content>
<author>
<name>zep716</name> 
</author>
</entry>
</feed>
