test
test
正しい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));
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>
TwitterストリーミングAPIのデータを眺めた
ここ1ヶ月ほどTwitterストリーミングAPIで取得したデータをDBに格納していたので、軽くSQL叩いて色々遊んでみた。
まずは時間別に1週間分(2010/11/01〜2010/11/07)のTweet件数を取得した。対象は日本からのTweetと思われるもののみ。曜日でTweet傾向が異なるので1週間とした。朝方は少なく夜中が多いことがわかる。
次は、同期間で「今日」という単語が含まれる件数を取得してみた。やっぱ朝は今日の予定とか話すよね。ただ、夜も朝と同じくらいの件数がある。上の図をみるとわかるが、これは単に全体Tweet数が多いため、「今日」という単語も比例して多くなっていると思われる。
「今日」のTweet件数を、全体の件数で割った割合は次のようになる。これだと朝にTweetされる割合が高いことが分かり、納得できる。
同じように「明日」の割合。「明日」のことは夜に向うにつれ話したくなるよね。
次は「昨日」。過ぎたことなんてわざわざTweetしないぜ。
ついでに「おはよう」。おはよう、おそるべし。朝8時くらいのピーク時は10件に1件以上は、おはよう。
最後に「おやすみ」。ピークは3時って、早く寝たほうがよいよ。これ書いてる今1時半なので、まぁみんなそんな感じなのね。
そんなわけで、誰でもリアルタイムにこんなデータを取得できるなんて、Twitter太っ腹ですね。いろんな統計やら分析に使いまくり。