Hatena::ブログ(Diary)

達人プログラマーを目指して このページをアンテナに追加 RSSフィード

2010-12-27

日本文化は外人プログラマーから意外に尊敬されている?

JavaScriptの有名なライブラリーの一つとしてDojoというのがあります。

Dojo Toolkit

今まで私は仕事上はPrototype.jsjQueryを中心に使ってきたのですが、Spring JSで標準サポートされているし、今さらですがちょっと勉強しておかないといけないと思っています。

それで、恥ずかしながら、今まで「ドジョ」「ドジョー」とか呼んでいて、変な名前だなと思っていたのですが、実はこの単語は日本語の「道場」に由来しているみたいです。*1

他にも私が知っているものとしては、テストカバレッジ計測のEMMAはおそらく「閻魔」由来だと思います*2し、禅関連とか仏教関係とか結構日本語由来の名前を持つ製品やライブラリーは意外に多いみたいですね。

XPの本にも宮本武蔵の話が出てきたと思いますし、達人プログラマーの本にも日本の製造業の「カイゼン」の話が出てきます。外国のPGは意外にも日本の伝統文化を尊敬しているということですね。

日本のIT業界の現状を考えると、欧米に比べて劣等意識を持ってしまうものですが、外国の人は日本の文化に憧れている側面があると言うと言い過ぎでしょうか。隣の芝は青いということもありますが。

実際、個人を尊重する外国の文化だとPG一人一人が個別のオフィスを与えられるそうですが、逆に日本のタコ部屋開発の文化はXPペアプログラミングとかやりやすそうですし、極端な個人主義ではなくチーム全体の成果を重んじるという文化もアジャイルの考え方と適合します。カイゼンなどはリファクタリングに近い発想であると思いますし。だから、本来は日本の文化アジャイル開発に非常に向いているのではと思いますね。1000年以上の歴史を誇る日本の伝統文化に対して、ゼネコンSIerウォーターフォール文化はわずか数十年の歴史しかありません。そういうことから、日本で未来永劫アジャイルは絶対に流行らないと絶望することはないのかと思いました。本来であれば、外国よりももっとよいソフトウェアを作れる文化的な素地は十分にあるのかと思います。(Dojoの話題から、ちょっとこじつけすぎですが。)

*1:ちなみにExt-Jsは、最近Sencha(煎茶)と呼ばれているみたいです。Enterprise Web Apps: Design, Develop, and Test - Sencha | Sencha.com

*2:以前どこかで読んだ記憶があったのですが、探しても根拠となる記事が見つかりません。私の思い違いな可能性が大ですね。カバレッジツールというのは閻魔帳みたいにきちんとテストしていないとすぐにばれてしまうという意味かと思っていましたが。Emmaといのはごく普通の女性の名前のようです。

2010-10-19

RichFacesの部品に対して<a:support>タグのevent属性として適切な値について

Ajax4jsfの<a:support>タグを利用すると、通常のJSFの入力フィールドを簡単にAjax化できます。たとえば以下のようにして

<h:inputText value="#{user.emailAddress}" >
	<a:support event="onblur" ajaxSingle="true" reRender="errorMessage"/>
</h:inputText>

入力フィールドのフォーカスが外れた時点でAjaxでPOSTリクエストを送信し、バリデーションをかけることが可能です。

おなじ要領で<rich:calendar>や<rich:inplaceInput>の入力をAjax化できますが、event属性に指定する適切なイベント名をドキュメントから読み取るのが難しく、正しく動作させるまで結構苦労しました。一応、以下の通りの指定でうまくいくようです。

<rich:inplaceInput inputWidth="180" value="#{user.emailAddress}" defaultLabel="入力してください。">
	<a:support event="onviewactivated" ajaxSingle="true" reRender="errorMessage"/>
</rich:inplaceInput>
<rich:calendar id="birthDay" required="true"
	enableManualInput="true" value="#{user.birthDay}" datePattern="yyyy/MM/dd" >

	<a:support event="onchanged" ajaxSingle="true" reRender="errorMessage"/>
	<a:support event="oninputblur" ajaxSingle="true" reRender="errorMessage"/>
</rich:calendar>	

RichFacesの場合event名が通常のhtmlのタグの場合と違って過去形のようになっていたり(たとえばonchangeでなくonchanged)、子タグとして複数の<a:support>タグを指定しないといけなかったりとなかなか直感で正解にたどり着くのが困難でした。RichFacesのタグはAjaxと併用して使う場合が多いと思うので、このあたりをきちんとドキュメント化してもらいたいものです。

2010-10-15

Seam(JSF)アプリでセルを直接編集可能なテーブルを作成する方法?

MS Accessなどのアプリケーションでは、グリッドで直接値を編集するということが簡単に実現できるのですが、Seamアプリで同じような事がはたして簡単に実現できるのでしょうか?データ中心のレガシーなC/SアプリをJSFを使ってWeb化する際には、実際に要件として問題になりそうなところですね。

確かに、seam-genで自動生成されたアプリケーションでは編集画面や詳細画面などやたらと遷移が多いので、ユーザーの観点からは、もうちょっと便利にならないかと考えるのは当然でしょうね。RichFacesの<rich:inplaceInput>などのコンポーネントを使えばそれらしい画面を実装できそうにも思えますが(http://livedemo.exadel.com/richfaces-demo/richfaces/inplaceInput.jsf?c=inplaceInput&tab=usage)、AccessやExcelレベルの操作性とレスポンスを実現するのは簡単そうで意外に難しそうです。何とか画面だけは作れたとしても編集中のリスト全体の状態をサーバー側の会話コンテキストに入れたり、編集の都度Ajaxリクエストが発生するのは性能面でいろいろと問題が出そうですし。今のところ想定されるアプローチとしては

  • RichFacesやICEfacesなどのJSFAjax機構を利用してがんばる(商用JSFコンポーネントは?)
  • ExcelやCSVファイルのダウンロード、アップロードで代用する
  • Seam Remotingを利用しDojojQueryなどのJavaScriptライブラリからサーバーのコンポーネントを呼び出す
  • GWT+Seam連携機能を利用する(Ext GWTも利用可能か)
  • Flex+Seam連携機能を利用する
  • JSON変換機能を別途独自に用意し、Ext Jsなどの画面と連携させる

などが考えられます。もちろん、開発要員のスキルや、性能要件と使い勝手のトレードオフなどさまざまな要素に左右されるため、どれがベストというように一律に決めるわけにはいきません。うまいアプローチが見つかったらまた報告したいと思いますが、現状調査中です。