CSVをパースして得られる配列をアクセサ付きオブジェクトにするクラスを作ってみた

公開日時 いたさん Sun, 28 Feb 2010 12:59:00 GMT

 CSVをパースするだけならRuby標準のCSVライブラリやFasterCSVライブラリで可能だが、アクセサ付きのオブジェクトにしたいこともある。

ということで、フィールド名を順番に渡すだけで、アクセサを動的に定義するクラスを作ってみた。


class CsvLine
  def self.attrs_from_field_order(*args)
    args.each_with_index do |name, index|
      define_method(name) do
        @csv_line_array[index]
      end
    end
  end

  def initialize(csv_line_array)
    @csv_line_array = csv_line_array
  end
end

使い方はこんな感じ。


require "csv_line" 

class SampleCsvLine < CsvLine
  attrs_from_field_order :first, :second, :third
end

WindowsでCucumberのフィーチャやRSpecのスペックを日本語で表示する

公開日時 いたさん Sun, 09 Aug 2009 14:43:00 GMT

Ruby on RailsアプリケーションをBDDで開発する際の標準となった感のあるCucumberとRSpecですが、フィーチャやスペックを日本語で記述することになります。 Mac OS XやLinuxでは全く問題にならないのですが、Windowsの場合、UTF-8の出力をコンソールに表示する事が問題となります。 NetBeansを使えば、出力ウィンドウでUTF-8を表示可能ですが、特定のフィーチャを指定して実行する機能などがないため、実用てきではありません。

コードページ変更による方法


コマンドプロンプトのコードページを65001(UTF-8)にする方法もあるようですが、日本語表示フォントの設定がうまく行かなかったり、コマンド入力が正しく実行されなかったりして、手元の環境では使用できませんでした。

何度か試しているうちに気がついたのが、設定の順序です。次の方法だとうまく行くようです。

  1. 日本語フォントを明示的に設定する
  2. コードページを変更する

1は、コマンドプロンプトのウィンドウの左上をクリックして、「プロパティ」を選択し、「フォント」の設定を「MSゴシック」に変更します。

2は、コマンドプロンプトでchcp 65001と入力して、65001(UTF-8)に変更します。

win32consoleをハックする方法

Windows上で、RSpecや Cucumberのカラー出力をしようとするとwin32consoleをインストールするようにアドバイスされます。

このモジュール自体は、日本語に対応している訳ではなさそうですが、Win32::Console::ANSI::IO#_convをハックする事で、出力文字をShift-JISに強制変更させます。


require "Win32/Console" 
require "kconv" 
....
module Win32
  module Console
    module ANSI
      class IO < IO
....
        def _conv(s)
          if @concealed
            s.gsub!( /\S/,' ')
          elsif @conv
            if EncodeOk
              from_to(s, cpANSI, cpOEM)
            elsif @@cp == 'cp932cp932'
              s = s.tosjis
            elsif @@cp == 'cp1252cp850'      # WinLatin1 --> DOSLatin1
....
      end
    end
  end
end

ただし、この方法はコンソールに出力する場合のみコード変換を行うため、リダイレクトを行う場合にはうまく行きません。ZenTestのautotest(RSpecの場合のautospec)は内部でリダイレクトを行っているため、うまく行きませんでした。

JRubyチームがSun(Oracle)を離れたこと

公開日時 いたさん Tue, 28 Jul 2009 16:39:00 GMT

Sun MicrosystemsでJRubyのフルタイムの開発者として活動してた、Charles Nutter, Thomas Eneboそして、Nick Siegerの3人がSunをやめて、Ruby on Railsのホスティングを主たる業務としているEngine Yardに移るとのニュースが出ていました。

Sun’s JRuby team jumps ship to Engine Yard

OracleがSunの吸収を決めてから、JRubyについてどうするのかのはっきりした態度を示さないので、しびれを切らして見切ったようです。

おりしも、Charles Nutterが、自身のブログの中で、RubyにはJRubyが必要だ、エンタープライズの人は誰もCRubyを業務で走らせようとは思わない、といつになくMatz Rubyに対して攻撃的だったので、これは何かあるなと思っていたところでした。

JRuby’s Importance to Ruby, and eRubyCon 2009

今後はJRuby 1.4のリリースに専念するそうですが、今のテーマは、Java市民としてのJRubyだそうで、なんとHibernateがJRubyで使えるなど、JavaのフレームワークとJRubyの融合を主眼においているようです。

ところで、こうなると気になるのがMicrosoftのIronRubyチームの動向です。不景気のリストラで、ほかのDLRを使う言語とチームが合体したというニュースはだいぶ前に目にしましたが、予定されていたOSCONが終わっても当初アナウンスの1.0はおろかセッションタイトルの0.9もリリースされていません。大丈夫なのでしょうか?

RubyKaigi 2009 最終日

公開日時 いたさん Mon, 20 Jul 2009 03:01:00 GMT

最終日は日曜にも関わらず9時半からのセッションでしたが、午前中は元気に中会議室のセッションに参加。

田中さんのSocketの改良の話は、私にはちょっとテクニカルすぎましたが、おかげでNFSをマルチホームで使った際に発生した障害の原因らしきものに気がつきました。ありがとうございます。

artonさんのセッションは、なかなかためになる小技が聞けて収穫でした。

ごとけんさんの、いつものシリーズも、肩に力が入らないセッションで、ちょっとした作業をRubyで自動化する姿勢は見習いたいものです。あと出力をcvsではなくタブ区切りにする工夫もなるほどと思いました。

西山さんのrubygemsの落とし穴については、知っている事も多かったのですが、行儀の悪いgemをsudoでインストールすると怖いという話は正直びっくりでした。Debian系に関しては、私はrubygemsのdpkgは使わず、手動でインストールするのがよいと思っていますが。

午後のセッションは、James Edward Gray II (JEG2)さんのネットワーク監視の話とAaron PattersonさんのXMLの話を聞きました。

JEG2さんのScoutについては、名前だけは知っていたのですが、興味深い取り組みだと思いました。普通、長時間常駐が必要なアプリをなかなかRubyで書こうとは思わないものですが、プロセス監視を別の軽量なプロセスで行うという発想は面白いですね。

「ひげの山男」ことAaronさんのセッションは、現場にいた人でないと解らないかもしれませんが、爆笑の連続でした。その中でも、ちゃんと技術的なメッセージが伝わっていたのはすごいです。

最後の技術セッションは桑田さんのErubisのセッションを聞きました。Erubisも使った事がないので、使ってみようと思ったのですが、最後にどんでん返しで、これからはTenjinですと言われたのはびっくり。Sinatraの人からも名前が出ていたし、調べてみなければ。

締めのキーノートは、高橋会長でした。いつも通り?の和服で登場し、ちょっと緊張気味にRubyと日本Rubyの会の課題について語ってくれました。

時間がなかったのでReject会議は昨年に続いてパスしましたが、聞きたかったな。

RubyKaigi 2009 2日目

公開日時 いたさん Sat, 18 Jul 2009 15:40:00 GMT

RubyKaigi 2009の2日目は大変面白い一日でした。

午前中は、Sequel, Sinatra, Ramazeの3つの「軽量」ライブラリの話を聞きました。確かに、用途を既存のあるいはシンプルに考えたRubyコードに「HTTPを喋らせる」という発想は面白いですね。特に配布も簡単なVegasはとても面白く思いました。早速Gembox もインストールしてみました。あと、Sequelについては、まさにSQL使いのためのORMですね。1日目に高井さんの「エンタープライズRails」の話を聞いていたので、説得力倍増です。

午後からは、コミュニティアピールに続いてまつもとさんのキーノートです。いつもながらのトークは楽しかったです。そして、LT。昨日のLTもなかなかでしたが、今日のLTも力作ぞろいで、LTこそRubyコミュニティのパワーですね。

最後の駒は、1階の特別会議室でのテクニカルな?セッションシリーズに出席しました。

「Rubyのゴッドファーザー(名付け親)」である石塚さんが、楽天の増田さんと一緒にやっているFairyと分散オブジェクトのDeepConnectの話をした後、「分散オブジェクトと言えばこの人」の咳さんの登場です。さすが咳さん、ほとんど冗談でプレゼンをしているようでいて、技術的には核心を突いた見識がすばらしいところですね。

その後、Rubyのテストメンテナの遠藤さんが、プロジェクトのカバレージの変動をモニタリングするツールの説明をしてくれました。そして、カバレージを落とすMさんの話も。これも大変面白かったのですが、時間が余ったからと行って披露してくれたハッキングの数々にはみんなあっけにとられていましたね。

そして、これが一番RubyKaigiらしいと思ったのが、NariさんのGCの話と、その後の質疑応答でした。質問にたった、RHGの青木さんやYARVの笹田さんが、「GCは良くわからないのですが」と前置きをつけて質問したのにはみんな爆笑。

そうそう。昼休みには、話題の「パターン、Wiki —時を超えた創造の原則」の著者の江渡さんのサイン会があり、しっかりサインをもらってきましたが、これから読むので感想はまた後日。

RubyKaigi 2009に出席します

公開日時 いたさん Thu, 16 Jul 2009 15:44:00 GMT

明日7月17日から開かれるRubyKaigi 2009に出席します。

ところで、会議用に個人の名刺を印刷しようと思ったら、プリンタが故障していました。

グスン。

Oracleかあ!

公開日時 いたさん Mon, 20 Apr 2009 14:35:00 GMT

米オラクルがサンを買収へ 7300億円で http://www.asahi.com/business/update/0420/TKY200904200329.html

Windowsでruby-pgをコンパイルする

公開日時 いたさん Fri, 28 Nov 2008 13:12:00 GMT

PostgreSQL用のRubyアダプタは、Rubyで書かれたpostgres-prと、Cで書かれたライブラリがありますが、Cで書かれた方は、名前がpostgres、ruby-postgres、ruby-pg、pgところころかわった上、Windows用のバイナリが提供されなくなったため、Windowsでは使いにくくRailsではMySQLが好まれる一因になっているような気がします。

一時はpgのメンテナがWindowsでコンパイルできる人を募集するなどしていたようですが、最近ではバイナリパッケージは出ていないものの、Windowsでのコンパイル方法がフォーラムで紹介されるなど、状況が改善されてきています。

http://www.microsoft.com/japan/msdn/vstudio/express/

私もいろいろ試してみたところ、最新版では通常のgemでもコンパイル導入ができるようなので、紹介しておきます。

1. PostgreSQLのインストール

最新版の8.3.5-1をインストールします。インストールオプションで開発用のモジュール(インクルードファイルとライブラリ)を追加しておきます。

2. Visual C++ 2008 Express Editionのインストール

下記のページから、Visual C++ 2008 Express Editionをダウンロードし、インストールします。 http://www.microsoft.com/japan/msdn/vstudio/express/

3. Rubyのconfig.hの修正

Ruby 1.8.6のヘッダファイルconfig.hには、Visual C++のバージョンを6.0に限定する下記のディレクティブが含まれているため、これをコメントアウトします。

/*
#if _MSC_VER != 1200
#error MSC version unmatch
#endif
*/

4. gemのインストール

環境変数を利用するため、Windowでスタート>すべてのプログラム>Microsoft Visual C++ 2008 Express Edition>Visual Studio Tools>Visual Studio コマンド プロンプトを起動します。 このコマンドプロンプトからgemをインストールします。

>gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.7.9.2008.10.13
1 gem installed
Installing ri documentation for pg-0.7.9.2008.10.13...
Installing RDoc documentation for pg-0.7.9.2008.10.13...
のようにインストールできればOKです。

IronRuby初のバイナリリリース

公開日時 いたさん Sat, 26 Jul 2008 03:32:00 GMT

Microsoftがオープンソースプロジェクトとして開発しているIronRubyが初のバイナリをリリースしました。

http://rubyforge.org/projects/ironruby

まだ、アルファ版ということですし、C版のRubyや、JRubyなどに比較しても「何倍も遅い」状態ですが、標準ライブラリを添付したバイナリリリースの登場は、大きなマイルストーンだったと思います。

開発者のJohn Lam氏がブログ(IronRuby at OSCON )で紹介していますが、OSCONで発表された中には、オープンソースのリポジトリサービスとして急速に普及しているGithubで、Microsoft以外の開発者がコントリビュートするためのプロジェクトを立ち上げていくということです。第1弾は、SilverlightをRailsアプリケーションに組み込むためのPluginだそうです。

さらに、Microsoftにとって画期的なのは、IronRubyの開発中に行った、RubySpecのコードの修正版を、RubySpecプロジェクトにコントリビュートするということです。Microsoftが自社以外のオープンソースプロジェクトにコードを提供するということは、「Microsoft的には」大変な事だったようです。

RubyKaigi 2008 The Day Two - PM 3 3

公開日時 いたさん Sun, 22 Jun 2008 08:00:00 GMT

TuneCoreのAlex Kaneさんの事例紹介。

主にインディーズのメディアファイルの配信(iTunes, Amazon MP3 etcへの)ビジネスなのだそうです。

1日に100のアルバムをリリースしているそうです。

フロント(アーティスト側)は通常のアカウンティングサイト。ただし、大きなファイルのアップロードは、mongrelではなくてmerbを使っているとのこと。

配布エンジンはほとんどRuby。ただしエンコード変換は外部、XMLのValidateはJavaだそうです。

メッセージキューをYAML形式で実装しAmazonのサービスを利用。

Amazon EC2を使って配信サーバーを動的に管理している。700のサーバーを起動するのに5分。ストレージはAmazon S3。

前田修吾さんの話。「Rails症候群」

  • protectedの多用(誤用)
  • 既存クラスの再定義をしたがる
  • Rubyが何だか知らない
  • 文字列とシンボルの区別がつかない
  • !の誤用

でも、Rubyのせいかも?

  • protectedは不要?
  • selector namespace/classbox

多様性を保証するためにも言語仕様を。

RubySpecはいいけど、政府調達には…ISO化も考えているとのこと。

古い記事: 1 2 3 ... 6