Rails3+でassetsのログを非表示にする

邪魔だなーとか思いつつgrep通すなどして非表示にしてたけど、本家のissuesを漁っていたら二年ぐらい前から言われてるようで。

Served asset log messages are pretty annoying! :)

正解としては、config/initializers以下あたりに適当な名前で以下のコードを置けばいい。

# config/initializers/quiet_assets_log.rb
Rails::Rack::Logger.class_eval do 
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if     env['PATH_INFO'].index("/assets/") == 0 
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end 
  end 
  alias_method_chain :call, :quiet_assets 
end 

その後もクラスにしたりいろいろ試行錯誤されてるけど、開発でしか使わないしこんなもんで充分だよね、という話。

サンフランシスコのプログラミングを教える学校が導入した学費の仕組みが大きな注目を集めている。それは「仕事に就くまで、学費は支払わなくていい」というものだ。卒業して仕事を見つけた人は、初年度に稼ぐ年収の15%を学費として6ヶ月間ほど支払う契約になっている。

sublime text2で好きな場所に秒速で新規ファイルを作る

最近sublime text2を買い、モダンで動作が高速なvim環境を目指して徐々に移行してます。 一番の障害はキーボードから手を離さないと出来ない操作なので、それを無くす方向でプラグインなどを探してるんだけど、表題のようなことをするのに最適なpluginを見つけたので紹介。

ケースとして、表題のように指定した場所に新規ファイルを開く場合。 vimだと

:e some/directory/newfile.txt

ってやるとnewfile.txtの有無に関わらずそこでそういうファイルを開いてくれるんだけど、sublime text2のgoto anythingでは存在しないファイルは開けないので困っていたところ、noklesta / SublimeQuickFileCreatorというのを見つけた。

これをInstall Packageからインストールして、bindkeyに以下のように追加すると文字通りQuickにファイルが開けて便利です。

[
    { "keys": ["command+n"], "command": "quick_create_file" },
    { "keys": ["command+alt+n"], "command": "quick_create_directory" } 
]

僕は標準のCommand+nの挙動は必要ないので上書きしてしまいました。 Command+alt+nにするとディレクトリも作れて便利です。

Tags: sublimetext2

PHPでXMLをArrayに変換する多分一番簡単な方法

PHP Manualのsimplexmlの欄に書いてるけど

$xml = '<?xml version="1.0" ?>
<root>
    <parent>
        <child>MUSUKO</child>
    </parent>
    <attr foo="FOO" bar="BAR" />
</root>';

$array = json_decode(json_encode(simplexml_load_string($xml)), true);
var_dump($array);

東京Ruby Kaigi #10のコードゴルフ問題

東京Ruby Kaigi #10に絡んでCodeIQに出題されてたFizzBuzzコードゴルフの問題について。 当日聞いてた中で一番短かったのは68byteだったと思うけど、そこまでたどり着かずギブアップ。 誰か教えてください。。。

$*[0].to_i.upto($*[1].to_i){|i|i%3<1&&x=:Fizz;puts i%5<1?"#{x}Buzz":x||i}

ついでに、当日スタッフで参加してて他でもやりたいと思ったことを適当に

  • ノベルティの袋詰めは事前にやるとよい
  • スポンサーの方交えて事前・事後懇親会やるといろいろ捗りそう
  • プロジェクタにPC切替器付けとくと登壇者の切り替えがスムーズ
  • 振り返りボード、KPTは最初から設置しておく
  • あんちぼっちxxxがぼっちじゃない人たちも一緒に盛り上がってて楽しそう
  • ピンバッチ交換のアイデアがすごく面白かった
  • 黒とか闇とかはどのコミュニティでも大変盛り上がります

#kabepy Advent Calendar 22日目

こんばんは。Python界にたまに遊びに行くsanojimaruです。 これは#kabepy Advent Calendarのポストなんですが、みなさま#kabepyをご存知でしょうか。

#kabepyとは

正式名称?はPythonボルダリング部です。Pythonの人が集まって定期的にボルダリングする会ですが、僕みたいに全然Pythonにコミットしてなくても快く受け入れてくれるとってもいい人たちなので、多分普通のボルダリング部です。

基本的にTwitterでハッシュタグ#kabepyで連絡を取り合って、月1〜2ぐらいでやってます。FacebookにもPythonボルダリング部というグループがあります。また、活動の際はconnpassにあるPythonボルダリング部で募集するので要チェックです。

ボルダリングの魅力

そもそも僕もまだ数えられるほどしかやってないですが、楽しく体を動かせる点が素晴らしく魅力的です。最近お腹回りが気になってきてジムとか行ってみたけど、ガラスに映る自分の姿を見ながら同じ所を走り続けるなんて苦痛以外の何物でも無いです。その点、ボルダリングには難易度毎に課題という短いコースがいくつもあり、小さなスパンで達成感を味わいながら壁にチャレンジし、気づいたら全身筋肉痛になっているという素敵なフローが出来上がります。

ちなみに僕は初心者のボルダリング入門・上達法というサイトを少し眺めてから行きました。 あと、Pythonボルダリング部のテンプレートがすごく勉強になります。

料金
  • 初回登録料 1,575円(登録用紙をあらかじめ記入して持ってくるとスムーズかと)
  • 平日夜間(18:00~) 1,575円
  • シューズレンタル 210円(初回無料)
  • チョークレンタル 105円(初回無料)
持ってくるもの
  • 動きやすい服装(更衣室あります)
  • (薄手の)靴下
  • タオル(汗かくので)
  • 水とか(汗かくので)
伝道師 takabow センパイからのお言葉(new ver.)
  • ボルダリングジムを使うにはジムでの登録が必要です。初回登録料(1500円程度)と身分証明書(免許証など)が必要なので忘れずに。
  • 格好は動きやすい服装ならなんでも大丈夫です。登るために必要なクライミングシューズはレンタルできます。ただしレンタルシューズなので靴下の持参が必須です。
  • 参加前に手足の爪を切っておくことをおすすめします。クライミングシューズはきついので、足の爪を切り忘れると、爪が隣の指に刺さることがあります。
  • ジムによっては鍵のかかるロッカーが小さい為、仕事の鞄やPCなど大きなものが入りません。更衣室の棚に置いて行く事になります。部活動でよく使っている「B-PUMP Tokyo 秋葉原」には、財布など小物が入る貴重品ロッカーのみがあります。

最後に

日付が変わってしまったので手短に締めますと、#kabepyはこんな人にオススメです。

  • ボルダリングに興味がある
  • Pythonに興味がある
  • ボルダリングに行ってみたいけど一人で行く勇気がない
  • Pythonを書いてみたいけど一人で勉強する勇気がない
  • なんでもいいからみんなでわいわい運動したい
  • なんでもいいからみんなでわいわいプログラミングしたい

あと、Expert Pythonプログラミング読書会っていうイベントやってるので、#kabepyに興味があるけどいきなり初対面の人と壁登るのは不安という方はぜひご参加ください。

Rails3のController Specでファイルアップロードをテストする

以前まではActionController::TestUploadedFileとかいう微妙なクラスだったのだけど、Rails3よりfixture_file_uploadというメソッドになったので打ちやすくなりましたねっていうだけ。使い方は変わってない。

# fixture_file_upload(path, mime_type = nil, binary = false) 
let :uploaded_image {  fixture_file_upload('/uploadedimage.png', 'image/png')
before {  post :upload, {image_file: uploaded_image } }

Tags: Rails3 RSpec

Railsに設定しているtimezoneでDateTime.parseしたい

日本向けアプリを作る場合、Railsのconfig/application.rbのconfig.timezoneは’Asia/Tokyo’にするわけですが、DateTime.parseの結果にはtimezoneが反映されないという問題。 結論として、DateTime.parseじゃなくてTime.to_datetimeを使えという話。 rails cで叩いてみるとこんな感じ。

# Rails 3.2.6
irb(main):001:0> DateTime.parse('2012-07-31')
=> Tue, 31 Jul 2012 00:00:00 +0000

irb(main):002:0> Time.parse('2012-07-31').to_datetime
=> Tue, 31 Jul 2012 00:00:00 +0900

Tags: ruby rails

macでfind-xargsからのcpやmvに引数を渡す

ブログ毎日書く宣言を撤回せざるを得ないほど忙しかったわけですが。 以下のようにするとできますよと。

find . -name “*.php” | xargs -J% cp -f % ~/workspace/phpfiles

上記の例は、カレントディレクトリ以下にある.phpファイル全てを~/workspace/phpfilesにコピーするものです。 キモはxargsの-Jオプションで、これを使うと後に続く”%”はパイプからの入力で置換される。 execでも同じ事出来るけど、xargsの方が並列実行できるしより直感的なオプションですね。

rubyで㈱などの機種依存文字をUTF-8に変換する

“㈱”や”㈲”などの文字をCSVなどからShift_JISで取り込み、rubyでUTF-8に変換するときにUndefinedConversionでハマった。

"㈱".encode('UTF-8', 'Shift_JIS')
> "\x87\x8A" from Shift_JIS to UTF-8
> /User/sanojimaru/workspace/example/lib/string.rb:849:in `encode': "\x87\x8A" from Shift_JIS to UTF-8 (Encoding::UndefinedConversionError)

Shift_JISは一部の機種依存文字に対応していないので、CP932(Windows-31J)を使えば良い。

"㈱".encode('UTF-8', 'CP932')

Tags: ruby