“2004/05”な記事

シャイニング・フォース 黒き竜の復活。link

 シャイニング・フォース 黒き竜の復活(シャイニング・ワールド)

 あー、懐かしいっすね、セガのファイアーエムブレム(←なんたる言い草かっ)、ゲームボーイアドバンスでリメイクですかぁ。我が家をあさればオリジナルのメガドライブ版が出てくるですよ。

 今は任天堂サイドで“マリオテニス”とか“マリオゴルフ”とか作っているキャメロットの高橋(兄)が、当時はセガ専属の様に活動していたクライマックス時代に作成した最後のゲームで(←ってマニアな知識だな、おい)、その後高橋氏は株式会社ソニックを立ち上げてシャイニング・フォースII、外伝、IIIと作っていってましたねぇ。外伝あたりから付いて行けないですけど、やっていないので。
 ゲーム自体はファイアーエムブレムと違ってキャラの生き返しが可能だったりとかして難易度低め、かつちょっと大味な感じでした。が、それ故、当時からゆるかった私にはちょうど良い難易度だったりしまして、例えRPG系といえどもシミュレーションゲームが嫌いだった私に開眼さえてくれた一本だったりします。

 ちなみに、当時の私はセガをこよなく愛していたりもしましたから、「足りないジャンルは外注しまくってでも自社で埋める」戦略にかなり付き合ってたりもしました。「セガのゼルダ」とか「セガのファイナルファイト」とか……。

ゼルコレでゼルダの伝説。link

 先日発売されたピクミン2の評価が頗る高い様で楽しみであります。楽しみでありますが私はまだ購入しておりません。なぜなら未だ前作をプレイ中でありまして(←先月お安く購入)、コレを片付けておかない事には次に進めないなんて思っているからに他なりません。
 が、最近その優先度が高くて然るべきピクミンよりも全然遊ぶ頻度の高いゲームが、ゼルダコレクション内の初代“ゼルダの伝説”だったりするのです。

 タイトル画面がダーンと表示された時には「そうそう、コウだった!」と懐かしく思ったものの、いざ遊び始めてみるとそれはもうそこはかとなく忘れていたりしまして(←オリジナルを遊んだのは確か中学生でした)、なんだかとってもいい感じ。斜めに動かないリンク(←主人公キャラ)も逆に新鮮だったり、チープなファミコンならではの画面も、やっている内に馴染んでしまって違和感を感じなくなってしまいました。
 「L5のダンジョンをクリアしたので、これからL6のダンジョンを探しまっす」辺りで奮闘中。

 いやしかし、こんなに難しかったかね、戦闘は。謎解き楽勝でサクサク進むのに戦闘ヘタ過ぎて死にまくってますよ。中学生の私は今の私より偉大だ。

ゴールデンウィークだ '04。link

 今年も県外から長崎へバイクでいらっしゃった方をお見かけします。日本の西の果てまでお疲れさまですー。私も計画してどこかへ行けば良かったと羨ましいですわ。

 そんなわけで、今年も連休中は自宅におります。平日に遊びに行ける私の様な輩は、休日にしか遊びに行けない人達の為に少しでもスペースを開けて差し上げねばならないのです。とかわざとらしく殊勝な事を言ってみますが、実際は人ごみとか渋滞とか大嫌いだからであります。
 ただ、今年は例年と違いまして仕事をしていないのがちょっと新鮮。例年だと、「連休とか関係なく働かせて頂いております」とかいう感じだったのだけど、今年は「連休とか関係なく連休し通しでございます」とかそんな感じ。あはあはあは

 関係ないですが、ゴールデンウィークというか、スペインのヘレスサーキットでGP(←オートバイの方ね)が開催される度に思い出すのが若井伸之という選手が亡くなった事(←今後はそれに「鈴鹿でGPが開催されると加藤大治郎が亡くなった事」が追加されるなぁ)。レース中ではなく予選中に、しかもピットレーンに飛び出して来た観客を避けようとして起こった事故……。まぁ、世間一般モータースポーツファン的には、この時期セナなんでしょうけどね。

自宅サーバもあるし。link

 古めの電源タップに掃除機を繋いで部屋の掃除をしていたら、タップの付け根あたりが降り曲がっていた為か断線して火を噴いた。丁度目に入っていた時だったので事なきを得たけれども、「あぁ、本当に火を噴くのね」なんて思った。

 危ないったらありゃしない。ホコリ積もりによる漏電ともども気を付けよう。

初期値っぽく設定(awakeFromInsertion(ec)).link

 ほとんどのRDBMSには初期値の機能(←INSERT文で値を渡されない場合に挿入する値を指定する)がありますが、WebObjects(と言うか EOF ですが)では似た様な処理をEOモデル側に実装する事ができます。EOモデルはRDBMSをJavaで表現したモノとでも考えて下さい。

 ソフト的にやりますからいくつかの方法があって(コンストラクタに入れたり、setterメソッド追加したり、validateForSave() 辺りに書いたり)、それぞれ微妙に動きやタイミングが変わりますからその時々で最適な方法を選択すべきですが、私が望む挙動というのは大体 awakeFromInsertion() メソッドをオーバーライドする事でOKだったりします。
 例えばこのアプリでは日記の登録日時を dates という名前で保存する様にしていますが、件のメソッド内で日時を取得し設定しています。仕様上、元のメソッドも呼ぶ方がいいので

public void awakeFromInsertion(EOEditingContext ec) {
    super.awakeFromInsertion(ec);

    if (this.dates() == null) {
        this.setDates(new NSTimestamp());
    }
}

 みたいな感じです(←実際は if で囲っていないけど)。
 ちなみに、ec.insertObject(anObject) などとして EOEditingContext に挿入した時点で有効になるのも何かと便利なのです。

最近のたくぅさん。link

 なんかゲームやったりとかDVD観たりとか(←TRICK 3見終わりました)ばかりやっている感があるのですけども、一応ちゃんと WebObjects 周りの事もやってまして、いや、やっているというか本を読んでおさらいしているだけなんですけど……。まぁ、じわじわと。

 政治家さんが国民年金未納云々とかで辞めちゃったり辞めさせられちゃったりしていますが、恥ずかしながら私も未納の時期が力一杯あります(←未加入ではなく未納です、だって勝手に 以下略)。むしろ未納の期間の方が長いです。ここ二年程は納める事ができてますけど、無いモノは無かったんです。迷惑かけてごめんなさい。
 遡って納められる様に改正してくれれば、納める気持ちだけはありますよ、稼げるかどうかの方が問題ですけどー。貰える様になる前に死んでしまうから納めませんなんて言いません。今の方法はどうあれ、年金という制度自体は素晴らしいと思ってますので。

 「一応、私はまだ十代です。正確には1f(←16進数)ですが」みたいなネタを何気に思いついてみたものの、周りは一般人ばかりなので通用しない。指を立てた状態を1、折った状態を0とすると「まだ片手で数えられる歳」とかも。……ごめんなさい。

E3 2004 における任天堂様。link

 任天堂の新型携帯ゲーム機“Nintendo DS”正式発表!(SOFTBANK GAMES)

 タッチスクリーンもワイヤレス通信もGBAとの互換性も全て本当だった。メディアが二つ刺さるのも興味深い(←昔、ファミコンとメガドライブにカートリッジが刺さるカートリッジってのもあったけど)。
 GBA互換ありって事でかなりの確率で普及するでしょうね。私はGBASPをスルーしているので買ってしまう事でしょう。お金さえあれば、ですけど(←GCより高くなりそうだからなぁ)。

 ゼルダ最新作がE3で発表に! 宮本リンク見参!!(SOFTBANK GAMES)

 次のリンクはリアルらしい。って事で“時のオカリナ”調のグラフィックが公開されております。私は“風のタクト”のカートゥーン調も好きだったのだけど、評判悪かったのかしらん。まぁ、その次はまたカートゥーン調に戻るかも知れないけどね。

ーー追記ーー
 E3(任天堂)

 公式のE3ページ日本語版。GCやGBAのゲームのスクリーンショットとムービーも公開されてます。GCでは“Donkey Kong Jungle Beat(仮称)”、“Paper Mario 2(仮称)”。GBAでは“Legend of Zelda: The Minish Cap(仮称)”、“Super Mario Ball(仮称)”辺りに注目。GC版“Mario Tennis(仮称)”は言わずもがなって事で。

DirectAction.link

 WebObjects はデフォルトでセッション管理機能付きです。普通に作っていればセッション管理機能が組み込まれてその管理も楽々、むしろセッション管理機能無しのアプリケーションを作る方が難しかったり面倒だったりします。
 なのにあえて当サイトでは一部を除きましてセッション管理機能を排除する方向で作られています。それは別にセッション管理が嫌いとか無駄とか思っているのではなくて、この手の動的生成の静的ページではあまりよろしくない問題が生じるからであります。

 WebObjects でセッション管理機能を有効にしたページでは、URIにセッションIDとコンテキストIDというモノが含まれ動的なモノになります(←セッションIDは Cookie に保持させる事も可能)。WebObjects はこの二つを元に個別のページを生成し返しますので必要なモノですし、永続的ではないにせよ一意でなければなりません(←例えば二人のユーザが同時にアクセスしたとして、セッションIDとコンテキストIDの組み合わせが重なってはならない)。そして、セッションIDには有効期限があります。
 つまり、後でまた見ようとブックマークしたとしても、セッションIDの有効期限を過ぎた時点で無効になってしまうのです。エラーだけが返ってくる嫌なブックマークと化してしまうのです。「セッション切れてやがるから最初のページに戻りやがれ」とか言われてしまうのです(←変えられるけど)。
 如何にゆるくやっているページであろうともブックマークやリンクは大歓迎でありますし、自分で利用する為にもできなきゃ嫌過ぎであります。

 そんな事を解決すべく存在するのが Direct Action という仕組みです。プロジェクトのClassesグループ内に標準で作られる DirectAction.java というファイル内にメソッドを追加する事で(←WODirectActionを継承したクラスを自前で用意して、それに追加しても可)、任意の WOComponent を返す静的なURIに対応させる事ができます。

 とりあえず件の DirectAction.java の中身を見てみましょう。

public WOActionResults defaultAction() {
    return pageWithName("Main");
}

 という記述があると思います。これを見てピンとくるかと思いますが、アプリケーションの最初のページを返す Direct Action です。ちなみに、返っているのは WOComponent でメソッドが返り値として指定している WOActionResults とは違いますが、WOComponent(←WOResponse も)は WOActionResults をインターフェースとして継承していますのでこれでも大丈夫です。むしろ public WOComponent xxxAction() なんてメソッドにする方法をずっとやってます、最初に勉強した時にこうだったので。
 あと、少し決まりがありまして、“任意の名前Action”みたいにメソッド名の最後に“Action”を付けなければなりません。そして、その Dicrect Action をURIに含める場合は“Action”を省略しなければなりません。

 URIの記述規則は、

http://ホスト名/アダプタ/アプリ名/wa/Dicrect Action名

 となります(←自前でクラスを用意した場合は wa の後ろにそのクラス名を挿むとOK。というか、省略すると DirectActionクラスだと認識される)。

 例えばこのアプリに検索用コンポーネント SearchPage.wo が含まれているとして、DirectAction.java 内に

public WOComponent searchAction() {
    return pageWithName( "SearchPage" );
}

 という記述がありますと、http://web-ya.jp/cgi-bin/WebObjects/ReiAre.woa/wa/search で“けんさく”ページが表示されるのです。
 ちなみに上記URIは有効でして、表示される“けんさく”ページがセッションを使う一部のページだったりします。別にセッション機能を使わなくもできるのだけど、“かてごり”ページもあるし、検索結果をブックマークできなくとも問題ないだろうと手を抜いた次第でございます。