2004年8月の技術日記


Aug.2,2004 (Mon)

メールでShift_JIS

最近、

Content-Type: text/plain; charset="Shift_JIS";

なメールを受け取った。本文も Shift_JIS だったのでメール自体は読めなくはない。

X-Mailer: QUALCOMM Windows Eudora Version 5.1-Jr5

とあるので、このメーラーはデフォルトでそういう設定になっているのかもしれない。

しかしながら、最近よく着弾するSPAMは

Content-Type: text/plain; charset=ISO-2022-JP

とあるくせに、本文はおもいっきりShift_JISで書いてあるのでWanderlustではぜんぜん読めない。読めなくていっこうに構わないのだけども、

X-Mailer: OutlookExpress

とあるので、このメーラーはそういう設定が可能であったり、問題なく読めるのであろう。

というか、ちゃんと読めるメールを出したいのなら素直にDQNソフトを使えばいいのにとか思う。どうせ読まれずにspamfilterの肥やしになるだけなんだし。

Aug.8,2004 (Sun)

Seasarを使ってみる

開発途中のプログラムを引き継いだ。メッセージドリブンのプログラムで、ネットワーク経由でやってきた情報から必要な情報を抜き出して、変換やDB挿入を行うというもの。概要はそんなに複雑ではないけども、細かい仕様がいろいろあって実装はちょっと複雑。

未実装の機能追加と、例外処理などの制御系を書き直そうとする。制御系については長いメソッドを分割、各処理をステートレスなコントロールとして実装する。各処理の終了状態で次の処理を次々と決定していくモデルで、この手のプログラムではよくやる方法。コード規模は多少大きくなるけども、見通しや拡張性などが向上したように思う。おかげでソースがかなり変わってしまう。

今まで、各種設定情報やJDBC接続管理、コントロールの実装クラス名などは自前のコンテナで管理していたけども、今回からSeasarに移行。設定ファイルは書くべきことが少なくて使いやすい。

さらにS2Daoも導入。Beanの作成が面倒だけども、SQLを文字列やMessageFormatやPreparedStatementでがりがり書くよりは、圧倒的に楽。SQLを書かずに勝手に検索条件を組み立ててくれたり、insertと書くだけでinsertできるのを目の当たりにして感動する。ただ、maxとかの関数はどうしようもないみたいなので(副問い合わせができれば解決?)、そこはS2JDBCを使う。最後にトランザクションの指定を設定ファイルに書く。各処理がクラスとして独立しているので、必要なクラスにトランザクションの指定を書くだけ。

ここまでくると、元のコードは跡形もなくなってしまう。一応、元のコードを移しながら作ったので、気持ち的には一から書き直したつもりではないのだけど、元のコードの著者には悪いことをしてしまった。

書き直しの前に、時間が無いと思われたのでJUnitで動作確認用テストを書かなかった(処理単体では書いていた)のだけども、やはり仕様の解釈にずれがあったために結合テストでことごとく引っかかる。やっぱり動作確認テストは書いておけばよかったと思った。

今回のケースではS2は相当に役に立った。SQL方面がさっと作れるというところが大きい。また、各処理をクラス単位に分割していたので、ダイコンの威力を十分に発揮することができた。ログ以外でAOPを有効に使えるのか疑問視していたが、S2の使い方は非常に洗練されていると思う。

しかしながら、S2DaoにしろAOPにしろ、S2が裏で何をやっているのか分かっている人がプロジェクトに1人はいないと、実際のプロジェクトへの適用は難しいのではないかという感触をもった。具体的には、ダイコンの設定ファイルの書き方や、AOPのトランザクションの適応範囲やロールバックの条件、S2Daoのアノテーションと自動生成されるSQLとの関係など。それぞれの知識が必要なだけでなく裏で何が行われているかある程度予想できなければ、その書き方で合っているのかどうかの判断や、期待通りに動かないときのトラブルシューティングはできないのではないかと思った。他のところではそうでもないのかな。

とはいっても、S2は強力であることには変わりないので、今後も積極的に使っていこうと思う。

Java実行速度加速

参考:JavaはCよりも速い!?--驚異の"-server"オプション(by 杉原氏: via アガテナ)

実際に自分のシミュレーションで試してみたところ、43%程度の速度向上がみられた。しかしながら、IBM製のJavaの方が依然早い。

JREスコア
Sun JDK 1.4.2_05-b04 (client)3.61
Sun JDK 1.4.2_05-b04 (server)5.66
Sun JDK 1.3.1_10-b03 (client)4.19
Sun JDK 1.3.1_10-b03 (server)4.45
IBM JRE 1.3.1 (build cn131-20030618 (JIT enabledtc))6.18

以前調べたように、おそらく配列などを駆使した数値計算ではIBM製JREの方が速くて、GUIやWebなどの細かいオブジェクトが絶え間なく生成されるような状況ではSun製JREの方が速いらしい。

Aug.15,2004 (Sun)

盆なのだけど、休みではないっぽい。

Namazu-2.0.13 on cygwin

ハードディスクを入れ替えてから、入っていると思っていたものが入っていないソフトが多数。入れ替え当時は急いでいたので、必要最低限のものだけ入れていたということで。

nkf2.04, kakashi-2.3.4, Text-kakashi-2.04, namazu-2.0.13 をダウンロードしてそれぞれ入れる。が、namazuのコンパイルがうまくいかない。libtool付近で止まっている。googleすると、Namazu Project、日本語全文検索システム「Namazu 2.0.13」リリース(@ 2004年4月のコンピュータ駄目日記)で修正方法を発見。「\\\\」を削除するとコンパイル成功。

ただし、インストール後、cygwinのアップデートでperlが更新されたためやり直し。

これで探し物が出てきた。

ウイルス警告メール

盆のためか、やってくるのはSPAMやウイルスメール。流行の春香メールはうちにはまだ来ない。

毎日やってくるウイルスメールの半分くらいは、鯖による自動返事。偽装してることが分かってるんだから、分かっていることを重々承知でFromにウイルスの通知を出すなど嫌がらせでしかない。ただ、中にはおもしろい返事を出すものがある。今日のは Exchange 上の McAfee のGroupShield。×やXは一応隠したところ。


To: (ダブルクオーテーションとシングルクオーテーションで2重に囲った自分のアドレス), 
    =?iso-2022-jp?B??= ××× <たぶん相手アドレス.co.jp>
Subject: アラート -  GroupShield チケット番号 OA103_XXXXXXXXXXX_XXXXX01_1 が生成されました
From: "GroupShield for Exchange (XXXXXXX01)" <たぶん鯖管理者アドレス.co.jp>
X-Mailer: Internet Mail Service (5.5.XXXX.XX)
 
実行されたアクション:
添付ファイルはメッセージから削除され、受信者が実行したアクションを通知するテ
キスト ファイルに置き変えました。
 
宛先:
(たぶん相手アドレス.co.jp)
 
送信者:
(自分のアドレス)
 
送信時刻:
-1618544512,29655896
 
件名:
photos
 
添付ファイルの詳細:-
 
添付ファイル名: photos_arc.exe
ファイル: photos_arc.exe
感染? はい
修復済み? いいえ
ブロック済み? いいえ
削除済み? はい
ウイルス名: New Malware.b

アドレスを2重に囲ってしまうところや、送信時刻が意味不明なところがおもしろい。さらに、「チケット番号が生成されました」とか「実行されたアクション」とかいう部分が、外部に送ってはいけないような雰囲気。すでにこれだけでいろいろ想像できてしまう。

いったいこんな面白い嫌がらせをしてくるのはどこの会社だと思って、@以下のドメインをnslookupしてみる。普通にWeb鯖がありそうだったので、@以下のドメインにhttp://をつけて普通にブラウザでアクセスしてみる。するとMicrosoftと大きな文字が出てきた。インストールしたままのNT4のIISの初期画面らしい。ちなみに、頭にwwwを付けると立派なサイトが出てきた。たぶん某所に通報するような問題ではないようなので、とりあえず何も見なかったことにする。

最近近所でもrootkitを入れられた鯖があって、復旧にすごい苦労をしていたので、煙が見えたら近寄らないようにするのがいいみたい。

Aug.20,2004 (Fri)

USB接続の外付けハードディスクの認識

BuffaloのDIU-80GをUSBで i8k の Turbolinux 8 WS に繋ぐと、


murasaki.usb[14972]: usb device is added
murasaki.usb[14972]: vendor:0x411 product:0xe Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0xff Isubclass:0x2 Iprotocol:0x0
murasaki.usb[14972]: MATCH(alias-sd) -> match_flags:0x183 vendor:0x411 product:0xe Dclass:0x0 Dsubclass:0x0 Dprotocol:0x0 Iclass:0xff Isubclass:0x2 Iprotocol:0x0
murasaki.usb[14972]: Dependence(usb-storage) was found
murasaki.usb[14972]: Dependence(sd_mod) was found
murasaki.usb[14972]: Dependence(scsi_mod) was found
murasaki.usb[14972]: Loading usb-storage
murasaki.usb[14972]: Loading sd_mod
murasaki.usb[14972]: Loading scsi_mod
kernel: Initializing USB Mass Storage driver...
kernel: usb.c: registered new driver usb-storage
kernel: USB Mass Storage support registered.

と出るものの、SCSIのリストに追加されない。原因は、デフォルトのカーネルには sd_mod などが入っていないかららしい。カーネルを再構築すれば解決するけども、今は安定動作中のカーネルをコンパイルしなおすのはちょっとやりたくない。

そこで、VMWare の debian に認識させてみようと試みる。VMWareの設定でUSBを認識できるようにして、繋いでみると以下のような表示。


hub.c: new USB device 00:07.2-1, assigned address 2
usb.c: USB device 2 (vend/prod 0x411/0xe) is not claimed by any active driver.

このUSB機器の設定情報が無いので認識する気が無いらしい。murasakiをインストールして自分で設定を書くも、 usb-storage が読み込まれても認識されない。USB の問題(@VAIO SRX3 de Linux)や、usb-storage 外付けのusbハードディスクが使えない(@Tubolinuxユーザーズフォーラム)などを見ると、やっぱりカーネルにUSB機器の情報を書かないといけないらしい。

カーネルソース kernel-source-2.4.26.tar.bz2 を取ってきて、Debianでのkernel再構築(source-package版)(@UNIXな生活)を参考に再構築。コンパイル前に /usr/src/linux/drivers/usb/storage/unusual_devs.h の "DUB-P40G HDD"のエントリ後ろに以下を追加。


UNUSUAL_DEV(  0x0411, 0x00e, 0x0120, 0x0120,
                "Buffalo",
                "DIU-80G HDD",
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                US_FL_FIX_INQUIRY ),

カーネル再構築後リブートして、必要なモジュール(hid,usb-uhci)を読み込ませて繋ぐと何とか認識された。

しかし、USB1.1経由では非常に遅い。

miniSD

携帯電話A5504Tに保存してある写真をパソコンで読ませたい。Bluetoothの適当なプロトコルで転送できれば一番良いのだけども、今のところ東芝にその気は無く、転送できそうなBREWアプリも見当たらない。メール経由という方法もあるけども、大きなデータ(数10KByte)を添付することができなさそう。仕方なく、miniSDメモリカードを読むインタフェースを導入することにする。なんだか負けた気分。

miniSD しか読めないのは面白くないので、5種類対応の Buffalo MCR-5A を購入。購入後に、miniSDはアダプタが必要なことが発覚。えらそうに「miniSDもOK」と大きく書くんだったら、「※miniSDにはアダプターが必要〜」も大きく書くべきだ。しかも、miniSDのアダプターは単体では売っていなくて、メモリーとセットでしか手に入らないらしい(と某BC店は主張していた)。とどめを刺された気分。

無事データは読み込めたが、気分は良くない。メディアの種類がここまで多い状況自体がすでに狂っているが、消費者にその不便さを押し付けるのはどうにかならないものか。

携帯写真

携帯にカメラなど要らんと思っていたのだけれども、さっと取り出して撮れるのはやっぱり便利。近所の旅写真に対抗して、面白そうな写真を晒してみる。

研究室セミナー中

研究室セミナー中。明らかに逆光ではあるけども、おかげで綺麗な部屋に見えている。

ソウルの街頭で売られる紅参人参(左)と魚(右)。強力な冷気で派手に冷やされている人参に対して、その横で夏の常温で放置されたままの魚。

ソウルのバーでカンパリオレンジを注文。カンパリのボトルが見当たらないのと、店員が「カンパリにオレンジジュースを混ぜるの?」と聞き返してきたことから、いやな予感がしていた。結果、cafri(カプリ)ビールとオレンジジュースがやってきた。

昼間のDQN。マフラーの位置に拡声器があることから、きっと音大きくしたいときは、拡声器からエンジン音を鳴らすものと思われる。

Aug.21,2004 (Sat)

電源

今年の某所は頻繁に電源が落ちる。おかげで10日間ぐらいWebサーバーが止まってしまっていた。1フロアまとめて落ちるのだけども、あるときフロアの配電盤を見てびっくり。1フロアに事務所など5軒あるのに、そのフロア全体で60Aっていうのは一体・・・。とりあえずUPSを導入とかいう以前の問題みたい。

JAI + Image I/O Tools

JPEG-LS な絵を読む必要があって、JAI 1.1.2 と Image I/O (1.0_01 beta) を使う。Image I/O 1.0 は読みたい絵が読めなかったが、1.0_01 beta だと読める。今のところ問題なし。WindowsとLinuxの両方で同じプログラムが動くというのが素敵。

最近は開発環境にOSXも加わってきたのだけども、Java Advanced Imaging and Java 3D for Java 1.4.1 and 1.4.2 Release Notes(@ADC)によると、WindowsやLinuxほどは対応していないので、開発はできても動かすことができない。

DQN昆虫説

近所の友人の説。なかなか有力だと思う。

  • 暖かくなると発生する → 季節適応
  • 必ず集団で行動する → 社会性昆虫
  • 夜に活動する → 夜行性である
  • コンビニやゲームセンターなど、明るい光のあるところに集まる → 走光性をもつ
  • やかましい音を立てて周囲を威嚇する → 蜂などの威嚇音
  • それぞれ決まった経路を意味も無く往来する → 往復運動をして縄張りを主張する
  • 必ず車のダッシュボードに白い布をひいて、青白い光を放つ → 巣作りの本能
  • その他、メスを求める行動など。

そろそろダスキンあたりが、駆除のサービスを始めてくれないかなと期待してみる。ご用心!夏は害虫の季節です(@ダスキン)

Aug.27,2004 (Fri)

ACCA個人情報流出

とうとう自分の情報も流出してしまった。しかも、ACCAの対応が痛い。やっぱり、「セキュリティーについて十分考えています」と言った時に、外部からの不正アクセスを防ぐというのは当然として、内部犯行についても対策を講じるのは常識であろう。今の時代、一番信用できないのはオペレーターや開発・保守管理者らしい。内部犯行はありえないことが前提で罰則なども盛り込まれていない某ジュウキネットも、そろそろ「1億件漏れました」とか大発表がありそうな予感。

coLinux

手軽に試せるLinuxとしてcoLinuxを活用。何でもありのVMWareほど完成度は高くないけども、やりたいことはほとんど出来るので、実験やテスト環境の構築に非常に便利。

Linux上でのテスト
・Windows上ではちゃんと動いても、Linuxに持っていくとうまく動かないことはよくある。大抵は文字コードの問題だったり、実装の違いだったり、必要な権限が無かったなど。
いろいろな実験として
・現在Samba3をお試し中。OSXから日本語のディレクトリがまともに見れる。今のところ悪くない感じなので、そのうち近所のSambaを入れ替える予定。
・Linuxの上で動くVPNソフトの実験。最近はSoftEtherがあるけども、OSXなどのサポートはまだ当分実現しそうに無い。
・Rootkitなどを入れてみて検出の演習をしてみたり、exploitの実験など。簡単に乗っ取れるというのがよく分かる。
簡単に動かしたいLinuxのソフト
・Subversion、Apache+phpなどUNIXでないと動かすのが面倒くさいソフトなど。
身代わり〜として
・Cygwinでもssh、Apache、NFSなどは動くけども、細かい設定や権限の調整がWindows特有で面倒くさい。そこで、ブリッジかNATとポートフォワーディングを組み合わせることで認証や権限の調整を勝手の分かるLinuxに任せようというもの。もし何かあっても、大抵Windowsの一歩手前のLinuxが犠牲になるだけで、メインPCの方まで被害が及ぶことが少なかったり、少なくとも多少の時間稼ぎができる。というか、Windowsのサービスはお互いに強く関連していたりして、実際に何をしているのかよく分からない。
・ブリッジで外に繋いでHoneyPotとして活用。出先のネットワークに繋いでいるときにポートスキャンや侵入の予兆を検出したら素早く切断。もしくは侵入者を逆探知して楽しむ。

そこまでするのになぜメインがWindowsかというと、NotePCはWindows専用にできていることが多くて、Windows以外のOSではハードウエアリソースを有効に使えないから。最近はWindowsもかなりよくなってきているので、普通に開発などができてメインマシンとして使っても問題が無い。

また、日本語環境がやっぱり自分にとって使いづらい。SKKとか使えればいいのだけども、やっぱり日本語は普通に打ち込みたい。また、日本語が通る場面と通らない場面があって、慣れるとその違いが分かってくるのだけども、そういうところまで気を回さないといけないところがやっぱり使いづらい。UNIX系では日常生活でドアを開けるように文字化けという現象を解決できなければとても使えないように思う。趣味だったり、積極的に修行のためにそういう環境を使うというのは非常にいいと思うのだけれども。

Aug.28,2004 (Sat)

FreeKanekoな日。お疲れ様でした。やることがたくさん。

変態プログラマ

FreeKanekoの会の後、そういう系の近所のプログラマが集合。なんかレベルが異常に高くて、通常の飲み屋の会話で普通にTemplateとかメタとかパイプラインとかいう言葉が出てくる。しかも、技術の話ではなくて通常の会話の中の単語として。

最初の肴はBoostというC++ライブラリ。STLを補完する形で開発が進められているライブラリらしくて、STLでC++の知識が止まっていた自分としては驚きでいっぱい。C++のテンプレートを駆使してlamda関数とかBNF表記をしてパーサーを作ったり(spirit)、果てにはシリアライズまでしてしまうとか。しかもそのインタフェースや実装が変態で狂っているという。これは早速チェックしなければならない。

次の肴はエディタ。viからEmacs、メモ帳まで。Eclipseは誰もいないというのが既に普通でないかも。viは気持ちいいという話から、会社でEclipseを使っていないというだけで給料泥棒と呼ばれたという話まで。そんな人たちは大抵1日の仕事が30分で終わってしまうのだけど、仕事をしたふりをしなければ給料がもらえないという変態ぶり。

次は仕事の仕方。UMLを描いたり、JavaでXMLとかDBとか触っているという自分はホワイトカラーでビジネスパーソンらしい。しかし、Template萌えだったり、日々Boostをコンパイルしたり、C++で書いたソースのgccの出力アセンブリをチェックしてしまうようなブルーカラープログラマもかっこいい。というか、よりプログラマらしくていいなあ。

最後は女性との付き合い方。変態的にはハイパースレッディングとパイプラインを駆使して稼動効率上げて、ビジンゲット率の向上を目指すらしい。たまに、ダブルブッキングが発生してパイプラインがストールしてしまうとか。それはどうなのか。あとは性的型付け言語の最近の研究の成果など。

というような会話をとりとめもなく。



[最新にもどる]
桜井雅史: E-mail : m.sakurai@cmt.phys.kyushu-u.ac.jp
Web page : http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/