いくつか要望をいただいていた、 コピー&ペーストする時に行番号は邪魔になるという問題を解決するために、 コピー&ペーストモードを実装いたしました。 ソース部分をクリックすると、行番号が隠れるようになります。 ソース部分の外をクリックすると元に戻ります。

以下テスト用。

   1  class User < ActiveRecord::Base
   2    has_many :comments
   3  end

  • インデント対応テスト
       1  def foo
       2    puts "foo"
       3  end
    

一行テスト。

   1  Hash.new({})

posted by Png genki on Sun 3 Aug 2008 at 11:49

iPhoneやiPodTouchでホームのボタンに登録する時に利用される、 AppleTouchIconとして、登録された画像を利用できるようにしました。

iPhone/iPodTouchをお持ちの方は、ぜひお試しください。

posted by Png genki on Fri 1 Aug 2008 at 22:18

named_scopeは大変素晴らしいRailsの新しい機能ですが、 おなじみのwith_scopeのように、 スコープつきのブロックを伴った利用ができないという問題がありました。 例えばこんな感じに利用しようとしてもうまくいきません。

   1  User.active do
   2    User.count # => Not run
   3  end
   4  
   5  User.active.with_scope do
   6    User.count #=> Not scoped
   7  end

そこで、昔ながらのwith_scopeと同じようにnamed_scopeを使えるようにする Gemプラグインを作りました。

with_named_scope

これを使うと、以下のように期待通りに動きます。

   1  User.active.with do
   2    User.count #=> User.active.count
   3  end

なかなか便利だと思うので、Rails本家にパッチを送っておきました。

Improved named_scope to be used like as with_scope

posted by Png genki on Fri 1 Aug 2008 at 21:16

以下の記事は、調査の結果現状のRuby on Rails では期待通りに動かないことがわかりました。


Rails-2.1の新機能であるnamed_scopeを使うと、従来のwith_scope では綺麗にかけなかったスコープの選択を簡潔に記述することができます。

   1  def gadgets_on_sidebar(place = 'index')
   2    case place.to_s
   3    when 'index'; Gadget.on_index
   4    when 'show'; Gadget.on_show
   5    else Gadget.all
   6    end.with_scope{active_gadgets + Gadget.mandatories}
   7  end

各スコープメソッドは、ActiveRecord::NamedScope::Scope オブジェクトを返すので、 これを条件にしたがって選択し、最後に.with_scope を呼んでスコープを適用します。


そこで、 with_named_scope というGemプラグインをつくり、 上述のように処理できるようにしました。 以下のようになります。

   1  def gadgets_on_sidebar(place = 'index')
   2    case place.to_s
   3    when 'index'; Gadget.on_index
   4    when 'show'; Gadget.on_show
   5    else Gadget.all
   6    end.with{active_gadgets + Gadget.mandatories}
   7  end

ということで、Rails本家にもpatchを送っておきました。

posted by Png genki on Fri 1 Aug 2008 at 13:52 with 3 comments

昨日ぐらいからdeliciousのBookmarkカウンターの画像が取得できなくなっていたのですが、このたびv2のAPIに対応することで問題を解決いたしました。

delicious/help/feeds

今までは画像を使っていましたが、今回はJSONPを使ってtotal_posts の値を取得しています。 以下のようなURLをSCRIPTタグで読み込めば良いようです。

http://feeds.delicious.com/v2/json/urlinfo/{md5}?callback={method}

methodで指定したJavaScriptのメソッドが呼び出され、 第一引数としてmd5に関連づけられた情報(urlinfo)の配列が渡されます。 今回は一つ目のurlinfototal_posts をブックマーク数として表示するようにしました。

posted by Png genki on Fri 1 Aug 2008 at 11:15

James Moore氏の sqlup を使って、従来のmusqldumpによるスナップショットの取得にくわえて、定期的にMySQLのバイナリログのバックアップを取るようにしました。

ログの取得間隔は1時間としています。 しばらく様子を見て調整する予定です。

今回の変更に際して、オリジナルのsqlupに若干修正を加える必要があったため、修正版をこちらに公開いたします。

よろしくお願いします。

posted by Png genki on Fri 1 Aug 2008 at 04:01

Ruby-GetText 1.90 以上はRails2系のみのサポートなので、Rails 1.2.x 系でアプリを起動しようとすると「undefined method `label'」というエラーになってしまうという話。

結構はまっている人が多い。

undefined method 'label' for class `ActionView::Helpers::FormBuilder by

結論から言うとgettext1.90以上ではRails1.2.x系をサポートしなくなったため。gemで古いgettextを入れた上でconfig/environment.rbに指定したバージョンを使うよう記述を追加する必要がある。

--
gem "gettext", "1.10.0"
require "gettext/rails"
--

参考:http://underscore.jp/diary/20080227.html#p01

posted by Face ysakaki on Thu 31 Jul 2008 at 10:24

使い方の追加です。

投稿した記事のタイトルをクリックすると、その記事のみが表示されるようになります。
その際のサイドバーに表示される「Menu」について説明します。

Post New Article」は新しい記事の投稿画面に移ります。
Edit This Article」は表示されている記事の編集画面になります。本文やタイトル、タグなどの修正、追加の際にご使用ください。
編集すると、編集した投稿時間は変更した日時に変わります。ただし、記事の順番は変わりません。

Send Trackback」はトラックバックを送ることができます。「Ping URLs」の欄にトラックバックのURLを記入して、「Send Ping」をクリックしてください。
本文の長さは最大255bytesです。

Back to Draft」は下書きに戻り、タイトルが灰色になります。「Edit This Article」で編集画面になるので、日付の横にある「Draft」のチェックをはずして「Post」をクリックすれば投稿は再び公開されます。

Delete This Article」をクリックすると、本当に削除しても良いか尋ねる小さなウインドウが現れて、「OK」を押すと記事は削除されます。

posted by Png mari on Thu 31 Jul 2008 at 00:12
30th Wed

そういえば

右下のTouch Me!ガジェットは共有設定にしてみたんだけど他の人でも使えるんだろうか?設定画面に見えるようなら皆さんも是非どうぞ。

posted by Png technohippy on Wed 30 Jul 2008 at 19:24 with 3 comments

このブログは、JRubyソースコード完全解説の同人出版を目指し、記事を書きためる目的で開設されました。偉大な書籍である『Rubyソースコード完全解説』のJRuby版を目指します。

著者は、コンピュータ科学の専門訓練をうけていないうえに、飽きっぽい性格ですので、その内容や完成に責任を持つことはできません。

あしからず。

posted by Png takai on Wed 30 Jul 2008 at 17:30