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

どこかのだれかへ

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

ボトルネックが…違う!

仕事で少しの間暇だったので、「じゃあこの軽いタスクをやってよ」と言われて別担当の人のタスクを実装したのだけど、どうにも気持ちカクつく気がする。

これは参ったなと思いつつ、今日は当初の予定よりももう少し広くコードを見たところ、問題箇所っぽいのを発見。これは解消せねばと当初の予定より加筆するハメになり、色々試行錯誤するもあと一歩届かず1日使っても、問題が解決しない(なんというかやるべき事は分かっているけど良い感じにコードが書けない)。

ゴールが見えず気弱になり、しょうがないから、とりあえずこれをいったんコミットして落ちつこう、とコードを整理して戻して、定時前によし最後の確認だと動きを実機で確認して色々操作してて、気付いた。 当初、Aの状態になっているなら常に重いはずだが、Aの状態では重くならず、そこからさらにBの状態になって初めて重くなると言うことに。さらに時間経過とともに徐々にカクツキがひどくなる。

当初の思ってた所ならこんな挙動をするわけがない。心あたりがあったので調べてみたら、案の定その原因は自分が加筆した部分、作りの問題じゃなくて単純なバグが原因だった。

結局、定時のあとも残業して修正してカクツキは解消。今日の1日はなんだったのかという悲壮感よりも、ゴールの見えてないかった修正をする必要がない(したほうがベターだが)という安堵感が大きかった。

そして結果、実は自分のミスなのに他人が書いたコードを問題視していたことになり、自分が恥ずかなり、もっと頑張らねばと思った今日の1日。

今日見たクソース

// ...を確認する
bool CheckHoge();
bool TestHoge();

bool CheckHoge()
{
    // 略
}

bool TestHoge()
{
    // 略
}

同じようなやつが2つ合って違いが分かりづらかった。

PlayStation VR、9月24日に予約再開

いつもならメルマガのほうが早いのに、今回は4gamerで知った。
発売日まではこれが最後みたい。

過去2回の時は、当日なぜか忘れていたと言う教訓から、既にOutlookで予定を入れて1日前にアラームを設定しておいた。これで大丈夫なはず!

「人喰いの大鷲トリコ」発売日延期

2016年10月25日 → 2016年12月6日

FF15も11月末に延期したし、忙しくなりそう。

VirtualizingPanelを実装するにあたり

現在、2Dレイアウトツールのメインである、レイアウト機能を作成中(まだまだ先は長い)。IScrollInfoは「IScrollInfoの実装するにあたり - どこかのだれかへ」を読んで、スクロールすることは出来たので、いよいよ本丸のVirtualingPanelの実装に入る。参考にするのは以下の通り。

Implementing a virtualized panel in WPF (Avalon) – Dan Crevier's Blog
Implementing a VirtualizingPanel part 2: IItemContainerGenerator – Dan Crevier's Blog
Implementing a VirtualizingPanel part 3: MeasureCore – Dan Crevier's Blog
Implementing a VirtualizingPanel part 4: the goods! – Dan Crevier's Blog

Virtualized WPF Canvas – WPF Performance and .NET Framework Client Profile
こっちは動くコードがある。

思っていたほど悪くないコードだと気付いた。

先ほどまで「これはマジで止めて欲しいコード!」っていうのを書いてて、その理由を説明するために色々検証したんだけど、以外とそこまで悪くなかったという結果になったため、記事を破棄。どうやら完全に食わず嫌いだったようだ。

ちなみにコーディングスタイルの話だった。

IScrollInfoの実装するにあたり

発端はVirtualizingPanelのための実装で、IScrollInfoの実装が必要になったため。

IScrollInfoは、ScrollViewerで論理スクロールを行うためのインターフェースで、Scrollさせたいコントロールが継承して実装する。既存のコントロールではStackPanelなどが実装している。

IScrollInfoの実装において最も問題になるのは、その情報のなさ。MSDNにも対した実装方法は書いておらず、かといって単純にインターフェースを実装しただけではもともに動かないという厄介なやつだ。実装方法に関してググってみると最終的には以下のブログ記事に行き着くため、備忘録として記載する。

IScrollInfo in Avalon part I
IScrollInfo in Avalon part II
IScrollInfo in Avalon part III
IScrollInfo tutorial part IV