Antoine.st 2005-06

2005-06-28

PLUTO

現在、ビックコミックオリジナルで連載されている「PLUTO」の原作である、鉄腕アトム「史上最大のロボット」を読みました。浦沢版「PLUTO」と違って、手塚治虫(子供用)テイストあふれる作品です。つーか、よくこれから PLUTO になるもんだ...。


2005-06-27

IP Messenger on Terminal Service

IP Messenger はえらく使い勝手のいいメッセージ送信ツールです。で、ターミナルサービスを使ってる人たちからも『使いたーい』というリクエストがあがったと。何も考えず、インストールしてテスト。うんうん。問題なし。

...と思ったら、でっかい落とし穴が。IP Messenger って、ポートを指定して待ち受けしてる関係で、Terminal Service のような環境では、ひとつのインスタンスしか動きません。もちろん、ポートを変えれば動きますけど、違うポート間ではやり取りができないと。こりゃ、参りました。Terminal Service API 関連とかを見てみましたが、セッションごとにポートを持つ、なんてことはできなさそうです。そりゃ、ある意味できたらまずいですもんね。

ということで、Terminal Service 上で IP Messenger を使うためには、大幅なハックが必要になりそうです。簡単なのは、ポートをある特定のレンジでひとつとみなす、って感じでしょうか。たとえば、2425-2434 までの 10 ポートをターゲットとして、ブロードキャストするとか。


2005-06-22

Gentle and MyGeneration

よしぶろっ』 という Blog で、.NET 用の O/R マッピングツール Gentle.NET とコードジェネレータである MyGeneration が紹介されてました。ざっと見る限り、なかなか面白そうなので、いろいろ試してみようかな。


2005-06-20

Korean Language in Hotmail

ちょっと必要があって、韓国語でメールを書いてみたんですが、Hotmail では化け化けのようです。どうやら、文字コードが日本語のまま変わらない模様。Becky で書くか・・・。


2005-06-16

NTEmacs binary downloads

いわゆる NTEmacs は日本語対応版がバイナリで配布されておらず、ちょっと敷居が高かったのでした。ある意味、Meadow の存在理由もその辺にあったり。が、ここ で公開されてたりします。これを使えばお気楽に試せますね。


2005-06-15

Building NTEmacs on Visual C++ 2005 - 2

  • w32.c のエラー

fstat、_utime の実体が複数あるということで、%INCLUDE%\sys/stat.inl と %INCLUDE%\sys/utime.inl の定義を無効化。Visual C++ 側をいじるのはちょっと嫌な感じなわけですが。

それぞれ、EMACS ビルド用に EMACS_BUILD_BY_VC8 を指定して、コンフィグ時に --cflags -DEMACS_BUILD_BY_VC8 を追加する。

  • temacs.bin のリンク時のエラー

-debugtype:both オプションを外す。リンク対象に msvcrt.lib を追加する。w32fnc.c の QCenter() 関数の宣言に extern を追加

  • addsection.exe の実行でエラー

エントリポイント __report_gsfailure が MSVCR80.dll に見つからない...。どうも、何かの結果としてこの関数を呼び出している模様。addsection.exe をデバッグでもしないと、詳細はわからなそうです。

うーん。道のりは遠い...。


2005-06-14

very very small difference

Visual C++ 2005 でのビルドはちょっと置いておいて、-arch:SSE2 -GA オプションをつけてビルドすると、どのくらい変わるのかってのをテストしてみました。結果は約 10ms の違い。当然、体感できません。

そんな中、気づいたことがひとつ。ミニバッファから文字があふれると自動的に高さが拡張します。それって思ったより高いコストが必要のようで、それを解消することで、約 100ms ほど起動時間を減らすことができました。100ms になると、『気持ち遅いかな』って感じがします。

Building NTEmacs on Visual C++ 2005

ということで、せっかくなら Visual C++ 2005 を使おう、ということで試してみました。が、あっさり撃沈。じっくり検証していく必要がありそうです。

  • シンボル『security_cookie』が未定義

これは、msvcrt.lib をリンクすることで解決。

  • time.h で関数の戻り値が構造体です

time.h のどの関数が対象か不明。どうやら、tm 構造体の定義を利用しているだけのようなので、それだけを活かすことで対応可能。

  • charset.c

えーと、エラーメッセージが出てないんですが...(泣 エラーもなしに fatal で止まるってのは勘弁してください...。

migemo

よく覚えていないんですが、Meadow + migemo がうまく動かなくて、しばらく migemo を入れずに済ませてました。NTEmacs にしてからは、通常の検索機能に頼りきりだったんですが、Visual C++ でビルドしたついでに、migemo もビルドと。ここ からソースを取ってきて、何の問題もなく。辞書のビルドには perl が必要らしいので、ここ で配布されている 1.1.013 版からもらってきました。久しぶりの migemo はかなーりいい感じです。

NTEmacs Build Option for Visual C++

configure.bat で --no-debug を指定してメイクファイルを生成すると、こんな感じのコンパイルオプションができます。

ARCH_CFLAGS = -nologo -D_X86_=1 -c -Zel -W2 -H63 -Oxsb2 -Oy- -G6dF -Zp8 $(DEBUG_FLAG)

それぞれ、

  • -nologo ロゴなし
  • -c リンクなし
  • -Zel MS 拡張あり、.obj からライブラリ名削除
  • -W2 警告レベル
  • -H63 外部識別子の長さ指定
  • -Oxsb2 最大限の最適化、サイズ優先、インライン展開
  • -Oy- フレームポインタ省略
  • -G6dF ペンティアム、__cdecl、文字列プール有効
  • -Zp8 構造体を8バイトアラインメント

ということで、あまり最適化の余地は残されていません。せいぜい、/arch:SSE2 ぐらいでしょうか (Pentium M の場合)。どうも微妙にビルドに失敗しまくったので、Qcenter を extern したり、info をビルドターゲットから外したりして対処。ふぅ。

Build Emacs by Microsoft Visual C++

とくに何も考えずにビルドしてみる。


  $ configure.bat --with-msvc --no-debug \
                  --no-cygwin --prefix c:/emacs/22.vc
  $ nmake bootstrap
  $ nmake all
  $ nmake install

VC++ 版と MSYS 版、それぞれ 3回ずつ起動して、起動にかかる時間の平均を取ると、VC++ 版は約 300 msec ほど速い。バイナリも少し小さめ。ただし、メモリは少々大食らい。これは結構いいかもしれない。パッチを当てて、もう一度ビルドしようっと。


  $ patch -p0 < ../emacs-cvs-yyyymmdd-IME.patch
  $ configure.bat --with-msvc --no-debug \
                  --no-cygwin \
                  --cflags=-DIME_CONTROL \
                  --cflags=-DRECONVERSION \
                  --cflags=-DCLIENTEDGE \
                  --prefix c:/emacs/22.vc
  $ nmake bootstrap
  $ nmake all
  $ nmake install


2005-06-09

Web Resume

転職サイトとかで自分の履歴書、経歴書を登録して、それを送信できる、なんていう機能を提供しているところがあります。で、送信して申し込みをすると、企業であるとか人材紹介会社から返信が返ってくると。『ご期待に添えません』という返信なら、それはそれで意味があるんですが、『履歴書、職務経歴書を送ってください』なんてことを言ってくる所もあって、まったく意味不明です。さっき送った登録済みのレジュメはなんだったんだと。

こんなの、大した情報でもないですから、とっとと業界の共通フォーマットを作るなり、登録済みのレジュメからエクスポートする機能でも作ればいいのにな、と思います。まぁ、『これに記入してください』と自己解凍書庫を送りつけてくるケースに比べれば、なんてことはないのかもしれませんけど。


2005-06-08

MVP for C# 2005-2006

ということで、3回目の MVP アワードは前回と同じく C# で頂きました。今年もよろしくお願いします。

MSDN Magazine Online

元ネタは 某氏の mixi 日記から。MSDN マガジンオンライン日本語版 はいいですね。ディープなネタが紹介されてますし、要チェックです。

WMI in C#

よく忘れるのでメモ。この例では論理ドライブを列挙します。


  using System.Management;

  private void EnumDrives() {

    WqlObjectQuery wq;
    ManagementObjectSearcher s;
    ManagementObjectCollection c;

    wq = new WqlObjectQuery("select * from Win32_LogicalDisk");
    s = new ManagementObjectSearcher(wq);
    c  = s.Get();

    foreach (ManagementObject v in c) {
      Console.WriteLine(v["deviceid"]);
    }
  }


2005-06-07

Tablet Thinkpad

Mac に Intel 製 CPU 搭載ってのが大きな騒ぎになってますが、こっち の方が気になるニュースだったり。X41 ベースってのがかなり微妙ですが、なんにしても IBM 初のタブレット PC ということで、かなり楽しみです。

Debian GNU/Linux 3.1 Release

Debian GNU/Linux 3.1 がリリース』だそうでございます。Woody のサーバーも調子が悪くなってきたし、再インストールしようかな。


2005-06-06

GetCurrentMethod()

現在のメソッドの取得については、StackTrace を使ったものが一般的です。しかし、デバッグビルドではよくてもリリースビルドだと取れなかったり。別の方法として、リフレクションを使った方法があったりします。MethodBody からローカル変数の値を取ったり、結構便利な使い方ができそうです。


  using System.Reflection;

  private void button1_Click(object sender, EventArgs e) {
    MethodBase mb;
    string functionName;

    mb = MethodInfo.GetCurrentMethod();
    functionName = mb.Name;
    MessageBox.Show(functionName);

  }


2005-06-04

Error Mail

某メーリングリストに投稿したところ、不在通知が 3通、エラーメールが 1通返ってきました。どゆこと? 会社のアドレスでメーリングリストに登録するのはいいんですが、オートリプライの取り扱いには気をつけてほしいところです。しかも、たいてい大手企業だったり。会社の恥としか思えないんですが...。

Sigh...

なんでコミュニティって同じ道をたどるんでしょうね。微妙に疲れました。『無視しとけ』・・・はい、それもひとつの方法です。でも、お子さまなんで、ついつい。なんか、どうも『責任』ってことがわかってない人が多いです。ま、そんなものかもしれませんけど。

Floating point

コンピュータは、数値を内部的に二進数で保持しています。というところから始まって、浮動小数点の説明などがあり、結果的に 0.5 - 0.4 - 0.1 が 0 にならないという結果に至るわけです。それ自体は知ってる人にとっては『当然』な話なんですが、そうではない人たちに説明するのが結構難しい、と。何かいい説明方法はないものでしょうか?

説明が面倒なときは、『これはそういうもんなんだ』で押し通して、Decimal 型を使いましょう、といった対処方法の説明で終わらせてます。うーん。それでいいのか?

nixi

にくしぃ。いつできるんだろ。


2005-06-03

Sense of incongruity

某所で『プラグインの作成方法を教えてください』という質問がありました。質問自体は大して珍しいものでもないですし、実装方法もさほど難しいものではありません。ということで、そのまま見過ごすところだったのですが、どうにも違和感が拭えません。

というのも、そういった質問をするに至った経緯が理解できないためです。今回の例で言えば、『プラグインを作りたい』イコール『第三者が作った機能を、自作のアプリケーションで取り込みたい』というのが最終的な要望になります。そこから考えると、

  • アプリケーションとプラグインは別アセンブリになる

という前提が生まれます。そうなれば、

  • 別アセンブリの機能を動的に呼び出すにはどうすればよいか?

がキーポイントであり、そこを実現できれば、ほぼ要求は満たせることになります。まぁ、このほか、動的にメニューに登録するにはとか、プラグインのクラスが本当にプラグインであることを保障するためにはどうするかとか、いくつか考えなくてはならないんですけど。

ちょっと脱線しましたが、ようするに目的があったら、目的に至るまでの障壁をひとつひとつ取り除いていけばいいんだと思うんです。その障壁がどうしても取り除けなければ、誰かに聞けばいいと。どうも最近、障壁が何であるか、まで落とし込めない人が増えているような気がします...。

Nautilus

VS Hawaii というポストによれば、次次期 Visual Studio である Hawaii には Nautilus という機能が搭載され、それはソースコードをデータベースに格納するというコンセプトに基づくものだとか。この考え方自体はそれほど目新しいものではないわけですが、それを実行環境にも配布して、オンデマンドでコンパイル、実行、なんてのも面白そう。

実際、Java ではその辺を実現している仕組みもありますしね。

Virtual PC Problem

久しぶりに Virtual PC を起動したところ、ネットワークにつながりません。設定を見直してみると、あれ? ネットワーク接続が消えてなくなってます・・・。再インストールしますか。とほほ。


2005-06-02

Broken Google Desktop Search

えーと、壊れましたか? 全然だめなわけですが。

image/gds.jpg

Delete all sub folders

元ネタは相変わらず msnews なわけですが、特定のフォルダのサブフォルダ以下を、ファイルを含めて削除するという例。特に難しいことなし。


  Private Sub Command1_Click()
    Dim fso As FileSystemObject
    Dim fs As Folders
    Dim f As Folder
  
    Set fso = New FileSystemObject
    Set fs = fso.GetFolder(TARGET_FOLDER).SubFolders

    For Each f In fs
      Call f.Delete(True)
    Next

  End Sub

Sharp

そういえば、emacs-wiki の仕様上、半角の # はうまく処理されないのでした。普通の文章中ならいいんですけど、タグの中とかそゆところでは。ということで、変な表示になってる部分があったので、全角の#に変更、と。適当な対処...。

Rainy day...

雨です。グアムもすっかり雨季で、雨の天気が続く今日この頃。雨という天気は、人のやる気を減少させるとか、いろいろあった件も関係して、すっかりダメダメな状態です。さて、逃げるか。

Can't terminate Excel process

元ネタは msnews なわけですが、Visual Basic から Excel を COM 経由で起動して、って例のパターンです。で、元質問者いわく、PasteSpecial() メソッドを呼ぶと、Excel のプロセスが消えてくれないと。

いろいろ調べてみると、

  • SaveAs() メソッドを 2回呼んでいる
  • PasteSpecial() メソッドを呼んでいる

という条件が重なると、Excel プロセスが消えてくれないことがわかりました。とりあえずのワークアラウンドとしては、SaveAs() メソッドを最後に一度だけ呼ぶということで対処可能のようですが、原因がわかりません。なんだろうなぁ・・・。


2005-06-01

Google Search Plug-In

C# Source Indexer For Google Desktop Search ってのと、MSHelp2 Plug-in ってのをインストールしてみました。が、前者は設定画面に出てきません...。あれ?

Hawaii

eWeek によりますと、Whidbey の次の Visual Studio である Orcas の次は、Hawaii というコードネームで呼ばれるのだとか。二世代先後まで行くと、いったいどうなるのやら、まったく想像がつきませんです。はい。

SwapMethodBody

MethodRental.SwapMethodBody() メソッドを調査してたんですが、『The MethodRental.SwapMethodBody method can only be called to swap the method body of a method in a dynamic module.』とのこと。そりゃそーか...。となりますと、例のごとく WriteProcessMemory() 系の方法ですかね。

Google Desktop Search

なんか評判いいみたいなので、インストールしてみました。B2 用プラグインもインストールして、さっそくインデックス作成中。結構時間がかかりそうな気配。

TeraStation - 2

ようやく自宅に帰りついたので、TeraStation の設定ができました。まずつないでクライアントユーティリティとかのインストール、しかし、本体が見えません。いったん無線 LAN を Disable にして、それからつなぎなおして問題なし。

リビルドに 4時間ほどかかるのは、この大きさから考えてもしょうがないですね。って、やってる間に寝ちゃいましたけど。買うまで気づかなかったことがひとつ。『PC から直接つなぐことが可能』です。自宅のネットワーク環境が貧弱なんで、その点だけが心配だったんですが、これならネットワークとは切り離して PC 直接で OK です。

さすが『ギガビット』なのか、感覚的には USB 2.0 よりちょびっと速いかな、といった感じでしょうか。