PHPとの比較

投稿者 akira 2006-12-19 15:00:00 GMT

ここのところなんでだかPHPのコード片を読んだり書いたりすることがしばしば。そんなわけで言語としてのごくごく基本的なところをRubyと比較してみたりしていたのをちょこっとまとめてみた。両言語ともになんとなくあいまいなままのところがあったのだが、その一部についてはすっきりしたように思う。

まとめたものは、といっても一般性があるかどうか分からないけど、後でどこかに置いておくかも。続いては基本的なデータ/オブジェクト操作の比較かな。

追記(2006-12-25): ここに置いてみた。間違いや不適切な表現などあるかもしれない点に注意。

てことで

投稿者 akira 2006-11-27 15:00:00 GMT

隙間がどこにも見つからないようなので決心を。しょうがないし、できることをできる範囲で、みたいなことを考えてたんだけど。

それはさておきuriなんとかしよう。

URIライブラリ

投稿者 akira 2006-11-07 15:00:00 GMT

いいかげん作業を進めようかと。の件もなんとかしなきゃなんないし。

The Box

投稿者 akira 2006-11-04 15:00:00 GMT

箱に入りますよー。

(入った。)

日本Rubyカンファレンス2007

投稿者 akira 2006-10-09 15:00:00 GMT

日本Rubyカンファレンス2007を開催するとのこと。

2006は呼んでもらえたので行けたが、そうでなかったらチケットを入手できなかったろうな。2007はどうなるのか。仮にチケットの入手がしやすくなったとしても、なんというか、「何かいえばRails」みたいな雰囲気になるようなら行かないかもなあとも思う。ま、そのころにRailsで仕事してるとかいう状況にでもなっていたらまた考えるだろうけど。

プログラミングRuby第二版のブックレビュー 1

投稿者 akira 2006-08-23 15:00:00 GMT

www.linux.or.jpのブックレビュー企画でプログラミングRubyの第二版(とShip It!)のレビューアを募集中。申し込みは8月29日17:00必着なのでお早めに。

それにしても今回で94回か。あと六本で100回。続いてるなー、といっても、もうずいぶんお手伝いできていないけれど。

プログラミングRuby第二版

投稿者 akira 2006-08-19 15:00:00 GMT

プログラミングRuby 第2版 言語編プログラミングRuby第二版言語編[rakuten]とプログラミングRuby 第2版 ライブラリ編同ライブラリ編[rakuten]を一足早くいただいた。

レビュー協力者の一人として参加させていただいたのでひととおりは読んだが、30ページからなる索引を実際に見るとこれはなかなかのもの。なお、もともと一冊だったのを二冊に分けている関係で索引はどちらの本にも同じ内容が用意されている。そして、その本に含まれる内容についてのページ番号はゴシック体で、もう一方に含まれる内容についてのページ番号はイタリック体で、それぞれ表現している。

あわせてShip It! ソフトウェアプロジェクト 成功のための達人式ガイドブックShip It![rakuten]までいただいてしまった。ありがとうございます。

amazon.co.jpから注目アイテムの発売日を取り出す

投稿者 akira 2006-08-14 15:00:00 GMT

Ruby/AmazoniCalendarライブラリを使って、キーワード検索の結果から発売スケジュール表を作ってみた。

#!/usr/bin/ruby -Ku
basedir = File.dirname($0)
$LOAD_PATH.unshift File.join(basedir, 'icalendar-0.97/lib')
require 'date'
require 'amazon/search'
require 'icalendar'
require 'time'
 
outfile = '*** filename ***'
devid = '*** devid ***'
keywords = [
  '*** keyword ***',
  '*** keyword ***',
  '*** keyword ***',
]
max_retry = 5
 
products = {}
req = Amazon::Search::Request.new(devid, nil, 'jp')
req.cache = Amazon::Search::Cache.new(File.join(basedir, 'cache'))
retry_count = 0
keywords.each do |keyword|
  (1..99).each do |i|
    begin
      req.keyword_search(keyword, 'books',
                         Amazon::Search::LIGHT, i).products.each do |product|
        h = product.to_h
        products[h['asin']] = h
      end
      retry_count = 0
      sleep 60
    rescue Amazon::Search::Request::SearchError
      break # done
    rescue
      $stderr.puts "#{Time.now.iso8601}: #{$!} (#{keyword})"
      retry_count += 1
      exit(1) if retry_count > max_retry
      sleep 120*retry_count
      retry
    end
  end
end
 
ical = Icalendar::Calendar.new
 
ical.custom_property('X-WR-CALNAME', '注目アイテム')
ical.custom_property('X-WR-CALDESC', '注目アイテム')
ical.custom_property('X-WR-TIMEZONE', 'Asia/Tokyo')
 
ical.timezone do
  tzid 'Asia/Tokyo'
  standard do
    tzoffsetfrom '+0900'
    tzoffsetto   '+0900'
    dtstart      '19700101T000000'
  end
end
 
today = Date.today
products.each do |asin, product|
  begin
    date = Date.parse(product['release_date'])
    next if date - today < -45
    ical.event do
      uid     "X-ASIN-#{product['asin']}"
      dtstart date
      dtend   date.next
      summary product['product_name']
      description "#{product['product_name']} (#{product['manufacturer']})
\n価格: #{product['our_price']} (定価: #{product['list_price']})
\n著者: #{product['authors'].join(', ')}
\n" klass 'PUBLIC' end rescue ArgumentError # 日付が年月日そろっていないので無視 end end File.open(outfile + '.n', 'w') do |o| o.print ical.to_ical end begin File.rename(outfile, outfile + '.o') rescue Errno::ENOENT end File.rename(outfile + '.n', outfile)

もっとましなやり方がありそうな気もする。なお、Ruby/Amazonはdebパッケージでいうところの0.9.0-2でないとリダイレクトが扱えないのでうまくなくて、かつ、sargeのruby1.8だとamazon/search.rbの945行目にある「redirects += 1」をかっこでくくっておかないとならない。というか、Ruby/Amazonの最新は0.9.2なんだな。debは古いままらしい。

あとiCalendar-0.97にはもしかするとバグがあるかも。上のスクリプトを動かすためには以下の変更が必要だった。タイムゾーンのところはコードで使わなければ必要ないがto_icalのほうは必要っぽい。ちなみにタイムゾーンのところはgoogle calendarに読み込んでもらうために試行錯誤した中で付いたもので、実は指定する必要はないのかもしれない(調べていない)。

diff -ruN icalendar-0.97.orig/lib/icalendar/component/timezone.rb icalendar-0.97/lib/icalendar/component/timezone.rb
--- icalendar-0.97.orig/lib/icalendar/component/timezone.rb	2006-04-26 17:57:42.000000000 +0900
+++ icalendar-0.97/lib/icalendar/component/timezone.rb	2006-08-15 09:47:56.000000000 +0900
@@ -20,7 +20,17 @@
   # New York City starting from 1967. Each line represents a description
   # or rule for a particular observance.
   class Timezone < Component
-    ical_component :standard, :daylight
+    def standard(&block)
+      e = Standard.new
+      self.add_component e
+      e.instance_eval &block if block
+      e
+    end
+    def daylight(&block)
+      e = Daylight.new
+      self.add_component e
+      e.instance_eval &block if block
+    end
  
     # Single properties
     ical_property :dtstart, :start
@@ -49,10 +59,12 @@
     # Also need a custom to_ical because typically it iterates over an array
     # of components.
     def to_ical
-      print_component do |s|
+      print_component do
+        s = ''
         @components.each_value do |comp|
           s << comp.to_ical
         end
+        s
       end
     end

日本Rubyカンファレンス2006二日目

投稿者 akira 2006-06-10 15:00:00 GMT

つまみ食いな感じで聞いたり聞かなかったり、見たり見なかったりした。見聞きしたセッションなかでは西和則さんの「ActiveRecord を詳しく」が気になったが、いかんせん予習不足でついていけなかった。咳さんとお話ししたり。

Railsって目を凝らせば裏側が透けて見えそうなんだけど、でも、そこのところは表に出てくるドキュメントなんかはで触れられないことが多いような気がする。でもって、そのために座りの悪い感じが自分の中にいつもある。使ってみちゃえばそんなの気にならなくなるんだろうけれども…… ってRails本にはちゃんと書いてあるのかもしれないな。

LTでは片山俊明さんのBioRubyのデモが(いやプレゼン資料もだが)素晴らしく良かった。irbを改造してDBのインタフェースを作ってあるとかも。資料が公開されると良いな。あとRubyCocoaもやってみたいなあと思った。そう思ってしばらくしたあたりで、最後までいられず退散することに。

日本Rubyカンファレンス2006についての私の反省

投稿者 akira 2006-06-10 15:01:00 GMT

パネルのコメンテータとして声をかけていただいて、参加費用なしで参加させてもらったのだが、気の利いた働きができていなかったような気がする。Ruby 1.9.0以降でRubyGemsがどうなるのかって言うのは個人的にすごく気になっているポイントだったのだけど、会場とはずれていたかも知れず……。ちょっと気軽に引き受けすぎてしまったかなと反省。

自分にとっては、いろんな人と会えて、あるいは見られて、すごく良かった。どこに行ってても出不精で結局は面識のある人に相手をしてもらったような感じであったのが我ながら残念な人だとも思うが。会う人みんなお久しぶりだったし。

次回があったらまた参加したいと思うが、そのときは普通にチケットを取って参加しよう。うまくチケットを取れたらだけど。