大規模サービスの運用事例まとめ

by tanabe on January 30, 2009

ここ数年の大規模サービスのシステム運用について調べてみたので参照したページやファイル、本へのリンクをまとめておく。PDF へのリンクも多数含まれているのでご注意を。

時代が時代なら企業のノウハウとして隠されていたような情報がこれだけ公開してもらえているというのが非常にありがたい。公開してくれている各企業や公開してくれている人に感謝。

あとで気付いたが、Google や Facebook の事例も探しておけばよかった。Thrift とかあったのに。「こんな情報もあったよ」などあればぜひ教えてください。追記していきます。


オマケ

あちこちの構成の情報

はてなと KLab(DSAS) の知恵が書いてある定番書。

[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESS plusシリーズ)
安井 真伸 横川 和哉 ひろせ まさあき 伊藤 直也 田中 慎司 勝見 祐己
技術評論社
売り上げランキング: 1160

こちらは Yahoo! のパフォーマンス担当。

ハイパフォーマンスWebサイト ―高速サイトを実現する14のルール
Steve Souders スティーブ サウダーズ
オライリージャパン
売り上げランキング: 1469

これは Flickr の知恵が。

スケーラブルWebサイト
Cal Henderson
オライリー・ジャパン
売り上げランキング: 90613

ちと古いけど、Livedoor Reader とはてなブックマークの事例が。

まるごとPerl! Vol.1
まるごとPerl! Vol.1
posted with amazlet at 09.01.30
小飼 弾 宮川 達彦 伊藤 直也 川合 孝典 水野 貴明
インプレスコミュニケーションズ
売り上げランキング: 153077
  

とか言った舌の根もかわかぬうちに。

by tanabe on January 29, 2009

Amazon のこのレビューが気になって、この本買うか迷っていたり(笑)下で言ったこと台無しだな。

最近、マッキンゼーなど戦略コンサルタント出身者が肩書きを売り文句に軽薄短小な問題解決方法に関する本を出版していたが、ツールの解説に留まっている感があった。

本書は従来の戦略本になかったツールも含めて多くのツールについて、その活用法、難易度、メリット・デメリットについて出し惜しみせずに丁寧に解説している。さらに問題解決に関する思考様式も大変わかりやすく解説している。本書で得られる力は経営に関する問題解決力のみならず日常の様々な面で力を発揮するはずだ。

私には元マッキンゼーの大前研一氏による企業参謀以来のインパクトのある本だった。

既に手元にある下巻を読むのが楽しみであると同時に、本書を繰り返し読んで血と肉にしたい。

レビューコメントは上巻のほうについていたもの。

問題解決の全体観 上巻 ハード思考編
中川 邦夫
コンテンツ・ファクトリー
売り上げランキング: 1531
おすすめ度の平均: 4.5
4 初学者に薦めたい本
3 問題解決一般としてよい
5 読んで実践すれば役に立つ
4 読むだけで血や肉になりそう
5 問題解決に関する名著誕生
問題解決の全体観 下巻 ソフト思考編
中川 邦夫
コンテンツ・ファクトリー
売り上げランキング: 2728
おすすめ度の平均: 5.0
4 好みが分かれる
5 使い慣れることが必要
5 目からウロコ
5 「問題解決に取組む心構え」としてとても参考になっています
  

ブルーオーシャン戦略はレッドオーシャンの反対!。。。じゃないよ

by tanabe on January 29, 2009

あと、これは蛇足だけどブルーオーシャン戦略の紹介についてはウソに近いので信じないように。まぁ、あのエントリだけじゃなく Web で情報を読むとたいていポイントがずれてます。「戦略」と付いているのをなぜか無視しようとするものが多すぎます。

本を読めば一発でわかることですが、「ブルーオーシャンを行け!」なんて言葉に価値はないんです。そんなの最初から誰でもわかっている。そこに顧客にとっての新しい価値軸を生み出すためのツールとフレームワークを紹介している(そしてそこに戦略的に思考するための仕組みが入っている)のがすごいんです。(チャン・キムのチームはそのための体系だった分析と立案のプロセスも持っているはず。だからあの本は元からできる人はあの本でもやれるけど、できない人は読んでもできずにコンサルを依頼するというそういう本です。)

ブルーオーシャン戦略だって、けっきょくは魅力的で説得力をもった戦略キャンバスを描くことにほとんどの価値があるわけで、じゃ、その戦略キャンバスを描くための分析はどうするの?顧客を魅了する価値曲線はどういう風に見つけるの?と考えて、そこをある程度ロジカルに系統だててやろうとするとけっきょく必要になるのは kaz_ataka さんが言っていることがすべてなんじゃないの?ってことです。

Web でブルーオーシャン戦略の話を見ると、「ブルーオーシャンがあります。レッドオーシャンというものがあります。ブルーオーシャンを行きましょう。」というのをあたかもブルーオーシャン戦略かのように言っているものが多く、皆本当にチャン・キムの本を読んだのか不思議になります。

本としての「ブルーオーシャン戦略」は実はけっこうチャン・キムのそれまでの主張の総まとめみたいなものになっていて、Ajax のように良い名前をつけた瞬間爆発的に有名になった観があります。なんせ1999年にすでに「バリュー・ブレークスルー」「バリュー・イノベーション」と呼んで新市場を創造せよと言い「バリュー・ブレークスルー・マーケティング」という論文を HBR に発表していたわけです。書籍「ブルーオーシャン戦略」に出てくる「戦略キャンバス」も「ティッピング・ポイント・リーダーシップ」も自身の過去の論文を元にした内容です。

個人的には HBR で読んだ「ティッピング・ポイント・リーダーシップ」が忘れられません。ソフトウェア開発をよくするために組織を変えようとやってきた発想のベースはほとんどこれだったりします。達人プログラマーや XP を読んだのはこれよりも後、実際に組織を変えようとしていく中ででした。

ということで(?)、チャン・キムのすばらしい書籍を読みましょう。という話でした。

ブルー・オーシャン戦略 競争のない世界を創造する (Harvard business school press)
W・チャン・キム レネ・モボルニュ
ランダムハウス講談社
売り上げランキング: 371
  

フレームワークについて読む暇あったら、このエントリを100回読むべき

by tanabe on January 29, 2009

はてブをちら見してあれだったんで、書いておきます。タイトルは釣りタイトルっぽいですが、そんなこともなくまったくもって正直な気持ちです。

圧倒的に生産性の高い人(サイエンティスト)の研究スタイル

フレームワークに踊らされるヒマがあったら、このエントリを繰り返し100回でも200回でも読んで実践してみるべきです。(こちらも1,000オーバーのブクマが付いてはいますね。)

それだけの価値がこのエントリにはあります。

どうしてもフレームワークについて読みたいなら、大前研一さんの「企業参謀」「続企業参謀」をやっぱり100回でも200回でも読んで、その後で「マッキンゼー現代の経営戦略」を読んで衝撃を受けて、そこで「企業参謀」に戻ってみたら衝撃を受けたはずのことがすべてその何べんも読んだはずのその本に書いてあったことに気付いてぶっとんでみればいいと思います。

最近では斉藤嘉則さんの本のほうが人気のようですが、本気で「考えること」のやり方と姿勢について書いてあるのは企業参謀だけです。表面上はツールもたくさん紹介されるので、そこにだまされずに読み込んでください。道に迷いそうになったら、kaz_ataka さんのエントリに戻って読み返せばよいと思います。最高のガイドラインです。(技術書でいえば、リファクタリングをツール集として読むか設計について考える本として読み解こうとするかの違いとでも言えばいいでしょうか。)

で、やっぱりイディオムとして知っておきたいなら最後に好きなだけフレームワークの紹介を読めばいいと思うのです。そういう本がいくらでも出てますし。(とはいえ、そもそもありものを使うのがフレームワークだというのに違和感があります。漠然と考えようとすると答えに向かわずに際限なく可能性を検討しちゃうから、そこを答えに向けて収束させていくために補助線を引くのがフレームワークであって、別に誰かが考えた思考の枠組みを使うのがフレームワークじゃないと思ってます。結果として選んだ道具がよく知られたフレームワークだった、というのは当然いくらでもありますが。)

最後に同じく kaz_ataka さんのブログから「噛みしめることを大切にしよう」を紹介しておきます。上で紹介したエントリと両輪にして「考える」ということについての指針にしています。

# この kaz_ataka さんの「ニューロサイエンスとマーケティングの間」と出会えたことは 2008 年の最高に幸せだったことの一つで、ここで紹介した話に限らずマーケティングの話についても過去のエントリを探してむさぼるように読んでしまった。言葉で言い表せないほどの感謝をしている。

企業参謀 (講談社文庫)
大前 研一
講談社
売り上げランキング: 1258
続・企業参謀 (講談社文庫)
大前 研一
講談社
売り上げランキング: 3974
  

Ruby 1.9 の情報募集中だそうです

by tanabe on January 28, 2009

ruby-list から。

今度,Ruby 1.9.1 がリリースされますが,そのころ,次の Rubyist Magazine をリリースできるよう,作業中です.

 で,Ruby 1.9 の紹介を網羅的に書くのは大変なので,Ruby 1.9 を紹介した記 事を紹介する記事を書こうと考えています.というわけで,以下のような心当た りがあったら,教えて下さい.どんなに短いモノでも歓迎します.

・Ruby 1.9 の記事を読んだことがある人(そのURL)
・Ruby 1.9 の記事を書いたことがある人(そのURL)
・Ruby 1.9 の記事を書いてやろう,という人(その内容とURL)

 日本Rubyの会のWikiにページを作りました.こちらまで情報をお寄せ頂ければ と思います.

 http://jp.rubyist.net/?1.9+Links

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/45818

これならまったくハカーじゃない人でも協力できますね。

てことで、いくつか追加してきました。自分の delicious で ruby+1.9 しただけの手抜きですがそれでもけっこうありました。

# あ、そういえば日本Rubyの会会員ではないなー。編集した後で気付いたよ。。公開されているんだから編集してしまってもよかったんだろう。うん。

  

InfoQ の "EventMachine: Fast and Scalable Event-Driven I/O Framework" を訳してみた

by tanabe on January 28, 2009

InfoQ の "EventMachine: Fast and Scalable Event-Driven I/O Framework" には「EventMachine: 高速でスケーラブルなEvent-Driven I/Oフレームワーク」という公式な邦訳があるんだが、これが何度読んでもよく意味がわからない。

もちろん、ぼく自身がイベントドリブンというものをよく理解していないという問題が大きな壁になっているのは間違いない。でも、そもそもよく理解していないから読みたいわけで、困ってしまった。EventMachine の開発者 Francis Cianfrocca のインタビューもあり、内容はよさそうな気がする。

で、何度か読むうちに「これは原文あたったほうが早いんじゃないか」と気付き、ちまちまと理解を進めながら訳したので公開しておく。

全文訳は公式のものがあるので開発者インタビューを中心に重要なところをまとめる。

誤りのご指摘大歓迎。特に技術的な意味での妥当性に不安があるので「これ、おかしくね?」とか言ってもらえると大変助かります。


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.
EM を使う技術的な理由のポイントは、スレッドプログラミングを避けられるという点です。もちろんスレッドプログラミングはよく知られたモデルです。特にネットワークサーバーにおいてはそうでしょう。ですが、いくつかの非常に深い問題もはらんでいます。スレッドモデルに適した比較的小さな課題というのもあります。通常リクエスト間での状態の共有を必要としないネットワークサーバーはその一例と言えるでしょう。しかし、ひとたびスレッド間での状態の共有を必要とするプログラムを書くとなったり、スレッド間で一連の手続きを正しい順に実行しなければならなくなったりすると、100%正しいプログラムを書くのは非常に困難になります。そして Ruby にはスレッドが高価だという問題もあります。

てなとこかな。

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.

邦訳の最後がいまいちよくわからんので原文に当たる。

イベントドリブンプログラミングの問題も紹介しましょう。あなたは逆向きにプログラミングをしなければなりません。スレッドモデルでは状態を(効果的ではないのですが)ローカル変数に入れてスタックに積めます。EM ではこれを自分自身で行う必要があります。これはスレッドに慣れたプログラマにとっては直感的でなく感じます。そして、この点が私が Fiber に興味をひかれる理由でもあります。スレッドを使わずイベントドリブンなままで、まるでブロッキング I/O のようにプログラムを書くことができる可能性が開けるからです。

か。ほうほう。でも、原文読んでも "backwards" の意味がよくわからない。スレッドモデルに対し、backwards なの?

でありがたいことに具体例に続く。(でも正直何が backwards かはいまだによくわかっていない。。)

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.

スレッドモデルだと、

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

スレッドモデルはこのコネクションごとに状態を管理しておくための非常に重たいやり方であり、その恩恵としてプログラミングがより直感的になる。

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.

でも、イベントモデルを学ぶのもそんなにむずかしいわけじゃないよ。まぁ、それはともかく、これが EM なプログラミングが広く使われるにあたっての一番の壁だと思ってる。

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).

EM のやっていることとして 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).

EM は SMTP プロトコルのためのよくできたサーバとクライアントのハンドラーを持っているので、EM プログラマは Eメールの受信に関するイベントを扱うだけでよくて、SMTP についてはケアする必要がない。そして、それでも(高速でスケーラブルだという)イベントモデルによる恩恵はすべて得ることができる。

というような意味か。

ノンブロッキング IO だという利点はわかるんだけど、どういった利用があるのかがイメージついていない。Thin とかで実装を見たほうがイメージしやすいのかなぁ。

あとはこの辺読んで基礎をちゃんと学べってところですね。はい。

UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
W.リチャード スティーヴンス
ピアソンエデュケーション
売り上げランキング: 74470
  

レベル1分散でも DB で JOIN させる方法

by tanabe on January 26, 2009

いわゆる mixi のレベル1分散というものがあって、「join は使わない(方がいいケースもある)」というような話も出てきたりするんですが、join で解決できる問題はアプリケーションコード書くよりも DB にやらせたかったりします。

一方でそれぞれのテーブルは別の DB 上に載っているので、ふつうに join するわけにはいきません。

てことで、無理やり join しようとやってみた手。

まず、db_a に載っている table_a の必要なレコードを取得します。

んで、そいつの1レコードにつき一つの select 句をアプリケーションで生成します。

select
  v1 as name1
, v2 as name2
, v3 as name3
, v4 as name4 

そしてできあがった select 句を union all.

ポータブルな即席 view のできあがり。

このできあがったものを一つのテーブルとみなして join の対象とし db_b に載っている table_b, ... たちとのクエリを生成します。

これで二つの DB にまたがった似非 join が使えます。アプリケーションで妙なループを連発してコードの可読性を下げるよりもマシに使えるような気がするんですが、どうでしょうか?

発行される SQL クエリのイメージはこんなかんじ。(実際はアプリケーションの中でもう少し見通しがよいようにまとめたり整理したりしますが。)

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
  ...

もちろん、uninon all で作ったほうは index も何もあったもんではないので、そちらはそれなりにレコード数が限られていないと使い物にならないと思います。

案外パフォーマンスもまともに出る(インラインで作ってる区分テーブルみたいなもんなんで)ので、下手なアプリケーション join よりも使えるんじゃないかなーなどと思ってたりします。

  

Revactor のインストールに失敗する件

by tanabe on January 20, 2009

Revactorはいってみれば、ErlangのRuby実装。アクターモデルを実装しているが、 個別のアクターはファイバーを使って実装されている(らしい、実装はまだ読んでない)。
http://www.rubyist.net/~matz/20080830.html#p02

コードを読みたいと思って Revactor のダウンロードを試す。

公式とおぼしきサイトにしたがって、何度 gem install してみても失敗。

http://rubyforge.org/frs/download.php/31492/revactor-0.1.4.gem

gem の問題かーと思って、cleanup してみたり。

いろいろやっても解決しない。

悩んだ末に rubyforge.org から検索して辿ってみると、なんのことはない。URI がそもそも違っているというオチだった。

正しくはこちらなので注意。
http://rubyforge.org/frs/download.php/34629/revactor-0.1.4.gem

  

Ruby1.9.1 で scrAPI (ろうとして失敗)

by tanabe on January 17, 2009

Eventmachine に引き続き scrAPI を Ruby1.9.1 に導入。

gem install scrapi

成功。

ところが、require 'scrapi' するとエラー。

$ git diff
diff --git a/lib/scraper/base.rb b/lib/scraper/base.rb
index 1c77639..ba3c81d 100644
--- a/lib/scraper/base.rb
+++ b/lib/scraper/base.rb
@@ -906,10 +906,10 @@ module Scraper
     #   end
     def skip(elements = nil)
       case elements
-      when Array: @skip.concat elements
-      when HTML::Node: @skip << elements
-      when nil: @skip << true
-      when true, false: @skip << elements
+      when Array; @skip.concat elements
+      when HTML::Node; @skip << elements
+      when nil; @skip << true
+      when true, false; @skip << elements
       end
       # Calling skip(element) as the last statement is
       # redundant by design.

とりあえず、これで終わったかと思ったらこの後 tidy でエラー吐いていて、DL が DL2 に移行しているので片手間で数箇所直しただけでは動かず、こりゃちゃんとコード読まないとダメだなと気付いたところで時間がなかったため一旦断念。

追記。これを書いた直後にそういえば Nokogiri! と思い出し、調べてみたら 1.9 対応済みらしいということに気付く。今ここ。

  

Ruby1.9.1 で Eventmachine

by tanabe on January 17, 2009

Ruby1.9.1 で Eventmachine を使いたくてインストール。

 
gem install eventmachine

失敗。

一行だけ書き換えてやって、

 
$ git diff
diff --git a/ext/rubymain.cpp b/ext/rubymain.cpp
index a85b707..b05e961 100644
--- a/ext/rubymain.cpp
+++ b/ext/rubymain.cpp
@@ -463,7 +463,7 @@ t_invoke_popen

 static VALUE t_invoke_popen (VALUE self, VALUE cmd)
 {
-       int len = RARRAY (cmd)->len;
+       int len = RARRAY_LEN(cmd);
        if (len > 98)
                rb_raise (rb_eRuntimeError, "too many arguments to popen");
        char *strings [100];
 
cd /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.2
ruby ext/extconf.rb
make 
make install

成功。

とりあえず、動いているっぽいのでよしとする。

  

これはうれしい

by tanabe on January 15, 2009

翻訳書『アジャイルな見積りと計画づくり 価値あるソフトウェアを育てる概念と技法』を出版します」だそうで、これは絶対買う。

Software Requirements(Soren Lauesen) 読み終わったら買おうと思って原著を Amazon.com の Wish List の肥やしにしていたので、とてもうれしい。

  

@IT情報マネジメント用語事典の内容がすばらしい

by tanabe on January 13, 2009

調べ物をしていて偶然気付いたのだが、@IT情報マネジメント用語事典はすばらしい。

用語の紹介というレベル以上のことは書かれていないし、特にその用語についての実務上の洞察が含まれるというようなことはないが、用語の一般的な解説としては非常に良質の紹介になっている。

特に参考文献が丁寧に挙げられていたりコンセプトの成り立ちに言及していたりして、原典への導線が準備されている点は他の用語解説と比べて圧倒的にすばらしい。

ぱらぱら見てみたかんじだと、古典を重視しつつも古典に偏りすぎることなくおもしろい話を挟んでいたりバランスもおもしろい。

問題は、他の用語事典にも共通することではあるけれど、その単語一つとって読んでみてもそれがなぜどのようにすばらしく、価値があるコンセプトなのかはほとんど理解ができない点だが、これはけっきょくコンテキストを抜きに伝えるのはほぼ不可能なのだから仕方ないのだろう。

  

iTunes Store: All Songs DRM-Free

by tanabe on January 08, 2009

Changes Coming to the iTunes Store

  • All Songs DRM-Free
via http://www.apple.com/pr/library/2009/01/06itunes.html

だそうな。日本はー?

  

『Exceptions を扱うたった一つの冴えたやりかた』

by tanabe on January 08, 2009

...的な釣りタイトルが付けられた Michael Feathers の "Abstracting Away From Exceptions" がおもしろかった。

コメント欄も盛り上がっているし、reddit の方にも本人が出張してコメントつけている

元エントリは「Exceptions をうまくあしらうパターン見つけた気がすんだけど、どうよ?」的な内容。そこに「いやいや、そもそも例外は・・・」みたいな指摘なんかも挙がっていて楽しい。コメントまで含めて読んで、初めてバランスがよくなってる。Aaron Powell の Should you catch System.Exception? も。

exceptions とか validation とか error handling とか各箇所に工夫なく書かれると可読性が落ちるのは間違いないので、エンジンやフレームワークのようなレベルでうまいことまとめられるとうれしいんだけどな。あとはその場合もアプリケーションの仕様なのかそれともシステムの実装上の都合なのかという切り分けと、その見せ方というのはポイントだな。

エラーにしろ例外にしろけっきょく画面なりログなりで外部とのインタフェースに対して働きかけをしないといけないので、そこは状態遷移と画面遷移の話でもある。業務系ならそうなった場合の仕事というのがあるのだろうから、ワークフローなのか。あ、話が散ってしまった。本筋の流れと枝の流れは別物として管理できるとうれしいよね、という意味では賛成ということが言いたかった。

ポインタが挙がっていた Alessandro Warth and Alan Kay の Worlds: Controlling the Scope of Side Effects は読んだことないので読んでおこう。

最後に J 言語はちょっと見てみたけど、お友達になれなさそうな気がした。

  

Kent Beck vs Alan Cooper!!

by tanabe on January 08, 2009

reddit で見かけたコメントがおもしろそうだったので読んでみる。2002 年の Kent Beck と Alan Cooper の対話。なんという豪華対談。

Excellent article.

What Beck couldn't understand is that design is not the specification of features. Developers are not designers and customers are not designers.

Cooper does a really great job of explaining the role of interaction design (or just designers in general) before developement begins.

この文webarchive のログから転載したものらしい。

感想はあとで書く。

  

4年あれば最高峰に近づけるらしい

by tanabe on January 07, 2009

世の中やってやれないことはないというかなんというか。

ベースを始めてわずか4年でジェフ・ベックと共演だってできてしまうそうですよ。

発掘すること」から。

弱冠21歳の彼女、小柄で童顔で見た感じはハイスクールの学生だ。出身はオーストラリアで、はじめはギターをプレイしていたそうだが、ロス・アンジェルスのLAMAに入学と同時にベースに転向。ベースかドラムに転向するか迷っていたという話だ。(私の教え子でLAMAに留学していた金子君からの話。彼女と同期生)すぐに驚異的なスピードで上達、ベースを始めてわずか1年で話題に上り、様々なセッションに参加。これまでチック・コリア、ハイラム・ブロック、オールマン・ブラザーズ・バンドらと共演。そして何と2007年のジェフ・ベックのツアーに抜擢!

弱冠21才の天才女性ベーシストTal Wilkenfeld !

すごすぎ。

ある意味で強烈にこの事実を突きつけられた気もする。彼女がすばらしいプレイヤーだというのはもちろん認めたうえで。

McNealy氏は静かに言い放った。「いいか,今手を上げているやつらは覚えておけ。成功の要因は,運だ。100%,運だけだ」。

 講堂全体が静まりかえった。彼はその静寂を破ってとどめをさす。「頭がいいだって?そんなことは問題じゃないんだ。おまえたちはさぞかし学校の成績がいいんだろう。そんなことは知っている。笑わせるな。いいか,運だ。運がなければ起業は成功しないんだ」。

タイミングと信念(と運)

ちなみに、「発掘すること」のブログを書いているのは最愛のギタリスト・五味誠さん。うちのブログは livedoor blog に独自ドメインをかぶせているだけなんだけど、独自ドメイン使う前の livedoor の ID は zep716. わかる人だけわかる名前のつもりだったが、今のところ誰にもわかってもらえない。ZEP までで異様に喜ぶ人なら散見するんだけど 716 が伝わらず。ZEP 違い。

  

リーダーシップとは

by tanabe on January 06, 2009

リーダーっていうのは天性のもんじゃないかと思うんだ よね。人が人を担ぐのに理由らしい理由なんてあんまり ないんだよね。で、人が勝手に担いでくれるのがリーダー であって。それがリーダーシップって呼ばれるものだろうし。

http://www.jitu.org/~tko/cgi-bin/bakagaiku.rb?bakaid=20090102

そうかな。リーダーシップはビジョンを示すことだと思うな。(つまり、組織や人をどうするかという用語じゃない。)

そしてビジョンは丁寧な観察と分析と洞察から生まれると思ってます。

  

三十歳

by tanabe on January 06, 2009

今年は三十歳になります。

もう少し前は早く急いで若いうちにスキルアップをしないと、と焦っていました。

今はもう少し落ち着いています。必要なこととやりたいことをバランスよく学んで成長している実感があります。

そして、こういう文章を読めることもその落ち着きに影響している気がします。

あと、広告プランニングでは重要な「コア・バリュー」とか「コンセプト」とかいう考え方も、ボクの考えるやり方では「それはひとつではなく伝えたい相手によって分散して存在する」「だからいろんなメディアやソース、タイミングを組み合わせる」ので、何かひとつに絞るという発想がなかったりします。

でも、トラディショナルな作業だと、いきなり「コア・バリュー設定」なんですね。それに直面して初めてそういう発想自体が自分の中で消えていたことにハッと気づいたりしました。自分が変化していることを他から知らされて戸惑う感じ。アレレと困っているうちに、ふと気づくとスタッフとの間で意識乖離が起こっている…。この乖離をちゃんと埋められなかったのも大きな反省点のひとつです。

http://www.satonao.com/archives/2008/12/post_2473.html

自分よりも年配の方(それもさとなおさん)でも目標を決め悩んで、試行錯誤し成長をし続け、そして仕事を楽しんでいるというのは本当に励まされます。

そんで、これ。

彼の言葉にこんなのがある。

「世界中の35歳の中で僕ほど努力したものはいないと胸を張って言えるんだ」

http://www.satonao.com/archives/2008/12/post_2473.html

このくらいの年齢でこういう発言を読むと、梅田望夫さんの発言で駆り立てられるみたいなのとはまた違う感慨があります。

通説に従うとエンジニア定年まであと5年になるらしいので、それなりの思いで今年一年を過ごそうと思います。

  

arton さんのブログが好きだという話

by tanabe on January 06, 2009

絵本作家って、自分が子供のときと、子供が子供のときの20年分くらいしかカバーできないので、巡りあわせってのが大きい

フンパーディンクのヘンゼルとグレーテル

唐突だが arton さんのブログがとても好きだ。もちろん、プログラミングの話も好きなのだけど、そこここに見える arton さんの目の付け所がたまらなく魅力的で読んでいるだけで楽しくなる。

そして、毎日自分は気付かずに生きていたけど、ここでその視点を知ったことで少し人生得したような気分になる。

レビューや紹介も技術書から童話、CD までついつい買ってしまうことが多い。単に役立ちそうというのを越えて、なんとも「そそる」紹介をされるのだ。

特にオチがなくて申し訳ないのだけど、今年は思ったことを気楽に書いて行こうと決めたので書いてしまう。

  

忘れてた

by tanabe on January 01, 2009

映画ティンカーベルの日本版主題歌を唄っている湯川潮音は最高。

昨年のライブ『灰色とわたし 2008』もすばらしかった。Web 通販では DVD も売っている

以上、宣伝終わり。(別に関係者とかではない。残念ながら。)

  

映画『ティンカーベル』はNerdのための物語

by tanabe on January 01, 2009

大晦日に見に行ってきた。

子供映画と馬鹿にならない出来で思わず泣きそうに。理由は後述。来年三十だしもう歳で涙もろいんじゃ、とかでは断じてない。はず。(来年・・・というかもう今年か。)

子供にとってはかわいい妖精が派手にとびまわるきれいで夢いっぱいの物語で、家族で見に行くのはもちろんおすすめ。ディズニーに期待されるファンタジーがふんだんに入っている。

話もさくさく進むし、登場人物ははっきり類型化されている(イジワル役はイジワルに徹する、とか。)ので寄り道せずに本筋だけをストレスなく追えて退屈する暇なし。観終わっても疲れ知らずの1時間20分。

なんだけど、実は・・・・・・

社内SE(そしてたぶん他の職種の人も)必見の自己肯定物語。特に一通り仕事もして自分の立ち位置や能力にある程度の客観的な評価ができてきた、という20代後半から30代におすすめ。

もう、観ていてティンクが問いかける自問自答の一つ一つに身におぼえがあって、ひそかに共感しまくり。よりによって、金髪の小さい妖精の女の子に。

まさかこんなディズニーの子供向け映画で自分の仕事観を問われるとは。

企業の表舞台で活躍している極一部の人たちを除くと、きっとどの仕事をしている人もこんな葛藤を抱えて日々を重ねているはず。自分の毎日の仕事が単なる歯車なのか、それとも誰かを幸せにするプロセスの一部なのか。

幸い現実は妖精の世界と違って、風の妖精か水の妖精かと決められているわけではないけれど、複数のキャリアとスキルを追い続けるわけにもいかないからけっきょく本質的にはまったく同じ問題を抱えている。

映画を観る中で自分のこれまでの考え方と今後のことを意識せずにいられる大人はいないだろう。

結末に向かうストーリーと判断を全部肯定するわけではないけれど、まぁ、万人向けのお話にするにはあそこはああいう結論にするんだろうな。あれはあれで社内 SE のロマンではある。

現実の中でどう立ち振る舞うべきかは大人なんだから自分で考えろというメッセージか。

あの流れこそ大人にとってファンタジーということを考えると、よくできた脚本なんだなとあらためて思う。

昨年見た「魔法にかけられて」もメタファンタジーな脚本の出来がすばらしかったし、最近のディズニー映画はバカにできない。あ、未見の人はこちらも必見。大人でも(むしろ、大人のほうが)おもしろいよ。

最後に余談。

途中出てきた会議の様子は「あー、こういう役員会あったんだろうなー」と心の中で爆笑。特にこうフェアリーメアリーの地味さというかぱっとしないかんじがね。技術系の役員て風采があがらない人が多いもので。