2019年12月18日水曜日

Wizardry 1&2 のコンサートに行ってきました

コンサートがあったのは10日も前(2019年12月8日)なのですが,なんだか体調が悪かったりリングフィットアドベンチャーのやりすぎでダウンしたりで書くのが遅くなってしまいました.

Wizardry のコンサートが開催されることに気付いたのは,申し込み終了まで後少しというタイミングで,まったくの偶然でした.こちらのサイト(ゲーム音楽コンサートのポータルサイト - 2083WEB)でたまたま見つけて,今時Wizardry 1&2のオーケストラコンサートとか本気かよと思ったものです.一応,友人にも声をかけてみたものの,残念ながら誰も釣れませんでした.

コンサートは新日本BGMフィルハーモニー管弦楽団によるもので,会場は北とぴあのつつじホール(王子駅のすぐそば),チケットは送料込みで4,750円でした.Wizardryのコンサートとなるとそうそうあるものではないし,申し込みに間に合うタイミングで気付いたのも奇跡的ということで,ほとんど迷うことなくポチりました.

実際にある程度プレイした Wizardry はファミコン版の 2, 3 とスーパーファミコン版の 5 だけなのですが,アポロン ゲームミュージックBOX ~メモリアル・サウンド・オブ・ウィザードリィ(今見たら中古価格がすごいことになっていてビックリ)を発売当時(2006年)に少し迷いつつ購入するくらいにはWizardryのBGMが好きで,Wizardry 1の曲も繰り返し聴いていたので丁度良かったと思います.ちなみに,上述のBOXはフタを開けると"OOPS! TELEPOTER"と書かれていて,デザインに悪魔的なセンスを感じます.

コンサート会場の座席数は402で,8割くらいは埋まっていたと思います.実際のところ,Wizardryのコンサートが開催されるとかまったく考えていなくて,「知っていれば行ったのに」という人もそれなりにいそうな気がします.

開演前の説明では,映画上映前のような注意事項を話していました.その中でひかるくさりかたびらをコンサート会場で装備するのはやめるように言っていました.Wizardryのコンサートならではのジョークですね.ひかるかたびらは性能が中途半端で,使う機会はほとんどなかった気がしますけど,名前が印象的なので覚えています.

演奏前と間のトークでは,Wizardryあるあるなお話が展開されていました.
  • カティノが重要なのでハリトを使ってはいけない.
  • 1回でも多くディオスを使いたいのでバディオスを使ってはいけない.
  • ボルタック商店が「ぼったくる」に見える.
  • 宿屋で回復しようとすると料金が高すぎてお金がなくなる.
  • カント寺院のお布施が高い.
  • ワードナにバディが効いてしまった.
  • キャラクターを作ってお金を回収して消すことでお金を増やせる.
  • レベルドレイン,くびをはねられたなど….
ネタをいろいろ並べてみると,WizardryプレイヤーはドMで変態という言葉(トークでも登場)を否定できません.自身,Wizardryに関する記憶の中で印象的なものは何かと考えてみると,ろくでもないことばかり思い出します.
  • 宝箱の罠に引っかかってパーティが半壊した.
  • 一方通行の扉を通過して戻れずにパーティが半壊した.
  • マロールで座標を間違えてメインパーティが「いしのなかにいる」してしまい,セカンドパーティで命がけの回収作業をおこなった.
  • レベル1のパーティでダンジョンに入ったら,最初の戦闘でクローリングケルプ(経験値が低い,呪文を妨害する,同時出現数が多い)の群れが出て全滅した.
悲惨としか言いようがありませんけど,パーティが半壊した状態で城への帰還を目指しているときのドキドキ感がたまらないのも間違いありません.

肝心の演奏については,オーケストラのコンサート自体初めてでどのように評価すれば良いのかわかりませんが,思い入れのあるゲームのBGMということで,存分に楽しめました.プレイ経験の差もあってか,Wizardry 2の方が特に良かったと思います.

トークの中で音源化したいという話も出ていたので,続報に期待しております.私の勝手な期待としてはWizardry 3&5というのもあります.

2019年12月1日日曜日

時計を見るまで11月31日だと思っていました

もう12月に入ったということで,年賀状の宛名書きをしていました.元旦に届く時期に年賀状を投函したことは未だかつてないと記憶しているのですが,今年は昨年に年賀状をもらった人の分だけでも早めに出しておくつもりです.

何年前のことだったか忘れましたが,年末年始にしんどくて年賀状をまったく出さなかった年があり,そもそも少なかった年賀状がさらに減ったおかげで負荷が下がりました.書き損じさえしなければ10枚に届かないくらいです.

実のところ,ほかに片付けるべき案件があるもの,どうにもやりたくない気持ちが強くて手を付けられず,現実逃避として年賀状を書いていただけですが….

2019年11月28日木曜日

古い書類を整理しました

天気予報によると長引く雨も今日までで,明日からは晴れるみたいです.やっと布団などの大物が干せそうです.ただ,気温は今よりも下がるらしくて,風邪を引かないように気を付けないといけません.

重要そうな書類は保管するようにしているのですが,古い書類がたまりすぎて邪魔になってきたので整理に着手しました.昔の領収書,期限切れの保証書やら火災保険の書類など,もはや保管しておく意味のない書類がたくさんあって,大量に廃棄することになりそうです.

さすがに燃やせるゴミに出すのはなんとなく気持ち悪いため,頑張ってシュレッダーにかけることにします.持っているシュレッダーの処理能力が貧弱なので,これがなかなか面倒な作業になるのですが….

ついでに保管しておいた空箱・空袋や古布も片付けを進めています.

2019年11月27日水曜日

louds-trie を MSVC でも使えるように改修しました


先週から気温がぐっと下がり,しかも雨続きでどんよりした気分です.実のところ,週末には晴れ間もありましたが,丁度そのタイミングは頭痛でダウンしていたため,私の中ではずっと雨なのです.

https://github.com/s-yata/louds-trie を MSVC でも使えるように少し修正しました(差分 1, 差分 2). gcc と MSVC における組み込み関数の違いに対応させただけなので,動作には影響しないはずです.コンパイラが MSVC かどうかの判定には _MSC_VER が定義されているかどうかを使っています.

CPU 命令と組み込み関数の対応は以下の通りです.

CPU 命令gccMSVC
popcnt__builtin_popcountll__popcnt64
ctz__builtin_ctzll_tzcnt_u64
pdep_pdep_u64_pdep_u64

後は,対応するヘッダが異なります. gcc では x86intrin.h をインクルードしますが, MSVC では intrin.h と immintrin.h をインクルードします.

2019年11月26日火曜日

ThinkPad T495s が届きました

先週注文した ThinkPad T495s が届きました.

古い PC に Windows 7 が入っているほかは, VM で Windows を使うことがある程度だったので,久しぶりに最新かつネイティブな Windows 環境を手に入れたことになります.

折角の新しい PC ではありますが,今すぐに使う用事はないので, Visual Studio Community 2019 をインストールして Hello World! できることを確認しただけで今日は終わりにしました.今後, Visual C++ でのビルド確認やら Ryzen での性能確認などに使っていく予定です.

2019年11月22日金曜日

古くなったケーブルを廃棄しました

モバイルバッテリーや USB 充電器にスマホなど,何かを買う度に USB ケーブルがついてくるせいか,いずれ使うかと保管しておいた USB ケーブルが結構な量になっていたため,古くなったものを廃棄しました.

USB は端子の種類が多い上,ケーブルを見ても性能がわからなくて困ります.端子を Type-C に統一できれば良いのですが,手元にある機器だけでも  Type-A, B, C に Mini-B, Micro-B, Micro-B SuperSpeed といろいろな端子があり,念のために予備も残しておこうと考えると,なかなか数を減らせません.さらには通信用やら充電用やらあり,しかも通信速度や充電速度に違いがあって,見た目では判別できないため,本当に困ります.

ディスプレイケーブルもたくさんあって,整理したいとは思っているものの,それらを使う機器も一緒に整理しないといけなくて,どうにも面倒で着手できていません.

2019年11月21日木曜日

情報処理のバックナンバーを消化しました

年単位で積読状態になっていた情報処理(情報処理学会の学会誌)のバックナンバーを消化し終わり,少しだけ部屋が広くなりました.まだ書籍の山が二つ残っているので先は長いです.とりあえず,今年度中には片付きそうにありません.

2019年11月19日火曜日

体調が安定してきました

ここ数年は体調が不安定で,特にアトピーが悪化して困っていたのですが,今年に入って徐々に安定してきました.夏場の暑い時期や季節の変わり目は少し強めに症状が出たものの,大きくは悪化していません.

理由としては,時間の余裕が増えたこと,ストレスの原因を減らしたこと,生活習慣を見直したことなどが考えられます.一度体調を崩して,そこから食事などに手間をかける余裕がなくなり,さらに体調が悪化するというような悪循環が続いていたので,えいやっと環境を変えたのは正解だったと思います.

2019年11月18日月曜日

ThinkPad T495s を注文しました

永らく Windows はほとんど使っていなかったのですが,手持ちのノート PC に入っている Windows 7 がサポート終了間近ということで,新しいノート PC を注文しました.

当初は Windows でのビルドとテストができる環境が欲しくて検討し始め,どうせなら AMD の Ryzen を試してみたいとか,あまり持ち歩くことはないかなとか考えた結果, ThinkPad T495s になりました.主な構成は以下の通りです.
  •  ThinkPad T495s
    • CPU: AMD Ryzen 5 PRO 3500U (2.1GHz, 4MB)
    • RAM: 16GB (PC4-21300 DDR4)
    • SSD: 512GB (NVMe)

以前は Visual C++ Express を使っていた記憶がありますが,現在は Visual Studio Community を使えば良さそうです.https://visualstudio.microsoft.com/ja/vs/community/ に「個人開発者の方はどなたでも、独自の無料/有料のアプリを作成するために Visual Studio Community を使用できます。」と書いてあります.

2019年10月14日月曜日

marisa-trie で BMI2 の PDEP 命令を使えるようにしました

簡潔ビットベクトルの select に BMI2 の PDEP 命令を使うと実装を単純化できる上に高速化できるという情報を見つけたので marisa-trie (https://github.com/s-yata/marisa-trie) に組み込んで試してみました.

PDEP を使うのは, 64-bit 整数まで絞り込んだ後になります.
marisa-trie での該当箇所は以下の通りです.(MSVC 向けの部分はカットしました.)
unit から i+1 番目の 1 になっているビットの位置を求めています.(bit_id はただのオフセットなので気にしなくて OK です.)

std::size_t select_bit(std::size_t i, std::size_t bit_id, UInt64 unit) {
  return bit_id + ::__builtin_ctzll(_pdep_u64(1ULL << i, unit));
}

select は lookup や reverse_lookup の中で特に重い処理なので,結構効果がありました.
以下, marisa-benchmark に日本語 Wikipedia のタイトル一覧(順序そのまま)を入力したときの出力を貼っておきます.
実行環境の CPU は Core i7 6800K 3.4GHz です.

まずは PDEP を使わないバイナリです.

$ make clean && autoreconf && ./configure --enable-bmi && make
...
$ tools/marisa-benchmark -p jawiki-20191001-all-titles-in-ns0
Number of tries: 1 - 5
TAIL mode: Text mode
Node order: Descending weight order
Cache level: Normal cache
Number of keys: 1887667
Total length: 40976550
------+----------+--------+--------+--------+--------+--------
#tries       size    build   lookup  reverse   prefix  predict
                                      lookup   search   search
          [bytes]    [K/s]    [K/s]    [K/s]    [K/s]    [K/s]
------+----------+--------+--------+--------+--------+--------
     1   16224608  1446.04  3608.77  3206.54  3152.50        -
     2   11877920  1169.76  2051.87  1898.60  1977.19        -
     3   11008584  1158.67  1699.86  1695.10  1708.77        -
     4   10692624  1151.92  1685.07  1632.11  1644.95        -
     5   10557664  1155.25  1661.06  1597.17  1618.07        -
------+----------+--------+--------+--------+--------+--------

次に PDEP を使うバイナリです.

$ make clean && ./configure --enable-native-code && make
...

$ tools/marisa-benchmark -p jawiki-20191001-all-titles-in-ns0
...
------+----------+--------+--------+--------+--------+--------
#tries       size    build   lookup  reverse   prefix  predict
                                      lookup   search   search
          [bytes]    [K/s]    [K/s]    [K/s]    [K/s]    [K/s]
------+----------+--------+--------+--------+--------+--------
     1   16224608  1418.83  4134.11  3956.39  3858.28        -
     2   11877920  1220.01  2357.28  2276.49  2279.57        -
     3   11008584  1164.50  2037.00  1978.51  1985.62        -
     4   10692624  1158.25  1915.64  1929.95  1909.70        -
     5   10557664  1159.29  1916.36  1902.57  1872.88        -
------+----------+--------+--------+--------+--------+--------

PDEP を使わない場合と比べて PDEP を使う場合は, lookup が 14-20% の高速化, reverse_lookup が 17-23% の高速化となりました.