Hatena::ブログ(Diary)

joker1007の日記 RSSフィード

2017-05-17

パーフェクトRuby第二版 こぼれ話

書籍紹介は既にいくつか書かれているんで、私は自分の担当した箇所の話を書こうかと思います。

本日(5/17)改訂2版 パーフェクトRubyが発売されます - すがブロ

改訂2版 パーフェクトRubyが出版されました - esm アジャイル事業部 開発者ブログ

改訂2版 パーフェクトRuby:書籍案内|技術評論社


私は、どっちかというと大きく書き直す所をメインで担当していました。主にテストコードの章です。後Refinementsについても少し書いてます。

テストコードの章では、書籍紹介にある様にtest-unitを採用しています。

fluentdプラグイン関連のテストコードはtest-unitで書かれていることが多いのですが、最近その辺りを結構触っているので、私が書きますよと手を挙げさせていただきました。

Refinementsについては、恐らく数少ないproduction環境でもRefinementsを活用しているものとして、貴重なユースケースを提供しておこうという意図があったので書かせてもらいましたw

私はRefinementsとても好きなんですが、実装側の苦労とか機能の限定が厳しいので、あんまり良い評判を聞かないですね……。

もちろん、そんな上手いこと使えるケースはそう多くないので、無理して使うのは止めようね、とは書いてありますw

test-unitを採用した理由ですが、この本はRubyという言語自体をテーマにした本なので、バンドルされているテスティングフレームワークを採用して書くのが入門者にとっても分かり易いだろうと思ったからです。

また、通常のRubyコードにかなり近く、特化したDSLについての事前知識説明しなくてよかったので、内容をコンパクトに収めることができました。

ちなみに、私個人としてはRSpecは結構好きなのですが、RSpec3系になって嫌う人の気持ちも分かりますw

Power Assertも好き嫌いあると思いますが、これも言語自体にバンドルされていて、自分も関連gemを作ったりpull reqを出したりしたこともあって、ちゃんと触れています。


実際、一番しんどかったのはテストコードを書くためのサンプル実装を用意することと、モックを使ったテストを行う理屈をサンプル実装の中に用意することでした。

シンプルで読むのに苦労は無い、がテストを書くことが役に立ちそうで、リファクタリングの余地がありそうな程度に冗長なコードで、モックやスタブを紹介するためにそういうテストを書く理由が存在するコードを用意しなければならないわけです。

色々頭を捻った結果がこの本に書かれているわけですが、上手くいってるかどうかは読んでくれた人がどう受け取るか次第って所でしょうか……。

突っ込みを入れたい人は、是非、書店やgihyoさんの電子書籍サイト等でお求めください!

2017-02-02

開発環境がLinuxに戻ってそれなりにこなれてきたので現在の環境について書く

Macを捨ててThinkpadGentooを入れて開発環境としてから2ヶ月が過ぎた。

世の中にはMacから離れようとしてThinkpadを買ったら、矢印キーボード押しにくいとかタッチパッドがクソなので、Macに戻っていった人も居るみたいですが、私としては至極快適に過ごしております。

そもそもThinkpadタッチパッドは基本無効化するものなのでどうでもいい。まあそのスペース邪魔なんだよ、とは思いますがw

Wi-Fiの無効化キーを誤爆するという危険があるらしいが、Gentooだと頑張って設定しないとそういう特殊なキーはそもそも動かないので、そんな危険もなく安全ですね。

Gentoo入れてタッチパッドを無効化すれば、Windows10というOSも使わなくていいし、全て解決するんではないでしょうか。


前置きはこのぐらいにして、色々と使うものが安定してきたので今の環境について書いていきます。


デスクトップ環境

Gentooportageというパッケージ管理システムがよく壊れるというか、依存関係が複雑なパッケージ入れてるとバージョンアップのタイミングでコンフリクトしたりする。

なので、依存関係の複雑になりがちなGUI周りのコンポーネントはできるだけ入れたくない。

というわけで、GTKベースにしつつGNOMEKDEとかいう重厚なデスクトップ環境を丸ごと入れるということはせずに、Awesomeというタイル型ウインドウマネージャーを直接起動している。

PCが起動すると、コンソールのログイン画面が出て、ログイン後にコマンドでGUIを起動するようにしている。xinitrcに"exec awesome"と書いてstartxを実行する。

おかげでめっちゃ軽い。起動直後のメモリ消費は200MB程で済む。

ランチャー

AlbertというAlfredもどきがあったのでランチャーとして使っている。

元々Alfredの高度な機能はほとんど使ってなかったので、アプリの起動さえ出来れば特に困らなかった。

Gentooにはパッケージもあったので簡単に入って便利。

ターミナル

mltermを使っている。

24bitのtrue colorが表示できて、sixelが使えるから使っているのだが、正直そこまで軽量とは感じないので、もうちょっと軽いターミナルを探している。

mltermの良い所は依存コンポーネントが少ないところ。gnome-terminalとかkonsoleとかは依存が多過ぎてもっての外だ。

urxvtが24bit表示できれば良かったのだが……。

クリップボード管理

parcelliteを使っている。

システムトレイに常駐できるし、基本的な機能があって、これも依存が少なかったので採用した。

開発環境

最近はneovimとdockerがあれば大体何とかなる。ホストOS側に色々と入れるとportageが壊れやすくなるので、できるだけdocker内に封じ込める様にしている。

コンテナ内で操作することも色々あるのでストレスなく操作できる様に、自分のzshrcとかpecoとかを突っ込んで"docker exec"を実行できる簡単なラッパースクリプトを書いている。

Twitterクライアント

TweetDeckがメイン。普通にChromiumで表示している。たまにmikutterを使うこともある。

チャット

仕事ではSlackを使っていて、Gentooにはパッケージがあったのでそれをそのまま入れて使っている。

音楽再生

wine上でfoobar2000を動かして使っている。というか未だにこれより便利な音楽プレーヤーが無いのってどうなんだ。10年前から何も変わってないぞw

自分の持ってたUSBDAC兼ヘッドホンアンプは普通に使えたので、wine経由してWASAPIで再生している。96kもちゃんと出た。

問題は、iTunesレーティングが同期しないことで、iPhoneを使っている身としてはちょっと辛い点が増えた。

動画再生

mpvが軽くて良い。

しかし、自分のT460sは一応GeForceを積んでいるのだが、今のところLinuxでこういうノート用の追加3DコントローラーでVDPAUを上手く使う方法が無い。

色々調べたのだがかなり厳しそうだ。

DRI2で動かせば、可能性ありそうな気がするんだが、良く分からなかった。

なので、GPUは上手く活用できていない。

ファイラー

とりあえずspacefmとvimfilerを併用して使っている。

これも依存が少ないから採用した。nautilusとかGNOMEが入ってしまうので駄目だ。

その外のファイラーも大体デスクトップ環境とセットで入ってしまって辛かった。

Wi-Fi接続とbluetooth接続

それぞれコマンドでやっている。

Wi-Fiはiwコマンドかiwconfigコマンドで電源を操作して、wpa_supplicantを起動しておけば勝手に繋がった。

接続設定とかパスフレーズはwpa_passphraseコマンドの実行結果を/etc/wpa_supplicant/wpa_supplicant-<dev名>.confに書いておく

bluetoothは、bluetoothctlというコマンドを使ってconnectしている。しかしBluetooth4.0規格のマウスが上手く繋がらないとか時々ハマる。

ヘッドセットとかイヤホンの類はまだ試してない。

パスワード管理

1passwordのWeb版をお試し中。wine使ってWindows版を入れるかどうかも検討しているが、まだ決めてない。

電子書籍とか画像ビューワー

KindlewineWindows版入れたら普通に使えた。

画像系はmcomixというビューワーでzipとかrarの中身も見れるのでこれを使っている。

PDFとかePubはあんまり良いビューワーが見つかってない。ePubFBReaderというのを使ってるが正直微妙。

マルチディスプレイ

最近は、EDIDの情報がちゃんと取れれば普通にディスプレイを認識するので、"xrandr"コマンドでディスプレイ表示を切り替えれば、大体上手く動作する。

ただ、接続チェックはちゃんとした方が良い。


まとめ

全体的な感覚としては、Macより2倍は動作が軽い。

特にタイル型ウインドウマネージャー派としては、Mac上で無理矢理やってるのとは全く反応速度が違う。久々の感覚だが、やはりこうであって欲しい。

Dockerを開発に使う上でも、変なハマりどころとかパフォーマンス上の問題が発生しないのでめっちゃ快適だった。

そもそもコンテナは起動が速いとか言ってるけど、Macだと結局VM噛んでるから別に早くないし、むしろストレージに問題ありまくりでめっちゃ辛かった。

開発機として使うなら、やはりLinuxの方が良い。iOS開発者はどうしようもないけど……。

最近のLinuxは蓋を閉めたらちゃんとスリープできるので、バッテリー問題も困ることはそんなに無い。

まあ、稀に復帰できないことはあるんだけど、そもそもMacでも時々復帰しないし。

CPUがあんまり高クロックで動作しない様に上限かければ6時間は電池が持つ。


というわけで、今のMacが気に入らないなら、そろそろMacから離れる好機かもしれない。

宗教上の理由でLenovoのPCを使いたくない、という人も居るかもしれないし、別にThinkpadを進めるわけではないけど……。


2/3 15:00 追記

はてブコメントで、資料作成とOfficeどうしてるんだろう?というものがチラホラあったので追記しました。


資料作成について

資料は、よっぽどビジュアルに凝ったものを作る場合を除いてmarkdownで書いてreveal.jsで表示する形にしている。

Mac使ってた時も最近の時期はそうだった。

ビジュアルが必要なかっちりした発表の時は、仕方ないのでMacを引っ張り出してきてkeynote使うかもしれない。

Officeについて

一応、必要になったらlibreofficeを入れようと思っているが、ここ3年でプレゼンテーション資料以外の用途でOfficeっぽいものが必要になったことはない。

基本的にはGoogle DocsGoogle Spreadsheetで対処している。

そもそもMacにもOffice自体は入ってなかった。あのKeyNoteの付属品みたいなものは、あんま役に立たないし……。

マクロが大量に入ったExcelがやってきたら詰むけど、元々の状況に変化は無いw

2016-11-25

MacBook Proを捨ててThinkpad T460sを買ってgentooを入れた

英字キーボード配列にできて開発ユースに耐えうるノートPCがとても選択し辛い昨今、なんとなく安牌ポジションだったMBPについにさよならしました。

元々、Macを好んで使っていたというより、解像度が高くて英字配列にできて電池の持ちが良いというノートPCがMBPだっただけで使ってたのですが。

一番大きな要因がコンテナの利用頻度が増えて開発環境も含めてDockerを使う様になったので、Macだとどうにも面倒だという点です。

docker-machineのデフォルトとかdocker for Macデフォルトが遅過ぎて話にならないし、dinghy使ってもdocker-sync使っても微妙でかつ面倒くさい。

普通にLinux上で直接動かせるなら、無駄な苦労だと思って、まず開発用PCをLinuxにしようと決めました。

そしたら新しいMBPが30万越えるのに、一世代前のCPUとメモリでドヤ顔してくるわ、キーボードがペラッペラの気に食わない形になったので、買う気が失せたのを機にMBPを買うのを止めた次第です。

(Touchbarはどうでもいい)

まあ、昨今Thinkpadレノボ化してからあんまりいい話聞かないので悩みはしましたが。

T460sスペック

基本部分はざっくりこんな感じ

MBP 2016との比較としては、

  • CPUは同等
  • メモリは多いし早い
  • ストレージの上限はMacの方が多い
  • ディスプレイの解像度はMacが買ってるが、非光沢なのは良い (というか3年以上前からあの解像度のMacがヤバイ)
  • キーボードMacより良い (トラックポインタ付いてるし)
  • TouchpadはMBPの方が精度良いと思う
  • 重さは13インチとほぼ同じ
  • ベゼルが180度まで開く
  • 普通のUSB3.0端子がある
  • 10万近く安い
  • ドック追加しても数万円安い
  • ESCキーとかFnキーがある!(どうせHHKB使うけど)

自分は、3年前のMBPからの移行だったのでかなりスペックが上がったし、やっと4kディスプレイが60hzで出せるようになってちゃんと使えるようになったのが嬉しい。

MBPと比べてでかいのは、普通のUSB端子があるのでケーブル買い替えなくていいし、無駄なアダプタケーブル持ち歩かずに今まで通りで良くて楽。

ディスプレイに関しては、3年以上前にRetina出してた当時のMBPは今思えば異常だった気がする。あの時はテンション上がったのになあ……。今は細いバーでDJ出来るぜーとか言っててもうなんか……。えー、それ?って感じである。

使用感におけるMacとの比較

OSgentoo linuxを入れて使っている。archと悩んだがそれなりにgentoo党なので慣れてる方にした。

久々にインストールバトルしたから、ハマりまくって辛かったが……。

gentooにして余計なものを結構削ぎ落とした構成にしたので、GUIを起動しても起動した辞典でメモリ消費量は350MB程で、24GBメモリ積んでるので、これなら相当富豪的に使っても無くなったりしないだろう。

dockerがめっちゃサクサク使えるし速い!やっぱMacOSはこの辺り辛い。

全体的にクソ早くなった。自分のMacが大分色々と肥大化してて無駄なものが動いてたってのもあるが、このサクサク感は嬉しい。

キーリピートとかキーレイアウトは普通に変えられるが、KarabinerがSierraでも元の機能レベルで動く様になったならあっちの方が多機能で良い。あそこまで簡単にレイアウト変えるのはLinuxだとちょっと辛い。

homebrewは何だかんだで良くできてて楽。バイナリパッケージとコンパイルを適度に組み合わせられるのが良かった。

この辺りはgentooを使ってるので色々と時間がかかる。まあ、そこが大事な人はarchを使えば良いと思う。

後は、どうせvimでコード書いて端末で動かすので開発環境的には大して変わらない。

今は、ファイラーどうしようか悩んでる所なのでFinderとの差は良く分からん。Finderサムネイルがサクっと確認できてリサイズも簡単だからそこは強力だと思う。

全体としては、開発環境としてはやっぱLinuxの方がどう考えてもサクサク感が高い。ちょっぱやである。

一つ大きな問題があって、今まで1passwordに超依存した生活になっていて、これをどう移行するか目処が立ってないところである。

もう良く使うものはFirefoxにマスターパスワード付きで保管して、他の特殊なものはiPhoneの1passwordから参照する、という手段で大体の利用側は何とかなる。

問題は登録だがこっちは良いソリューションが無い……。

gentoo苦労話

そんな苦労するぐらいなら使うなって突っ込みもあるかと思いますが、苦労するだけの見返りはあるのでgentooを使ってます。とはいえ色々ハマったのでまとめておきます。

ちなみにgentooを使ってて嬉しいのはパッケージ管理でライセンス上きついものも普通に管理できるし、コンパイルオプションレベルで必要なもの取捨選択できて、色んなものをマニュアルで設定する訓練が積めるのでLinuxの事が良く分かる、とかそんな所ですね。

ここからは、gentooの設定の流れをつらつらと書いてるだけなので、興味無い人は続きは読まなくて大丈夫ですw


まず、インストールする時、GentooのLiveDVDが普通に動作するので、変にハマらなければそんなに苦労は無い見込みだった。(結果ハマったけど)

lspciとかdmesg見ながらカーネルに組込むドライバをぽちぽちとやる。コンパイルまでは問題無かった。

しかしUEFIのノートPCにLinuxをまともに入れるのはこれが初だったので、UEFIについての知識が無くgrubインストールで調べものをする。

で、元々Windowsに使われてたブート領域に相乗りすることにし、efibootmgrを使ってgrubの起動処理を書き込もうとしたのだが、なんかefibootmgrがバグってたのか俺のchrootのやり方が悪かったのか分からんのだが、chroot環境の中でgrubefiバイナリのパスを指定すると、HDDのタイプとかUUIDが全部0で埋まってしまうという訳の分からん状態になった。

エラーメッセージも何も出なくて成功した様に終了したので、最初それに気付かなくてgrubが動かねええええ!って唸ってた。

1時間ちょっとぐらい悩んで0埋めされてておかしいことに気付いて、色々ググった結果同じ症状が出てた人を発見。なんかバージョン上げると解決する、みたいな話があったのでchrootの外に出て、efibootmgrをunmaskして新しいバージョンを取ってきたら、無事にEFIの設定を書き込めた。

これでgrubが起動できるようになった。

その後、カーネルが動かなかったのだが、これはframe buffer consoleのサポートを有効にしてないという凡ミスで、大分時間を浪費した。久々過ぎて忘れてた。

一回、カーネルを入れた後で、Arch LinuxwikiによるとACPIとかサスペンド回りでバグがあるらしいんで、カーネルをunmaskして4.8.9まで上げる。

後、dockerとかKVMで必要になりそうなカーネルコンフィグを組み込んでいく。

wifiドライバはあるけどファームウェアは組み込んでおくか、どっかに用意しとく必要があるっぽかったので、wireless-wikiからfirmwareを落としてきて、Gentoowikiを見ながらカーネルに組み込んだ。

無事認識できて良かった。

これで初期インストールは完了。


とりあえずインターネットに繋がらないと何もできないが、dhcpcdを入れて有線で繋げばすぐに繋がったので、しばらくそれで作業した。繋げばDHCPからIP取れるのありがたい。

wifiArch LinuxWikiを見ながらsystemdからwpa_supplicantが起動できるように設定をして、パスフレーズを設定ファイルに書いたら勝手に繋がった。最近のLinuxはすげー楽で焦った。


ウインドウマネージャは前Awesomeを使っていて挙動も好みだったので、Awesomeを使うことにする。

最初gnomeをベースにしようかと思っていたが、余計なもの入れて時間かかるのもなーって感じだったので単体で突っ込んで、xinitrcから直接起動することにした。

なんかこれで問題無く動くし、起動時にstartxするぐらい大した手間でもないので、もうディスプレイマネージャーもデスクトップ環境全体も必要無いやと判断して、このまま運用しようと思っている。

おかげで、起動した時点での消費メモリは350MBぐらいで、異常に軽量になった。

この時点で、開発に使うだけなら使えなくはないぐらいにはなったけど、まあ流石にまだちょっと辛い。


次は音を出せるようにする。これはArch Linuxwikiを見つつpulseaudioを入れたらすぐに認識した。最近はデバイスドライバさえちゃんと入ってれば、ほとんど勝手に認識するから素晴らしい。まあここで認識してくれてなかったら大分辛いところだったが……。

音量の調節は最初コマンドでやってたが、流石に辛いのでvolumeiconとpavucontrolをインストールした。volumeiconのおかげでキーボードのVolUpとVolDownキーが効く様になったが、ちょっとイマイチなので今後直す。


サスペンドがまともに動かんのはノートPCだと結構辛いので、ACPIwikiを見つつacpidを入れたら、初期設定で普通に動作した。蓋を開け閉めした時も勝手に動くので驚いた。一応ちゃんとカーネルコンフィグは事前に準備しておいたのだが、最近は普通に動くんだなーと思った。


ちなみにカメラもドライバを組み込んでおいたら勝手に認識して動作した。ビデオチャットサービスに繋いだら普通に使えて良かった。


こんな感じで大体仕事で使えるようになったのだが、自宅のPCレイアウト変えたり仕事の合間に調べものしながら作業してたりで、結局5日ぐらいかかってしまった。

まあ、おかげで現在は結構快適です。ibus-skkでスティッキーシフトができないことを除けば……。

やっぱ、MacOSより開発用としてはLinuxの方が良いし、個人的にもこっちの方が好きだ。

このタイミングで捨てて正解だったような気がする。

今更移行するに移行できない1passwordとiTunesというものがあって、この辺りをどうするかは未だに目処が立ってないんで、当分の間自宅からMacが無くなることはないけど。

2016-11-06

今更だがISUCON本戦の感想と反省

もう2週間ぐらい経ってしまったが、tagomoris & tnmtとチームを組んでISUCON本戦に出場してきた感想を書こうと思う。

中々ブログ書いてる暇が無くて、えらく遅くなってしまった。

ちなみに結果は6位。3位以下は割と団子状態で、後一手ぐらい刺さってれば3位は行けただろうなあと、残念な思いがある。

まあ、どっちにしろ1位はちょっと難しかった。


細かい流れはモリスさんのブログに既に書かれているので、そちらに譲る。


今回のお題はdockerがバリバリ活用されていたのと、SSE + Reactによるサーバーサイドレンダリングの組み合わせという非常にモダンな構成だった。

お題の発表後は、流石にうわー……マジかーって感じになった。

そもそも、現時点のRubyのWebフレームワークというものはSSEの様なストリーム配信と余り相性が良くない。

なので、あんまり使わないし、最適化ノウハウも溜まってない。辛い。


dockerに関しては、仕事でバリバリ使ってたので余り問題にならなかった。自分がdocker周りの環境整備を引き受けて、諸々の調整をしてたしログの確認もそんなに問題無く実現できたと思う。仕事で使ってて良かった。

なので、多くのチームがdockerを剥がしにかかってたけど、うちは最後までdockerを使ってた。これは良い点もあったが、もしかしたら悪い点もあったかもしれない。

良い点は、動作確認がめっちゃ楽だったこと。これは予選で動作確認が辛かった反省を活かせたと思う。実装の修正がとても楽だった。そして、プロセスの数の調整とかredisの追加とかも割と簡単にできたこと。これはdockerに慣れてないと手間取る可能性はあったが、上手く対応できて良かった。

悪い点は、もしかしたら有意なレベルでオーバーヘッドがあったかもしれないこと。自分の感覚ではそこまでスコアに影響するレベルじゃなかったとは思っているのだが……。


今回は、redisの投入周りやdocker周りの処理を大体引き受けて、まあまあ役には立てたと思う。

大きな反省点としては、やはりSSEサーバーサイドレンダリングの知見が足りなかったので、ちょっとした変更で改善できそうな点を見過ごしてしまってたところがある。

後はやる事に手一杯過ぎてベンチマーカーのログをちゃんと確認するのに意識が回らなかった。この辺りISUCON経験の無さが出た気がする。


最も失策だったのは、nodeで書かれたサーバーサイドReactに手を入れなかったこと。かなりCPU食ってたのは分かってたんだが、ここ弄って勝てるならnode選択が有利過ぎるんじゃないのか、と思ってしまって結局手を入れることができなかった。

割と普通のWebアプリケーションとしてチューニングできるところはある程度処理できたはずなので、ここのキャッシュが上手く出来てればベースのスコア水準は割と高い方だったんじゃないだろうか。無念である。

ISUCON本戦は複数台構成になることもあって、やれる事の範囲が滅茶苦茶多くなるので、時間内に上手く最善手を見つけてその手を打ち切れた所が勝つって感じだと思うが、うちのチームはそれがやれなかった。


チームとしては、やはり皆経験豊富だしめっちゃやりやすい感じだった。会社バラバラでチーム組んでる中ではかなり良いチームだったと思う。

しかし、モリスさんが最近ミドルウェアばっか書いてる様に、俺もあんまり普通のWebアプリケーション書いてないというかデータフローの設計とか分析基盤依りの仕事ばっかしてるので、ちょっと勘が失われている所があったかもしれないw

何にせよ、優勝は逃したものの初出場で本戦で勝負になるスコアが残せたのは、優れたチームメイトのおかげであることは間違いない。

負けたのは残念だったけど、とても楽しい1日だった。

モリスさん、tnmtさんと、ISUCON運営メンバーの皆様、ありがとうございました。

2016-09-19

ISUCON初出場と予選通過

少し前にtagomorisさんと飲んでたらISUCON出ようぜーって誘われたので、一緒に出ることになりました。

メンバーは、私(joker1007)、tagomoris, tnmtの3人。

今までの職場で一緒にISUCON出ようって感じの人が周りに居なかったので、今回何気に初参加だったのでえらい緊張してました。

特にモリスさんはISUCON無敗神話を持ってたので、足引っぱらないか不安でしたね。

前日に素振りした感じでは、Webアプリとして真っ当にチューニングしてスコア出せる感じなら大体いけるやろーと思ってたんですが、当日のあの問題の感じでは割と焦りまくりでした。

やった事は大体以下の様な感じ。

  • isutarを統合する (不要なマイクロサービスは殺すべし)
  • keywordリストを全部redisに乗っける
  • 瞬間的に各keywordに大量のアクセスが来てunicornが詰まるのでpumaに変える (loginとかのPOSTが詰まると減点がでかい)
  • nginxで静的なファイルの配信をしてクライアント側にキャッシュさせる

この辺りで、大体5000ぐらい。

周りが既に数万とか越えてて、これはいよいよアカンかなあと思ってました。

大体15時前ぐらいまでこんな感じで、俺達は駄目だ〜〜……という雰囲気ですげー辛かったです。

(後で知った感じだと、Rubyでやったチームは割と皆この辺まで辛そうだったみたいですが)

その後で、モリスさんがhtmlifyした結果を事前にrenderしてDBに全部保持するようにしたら50000越えて一気に10倍になりました。

この辺りでテンション上がってやる気が復活してきたw

後は以下の様なことに時間を費しました。

  • キーワードが新しく追加された時だけ、それを含むドキュメントをexpireする
  • トップページのHTMLをredisに突っ込む

これで大体10万から12万ぐらいになりました。

ただ、リンクが無いよというエラーがめっちゃ大量に出て辛く、キャッシュではそれをどうしても消し切れなかった。

ここで時間食い過ぎて、もうちょっと改善する余地があってもトライしきれなかった。

正直、エラー表示を気にし過ぎたのが失点だったと思います。無視して突っ走ればもうちょっと時間が取れた。

多分、pumaのワーカー数を上げるとかすればもうちょっとスコア伸びてたはずで、ちゃんとベンチの結果を得られてなかったのが残念でした。

最後の最後で、エラー消し切れてないけどスコアは出てるからこれでエンキュー。

これは落ちたなーと思って「人権をロストした」とかツイートしながらヤケ酒を飲みにいきました。

特に最後トップページのキャッシュを実装してたのが私だったので、時間内にやり切れなかった感じで、本当しくじったなーと思ってました。

途中から何となく思ってて終わってからモリスさんに、JRubyに変えてシングルプロセスでメモリ上に全部積んでスレッド立てまくれば実は結構スコア伸びたんじゃ、という話をしたら早く言ってくださいよー!って言われたw

そんな感じで店を探してる途中で、予選通過の案内を確認してその場でハイタッチしてヤケ酒から祝杯へチェンジすることになりました。



名立たるISUCONの猛者達が次々と爆死する中予選突破出来たのはとても嬉しいです。

モリスさんの無敗神話が継続できたのでチームメンバーとしてとてもホッとしました。


今回は私がRailsの基盤周りとnginxのちょっとした修正、後はモリスさんと相談して分担しつつ重いところを直すって感じで、インフラ方面をtnmtさんに見てもらってました。

インフラ方面の設定を任せてたらいい感じに準備しておいてくれるのにとても助かりました。後ログの情報を取っておいてもらったり、再起動スクリプト用意してもらったり。

モリスさんには流石にISUCON慣れしていて段取りがとてもスムーズだったのにも、とても助けられました。


どうも参加者のツイートなりブログなりを見る感じだと、10万辺りで割と団子だったっぽく、ベンチマークスコアのブレが結構大きかったこともあって、本当に運が良かっただけっぽいなあという気もしてますが、せっかく本戦出場できる機会を得たので、本戦ではしっかりと結果出していきたいなあと思います。


初参加でめっちゃ疲れましたが、とても楽しかった。そして予選突破できて本当良かったです。