今年のクリスマスにリリースが予定されている Ruby-1.9.1 ですが、 Rails側でも対応の動きがあるようですね。

[PATCH] Ruby 1.9 compatibility

Aiming for compatibility with Ruby 1.9. The initial patch is incomplete, though nearly all tests pass.

The only substantial breakage is that 1.9 adds a to_time method that converts Time, Date, and DateTime to Time in the local timezone. We have similar methods in Active Support which convert to time in the UTC timezone. The patch overrides the Ruby 1.9 methods in favor of our own.

期待。

posted by Png genki on Sun 16 Dec 2007 at 03:23

Rails勉強会@東京#02-25

Genki Takiuchi

Recent Situation:

  • Founded a small company.
    • And it has already survived 2 months, Yay!
  • Shipped ShootingStar 3.2.5
  • Jogging and swimming.
  • Finally I bought e-mobile (D02HW)
  • And also being with Rails 2.0.1

Favorite Things:

  • C/C++ Template, JavaScript, Ruby.
  • Thinking algorithm, Rendering (CG) and 3D.
  • Vim7, Zsh, GNU screen, rails.vim, ZenTest.

Thank you!

posted by Png genki on Sun 16 Dec 2007 at 02:41

いろんな環境でよく使うので、指に覚えさせています。

   1  javascript:void(window.resizeTo(1024,768))

それはさておき、アドレスバーからJavaScriptを実行する 時に、画面遷移しないように使ったりする、このvoid が気になったので、ちょっと調べてみました。

voidはメソッドではなく演算子

一見メソッドを呼び出しているように見えますが、typeof 等と一緒で演算子です。

Core JavaScript 1.5 Guide:Operators:Special Operators#void

void 演算子は値を返さずに評価する式を指定します。expression は評価する JavaScript の式です。式の周りの括弧はあってもなくてもかまいませんが、使用したほうが見た目はいいです。

したがって、

   1  void window.resizeTo(1024, 768)

と書いても良いわけですね。

posted by Png genki on Fri 14 Dec 2007 at 10:11

複数人で開発している場合に、新しく作成したファイルを svn addし忘れて、Commitもれを発生させてしまうと、 テストが走らなかったり、開発を止めてしまったりと、 様々な悪影響が発生してしまいます。

今回は、Commitもれを防ぐために僕が使ってる方法を紹介します。

やってることは単純で、以下のalias設定を.zshrcに登録しています。

   1  alias svn_new='svn stat | grep "^\?" | sed "s/\? *tmp.*//" | sed "s/\? *log.*//" | grep .'

svn statの結果から、log/とtmp/ディレクトリの中身を除外してるだけですね。 あとは、svn_newコマンドを実行すれば、svn add し忘れてるファイルが無いかどうか簡単に確認できます。

しかし、実際にはconfig/database.ymltagsファイルなど、 svn addする必要が無いファイルがだんだん増えてくるので、 そのような場合には適切にsvn:ignoreプロパティを設定していきます。

僕は、手間を省くために、以下のようなzsh関数を作って使っています。

~/.zshrc

   1  svn_ignore () {
   2    svn pset svn:ignore -F <(echo $1 && svn pget svn:ignore | sed '/^$/d') $2
   3  }

使い方はこんな感じです。

   1  % svn_ignore something_new_file ./

svn:ignoreに設定されたファイルは、svn_newに出てこなくなります。

更新履歴

  • 2007/12/14 CometのやりすぎでComitになっていたのでCommitに訂正。
posted by Png genki on Thu 13 Dec 2007 at 11:41

Markdown記法に加えて、作表機能も備えた、BlueStole というRubyライブラリを紹介します。

BlueStole - BlueCloth Wrapper

Ruby の Markdown ライブラリ、 BlueCloth に幾つかの機能を付け足した私家拡張版です。

BlueCloth のMarkdown記法を拡張したものになっていて、こんな感じに RTtool を使った作表を行うことが出来ます。

Rendering Algorithm
WhatWhoWhen
Ray TracingWhitted1980
Path TracingKajiya1986
Photon MappingJensen1995
Metropolis Light TransportVeach1997

ソースはこんな感じです。

   1  |caption=Rendering Algorithm
   2  |
   3  |What                      , Who    , When
   4  |
   5  |Ray Tracing               , Whitted, 1980
   6  |Path Tracing              , Kajiya , 1986
   7  |Photon Mapping            , Jensen , 1995
   8  |Metropolis Light Transport, Veach  , 1997

Markdown記法のポリシーにあっていて良い感じ。 Railsから使う場合は、bluestole.rbファイルをlib以下に 配置します。

ちなみに、このブログで使っているものは、 BlueStole互換の自家製ライブラリです。

posted by Png genki on Thu 13 Dec 2007 at 01:48

Rails Plugin Watcherとしては、 とても興味深い内容の記事がPostされていました。

10 Ruby On Rails Plugins You Should Be Using

One of Ruby on Rails strengths is how easy it is to extend with Ruby Gems and plugins, becuase you don’t have to code everything yourself you can save a lot of time. One problem facing Rails codes is knowing what plugins are out there and how to use them. The following is a list of 12 plugins that should make your coding life much easier and save you a fair bit of time.

タイトルでは10と言ってるけど、実際には11個紹介されてるようです。 本文には12って書いてるからもっと増えるのかも?

簡単に使えて時間節約効果が高いもの、 という観点でチョイスしてるみたいですね。 acts_as_taggable_on_steroids はぜひ使うべきですね。 Tag系のプラグインの中では最高峰だと思います。

それ以外は、結構趣味の問題かなという気もしますね。

posted by Png genki on Thu 13 Dec 2007 at 01:04

Hash#only, Hash#except に続いて、Hashを便利にするシリーズです。

今回は、Array#compactのように、Hashから値が空っぽのキーを取り除く Hash#compactを実装してみました。

hash_ext.rb

   1  class Hash
   2    def compact!(method = :nil?)
   3      each do |key, value|
   4        value.compact! method if value.respond_to? :compact!
   5        delete key if value.send method
   6      end
   7    end
   8  
   9    def compact(method = :nil?)
  10      dup.compact! method
  11    end
  12  end

非常に簡潔に書けますね。こんな感じの挙動をします。

   1  >> {'foo' => [], :bar => nil, :baz => ""}.compact
   2  => {"foo"=>[], :baz=>""}
   3  >> {'foo' => [], :bar => nil, :baz => ""}.compact :blank? # Rails
   4  => {}

値がcompact!を受け取れるオブジェクトの場合は、 再帰的に処理されます。

   1  >> {'foo' => {:bar => nil, :baz => ""}}.compact
   2  => {"foo"=>{:baz=>""}}
   3  >> {'foo' => {:bar => nil, :baz => ""}}.compact :blank? # Rails
   4  => {}

実際にどんなところで使えるかというと、フォームから送信された パラメータのうち、空っぽのものを削除してからARのアトリビュートを 更新したい場合なんかに便利かもしれません。

   1  class UserController
   2    def update
   3      @user = User.find(params[:id])
   4      @user.update_attributes(params[:user].compact :blank?)
   5    end

こんな感じですね。 パスワードとかが空っぽのときは、以前のまま 変更しないというような場合に簡単に対応できます。

posted by Png genki on Wed 12 Dec 2007 at 08:28

気がついたら、何語で書いてあるかわからないブログを購読してた。

ブログの中に書いてあるソースコードだけが頼り。

それでも言いたいこと、書きたいことは伝わってる。多分。

もしも、もしも、 発音されることを意識されて設計されたプログラミング言語 が広く普及したら。

百科事典はクラスライブラリだ。

posted by Png genki on Tue 11 Dec 2007 at 00:46

Fuシリーズ に新しい仲間が登場。

Running Long Background Tasks In Ruby On Rails Made Dead Simple

BackgroundFu is simple. It has a nice interface resembling ActiveRecord (see examples below). It is small (51 lines of code, 73 lines of specs) and easily understandable. It’s perfect for doing those shiny ajax progress bars showing how busy your box is. It just works.

名前からして BackgrounDRB に近いのですが、機能も似ています。でももっとシンプル(Dead Simple)らしい。

プラグインリポジトリはこちらです。

posted by Png genki on Tue 11 Dec 2007 at 00:15

しばらく間が空いてしまいましたが、 ShootingStar version 3.2.5 をリリースいたしました。

主な変更点は、iPhone/iPod Touchへの対応とバグ修正です。

iPhone/iPod Touchでは、flashによる接続が出来ないため、 強制的にXHRモードで接続を行うようになっています。

今後の開発方針としては、version 4.0 に向けて、Windows環境への対応を行います。

よろしくお願いします。

posted by Png genki on Mon 10 Dec 2007 at 19:12