ひらがな・かたかなとローマ字の相互変換の続き。

漢字をローマ字に変換したい。完全じゃないけどMeCabを使ってやってみました。

require 'jcode'
require 'romkan'
require 'MeCab'

class String
  def hiragana2roma
    self.to_roma
  end

  def katakana2roma
    self.tr("ァ-ン", "ぁ-ん").to_roma
  end

  def roma2hiragana
    self.to_kana
  end

  def roma2katakana
    self.to_kana.tr("ぁ-ん", "ァ-ン")
  end

  def kanji2katakana
    MeCab::Tagger.new("-Oyomi").parse(self)
  end

  def kanji2hiragana
    self.kanji2katekana.tr("ァ-ン", "ぁ-ん")
  end

  def kanji2roma
    MeCab::Tagger.new("-Oyomi").parse(self).gsub("\n", "").tr("ァ-ン", "ぁ-ん").to_roma
  end
end
% ./script/console
Loading development environment (Rails 2.0.2)
>> "関東/東京都/渋谷区/本町".kanji2roma
=> "kantou/toukyouto/shibuyaku/honchou"

ん~、英語に訳す方が意味ありそうかなあ。

大東亜戦争従軍記に実際の戦争体験者の方からコメントが。

やはり帰国時には文章の類は焼き捨てよとの命があったらしくてなかなか手記などは残っていませんな。従軍記Plnetとか作りたいな。

Railsの素敵なURL系の機能に日本語は入る余地が無くて残念。SEO的にも良くなるかと思ってひらがな・かたかな <-> ローマ字の相互変換を簡単にまとめてみました。

かんとう/とうきょう/しぶやく/ほんまち -&gt; "/kantou/toukyou/shibuyaku/honmachi.html"

こんな感じのURLを使いたい。

Ruby/Romkanを使わせていただきました。

require 'jcode'
require 'romkan'

class String
  def hiragana2roma
    self.to_roma
  end

  def katakana2roma
    self.tr("ァ-ン", "ぁ-ん").to_roma
  end

  def roma2hiragana
    self.to_kana
  end

  def roma2katakana
    self.to_kana.tr("ぁ-ん", "ァ-ン")
  end
end
% ./script/console
Loading development environment (Rails 2.0.2)
&gt;&gt; "aiueo".roma2hiragana
=&gt; "あいうえお" 
&gt;&gt; "aiueo".roma2katakana
=&gt; "アイウエオ" 
&gt;&gt; "あいうえお".hiragana2roma
=&gt; "aiueo" 
&gt;&gt; "アイウエオ".katakana2roma
=&gt; "aiueo"

地方(関東、近畿とか)や都道府県のモデルは使いまわせるので終わったらまとめて公開したいなあ。

参考:Ruby/Romkan: ローマ字とひらがなを相互に変換する Ruby用のライブラリ

Rails2.xでnamespaceを使ったhas_manyなresourcesのform_forの書き方の覚書。実際のアプリのリアルな例から。

管理画面の霊園(cemetery)の区画(compartment)のCRUDフォームを作りたい。

url:

http://localhost:3000/admin/cemeteries/1/compartments
http://localhost:3000/admin/cemeteries/1/compartments/new
http://localhost:3000/admin/cemeteries/1/compartments/1/edit

routes:

map.namespace :admin do |admin|
  admin.resources :cemeteries, :has_many => :compartments
end

_form.html.erb:

&lt;% form_for [:admin, @cemetery, @compartment] do |f| %&gt;
 ~
&lt;% end %&gt;

モデルのhabtmやhas_many :throughやroutesのresoucesやnamespaceをちゃんと使うと複雑なデータの相関関係も綺麗に書けて嬉しいですな。ただ、Scaffoldがこれらに対応してないので今後のアップデートに期待したいです。

2008/05/01 修正:form_forのところが間違っていたので修正しました。

出社(五反田のオフィスに席を間借りしている)したら、ノートのACアダプタ忘れた!

また忘れた!

もうあったまきた(逆ギレ)のでThinkPad X61 7675A25買いましたー!

x61.jpg

OSがXPでHDDが7200回転でBluetooth対応のX61をkakaku.comで調べたら1個しか該当しなかったのだから仕方無い。

五反田から秋葉原のニッシンパル行って買ってきました。

今時はノートのメモリ2GBが4000円切ってるんですね。お得なので購入。ついでに死んでも忘れないようにACアダプタを会社用に購入。

MicrosoftのBluethooth対応マウスも購入。(ThinkPadでも結構マウスを使うので)

Bluetooth初めて使いましたが、余計な出っ張りとか無くていいっすね。ヘッドセットも欲しいな。

Puttyと16GBのcoLinuxイメージをコピーしたらすぐに仕事が再開できました。あーこれは快適!コードがすすむわぁ。

古い糞VAIO宛に「バッテリーが爆発するかもしれないから交換するよ?(超訳)」という電話が来たけど、「いいっス」と答えて唖然とさせてやりました。もう本棚に縦置きしちゃったよ。

hostsファイルに大体、coLinuxのhost名を付けて使ってる。

192.168.10.40    dev

で、http://dev/phpinfo.php にアクセスするとFirefoxではphpinfo.phpのダウンロードが始まる。 IE7, Safari3.1, Opera9ではphpinfoがちゃんと動く。

http://192.168.10.40/phpinfo.php にアクセスするとFirefoxでもphpinfoがちゃんと動く。サーバーにVirtualHostの記述は何もしてない。

毎回これでハマるので覚書・・・。

Railsのhelper、cycleはこんな感じでカラフルなテーブルに使えて便利。

&lt;table&gt;
&lt;% for user in @users %&gt;
  &lt;tr class="&lt;%= cycle "even", "odd" %&gt;"&gt;
    &lt;td&gt;~~~&lt;/td&gt;
  &lt;/tr&gt;
&lt;% end %&gt;
&lt;/table&gt;

この間、「3回に1回改行」とかにも使ってみたらちょっと便利だった!

&lt;% for user in @users %&gt;
&lt;%= user.name %&gt;&lt;%= cycle "", "", "&lt;br /&gt;" %&gt;
&lt;% end %&gt;

HABTMのupdateは面倒だ。

でも http://wiki.rubyonrails.com/rails/pages/CheckboxHABTM ここに詳しく載ってた。(と思ったらリンク先無くなってますね)

<% Group.find(:all).each do |g| %>
<%= check_box_tag "user[group_ids][]",
  g.id, @user.groups.include?(g)) %> <%= g.name %>
<% end %>

こんな感じで書いて、controllerのupdateに

@user.groups.clear if !params['user']['group_ids']

こう書いておけばチェック外したらちゃんと消える。

中間テーブルにidがあると変なidが勝手に入るし、Duplicate Entryになる。create時にidがつかないようにしとく。

create_table(:groups_users, :id => false) do |t|
 ・・・
end

昔ハマったはずなのにまたハマった。鳥頭・・・。

ヘルパー

普段どうやってるかというと、こういうヘルパーを使っています。

def habtm_check_box(object, method, target_method, options = {})
  id = object.class.name.underscore
  items = method.to_s.camelize.constantize
  items.all.map do |item|
    label_tag("#{id}_#{method}_#{item.id}",
      check_box_tag("#{id}[#{method}_ids][]",
        item.id,
        object.send(method.to_s.pluralize).include?(item),
        :id => "#{id}_#{method}_#{item.id}")+' '+h(item.send(target_method)),
    :class => 'checkbox')+"\n" 
  end.join
end

でgrave(お墓)が複数のcharacter(特徴)を持つ場合、

<%= habtm_check_box @grave, :character, :name %>

みたいな感じで使います。

actionが無くても対応した名前のテンプレがあれば動くんですな。しらなかった・・・。

class FooContoller < ActionController::Base
end

app/views/foo/bar.html.erb

http://domain/foo/bar

変なテンプレとか放置してないか再チェックだ。

打ち合せ中に、

「あったかくチャリ日和になってきたし、どっか出社したいっすねー」

とか言ったら、

「席空いてるから出社していいよ」

などと言われたのでデザイナーのmachidaさんと、

「じゃあ、出社しますか?」

ということで出社してきました。

結論から言って、

出社気に入った。

周りに申し訳ないくらいすごし易いし、めっちゃはかどる。

幡ヶ谷 ←→ 五反田間のチャリ通勤は今までで最長ですけど健康によさそうです。

机1席分ぐらいの仕事で還元しないと申し訳ないっすw