Home日記コラム書評HintsLinks自己紹介
 

2005年9月のアレ

まあ日記というのか、そういうものだ。

← 2005-08 | 日記一覧 | 2005-10 →

2005年9月30日

ココログに VALUE COMMERCE のアフェリエイトのリンクを張ってみた。 かなり苦労したのだが、 イメージ広告はこんな感じ。 実際は1行だが適当に改行を入れてある。

<iframe frameborder="0" height="45" width="135" marginheight="0" scrolling="no"
 src="http://ad.jp.ap.valuecommerce.com/servlet/htmlbanner?sid=2245804&amp;pid=873517017"
 marginwidth="0">
<script language="javascript"
 src="http://ad.jp.ap.valuecommerce.com/servlet/jsbanner?sid=2245804&amp;pid=873517017"
 type="text/javascript">
</script>
<noscript>
<a href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2245804&amp;pid=873517017"
 target="_blank" >
<img src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=2245804&amp;pid=873517017"
 height="45" width="135" border="0" alt=""/></a></noscript></iframe>

テキストはこんな感じ。

<a href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2245804&amp;pid=873517080"
 target="_blank" ><img src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=2245804&amp;pid=873517080"
 height="1" width="1" border="0" alt=""/>♪</a>

ポイントだが、 XHTML は大文字と小文字を区別するので、 ヘンに混在したタグは小文字に置き換える。 IMG タグは最後を閉じる。 & は &amp; と書く、 という程度。 一つだけ如何ともしがたいのが allowtransparency なのだが、 XHTML にない属性を書いても無意味なので勝手に cut した。 というようなことをしていいのだろうか、と一瞬思ったが、 気にしない。

2005年9月29日

無線LAN、一応接続に成功。 firewall の設定がどうも気になるが。

BIRT について少し調べる。 帳票系のオープンソースプロジェクトがない(あまり聞いたことがない)のはなぜ、 と質問されたのだが、 フリーで公開しても、 それほどニーズがないからじゃないか、と答えておいたが、 実際どうなのだろ?

Jakarta POI とかも気になるのだが。

JavaDrive に、 Jakarta POIでExcelを操作する というコーナーがあるので、見ておこう。 ただし、このページは少し古い(2003/11頃)。 最新のJava に関するこの種のサイトが欲しい。 というか自分で作った方がいいのか?

§

ガンパレード・オーケストラ の公式サイト、トップページしかない?

§

時事: 元プロ野球選手が強盗殺人罪に問われた裁判で、 さいたま地裁が無期懲役の判決。

判決の理由に、 「元プロ野球選手が起こした事件で、社会的反響が大きい」 というのだが、 多分、この種の理由は判例に基づいており、 社会的にも妥当なものになっていると思われる。 が、しかし、違和感も残る。 まず、「社会的反響が大きい」という理由で、 強盗殺人事件の判決が左右されてよいのか。 平等の原則に反するのではないか、というのが一点。

もう一つは、まあちょっと失礼かもしれませんが、 この被告、誰?

というか、 オールスターに出場した頃の犯罪ならともかく、 その後の社会から忘れられた時点での犯罪が、 社会的な影響が大きいものであるとは思えないのだが。

2005年9月28日

NetFront はすごい、という声が chat でありましたが。

http://www.access.co.jp/products/nf.html

§

大阪府で不審車の乗員を職務質問しようとしたら拉致され、 途中で発砲、 これが相手にあたって死亡するという事件があった。 逃亡した1名はその後、身柄を拘束されている。

署長談。 「現時点で判明している状況によれば、適正な拳銃の使用と考えている」 というか、これこそまさに適正な使用だろう。 アイスピックで刺されそうになったとか、 続報も出ているのだが、 まず生命の危機という状況で何をすべきかという話があって、 さらに、容疑者(何の?)を取り逃がすとどういう被害者がさらに出る可能性があるかとか、 まあいろいろあるはずだ。 肩を狙ったそうだが胸に当たってしまったというのは、 拳銃がヘタだというよりは、 かなり厳しい状況下での使用であったと考えるべきだろう。

で、平和ボケしてるナーと思ったのが、 近くにいた人のインタビューとか。 銃撃戦にでもなれば、流れ弾で死ぬリスクもある訳だが、 ネットでは「驚いた様子だった」と報じられているにもかかわらず、 TVで見た感じでは意外と冷静そうだった。 アメリカだったらまず物陰に伏せるとか、 そういう所だ。

§

MZONE の設定に再挑戦。 どういう感じで難しいか説明しておくと、 まず、 www.nttdocomo.co.jp を表示すると、 「ケータイを選ぶ・活用する」というところに 「データ通信がしたい」というリンクがある。 これをクリックすると、 ドコモ公衆無線LANサービスという説明があって、 そこからリンクがはってある。 www.nttdocomo.co.jp/service/data/mzone/index.html というところに行く。

多分、ここでもう失敗しているらしいのだが、 とりあえず私のやった手順で背つめ地すると、 「さあ、はじめよう!」 という所でサービスを申し込んで、 さらに「初期設定」 というのを選択する。 すると、MZONE 対応ユーティリティプログラムの簡易マニュアルというページになって、 ここにインストールという内容がある。 まず、ダウンロードさいとより Setup.exe をダウンロードしてインストールする手順が書かれているわけだが…。 実は別のページからリンクをたどると、 「U 公衆無線LANユーティリティソフト」 という別のソフトに至るというルートもある。 どちらが正解なのか、これを書いている時点ではよく分からないのだ。

実際に行った手順はこんな感じ。

まず「クローズドネットワーク」というメッセージが表示される。 「プロファイル」をクリックすると、「プロファイル」画面になるので、 [追加(A)] ボタンを押す。 「WiFi」の画面になるので、 SSID は DoCoMo から指定された ID を指定する。 クローズドのチェックボックスをチェックする。 データの暗号化のチェックボックスをチェックする。 認証方法は WEP-オープン、 ネットワークキーは DoCoMo から指定されたキーを指定する。 「802.1x 認証の有効化」チェックボックスはチェックしない。

「全般」画面になる。 VPN の「接続時にVPNを自動起動」というチェックボックスを指定する。

§

OLAP: On-line Analytical Processing

考えてみれば、謎の言葉である。 単に「コンピュータを使う」以上のことは何も言っていないような気がするのだが、 あえて言うなら、 DB があって(必須?)、 エンドユーザーが集計のコマンドを直接出す、 という仕組みらしい。

なお、集計した結果の解析はコンピュータがやらなくてもいいようだ。 つまり、例えば数字だけ画面に出たらそれでokみたいな。

http://e-words.jp/w/OLAP.html

もうちょっと調べてみると、 Edgar Frank Codd 博士の 「12のルール」というのが出てきたのだが、 それって単に「RDBとは」のような気がしてしょうがないのだ。

http://www.atmarkit.co.jp/aig/04biz/olap.html

§

時事: パリーグが全日程終了。 楽天は 51.5 ゲーム差というすごい記録を残したのだが、 監督交代という話がもう出てきているようだ。 3年契約だったはずだが、 1年目がこうなるのは、ある意味分かっていたはずで、 責任を取れというのはちょっとおかしいと思う。

面白いのは、 球団経営的には5000万円の黒字で大成功、というあたり。

2005年9月27日

FPROG, FPL の一部の会議室が伝統に従い閉鎖の瞬間までオープンになっていたのだが、 一時的にR/Oの状態になってしまった。 ニフティが気を利かして全部 R/O にしてくれたのだが、 事前にそういう状態にする場合は会議室でその旨掲示することになっていたらしい。 打ち合わせの時にそういう話だったらしいが、 完璧に忘れている。

やはりドキュメントにしておかないとダメだ。 というか、chat にしろ電子会議にしろ、 そういう打ち合わせなら必ずドキュメントが残ってしまうので、 そういう「忘れた」というのも、 後で何とかなるのだが。

§

DoCoMo の携帯を使っているので、 MZONE という無線LANサービスに申し込んでみた。 即時使えるようになっているはずなのだが、 いざ使おうとすると、 使い方がサパーリ分からない。

2005年9月26日

昨日で万博が終了したので、 今日からは書くことがない。 みたいな。

FPROG と FPL の閉鎖1週間前ということで、 会議室を R/O に設定変更。 毎度のことだがかなり面倒な作業で、 イヤんなる状態なのだが、 まあ今回でこういう作業も終わりの筈なのでどうでもいいが、 すごく時間がかかってしまうのは困ったものである。

しかし移転先のめどが全然立たないというか、 立ててないというか、 動いてないな、あまり。 公式オフをどうするのだ、という話もあるし。

コンテンツマネージメントのツールとか、 捨てるのももったいないのだが、 汎用化するのも、最後のところがどうも@niftyの保守システムに特化しすぎていて、 いまいちか、という感じもする。 まあとりあえず core なところは forrest 使っているだけだし、 裏ページ(ここ)の処理と共有している部分は残ると。 基本的には、原稿があって、 forrest で生成した HTML があって、 最後に転送用のデータがあって、というだけの話なのだが。 ポイントは、生成したデータをちゃんと比較して、 新しいものだけ更新するような仕組みになっている所だけか。

2005年9月25日

愛知万博入場者数: 244,052人。

30万人を超えるのではないかと予想したのだが、 そんなことはなかった。 もっとも、入場制限がかかったらしいが。 公式入場者数は 22,049,544人。 結局、行かなかったなぁ。 というか、行く気がしなかった。

chat では、大阪だったら行ったかもしれないという人がいたが、 それは言える。 もちろん、東京近辺なら間違いなく行っていた。 名古屋でも行っていたと思う。 名古屋から遠いという壁が高かった。

§

大相撲は朝青龍が優勝した。 琴欧州、頑張ったことは確かだが、 最後は自分に負けたという感じかもしれない。 プレッシャーは誰にでもあるかもしれないが、 やはり経験がモノをいうのであろう。

§

デジカメが壊れたのでどうしようかという話があったのだが、 結局、新しいのを買ってしまった。 しかも SONY 以外の。 どうしても手ぶれ防止機能が欲しかったのだ。 というと例のライバル会社のかというと、 実はそうでもなくて、 KONICA MINOLTA のデジカメだ。 「裏の裏」で紹介したので、 そちらに後日談も書きたい。

2005年9月24日

愛知万博入場者数: 213,657人。

アメリカでは台風から避難するというので300万人が移動しているというのだが、 何かそういう映画を見たことがあったような気がするなぁ。 インデペンデンス・ディだっけ、それ系の。

日本だと、どんなに大きな台風でも、 それだけの人数が車で大移動するというのは考えられない話だ。 少し高いところに避難する、というのはあるとしても。

§

VAIO Z の画面上にお茶のペットボトルの外壁についた水滴がぽろっと。 液晶の上にプライバシーフィルタみたいなのをハメてあるので大丈夫ではあるが、 びっくりした。

§

壊れたコンピュータの後始末をしにアジトへ。 今回は新しいパソコンが届いているので、 それをセットアップして、 必要最低限のソフトをインストールし、 前のコンピュータと同じようにメールが使える状態にする、という使命である。

Windows XP Home Edition は初めて使うような気がするのだが、 これがまた、いきなりインターネットに接続できないというトラブル発生。 ハマりかけましたが、原因は何だったでしょうか、 想像してみてください。

システム管理者歴十数年(誇張アリ)の私がハマるというのは、 それなりの謎な原因かもしれないのだが、 要するに設定は全て正しいのに DHCP が IP を返してくれない、という状況なのだ。 これは、CATV モデムというか、CATV でインターネットに接続する装置が、 固定数の MAC アドレスを記憶していて、 それを超える pc を接続したら却下する、という仕組みらしい。 今回の機器は、おそらく3つ以上のpcを接続できないのである。 壊れた pc の MAC アドレスも含めて3つのアドレスが記録されているために、 新しい pc が接続できないのだと思う。 これを解決するには、 この装置の AC 電源ケーブルを一度外してから再起動する。 電源ケーブルを外すというのがポイントで、 電源スイッチを切るだけでは、MAC アドレスは消滅しないのであった。 これ重要。

これでインターネットにとにかく繋がる状態になったので、 速攻で Windows Update を行い、 ウィルス対策ソフトも入れて、 パターンデータを最新のものにしておくという作業を行う。 今度の pc はローエンドもローエンド、 なにしろ5万円弱のモデルなわけだが、 いまどきの pc は十分に速い。 このあたりの処理は楽だ。 そういえば、メモリが256MB しかない ので、増設したいのだが、どういうタイプのメモリが使えるのだろうか、 とか思った。 マニュアルを見ると、 DDR DIMM Modules: DDR1-2 と書いてあって、

DRAM Access Time: 2.5V Unbuffered/ Registered DDR 200 MHz (PC1600)/ DDR 266MHz (PC2100) Type required. DRAM Type: 64MB/ 128MB/ 256MB/ 512MB/ 1gB DIMM Module. (184 pin)

とか書いてある。 このあたりまで分かれば近くの pc ショップでも買えそうだ。 次に来るときに買って持ってくるか。

続いて、 故障したpcのHDDを繋いで、 データをコピーするという作業だ。 まず、HDD のジャンパーを設定して slave に指定しないとヤバい? とか思ったのだが、 ドライブの型番がよく分からない。 いろいろ調べてみたところ、 結局、 Quantam の Fireball lct15 というものらしい。 次のページで詳細が分かる。

http://www.maxtor.com/_files/maxtor/en_us/documentation/quantum_jumper_settings/fireball_lct15_ata_jumpers.pdf

そういえば Quantam は maxtor になっていたっけ。 てなわけで、ジャンパーは分かったが、 Cable Select がデフォルトだから、そのまま繋げばイケるのだろうか? 結局よく分からないっす、ということで、 そのまま繋いでみることにする。 これは結果的に全く問題なくうまくいったのだ。

とりあえずジャンパーを変えずに接続するという方針が決まったから、 次は HDD を実際に接続する作業だ。 中が SATA のケーブルだったりするとヤバいかと思ったら、 割と普通のフラットケーブルだったので、 物理的にはそのまま繋がった。 ところが意外なトラブル。 安直に単に接続してみたら、CPUのファンが邪魔で、 ドライブベイにドライブを入れることができない。 どうすべい、とか思ったが、 とにかくそのまま「置く」という状態で起動してみた。

最初は Windows XP がこのドライブを認識できないらしく、 起動してからしばらく自動的にじたばたやった後で、 しばらくして、FAT32 のドライブが追加されていることを認識するようになった。 まあ待っていただけなんですけど。

これで普通にドライブ間でファイルをコピーできる状態になったので、 丸ごとコピーしてしまったのだが、 考えてみれば Windows のシステムとか、いらないファイルてんこもりだった。 多分そういうことしたら copyright 的にもヤバいんじゃないかと思うのだが、 無駄なディスクスペースを消費するのも嫌だし、 後で消した。

HDDは、後で何かあったときにアレなので、 そのまま入れておく予定だったが、宙ぶらりんというのも困るから、 コピーしたら外すことにした。

さてその次が大トラブル。 Netscape 7.1 をインストールしたのだが、 これがダウンロードに20分かかるというのは想定外である。 あらかじめダウンロードしておけばよかった。 これは Netscape のサーバーが遅いというだけの話で、 同じ環境で、 EPSON のプリンタドライバーなどは一瞬でダウンロードできている。

これをインストールしてからさらにトラブル。 今まで使っていたプロファイルの使い方が分からない。 つまり、 今までも Netscape 7.1 を使っているのだから、 その環境を丸ごと上書きすればよさそうなものだが、 それがうまくいかない。 Windows 98 と XP Home の違いとかあるのだろうか? とにかく、じたばたしてしまう。 ちなみに、 Netsacpe 以外のメーラーだったら「import」というメニューがあるので簡単なのだが、 昔から、 Netscape の場合、Netscape Mail からデータをコピーするのは毎回大変だったことを思い出した。 Firefox + Thunderbird に移行してもらった方がよかったか?

これで結局電車に乗れなくなってしまって大変なことになった訳だが、 根性で何とか設定した。30分で終わるはずの作業に、 結局、約3時間かかったことになる。 まあでもとりあえず以前の pc と同じ状態の Inbox に回復できたので、 やや吉。

帰りの自由席、結構混んでいて意外だった。 楽勝かなと思ったのだけど。

2005年9月23日

愛知万博入場者数: 234,031人。

JSF で、table にボタンを配置して、 何行目でクリックされたかの判定。 何か JSP (JSF) 側で指定するのかと思いきや、 UIData を使って rowData から判定するというのだが、 そういうものなのか、いまいち釈然としない。 まあ確かに何行目という情報だけだと、 もたもたしているうちに row が削除されたりすると、 いろいろ整合性が取れなくなることはありそうだから、 rowData を直接アレするというのは必然なのかもしれないが。

view とは独立した UIData というクラスを使ってデータをやりとりする、 という意味で、確かに view と model は分離しているといえばしているのだが、 何となく違和感がある。

yodobashi.com で買い物をしようと思ったら、 パスワードを再設定したという画面が。 どうもパスワードを入れ損ねたというか、 ログインボタンのつもりでパスワード再設定ページのボタンを押したらしい、 というか、Enter 押したらそっちに行ってしまいますか、もしかして?

何だか訳分からない。

2005年9月22日

愛知万博入場者数: 207,347人。

2005年9月21日

愛知万博入場者数: 192,502人。

2005年9月20日

愛知万博入場者数: 203,515人。

曜日感覚がどうもずれる。

2005年9月19日

愛知万博入場者数: 222,935人。

Fedora Core 4 はインストールしたが、 teraterm でログインできない。 /etc/ssh/sshd_config の設定で、 プロトコル 1 も pass するように変更したら接続できるようになったが、 これは teraterm を対応しているものに変更するとか(あるのか?)、 そっち方向で考えた方がよさそうだ。

vncserver を実行したら twm が起動してしまう。 ~/.vnc/xconfig の、

twm &

という行を

exec gnome-session

に変更して、

vncserver -kill :1
vncserver

てな感じで vncserver を再起動する。 ただ、この後、

X-Windows システムのキーボード設定が、 現在お使いの GNOME キーボード設定と異なります。 どちらの設定を利用しますか?

というダイアログが表示された。 X か GNOME か選択しろというのだが、 どちらを選択していいのだろうか? とりあえず、 GNOME を選択してみた。

up2date の実行。 依存関係のチェックで失敗してしまう。 しかも、エラーのパネルが大きくて画面をはみ出してしまい、 ボタンがあるのかどうかもわからない状態。 とりあえず、tab を押したりして Enter で切り抜けた。

gjdoc と glib* あたりを更新してみる。 この程度なら問題ないようだ。 ということは、少しずつ up2date を実行すればok?

しかし面倒というか、依存関係ってどうなっているのだろう? 依存関係を check する位だから、 何かうまく指定すれば、芋づる式に適当なのを更新してくれるのでは。 と思って、 たとえば mysql は?

試しにやってみたが、数個しか update されない。 なかなか難しい。 依存関係のエラーが表示されるのだから、 それから up2date を実行する、というのがよさそうだ。

とりあえずまず怪しいのが、 kde-i18n-Polish-3.4.2-0.fc4.1 なのだが、これって何なんだ? と思いつつ、とりあえず、 kde-i18n-Polish だけ up2date してみる。 requires kdelibs と出る。

だったら kdelibs だけ up2date してみる。 今度はよさそうだ。 しかし、いちいち PGP 署名がないというのを聞いてくるのはどうにかならんのか? man を見ると --nosig というのがあったので、 /etc/sysconfig/rhn/up2date に、

nosig=1

という行を追加してみたが、状況変わらず。 謎。ということで、 up2date --nosig で直接起動してみたら、今度は ok。 依存関係の問題もとりあえず解決している。 kdelibs とかのあたりが解決したら後は ok なのかもしれない。 とりあえず、この状況になったので寝ることができる。ってもう6時だ。

2005年9月18日

愛知万博入場者数: 281,441人。

Fedora core 4 のインストールをしてみた。

2005年9月17日

愛知万博入場者数: 224,538人。

日帰り出張~。 というか、パソコン壊れたというので見に行くことに。 まあ今日行って帰ってくれば、 あと2日休みがあるし、何とかパワーも回復できるのではないかとみたのだ。 ちなみに、コレは特急の中で書いている。 すぐ横でもpcを使っている人がいるが、 最近はこういうの当たり前の光景だな。

とりあえず Eclipse 使って test とかして、 裏ページのデータ移行というか復活を本気で考えるか、みたいな。

ところで、特急だが、すごい混雑。 指定席は満席だったので自由席に座ったのだが、 始発駅ではそうでもなかったのが、 途中で続々と乗ってくる。

VAIO Z のバッテリー、 1時間程度の持ちかと思っていたのだが、 連続して一気に使ったら2時間弱使えるみたいだ。 もしかして、ハイバネーションとか、すごく電力食っているのだろうか?

§

自由席特急券なのだが、 緑の窓口を見ると、 自由席は自動販売機で買える、 というようなことが書いてあったので、 そちらで買おうとしたが、 どうしても買い方が分からなかった。 目的地の駅名の出し方が謎なのである。 あらかじめ、駅名一覧は画面に表示されているのだが、 その中には候補地がないのだ。

ということで、 こういう場合はとりあえず130円で切符買って入るのが吉。 後で清算すればいいだけだ。

§

クイズ: 次の( ) に当てはまる言葉は何ですか?

 ・動かざること( )のごとし。

1. 山
2. 川
3. 達磨
4. 窓

§

ドキュメントをなぜ書かないのか、 というのがソフトウェア開発の現場では問題になっている。 私の場合、ドキュメントは書くのだが、 それを表に出さないというか、 出せないことが多い。 というか、勝手に作っているソフトだったらこうやってオープンにネタを出したりできるのだが、 業務で作る場合、 どういう形式で出せ、という縛りが厳しいのである。

XML はヤメロとか言われたら、まあ出す気もしないというか、 とりあえず自分だけ見れたらいいということになってしまう。 XML でドキュメントを書く理由として、 後で加工しやすいというのと、 検索したときに要素で絞り込める、というのがあるはずなのだが、 XML のエレメント単位で grep してくれるようなソフトは知らない。

例えば、title の所だけで検索するとか、 note だけ検索するとか、 そういう使い方ができると、より便利なのだが。 XML でなくても、HTML でもそういうのがあると便利で、 コメントだけ検索するとか。

§

バッテリーを外しているのにハイバネート途中で電源を切ってしまう。 こういうことが最近何回かあった。

2005年9月16日

愛知万博入場者数: 209,310人。

cidaemon って何? というか、しだえもんと言われて謎だった。

§

HTML のファイルを指定して、 title を抜き出す処理。 javax.swing.text.html.HTMLEditorKit.Parser parser を使うのだが、 問題は日本語のタイトルである。 ヘンなプログラムだが、 殆ど実際のコード。

    protected boolean parseWithCharsetString(String charsetString,
            boolean checkCharset) {        

        ParserCallbackBase pc = createParserCallback();

        javax.swing.text.html.HTMLEditorKit.Parser parser = 
            new javax.swing.text.html.parser.ParserDelegator();

        Reader r = null;
        InputStream in = null;

        try {
            in = new FileInputStream(getTargetFilename());
            r = new InputStreamReader(in, charsetString);
            parser.parse(r, pc, checkCharset);
        } catch (javax.swing.text.ChangedCharSetException e) {
            setCharset(e.getCharSetSpec().toString());
            return false;
        } catch (IOException e) {
            return false;
        } finally {
            if (r != null) {
                try {
                    r.close();
                } catch (IOException e) {
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                }
            }
        }

        return true;
    }

ところが、これでハマった。 JIS のページが parse できない。 原因は、なんと、ここ。

            r = new InputStreamReader(in, charsetString);

というか、この処理は間違いではない。 問題は、charsetString の中身である。 これが "JIS0212" となっていたのだ。 ここは "ISO-2022-JP" という文字列を指定しないと parse できないのである。 というか、そう指定したら解決した。

なお、parser が parse した結果のテキストは、 デフォルトエンコーディングでエンコードされている。 こちらの環境では、UTF-8 になっている。 つまり、title タグに囲まれたテキストを抜き出すと、 そのページが JIS であろうが euc-jp であろうが、 得られた文字列は UTF-8 になっている。

と思う。

2005年9月15日

愛知万博入場者数: 211,477人。

perl の cgi をサーバーに入れたら 500 Internal Server Error とか出る。 試しに ./hoge.cgi を実行すると、 bad interpreter とか出てしまう。

これは実は CR+LF 行末になっているスクリプトを Linux で実行しようとしたら出るらしい。 以前(いつ?)は、こんなことはなかったような気もするのだが…。

ということで、これは perl スクリプトを

#! /usr/bin/perl --

のようにすれば一応解決する。 改行を LF にした方がいいような気もするが。

§

Bookmark Servlet を裏サーバーへ入れてみた。 まず、 tomcat 5.5 を適当なディレクトリに入れて、 JAVA_HOME を jre 1.5 を指すように細工してから起動テスト。 ok。

とりあえず、当分は自分しか使わない servlet になるので、 ポートは default の 8080 ではなく、18080 を使うように server.xml を修正する。 なお、port 18080 は当然、 firewall にひっかかるので外からはアクセスできない。

Bookmark Servlet 関連のファイル (bookmark.tar) を適当なところに展開する。 今回は /usr2/www/Servlet に展開した。 ということで、 server.xml の最後の方の host のところに、

<Context path="/bookmark" reloadable="true"
  docBase="/usr2/www/Servlet"
  workDir="/usr2/www/Servlet" />

を追加する。

/usr2/www/Servlet/WEB-INF/web.xml は変更なし。 /usr2/www/Servlet/WEB-INF/applicationContext.xml は、

  <bean id="MySqlDataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
      <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
      <value>jdbc:mysql://localhost/bookmark?useUnicode=true&amp;characterEncoding=utf-8</value>
    </property>
    <property name="username"><value>dbuser</value></property>
    <property name="password"><value>password</value></property>
  </bean>

この dbuser と password のところをサーバーの mysqld に合わせて変更する。 なお、property url の value のところで、 &amp; と書いてあるが、 これが web でサイトを見ていると単に & となっていたりして、 それだとちょっとヘンなことが起こったりしたような気がした。 もう一箇所、

  <bean name="webPage" id="webPage" class="com.phinloda.bookmark.WebPage">
    <property name="httpClient"><ref bean="httpClient"/></property>
    <property name="directory"><value>/tmp/pages</value></property>
  </bean>

これは web page を保存する先のディレクトリなのだが、 適当なところに保存するように /tmp/pages を適当に、 いや、適切に変更する。 そのままだと本当に /tmp/pages に作ってしまうので、 再起動とかしたときに消えてしまったりする罠。

とりあえず、mysql のユーザーを追加しておく。

mysql> GRANT ALL PRIVILEGES ON *.* TO dbuser@localhost
    -> IDENTIFIED BY 'd20040904' WITH GRANT OPTION;

この権限は与えすぎだが気にしない。 db も作る。 create database bookmark; で ok。 この後、テーブルも作らないといけないのだが、 それはスクリプトが書いてあるので、

mysql -u bookmark -p < crea*

とかで大丈夫。 スクリプトは createbookmarktable.sql とかいう名前なのだが、 長すぎるので crea* と省略しているだけ。

次に、hibernate.cfg.xml。 session-factory の中に、こういう箇所があるので、これも修正。

    <property name="connection.username">dbuser</property>
    <property name="connection.password">password</property>

hibernate.cfg.xml と、applicationContext.xml に、 こうやって同じユーザー名とパスワードを書かないといけない、 というのは納得いかないのだが。

www.localhost.com に接続しています

みたいな。 一体何が?

Parse Fatal Error at line 386 column 1: XML document structures must start and end
thin the same entity.

何かログがヘンですけど。 とりあえず、conf/server.xml がダメっぽい。 見てみると、 なぜか最後の行の

</Server>

が抜けている。 なぜに?

まあ気を取り直して入れてみて、今度はok。 新規ブックマークを登録してみる。

The server encountered an internal error () that prevented it from fulfilling this request.
 …
javax.faces.el.EvaluationException: Expression: #{newPageController.confirmToAdd}
    org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:164)
 点

はぅ?

logs/cat*out をみると、

java.sql.SQLException: Access denied for user: 'bookmark@localhost.localdomain' (Using password: YES)

またかいっ。 ということで、 bookmark@localhost.localdomain を登録。

2005年9月14日

愛知万博入場者数: 218,721人。

mysql でテーブルの内容をファイルに書き出す方法。

SELECT * FROM bookmark INTO OUTFILE 'pageinfo.txt';

bookmark はデータベース名、pageinfo というテーブルをファイルに保存する。 これは何となく問題なく実行できたのだが、 さて、pageinfo.txt というのがどこに行ったか分からなくなった。 実は、MySQL をインストールしたディレクトリに data というディレクトリがあって、 その下にデータベースごとのディレクトリがあり、 その中に pageinfo.txt というファイルが入っていた。

とりあえず場所が分かったので、これをテーブルを新規作成した後でインポートする。

> mysqlimport bookmark pageinfo.txt -u username -p
Enter password: *********
\mysql\bin\mysqlimport: Error: File 'pageinfo.txt' not found (Errcode: 2), when
using table: pageinfo

なんだそりゃ。

>mysqlimport bookmark \mysql\data\bookmark\pageinfo.txt -u username -p
Enter password: *********
bookmark.pageinfo: Records: 9  Deleted: 0  Skipped: 0  Warnings: 0

つまり、 読むときはデフォルトの場所から読んでくれないらしい。 absolute path (例えば \tmp\pageinfo.txt) を使って指定すればよかったのかもしれない。

§

Hibernate で扱うデータのテーブルを追加したのに、 hibernate.cfg.xml にテーブルを追加しなかったためにややこしいことに。

§

先ほどから出ているクラスだが、 ブックマークの管理をするための情報を保持している bean である。 このクラスには、 ユニークな id と、サイトに対応している siteId という二つの ID を割り当てている。 サイトは更新されることがあるので、 更新されたときに siteId はそのままで id だけ別に扱う、 ということがよくあるのだ。

さて、これを spring + hibernate でやる訳だが、

public void update(PageInfo pageInfo) {
    getHibernateTemplate().saveOrUpdate(pageInfo);
}

普通ならこれだけで ok。 pageInfo.id は、increment の指定がしてあって、 DB が勝手にユニークな番号を割り当ててくれるのだが、 さて、siteId は一体どうすればいいか。 既存サイトなら、そこから持ってくればいいが、 新規サイトの場合、新たに割り当てる必要がある。 これは id をそのまま使えば済むのだが、 saveOrUpdate(pageInfo); を呼び出すまで、そこの値が分からない。 というか、0 が入っている。

ということは、呼び出せば値が分かるのではないかと。

public void update(PageInfo pageInfo) {
    getHibernateTemplate().saveOrUpdate(pageInfo);
    if (pageInfo.getSiteId() == 0) {
        pageInfo.setSiteId(pageInfo.getId());
        getHibernateTemplate().saveOrUpdate(pageInfo);
    }
}

実際、これでちゃんと期待通りに動作する。 最初の saveOrUpdate の呼び出しで pageInfo.id に値がセットされて、 次の呼び出しで siteId を更新しているのだが、 何となく釈然としないというか、 効率的にどうなのだろ、というのが何となく気になる。

2005年9月13日

愛知万博入場者数: 202,711人。

2005年9月12日

愛知万博入場者数: 197,408人。

JSTL の when ~ othewise のような条件選択を JSF で行いたい場合は、 rendered を使うことができる。

  <c:choose>

    <c:when test="${page.status == 0}">
      <c:out value="${page.uri}"/>
    </c:when>

    <c:otherwise>
      <c:out value="(bad status)"/>
    </c:otherwise>

  </c:choose>

JSF の場合、次のように書く。

  <h:outputText rendered="#{page.status == 0}" value="#{page.uri}"/>
  <h:outputText rendered="#{page.status != 0}" value="(bad status)"/>

simple になったように見えるが、 たまたまそういう例なのであって、 実際そういう場合ばかりかというと定かではない。

§

新党日本の長谷川議員が、国民新党に復帰するという説が出ているそうだが、 そういうのはアリなのか?

空白の一日ではないが、 こういうのは何かイカサマされたみたいな感じがする。

2005年9月11日

愛知万博入場者数: 219,292人。

総選挙ですが。 行って来ました。 帰りにメシ食ってたら雨に降られました。

2005年9月10日

愛知万博入場者数: 250,694人。

説明 The server encountered an internal error () that prevented it from
 fulfilling this request.

例外
javax.servlet.ServletException: 絶対URI:  http://java.sun.com/jsp/jstl/core は
 web.xmlとこのアプリケーションを配備したJARファイルのどちらかでも解決できません
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)

原因
javax.faces.FacesException: 絶対URI:  http://java.sun.com/jsp/jstl/core は
 web.xmlとこのアプリケーションを配備したJARファイルのどちらかでも解決できません
    org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch
    (ServletExternalContextImpl.java:411)
    org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView
    (JspViewHandlerImpl.java:280)
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)

注意 原因のすべてのスタックトレースは、Apache Tomcat/5.5.11のログに記録されています

要するに taglib が定義してないのが原因だから、 web.xml に次のように追加した。

  <taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/lib/c.tld</taglib-location> 
  </taglib>

c.tld は、 jakarta-taglibs-standard-1.1.2 を使った。 tld の中に入っている。 同じく、 jakarta-taglibs-standard-1.1.2 から、 jstl.jar と standard.jar を WEB-INF/lib にコピーしておく。 これを忘れると class not found になってしまう。 両方コピーしていいのだろうか、とか思いつつ。

§

レススルンジャーの景品の話。 プレゼントって何だ、というので調べたが、 一部フォーラムではオリジナルの景品を用意していたが、 FPROG とかはデフォルトのままなので、 回答者には ポケット電波時計 + ペンダントラジオ、 または、ヘンケルクールケア3点セット、 のどちらかが当たるらしい。 質問者は、二重マグカップ2個セット。

誰が当たったか謎。

§

窓の杜 - 【NEWS】「Firefox」の“ダウンロードマネージャ”でハッシュ値を確認「MDHashTool」:

2005年9月9日

愛知万博入場者数: 196,299人。

2005年9月8日

愛知万博入場者数: 192,661人。

2005年9月7日

愛知万博入場者数: 155,915人。

spring + hibernate のごたごたの続き。

ログは次のような感じ。 なお、オリジナルは1行が長いので、 改行とか空白を勝手に追加してある。

org.springframework.beans.factory.BeanCreationException:
 Error creating bean with name 'sessionFactory' defined in ServletContext resource
 [/WEB-INF/applicationContext.xml]:
 Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError:
 net/sf/hibernate/cfg/Configuration
java.lang.NoClassDefFoundError: net/sf/hibernate/cfg/Configuration
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2365)
  (途中略)
        at org.springframework.beans.CachedIntrospectionResults.<init>
            (CachedIntrospectionResults.java:140)
        at org.springframework.beans.CachedIntrospectionResults.forClass
            (CachedIntrospectionResults.java:82)
  …

こういうのが出て訳が分からなかったのだが、net/sf というのに注目。 hibernate は最初 sourceforge で公開していたために net.sf というパッケージを使っていたのだが、 hibernate 3 あたりから org.hibernate というパッケージ名に変更されている。 つまり、これは applicationContext.xml の中で、

  <bean id="sessionFactory"
    class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

と書いてあったのが原因で、 次のように修正してやればいい。

  <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

2005年9月6日

愛知万博入場者数: 124,058人。

冬桜が秋に咲くというのだが、 秋に咲くのなら冬桜じゃなくて秋桜ではないのかと突っ込んだら、 秋桜はコスモスだと反撃されて玉砕した。

2005年9月5日

愛知万博入場者数: 134,804人。

ameblo の 「裏ご意見番」 を最近書いてないのでリハビリ中。 しかし少し書かないともう書き方忘れるというか、 ameblo の場合、 <p>タグで囲って、最後に<br/> を2個入れるという呪文が思い出せなかった。

§

javax.servlet.ServletException: /faces/testPage.jsp(22,0) プレフィックス hでインポートされたタグライブラリには、タグ は存在しません
javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)

何のこっちゃ、と思ったが、 つまり

<h:inputTextarea …

と書くべきところを、

<h: inputTextarea …

としていた、という話。 h: の次に空白があるのだ。

デバッグだが、 LifecycleImpl.render の、 viewHandler.renderView(facesConext, facesContext.getViewRoot()); あたりにブレークポイント入れる。

§

まあぎりぎりでアンケート提出したが、 今回のアンケート内容は図書館について。 ありきたりだが、 専門書が少ないとか、 早くいれてくれとかいうことを書いた。

先日、資料を見るために大学の図書館に行ったが、 多分、Web系の最新動向を確認したいのなら、 ここ半年、長くみても1年以内に出版された書籍というのが必須なのに、 そのあたりが全然書架に出ていないし、 検索しても多分出てこない。 もっとも、こういうのは大学の場合は図書館ではなくて、 せめて研究室レベルの図書コーナーに置いてないと役に立たないかもね。

それに、ITの最先端というのは、 書籍に出るレベルだともう間に合わないで、 WWWで直接リソースにあたる、というのが必須なのかも。 と思えば、書籍購入というのはどうでもいい話なのか。

ということで、どこかの図書館に置いてないですかね、 JavaServer Faces in Action。

§

その昔、タイピングの速度が気になってという話を書いたような気がする。 まあ早く楽に打てればそれに越したことはないのだが、 プログラマーというのは特にタイピングが多くなる職業だから、 早くタイプできるというのは必須の技能だ、みたいな。

これに対して、 プログラミングにおいて、 実際にコード書いている時間はたいしたことないので、どうでもいいのでは、 という説もあるらしい。 ちなみに、一説では、コード書いている時間はプログラミングにかける全時間の20%、 というような調査結果が出ていたと思う。 参考文献とか不明。

20%というのは私の感覚としてもそんなものかな、 というか、少し多いような気もするが、 これにはドキュメントを書く時間は含まれてないような気もする。 実際、仕様書とはいわなくても、 ユースケース書いたり、 まとめのレポートとかメモ書いたり、 そういう時間も結構あるわけで、 それを広い意味での「ソフトウェア開発」フェーズに含めてしまえば、 もう少しタイプしている時間の比率は増えるだろう。

で、言いたいのはそういうことじゃなくて、 20%ももしプログラミングにかかるのなら、 やはりタイプ速度というのは猛烈に大きなファクターであって、 ここは落とせないという話。 少し練習すれば、30~40ワード程度の速度は簡単に出せる。 つまり、1分に150~200文字ということだ。 これが仮に100文字の人がいたとすると、 1分で50文字の損失になる。 1日10時間の作業、ってちょっと長いけど計算しやすいからそうするけど、 に対して、コーディングが2時間だとして、 うーむ、まさかぶっ通しでタイプしている訳ないよな、 ということで、120分のうち2割、24分がタイプしている時間だとしましょう。 そんな少ないカー、という人もいそうですが、 プログラミングって全速力でタイプしている訳じゃないでしょ、 考えている時間が長いし。

24分とすると、50×24 = 1200文字。 1か月20日換算で24,000文字。 これを12か月、30年続けると8,640,000文字の差になるわけです。

…あまりたいしたことないような気がしてきた。

2005年9月4日

愛知万博入場者数: 193,447人。

時事:

京奈和自動車道の最終案として、 跡下ではなく東側にトンネルを掘る案を国土交通省が提示。

京奈和自動車道って知らなかったけど、 京都市~和歌山市ということらしい。 なぜ京和じゃなく京奈なのか謎。

迂回する理由なのだが、平城宮跡を通ると、 未発掘の木簡などが破壊されるという意見があったという。 これは理にかなっている。 だったら、発掘してしまえば問題解決かと思ったのだが、 実は既に発掘しているらしい。 単に、いつまでかかるか分からないということらしい。 だったら国をあげて発掘作業を完了させてしまえば…という手もあると思うのだが、 世界遺産という話が絡んでいて、そう簡単でもなさそうだ。

ところで、平城宮というのは何かご存知ですか? 不勉強が祟っているようで私は知らなかった、というか忘れてしまったか。 もちろん、平城京は知っているのだが、 平城宮はその平城京の中央北端にあった宮城とのこと。 ここから出てきた木簡が、古代史に大きな影響を与えているのだという。 だったらなおさら発掘進めた方がいいと思うのだが、 木簡の発掘ってかなり難しいようですね。

平城京ができたのは710年。 約1300年前の文字情報が残っているというのは、 メディアとしてはかなりのものである。 単に木に書いたものが残っているというのは驚きだが、 水によって外気から遮断されると、腐食が停止するらしい。 実際にどんな状況なのかは、 奈良文化財研究所 の公開データベースのところに、木簡データベースというのがある。 ここで画像ごと公開されている。

2005年9月3日

愛知万博入場者数: 249,873人。 この人数はスゴイ。

2005年9月2日

愛知万博入場者数: 168,324人

2005年9月1日

愛知万博入場者数: 177,708人

最近、いわゆる trackback spam にひっかかっているのだが、 これって自動的に削除するようなソフトあればいいのかな。 作ってみるか。