大東亜戦争従軍記に実際の戦争体験者の方からコメントが。
やはり帰国時には文章の類は焼き捨てよとの命があったらしくてなかなか手記などは残っていませんな。従軍記Plnetとか作りたいな。
Railsの素敵なURL系の機能に日本語は入る余地が無くて残念。SEO的にも良くなるかと思ってひらがな・かたかな <-> ローマ字の相互変換を簡単にまとめてみました。
かんとう/とうきょう/しぶやく/ほんまち -> "/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)
>> "aiueo".roma2hiragana
=> "あいうえお"
>> "aiueo".roma2katakana
=> "アイウエオ"
>> "あいうえお".hiragana2roma
=> "aiueo"
>> "アイウエオ".katakana2roma
=> "aiueo"
地方(関東、近畿とか)や都道府県のモデルは使いまわせるので終わったらまとめて公開したいなあ。
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:
<% form_for [:admin, @cemetery, @compartment] do |f| %>
~
<% end %>
モデルのhabtmやhas_many :throughやroutesのresoucesやnamespaceをちゃんと使うと複雑なデータの相関関係も綺麗に書けて嬉しいですな。ただ、Scaffoldがこれらに対応してないので今後のアップデートに期待したいです。
2008/05/01 修正:form_forのところが間違っていたので修正しました。
出社(五反田のオフィスに席を間借りしている)したら、ノートのACアダプタ忘れた!
また忘れた!
もうあったまきた(逆ギレ)のでThinkPad X61 7675A25買いましたー!
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はこんな感じでカラフルなテーブルに使えて便利。
<table>
<% for user in @users %>
<tr class="<%= cycle "even", "odd" %>">
<td>~~~</td>
</tr>
<% end %>
</table>
この間、「3回に1回改行」とかにも使ってみたらちょっと便利だった!
<% for user in @users %>
<%= user.name %><%= cycle "", "", "<br />" %>
<% end %>
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
時々、容量無制限!って書いてある無料HPサービスありますよね。WebDAVかS3互換のプログラムとflvを置いて動画サービスの裏ストレージとして使えないかなと思ってやってみたんですが、いまいちだった。理由は2つ。
1つは、容量無制限つっても規約で大抵ファイル置き場にしちゃだめとかあるし、膨大なHDD使用料と転送量でさすがにバレる。(当たり前)
2つは、動画の変換にCPUがかなり必要になる。無料HPサービス側じゃFFmpegは動かせなさそうだし、3年前のうんこノート上のcoLinux上で実時間の3倍ぐらいかかる。これかかり過ぎかな?
flvへの変換はニコニコ動画用ファイル作成Wikiを参考にしてFFmpeg 2passでコンパイル。一括変換したいので下記のようなスクリプトを書いて一晩置いたら終わってた。
#!/usr/bin/env ruby
$KCODE = "u"
require "tmpdir"
require "fileutils"
require "pathname"
def abspath(file)
Pathname.new(file).realpath.to_s
end
def movie2flv(src)
dst = src.gsub(/\..{1,4}$/, ".flv")
puts dst+"\n"
passlog = Dir.tmpdir+"/passlog"
system "ffmpeg -i \"#{src}\" -vcodec flv -r 15 -b 500k -cropleft 6 -cropright 6 -s 512x384 -deinterlace -pass 1 -passlogfile \"#{passlog}\" -an -y \"#{dst}\""
system "ffmpeg -i \"#{src}\" -vcodec flv -r 15 -b 500k -cropleft 6 -cropright 6 -s 512x384 -deinterlace -pass 2 -passlogfile \"#{passlog}\" -ar 44100 -ab 128k -y \"#{dst}\""
File.delete(passlog)
end
src = abspath(ARGV[0])
if File.directory?(src)
Dir.foreach(src) do |f|
f = abspath(src+"/"+f)
unless File.directory?(f)
puts "#{f}\n"
movie2flv(f)
end
end
else
puts "#{src}\n"
movie2flv(src)
end
音声のcodecは普通libmp3lameだそうだけどDebianデフォルトのFFmpegじゃ駄目。面倒なので無しで。ちゃんとやるならソースからコンパイルした方が良さそう。
Player側はJavascriptとNonverBlaster。
と、1日かけたところで出来たのは俺専用動画サービス。このままじゃ一銭にもなりそうにないので眠らせとこう。