ruby で Access MDB 更新件数取得

ruby でwin32ole を使った Access MDB のデータベース操作で
update文の更新件数を取得するのに手間取ったので
やり方のメモ

Mimori's Algorithms Press | kamiyn の技術メモです
なんかでとりあえずrecordsAffectedという引数が
ありそうなことは分かったんだけど、
rubyは参照渡しのはずなのに変数の中身が変化しない

結局、
http://homepage1.nifty.com/markey/ruby/win32ole/win32ole_qa_ja.html
を見たら、出力用の引数はWIN32OLE.ARGV を使う仕様らしいので、
結局書いたのは以下の様なコード(抜粋)

module DBConnection
  attr_reader :recordsAffected
end

cn = WIN32OLE.new("ADODB.Connection")
...
cn.extend DBConnection

def cn.doQuery sql
...
affected = 0
rs = self.Execute(sql, affected)
@recordsAffected = affected
...

ジンバブエ・ドルが年率

朝日新聞ジンバブエ・ドルが「ある月に年率換算で2億%のインフレ」という記述を読んだ。
http://www.asahi.com/international/update/1230/TKY200812300156.html

が、もし、1ヶ月で3.1倍になったら2ヶ月で10倍、12ヶ月で1000000倍(1億%)なので、
その月だけを見ると4倍くらい(それでもすごいけれど)にしかなっていないのに年率換算だと2億%になってしまうのではないだろうか。これは誇張表現だと思う。
それとも7月だけで2億%/12のインフレだったのだろうか。もし、そうなら、年2億%というのは少ないと思う。
朝日新聞は年率換算だけでなく、その月に実際どれだけインフレしたのかを書くべきだと思う。

もし、年率だけを使ったら、1日で株価が5%下がった日は1年が200日として、単純な掛け算で年率1000%(株価マイナス)、指数計算で99.99%の下落率ということになってしまう。

特にこういう異常な状態で年率だけを使うのは数のマジックとしては面白いがミスリーディングではないだろうか。同じ様な異常な状態が1年続くわけはないのだから。特に株価や為替は将来の価値を予測して変動することになっているので、1年同じ状態が続くという仮定はおかしい。

カワハギの肝和え

魚の刺身の中で一番美味しいのはカワハギの肝和えらしいということで、
http://plaza.rakuten.co.jp/hazedonblog/2001
とか
http://tops3235.hp.infoseek.co.jp/gekiuma-kimoae.htm
とかを参考に作成。


鯛とかの皮を剥くのは大変だけど、カワハギは手で面白いように剥けた。薄皮は最初に取ろうとすると大変だけど、身を細かくする際にどうせ包丁で切れずに下に残るのであまり問題にならなかった。
調理バサミも適宜使用、味付けは「めんつゆ」。たしかに美味しかったと思う。

RubyでACCESS MDBアクセス

http://jp.rubyist.net/magazine/?0005-Win32OLE
を参考にして、RubyからMDBの操作を試した。

その際、気づいたのだが、上のページのeach_recordの最初のif節が何かおかしいと思う。
self.MoveFirstより後にやるならまだしも、each_recordが現在参照中のレコード位置に依存する結果になってしまう。
(each_recordを二回続けて呼び出した際の動作が恐らく期待通りでない)
が、何もないと、レコードが無い時とかINSERT文の後とかにエラーになるみたいなので、EOF or BOF でなく EOF and BOFとしたら良いかもしれない。


でも、Rubyの特異メソッドは面白いな、と思う。
それを使って、startADOを次のようにすると使いやすいと思う。

def startADO filename 
  cn = WIN32OLE.new("ADODB.Connection")
  connstr = "DRIVER={Microsoft Access Driver (*.mdb)};Dbq=#{filename}"
  cn.Open connstr
  def cn.doQuery sql
    rs = self.Execute sql
    rs.extend Recordset
    return rs
  end
  begin 
    yield cn
  ensure
    cn.Close
  end
end

Gmailのエラー

なぜか今日はGmailのPOPアクセス(recentの方を使っている)で
「Proxying required, but not implemented」
というエラーメッセージが出た。

しばらくしたら直ったけれど。

http://groups.google.co.jp/group/Gmail-Help-POP-and-IMAP-en/browse_thread/thread/8c8283a3edd1f001/1c60013af7b326bd?lnk=raot#1c60013af7b326bd

にも議論があるが、
今(2008/10/29)の所、原因も解決法も良く分からない、ということだろうか。

ローストビーフ

ローストビーフが上手に出来たので、記録。

手順は

  1. 牛モモ肉(100グラム128円の時に買うことにしている)のかたまりを買う、ポリ袋を1枚余分にもらっておく
  2. 肉に塩・こしょうを強めにふる
  3. 常温に2時間くらい放っておく
  4. オリーブオイルかサラダ油の強火で全面を焼く、表面の色が変われば十分
  5. 火を止めフライパンにフタをして2時間くらい放っておく
  6. ポリ袋に肉、フライパンに残った汁、しょうゆ(または昆布ぽん酢)をいれ冷蔵庫で数時間
  7. 完成、冷たい状態で薄く切り、袋に入った汁をかける

という感じ



DS ファイナルファンタジー4 10ゲーム

スクウェアエニックスのメンバーサイト(http://member.square-enix.com/jp/)
にあった、ファイナルファンタジーのリディアの10ゲームが難しかったので、
計算プログラムを作成した。

http://aofg.web.fc2.com/rydia_10game/

DS版 FF4のミニゲームの方は何も無くても9999点を取れるんだけど、
ウェブのは操作性が悪いと思う。

# 演算子選択にドラッグが必要な意味が分からない。