統合アーカイバ・プロジェクト 開発系メーリングリスト / ARCDEV-Mailing List: には、メーリングリストの過去ログの見方が書いてあるが、そのままやっても見れない。
http://ml.infoseek.co.jp/MLarchive/ で当該アドレスで検索すればよいようだ。(直リンク)
cm_rss.pl を修正。Description に HTML ソースが書かれている RSS に対応。
先日の内容にミスがあったのでちょっと修正しておいた。
Junction に対して、副次ストリームをくっつけてみたところ、リンク先のファイルに付いた模様。
SpringM で、ファイルの Junction をコピーしてみようとしたところ、「ディレクトリ名が無効です」と言われてコピーできない。SpringM のコピー機能は、SHFileOperation() か何かを呼び出して実現しているはずなので、Explorer でも同じようにエラーになるということだろうか。ファイルの Junction の移動は同一ドライブならば問題ないようだ。
cm_rss.pl を修正。不正な RSS に対するエラー処理強化。
C で COM を使う場合、例えばショートカットのリンク先を設定するには、
psl->lpVtbl->SetPath(psl, szTarget);
などと書く必要があり面倒くさい。一方、C++ なら、
psl->SetPath(szTarget);
で良い。ヘッダーファイルを眺めていたところ、COBJMACROS を define してから、ヘッダーファイルをインクルードすれば、C でも
IShellLinkA_SetPath(psl, szTarget);
と少しは簡単に書けることに気付いた。しかし、IShellLink の場合、IShellLinkA_SetPath() と IShellLinkW_SetPath() など、IShellLinkA 系と IShellLinkW 系が別々に定義されている。わざわざ分ける必要があるのだろうか。謎だ。
COBJMACROS でググってみたが、あまり情報が見つからない。代わりに、COM の入門として良さそうなページが見つかったのでメモ。Dr. GUI、コンポーネント、COM、および ATL を使う
Visual Studio 6.0 は、.dsw や .dsp の改行コードが CR+LF でなければ開けないようだ。Yz2.dll の最新のソースを取ってきて開こうとしたら、改行コードが LF になっていたせいで開けず、はまった。Yz2.dll のソースは、VS2003 のプロジェクトファイルも入っていたが、VC++ 7.1 でコンパイルしようとしたら、コンパイルエラーが出てコンパイルできなかった。一部のファイルは、#include の指定と、実際にファイルのある位置が違っていてそのままではコンパイルできなかった。かなりダメダメな雰囲気が漂っている。
[mfc 30408] Re: ファイルプロパティのダイアログ表示 - 複数ファイルのプロパティを表示する方法
[mfc 30473] Re:ファイルプロパティのダイアログ表示 - その実装例
Visual Studio ドキュメント フィードバック - MSDNフォーラム - MSDN の誤訳の報告はここで。
cm_rss.pl を修正。〜 などの一部の記号が化けるのを修正した。
2ch の某所で Java でファイルコピーを行うにはどんな方法が高速か、議論されている。汎用性を求めるのなら、「Java プラットフォームパフォーマンス」に載っている、バッファを静的に確保する方法が良さそうだが、J2SDK 1.4 以降ならば、NIO の FileChannel.transferFrom() を使う方法がわずかに速いようだ。もっとも、この程度の速度差ならば、汎用性を捨ててまで NIO を使う必要はなさそうな気もする。Linux では、FileChannel.transferTo() がまともに使えないらしいという書き込みもあるのも気になるところ。
New IO -TECHSCORE- - java.nio の解説。
これからファイラーを作るのであれば、NTFS のジャンクションやハードリンクに対応しておく必要があるだろうと思い、少し調査。ジャンクションを作ると、dir で見ると <JUNCTION> と表示される。API だと、GetFileAttributes() で FILE_ATTRIBUTE_REPARSE_POINT (0x00000400) が ON になることで確認できる。
ハードリンクのあるファイルの属性を取得する場合は、GetFileAttributes() を使う場合と、FindFistFile() / FindNextFile() を使う場合で、取得される属性が異なる場合があるようだ。.\org\foo.txt というファイルに対して、.\foo.txt というハードリンクを作った後に、.\org\foo.txt の属性を変更してから、.\foo.txt の属性を確認すると、GetFileAttributes() では変更後の属性が取得され、FindFistFile() 系では変更前の属性が取得された。ここで、.\foo.txt を開いてから再度属性を確認すると、FindFistFile() 系でも変更後の属性が得られた。ジャンクションの場合は、ジャンクションそのものの属性とリンク先の属性は全く無関係のようだ。
ちなみに Windows で扱われるファイルの属性の一覧はこのようになっている。
#define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
0x00000008 が抜けているが、これはボリュームラベルを示す属性である。しかし、Win32 API からは、ボリュームラベルを示すディレクトリエントリは見えないために、この値は定義されていないようだ。DIRECTORY, DEVICE, SPARSE_FILE, REPARSE_POINT, COMPRESSED, ENCRYPTED の各属性は、SetFileAttributes() で変更することは出来ない。
Windows において、ファイルへのジャンクションや、ハードリンクはどうも使い勝手が良くない。Windows 用のテキストエディタは、バックアップを作ってファイルを保存する際には、まず元のファイルをバックアップファイル (*.bak) にリネームして、それから元のファイルと同じ名前で新しいファイルを作って、その中に新しい内容を保存するという動作になっている物が多いように思われる。この仕様は、どうも都合が良くない。
ここで、\dir1\foo.txt というファイルと、\dir2\foo.txt というファイルの内容を同一の物にしておくために、ハードリンクやジャンクションを使うことを考えてみる。
唯一まともに使えるのは 4. だけということになる。
Firefox 2.0 では、ブックマークと履歴が大幅に改変されて、Places というものになるそうだ。(参考:Another 朝顔日記 - 今日のナイトリー、Places - wiki.mozilla.org) 履歴とブックマークは、NC 4.5 の頃から同じ UI に慣れきってしまっているので、正直あまり変えて欲しくない。(Enhanced History Manager を使っているのもこれが理由。) UI が変わっても、今までに比べて格段に使い勝手が向上するのならいいのだが・・・。スクリーンショットを見てみたいところ。
FileSeekerが複数ファイルの右クリックメニューを出せない件
IEnumIDList::NextとFindFirstFileの速度
先ほどメールをチェックすると、まともなメールが 7件、spam が 16件来ていたのだが、@nifty 迷惑メールフォルダーは、まともなメールの内 5件を spam と判定し、spam の内 5件を spam でないと判定してしまった。正しく判定されたのは、23件中たった 13件である。あきれるほどの馬鹿さ加減だ。
Eclipse でタブを表示できるようにしたかったので調べてみた。JStyle というものをインストールすればよいらしい。(JStyleプラグイン - EclipseWiki) インストールしたところ、無事タブが表示されるようになった。
Unicodeとセキュリティ
第1回: Unicode から Shift_JIS への変換(その1) - Windows 上で Unicode を扱う場合に発生するセキュリティ上の問題点などについて
第2回: Unicode から Shift_JIS への変換(その2)
初めてまともに、Eclipse を使ってみた。括弧の自動挿入や、各種のコード補完機能は非常に便利だ。
早速 Eclipse を使って、FastFile をいじってみた。Eclipse から、DLL のコンパイルコマンドをどのようにして呼び出せばいいのかよく分からないので、Makefile を使ったコマンドラインからのコンパイルと併用中。結構ややこしいことになっている。*.java のコンパイルは今まで fjavac から、fastjavac や jikes を呼び出して行っていたが、もはや Eclipse の内蔵コンパイラで十分だ。ただ、リリース用には、javac -g:none でデバッグ情報を削除して class ファイルのサイズを小さくしておきたいのだが、Eclipse からのやり方がよく分からなかったので、こちらも Makefile を使っている。
フォームとアクセシビリティ -- ごく簡単なHTMLの説明 - label, fieldset, legend, optgroup の解説。
引き続き、SpringM を改造。springm.dll に、dirtime.dll を統合してみた。さらに、unlha32.dll をスタティックリンクするのを止めて、全ての統合アーカイバ DLL は、springm.dll から呼び出されるように変更した。これにより、SpringM 実行中でも、unlha32.dll がバージョンアップできるようになった。代わりに、springm.dll をスタティックリンクするようにしておいた。
Yz1.dll, Yz2.dll の動作が怪しい。特に Yz2.dll。どちらも、FindFirst() で WildName に、空文字を指定すると落ちてしまう。さらに Yz2.dll の方は Yz2() の出力バッファに NULL を指定して、バッファサイズに 0 を指定すると、NULL ポインタへの書き込みをしてしまう模様。lview から個別にファイルを解凍しようとすると、エラーが発生する。しかし、ダミーのバッファを割り当ててから呼び出しても落ちてしまうのが謎。undll.exe から呼び出した場合は動くようなのだが・・・。よく分からないので、Yz2 の対応は一旦諦めることにした。
とりあえず現時点での対応拡張子は、lzh, tar (taz, tgz, gz, bz2), zip (xpi, jar), 7z, cab, rar, yz1, gca。ファイラから直接アーカイブの中を見れるのは、やはり便利だ。本当は、通常と同じ UI でアーカイブの中を見れるようになるともっと良いのだが、ソース無しでそこまでやるのはさすがに無理だ。なお、lview の中から lview を開ける拡張子は、springm.exe の中にハードコーディングされていて、上記の物より少し少なくなっている。これも何とかしたいところだが、動作がさっぱり分からない。
SpringM のソースが欲しくなってきた。もらえないだろうか。
SpringM の lview 機能強化を行った。tar32.dll を呼び出している部分を、自作の springm.dll を呼び出すように変更。springm.dll でファイルの拡張子を見て、各種の統合アーカイバ DLL を呼び出すようにした。
何か動作が不安定だと思ったら、メモリ確保時のサイズ指定を間違っていた。サイズを正しく指定することでようやく安定動作するようになった。
あとは、springm.dll に dirtime.dll の機能を統合したいところ。
SpringM のコンテキストメニューは、Delphian World にある、TContextMenuEx を使って作られているらしい。以前から、コマンドラインから指定したファイルのコンテキストメニューを開くようなプログラムを作りたいと思っていたのだが、これは参考になりそうだ。
Windows 64-bit Edition まとめ Wiki
SpringM でディレクトリを tview(テキストビューワー)で開こうとしたときのバグを修正してみた。オリジナル版では、ディレクトリを tview で開こうとすると、「ディレクトリは表示できません。」というメッセージが出た後、1つ前に開いていたファイルが表示されてしまう。ディレクトリの時は、tview を開かないようにしてみた。
なお、存在しないファイルを開こうとした場合も、「ディレクトリは表示できません。」というメッセージが出るのは以前から少々気になっているが、動作には関係ない上に、修正は大変そうなので修正はしない。
ファイラァハンタァ - 何か紹介されてますな(汗
改造版 cm_rss.pl で 〜 が文字化けすることに気付いた。さてどうしてくれよう。
参考:Jcode.pmをWindows 2000でコンパイルする
TeX で UTF パッケージを使って、dvipdfmx で PDF を生成しようとしたら、
** ERROR ** Could not find encoding file "UniJIS-UTF16-H".
というエラーが出てしまった。TeX をバージョンアップする前までは使えていたはずなので、ちょっと調べてみた。
C:\usr\local\share\texmf\fonts\cmap に、UniJIS-UTF16-H, UniJIS-UTF16-V がなかった。とりあえず、バージョンアップ前のシステムからこの2つのファイルをコピーしてきたところ無事に UTF パッケージが使えるようになった。
相変わらず、@nifty 迷惑メールフォルダーが馬鹿で困る。
From: 阿部<a_a_a_be2com@mail.goo.ne.jp>
な spam メールが何件も来ているのだが、何回学習させても spam として振り分けられない。代わりに、別のニュースメールが spam に振り分けられてしまっている。学習結果を一度消去してやり直した方が良いだろうか?
先月の spam メールの集計結果。着信拒否にならなかった spam が 2340通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 12通(0.51%)。
タブグループをブックマークできるのは、SeaMonkey の新機能ではなく、かなり前からだった。Mozilla 1.7 でも Firefox 1.5 でも同等の機能はあった。なぜ今まで気付かなかったのだろう。
コンテキストメニューから、選択した文字を Web 検索したときに、新しいウィンドウではなく、新しいタブを開くようにしてみようと思い、調査。SeaMonkey のコンテキストメニューは、content\communicator\contentAreaContextOverlay.xul にあった。この中の、id="context-searchselect" となっている menuitem が OpenSearch() を呼び出している。OpenSearch() を乗っ取って、新しいタブで表示するような拡張を作ってみた。
Mozilla Suite と SeaMonkey では、OpenSearch() の引数が違っていて、ちょっとはまった。とりあえず今回は SeaMonkey 専用で作ってみた。
swtab (Search Web in a new tab) として後日公開予定。