読者です 読者をやめる 読者になる 読者になる

どこかのだれかへ

職業ゲームプログラマ。気になったニュースのピックアップや開発日記などを書いています。

中途半端に引き継いでしまったので

仕事の話。

とある人のタスクがあふれちゃったので、終わりかけのタスク(でもバグがある)を1つを引き継いだんだけど、プログラムって書くより読む方が時間かかるし、理解するのに苦労する。

複雑だが大きなコードでもない、時間も無い、そもそもバグがあると明言されていたコードなので、怪しそうなところをがっつり書き直した。

書き直したことで相手の仕事の一部を無かったことにしている感じで、ちょっと申し訳ない気持ちになった。

でもそっちの方が早いし確実だからしょうがない。

プルダウンリストの項目を検索選択するためのBookmarklet

でかいプロジェクトでRedmine使っていると人が多くてプルダウンで担当者を設定するのが探すのが大変。 IEだと日本語でも検索出来るけど、Chromeじゃそうはいかない。

そんな時に見つけたbookmarket。

htmlのセレクト要素をインクリメンタルサーチする bookmarklet - #侍ズム

javascript:(function (){var q=String.fromCharCode(39);var s=document.getElementsByTagName('SELECT');for(var i=0;i<s.length;i++){ var a = document.createElement('div');s[i].parentNode.insertBefore(a,s[i].nextSibling);a.innerHTML='<input onkeyup="var s=document.getElementsByTagName('+q+'SELECT'+q+')['+i+'];if(!s.a){var original=s.options;s.a=new Array(original.length);for(var i=0;i<s.a.length;i++){s.a[i]=s.options.item(i);}}s.length=0;for(var i=0;i<s.a.length;i++){if(-1!=(s.a[i].text).toLowerCase().indexOf(this.value)){s[s.length]=s.a[i];}}if(this.value.length==0){s.a=null};">';}})()

これをブックマークとして保存しておいて、必要な時に実行すればプルダウンメニューの下に検索窓が出来る。 超便利、素晴らしい。

vimのvimfilesディレクトリをgithubで管理

会社でもVimを使いたいけど環境持っていくのが面倒でやっていなかった。
やっと重い腰を上げgithubでvimfiles(.vim)を管理するようにして会社でも同じVim環境で使えるようにしてみた。

GitHub - Tepp91/vimfiles

ついでにNeoBundleからdein.vimにしたり。というか最初からvimrcを書き直してみた(まだまだ未完)

面倒に感じていた理由はNeoBundleのプラグイン管理がgitで行われているので、git submoduleにする必要があった。
ただgit submoduleは使ったことがなかったのでちょっと億劫だった。

vim scriptはほとんど理解していないが、もうちょいいろいろ書く予定。
vimrcの読書会とかも参考に読んどくといいかも。
vimrc読書会

積みゲー

ゲームをやる時間がなくて、まったく進まないのにどんどんやりたいゲームが出てくる。

FF15は最終章まで一気にやったけどここでレベル上げの作業が必要になってから勢いがなくなってしまった。
キングダムハーツシリーズとか終わる気がしない。
ゲーム開発のほうもしたいし、少しずつでも進めていかないと・・・・・・

alignによるアライメントの変化で思ってたsizeofと違う結果になった

事の発端

頂点データを設定したが、うまく描画されず調べてみるとVertex構造体のサイズが思ってたのと違う!

struct Vertex{
    Vector4 pos;
    Vector2 uv;
};

std::cout << sizeof(Vector4) << std::endl; // 16
std::cout << sizeof(Vector2) << std::endl; // 8
std::cout << sizeof(Vertex) << std::endl;  // 32

Vector4とVector2の合わせて24byteのつもりでデータを設定していたので頂点を1個進めるごとに8byteずれていってしまう。4byteアライメントと考えても24byteならなんの問題もないはず。一体なぜ。

原因

実は、Vector4はメンバ変数として__m128を使用しており、__m128は16byteアライン*1で定義されている。 どうやらこれによってVector4を持つクラス・構造体も16アライメントになるようで、結果24byteではなく、16の倍数である32byteになったようだ。

ちなみに、さらにこのVertex構造体をHogeクラスで持つと、やはりHogeクラスも16byteアライメントになった。

*1:メモリを16byte境界で確保する

WPFのListViewでダブルクリックでコマンドを実行する

サンプルを作成したのでGitHubにアップした。

GitHub - Tepp91/WPFSampleCollection
にあるListViewDoubleClickがそれだ。

当初、ListViewのOnDoubleClickイベントを使おうとしたが、大まかうまくいくもののListViewのヘッダー部分でもダブルクリックに反応してしまっていた。

また、トリガーなどを利用する方法もあったが、イベントでダブルクリックされたアイテムのインスタンスを取得したかったので、今回はダブルクリックでコマンドを実行する添付ベハイビアを作成することで解決した

今回嵌まったポイントしては、以下のコードだ

ListViemItemにはListViewのDataContextを見に行ってくれないため、RelativeSourceを使用することで直接見に行くようにしている。これに気付くのにずいぶん時間がかかった。

ちなみに今回はダブルクリックで対応したが、もちろん単純なクリックでも紐付けるイベントを変えれば可能だし、また添付ビヘイビアなのでListView意外にも利用することが可能なので、汎用性が高くなっている。

Visual Studioの外部ツールからVimを起動する際の引数

--servername $(ProjectFileName) --remote-silent +$(CurLine) $(ItemPath)