タグのバージョニング

acts_as_versionedは、モデルのバージョニングを手軽に実現できるプラグイン
acts_as_taggable_on_steroidsは、タグを手軽に実現できるプラグイン
併用したとき、モデルのバージョンを戻すと同時にタグもその時点のものに戻したいと思うのが人情というもの。

方法

acts_as_taggable_on_steroidsのタグリストのキャッシュ機能を利用すれば簡単に実装できる。

試した環境

Rails 2.0.2(Rails 2.1用のacts_as_versionedはまだ試したことない)

コード

class Item < ActiveRecord::Base
  acts_as_versioned
  acts_as_taggable

  # revert_toで、cached_tag_listからtag_listを復元する
  # (cached_tag_listがないとダメだよ)
  alias :revert_to_without_taggable :revert_to
  def revert_to_with_taggable(version)
    if revert_to_without_taggable(version)
      self.tag_list = cached_tag_list
      true
    else
      false
    end
  end
  alias :revert_to :revert_to_with_taggable
end

Filterクラスをつくってみる

class SampleFilter

  def initialize(options)
    # オプションのせっていなどなど
  end

  def before(controller)
    
  end

  def after(controller)
    controller.response.body.gsub!(/hoge/, 'fuga')
  end

end

class ActionController::Base #:nodoc:

  def self.sample_before_filter(options = {})
    before_filter SampleFilter.new(options)  # SampleFilter#before
  end

  def self.sample_after_filter(options = {})
    after_filter SampleFilter.new(options)  # SampleFilter#after
  end

  def self.sample_around_filter(options = {})
    around_filter SampleFilter.new(options)  # SampleFilter#before, SampleFilter#after
  end

end
class SampleController < ApplicationController
  sample_after_filter :only => [:index]
end

携帯絵文字をPCで表示するためのフィルタをつくってみた

id:darashiさんが開発している、Railsで携帯向けアプリケーションを構築する時に便利なRailsプラグインJpmobile」の機能を拡張するプラグインです。

Jpmobileにおいて、携帯の絵文字はUnicodeの私的領域にマッピングされます。そしてアクセスがあるとユーザの使用する携帯端末に合わせて変換後、送出されます。(after_filterなので、もちろんフラグメントキャッシュは利用できます。)
しかしながら、現在のところPCでのアクセスのためのフィルタは用意されてなく、PCで閲覧した場合何も表示されないか、ブラウザによっては文字化けします。

そこで、このプラグインの出番です。(いいすぎだったらごめんなさい)

特徴

よいとおもうところ
  • after_filterの段階で変換を行うので、HTMLタグのエスケープで悩むことがない(「h」つけてOK)
  • TypePadがCC2.1で公開している絵文字画像を対象としているのでライセンス的にだいぶ安心
  • すでに導入済みのシステムに対してもビューの変更などが不要
よくないとおもうところ
  • after_filterの段階で変換を行うので、アクション毎に変換が必要→きっと重い

インストール

プラグインのインストール
script/plugin install http://taslam-plugins.googlecode.com/svn/trunk/jpmobile_emoticon_filter
絵文字画像の配置

SixApartが公開している絵文字画像を使います。
必ずライセンスに目を通して、それにしたがって利用してください。

解凍すると、emoticonsというフォルダができ、その中に絵文字画像が沢山入ってます。
これをそのままRAILS_ROOT/imagesにコピーします。(RAILS_ROOT/images/emoticons/*.gifという感じになります)

なお、今回一番時間がかかったし大変だったのは、この絵文字画像との変換テーブルの作成でした・・疲れた。
※TypeCastのconfにyamlで入ってました。なんという無駄な努力orz

コントローラにemoticon_filterを書き加える
class SampleController < ApplicationController
  emoticon_filter
end

実際には、mobile_filterを使用する携帯用コントローラで継承するための抽象クラスと別に、PC用コントローラで継承するための抽象クラスをつくり、そこで呼ぶことになるでしょう。適当に応用してください。

インストールは、これだけです。

emoticon_filterのオプション
:classname => 'emoticon'  # 絵文字IMG要素のクラス名
:path      => 'emoticons' # 絵文字画像のパス(imagesからの相対パス)

追記

少し修正した。

  • フィルタのクラス名を変更した。ついでに、Jpmobile::Filter::Baseのサブクラスにした。
  • 入力時に絵文字画像のIMGタグから、内部コードに変換するようにした。
  • 数値実体参照を絵文字画像に変換するようにした。(※hを使うと&が&amp;にエスケープされてしまうため、微妙。思案中。)
  • あんまり使い道なさそうだったし、入力の変換でややこしそうだったので:only,:exceptオプション削除。

追記 2008.8.8

  • html及びjavascript以外でのレスポンスの場合、フィルタを適用しないようにした。
  • javascriptでのレスポンスの際、ダブルクォーテーションをエスケープするように修正。

毒餃子「中国国内では入手困難、混入は日本で」の農薬、やっぱり中国で手に入ることが判明

シラミ発見で頭髪に農薬塗る 8歳女児が死亡
http://news.searchina.ne.jp/disp.cgi?y=2008&d=0703&f=national_0703_018.shtml

重慶市永安村の8歳女児が6月30日、シラミを退治するために髪の毛に農薬のメタミドホスを塗ったことが原因で死亡した。7月3日付で重慶晨報が伝えた。
12歳になる姉も同様にメタミドホスを頭髪にまぶしたため病院で手当てを受けた。姉は危険な状態から脱したという。
姉は「大人の女性がシラミ対策のため頭髪に農薬を塗る様子を目撃したことがあるので真似をした」と語った。

メタミドホスってアレだよね、中国の毒餃子の。

  • 中国国内では入手はまず無理、日本で混入。
  • 日本人は弱い

とかいっておきながら、なんすか、これ。

マスコミ、政府はつっこめよ。

サイン入り本が当たった

帰宅したら、嫁が、WEB+DB Press vol.44の読者プレゼントの、「小飼弾のアルファギークに逢ってきた」(小飼氏サイン入り)が届いたとのことで、受け取りしてくれていた。

まさか当たるとは!
懸賞に当たるとか、小学生の頃、科学か学習かで「まとまる君」当てて以来だよ!

さっそく読むぞ。
僕もミジンコから少しでもギークに近づきたいものだなぁ。

小飼弾のアルファギークに逢ってきた (WEB+DB PRESS plusシリーズ)

小飼弾のアルファギークに逢ってきた (WEB+DB PRESS plusシリーズ)

科学6年 2008年7号 ([実用品])

科学6年 2008年7号 ([実用品])