« 2005年04月 | メイン | 2005年06月 »

2005年05月27日 (金)

AmritaHandler(仮) 20050526版 [テクニカル]

前回はこちら

Ruby on RailsのマニュアルにあるTodoアプリケーションをAmritaHandler風に作ってみた。modelはActiveRecord風に実装。実際にActiveRecordを使うことも可能なはず。

しかし、調子に乗ってmodelにアノテーションをつけたらmodelが特定のviewに拘束されるというひどいことになってしまった(当然と言えば当然だが)。これは悪い例ということになるが、かといって全メソッドをmodelに委譲するコードを書くのも面倒。やはり設計に問題があったか…。modelとviewは当然切り離されていないといけないので、helperにアノテーションをつけるという方向性になるか?せっかくいいところまできているので、当初のアイデアを崩さないように改造していきたい。

Amrita Rails Bridgeはかなりシンプルな構成なので、まずはこちらに対応させるのを先にするという手もある。

前からの変更点は多すぎるので割愛。仕様はさほど変わってない(はず)。

amritahandler_20050526.zip download
動作にはAmrita2 1.9.4とNeedle 1.2.0が必須。また、標準ではwebserver.rbにRubyGemsを使うようになっているが、使わない場合は require 'rubygems' を削除して、require_gem 'needle', '>= 1.2.0' を require 'needle' に書き換えればOK。

投稿者 4bit : 11:21 | コメント (0) | トラックバック (0)

2005年05月17日 (火)

REST [テクニカル]

Web Services Considered Harmful?(Webサービスは有害か?)

うーん刺激的。

寡聞ながらRESTというのを初めて聞いた。まったく俺が言ってたことと同じじゃん!(ってのはちょっと偉そう)ちょっと言い過ぎました。ただ昔から感じていたモヤモヤがパッと晴れた気分。

REST入門

これを読むべし。まだ途中だが、かなり重要なことが書いてある。今のWebアプリケーションのほとんどがダメダメな理由はまさしくこれ。もちろんRESTを完璧に守ることは不可能だが、その考え方を積極的に取り入れていくべきだ。

投稿者 4bit : 21:25 | コメント (0) | トラックバック (0)

2005年05月14日 (土)

J2EE勉強会 [テクニカル]

“J2EE Development Without EJB”読書会の流れを受けた勉強会に初参加。今回のテーマは

ということで、Seasar2のひがやすを氏が解説してくださった。

JTAとコネクションプーリングは、Seasar2のシンプルな実装を見ることで基本的な考え方がわかりやすかった。予習せず臨んだのでトランザクションは予備知識が足りなかったが、ポイントはつかめたと思う。

目当てのJSFは、時間が押して短くなったがかなりうれしい内容。ところどころS2JSFの実装例を紹介しながらJSFの全体の流れやExtension Pointが解説された。これは次回以降がかなり楽しみだ。

終わった後は飲み会。初めて参加するので少し緊張していたが、同じく初めての方もいて、楽しい時間を過ごすことができた。

投稿者 4bit : 23:55 | コメント (0) | トラックバック (0)

2005年05月12日 (木)

AmritaHandler(仮) 20050512版 [テクニカル]

前回はこちら

Amrita2が1.9.3から1.9.4にバージョンアップしてだいぶいろいろ変わっているので、対応できるように修正。前回からの変更点は…

amritahandler_20050512.zip download
動作にはAmrita2 1.9.4とNeedle 1.2.0が必須。

基本の構想はだいぶ形になってきた気がする。今後は機能を追加しつつ、最大勢力のRuby on Railsに摺り寄っていこうかと考え中。

以下適当な説明。

サンプルのlist.htmlは、マスターメンテ系を意識していろいろ詰め込んでみました。もちろんそのままブラウザで確認できます。対応するモデルオブジェクトのlist.rbはこんな感じ。


class List
attr_reader :items
def initialize
item1 = ListItem.new
item1.input = 'foo'
item1.options = [ {:text=>'hoge1', :value=>'hoge1'},
{:text=>'hoge2', :value=>'hoge2'} ]
item2 = ListItem.new
item2.input = 'bar'
item2.options = [ MenuOption.new('hoge3'), MenuOption.new('hoge4') ]
@items = [item1, item2]
end
end
class MenuOption
attr_reader :text, :value
def initialize(value)
@text = value
@value = value
end
end
class ListItem
attr_accessor :delete, :input, :select1, :select2, :radio1, :radio2
attr_writer :options
*ATTR_ACTION_CHECKBOX = :delete
*ATTR_ACTION_TEXTBOX = :input
*ATTR_ACTION_SELECT = :select1
*ATTR_ACTION_SELECT_DYNAMIC = { :name=>:select2, :item_id=>:select2option, :items=>:options }
# :text=>:text, :value=>:value はオプション
*ATTR_ACTION_RADIO = :radio1
*ATTR_ACTION_RADIO_DYNAMIC = { :name=>:radio2, :item_id=>:radio2input, :items=>:options }
def initialize
@delete = false
@input = ''
@select1 = '2'
@select2 = ''
@options = []
@radio1 = 'B'
@radio2 = ''
end
end

定数アノテーションがかなり増えました。意味は名前でなんとなくわかってもらえると思います。 ATTR_ACTION_SELECTATTR_ACTION_SELECT_DYNAMICの違いですが、前者の場合list.htmlにoption要素がすべて書いてあって、それをそのまま表示します。後者の場合はhtmlにはテンプレートとなるoptionが1つだけ書いてあり、アノテーションの:itemsに指定された名前のプロパティからoption項目を動的に生成します。データはHashと独自クラスのどちらも使えます。

ロジックはActionクラス(listaction.rb)に書きますが、マスターメンテ系なのでロジックはあまりありません。データベース連携などの機能はまだありませんが、Actionクラスに少し書き足すだけで簡単にできるでしょう。

投稿者 4bit : 21:56 | コメント (0) | トラックバック (0)

2005年05月08日 (日)

スヌーカー初プレイ [ビリヤード・スヌーカー]

ついにやってきました、スヌーカー初プレイ。スヌーカークラブの講習会に参加。

まず最初に、スタンスや構え方、ショットするまでのルーティンワークについて学ぶ。次に簡単なボールをポットする練習。しかしぜんぜん入らない。今までプールでいかに適当に撞いていたかを実感。なんか右に外す悪い癖が出てるし…。

そして実際にゲーム形式の練習。時間短縮ということでレッド10個でスタートしたが、俺も相手の人も全く入らず。ファールの得点だけが延々と加算されていく…。いやー、マジで難しいわ、これ。結局それぞれレッド1個ずつぐらいしかポットできず終了。

悔しいので、時間延長して講習会を受講した俺含む4人でダブルスで1フレームゲームをやった。しかしやっぱり入らない。入れたのは穴前のボールばかり(そのうちレストが2回ぐらい)。当然のごとくポジションなんて考えられないのでブレイクも続かない。

入らない入らないと言ってはきたが、やはりプレイしていると楽しい。何といっても音がいい。手球が的球にヒットするときの「カーン」という甲高い音。勢いよくポットされたときの「スコーン」という音(あんまり出なかったけど)。プールにはない音で、テレビで観戦していても心地よいものだが、実際にプレイして間近で聞くとさらに気持ちいい。

これはぜひ続けたいと思ったので、帰りにスヌーカーキューとケースを購入。安いものだけど、持ってれば気持ちも違うだろうし。プールのキューすら持ってないのにスヌーカーのキューを買うのも間違ってる気もするが…。

スヌーカークラブは遠いのであまり頻繁には行けないけれど、とりあえずプールで修業して少しはスヌーカーでもショット精度を上げられるようにがんばっていこうと思う。

投稿者 4bit : 21:02 | コメント (2) | トラックバック (0)

2005年05月03日 (火)

Embassy World Championship 2005 Final [ビリヤード・スヌーカー]

Matthew Stevens v Shaun Murphy

キュースポーツ世界最大の大会「エンバシーワールドチャンピオンシップ」。ついに決勝の最後のセッション。EUROSPORT.DEでインターネットライブ中継されていたので、夜を徹して観戦。インターネットってすばらしい!(感涙)

最後のイブニングセッションは、スティーブンス1つリードの12-11からスタート。“BEST OF 35 FRAMES” すなわち先に18フレーム取ったほうが栄光のワールドチャンピオンの座に。

追記:5月5日現在、EUROSPORT.DEのサイト上で決勝の最後のイブニングセッションのビデオを見ることができます。http://www.eurosport.de/snooker/の右上のほうのVIDEOにある“Murphy-Stevens: WM-Finale Teil I, II, III”をクリックしてください。3分割で合計4時間弱です。ただし実況はドイツ語です。何日か経つと見られなくなるかもしれないのでお早めに。

第24フレーム:攻めたマーフィー、いきなりのセンチュリーブレイク107点でフレーム奪取。これで12-12のタイ。

25:マーフィーはとにかく攻める。何回か外したが、そのたびに狙いがない形で残るという運も。スティーブンスがファールし、フリーボールになったところから攻めてフレーム連取。ついに逆転。

26:スティーブンスがセンチュリー目前、95点でレッドをミス。しかしスティーブンス取り返す。

27:セーフティーも冴えたマーフィーが取る。14-13。インターバル。

28:スティーブンスのミスからマーフィーが逆転で取る。

29:マーフィーがプラントを決めブレイクを伸ばすかと思いきや次のレギュラースポットのブラックをまさかのミス。結局スティーブンスがフレームを取り返す。

30:今度はスティーブンスが穴前のレッドをまさかのミス。そこからマーフィーはブレイクを伸ばすが64点でレギュラースポットのブラックをミス。1スヌーカーとなってスティーブンスはイエローを絶妙のショットで隠す。するとマーフィーは2クッションでイエローに当ててさらにグリーンで隠す神業ショット。凌ぎきったマーフィーがフレームを取り、16-14。

31:スティーブンスが意地のセンチュリーブレイク124点で奪取。これで流れが変わるか?

32:途中ミスがありながらもマーフィーにほとんど撞かせずスティーブンスが連取。16-16。追いついた。

33:マーフィーが97点ブレイクで奪取。ついにワールドチャンピオンに王手。

34:スティーブンスが先手を取るが、なんと20点でミス(?まさか止まると思ってなかったので見てなかった…)。マーフィーがプレッシャーに負けずその後をみごとに取り優勝!18-16。

全体的に、マーフィーのアグレッシブな姿勢とさらに入れの強さが印象的だった。エンバシーならではの緊張感は普段プレミアでは味わえないもので、すばらしかった。

こんなすばらしい試合をインターネットでライブ中継してくれるEUROSPORT.DEに大感謝! あとは途中でときどき重くなるのをなんとかしてね(贅沢なお願い)。

投稿者 4bit : 07:14 | コメント (2) | トラックバック (1)