退職しました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にリダイレクトされて下のような画面が出る。
ふぇ~すぶっくで、ゾウガメの首をもって顔近づけて写真撮ってるきれいなねーちゃんの写真が流れてきたけど、完全にアレ
— チュッチュとはえ10歳さん (@tohae) 6月 6, 2012
twitterで亀頭の話をした罰か?
とはえちゃんがfacebookで何をしたのか確認しようと思ったら見えなかった
— よこち / Hayato YOKOTAさん (@yokochie) 6月 6, 2012
とはえさんのFacebookまじで見られなくなってたw Profile UnavailableSorry, this profile is not available at the moment. Please try again shortly.
— genta kaneyamaさん (@PENGUINANA_) 6月 6, 2012
他の人から見れないらしい。
@tohae 同じ事言われた時、しばらく放置しておいてログイン試してみたら入れましたー
— わおんさん (@Guzzbite) 6月 6, 2012
しばらく放置すると復活することがあるらしい。
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 Chrome to Phone 拡張機能
https://chrome.google.com/webstore/detail/oadboiipflhobonjjffjbfekfjcgkhco
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
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