読者です 読者をやめる 読者になる 読者になる

第16回Rails勉強会

http://wiki.fdiary.net/rails/?RailsMeetingTokyo-0016時間をおくと先月のように書かなくなってしまいそうなのでとりあえず書く。今回はやや人が少なめだった。 RSpecについて RSpecを使うとTest/Unitを使うことよりどんなことがうれしいかということの再確…

Kernel#autoload

Rackのソースを漁っていて見つけた。最初に定数を参照した際にロードするようにできるらしい。ファイル名とクラス名は一致させるのであればGem名.rbですべてのクラスをロードするようにすればいらないような気もしますが。*1autoloadをConvensionでラップす…

Ruby版WSGI: Rack

http://rack.rubyforge.org/まだ触ってないですが,これは良さそう。

PathObserverをGemった。

Webサーバーはサブドメインを勝手に割り当ててあるだけでサイトを自由におけるわけじゃないし、今レンタルしてるサーバーもないのでここに書いた。rubyforgeコマンドの使い方が分からない。

PathObserver 0.0.1 released

PathObserver helps you writing program observing for some files or directories easily. SYNOPSYS # observing '*.txt' files require 'rubygems' require 'path_observer' observe_manager = PathObserver::ObserveManager.new('*.txt') do |path, resu…

Kernel#[]

定義はできるけど,Object#__send__使わないと配列のリテラルと判断されて実行できないようです。 def [](val) "hello world" end #=> nil [1] #=> [1] [](1) SyntaxError: compile error (irb):11: parse error, unexpected '(', expecting $ [](1) ^ from …

ファイルの監視3

http://d.hatena.ne.jp/walf443/20070302/1172849934 の続き分かった。Pathnameを使えばもっと幅の広い監視ができそう。おまけに名前も困らない。(とおもったら一文字足りない。pathname-observer) Pathname#entriesを使って新しいファイルが追加されたらと…

ファイルを監視するやつ ー 続き

http://d.hatena.ne.jp/walf443/20070301/1172762706 の続き。ファイルを監視するスクリプトを手軽に書きたいときに良いかなと思ってGem化しようと思ってRubyForgeに登録しようと思ったけど,既にほとんど同じようなやつがあった。Gem化されてないのが残念。…

ファイルを監視するやつ

http://subtech.g.hatena.ne.jp/secondlife/20070228/1172625779もう素晴らしい回答が出てきてるような気もしますがとりあえず勉強がてらやってみました。Observable初めて使った。 # lib/file/stat/observable.rb require 'observer' require 'thread' $LOA…

inject

http://d.hatena.ne.jp/nazoking/20070217#1171687914 [1,2,3,4,5].inject({}){|hash,item| hash.merge!({item => item}) } #=> {5=>5, 1=>1, 2=>2, 3=>3, 4=>4} [1,2,3,4,5].inject({}){|hash,item| hash[item] = item; hash } #=> {5=>5, 1=>1, 2=>2, 3=>3…

海外で入れてるgemを曝すのが流行ってるらしいですよ

http://smartic.us/2007/2/11/show-us-your-gems http://www.robbyonrails.com/articles/2007/02/12/gems-gone-wild http://www.clarkware.com/cgi/blosxom/2007/02/10#GemSurvey http://www.chadfowler.com/2007/2/11/show-us-your-gemsってそんなに多くは…

Cerberus

http://cerberus.rubyforge.org/index.htmlsvnとかで管理されてるプロジェクトのソースコードを取ってきて,ビルドやテストなどを実行し,エラーがあるとメールだとかRSSだとかにして発信できるツールのようです。設定ファイルがYAMLなところとかPlaggerを思…

はてなブックマークをバックアップ

クローラーを書いてたら年末に今年一年のブックマークの分析をしようとして書いていたやつを思い出した。 require 'rubygems' require 'feed_tools' require 'pp' $KCODE = 'u' hatena_b_feed_uri = "http://b.hatena.ne.jp/walf443/atomfeed?date=20060101"…

WWW::Mechanizeで青空文庫の一覧を得る

[Ruby] 青空文庫の作品一覧のhtmlファイルを配列として得る http://rubyist.g.hatena.ne.jp/muscovyduck/20070205/p1をWWW::Mechanizeを使ってやりました。 require 'rubygems' require 'mechanize' $KCODE = 'utf-8' agent = WWW::Mechanize.new page = age…

CGI.unescapeの挙動

nazonoDiary - [Ruby]Hpricot からテキストを取り出す http://d.hatena.ne.jp/nazoking/20070202/1170428250をやってみて気づいた。ruby 1.8.5 (2006-08-25) [i686-darwin8.7.1]にて。 CGI.unescapeHTML('& &') #=> "& &" もちろん&単体が入っている…

それHpricot(ry

あまりしっかり読んでなくてスルーしていたのですが,http://wota.jp/ac/?date=20070115#p01で使われているような特定のページにCSSセレクタをかけるようなケースならまさにHpricotが適任だと思います。ScrAPIの良いところはむしろ簡単にParser用のクラスを…

Hpricot 0.5

http://redhanded.hobix.com/inspect/andNowHpricot05IsYours.htmlCSSセレクタもさらに色々対応するようになったらしいです。http://code.whytheluckystiff.net/hpricot/wiki/HpricotChallengeに大きな変更点がまとまってるようです。 さっきインストールし…

HTMLページをRSSに変換するのに便利なFeedalizer

http://termos.vemod.net/feedalizerAPIはScrApiと結構似ている感じです。内部的にはHpricotを使っていてコードはファイル一つでそれほど行数もないのですぐ読めます。Feedを作成する部分は標準添付のrss/makerを使ってるようです。RubyでPlagger::CustomFee…

クリスマスパーティーのプレゼント交換プログラムのテストを書く

クリスマスパーティーでプレゼント交換を行う。 全員、誰かにプレゼントを一つあげ、誰かからプレゼントを一つもらう。 参加者は、自分と同じグループに属している人にはプレゼントをあげない。 どのグループにも属さない人や、複数のグループに属する人はい…

Ruby忘年会

Rails勉強会の後はRuby忘年会に参加。 一次会 50名参加ということで1テーブルあたり約10人とやや狭かった。自分たちのテーブルは一番奥ということもあってかやや広めだった。一次会は自分のテーブルはささださんとコーディングスタイルの話で少し盛り上…

Rails勉強会@東京第13回

忘年会で最近更新があまりないと言われてしまったのでちゃんとログぐらいは書くことにします。Rails勉強会@東京第13回に参加してきました。 AWDwR 2ndを読む 前半はかわむらさんのAgile Web Development with Rails 2nd Editionをみんなで読みながら具体的…

日本語のYAML#dump

ちょっと前まで1.8.2を使っていたので気づかなかったのですが、1.8.5だと日本語をYAML#dumpするとUTF8でもbinaliy扱いされてしまうのですね…。うーん。これはあまりうれしくない…。

RubyForgeにsvkが使えない?

Rubyforgeのリポジトリをsvkに入れるとNetwork closed unexpectedlyとなってsvk pullができないことが多いのは自分だけでしょうか。

ネストしたクラスの他のクラスへの参照の仕方について

もち ー [Ruby]内部クラスと外部クラスの解 http://d.hatena.ne.jp/omochist/20061102/1162475536 より で,ふと思ったのですがHoge.class_eval %{ … }じゃなくて,わざわざ Hoge.class_eval %{ … } って書いているのは,id:walf443さんの美学だったりするの…

Rote::Format::HTML#link_relを勝手にかけてくれるRote::Filters::AutoLinkRel

昨日に引き続き、roteを使ってみて不便だったところを拡張してみました。標準ではRote::Format::HTML#link_rel(or relative)というメソッドをつかうとROOTからの相対パスにして返してくれるというメソッドがあるのですが、ほとんどのURIを記述する場面でこれ…

内部クラスから外部クラスのクラス変数を参照する

もち - 内部クラスと外部クラス http://d.hatena.ne.jp/omochist/20061101/1162393034 より。class_eval使って::Hogeクラスのコンテキストにしてやれば参照することができます。元のサイトではインスタンス変数を使っていましたがやりたいこと的にはクラス変…

静的Webサイト生成に便利なrote

Rubygemsのroteが静的Webサイトの生成に便利です。まだまだ機能は少ないのですが、Railsのレイアウト機能を取ってきた感じなのでRailsやってる人は何となく使い方を把握するのは早いと思います。`rote create PROJECT_NAME`を実行すると、gem/rote-xxx/lib/r…

iTunesのプレイリストの再生順トップ5を表示するスクリプト

RubyOSAのgemができたようなので試してみた。 #!/usr/bin/env ruby require 'rubygems' require 'rbosa' require 'kconv' $KCODE = 'u' itunes = OSA.app 'iTunes' current_playlist_tracks = itunes.current_playlist.tracks current_playlist_tracks\ .sor…

Kernel#new

Javaとかやった後にRubyを触ってうっかりnewを先にタイプしてしまうときに… module Kernel def new(const, *args, &block) const.__send__ :new, *args, &block end end arr = new Array #=> [] arr = new Array, 3 #=> [nil, nil, nil] arr = new(Array, 3)…

gettext-scaffoldのパッチ

初期状態ではshow、confirm_create、confirm_update、confirm_deleteのページのカラムがローカル化するようにされてないのでそれをローカル化するパッチを書きました。(もしかするとローカル化するようにされていないのは何か罠があるからかもしれませんが…

正規表現にURLを書く際の.の扱い

URLの正規表現を使う際に.を毎回エスケープするのはめんどくさそうだなと思ってふと思いついたのが、 %r{#{"http://\w+.g.hatena.ne.jp".gsub('.', '\.')}とか。もちろん正規表現の.は使えなくなるし普通にやるより遅いはず。正規表現の.もちゃんと使えるよ…

irbでオブジェクトの中身を表示しない

irbは非常に便利なのですが、Hpricotなどをirbで使っていた際にHpricotのオブジェクトをinspectした結果は非常に長いため、オブジェクトを返したくない場合もあります。そんなときは、次のように出来ます。 doc = Hpricot(open('http://b.hatena.ne.jp/')); …

Module::Require

Rubygemsのライブラリのソースを眺めていると、 $:.unshift(File.dirname(__FILE__)) require "hoge"とか require File.dirname(__FILE__) + "hoge"とか書かれてたりするけど、見た目がなぁ…ということで、こんなの書いてみた。 walf443@colinux:module_requ…

rdefsをRails仕様に拡張してみる

最近はRubygemsのRSSを眺めて面白そうだなと思ったらインストールして軽く使い方とソースを眺めるというのがマイブームだったりするのですが、ソースを眺めるときに青木さんのrdefsは便利だなぁと思いました。ただRailsとかだとcattr_readerとか色々拡張され…

Rails Chatがいつの間にか進化してる

しばらくRails Chatに行ってなかったんだけど久々に行ってみたらめちゃくちゃ進化してる。コードの貼り付け機能がとてもナイスです。最近IRC使うようになったんでIRCの方が都合が良かったりもするのだけど、このコード貼り付け機能はIRCではうまくいかないん…

Debianのrubyだとmkmfとか標準で入ってないらしい

Hpricotを試してみようと思ってインストールしていたらmkmfがないと言われた。ruby1.8-devパッケージをインストールして解決できました。Cの拡張ライブラリを入れる際にはmkmfがないとインストールできないので注意されたし。

"_”続き

ということでやってみた。 class Object def _(i) end end #=> nil hoge._ 3 #=> nil何かに見えないこともないけど、今のところ良さそうな例はない。 うーん。やっぱり非推奨っぽい。なんか使えそうな例があればコメント&TBを。

暗黙の変数$_とブロックパラメータ

ラクダ本を読んでいてPerlの$_はややこしいといえばややこしいのでRubyではあまり推奨されるべきではないなとは思うのだけど、Rubyの高階関数を使うときに引数が一つの場合はせっかくあるのなら$_を使うことも出来たらよかったのにと思ってしまう。 # 例: […

変数_

基本的にはあまり推奨はされないのだろうけど"_"っていう変数名もそういえば使えるなと思った。RubyをDSLっぽく使う際に何か使いどころがあるかもしれない。

コメント行でUnitテストが出来るようにするスクリプト

http://d.hatena.ne.jp/walf443/20060710/1152551319 のアイディアを部分的に実装してみた。一時ファイルに出力して云々とかはしてないのでまだちゃんとした体裁にはなっていないのですが。今のところの問題は クラスが一つしか認識できないこと setup()メソ…

初めてのプログラミング

http://www.oreilly.co.jp/books/4873112923/より。オライリーより、プログラミング入門の本が出るらしい。なんと言語はRubyらしい。唯一つ惜しむらくは、irbが15章でようやく登場するところ。確かにirbは初心者には混乱も与えかねないものであるとは思うけ…

Ruby Testing on Kikaineko

http://d.hatena.ne.jp/kikaineko/20060524#p1 より。 what is "Ruby Testing on Kikaineko"?(略してrubytok)Rubyのコメント部分からコードを抜き出し、テストとして実行するツールです。pythonのDocTestをご存知であれば、あれを想像してください。rubyto…

tail

tailを書くのが流行ってるみたいなのでやってみた。 main = do cs <- getContents putStr $ lastNlines 10 cs lastNlines :: Int -> String -> String lastNlines n cs = unlines $ takeLast n $ lines cs takeLast :: Int -> [String] -> [String] takeLast…

mapにも引数あっても良いんじゃないだろうか

String#eachのように引数をとれるeachのときにわざわざenum_for使うのもめんどくさいので、mapが引数取れてもいいんじゃないかと思えるのは自分だけだろうか。*1 module Enumerable def map(*args, &block) arr = [] each(*args) do |i| arr.push(block.call…

第7回Rails勉強会@東京

第7回Rails勉強会@東京へ行ってきました。第2回以来の久々の参加でした。何人か顔を覚えてくださっていた方もいらっしゃって前回よりも緊張せずに済みました。 パフォーマンスに関してのページを読む。 セッションの提案が滞っていたので一応他の人の意見を…

svn (copy|move) で複数のファイルを一度に実行する

svn mvやろうとおもったらなんかワイルドカードを認識してくれないっぽいということでワンライナーを初めて書いた。 $ruby -e "Dir.glob('*').each {|i| system(%|svn mv #{i} ../|) }"

段落ごとに処理を行なう

http://d.hatena.ne.jp/lurker/20060616/1150464251より。String#eachの引数に""を指定すると段落ごとに処理できるようです。知らなかった…。 "aiueo\naiueo\naiueo\naiueo\n\naiueo\naiueo\n\naiueo".each("") {|i| puts "<p>#{i.chomp.chomp}</p>\n" }実行結果: <p>a</p>…

文字列をマルチバイト文字を意識せずに扱えるようなラッパークラス

まだ作業途中のネタなのだけど、Rubyレシピブックを見てみるとマルチバイト文字列の処理にはいろいろとバッドノウハウを覚えないといけないくさいのでStringクラスのインスタンスをMultibyteStringクラスに変換することでマルチバイト文字を意識せず扱えるク…

puts array

arr = [1, 2, 3] #=> [1, 2, 3] puts arr 1 2 3 #=> nil配列って普通にputsするだけで各要素を表示してくれるのですね。こんな初歩的なことなのに知らなかった…orz今までずっと表示するためだけに [1, 2, 3].each {|i| puts i }とかやってた自分がバカらしく…

自動的にEnumerableのメソッドとeach_*をくっつけてみる

1.9からは組み込みとなるenumratorは便利ですが、あんまり見た目はすっきりしないのでこんなの書いてみました。 require 'enumrator' module Enumerable def method_missing(meth_sym, *args, &block) tmp = meth_sym.to_s.split("_") after_meth = tmp.shif…