« 2006年8月 | トップページ | 2006年10月 »

2006年9月30日 (土)

[Ruby] WIN32OLE と Enumerable


select と find が ExcelのRangeのメソッドと重なると書いたら、
[ruby-talk:217240] と返事があった。
blockがあるかないかで判断するというのは悪くないとは思う。
事実、自分もちょっと同じ事を考えたし。
でも、Enumerable#max などは blockがなくてもいいので、
blockで判断するというのは、あまりに場当たり的な気がする。



あと、selectの場合は、blockの有無でメソッドの動作が変わってしまうのも気になる。
(Enumerable#selectはcellオブジェクトの配列を返し、
Range.selectは、Rangeを選択状態にする。)



Enumerableをincludeしない。
やりたい人は自己責任で勝手にやって。


というのと



Enumerableをincludeする。
回避は自分でやってね。


とどちらがいいだろうか。



大文字のメソッドをRubyが認めるというのが前提になるのだが、
Range.selectや、Range.findを使いたい時は、
Select, Findとメソッドの最初を大文字にすれば、とりあえず回避できる。



今の気分は、Enumerableをincludeしない方が勢いをもり返しつつある感じ。
どうしようかなあ。


| | コメント (0) | トラックバック (0)

2006年9月29日 (金)

[Ruby] Win32OLE と Enumerable


WIN32OLEクラスはEnumerableをincludeした方がいいのかどうか。
問題になるとわかっているのは、ExcelのRangeのFindメソッド。



require 'win32ole'
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
book = excel.workbooks.add
sheet = book.worksheets(1)
sheet.cells(1,1).value = 1
sheet.cells(1,2).value = 2
sheet.cells(1,3).value = 3
r = sheet.cells.find(3) # ココが問題になる
puts r.address


WIN32OLEがEnumerableをincludeした場合、どうなるかは簡単に試せる。



require 'win32ole'
class WIN32OLE
include Enumerable
end
excel = WIN32OLE.new('Excel.Application')
... (skip)
r = sheet.cells.find(3) # ココでエラーになる
puts r.address


エラーを回避するためには、



r = sheet.cells.find {|cell|
cell.value == 3
}


と書く必要がある。
Rubyに毒されている人は、こっちの方がなんとなくRubyっぽくて好き
だったりするかも。



VB(A)に毒されている人は、そもそも



r = sheet.cells.Find(3)


と書くので、
WIN32OLEがEnumerableをincludeしてもさほど問題にならないのではないかと思い始めた。



という訳で、今の気分は、WIN32OLEはEnumerableをincludeする方に
ぐっと傾いているのだけど、どうだろうか。
意見求む。


| | コメント (3) | トラックバック (0)

2006年9月17日 (日)

[本] 閉館10分前に借りた本


『福家警部補の挨拶』(大倉崇裕)


| | コメント (0) | トラックバック (0)

[本] 短いのでさらっと読んですぐに返した本

『紳士同盟』(ジョン・ボーランド)

| | コメント (0) | トラックバック (0)

[本] 借りた本


『紳士同盟』(ジョン・ボーランド)


| | コメント (0) | トラックバック (0)

[本] 暇つぶしに立ち寄った書店で手にして、読もうかどうしようかとちょっと迷い、ちょっとぼーっとした寝不足気味の頭では買うべきかどうか冷静に判断できず、まあいいやと思って買ってしまった本


『アート・オブ・プロジェクトマネジメント』(Scott Berkun)


| | コメント (0) | トラックバック (0)

[本] 返した本


ブラックストーン・クロニクル(ジョン・ソール)


| | コメント (0) | トラックバック (0)

[Haskell] YAHT bracket


5.3まで読んだ。
P.64のbracketの解説のコードを見たときに
一瞬、



(\h -> hPutChar h c)


の h って何になるのかと悩んでしまう。



bracketはIOに特化した関数みたいだけど、特化しない仕組みはないのかな。



Ruby の begin ... rescue ... ensure ... end みたいなの。


| | コメント (0) | トラックバック (0)

[Haskell] YAHT case式


5.2まで読んだ。



Exercise 5.1 で何も考えずに



case name of
"John" -> ...
"Simon" -> ...
...
otherwise -> ...


と書いた。エラーにならなかった。
これって正しいんだろうか。



解答例は



case name of
"John" -> ...
"Simon" -> ...
...
_ -> ...


なんだけど。guardじゃないんだから、_を使うべきなんでしょうね。



どうも、otherwiseじゃなくてhogeとか何でもいいっぽい。うーむ。


| | コメント (0) | トラックバック (0)

2006年9月11日 (月)

[Haskell] YAHT


4.6をながめた(難しくて読めない)。
Haskellにも継続があることを知った。
Schemeの継続もわからないけど、
Haskellのもさっぱりわからない。



Exercise 4.12 の答がない。
こんな感じでいいんだろうか。



cfold' f z [] = z
cfold' f z (x:xs) = f x z (\y -> cfold' f y xs)
mymap f l = cfold' (\x t g -> f x : (g t)) [] l
myfilter f l = cfold' (\x t g ->
if (f x) then x : (g t)
else (g t)) [] l

| | コメント (0) | トラックバック (0)

[Haskell] YAHT


4.5まで読んだ。
datatypeはちょっと消化不良な感じだけど、気にせず、次に進むことにする。


| | コメント (0) | トラックバック (0)

[Ruby] make install (Ruby 1.9)


エラーが出なくなった。


| | コメント (0) | トラックバック (0)

[本]うっかり書き忘れていたが昨日のうちに読んでしまいそのまま返した本


『八月の熱い雨』(山之内正文)


| | コメント (0) | トラックバック (0)

[本] 出勤途中に図書館に立ち寄って返した本


『バッド・ニュース』(ドナルド・E・ウェストレイク)


| | コメント (0) | トラックバック (0)

[Haskell] Haskellのソースの行数をカウントするプログラム


書いてみた。かなり怪しいプログラム。
(count_src.hs)
guardのネストはできないのだろうか。
初心者が書いたので、多分、ツッコミどころ満載。
誰か添削してくれないだろうか。


| | コメント (0) | トラックバック (0)

2006年9月10日 (日)

[本]『男たちは北へ』(風間一輝)や『遥か南へ』(ロバート・R・マキャモン)みたいなロード・ノヴェルかと期待し、作品を一冊も読んだことがないけれど有名な作家スティーヴン・キングが推薦しているみたいだし、これは必読かと思ったけれど、他のミステリを優先したので、結局借りなかった本


『奇跡の自転車』(ロン・マクラーティ)


| | コメント (0) | トラックバック (0)

[本] 迷った挙げ句、一冊に絞り込めずに借りた四冊の本

  • 八月の熱い雨(山之内正文)

  • バッド・ニュース(ドナルド・E・ウェストレイク)

  • ブラックストーン・クロニクル(ジョン・ソール)

| | コメント (0) | トラックバック (0)

[本] 返した本


『紙魚家崩壊』(北村薫)


| | コメント (0) | トラックバック (0)

[Haskell] YAHT


4.5.3まで読んだ。
listLength を実際に動作させるには、Consを定義しなくてはならないと思うんだけど
どうしたらいいのだろうか。


| | コメント (0) | トラックバック (0)

[Ruby] make install (Ruby 1.9)


make install でエラーになる。



can't convert Array into String


installが失敗するのはさておき、Rubyの仕様に変化があったのかどうかが気になる。
今まで、StringだったものがArrayになったのだろうか。
それとも、StringとArrayの間で挙動が変わったのだろうか。


| | コメント (0) | トラックバック (0)

[Ruby] nil.to_s


nil.to_sが "" になることに落ち着いた。
手元で唯一影響を受けていたスクリプト(CGIプログラム)が元通りの動作になったことを確認した。


| | コメント (0) | トラックバック (0)

2006年9月 9日 (土)

[本] 午後、借りた本


『紙魚家崩壊』(北村薫)


| | コメント (0) | トラックバック (0)

[本] 午後、返した本


『世紀末大バザール 六月の雪』(日向旦)


| | コメント (0) | トラックバック (0)

[本] 午前中に返した本


『猫丸先輩の空論』(倉知淳)


| | コメント (0) | トラックバック (0)

[Haskell] YAHT


4.5.2 まで読んだ。
datatypeもEitherもさっぱりわからない。


| | コメント (0) | トラックバック (0)

2006年9月 8日 (金)

[本] ベタな展開が抜群に面白かった『図書館戦争』の続編だと知ってこれは読まねばと思ったんだけど、Amazonでの評価が低くて、しかも一話完結じゃなくてシリーズ化されるみたいなので、続けて読むのはしんどいから、読むのやめようかどうしようか迷っている本


『図書館内乱』(有川浩)


| | コメント (0) | トラックバック (0)

[本] 借りた本


『世紀末大バザール 六月の雪』(日向旦)


| | コメント (0) | トラックバック (0)

[本] 一気読みして返した本


『クリスマス・プレゼント』(ジェフリー・ディ一ヴァ一)


| | コメント (0) | トラックバック (0)

2006年9月 7日 (木)

[本] 下巻しか見つけられなかったので、借りなかった本


『ブラックストーン・クロニクル』(ジョン・ソール)


| | コメント (0) | トラックバック (0)

[本] いろいろとあって微妙だなあと思いつつも、短編だから、まあいいかと思って一度に借りた2冊の本

  • 『クリスマス・プレゼント』(ジェフリー・ディーヴァー)

  • 『猫丸先輩の空論』(倉知淳)

| | コメント (0) | トラックバック (0)

[本] 読み終わったので、さっさと返した本


『死のバースディ』(ラング・ルイス)


| | コメント (0) | トラックバック (0)

2006年9月 6日 (水)

[Ruby] Win32OLEでのハッシュキーのSymbol


Win32OLEで名前付き引数の代用にハッシュを使用する。
Ruby1.9ではハッシュのキーには文字列だけでなくSymbolも使えるようにした。
これは、私がRailsの影響を受けたせいであるが、実はもう一つ理由がある。



それは、PerlのOLEである。
Perlでは、ハッシュを



%hash = (key => "value");


と書ける。Perlでは、ハッシュキーの文字列の「"」を省略できる。



ずい分前に、



PerlのOLEと比べてRubyのWin32OLEを使うときの不満は、
ハッシュキーの文字列の「"」を省略できないことだ。


と、言われたことがある。



これについては、あきらめてもらうしかないとずっと思っていた。
ところが、Railsを見たときに、なるほど、Symbolを使う手があったかと感心した。
早速、Win32OLEにも取り込むことにした。
長年の不満を少しだけ解消できたと思う。
実際、「"」で囲むよりも「:」で始めるSymbolの方が入力の負担が見た目以上に違うので、
取り込むだけの価値はあると思ったのだった。


| | コメント (0) | トラックバック (0)

[本] 発注中


Webで確認したら図書館でリクエストした本が発注中になっていた。
が、タイトル欄は、私が書いた本のタイトルの先頭4文字しか入ってなかった。
本当にリクエストした本が読めるのかどうかちょっと心配。


| | コメント (0) | トラックバック (0)

2006年9月 4日 (月)

[Haskell] YAHT


4.5.1まで読んだ。
もろもろの都合により、ペースが落ちそうな予感。


| | コメント (0) | トラックバック (0)

[Ruby] Win32OLE of Ruby 1.9 (3)


method_missingのバグを修正してもらった。
Win32OLEのテストも通るようになった。
ということで、Ruby 1.9.0 (2006-09-04) なら大丈夫です。


| | コメント (0) | トラックバック (0)

[Haskell] listの要素を出力する


listの要素のそれぞれになんか関数を適用した結果のlistを返すには、mapを使います。



ary = [1, 2, 3]
func1 x = 2 * x
map func1 ary -- -> [2, 4, 6]


では、一般に、listの要素を順番に出力したい場合はどうすれば良いのでしょうか。
例えば、



output x = putStr (show x ++ "\n")


がある場合に、listの一つ一つの要素に outputを適用させたい場合です。
発想を変えて、出力したい最終形の文字列を生成してからputStrを使う次の形式



outputstr x = show x
putStr $ unlines $ map outputstr ary


にするか再帰を使うしかないのでしょうか。


| | コメント (0) | トラックバック (0)

[本] いろんな意味で微妙かもと思いながら借りた本


死のバースディ(ラング・ルイス)


| | コメント (0) | トラックバック (0)

2006年9月 3日 (日)

[Title] 「いつ出すんじゃ」の由来


Ruby 1.8.5 は、つい最近リリースされました。
2.0がいつになるかは知りません。



元ネタは『逸脱者』(グレッグ・ルッカ)。



スピーディーな展開で読ませる冒険サスペンス。


| | コメント (0) | トラックバック (0)

[本] 結局、一気読みして返却した本


骸の爪(道尾秀介)


| | コメント (0) | トラックバック (0)

[Ruby] Win32OLE of Ruby 1.9 (2)


method_missing の動きがおかしい気がするので、
ruby-devで質問することにした。
method_missingに依存しているWin32OLEは壊滅状態。


| | コメント (0) | トラックバック (0)

[Ruby] Win32OLE of Ruby 1.9


Ruby 1.9.0 (2006-09-03)のWin32OLEでは、次のスクリプトを実行するとエラーになります。



require 'win32ole'
ie = WIN32OLE.new('InternetExplorer.Application')
begin
ie.visible = true
ensure
ie.quit
end


エラーメッセージは



> ruby19 -v ie.rb
ruby 1.9.0 (2006-09-03) [i386-cygwin]
ie.rb:4:in `method_missing': false is not a symbol (TypeError)
from x.rb:4


です。Mingw32版も同じだったので、多分、mswin32版でも同じでしょう。


| | コメント (0) | トラックバック (0)

[Haskell] コメント


Haskellのコメントの



{- ... -}


は、入れ子にできる。ふと、Cと同じような動きをするかと思って



{-
Is this comment?
{-
-}


と、



{-
-}
Is this comment?
-}


を試してみた。
両方とも、エラーになったけど、メッセージが違った。


| | コメント (0) | トラックバック (0)

[Ruby] Rails でのアプリケーションロジック


Railsは、Model(models), View(views), Controller(controllers) の
MVCモデルを採用している。
ふと疑問に思ったのだが、アプリケーションロジックは、
どこに実装するんだろうか。
手元に本がないので、確認できないのだが、
RailsによるアジャイルWebアプリケーション開発では、
アプリケーションロジックをControllerに実装していくように書いてあった気がする。


| | コメント (0) | トラックバック (0)

2006年9月 2日 (土)

[Haskell] head の 型(YAHT)

4.4まで読んだ。

headの型は

head :: [a] -> a

なので、

head . head

の型は、タイプエラーになるかと思ったら、

head . head :: [[a]] -> a

だった。 なるほど。

(head . head) ["abcde"]

の結果は 'a' である。

| | コメント (0) | トラックバック (0)

[本] いろんな意味で微妙だなと思いながら借りた本

骸の爪(道尾秀介)

| | コメント (0) | トラックバック (0)

[Ruby] 非公式情報


Ruby 1.9.1の開発予定話
SymbolはStringのサブクラスになって、HashのキーがSymbolでもStringでもOK
になるかもみたいな話が。



つい最近、Railsに影響されて、Ruby1.9 の Win32OLEで引数のHashのキーに
Symbolを使えるようにした私の努力は無駄だったのでしょうか。


| | コメント (0) | トラックバック (0)

« 2006年8月 | トップページ | 2006年10月 »