znzの日記

 

2012-07-28

Mountain Lion にあげた

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

  • GP02 の USB 接続で使えるかどうかを確認し忘れていた。
  • 通知センターの表示はトラックパッドの外側からで良いのに、右端ぎりぎりからじゃないとダメだと勘違いしている人がいる( http://goryugo.com/20120726/moutain_lion_notification_center/ )ので、説明が悪い気がする。(最初同じ勘違いをしていて、トラックパッドの設定のデモを見て外側からで良いと知った。)
  • 通知センターに Linux での notify-send のようなコマンドラインからメッセージを表示させる方法がわからなった。

2012-03-11

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 以下に入れる方法がわかりにくかった。
  • bash から exec zsh したら SHELL 環境変数が /bin/bash のままだったので「eval "$(rbenv init -)"」で bash 用の補完が設定されて変になった。
    • 先に SHELL 環境変数をちゃんと設定するようにして解決。他にも悪影響があったかもしれないので、 rbenv 自体は悪くないと思う。

2012-03-09

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 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

2012-03-02

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

2010-12-21

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
 
Connection: close