私が歌川です

@utgwkk が書いている

3連休

金曜日

夕方に起きた.

部室で部員がUndertaleをクリアする様子を見ていた. 演出の意図と攻略方法を結び付けるのは万人にとって必ずしも簡単ではないということが分かった. そのあとは部員が麻雀する様子を見ていて,気がついたら真夜中だったので帰宅して寝た.

土曜日

なぜか早起きしたので溜まっていた洗濯物を片付けた.

大阪に行く用事があって,一度は乗ってみたかった京阪プレミアムカーに乗った. 乗り心地はふつうの特急の椅子がだいぶふかふかなのでそこまで変わらないが,コンセントや毛布レンタルなどサービスが充実している様子だった. 寝ていたら大阪に着いた.

新世界の串カツ屋で大量の串カツを食べてから飛田新地を見た. 生存競争を感じる.

友だちの家に泊まって終了.

日曜日

10時ぐらいに起きる. 中島由貴さんのライブ&トークショーを見に大阪電気通信大学に向かう.12時ぐらいには着いてたと思う. 整理券方式かと思ったら開場・開演まで並ぶ方式だった.特にすることもないので並ぶ.

開始したらいきなりライブが始まり,地下ドルの様相を呈したが,そういえばアイドルやってましたね. アイマス声優としての中島さんしか知らなかったが,何かきっかけがあればすぐ一門になってしまうような性格ということが分かった*1. 声優活動を始めたきっかけや,今後演じてみたい役など,いろいろ聞けたし,司会進行もスムーズだった*2ので良かった. 合間合間に,そういえばこの人ハタチじゃんと思わせるような言動があり,気持ちになるなどした.

トークショーが終わってから広場でアイマスDJをやっていたので思った以上にはしゃいでしまった.

そのあと京都に帰ってきて三条で飲み食いし,飲みすぎたので終了.

*1:褒めてます.

*2:司会進行の人,アナウンサーやってるの知らなかった.どうりで上手なわけだ.

血液検査結果が可視化されるスプレッドシート

docs.google.com

献血してると血液検査のデータが溜まってきて,基準値との比較など可視化できたら面白そうと思い,スプレッドシートにした. 基準値を上回ると背景色が赤になり,下回ると青になるので,どの値について心配したらよいかが一発で分かる.

このスプレッドシートは,コピーして自分の血液検査結果を埋める,拡張するなど,自由に使ってもらって大丈夫です.

献血した

献血した.これで7回目.そろそろ献血ヘビーユーザーを名乗っていいのではなかろうか.

前回の様子はこちら.

utgwkk.hateblo.jp

今回はSNSフォロー&シェアキャンペーンのようなものをやっていて,参加したところハンドタオルをもらった. 響け!ユーフォニアムの久美子ちゃんとのツーショットがツイッターにシェアされる,という体験ができるらしいが,写真を撮られてシェアされるのは嫌なのでパスした.

血液検査の結果が出た. コレステロールの値が上昇傾向にあるので,次回には200を超えているであろうという予想をしている.

献血した - 私が歌川です

コレステロールどうなってるか楽しみ.

追記 (2017/10/31)

コレステロールは基準値下限を下回っていた.なかなか予想できない展開.

ISUCON7で人権喪失を味わった #isucon

チーム :innocent: (学生枠)で出場し,最終得点は37000点ぐらい.あと3000点足りなかった……. もっと詳しい記事は @wass80@yu3mars が書いてくれると思うので取り急ぎ.

やったこと

  • 問題を見て,複数台構成になっていて驚く.予選でここまでやるのか……
    • アプリケーション2台+DB1台の構成のまま問題を解くことにした.
    • 言語は前回同様Ruby.
  • 遅そうなクエリに対して効くようにインデックスを張った.
  • とりあえずN+1をぜんぶ解消した.
    • GET /fetch も解消した.
    • 異常なSQLになった…….
  • icons がDB上にあるのでとりあえず書き出した
  • あらゆる静的ファイルをnginxにキャッシュさせた(つもりだった).
    • 両サーバにファイルを分散させて,2台目のサーバのnginxにもキャッシュさせた(つもりだった).
    • ここで気づいていれば~となるがもう遅い.
  • あらゆる静的ファイルをgzip圧縮して配信するようにした.
  • 何をやっても帯域が詰まるようになった.
    • 再起動したりワーカープロセス数を調整したりして何度もベンチマークを走らせた.
    • 終了30分前に最高得点の37000点ぐらいが出たので,ここで打ち切りとする.

感想

いつも通りやることを全部やった上でまったく点数が伸びなかったのでとても悔しい. Cache-Control: public ヘッダや sleep 1.0 の意味には最後まで気づけなかった……. 予選の問題でありながらそういうところまでちゃんと考えないと解けないのでなかなか奥が深い問題だったと思います. しかしCDNを意識したファイル配信というところまでは頭が回らず難しかった…….

本戦出場したチームの人たちには是非ともがんばってほしいです.運営の皆様ありがとうございました.

追記

リポジトリを公開した.雑に管理してたのでcommitされてないファイルもある…….

github.com

MySQLで特定カラムの文字数順ソートにindexを効かせる

ISUCON6 予選問題の解説を読んでいたところ,

キーワードリンクが最前最長マッチを期待している関係上、CHARACTER_LENGTH 順でソートしていますが、そこをvirtual columnなり別カラムなりにindexを張るのも良いでしょう。折角MySQL5.7なので、virtural columnを使うのがオシャレです。

とあったので,具体的にどうすればいいか試してみた.

virtual column を作る

まずindexを貼る対象となるvirtual columnを作る. 普通に ALTER TABLE でカラムを追加するのに加えて AS (式) でカラムの内容を指定してやるとよい. カラムの型が必要なので適当に指定してやるとよい.TINYINT でもいい気がしたけど念のため SMALLINT にした.

mysql> ALTER TABLE entry ADD COLUMN keyword_length SMALLINT(8) AS (CHARACTER_LENGTH(keyword));

ソート用のインデックスを貼る

この時点ではまだソート用のindexは作られていないため,filesortが行われている.

mysql> EXPLAIN SELECT keyword FROM entry ORDER BY CHARACTER_LENGTH(keyword) DESC;
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra                       |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------------+
|  1 | SIMPLE      | entry | NULL       | index | NULL          | keyword | 767     | NULL | 5851 |   100.00 | Using index; Using filesort |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-----------------------------+
1 row in set, 1 warning (0.00 sec)

結論から言うと (ソート対象のカラムの文字数を表す virtual column, ソート対象のカラム) となる複合indexを貼ってやるとよい.

mysql> CREATE INDEX keyword_length_and_keyword ON entry(keyword_length, keyword);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> EXPLAIN SELECT keyword FROM entry ORDER BY CHARACTER_LENGTH(keyword) DESC;
+----+-------------+-------+------------+-------+---------------+----------------------------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys | key                        | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------+----------------------------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | entry | NULL       | index | NULL          | keyword_length_and_keyword | 770     | NULL | 5851 |   100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+----------------------------+---------+------+------+----------+-------------+

1 row in set, 1 warning (0.00 sec)

これで文字数順ソートにindexが効くようになった.ORDER BY keyword_length としても同じ.

参考

今週読んだ本

神経科学の話に終始せずにさまざまなコラムを挟みつつ,脳や器官の動作原理を教えてくれる本という感じ.まだ噛み砕いたぐらいでぜんぶは理解してないのでもうちょっと読みたい.

むかしニコニコで読んだ気がする.ツインテールの女の子になると便利.ルーツビア良かったのでそっちも読んでほしい.

ルーツビア(1) (アース・スターコミックス)

ルーツビア(1) (アース・スターコミックス)

こちらがルーツビアです.あるある多めでビールを飲みまくる話.青島ビール飲んだことない気がするので飲みたい.今週読んだ本ではない.