Peta Walkers

HOME: 少しまえのこと

2004.12.16(木) - 開封通知

 0.8.1αに新機能は一切無い予定でしたが、開封通知を表示できるようにします。 これまで開封通知が無かったのはペタろう風のGUI + αを予定していたことによるものなんですが、 とりあえず妥協してアラートにしました。

2004.12.14(火) - ペタクローン0.8.1αの予定

 いろいろと立て込んでおりまして、年内のリリースは微妙になりつつあります。 新機能は一切無いのに内部的な変更点は多いので安易にリリースできなかったりもします。

 まだ書き換えたいところもあるのですが、未修正のバグもあることですし、 そろそろリリースを意識していかなきゃなって思っているところです。

2004.12.13(月) - いがぴょんさん

Javaエバンジェリスト引退宣言 , Debian GNU/Linux入門宣言

 何度Googleからいがぴょんさんのページにたどり着いたことか。

2004.12.08(水) - WebのViewについて考える4

 昨日見つけたPageMixerですが、 情報が少ないです。

 使い方がわかりました。重厚なアプローチですよ。 PageMixerはテンプレートに指定された要素や属性を見つけるとWatcherをコールバックする仕組みになっています。 テンプレートに対して変更を加えたい部分にWatcherを定義していきます。 ソースの分量が増えるのが難点でしょうか。

 PageMixerのサイトでは様々な観点から他のソリューションと比較していますが、 開発の容易性については触れられていません。 この点に関しては不利と見ます。 でも、普通のHTMLをテンプレートにして、ページを生成できるところは完璧です。

2004.12.07(火)2/2 - WebのViewについて考える3

 PageMixerって よさげなんですが、使い方がわかりにくいのが残念です。 もう少しドキュメントを読んでみます。

2004.12.07(火)1/2 - WebのViewについて考える2

 片っ端からダウンロードしてソースを読むことにしました。

 ソース読み終了。 ほしいと思っているものはJBYTEが一番近いかな。 JBYTEがJSPや他のソリューションと違うところはHTMLにプログラミング言語が入り込んでいないところ。 JSPのjspファイルにはJavaが記述され、VelocityのvmファイルにはVTLが記述されるわけですが、 JBYTEは言語を埋め込みません。

 JBYTEが用意しているのは{v:title}のようなプレースホルダと <t:book>...</t:book>のような繰り返し部分を示すタグだけです。 APIはTemplateというクラスが唯一用意されていて、 このクラスを使ってテンプレートをロードし、テンプレートのプレースホルダに値を設定していきます。 とても簡素なので5分あればすべて理解できます。 しかしながら、簡素な割りに自由度が低く、実用的ではないのが残念です。

 他ではFreeMarkerはマニュアルがわかりやすくていい感じですね。 でも今回は却下です。

2004.12.05(日) - WebのViewについて考える

 いろいろ考えてみた。Perlでいろいろ書いていたときのが一番シンプルかもと思ったのでメモ。

 View Data(テンプレート)は完全なHTMLにする。 <%%>はもってのほか(DreamWeaverとか以前から対応してますので問題ないですけど)、 id属性に変な値を入れたり、HTMLに存在しない属性を使うことは一切無しで。 必要な情報はHTMLコメント内に入れて、パースした時にテンプレートの断片と関連付けるようにする。 デザイナーさんとは各断片の名称とどんな項目が表示されるかを事前に決めておく。 値を埋め込む部分はPerlのときは $name とか %%name%% とかいろいろやった。 基本的にデータを埋め込むだけ。数値フォーマットみたいなのはテンプレート側で指定する。 iif()的な制御も入れたことがあったけどキリが無いのでやらない。

 View LogicはJavaで書く。 Javaで書くのが一番じゃないのかなぁ。 View Logicのために別の言語を導入する長所がいまいち理解できていないんですが、 エディタでコードアシストとか効いたほうがやりやすいですしね。

 PerlのときはView DataのHTMLを正規表現でさらっとパースして、 表示(レンダリング)のときはs///と正規表現でさらさらっとテンプレートの断片にハッシュに詰めたデータを流し込んでいく ということをやっていたんでした。(パース→(レンダリング→出力)*)

 Javaで実装するなら、レンダリングにMessageFormatを使うと簡単に実装できそうです。 けどパフォーマンスは悪そう。 View LogicにMessageFormatが登場するのも違うと思う。 できるだけ透過的に行きたいところ。

 TapestryとかJSFはカバーする範囲が広い分だけ複雑だけど、こっちが本流なんだよなぁ。 もうちょっと検討してみることにしよ。

2004.11.26(金)2/2 - Usable GUI Design

オレンジニュースからUsable GUI Design: A Quick Guide for F/OSS Developers

 Backボタンの矢印が伸びているのを見て冗談だと思った。 Figure 5: Find dialog in gEditを見てMozillaのF3(再検索)を押したときの挙動を思い出した。うっとおしい。 Figure 8: Konqueror's default toolbar・・・

2004.11.26(金)1/2 - Mozilla, Firefoxでタブを閉じる最も簡単な方法

 /.で簡単なやり方を見つけた。

Tabをミドルクリック(ホイールクリック)で閉じるのでは駄目ですか?

 ホイールはクリックするものという意識がなかった。 実際やりにくいけど慣れかなと思っています。

2004.11.21(日) - ロギングのパフォーマンステスト

 Log4Jとjava.util.loggingのパフォーマンステストをやってみました。

 速度性能に関してはシンプルな同じフォーマットで実行すると大きな差が無いように思いました。 java.util.loggingが遅いと言われる原因はデフォルトの状態で処理コストが高くつくメソッド名の記録と コンソール上に出力するハンドラが有効になっているからではないでしょうか。 あと、java.util.loggingをLog4J並みの速度で実行したいときはjava.util.logging.Formatterのサブクラスを作ってハンドラに指定しないといけないので多少手間だと思いました。

 今回知りたかったメモリ消費量は、 どちらもLoggerを1つ生成した場合、Loggerを生成しない場合と比べてメモリ消費量が100KB〜650KBほど増える(実質200KB未満かな)ということもわかりました。 2つ目以降のLoggerは数百バイトに収まるようですが思ったよりもでかいですね。 Log4JでLogger生成後のログ記録前よりログ記録後のほうがメモリ消費量が減るという結果になったので本当のところはよくわからないです。 何度かgc()するとLog4Jもjava.util.loggingも同じくらいのメモリ消費量になるのでLog4Jはインスタンスを生成する際にガベージがたくさん発生するみたいです。

 (結果ではなく)感想としては「どっちも同じ。」です。 使い方によって違いが出てくるでしょうし。 実際にどちらがベストかは実装して測定しないとわからないと思います。

 それにしても、もっと歴然とした差が出てくれれば良かったんですが、これでは決断できないじゃないですか^^。

2004.11.20(土)2/2 - ロギング

 ペタクローンにロギングを取り入れたいと思っている。

 メッセージの送受信ができなかった場合や添付ファイルのダウンロードが拒否された場合など、 原因が特定できないことが多いのでエラーログやデバッグ中には動作ログが残るようにしたい。

 ロギングにはいくつか選択肢があって自前で実装する他に log4jjava.util.logging などがある。

 log4jはパフォーマンスが良いし高機能だが、サイズが344KB増える。 java.util.loggingはJava1.4からの標準なのでライブラリを添付する必要はないのでサイズも増えない。 標準ということで安心だがlog4jと比較してパフォーマンスが悪いとか何かと批判が多いようだ。 印象としてはjava.util.loggingは人気が無く、どちらかというとlog4jが標準のように見える。

 でも配布サイズはあまり増やしたくないので悩む。 commons-loggingならユーザーが 好きなロギング実装を選べることになるが、そこまでするべきかどうかもまた悩む。 メモリ使用量はどうか。みんな速度しか比較してないみたい。 メモリはシンプルな方に有利かな。実際に調べてみなければ。

2004.11.20(土)1/2 - ルータ設定完了

 初めてスタティックルーティングの設定をしたのですが、 うまくいきました。 設定にはケーブルの小部屋第4話 ローカル・ルータが参考になりました。

2004.11.18(木) - ルータを入手しました

 ルータを入手しました。新品です。 箱の表面に「実効スループット8.7Mbps」と書かれています。 この速度って現行機種の10分の1くらいなんですよね。 で、値段は送料込みで2,835円でした。 この性能でこの値段は割高なのかどうかわからないのですけど、 処分品だったことと、うちの近くでこういうものを売っている店が無かったということで決めました。 これでようやくサブネット環境のテストができるようになります。

 ところで、「Sleipnir作者、盗難に遭う」 すごくショックです。

2004.11.14(日) - サブネット構築

 ブロードバンドルータの最近の機種はローカルルータとしては使えないみたいですね。 NATやファイアーウォール関連の機能を無効にできないのが多いようです。

 そういうわけで中古屋で古い機種を探してみようと思います。 とりあえず実験用のサブネットが構築できれば良いのでスループットが1桁でも構わないです。 そもそもPCは2台しかないので。

2004.11.13(土) - サブネット構築

 ブロードバンドルータなら安いですね。1000円くらいから。 スイッチングハブ並の価格は量産効果でしょうか。 WANポートを持っているタイプなら無理矢理ローカルルータとして使えるのかな?

2004.11.12(金) - Windows XP SP2

 PCの電源を入れてしばらくしたらポンッという聞き慣れない音が鳴った。

 Windows Updateの自動更新アイコンはずっと0%ダウンロード済みだった(1ヶ月以上?)のに 今日になって全力でダウンロードしたみたい。

 「Windows XP SP2 の利点をご紹介します」 を読むとわかるけど、ほとんどIEとOEの修正。 Firewallの機能は向上しているけど、 今無効にしているからSP2でも無効にすると思う。 バックアップしてからインストールしたいのでとりあえず放置です。

2004.11.11(木) - サブネットを構築するには

 2つのサブネットを構築するにはスイッチングハブ1個じゃ無理か。 ブロードキャストは通るけど個別のアドレスを指定すると到達しない。

 ルータは2万くらいあれば買えるみたい。スイッチングハブ10個分。高価だ。

2004.11.09(火) - Mozilla Firefox 1.0リリース

 Mozilla Firefox 1.0がついにリリースされました。 が、mozilla.orgなどアクセスが集中していて、トップページの表示すらできない状況です。 ダウンロードは明日にします。

2004.11.08(月) - Tomcatでweb.xmlの<error-page>が無視されていると思ったら

 文法が間違っているのかと思って何度も確認したけど間違いなし。 おかしい、前はできていたと思ったけど。

 ServletでRuntimeExceptionのサブクラスをthrowしたら、 web.xmlの<error-page>が無視されてStatus 500のページが表示されてしまう。

これはまあ、仕様なんですが。結構ハマります(ハマりました)。 解決までのメモです。

 暗黙変数のexceptionがどうやって生成されているかを見てみると...

Throwable exception = 
    (Throwable) request.getAttribute("javax.servlet.jsp.jspException");

となっていた。ためしにJSPに<%=exception%>と書いてみるとnullが表示された。 例外が発生して転送されたJSPでもexceptionがnullになることがあるってことか。 とりあえずrequestの属性をすべて表示させてみることにした。

<%@page isErrorPage="true"%>
<%@page import="java.util.*"%>
<%
Enumeration enum= request.getAttributeNames();
while (enum.hasMoreElements()) {
    String name = (String) enum.nextElement();
    out.println(name);
}
out.println(exception);
%>

上がJSPのソース。で、下が実行結果。

javax.servlet.error.servlet_name
javax.servlet.error.exception
javax.servlet.error.message
javax.servlet.error.exception_type
javax.servlet.error.request_uri
javax.servlet.error.status_code

 さっきの"javax.servlet.jsp.jspException"がないので、exceptionがnullになるのも当然だということがわかる。 ところで気になるのがjavax.servlet.error.exception。 結論から言うとこれがServletでthrowしたRuntimeExceptionだった。 よって、次のようにしてthrowした例外を取り出すようにした。

SubRuntimeException e;
if (exception == null) {
    e = request.getAttribute("javax.servlet.error.exception");
} else {
    e = (SubRuntimeException) exception;
}

こうすればRuntimeExceptionのサブクラスに格納された情報にアクセスできるようになる。

 Tomcatの実装依存なのかとも思ったが、そうでもないようだ。

<%@ page isErrorPage="true|false" %>

This directive makes the exception object (of type javax.servlet.jsp.JspException) available to the error page, so that you can retrieve, interpret, and possibly display information about the cause of the exception in the error page. (The J2EETM Tutorialより)

さらにJSP1.0でも、

Whether the JSP file displays an error page. If true, you can use the exception object, which contains a reference to the thrown exception, in the JSP file. If false (the default value), means that you cannot use the exception object in the JSP file.

と書かれていた。でも、 Oracle ASJRunあたりでは Servletでthrowした例外もexceptionに入るようになっていたりするようだ。 こっちのほうが合理的だと思うが、互換性は大切にしてほしいよなあ。

2004.11.06(土) - Tomcat(4.1)ではまる、他

Tomcat4.1

 server.xmlの<Context ... />に絶対パスのdocBaseを指定して配置した webアプリケーションでJSPがコンパイルエラーになった。

パッケージ foo.bar.boo は存在しません。

エラーログに出力されたクラスパスが文字化けしていた。 やれやれパスには日本語が使えないのか・・・

 importが無いJSPではコンパイルエラーが起こらないことを考えるとserver.xmlは正しく読まれていて、 javacの呼び出しまでに文字化けが起こるようです。 server.xmlさえ正しく読めれば文字化けする要素は無いと思うのですが、まったく不思議です。

SSL対応Apache2

 先日のHunterのApacheですが、 バイナリを比較したところ、相違点はありましたが、静的リンクされたモジュールは同じでした。

 そこでmod_ssl.soと設定ファイルだけをapache.orgのディストリビューションに放り込んだら うまく動きました。OpenSSLとmod_sslが付属した普通のApacheだったようです。 mod_sslをApache2に対応させているところがポイントです。 Apache2対応はmod_sslの本家がやってくれたら楽なんですけどね。

 ・・・実は1週間前まで「SSLなんてデフォルトで組み込まれているんでしょ」って思っていました。 そうじゃないんですね。

2004.11.03(水) - ApacheのWin32バイナリがSSLをサポートしていないわけ

 Win32のバイナリディストリビューションをインストールして気が付いたのですが、 SSLに対応しているコンパイル済みのApacheはhttpd.apache.orgからは配布されていません。

 注意書きを読むと、

This version is only available at present in a -no_ssl flavor, due to ongoing questions of strong crypto redistribution.

と書いてあり、アメリカの暗号製品の輸出規制によるものっぽいです(自信なし)。

 それから、どのサイトを見てもSSL対応のバイナリがほしい場合は、「Hunterからダウンロードしてね。」と紹介されています。 ホスト名がcampbus・・・キャンプバス? なんのこっちゃと思うわけですが、Campney Business Servicesという会社だそうで、 所在地はRochester, NY 14616です。

 NYはNew Yorkですから、アメリカの会社ですね・・・。

 他のプラットフォームのバイナリには-no_sslが付いていないので謎は深まるばかりです。

2004.10.31(日) - 明日から11月。寒い。

 年末という言葉がそろそろ聞かれそうです。

 ペタクローンの次のリリースを年内にできたらいいかなと思っています。

2004.10.23(土) - FirefoxのClose Tabを一番上にする

 Close Tabの位置だけでFirefoxが使えないのは残念。 それに不満を言うだけなんてかっこ悪い。 というわけでClose Tabを一番上に持ってきてみました。 以下は解決までのメモです。

 FirefoxやMozillaはGUIをXULというXMLを使って定義しているので、grepすれば何かわかるだろうという甘い考えのもと、Mozilla FirefoxフォルダをYokka Grepを使って検索してみた。

 "Close Tab"を検索した結果、en-US.jarとhelp.jarでマッチする行があった。 ヘルプは無視してen-US.jarを見てみる。

en-US.jar 4124行目

<!ENTITY  newTab.label           "New Tab">
<!ENTITY  newTab.accesskey       "N">
<!ENTITY  closeTab.label         "Close Tab">
<!ENTITY  closeTab.accesskey         "c">
<!ENTITY  closeOtherTabs.accesskey  "o">

 ところでjarファイルなのにマッチしたということは無圧縮なんだな。 これは都合がいいかもしれない。

 4箇所マッチしたが、最初にマッチした4124行目が一番それらしい。 次は"closeTab"で検索してみることにした。

 今度は少し多めにマッチした。

chrome\browser.jar  2497    function BrowserCloseTabOrWind
chrome\browser.jar  6492        <command id="cmd_close" on
chrome\en-US.jar    4124    <!ENTITY  closeTab.label      
chrome\en-US.jar    4125    <!ENTITY  closeTab.accesskey  
chrome\en-US.jar    4136    tabs.closeTab=Close Tab
chrome\toolkit.jar  15578             <xul:toolbarbutton o
chrome\toolkit.jar  15795               <xul:menuitem labe
chrome\toolkit.jar  15795               <xul:menuitem labe
chrome\toolkit.jar  15826                       onclosetab
chrome\toolkit.jar  16509               document.getElemen

 browser.jarの方はClose Tabを選択したときの動作がJavaScriptで記述してあったが目的のファイルではないようだ。

 toolkit.jarを見てみると<xul:menupopup onpopup...という要素に囲まれて <xul:menuitem label="&closeTab.label;"... という要素が書いてある。他にもnewTabとかreloadTabなどが順番どおりに並んでいる。 これで間違いないだろう。

 さっそくtoolkit.jarをVECAで開く。 さっきまで見ていたファイルはどれだろう…

どこにあるかわからないので検索でマッチしたところから少し上にスクロールしてみた。

  瑟  & t content/global/bindings/tabbrowser.xmlSD_ 、   

 というわけでVECAでこのファイルを[右クリック]-[ビューア]-[テキストエディタ]で開く。 さっきまで見ていた位置まで移動して順番を入れ替えた。

 VECAに戻って保存。Firefoxを起動してみる。

 ちゃんと一番上に表示されているし、選択すればタブが閉じられる。 思ったよりも楽に改造できた。XULおもしろいかも。

2004.10.21(木) - Firefoxが人気。でも…

 Firefoxが人気なのはMozillaを愛用している私としては複雑です。 今後Mozillaの代わりに開発が進められることを考えると。

 とりあえずMozillaで「Close Tab」(左画像)は一番上なのでFirefoxでも同じように使いたいです。

 Firefoxのタブは閉じにくいのです。

ちなみにSleipnirは「閉じる」が一番上です。Operaは新規タブが1番目、閉じるは2番目。 ブラウザではないですが、Eclipseは一番下です。 そのかわりマウスを重ねると閉じるためのボタンがタブの右端に表示されます。

 やっぱりタブは閉じやすくしないとダメですって。

2004.10.09(土) - PetaExecuteでコマンドプロンプトのコマンドを実行するには

 PetaExecuteのFAQに「dirなどのコマンドの出力を受け取れません」という項目がありますが、 次のようにすると受け取れるそうです。

cmd.exe /c "dir C:\"

 cmd.exeに引数としてコマンドを渡します。 Windows Meや98ではcmd.exeの代わりにcommand.comが使えるそうです。

 情報を提供していただきました和田さん、ありがとうございます。

2004.10.03(日) - BBSが復旧しました

 infoseekがCGIの実行ユーザを変更していたようですね。 今までotherでしたが自分のユーザ権限で実行できるようになっています。 必要な権限しか与えていなかったのでエラーになったようでした。

 あと、メールアドレスを非表示にしても表示されてしまうという件でご迷惑をおかけしました。 スクリプトの設定がおかしかったみたいです。ごめんなさい。

2004.10.02(土) - J2SE 5.0がリリース

 数日前にJava 2 Platform Standard Edition 5.0がリリースされました。 ペタクローンもそのうち移行したいと思っています。 が、その前にやらなければいけないことがてんこ盛りなのですが、 Generics, 拡張forループ, Autoboxing/Unboxing, タイプセーフEnum、 など品質向上に役立つ機能が追加されているのでとても魅力的です。

てんこ盛りの内容をちょっと整理しておきます:

 今見るととても下手なプログラミングをしています。 無計画で方針が定まっていないんですね。 最初のリリース以来ずっとソースも公開しているわけですが、参考にしてはいけません(笑)。

2004.10.01(金) - BBSが不調

 BBSを動かすためにriverscape.hp.infoseek.co.jpを借りていますが、CGIが動作しなくなっています。 テスト用のスクリプトも動作しないので、サーバの問題だと思いますが、困りました。

HOME: 少しまえのこと