2007年6月8日

「もしも」を想定する - コーディング編

もしもを想定する、の続き・・・というか書いていて思い出したことです。
もしもを想定することは、プログラムに結びつければisNullなどの値テストに相当する事だと思います。
その昔、学生だった頃にゲームを作っていたときに成績や操作設定をファイルに保存していました。いわゆるセーブデータです。
ファイルというのは、バイナリエディタで書き換えが出来ます。
セーブデータをいじられればチート(改造)になってしまいます・・・が、そんなことの対策まで学生の自分は対策できません。
大方、ゲーム設定の境界値を跨がないようにすることを入念にやっていました。
はっきりいってやりすぎです。
コーディング規約で「ポインタのテストは必ずすること」というルールがありました。
テストすることはいいのですが、システムが大きいため、数多くのレイヤで同じテストをします。
あるメンバが「意味があるのか? 読みにくいだけだ。タイムクリティカルなときには負荷にもなる」と言ったことからチーム全体で検討することになりました。
結論は「意義を判断できる人間がコードを書いた人だけ。怖いので外すのは止めよう」ということになりました。
とはいえ、isNullもやりすぎると読みにくくて煩雑です。
以上。思い出どころか、ここ最近まで問題になったネタでした。

「もしも」を想定する

Geekなぺーじ:エンジニアは下らない質問をする
「~はやったらダメ」といわれたら「なんで? なにが起きるの?」確認するのは技術屋肌なんですかね。
# 教えてくれなかったら自分で確認するし(w
自分は、もしもの場合に関するナレッジを抑えておくことは一種の安定指向だと思っています。
が、人によっては「失敗することを考えるから失敗するんだ」という理論でNGケース時の対応を考えない人もいます。
過去に、とにかく成功プランしか考えないえらい人がいました。
例によって、NG対応が皆無だったのでいろいろ突っ込んでみたら結果的に「失敗はありえないから黙ってろ」と一喝されたように覚えています。
自分の過去に遭ったことなので「ありえないはずの失敗が起きた」ぐらい書きたいのですが、顛末までは覚えていません。
ただ、その一喝に納得しなかったのでNGケースを考えることは止めてません。

2007年6月4日

Famicompo mini classical

週末目前の締め切りに「あんまりだ」との声があがった・・・かどうかは判りませんが、締め切りが延びてましたがこれに関しては気の長い自分からしたらクオリティアップするなら少しぐらい待つのは平気。
って事で楽曲公開&投票開始です。
ダウンロードは公式サイトからどうぞ。

# やっぱりとは思っていたけど「もってけ! セーラーふく」のエントリーも!! ったく誰だ。聞く前からワクテカじゃないか

2007年6月3日

WindowsXPで自分だけ強制的にクラシックスタイルになる(XPテーマハックもどき)

あるとき気づいたのですが、WindowsXPのコマンドプロンプト(cmd.exe)はLunaが有効でもクラシックスタイルのフレームで表示されます。
cmd.exeはその性質上、特殊な扱いでそういうものかと思っていました。
Vistaでは他のウィンドウと同じテーマが適用されていますが、XPのcmd.exeにLunaが適用できるかはわかりません。
ウィンドウの概観を凝った作りにしたい場合、テーマを無効にしたいケースが出て来ると思います。
Windows XP ビジュアル スタイルの使用
書いてあることそのままですが、SetWindowTheme APIでテーマの適用をカットすることが出来ます。
ちょっとした小ネタですが意外に便利です。

2007年6月2日

液晶モニタ導入に潜む罠、の巻

ローカルではずいぶん前から買う買う言っていた液晶モニタをようやく購入しました。
ここ一ヶ月、Webで値段をちょこちょこ確認していたのですが、今週突然現れたHyundai IT N220W
LG電子とかAcer(エイサー)の22インチが\36,000-持っていけばいいぐらいの値段だったんですが、それを大きく引き離して\33,000-で登場。
過去のモデルも悪評は無くまずまずの品っぽいです。
さて、いつになく早くに目がさめてそれと無い時間まですることが無くて困る。
# わくわくしてる
ふらっと買いに来ました、的な時間を見計らって大須へ。
ほかにも小物を買う気で来たので、それを先に買って最後にモニタ。
帰ってきて早速セッティング。
点けてみると、やっぱり広い。
奥行きが無いので狭いデスクでも正面における。これは素敵。
・・・と思ったら、突然画面が暗くなりそこに「信号なし」のメッセージ。
なんじゃこりゃ? と思い怪しそうな箇所を調べる・・・と言っても変わったのはモニタ。
ほかのハードは今まで安定稼動してきたものばかり。
原因が挙げられず、やったことを一通り書き出し、店に電話。
店員さんにアドバイスをもらってみるもやっぱりだめ。
アドバイスの通りやって駄目だったら初期不良の可能性があるので持ってきてくれればチェック、場合によっては交換します、との事だったので持っていく。
店のチェックマシンでは再現せず。二人そろって店の一角で渋い顔をして帰ってきました。
買ったモニタは、DVIが1ポート、VGAが2ポートある。
DVIだと現象が多発。VGAだと出ない。
使っているビデオカードはDVIとVGAとビデオ出力が各1ポートずつ。
DVIとVGAの両方にケーブルを挿していると稀に出ます。
DVIポートをもっと疑うべきだったかなー・・・と思いながら安定したVGA出力でWebを眺めていたらタスクトレイあたりにポップアップが。
"nvlddmkmが応答を停止しましたが、正常に回復しました。"
nv・・・nVidia関連?
って事で探したらありました。
KOMVOY.NET : nvlddmkm.sys の停止
ほかにも記事はありましたが、面倒くさいので検索結果をどうぞ。
nvlddmkm vista - Google 検索
端的に言ってしまえば、nVidiaのドライバによる不具合だそうで。
本日現在の最新ドライバでも直ってません。ウチで出たんで(w
ちなみに、この不具合で落ちると多くの人は例外で青バック、と報告してます。
ウチでは何も映らなかったです(w
とりあえず、VGA出力で安定してるのでそれで当分いきます。
DVIもなんとなく使ってみたかっただけなので画質とかにはあまりこだわってないので平気・・・平気だよ。
それを除けば買ったモニタはいいものでした。マ・クベの壷ぐらい(w

いろんな人と触れること

むかし、SourceForgeのDreamCast開発ツールプロジェクトに一度だけコードを取り込んでもらったことがあります。
成果はいただく割に貢献したことがほとんどないオープンソースコミュニティに関する記事を見つけました。
Geekなぺーじ:オープンソースコミュニティ運営方法

これを読んでぎくりとしました。
ソースとなるビデオは見ていません(ヒアリングできない、仕事場では回線の独占になる・・・これは言い訳ですね)が、要約に紹介されているケースは見かけたこともあるし、自分にも当てはまっていた(過去形にしたい)ものもあります。
給料をいただいているいわゆる仕事のプロジェクトチームでも毒を見てきたし、毒になったこともあります。
おとなしくしすぎても毒になってしまいます。
これから自分が教えないといけない後輩たちには、正しいことを教えないといけません。
ただ、正解はひとつではないので、言葉にこだわってはいけない。
相手の言葉を自分の中で置き換えること、たまには自分の言葉で言ってみること。
バランスよく協調することが自分のためになること。
自分の考えは理論ではなくて経験則(持論)なので、いつも説得力に欠けます。うまいこと伝えられないかなぁ。

2007年6月1日

国際化対応に関する設定をいじってみて思ったこと

やってる人にとっては当たり前。知らない人にとっては超面倒。
実装だって遠回りの力技になってしまう機能ってたくさんあります。
そのうちのひとつ、国際対応について。
GMAN: Windows XP Japanese Input
WindowsXPのコントロールパネルには'地域と言語のオプション'(Regional and Language Options)という設定があります。
ここでは地域ごと表記の代わる項目である、カレンダ、時刻、通貨の書式設定が出来ます。
'2006年11月17日'を'11/17/2006'としたり、\59,800-のカンマ(千と百の間の区切り)を外したり出来ます。
# 何の日で何の値段かは・・・ね、いいじゃない(w
また、時刻の表記は9時以前であった場合、'9:23'のように一桁になっているのが初期状態ですが、これを'09:23'のようにゼロパティング(ゼロで補間する)ことが出来ます。
実はこの書式に出来ないかとずっと悩んでました。
# エクスプローラの列表示が左寄せなので端が揃わなくてカッコ悪いなとずっと思ってた(w
'地域と言語のオプション'には、このような書式設定以外にもコードページが非ユニコードであった場合、どこの国の言語とみなすかを設定できます。
この設定を駆使すれば、英語版Windowsでも日本語アプリを文字化けなく表示が出来ます。
このような地域に依存する設定を'ロケール'と呼び、Windowsでは上述のような地域(言語)別の対応を'National Language Support'(NLS)という機能で実現しています。
NLS機能に関わるAPIをNLSAPIと呼び、GetLocaleInfoなどはそれに属する関数になります。
NLSを利用することで、アプリが独自で言語設定を保持しなくていい、という設計が可能になります。
# もちろんしてもかまわないのですが
また、選択されているロケールに応じて表示するメッセージを切り替えることが出来ます。
例として、日本語ロケールが使える場合は日本語表示。それ以外の場合は、アスキーコードのみの英語表示。
海外で現地OSを使っている外国人(日本人も含みます)向けのニッチなフォローですが、出来たら出来たで便利だと思います。

・・・あと、これを書いていて思ったのですが、ソフトウェアの世界では英語を公用語にしたほうが都合がいいですね。
いまさらながらちょっと寂しい気もします(w