Mountain Lion にあげた

慣れてしまって忘れないうちに不満点を並べておく。

  • キーボードの輝度が勝手に上がっていた。 (OS のメジャーバージョンアップのときに毎回設定が消えてる気がする。)
  • MacFace 1.3.1 が動かなくなった。
  • リマインダーとメモがやっとまともに同期や表示できるようになった。
    • 以前は Mail の中だったので Mail を使う気がなかったので、メモがどこに同期されているのか、長い間さっぱりわからなかった。
    • リマインダーは iCal にあったのは http://weekly.ascii.jp/elem/000/000/099/99437/ の記事を見て始めて知ったので、Lion に同期されていることさえ知らなかった。
  • 通知が増えて Spotlight の右に隙間が出来た。
  • キーボードショートカットが変わっている? 環境設定で「デフォルトに戻す」をしてしまったので、どこが変わってしまったのかは未確認。
  • svn コマンドがなくなっていて Xcode で Command Line Tools を入れる必要があった。
  • バッテリーのステータスとして「割合 (%) を表示」しか出来なくなった。 (予想残り時間はクリックして開かないと見えなくなった。)
  • プライバシーで位置情報へのアクセスを要求したアプリケーションに FirefoxGoogle Chrome も出てこない。
  • X11 が標準インストールではなくなっている。(昔の状態に戻っただけとも言える。)
  • その再起動後ぐらいから Quick Look とか AirMac ユーティリティとかリマインダーとかで表示されなかったり、プレビューが起動出来ずに落ちたりして、割と標準のアプリが使い物にならなくなった。
  • これは splashtop streamer のバーチャルディスプレイドライバをアンインストールしたら直った。
  • GP02 の USB 接続で使えるかどうかを確認し忘れていた。

rbenv いろいろ

rvm から rbenv に乗り換えて、しばらくたったので、どう感じなのかを書いてみる。

  • zsh でも安心
    • rvm と違って複雑なことをしていないので、 zsh が SEGV したり、 bash ならちゃんと動く機能が zsh だと動かなかったりということがない。
  • インストールが簡単
    • パッケージで入れるか git clone して PATH に追加するだけで使える
    • 「eval "$(rbenv init -)"」を追加するだけで補完が使える
  • バージョン設定
    • 「rbenv global」でデフォルトで使うバージョン設定 ( ~/.rbenv/version に保存)
    • 「rbenv local」でそのディレクトリ以下で使うバージョン設定 ( .rbenv-version に保存)
    • 「rbenv shell」で現在の環境で使うバージョン設定 (環境変数 RBENV_VERSION に設定、直接設定して export しても良い)
  • 情報表示
    • 「rbenv versions」で使えるバージョンを確認
    • 「rbenv version」で今使っているバージョンを確認
    • 「rbenv help」でヘルプ表示
    • 「rbenv commands」でコマンド一覧が出る (内部用っぽいのも出るのでいまいちかも)
  • ruby のインストール
  • プラグインで拡張できる
    • ruby-build で入る rbenv-install で「rbenv install」が使えるようになるようにサブコマンドが簡単に追加出来る (git 風?)
    • bundler を使っていないプロジェクト用に rbenv-gemset ( https://github.com/jamis/rbenv-gemset ) というプラグインもあるらしい

いくつかはまったことのメモも書いておきます。

  • 「rbenv version 」でタブを押してもスペースが入るだけで補完されないと思ったら、やりたかったことは「rbenv local 」か「rbenv shell 」だった。
    • 補完が変だと思ったら、使おうとしているサブコマンドが間違っていることが多い気がする。
  • cron などから実行するときに .rbenv-version をみてくれる ruby-local-exec というラッパースクリプトがあって、ちゃんと cd してから実行しないと使いたいバージョンにならなかった。
    • ちゃんと cd してから ruby-local-exec を使うようにして解決。
  • ruby-build を $HOME 以下に入れる方法がわかりにくかった。
    • 「PREFIX=$HOME/opt/ruby-build ./install.sh」のように環境変数 PREFIX を指定して install.sh を実行すれば良かった。
  • bash から exec zsh したら SHELL 環境変数が /bin/bash のままだったので「eval "$(rbenv init -)"」で bash 用の補完が設定されて変になった。
    • 先に SHELL 環境変数をちゃんと設定するようにして解決。他にも悪影響があったかもしれないので、 rbenv 自体は悪くないと思う。

valid_encoding? の validation 作成

validates_each だと allow_blank オプションのチェックの関係で String#blank? が呼ばれてその中で「ArgumentError: invalid byte sequence」になってしまうので使えなかった。
blank? で ArgumentError になるのは直る予定はなさそうなので、 validates_each は使えなさそうだった。 (参考: https://github.com/rails/rails/issues/1532 )

どうにか回避出来ないかいろいろがんばってみたところ validates_with なら大丈夫だった。

たとえば

  • rails new invalid-byte-sequence -T
  • cd invalid-byte-sequence
  • rails g scaffold post title
  • rake db:migrate

のように作成した rails 3.2.2 のアプリケーションで、以下のように validation を設定するとうまくいった。

  • rails runner 'Post.create!(title: "\x82\xA0")'

などで動作確認出来る。("\x82\xA0" は "\u3042".encode(Encoding::SJIS).force_encoding(Encoding::UTF_8)) で作成)
コメントアウトしている部分を有効にしたり、他の validates に「if: "title.valid_encoding?"」をつけていなかったりすると「invalid byte sequence in UTF-8」になる。

class EncodingValidator < ActiveModel::Validator
  def validate(record)
    unless record.title.valid_encoding?
      record.errors[:title] << "has invalid encoding"
    end
  end
end

class Post < ActiveRecord::Base
  validates :title, presence: true, if: "title.valid_encoding?"
  #validates_each :title do |record, attr, value|
  #end
  validates_with EncodingValidator
end

assets のログを黙らせる

Rails 3.2 で assets のログって邪魔だなあと思って調べてみると、黙らせる方法があるようだったので http://journal.sooey.com/185 とか http://blog.yabasoft.biz/archives/3905 とか https://github.com/rails/rails/issues/2639#issuecomment-2252326 を参考にして、 Ruby 1.9.3 だったので '/dev/null' を File::NULL に変えて、以下の内容の config/initializers/quiet_assets.rb を作成した。

Rails.application.assets.logger = Logger.new(File::NULL)
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

gihyo.jpのリダイレクト設定

gihyo.jp の広告がひどくて、

  • でかでかと出てくる
  • クッキーを拒否していると毎回出てくる
  • スキップが右の方にあってウィンドウの幅が十分にないと横スクロールしないと押せない
  • クッキーを拒否していると2ページ目以降が表示できない
  • クッキーを許可していても開いたまま時間が経って次のページに行こうとしたら広告ページに飛んでまた最初のページに戻ってしまう

など、かなりひどい状態で耐えきれないので、自動でスキップする設定を探してみたところ http://d.hatena.ne.jp/k2jp/20101214/1292331810 を参考にして Redirector という拡張を使えば良いということがわかった。

記事に書いているように条件が厳しすぎるようで gihyo.jp/admin/clip/01/fdt/201012/21 のようなページがダメだったので、条件を緩めて必要なさそうなところも含めて全ページに ?skip をつけるようにしてみた。

Export した設定は以下の通り:

http://gihyo.jp/dev/serial/01/start_webap/0012,,,(https?://gihyo\.jp/[^?]*)$,,,$1?skip,,,R,,,\?skip,,,false,,,false
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0142?page=2,,,(https?://gihyo\.jp/[^?]*)\?(.*)$,,,$1?skip&$2,,,R,,,\?skip,,,false,,,false