本の虫

著者:江添亮
ブログ: http://cpplover.blogspot.jp/
メール: boostcpp@gmail.com
Twitter: https://twitter.com/EzoeRyou
GitHub: https://github.com/EzoeRyou

アマゾンの江添のほしい物リストを著者に送るとブログ記事のネタになる

筆者にブログのネタになる品物を直接送りたい場合、住所をメールで質問してください。

近況

しばらくブログを書いていなかったが、いろいろと忙しかった。

今、とある仕事をしているのだが、その仕事内容がまことに精神的に辛い。その仕事内容はまだ公開できないのだが、とりあえず言えることとしては、1文字は1バイトではないということと、C++の標準ライブラリの正規表現ライブラリはUnicodeに対応していないということと、C++のlocaleは多言語対応の足かせになっているということだ。

さて、もうひとつ憂うべき事態としては、メインで使っているラップトップが故障した。去年の冬頃からどうにも挙動がおかしいと思っていたが、いよいよ使い物にならないほど挙動がおかしくなってきたので、memtest86+にかけてみたところ、なんと4900件ほどのエラーを出したところで動作を停止した。完全にメモリが壊れている。

さて、メモリが壊れているだけなら新しくメモリを買ってくればいいのだろうが、このラップトップはその他のスペックが2016年の基準から見て劣っている。ディスプレイの解像度は低いし、WiFiも5GHz帯が使えない。そろそろ新しいPCを買わねばなるまい。

とりあえず今は、別件で手に入った中古のゲーミングラップトップを使っている。これは、GNU/Linuxでゲーム環境を構築するために試しに買ってみたもので、nVidiaの不自由なGPUであるGTX 670Mが積んである。とりあえずUbuntu 16.04をインストールしてみたところ、自由なドライバーであるNouveauで動作した。そのままゲームも遊ぶことができたが、FPSが絶望的に出ない。仕方がなく、nvidia-driverを入れてみると、まともなFPSが出た。しかし、なぜかXrandRが動かないため、ディスプレイの回転ができない。

ところでゲームだが、最近は、ゲームといえばfactorioしかしていない。factorioは極めて高い中毒性のある自動化ゲームで、プログラマーならば必ずハマるだろう。先週は職場の同僚5人でマルチプレイをして、10時間かかってロケットを打ち上げた。

ところで、factorioには列車があるのだが、つながった同一の線路上に複数の列車を走らせる場合、信号を使わなければならない。この信号の使い方は、ゲーム内になんの説明もない。factorioの公式wikiには、OpenTTDと同じだからそちらを参照しろとしか書いてない。

これについて列車好きの同僚に教えを請うたところ、排他処理の起源は鉄道だったという事実を知らされた。なるほど、信号で区切られた区間に存在できる列車は一つだけという排他処理なのだ。これを理解したので、ようやく列車ネットワークが組めるようになった。なんのことはない。単なる排他処理である。ただし、一つの区間のアンロックと同時に、別の区間をロックするという特性がある。

現実の鉄道の排他制御では、区間の独占通行権を示すタブレットと呼ばれる物理的なトークンをやり取りしていたようだ。また、駅間が電信でつながっていて、タブレットを入れると、数値が駅間でインクリメント、デクリメントされ、釣り合いが取れた時だけタブレットが排出される装置まで存在したそうだ。それはセマフォではないか。

自宅でのfactorioのLANパーティもいつか開きたい。