“2004/05”な記事

ドンキーコンガ2。link

 ドンキーコンガ2 ヒットソングパレード(任天堂)

 えー、お正月休みが明けた辺りからでしょうか、めっきり一人で遊ぶ事はなくなり、たまに友人が来た時などに踏み絵的に強引にプレイさせる(←これすらも最近はなし)、みたいな使い方をしておりますドンキーコンガに2が登場であります。
 使わずに放置されております“タルコンガ”コントローラが壊れてはいないかと一抹の不安を感じずにはいられませんが、この手のゲームが大好きでありますから買ってしまう事でしょう。

 ちなみに昨日ちらっとご紹介しました“Donkey Kong Jungle Beat(仮称)”は、他のゲームでも“タルコンガ”コントローラを活用しようというモノみたいでして、こういう姿勢もまた良しであります。

Mac OS Xとウィルス。link

 Mac OS X狙う新ウイルス、P2Pで感染拡大(ITmedia)

 って事で、最近ちらほらと聞く様になりましたね、Mac OS Xを狙うウィルス。今のところ私はウィルスチェッカーの類いは使用しておりませんが、そのうち必要になってしまうかもね。
 まぁ、今回のモノの様なのばかりだと必要にならなくてすみますが。

二朗号。の3link

 確かに10万円は超えませんでしたが9万円台でした……<修理代。
 ターボのパーツ代だけで5万円以上するらしいので納得はできますが、痛いモノは痛いのです。そろそろアルバイトでも探すか。

DirectAction と QueryString。〜DirectAction.の2〜link

 WebObjectsではなくHTTPの領分ですがQueryStringというのがあります。URIの最後の方によく見かける、“?”以下の“=”でペアになって“&”で区切られていたりする文字列の事で(←やたらと説明的)、ページ間で値をやり取りする為のモノです。一部の文字やマルチバイト文字をエンコードする必要がありますが、URIに引数などを仕込む事ができるので非常に便利です。
 非常に便利ですのでWebObjectsにもQueryStringを扱う仕組みが用意されています。そしてそれはDirect Actionを活用する為にもなくてはならないモノと言えましょう。

 HTTP経由でいろいろなサービスを利用する時に送る要求や問い合わせをHTTPリクエストと言ったりしますが、WebObjectsではそれをWORequestオブジェクトに変換して様々な場面で利用します。今回のQueryStringも、そんなWORequest経由で扱うモノの一つです。
 WORequestに用意してあるformValueForKeyメソッドを利用すると任意のキー名で渡された値を取得できます。WODirectActionでは request() というメソッドで利用中のWORequestオブジェクトにアクセスできるので request().formValueForKey("キー名") となります。例えば“key=aaa”といったQueryStringを受け取った場合、Direct Actionのメソッド内で

String aString = (String)request().formValueForKey("key");

 とすると aString の中身は aaa となります。ちなみに、formValueForKeyメソッドはObject型として返すのでString型にキャストしています。

 後はこの値を元に処理を行ったり、表示するコンポーネントへ渡したりすればよいわけなのですが、基本的にURIに埋め込まれた文字列で渡されて来ますから一発でStringとして取得したいし、場合によっては数値として、日付として取得したいです。Stringにキャストするくらいなら大して手間はかかりませんが、値を元にIntegerとかNSTimestampとか拵えるのは少し面倒です。
 予想通りそんなメソッドも用意されておりまして、

String aString = request().stringFormValueForKey("keyName");

 としたり、

Number aNumber = request().numericFormValueForKey("keyName", NSNumberFomatter);

 としたり、

NSTimestamp aTimestamp = request().dateFormValueForKey("keyName", NSTimestampFormatter);

 としたりできます(←下二つのformatterは“WOString.”辺りを参照のこと)。同じキー名で複数の値(←URI?key=aaa&key=bbb&key=ccc とか)を受け取った場合用に String で格納した NSArray として取得する

NSArray aArray = request().formValuesForKey("key");

 なんてのもあります。
 全てのメソッドが値が無かったり、“formatter”で整形できなかった場合に null を返すので、null が返ってくるかどうかで簡易入力チェックとしても使えますね。

DirectAction と WOHyperlink。〜DirectAction.の3〜link

 DirectActionなメソッドを追加すると(←自前のDirectAction.java系のファイルも同様)、WebObjects Builder側にも反映されて、WOHyperlinkのInspectorの“directActionName”attributeのポップアップメニューから選択できる様になります。“directActionName”を選択すると対応する“actionClass”も自動的に選択されます。楽々

 そしてInspectorの右上の“+ー”ボタンから“Add Binding”を選択し、Attribute欄に先頭に“?”を付けた文字列を入力、Binding欄に渡したい値を入力すればQueryString付きのDirectActionHyperlinkの出来上がり(←左の画像は“aString=a”とした場合の例)。バインドする値を変数にすれば動的にいけます。

DirectAction と WORequestHandler。〜DirectAction.の4〜link

 前回記事“DirectAction と WOHyperlink。”の様にして拵えたリンクのリンク先に「wosid=FmAzyQjh9X9G6YZetpx0CM」みたいな文字列が含まれている事に気がつかれるかも知れません(←気がつかなかった人は、今気がつけ、さぁ気がつけ)。これは最初の記事“DirectAction.”で少しふれましたセッションIDであります。
 くりかえしになりますが、WebObjectsではデフォルトでセッション管理機能付きですから、最初にアクセスした時点でセッションIDが生成され管理機能を発動してしまいます。これはこれでありがたい動きなのですけども、“れいあれ”さんの様にセッション管理機能を排除する方向で運用したい場合には邪魔以外の何モノでもありません。

 WebObjectsにはWORequestHandlerという抽象クラスがあります。RequestHandlerは受け取ったHTTPリクエストに合わせてどう処理をするか決めるモノで、デフォルトで3つ用意されています(←自前で作っても可。作った事ないけど)。
 DirectActionのリクエストを受け取った場合、WODirectActionRequestHandlerというWORequestHandlerを継承したクラスを用いて処理を行い、必要がない限りセッション管理をする事はありません。が、特に指定のないリクエスト(←例えば初期ページをよばれた場合など。このサイトでいうとhttp://web-ya.jp/cgi-bin/WebObjects/ReiAreとか)の場合ではWOComponentRequestHandlerの方を用いられてしまい、セッション管理を始めてしまいます。しかしこれは、デフォルトのRequestHandlerがWOComponentRequestHandlerになっているでだけで変更可能ですから、WODirectActionRequestHandlerを使う様に仕向ける事で対処できます。

 デフォルトのRequestHandlerは、プロジェクトに標準で組み込まれるApplicationクラスで管理されており変更可能ですので、Application.java内に記述されているApplicationのコンストラクタに

WORequestHandler directActionRequestHandler = requestHandlerForKey(directActionRequestHandlerKey());
setDefaultRequestHandler(directActionRequestHandler);

 の2行を追記すると、デフォルトのRequestHandlerはWODirectActionRequestHandlerとなります。

 そんなわけで、昨日書き忘れたネタでした。

ーー追記ーー
 WOHyperlinkにwosidを付けないだけなら、wosid をキー名に、falseをvalueでいける。と倉持さんより“けいじばん”(該当スレッド)で教えて頂きました。ありがとうございます。

最近のたくぅさん。link

 市長も知事も年金未納な長崎市。仲間だ仲間だ、わーいわーい。とか思わない。

 最近特に肩こりがひどくて、こりというより痛みが走りまくっているのが辛い。

 ふと思い立ってWOMailDeliveryで遊んでみたが、矢っ張り日本人には少々面倒でもJavaMailだと思った。

 Connector/J 3.0.12は差し替えて普通に使えてます。MySQL 4.0.20はまだ入れてません。いいかげんいちいちビルドするのもアレなので、これからはバイナリを入れてやろうかしらんとか思ってますのよね。

手もおかしい。link

 一括電遮断スイッチ付きのOAタップを使用しています。サーバやG5も接続されていて、外付けのHDDをバックアップする時にだけ引っ張りだして接続するのですが、たまに間違って電遮断しちゃう、ぽちっと。いや、結構頻繁にやってしまう、ぽちっと。今日なんて、切らない様に気を付けないと、と思いながらぽちっと……。

吊るしのMySQLで行きたい。link

 今後は本家で配布しているバイナリディストリビューションを使う方向で行きたい。て事で作業しました。

 LinuxだとRPM版もあるのだけど、いろいろ分けてインストールしなければならないし、開発に使っているMac OS X向けパッケージとも微妙に違いがあるので普通のモノを選択。“MySQL Manual | 2.2.12 MySQL バイナリディストリビューションのインストール”を参考に問題なくインストールでき、今までのData領域もコピー、リネームして使えてます。
 ただ、デフォルトのエンコードがujisではなくなりますので、JDBCドライバへ渡すURLを

jdbc:mysql://localhost/DB名?useUnicode=true&characterEncoding=EUC_JP&capitalizeTypeNames=true

 と、ちゃんとエンコード指定をしてやらないと文字化けします。

 そんなわけで、このれいあれさんアプリもreiare051u2となりまして、私的EOModelerで設定するぞ“Adaptor Info...”も上記の様に変更になりました。

フットボールキングダム -トライアルエディション-link

 PS2ゲームレビュー パサーの快感を堪能させてくれる意欲作「フットボールキングダム -トライアルエディション-」(GAME Watch)

 わたくし、買う気満々でございます。
 ナムコのちょっと変わったサッカーゲームって好きなんですよ。前あった一人称ゲー「リベログランデ」なんてのも買っていますし(←デキがアレだったのでほとんど遊ばなかったけど)。