WDKでデバイスドライバ開発を行っていて、おそらく誰もが不便に感じることは、
ビルドが基本的にはコマンドラインからしかできず、しかも、そのコマンドライン環境はスタートメニューのBuild Environmentから選択しなくてはいけないこと。
これだけなら、ショートカット作ればまあいいやですむのだけれど、問題はその先で、
コマンドラインで、ビルドするためのフォルダに移動しなきゃいけない。
かなり面倒くさい。
このBuild Environment用のスクリプトsetenv.batは第一引数にWDKのホームディレクトリを指定しなくてはいけなくて、しかもスタートのディレクトリをそのディレクトリにするようなスクリプトになっている。
エクスプローラから、今開発しているプロジェクトのフォルダを見て、右クリックからそのフォルダをスタートとして、Build Environmentを使えるようにしたい。
というわけで、setenv.batを改造して作りました。
mysetenv.batというバッチファイルで、これは/DIRオプションを取ることができて、スタートフォルダをその指定されたフォルダにします。
mysetenv C:\WDK\Version x86 chk w2k /DIR D:\MyProject
こんな感じで使います。 /DIRの位置はどこでもかまいません。
さて、こうしたところで、エクスプローラから簡単にその位置でBuild Environmentを開けるわけじゃないので、さらにここでお気に入りツールLopeSoftのFileMenu Toolsを使います。これを使ってフォルダの右クリックメニューにコマンドを追加。コマンドプロパティで
Programを C:\WINDOWS\system32\cmd.exe
Argumentsを /k C:\WinDDK\6001.18002\bin\mysetenv.bat C:\WinDDK\6001.18002\ chk x86 W2K /DIR %FILENAMES%
というような感じで指定します。
これでそのフォルダでW2K Checkedビルド用環境が立ち上がります。
後はそこでbuildコマンドをたたけばいいだけ。うーん、すてきだ。
buildまで一気にやってしまうオプションをさらに用意して、それも右クリックメニューに追加しておいてもいいかもしれない。
setenv.bat
Bloggerはファイルを添付できないってことを今知りました。しょうがないのでGoogle Docで共有です。ファイルはtextなので、拡張子をbatに変更してください。
My Daily Programming Life...
Google Desktopのショートカット
GoogleデスクトップはCtrlを2回押すとサーチボックスが出てくるのだけれど、そこでのショートカットを発見したのでメモ。
Web探したけど、一覧が載ってないような・・・。正式な機能じゃないのかな。
サーチボックスに文字を入れた状態で、
Ctrl + P : Google Map検索
Ctrl + D : Desktop検索
Ctrl + I : Image検索
Ctrl + N : News検索
Ctrl + U : Group検索
Ctrl + W : Web検索(Enterと同じ)
Ctrl + A : サーチボックス終了(Ctrl 2回と同じ)
Ctrl + H : Backspace
Ctrl + [ : 入力文字全消去(Escと同じ)
最後の二つはなんとなくviっぽい感じ。
Ctrl + P はかなりほしかったものなので、うれしい発見。
Web探したけど、一覧が載ってないような・・・。正式な機能じゃないのかな。
サーチボックスに文字を入れた状態で、
Ctrl + P : Google Map検索
Ctrl + D : Desktop検索
Ctrl + I : Image検索
Ctrl + N : News検索
Ctrl + U : Group検索
Ctrl + W : Web検索(Enterと同じ)
Ctrl + A : サーチボックス終了(Ctrl 2回と同じ)
Ctrl + H : Backspace
Ctrl + [ : 入力文字全消去(Escと同じ)
最後の二つはなんとなくviっぽい感じ。
Ctrl + P はかなりほしかったものなので、うれしい発見。
NICに二つのIPAアドレスを持たせる
Linuxで一つのNICに二つのIPアドレスを振りたいときIP Aliasというのが使える。
今192.168.1.10というアドレスがeth0に割り当てられているとして
/etc/sysconfig/network-scripts/のifcfg-eth0をifcfg-eth0:1という名前でコピーする。
そして、ifcfg-eth0:1というファイルの以下の該当部分をこんな風に変える。
DEVICE=eth0:1 # デバイス
IPADDR=192.168.1.11 # IPアドレス
これで、eth0:1というデバイスができて、それが192.168.1.11に割り当てられる。
あとは
ifdown eth0
ifup eth0
(再起動)
をするだけ。
Apacheのバーチャルホストとかやる場合にも使える。
僕はよく自分のテスト環境で利用している。
今192.168.1.10というアドレスがeth0に割り当てられているとして
/etc/sysconfig/network-scripts/のifcfg-eth0をifcfg-eth0:1という名前でコピーする。
そして、ifcfg-eth0:1というファイルの以下の該当部分をこんな風に変える。
DEVICE=eth0:1 # デバイス
IPADDR=192.168.1.11 # IPアドレス
これで、eth0:1というデバイスができて、それが192.168.1.11に割り当てられる。
あとは
ifdown eth0
ifup eth0
(再起動)
をするだけ。
Apacheのバーチャルホストとかやる場合にも使える。
僕はよく自分のテスト環境で利用している。
Windows Kernel
なんだかWindows Kernelのよさげな資料を発見
http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/index.html
東大ではこんな授業やってんのかぁ。いいなぁ。でもこれ4年ぐらい前の話だな。
今もやってるのかな。
http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/index.html
東大ではこんな授業やってんのかぁ。いいなぁ。でもこれ4年ぐらい前の話だな。
今もやってるのかな。
Google Desktopとアドレスバー
Google Desktopがなんとなく変な動きをしているっぽい。
エクスプローラでアドレスバーに直接アドレスを入れたい場合(たとえば\\192.168.1.2とか)がある。Google Desktopを起動した状態でそれをやると、一定時間ごとに入力文字がキャンセルされて今いるアドレスに表示が戻ってしまう。
いま「マイドキュメント」にいるとすると、エクスプローラのアドレスバーの表示は「マイドキュメント」になる。んで、それを消して\\192....と入力していくと、途中でパッと「マイドキュメント」に戻ってしまう。一瞬でアドレスを入力してEnter押せば大丈夫だけど、5秒に一回ぐらい、そういう風な処理が走っているらしく、うまくいかない。
Google Desktopを終了させると、その現象はなくなる。
いろいろ設定変更してみたりしたけど、うまくいかなかった。Google Desktopグループでも見つけられなかった。報告してみるかな・・・。
エクスプローラでアドレスバーに直接アドレスを入れたい場合(たとえば\\192.168.1.2とか)がある。Google Desktopを起動した状態でそれをやると、一定時間ごとに入力文字がキャンセルされて今いるアドレスに表示が戻ってしまう。
いま「マイドキュメント」にいるとすると、エクスプローラのアドレスバーの表示は「マイドキュメント」になる。んで、それを消して\\192....と入力していくと、途中でパッと「マイドキュメント」に戻ってしまう。一瞬でアドレスを入力してEnter押せば大丈夫だけど、5秒に一回ぐらい、そういう風な処理が走っているらしく、うまくいかない。
Google Desktopを終了させると、その現象はなくなる。
いろいろ設定変更してみたりしたけど、うまくいかなかった。Google Desktopグループでも見つけられなかった。報告してみるかな・・・。
マジック?
今一番知りたいことは、オブジェクト指向のよりよい設計はどのようにして考えられて、生まれるのかということ。何か基本原則というか、こういうときはこう作ればよいのようなものがあるのだろうか。デザインパターンとかそういうのはあるけど、本当にそれだけでは無理じゃないだろうか。
いまだに理解できないのはPoco(C++のライブラリ)の設計がどのようにして考えられたものなのかということ。僕にはマジックに見える。なんでこんなにうまくできてるんだ、と思えるところがいたるところにある。つまり、簡単に再利用できて、組み合わせることでどんどん新しい物が作れる。実際に目には見えるし(ソースは公開されているし)、何がどうなっているかもすべてわかる。でも"どのように"がわからない。
いつもプログラムを書くときに、どのように全体を組み立てるかを考えるけど、何をインターフェースとして、何を抽象クラスとして、そしてそれらの依存関係・・・と考えるけど、結局途中でなにかおかしくなる。
これでいいのだろうか。
Pocoのようにするには何を勉強すればいいんだろうか。単なる経験だろうか。それならそれでよいけど、なんとなくそうじゃない気がする。もっとなにかこういうことだ、ということがあってよいように思う。
いまだに理解できないのはPoco(C++のライブラリ)の設計がどのようにして考えられたものなのかということ。僕にはマジックに見える。なんでこんなにうまくできてるんだ、と思えるところがいたるところにある。つまり、簡単に再利用できて、組み合わせることでどんどん新しい物が作れる。実際に目には見えるし(ソースは公開されているし)、何がどうなっているかもすべてわかる。でも"どのように"がわからない。
いつもプログラムを書くときに、どのように全体を組み立てるかを考えるけど、何をインターフェースとして、何を抽象クラスとして、そしてそれらの依存関係・・・と考えるけど、結局途中でなにかおかしくなる。
これでいいのだろうか。
Pocoのようにするには何を勉強すればいいんだろうか。単なる経験だろうか。それならそれでよいけど、なんとなくそうじゃない気がする。もっとなにかこういうことだ、ということがあってよいように思う。
よく使いそうなrpmコマンド
- インストール
rpm -ihv test.rpm
- アップグレード
rpm -U test.rpm
- パッケージ情報の取得
rpm -q package-name
- インストール済みのパッケージ一覧表示
rpm -qa
- ある名前(部分一致でも)のパッケージがインストールされているか表示
rpm -qa | grep partial-name
- パッケージ情報を取得
rpm -qi package-name
(表示されればそんなパッケージがある)
- パッケージに属するファイル一覧
rpm -ql package-name
- あるファイルがどのパッケージに属するか表示
rpm -qf /path/to/file
rpm -ihv test.rpm
- アップグレード
rpm -U test.rpm
- パッケージ情報の取得
rpm -q package-name
- インストール済みのパッケージ一覧表示
rpm -qa
- ある名前(部分一致でも)のパッケージがインストールされているか表示
rpm -qa | grep partial-name
- パッケージ情報を取得
rpm -qi package-name
(表示されればそんなパッケージがある)
- パッケージに属するファイル一覧
rpm -ql package-name
- あるファイルがどのパッケージに属するか表示
rpm -qf /path/to/file
