2005-04-04(Mon) [長年日記]
_ 配列のサイズを求める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]);
}
前にもメモったかも。
2005-04-05(Tue) [長年日記]
_ 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
_ 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割が役に立たないシステムを経験,「目的が不明確」「トップがダメ」「使い手を無視」が理由
ユーザの声が切実。
まずは幹部の意思不統一と無理解。システムは魔法ではないのに,過剰な期待をかける割に費用や時間は削られる一方。 短期開発を求められる割に,経営層の意向がコロコロ変わり,要件を絞れないまま納期順守のみを言明される。
まだこういう状況になったことがないけど、もしそういう状況で働くときは多少の発言権は持っていたいな。そういう現場のとき作業マンだと辛そう。
_ URLメモ
_ VC++でビルド前にメタデータからソース生成
VC++でメタデータからソースを生成し、その後コンパイル/リンクを実行したい。
今回はCSVから構造体定義が書いてあるヘッダファイルを生成した後コンパイルしたい。
「ビルド後の処理」「リンク前の処理」では遅すぎるので調べてみたところ、「カスタムビルド」がそれにあたるらしい。こういうのMakefileになるとどう書くんだろう。そのうちMakefileも書けるようにならないといけないな。
直接は関係ないけど調べてるうちに見つけたページ
_ 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
が参考になった。
2005-04-06(Wed) [長年日記]
_ Windowsのデバッグツールとか
_ メモリ周りのデバッグ
メモリが枯渇してエラーが出るためボトルネックとなる処理を探す。
机上でチェックした後、タスクマネージャのコミットチャージを眺めつつ様子を見る。
ついでにC++関連のURLメモ
2005-04-07(Thu) [長年日記]
_ 32-bit Windowsの場合、ユーザプロセスが利用可能な最大メモリは2GB?
もともとはPhotoshopに割り当てられる最大メモリが2GBだったことから、ひょっとしてOS(Windows)の制限か?と思って調べてみた。
結果、やっぱり32-bit Windowsの場合はユーザプロセスに割り当てられるメモリは最大2GB弱であるらしい。
ただし、「4GT RAM Tuning」を設定することでユーザプロセスに3GB、カーネルに1GBという割り当ても可能。
2005-04-08(Fri) [長年日記]
_ JScript勉強中
まずはhello,worldから、と思って
print("Hello World!");
と書いて実行したら
エラー: オブジェクトを指定してください
と怒られてしまった。
通りにやったんだけど。何(オブジェクト)に対してprintするのかはっきりしろということか。コマンドラインなんだから標準出力に対して出力してくれればいいのに。
イメージ的にはこんな感じ?
stdout.print("Hello World!");
HTMLだとこんな風だし
document.write("Hello World!");
結局これでできた
WScript.Echo("Hello World!");
ところでJScriptはコンパイルしてexeにすることができるらしい。コンパイラのjsc.exeは再配布版の.NET Frameworkにも含まれるらしいので後で試す。
_ illustrator で javascript
_ 大仏
2005-04-10(Sun) [長年日記]
_ メモリ購入
ノーブランドのメモリを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))にしようかな。
_ [buy]IBM トラックポイント・キャップ(ソフト・ドーム)10個入り
Lenovo トラックポイント・キャップ(ソフト・ドーム)(10個入り) [73P1948]
2年間使ってきたこのキャップはイボイボがなくなってつるつるになっているため購入。
_ メモリ増で快適
メモリ増設でThinkPadが軽くなった。やっぱり384MBと768MBだと全然違う。やっぱり384MBだと普通に使ってるだけでも微妙にスワップが発生していたんだろう。
2005-04-11(Mon) [長年日記]
_ [programming]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()
_ [programming]Excelオブジェクトモデル
_ Gmail使ってみたい
最近Ajax(エイジャックス)の実用例として紹介されることが多いGmail。使ってみたいんだけど残念ながらアカウント持ってないので、もしこの日記見てる人でGmailにinviteしてやってもいいって人がいたらメールください〜。
hajime at mylab.jpまで。
追記:ありがたいことに早速Gmailに招待していただけそうです。
さらに追記:hbさんからGmailのInvateメールキター!無事登録できました。
_ [programming]Visual C++のビルドの順番
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_asug_customizing_a_build_process.asp
- ビルド前のイベント。
- 各ファイルに対するカスタム ビルド ステップ。
- プロキシ ジェネレータ。
- MIDL。
- リソース コンパイラ。
- C/C++ コンパイラ。
- リンク前の イベント。
- リンカまたはライブラリアン。
- BSCMake。
- プロジェクトに対するカスタム ビルド ステップ。
- Web 配置ツール。Web 配置ツールは、リンカ ツールまたはライブラリアン ツールが実行される場合だけ、ビルドの一部として実行されます。ただし、[ビルド] メニューから Web 配置ツールを実行することもできます。
- ビルド後のイベント
_ [programming]JavaScript(JScript)スクリプト面白い
こないだのCSVからヘッダー(構造体)を作るスクリプトを作成中。
あんまりECMAから外れるような機能は使わずにECMA Script+WScriptオブジェクトみたいな感じでカキカキ。構造体定義をXML形式で持たせて…とか余計な妄想をしつつ(そんなことはしない)、素直に変換成功。
2005-04-12(Tue) [長年日記]
_ mixiに招待してもらいました!
Gmailに続いてmixiにも招待してもらいました!Thanks。
_ PowerToys for Windows XP
CUI作ってるときはあると便利なOpen Command Window Hereをインストール
http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx
_ ThinkPad+燃料電池
2005-04-14(Thu) [長年日記]
_ rhs, lhs
http://frog.raindrop.jp/knowledge/archives/000224.html
これはright-hand side、すなわち「右辺値」を意味する慣例的な識別子であるらしい。
2005-04-18(Mon) [長年日記]
_ JScriptは大体使えるようになった
まだ構文を一通り理解しただけだけど、軽いツールを書く/読む分には困らない。他のECMA互換スクリプト言語(ActionScriptとか)も多分使えるはず。
新しい言語を習得して感動を覚えるのは、自分で書いたソースが動いたとき。それから、今まで読めなかった(もしくは読む気も無かった)他の人のソースの意味が理解できたとき。
「読める!!読めるぞ!!」by ムスカ(ラピュタ)
こんな感じ。
_ RSSが壊れていた
drryさんのツッコミのおかげで、このサイトのRSSがinvalidになっていたことに気づいた。
原因はコメントSPAMで、内容はURLが列挙されていた。詳しく調査せずに消してしまった(手動で)が、パッと見そのコメントにだけCR(キャリッジリターン)が入っていたのが気になる。他はLFのみで統一されているので、それも関係しているのかも。
2005-04-19(Tue) [長年日記]
_ [MFC]CMap
なんでコピーコンストラクタだけじゃなくコピーメソッドまで用意されてないんだゴルァ。
しょうがないからループして要素をコピー。面倒だ。車輪の再開発になるけど自分で簡易な連想配列のテンプレート作るか検討。
それか、CMapみたいなテンプレートクラスから派生できるのなら、そのほうが手軽。
STLPortのhash_mapとか使いたい…。
_ クラス テンプレートからの継承
_ 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=が定義されてるっぽい。
2005-04-26(Tue) [長年日記]
_ WinMergeについて
今日WinMergeを使ってディレクトリ間のファイルの差異を調べたときに思ったこと。
- 比較結果をテキストでエキスポートできない
- 仕方なく比較結果をクリップボードにコピーしようと思ったらやたら時間がかかる(たかだか3万件程度なのに数分かかる)
比較結果を書き出せないのは機能がないからだとして、下のは何とかならないものだろうか。
現象としてはまず全選択するためにCtrl+Aすると時間がかかる。(ステータスバーに○件選択中です、と出る) 次に、コピーするためにCtrl+Cするとウインドウが応答しなくなってしまう。
コードを見ていないが、もしかして1ラインごとにクリップボードのバッファを拡張してるんじゃなかろうか。極端な話、毎ラインCStringにAddしてるとか。
もしそうだとしたら、先に全ライン走査して必要なバッファサイズを求めてからバッファを確保すれば解決できそう。
選択のほうもちょっと遅すぎる気がする。
コード見るより他のツール使ったほうが早いな。
追記:
ビンゴ。やっぱりCStringにAddしてた。DirView.cppのCDirView::OnEditCopy()から呼ばれるCDirView::GenerateReport()が該当箇所。
2005-04-27(Wed) [長年日記]
_ 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っていうのがありがちすぎて、何の最大値を超えたのかわかりづらい。



C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)(奥村 晴彦)
ソフトウェア開発技術者パーフェクトラーニング過去問題集〈平成17年度〉 (情報処理技術者試験)(加藤 昭/芦屋 広太)
ツッコミを含む