« 2008年05月 | メイン | 2008年07月 »

2008年06月 アーカイブ

2008年06月03日

Ruby on Rails 2.1.0公開で、2.0系は切り捨てか

Ruby on Rails 2.1.0が公開されたようだ。
そうすると、Ruby on Rails 2.0.2は大量のバグを抱えたまま開発は終了になるのか。

2.0系が安定したら、1.2系から乗り換えようと考えていたチームも少なくないはず。

安定している1.2系はもう古いし、2.0系はバグが放置されたまま。
2.1系は安定するまで、まだ時間がかかるだろう。
どのバージョンを使うのか、難しい選択に迫られる。

2008年06月07日

Ruby on Railsのlink_toで、https://にリンクする。

Ruby on Railsのlink_toは、通常、コントローラとアクションを指定してリンクを作成します。

link_to('トップページ', :controller => 'top', 
                        :action => 'index')

明示的にhttps://などのプロトコルを指定する場合は、オプションに:protocolをつけます。
このとき、:only_pathの指定も忘れずに。

link_to('トップページ', :controller => 'top', 
                        :action => 'index',
                        :only_path => false,
                        :protocol => 'https://')

2008年06月08日

脳を活かす!必勝の時間攻略法

脳を活かす!必勝の時間攻略法」を読みました。

筆者は1日の実質的な時間を、

1日の実質的な時間 = (24時間 - 睡眠時間 - 無駄な時間) × 脳の活性度

とし、睡眠時間や無駄な時間を削るよりも、脳の活性度を高めることの方が重要であると言います。

脳の仕組みから、脳の活性度を高める効果的な方法を解説しています。

関連する本を何冊か読んでいますので、他の本でも書かれていることも多々ありました。
ですが、著者の失敗談などおもしろい話も多く、興味深く読むことができました。

知らなかったのは、脳は疲れを感じないけど、実は疲れるということ。
だから、脳にも休息が必要なのです。

右脳神話(と私は呼んでいる)を「右脳オカルト信仰」と呼び、注意を促している点は好感が持てます。

以前から疑問に思っていた睡眠学習も、著者はやってはいけないとはっきり書いています。
やっぱりいけなかったのだと一安心です。

脳を活性化するために何をすればいいか、時間帯ごとに何をすると効果的か、細切れ時間を有効活用する方法など、普段の生活の中で使える知識がたくさん盛り込まれていました。

新書なので安いですし、素人にも読みやすい、お薦めの本です。

知ったモン勝ち! 私はこの方法で資格を30取得しました ―無敵のラジカル・マスター学習法

知ったモン勝ち! 私はこの方法で資格を30取得しました」は、大人のための具体的な受験テクニックを解説しています。

先日読んだ「脳を活かす!必勝の時間攻略法」など脳に関する本に書かれている理論を活用されており、理にかなった学習法だと思いました。

隙間時間を有効活用しろ、といった精神論的な本ではありません。

基本書や問題集はどう選び、どう使うのか、という、具体的で実践的な学習方法です。

資格取得のための、大人の受験術といった感じです。
資格勉強を始める前に、読んでおきたい本です。

図書館に訊け!

図書館に訊け!』は、図書館で調べ物をする人に、図書館を有効に活用する方法を教えてくれる本です。
もしも、調べ物をするために図書館に行ったとき、すぐに本棚の前に立って本を探すのなら、それは効率の悪い探し方です。
目録とレファレンス・サービス、これを知るだけで図書館の使い方が変わると思います。

大学生にとって図書館は欠かせないものなのだから、大学はちゃんと図書館の使い方を教えてもいいのではないかと思いました。
また図書館の方も、もっと啓蒙活動をするべきではないでしょうか。

本の並べ方の話(ヴァールブルク研究所の逸話)はおもしろかったです。
本を並べるというのは、知的で創造的な作業であると思いました。
NDCコード順に並べるのは、管理しやすいのかもしれませんが、面白味に欠けませんか。

2008年06月09日

ロリポップのショッピングカート「Color Me Shop! mini 」の注文メールをCSVファイルに変換するD2のプロジェクトファイルを公開しました。

ロリポップのショッピングカート「Color Me Shop! mini 」の注文メールをCSVファイルに変換するD2のプロジェクトファイルを公開しました。

こちらからダウンロードできます。

ご協力ありがとうございました。

2008年06月10日

Ruby on RailsのGeneratorの作り方

Ruby on RailsのGeneratorの作り方。

script/generateでプラグインの雛形を作成する。

ruby script/generate plugin sample

Rails::Generator::NamedBaseを継承したSampleGeneratorクラスを作成する。

Rails::Generator::NamedBaseは、Rails::Generator::Baseを継承し、先頭の引数にクラス名を受け取る。

vendor/plugins/sample/generators/sample/sample_generator.rb

class SampleGenerator < Rails::Generator::NamedBase

次に、generatorに渡された引数を解釈する処理。

def initialize(runtime_args, runtime_options = {})
  super #ここでクラス名が解釈される
  #ここからは必要な引数やオプションを解釈する処理を自分で書く
end

Rails::Generator::NamedBase#initializeで引数が解釈され、 先頭の引数であるクラス名は、インスタンス変数に格納される。 2番目以降の引数は@argsに格納される。

引数であるクラス名が「HogeHoge::Foo::Bar」と「hoge_hoge/foo/bar」のときの、インスタンス変数の値。

  • @name 先頭の引数であるそのままのクラス名("HogeHoge::Foo::Bar","hoge_hoge/foo/bar")
  • @class_path Railsの命名規則に合わせたモジュール名の配列(["hoge_hoge", "foo"])
  • @file_path ファイルのパス("hoge_hoge/foo/bar")
  • @class_nesting モジュール名("HogeHoge::Foo")
  • @class_nesting_depth モジュール数(2)
  • @class_name_without_nesting 命名規則に従ったクラス名("Bar")
  • @singular_name 命名規則に従ったファイル名("bar")
  • @plural_name @singular_nameの複数形("bars")
  • @table_name モデルのテーブル名(hoge_hoge/foo_bars)
  • @class_name クラス名("HogeHoge::Foo::Bar")
  • @file_name @singular_nameの別名
  • @actions @argsの別名

manifest()メソッドに、やりたい処理を書く。

def manifest
  record do |m|
    #ここにgeneratorでやりたい処理を書く
  end
end

manifestの書き方は、「Generatorプラグインの作り方」の説明が詳しい。

2008年06月12日

Dir.glob()を使うときは、パスを絶対パスに変換してから

WindowsでDir.glob()を使うときは、パスを絶対パスに変換しよう。

Ruby on Railsを使っていて、あるコードで相対パスのままDir.glob(path)としているため、ファイルを見つけてもらえず、はまりました。

path= 'C:\test1\test1_1/../test1_2'

#これはファイルが見つからない
Dir.glob("#{path}/*")

#これはファイルが見つかる
Dir.glob("#{File.expand_path(path)}/*")

2008年06月13日

Ruby 1.8.7とRuby on Rails 2.0.2の組み合わせは、問題が発生する

Ruby 1.8.7とRuby on Rails 2.0.2の組み合わせは、いろいろと問題が発生するようです。

Ruby 1.8.6とRuby on Rails 2.0.2なら、もちろん問題なし。

マイナーバージョンアップなのに、この互換性の低さ。
Rubyの面目躍如でしょうか。

2008年06月16日

PyScripterの日本語化

PyScripterオフィシャルのSVN版がついにgettextに対応しました。

いままでは日本語化パッチで日本語化を行っていましたが、次期バージョンからはオフィシャルで日本語対応になりそうです。

今後のPyScripterの日本語化について

Pythonの統合開発環境でおなじみのPyScripterが、次期バージョンからオフィシャルで日本語対応になるそうです。

PyScripterは動作が軽快で、コード補完が便利ですので、ちょっとしたプログラムを作る時に、お世話になっています。

日本語に公式対応することで、一層使いやすくなりますね。
嬉しいニュースです。

2008年06月22日

D2 バージョン2.0.3公開

D2 バージョン2.0.3を公開しました。

D2 バージョン2.0.3では、NKF32.DLLを使用するかどうかを、全般設定画面で選択できるようにしました。
http://www.yamamototakashi.com/soft/d2/manual/HLP000072.html
明示的に使用することを設定しない限り、NKF32.DLLを使用しません。

従来のD2ではシステムにNKF32.DLLがある場合、自動的に文字コードの変換にNKF32.DLLを使用するようにしていました。
NKF32.DLLが見つからない場合は、自前の文字コード変換処理を使用します。

NKF32.DLLは、バージョン1系とバージョン2系があります。

バージョン2系はUTF-8に対応していますが、バージョン1系は対応していません。
そのため、バージョン1系のNKF32.DLLがインストールされていると、UTF-8の変換に失敗していました。

対策としては、バージョン2系のNKF32.DLLを使用する方法が考えられますが、NKF32.DLLを使用している他のプログラムに影響が出る可能性があります。
D2が自前で持っている文字コード変換処理はUTF-8に対応していますので、NKD32.DLLを使わなければ、UTF-8も正しく変換できます。

基本的にはNKF32.DLLを使用せず、利用者が明示的に使用することを指定した場合に限り、NKF32.DLLを使用するようにしました。

2008年06月26日

正規表現で全角のみ、半角のみのチェックを行う方法

元ネタ:正規表現で全角のみ、半角のみのチェックを行う方法

半角と全角が反対なのでは?
あるいは、unless ではなく if では?

def check(value)
  # 半角のみのチェック
  if value =~ /^[ -~。-゚]*$/
    puts "「#{value}」は半角のみです。"
  end

  # 全角のみのチェック
  if value =~ /^[^ -~。-゚]*$/
    puts "「#{value}」は全角のみです。"
  end
end

%w(abc あいう abcあいう).each do |value|
  check(value)
end

を実行すると、

「abc」は半角のみです。
「あいう」は全角のみです。

になります。

rubyで文字数を数えるには?

元ネタ:rubyで文字数を数えるには?

'abcあいう'.split(//)

は、定番の書き方です。
Rubyレシピブック』にも、掲載されていたと思います。(未確認)

Ruby 1.8.7では、String#charsというメソッドが追加されました。

'abcあいう'.chars.to_a #=> ["a", "b", "c", "あ", "い", "う"]

ちなみに、この機能がRuby on Rails 2.0.2では問題を引き起こします。

2008年06月28日

Rubyの後方互換性の低さは、Rubyの良さである。

先日リリースされたRuby 1.8.7は、Ruby on Rails 2.0.2で問題が発生しました。
(Rails 2.0.2とRuby 1.8.7のString#chars)

さらに脆弱性の問題を修正したRubyで、またもRuby on Railsで問題が発生しています。
(Rubyの脆弱性について)

このような問題が発生することは残念なことだと思います。
ですが、後方互換性の低さはRubyの良さですから、開発チームはあまり気にしないでいいと思います。

後方互換性を重視している言語、たとえばJava言語を見ると、歴史的な理由から推奨されない機能がたくさん残されています。
推奨されない機能をいつまでも残し続けることによって、クラスライブラリは肥大化し、わかりにくくなります。
(非推奨 API のリスト (Java Platform SE 6))

また、Pythonも同様です。
urllibとurllib2という2つのライブラリを見て、設計が美しいと感じる人はいないでしょう。

Rubyは歴史的に、後方互換性によって設計が乱されることを嫌ってきたように思います。
結果として、歴史的な理由に束縛されることなく、優れたAPIを提供できました。

# Rubyコミュニティが見下しているPHPも後方互換性を重視しない言語ですね。

Rubyの最新版は、常にその時点における最良と考えられるものでした。
後方互換性を犠牲にすることによって、優れたプログラミング言語になったのだと思います。

Rubyを使う技術者はRubyの哲学・思想を理解し、適材適所で使えばいいのです。

追記
長期にわたり使い続けるアプリケーションを作成する場合、私はRubyを選択しません。
PythonやC++、Javaを選ぶでしょう。
Rubyを使うのは規模の小さい使い捨てのプログラムが中心です。

関連する記事 「Railsの思想」もどうぞ

About 2008年06月

2008年06月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年05月です。

次のアーカイブは2008年07月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35