2016年のまとめ

これは pyspa Advent Calendar 2016 - Adventar の記事です。昨年のアドベントカレンダーから自分の2015年まとめを見てみたが、大したことしていなかった2015年に比べて、今年はいろいろやった。書いてみたらすげー長い。

101ND610-DSC_7589

スプラトゥーン

www.instagram.com

かなりの時間を溶かしたと思う。夜の予定があいたときはだいたい2~3時間ほどやっていたので、ざっくり一年、週4日で計算すると 50 * 4 * 2.5 = 500 時間ほどプレイしたことになる。500時間やってもまだカンストしてないなんて雑魚と思われるかもしれないが、もともとこういったアクションゲームが苦手でやりこんだことが一切なかった(上手い奴に負けるのが分かっていて口惜しいからやらなかったともいう)。しかしながら、この歳になると何かしら趣味をみつけたくなるもので、新しいことに挑戦してみて、脳のこれまで使ってなかった部分を開拓していく感覚が面白くてついつい続けてしまった。なかなかS+になれず、負けて悪態をつくこともあり妻の顰蹙を買いながらも続けてしまった。こんなにゲームに夢中になれたのいつ以来だろうか。つい先日、目標だったS+にもやっとなれたので、なんとか年内に一区切りつけることができた。


スプラトゥーン S 赤ZAP ガチエリア@マヒマヒリゾート&スパ / Splatoon S N-ZAP89 Splat Zones@Mahi-Mahi Resort

あー、この頃はヘタクソだったなあ、今もヘタクソだけど。さて来年にはNintendo Switchが新作スプラトゥーンと共に発売されるという。またやるのか…?

アニメ(とその関連メディア)

これも、かなりの時間を溶かしてしまった。手元のメモを振り返ると、新旧アニメ、OVA込み込みで52本観たとある。冬完走しそうなやつも合わせると60本近くになるだろう。それぞれの感想は別途まとめた。今みている秋アニメは全部終わってから別途書く予定。

kuenishi.hatenadiary.jp
kuenishi.hatenadiary.jp
kuenishi.hatenadiary.jp


オレ基準でダントツ面白かったのはアルスラーン戦記1期、デート・ア・ライブストライク・ザ・ブラッド、東京喰種、東京喰種√Aぐらいだろうか。今年制作のやつあんまないやん。これも50本 x 12話 x 20分 = 200 時間ほどは溶かしたことになる。いったいどこからこんな時間が湧いて出てきたのか。その答えは後半に。

トレーニング

体脂肪率は20%を切ってある程度健康になったので昨年の目標は達成できたと思う。今年はベンチプレスやチンニングなど標準的な科目の強度を上げていって、パワーをつけていこうとした一年になった。いずれ絞らなければならないのが課題なのだが。記録が残っているので、簡単に1年前と比較してみたいと思う。

2015E 2016E
体重 70.0kg 73.1kg
体脂肪率 18.3% 17.7%
ベンプレ 45kg 65kg
CoC N/A #1

今年の前半はわりとヒマだったのでジムに週2で行けたのだけども、後半になって仕事が増えて(アニメやゲームで夜更かしして)時間をとりにくくなって週1が怪しい現状でよくキープできているなというのが正直なところだ。ベンチプレスで自重を上げるとか、チンニングを満足にできるようになるという目標を1年かけても達成できていなかったのが悔やまれる。それぞれ課題は分かっていて、ベンチプレスは単純に頻度が落ちたことが原因だ。神経系の開発が一段落してこれから筋力を増やさないといけない段階だと思われるが、いかんせん練習量が足りないのだからないものねだりである。

チンニングに関しては、おそらく肩の可動域とパワーに左右でギャップがあって、よいフォームを開発できていないのが課題だと思われる。可動域が狭いのは肩の柔軟性もあるが、どうも三角筋とその下にある深層筋のいくつかが凝っていて正常に機能してないことが原因と思われる(きっかけはWeb魚拓の中の人のコメントだった)。なので、そのあたりを集中的にコンディショニングしながら背中側の筋力を開発していくことが遠回りながら正しい道だと考えている。具体的には以下の道具を今使っている(アフィリエイト)。

マッサージポールは小さめ硬めのものでグリグリやる。これは調子がよくて背中が柔らかいときに使う。

FINE(ファイン) パワー・ポジション・ボール ピンク FIN-525

FINE(ファイン) パワー・ポジション・ボール ピンク FIN-525

仕事で机に詰める時間が長くなってしまって、背中が硬いときはランブルローラーを使う。

これらの道具を使って1日に30分から1時間程度床の上をゴロゴロしているとかなり背中が軽くなる。いわゆるトリガーポイントからの筋膜リリースというやつだ。整体に通うのも悪くはないが、こういった道具を使って毎日コンディショニングすることで、トレーニングでも効率的に負荷をかけることができるようになる。というか、凝ってる状態で負荷をかけても意味がないし、ストレッチしようにも難しい部位が多いしで、これ以外に方法がないのが現実だ。

どうしても(アニメやゲームで夜更かしして)体の調子が悪くて、痛すぎてどうにもならないというときはストレッチポールを使う。ストレッチポールは突起がなくて曲率が低めなので体表面への刺激も限定的だが、その分手のひらで広く軽く押すような刺激が得られる。また肩甲骨を浮かせるストレッチも、ストレッチポールがあると簡単だ。

あとトレーニー向けの本もいくつか買ってあるが、まだ積んだままの状態だ。折をみて読んでいずれまたここで紹介できたらいいなと思っているのでお楽しみに。今年の学びはトレーニングそのものよりもコンディショニングの方が余程大切だということが分かった、それだと言っても過言ではない。

プログラミングとか仕事とか

4月にノーチラス・テクノロジーズというところに転職してJavaをひたすら書く生活になった。HTTP API作ってJSONをデコードして、裏側のミドルを叩いてスレッド管理して、JUnitとScalaCheckをまわして、結合テストもDockerを使って自動化して…というのを何とかこなせた。

残業も全くないし自分のペースで仕事ができる*1し朝は遅くてもよい。これ以上一体何を職場に求めるというのか…。まあ前職がゆるすぎたというか、まあ現職では実業とか実需に沿って実案件に関われているのでそれなりに大変なこともあるが、それでも(日本の)世間一般のコンピュータ技術者よりも時間と収入に余裕のある仕事なので私は幸福です。一日の労働時間でいうと5〜6時間程度しか実際は働いていなくて、前職よりも机に向かっている時間は短くなった。その分、通勤もそうだけど趣味に時間を溶かすことができるようになった(おい)。

写真とかプライベートとか

夏は神楽坂に旅行に行ってきた。勤務地よりも近いところにわざわざ旅行?って思うかもしれないけど、機動力が低くて食欲旺盛な我が家にはそういう場所がピッタリなの。こんときに今の携帯の背景画像を撮ったので、見たい人は直接僕に声かけてください。

101ND610-DSC_4457

科学未来館にも行ってきた。これは僕が主に楽しんでしまった。子供に科学の面白さを教えるには、いったいどうやればよいのか。

101ND610-DSC_3801

国立天文台三鷹キャンパスのオープンデイにも行ってきた。子供にレンズ、宇宙物理、コンピュータの面白さを教えるには、いったいどうやればよいのか。やっぱり俺が楽しんでしまったのだけど。写真は日本最大の赤道儀。1926年、カールツァイス製、焦点距離10210mmとかですよ。ヤベー

101ND610-DSC_6937

で、こちらはALMAという巨大な電波望遠鏡の心臓部といっていい部品、宇宙から飛んできた電波をパラボラで集約した後に電気信号に変換する部品。4Kまで冷やして雑音除去するらしい。こういうものを製造する設備も三鷹にあって、それも見学できたのだけどEEIC出身的にやっぱり俺が楽しんでしまった。同じフロアでマイスナー効果を使った浮遊物の展示もあって、息子はそれをみて楽しんでいた模様。

101ND610-DSC_6913

秋には日本橋で舟遊びをした。といっても運河をちょっとクルージングしただけだが、高度経済成長と江戸時代の海運機構が絶妙にバランスしていて、風も気持ちよくて脳汁が出てた。写真は首都高の日本橋付近のジャンクションかなにかだと思う。

101ND610-DSC_6617

息子と高尾山に登った。頂上で飲むビールはよかった。

101ND610-DSC_5336

高尾山に登ったときに友達に借りたマクロレンズがよかったので自分でも買った。今年はこれ一本しか買ってないはず。沼ェ…写真は妻の蒔絵を60mm/f2.5で撮ったもの。巻物の紐の幅がたしか0.2mmとかそういう感じのやつ。

101ND610-DSC_5529

Nikon 単焦点マイクロレンズ AF-S  Micro 60mm f/2.8G ED フルサイズ対応

Nikon 単焦点マイクロレンズ AF-S Micro 60mm f/2.8G ED フルサイズ対応

紅葉の季節に京都にも行ってきた。そこで撮れた今年のベストショット、facebookで公開しているので興味ある人はそちらへどうぞ。

まとめ

これだけイロイロ自分の時間でやっていると家族の時間ほとんどないんじゃないの…家族ほったらかして何やってんの…?といわれると返す言葉もないのであるが、が、が、幼子がいる方が時間の使い方が上手になったとは思う。何か大きくてハイリスク・ハイリターンなことに取り組むことは確かにできなくなった。が、小さな時間を積み重ねて量をこなすことができるようになったのは、いまの会社の理解があることも大きい。

  • 労働時間と睡眠時間を削って、アニメとスプラトゥーンに可処分時間のほぼ全てを費やした
  • 筋トレそのものよりもコンディショニング、筋肉のケア、食事が大切
  • Java始めました
  • 写真は相変わらず上手くならない
  • アフィ沢山はったので買ってくれ

*1:これは、プロダクト開発という自分のロールの特性も大きいのだが

2016年に観たアニメのまとめ2

  • ★0は、観る価値なし。途中で切ったまたは観て損した。基本的には掲載しないが、最後までみたものは誤ってもう一度みてしまわないために掲載
  • ★1は、一度くらい観てもいいかも
  • ★2は、ちゃんともう一度見返してもいい
  • ★3は、絶対に観とけオススメ、名作、僕の好みの作品

この頃から、よかった作品に投げ銭の意味を込めてサントラを買うようにしている。Blu-rayやDVDはちょっとデカイので。。。

機動戦士ガンダム サンダーボルト DECEMBER SKY

★2

ジオンの若い傷病兵が義足のままスナイパーとして戦っていたが、祖国を守るために人間をやめていく話。オルフェンズの阿頼耶識みたいな感じで手足をモビルスーツに直結すると操作性が上がり戦闘力が向上する。豊かな連邦軍と、貧しいジオン軍の対比が悲しく、宇宙空間にクラシックではなくジャズを流すという描写が新しい。PPVじゃなかったらなー

剣風伝奇ベルセルク

★2

蝕までの黄金時代を描いたアニメ。1997年放映なので絵柄は古いが、当時としては金かかってんなーという、ベルセルクに相応しいさすがの作画。

空戦魔導士候補生の教官

んー、まあ、主人公チート系ハーレムもののやつ。戦闘シーンはそれなりに迫力があるが…

BTOOOM!

★2

オンラインの爆弾対戦ゲームが現実化した無人島にいきなり放り込まれた世界ランカーが命をかけて生き残る話。こういう極限モノは人間の喜怒哀楽、愚かさとか切実さがうまく描写されていると非常に面白くなる。が。が。が。1期で打ち切りってどういうことよ…ものすごくいいところで終わってしまって消化不良である。不満。

学戦都市アスタリスク 2nd SEASON

空戦魔導士候補生の教官落第騎士の英雄譚と区別ができないやーつ。おそらく原作はゼンゼン中盤なのだろうけど、さすがに2期までやってアニメ的にはダレてきた展開。伏線回収はまだまだ先で、さすがに企画と制作の体力が尽きたか。うまく幕引きできるタイミングがあったらよかったのにね。

花咲くいろは

true tears, TARI TARI に続くPA Worksのヒット作。18歳未満を早朝から夜までこき使ってもええんかいという違法性にはとくに触れることなく淡々と進んでいく。喜翆荘で働く三人の高校生が自信をつけていくお話なんだけど、ぼんぼり祭りは非常にキレイでよかったし作画も文句がないのだけど、なんというか、前作や前前作に比べるとワクドキ感というかハラハラしなかったので僕の中では重労働日常系に分類してしまいそう。若いっていーなー。

TARI TARI

★2

湘南で合唱をやる高校生の話。とにかく主人公の和奏が可愛い、年頃の彼女の心の奥まで見て若返った気になれる良作。これはサントラを買った。

TVアニメ TARI TARI ミュージックアルバム~歌ったり、奏でたり~

TVアニメ TARI TARI ミュージックアルバム~歌ったり、奏でたり~

true tears

★3

PA Worksの出世作ということで、たまたまバンダイチャンネルで観れたので、そのままちょっと観たもの。もともと同名のゲームが原作だが、アニメでは岡田麿里が自前の構成で脚本から作った話。元が女の子の涙を手に入れるとクリアというゲームなので、主人公の男の子が3人の女の子にモテて最終的に誰を選ぶの?!みたいなストーリーなのだけど、若者だなーという心の動きが繊細に描写されていて、こういうジャンルもあるのかと感心した。2008年放送だけど、当時観ても僕が若すぎて良さが分からなかっただろうな…という。バスケやる比呂美がかわいいです。サントラ買いました。

true tears オリジナルサウンドトラック

true tears オリジナルサウンドトラック

クロスアンジュ 天使と竜の輪舞

★2

どこが…と思ったらこれが、舞-HiMEでやらかしたサンライズだった。舞-HiMEからコメディ要素を抜き取って百合と奴隷制度とアルカトラズ、遺伝子操作、多世界解釈SFを追加するとこれになる。女子校ってこういう感じなのかな…と想像して怖くなるなどできる良作。

ダンジョンに出会いを求めるのは間違っているだろうか

★2

面白いので一気に観てしまって★2をつけたが、もう一度みたいかといわれたら微妙かもしれない。

2016年に観たアニメのまとめ3

  • ★0は、観る価値なし。途中で切ったまたは観て損した。基本的には掲載しないが、最後までみたものは誤ってもう一度みてしまわないために掲載
  • ★1は、一度くらい観てもいいかも
  • ★2は、ちゃんともう一度見返してもいい
  • ★3は、絶対に観とけオススメ、名作、僕の好みの作品

東京喰種

★★

これは原作が面白いのだろう。人類を脅かす天敵グールが人間の姿をして社会に溶け込んでいるという危機感を散々煽ったあと白鳩という天敵も作ってバランスをとっておいて、実はグールにも社会性、人間性があって、そいつを押し潰しているのはむしろ人間の側なんじゃないかとか、そういう背景の中である日突然人間をやめさせられてグールになってしまった少年の話。しかも最強のグールになってしまった話。ヤモリとか利世とかマジで頭おかしいヤツもいれば、グールなのに人間以上に人間らしい芳村とかがいて、はて人間性とは何だったのか知能とは何だったのか、基本的人権とは何だったのかみたいな話を沢山想像させる良作。…が、いいところで終わる。2期みないといけない。

Re:ゼロから始める異世界生活

大人気だった本作、元祖異世界ものでRPGよろしく死んだらセーブポイントから再開できるという斬新なプロットからスタートしてとても期待できた。白鯨倒して村を助けるところまでで2期が終わった。展開が予想できるようなできないような絶妙な線を進み続けただけあって楽しんで見れた。いっこ気になるとこといえば、渡鬼よろしく全部解説していく主人公の独白(ただし周りに聞いてほしい)がどうしても耳についてしまったくらいか。あと主人公ヘタレすぎ…だけどきっとそれは僕がすれたオッサンになってしまったからだろう。

ねじ巻き精霊戦記 天鏡のアルデラミン

★★

最初は作画がキレイだなーと思って見ていたのだけど、よくみると僕の好きな戦記物だとわかって原作も買ってみたらそれがわりと面白かったので星追加。基本的には主人公による戦略謎解きものなんだけど、一部がオーバーテクノロジーを少しずつ開示していきながら敵を倒していくのがよい。よいのだが。戦場で歩兵がメットなしとか女性兵士がスカートはいてるとか、ラノベ的な都合はあるにせよ、いくらなんでも現実感が…

野戦が主体なのでどうしても地形の描写がストーリーの説得力に直結するのだけど、アラファトラ山脈北側の描写がちょっと残念だったかな。師団規模を大隊ひとつで抑えるにはかなり工夫が必要なのは確かなんだけど、もっと雄大に描けたはず(予算がねェ)。アニメ化するにあたってあのキャラデザは大成功だと思う。

魔装学園HxH

★0

なんか、まあお色気モノつい観てしまった。こういう感じのやつ今まで地上波にはなかったよね。

マクロスΔ

お馴染みマクロスシリーズの最新版アップデート。最新鋭の宇宙戦闘機チームが歌姫の支援を受けて敵を倒して宇宙を守る基本プロットは変わらず(変わらないのがよいのです)、作画と音楽がモダンになって帰ってくる。コンピュータシステム全盛の今風としてテクノポップな曲が多くて好みだ。会いに行けるアイドルのアンチテーゼとして歌えるアイドルをもういちど提示した、といったところか。

うっかりサントラを間違えて買ってしまって、ワルキューレのアルバムと合わせて3枚も円盤買ってしまった。。。

Walkure Trap! (通常盤)

Walkure Trap! (通常盤)

Walkure Attack!(通常盤)

Walkure Attack!(通常盤)

クオリディア・コード

おそらく原作が面白いんだろうな。話が進むに連れ作画にかけられる工数がどんどん減っていくにも関わらず、話の展開と後半明らかになる意外な秘密が面白くて最後まで楽しんで観ることができた。主人公があまりに魅力がなく残念なのに観れる良作。

ベルセルク★★

最近のメディア展開を見ていると、ガンダム税だけでなくベルセルク税もどうやら最近制定されたらしい。黄金時代編の劇場版と同じキャスト、同じ3D作画でかなりクオリティが高くて楽しめた。いくつか原作をアレンジしているところがあるので少し混乱してしまうが、それでもドラゴン殺しのSE*1がとても爽快で一聞の価値がある。原作を読んでおくとなおその音を楽しめると思う。それを聴くためだけに見てもよいレベル。あの音つけた人は天才だと思う。

七つの大罪 聖戦の予兆

人気漫画のアニメ2期。

機動戦士ガンダムUC 0096

ガンダム税を払ったのだけど、Aimerのエンディングテーマがよかった。 UnChild というアルバムの bloody f8 という曲をアレンジしたものだ。Google Musicにたくさん曲があるのでたまにそれを聴いている。

七つの大罪

人気漫画のアニメ1期。少年誌らしく飽きさせない工夫があちこちにあってとても楽しめる。でも原作者、もうちょい休んでもいいんだぜ…?

凪のあすから

★★

P.A. Worksものは一通り観ておこうと思って、古いものから順にみてるのだけど、どうやらこれは当時大ヒットしたらしい。海に人が住んでて、果たして流体力学とは何だったのかという疑問だけを隅においておけばSF要素も超常現象も楽しめる。やはりこれも岡田麿里のシリーズ構成で、若者たちの繊細な心理がよく描写されていて楽しめる。前半はちさきが、後半はうみながかわいいと思います。

RDGレッドデータガール

これもP.A. Worksもの。記紀系の憑依モノといえばよくえるプロットかな?前生徒会長の神崎先輩がよかった。

アルスラーン戦記 風塵乱舞

港町ギラン編のみ。つーかあんだけ期待させといてそんだけ?!王都奪還までいくでしょ、これっ。1クールに収めるのに中途半端なサイズなのはわかるけど、3期に期待できない限りこの2期はいらなかったんじゃないの説…

IS<インフィニット・ストラトス> OVA ワールドパージ編

★★

IS<インフィニット・ストラトス>

★★
なんだよどうせハーレムものだろ?って思ってたけど、案外おもしろい。シャルロットさんかわいいですね。このときの花澤香菜のCVが非常によくてお気に入りです。OVAまでは惰性で結局見てしまったよ。

ベルセルク 黄金時代篇 I 覇王の卵

剣風伝奇を見ていればまあこれは見ていなくてもいいかも、OVAなので尺がなくて、重要なシーンをかいつまんでくっつけた感じ。スタッフ・キャストが同じなので、黒い騎士編を制作するための作画実験だと思えばまあ許せるが、ちょっとナァ、これじゃあ初見のひとに良さは伝わらないよ。

ストライク・ザ・ブラッド

★★

「雪菜の作画にはかなりこだわった」とどこかで制作メンバーが言っていたとおり、吸血鬼がハーレムを運営する…のだけど、中でもヒロインがよく描けているやつ。暁の帝国編はなかなかよい見せ方で、今後のシリーズ展開に期待、って思ったらもう制作はなさそうである。残念。

ガンダムTHE ORIGIN III

226事件とかを美しく描くとこうなるのかなというありがたいお話。このまま流れで一年戦争に突っ込んでいくのかと思うと日本人は全員これ見て考え直した方がいいんじゃないのって思う。シャアは残酷ですナァ…ちな転職時に全巻プレゼントしてもらってそれ読んだので、ストーリーは知ってた。

*1:Sound Effect

Google翻訳でとても仕事で助かった話

Google翻訳がニューラルネットワーク応用で「さらに進化」。翻訳ソフト感うすれ、流暢さを身につける - Engadget 日本版にもあるように、新しいNMTのGoogle翻訳はこれまでの機械翻訳とは段違いの性能で評判だ。わたしも少しずつ使ってみたりしていたのだが実際に職務でインパクトがあったのでここに記録しておこうと思う。

...

ご存知の方もいると思うが、わたしはApache Mesosを使ったソフトウェアの開発を仕事にしている。これは単体のサーバーでも動作するので、開発するときはほとんど1台または2台くらいのサーバーを使っている。しかしながら、実際の環境ではもっと多くのサーバーがクラスタとなって動作する。当然、複数のサーバーで動作するときしかでない問題は多い。詳しくは省略するが、今回もその件に漏れず複数サーバーないと出ない問題に当たって、それ自体はMesosの仕様を見逃していたせいなので修正はすぐできたのだが、再現試験などの環境が家になかった(オフィスにはあったのだが)。

で、Debian上のVirtualBoxVMを4台上げて手元で再現させようとしたのだが、このとき4台のVMをNATネットワークでつなごうとすると、そもそもゲストVMがネットワークにまったく接続できない。ポートフォワードも設定したのだが、ホスト側からもゲストにTCPで全くアクセスできない(VirtualBoxGUIからはアクセスできた)。オフィスにあるMacOSのNATネットワークなら動くのなぁ、困ったなあ…。で、こりゃVirtualBoxのバグだろといろいろ調べていたのだが全然でてこない。こまった、この問題の再現と修正確認ができないとリリースできない。でも調べるの時間かかりそうだなあ…OSSだから仕方ないんだけど、ヤダなぁ…ちゃんとやったら1週間でできるかなぁ、オフィスいってMac使った方が早いんだろうけどなあ…などと逡巡していた。

いろいろやって、それっぽいエラーメッセージが出たのでそれで検索すると、次のページが引っかかった。

gist.github.com

はい全然わかりませんね。同じ漢字文化圏といってもこんなもんです。で、これを精度がよいと評判のGoogle翻訳にかけてみた。そのまんまかけてみただけなのだが、結構英語が読める。まあ英語といっても大概なんだが、よく訓練された俺達は、同じ意味不明なら日本語よりも英語の方が理解できるのだ。どうも asciidoc aware ではないらしいが、日本語に訳してもこれは全然わからない。

しかしVirtualBoxのは、名前を見て、この問題は、それがすべての可能性のリードにであることであると推測関連1 Virtualboxのゾンビがあり、例外、ないモニタポート2204がありませんログインします。
[ソース、コンソール]

まとめると、

  • VBoxNetNAT というNATネットワークを管理するプログラムはroot権限でしか動かないようだ (ユーザー権限でやると になってしまってにっちもさっちもいかなくなる→コレがだんまりの原因っぽい)
  • "VBoxNetNAT: Effective UID is not root (euid = 1000 egid = 100 uid = 1000 gid = 100)" というメッセージからわかる
  • ps してみてもわかる
  • そのあたりのコマンドに +s 権限をつけたら動くようになる(実施前にみたら、たしかに s ついてないやつが多かった)
for bin in VirtualBox VirtualBoxVM VBoxNetAdpCtl VBoxNetDHCP VBoxNetNAT VBoxHeadless; do
    chmod u+s /usr/lib/virtualbox/${bin}
done

これでVirtualBoxをふつうに再起動するとなおる。で、ポートフォワードもゲストOSのネットワークアクセスも普通にできるようになった。

まとめ

  • VirtualBoxOSS なので問題は自己解決するのが原則
  • ネット上に同じ問題でハマってる人は少なかったが、答えが中国語で書かれてていた(私は中国語が読めない)
  • Googleの自動翻訳(中→英)が自然すぎて解決策を正しく理解できた
  • 結果、自分で調査したら解決できたかどうか分からない問題が半日というか数十分で解決した
  • 仕事ができて身長が5cm伸びた

Paxos-based replicationはEventually consistentではなくstrongly consistentである

ちょっと発言力のありそうな方がテクニカルに誤りを書かれていたので、ここでひっそりと訂正しておきたい。

このスライドの43ページ目に、

The problem with Paxos-based algorithm is that replications are eventual consistent.

と、色付き文字で協調されて書かれている。このスライドで主張したいことの本筋ではないが、Spannerの性能がよいこととは関係がなく、Paxosなどのレプリケーションと、トランザクションとの関係で誤解を広めそうなので指摘しておきたい。辻マサカリと言って差し支えないだろう。

PaxosはStrongly consistentであることがMade Simpleの論文で証明されている(Strongly consistentが何かはまた別の機会にここに書こうと思う)。ちょっと長いが引用しておこう。

To learn that a value has been chosen, a learner must find out that a proposal has been accepted by a majority of acceptors. The obvious algorithm is to have each acceptor, whenever it accepts a proposal, respond to all
learners, sending them the proposal. This allows learners to find out about a chosen value as soon as possible, but it requires each acceptor to respond to each learner—a number of responses equal to the product of the number of acceptors and the number of learners.

ベタにいうと、Paxos-basedなレプリケーションでも過半数読まないと値は決まらないので、それに従ってる限り誤った値が読まれるということはない。

Eventual consistencyとは「古い値が読まれることがあっても、最終的には最新の値が読めるようになる」なので、これは真っ向から定義に反するわけだ。

ではPaxosの定義はともかく、Spannerにおける実装はどうなんだということになる。Twitterでは日本語で、似たような趣旨のことを書かれている。 SOの記事
Paxos algorithm in the context of distributed database transaction - Stack Overflow を引いて

というPaxosに伴うEventual Consistencyの問題をwrite処理にタイムスタンプを付けることで、あるレプリカが、クライアントが要求する時刻より新しいデータを返せるかを判断できるようにしたのがSpanner

と書かれている。上記の通りPaxosにはECの問題なんてないし、SOの記事にもそんなことは1ミリも書かれていないのだが、どうしてこういう誤解がされたのか、せっかくなのでSpannerの論文を当たってみよう。 2.1 の冒頭でレプリケーショントランザクションについて語られている。

Unlike Bigtable, Spanner assigns timestamps to data, which is an important way in which Spanner is more like a multi-version database than a key-value store. A tablet’s state is stored in set of B-tree-like files and a write-ahead log, all on a distributed file system called Colossus (the successor to the Google File System [15]).

ここから分かるのは、Spannerではひとつの行にタイムスタンプで複数のバージョンを保持できるようにしているということだ。そしてWALがある。ということは、Tabletに対する更新はおそらくキー毎ではなく、Multi Paxosのように1Tabletにつき一つのWALを合意し続けるような作りであることが想像できる*1が…先を読んでみよう。

To support replication, each spanserver implements a single Paxos state machine on top of each tablet. (中略by引用者) Each state machine stores its metadata and log in its corresponding tablet. Our Paxos implementation supports long-lived leaders with time-based leader leases, whose length defaults to 10 seconds.

うむMulti-Paxosそのものだな。ちなMultiPaxosの特許は10年ほど前にMSがとっていて日本の特許公報でも見つけることができる。この書きっぷりからして思いっきり侵害していると思われるがそこは西海岸の論理でそんな野暮なことはしねーんだョ〜というのが垣間見えておもしろい。

Fig 2をみると分かるが、ここでのレプリケーションはデータセンター間のレプリケーションを指している。そしてちょっとあとに重要なことが書かれいている。

Our implementation of Paxos is pipelined, so as to improve Spanner’s throughput in the presence of WAN latencies; but writes are applied by Paxos in order (a fact on which we will depend in Section 4).

PaxosのWriteはパイプライン化してWAN超えても高速に送れるようになっている。で、Writeは必ず時間順に適用されると書いてある。TrueTimeを使っているからこんな芸当ができるんだね。で、勘違いされたのはすぐ次のここだと思われる

Writes must initiate the Paxos protocol at the leader; reads access state directly from the underlying
tablet at any replica that is sufficiently up-to-date. The set of replicas is collectively a Paxos group.

つまり、readsはPaxosをすっとばしてTabletに直接行くと書いてある。もとのPaxosにあるようなlearnerを通しての読み方ではなく、近くのデータセンターのTabletを直接読む...んだったら、そりゃあ間違った値が読めてしまっても仕方ない。しかしこれは上でも説明したようにEventual consistencyではない。sufficently up-to-dateな値を読んでも正しい値が読めるのは、たまたまSpannerでTrueTimeとそれに伴う並行性制御が適切に設計されているからである(4章で説明されているように)。

そもそもConsistencyというのはそのプロトコルが規定したR/Wの組み合わせパターンのそれぞれの結果のスペックであって、PaxosでもSpannerでもそういうスペックは規定してないのだからEventual consistencyと勝手に呼ぶのは間違っていて...Spannerの論文にもそんなことはどこにも書かれていないし…ブツブツブツブツ。

*1:ちなみにこれはRiakのStrong Consistencyでもやってるやーつ

あなたの知らない time(1) の世界

The moment

自分が書いたプログラムのメモリ使用量を測定したいことがある。プログラムがOOM Killerによってお亡くなりになった場合や、ページフォルトをなくして高速化したい場合などだ。定常的に起動するサーバーのプログラムなら、sarや meminfo など(今なら Datadog とかだろうか)を使ってじーっと見つめるわけだ。もっとモダンにやるなら perf や DTrace を使ってもよいかもしれない。しかしこれらのツールは基本的にプロセスIDを渡してサンプリングして外から覗く方法だ。

わたしのユースケースはデーモンプロセスではなく、 main から入って必要な計算をして、それが終わったら main を抜けるバッチジョブ(単にコンソールから実行して終わるまで待つ、いわゆる "Hello world!" 的なやつ)だ。これだと、プログラムが起動して終わるまでそこそこの時間で終わってしまって、外部プロセスを一緒に起動するものだとタイミングを合わせにくい。それに、外部からのサンプリングでは最大使用量は分からないから、キャパシティ設計やOOM Kill防止には使えない。サンプリングのタイミングのメモリ使用量しか測定できず、サンプリングの周期を短くすれば性能を阻害してしまうし、長くしてしまえば最大使用量に近い値をとる可能性が下がる。もっと文句をいうと、VisualVM使えねえんだよ!!

うーん何かよい方法はないものか…とインターネットを放浪しているとやはりそこはStackOverflowだ。残念ながらそのページは失念してしまったが(昨日のHistoryを見返す気にはなれない)、「Javaでメモリ使用量測りたいんだけど、どうしたらいいの?」というよくある質問に「Macなら " time -lp java ... " でカンタンだよー」というJavaMacも実は全然関係ない質問だった。もっとドンピシャなやつは見つかったのだけど、用語の組み合わせからして検索しにくいものであることはご理解いただきたい(追記:別マシンのブラウザに残っていた)。

でまあ、いそいろ調べて BSD time(1)とかGNU time(1)をみているうちに Linux でも "/usr/bin/time -v " でMax RSSを調べられることがわかった。ちなみに最初は BSD time(1) のコード見てどうやってんのかなーとか調べていたが、始めから GNU time(1) のマニュアルを丁寧に読めば全部わかる話だった。どちらも getrusage(2) というPosix APIを叩いて子プロセスの情報をカーネルからとってくるようになっている。BSDは調べていないが、Linuxでは /proc/[pid]/stat から情報をとってきているようだ。なので、 malloc/free の合計とかにはなっていなくて、OSからみえるページ単位とかのはずなんだがその割にはRSSが4Kにアラインされていないのでよくわからない。そもそもRSSって何なんだ。

手元にある、4GBほどメモリを使うテストプログラムを動かしてみると、こんな感じになる。

$ /usr/bin/time -v ./a.out                                           
/sys/kernel/mm/transparent_hugepage/enabled: [always] madvise never
memory allocator performance test
2097152 of memory pointers with 2048 bytes; 4.295 GB total
time: 181.617 sec
        Command being timed: "./a.out"
        User time (seconds): 181.99
        System time (seconds): 1.11
        Percent of CPU this job got: 99%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 3:03.41
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 4838748
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 1205812
        Voluntary context switches: 1
        Involuntary context switches: 2704
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

ページフォルト数、ファイルIO、ネットワークIO、コンテキストスイッチ数、ページサイズからon-cpu timeまでわりと重要なものがサクッと出るので、DTraceとかperfとか重いやつをいきなり始める前にこれでマイクロベンチをとってみるのがよいだろう。ちなみに "-f FORMAT" で任意の形式で出せるし、出力をファイルに出すことも可能だ。つまりこういう風に無駄に結果をJSONに保存することもできる。

$ /usr/bin/time -f "{\"maxrss\":%M}" -o out.json lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial
$ cat out.json
{"maxrss":11864}                                 

ちなみに、ソースコードBSD time の方がさっぱりしてて読みやすいけど、Formattingの機能はない。GNU timeはやけにゴチャゴチャしてるなーと思ったんだけど、Formattingのためだったというのは後で気づいた。

もうちょっと真面目にやるなら、Linuxには最近 eBPF という優れたトレーシングフレームワークが入って、そのフロントエンド的なツールとして IOVisorというスグレモノがあって、こんな感じで全てのメモリアロケーションをトレースできる。これをちょっと書き換えたらMax RSSなんてお手のものだし、JVMの中身がわかっていればヒープとページの関係もよくわかる。

ちなみに、Mac OSについているBSD timeはなかなかふざけていて、manpageを見てもRSS関連は単位が明記されていない。プログラムの出力をみても分からない。参考にと書かれいている getusage(2) のmanを見ようとしたら入っていない(ちゃんとXCodeも入れてるつもりだ)。で、ヘッダにコメントであるかな?と、manpageにかかれている /usr/include/sys/resource.h を見てみようとすると

$ less /usr/include/sys/resource.h
/usr/include/sys/resource.h: No such file or directory

である。Akisute先生じゃないが、🍎📠である。自作のプログラムで検証するに、どうやらバイト単位のようだが…

$ /usr/bin/time -lp ./a.out
/sys/kernel/mm/transparent_hugepage/enabled: Bad file descriptor
Cannot open THP setting file. Maybe not Linux?
memory allocator performance test
4194304 of memory pointers with 2048 bytes; 8.590 GB total
time: 417.990 sec
real       425.90
user       153.47
sys        204.87
11523166208  maximum resident set size
         0  average shared memory size
         0  average unshared data size
         0  average unshared stack size
  44780389  page reclaims
         0  page faults
         0  swaps
         0  block input operations
         0  block output operations
         0  messages sent
         0  messages received
         0  signals received
     10802  voluntary context switches
   2338890  involuntary context switches

知っていたのにここまで読んでくれた方には感謝の念しかない。そう私が知らなかっただけ。

2016年に観たアニメのまとめ1

王都炎上―アルスラーン戦記〈1〉 (光文社文庫)

王都炎上―アルスラーン戦記〈1〉 (光文社文庫)

学戦都市アスタリスク

★1
ヒロインが赤髪で識別不能シリーズのひとつ。作画は一番綺麗。2期までなんとか頑張ってみたけど残念なとこで打ち切り。。。まあ作画のクオリティ以外は月並みではあったかもしれない。原作は長く続いているので、もっと面白いとこがあったのかも?

落第騎士の英雄譚(キャバルリィ)

★1
んー、まあそれなり。魔法騎士学園最弱もの…とみせかけて最強ものなんだけど、知恵を絞れば人間なんでもできる!って価値観は好きだ。アルドノアゼロの三話までみたいな感じで楽しめる。問題は主人公しか知能がないことだが。。。

鉄血のオルフェンズ

★2
火星の気圧で人間生きてられんの?!って以外は楽しめる作品。どこまでも全ツッパなオルガとミカをみてるとハラハラしかないのだけど、わしも歳をとってしまったか。。。モビルスーツは手描き?で生き生きとなっている。戦艦はGCでマットな仕上がりに。地球外円軌道統合統制艦隊のアホっぽさがちょっと鼻についたかな…少年兵がここまで戦うのは非常に怖い時代なんだけど、阿頼耶識システムが背負った業はかわいそうで、自分の子供がこうなったら…と思うと非常に悲しい。でも観てしまった…

グリザイアの迷宮グリザイアの楽園

★2
主人公の呪われた過去が明らかになって、でも女の子に囲まれてユートピアへGo!的なハッピーエンドがみられる。やっぱり原作がアダルトコンテンツだとタブーが少ないからシナリオが尖って面白くなる。ことがある。

グリザイアの果実

★2
んー、まあなんというか、原作っぽい。最強主人公、みてて落ち着く。

ヨルムンガンドPERFECT ORDER

★2
ココの頭おかしい陰謀が徐々に明らかになる2期。映画とかのフィクションでも古くからよくあるネタなのでまあなんというか、各話の面白さに対して若干拍子抜けするんだけども、原作読むともっと面白かったりするのだろうか。

ヨルムンガンド

★2
頭のおかしい強い人たち(ほめている)が頭のおかしい悪いヤツと戦う話。そもそも武器商人の話なのでみんな悪いんだけど。戦闘シーンは静動が対照的で緊張感があってよい。

GOD EATER

★1
ゲームっすね。よわっちかった主人公が圧倒的なモンスターに立ち向かっていくお話。雨宮ツバキさんがやはり少佐…って声だけなんだけど。シナリオはゲームらしく月並みだが、作画がゲームばりにきれいなので一見の価値はある。

精霊の守り人

★2
強力な女用心棒の主人公が戦いながら、父親に命を狙われる流浪の王子を助けて国を救うお話。強くて老練で
戦いの駆け引きに優れた女というかその顔…完全にこれ少佐やないかと思ったらやはり監督は神山健治だった。SFではないので未来兵器を駆使した派手なアクション!とはいかないけど、駆け引きも含めて戦闘シーンは魅せるものが沢山あってよい。本当に必要な場面でしかチャンバラしないのもよかってた原作でいうと一巻だけで未読なんだけど、これを2期26話までかなり拡げていてはてさてマジック…

原作者が田中芳樹のファンで、光文社文庫の巻末にあとがきを寄せている。それを読むとこちらの原作も面白そうだなと思える。

アルスラーン戦記

★3
これをみて私は戦記ものが好きだったのだなと気付いた。おかげさまで文庫をとりあえず大人買いしてしまい…三国志でいう劉備みたいな、わりと何もできない主人公が頼もしい味方を集めて戦うお話。銀仮面卿はなんというか、シャア・アズナブルのような魅力があって、でもシャアのように狂気を身に纏うではなく、どうなっていくかは原作でもまだこれから感があって楽しみである。原作ではモブだったキャラが荒川弘に大抜擢されているので、原作しか読んでない人にもこれから勧められる一作。

英伝が好きな人は原作は当然だし、アニメも面白く観られることだろう。コミックスも結局買い続けている

舞Hi-ME

★1
なんつーか。。。ガンダムは出てこないけど、ガンダム納税ここまでやるか?俺頑張った感はある。登場するキャラクターはうまくテンプレを体現していて見てて飽きないし、シナリオも稀有壮大盛り上がりをみせつつ、女の子が健気に頑張る感じはまさに王道。この方向好きだけど物足りない!って人はクロスアンジュを観るしかない。