ファイルシステムでHello World
この連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。

作者 Fernand Galiana, 翻訳者 長部 広太 投稿日 2008年3月1日 午前6時15分
最近、企業がアジャイルプロセスに対して献身すべきだと要求する傾向が、多くの企業で見られます。我々は皆、気を遣い、早く納品をすることを誓わされるが、そのこと以上に長く頻繁にイテレーションを繰り返しスクラムミーティングで座ったり立ったりします。しかし、実際のところ、あなたが作ったアプリケーションが成功しているのか、または失敗しているのかどうかなんてことを、どのようにして判定することが出来ますか?ページヒットやヒート・マップが、マーケターやユーザービリティの研究を行っているPHD保持者のみに有効であることを我々は皆知っています。あなたが作ったアプリケーションの中で必須だと言われた機能が実際使用されていることや、あなたの顧客が実際それらをどのようにして使用しているかということを、どうやって正確に判断していますか?より重要なことは、あなたの製品や会社の成功のために正しい方針を繰り返し行っているということを、どのようにして正確に判断していますか?そして間違った方針でないことをどのようにして判断していますか?
MOleプラグインはまさに上記の問題を解決するために生まれました。つい最近のことですが、私が構築していたアプリケーションの納品時期が迫っていました。このアプリケーションの機能は沢山あり、コードのテストを行い、そして早く納品するよう催促されました。製品要求事項に基づいたオプション機能がいくつかあり、我々はそれらを実装するために長時間あくせくと働きました。機能の内の一つは、洗練されたAjaxベースのスライダーでした。そのスライダーを使うと、ユーザはランキングアルゴリズムに基づいたコンテンツを取り出すことが出来ます。顧客はスライダーを使うのだろうか?もし使うとすれば、どの設定を使うのだろうか?と我々は思いました。2、3千ドル相当のユーザビリティ測定器を使用したり、無数の時間をかければ、上記のような疑問も明らかになるでしょう。しかし金と時間の浪費に耐えることが出来る人なんているのでしょうか?結果として、子守りをする時間が不足し、ログも不足し、何千もあるアクションのひとつを変更しようとする試みをしなくなるので、我々は特定の機能をインターセプトし、イベントを記録する方法を必要としました。その結果我々は、この価値がある機能を測定しレポートする方法を確立しました。我々は、我々が作ったアプリケーションで活動するスパイのような存在が必要でした。言い換えると機能をインターセプトし重要なイベントを記録する機能が必要でした。MOleプラグインを使用して、ユーザが入力した貴重な情報を集めることが出来ました。MOleプラグインは我々に次のイテレーションで調整を行うのに必要なフィードバックを提供してくれました。結局のところ、必要と思われた機能の内の幾つかは実際全く使われなかったということが分かりました。同様に注意を向ける価値があることと言えば、MOleプラグインはテストサイクルで、我々QAチームのカバレッジと効率さを評価するのに役立つということが分かったことです。
MOleプラグインを使ってみたくなったことでしょうから、ここからはあなたのアプリケーションを監視するのに必要なステップを書いておきます。
ruby script/plugin install svn://rubyforge.org/var/svn/liquidrail/plugins/mole/trunk上記のコマンドを実行し、MOleプラグインをインストールすると、mole_features及びmole_logsというテーブルがアプリケーションが使用しているデータベースに作られます。
MOLE = File.new( "#{RAILS_ROOT}/config/mole.conf" )
MOLEABLE_APP = true
MOLE_PERF_MAX_TIME = 5
MOleプラグインを組み込んだアプリケーションのやりとりは全て、mole.confファイルを経由して行われます。プラグインのインストール時に、mole.confファイルのサンプルファイルがconfigディレクトリに保存されます。MOLEABLE_APP変数の値をtrueにするとMOleプラグインが有効になり、falseにするとMOleプラグインが無効になります。MOleプラグインには長時間動作しているアクションを記録する機能がビルトインされています。後に取り上げますが、MOLE_PERF_MAX_TIME変数にて、デフォルトのパフォーマンス閾値を5秒に設定しています。
loadMOLE.path ifFile.(MOLE.path) and MOLEABLE_APP
この一行をApplicationControllerクラスの中に追加することにより、MOleプラグインの設定がロードされ、あなたのRailsアプリケーションの何をどうやって監視すれば良いのかを教えてくれます。たった一ファイルに設定を書くだけで、MOleプラグインのやりとりが全て行われます。コントローラクラス全てにMOleプラグインの設定を書く必要はありません。ユーザによって特定の機能が使われた時に、どこの何をキャプチャーするかを設定ファイルに書いておきます。
MyController.before( :feature => :show ) do |context, feature, args|
Mole::DbMole.mole_it( context, feature, context.session[:user_id],
:some_var => context.instance_variable_get('@myVar'))
これは、MyControllerクラスのshowアクションを、showアクションが呼ばれる前にインターセプトします。そしてMyControllerクラスの状態を、インスタンス変数myVarをデータベースに記録します。従ってアクションが呼ばれたという履歴を記録出来るだけでなく、特定の呼び出しが行われた時のコールの状態を記録することも出来ます。.
或いは...MyController.after( :feature => :show ) do |context, feature,ret_val, args|
Mole::DbMole.mole_it( context, feature, context.session[:user_id],
:some_var => context.instance_variable_get('@myVar'), :return => ret_val))
先程と同じ考え方ですが、上記のコードは、showアクションが呼ばれた後に、showアクションをインターセプトします。
SnitchとYahoo! Widget MOlet版のコンソールを使用すると、GUIでアクションを監視出来ます。

Snitchのソースコードは、以下のサイトでダウンロード出来ます。:
svn://rubyforge.org/var/svn/liquidrail/plugins/mole/samples/consoles/snitch
Snitchをダウンロードしたら、インストールを終えるために以下のコマンドを実行する必要があります。:
rake setup
ユーザを管理しているテーブルと、どのカラムを使用してユーザ名を表示しているかを特定することによって、アプリケーションにユーザモデルにアクセスする方法を伝えます。上記のコマンドを実行すると、usersテーブル及びそのテーブルのどのカラムを使用してユーザ名を表示すればよいかを指定して下さいと促されます。また同様にアプリケーションが使用しているデータベースを使うようにsnitch/config/database.ymlファイルを編集する必要があります。このコンソールアプリはあなたのアプリケーションのデータベースを変更することはないので心配はいりません。
このウィジェットアプリケーションを実行するには、プラットフォーム毎のYahoo! Widget Engine(サイト・英語)をインストールする必要があります。また以下のコマンドを実行しMOlet Widgetをダウンロードして、それをウィジェットがインストールされたディレクトリへ保存する必要があります。ウィジェットがインストールされたディレクトリはプラットフォーム毎に異なるので注意して下さい。具体的にはMACの場合、Documents/Widgetsディレクトリへ保存してください。Windowsの場合は、Documents and Settings/user/widgetsディレクトリへ保存してください。
svn://rubyforge.org/var/svn/liquidrail/plugins/mole/samples/consoles/widgets/molet
MOleプラグインに興味を示し、ここまで読んでくれてありがとうございます。中身がぎっしりと詰まった要求仕様書を読むことや、ダイエットの講習会なのに肥満の原因になるピザを見つける方が簡単だなと思っても、試しにMOleプラグインを使って頂けたらよいなと思っています。あなたのMOleプラグインを使ったアプリケーション監視体験を聞かせて頂けたら幸いです。そして我々はあなたがMOleプラグインを正しく動かせるようお手伝いすることに最善を尽くします。MOleプラグインを改善するのに役立つコメントや提案がある場合は、思い切って言ってみて下さい。
Fernand Galiana氏(サイト・英語)は、Imhotep Software LLCのオーナで、Imhotep Software LLCはコロラド州デンバーにある、コンサルティング及びRailsのトレーニングを行っている会社です。Galiana氏は主にユーザインタフェースとmiddle tier周りに関するソフトウェア開発の経験が15年あります。彼はまたRailsのチャートプラグインZiYa(サイト・英語)の作者でもあります。現在Galiana氏は、Rails ユーザーグループ デンバー支部のホストを務めています。
原文はこちらです:http://www.infoq.com/articles/intro-to-the-moleこの連載では"ファイルシステムの作り方"をご紹介します。第1回目の今回は簡単なイントロダクションと単純なHello Worldファイルシステムの作り方を説明します。次回以降で詳しい解説と本格的なファイルシステムの作り方をご紹介しようと思います。
あなたのチームが、既存アプリケーションを「シングルトンの入れ子」設計から依存性注入(DI)へ移行しようとしているなら、この論文に心引かれるでしょうが、DIへの移行は難しいことが分かっています。論文にはGoogleのJava DIコンテナ(Guice)の名を入れていますが、Javaや.NET、Python、Rubyなどにも当てはまります。
アジャイルの「自己組織化チーム」のパラダイムでは、チームのメンバに新しいスキルが要求されます。この記事では、発展しつつあるチームの自己組織化を壊さずに、新たなスキルを伝えるためのいくつかの戦略を提案します。そして、新しいスキルを身につけるのに役立つ資料のありかを提示しています。
今回の記事では、非同期ワークフローと呼ばれるワークフロー機能の面白い使用法を考察しますが、非同期ワークフローは.NETの非同期プログラミングモデルを単純化することを目的としています。
アーキテクチャは一般に、Word文書に主として見られるような極めて実体のない、ソフトウェアシステムの概念的な側面であるか、または完全に技術によって駆動されるものかのいずれかです。そのどちらも間違っています。では、どう対処すればよいでしょうか? この記事ではアイデアを説明します、そしてアプローチのキーポイントを要約します。
Werner Schuster氏が、簡単な例を示しながら、Javaのようなプロパティをメタプログラミングを使ってRubyに追加する方法を示します。
現在のRIAアーキテクチャにおいて、クライアント/サーバーの通信は重要な位置を占めています。本稿では、James WardとShashank TiwariがアドビによるオープンソースのBlazeDSメッセージングサーバーの世界へ飛び込みます。
ウィルス対策ソフトや情報漏えい防止用のソフトは、いわば影の存在です。ユーザの操作性やGUIを工夫する以上に、いかに目立たない存在となるかにその技術を注ぎ込んでいます。ここでは日立ソフトが開発した「秘文」の事例を紹介します。
No comments
返信