[buy][book] C magazine 2005年4月号 / [buy][book]UNIX USER 2005年4月号

C magazine 2005年4月号

「επιστημηのオブジェクト工房」の優先順位つきキューの記事を読むこと。

UNIX USER 2005年4月号

最終更新時刻: 2008年10月13日

Wake On Lan / WiX - Windows Installer XML Toolset / tDiary 2.0.1を入れた

Wake On Lan

Wake up On Lan toolを使ってX31からデスクトップマシンを起こしてリモートデスクトップで管理する。便利。

wol

tDiary 2.0.1を入れた

ここで使っているtDiaryをtDiary 2.0.0からtDiary 2.0.1にバージョンアップした。

トラックバックが使えるようになった。

最終更新時刻: 2008年11月03日

配列のサイズを求めるinline関数 / レジストリの差分をとる

配列のサイズを求めるinline関数

http://www.tietew.jp/cppll/archive/8996

template<class T>
inline const unsigned int numof(const T& array) {
    return sizeof(array)/sizeof(array[0]);
}

前にもメモったかも。

最終更新時刻: 2007年11月24日

Windows XPインストール / Windows デスクトップ製品のライフサイクル / xyzzyに関連付けている拡張子 / iniファイル入出力クラス / SaGe4 / 役に立たないシステム / URLメモ / VC++でビルド前にメタデータからソース生成 / CSVから任意のデータ形式に変換するバッチファイル / メモリが安い / 最新のパソコンが欲しい / Windows Script / WSHのバージョン

Windows XPインストール

職場のPCのOSをWindows2000からWindowsXPへアップグレード。

Windows2000でも困りはしないんだけどやっぱりXPがいい。

何がいいのか考えてみた。

  • ClearTypeが使える
  • 起動が早い
  • スライドショーが何気に便利
  • スタートメニューの「よく使用するアプリ」は結構使う
  • タスクトレイの「アクティブでないインジケータを隠す」で作業領域が増える。
  • 後から作られたもののほうがいい。(発売直後とか新しすぎるのは考え物だけど)

どれも決定的ではないんだけど、やっぱり「新しいから」というか「古いのは嫌」だからかな。

Windows2000は時期が中途半端だったからNT4.0ほど枯れてるわけでもないし、それどころかサポートもうすぐ切れるんじゃなかったっけ(うろ覚え)?逆にXPは新しいと言ってもSP2まで出て、今度出るらしいIE7はWinXP SP2以降しか対応しないとかなんとか。

Windows デスクトップ製品のライフサイクル

http://www.microsoft.com/japan/windows/lifecycle/default.asp

xyzzyに関連付けている拡張子

言語系

  • cpp
  • c
  • h
  • php
  • rb

設定/テキストファイル系

  • ini
  • log
  • txt
  • htaccess
  • conf

iniファイル入出力クラス

中身見てないけどとりあえずメモ。

http://d.hatena.ne.jp/exel/20050307#1110158756

SaGe4

http://www.doblog.com/weblog/myblog/4913/1110899#1110899より

PCサロン板でおこなわれているゲーム製作スレです。ソースも公開されています。

((<SaGe4開発公式Wiki |URL:http://f44.aaa.livedoor.jp/~sagadev/saga4wiki/pukiwiki.php?FrontPage>))

役に立たないシステム

IT Pro - 8割が役に立たないシステムを経験,「目的が不明確」「トップがダメ」「使い手を無視」が理由

ユーザの声が切実。

まずは幹部の意思不統一と無理解。システムは魔法ではないのに,過剰な期待をかける割に費用や時間は削られる一方。 短期開発を求められる割に,経営層の意向がコロコロ変わり,要件を絞れないまま納期順守のみを言明される。

まだこういう状況になったことがないけど、もしそういう状況で働くときは多少の発言権は持っていたいな。そういう現場のとき作業マンだと辛そう。

VC++でビルド前にメタデータからソース生成

VC++でメタデータからソースを生成し、その後コンパイル/リンクを実行したい。

今回はCSVから構造体定義が書いてあるヘッダファイルを生成した後コンパイルしたい。

「ビルド後の処理」「リンク前の処理」では遅すぎるので調べてみたところ、「カスタムビルド」がそれにあたるらしい。こういうのMakefileになるとどう書くんだろう。そのうちMakefileも書けるようにならないといけないな。

直接は関係ないけど調べてるうちに見つけたページ

VC++ でlex & yacc を使う

CSVから任意のデータ形式に変換するバッチファイル

CSVから構造体に変換するためにバッチファイルないし実行ファイルが必要なんだけど、実行ファイルを配布するのは無駄だしperl等のインタプリタがプロジェクトメンバー全員の環境に入っているとも限らない。(というか入ってない)

誰の環境にも大概入っているインタプリタっていうとVBSとかWSHになるのかな?JScriptでもよさそう。どれも使ったことないので要調査。

それにしてもvbsっていうとウイルスしか思い浮かばないな…、制限きつそうだけどローカルのファイルとか作れるんだろうか。(ローカルで実行するんだから作れるんだろうけど)

でも一応調べるけど、これ多分やらない。現実逃避気味に考えてるだけ。

一応調べたメモ

当たり前だけど構文はVBっぽい。StdOutとかあるのでファイル入出力もできそう。これまた当たり前だけど。

つまりvbsでCSVから構造体に変換するスクリプト書いて、それをカスタムビルドで実行すれば、今回の要件は満たせそう。やるかどうかは別として。

メモリが安い

512MBのメモリが安い。どうしよう、必要ないけど買っとくべきか。

用途

  • メインのデスクトップの増設用
  • 余ってるパーツを組み合わせて一台作る時のメモリ(メモリは余ってない)
  • Webサーバの増強

とか。メインのデスクトップは現在PC3200の512MB(Samsung製)が一本挿さっているのみ。デュアルチャンネルにもなるし512MBをもう一本挿すのはいいかも。相性があるからもし買うならちょっと高めのSamsung製。

余ってるパーツは、今のところもう一台は必要ないんだけど今安いならメモリ確保しておいてもいいかな。

Webサーバ用途にも別に必要ないし。それにできればECC-registeredなメモリがいいんだけど(嘘)。

まずは安いノーブランド購入してみて、メインのデスクトップに挿す。もし相性が合わなければWebサーバに挿す。で、もう一本Samsung製を買う。というのが堅実且つ贅沢な作戦だな。

最新のパソコンが欲しい

たまに使いもしないのに最新のPCが欲しくなる時期がある。今がその時期。

そもそもの発端は先日、買うものリストを消化するために静音電源を探して店を回ってたとき。

静音を実現するためには電源だけでなくケースから考える必要があることに今さら気づく。で、ケースを見てみると星野金属製のケースがかっこいい。今の電源はあまりこだわらずに買ったのでかっこ悪い。

で、さらに見てまわってみるとGatewayのマシンを発見。こいつはフォームファクタが今までのATXではなくBTXを採用している。背面ファンが大きくかなり静かそう。そもそもBTX自体がエアフローを考慮して設計されているので静音化も実現しやすくなっているらしい。(でもGatewayのマシンはかっこ悪いから買わない)

64ビットのPentium4も出たことだしチップセットもIntel8xx系からIntel9xxになってるし、今がパソコン買い替え時なのでは?

Windows Script

さっき「インタプリタっていうとVBSとかWSHになるのかな?JScriptでもよさそう」って書いたけど間違い。

WSHは特定の言語のインタプリタを指す用語ではなかったらしい。

http://www.atmarkit.co.jp/fwin2k/operation/wsh01/wsh01_02.html

によると

WSHをひと言でいえば、「スクリプト言語を利用して、COMオブジェクトを含むさまざまなWindows機能の制御を可能にするスクリプト実行環境」ということになるだろう。

さらに

WSHでは、スクリプト言語として、VBライクな言語であるVBScriptや、JavaScriptライクなJScriptを標準で利用できる。しかしサードパーティ製品を買い求めれば、Perl言語を使ってWSHスクリプトを作成することも可能だ。つまりWSHは特定の言語処理系に依存したものではない。

というわけで検索キーワードは「vbs,js,VB Script,JScript」でなく「WSH,Windows Script Host」で良さそう。

WSHのバージョン

最近のWindowsなら大概インストールされているWSH。でも最初から導入されているバージョンに違いがあるので調べてみた。

Windowsのバージョンと、インストールされているIEによってもバージョンが違う。

なんでWSHのバージョンが2.0から5.6にいきなりアップしているのか?

http://www.microsoft.com/japan/msdn/columns/scripting/scripting11132000.aspに書いてあったんだけど

WSH のバージョンが 1 回のリリースで 2.0 から 5.6 にいきなり上がったことを不思議に思っている方も多いと思います。実際には、WSH の初期のバージョンは 5.0 だったのです。しかし、私たちは通常それを WSH 1 と呼んでいました。私たちは、WSH の開発を続行して、それを WSH 2.0 と呼びました。残念ながら、私たちは既存の WSH のインストールをアップグレードするつもりはなかったので、実際にそれを WSH 2.0 とは呼べないことがわかっていました。しかし、現実には 5.1 だったにも関わらず、私たちはバージョン 2.0 と呼び続けてしまいました。これが多くの人を混乱させたことは当然のことです。そのため、このリリースではバージョンの番号付けを合理的にし、実際には何が WSH を構成しているかについての混乱を取り除くことを決断しました。その結果、Visual BasicR Scripting Edition (VBScript)、JScript などに合わせてバージョン番号を 5.6 まで飛ばすことにしました。

何が言いたいのかよくわからん。

WSH2.0については同じくMicrosoftのサイトから

http://www.microsoft.com/japan/msdn/columns/scripting/scripting061499.asp

が参考になった。

最終更新時刻: 2008年07月17日

Windowsのデバッグツールとか / メモリ周りのデバッグ

Windowsのデバッグツールとか

http://messiah-annex.at.webry.info/200503/article_7.html

メモリ周りのデバッグ

メモリが枯渇してエラーが出るためボトルネックとなる処理を探す。

机上でチェックした後、タスクマネージャのコミットチャージを眺めつつ様子を見る。

ついでにC++関連のURLメモ

最終更新時刻: 2009年01月20日

32-bit Windowsの場合、ユーザプロセスが利用可能な最大メモリは2GB?

もともとはPhotoshopに割り当てられる最大メモリが2GBだったことから、ひょっとしてOS(Windows)の制限か?と思って調べてみた。

結果、やっぱり32-bit Windowsの場合はユーザプロセスに割り当てられるメモリは最大2GB弱であるらしい。

ただし、「4GT RAM Tuning」を設定することでユーザプロセスに3GB、カーネルに1GBという割り当ても可能。

最終更新時刻: 2008年11月05日

JScript勉強中 / illustrator で javascript / 大仏

JScript勉強中

まずはhello,worldから、と思って

print("Hello World!");

と書いて実行したら

エラー: オブジェクトを指定してください

と怒られてしまった。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jscript7/html/jsconhelloworldinjscript.asp

通りにやったんだけど。何(オブジェクト)に対してprintするのかはっきりしろということか。コマンドラインなんだから標準出力に対して出力してくれればいいのに。

イメージ的にはこんな感じ?

stdout.print("Hello World!");

HTMLだとこんな風だし

document.write("Hello World!");

結局これでできた

WScript.Echo("Hello World!");

ところでJScriptはコンパイルしてexeにすることができるらしい。コンパイラのjsc.exeは再配布版の.NET Frameworkにも含まれるらしいので後で試す。

大仏

20050408_0

最終更新時刻: 2009年02月06日


メモリ購入 / メインデスクトップの電源としてENERMAX Noisetakerが欲しい / [buy]IBM トラックポイント・キャップ(ソフト・ドーム)10個入り / メモリ増で快適 / [buy]財布

メモリ購入

ノーブランドのメモリを2枚購入。

1枚はThinkPad X31用にSODIMM 512MB(PC2700)。2枚目はメインのデスクトップ用にDDR SDRAM 512MB(PC3200/CL2.5)。

きっかけは今日、ThinkPadのタスクマネージャを見てみたら使用メモリ(コミットチャージの合計)が480MBになってたから。起動していたアプリケーションはIEが10個程度にRSSリーダーのMiech、それにエディタ等。いつも通り、むしろPhotoshopやらVisualStudioが起動していない分軽めの使用方法。物理メモリは標準の256MB+ノーブランドの128MBで384MBしかないため、スワップが発生している。

そんなこんなで128MBと256MBを差し替えて512MBにしても、すぐに頭打ちになりそうだったため512MBを購入して128MBと差し替え。標準の256MBと合わせて768MBとなった。

メモリが増えて休止状態になるためにメモリ退避の時間が長くなると思ったら、そんなに変わらなかった。

デスクトップは512MB(確かSamsung製)が1枚刺さっているのみ。相性が心配だったがこちらも購入したノーブランドの512MBが認識して1GBとなった。

メインデスクトップの電源としてENERMAX Noisetakerが欲しい

http://www.maxpoint.co.jp/egsfma_42V2.htm

メインのデスクトップの電源ファンがうるさいので某掲示板の自作板で評判のいいENERMAX Noisetakerを購入予定。三洋電器

今のデスクトップはファンレスのグラボにCeleron 2.8GBだから420Wタイプ(EG425P-VE SFMA(SY) V2.0(24P))で十分。ただそれだと、今後64ビットのPen4で使うとなると厳しいらしい。485Wタイプ(EG495P-VE SFMA(SY) V2.0(24P))にしようかな。

IBM トラックポイント・キャップ(ソフト・ドーム)10個入り

Lenovo トラックポイント・キャップ(ソフト・ドーム)(10個入り) [73P1948]

2年間使ってきたこのキャップはイボイボがなくなってつるつるになっているため購入。

メモリ増で快適

メモリ増設でThinkPadが軽くなった。やっぱり384MBと768MBだと全然違う。やっぱり384MBだと普通に使ってるだけでも微妙にスワップが発生していたんだろう。

財布

何年も使うものだからと思って、特に予算を決めずに財布を見てまわった。dunhillかTUMIの財布がかっこよかったのだけど、最終的にはブランド物ではないが、小銭を出し入れしやすくカードが多く入る財布を購入。

何年も使うものだからこそ、やっぱりブランドや値段でなく使いやすいものがいい。財布以外にも凝るべき小物はあるしね。腕時計もちょっと欲しくなった。

それにしてもあちこち探し回ったおかげで新しい発見が多くて収穫大。TUMIのバッグは今すぐにではないけどビジネス用に欲しいかも。

最終更新時刻: 2008年11月06日

[programming] JScript勉強中 / [programming]Excelオブジェクトモデル / Gmail使ってみたい / mixi使ってみたい / Gmail登録完了! / [programming]Visual C++のビルドの順番 / [programming]JavaScript(JScript)スクリプト面白い

JScript勉強中

シンプルなサンプル。

http://www.hawk.34sp.com/stdpls/dwsh/edittext.html#acount5

コマンドライン引数や標準出力/入力/エラー出力はWScriptを通して行う。

http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_03.html

JScriptのリファレンス

http://www.microsoft.com/japan/msdn/library/ja/script56/html/js56jsmthsplit.asp

ファイル入出力はActiveXObjectを利用する。

http://www.microsoft.com/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

変数名/関数名はJavaの標準的なコーディング規約に従う。

// 変数名は小文字
var aaaa;
// 関数(メソッド)名は先頭小文字で単語の区切りでは大文字
function getFoo()

Gmail使ってみたい

最近Ajax(エイジャックス)の実用例として紹介されることが多いGmail。使ってみたいんだけど残念ながらアカウント持ってないので、もしこの日記見てる人でGmailにinviteしてやってもいいって人がいたらメールください〜。

hajime at mylab.jpまで。

追記:ありがたいことに早速Gmailに招待していただけそうです。

さらに追記:hbさんからGmailのInvateメールキター!無事登録できました。

mixi使ってみたい

くれくれ日記みたいになってますけどmixiにも招待してほすぃです。ごくまれにmixiからリンク貼られてるみたいなので。

追記:無事招待してもらいました。

Gmail登録完了!

hbさんから招待してもらって無事Gmailに登録完了。

帰ってから遊び倒す予定。

Visual C++のビルドの順番

http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_asug_customizing_a_build_process.asp

  1. ビルド前のイベント。
  2. 各ファイルに対するカスタム ビルド ステップ。
  3. プロキシ ジェネレータ。
  4. MIDL。
  5. リソース コンパイラ。
  6. C/C++ コンパイラ。
  7. リンク前の イベント。
  8. リンカまたはライブラリアン。
  9. BSCMake。
  10. プロジェクトに対するカスタム ビルド ステップ。
  11. Web 配置ツール。Web 配置ツールは、リンカ ツールまたはライブラリアン ツールが実行される場合だけ、ビルドの一部として実行されます。ただし、[ビルド] メニューから Web 配置ツールを実行することもできます。
  12. ビルド後のイベント

JavaScript(JScript)スクリプト面白い

こないだのCSVからヘッダー(構造体)を作るスクリプトを作成中。

あんまりECMAから外れるような機能は使わずにECMA Script+WScriptオブジェクトみたいな感じでカキカキ。構造体定義をXML形式で持たせて…とか余計な妄想をしつつ(そんなことはしない)、素直に変換成功。

最終更新時刻: 2008年10月30日

mixiに招待してもらいました! / PowerToys for Windows XP / ThinkPad+燃料電池

mixiに招待してもらいました!

Gmailに続いてmixiにも招待してもらいました!Thanks。

PowerToys for Windows XP

CUI作ってるときはあると便利なOpen Command Window Hereをインストール

http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx

最終更新時刻: 2008年10月27日

rhs, lhs / 変数名を考えるときに役に立ちそうなページ

rhs, lhs

http://frog.raindrop.jp/knowledge/archives/000224.html

これはright-hand side、すなわち「右辺値」を意味する慣例的な識別子であるらしい。

変数名を考えるときに役に立ちそうなページ

最終更新時刻: 2008年10月17日



AdobeとMacromediaが合併 / JScriptは大体使えるようになった / RSSが壊れていた

AdobeとMacromediaが合併

サイト制作をAdobe PhotoshopとMacromedia Dreamweaverに依存してる自分としてはうれしい限り。

Adobe

JScriptは大体使えるようになった

まだ構文を一通り理解しただけだけど、軽いツールを書く/読む分には困らない。他のECMA互換スクリプト言語(ActionScriptとか)も多分使えるはず。

新しい言語を習得して感動を覚えるのは、自分で書いたソースが動いたとき。それから、今まで読めなかった(もしくは読む気も無かった)他の人のソースの意味が理解できたとき。

「読める!!読めるぞ!!」by ムスカ(ラピュタ)

こんな感じ。

RSSが壊れていた

drryさんのツッコミのおかげで、このサイトのRSSがinvalidになっていたことに気づいた。

20040216#c02

原因はコメントSPAMで、内容はURLが列挙されていた。詳しく調査せずに消してしまった(手動で)が、パッと見そのコメントにだけCR(キャリッジリターン)が入っていたのが気になる。他はLFのみで統一されているので、それも関係しているのかも。

最終更新時刻: 2008年11月07日

[MFC] CMap / クラス テンプレートからの継承 / CMapEx

CMap

なんでコピーコンストラクタだけじゃなくコピーメソッドまで用意されてないんだゴルァ。

しょうがないからループして要素をコピー。面倒だ。車輪の再開発になるけど自分で簡易な連想配列のテンプレート作るか検討。

それか、CMapみたいなテンプレートクラスから派生できるのなら、そのほうが手軽。

STLPortのhash_mapとか使いたい…。

クラス テンプレートからの継承

MSDN - Dr.GUI、テンプレートを語る

CMapEx

((<CodeGuru:Enhanced collection template classes: CArrayEx, CMapEx and CSortedArray |URL:http://www.codeguru.com/Cpp/Cpp/cpp_mfc/collections/article.php/c889/>))

CMapから継承してて、コピーコンストラクタやらoperator=が定義されてるっぽい。

最終更新時刻: 2008年11月24日

WinMergeについて

今日WinMergeを使ってディレクトリ間のファイルの差異を調べたときに思ったこと。

  • 比較結果をテキストでエキスポートできない
  • 仕方なく比較結果をクリップボードにコピーしようと思ったらやたら時間がかかる(たかだか3万件程度なのに数分かかる)

比較結果を書き出せないのは機能がないからだとして、下のは何とかならないものだろうか。

現象としてはまず全選択するためにCtrl+Aすると時間がかかる。(ステータスバーに○件選択中です、と出る) 次に、コピーするためにCtrl+Cするとウインドウが応答しなくなってしまう。

コードを見ていないが、もしかして1ラインごとにクリップボードのバッファを拡張してるんじゃなかろうか。極端な話、毎ラインCStringにAddしてるとか。

もしそうだとしたら、先に全ライン走査して必要なバッファサイズを求めてからバッファを確保すれば解決できそう。

選択のほうもちょっと遅すぎる気がする。

コード見るより他のツール使ったほうが早いな。

追記:

ビンゴ。やっぱりCStringにAddしてた。DirView.cppのCDirView::OnEditCopy()から呼ばれるCDirView::GenerateReport()が該当箇所。

最終更新時刻: 2008年11月12日

switch-case構文でbreakを省略するとき / WiXでインストーラを開発している製品 / cygwinのdiffコマンドでディレクトリを比較すると1024ファイル目までしか比較されない

switch-case構文でbreakを省略するとき

使ったほうがスマートに書ける場合もあると思うけど、できれば使わずに済ませたい。

でも使うならば最低コメントには書いてほしいと思う。別にlint対策とかじゃなくて。

switch(expression)
{
case 0: /* FALLTHRU */
case 1:
  ...
case 2:
  ...
  ...
  /* FALLTHRU */
default:
  ...
  break;
}

みたいに。でも2番目のはコメントあっても間違えそう。

WiXでインストーラを開発している製品

http://www.ailight.jp/blog/sha256/archive/2005/03/22/5213.aspx

  • MSN Toolbar Suite 2.0 (MSN Desktop Search)
  • Virtual PC 2004 SP1
  • Virtual Server 2005
  • BizTalk
  • SQL Server 2005
  • Visual Studio 2005
  • MySQL 4.1

後、TortoiseSVNもWiXを採用している。

cygwinのdiffコマンドでディレクトリを比較すると1024ファイル目までしか比較されない

cygwinでインストールしたdiffコマンドで下記コマンドを実行したところ、1024ファイル目までしか比較されなかった。要調査。

diff -s a:\dir1 b:\dir2

1024っていうのがありがちすぎて、何の最大値を超えたのかわかりづらい。

最終更新時刻: 2008年05月07日