N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

よいおとしお

2006-12-31 23:53:08 | その他
さて、2006年もあと少しとなりました。
今年もいろいろな人に迷惑をかけながら、なんとか生きてまいりました。

特にうちのチームのみんなには、かなり不安な思いをさせてしまったと感じています。

ことしは、初めて自分のチームをもって、自分のやりたいことを追求できたのはよかったのですが、
まだまだマネージャとして未熟な面も多かった。ほんとみんなごめん。
人間いきなりは成長できないもので、来年も引き続き多大なる負担をしいてしまうことと
思いますが、それは私が悪いのではなく、みんなの前世が悪いのです。
詳しくは年明けに直接話しますが、後、2年間で、現在のチャレンジにひとつの区切りをつけたいと
おもっていますので、よりよい来世のためにしっかりついてきて下さい。

その他には、ことしはとにかく執筆が大変でした。
もう二度とやるもんかとも思ってましたが、自分の書いたものに
全然満足できてないので、またチャレンジしたいですね。

お正月はLiQ 主に来期の活動の構想と、LiQ シリーズ第2弾の設計をして過ごす予定です。

それでは、みなさん、よいお年を。

LiQ Container 1.0-alpha1 リリース

2006-12-31 20:38:55 | オープンソース
リリースしました。

ドキュメントとか途中で挫折した匂いがすごいしますが、
年内にリリースするというのが目標だったので、そっちを優先しました。

目指したのは、コンパクトで、簡単に使えて、柔軟に拡張できる
DIコンテナ。
軽量コンテナといいつつ、多機能で複雑な方向に走りがち
な既存のコンテナたちに対する自分なりのアンチテーゼです。
極限まで機能を削り、実装をコンパクトに保ち(jarのファイルサイズは
現状45Kたらずです)、ユーザのニーズに応じていかようにでも
カスタマイズできるように設計を工夫したつもりです。

自分としてはもはや他のDIコンテナを使う気が起こらない
くらいの出来栄えのものには仕上ったと思います。
自分で作ってんだから当り前ですね。
自分が良いと思うものが、他の方にも良いと思っていただける
ことを願っております。

alphaのうちは、APIの変更を受け付けますので、ここもっと
こうしたほうがいいんじゃないかとか、クラス名とか
メソッド名がおかしいんじゃないかとか、つかえねーからもうやめろ、
とかの御指摘を歓迎します。
日本語用のフォーラムを作りましたので、そちらにお願いします。

誰も投稿してくれないとさびしいので、冷やかしでもなんでも、
お気軽にどうぞ。

betaではAPIをFixして、バグの修正とドキュメントの整備に努めます。
それがおわったら1.0リリースです。

なんでいまさらDIコンテナを作ろうと思ったか、とか、
LiQ Containerを使うと他のコンテナに比べてどんなところが嬉しいか、
とかは、いろいろ語りたいことがありますので、今後このBlogで
おいおい書いていきたいと思います。

SI業界の構造的な問題とみた

2006-12-26 00:24:46 | 意見
バカ専用フレームワーク、キャッチーな表現ですな。
自分の中で何かのスイッチが押されてしまいました。私はもう、こういう話題には
自動的に反応してしまうようにできている人間なのです。
一種の病気です。なのでこの件について言いたいことは本当に
山ほどあるのですが、あんまり言い過ぎると心が荒れるので、少しだけ。

大手SIer謹製のフレームワークの裏の目的は、
なるべく単純作業を沢山増やして、スキルの低い人でもやる気のない人でも
なんでもとにかく人を大量にやとって、
プロジェクトの規模を無駄に大きく見せて、
沢山売上げを上げることなのだと思います。

ぶっちゃけ大手SIerにとっては生産性とか品質なんてどうだって
良いのです。彼らにとって大事なのはとにかく、売上。
多少使い勝手が悪かろうとみかけのバグ密度さえ低ければ
問題ない契約になってますしね。

逆に効率が良くなってもっと少ないコストでシステム開発が
できるようになってしまったら、相対的なマージンが少なくなって
自分達の給料とか福利厚生が維持できなくなってしまうのではないでしょうか。

例えば、うちのおやごさんに関していうと、
昨年度の売上げが、約9,000億円、従業員数が約8,400人。
従業員数には人事、経理、総務、研究開発などの間接部門の人数も
含まれていますから、開発に携わる人間は1人あたり軽く1億を越える
売上を上げる必要があることになります。
SIにおいて1人で1億以上の価値を生み出すことはなかなか難しいので、
基本的な企業情報を見ただけですでに何らかの
水増し戦略が必要であることは明白でしょう。

ITゼネコンというのは、大きくなりすぎて自分で自分の重力を支えきれなく
なりつつある老いた恒星のようなものです。
そして多くの中小SIerはそうした大手の体力にすがらなければ
やっていけないのです。本当にこれはSI業界の構造的な問題であると
思います。

さすがにフレームワーク作ってる人達はそこまで意図してやってる
わけではないです。彼らは彼らなりに、
現場のニーズに応えようと一所懸命やってると思います。
ただ、結果として、皮肉にもそういう役割を果たしてしまっているのだと
思います。


頭にくるのはそういう無駄の多いプロジェクトに限って大量の
税金
投入されてるプロジェクトだったりすることです。


そのキングファイル 1さつ 1せんまん ああ ぼくの税金


さて、今日もヤケ酒のんで寝るかな。

まだリリース準備中

2006-12-25 00:26:16 | その他
この週末で、ここ数ヵ月会う人ごとにその構想を熱く語りつづけてきた
LiQ Container(りきゅう、とよむ)というDIコンテナの
最初のリリース(1.0-alpha-1)をしようと思ってたのですが、
意志が弱く、いまだすすんでいません。

コードは大体書けてるんですが、ドキュメントが、、、

いきがって英語で書こうとしてるのが裏目にでているのかもしれません。
最近読書欲に歯止めがかからなくて、つい本をよんじゃうんですよね。
まだぜんぜん途中ですけど、サーバにアップしたらもうちょい
やる気も出るかとおもってアップしてみました

5mitutes tutorial を書き終わったらタグうってリリースします。
英語たぶんいっぱい間違ってるんで、間違いをみつけた方
どうか指摘してくださいませ。

ブックレビュー:成功する要求仕様 失敗する要求仕様

2006-12-24 14:18:04 | ブックレビュー


タイトル: 成功する要求仕様、失敗する要求仕様
原題: Just Enough Requirements Management
著者: Alan M.Davis
訳: 高嶋優子
監修: 萩本順三/安井昌男

要求開発とか、要件定義を題材にした書籍は既に数多く出版されています。
私の読んだ範囲では、それらは以下の3つのカテゴリに分類できると思います。

1. 特定の技法の紹介
2. 要求開発に関するTips集
3. そもそも要求開発とはなんぞや、みたいな考え方を述べる

1. と2. はボトムアップ型のアプローチで、
内容が具体的なので読んだらすぐ役立ちそうに見えるのですが、
ある特定の技法なりTipsは大抵は特定の状況にしか通用しないので、
いざ現場に適用しようとすると意外とこまってしまうことも多いように
感じています。

3. はトップダウン型のアプローチで個人的には興味をもっていて
好きなトピックなのですが、なにぶん抽象的で難解になりやすく、
現場に適用するにはかなりの応用力が必要になります。

さて、今回紹介する「成功する要求仕様、失敗する要求仕様」は上記の
分類のうち、3.に分類される本です。
しかし、今までの本よりも、
格段にやさしく、わかりやすく、具体的に要求開発のポイントが
述べられていると思います。

この本の思想の中心となっているのは、原題にある「Just Enough」
ということです。要求開発は、コストをかけすぎず、かつ適当すぎず、
「ちょうど良い」レベルで行うとよい、という主張です。

この考えは私も完全に同意です。
そもそもなぜ要求開発なんかやらなくちゃいけないのか、
いきなりコードを書き始めたらいけないのか、というと、
要求開発をやらないと開発したものが実際に必要とされているものと
異なるリスクがあまりにも高くなってしまうからです。
私は、要求開発でどれくらい頑張らなければならないかは、
ソフトウェアの構築のコストに反比例すると思っています。
極論すると、ソフトウェアの再構築作業が5秒で終わるなら、
別に要求開発なんかやらなくてもそんなに問題ないはずです。
期待したのと違うものが出てきたら、やり直させればよいのですから。

現在の技術レベルでは、いろんなツールとかを駆使すれば
オープン系のシステム開発のシステム開発の構築コストは言うほど高くは
ないので、要件定義に投入するコストも「それなり」の方がむしろ
Betterだと思います。
要はシステムのふるまいを全て厳密にきめようと頑張っているあいだに、
実際に作りはじめてしまった方が良い場合もあるよね、ということですね。

それ以外に紹介されている具体的な要求開発のやり方も
私のチームでやってる要求開発のやり方と大体同じだったので、
今後、うちのチームの要求開発の教科書にしようかと思っています。
この本には過度にコストをかけることなく、うまくリスクを軽減しつつ、変更を受け入れつつ
要求開発を成功に導くにはどうしたらよいか、実践的なアドバイスが満載です。

だから、要求開発にかかわるすべての人が、まずはじめに本をよんで欲しい本です。
うしろにくっついてる参考文献リストも素晴らしいので、まずこの本を起点に、
必要に応じて他の本を読んで行ったらよいと思います。

結局要求開発のポイントは、本書の第6章「まとめ」でたった7ページでまとめられている
ことがほとんど全てだと思います。私はそのことが早く、システム開発の業界の常識に
なってくれたらいいと思っています。



sourceforge.netのSVNで403エラー

2006-12-17 14:34:59 | その他
最近sourceforge.netにプロジェクト作って、
ちょっとしたものを作ってるのですが、
EclipseのSubversive プラグインがsvn copyをやろうとしたときに、
403 Forbiddenでコミットがこける、という問題が発生

しらべたら、このへんに解決策が。
http://www.everes.net/2006/dec/13/svn-copy-on-sourceforge-net/
http://sourceforge.net/tracker/index.php?func=detail&aid=1599910&group_id=1&atid=200001

結論からいうと、リポジトリのURLを変えろ、と。
sourceforge.netのドキュメントに書いてある以下のURLだとダメで、

https://svn.sourceforge.net/svnroot/[project name]

次のようにしろ、と。
https://[project name].svn.sourceforge.net/svnroot/[project name]

なんじゃそりゃー。


ブックレビュー:りっぱな犬になる方法

2006-12-15 07:01:36 | ブックレビュー
りっぱな犬になる方法 バイリンガル版
きたやま ようこ 著
渡辺 真子 訳

この本は、しょうらい 犬になってみたいと おもっている、
もしくは、自ら意図して いないのにある日 とつぜん 犬になってしまった、
という人のために、犬として、りっぱに生きていくための方法を
ほんものの犬からの 生々しい取材に 基づいて解き明かしています。

人間として生きていくのが なかなかしんどい 昨今のご時世、いっそのこと
犬として生きてみようか、と思う方も多々おられるかと思いますが、
そういう方は この本を読んで、考え直していただきたい。
少なくとも、りっぱな犬というものは りっぱでない 人間よりもずっと
りっぱだ、ということが分かるはずです。
りっぱな犬になるというのは、思ったほどかんたんではないのです。

むしろ、いきなりりっぱな犬をめざすというよりも、
りっぱな犬のりっぱなところをみならって、少しでもりっぱな人間に
なろうと どりょくするほうが現実的と言えます。

とくに、りっぱな犬ならできるのに、おおくの人間ができていない、
つぎのことを、できるように どりょく したらいいとおもいます。


ねているときにはゆめをみよう
おきてるときにはゆめをもとう


かいしゃでは りっぱな肩書をもっている、りっぱでない人間のみなさん、
しんきくさい はなし ばかりしてないで、すこしは ゆめを
かたってみませんか?


MS-Office 2007 Professionalのレビュー

2006-12-13 00:58:32 | その他
Microsoft Office 2007 Professionalの試用版をインストール
してちょっと動かしてみたので、使用感をレポートします。

簡単にいうと、

見た目と操作性は随分良くなったけど機能はそんなに変わってない

といったところでしょうか。

まず、すべての製品について、起動直後に見た目が全然変わっててびっくり。
今までのツールバーにあたるものが大変に進化していて、現在の作業内容に応じて
ツールバーにそれらしいアイテムが表示されるようになっています。

ツールバーから作業項目を選ぶと、それを実際に適用する前に適用した結果が確認
できるようになっているので、いままでのように、
ためしにあるスタイルを適用してみて、ちょっと違うなと思ってまた別の設定を適用してみる、
といったトライ&エラーが減らせると思います。しかし、アイテムを選択
するためのダイアログがでかすぎて、肝心のスタイルを適用する対象となるオブジェクトを
覆い隠してしまうことがあるのはいかんですね。

文字や表のスタイルについても、細かい設定をしなくてもそれらしく見える
テンプレートが多数用意されているので、作業のスピードはたぶん向上するのでは
ないでしょうか?

図形描画に関しては、図形に対して適用できる効果の種類が、
「影」だけでなく、「反射」、「ぼかし」、「面取り」などいろいろと
増えており、見た目の良い図を書くことも容易になっていると思われます。

以下は試してみた製品別の感想です。


Excel。

ありそでなかった「テーブル」という概念が導入されています。
「ピボットテーブル」とは違うもののようですよ。
あるセル範囲をしましまのテーブルにすることがとても
簡単にできるようになっています。これは非常に良いと思います。

Word。

PowerPointのように複数のデザインテンプレートを簡単に切替えられるようになって
います。今まではテンプレートを添付しなおさなければならなかったので、
結構面倒臭かったですよね?

文字を選択すると選択された部分の近くにフォントの
設定のダイアログがもあーんと浮き上がってくるようになっています。発想は
とても良いのですが、いかんせん処理が重すぎるようです。Pentium 4 2.4 GHzの
私のマシンでは実用レベルのスピードで動作しませんでした。
 
Power Point。

全製品共通して変わったところ意外はあんまり変わってなさそうです。
アニメーションの種類が増えてましたが、センスがいまいちな気がするのは私だけでしょうか?
いろいろ試してみてたら目がちかちかしてきました。

全体的に間違いなく改善はされているのですが、いかんせんかなり重いので、
自分のCPUに自身のある方は「買い」そうでないかたは保留でいいんじゃないでしょうか。
根本的な機能はあんまり変わってないようなので。


知識のキャッシュと効率

2006-12-10 05:09:03 | 意見
働かざるもの食うべからず。怪しいギャンブル船に乗り込んだり、
1玉4千円の人食いパチンコに挑んだりして、大金を掴みでもしない限り、
この大原則から逃れる術はありません。

私が社会人2年目の時にソフトウェア開発の世界に転職したのは、
少々つまらない仕事でも、我慢してこなしていればとりあえず、食いっぱぐれは
ない、という時代でもなくなってきていましたし、
どうせ働かなくては食えないのなら、自分が本当に面白いと思うことを
仕事にした方がきっと幸せだろうと考えてのことです。
さて、プロとしてお金をもらうからには、自分の仕事の結果として、
それにふさわしい価値を生み出さなければならないのが、道理というものです。
この価値の一つに「効率」というのがあります。

「効率」とは、早くて安いことです。
システム開発のような知識集約型の業種において、「効率」を達成するための
主要な戦略は、システム開発に必要な知識をそのつど考えだすのではなく、
キャッシュして、再利用することです。
さまざまな開発方法論やデザインパターンなどは、このキャッシュされた
知識の代表的な形態です。知識キャッシュを利用しないソフトウェア開発が
あまりにも高くつきすぎることは想像に難くありません。

知識集約型の仕事において「効率」を達成することは、労働集約型の
仕事よりもずっと難しいことです。知識集約型の仕事は
単純に知識キャッシュを沢山利用すればするほどより早く、より安く
結果が出せるというものではないと思います。

なぜならば以下に述べる2つの原因から、キャッシュされた知識は、
それがもはや想定どおりには役にたたない場合があると
考えられるからです。

1つめの原因は、知識を誤った問題に対して適用してしまうことです。
ある知識が最初に生み出されたとき、
それはその時、その場所で発生した特定の問題を解決するために考え出されたのであり、
キャッシュされた知識は、それがいま、この場所で発生している別の問題を解く
のにも役立ってくれるかどうかは保証してくれないということです。

たとえば、Javaのプログラミングにおいて、
「実装が一つしかない場合にも、対応するインタフェースを定義するのが良い」
という知識があったとしましょう。この知識を適用とするときに注意しなければ
ならないのは、この知識自体からはそれがどんな問題を解決してくれるのかはわからない
、ということです。それを知るには、想像してみるしかありません。この例の知識が
解こうとしている主な問題はおそらく、

「あるクラスの実装の変更の影響が、そのクラスのクライアントにも連鎖的に波及する」

ということと、

「クラスの実装に何かトランザクション制御のような細かい共通処理が多数紛れこんでしまう」

ということであると想像されたとします。
知識が解決してくれる問題のあたりがついたところで、
その問題が、今の自分にとっても同じように問題であるのかを考えてみます。

1つめの問題について。
そのクラスが変更される可能性はどれくらいありますか?
ほとんど変更される可能性のないクラスについて、変更の影響を
心配しても仕方ありません。
そのクラスのクライアントは何クラスくらいありますか?
沢山のクラスから使われるクラスの方が変更の影響のインパクトは大きくなります。
その変更作業を行うのに、どんなツールが使えますか?
新しいツールを使えば、実は変更の作業は言う程大変ではないのかもしれません。

2つめの問題について。
そのクラスにはどれくらいの量の細かい共通処理が紛れこんでいますか?
共通処理を外に切り出すのにどんなライブラリやフレームワークが利用できますか?
アスペクト指向プログラミングを可能にするフレームワークが利用できるのであれば、
それはインターフェースを切り出すよりもより良い解決策かもしれません。
(ウィービングされたコード内で発生するエラーの解析は普通のクラスよりも困難、という
別の問題を発生させはしますが)

このように、その知識が解いてくれる問題が、
今自分にとって実は問題ではないか、
もっと良い解決策があるというケースは多く考えれられます。
その場合、その知識を適用することによる効率の向上は望めなくなります。

2つめの原因は、その知識が生み出された時点では、
問題の理解がまだ浅かった、という場合です。例えば、
前述の実装と1:1のインタフェース定義の例では、

「あるクラスの実装の変更の影響が、
そのクラスのクライアントにも連鎖的に波及する」

という問題を想定しましたが、実はその知識はこの問題を
解決していないかもしれないのです。

あるクラスの実装の変更というのは一体何を意味しているのでしょうか?
メソッドの中身が変更されるだけなら、クライアント側には変更の影響は波及しません。
メソッドのシグネチャが変更されたら...インタフェースの定義も変更されてしまうので、
結局この解決策ではクライアントへの変更の影響の波及を防ぐことができないどころか、
むしろ、実装とインタフェースの両方のシグネチャを直さなければならないので、
より問題を悪化させています!

人間は神ではないので、知力に限界があります。だから、良かれと思って苦労して
考え出した解決策が実は全然役に立たないことが後になってわかる、ということは
良くあることです。それはどんなに偉い人でも例外ではありません。
昔のEJB仕様などが良い例です。

このように、キャッシュされた知識を誤って適用することが、
より効率を悪化させる可能性が結構ある。それがソフトウェア開発で高効率を
達成することが難しい理由だと思います。

私はよくウォータフォール型の開発モデルとか、決められたことを決められた
通りに実行することを重視する官僚主義的な組織文化を批判しますが、
それはこのような考えを持っているからです。

ウォータフォール型の開発モデルは、多くの場合、今私達が抱えている問題を解決するどころか、
より悪化させる可能性が高いと私は考えています。にもかかわらず、
単にそういうふうに決められているから、という理由で古い開発モデルを押し通し、
それが原因でプロジェクトがデスマーチ化したり、心や体を壊す人がでたり、
そういうことがどうしても許せないのです。

なお、ウォータフォール型の開発モデルがなんで役に立たないか、
については、近日発売の著書「Apache Maven 2.0入門 Java・オープンソース・ビルドツール
に私の考えを述べてあります、



とまたちょっと宣伝してみる。