読者です 読者をやめる 読者になる 読者になる

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を独立したスクリプトにしちゃいた…

プログラマと爪の手入れ

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

WEB+DB PRESS Vol.66 に寄稿しました

Web業界のエンジニアは全員読んでるWEB+DB PRESSですが、本日12月23日発売のVol.66に寄稿しました。 特集3「クックパッド開発ノウハウ大公開」ということで、クックパッドのエンジニア5名で開発スタイルやノウハウを書いてます。 僕が書いたのはインフラにつ…

ActiveRecordのSQL実行をフックしていろいろやる

ActiveRecordで、あるSQLが発行された時に、そのSQLが実行されるDBのコネクション情報を調べたいときがある。Hoge.find() したときにどういうSQLが発行されているのかというのはdevelopment環境ならデフォルトでdevelopment.logにクエリログが出る。 このロ…

S3のダウンロード速度を1.5〜4.5倍高速化する怪しげな方法

aws

バケットのIPアドレスを適切なものに固定することで、期待値でいうと1.5倍、最大で4.5倍程度高速にダウンロードできます。 この方法は非常に効果が高いですが、非公式なものであり、ある日突然破綻する可能性もありますので自己責任でお願いします。 S3のバ…

putsに日付時刻を付ける

で、putsすると puts "hello" [2011-12-07 23:49:14 #21891] hello となる。 何に使うの? daemonsっていうお手軽デーモン化のgemがあってよく使ってるんですが、これのロガーはLoggerとかじゃなく、デーモンの中で標準出力に書いたものをそのままログファイ…

Rackのミドルウェアをconfig.ruやapplication.rbじゃないところでuseする

RackのMiddlewareを書いたらどこかでuseしなくちゃいけないんだけど、どこでuseするのかという話になる。 Rails3だと、 config.ru config/application.rb その他(ただし Application.initialize! より前) っていうパターンがある。 config.ruとかapplicati…

gist貼れるの?

は、貼れた〜

super pre記法 syntax highlighting テスト

[STDOUT, STDERR].each do |io| io.instance_eval do def puts_with_format(*arg) print "[#{Time.now.strftime("%Y-%m-%d %H:%M:%S")} ##{$$}] " puts_without_format *arg end alias puts_without_format puts alias puts puts_with_format end endシンタ…

#RubyKaigi 2011で気になったgem 13選

Rubyist達の夏フェスであるところのRubyKaigiが今年も開催され、猛暑の練馬が大いに盛り上がりました。今回が最後の開催とのことで、関係者各位は素晴らしい会議を本当にどうもありがとうございました。 さて、今年のRubyKaigi2011での各セッションで紹介さ…

私がクックパッドの画像配信野郎です

一年ほど前にヤフーを退職した私ですが、その後なにをやっているかというと、クックパッドに入社して画像配信をしています。私が入社する前から動いていた画像配信の仕組みは設計が古くてなにかと困っていたので、より良いシステムを開発してリプレースとい…

2枚の画像のdiff(差分)を超簡単に調べる方法

Githubで画像の差分を見られるモードが話題を呼びましたが、このように2枚の画像の差分を調べたいときって時々ありますよね。 そんなときImageMagickのコマンドラインツールを使えば、たった1行で実現できます。 $ composite -compose difference A.jpg B.jp…

「※この発言は個人の見解であり、所属する組織の公式見解ではありません」をリリースしました

http://この発言は個人の見解であり.所属する組織の公式見解ではありません.tsuyabu.in/ 「※この発言は個人の見解であり、所属する組織の公式見解ではありません」は、発言専用のTwitterクライアントです。これを使って発言すると、その発言があくまで個人の…

facebookにtwitterのフィードを流してる男の人って…

twitterへの投稿は、見たい時に見たい奴がtwitter上で見ればいいのであって、わざわざfacebookにマルチポストする意味が分からない。でもfacebookはその辺がよくできていて、見たくないものは簡単にオフにできます。発言の×ボタンをクリックして、「Twitter…

本当は速いImageMagick: サムネイル画像生成を10倍速くする方法

一般的に ImageMagick のサムネイル画像生成は遅いとされており、パフォーマンスが求められるシーンでは Imlib2 などのより高速な画像処理ライブラリが使われることが多いです。 Imlib2 の高速さについては、以前「Imlib2でImageMagickより3倍高速かつ美しい…

Amazon EC2インスタンスに簡単にSSHできるようになるツールec2sshを公開しました

みんなが大好きなクラウドホスティングサービスのAmazon EC2ですが、インスタンスをバンバン立てたり落としたりしていると、ホスト名の管理が面倒になってきますよね。たとえば「さっき立てたインスタンスにSSHしたい!」と思ったら、consoleをひらいて、「e…

query_trace: SQLが発行されたファイルと行番号を調べる

Railsで、ActiveRecordがSQLのログを吐いてくれるんですが、これだとどのクエリがどこから呼ばれたのか分からなくて、デバッグがしにくい。 Schedule Load (0.023687) SELECT * FROM schedules WHERE (schedules.id = 3) LIMIT 1 Resource Load (0.001076) S…

function hoge(){} と var hoge=function(){} の違い

javascriptはあまり得意ではなくて、この件について、定期的に忘れて同じ質問を人にしてしまっているので、ここに書いておく。 function hoge(){} と var hoge=function(){} に違いはあるのか? という問題について。結論から書くと、hogeのスコープが違う。…

自転車のコグを交換した

俺の自転車はピストと呼ばれるタイプで、変速機がついていないので、ギアを重くしたい場合にはコグというパーツを交換する必要がある。 自転車を買ってからこれで片道12kmくらいの距離を通勤しているので、だんだん慣れてきてもうちょっと重いギアにしたくな…

ブロック引数つきのObject#presenceというのを考えた

以下のような処理をしたい。name という名前のユーザを探し、その年齢を出力する。 def age(name) Persion.where(:name => name).age end 上のコードはまずいところが一箇所ある。 name というユーザがいなかった場合に、例外になるという点だ。 def age(nam…

RailsじゃなくてもActiveSupportの自動require機能を使う

Railsでは、 config/application.rb で config.autoload_paths << Rails.root.join("lib") と書いておくと、例えば $ cat lib/my_library.rb class MyLibrary : endみたいなファイルが置いてあれば、Railsアプリ内で MyLibrary クラスを特にrequireしなくて…

ruby-profとKCacheGrindでプロファイル野郎になる

速さが足りない!!!!! そんな時はプロファイリングの時間ですね。 Rubyには標準添付ライブラリとして profile というプロファイラがついてくる。でもこのライブラリはあまりに遅すぎて実用に耐えないから、多分誰も使っていない。ほとんどのRubyistは ru…