退職しました2

入社して2年3ヶ月勤めたOKWaveを退職しました。
Q&Aサービスでいろいろやってやろうと思って入社したら、新規サービス開発をやることになってRailsをやることになり*1、Rails3へのバージョンアップや、Prototype.jsからjQueryとCoffeeScriptへの移行や、テストコードとCIの導入とか、デプロイ方法の変更とか、Gitへの移行とか、開発機をMacに移行とか、開発基盤もどきなこととか、新人教育とか、ちょっとしたマネージメントもどきとか、サービス開発だけでなく開発環境をよくするための色々を好き勝手やらせてもらってました。
小さなサービスとチームを大きくする楽しみは大きく、あっという間の2年3ヶ月でしたが、いろいろ思うところがあって転職することにしました。

辞めた理由

大きな理由としては、ユーザーやアクセス数が多く、ちゃんとマネタイズができるWebサービスを作りたくなったからです。
新規サービスを作るチームはいろんなことを一から決めれる楽しさがあるんですが、新規サービスはなかなか流行らないので色々と辛くなっていきます。
流行ってないなら問題を見つけ出して少しずつ改善して徐々に伸ばしていくか、見切りをつけて閉じるかができればよかったんですが、いろんな事情があって難しかったので転職することにしました。
あとはここ半年くらいのプロジェクトの意思決定の仕方とかスピードとかも嫌だったんですけど、まぁそのあたりはもう解消されたので良いです。

次の会社

次は渋谷で1軍定着を目指して野球をがんばります。
前までは「人の役に立つサービス」をやってることと、Perl以外の言語を使ってる会社を重要視してたんですが、ここ2年の鬱憤がたまって、多くの人に使われてちゃんとお金を稼いでるサービスを作りたくなりました。
最近はRubyばっかりだったのでRubyの会社に行きたい気持ちもありましたが、言語よりもユーザー数や金儲けの方を今回は重要視しました。あとRuby使ってるそれっぽいイケてる会社は球団を持ってないですからね!!!
まぁ球団があることを理由にするとみんなに笑われてネタのように思われるんですけど、みんな野球がおもしろいことを知らなすぎますし、球団買って何かおもしろいことをしようとしてるのはちょっと感じましたし、さらにインターネットの力で球団の暗黒時代を脱出させられたらおもしろいと思います。でもたぶん野球に関する開発はやらなさそうです…。


他にも辞めた理由とか次を決めた理由とかもうちょい色々あるんですが、うまく表現できなかったので会った時にでも聞いてください。明日の出社用の提出書類が半分以上揃えられてないけど寝ます。9時半出社を強いられてるんだ!!!

*1:結果として良かった

Redis.newする時にloggerを設定して、rails consoleに実行したredisのクエリを表示する

タイトルのまんまなんだけども、一応やり方を。

Redis.new :logger => ActiveRecord::Base.logger

これだけ。Rails.loggerじゃなくてActiveRecord::Base.loggerを使えばrails consoleにクエリとかかった時間などが表示される。便利。

Rails3.2.6に上げたらDEPRECATION_WARNINGが出たので対応した

http://weblog.rubyonrails.org/2012/6/12/ann-rails-3-2-6-has-been-released/

先日Rails3.2.6が出て、SQLインジェクションとかあるから(´∀`∩)↑age↑てくださいと言われたので、重い腰を上げてRails3.2.2から3.2.6にバージョンを上げた。
テスト流したらDEPRECATION_WARNINGがいっぱい出たのでその対応方法を一応書いとく

:confirm option is deprecated and will be removed from Rails 4.0

= link_to "hoge", hoge_path, :method => :delete, :confirm => "フォーマットするのか?"

上のようにviewでaタグとかに:confirmと書いておくと、確認用のダイアログを出してくれるRails(jquery_ujs)の便利機能がある。
削除リンクとかでよく使ってたんだけど、この書き方がRails4.0から使えなくなるらしい。

= link_to "hoge", hoge_path, :method => :delete, :data => {:confirm => "フォーマットするのか?"}

で、対処方法は:confirmではなく、:data => {:confirm => ""}を使いましょうとのこと。書く量が増えてめんどくさいです…

:disable_with option is deprecated and will be removed from Rails 4.0

= submit_tag("Submit", :disable_with => "Sending...")

上のようにViewでsubmitとかに:disable_withを書くと、フォームの二度押しを防ぐことができる便利機能がある。Rails3レシピブックにも紹介されてます。
これまた楽だからよく使ってたんだけど、Rails4.0で無くなるらしい。

= submit_tag("Submit", :data => {:disable_with => "Sending..."})
confirmの時と同じように、
dataの中に入れれば良いとのこと。これまた書く量が増えてだるい…。

他にもいろいろありそうだけど、ひとまずWARNINGが出たのはこの2つでした。
新しいバージョンが出るたびにちゃんと追って行かないとRails4系に上げるのが大変そうなので、今後はサボらずにバージョンをあげていこうと思った。

セッションの保存先にRedisを使う

Railsのデフォルトだとセッションの保存先はCookieになるけど、様々な事情からサーバ側にセッションのデータを持ちたくなることがある。
Railsはセッションの保存先をMySQLにすることもできるけど、expireがめんどくさいとか他いろいろを考えて使いたくない。
memcachedを使うのが一般的な気もするけど、memcachedをインストールするのがめんどくさかったので、今回はRedisを保存先に使うことにした。*1

redis-storeとredis-railsを使う

https://github.com/jodosha/redis-store/
https://github.com/jodosha/redis-store/tree/master/redis-rails

このgemを使うとRailsとかSinatraとかRackとかのキャッシュやセッションの保存先にRedisを使うようにすることができる。便利。Railsの場合はredis-railsを使う。

config/initializers/session.rb を編集する
Hoge::Application.config.session_store :redis_store, :servers => "redis://localhost:6379/1", :expire_in => 60 * 60 * 24 * 7 * 2 

session_storeの指定のところを:redis_storeに書き換え、:serversでRedisの接続先を指定する。
Redisはdbを複数持てるので、セッション用にdbを指定した方が良いと思う。

expire_in は2.weeks.agoのように指定したいところだけど、redis-storeの中で
expire_inで指定した値をto_iしてたので、 60 * 60 * 24 * 7 * 2 のように書いてる。

最後にrailsを再起動すればCookieの時と同じコードで動く。簡単。
ただCookieで動いてたものをRedisに切り替えると、それまでログインしてたユーザーがログアウト状態になるのでお気をつけて。

*1:RedisはResqueを使ってる関係上すでにインストールされてた

GCを止めてrspecを高速化する

https://makandracards.com/makandra/950-speed-up-rspec-by-deferring-garbage-collection

GCを止めてrspecを高速化しようという話。
やり方は簡単で上記のリンクにあるコードをspec/support以下にでもおいて、spec_helper.rbにbefore(:all)とafter(:all)を書き足せばいいだけ。
上記のコードだとデフォルトで10秒間に1回だけ行うようになってるがENVで秒数は指定できる。
文中には15%の高速化とあるけど、手元のコードもだいたいそれくらい速くなった。

ただ実際に動かすとわかるけど、メモリをめっちゃ食う。
手元の環境(iMac 21.5-inch, Mid 2011 メモリ8GB)だとrspec自体は2〜3分で、メモリは残り100MBくらいまでになる

https://github.com/diaspora/diaspora/blob/master/spec/support/deferred_garbage_collection.rb

def self.memory_threshold
  @mem = %x(free 2>/dev/null).to_s.split(" ")
  return nil if @mem.empty?
  @mem[15].to_i / (@mem[7].to_i/100)
end 

ちょっと前に話題になったdiasporaだと上のようにしてメモリ使用量を取得して、メモリが90%以上になったらGC.startしてるけど、Macだとfreeコマンドが使えないからうまくいかない。
他にもググるとexampleを実行した回数がn回になるまでGCを止めるという方法が出てくるけどどうなんだろう?
全体のテストはリモートのLinuxマシンでやらせればいいという話もあるんだけど、どうにかしてうまくできないもんかなー。

sorry.php

Facebookにアクセスすると、sorry.phpにリダイレクトされて下のような画面が出る。

twitterで亀頭の話をした罰か?


他の人から見れないらしい。

しばらく放置すると復活することがあるらしい。

FirefoxからChromeにようやく乗り換えたので入れた拡張機能などメモ

フォクすけが好きでFirefoxを使っていて、他にもツリー型タブやVimperatorやDeliciousのアドオンなどが便利すぎて手放せない状態が長く続いてましたが、MacBook Airが貧弱なのでFirefoxのメモリ馬鹿食いにいらっときたのと、Deliciousのアドオンがなんか動かなくなったのと、Vimperatorの設定するのめんどくさくなったのでChromeに移行しました。
という訳で入れた拡張機能や設定などをまとめておきます。近々Windowsを触ることになりそうだし…。

ブックマークバーを出す

まず環境設定でブックマークバーを出して、そこに色々ブックマークする。
Firefoxではブックマークを使ってなかったのでインポートしてない。
Firefoxの時はDeliciousのある特定のタグをブックマークバーに出すアドオンを使ってたけど、Chromeでなんかうまくできそうなの無かったので諦めてローカルのブックマークを使うことにした。
なんかいい拡張機能を教えてほしい。

検索キーワードを設定する

http://dic.yahoo.co.jp/
http://www.amazon.co.jp/
http://rubygems.org/

この辺りにアクセスして、検索フォームのところで右クリックし、「検索エンジンとして追加」を選ぶ。そうするとブックマークにキーワードを追加する。dic.yahoo.co.jpの場合だと「dic」とか。そうするとURLバーの所で、「dic」と入力した後にスペースを入れると、後のキーワードをdic.yahoo.co.jpで辞書検索してくれるようになるので便利。

こんな感じになる。

about:flagsを適当にいじる

URLバーにabout:flagsと入れると試験的な機能とかを使えるので、適当に有効にしてみたりして遊ぶ。

拡張機能を入れる

Chrome Web Storeで適当に探せば出てくるので便利ですね。
ひとまず入れたのは下記の拡張機能たち

AutoPagerize

https://chrome.google.com/webstore/detail/igiofjhpmpihnifddepnpngfjhkfenbp

AutoPagerizeも最近いらない気がしてきてるけどとりあえず入れた

Google Reader Open entry in background tab

https://chrome.google.com/webstore/detail/lcimnckjiicikfpppcgnjhiflibbnbel

GoogleReaderでvを押した時に新しいタブがバックグラウンドで開くようになるので便利

Google Page Speed

http://code.google.com/intl/ja/speed/page-speed/docs/using_chrome.html#Installing

YSlow的なのでたまに使うと発見があるので一応入れてみたりしてる。ほとんど使わない。
前述したabout:flagsの設定をいじっとかないと入れられなかった気がする。

MigemoFindInPage

https://chrome.google.com/webstore/detail/fojbanjemmcmjomadodejdophegjdpkc?utm_source=chrome-ntp-icon

migemoはローマ字のまま日本語を検索してくれる便利なものなんだけど、別にそれが使いたいわけではなくて、ページ内検索をcommand + fではなく、/で検索したかっただけで入れた。便利。

Keyconfig

https://chrome.google.com/webstore/detail/okneonigbfnolfkmfgjmaeniipdjkgkl

Vimperatorっぽいショートカットを設定できるので便利。設定がJSON形式で保存されていて、インポートとエクスポートができるのも複数台のマシンで使うときに便利。

テーマを変更する

テーマもChrome Web Storeで探せるので気に入ったものがあれば入れる。
ただFirefoxから移行した人は必ずこのテーマにしましょう!!!
https://chrome.google.com/webstore/detail/mdfmcddmngjdmjmhhpcnbnmnkdhpjhef?utm_source=chrome-ntp-icon

Chromeに移行した感想

Firefoxが手放せなかったいくつかのアドオンが今でも恋しいけど、そこまで不便なく使えてる感じはする。Firefoxにあるようなアドオンは結構Chromeにもあるので、よっぽど変わったアドオンに依存してる人以外はChromeに移行したほうがいいですね。