春が来た!

[img_assist|nid=780|title=ソメイヨシノアップ|desc=円山公園は非常に混んでいますが、北のほうに上がって行くとほとんど人がおらず、ちょっとした穴場です。今日も人がほとんどおらず、ゆっくりと撮ることができました。|link=node|align=left|width=320|height=214]

今年もちょこっと桜を観に行ってきた。
ソメイヨシノは満開まではあと少し。
寄って写真を撮るのなら、これくらいがいいのかもしれません。

しだれ桜については今日が見頃だったのかもしれません。

今年こそは夜明け直前のしだれ桜を撮るつもりだったのだけれども、仕事の疲れのせいか!?起きたら9時過ぎ…慌てて出かけたのでした。

曇天だったのが少し残念。夕方近くになると雨もパラツキましたが、久々に右脳を使って気分転換ができました。

[img_assist|nid=778|title=円山公園のしだれ桜|desc=京都、円山公園のしだれ桜。 切除された枝が痛々しいですが、どっしりとして優雅です。|link=node|align=center|width=320|height=214]

[img_assist|nid=779|title=しだれ桜アップ|desc=非常に人が多く、慌てて撮ったのでした。|link=node|align=center|width=214|height=320]

N900 + Ruby on Rails3.0β版 + Open Flash Chart IIで為替レートの変化をグラフ化する

[img_assist|nid=775|title=Yen-Bahtsグラフ|desc=もちろんUbuntuサーバでもRailsは動作します。 Macからアクセスして表示できました。|link=node|align=left|width=320|height=275]

なんだか仕事が忙しくて時間がとりにくい中、Ruby on Rails3.0β版をN900にインストールしてみた。

Rails3.0β版はRuby1.9系に対応しているとリリースノートに書かれていたが、あいにくN900には1.9系のパッケージはなく、セルフビルドしてみた結果は“make test”でNGがたくさん検出される有様。パッケージとして提供されている1.87系で動作させることにした。

N900でもリリースノートに書かれている手順に従えば、問題なくインストールできました。ただ、eMMCへのインストールは非常に遅く、晩にインストールを開始し、そのまま一睡したのでした。
どうもeMMCへの書き込みは遅いですね。何がボトルネックになっているのだろうか…

[img_assist|nid=774|title=Yen-Bahtsグラフ|desc=Rails3.0β版でバーツ−円の為替レートをグラフ表示するソフトを作ってみました。|link=node|align=left|width=320|height=192]

Rails標準のHTTPサーバ“Webrick”は遅く、N900では更に顕著なため、
“thin”をインストール。
また、WEBページの解析には、“nokogiri”を使用することにした。
かつては“hpricot”を使っていたがRuby1.9系ではうまく動かない状態が続い
ていたこと、nokogiriはhpricotと互換性があり1.9系でも動作するとのことだっ
たため、nokogiriを選択した次第。

インストールした結果は以下。
芋づる式にインストールされたことなどから沢山のパッケージがインストール
されました。

abstract (1.0.0)
actionmailer (3.0.0.beta)
actionpack (3.0.0.beta)
activemodel (3.0.0.beta)
activerecord (3.0.0.beta)
activeresource (3.0.0.beta)
activesupport (3.0.0.beta, 2.3.5)
arel (0.2.pre)
builder (2.1.2)
bundler (0.9.7)
cgi_multipart_eof_fix (2.5.0)
daemons (1.0.10)
erubis (2.6.5)
eventmachine (0.12.10)
fastthread (1.0.7)
gem_plugin (0.2.3)
i18n (0.3.3)
mail (2.1.2)
memcache-client (1.7.8)
mime-types (1.16)
mongrel (1.1.5)
nokogiri (1.4.1)
rack (1.1.0)
rack-mount (0.6.0, 0.4.0)
rack-test (0.5.3)
rails (3.0.0.beta)
railties (3.0.0.beta)
rake (0.8.7)
sqlite3-ruby (1.2.5)
text-format (1.0.0)
text-hyphen (1.0.0)
thin (1.2.7)
thor (0.13.3)
tzinfo (0.3.16)

グラフ表示には [http://pullmonkey.com/projects/open_flash_chart2/ Open Flash Chart II] を使用。

色々情報をあさっている限りではRailsを使う場合はDBへのデータの投入は手動が一般的にも思えるけど、手動で為替レートを入れるのは面倒だしスクレープしてActiveRecordにてDBに書き込むようにした。

スクレープするサイトは http://www.oanda.com を使わせていただくことに。ずいぶん過去に遡ってレートを確認することができること、(厳密にはHTMLコンテンツなのだが、データ部分については)CSVとして出力することもできるため、取り扱いがしやすいのです。

レートの解析は以下のような関数を準備してみる。


require ‘rubygems’
require ‘net/http’
require ‘uri’
require ‘date’
require ‘open-uri’
require ‘nokogiri’

def analyze_currency(from_date, to_date, from_currency, to_currency, format)
doc = Nokogiri::HTML(open(“http://www.oanda.com/convert/fxhistory?date_fmt=us&date=#{to_date}&date1=#{from_date}&exch=#{from_currency}&expr=#{to_cur\
rency}&lang=en&margin_fixed=0&redirected=1&format=#{format}”))

pre=doc/:pre
pre.inner_text.each_line { |line|
line.chomp!
datestr, value = line.split(/\s*,\s*/)
month, day, year = datestr.split(/\s*\/\s*/)
date = Date.new(year.to_i, month.to_i, day.to_i)
yield date, value
}
end

これで解析結果が《日付》《レート》の並びで返却される。

こちらを以下のような関数を使って、指定した期間のレートを保存する。


def save_currency(options)
if options[:from_date].nil? ||
options[:to_date].nil? ||
options[:from_currency].nil? ||
options[:to_currency].nil? ||
options[:format].nil? ||
options[:site_info].nil?
raise ArgumentError, “argument error”
end

from_date = options[:from_date]
to_date = options[:to_date]
from_currency = options[:from_currency]
to_currency = options[:to_currency]
format = options[:format]
site_info = options[:site_info]

##### 30日区切りでデータ取得
date = from_date
while date <= to_date next_date = date + 30 if next_date > to_date
next_date = to_date
end
puts “processing #{date} – #{next_date} …”
analyze_currency(date, next_date, from_currency, to_currency, format) { |date, value|
puts “date=#{date}, currency=#{value}”
CurrencyInfo.create_or_update( :date => date,
:rate => value.to_f,
:site_info => site_info )
}
date = next_date + 1
end
end

CurrencyInfo.create_or_update()はRailsにてモデルを作成し、そこに追加したメソッドだったりする。

そうそう。
ActiveRecordを使うために、ファイル先頭に以下のような記述をしておくべきみたい。


require ‘rubygems’

gem ‘actionmailer’, ‘3.0.0.beta’
gem ‘actionpack’, ‘3.0.0.beta’
gem ‘activerecord’, ‘3.0.0.beta’
gem ‘activeresource’, ‘3.0.0.beta’
gem ‘activesupport’, ‘3.0.0.beta’

require ‘net/http’
require ‘uri’
require ‘date’
require ‘open-uri’
require ‘nokogiri’
require ‘active_record’

もしかしたら必要ないことまで書いているかもしれない。ひとまず個人用だし、余計な処理が発生することによるロスは考えないことにする。

グラフ表示については、Open Flash Chart IIのページにあるサンプルを参考にすれば良い。
しかし注意すべきことが(少なくとも1つ)あります。それは、view側のHTMLの記述にいて。Rails3.0では以下のように書かなければならない。



<%= raw(@graph) %>

上記で“raw(〜)”とあるのが注意点。これがないと、URLエンコードされてグラフは表示されない。セキュリティの観点からデフォルトでエンコードするようになったみたい。

為替レートを表示するには上記だけでは(Rails側のコードが掲載できていないこともあり)不十分かな。

ちょっと時間がないので今日はこのへんで。万が一要望があるか時間があれば掲載してみます。

しかしまあ、このグラフを見ると、アジア経済危機にドーンとバーツが暴落しているのが分かりますね。

N900のファームウェアアップデートでBTキーボードが使用可能になった

少し前の話で恐縮だけど、最新のファームウェアアップデートにより、N900ではこれまで使用できなかったBluetoothキーボードがN810同様問題なく使用できるようになりほっとしました。

更に最近“Maemo Mapper”という地図アプリで予め地図ダウンロードし、オフラインでも地図が表示できるようになりました。これもN810でできていたことと同等のレベルになり、ようやく満足できる端末になりました。

iPhoneも持っていて重宝するけれども、GPSの精度が悪いこと、実質海外ではGoogle Mapが使えないこと…厳密には通信料が半端なくなりそうなんで使いたくない…電池の減りもとても早くなるため、方向音痴の私としてはちょっとiPhoneはGPS機器としては使いたくないですね。

GPSについてはHOLUX社の“m-241”を重宝しています。単1電池くらいの大きさながら測位精度については個人的には満足いくレベル。

これで普段から持ち歩いて、ふとアイデアが思い浮かんだりメモしたくなったらポメラっぽくメモできそう…