正しいISBN10に対してISBN_Tools.is_valid_isbn10?がfalseになる。

あとで調べる。1.9のせいかな。

C:\Temp>ruby -v
ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

C:\Temp>irb
irb(main):001:0> require 'isbn/tools'
=> true
irb(main):002:0> isbn13 = '9784062748698'        # ノルウェイの森 下 (講談社文庫)
=> "9784062748698"
irb(main):003:0> ISBN_Tools.is_valid_isbn13? '9784062748698'
=> true
irb(main):004:0> isbn10 = ISBN_Tools.isbn13_to_isbn10 isbn13
=> "406274869X"
irb(main):005:0> ISBN_Tools.is_valid_isbn10? isbn10
=> false
irb(main):006:0>

2011/12/13 追記
やはり、1.9のせいでした。とりあえず以下で、isbn[ndx]!= 'X'とかにすれば動く。

def ISBN_Tools.is_valid_isbn10?(isbn_)
  isbn = cleanup(isbn_)
  return false if isbn.nil? or isbn.match(/^[0-9]{9}[0-9X]$/).nil?
  sum = 0;
  0.upto(9) { |ndx| sum += (isbn[ndx]!= 88 ? isbn[ndx].chr.to_i : 10) * (10-ndx) } # 88 is ascii of X
  sum % 11 == 0
end

吉沢明歩かわいい

吉沢明歩動画リンク集があったので、スクリプト書いて大量に動画を頂きました。それだけ。
http://fc23.blog63.fc2.com/blog-entry-813.html

#!/usr/bin/perl
use strict;
use warnings;

use File::Basename;
use LWP::UserAgent;
use Perl6::Say;
use URI;
use Web::Scraper;

my $ua_pornhost = LWP::UserAgent->new( keepalive => 1 );
my $ua_sony = LWP::UserAgent->new( keepalive => 1 );

my $scraper_list = scraper {
    process '//a[contains(@href,"http://www.pornhost.com")]', 'urls[]' => sub {
        my $uri_pornhost_html = $_->{href};
        say $uri_pornhost_html;

        my $uri_sony = 'http://www.sonyyoutube.com/?v=' . $uri_pornhost_html;
        say '-> ' . $uri_sony;

        my $scraper_sony = scraper {
            process 'id("m")/a', url => '@href';
        };
        $scraper_sony->user_agent($ua_sony);
        my $result = $scraper_sony->scrape(URI->new($uri_sony));
        my $uri_pornhost_wmv = $result->{url};
        say '-> ' . $uri_pornhost_wmv;

        my $file = basename($uri_pornhost_wmv);
        $ua_pornhost->get($uri_pornhost_wmv, ':content_file' => $file);
        $file;
    };
};

my $uri_list = 'http://fc23.blog63.fc2.com/blog-entry-813.html';
$scraper_list->scrape(URI->new($uri_list));

https://sites.google.com/site/hetappipm/hatena/20101230/akiho.png

Excelに画像ファイルを貼り付ける

仕事でWebアプリをテストする時、スクリーンショットを撮っておき最後にExcelで資料をまとめたりするんだけど、巨大なアプリだと画像をExcelに貼り付けるだけでめっちゃ時間がかかったりして、なんで僕がこんな仕事をしているんだ、とキレてるやつがいたんだけど、それはお前がへなちょこなせいなんだよ。

//
// makeimgxls.js
//
(function() {
	if (WScript.Arguments.length < 3) {
		WScript.Echo('usage: cscript //nologo makeimgxls.js c:\\imgs c:\\img.xls 15');
		return;
	}

	var imgdir = WScript.Arguments(0);
	var xlsfile = WScript.Arguments(1);
	var interval = WScript.Arguments(2);

	var files = (function (dir) {
		var files = [ ];
		var fso = new ActiveXObject('Scripting.FileSystemObject');
		var dir = fso.GetFolder(dir);
		for (var e = new Enumerator(dir.Files); !e.atEnd(); e.moveNext()) {
			var item = e.item();
			if (!/(png|jpeg|jpg|gif|bmp)$/.test(item.Name)) {
				continue;
			}
			files.push(item.Path);
		}
		return files;
	})(imgdir);

	var xl = new ActiveXObject('Excel.Application');
	try {
		var book = xl.Workbooks.Add();
		var sheet = book.Worksheets(1);

		for (var ii = 0, max = files.length; ii < max; ++ii) {
			var img = sheet.Pictures.Insert(files[ii]);
			img.Cut();
			sheet.Cells(ii * interval + 1, 1).Value = files[ii];
			sheet.Paste(sheet.Cells(ii * interval + 2, 1), img);
		}

		book.SaveAs(xlsfile);

	} finally {
		if (xl != null) {
			xl.Quit();
		}
	}
})();
c:\Temp\js>dir /b imgs
1.png
2.png
3.png
c:\Temp\js>cscript //nologo makeimgxls.js c:\temp\js\imgs c:\temp\js\img.xls 8
c:\Temp\js>c:\temp\js\img.xls
c:\Temp\js>

https://sites.google.com/site/hetappipm/hatena/20101206/imgxls.png

TwitterストリーミングAPIのデータを眺めた

ここ1ヶ月ほどTwitterストリーミングAPIで取得したデータをDBに格納していたので、軽くSQL叩いて色々遊んでみた。
まずは時間別に1週間分(2010/11/01〜2010/11/07)のTweet件数を取得した。対象は日本からのTweetと思われるもののみ。曜日でTweet傾向が異なるので1週間とした。朝方は少なく夜中が多いことがわかる。
https://sites.google.com/site/hetappipm/hatena/20101107/tweet_all.png

次は、同期間で「今日」という単語が含まれる件数を取得してみた。やっぱ朝は今日の予定とか話すよね。ただ、夜も朝と同じくらいの件数がある。上の図をみるとわかるが、これは単に全体Tweet数が多いため、「今日」という単語も比例して多くなっていると思われる。
https://sites.google.com/site/hetappipm/hatena/20101107/tweet_today.png
「今日」のTweet件数を、全体の件数で割った割合は次のようになる。これだと朝にTweetされる割合が高いことが分かり、納得できる。
https://sites.google.com/site/hetappipm/hatena/20101107/rate_today.png
同じように「明日」の割合。「明日」のことは夜に向うにつれ話したくなるよね。
https://sites.google.com/site/hetappipm/hatena/20101107/rate_tomorrow.png
次は「昨日」。過ぎたことなんてわざわざTweetしないぜ。
https://sites.google.com/site/hetappipm/hatena/20101107/rate_yesterday.png
ついでに「おはよう」。おはよう、おそるべし。朝8時くらいのピーク時は10件に1件以上は、おはよう。
https://sites.google.com/site/hetappipm/hatena/20101107/rate_gm.png
最後に「おやすみ」。ピークは3時って、早く寝たほうがよいよ。これ書いてる今1時半なので、まぁみんなそんな感じなのね。
https://sites.google.com/site/hetappipm/hatena/20101107/rate_gn.png

そんなわけで、誰でもリアルタイムにこんなデータを取得できるなんて、Twitter太っ腹ですね。いろんな統計やら分析に使いまくり。