タグ

ブックマーク / tociyuki.hatenablog.jp (6)

  • Test::Unit に Test::Tap を被せてみました - Tociyuki::Diary

    Ruby の添付ライブラリ test/unit は、Java のテスト・フレームワークを範にしているようで、煩雑で軽やかさがないのが難点です。なぜ、Perl のテスト・フレームワークに倣わなかったのか、Ruby の不思議の一つだと思っています。id:dankogai さんが不満を述べるのも、わかる気がします。 ⇒ 404 Blog Not Found:Ruby beyond Rails - 書評 - まるごとRuby! RubyPerlに比べて、余計なところでTMTOWTDIを発揮しているように思えてならない。それを一番強く感じるのがテストのフレームワークで、なんであんなに種類があるのかわからない。TAPでほぼ統一されているPerlの連帯感からすると、テスト一個のためにクラスを書かせるなんて、間違った傲慢(false form of hubris)にしか感じられないのだが。 もっとも、賢

    Test::Unit に Test::Tap を被せてみました - Tociyuki::Diary
  • Web::Scraper を使う(続) - Tociyuki::Diary

    昨日は、デイリーポータルZアーカイブリストのページからエントリを抽出するときに XPath を使いました。ですが、../../p の部分がダサイので、CSS セレクタを使う方法を考えてみました。 変更箇所は $entries の定義部分だけです。 my $entries = scraper { use utf8; #process q{//td/p/font[text() =~ /べつやく/]/../../p}, # 'entries[]' => $entry; process 'td>p', 'entries[]' => sub { my $h = $entry->scrape($_); ($h->{author} ||= '') =~ /べつやく/ ? $h : (); }; result 'entries'; }; コメントアウトした XPath 版 process では、テキスト

    Web::Scraper を使う(続) - Tociyuki::Diary
  • Web::Scraper で XPath と CSS セレクタを混ぜて使う例 - Tociyuki::Diary

    Web::Scraper はいたれりつくせりの仕掛けが仕込んであって、便利ですね。私が、割と良く使っている機能は以下 2 つです。 process の第一引数に、CSS セレクタだけでなく、XPath も指定できます。ただし、XPath を指定するときは先頭を必ずスラッシュ(/)で始めなければいけません。 process の第二引数以降の、値をどこから取得するかを指定する部分に、コード・リファレンスを置くこともできます。これを使うと、DOM ツリー中の値を加工して抽出することができます。 具体例として、デイリーポータルZアーカイブ一覧の中からべつやくれいさんのエントリを抽出してみることにします。まず、アーカイブ・ページのエントリ部分を取り出してやると、こうなっています。 <TD width="580" valign="top" class="tx12px"> <P> <B><FONT c

    Web::Scraper で XPath と CSS セレクタを混ぜて使う例 - Tociyuki::Diary
  • テスト駆動で 0 から 255 の数字にマッチする正規表現へ変形してみる - Tociyuki::Diary

    ぶくま経由で、RFC 3986 URI の日語訳にたどり着き、読んでいました。スムーズな日語ですんなりと読めて、良い訳だと思いました。私は誤訳を見つけられませんでした。 それはともかく、読んでいる最中に、RFC3986 だけではないのですが、IPv4 アドレスの数字にマッチする構文が、正規表現向けでないのに改めて気になりました。RFC の記述をそのまま正規表現にすると、バックトラックをおこす書き方になっています。 バックトラックがおきないようにするには、先頭から1文字ずつ見ていくだけで残りの選択肢のどれに進めばいいか決定できるようにすればよろしい。ということで、これをテスト駆動で正規表現に向いた記述に変更してみました。 ⇒ http://www.studyinghttp.net/cgi-bin/rfc.cgi?3986#Sec3.2.2 IPv4address = dec-octet

    テスト駆動で 0 から 255 の数字にマッチする正規表現へ変形してみる - Tociyuki::Diary
  • Tociyuki::Diary - perlでのクロージャの3パターン

    id:naoya さんが Perl のクロージャの使い道を考えておられるようです。便上して、私が良く使う、3つのパターンを紹介してみます。なお、単なるコード・リファレンスとしての使い方は除外して付随するコンテキストが意味をもつクロージャの場合に限ります。 (2006年2月14日修正 use Fcntl のパラメータに :DEFAULT が抜けていたので追加しました。) コールバック・パターン イテレータにクロージャを渡して、イテレータの中から繰り返し呼び出してもらってコンテキストに副作用を及ぼす使い方です。クロージャの使い方の中でも最も自然に使えるものだと思います。以下、Ruby のブロック呼び出しっぽくコード・リファレンスを $yield パラメータに渡すことにします。へそ曲がりに BBS の CGI コード用に flock による排他ロックを例にしてみます。 package Mutex

    Tociyuki::Diary - perlでのクロージャの3パターン
  • JSON::Hatchet 0.001 JSONパーサ - Tociyuki::Diary

    個人的趣味で JSON のパーサとシリアライザを書いてみました。 例によって、予測型構文解析表による非再帰版です。1 パッケージに、serialize と deserialize をまとめています。もっと短くなることを期待したのですが、243 行 orz (27日) http://d.hatena.ne.jp/tociyuki/20060427/1146144711 0.02 へアップデートしました。 ⇒ https://tociyuki.sakura.ne.jp/archive/JSON-Hatchet-0.001.tar.gz ⇒ https://tociyuki.sakura.ne.jp/archive/JSON-Hatchet-0.001.pm (ソース) Perl ライセンスです。なお、同様の機能のモジュール JSON が既にありますので、CPAN にこの JSON::Hatch

    JSON::Hatchet 0.001 JSONパーサ - Tociyuki::Diary
  • 1