ぬるぽ?

 JavaA2Zの実装回りの話をちょこちょこと。
 SQL 叩くところは全部 QueryRunner 使ってやってます。これ、ホントに便利。普通に SQL 叩くだけなら close() 叩く必要もないし、取得したデータをまとめてクラスにぶち込んでしかも List で返してくれるし。
 一応サンプルコードとか。

    /**
    *    単語ひとつを取得します。
    *    @param _wordId 単語ID。
    *    @return 単語データ。取得できなければ null を返します。
    */
    public WordData getWordData( String _wordId ) throws SQLException
    {
        try
        {
            QueryRunner qr = new QueryRunner( ds_ );
            
            // 単語本体の取得。
            WordData wordData 
                = (WordData)qr.query
                    ( SELECT_WORD_ONE
                    , new Object[]{ _wordId }
                    , new BeanHandler( WordData.class ) 
                    );

            // 参照先の取得。
            List list 
                = (List)qr.query
                    ( SELECT_WORD_REFERENCE
                    , new Object[]{ _wordId }
                    , new BeanListHandler( LinkData.class ) 
                    );
            wordData.setRefererLinkDatas
                ( (LinkData[])list.toArray( new LinkData[0] ) );

            return wordData;
        }
        catch( NullPointerException e )
        {
            // 取得できませんでした。
            return null;
        }
    }

 が。
 ひとつだけ…… SQL 叩いてヒットしなかった場合の挙動が……なぜか NullPointerException が投げられる(汗)。なぜにー。つかソース追ってないんでなんとも言えないけど、多分普通にバグってるんじゃないかな……。まぁ叩く前に存在チェックくらいしろってことかなぁ。

変数名→メソッド名変換規則……。

 Java Beans の命名規則……勘違いしてたかも。

private String word_name = "";

 って変数があった場合、

	public String getWordName() {
		return word_name;
	}

 ってメソッド名になる……ってのが命名規則だと思ってたんだけど、もしかして

	public String getWord_name() {
		return word_name;
	}

 の方が正しい?
 なんかそもそも勘違いしてたかも……。

メッセージリソースから取得。

 <bean:message key="allpage.build_no"/> と同じように、 ApplicationResources.properties の中のデータをサーブレット側で取得する方法。

MessageResources messages = getResources( request );
String message
    = messages.getMessage( request.getLocale(), "allpage.build_no" );
System.out.println( message );

 なんで HttpServletRequest が必要なんだーっ!!(泣)。
 これじゃシステムのどこからでも自由に取得とかできないなぁ。
 むー。

RSS に日付を入れる。

 RSS 出力機能を作って、右のサイドバーにある「JavaA2Z最新単語一覧」に表示させたら、最初、日付が出なかった(汗)。はてなダイアリーRSS (たとえばかぶろぐのとか)を参考にしてみたところ、 <dc:data> ってタグが入ってるけどうちで出力したのには入ってない……。
 メソッドをぱらぱら見てたら RssChannel#setDublinCore() ってのがあったんでこれ決め打ちでぐぐってサンプル持ってきてテスト。
 XML を見てみると一応タグは追加されるも IE で開くと構文エラーに……。
 ふたたび比較するとどうもその DC ってのを読み込むパラメーターが追加されてない、で、調べてみたら各アイテムのチャンネルだけじゃなく親チャンネル( RssDocument#addChannel() に渡すチャンネル)にも RssChannel#setDublinCore() で RssDublinCore を渡さなきゃいけないらしい。
 新しく使う API って、こーゆーとこをひとつひとつ調べてやってかなきゃいけないのがめんどい……。

Struts で RSS 出力。

 Struts って、画面遷移まわりもフレームワークで作られてるから、 RSS を返すような、画面遷移をしないで直接データを返すタイプのものってどうやるんかなーとちょっと調べてみる。
 結論: null を返す(爆)。Content-type は HttpServletResponse#setContentType() で変えちゃえばいい。

public class RssAction extends StandardAction 
{
    public ActionForward execute
        ( ActionMapping mapping
        , ActionForm form
        , HttpServletRequest request
        , HttpServletResponse response
        )
        throws Exception
    {
        try
        {
            // XML 出力します。
            response.setContentType( "text/xml;charset=UTF-8" );
            RssWriteControler rssWriteControler 
                = new RssWriteControler( TheJavaA2ZApp.getJavaA2ZInstance() );
            rssWriteControler.writeRss( response.getWriter() );
        }
        catch( Exception e )
        {
            e.printStackTrace();
        }

        return null;
    }
}

 ちなみにこの話と直接関係ないけど、 Apachemod_rewrite → mod_proxy で転送すると、 IE が Content-type を正しく認識しないときが……なんかデータが変えられたりしてる?*1

*1:っつーかこーゆー時はパケット見るなりして調べればいいんだけどそーゆーのさえ慣れてないのがバレバレ(汗)。

最新一覧を追加。

 JavaA2Z の最初のページの「最新単語一覧」、ここ、今までは JSP 直打ちしていたんだけど、それをちゃんとデータベースから最新のものを持ってきて表示するようにしました。
 ……これまた見た目的にはあんま変わらないんで微妙に苦労が報われない(爆)。わて的に楽になっただけだからなぁ。昨日までは単語を登録したら JSP を修正して上書き更新してたんで(爆)。これで明日からの単語追加が楽になるなー。
 ちなみにこの一覧の出力に <html:link> がうまく使えなかったんで、カスタムタグ作って出力してます。
 そういえば、 Java WORLD の今月号(4月号)で、 JSP じゃなく HTML から画面を生成するってゆーのを特集してたけど、タグライブラリを自分でがりがり作れるとあんま必要じゃないなぁ。そういった資産が生かせないし、いざって時にスクリプトレットが使えないのもなぁ。まー規模が大きくなったら、デザイナーが Dreamweaver で HTML 作ってそれをそのまま使えるってのはメリット大きいってのはわかるんだけど……。*1

*1:まぁ、わては HTML を秀丸で開いてがりがり書いていくタイプの人間なので(汗)。

残りの機能。

 JavaA2Z でまだ未実装な機能は……。

  • 最新一覧のリスト。*1
  • 「さくいん」のリスト。
  • 検索機能。
  • 参照元一覧。

 まだ結構ありますな。
 まぁあと1日あれば実装できるだろうから、来週のいつかにやろう。
 つかもう4時回っちゃった、寝よう……。

*1:トップページとは別に。

第5話 待逢として (5) [△ ▽]

「あ”ーっ!! ムカツクムカツクムカツク!」
 神社の影からセラフを見上げて、紫恋が吼える。
「そんなこと言っても仕方ないでしょー?」
 うめは紫恋ではなく紙を見ている。リストの中から「終わったもの」をチェックする。
「あれは警察の人か王子達がなんとかしてくれるでしょ」
「ホントになんとかなると思う!? もう3日よ!? 絶対ほっとかれてるんだって」
「そんなわけないでしょ」
 うめも顔を上げて見上げる。
「あの中にはふりかちゃんが閉じこめられてるんだから。立派な人質誘拐立て籠もり事件よ」
「にしてはのろいし」
 回りにいる数名の警官に聞こえるほどの声で言う。
「それにマスコミもうざいし」
 立ち入りを禁止しているから境内にはいないが、逆にこちらからは見えないほど遠くから撮影されていると思うとぞっとする。
「あーっ! これ終わってない!」
 と、うめは紙を持って走っていく。
「あ、ちょっと!」
 振り返ることなく、うめは待逢家から出てきた王子に紙を見せて説明している。
 ……つまんない。
 つまんないつまんないつまんない!
「どうしたの? 紫恋ちゃん」
「? あれ母さん早いね」
 振り向けば紫恋の母、待逢群咲むらさきが立っていた。
「ほら、うちがテレビ出てるでしょ、そしたら早く帰ったらって。なんか追い出されたみたい」
「そんなことないでしょ、心配してくれてるんだって」
 う”……。
 この母が相手だと、自然にフォロー役に回る自分がいる……。
「ん?」
 よく見ると、むらさきの手には中身一杯に詰まったスーパーの袋。
「これ? ほら、もうすぐお祭りでしょ? みんながんばったから、今日は腕を振るってご馳走作っちゃおうかなって」
 そう言って顔をほころばせる。
「だから今日は委員会の人みんな呼んでパーティーね」
「……」
 普段はこういったことに全く関わらない母親までも、今日は「お祭り」という言葉を口にした。
 ぱたぱたと家の中に入っていったむらさきを見送ってから、紫恋は神社の欄干を蹴った。

単語追加。

 以下の単語を追加しました。

 お、書き始めると結構がりがり書けるな。
 午前中はこれに費やすことにしよう。
 それにしても、トップページの「新規単語」を新しくするたびに JSP を更新するのはめんどいな……はよ最新一覧を出力する機能を追加しよう。

もうすぐ歯医者。

 3時から歯医者です。
 なんか、前に歯医者行ったのってすんげー前……多分高校の時くらい。
 なのでどんな感じだったのか全然記憶がない。
 怖い(爆)。
 くそっ、もう少し早く開発してくれたらッ!!*1

*1:子供ですか。

昨日かぶスタ落ちてた?

 昨日の昼12時くらいから夜8時半までアクセスログが残ってない。
 Apache が落ちてたんかな……。


 うあ!
 原因判明。
 そういえば、昨日 JavaA2Z の更新時にファイルのコピーをしようとして失敗してて、よく見たらログが増えまくってハードディスクが一杯になってたんだよね……そのログを削ったのが昨日の夜8時半。そっか、一杯になったのが昨日の昼12時くらいだったんだ……。
 ってことは、実際には落ちてはいないのかも。 Google AdSense の表示数がおとといと変わらないんでログが残らなかっただけだな。とりあえずひと安心。

歯科治療1日目。

 仕事のない間に歯をちゃんと治そう! ってことで近くの歯医者に行ってきました。

  • 中はきれいで、思ったよりも奥の方まである感じ。見た目、あんまお客さんがいなさそうだったんだけど結構いた……。
  • まずは筆記式の問診。中に「笑気吸入鎮静法」なんてものが(爆)。今はそんなもんがあるんですなぁ……。ネタとして面白そうなんでやってみよう(爆)。
  • とりあえず「ぼろぼろなんで片っ端から治して」って説明して、そのあと歯全部の状態のチェック、歯肉のチェック、歯を噛んだ状態で写真(スチルね)を何枚か、さらにレントゲンを2枚。
  • それから治療開始……って言っても、大きいのふたつあって、どっちも神経まで行ってるっぽいってことで、今日はとりあえず詰めただけ。本格的な治療は次回から。
  • なのに3780円も掛かった(汗)。さらに、痛み止め510円も……。無職には痛い……これでもしレーザー治療なんてしようものなら八重母のように泣き崩れるであろう……。
  • 次の予約は来週月曜午後3時からです。

 そんな感じ。行ってみちゃえばそんなでもないなー。まぁこれからが大変なんだろうけど……つか今もなんかじくじくした痛みみたいなのが(汗)。だから痛み止めもらったんだけどね。
 ちなみに笑気ガスですが、ぐぐってもヤバそうな情報は出てこないんで大丈夫そうかなー。つかこれ自体は麻酔じゃないんで痛みが取れるわけではないらしい……うーむ。

やる気なし。

 ダメだ、ぷつんとやる気が切れてしまいました。
 なので歩いてヨドバシ川崎店→秋葉原というあり得ないコンボで瞬殺。*1
 じゃ、行ってきます。

*1:ヨドバシで Java WORLD とか買って、秋葉原のラホールでカレーを食べる<なんじゃそりゃ。

秋葉原とかで買ってきたもの。

 ヨドバシ川崎店と秋葉原行ってきました。

 「お金ねー」とか言っといて結構買ってますなぁ(汗)。
 プログラミング関係の雑誌はいいんだけどねー、ヨドバシのポイントで買ってるから。ちなみにこれだけ買ってまだ28806ポイント残ってます(爆)。なんせ液晶ディスプレイとかの高額電化製品は全部ヨドバシで買ってるし、何よりネットで買ってもポイントが付くのが大きい……。

*1:なぜかAmazonにない……。

*2:しまったこれ2巻か、1巻買ってないよ(汗)。

*3:なんかとたんに欲しくなって。

*4:Amazonにあるのはなぜか3月号……。

*5:はてな」のDB運用の裏側、が載ってるんで購入。

*6:Tomcatの設定は難しくてよく分からないとこ多いんで。

*7:サッカーの勉強用。これもヨドバシで購入。つかコナミが出してるし……。

早売りを期待してたもの。

 明日発売のこの2冊。

 もう秋葉原じゃ早売りは期待できないですな……。
 あーあと、今日ホントはぱにぽにドラマCD ASIN:B00078RSVY も買おうかなと思ってたんだけど、そういえば家には「まだ聞いてないドラマCD」が20枚近くあることを思い出して思い止まる。まずこれ全部聴きましょう……。