2012年5月31日木曜日

ある構造体typeのメンバ変数memberのサイズを取得するマクロ


マクロ

#define MEMBER_SIZE_OF(type, member) sizeof(((type*)0)->member)

使用例

#define MEMBER_SIZE_OF(type, member) sizeof(((type*)0)->member

struct TestType
{
    int val;
};
Uint32 valSize = MEMBER_SIZE_OF(TestType,val); // valのサイズ取得



sizeof内の式は実際には評価されないので、NULL参照とかにはなりません。

2012年5月25日金曜日

UTF8+BOM付きのファイルを右クリック新規作成で作れるようにする

基本的に、andoroid、iPhone、Windowsでソースコードを共有したいので、
cppとhファイルの文字コードはUTF8にしています。


しかし、右クリック → [新規作成] → [テキスト ドキュメント]で作成した[新しいテキスト ドキュメント.txt]をテキストエディタで開くと、大体SJISで開かれてSJISで日本語書き込まれるでしょう。
そうなると、SJISとUTF8のソースコードが混在してしまうのでよろしくありません。


なので、今回はBOM付き+UTF8のhファイルを作れるようにします。



テンプレートファイルの作成


まず、新規作成の時にテンプレートとなる、UTF8 + BOM付きのファイルを用意します。

仮に「template.h」というファイル名をつけておきます。

このファイルを、以下のアドレスのフォルダにコピー

C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Templates

注) このフォルダは隠しフォルダなので、隠しフォルダの表示設定をしておいてください。( [コントロールパネル]-[フォルダーオプション]-[表示]で設定可能


レジスタファイルの設定

レジストリエディタを開きます。










1. スタートメニューを押す










2. regeeditと入力















3. レジストリエディタ起動




4. 左ペインから.hの項目を見つけて右クリック→[新規]→[キー]で名前をShellNewにする













5. ShellNewできた
















6. ShellNewを右クリック→[新規]→[文字列値]で名前をFileNameにする。FileNameをダブルクリックしてデータの値に「template.h」を入力












7 完了

まとめ














右クリック-[新規作成]-[C++ Header.h]が追加されていると思います。
[C++ Header.h]をクリックすると、template.hと同じ内容のhファイルができます。

これで無事右クリック新規作成で、UTF8+BOM付きのヘッダーファイルをすぐに作成できるようになりましたー。めでたしめでたし。

2012年5月13日日曜日

人を別のサービスから自分のサービスに乗り換えさせる戦略

その唯一の方法は、「障害を取り除くこと」 by Joel on Software

ここでは、コンピュータのソフトウェアという前提で話すけど

これは非常に納得した。

乗り換える上での障害を取り除くこと、大事。それはつまり、ユーザーの声に耳を傾けていることでもあるしね。


・ 金銭的障害
→ 乗り換えコストが高いと、それを使おうとは思わないだろう

・ 乗り換える前にできたことが、乗り換え後にできなくなる
→ 例えばエディタだと、コード補完機能とか色付けとかね

・ プラットフォームの乗り換えが必要
→ 自分がAndroid端末を使ってて、そのサービスがiPhone端末でしかできません、と言われたらわざわざそこまでしないだろう

・ 乗り換える前のデータが、乗り換え後に使えなくなる
→ 以前のデータが無駄にしたくはないだろう。だから、Blogやメーラーだと、インポート機能とエクスポート機能がついてたりしてるよね。

・ 新しいユーザーインタフェースについて学ぶ必要がある
→ 乗り換え前のユーザーインタフェースのオプションがあるといいかも(XSIには、Mayaの操作方法で操作できるオプションがある)

・ 要求スペックが高い
→ 低スペックでも動けるように

・ 元に戻ることがしにくい
→ 一度乗り換えると元には戻れないよ、だと慎重に判断するようになって、気楽には乗り換えてくれないだろう

最後の「元に戻ることがしにくい」というのは、見落としがちな気がした。「出て行く」ことを後押ししているわけではなくて、入り口の敷居を下げること大事。 

 「出て行きやすい」は「入りやすい」でもあるよね。

ジョエルテスト備忘録

とあるゲームプログラマーの場合

1. ソース管理しているか?
→ うちではPerforce使ってます。

2. 1オペレーションでビルドを行えるか?
→ VisualStudio優秀

3. デイリービルドを行っているか?
→ Jenkins優秀

4. バグトラッキングデータベースを持っているか?
→ Mantis使ってるけど、満足はしていない

5. 新しいコードを書くまえにバグを修正するか?
 → やっぱ適度には必要ですよね


6. 更新可能なスケジュール表を持っているか?
 → Excelで管理しているけど、何か良いツールで管理したいと思ってる


7. 仕様書を持っているか?
 → それは当然


8. プログラマは静かな労働環境にあるか?
 → うちだとゲームだから、どうしても議論は必要だけど「誰にも話しかけられない静寂タイム」があっても良いよね


9. 買える範囲で一番良い開発ツールを使っているか?
 → Perforce、Coverity、VisualAssistXとか買ってもらってます。


10. テスト担当者はいるか?
 → チェックチームだけじゃなくて、部内にも数名います。重宝してます。


11. プログラマを採用するときにコードを書かせるか?
 → これは分からないす


12. 「廊下での使い勝手テスト」を行っているか?
 → ゲームでもこれは必要だと思う。