ISUCON5本選で2位でした(白金動物園)

白金動物園、2位いただきました #isucon @sora_h @rosylilly と3人でチーム「白金動物園」として ISUCON 5 に参加し、本選で2位を獲得しました。 主な分担としては sorah と rosylilly の2人が実装をして、僕はインフラまわりの整備と、ログ分析や指示出し、…

人間という最大の謎に挑む―『心と脳』

「記憶」とは何なのかについて興味があり、認知科学の本を何冊か読んでいる。今回は、安西祐一郎『心と脳―認知科学入門』を取り上げる。 心、脳、社会 「心」という現象がある。たとえば感情や思考、言葉、記憶、学習といったはたらきを「心」と呼ぶ。心は「…

緊張感を伴った読書との付き合い方―『読書力』『本を読む本』

恥ずかしながら、人生においてあまり多く本を読んでこなかったという後悔がある。 興味のある認知科学系の本や、業務上必要になったビジネス書を移動時間などに時間をかけて少しずつ読んだりはしているが、やはりもっと読書のために時間を作ってまとまった量…

retrobot の最近のアップデートについて(v0.2.0-v0.3.1)

1年前の自分と暮らす で紹介した retrobot という twitter bot ツールについてですが、記事を読んだ何人かの方が retrobot を運用してくださっているようです。ありがとうございます。 その後、ユーザの皆様からご要望を受けていくつかの改善を行いましたの…

開発合宿をする際の知見

数年前から身内で時々集まって開発合宿をしていて、成功失敗あわせて知見が貯まってきたので備忘録として記事にしておきます。 なお、ここで開発合宿と言っているのは1,2部屋に1泊して済ませるような規模のもので、ホワイトボードでブレストしまくりといった…

1年前の自分と暮らす

mirakui_retro という twitter BOT を作って、かれこれ5年くらい運用している。 mirakui_retro は 、1年前の mirakui のツイートをツイートするという BOT だ。つまり、 mirakui_retro の以下の発言は、僕がその1年前に発言したものだ。 このインターネット…

今年買ってよかったもの2013

ZOJIRUSHI ふとん乾燥機 【マット&ホース不要】 ブルー RF-AA20-AA出版社/メーカー: 象印発売日: 2012/12/01メディア: ホーム&キッチン クリック: 8回この商品を含むブログを見る 寝る前にセットすれば30分で布団がホカホカになって最高の睡眠エクスペリエン…

Nginx + Lua から MySQL を使う

この記事は MySQL Casual Advent Calendar 2013 の 12 日目です。 みんな大好き Nginx + Lua ですが、その Lua から MySQL が叩けるとなると、Nginx だけでウェブアプリケーションが書けちゃうという夢が広がりますね。 難しそうというイメージがあるかもし…

今さら聞けない Immutable Infrastructure

Immutable (不変な) Infrastructure は、サーバを一度セットアップしたら二度と変更を加えないという運用スタイルのことを指します。 クラウド環境では、必要に応じてすぐにサーバを用意し、不要になったら簡単に破棄することができます。Immutable Infras…

AWS re:Invent と Immutable Infrastructure

先日 Las Vegas で開催された AWS re:Invent 2013 に参加してきました。 非常に活気あふれる大規模なカンファレンスで、大変刺激を受けました。 今日は、いま何かと話題になっている Immutable Infrastructure に関連した発表を2つ紹介します。 Stop Worryin…

LLまつりとDevOpsDay Tokyo 2013に登壇します

登壇情報です。 8.24 (土) LLまつり Infrastructure as LL - プログラム - Lightweight Language Matsuri アプリケーション開発にLLを使うのは当たり前になった一方で、最近ではChefやPuppetといったサーバ構成管理ツールなどの普及により、インフラエンジ…

「全自動パラメータチューニングさん」は何であって何でないのか

発表資料: 全自動パラメータチューニングさん // Speaker Deck ソースコード: https://github.com/mirakui/tuningsan これは何なのか ハッカソンイベント「Open Hack Day Japan」にて、24時間の制限の中で開発し、90秒でプレゼンテーションした作品です 2013…

エンジニアサポートCROSS 2013に登壇します

2013年1月18日(金)に開催される、エンジニアサポートCROSS 2013 に登壇します。 「継続的システム運用のゲンバのハナシ」という @netmarkjp さんがオーナーを務めるセッションで、 @kuwa_tw さん、 @kazeburo さん、 @tnmt さんとともにディスカッションし…

不要なメルマガ広告はspamフォルダではなく配信拒否(オプトアウト)しましょう

一般にspamと呼ばれる電子メールには2種類あります。オプトイン(配信承諾)して受け取ったメールと、オプトインしてないのに届いたメールです。 この記事は、インターネット全体の利益を考えるなら、オプトインして受け取ったメール広告を迷惑に感じたら、s…

Passenger 4.0 beta1 の新機能解説

先日、 Phusion Passenger 4.0 beta 1 が公開されました。 近年は Passenger に代わり Nginx + unicorn の構成が Rails の業界標準になりつつありますが、Passenger 4 は大きく進化したようなので、そのアップデート内容を紹介します。 なお、この記事は 10/…

Rails3.2からログの行が他プロセスのものと混ざるようになった件について

Rails 3.2.0 から、マルチプロセス環境下(Unicornなど)では、 Rails.logger によるロギングが、以下のように複数のリクエスト同士で「混ざる」ようになってしまいました。 Started GET "/search?q=blip" for 0.0.0.0 at 2012-03-12 02:20:18 -0700 Process…

JPEGのフレームヘッダを読んでwidthとheightを取り出す

突然ですが、JPEG の構造はだいたい下記のような感じになってます。 今回は libjpeg 等のライブラリを使わずに、JPEGファイルから画像の width と height を取り出したいと思います。この width と height の情報は、上図におけるフレームヘッダセグメントに…

Unicornを同期的に再起動する

Unicornの再起動はシグナル(USR2等)を発行することで非同期的に行われるので、成功したのか失敗したのかがわかりづらい。 例えばCapistrano等でアプリケーションをデプロイしたあと、Unicornの再起動を行い、その再起動が成功か失敗かを判断したいことがあ…

WEB+DB PRESS vol.70に「実践Rails高速化」を寄稿しました

技術評論社の紹介ページ: http://gihyo.jp/magazine/wdpress/archive/2012/vol70WEB+DB PRESS vol.70 に「実践Rails高速化」という特集記事を寄稿しました。記事は40ページで、内容はこんな感じです。 第1章 Rails は遅いのか イントロです。 第2章 遅いコ…

はてなブログに移行しました(旧題「床のトルストイ、ゲイとするとのこと」)

「床のトルストイ、ゲイとするとのこと」という回文のタイトルで2006年からはてなダイアリーをやってきましたが、この度はてなブログに移行し、タイトルも「昼メシ物語」に改めました。はてなブログのインポート機能は、はてダについていたはてなブックマー…

複数のリモートホストで並列にコマンドを実行して結果をファイルでダウンロードするやつ書いた

コード(rop.rb) 使い方 まずリモートで実行したいスクリプトを用意します。例えばログファイルのgrepとかです。 $ cat script.txt grep hoge /var/log/nginx/access.log で、例のやつを実行します。 $ ruby rop.rb -H 'app-0{01..05}' -f script.txt そう…

Arproxyを使ったreadonlyなrails console

Rails console、リードオンリーモードがほしい2012-05-01 10:24:04 via YoruFukurou というわけでArproxyを使って実装してみました。 (mysql2 の部分は使っているアダプタに書き換えてください) これを script/ 以下等に置けば、rails console と同様に使…

ActiveRecordが発行するSQLをフックして色々やるためのライブラリArproxyを公開しました

https://github.com/cookpad/arproxy http://rubygems.org/gems/arproxy これは何? Arproxyを使うと、ActiveRecordが発行したSQLがDB Adapterによって実行される直前をフックすることができます。これによって、カスタマイズしたクエリログを出力したり、ど…

Railsで遅いMiddlewareを探す

AさんはRailsで書かれたある遅いコードの検証をしていました。 X-Runtimeヘッダを見ると $ curl -Is localhost:3000/hello | grep X-Runtime X-Runtime: 5.008580 5秒もかかってる。 しかしRailsのログを見ると Started HEAD "/hello" for 127.0.0.1 at Tue …

capistranoで今タスクを実行中のホスト名を取得する

問題 $ cap hoge ROLES=app HOSTS=app-01,app-02,app-03 としたときに、各ホストに、ホスト名をファイル名にしたファイルをtouchするようなタスク hoge を記述せよ。ただし、/etc/hostnameを参照してはならない。 こたえ task :hoge do run "touch $CAPISTRA…

ActionView::Templateのcompile済み中間コードをキャッシュする

まずRailsのviewについて説明する。Railsのviewはerbとかhamlとかで書く。この人間が書いたviewファイルはtemplateと呼ばれ、ActionView::Templateクラスで扱われる。一つのviewファイルが一つのTemplateオブジェクトになる。 このTemplateクラスはTemplate#…

unicornのタイムアウト時にもRailsのログをちゃんと出力させる

unicornはconfで timeout 20 とかやっとくと、20秒以上かかったらそのworkerが殺される。それはいい。問題はその殺され方にあって、タイムアウトしたunicorn workerはmasterにKILLシグナルで強制的に殺される。KILLで殺されてしまうと、worker側でtrapして安…

bundlerでgithub上のunicornを強引に入れる

みんな、unicornをカスタマイズして使う時は、オフィシャルのgithubリポジトリ(defunkt/unicorn)からforkしていじると思う。 そしたらそれを↓こんな感じにbundlerから入れてみたいと思うのが人情 gem 'unicorn', :git => 'git://github.com/mirakui/unicor…

rails runner的なことをrails runnerを介さずに直接やる

rails runner コマンドを使うと、各modelsとか、config.autoload_pathsに指定したファイルとかをロードした上でスクリプトを実行できる。 $ rails runner hoge.rb ただ、毎回 rails runner とか書くのはだるいので、hoge.rbを独立したスクリプトにしちゃいた…

プログラマと爪の手入れ

一日中キーボードを叩く仕事なので、爪の手入れには気を使っています。ちょっとでも爪が伸びてると指先が気持ち悪くて良いコード書けない気がしてきますね。最近ガラスの爪やすりを買ったんですが、すごくいいっすこれ。それまで爪切りについてるヤスリを使…