2016年12月13日火曜日

10年前に買ったDVD-Rは今でも使えるの?

忘れそうになっていたが私はもともと光学メディアを調べる趣味があった。なんでこんなことに手を出したかというと、ある日の私はDVD-Rに焼いたはずの大切なデータが読めなくなっていることに気づいたことに遡る。何が悪いのか調べ、原因は粗悪なメディア(そのとき自分が買ったメディアがプリンコという劣悪極まりない品だったことを知った)、二度と繰り返さないために焼いたDVDやCDのエラーを計測できることを学んだ。

その際お世話になったのは以下の2サイトである。

しあにんなお昼ごはん
CD-R実験室

いつのまにか光学メディアの時代は過ぎ去り、「焼く」という習慣も昔のものになりつつある。私もそれにしたがって光学メディアのことを忘れて久しい時間がたった。

さて、年末の大掃除を始めたところコレクションしていたDVD±Rを見つけた。もう使うことはあるまいと思うが、ただ捨ててしまうのももったいない。そこで「10年前に買ったDVD-Rは今でも使えるの?」と題して最後の検証を行ってみようと思う。

今は所有するドライブも貧相になり、Plextor PX-760Aしか残っていない。昔はMediatek搭載ドライブやBenQでも計測できたのだが……とか、NECに日立LGに書き込みドライブも揃っていたのに、などと嘆きはすまい。早速とりかかろう。

TDKが多いのは私が信者だったからである。

書き込みドライブ:Plextor PX-760A
計測ドライブ:Plextor PX-760A
書き込み速度:8倍速以上のメディアは6倍速。4倍速以下のメディアは選択できる最高速度
使用ソフト:Qpxtool

TDK超硬(日本製)8倍速
MediaID:TTG02
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-eWZNb25KV2hqdEU


いきなりだがダメだこれ。訂正不可能エラーまで出ている。ただエラーのスパイクが出ているのは書き込み中に一旦減速してキャリブレーションをかける場所のようにも思われるのでドライブ側の問題の可能性もある。どちらにしても外周のエラーが膨らんでるのは不安。


TDK超硬(ルクセンブルク製) 8倍速
MediaID:TTG02
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-RmpXd3lHSEs5OGs


安定して低いエラーレート。文句なし。
TDKは日本製≧ルクセンブルク製>台湾製だったと思っていたがなかなかやるな、ルクセンブルク。もちろんとうの昔に工場は全て閉まっているし、ブランドにいたってはImationに売却されたはずだが。


TDK通常のDVD-R(日本製) 8倍速
MediaID:TTG02
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-c05HY19CQnR5SFE


あ、ダメだこれ。致命的でこそないが使うのはよしたほうがいい。


TDK DVD+R(日本製)4倍速
MediaID:TDK-001/000
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-eWZNb25KV2hqdEU


今回試す唯一のDVD+R。外周がお亡くなり。そうでなくてもJitterのぶれが大きい。光で劣化していたのかもしれないが、これは使えない。


SONY 音匠(日本製)16倍速
MediaID:SONY16-D1
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-TjhTN1lENXpzTGs


問題なし。少々エラーが多めのように見えるがもとからこんなものだったはず。


UNIFINOスーパーストロング(日本製)8倍速
MediaID:IMCJP-N
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-MzN1c1hxb3dYaEk



内周のエラーが膨れ気味だが問題なし。国産のなかではあまり品質良くなかったはずだが、やるじゃん。


Maxell HG(日本製)8倍速
MediaID:MXLRG-R3
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-MFNNTjFKT1pSdUk


Betaがちょっとふらつき気味だけど十分低エラー。それなりの用には耐えそう。


Pioneer(日本製)等倍速
MediaID:PVC001-001
PDF:https://drive.google.com/open?id=0B-EXRPSDT-x-SU9kSjJmbER4R1E


コレクターズアイテム以上の意味はないだろうが黎明期にPioneerが自社製造していた等倍速DVD-Rメディア。10年どころではない昔のメディアだがエラーレート自体は低く安定している。Betaが大きくぶれているので使いたくはないが、保存期間を考えれば上等では。



ざっと試したところでは結果はまちまちで、長期間保存用のメディアであろうと長期保存後の使用に耐えるかどうかはわからないということになりそうだ。外周のエラーが多いメディアについては保存中に光で劣化していたのかもしれない。

Q:つまり?
A:メディアは冷暗所に保存。焼いたら計測しとこう。


あとで気づいたがPX-760AのAuto Strategy機能(現物のメディアを1枚犠牲にして細かいキャリブレーションを行う)がForcedになっていた。TTG02(TDKの8倍速メディア)の成績がルクセンブルク製以外微妙だったのはこれが原因かもしれない……今となってはもう知る由もないが。

Q:つまり?
A:おとなしく計測しとこう。

2016年8月25日木曜日

『鋼鉄番長の密室』の時代設定にまつわる謎

昔コミック『スパイラル』(城平京原作・水野英多作画)の小説版に『鋼鉄番長の密室』という本があった。城平京の小説の中では最も好きな作品である。

2002年発行なのでもはやネタバレなどは気にしないで話をすすめる。この多少メタなミステリの謎解きには不満はない。むしろ傑作であるとさえ思う。気になるのはこの作品の舞台になった年代である。

ご存知の通りこの小説の解決編では鋼鉄番長の発言に聖書からの引用が多用されていることが大きな役割を果たす。しかし気になることがある。「45年も前」(p13)に書かれた遺書はいったいどの聖書からの引用なのか?

聖書の日本語訳は多くある。一般によく使われた日本聖書協会による翻訳は明治元訳(1887年)、大正改訳(新約のみ。1917年)、明治元訳の旧約と大正改訳をあわせた通称・文語訳、口語訳(1955年)、共同訳(1978年)、新共同訳(1987年)。それから他の団体・個人による訳としては新改訳、フランシスコ会訳、バルバロ訳、岩波委員会訳……

とはいえ引用句を一つ一つ見ていけば鋼鉄番長の読んだ聖書が特定できるのではないだろうか?ただし作中作『番長の王国』(菅村軍平著)にある会話文は菅村氏による創作の可能性があるため、確実に出典を鋼鉄番長に遡りうるテクストとしては遺書を用いることとする。

比較するのは文語訳、口語訳、新共同訳でよかろう。共同訳は大変評判が悪くあまり使われなかったし、その他訳は言わずもがな。教会で使うようなものではない。もし鋼鉄番長の養父、グレゴリー・マクドナルド氏の宗派によっては変わった翻訳を使った可能性もあるが、アメリカ人のマクドナルド氏が正教会に属しているわけがないので正教会訳は無視できるし、軍人ということはエホバの証人であるはずがないので新世界訳も考えなくてよかろう。等々。

ちなみに歩が参照したのは新共同訳である。歩の発言では「コヘレトの言葉」とある(p190)が、これが新共同訳における訳語だからだ。コヘレトとはヘブライ語で伝道者の意味であり、そのため文語訳・口語訳では「伝道の書」と訳されている。

というわけで比較したのが以下である。


遺書より

p190
「全世界を手に入れても、仲間の命を失って何の得があるか」(マタイ16:26のもじり)
新共同訳:人は、たとえ全世界を手に入れても、自分の命を失ったら、何の得があろうか。自分の命を買い戻すのに、どんな代価を支払えようか。
口語訳:たとい人が全世界をもうけても、自分の命を損したら、なんの得になろうか。また、人はどんな代価を払って、その命を買いもどすことができようか。
文語訳:人、全世界を贏くとも、己が生命を損せば、何の益あらん、又その生命の代に何を與へんや。

「この世のものすべてがたどる道」(ヨシュア23:14)
新共同訳:わたしは今、この世のすべての者がたどるべき道を行こうとしている。あなたたちは心を尽くし、魂を尽くしてわきまえ知らねばならない。あなたたちの神、主 があなたたちに約束されたすべての良いことは、何一つたがうことはなかった。何一つたがうことなく、すべてあなたたちに実現した。
口語訳:見よ、今日、わたしは世の人のみな行く道を行こうとする。あなたがたがみな、心のうちにまた、肝に銘じて知っているように、あなたがたの神、主が、あなた がたについて約束されたもろもろの良いことで、一つも欠けたものはなかった。みなあなたがたに臨んで、一つも欠けたものはなかった。
文語訳:視よ今日われは世人の皆ゆく途を行んとす汝ら一心一念に善く知るならん汝らの神ヱホバの汝らにつきて宣まひし諸の善事は一も缺る所なかりき皆なんぢらに臨みてその中一も缺たる者なきなり

「時代のしるし」(マタイ16:3)
新共同訳:朝には『朝焼けで雲が低いから、今日は嵐だ』と言う。このように空模様を見分けることは知っているのに、時代のしるしは見ることができないのか。
口語訳:また明け方には『空が曇ってまっかだから、きょうは荒れだ』と言う。あなたがたは空の模様を見分けることを知りながら、時のしるしを見分けることができないのか。
文語訳:また朝には「そら赤くして曇る故に、今日は風雨ならん」と言ふ。なんぢら空の氣色を見分くることを知りて、時の徴を見分くること能はぬか。


参考までに会話文についても比較を載せる。

p191
「心は燃えても肉体は弱い」(マタイ26:41)
新共同訳:誘惑に陥らぬよう、目を覚まして祈っていなさい。心は燃えても、肉体は弱い。」
口語訳:誘惑に陥らないように、目をさまして祈っていなさい。心は熱しているが、肉体が弱いのである」。
文語訳:誘惑に陷らぬやう、目を覺しかつ祈れ。實に心は熱すれども肉體よわきなり』

「ひとりよりもふたりが良い」(コヘレト4:9)
新共同訳:ひとりよりもふたりが良い。共に労苦すれば、その報いは良い。
口語訳:ふたりはひとりにまさる。彼らはその労苦によって良い報いを得るからである。
文語訳:二人は一人に愈る其はその勞苦のために善報を得ればなり

「大きな石臼を首にかけている」(マタイ18:6)
新共同訳:「しかし、わたしを信じるこれらの小さな者の一人をつまずかせる者は、大きな石臼を首に懸けられて、深い海に沈められる方がましである。
口語訳:しかし、わたしを信ずるこれらの小さい者のひとりをつまずかせる者は、大きなひきうすを首にかけられて海の深みに沈められる方が、その人の益になる。
文語訳:されど我を信ずる此の小き者の一人を躓かする者は、寧ろ大なる碾臼を頸に懸けられ、海の深處に沈められんかた益なり。

「何事にも時がある」(コヘレト3:1)
新共同訳:何事にも時があり/天の下の出来事にはすべて定められた時がある。
口語訳:天が下のすべての事には季節があり、すべてのわざには時がある。
文語訳:天が下の萬の事には期あり 萬の事務には時あり

「破壊する時、建てる時」(コヘレト3:3)
新共同訳:殺す時、癒す時/破壊する時、建てる時
口語訳:殺すに時があり、いやすに時があり、こわすに時があり、建てるに時があり
文語訳:殺すに時あり醫すに時あり 毀つに時あり建るに時あり



以上、鋼鉄番長が読んだ聖書は新共同訳とみて間違いあるまい。すなわち鋼鉄番長の死は1987年以降である。さらに「そんな祈りがあちこちで行われている中で迎えた一月二十六日水曜日」(p104)が鋼鉄番長の命日であることをふまえて該当する年をカレンダーで探すと候補は1994年、2000年、2005年、2011年……となる。

さらに作中現在におけるグレゴリー・マクドナルド氏の年齢は「もう九十歳近い」(p152)。そして従軍中に「一緒に行動していた軍の七割を壊滅させてしまう」(p96)失態により「三十半ばで軍を辞めざるをえませんでした」(p97)というから、その事件の直後に退役したとしても従軍していたのは50年以上前である。

またマクドナルド氏は退役後落ちぶれた暮らしをしている中で三郎太(鋼鉄番長)が9歳のときにの母である荒木歌子と出会った(p97)。鋼鉄番長の死は17歳のときだから、マクドナルドと歌子の出会いは作中現在から45年と8年遡って53年前ということになり確かに計算は合う。

仮に鋼鉄番長の死を1994年とするとマクドナルド氏が従軍していたのは1980年代半ば以前。マクドナルド氏が同行していた軍に7割が壊滅するほどの被害が出たということは彼が失態を犯した戦争はちょっとした武力介入ではなく大規模な戦争であろう。この時期にアメリカが参加した大規模戦は……見当たらないのだ。

時代を後にずらせば湾岸戦争が1990年であり、これは比較的もっともらしい候補に思われる。湾岸戦争を軸に推測した結果が以下の流れである。

1990年:マクドナルド33歳、湾岸戦争に従軍。
1991年:マクドナルド34歳、湾岸戦争終結とともに退役。
1992年:マクドナルド35歳、荒木歌子に会う。このとき鋼鉄番長9歳。
1997年:マクドナルド40歳、歌子とアメリカに行く。鋼鉄番長14歳。
2000年:マクドナルド43歳。鋼鉄番長17歳で死す。
2045年:マクドナルド88歳。インタビューに応じる。作中現在?

マクドナルド氏が参加した戦争によってはもっと後にずれる可能性もあるのだが、湾岸戦争説にもとづく推定はぴったり辻褄が合うように思われる。

このようにして導かれた作中現在2045年説がその他作品の内容と矛盾しないか検証したいところだが、本編コミックが手元にないのが残念でならない。


参考文献
城平京著・水野英多イラスト 鋼鉄番長の密室(小説スパイラル : 推理の絆 2巻) 2002.4
聖書 新共同訳(日本聖書協会の聖書本文検索を使用)
聖書 口語訳(パブリックドメイン。Wikisourceより引用)
聖書 文語訳(パブリックドメイン。Wikisourceより引用)

2016年7月24日日曜日

IOスケジューラの変更でどのくらいパフォーマンス変わるの?

SSDならCFQよりdeadline schedulerのほうが速いらしい。が、どのくらい効くんだ?

切り替える方法は簡単。

# echo (cfq|deadline|noop) > /sys/block/sda/queue/scheduler

というわけで試してみた。

環境は以下の通り
  • Core i5-6200U
  • Memory 8GB
  • SSD MZHPV256HDGL(PCI-Express AHCI 256GB)
    • ……有り体に言えばVAIO S11である。
  • Arch Linux
  • Kernel 4.6.4(CPU FamilyをCore2に、HZを1000にしてある)
  • ファイルシステムはBtrfs(rw,relatime,compress=lzo,ssd,discard,space_cache)
邪魔が入らないようランレベル2で起動し、fioを用いてCFQ/Deadline/noopそれぞれに対して同じ項目を試すことにする。とはいっても1つのSSDからOSを起動し、fioを呼び出し、fioのテストを読み書きしているので理想的な状態でのベンチマークとは言えない。

fioのテスト設定は以下の通り。
[seqread]
rw=read
size=1G
ioengine=libaio
directory=~/Documents/fio/
loops=10

[seqwrite]
rw=write
size=1G
ioengine=libaio
directory=~/Documents/fio/
loops=10

[randread]
rw=randread
size=1G
ioengine=libaio
directory=~/Documents/fio/
loops=10

[randwrite]
rw=randwrite
size=1G
ioengine=libaio
directory=~/Documents/fio/
loops=10

[randrw]
rw=randrw
size=1G
ioengine=libaio
directory=~/Documents/fio/
loops=10
5種類。誤差を減らすためそれぞれ10回テストを行うようにしておいた。

結果は以下の通り。

bandwidth(KB/s) cfq deadline noop
seqread 1181286.4 982917 913314
seqwrite 215654 244150 201921
randread 33419 35230 33987
randwrite 118196 129548 112805
randrw_read 21428 23193 21803
randrw_write 21379 23139 21753

iops cfq deadline noop
seqread 295396 245729 228328
seqwrite 53913 61037 50480
randread 8354 8807 8496
randwrite 29549 32387 28201
randrw_read 5357 5798 5450
randrw_write 5344 5784 5438

シーケンシャルリードがあまりにも速く、そのままグラフ化すると他の項目が潰れるのでシーケンシャルとランダムで分割してグラフにしてある。


本環境では
  • シーケンシャルリードに限ってはCFQが最も速い
  • それ以外のテスト項目についてはDeadlineがCFQより1割ほど速い
といえそうである。
他の環境での検証が待たれる。

2016年5月30日月曜日

シェルを電卓として使いたいとき

いろいろな方法が考えられる。

適当な言語のインタプリタを使う
真っ先に思い浮かぶ方法。よく使いそうなのというとPythonとかRuby(irb)とかGauche(gosh)とかだろうか。
プログラミング言語の高い表現力を享受できる代わりに(相対的に)巨大な言語がインストールされている必要がある。

計算用のコマンドを使う
bc、dc、exprなどがある。相対的に小さく、軽いが癖のあるものが多い。一番使いやすいのはbcだろうか。

awkを使う
確かにawkは計算ができる。だがシェル上に存在する問題すべてをawkで解決しようとするのはいかがなものか。「金鎚を手にするとあらゆる問題が釘に見える」とはこの謂か。もちろん文字列処理の一環として計算を行うならこれ以上のものはそうそうない。
awk 'BEGIN{print sin(30*3.1416/180)}'

シェルの機能を使う
$(())の中で多少の演算が可能である。これは別にBashやZshの拡張機能ではなくPOSIXで定義されているので(2.6.4 Arithmetic Expansionを参照)基本的にどのシェルでも使える。
echo $((256 + 998))
またこれはシェルスクリプトで変数のカウンタを回すときにも重用する。
count=`expr $count + 1`
ではなく
count=$((count + 1))
でいい。シェル組み込みの機能なので呼び出しのオーバーヘッドがない……はず。もっとも大した差ではないだろうけど。

[2016/5/31追記]
試してみたら大違いだった。
$ cat test.sh
count=0
while [ 1000000 -gt $count ]
do
    count=$((count + 1))
done

$ time sh test.sh 
real 0m8.446s
user 0m8.436s
sys 0m0.004s
に対し
$ cat test.sh
count=0
while [ 1000000 -gt $count ]
do
    count=`expr $count + 1`
done

$ time sh test.sh 
real 9m4.312s
user 0m29.381s
sys 1m19.182s

使用した環境はArch Linux, Bash4.3.42, expr (GNU coreutils) 8.25。ハードはCPU Intel Core i5 3475S, メモリ24GB。ちなみに何度か試したらbash(約8秒)よりzsh(約4秒)やbusybox sh(約3秒)のほうが高速だった。



なんでこんなことをまとめたかというと、仕事で文字列処理がしたくて、でもPCはWindowsだしソフトをインストールできないからWindows用busyboxを使うことにし、Powershellを立ち上げると横で電卓を使うのが面倒になりシェル上から計算もしたいなーと考えた結果である。シェルを手にするとあらゆる問題がシェル上の問題に見えてくるのだ。

Busyboxは便利だ。Powershellで
busybox.exe sh -l
するだけで立派な環境が手に入る。1MBもないバイナリの中にsedもawkもsortもuniqもcutもgrepもviさえも……もうなにも怖くない。

2016年5月27日金曜日

IPv4にマッチする正規表現

ひょんなことからIPv4のIPアドレスを判定する正規表現を考えることになった。考えた流れをここに残しておくことにする。

IPv4というと

192.168.0.1

こんなやつである。「.」で区切られた4つの0〜255までの数値からなるわけだ。

なので第一歩。
0〜255の数値にマッチする正規表現をXXXとすると
(XXX)\.(XXX)\.(XXX)\.(XXX)
である。

今回は別にキャプチャしたいわけでもないので「(XXX)\.」が3回続くのに注目してまとめることができる。
((XXX)\.){3}(XXX)

あとは肝心のXXXを考えるだけだ。

必要なのは場合分け。それぞれの場合についての表現をX1,X2,X3……とするとXXXは(X1|X2|X3|……)と表せる。

まず1桁の場合。0〜9までなので簡単だ。
[0-9]

続いて2桁の場合。10〜99。1〜9に続けて0〜9が並ぶと言い換えることができるので
[1-9][0-9]

3桁の場合は100の位が1か2かで分ける必要がある。
100〜199については簡単だ。1に続けて0〜9が2回並ぶ。
1[0-9][0-9]
もちろん繰り返しを使って1[0-9]{2}としてもよい。

200〜255についてはさらに場合分けが必要だ。
200〜249に関しては1の位として0〜9をとりうる。よって
2[0-4][1-9]

250〜255は見ての通り1の位に6〜9をとってはいけない。すなわち
25[0-5]

さあ。これだけをまとめていこう。
[0-9]|[1-9][0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5]

これをXXXに当てはめて
(([0-9]|[1-9][0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])

今回の問題は判定する文字列が1行として与えられるものだったので行頭と行末をつけて
^(([0-9]|[1-9][0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])$

ふう。

※あとで調べていたら1桁の場合と2桁の場合はまとめることができることがわかった。[0-9]と[1-9][0-9]を一緒にして[1-9]?[0-9]となり、結果としては[1-9]?[0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5]を用いて
^(([1-9]?[0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9{2}|2[0-4][0-9]|25[0-5])$
と表せる。詰めが甘かった。

こういう場合は[0-9]の代わりに\dを使うと何をしたいのか不明瞭になるな、と考えるなど。

2016年4月10日日曜日

なんとか健康を維持していくための食事ガイド

自炊は面倒なもの。しかし食わねば生きていけぬとなれば仕方なしにも日々食事の支度をしなければならない。一人暮らしでも安く、手早く、健康を保てる食事を考えなければならない。

まず食材だ。

なによりもまず玉葱が役に立つ。椎名誠も讃えたように玉葱は生・炒め物・煮物といった調理方法を問わず、保存がきき、その上どんな味付けにもあう万能食材である。安いときに買い込むのがよい。

ついでキャベツ。キャベツもまた調理方法も味付けも問わない便利な食材である。強いて言えば玉葱ほど保存がきかないが、それでも外からぺりぺりと1枚ずつ葉を剥いて使っていけば1週間以上もつ。カットされたものを買ってはならない。断面から傷んでいくうえに割高である。

冬になれば白菜もいい。キャベツに比べると調理を選ぶような気もするが癖のない味ゆえ大体の料理に無理なく押し込めることだろう。

イモ類も便利だ。じゃがいも、さつまいも、ともに保存がきくし栄養も十分。あとは調理を考えるだけだ。じゃがいもは時間がなければ電子レンジで蒸すだけでも食べられるし、フライパンで炒めて後述のクレイジーソルトをかけるのもいい。これにウインナーやベーコンがあれば言うことはないのだが高いのでここでは省略する。

緑黄色野菜も欲しい?人参は定番として、小松菜はどうだろう。これまた調理を選ばない。葉付きの蕪は?まるごとスープにできる。中華風にも洋風でも合うお手軽な食材で冬場は頼りになることだろう。

トマト……は高い。そこで登場するのがトマト缶 。1缶100円以下である。これでトマトソースを作っておけばスパゲッティが何回か食べられる。炒めた玉葱、セロリ、人参、エノキ、挽肉等と混ぜて適当に味を付け煮詰めるだけで簡単に作れるし冷凍保存もできる。レシピは探せばいくらでも見つかることだろう。挽肉の代わりに大豆の代用肉 も悪くないのだがあとはお財布とご相談。トマト缶に肉といえばハヤシライスも悪くない。

肉は高価だがタンパク質は欲しい。どうするかといえば大豆に頼るのだ。納豆、豆腐、油揚げである。豆腐は足が速いので注意が必要だが納豆は長持ちするし油揚げも冷凍保存ができる。油揚げは味を染み込ませて肉代わりに使うこともできる。

ここでめんつゆ を使ってみよう。油揚げと適当な野菜をめんつゆで煮込むだけ。ご飯によく合う煮物になる。また鶏肉と玉葱をめんつゆで煮て溶き卵を入れたものをご飯にかけると親子丼ができる。それから茹で卵をめんつゆに漬けて一晩放置すれば立派な煮卵になる。実は麺類だけでなく様々に使える調味料なのだ。

どうしても動物性タンパク質がほしければ卵だ。値上がりしているといってもまだまだ安いしあらゆる栄養価に富む。これまた調理方法や味付けを問わないのもメリットだ。

安い食材の代表と思われているモヤシだが、あまり優れた食品というわけではない。価格当たりの栄養価はまあまあ高いのだろうがいかんせんモヤシはモヤシである。さらに日持ちしないという点もマイナス。なお冷凍保存も可能だがシャキシャキ感は完全に失われるので冷凍したモヤシはスープにいれて消費しよう。

冷凍といえばキノコ類は冷凍保存できるので買いすぎても安心だ。シメジ、椎茸、エリンギ等、安売りでゲットしておけば長く楽しめる。

実は野草に手を出すという方法もあるのだが、私は詳しくないし春は毒草に引っかかる危険性が高いので書かないことにする。必要に応じてこんな本 片手に各自で試していただきたい。



続いて調味料三種の神器を紹介する。「創味シャンタンDELUXE 」「クレイジー ソルト 」「S&B 赤缶 カレーミックス 」この3つがあればだいたいの食材は口に入れられる味になる。

シャンタンDX、以前は味覇として知られていた中華調味料である。これさえあればあらゆる食材を中華風に味付けられる。しかも最低でも60点くらいは付けられるであろう「食える」レベルの味である。野菜炒めに使ってよし、スープに使ってよし、チャーハンだってこれ一つでできあがる。

面倒であれば冷蔵庫の食材を適当に刻んで鍋にいれシャンタンDXで20分くらい煮込めば立派な中華スープができる。栄養も豊富だし手間もかからない。

ついでだから餃子を用意しよう。たとえば私が使っているぎょうざの満洲では60個入り冷凍餃子が税込1231円。1つたったの20円である。シャンタンDXで作った野菜スープに2つ3つ入れるだけで贅沢な味になる。もちろん焼いて食べてもうまい。冷凍餃子は肉類の供給源としても悪くないと思う。

何も考えたくないときはクレイジーソルトが便利だ。マジックソルト も美味いが香りソルトはあんまり好みの味でなかった。適当に火を通した食材に上からクレイジーソルトをふりかけるだけでいい。料理の難しい鶏肉も炒めてクレイジーソルトをかけるだけでおいしく食べられる。

栄養価は絶望的なので非常時のテクニックにしかならないが、ゆでたスパゲッティにオリーブオイルとクレイジーソルトをかけるだけの料理もある。きっと何も食べないよりはマシである。

S&B 赤缶 カレーミックス、見ての通りカレー粉である。もっとも同じS&Bの有名なS&B カレー 缶 (スパイスをミックスしただけのもの。粉末状で小さい缶に入っている。こちらもこちらでおすすめ)とは別物で、こちらは粒状のカレールウである。プラスチックの匙が付属しており、野菜炒めに2杯くらいを目安に振りかければおいしいカレー炒めができる。もちろん実際にカレーを作ってもよい。

あとは米の飯を炊くだけだ。更に安くあげるなら焼きそばも一つの手だが味が単調になるのでこればかり続けるのは辛かろう。

スパゲッティは安いのを買いだめておこう。バリラ とかグラノロ とか。コンロが一口しかないのでスパゲッティは難しい?そんなときには水漬けパスタ。食べる数時間前にスパゲッティを水に浸しておくと茹で時間を1分程度にできるというあの手だ。朝出かける前に水に漬けておいて晩飯に使おう。鍋にお湯を沸かし、鍋を避けてフライパンで具を炒め、フライパンを避けて鍋に水漬けにしたスパゲッティを入れ、沸騰したら避けてフライパンを再加熱し、鍋からスパゲッティを移す……多少手間だが1口でもなんとかなるものだ。もっと手を抜くなら具は炒めずにレンジで火を通してもよい。

パン食ならシリアルが欲しい。そこで良いものがある、カントリーファームのミューズリー だ。700gで648円(Amazonにて)……と思っていたらいつの間にか大幅値上がりしている。安いときに買いだめておこう。見た目は鳥の餌だし食べてみるとなるほど鳥の餌だが噛めば噛むほど癖になる味わいである。牛乳を注いでレンジで2分くらい温めるといい具合に柔らかくなって食べやすい。

なお輸入物のミューズリーはしばしば安売りされているので見かけたらすかさずゲットするとよい。私はカントリーファームのミューズリーを1袋100円で、Dan D Pakのミューズリーを1袋200円で手に入れたことがある。売れてないんだろうな、きっと。鳩になるのも悪くないというのに。

こうなったら代わりにフルグラ にしよう。800gで699円。Amazonではまとめ買いすると何故か高くなる。

果物も欲しいとなるとバナナとレーズン だ。レーズンはヨーグルトにまぜて一晩置くと水分を吸ってとてもおいしくなるのでオススメ。

事程左様になんとか食ってはいけるもの。言うではないか、いつもキャビアでなければならないわけではない 、と。こちらは滅法面白いスパイ小説でグルメ小説。ずっと版元品切れのままなのが残念だがぜひこの機会にご一読あれ。

2016年3月27日日曜日

VAIO S11にLinuxを入れる

VAIO S11を購入した。カスタマイズとしてはCPUをCore-i5 6200U、メモリを8GB、SSDをPCI-Express版の256GBにしてある。

それにしてもPCI-Express版のSSDは速い。

さて、感動したところでArch Linuxを入れよう。今回はWindowsを残してデュアルブートにしようと思う。

まずは前準備。Windowsが使っているパーティションを縮小してLinux用の領域を開けなければならない。

Windowsキー+xで開くメニューからディスクの管理を開く。
ドライブCを右クリックして「ボリュームの縮小」を行う。上の画面ではWindowsのボリュームを下限まで減らした。これでインストール先の用意はできた。

インストーラは2016.03.01(Kernel 4.4.1)を使用。UnetbootinでUSBメモリに書き込んである。

このPCはそのままではUSBメモリからブートできないので一旦UEFI画面に入る必要があるが、起動時に何かのキーを押す通常の手段では(なぜか)UEFIに行けなかったのでWindows側から指定して再起動する。

設定画面から更新とセキュリティ→回復→PCの起動をカスタマイズする(今すぐ再起動する)→トラブルシューティング→詳細オプション→UEFIファームウェアの設定→再起動、という長い道のりが必要である。これでUEFI画面に到達したらようやくUSBメモリからのブートが選択できる。

さてここで問題が起きる。USBメモリのブートローダで「Arch Linux archiso x86_64 UEFI CD」を選んで起動すると即座に固まる。とりあえずブートさせたければカーネルパラメータにnolapicを渡せばよい。ただしnolapicをつけると当然のことながらCPUが1コアしか認識されない。この問題については後述。

ひとまずこのままインストールを終了させてしまおう。Beginner's Guideの通りやれば難しいことはない。パーティションは空けた領域全部を1つにして、ファイルシステムはBtrfsにした。ブートローダはSystemd-bootにする。もちろんここでもブートローダのエントリにはoptionsにnolapicを渡さないと起動時にコケるのでお忘れなく。

その他に注意することは特にない。タッチパッドはElantechらしいのでよく使うxf86-input-synapticsではなくxf86-input-libinputを入れる。そのままでは一部の機能が使えないのでArch Wikiに従って設定を記述しておこう。その他ほぼすべてのハードウェアがそのままで動作する。

あとはお好みで自分だけのArch Linuxを作ろう。



nolapicを渡さないと起動しない問題について。

おそらく原因は https://bugzilla.kernel.org/show_bug.cgi?id=110941 これだと思われる。ここに書いているintel_pstateを指定する方法でも起動しないので疑っていたのだが https://git.kernel.org/cgit/linux/kernel/git/rafael/linux-pm.git/commit/?h=bleeding-edge&id=42341f87ba1bee4c5be95038c24abb69cbcf361a
このとおり先ほどの記事で出てきたパッチが取り込まれており、Gitから落としてビルドしたところ正常に起動して4コアとも認識された。

Linux rubiales 4.6.0-rc2-g9735a22 #1 SMP PREEMPT Sat Apr 9 20:29:36 JST 2016 x86_64 GNU/Linux
k
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model  : 78
model name : Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
stepping : 3
microcode : 0x76
cpu MHz  : 500.063
cache size : 3072 KB
physical id : 0
siblings : 4
core id  : 0
cpu cores : 2
apicid  : 0
initial apicid : 0
fpu  : yes
fpu_exception : yes
cpuid level : 22
wp  : yes
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs  :
bogomips : 4799.85
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model  : 78
model name : Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
stepping : 3
microcode : 0x76
cpu MHz  : 500.082
cache size : 3072 KB
physical id : 0
siblings : 4
core id  : 1
cpu cores : 2
apicid  : 2
initial apicid : 2
fpu  : yes
fpu_exception : yes
cpuid level : 22
wp  : yes
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs  :
bogomips : 4802.98
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

processor : 2
vendor_id : GenuineIntel
cpu family : 6
model  : 78
model name : Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
stepping : 3
microcode : 0x76
cpu MHz  : 500.016
cache size : 3072 KB
physical id : 0
siblings : 4
core id  : 0
cpu cores : 2
apicid  : 1
initial apicid : 1
fpu  : yes
fpu_exception : yes
cpuid level : 22
wp  : yes
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs  :
bogomips : 4804.42
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model  : 78
model name : Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
stepping : 3
microcode : 0x76
cpu MHz  : 499.334
cache size : 3072 KB
physical id : 0
siblings : 4
core id  : 1
cpu cores : 2
apicid  : 3
initial apicid : 3
fpu  : yes
fpu_exception : yes
cpuid level : 22
wp  : yes
flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs  :
bogomips : 4803.21
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

2016.04.01版のインストーラは試していないが、Kernel 4.4.5なのでおそらく同じ問題に遭遇するだろう。kernel 4.6になれば特にオプションなしで起動できるようになるはずなのでそれまで待つか、AURからlinux-gitを入れるか、お好きな方をどうぞ。

ちなみに1コアでカーネルをビルドすると何時間もかかって一昔前に戻ったような気分を味わえる。

Q:つまり?
A:時間が解決する