2008年12月31日水曜日

クラウドコンピューティングを使ってみたい!!

クラウドコンピューティングを使ってみたい!!

2007年のIT流行語対象が、Web 2.0であれば、2008年はクラウド!!
Web 2.0程じゃないけど、クラウドも若干輪郭がぼやけてます。
例えば、Google appsやGmailなどもクラウドって定義の範疇に入るらしいし、Salesforceもそうらしい。
僕のイメージ的には、コンピューティングって言うとインフラ的な語感があって、Google appsやGmail、SalesforceなんかはSaaSって言ってもらった方がしっくり来ます。 と、いうことで僕的にクラウドコンピューティングって言うと、以下の3つにとりあえず注目

Amazon
Amazon Web Services (EC2 / S3 / SimpleDB)
http://aws.amazon.com/
発表:2006年8月

Google
Google App Engine
http://code.google.com/intl/ja/appengine/
発表:2008年4月

Microsoft
Windows Azure
http://www.microsoft.com/azure/default.mspx
発表:2008年10月

AmazonおよびGoogleに関しては、以下のサイトを参考にしました。
http://www.techworld.jp/topics/cloud/101834/

僕的にはこのクラウドはWeb 2.0やSaaSなんかと違って、目に見えてブレークすると考えていますし、結構期待しています。 SalesforceのCRMって凄いとは思うんだけど、アプリケーションの構築がシングルシステムマルチテナントの制約を受けすぎていると思います。(←これ、後で勝手に技術解説したいと思います。) つまり、ASPとSaaSの大きな違いとSaaSの成功要因の一つとして挙げられているシングルシステムマルチテナントですが、結構技術的なハードルが高くて、それを克服したからこそSalesforceの成功があるわけだけど、誰でもが実現できるわけではないし、ケースも限られてくる。 そうすると、SaaS型の成功例ってそうは出てこないんじゃないかな? また、Web 2.0の局所的な話ではあるけど、例えばAjaxによるリッチクライアントなんかも、そこまで苦労してWebアプリケーションにしなくても、配布が面倒ならWebアプリケーションにしなくても、アプリケーション配信技術は色々あるじゃないかと思うのです。

でも、もともとASPやSaaSがユーザーにもたらすBenefitって、ソフトウェアの従量制課金モデルによる初期投資リスクの低減と、インフラのアウトソーシングという点だと思うので、それってクラウドコンピューティングとアプリケーション配布技術とソフトウェアのセールス戦略の政治的判断だけで実現できてしまう話なんじゃないかと... 今後、Small Businessでの伸びを考えれば、伸び代を大きいですし、起業家にとってもアイディア次第で小さな資本でビジネスを展開できるという点でもすばらしいことだと思います。
で、この3つの違いですが、僕が注目しているのはAmazonとMicrosoft。 Googleはアプリケーション構築でサポートする言語がPythonだけというのがどうかと... Amazonのは、先のサイトに寄れば、自分のサーバーイメージをAmazonのクラウド環境に送る込むことで、利用できるらしく、自由度が高いですね。 当初のリリース時にはLinuxかUnixのみのサポートだけだったということですが、2008年10月にWindowsもサポート開始したようです。 そして、本命はMicrosoft。 お約束でVisual Studioで開発できちゃうんですね。 やはりMicrosoftのサイトは綺麗ですね。 AmazonとGoogleが白を基調としているのに対し、Azure=紺碧...か、カッコよすぎる。 1上旬はちょっと忙しいので、中旬、以降試して結果をレポートします。

2008年12月30日火曜日

年賀状のセオリー

やっと、年賀状を書き終わりました。



僕の場合は、Power Point 2007で写真のEffectも自由自在。
なんといっても仕事の40%位はPower Pointですから :)
(残り40%がOutlookで、残り20%が本職のシステム...)


最近の年賀状作りは、楽になりましたねぇ。

家の母親は木彫り彫刻が趣味だったので、子供の頃は12月になると版画彫を手伝ってました。
そして、絵の具を一色ずつのせながら馬簾で一枚一枚刷っていく...
1週間以上掛かってたんじゃないかな?
その頃でも、印刷の年賀状はあったけど、今程のデザインの自由度はなかった。
産業革命並みの効率化ですよね。
でも、家の母親の年賀状は味があったなぁ。
かといって、今更自分がその手法には戻れないし戻る気も無い。(これも産業革命みたいだ...)

ところで、今日、デザインが出来て、プリンターで印刷しながらテレビを見ていたら、テレ東で年賀状の常識クイズをやっていた。

- 目上の人には「賀正」ではなく「謹賀新年」:家はそもそも「A Happy New Year」

- 1日に着きそうに無ければ、元旦ではなく、一月吉日:家は「日付入れるの忘れた...」

- 目上の人には写真入は不向き:思いっきり入れた。

駄目ですねぇ...

2008年12月26日金曜日

こんにちはマイコン

クラウドの時代になり、マイクロソフトの時代は終わりかとも囁かれているこのごろではありますが、 12月13日号の東洋経済「それでも強い!マイクロソフト」の特集記事でWindows Azureを取り上げていましたね。.NETの開発者は、これまで培ってきた開発技術をそのままWindows Azureのプラットフォームの上で活かすことができると...すばらしいことです。 マイクロソフトがんばれー。
そして、どうして僕はこんなにマイクロソフトが好きなんだろうと考えてみた。
そう、その原点は25年前に読んだこの2冊の本だったのです。

「こんにちはマイコン」
マイコンってのが時代を感じさせますよね。 PCって昔はマイコンって呼ばれていたんです。 「マイクロコンピュータ」と「私のコンピュータ」が合わさって、こう呼ばれていたんです。 それがいつの間にかPCなんていう、温かみのない言葉になっていた...
この本は、当時の人気マンガ「ゲームセンター嵐」の主人公・嵐がBASICで「ブロック崩し」をプログラムしていく過程を追いながら、マンガでBASICプログラミングを学べるという画期的なもの。 当時PCは非常に高価なものだったため、なかなか買ってもらえなかったな... そんな貧乏人の子供も安心、実物大キーボードポスターが付録として付いていた為、シャドウタイピングの練習ができたのです。
こちら著者のすがやみつる氏のHPのようですが、「これがこんにちはマイコンだっ!」っていう「だっ!」ってのが、らしくて良いですね。 懐かしー!!
東洋経済にも、マイクロソフトの強みの一つは開発者コミュニティであると解説してありましたが、そう、よく考えると僕にとって、BASICがはじめに触れた言語だったのです。 結構そういう人は多いんじゃないかな? そりゃぁ、そう簡単にJAVAになんか乗り換えられないっすよね。

2008年12月23日火曜日

ソフトウェアトラブル・システム障害について考える

なんか、硬いネタばっかりですね。
別に本質的にそういう人間という訳じゃないんですけど、勉強中なものですから...

今年もソフトウェアトラブル・システム障害に関する話題が豊富だった様です。
ITProで特集してました。
http://itpro.nikkeibp.co.jp/99/trouble/index.html
- 2008年11月4日 JCBのカード関連サービス障害
- 2008年9月14日 全日本空輸(ANA)の空港システム障害
- 2008年7月22日 東証の新派生売買システム障害
- 2008年5月19日 住友信託銀行のシステム障害
- 2008年5月12日 三菱UFJ銀行のシステム統合に伴うトラブル
- 2008年2月25日 信金中央金庫のシステム障害

ここに挙がってくるようなシステムは、それでもお金かけてテストしていると思いますよね。 でも、どんなにお金をかけてもソフトウェアトラブル・システム障害を防ぐことが出来ないことは、マイクロソフトが年間70億ドルの開発予算を掛けてもバグがなくならないWindowsが物語っていると思います。 僕のNote PCは大体週に2回くらいブルースクリーンを見るかな? 何時間もかけて書いた書類が吹っ飛んだりすれば、それは頭にも来るでしょうけれど、幸いにしてそういう経験はあまり無いので、コーヒーブレイクをとれという神のお告げだと思うことにしています。

東京証券取引所のJCOM問題は恐らくソフトウェアトラブルを考える際の最も優れた教材なのかも知れません。 こちらのJCOM問題が実際にどのようにして起こったのかを纏めた情報システム学会の資料です。
http://issj.nuis.jp/renkan.pdf
(去年の技術士二次試験の問題は、ここからの引用だったんですね。)
証券関係のシステムをやっている人がどう捕らえるかは分かりませんが、よくここまで不幸が重なったものだな...というのと、このケースを想定したテストが書けなかったということにどれだけの過失があるのだろうか?この問題を100%防ぐアプローチが存在するのか?と、言うのが率直な感想です。 Windowsなんか、利用シナリオを考えていたらキリがないから、マイクロソフトの場合、Microsoft Solution Frameworkに書かれている手法(つまりバグはあるという前提で、統計的に管理する手法、あるいはプロジェクト管理面に関する議論)とかで品質の向上を狙っているのでしょうかね? それが正しければ、バグがあるという前提のOS上で動いている情報システムにバグフリーを要求すること自体がナンセンスな気もしてしまうわけですが... だからWindowsを使わないんだ!!と、突っ込まれそうですが、本質的にはソフトウェアが複雑になりすぎて統計的手法に頼らざるを得なくなっている、あるいはTQCのようなプロジェクト管理的に品質向上を狙うアプローチにしかなり得ないということだと思います。 簡単な言い方をすると前者はベータテストみたいな形でシナリオフリーでユーザーに使ってもらうか、パイロットプロジェクトを行って、そこで品質を作り上げていくということでしょうし、後者に関しては、こういったソフトウェアトラブルの原因を追究し、どうすれば防げたのか?という問いに対して、本質的に「関係者間のコミュニケーションの改善」という答えに行き着いてしまうということです。 そう考えると、「Programming First Development」や「Test Driven Development」ってソフトウェアの品質向上にどれだけ寄与するのか...

僕は以前、プラントエンジニアリング会社に勤めていたのですが、そこであるシステム構築の計画の際に、部長に「検証はどのようにやるのか」と、聞かれ、答えに窮してしまった経験があります。 システムエンジニアとして何年か経験した今でも、検証プロセスに対してその時からそう成長した感じはしませんが、自分自身がシステムエンジニアとして品質に対するマインドが特段低いとは考えていません。 ハッキリ言ってしまえば、情報システム開発はプラントエンジニアリングほど成熟しておらず、品質管理もプラントエンジニアリングに見習うべきところが多いということです。(もちろん、情報システム開発が進んでいる部分も多々ありますが...) そういった他業種のベストプラクティスの流用に関しては、自動車業界を引き合いにだすことが多いと思いますが、受注産業である点やプロジェクト管理の手法(PMPなんか、元は建設業界の方が盛んでした)など様々な面から情報システム開発はプラントエンジニアリングに似ています。

例えとして、システム開発におけるプログラマとプラント建設における溶接工を比較してみます。 溶接はプラント建設において品質を作りこむための一つの大きな要素ですが、基本的には全ての溶接箇所にたいして、溶接手順やその溶接手順で十分な品質が出たことの証明(WPS/PQRと呼ばれる)が存在します。 この証明(=PQR)はプラントエンジニアリング会社の溶接技術者が確認するのではなく、第三者機関が確認します。 そして、それぞれの溶接手順(WPS)はどの溶接工でも施工して良いわけではなく、それぞれのWPSに対して認定された溶接工のみが施工を許されています。 が、一方システム開発ではどんなことをやっているというのでしょう? 何の認定もないプログラマに実装(=施工)のかなりの部分の裁量が与えられてしまっているのではないでしょうか?


この問題を考え始めたきっかけは、技術士口頭試験で以前題材となったということからなのですが、考えていくと、ちょっと極端に深く広くなっていき、キリが無いので、この辺で止めることにします。 午後はもっと楽しいことを考えることにしよう...

2008年12月22日月曜日

「原因」と「結果」の法則


★★★
以前は映画を週3本見る習慣があって、映画評論をしていたものですが、最近はあまり見なくなりましたね...でも、本を読むようになりました。
近くに、横浜市の図書館があるのですが、これがとても便利。 ネットで予約しておいて土日に取りに行けば良いので、新聞広告なんかで気になる本を見つけると、直ぐ会社から予約しちゃうんですね。 つまらなければ適当に読んで返しちゃえば良いし。 よっぽど気に入ったら買えばよい。
で、この本は先週か先々週の日経に広告が出てたんですね。
かの勝間勝代氏も絶賛していましたが、うーん...
読む価値のある本ではありますが...
僕自身は、結構この本に書かれているマインドを元々持っていたような気がします。
目から鱗という感じはなかったです。
子供に読ませてあげたい感じかな?
1時間以内に読める本ですし、多くの自己啓発書に引用され、皆さん絶賛している本ですから、読んでみる価値はあるでしょう。

BCP / ISMS / ITIL

引き続き、2008年度技術士二次試験見直し

今回のネタは...
情報工学部門(午後) 情報システムデータ工学のI-1-4

I-1-4 情報システムに関わる以下の用語を説明せよ。
BCP (Business Continuity Plan), ISMS (Information Security Management System), ITIL (Information Technology Infrastructure Library)

この設問は、どう捕らえてよいのか難しいところですね。正直、よく分かりません。
技術士の試験である以上、単に物知りクイズというのでは無いはずです。
BCP/ISMSとITILだと話のLevelが異なると思うのですが...どう応えればよいのか?
とりあえず、BCPとISMSは綺麗に纏めて、ITILは別な話として考えて見ます。

個人的な考え方では、BCPもISMSも情報システムの問題と言うよりは企業経営・企業統治の問題で、純粋な情報工学の話では無いと思います。とは言え、最終的に情報システムの話も入ってきますし、技術士に求められるものが単なる技術的知識だけでなく、その社会に及ぼす影響や社会的背景といったことが問われてくるので、おさえておくべき内容なのでしょう。

先ず、BCPとISMSですが、背景には企業活動のグローバル化があるのだと考えています。つまり、企業活動に関わる利害関係者が増えるに従って、一つの企業の問題が多くの企業に影響を及ぼすようになってきた。例えばBCPであれば、新潟中越沖地震における、ピストンリングメーカー・リケンの問題が有名です(http://itpro.nikkeibp.co.jp/article/COLUMN/20080723/311320/)。この例は、代替メーカーのいない状態でのリケンへの部品供給の依存により、多くの自動車メーカーがリケンの操業停止の影響を受け減産に追い込まれましたというものです。ISMSは扱うもの自身は情報セキュリティですが、企業活動において取引相手の情報セキュリティの管理体制が自社の経営に影響を及ぼすという点では同じ様な位置付けと考えて良いのではないでしょうか。

両社に共通して言えることは、「取引相手がちゃんとそういったことを考えておいてくれないと、危なくって取引できない」ということです。ですので、BCPもISMSも認証制度があります。ISMSは元はBS7799として英国で、その後ISO/IEC17700としてISOかされています。BCPは2007年末にBS25999として、BS化していますが、未だISO化まではしていません。そういった意味では、ISO9000シリーズやISO14000シリーズと似たような考え方と考えてよいのでしょう。

何れもいっていることは正しいのですが、個人的には、なんでもかんでもこうして認証制度化するというのは、どうなんだろう???という違和感もあります。

では、本題のBCPとISMSに関してですが、いろんなサイトから言葉を繋げると以下のような感じでしょうか?

BCP (Business Continuity Plan)
天災・戦争といった不測の事態に対して、事業を継続するための事前の対策。ここには、そういった事態に対して事業を継続・早期復旧のための対策から、維持・撤退の判断のプロセスも含む。昨今の企業活動において、情報システムは基盤をなすものである為、情報システムの不測の事態におけるサービスの継続、バックアップ・復旧等もBCPの一部として重要である。従来のバックアップを中心としたディザスタリカバリに加えて、事業継続の視点からリカバリにどの程度の時間が許されるのかといった視点や、サービスの継続の観点から、システムの冗長化やASPを利用したアウトソーシングまでを考慮するひつようがある。

ISMS (Information Security Management System)
企業などの組織が情報を適切に管理し、機密を守るための包括的な枠組み。コンピュータシステムのセキュリティ対策だけでなく、情報を扱う際の基本的な方針やそれに基づいた具体的な計画・実施・見直しまでを含むものである。ISMSでは情報の重要性の決定等は企業の判断に委ねられており、組織が情報セキュリティ確保・維持するためのPDCAサイクルに基づいた枠組みであり、第三者機関により、客観的に評価し認証する制度でもある。


ITILはBCPやISMSとは異なり、情報システムの運用のBest Practiceとい位置付けだと思います。先ずは、言葉の定義を各種サイトからの継ぎ接ぎで作っておきます。

ITIL (Information Technology Infrastructure Library)
情報システム運用管理のベストプラクティスの標準であり、サービスサポート・サービスデリバリの2つのカテゴリに対して標準を提供する。サービスサポートはサービスデスクの運用からインシデント管理等のサポート業務の標準であり、サービスデリバリはサービスレベル管理から、財務管理・可用性管理といった、サービスの管理業務の標準である。

ITILにもBS15000およびISO/IEC20000の認証制度があります。ただ、BCP・ISMSの場合、一般的な企業にたいして、「取引相手がちゃんとそういったことを考えておいてくれないと、危なくって取引できない」と、いう意味で必要とされていた認証であるのに対し、ITILの認証は運用まで請け負うSIやASP等の情報システムサービスの提供者が、サービス利用者に対してサービスのレベルを証明するためのもので、ちょっと位置づけが違います。

とは言え、情報システムに関するアウトソーシングという観点から言うと、認証が必要な背景はおなじとも言えなくもありません。

しかし、認証だらけの世の中ですねぇ...

2008年12月21日日曜日

木構造に基づく編成法と動的ハッシュによる編成法

2008年度技術士二次試験を見直しています。
情報工学部門(午後) 情報システムデータ工学のI-1-2は以下の様な問題でした。

I-1-2 関係データベースにおいて、ある関係の属性に索引を設ける場合に、編成法として、木構造にもとづく編成法(B+Treeなど)と動的ハッシュによる編成法(リニアハッシュなど)が選べるとする。それぞれの方法について、他方より有利と予測できる応用例を示し、その理由を述べよ。

実際の答案では、木構造やHashに関して、あまり深く書く紙面はありませんから、以下を参考に特徴的な部分を記述することになるのでしょう...
http://objectmaniacgallery.blogspot.com/2008/12/btree.html
http://objectmaniacgallery.blogspot.com/2008/12/linear-hash.html

そして、Pros & Consですが思うに以下のようなことでしょうか...
動的Hash:

  • 圧倒的に検索速度が速い=O(1)。(Synonymによる多少の低下はあっても、Hash空間を拡大することで改善可能でしょう。)
  • Indexの更新が起こりにくいので、頻繁にTransactionのある状況でもPerformanceの低下が少ない。(Linear HashではHash空間の拡張の際に多少のCostは掛かるが...)
木構造:

  • 検索条件で、範囲指定がされた場合に有利(<や>等)。HashだとIndexの意味が殆どなくなってしまうのでは?
応用例として、あまりすばらしいのは考え付かないけれど、動的Hashであれば、IDなどでPin Pointに検索をかける場合は威力を発揮し、木構造であれば、IDが何らかの順番を意味している場合などに、範囲指定して検索を書ける場面が多ければ威力を発揮すると言うところなのかなぁ?

B+Tree

先日のLinear Hash同様、今年の技術士二次試験はB+Treeに関しても出題がありました。
結構良い問題ですよね...


先日は、Linear Hashを調べるので結構時間が掛かってしまったので、今日はB+Tree。


B-Treeに関しては、「情報処理試験 ソフトウェア開発技術者完全攻略〈2004年版〉」を参考にさせていただきました。(ところで、この本、結構重宝しています。なんで改定版が出ないのでしょうか...)



B+Tree(B+-Treeと書く場合もある)はB-Treeの改良型です。
B-Treeとの大きな違いは、Data自体をNodeに格納せずLeafに全て格納することです。NodeはKeyとPointerのみを持つので、B-Treeと比較するとNode当たりのKeyを大く取れます。この考え方はもとはISMA(http://ja.wikipedia.org/wiki/Indexed_Sequential_Access_Method)から来たもので、B-TreeとISMAを組み合わせた考え方がB+Treeともいえます。
また、B+TreeはLeaf間にPointerを持っており、比較演算子の処理等もB-Treeと比較して容易ともいえるかと思います。
Keyの追加・削除やNodeの分離といった処理は、基本的にB-Treeと同じですので、こちらを参考にして下さい。→(http://www.atmarkit.co.jp/flinux/rensai/fs02/fs02c.html


リニアハッシュ(Linear Hash)

今年の技術士二次試験には、Linear Hashに関する出題がありました。
恥ずかしながら、僕はLinear Hashって分からなかったのですが、Hashに関する一般的な知識から何とか回答することはできました。
木構造との比較でPros & Consを求めた出題ですので、Linear Hashを深追いする必要はないのでしょうけれど、分からなかったことをそのままにしないのが僕のPolicy。なぜかあまり情報が見つからなかったので、Memoっておくことにしました。

Linear HashのHash関数は他にもあるかも知れませんが、調べた感じでは...

h[i](c) = c mod (2^i)N

式の意味は後で分かると思うので、実際の動きを追ってみます。

まず、Hash空間のSizeの初期状態が4だとします。(N=4)
このとき、iは0としておきます。(今は深く考えないでください。)
すると、現時点でのHash関数は

h(c) = c mod 4

ここで、例として5,7,8,14,17,12とIndex化していきます。
この時点で、Hash値とそこにぶら下がった値は下の図のようになります。

この時点でHash値0と1はSynonymが発生し、検索効率が落ちています。
そこで、Hash空間を大きくして、Synonymが極力発生しないようにしたいと思います。

しかし、普通のHashであれば、全ての値に関して、Index化をやりなおす必要がありますのでちょっと大事になってしまいます。Linear Hashでは全ての値についてIndex化を行う必要はありません。
手順を見てみましょう。
とにかく、Hash空間を0~4に増やします。

そして、ここが面白いところですが、Hash関数は
h(c) = c mod 5
ではなくて、もとの定義のiを1増やして
h(c) = c mod (2^1)4 = c mod 8
と、するのです。
ですが、この様にすると、例えば、7のHash値は7ですから、Hash空間のSizeを越えてしまいます。そこで、結果として得られた「Hash値がHash空間のSizeを越えるようであれば、前と同じHash関数を使う」と言うことにしておきます。
すると、Hash空間の1~3にぶら下がっている値は、結果としてHash値変更無しと言うことになります。影響を受けるのは、Hash値0にぶら下がっている値だけです。

Hash値0にぶら下がっている、8と12のHashを上に従って計算すると、それぞれ0と4。
ですので、12は4の下に動かします。

さらにHash空間を拡張してみます。これも面白いところですが、Hash関数は

h(c) = c mod (2^1)4 = c mod 8
のまま利用します。しかし、Hash空間が広がっていますので、「Hash値がHash空間のSizeを越えるようであれば、前と同じHash関数を使う」というRuleの部分の関係でHash値1にぶら下がっている5と17が影響を受けます。つまり、5のHash値は5ですが、17のHash値は1のままですので、値5がHash値5の下に移動します。ここでも影響を受けるのは、Hash値1の下だけです。


と、この様に、Hash空間の拡張が、Incrementalに出来るので、Hash空間が足りなくなった!!と後でジタバタする必要が無いわけですね。すばらしい!!



2008年12月20日土曜日

Failed to unlock all EM-related accounts

僕はOracleでもなんでも、開発環境は昔からおんなじPasswordを使っていたんだけど、そこに"@"が含まれていたんですね。 先日、会社でOracle 10gをInstallしていたら、こんなErrorが...

Database Configuration Assistant : Warning
....
Failed to unlock all EM-related accounts ....

で、Enterprise Managerが作成されない。
これだから、Oracleは嫌いですね。
大体、なんで管理画面がWeb Baseなんだっつーの。
やめてクレー...

Internetでしらべても、なかなか解決しなかったのですが、発見!!
OracleのSYSやSYSTEMのPasswordに"@"が含まれていると駄目なんですね。
9iのときは問題なかったと思うんだけど...

どうも、SQL Plusが受け付けないとかなんとか同僚に教えてもらいました。
そういや、今までApplicationを上にか被せてつかうことしかしたことないし、9iのときは、Java Baseの管理画面だったからなぁ...気付かなかった。