tag:blogger.com,1999:blog-91786207296278084462008-07-22T21:14:59.353+09:00Yakitarahiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-9178620729627808446.post-91581057989815540652008-07-22T13:17:00.004+09:002008-07-22T21:14:59.406+09:00EmacsClient.app僕はソースコードの編集に、Leopard に最初から入っている emacs を使ってます。<br />Leopard のターミナルでは日本語の入力も問題なくできるのですが、 ネイティブアプリケーションのように Dock アイコンにファイルをドロップすることでファイルを簡単に開けないので、find-file のミニバッファの内容を空にしてからターミナルのウィンドウにファイルをドロップしなければならないのが面倒です。<br /><br />AquaEmacs, CarbonEmacs などを使えばドラッグ&ドロップも問題ないのですが、なんとなく余計なものを入れたくないので emacsclient を実行するだけの簡単なアプリケーションをつくればいいかな、誰か作ってないかなと "EmacsClient.app" を探したところ、 <a href="http://www.sveinbjorn.org/platypus" >Platypus</a> というスクリプトを実行するアプリケーションを簡単に作成できるツールを見つけました。<br /><br />以下のようなシェルスクリプトを作成して、<br />emacsclient.sh<pre style="background-color:#BBB"><code><br />/usr/bin/emacsclient -n "$1"<br /></code></pre><br /><br />スクリーンショットのような設定で、"Create" するだけで<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qsyweV0vXTA/SIVl4eh7oDI/AAAAAAAAAHI/qkKn0RfE4sw/s1600-h/platypus.png"><img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_qsyweV0vXTA/SIVl4eh7oDI/AAAAAAAAAHI/qkKn0RfE4sw/s200/platypus.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5225694963575791666" /></a><br /><br />EmacsClient.app が生成されます。<br /><br />あ、すでに開いている emacs で M-x server-start するのをお忘れなく。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-63403061101895934582008-07-01T22:48:00.004+09:002008-07-01T22:59:36.105+09:00Getting wherefrom of downloaded filesMac OS X の Safari でファイルをダウンロードすると、ファイルのメタデータとして "where from" という情報が保存され、「あれーこのファイルどこから取ってきたんだっけ?」という疑問に答えてくれます。<br /><br />Finder の情報を見る確認することはできるんですけど、残念ながら選択してクリップボード(ペーストボード)へのコピーができません。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qsyweV0vXTA/SGo2jxAc5FI/AAAAAAAAAHA/onbxrf0G_jo/s1600-h/wherefrom.png"><img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_qsyweV0vXTA/SGo2jxAc5FI/AAAAAAAAAHA/onbxrf0G_jo/s200/wherefrom.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5218043106340693074" /></a><br /><br />そういうときは、ターミナルで、 "mdls" + スペースを入力してから、ダウンロードしたファイルをターミナルにドロップすると...。<br /><br /><pre><code><br />$ mdls /Users/hiroshi/Desktop/Velocity/High\ Performance\ Ajax\ Applications\ Presentation.ppt<br />....<br />kMDItemWhereFroms = (<br /> "http://en.oreilly.com/velocity2008/public/asset/attachment/1956",<br /> "http://en.oreilly.com/velocity2008/public/schedule/proceedings"<br />)<br /></code></pre>hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-88696620952620548632008-04-24T23:15:00.003+09:002008-04-24T23:28:12.837+09:00a ruby to javascript bridge, Johnsonこんなものがあった。<br /><br /><a href="http://github.com/jbarnette/johnson/tree/maste">http://github.com/jbarnette/johnson/tree/master</a><br /><a href="http://tenderlovemaking.com/2008/04/23/take-it-to-the-limit-one-more-time">http://tenderlovemaking.com/2008/04/23/take-it-to-the-limit-one-more-time</a><br /><br />Firefox が使っている javascript エンジン<br /><a href="http://www.mozilla.org/js/spidermonkey/">http://www.mozilla.org/js/spidermonkey/</a><br />の ruby bridge のようだ。<br /><br /><a href="http://github.com/jbarnette/johnson/tree/master/README.txt">README.txt</a> に書いてあるとおりに gem install jhonson できなかったので、<br /><br /> git clone git://github.com/jbarnette/johnson.git<br /> cd johnson<br /> rake<br /><br />irb で試すとこんな感じ<br /> irb -I./lib -rjohnson<br /> >> Johnson.evaluate("var foo = {x: 1}; foo").x<br /> => 1<br /><br />これで、 rails アプリケーションで使っている .js のテストができるといいな。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-25505226669855890392008-04-11T16:27:00.005+09:002008-04-11T16:43:19.213+09:00My Spotlight in Leopard goes mad数日前から Spotlight が index を何度も作成しようと試みるようになった。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qsyweV0vXTA/R_8VqHRQuPI/AAAAAAAAAG4/34dPXaghMdg/s1600-h/spotlight_indexing.png"><img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_qsyweV0vXTA/R_8VqHRQuPI/AAAAAAAAAG4/34dPXaghMdg/s200/spotlight_indexing.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5187889109004237042" /></a><br /><br />コンソールにはこんなログが<br /><pre><code><br />08/04/11 4/11(金)16:18:04 mds[2477] /SourceCache/Spotlight/Spotlight-398.7/index/ContentIndex/FlatStore.c:706: failed assertion 'pageSize > 0' /.Spotlight-V100/Store-V1/Stores/E67A0F96-8AFF-43AF-B2AD-6665DE9CAD94/2.indexArrays flat store<br />08/04/11 4/11(金)16:18:04 mds[2477] (/)(Error) IndexCI in mergeIndexDataTrampoline:Caught mach exception. Fun Fun Fun.<br />08/04/11 4/11(金)16:18:04 mds[2477] /SourceCache/Spotlight/Spotlight-398.7/index/ContentIndex/CIMerging.c:216: failed assertion '!buffers->badIndex' /.Spotlight-V100/Store-V1/Stores/E67A0F96-8AFF-43AF-B2AD-6665DE9CAD94/0.indexHead corrupt ro index need to rebuild 0.<br />08/04/11 4/11(金)16:18:07 ReportCrash[2635] Formulating crash report for process mds[2477]<br /></code></pre><br /><br />残念ながら、いろいろ調べてみたけど解決しないので、Leopard を再インストールすることに決めました。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-56502845566277956012008-03-06T23:48:00.003+09:002008-03-07T00:04:35.876+09:00public.generic-pc.icnsLeopard の Finder には Windowsファイル共有のホストが見つかると PC を表すアイコンが表示されます。<br />通常は Finder のサイドバーに小さく表示されているだけなのであまり気にしてなかったのですが、ある日じっくり見てみると...。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qsyweV0vXTA/R9AHry7l5jI/AAAAAAAAAGY/KUfVy_JuIaA/s1600-h/public.generic-pc.jpg"><img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_qsyweV0vXTA/R9AHry7l5jI/AAAAAAAAAGY/KUfVy_JuIaA/s200/public.generic-pc.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5174644420836189746" /></a><br /><br />Tiger までのアイコンの最大サイズは 128x128 だったんですが、Leopard から 512x512 になって (たぶん)640x480で表示されるあの画面の文字が辛うじて読み取れます。<br /><br />アイコンファイルはココにあります。<br />/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/public.generic-pc.icnshiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-80811248800885427912008-02-20T22:54:00.003+09:002008-02-20T23:16:54.232+09:00VirtualBox beta3<a href="http://www.macwindows.com/">MacWindows.com</a> に VirtualBox beta3 がリリースされ、ホストOSとして Leopard もサポートされたと書いてあったので早速試してみた。<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_qsyweV0vXTA/R7wyxQw9ugI/AAAAAAAAAEs/3Rww-mF_zJM/s1600-h/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3+2.png"><img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_qsyweV0vXTA/R7wyxQw9ugI/AAAAAAAAAEs/3Rww-mF_zJM/s320/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5169062294209804802" /></a><br /><br />GUI はヤバイくらいダサく(OS9時代に作ったのか?)、メニュー項目に "About" が無く、Windows版と同じリソースを使っているのかショートカットのアルファベットが書いてあったり、かなりダメだが、<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_qsyweV0vXTA/R7wyyQw9uhI/AAAAAAAAAE0/bfCe59LL5u8/s1600-h/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3+1.png"><img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_qsyweV0vXTA/R7wyyQw9uhI/AAAAAAAAAE0/bfCe59LL5u8/s320/%E3%83%94%E3%82%AF%E3%83%81%E3%83%A3+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5169062311389674002" /></a><br /><br />Parallels 2.0 のように Linux ゲストの時計を同期させる機能が欠如していたり(3.0 では対応したらしい)、VMWare のように VMWare tools を入れるという面倒なことをしなくても時計はホストと同期がとれているようだ。<br /><br />Ubuntu の iso で起動させてみただけで、まだ分からないけど、Parallels も VMWare もMac 版は無料ではないので VirtualBox でもよいかもしれない。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-26526167298239493132008-02-17T11:54:00.003+09:002008-02-17T13:45:33.388+09:00rescue_from() and Proc#bind()Rails 2.0 の新機能に rescue_from(exception_class) という地味なやつがあります。いままでは、 ApplicationController などで rescue_action などをオーバライドして引数に与えられる exception を case ... when で処理するというわかりやすいけど、ダサイ方法で対応してきました。rescue_from を使うとこんな感じに書けます。<br /><br /><pre><code><br />class UnauthorizedError < RuntimeError; end<br /><br />class ApplicationController < ActionController::Base<br /> ...<br /> before_fiter :login_required<br /> def login_required<br /> raise UnauthorizedError<br /> end<br /><br /> rescue_from UnauthorizedError do<br /> redirect_to login_path(:return_to => request.request_uri)<br /> end<br />end<br /></code></pre><br /><br />before_filter などにブロックを与える場合、そのブロックの self はそのコントローラのクラスなので、ブロックパラメータ controller を使うか、上記のようにインスタンスメソッドのシンボルを与える方法を使います。 ApplicationController で login_required のようなフィルタを追加した場合、かならず skip_filter したいケースがあるのでこの場合はいいんですけど、 before_fiter :foo; def :foo; ... end と冗長な書き方がウザイときもあります。<br /><br />それと比べて、 rescue_from のブロックの中身はなぜかインスタンスメソッドと同じように書けます。Ruby 標準にはそんな機能はない思ってたのにと調べたら、秘密は ActiveSupport の <a href="http://dev.rubyonrails.org/browser/trunk/actionpack/lib/action_controller/rescue.rb">Proc#bind()</a> でした。<br /><br />以上。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-67076300374367929182008-01-27T11:10:00.000+09:002008-01-27T13:22:34.409+09:00NSPreferredMailCharset on LeopardApple の Mail.app にはユーザーがデフォルトで使用する送信メールのエンコーディングを選択できないという欠陥があります。新規にメールを作成する毎にはメニューから選択することにより変更できますが、環境設定の項目にはありません。<br /><br />Tiger では defaults コマンドで NSPreferredMailCharset を設定することにより送信メールのデフォルトエンコーディングを設定することができたのですが(<a href="http://docs.info.apple.com/article.html?artnum=301986-ja">Apple のサポート情報</a>)、Leopard ではその機能が縮退してしまっているようで動作しません。<br /><br />日本語環境で利用している場合にメールを新規作成すると初期のエンコーディングは「自動」となっていて、たいていの場合はよろしくやってくれる(たぶんutf-8になる)のですが、たまに "簡体字中国語(Big 5)" で送ってくれたりしやがるので、「ヒロシさんまたメールが文字化けしてるんですけど」というクレームに Mac ユーザーとして恥ずかしくなり、<a href="http://code.google.com/p/leopard-preferred-mail-charset-fix/">デフォルトのエンコーディングを設定するプラグイン</a>を作りました。<br /><br />自分だけが利用する分には ISO-2022-JP 固定で問題ないので、現状のバージョン (0.1) ではソースコードにハードコーディングしてしまっていますが、他のエンコーディングにしたい人はリクエストください。<br /><br />Apple の日本やヨーロッパの法人がその問題に気がついていないのか、力が弱いのかわかりませんが、<a href="http://blog.yakitara.com/2007/11/subversion-precomposed-utf-8-patch.html">Mac の svn で濁点などが含まれるファイル名を扱うときの問題</a>といい、 Apple のアメリカ人的考え(ascii, latin-1 以外のエンコーディングのことをまじめに考えていない)には残念に思います。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-9556349829957597512008-01-12T14:24:00.000+09:002008-01-12T14:45:59.405+09:00Resolving IP address for Mac, Linux and Windows each other by names(ルーターを介さない)同一セグメント内ならば、 Mac 同士は DNS や hosts に登録しなくても "hiroshi-macbook.local" のような名前で IPアドレスを解決できます。 Mac を使っている人にとっては当たり前なので、Linux や Windows のホストにアクセスするときに環境によってはコロコロと変わる IP アドレスを指定しなければならないとストレスが溜まります。<br /><br />Debian Etch, CentOS 5, Windows でその問題を解決する方法を紹介します。<br /><br /><h4>Debian Etch</h4><br /><br />Avahi Daemon をインストール<br /><pre><code><br /> $ sudo apt-get install avahi-daemon<br /> $ uname -a<br /> Linux hiroshi-etch 2.6.18-5-686 #1 SMP Mon Dec 24 16:41:07 UTC 2007 i686 GNU/Linux<br /></code></pre><br /><br />これで、同じネットワークセグメント内の Mac などから、hiroshi-etch.local という名前でアクセスできるようになります。<br /><pre><code><br /> $ ssh hiroshi-etch.local<br /></code></pre><br /><br />逆に Linux から他のホストの名前解決ができるようにするには、<br /><pre><code><br /> $ sudo apt-get install libnss-mdns<br /></code></pre><br /><br /><h4>CentOS 5</h4><br /><pre><code><br /> $ sudo yum install avahi<br /></code></pre><br /><br />nss-mdns のパッケージは無いようなので、(<a href="http://www.0pointer.de/lennart/projects/nss-mdns/">nss-mdns</a>)<br /><pre><code><br /> $ curl -O http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.10.tar.gz<br /> $ tar xzf nss-mdns-0.10.tar.gz<br /> $ ./configure<br /> $ make<br /> $ sudo make install<br /></code></pre><br /><br />/etc/nsswitch.conf の "hosts:" の行を以下のように書き換える (詳細は README を参照)<br /><pre><code><br /> hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4<br /></code></pre><br />これで、他の .local ホスト名を解決できるようになる。<br /><br /><h4>Windows</h4><br />Apple から Bonjour for Windows をダウンロードしてインストールすればOK。<br />iTunes をインストールしていれば自動的に入っているはず。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-90248247956011013112008-01-05T10:02:00.000+09:002008-01-05T11:09:47.059+09:00"Advanced Rails Recipes" beta book updated with 25 more recipes!<a href="http://www.pragprog.com/titles/fr_arr">Advanced Rails Recipes</a>にひと月足らずで25の新しいレシピが追加された。<br />先日の記事<a href="http://blog.yakitara.com/2007/12/what-iv-just-discovered-in-advanced.html">What I'v just discovered in Advanced Rails Recipes</a>では、あんまり面白くなかったと書いたけれど、今回追加されたレシピには興味を惹く引くものが多かった。<br />追加されたレシピのタイトルは、著者の Mike Clark の<a href="http://clarkware.com/cgi/blosxom/2008/01/02#ARRBeta2">ブログ</a>で参照してください。<br /><br />また、前回と同様に簡単なメモを...<br /><br /><h3>Skinny Controller, Fat Model</h3><br />モデルが汚くなるのを犠牲にしてもコントローラをシンブルにすることを自分と同僚で推奨していたが、そのことが "skinny controller, fat model" (もとネタは Jamis Back の<a href="http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model">ブログ</a>らしい) という言葉で、いくつかのレシピで言及されているのを見て、「やっぱりそれでよかったんだ」と思った。<br /><br /><h3>caching up with big guys</h3><br />cache_fu は ActiveRecord::Base.find の結果をキャッシュする。<br />acts_as_cached には :include => :tags や :ttl => 5.minutes がある。<br /><pre><code><br /> returning true do<br /> ...<br /> end<br /></code></pre><br />というコードがあり、 active support に returning というメソッドがあることを知った。<br /><pre><code><br /> returning [] do |value|<br /> value << "foo"<br /> value << "bar"<br /> end<br /></code></pre><br />という使い方もできる。<br />activesupport/lib/active_support/core_ext/object/misc.rb を見たら with_options もあったことを思い出した。<br />しかし、こういうよく知られていない、または自前のメソッドを使うとコードがわかりにくくなる。<br /><br /><h3>Creating meaningful relationships through proxies</h3><br /><pre><code><br />group.rb:<br /> has_many :users<br /><br />user.rb:<br /> class User < ActiveRecord::Base<br /> def self.find_men<br /> self.find(:all, :conditions => "sex = 'male'")<br /> end<br /> end<br /></code></pre><br />で、 association proxy からも group.users.find_men として利用できることを知った。考えてみれば当然かもしれないが気づかなかった。<br /><br /><h3>Decouple your javascript with Low Pro</h3><br /><a href="http://lowpro.stikipad.com/home/">lowpro.js</a>のEvent.createBehavior, Event.addBehavior を使えば javascript をスッキリ書けるかも<br /><br /><h3>Dynamically Updating Cached pages</h3><br />動的要素のあるページを page cache にしたときにそのダイナミックな部分を ajax で更新するようにはしたことがあるが、部分だけタイムラグが出てしまうが、この方法だと session とは別の cookie に javascript だけでダイナミック部分を補完できる情報を(i.e:ユーザー名)入れておけば javascript で cookie の中身を使って static page の補完ができるというアイデア。<br /><br /><h3>Handling Multiple Models In One Form</h3><br />Project has_many :tasks などのときに、Project#new_tasks= でコントローラを小さくする手法。この手法も良く使う。<br /><br /><h3>Responding To Remote Capistrano Prompts</h3><br />Capistrano でリモートサーバーの script/console セッションを操作する方法が書いてある。試してみよう。<br /><br /><h3>Taking Advantage of Master/Slave Databases</h3><br />リプリケーションしたDBへのクエリを master/slave で自動で振り分ける<br />masochism plugin の紹介。使えるかもしれない。<br /><br /><h3>Testing HTML Validity</h3><br />HTML test plugin の紹介。 <br />たぶん常に有効になっているとウザイので、 rake html_validity test のようにして実行したときだけ有効になるようにすると良いかもしれない。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-7777642177583975532007-12-27T00:20:00.000+09:002007-12-29T23:47:15.197+09:00A small pitfall on Mac with Capistrano's deploy:web:disable taskTo test a deployment process of a rails application at my local machine, a Mac OS X Leopard, I set up virtual host with Apache + reverse proxy + mongrel. When I tried to do "cap deploy:web:disable", I fell in to a pitfall, a Mac OS X local issue. The apache constantly respond "403 forbidden" for every URL under the virtual host.<br /><br />The things is...<br /><ol><br /><li>Capistrano uses "/system/maintenance.html" for the path to the maintenance page (by the default)</li><br /><li>And if you use Apache mod_rewrite, the setting about maintenance.html may look like this:<br /><pre><code><br /> RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f<br /> RewriteCond %{SCRIPT_FILENAME} !maintenance.html<br /> RewriteRule ^.*$ /system/maintenance.html [L]<br /></code></pre></li><br /><li>But, "RewriteRule" searchs the root of the file-system for "/system/maintenance.html" first (<a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule">See description about "URL-path" of RewriteRule</a>)</li><br /><li>Yes, there is the directory "/System" on Mac OS X, and HFS+ doesn't matter case of filename</li><br /><li>"/System" aren't accessible with httpd except you are mad</li><br /><li>So, you get "403 Forbidden"</li><br /></ol><br />A alternative of the rewrite rule is:<br /><pre><code><br /> RewriteRule ^.*$ %{DOCUMENT_ROOT}/system/maintenance.html [L]<br /></code></pre><br />It works on Mac OS X (and other systems as well I think).hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-21040320272472286442007-12-09T00:03:00.000+09:002007-12-09T00:33:20.808+09:00What I'v just discovered in Advanced Rails Recipes<a href="http://www.pragprog.com/titles/fr_arr">Advanced Rails Recipes</a> のβブック(pdf) がリリースされたので早速購入して、ザクっと目を通してみました。<br /><br />一年以上 Rails のアプリケーションを仕事で作っているので、前作(といっても著者は違うけど) Rails Recipes を読んだときほどの発見はなかったけれど、細かい発見がいくつか。ほんのメモ程度なので詳細を知りたい人は本を買ってやってください。<br /><br /><h3>Recipe 17 - Accessin’ Helpers </h3><br /><pre><code><br />$ script/console<br />Loading development environment.<br />>> helper.human_size 333232323<br />=> "317.8 MB"<br /></code></pre><br /><br /><h3>From Recipe 32 - Running Multi-Stage Deployments</h3><br /><pre><code><br />set(:deploy_to) { "/path/to/#{application}/#{stage}" }<br /></code></pre><br />deploy_to が評価されるときにブロックが実行される。<br /><br /><h3>Recipe 12 - Simplifying Controllers With a Presenter</h3><br />1つのフォームとアクションで複数のモデルを扱うときのパターン。<br />普通の ruby のクラスを使って user_name のようなメソッドを method_missing で send("user").send("name") のようにデリゲーションする この method_missing の使い方だけでもいろいろ使えそうだ。<br /><a href="http://blog.jayfields.com/2007/03/rails-presenter-pattern.html">Jay Fields Thoughts : Rails : Presenter Pattern</a>が元ネタですね。<br /><br /><h3>Recipe 25 - Enabling Remote Testing</h3><br />ssh -R オプションによるポートフォワーディングで、開発マシンで実行しているアプリケーションをプロダクションサーバーから参照できるようにする。なるほど。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-44273650528772831722007-12-07T00:37:00.002+09:002007-12-07T01:22:23.306+09:00A low cost server<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_qsyweV0vXTA/R1gf2KEyXOI/AAAAAAAAAEk/eZssKzUFRDQ/s1600-h/IMG_4691.JPG"><img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_qsyweV0vXTA/R1gf2KEyXOI/AAAAAAAAAEk/eZssKzUFRDQ/s320/IMG_4691.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5140893989921250530" /></a><br /><br />ファイルのバックアップ、Railsアプリケーションのホスティング(<a href="http://tagnote.yakitara.com/">tagnote</a>)などに使っているサーバーです。<br /><br />半年前までは、イーレッツ <a href="http://www.e-lets.co.jp/product/pc-m60l/">Be Silent M6000</a>のコンデンサのアタマが開いて壊れるまで使っていて、その余ったケースに VIA <a href="http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=473">EPIA-LN1000EG</a> と Mini-Box の電源 <a href="http://www.mini-box.com/s.nl/it.A/id.417/.f?sc=8&category=13">picoPSU-120</a> を付けて使ってます。<br /><br />このサーバー、僕の用途を満たす十分な性能があり、低消費電力でファンレスなので、24時間稼働させてもほとんど気になりません。(廃熱は水筒や乾き損ねたくつ下の乾燥に利用)<br /><br />ワットチェッカーで測ってみると、消費電力はアイドル時には 20W くらいで、一ヶ月あたりの電力量は、<br /><pre><br />1.42kwh/71:13(71.21h) => 19.94w/h => 478.58w/24h => 12.34kwh/30d<br />12.34kwh/30d * 21円/kwh => 259円/30d (11月は192kwhだったので、21円/1kwh)<br /></pre><br />多く見積もっても 300円/月くらいですね。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-65210711934661927712007-11-23T23:03:00.000+09:002007-11-23T23:29:30.659+09:00Testing ANY helper in a functional testRecipe #44 - "Write Tests for Your Helpers" in the book "Rails recipes" instructs us doing this by including helper modules in subclasses of Test::Unit::TestCase. However it wouldn't work if a helper you want to test is implemented with _erbout for example. I have just faced this issue last week, then my colleague suggested me like that "Don't you render it in a view?" (in Japanese). Yes, in a view biding, every helpers must be work correctly.<br /><br />The solution is like following code:<br /><pre><code><br />test/units/foo_helper_test.rb:<br />...<br /><br />class FooTestController < ActionController::Base<br /> ...<br /> def index<br /> render :inline => <<-INLINE<br /> <% foo do %><br /> <%= ... %><br /> <% end %><br /> INLINE<br /> end<br /><br />end<br /><br />class FooHelperTest < Test::Unit::TestCase<br /> def setup<br /> @controller = FooTestController.new<br /> @request = ActionController::TestRequest.new<br /> @response = ActionController::TestResponse.new<br /> end<br /><br /> def test_foo<br /> get :index<br /> # do assert_select or whatever you like, to check rendering result of the helper.<br /> end <br />end<br /></code></pre>hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-45178225078237318432007-11-23T22:07:00.000+09:002008-01-05T11:13:00.903+09:00Subversion Precomposed UTF-8 patch前回 <a href="http://blog.yakitara.com/2007/11/rails-on-leopard.html">Rails on Leopard</a> で紹介したノートの一部でもパッチをあてた Subversion のビルド方法を書いたけど、もう少し詳しく解説します。<br /><br />簡単に言うと、 Windows を使っている人と Mac を使っている人が Subversion のリポジトリを共有している場合に、 Windows からリポジトリに追加した日本語ファイル名のファイルを Mac で checkout すると svn status などを実行したときにファイルがダブっているように見えて正常に扱えないことがあります。(Mac -> Win の場合でも同様の問題が発生する)<br /><br />Mac OS X ではファイル名を UTF-8 で保存するときに濁点、半濁点などを decompose (分解) してから保存してしまうために、リポジトリ内のファイル名の文字列と一致しなくなってしまうのが原因。<br /><br />例えば、「ステージングテスト.xls」という Windows からリポジトリに追加されたファイルを Mac で checkout すると、「ジ」と「グ」は濁点が別の文字として切り離されてファイルシステムに保存されてしまい、リポジトリとワーキングコピーを比較するようなコマンドを実行すると、別々のファイルとして扱われてしまう。<br /><br />ちょっと話は変わりますが、<br />僕は仕事で rails のアプリケーションを開発していまして、Tiger のときは VMWare に CentOS(Linux) を入れて、ターミナルから全ての作業をやってましたけど、 Leopard には最初から Rails がインストールされていたりするので、 Mac をネイティブに rails の開発環境として使おうと決心しました。<br />この Subversion の問題は致命的でした。<br /><br />Subversion のバグトラッキングシステムには、すでにこの問題<a href="http://subversion.tigris.org/issues/show_bug.cgi?id=2464">(issue - 2464)</a>が2005年12月の段階で指摘されているのにまだ修正(改善?)されていないので、他力本願ではダメだと思い、解決方法を調べてみました。<br /><br />なんとか到達した僕の解決方法は、svn コマンドが Mac 上でファイル名を扱う時には、ファイルシステムから得られたファイル名の分解された濁点を合成してから行うという方法です。<br /><br />Apple が配布するバージョンの Subversion へのパッチを当てたバイナリのビルド方法は <a href="http://tagnote.yakitara.com/notes/193">http://tagnote.yakitara.com/notes/193</a> に書いあります。<br /><br />手前味噌ですが、Mac から日本語ファイル名を含む Subversion リポジトリにアクセスする必要のある人にとっては必須だと思うので使ってください。hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-63180932801034776872007-11-11T23:18:00.001+09:002007-11-11T23:19:23.746+09:00Rails on LeopardI had little trouble when I got Leopard ready for my daily task, coding rails applications. I share my notes with hope you think them useful.<br /><br />Leopard で rails の開発作業ができるまでに多少トラブったので、そのメモを公開します。<br /><br /><a href="http://tagnote.yakitara.com/notes/192">http://tagnote.yakitara.com/notes/192</a>hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-88137701198810829562007-07-15T12:54:00.000+09:002007-08-11T18:01:23.357+09:00膠と漆<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qsyweV0vXTA/RqDh4vHuFqI/AAAAAAAAAD8/tLxnuiPaarM/s1600-h/IMG_1157.JPG"><img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_qsyweV0vXTA/RqDh4vHuFqI/AAAAAAAAAD8/tLxnuiPaarM/s320/IMG_1157.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5089315943766431394" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_qsyweV0vXTA/RqDeavHuFpI/AAAAAAAAAD0/bi5o3MeKNos/s1600-h/nanzinsikanikawa.jpg"></a><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;"><div><br /></div>漆器の汁椀や塗箸などは現在でも一般的に使われているので、漆(うるし)の塗料としての価値は認められていると思う。しかし、接着剤としての用途はあまり知られていないようだし、もうひとつの接着剤、膠(にかわ)に関しては名前だけしか知らないという人は少なくないと思う。</span></span><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;">僕は伝統工芸の職人ではないけれど、その膠と漆の以外と知られていない接着剤としての性能について少し知って欲しいと思います。</span></span><span class="Apple-style-span" style="font-size:small;"><br /></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;">プログラマという職業柄、僕</span></span><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;">はモノをつくるのが好きなので、気が向いた時にはパンを作ったり日曜大工をします。また、最近は石油化合品は生物にとって毒だと思っているので、以前は疑いも無く使っていた「木工用ボンド」もなるべくなら使いたくないので、合成接着剤が登場する以前から使われている膠と漆を試してみようと思い、実際に使ってみてその性能に驚いた。</span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;">安物の木製家具の組み立てには、合成接着剤と共に木ネジが使用されていることがよくある。そういう家具は、しばらく使っていると接着剤が剥がれたり、木ネジが木をえぐってしまいグラグラしてくる。僕が使っている、ポールハンガーの接合部も木ネジでが使用されていたので長年使っているとグラグラしてきてもうダメかと思った。けれども、膠で木ネジがえぐった穴を固定するようにしてやったら、グラグラせずに使えるようになった。</span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"><span class="Apple-style-span" style="font-size:small;"><br /></span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap; font-family:Courier;"><span class="Apple-style-span" style="font-size:small;">漆も塗料だけではなく、接着剤としても使えます。 愛用している急須の口が欠けてしまったときに、最初は「アロンアルファ」で接着したけど、臭いし、お湯を使うためか、すぐにとれてしまった。いろいろと調べた結果、「金継ぎ」という方法で陶器の修復ができることを知り試してみたら、ちゃんとくっついてくれました。金継ぎとは、漆に砥の粉(砥石の粉末らしい)をまぜてできたペースト状のもので接着して、それだけだと黒く汚らしいので、金粉で覆う修復方法。漆は食器の塗料にも使うぐらいなので、お湯くらいの温度ではビクともしない。すばらしい。</span></span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"> </span></div><div><span class="Apple-style-span" style=" white-space: pre-wrap;font-family:Courier;"> </span></div>hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.comtag:blogger.com,1999:blog-9178620729627808446.post-63836339056342649672007-07-07T17:23:00.000+09:002007-07-21T00:57:14.360+09:00パン<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_qsyweV0vXTA/RqDa-PHuFoI/AAAAAAAAADs/Pj2ZC4ola5A/s1600-h/IMG_4293.JPG"></a><br /><div>いつもはホームベーカリーでパンを作っているけど、丸いパンが食べたかったので、粉も手で捏ねて、オーブンで焼いてみた。</div><div><br /></div><div>「フライパンで作る世界のパン」のパン生地の作り方を見ながら適当に作った割にはうまくできた。見た目だけでなく味も悪くない。</div><div><br /></div><div><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_qsyweV0vXTA/RqDa-PHuFoI/AAAAAAAAADs/Pj2ZC4ola5A/s320/IMG_4293.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5089308341674317442" /></div>hiroshihttp://www.blogger.com/profile/02969752674401335284noreply@blogger.com