昔の最近の出来事(2017.05)

2017/05/31

遅めに帰着。

日付が変わった所でちょっとだけ鉄拳7。

2017/05/30

遅めに帰着。

あまりの眠さに急速停止。

2017/05/29

遅めに帰着。

あまりの眠さに急速停止。

2017/05/28

AM中に起床。

掃除したり洗濯したり。

PS4の鉄拳7を予約購入してみたり。コンシューマ向けに割とすぐ出る かと思ってたのですが、意外と時間がかかった(AC稼働から2年と4ヵ月) 気も。因みに鉄拳6もAC稼働からPS3で出るまで2年弱かかったのですが、 PS3単独だったのがXobx360とのマルチプラットフォームになった事で 1年滑ったので、理由がまたちょっと違うかも知れません。

2017/05/27

起きたら午後もいい時間。寝過ぎ。

そういやTV録画でいつの間にか同じ番組をダブル録画している感じになってて なんでだ?という感じに。そういや同じ番組をW録画しようとする場合は どっちかキャンセルすれば良い気がするのですがそうなっていないの は何故だろう?と今更ながら思ったりも。

2017/05/26

遅めに帰着。

あまりの眠さに急速停止。

2017/05/25

遅めに帰着。

調べ事をして終了。

2017/05/24

遅めに帰着。

GDC 2017の Horizon Zero Dawn関連スライド。 ペイントソフトのようにフィールドをエディットするツールとか、 なんか色々とスゴイです。

2017/05/23

遅めに帰着。

Web巡回して終了。

2017/05/22

遅めに帰着。

あまりの眠さに急速停止。

2017/05/21

何故か起きたら午後もいい時間。寝るの遅くはなかったけどなぁ?

掃除したり洗濯したり。

gdc。ひとまずパッチを当ててのコンパイルテストは大丈夫そう。 コンパイル途中でICEずっこけがあるのと、core/sys/windows下の ファイルのコンパイルに失敗するのとがあるので、手放しでのビルド はできませんが、当面はアップデートについていけるかなと。

そういやx86_64-w64-mingw32ターゲットでリンク時に謎の時間がかかる問題が あったのですが、 大丈夫になっているような気が。 古いバージョンのコンパイラを今試してみてもやっぱり再現するので、 gdcのアップデートか、gccが7になったのか、その両方かが関係しているのかな? と思ったりも。てか、高々 いちアプリがシステムコールを実行したら 刺さる時と刺さらない時に分かれるのか理解はできませんが。

2017/05/20

AM中に起床。

gdc。他のターゲットでのビルドを試そうとしたのですが、何もしないと 自動生成されたMakefileを弄らなくてはならないので、元のMakefile.amで 対処してみたり。でも、autoconfのバージョンが合わない為かズッコケる ため、本来Makefile.amから自動生成されるMakefile.inを手で直すハメに。 面倒くせぇ。

以前、NAS-HDDを買ったのですが、 電源を操作する手間よりも音の方に慣れてしまったため、ずっと稼働してる 感じになってます。ちょっとファイルを置ければ良いくらいの感じで買ったので 色々できるっぽい事に着目していなかったのですが、フォルダの同期機能 というのがあるのに気づいたり。PCの任意のフォルダ内のファイルを NAS-HDD上のフォルダに自動で同期させるというものです。 本 へっぽこページの元ファイルは、他よりもバックアップ高めにCC2とかに コピーしているのですが、気づいた時に手動起動するのも面倒臭いのと、 常時稼働しているのなら自動同期を使うのが楽かもと思い試してみたり。 うん、いいかも。ただ、「誤った編集を少し前のバックアップから戻したい」という 目的では使えないので、定期的なバックアップは必要なのかも。

夕方に散髪に出かけたり。ビッグコミックオリジナルに 庵野秀明氏と細野不二彦氏の対談記事が載っていたのですが、 記事の内容よりも細野不二彦氏が1959年生まれ、庵野秀明氏が 1960年生まれの ほぼ同世代というのにそうなんだっけ?と思ったり。 ギャラリーフェイクを読んでいた当時は、漠然と年齢を重ねている ベテランの方だと思っていたので意外でした。

gdc。i686-pc-mingw32, i686-w64-mingw32, x86_64-w64-mingw32で 一通りビルドできる感じになったような。x86_64-w64-mingw32ターゲットで コンパイルできなくなっててあれぇ?だったのですが、一か所差分を取り込み 忘れてただけでした。ひとまずgcc-7.1ベースにパッチを作ってテスト中。

2017/05/19

遅めに帰着。

gdc。GCする条件のうちの一部を働かないようにしてズッコケを回避している のですが、手持ちコードで試している範囲ではメモリリークする感じには ならなかったり。ちょっとずつプロセスサイズが大きくなるコードはある のですが、それは前バージョンのgdcでも同じだったので、回避している コードの影響ではないのかも?とも。

2017/05/18

遅めに帰着。

ちょろっとWeb巡回して終了。

2017/05/17

遅めに帰着。

Web巡回して終了。

2017/05/16

遅めに帰着。

あまりの眠さに急速停止。

2017/05/15

遅めに帰着。

Web巡回して終了。

2017/05/14

昼頃起床。

gdc。interfaceで何故エラーになるのかやっぱり判らなかったり。 gdcがバグっているのか?

先週、Emacs25.2で美人時計が時々止まるように なった件。その後で使用しているdeferred が20150309.2052版と古かったのに気づき、20170331.1759ってのを入れてみてました。 その後、Windowsの再起動が入ったりとあまり長時間起動できてはいないのですが、 いつの間にか変になってる現象は起こっていません。結局原因は不明なままですが、 何かしら関係があったのかも。

2017/05/13

昼前起床。

gdc。ひとまずGCの問題は一旦置いといて、core.sys.windows.*下の 一部のコードがコンパイルエラーする原因を調べたり。
エラーの内容は 以下。

interface IOleUILinkContainerW : IUnknown
{
        HRESULT QueryInterface(REFIID, PVOID*);
        ULONG AddRef();
        ULONG Release();
        DWORD GetNextLink(DWORD dwLink);
        HRESULT SetLinkUpdateOptions(DWORD, DWORD);
        HRESULT GetLinkUpdateOptions(DWORD, PDWORD);
        HRESULT SetLinkSource(DWORD, LPWSTR, ULONG, PULONG, BOOL);
        HRESULT GetLinkSource(DWORD, LPWSTR*, PULONG, LPWSTR*, LPWSTR*, BOOL*, BOOL*);
        HRESULT OpenLinkSource(DWORD);
        HRESULT UpdateLink(DWORD, BOOL, BOOL);
        HRESULT CancelLink(DWORD);
}

に対して、
oledlg.d:473:1: error: interface win32.oledlg.IOleUILinkContainerW ambiguous virtual function AddRef
 interface IOleUILinkContainerW : IUnknown
 ^
以下多数
  :

という感じ。で、DMDの方を見てみるとcom.dというコードが 存在していて、その中に定義がされてそうだったので移植してみたり。 でも、そもそもcom.dをimportしている所がどこにも無くて 解決に至らず。DMDはこれでどうやって読み込んでる事になるんだ?という感じ。
TANE自身の使用に於いては、使わないのでコンパイルしないという選択で 良いと言えば良いのですが、コンパイルはしないがファイルはインストール しないといちいちズッコケる&手動で対応が必要というのが今の状況なので、 なんとかできないかなぁ?という感じ。

Pouetでメガデモ作品を見ていて、 ZX Spectrumというイギリスのホームコンピューターを知ったり。 Wikipediaによると、 最初のマシンは1982年4月の発売で、その後エンハンス版がいくつか出ている感じ みたい。日本だとNECのPC-6000が1981年11月、PC-6001mkIIが1983年7月、 ファミコンが1983年7月、MSX1とかと同じ世代です。
で、今でもメガデモとかで 作品が発表されている以外にも、CG作品や音楽作品が作られている というのを知ったり(ZX-Art)。 GraphicsのTop ratedってページを見てみると、デジタル8色で描かれて いるような感じなのですが、8x8ピクセル単位にパレットのブロックになっていて、 ブロック内では2色しか使えないようです。それを踏まえて見ると 確かに8x8単位の区切りが見えるのですが、逆に制約としてはかなり 厳しいにも関わらずこれだけ表現できるってどんだけ?!って感じに 思います。
前述ZX Spectrumのパレット構造で思ったのですが、 8x8毎に2色しか使えないと、例えばアニメ塗りのように線画がベースにあり、 色で塗り分けるような表現はかなり難しいと思います。 タイリングで2色を使って中間色を表現するような場合、線の黒(1色)を 境界線として8x8領域を二分し、それぞれの領域で2色使うと、理論上 5色(1+2+2色)使えないと塗り分けられないという事になります。 以前知った コモドール64の320x200のモードも同様に、グラフィックに パレット形式の制約縛りがあると、アニメ的な表現が極めて難しい ところから、線の無い絵柄の方がハードのスペックにマッチ していたのかなぁ?と思ったりも。

2017/05/12

遅めに帰着。

gdcのgcc-7.1.0対応ブランチのビルドを試したり。色々手を入れて ひとまずビルドに成功。そしてGCの問題の必要最低限のワークアラウンド を入れてテストしてみたところ、一つ前のではプロセスがうまく終了 できない場合があったのですが、同じ事をやってもちゃんと終了する ようになったり。実験で他にも色々入れていた古いバージョンへの 戻し対応が悪さをしていた可能性があったのかも。

2017/05/11

遅めに帰着。

あまりの眠さに急速停止。

2017/05/10

遅めに帰着。

あまりの眠さに急速停止。

2017/05/09

遅めに帰着。

Web巡回して終了。

2017/05/08

遅めに帰着。

Web巡回して終了。

2017/05/07

AM中に起床。

ぐうたら過ごして終了。社会復帰できるだろうか?(^^;

今日からUSB扇風機を稼働。

gdcがgcc-7.1.0対応された模様。今の所、大きな違いは無いみたい。

2017/05/06

昼前起床。

Emacs25.2にしてから美人時計が時々止まるようになったり。 ロックに使っている変数がロックしっぱなしになるのが原因なのですが、 何故ロックしっぱなしになるのかが判らず。どっかで値が化けている可能性が あるのですが契機が不明。後、ロックしっぱなしになるのをstop→start しても、何故か実際の時間の1分前の画像が表示されていたり。 画像はある時間のをhttpで取得しているものと思われるのですが、 データの実体はある時間の1分前のデータになっていたり。 どこかに1分前のデータを保持していなくてはこうはならないのですが、 むしろこんなややこしい事になるほうが難しくね?という感じ。

CG描いてみたり。時々CC2を使ってラクガキはしていたものの、 なんか塗りがうまくいかなくては放置するという感じでした。 未だにキャンバスサイズに対するテクスチャの拡大率調節の 要領が得られていない感じです(^^; でも、Web用に縮小すると 弱いテクスチャだと潰れてしまうくらいなので、強く出過ぎない ところで細かい事は気にしないくらいで良いのかも知れません。 そんな訳で表紙絵を更新してみました。

2017/05/05

昼頃起床。

gdc-7のGC調査。 少しずつコードを活かしたり殺したりしながら反応を見たり。 現在のところ sweep()内から実行されるrt_finalizeFromGC()という 関数を実行しないようにし、且つ recover()内のフリーリストを更新するコード(?) も実行しないようにすれば、試したコード内では メモリリークする事無くGCが動いている模様。ただ、長時間動かした後 に実行を止めると何故かCPUを使いっぱなしのままプロセスが無くならなかったり。 副作用があるのでこのまま使うのは無理げ。

2017/05/04

ゴミ捨てに一瞬起きて、寝て起きたら昼過ぎ。寝過ぎ。

gdc-7のGC調査。 GC内のステップ(prepare(), markALL(), sweep(), recover())のうち、 変数名等から察するにsweep()は大きなメモリブロックを、recover()は 小さなメモリブロックを回収するようなのですが、大きなメモリブロック を回収すると推測されるsweep()を実行しなければズッコケない事が 判ったり。

その後、テストコード中ではrecover()は実際に何もしていないようなので、 今の所問題無いという感じ。そんな訳でsweep()の中を観察。 classやstructだったりする場合にfinalizerを呼び、その後 開放関数を呼ぶという流れのようなのですが、finalizerを呼ぶとダメだったり、 開放関数を呼んでもダメだったりと、とにかく開放操作を行う事自体がダメ だったり。開放コードがバグってる疑いもあるのですが、開放して良いか否か を検査するmarkでそもそも間違えた印を付けている可能性も否定できず。 GCのバグかも知れないし、コンパイラのバグかも知れないし、 MinGWに特化したコードのバグかも知れないのですが、如何せん Segfaultするのが大分前に仕込まれた爆弾による為、直接破壊の原因が 絞り込めず。

更にその後。 gdbでfinalizeが必要なメモリブロックを調べてみたところ、なんか 開放しちゃダメなんじゃね?という気がしたり。そこで、 finalizeが必要なメモリブロック場合は開放せず、 finalizeが不要なメモリブロックに限り開放を実行するようなコード に書き換えてみたところ、Segfaultしない感じになったり。 ずっこけ条件がほんの少しだけ絞り込めた気も。

DConf 2017。Youtubeでライブ配信していたのでGCのデバッグを しながらBGV的に見ていたのですが、GCデバッグの方に意識が行き過ぎて 全然見れてません(^^;

2017/05/03

AM中に起床。

5/2付けでgcc-7.1.0がリリースされていました。

gdc-7の一番新しいっぽいのを使ってi686-pc-migw32ターゲットで クロスビルドをCygwinで行ってみたり。 gcc-6.3.0で突っかかった所に対するパッチは一通り必要そうでしたが、 libphobos/src/std/utf.dのビルドでICEズッコケとなったり。

make[2]: ディレクトリ '/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/i686-pc-mingw32/libphobos/src' に入
ります
/bin/sh ../libtool --tag=D   --mode=compile /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/./gcc/gdc -B/h
ome/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/./gcc/ -L/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c4
0aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/i686-pc-mingw32/winsup/mingw -L/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35
ef4f311a/build_i686-pc-mingw32/i686-pc-mingw32/winsup/w32api/lib -isystem /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.
1.0/winsup/mingw/include -isystem /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/winsup/w32api/include -B/usr/local/g
dc_2072_710_mingwcross/i686-pc-mingw32/bin/ -B/usr/local/gdc_2072_710_mingwcross/i686-pc-mingw32/lib/ -isystem /usr/local/gdc_2072_710_mingwcross/i686-pc-mingw32/inclu
de -isystem /usr/local/gdc_2072_710_mingwcross/i686-pc-mingw32/sys-include     -Wall -g -frelease -O0  -nostdinc -pipe -Wno-deprecated -I ../../../../gcc-7.1.0/libphob
os/src -I ../../../../gcc-7.1.0/libphobos/libdruntime -I ../libdruntime -I . -c -o std/mmfile.lo ../../../../gcc-7.1.0/libphobos/src/std/mmfile.d
libtool: compile:  /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/./gcc/gdc -B/home/TANE/develop/dlang/gc
c/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mingw32/./gcc/ -L/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da
35ef4f311a/build_i686-pc-mingw32/i686-pc-mingw32/winsup/mingw -L/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/build_i686-pc-mi
ngw32/i686-pc-mingw32/winsup/w32api/lib -isystem /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/winsup/mingw/include
-isystem /home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/winsup/w32api/include -B/usr/local/gdc_2072_710_mingwcross/i6
86-pc-mingw32/bin/ -B/usr/local/gdc_2072_710_mingwcross/i686-pc-mingw32/lib/ -isystem /usr/local/gdc_2072_710_mingwcross/i686-pc-mingw32/include -isystem /usr/local/gd
c_2072_710_mingwcross/i686-pc-mingw32/sys-include -Wall -g -frelease -O0 -nostdinc -pipe -Wno-deprecated -I ../../../../gcc-7.1.0/libphobos/src -I ../../../../gcc-7.1.
0/libphobos/libdruntime -I ../libdruntime -I . -c ../../../../gcc-7.1.0/libphobos/src/std/mmfile.d -o std/mmfile.o
/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/libphobos/src/std/utf.d: In function '__xopEquals':
/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/libphobos/src/std/utf.d:3115:12: internal compiler error: in force_typ
e_die, at dwarf2out.c:25107
     static struct ByCodeUnitImpl
            ^

/home/TANE/develop/dlang/gcc/gdc_2071_710/GDC-ac0c40aca0638ba0f22e23dd5c03da35ef4f311a/gcc-7.1.0/libphobos/src/std/utf.d:3115:12: internal compiler error: Aborted
gdc: internal compiler error: Aborted (program cc1d)

ぐむむ。これぁ先が長くなりそうだ。

試しにFedoraの方でビルドしてみたところ、エラー無くビルドできたり。 極簡単なコードのコンパイルも問題無さげ。

エラーメッセージをよく見てみるとdwarf2out.c:25107で死んだ事が記して あったのでソースコードを見てみたり。すると、assert()で引っかかっている 感じだというのが判ったり。デバッグシンボルを出力するのに何か問題が あるのかも?と思い、コンパイルオプションから-gを抜いてみたところ、 ICEにならずに先に進んだり。
make installして使ってみたり。極簡単なコードのコンパイルと実行はイケましたが、 WinアプリはGCをdisableにしないとやっぱりダメ。即ち状況はこれまでと変わらず。 さて、どうしたもんか。

gcのコードのデバッグプリントを生かしてみたり、disable()の状態をコードの コメントアウトで作りながら、どこが生きているとSegfaultになるか調べたり。 まだ原因は判らず。 GC内のステップとして、prepare(), markALL(), sweep(), recover()の4つのステップ を踏んでいるのですが、動いていた前のバージョンのコードと比べると、 mark()のコードが微妙に変わっていたり。あと、ロックをかけるコードも少し 変わっているのですが、スレッドに起因する感じ(例えばthread_suspendAll()が 意図せず上手くできてなくて、コレクト時に管理情報が壊れるとか)だと、 デバッグややこしいなぁ?と思ったりも。

2017/05/02

AM中に起床。本日もお休み。

やっぱりgcc-7が来ないなぁ? GDCの方はgdc-7の準備ができてっぽいですが。

ちょろりお出かけ。

「ONEPIECE(85)」。うまく均衡が崩れたなぁと思ったりも。 でも、ビッグ・マムの方はどうにかなったとしても、ジェルマの方とは どう片が付くのだろう?まだまだ続きます。

2017/05/01

AM中に起床。本日はお休み。

そういえば、Horizonをダウンロード購入した時に 「The Art of Horizon Zero Dawn」ってのも一緒にダウンロード されていたのを思い出したり。ゲームのコンセプトアートを 収録したボーナスコンテンツだったのですが、ゲームを終えてから観ると 「あぁ、あそこか」という感じで楽しめました。

Horizonのトロフィーを少し眺めてみたり。 ほぼプロローグに相当する「ロストに師事した」の取得率は 今日時点で 96.0% でした。つまり100人のうち4人は、 始めたばかりかアーロイが大人になる前にゲームを辞めているという事になります。 メインストーリー中間点にあたる「古の歴史を知った」の 取得率は 47.8% で、半分の人は辞めたかまだ途中という感じ。 メインストーリークリアに相当する「戦闘機械の脅威を終わらせた」 は26.7% で、4人に1人がクリアしているという感じ。 現時点で最後までやった人は多いと思います。

Guerrilla Games 作品である「Killzone Shadow Fall」では、キャンペーンの プロローグに相当する「父と子」(指示通りに操作するだけ、死ぬ要素無し) の取得率は90.6% (以前よりも下がって ます。恐らくPS-Plus配信されたのでそこで分母だけが拡大されたのかも)です。 そして、実質的なゲーム本編の一番最初のチャプタークリア「シャドー」の 取得率は いきなり59.0% になります。4割は途中でゲームを辞めているものと 考えられます。そして最終ステージクリアに相当する「救国の英雄」 の取得率は 20.3% で、5人に1人しかキャンペーンを最後までやっていない という感じですが、意外と高い気がしたりも。

でもこれは大分マシな方です。影を操るゲームであるところの「Contrast」 では、「新次元」(影にシフトするとアンロック。ゲーム進行上必ず行う操作) の取得率は 89.9%、最初のステージクリアに相当する「破れた夢の回転木馬」 の取得率はなんと35.7% です。10人に1人はちょっと触っただけ、3人に2人は 最初のステージをクリアせずにフェードアウトしていると言えます。

因みに、アンチャ4 は今日時点で「練習でクリア!」(レベルによらずゲームクリアに相当) が41.6% で、こちらはかなり高い感じ。ただしプラチナは敷居が高い為か 0.9% と相当難しい感じになってます(因みに TANEの基準としては 2% 以上なら 頑張って取得可能、1% 以下はほぼムリゲーという感じ)。

トロフィーの取得率は目安のひとつでしかないのですが、 普通にゲームをプレイしていれば取得できるタイプのトロフィー の取得率を見ていると、少なくとも最後までやっているか否かと、 ゲームが面白いか否かは相関があると見て良いのかな?と考えます。

ゲームのプレイ時間の話。ゲームによりますが、最近のだとクリアだけなら 10~20時間というものが比較的多いのではないかと思います。時間が余っている 人ならともかく、時間の限られた社会人だとそのくらいのボリュームが丁度 良いという人も少なくはないのでは?とも思います。そういうTANEもその一人かも(^^;
このプレイ時間を意図的に抑えた作りというのは他にもメリットが あるように思います。まず一番大きいと思われるのは「他のタイトルへの機会損失が減る」と いう点。例えばクリアに1000時間かかるタイトルを漏れなく全員がクリアするまで 遊んだとすると、人に与えられた時間は有限なので他のタイトルで遊ぶ機会は 自動的に無くなってしまいます。次に「制作するにあたってプレイ時間に注力した コストを掛けられる」という点。1000時間遊べるようにする為にクエストを用意したとしても、 もし全員が20時間しか遊ばないとすると、用意したクエストのうち980時間分の 制作コストは無駄になると考えられます。プレイヤーの人数×プレイ時間 というパイを分け合う感じにした上で、必要な所にコストを掛けた方が、 新しいゲームも作りやすい(==出やすい)感じになり、結果としてプレイヤーへ 還元されると思ったりする訳です。
実際、映画は(インドのを除けば)だいたい2.5時間前後の尺になってます。 そして、長さと面白さは無関係というのは直観的に理解できるのではないかと思うの ですが、それはゲームも同じでは?というのがTANEの個人的な考えです。


TOP PREV