url_for のつまずきどころ

 Rails で以下のメソッドで 該当アクションへの URL を生成することが出来るけれども、呼ぶ場所によって挙動が違ってちょっとつまずいた。

url_for :controller => 'user', :action => 'show', :id => 100

動かしてるサーバが http://localhost:3000 とすると、以下の様になりました。

Controller内
http://localhost:3000/user/show/100
View, Helper内
/user/show/100

View, Helper 内で絶対URL をとるのに一番簡単そうなのは、config/route.rb に以下のように書いて、それを呼ぶという感じかなぁ…。

config/route.rb

ActionController::Routing::Routes.draw do |map|
  map.user '/user/show/:id', :controller => 'user', :action => 'show'
end

viewやhelperで

config/route.rb で map.user と定義すると、user_url() が定義されて使えるようになるので、viewやhelper で以下の感じで以下のようにすると絶対URLが取れます。

user_url(:id => 100)

View から絶対URL を取りたいとすると、どっか外部に戻りURLをくっつけて投げる処理などで使うくらいしか思いつかないです。

url_for のつまずきどころ

Railsでページごとに出力の文字コードを変える

Railsはデフォルトで UTF-8 だけれども、たまに何ページか Shift_JIS で出したいみたいなことがあって、そういうのは after_filter で定義しておけばよい。

 Controller に以下のように書いておけばよい。上位のとこで書いといて、必要なとこで呼ぶ感じに。

  after_filter :change_charset_to_sjis, :only => [:sjis_page]
  protected
  def change_charset_to_sjis
    response.body = NKF::nkf('-Ws', response.body)
    headers["Content-Type"] = "text/html; charset=Shift_JIS"
  end
Railsでページごとに出力の文字コードを変える

ImageMagickで画像変換

グレースケールにする

input.jpg をグレースケールにして outpug.jpg に出力します。ブログの背景が綺麗な青色だったのですが、グレースケールかけたらすごく暗くなりました。

%  convert input.jpg -type GrayScale output.jpg

大きさを変更する

input.jpg を、320px x 240px に収まるサイズで、アスペクト比を保持して small.jpg という名前で出力する。

% convert -geometry 320x240 input.jpg small.jpg

input.jpg を、幅320px の大きさ(縦はアスペクト比保持されて自動的に決まる)にして small.jpg という名前で出力する。

% convert -geometry 320x input.jpg small.jpg

input.jpg を、縦180px (幅はアスペクト比保持して自動的に決まる) の大きさにして small.jpg という名前で出力する。

% convert -geometry x180 input.jpg small.jpg

画像を強調する

コントラストを上げるのかな?

% convert -normalize input.jpg output.jpg

画像を回転する

オプションの数字は、時計回りの角度。

% convert -rotate 30 input.jpg output.jpg

画像を反転する

上下反転は -flip、左右反転は -flop

% convert -flip input.jpg output.jpg

画像に枠を付ける

これだと、縦2pxと横5px で、#999999 色の枠を付ける。これだと、output.jpg は input.jpg より縦が4px, 横が10px 広い画像になります。

% convert -border 2x5 -bordercolor #999999  input.jpg output.jpg
ImageMagickで画像変換

OSX でコマンドで画像変換

sips というコマンドを使うと、画像の編集がコマンドラインで行える。

 large.jpg という画像を thumb.jpg (幅60,高さ45)にする場合

% sips -z 45 60 large.jpg --out thumb.jpg

という感じにする。

コマンドで作ると、いちいちFinderから開くのがめんどくさいので、open コマンドで開くと便利。

% open thumb.jpg

でプレビューが立ち上がってすぐ確認出来る。

OSX でコマンドで画像変換

MySQLでauto_incrementの数値をリセット

該当のテーブルを空にした状態で以下のSQLを発行すれば戻ります。

ALTER TABLE `example_table` PACK_KEYS = 0 CHECKSUM = 0 DELAY_KEY_WRITE = 0 AUTO_INCREMENT = 1;

 InnoDBの場合は、起動時に max で auto_increment の値をとって、メモリ上に保存しておいて番号を振るらしいので、テーブルを空にして mysqld を再起動すればリセットされます。

MySQLでauto_incrementの数値をリセット