ISUCON 2017 参加記録

@li_saku, @kyuridenamida, @akensho でluminousというチーム名で出ました。
最終的には 20位 203,319 luminous ぽいです。
参加記書かなさすぎて何を書いたら良いか忘れたので適当に書きます。

きゅうりの参加記→ ISUCON2017参加記 - kyuridenamidaのブログ

記憶に残っていること 時系列ばらばらかも
  • akensho さんが起動時に実行するスクリプトとか、解析用のツールとかを全部用意してくれてて、特に pprof とかめっちゃ便利でこれを元にボトルネック潰しまくれたので、サイコーだった。
  • kyuridenamida が ssh うまくいかなくて github 繋がらんとか言い出しては?って言いながらなんとか一緒にがんばっていた
  • ソース読む前にアプリケーション一通りさわってみて、この URL はこの挙動をするみたいなのを一通り把握した。
  • 画像がそのまま BINARY として DB にいれられていたから、やべーだろということでファイルに書き出すようにした。←ここ戦犯ポイント
    • この時点でファイルサイズを見るべきで、いろんなユーザの /profile を見ていたはずでアイコンなんかでかいなとは思ってたはずなのにサイズを見られてなかったから、もっとキャッシュについて調べることに気づくべきだった・・・;;
  • Nginx でキャッシュを効かせる方法を調べて、画像ファイルは静的を返すようにおまじない書いたらスコアが爆上がりした。
  • ベンチマークはかるページ?ポータル?で出てるメッセージを見るとなんか webfont とかがあるので、 MIME を調べて conf に追加したりする。
  • サーバ1台でやってたけど、 web1 サーバを Nginx 専用、 web2 サーバをアプリケーション専用にすることにしていい感じにしてもらう。
  • /fetch についてがんばったりしてたんだけど、よく考えるとスコア加算されないから、 /message とか /profile とか /login を見るべきだった、レギュレーション読み込みがあまりにも遅かった。
  • /fetch がスコア加算されないってレギュレーションに書いてあったのに無限にリクエスト飛んできてたから、参考実装に書いてあった sleep を復活させるとスコアが爆上がりした。ここで sleep ガチャもするべきだった。
  • ベンチマーク動かしてるときに Nginx 用で top -c を眺めて、 akensho さんが「このCPU使用率はスコア17万ぐらいやで」とか「これは徐々に下がってきてるからたぶん数万やで」とか言い出して、謎のスキルを会得していた。スコア予測マスタリ★
  • 最終的に、まったく同じアプリケーションを動かすのに reboot 前後でスコアが17万ぐらいの差が出るようになって、ガチャやんけとなり40分ほどチキってガチャを回さなくなって、20万ぐらいでやめてしまった。
  • sleep 入れるとスコア上がるのがわからなくて、その間別の処理出来るからじゃね?(適当)みたいなことを言いまくっていたんだけど、よくわからないままだった。
  • 最大の戦犯ポイントはここで、やめようって言い出したのはわたしで、最大スコアは 215,000 ぐらいだったので、もし回し続けていれば予選通過できていたはず。
  • くやしい;;
モチベーション
  • 本戦がある 11/25 は CODE FESTIVAL 2017 の開催日であって、 kyuridenamida と akensho さんは関係者のため出られない。
  • わたしは誕生日なので出られない。
  • よって、本戦通過してドヤ顔で「誕生日なので棄権します!!」って言いたかった
  • もう少しで言えた。・゚・(ノД`)・゚・。
おもしろ commit log

f:id:li_saku:20171025132243p:plain

  • そのに
  • これは sleep ガチャ回そうとしていたところかな

f:id:li_saku:20171025132310p:plain

おわりに

めっちゃ悔しくて、もっと web アプリケーションの速度についてとかインフラとか SQL 文とか解析についての能力があれば予選通過余裕で出来ていたかもしれないのに、後悔が多すぎてめっちゃ悲しい。
頼りっぱなしだったし、 N+1 問題も頭フル回転してる kyuridenamida に全部任せてしまったけど、分担できればもっと潰せたはず。
悔しいよーーーーーーーーーーーーーーーーーーーーー
でも楽しかったのでありがとうございました。開催&出題ありがとうございました。

OPENREC のアーカイブをmp4で保存する

毎回忘れてぐぐるのでメモる。rubyで書いた記憶があるんだけど、コマンドを回しただけだった。

他人の黒歴史残したい人、動画化したいけどキャプチャしたりするのだるいし画質悪い…って人向け。

必須:ブラウザ(ページのソースが見られればなんでもいい)、ffmpeg

ffmpeg 入ってないひとは、 (ここ)https://www.ffmpeg.org/download.htmlGet the packages で自分の OS を選んで、リンクに飛んでダウンロードする。使い方は…調べたほうが早そう。簡単に言うと、Macならなにも考えなくても使えそう。 Windowsならダウンロードして解凍→cmdでそこに移動して実行する。

わかりやすいと思った→windowsにffmpegをインストールする | ぱーくん plus idea

残したいアーカイブのソースを見る。
  • Chromeなら右クリック→ページのソースを表示。
  • m3u8 で検索すると url がひっかかるので、それをメモる。
  • 期待するURL : https://*.cloudfront.net/*/normal.m3u8 適当に脳内変換してね。
ffmpeg につっこむ。
  • コマンドプロンプトffmpeg -i "ここにメモった url を入れる" -c copy out.ts で、ひとまずローカルに out.ts という名前でファイルが落ちてくる。
  • 長いので気長にまつ。だいたい放送時間 / 3秒ぐらいはかかる。
  • 出力なくなったら(終わった雰囲気出てたら)おわり。
  • 期待する結果: out.ts って名前の動画ファイル。
mp4 に変換する
  • ffmpeg で変換してあげる。面倒なので音声とか映像コーデック変えたりしません。
  • ファイル名そのままなら ffmpeg -i out.ts out.mp4 とかする。
  • エンコードは時間かかるので気長に。わたしのスペックならだいたい放送時間 / 2秒ぐらい。あとCPUパワーもけっこう食う。ファンがうるさい。
  • 期待する結果: out.mp4 って名前の動画ファイル。

これで mp4 動画が落ちてくるので、黒歴史保存し隊もニッコリですね。

異世界スマホ11話はすごい

結論

全然やばくないしやばいって言ってる人間はなろう読み慣れてないだけ

以下蛇足

異世界スマホ11話がやばい、拷問、脳が溶けたような会話、問題点しかないと話題でした。
見たときからそんなにやばいか?と思ってたんだけど、12話見てもやっぱりやばいと思わなかったので記事を書きます。書きたいなーと思ってたんだけど機会を逃してたので。

11話のあらすじ

まあ色んな所で書かれてるんですけど、空中庭園見つけてマスターになって女の子が増えて正妻の余裕を見せつけて会議が行われる。終わり

見つけた/思いついた問題点について反論してみる

  1. 異世界スマホ11話、面白くなさすぎる、拷問すぎる

    1話から雰囲気変わらないと思うので1話で切ってください。11話で拷問って思うなら1話ですら拷問だと思いますね…

  2. 目的がないまま話が進んでいく

    一生こころがぴょんぴょんするとかゆゆ式は神アニメとか桜Trick桜Trick)とか言うなよ

  3. ハーレムすぎない?

    そういうアニメって最初の数話でわかってたしなんで11話まで見ていたのか疑問があります。それを承知で11話で公認ハーレム会議が開かれたのが意味不明で受け付けないって人にちょっとわかってほしいことがあって、あのハーレム会議、すごくないですか?
    ユミナが正妻である余裕をもって、「わたしは正妻であって、正妻に提案されたことを実行してしまうと第二夫人以下になる」という暗黙の条件が存在する場を設けるんですよ。すごいですよ、これは。正妻でしか出来ないことです。
    そして、望月冬夜に心酔しているエルゼ、リンゼ、八重はそれを実行するしかない(しないと将来的に離れる or 非公式な愛人になる)という勝ちしか見えない状況で仕掛けるというの、王女としての本能と教育を感じます。
    すごいですよね、「穏やかだったり安心感があるから見続けてきた」っていう層に「安心できますよ」と言ってるんですよ、すごくないですか?つまり、彼女たちに明確な序列が出来て争いがなくなるんですよ。1位ユミナ、2位リンゼ、3位同列リンゼ/八重という、夫人の序列が明確になって順位争いの影での争いがなくなって、安心して放送されてるものを享受できるんですよ。ひどいというよりむしろ"やさしい"ですよね。
    明確に序列を設定しているので、Re:ゼロとかそのあたりよりかなり大胆なことを行っていると思いませんか、これは拷問とかではないですよ。他の作品が敵とかイベントとかで誤魔化してベールにくるんで見ないようにしてるものを、全部剥いでありのままにして明確にしようとしてるの、すごいですよ。すごいとしか言ってないけど、これはほんとうにすごいですよ。
    アニメ、基本的に書籍化されたものを使っているから、なろうの流行から3周遅れみたいなイメージあるんですけど、正妻の余裕を見せつけて公妾とか愛人とかしだしたのって1.5周前ぐらいじゃないですか?それを映像化したのがさすがだと思います。脚本家と原作者の勇気だと思います。

  4. 後半失速しすぎ

    いやなろうもので後半失速してないものあります?30話程度で完結するものでも普通に20話あたりぐだるんだしそんなものじゃないですか?
    完結してるものならまるごと飛ばしても問題ない話をアニメ化したらああなって当然だなって感想だし、わざわざ指摘する事項でもない気がします。

これでよくない?

個人的には面白いというか、そんなに酷評されるか?とは思いました。
おもしろがって過剰に言ってるだけで実はそんなにパターンかなーと思ったので、そんなに言わなくていいんじゃないかなって…みんな色々言ってるのに何も思わなかったのがおかしいのかなと感性を疑ったんですが、やっぱり多様性だよなと思ったので「異世界スマホは悪くない」を主張します。 ひどいというか、拷問というより、前述したように逆に挑戦的な良いアニメだと思いました。

むすび

良いアニメ化だったと思いました。なんか色々言ってるひとはとりあえず ISUCA とか見るといいんじゃないかな…これでだめならビビッドレッド・オペレーションとかもハマるかもしれない。ささみさん@がんばらないはめっちゃ好き。
(正直拷問度ならキルミーベイベーのほうが高いと思った)

時間が限られているときに技術書を読むのが苦手

たとえば仕事終わって帰ってきて、寝るまでに3時間あるとすると、3時間で済むようにしなきゃいけない。
(朝起きるのがめちゃくちゃ苦手なので十分余裕を持って寝たい)
そうすると、どれをどのくらい読むか決めないといけなくて厳しい。
なんで決めるかというと区切り悪いところで終わりたくないし、精神力がないから「ここまでやる」がないと数ページで終わってしまいそうだから。
「ここまでは読めそう」ってのも罠で、わからないところ出てくると調べたりして数ページに数時間溶けるとかもあるし、わからないから技術書読んでるから見積もりの精度が悪すぎる。
なので帰ってから生産的なことをするのがあまりにも難しくて、どうしよう…ってなりつつも勉強はしたいから悩ましい…
とりあえず英単語をだらだらやることを始めたんだけど、それより技術力をなんとかしないといけないから、焦る
同期にすごいひとがたくさんいて、会社の人もみんなすごくて、なんか自分だけ見劣りしてるなあ…って感じる
何をしても追いつける気がしない

Nintendo Switch の有線接続アダプタについて

こういうツイートが回ってきました。これについて、規格の面から言及したいと思います。

f:id:li_saku:20170324122732p:plain

まず、Wii U 純正アダプタの仕様についてです。

周辺機器 | Wii U|Nintendo

Wii Uを有線LANでインターネット接続する場合に必要となるアダプターです。 10BASE-T100BASE-TXに対応しています。

10BASE-T および 100BASE-TX というのは、主に通信速度に関する規格です。

簡潔に言うと、10BASE-T というのは最大 10Mbps の転送速度が実現可能な規格で、100BASE-TX というのは最大 100Mbps の転送速度が実現可能な規格です。
規格というのは、機種によって変わるものではありません。現在、ネットワーク(Ethernet)接続の規格を定めているのは IEEE という機関で、任天堂がいじれるものではありません

純正だから速度が上がるとか、安定するとか、そういうことは理論的に有り得ません。(回線の問題についても色々あるのですが、ネットワークは複雑すぎるので割愛します。)
再度書きますが、純正アダプタだろうが、非純正だろうが、速度差が出ることは考えられません。また、速度差について言及するなら、せめて数十回計測してその平均値を見るべきです。なぜなら、インターネットでは様々な経路でデータが伝わるため、一度の計測だけで必ずその値になるとは限らないためです。また、このタイプのオンラインゲームでは転送速度より応答速度の方が大事なので、それを重要視したほうがよいと思います。

次に、Nintendo Switch の「推奨とされている」HORI アダプタの規格についてです。

LANアダプター for Nintendo Switch

対応規格:1000BASE-T, 100BASE-TX, 10BASE-T

この 1000BASE-T というのが、今回 Nintendo Switch で追加されたネットワーク接続の規格です。簡潔に言うと、最大 1Gbps の転送速度が実現可能な規格です。

もうおわかりかもしれませんが、規格を満たしていれば、どんな USB <-> LAN アダプタを使っても変わりません。純正だろうが、純正でなかろうが、ラグにも同期ズレにも影響はありません

上記の画像で Switch 純正(?)アダプタと Wii U 純正アダプタで速度差がついている理由はもうわかるかもしれませんが、Wii U 純正アダプタは、100BASE-TX(100Mbps) までしか対応していないからです。回線速度の理論値と実測値がかなり違うことは誰でもわかると思います。ただ、Splatoon をやる上で、ここまでの速度が必要かというと疑問です。数十回測定した ping 値(応答速度)と、数 Mbps の転送速度が出ていれば問題ないと考えられます。

また、少しちがう話になりますが、この HORI 社が出している LAN アダプタ、USB 3.0 に対応していません。なぜなら、USB 3.0 のコネクタの前バージョンとの区別のため青色を使用することが推奨されているためです。

Nintendo Switch の公式仕様を見てみます。

機能・仕様 | Nintendo Switch|Nintendo

USB2.0 で動作しますが、将来的に USB 3.0 に対応する予定です。

USB 3.0 というのは最大 5Gbps の転送速度に対応した最新規格です。正直、Splatoon をやるだけならここまでの速度は必要ないと思いますし、かなりのオーバースペックだと思います。
個人的に、Nintendo ライセンス商品とうたっておきながら、将来的に対応する規格で発売していないのは少し微妙な気持ちになります。

USB3.0 <-> LAN(1000BASE-T) の変換アダプタにはこういう商品などがあります。関連商品にも似たようなものがあると思います。USB3.0 対応、1000BASE-T 対応かどうかを調べれば、正直 HORI より性能がよいです。

ただ、知識をつける手間を省くという理由で純正を買う人はもちろんいると思いますし、企業に貢ぐという意味で買う人もいると思います。メーカー保証の点で値段差があったり、チップセットの差だったり、いろいろな観点から議論をするべきだとは思います。
それでも、「純正だからラグくない」とか、「純正じゃないから同期ズレが起きやすい」とか、そういうことを平気で言ったり言われたりするのはおかしいと思います。

何らかの参考になれば幸いです。