January 09, 2008
to_xml 22:16
- Permalink
- Comments (2229)
- Trackbacks (0)
Rails
ActiveRecord#to_xmlを初めて使ったんだけど、あーこれ楽だ……。 Array#to_xmlも気が利いてるなぁ。
まあrender :xml => @records.to_xmlで済むならそれでいいんだけど、
Builderと一緒に使うにはどうしたもんかと思ったら
:builderオプションで渡してやるとよいのかーというメモ。
# xxx.rxml(まだRails 1.2.6使ってます)
xml.instruct!
xml.records :foo => 'bar' do
@records.each {|r| r.to_xml(:builder => xml, :skip_instruct => true) }
end
なるへそ。あと:skip_instruct => trueにしておかないとto_xmlのたんびにXML宣言が挿入される罠。
あ、あけおめ。今年はもうちょっとブログ更新したいですね。
Rails 1.2.6でもrake routes使えるじゃん 22:26
- Permalink
- Comments (2291)
- Trackbacks (0)
Rails
ルーティングの確認に使えるRails 2.0のrake routesがRails 1.2.6でもコピったら使えるっぽい。
% cp `gem env gempath`/gems/rails-2.0.2/lib/tasks/routes.rake lib/tasks
January 20, 2008
Date.parseでこけた 19:04
- Permalink
- Comments (2267)
- Trackbacks (0)
Ruby
ruby 1.8.5
irb(main):001:0> Date.parse('18/Jan/2008')
ArgumentError: 3 elements of civil date are necessary
from /usr/lib/ruby/1.8/date.rb:650:in `new_with_hash'
from /usr/lib/ruby/1.8/date.rb:695:in `parse'
from (irb):1
ruby 1.8.6
irb(main):001:0> Date.parse('18/Jan/2008')
=> Fri, 18 Jan 2008
おおう。さっさとバージョンあげろってことか……。
irb(main):001:0> Date.parse('18/Jan/2008')
ArgumentError: 3 elements of civil date are necessary
from /usr/lib/ruby/1.8/date.rb:650:in `new_with_hash'
from /usr/lib/ruby/1.8/date.rb:695:in `parse'
from (irb):1
irb(main):002:0> Date.parse('18/Jan/2008'.tr('/', '-'))
=> #<Date: 4908967/2,0,2299161>
あww とりあえずこれでお茶にごしとくかw
January 27, 2008
ファイルのMD5 18:53
- Permalink
- Comments (1961)
- Trackbacks (0)
Scheme, Gauche
% md5sum ~/gauche-refj.txt.gz 31970f62bbb827c8fc14ebae6a132b25 /home/yz/gauche-refj.txt.gz
これをやりたいんだ。
Rubyだと
require 'digest/md5'
puts Digest::MD5.hexdigest(File.read("/home/yz/gauche-refj.txt.gz"))
#=> "31970f62bbb827c8fc14ebae6a132b25"を表示
で済むんだけど、Rubyでぬくぬくしてるとそろそろゆとり脳って言われそうなのでひさしぶりにGaucheで頑張る。
(use rfc.md5) (use file.util) (print (digest-hexify (md5-digest-string (file->string "/home/yz/gauche-refj.txt.gz")))) ;=> "6ff4b0c6979cb79d21e355d338769d5b"を表示
なんか違う。file->stringがFile.readとは違うみたい。
rfc/md5.scmから適度にパクってこうなった。
(use rfc.md5)
(use gauche.uvector)
(define *buffer-len* (* 1024 10)) ; 10KB
(define (file->md5-digest path)
(let ((buf (make-u8vector *buffer-len*))
(md5 (make <md5>)))
(call-with-input-file path
(lambda (port)
(until (read-block! buf port) eof-object? => cnt
(digest-update! md5
(u8vector->string (if (< cnt *buffer-len*)
(uvector-alias <u8vector> buf 0 cnt)
buf))))
(digest-final! md5)))))
(print (digest-hexify (file->md5-digest "/home/yz/gauche-refj.txt.gz")))
;=> "31970f62bbb827c8fc14ebae6a132b25"を表示
なげぇw けどdigest関係の必要な関数が把握できた。ウフフ
January 29, 2008
Gaucheのロードパス 03:16
- Permalink
- Comments (2235)
- Trackbacks (0)
Gauche
環境変数GAUCHE_LOAD_PATH、goshコマンドの-Iオプション、あとは大域変数
*load-path*にset-car!でもしていじくる。
*load-path*いじるよりadd-load-pathを使うべきらしい。
add-load-path path &optional (afterp #f)
パスpathをライブラリロードパスのリストに加えます。 afterpに真の値が与えられていればpathは既存のリストの末尾に追加されます。そうでなければpathは既存のリストの先頭に追加されます。
ロードパスを変更したい場合、*load-path*を直接替えずにこのフォームを使って下さい。このフォームはコンパイル時に解釈されるのに対し、*load-path*を書き換えるコードは実行時に解釈されます。"use" や "require" はコンパイル時のロードパスを使うので、*load-path*への変更は反映されないかもしれません。
