最近(精神的な)調子が悪いのでOSをLionにしました。

DVDに焼いたり、Bootable USBを作ったりなんだりして予想通りグダグダと余計な時間を取られました。クリーンインストールしたい方で特に拘りがない方はコレを買うのが時間もかからず楽だと思います。

OS X Lion USBメモリ版 - Apple Store (Japan)

OS X Lion USBメモリ版 - Apple Store (Japan)

Aquaの水滴っぽいデザインが鳴りを潜め、凹凸の減ったUIが気分良いです。

一番嬉しかったのはSystem localeをenにしてる時でも今まではTime Zoneが日本であれば時計が日本語表示だったんですが、それがSystem locale依存になったところです。

SystemUIServer

Screencastとか撮ってる時気になってたんですよね。

Terminal — zsh — 80×24

$ touch ~/.hushlogin

Terminal — zsh — 80×24

Microsoft Arc Keyboard英語版を手に入れましたが、Google日本語入力でちょっと苦戦。

US配列として認識させる

下記の通りでOK。

Windows 7 で英語キーボードを使って日本語を入力する - バイナリアンを目指して

Alt + Spaceで入力切替

下記の素晴らしいアプリで解決。

CmdSpace(Ver 1.1.0)

今までMacと行ったり来たりする時に配列違いでちょいウザだったんですがこれでスッキリしました。

家のWindows PC用に「無線でUS配列のテンキーの無いキーボード」が欲しいと思ったんですが、これが意外と無い。

結論から言うとMicrosoft Arc KeyboardをAmazon.comから買った。

Amazon.comでしか買えないので個人輸入・転送サービスのスピアネットという転送サービスを使った。

転送サービスとは、要はアメリカ国内どっかの住所が割り当てられて、そこを郵送先として普通にAmazon.comで物を買う。そうすると転送サービスからメールが来るので日本の住所に手数料を払って更に郵送してもらうというもの。

上記のサイトでは手数料は$9ぐらい。サービスの使い方は相当にわかり辛いし、サイトは怪しいので一般の方にはお勧めできませんが、一回買ってみればやり方がわかるので今後もちょくちょく使ってみるつもりです。

20%ぐらい「買ったものが届かず、金だけ取られても仕方ないか」という気持ちで使えばなかなか便利だと思います。

$ rails c
>> Story.last.previous
=> #<Story id: 1, title: "パンドラ(禁后)", body: "私の故郷に伝わっていた「禁后」というものにまつわる話です。\nどう読むのかは最後までわかりませんでしたが...", view: 0, user_id: 1, created_at: "2011-11-25 08:48:33", updated_at: "2011-11-25 08:48:33", comments_count: 0, scares_count: 0>

バグ報告からふとActiveRecordで使えるpreviousメソッドってどこからきてるんだろう?と思ってgemsをgrepしてみるも見当たらず。

┐(´ー`)┌「これだからメタプログラミングってやつは・・・」.

Twitter / @irohiroki: @komagata Method#source_lo ...

なんですと!よし、場所を探り当ててやる!

>> Story.last.method(:previous).source_location
=> ["/Users/komagata/code/kowabana-jp/app/models/story.rb", 38]

( ゚д゚)

(つд⊂)ゴシゴシ

# app/models/story.rb:
class Story < ActiveRecord::Base
  def previous
    Story.where('id < ?', id).order('id').limit(1).last
  end
end

(((((((( ;゚Д゚)))))))

自分で普通にmodelに定義してた。

因みに複数人開発で他人が実装したとかではなく、紛れも無く俺が実装したメソッドである。おまけにテストも書いてある。

何故このような自体が発生したのか。それはメソッド名が自然過ぎたか、俺がアルツハイマーか、もしくはその両方である。

Lokkaはまだgemになってません。(gem branch開発者絶賛募集中!)

なので最新版にアップデートするにはlokkaのリポジトリからpullしてこなきゃいけない。(一応新しいバージョンリリース時にtag打ってるのでmasterよりはtagからの方が安全かも?)

よくある構成

  • githubに自分のブログ用リポジトリを持ってる。
  • herokuにそのブログをアップしてる。

僕のこのブログもdocs-komagata-orgというリポジトリ名でgithub, herokuにアップしてます。そういう場合はlokkaというremoteリポジトリ名で本家を追加しておくと楽です。

~/code/docs-komagata-org[master]% cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
[remote "origin"]
	url = git@github.com:komagata/docs-komagata-org.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[remote "lokka"]
	fetch = +refs/heads/*:refs/remotes/origin/*
	url = git@github.com:komagata/lokka.git
[remote "heroku"]
	url = git@heroku.com:docs-komagata-org.git
	fetch = +refs/heads/*:refs/remotes/heroku/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

こんな感じ。最新版に追従したいなという時にgit pull lokka masterすると追いつけるし、自分のテーマいじってただけのハズがいつの間にか本体いじってた時は本体にpushできる。herokuにアップしたい場合はgit push heroku master

最新版にしたらいきなり動かないという場合は、DBスキーマに変更があった場合が多いので、下記をすると動くかもしれません。

$ bundle exec rake db:migrate

Lokkaをrails consoleの様に使う。

Terminal — ruby — 80×24

Lingr Hat

githubを"Lingr"で検索してたらdrikinさんのLingr HatというLingrクライアントを発見。面白かったのでbuildしてFluidから乗り換えましたw

日本の祝日が分かるgem、holiday_jp 0.3.1をリリースしました。

単純なgemなんですが、何故か@pwimさんが高速化してくれたり、@kakutaniさんがリファクタリングしてくれたりで、gemを介して遊んでるみたいな感じです。

今回はjewelerオワコンってことでbundlerにしたり、travis-ciしたり、rubygems-test対応したりしました。

僕も他のgemで新しいツールを使う前の実験台として使ったりしています。:-)

rubygems-testって面白いですね。僕はperl使ってた時に、「cpanの自動テストうっっっz」とか思ってましたが、良い物ですね。すいません。

特にrubygems-testをユーザーがインストールをしてるとプラットフォーム毎にテストが通ったかどうかを自動でhttp://test.rubygems.org/にアップしてくれるのがイカス。

Gem Testers

holiday_jpに幸あれ、rubygems-testに幸あれ。

Railsアプリで画像添付メール経由で画像を受け取りたい。(ガラケーとか)

/etc/aliases:

foo: "| cat $1 > /tmp/foo"

これだとファイルのownerがnobodyとかになっちゃうので.forwardを使う。

/home/unk/.forward:

"| cat $1 > /tmp/foo"

Railsでメールを受け取る

Railsでメールを受け取りたい。railsをCLIから呼び出すにはrails runnerを使う。しかし、railsコマンドはRAILS_ROOT外ではrails new用の動きをするので困る。

しかし、その為にあるのかも知れないscript/railsを使えばOK。

rvm経由で呼び出すと相当長くなる。

"| BUNDLE_GEMFILE=/var/www/foo/current/Gemfile /home/unk/.rvm/bin/rvm ruby-1.9.2p290@foo exec bundle exec /var/www/foo/current/script/rails runner 'PictureMailer.receive(STDIN.read)' -e production"

しかしまだ画像ファイルが600で作成されるという問題が残る。下記の様にchmodするようにしてもいいけど、umaskを変更する方がいいかも。

mod_passenger利用時の注意点 - komagata

"| umask 0022; BUNDLE_GEMFILE=/var/www/foo/current/Gemfile /home/unk/.rvm/bin/rvm ruby-1.9.2p290@foo exec bundle exec /var/www/foo/current/script/rails runner 'PictureMailer.receive(STDIN.read)' -e production"

umaskは子プロセスに引き継がれるのでPaperclip経由で出来るファイルもこれで644になる。