未踏が本格化すると、SOA について考えることなんてなくなってしまうと思うので、ここいらで SOA や Web 2.0 に関する私の考え方を整理しておきたいと思います。

SOA(サービス指向アーキテクチャ)と Web 2.0 は近しいところにおかれて語られることが多い気がしています。私は、両者はぜんぜん違うものだと思うのですが、そういうことを SOA の人に言うと、「え? おんなじ様なものでしょ?」と返されることもあります。確かに基盤技術はほとんど同じものを使っていますが、根本的な考え方が違っていると感じます。

○ SOA
SOA の一般的な理解はどのようなものなのでしょうか。多分、さすがに Web サービスをごにょごにょするというようなものだというような理解はもう終わっていると思います。SOA は、ひところ騒がれた Enterprise Architecture 的な考えを取り込んで、アプリケーションの機能や業務フローに登場するアクティビティをサービスとしてとらえて、変化に強い全体最適化されたシステムを作るための方法論(+それを実現する技術標準仕様と製品)的な意味合いを持つようになっています。今でもたまに、「SOA は Web サービスとどう違うの?」と聞かれることがありますが、SOA はサービスをどう組み合わせてビジネスをまわしていくかということを考えていくわけですから、個別の技術はあまりターゲットにしておらず(※)、根本的に違うといってもいいでしょう。実際、SOA で Web サービスを使わなくてはならないわけではありません。(使わないと非常にキツイですが。)
※ もっとも、実際には個別の技術(ESB だの WS-* だの)もターゲットにしていて、そこが SOA をわかりにくくしていると思います。

世の中的には、サービスの認識すら十分に行われていない企業が多いでしょうから、今の SOA はビジネスに必要なサービスはどのようなものなのか考えているところでしょう。SOA はビジネスと IT のギャップを埋めるというような言い方をするところもあります。まあ、それはそれで SOA の本質を表している気もします。

○ Web 2.0
私の理解が浅いのかもしれませんが、Web 2.0 は SOA 以上に定義があいまいです。最近の Web の状態を総称して Web 2.0 と呼んでいるのだと思いますが、SOA と違うと思う点は、SOA は IT ガバナンスに近い文脈で語られることが多いのですが、Web 2.0 はライフスタイルに関係する文脈で語られることです。ウェブ進化論とかウェブ人間論みたいな論調が SOA から出てくるとは思えないわけです。

技術的なコンセプトにも違いがあると感じています。基盤技術は SOA も Web 2.0 もほとんど同じなのですが、SOA で描かれるアーキテクチャは、ESB のようなものを中心にすえてバス型やスター型を意識させて、いかにもトップダウンを想起させます(サービスオーケストレーションという表現がいかにもですよね)が、Web 2.0 ではもっと曖昧でもやもやっとしたものになっています。強いて言うとネットワーク型(Web ですから)。Web 2.0 のアーキテクチャとして、リソース(データ)を重要視する REST がありますが、SOA は業務プロセスを構成するアクティビティを重視するので、そういう違いもあります。両者には Web サービスの設計方法も違いがあって、名詞を軸に Web サービスを設計する REST と、動詞を軸に設計する SOA という形になります。

ただ、技術基盤に対するスタンスは製品ベンダーの影が濃いか薄いか位の違いしか感じないですね。そういう意味では、IT エンジニアにとっては Web 2.0 も SOA もおんなじようなものだと。(※)

※ Web 2.0 ではユーザビリティは頻繁に話題に上りますが、SOA では話題に上りません。個人をあまり見ない SOA ならではですかね。基盤技術が同じでも、習得が必要なスキルは変わってくるかも。。。

○ 総括
Web 2.0 がビジネスモデルとライフスタイルを含んでいたり、SOA が IT ガバナンス的なものを含んでいたり、なんだかわけのわからない用語で世の中があふれていますね。仕事にも生活にも IT が必要になって領域横断的な用語が必要になったってことですかねぇ・・・。

Posted by あかさた
ビールの栓を開けるレゴ・マシーンなんて作っちゃう人がいるんですね。ET ロボコンでもマインドストームを使ってましたが、こういうのも面白いですね。

マインドストームをやりこんでいる人ってたまに信じられないようなことをしますが、こういう制約のあるハードの中でどれくらいのことができるのかみたいな挑戦というのは、燃える人がいるんでしょうね。最近は富豪的プログラミングばかりしているので、私はそういう気概を持ててないですけど。

ちょっとぐぐったら、以下のようなサイトが出てきました。マインドストームの本とか書いている人かも。

Joe's Mindstorms Gallery
http://homepage3.nifty.com/mindstorms/index.html

Posted by あかさた
以前の記事でトラックバック(受信のみ)を実装したと記述しましたが、ようやく送信も実装しました。要約の作成をちゃんとやっていない(今は全文を送信するという非常に迷惑な仕様になっている)とか問題は残っていますが。今のところ、はてなダイアリーへの送信には成功しています。

問い合わせ文字列に、title、url、blog_name、excerpt を指定して、post で送れば良いだけなのですが、Ruby の http 回りで少々てこずってしまいました。情報が少ないのです。

コードとしては以下のような感じです。
def send_trackback(url, article)

Net::HTTP.version_1_2
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, 80)
data = 'title=' + article.title +
'&url=' + Base_Url + 'articles/show/' + article.id.to_s +
'&blog_name=' + Title +
'&excerpt=' + article.content

response = http.post(uri.path, data)
end


Posted by あかさた
未踏がらみの話ですが、JavaScript を使って、ブラウザ上で VML や SVG を使って描画した要素をマウスで動かすということをしたかったので、調査してみました。結論を言えば、JavaScript で要素を動かすことはできました。ただ、JavaScript のコードを大量に書くと、クロスブラウザの問題などで手間がかかりそうなので、一歩踏み込んで script.aculo.us を使って楽をできないか試してみました。

実験としては、script.aculo.us の Draggable を使って、ブラウザ上で VML や SVG を使って描画した要素をマウスで動かすということをしてみました。

結論を言うと、VML はいけますが、SVG はいけませんでした。ちゃんとソースコードを読んだわけではないのですが、script.aculo.us の Draggable はスタイルシートの left や top を操作します。VML はこれで位置座標を変更できるのですが、SVG の Rect 要素などは、位置をスタイルシートで設定するわけではなく、x や y などの属性で位置を操作するためできません。script.aculo.us の Draggable をそういう風に書き換えれば動作するのだと思いますが、ソースを読むのもしんどいので、結局 SVG 向けには自前で Draggable 的なものを作成しました。

以下、例です。
■ VML(IE6 で動作確認済み)
○ VML


○ JavaScript(script.aculo.us)
new Draggable("vml_rect")


○ サンプル(VML)
IE だけですが、四角が表示されると思いますので、自由にドラッグしてください。





■ SVG(FireFox 1.5 以降で動作確認済み)
こちらは、script.aculo.us を使わずに自力で ECMAScript(JavaScript)をたたいて、SVG に埋め込んでいます。

※ IE では動作しません。

■ パフォーマンス
VML + script.aculo.us よりも SVG + ECMAScript の方が動作が軽いです。というか、かなりの差があります。調査していませんが以下のような原因が考えられます。

・ script.aculo.us のせい
script.aculo.us では、要素を半透明にしたりしています。

・ 環境依存
私の PC でだけパフォーマンスの差が出ているのかもしれません。(WinXP + IE6 + Pen4 2.8GHz + Mem 1GB + Geforce2 MX)

・ JavaScript エンジンの速度の差
もしかすると、スクリプトは IE の方が遅いとかあったかもしれません。

ふー、疲れた。

Posted by あかさた
未踏の開発の現実逃避(?)がわりに、トラックバックを実装してみました。個人的に驚いたのは、トラックバック自体は仕様が小さくて実装にそれほど手間がかからなかったことでしょうか。こりゃ広まるわけだ。

■ 参考
トラックバック技術仕様書
http://lowlife.jp/yasusii/stories/8.html

■ 概要
トラックバックを実装したといっても、トラックバック ping を受信する機能を実装しただけです。トラックバックの受信は簡単で、以下の問い合わせ文字列を持った HTTP POST リクエストを受け取れる URL を準備すれば良いだけです。
・ title(記事のタイトル)
・ excerpt(記事の要約)
・ url(記事の URL)
・ blog_name(ブログ名)

Movable Type では、url だけの ping を受け取れるようですが、一応このブログでは上記をすべて必須として実装しています。というか、上記くらいの情報がないとトラックバックの情報を Web に埋め込みにくいからです。

成功すると以下のレスポンスを返しますが、はてなダイアリーなどを試した限りでは、このレスポンスは無視しているかもしれません。エラーのレスポンスを返しても、何も反応がなかったので。

○ 正常なレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>

○ エラーのレスポンス
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>The error message</message>
</response>

Movable Type には、RSS でトラックバック URL を配信したり、記事に RDF を埋め込んで、トラックバック URL を自動検出させたりすることができるようですが、当面はそうした機能は必要性を感じないので、実装しないことにします。

■ 感想
実装は簡単でしたが、コードはあちこちいじらないといけなかったので、疲れました。もっと変更しやすいように書いておけばよかった・・・。orz

Posted by あかさた
このブログに Google の検索機能を追加してみました。右上の検索ボックスです。検索すると、このページ内に埋め込まれた検索結果を見ることができます。なんというか、便利な時代ですねぇ・・・。

少々てこずったのは、ブラウザのウィンドウが小さいときに、このページのような 3 カラムの真ん中に検索結果を入れようとすると、検索結果が右側のカラムにはみ出してしまうという現象が発生したことです。google の検索結果は iframe で貼り付けられており、pixel 単位でサイズを指定することもできますが、ウィンドウのサイズを小さくしたときには、iframe のサイズをよほど小さくしないとレイアウトが崩れてしまいます。そして、iframe のサイズを小さくすると、ウィンドウのサイズを大きくしたときに、間延びしたレイアウトになってしまいます。
とりあえず、今は検索結果を表示しているときは右側のカラムを表示しないようにしています。意外と、html と CSS だけでは、レイアウトがうまくまとめられないことが多いですね。
# 私のスキル不足かもしれませんが・・・。orz

Posted by あかさた
Web を彷徨っていたら、以下の記事で GWT(Java で JavaScript を書ける Google のツール)で TreeView を表現しているのを見かけました。私は GWT には詳しくないのですが、こんなこともできるんですね。JavaScript で Tree を表現しようとすると結構大変そうですけど。

OpenKM: Ajax Document Management System
http://ajaxian.com/archives/openkm-ajax-document-management-system

気になったので GWT を調べたら・・・Tree がありました!これで、TreeItem のドラッグアンドドロップとかできると完璧ですが・・・その辺はどうなっているんでしょう。Yahoo! UI Library(YUI)にも TreeView があったと思いますが、そのうち試して見たいところです。

Yahoo! User Interface Library
http://developer.yahoo.com/yui/

Posted by あかさた
そういえば、以前のプロジェクト(最近の仕事内容をふりかえる(10/10 ~ 11/10))で XPlanner(エクストリームプログラミングに特化したタスク管理システム)を導入してみましたが、結局チーム内でタスク管理が習慣化されずあまり使われませんでした。(--; 前の前の仕事や今の仕事ではtrac を使っていますが、こちらは簡単に浸透しました。機能だけで見ると、XPlanner も魅力的なのですが、ユーザビリティですかね~。

XPlanner
http://www.xplanner.org/

trac
http://trac.edgewall.org/

Posted by あかさた
VML を調べてて脱線。Canvas を VML で実装したものを発見しました。

ExplorerCanvas(Apache License V2.0)
http://sourceforge.net/projects/excanvas/
(via. Taken SPC

使えるかなぁ・・・?

Posted by あかさた
Java SE6 が出たみたいですね。個人的にはスクリプト言語との連携が気になっています。でも、当面さわっている余裕はないなぁ・・・。

以下、参考情報。

Java Platform, Standard Edition 6 Release
http://java.sun.com/javase/6/

秋元@サイボウズラボ・プログラマー・ブログ
http://labs.cybozu.co.jp/blog/akky/archives/2006/12/java_se_6.html

米Sun,Java SE 6を正式リリース
http://itpro.nikkeibp.co.jp/article/NEWS/20061212/256732/

Posted by あかさた