Antoine.st 2003-12

2003-12-31

Visual Basic de-compiler

「Visual Basic 製アプリケーションを逆コンパイルしたいのですが...」という要望は、ときたま見かけます。噂には聞いていたのですが、実際にちょっと試してみたので、その結果なんぞを。

そのツールは、Protools - Decompilers にある「vbde」です。とりあえず、標準 EXE 形式のプロジェクトを作成し、↓のような適当なソースを記述します。フォームには、コマンドボタンをひとつだけ置いてみました。


  Private Sub Form_Load()

    Command1.Caption = "test"
    Command1.Enabled = True

  End Sub

  Private Sub Command1_Click()

    Dim s As String

    s = Me.Caption
    MsgBox Me.Caption

  End Sub

この vbde で逆コンパイルできる内容として、以下のものがあります。

  • プロジェクトの詳細
  • フォームのプロパティ情報
  • プロシージャ情報

ただし、プロジェクトやフォームのプロパティ情報は取れたものの、プロシージャ情報については、取得できる情報はかなり限られるようです。上の例では、Form_Load イベントに関してはほぼ完全に取得できましたが、Command1_Click イベントに関しては、まったく取得できません。イベントプロシージャが存在するところまでは取得できたんですけど...。

とりあえず、フォーム情報を失ってしまったときに、後からプロパティを確認したい! というような限定された場面では使えるかもしれません。同じ Web サイトにリンクが張られている、VBReFormer でも似たようなことができるみたいですが。こちらも、またの機会に試してみることにします。

Workaholic ?

「日本人は仕事中毒だ!」なんて話をよく聞くわけですが、どうもそうなのかな? と思うことしきりです。というのも、日本の年間休日って、えらい多いんですよね。国民の祝日は月 1 回以上あるし、お盆と年末年始はあるし。

と、年末の押し迫った今日、いつも通り仕事に行く前に思うのでした。

ま、日本人の仕事に対する責任感の強さ、というものは感じますけどね。他の国の人たちって、かなり適当なのが多いですし。ときたま、えらい腹が立ちます。


2003-12-30

Memo


  C: connect from client
  S: +OK POP3 POPFile (v0.20.1) server ready


  C: USER username
  S: +OK Password required for username.


  C: PASS ********
  S: +OK There are 22 messages (121261 octets) in your mailbox.


  C: STAT
  S: +OK 22 121261


  C: LIST
  S: +OK 22 scanlists follows.
  S: 1 3950
  S: 22 1632
  S: .


  C: UIDL
  S: +OK 22 unique-id follows.
  S: 1 00324a59cac7e6f1a32141d565e34329
  S: .


  C: RETR 1
  S: +OK Message 1 follows.
  S: send message
  S: .


  C: DELE 1
  S: +OK Message 1 has been deleted.


  C: QUIT
  S: +OK Closing session.

mmm-mode for emacs-wiki

Emacs で何をするの? という質問に対し、ある人が「.emacs をいじる」と答えたという話があります。わたしも、かなりそれに近いトコがあるかもしれません。ここのところ、emacs-wiki を充実させるのが楽しいです。

というわけで、Meadow/Emacs の超巨大情報サイト「Meadow/Emacs memo」で mmm-mode というものがあるのを知りました。ようするに、あるメジャーモードの一部分だけ別のモードにする、という機能です。

これを使って、emacs-wiki モードの中で別のモードを使い、それぞれの font-lock を利用する、ってわけです。今編集している画面はこんな感じ。

この画面の <f2h-sql> タグで囲まれている部分が、↓に自動変換されます。font-lock が効くようになったので、face を変更していた部分をすっきり削除しました。


  SELECT [Value] FROM deleted

ね。結構いい感じでしょ? とある人に説明したことがあるんだけど、理解してもらえなかったり...。ちなみに、このページ程度の HTML 生成は、1,2 秒で終わります。初回はもう少しかかって、5,6 秒ってところでしょうか。


2003-12-29

end of the year

30 °C 前後の気温が続く日々ため、年末だという雰囲気がまったく漂いません。ま、それはそれとして、ふと気づくと 2, 3 日更新するのを忘れたりしているため、そろそろ今年最後の更新かという緊迫感とともに過ごす今日この頃です。

みなさま、よいお年を。

face2html-tag for emacs-wiki

ということで、やっぱり作りました。とりあえず、lisp 用の <f2h-lisp> と SQL 用の <f2h-sql> のふたつだけ。Visual Basic、C# 用はとりあえず、今のままのヤツを使おうかと思ってます。どっちでもいいんですけどね。いちいちタグを作る必要はありますが、ダブルクォーテーションのエスケープは要らないし、やっぱりすっきりしてます。なかなかいい感じ、と自画自賛。


  <f2h-lisp>

    (defun c2f (c)
  	  (interactive)
  	  (+ (* 1.8 c) 32))

  </f2h-lisp>

こんな風なタグで、↓のようになります。


  (defun c2f (c)
    (interactive)
    (+ (* 1.8 c) 32))

face2html-tag for emacs-wiki source


  (defun emacs-wiki-f2h-lisp-tag (beg end attrs highlight-p)
    (if highlight-p
        (add-text-properties
         (+ beg 10) (- end 11) '(face emacs-wiki-f2h-face))
      (let ((s (buffer-substring beg end)))
        (delete-region beg end)
        (face2html4text '(lisp-mode) s)
        (add-text-properties beg (point)
                 '(rear-nonsticky (read-only) read-only t)))))

こんな感じの相変わらずな手抜きです。できれば、それぞれの mode によって font-lock がかかるようにしたかったのですが、かなり面倒くさそうだったので、単に face を設定するだけにしました。ただ、前と同じ問題が出てしまいますけど。


2003-12-28

The converion for Celsius and Fahrenheit

ちなみに、今日のグアムのお天気は ここ で見られます。いいお天気です。はい。


  (defun c2f (c)
    (interactive)
    (+ (* 1.8 c) 32))

  (defun f2c (f)
    (interactive)
    (* 5 (/ (- f 32) 9)))

face2html for emacs-wiki

emacs-wiki の中では、<lisp> タグを使うことで、実際の elisp 関数が呼び出せます。ということで、face を基に HTML 用の色付けをする face2html と合わせて使えるようにしてみました。


  <lisp>
  (face2html4text '(lisp-mode)
  "
    (defun face2html4text (mode str)
      (interactive)
      (let ((buf (current-buffer)))
        (get-buffer-create face2html4text-buffer-name)
        (set-buffer face2html4text-buffer-name)
        (insert str)
        (eval mode)
        (face2html nil t)
        (set-buffer face2html-buffer-name)
        (let ((s (buffer-substring (point-min) (point-max))))
          (set-buffer buf)
          (kill-buffer face2html4text-buffer-name)
          (kill-buffer face2html-buffer-name)
          (insert s))))
  ")
  </lisp>

こんな感じで <lisp> タグの中で face2html4text 関数を呼び出します。従来の face2html に加え、mode を引数にとります。すると、文字列が指定された mode で色づけされ、それが HTML に変換され ↓ のようになる、というわけです。


  (defun face2html4text (mode str)
    (interactive)
    (let ((buf (current-buffer)))
      (get-buffer-create face2html4text-buffer-name)
      (set-buffer face2html4text-buffer-name)
      (insert str)
      (eval mode)
      (face2html nil t)
      (set-buffer face2html-buffer-name)
      (let ((s (buffer-substring (point-min) (point-max))))
        (set-buffer buf)
        (kill-buffer face2html4text-buffer-name)
        (kill-buffer face2html-buffer-name)
        (insert s))))

lisp 関数の引数として渡すため、ダブルクォーテーションが文字列に含まれているときは、あらかじめエスケープしなくてはなりません。という、ちょっとした制限があるものの、<span> タグに埋もれることもないし、何より都度手動変換を行わなくても済むので、かなり楽ちんになりました。

# mode をうまく渡す方法があれば、<face2html> タグを作りたいところです。attribute って受け取ってくれるのかな? まぁ、でも使うのって、lisp-mode の他にはせいぜい sql-mode ぐらいなので、それぞれにタグを作っちゃってもいいかな、と思ってます。


2003-12-27

emacs-wiki

ほとんど何も変えてないのですが、Hn に色がつくように (Emacs の方で)、Face を変更しました。


  (defun emacs-wiki-make-faces ()
    (mapc (lambda (newsym)
            (let (num)
              (setq num newsym)
              (setq newsym 
                    (intern (concat "emacs-wiki-header-"
                                    (int-to-string num))))
              (cond
               ((< emacs-major-version 21)
                (copy-face 'default newsym))
               (t
                (eval `(defface ,newsym
                         '((t (:height ,(1+ (* 0.1 (- 5 num)))
                               :inherit variable-pitch
                               :weight bold
                               :foreground "lime green")))
                         "emacs-wiki header face"
                         :group 'emacs-wiki-highlight))))))
          '(1 2 3 4)))


2003-12-26

How to use Trigger in SQL Server

まずは、こんな感じのテーブルを作ります。


  CREATE TABLE [dbo].[User] (
      [UserID] [char] (10) NOT NULL ,
      [UserName] [varchar] (50) NOT NULL 
  ) ON [PRIMARY]

  CREATE TABLE [dbo].[Target] (
      [ID] [int] IDENTITY (1, 1) NOT NULL ,
      [Value] [nvarchar] (50) NULL ,
      [UserID] [char] (10) NOT NULL 
  ) ON [PRIMARY]

  CREATE TABLE [dbo].[Log] (
      [ID] [int] IDENTITY (1, 1) NOT NULL ,
      [UserID] [char] (10) NOT NULL ,
      [Time] [datetime] NOT NULL 
  ) ON [PRIMARY]

Target テーブルにデータが追加されたり更新されたときに、Log テーブルに書き込むためのトリガを仕込みます。


  ALTER  TRIGGER LoggingTriger ON [dbo].[Target] 
  FOR INSERT, UPDATE 
  AS

  IF UPDATE([Value])
  BEGIN
      INSERT INTO [Log] select UserID, GetDate() from inserted
  END

このとき、ポイントになるのが inserted と deleted という論理テーブルです。それぞれ、新しいレコードと古いレコードが格納されており、上記の例で言えば、


  SELECT [Value] FROM deleted

で古い行の Value 列の値が取得でき、


  SELECT [Value] FROM inserted

で新しい行の Value 列の値が取得できます。FOR/AFTER UPDATE を指定していても、同じ値で更新されたとき (更新されたかどうかを判定して SQL を組み立てる、なんて面倒なことはせず、値が同じであろうが更新しますよね。普通) に引っかかってしまいます。なので、上記の方法でそれぞれの値を取得し、比較して異なるときだけログを吐き出す、なんてことができるようになります。

Debian GNU/Linux for Virtual PC 2004

apt-spy、便利です。


2003-12-25

Book Review

BookReview を更新しました。今回の本は「禅とオートバイ修理技術」です。何気に、「萌え萌えうにっくす!」も読み始めているのですが、同じようなこと (主題ではないものの重要ポイントのひとつ) が書かれているのには、うーん。どう反応してよいのやら。


2003-12-24

Favicon.ico

Internet Explorer でお気に入りに追加したときに表示されるアイコン、favicon.ico を置いてみました。が、自分の環境で試すとうまく動いていません。アドレスを D&D したときはちゃんと表示されるので、Internet Explorer の問題かと思われまする。

その後、しばらく置いておいたらいつの間にか更新されました。Windows XP のパフォーマンスチューニング関係で、この辺の再描画をサボる設定にしているのが原因のようです。よくわかりませんけど。


2003-12-22

Debian GNU/Linux Install for Virtual PC 2004

ネットワークカードが自動認識されないので、tulip を選択する。チップは「Intel 21140 Based PCI Fast Ethernet Adapter」らしい (Windows XP をインストールして確認)。

※ うーむ。bf2.4 では tulip が選べない...。

ビデオカードは「S3 Trio 32/64」らしい。デフォルトでは含まれていないようなので、後でとってくることにします。とりあえず、インストーラ時点では「vesa」にしておきました。インストール後に、↓でインストール。

  
  # apt-get install xserver-s3


2003-12-20

The Books of the Day

コンピュータ科学者がめったに語らないこと」を読み始めました。あ。「文芸的プログラミング」はどうしたっけか...。引越しのゴタゴタで無くしてしまった模様。

Tips for Visual Basic

名前を元にフォームを開くという小技 for Visual Basic .NET。もっと簡単な方法があったような気がしないでもないですが。

久しぶりに <vb-source> タグを使ったら、例外が発生して動かなくなってしまったので焦りました。.NET セキュリティの調査で、パーミッションを厳しくしていたのをすっかり忘れていたのが原因...。


  Imports System.Runtime.Remoting

  Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs _
  ) Handles Button1.Click

    Dim objectHandle As ObjectHandle
    Dim f As Form

    objectHandle = _
      Activator.CreateInstance( _
        Nothing, _
        Me.GetType().Namespace & "." & "Form2")
    f = objectHandle.Unwrap

    f.Show()
  End Sub


2003-12-19

emacs-wiki for Amazon Associates

ハイライトされないのはさびしいので、ハイライトもできるようにしました。ただそれだけ。生成される HTML には変更ありません。事前に適当に emacs-wiki-amazon-face を定義しておきます。うーむ。何かカーソルの動きが変 (<amazon> タグでのところで足踏みする感じ) だけど、とりあえずよしとしておくか。


  (defun emacs-wiki-amazon-tag (beg end highlight-p)
    (if highlight-p
        (when (looking-at ".+</amazon>")
            (progn (add-text-properties
                    beg (+ beg 8) 
                    '(invisible t intangible t))
                   (add-text-properties
                    (+ beg 8) (- end 9) 
                    '(face emacs-wiki-amazon-face))
                   (add-text-properties
                    (- end 9) end 
                    '(invisible t intangible t))))
  ;;  (if highlight-p
  ;;      (goto-char end)
      (progn 
        (use-unicode)
        (let ((s (buffer-substring beg end)))
              (delete-region beg end)
              (insert (concat 
                       "<a href=\"http://www.amazon.co.jp/"
                       "exec/obidos/external-search?tag="
                       emacs-wiki-amazon-associate-tag
                       "&keyword="
                       (urlencode s)
                       "\">"
                       s
                       "</a>"))))))

BookReview

Amazon Associates 承認記念! というわけで、書評 のページを作りました。かなり役に立たないと思われます。大体、書評なんてものは非常に主観的なものですし。その人がどう思うか、ってだけですね。


2003-12-18

Support by 3rd. Party

トランスコスモス、個人向けに「Windows 98」の単独サポートを継続 という記事がありました。Microsoft がサポートを打ち切ったものを他の企業がサポートする。さて、サポートってビジネスとして成り立つんでしょうか。

The Books of the Day

クリティカルチェーン―なぜ、プロジェクトは予定どおりに進まないのか?」は、「ザ・ゴール―企業の究極の目的とは何か」などで知られる、エリヤフ・ゴールドラットの最新作です。この人の本は小説仕立てでとても読みやすいのが特徴ですが、述べられている考え方が実際に使えるのかは不明です。少なくとも、ちょっとした開発チーム (課などの単位) でできることじゃありませんし。

当初は経営的側面が強い本だったのですが、最近どんどんソフトウェア開発よりに近づいてきています。まだ読んでませんけど、今回もその色を強くしているのでしょうか。

Next step for developer

ソフトウェアの開発って仕事は、いわゆる「つぶしが利く」ものなのでしょうか。以前はあんまりそうは思ってなかったので、開発者が次のステップとして選べるのは、

  • 技術営業
  • 管理者
  • ライター
  • 生涯開発者

ぐらいかと思ってました。これまでのお仕事人生のほとんどを開発者として過ごしてきて、「システム管理者」という仕事に転職したわけですが、今まで思っていたことが大きな間違いだと気づきました。

開発者って、結構つぶしが利くもんです、はい。エンドユーザコンピューティング (EUC) という言葉が流行ったのはしばらく前ですが、やっぱりエンドユーザにデータを操作してもらうのは難しいです。特に、それなりに正規化されているデータベースのデータというものは。そこで、元開発者の出番というわけです。クエリアナライザでもチョチョっと使ってデータを引き出し、Excel で加工っと。業務を遂行する上で必要となる、いろんな分析データを作成することができる、というわけです。

他にも、システムのちょっとした加工やら SI 屋さんとの折衝、 PC、ネットワーク関連の運用管理などなど、開発者としての経験が活かせるってもんです。社員数 30 〜 50 人位の会社の社長さん、ひとりぐらい専任の管理者兼開発者兼ネットワークエンジニア兼サポートエンジニア兼雑用な人をやとってみてはいかがでしょう。十分にペイできると思いますよ。


2003-12-17

Amazon Associates

今回は無事承認されたようです。さて、書評のページでも作りますか...。

Cause and Effect

「原因と結果」ということで、ソフトウェア関連の仕事をしていると、よくこの言葉について考えるようになります。「ここに出てくる金額が 100 円足らないのは何故だろう?」、おそらく、何かの原因があるのでしょう。

このように、物事を見るときについつい「原因」を探ってしまうというわけで。ただ、この考え方は対ソフトウェア、対ハードウェアでは問題ないのですが、こと対人間となると、非常に危険な側面を持っています。ま、考えすぎはよくない、ってことですね。


2003-12-16

a half year

気づいたら、何気に半年も続いてます、この形式。やっぱり、ちょこちょこ更新できて手がかからないのでいい感じですね。とりあえず、目的も何もありませんが、のんびり更新していければいいや、と思ってます。

emacs-wiki for Amazon Associates

日付が変わってた...。続きですが、こんな感じのとっても簡単なコードです。難しいところは全然なし、ということで。変数 emacs-wiki-amazon-associate-tag には、当然自分用の Assocites タグを入れておきます。


  (defun emacs-wiki-amazon-tag (beg end highlight-p)
    (if highlight-p
        (goto-char end)
      (progn 
        (let ((s (buffer-substring beg end)))
          (delete-region beg end)
          (insert (concat "<a href=\"http://www.amazon.co.jp/"
                          "exec/obidos/external-search?tag="
                          emacs-wiki-amazon-associate-tag
                          "&keyword="
                          (urlencode s)
                          "\">"
                          s
                          "</a>"))))))

うーん。このやり方だと、リダイレクトされて本のページに飛んだときに Associate Tag が URL に含まれないのね。大丈夫なのかなぁ。


2003-12-15

emacs-wiki for Amazon Associates

Amazon Associates 用の修正をしてみました。ようするに、「<amazon>ほげほげ</amazon>」 という感じにタグを入れてあげると、自動的に Amazon Associates 用のリンクが生成できる、ってものです。ちなみに、こんな感じ。「ほげほげ」 ← わはは、適当にサンプルのつもりで試したのに、なんか出てきた。

サーチリンクを利用しているので、検索結果に合致していればその本のみが出てきますし、こんなの「Windows XP」でやれば、わさわさ出てきます。ASIN コードや ISBN をいちいち調べなくてもよいので、結構便利かも。

URL エンコードに関しては、taiyaki.org にあった urlcode.el をそのまま使わせてもらってます。utf-8 でエンコードしなくちゃいけないので、時間のかかる un-define をしなくちゃならない、ってのが難点かなぁ。

#忘れてたけど、まだ承認されてなかったんだ。実は、このサイトを立ち上げた当初に一度申請して、断られました。まだ、サイトの中身が何にもなかったので。今回は大丈夫ですよね。たぶん。

Book

あれはもう十年以上前だったでしょうか。変な本に目覚めつつあったときに、「哲学的人類史」という本があることを知りました。今のところ未訳。キリスト教関係の本に、一部だけ翻訳されていたりしました。

元がフランス語だけに原書を読むわけにもいかず、どうしたものかと思っていたり思っていなかったりしたのですが、ふと思い立って、英語版を探してみることに。Amazon.com に行っていろいろ探し回ったりしたのですが、これがなかなか見つからない。著者名の「アントワーヌ・ファーブル・ドリヴェ (Antoine Fabre D'Olivet)」で検索しても出てこないし。

で、まぁ、いろいろやってるうちに、英語版のタイトルが「Hermeneutic Interpretation of the Origin of the Social State of Man and of the Adamic Race」であることを見つけ出し (ちなみに原題は「L'histoire philosophique du genre humain」)、ようやく注文することができたというわけです。

期待していた本だけに、楽しみ楽しみ。そうそう、もう一冊楽しみにしていた本、「禅とオートバイ修理技術」は今日届きました。25周年記念の英語版を流し読みしたんですが、やっぱり日本語でじっくり読みたいですよね。ぅんぅん。


2003-12-11

Yukon information

rdesktop

リモートデスクトップクライアント "rdesktop" を導入

参考サイト http://www9.ocn.ne.jp/~pcvolu/pcnet/dbianpage15.htm

  • http://www.rdesktop.org/ から 1.3.0 をダウンロード
  • ./configure
  • このとき libssl-dev がないと怒られたので、apt-get install libssl-dev でインストール
  • make install
  • デフォルトじゃ動かなかったので、-4 を指定して起動
  • おぉ。すげー。

 


2003-12-09

RAID on Note PC

「デスクトップ代替」というのなら、やっぱりこのぐらいはやってほしいところですな。Fujitsu 製でなければ (つーか、IBM 製なら)欲しいところなんですけど。


2003-12-04

ThinkPad X40

が、かなり食指が動かない内容となっております。なんと言っても、1GHz では...。今の X31、1.4GHz でときたま重さを感じるぐらいなので、ちょっと厳しすぎます。これで、次期購入計画は T41 にシフトされました。ふぅ。


2003-12-02

Software Engineer

納得できる部分もあれば、納得できない部分もあるのは当然のことで、とりあえず、「思考を言語化できない人は、技術者としての適性に欠ける」って辺りに強く共感。文系的な要素が求められるってことですな。