時計を壊せ

駆け出しWebプログラマーの雑記

ISUCON6で敗北した感想

ぼくはISUCONに初回から毎年参加しているので6年参加しているということになる。
予選ができたのが4年前のISUCON3で、そのときは決勝に行けたが、それ以降の3年間は決勝に行けていないので、そろそろ人権が剥奪されそう。

様子

当日はこんなかんじだった。

なんかもうちょっとなんか書こうと思ってたはずなんだけど、だいぶ漬けてしまったし、このまま公開してしまおう。

DeNAに入社して半年経った

実は去年の9/1からDeNAで働いている。 たまに聞かれるけど、別にいまさら隠すようなものでもないので、公開しておこうかとおもう。

気づいたらもう半年くらい経ってたので感想とかを。 なお、相変わらずPerl5を中心にコードを書いている。 (知人に余計な心配をさせないためにいちおう書いておくと、例の事件があったところとは違う事業部です。)

入社していきなりモジュール管理まわりをほげほげしたり、静的解析したり、 桁がおかしい(当事者比)トラフィックを正常に捌くための負荷対策をしていったり、いろいろやってた。 最近はYAPC::Kansaiの準備と本業をいったりきたりしていたきがする。

素直な感想としては、基本的に技術レベルの高い人が多い現場ですごいなーってよくなっている。(部署にもよるのかもしれないけど) たとえばMySQLつかったアプリケーションを書いているチームなら、B+Tree Indexの特性なんて当然分かってるでしょ?みたいな、高いレベルでの当たり前を持って仕事できている感じ。HTTPやOAuthの仕様とかもけっこう高いレベルで理解している人が多い。 ほか、前職だとQA部門とかはなかったけど、ちゃんとQAやってたりとか、パートナーさんとのやりとりがあったりとか、関係する部署の人が別フロアにいたりとか、これまで出来なかったいろんな経験ができている。 リリースフローもがっちりしてたり、規模が違うとここまでやるんだと思うものもあれば、ここは楽になったなと思う面もあり、違いを楽しめていてまだまだ飽きない。

というかんじで、思ってたより忙しいですが、やりたいこともある程度できているし、いまのところ楽しく働けている。

ということで、近況報告でした。

ISUCON6のために準備していたあれこれ

気持ちが収まりきってないので感想とは別にひとまず準備していたあれこれを紹介しようとおもいます。

Anislbe

いわゆる秘伝のタレというやつです。

以下のことを事前に自動化していました。
使わなかった/役に立たなかったものもありましたが、このあたりを用意しておいたおかげで無心でansible-playbookを打てば反映出来るという感じの世界観にできてよかったとおもいます。 反省としてはコードの反映は git pull でええやろという感じだったのですが、やはりdeployスクリプトがあったほうが良いという結論になったのでそのあたりは反省の余地があったなという気持ちです。

  • 初期構築
    • percona/mackerelのdeb repositoryを追加
    • hostnameをazure上のVM名と合わせて分かりやすくする
    • 調査やライブラリの依存などで高い確率で必要になりそうなものをインストール
    • 各メンバーのユーザーを作って鍵を通す
    • passなしでsudoできるようにする
  • 各ミドルウェアの設定のデプロイ

https://github.com/karupanerura/isucon6-qualifier/tree/master/ansible

設定ファイル類

まあみてってください。

https://github.com/karupanerura/isucon6-qualifier/tree/master/config

SSH configの自動生成

https://github.com/karupanerura/isucon6-qualifier/blob/master/tools/make-ssh-config.pl

開発環境作成スクリプト

ベースのイメージをコピーして諸々のリソースを分割したVMを立ててくれるスクリプト。 こっちは id:ar_tama がやってくれたのでたぶん書いてくれるはず。

https://github.com/karupanerura/isucon6-qualifier/tree/master/tools/azure

便利情報リンク集

開始前の微妙に空いた時間とか行き詰まったときとかに読み返したりとかできて個人的にはよかった。

https://github.com/karupanerura/isucon6-qualifier#便利情報リンク集

練習

去年のISUCON5予選の後から数えて、計6回集まって過去問への再挑戦などの素振りを行いました。

この練習の成果として、チームとしての動きが板に付いてきて、昨年と比べてかなり効率的に動けた気がします。 また、オペレーションの効率化のために何が必要かもこの過程で理解が高まったとおもいます。

まとめ

来年はより効率的に動けるよう精進していきます。

YAPC::Asia 2015でうっかりをなくす技術について発表しました

スライドはこちらになります。

www.slideshare.net

まとめていただきました!

うっかりを潰せ!Perlに見る「やらかし防止」 #yapcasia #yapcasiaC - Togetterまとめ

YAPC::Asia Tokyo 2015 1日目レポート[更新中]:YAPC::Asia Tokyo 2015 スペシャルレポート|gihyo.jp … 技術評論社

200人〜300人くらい入る部屋が満員御礼で立ち見も出る程の方々にお越しいただきました。

緊張してしまってうまく話せなかった部分や、時間配分を間違えてしまって最後のあたりが駆け足になってしまいましたが、 会場の雰囲気やまとめなどを見る限り、伝えたかったことは伝えられたかと思います。 裏番組が非常に魅力的な中で、あえてぼくのトークを聴きにきて頂きまして、本当にありがとうございました!

よかったら、ベストトーク賞の投票もおねがいします :)

yapcasia.org

宣伝

Gotanda.pm #6やります!

gotanda-pm.connpass.com

YAPC::Asia Tokyo 今日、このあと 15:30 から「うっかりをなくす技術」について話します

yapcasia.org

裏番組がすごいつよいので、負けないようにがんばります! もしよかったらきてください!

Perlからmrubyの関数を呼び出せるようになりました

mRuby.pmにmrubyの任意の関数を呼び出すインターフェースを追加しました。バージョン0.08としてリリースしています。

Perlのデータを引数として渡してmrubyの世界で扱い、mrubyの世界の値を返してPerlから使うことができます。 mrubyからPerlにデータを渡すことは今までのmRuby.pmでも可能でしたが、Perlからmrubyにデータを渡すことは0.08から新しくサポートしました。

つまり、以下のようなコードが動きます。

use mRuby;

my $mruby = mRuby->new(src => <<'...');
def add(l, r)
    l + r
end
...
my $ret = $mruby->funcall(add => 1, 2) + 3 + $mruby->funcall(add => 4, 5); # => 15

これによって、iOS/AndroidアプリとPerlのWeb APIで共通となるロジックや設定をmrubyで書き、 動的にロジックや設定を更新し適用するといったことが可能となります。

ぜひ、使ってみてください :)

宣伝

今週水曜日(2015/06/24)はGotanda.pm #5です!ぜひきてください!

gotanda.pm.org

宣伝2

YAPC::Asia 2015にトークをsubmitしています。良かったら+1してください!

追記: acceptされました!ぜひ見にきてください!

yapcasia.org

Cartonで不要になったモジュールをcpanfile.snapshotから削除したい

こうすることで消せた:

rm -rf local
carton install --deployment
carton install

なんか良い方法ないかなー。

追記: 2015-06-11 17:03

CIでcpanfile.snapshotを生成すれば解決しそう

参考: www.songmu.jp