2010年5月アーカイブ
諸般の事情で削除となりました。済みません。
iPad買っったんで、明日か明後日に社長プレゼンすることになると思うんで、いろいろアプリを買ったりして準備しているんですけれども、僕、手持ちにいい写真を持っていないんです。肌色のやつならいっぱいあるんですけれども、そんなの見せたら洒落にならないし……
Macの壁紙をiTunesで同期しておいてお茶を濁すしかないか……
Twitterアプリも入れておいたんだけれども、見せた瞬間にTLに変態クラスタの人たちの変態POSTが表示されていたらどうしよう……
当分は趣味のものを入れないほうがいいよね……
WebService::KuronekoYamato 0.0.3をCPANで公開しました。
http://search.cpan.org/~clcl/WebService-KuronekoYamato/lib/WebService/KuronekoYamato.pm
0.0.3 Wed Nov 25 12:30:00 2009 libwww-perlの仕様変更に対応(Encode) 2009.11.18頃に行われたヤマト運輸荷物調査サイト構造変更に対応
とかなり古い更新日なのになぜ今上がっているかっていうと、CPANに上げても、Rejectされていたからなんです。昨晩しっかり考えて原因を排除し更新した次第。
この間にも依存モジュールとしてYAML::SyckよりもYAML使うべきじゃねーとかいろいろ考えましたがあんまり気にしないでおこうっと。
それにしても、自分が作ったモジュールがどこのサーバからでもインストールできるのっていいよね。
おりしも今日はiPadの発売日。このモジュールを使って、iPodを運んでくれているヤマト運輸の荷物追跡をしてみたらいかがでしょう。
CGI.pmのみ使っているようなタイトな環境で、Cookieを消すというやり方、正直いって知らんかった。最近Cookieってセッション番号ぐらいしか焼いていないし、しかもシステムが勝手に焼くしな……
こんな風にしてみた。
Finename: delete_cookie.cgi
#!/usr/bin/perl use strict; use warnings; use CGI; my $q = new CGI; my @del_cookies = ('val1', 'val2'); my $cookies; foreach my $key ( @del_cookies ){ push @$cookies, $q->cookie( -name => $key, -value => '', -expires => '-1y', ); }; print $q->header(-cookie=>$cookies); exit; __END__
ちなみに、これブラウザで実行しても見た目なにも表示されない。Cookieを消せっていう指示が入っているHTTPヘッダが見えないところで受信されているっていうことです。
CGI.pm推奨のCookieの使い方は、一つのCookieで、複数の値を入れるタイプなんだけれども、焼かれるCookieは、必ずしもCGI.pm推奨のCookieの使い方に倣っていない場合がある。
今回のCookie削除は、複数のCookieを削除するタイプです。ループしてやらなきゃいけないのね……
昔のPC-9801やMSXのVRAMの裏画面をとってみたことがある人はわかると思うんですけれども、結構文字テーブルを用意していたのが多かったりしませんか? Windowsのゲームでも、文字テーブル画像を生成している奴があったりしたもんです。
いまや、これをHTML+JavaScriptでできる時代になっているからやってみました。
Filename: bmp.pl
#!/usr/bin/perl use strict; use warnings; use Imager; my $w = 16; my $h = 16; my $img = Imager->new( xsize => $w * 256, ysize => $h * 256,); my $font = Imager::Font->new( file => 'ipam.ttf' ); for ( my $i = 0x0000; $i < 0x10000; $i++ ) { $img->string( x => ($i % 256) * $w, y => 14 + int( $i / 256) * $h, string => chr($i), utf8 => 1, font => $font, size => 16, aa => 1, color => '#ffffff', ); } $img->write( file => 'bmp.png',) or die $img->errstr; exit; __END__
プログラムの中でも指定している通り、IPA明朝(ipam.ttf)を指定しているよ。同じディレクトリにおいてから、実行すると、bmp.pngができます。これはUnicodeの基本多言語面(BMP)に相当するやつです。
この書きだしたbmp.pngをCSS Spriteとして文字表示に使ってみるコードがこれ。
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>巨大画像画像ファイルのCSS Spriteをフォントとして利用</title> <link rel="stylesheet" href="//yui-s.yahooapis.com/2.7.0/build/reset-fonts-grids/reset-fonts-grids.css" type="text/css"> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> <script type="text/javascript"> // <[!CDATA[ $(function() { var str = $('#honmon').html(); var newstr = ''; var h = 16; var w = 16; for (var i = 0; i < str.length; i++ ){ var code = str.charCodeAt(i); var char = String.fromCharCode(code); var ku = parseInt( code / 256 ); var ten = code % 256; var html = '<span class="moji" title="' + char + '" style="height: '+ h + 'px; width: ' + w + 'px; background-position: ' + ten * -w + 'px ' + ku * -h + 'px;"></span>' newstr = newstr + html; } $('#honmon').html(newstr); }); // ]]> </script> <style type="text/css"> .moji { display:inline-block; background-image:url(bmp.png); margin: 6px 0px; } #bd p { line-height: 2; } h1 { font-size: 138.5%; font-weight: bold; } h3 { font-size: 108%; font-weight: bold; margin: 10px 0px; } #honmon { background-color: #000; } </style> </head> <body> <div id="doc" class="yui-t7"> <div id="hd" role="banner"> <h1>巨大画像画像ファイルのCSS Spriteをフォントとして利用</h1> </div> <div id="bd" role="main"> <div class="yui-g"> <!--YOUR DATA GOES HERE --> <p> SMマニアから見れば、この事件にSM性は感じられないという。だが一般(ノーマルな性的趣味)の人からすると、どちらも変質者で同じような気もするが......。「違います。事件の犯人は変質者。SMマニアは変態。SMマニアは自分が変態であることを認知しているし、立場も分かっていれば理性もある。日常生活においては全く普通で、性欲の部分だけが変態なんです。」(G氏)つまり変質者は理性がなくなるから犯罪にまで及んでしまうということだ。通り魔だけじゃなくて痴漢なども変質者のたぐいになるらしい。なおG氏によるとSMマニアに対して「変態」と言うぶんには何も問題ないが......</p> <p style="text-align: center;">↓</p> <p id="honmon"> SMマニアから見れば、この事件にSM性は感じられないという。だが一般(ノーマルな性的趣味)の人からすると、どちらも変質者で同じような気もするが......。「違います。事件の犯人は変質者。SMマニアは変態。SMマニアは自分が変態であることを認知しているし、立場も分かっていれば理性もある。日常生活においては全く普通で、性欲の部分だけが変態なんです。」(G氏)つまり変質者は理性がなくなるから犯罪にまで及んでしまうということだ。通り魔だけじゃなくて痴漢なども変質者のたぐいになるらしい。なおG氏によるとSMマニアに対して「変態」と言うぶんには何も問題ないが......</p> <!--YOUR DATA GOES HERE --> </div> </div> <div id="ft" role="contentinfo"> <p></p> </div> </div> </body> </html>
こんな感じで、画像一枚あればフォントファイルいらないってこともできるわけですよね。
これ、PC-9801の頃の古い話かっていうと、結構いまどきのゲームもこういうことしているらしいんだよね。
さて、これでモリサワフォントとか使って自サイトや自作アプリで表示できるぜーとか思ったところで、ライセンス的にアウトなんだろうなー。だからサンプルもIPA使った次第。世の中うまくいかないもんだねー。
(2016-03-02追記)
<style type=" text/css">を
<style type="text/css">にしたらGoogleChromeでも動いたwww ので、リンクのところから(Firefoxのみ)っていう文字を取り払った
モテキ4巻が出ていたので買ってきていつもの某ちゃんとLiveMessengerでマンガ談義していたわけですが(いつぞやのむらしんぼ談義した子ね)、
「安倍吉俊よりも銃刀法違反の方が漫画は10倍うまい」
とか禍々しい言霊を放ってくれて、こんなにも解釈するより思考停止したほうがましだと思ったことはない。
Webアプリケーション作っていまして、ケータイでダミー文字列を入力する場面だったんですけれどもめんどくさいので、ケータイの予測変換を使いって、最初「あ」を押したら出てきた1つ目の単語で確定、そしてまた出てきた予測単語で確定、ていうのを繰り返して入力しようと思ったんです。
「ある時間は。そのせいとか思ったら自分がワキガだった」とかなった。
テストだとしても、ダミー文字列で他の人に見られるとちょっと微妙な感じがするよな!
そういえばアニメ版エクセル♥サーガで、新聞の場面にダミー文字列が流れているんだけど意外に面白かったよ。未来の回の脚本みたいなのが書いてあったり、こんなところは読むな、みたいなのが書いてあったりした。
ServersMan@VPS仮想専用サーバーサービス:ユビキタスプロバイダ DTI [dream.jp]
DTIのVPSサーバ、とても安くて大人気で、いま申し込んでも6月頭あたりの提供らしい。
そんで、これの月490円で行けちゃうEntryプランは、さすがにメモリ256MBだとやりくり苦労するのは知っているので、Standardプランを申込みしました。
さて、申込するとき、最近はgmailのアドレスを使っていまして、gmailは、メールアドレスの後に+を付けると、付けた分が無視されるというルールがあるんですけれども、
- hogehoge@gmail.com
- hogehoge+dti@gmail.com
これらは両方とも同じところに届くわけで、今回も、+DTIを付けたメールアドレスで登録しようと思ったんですけれども、このServersMan @VPSだと、+を付けたメールアドレスははじかれてしまいます……
じゃあ、どうしたかかっていうと、
- hogehoge@gmail.com
- hogehog.e@gmail.com
は両方とも同じところに届く(@以前のピリオドはメール配信先としては無視される)、ていうこれまた特殊ルールがありまして、それを使い、登録した次第。
なんでわざわざメールアドレスを工夫して登録しているかっていうと、サービス提供者からのメール振り分けがやりやすくなるのと(振り分けフィルタの手がかりとして使える)、どっかにメールアドレスが漏れた時わかりやすくするためだったりします。
0からの連番(シリアル値)を62進数文字列(最大5文字)として暗号化しておいて、使う時に復号してシリアル値に戻すっていうの。普通にやると、文字が順番に代わっていくだけなのでなんだかいたたまれない気持ちになるので、数値を2進数に見立てて、左右ビット反転することで、それっぽくなる。
Filename: crypt62.pl
use strict; use warnings; use Math::BaseCalc; my $calc = Math::BaseCalc->new(digits => 'bin' ); # 2進数 for (my $i = 0; $i < 16; $i++ ){ my $b = $calc->to_base( $i ); my $h = $calc->to_base( _bit_hanten($i) ); my $c = crypt62 ( $i ); my $d = decrypt62( $c ); printf "%2d %4s %32s %5s %2d\n" ,$i, $b, $h, $c, $d; } exit; sub crypt62 { my $n = shift; my $calc = Math::BaseCalc->new( digits => 62 ); # 62進数 #$n ^= 12345678; # XORする場合 $n = _bit_hanten( $n ) >> 3; # ビット左右反転ご3ビット右シフト my $s = $calc->to_base( $n ); # 数値を62進数文字列へ return $s; #return substr "0000$s", -5; # ゼロパディングする場合 } sub decrypt62 { my $s = shift; my $calc = new Math::BaseCalc( digits => 62 ); # 62進数 my $n = $calc->from_base( $s ); # 62進数文字列を数値へ $n = _bit_hanten( $n << 3 ); # 3ビット左シフト後ビット左右反転 #$n ^= 12345678; # XORする場合 return $n; } sub _bit_hanten { # 32ビット左右反転 my $n = shift; $n = ( $n << 16) | ( $n >> 16 ); $n = ( ($n & 0x00ff00ff) << 8 ) | ( ($n & 0xff00ff00) >> 8 ); $n = ( ($n & 0x0f0f0f0f) << 4 ) | ( ($n & 0xf0f0f0f0) >> 4 ); $n = ( ($n & 0x33333333) << 2 ) | ( ($n & 0xcccccccc) >> 2 ); $n = ( ($n & 0x55555555) << 1 ) | ( ($n & 0xaaaaaaaa) >> 1 ); return $n; } __END__
$ perl crypt62.pl 0 0 0 0 0 1 1 10000000000000000000000000000000 iakk8 1 2 10 1000000000000000000000000000000 95aa4 2 3 11 11000000000000000000000000000000 rfuuc 3 4 100 100000000000000000000000000000 4xA52 4 5 101 10100000000000000000000000000000 mHUpa 5 6 110 1100000000000000000000000000000 dCKf6 6 7 111 11100000000000000000000000000000 vN4ze 7 8 1000 10000000000000000000000000000 2gN2w 8 9 1001 10010000000000000000000000000000 kr7mE 9 10 1010 1010000000000000000000000000000 blXcA 10 11 1011 11010000000000000000000000000000 twhwI 11 12 1100 110000000000000000000000000000 6On7y 12 13 1101 10110000000000000000000000000000 oYHrG 13 14 1110 1110000000000000000000000000000 fTxhC 14 15 1111 11110000000000000000000000000000 y3RBK 15 $
変換後の文字列を5文字に抑えるためには、3ビット削らなくてはならなかった。ということで、表現できる数値は、0~536870911(2^29-1)までとなります。
最初のゼロが0という文字列になるのが嫌な人は、0埋めするか(0→00000、1→00001にすること。ゼロパディングって言います)、0から使わないか(どうせDBから出てくるIDなんて1が起点だろ)、暗号化と復号のルーチンの要所に ^ (XOR)を仕込んどくといいよ。あと、これ暗号にはなりません。idを1増やして簡単に情報をたどられるのが嫌だ、程度の難読化ですよね。
一番怖いのはPerlのモジュールでこういうのを専門でやるモジュールが用意されていたりしそうだってことだ。
KENWOODのCR-A7USB-Sというラジカセ風のSDカードにタイマー録音できる機械を5月4日に買って次の日のNHK-FMを録音したんだけれども、聴きたい番組はコミュニティFMにもあるんです。
そんで、NHK-FMを録音した時は、テレビのアンテナケーブルを分岐させて繋いだのですが、とてもきれいに聴取できまして、こりゃあいいやーて思ったんですが、コミュニティFMの電波はなぜか入りが悪い。
うーむ、八木アンテナって志向性あるもんだから、コミュニティFMの電波は方角的に入りにくいってことなのか。ちょっとん残念だなあ。
今まで、
my $dbh = $self->dbh; my $sth = $dbh->prepare('SELECT * FROM customers'); my $res = $sth->execute(); my $data; while (my $ref = $sth->fetchrow_hashref ) { push @$data, $ref; } $dbh->commit; undef $sth;
みたいなコードをひたすら書いていました(CGI::Applicationの中なのでちょっと書き方が変かも……)。SQLで出てきたやつを1行ごと取ってpush、無くなるまで繰り返し。これなんでやっているかっていうと、後段にHTML::Templateによるテンプレートエンジンが控えていて、このまま$dataをループに渡すってことをするんですよね。
でも、今日、whileがいらないってことに気付きました。なに使うかっていうと、fetchall_arrayrefを使う。一発で終わる。
my $dbh = $self->dbh; my $sth = $dbh->prepare('SELECT * FROM customers'); my $res = $sth->execute(); my $data = $sth->fetchall_arrayref({}); $dbh->commit; undef $sth;
後段のHTML::Templateでは、die_on_bad_params=>0を入れておくと、DBに入っていた余計なカラムのせいでエラーが出なくなるので良いです。テンプレート中の<tmpl_var name="...">には、カラムの名前をそのまま使えばよいっていう寸法です。
my $html = << 'END_OF_HTML'; <table class="list"> <tr> <th>id</th> <th>会社名</th> </tr> <tmpl_loop name="loop" ><tr> <td><tmpl_var name="id"></td> <td><tmpl_var name="company"></td> </tr> </tmpl_loop> </table> END_OF_HTML my $t = $self->load_tmpl( \$html, die_on_bad_params => 0); $t->param( loop => $data ); return $t->output;
ただ、時刻がDATETIME型(正確に言うと型ではないけど)で格納されていたりする場合、これだとGMTのままになってしまいますから、SQL側で現地時間にしましょう。
SQLiteのTIMESTAMP型のフィールド値をSQLiteのdatetime関数で日本時間に変換 - CLの日記 [d.hatena.ne.jp]
quanpが4月末メンテナンスで停止したりしていたわけですけれども、ファイルストレージサービスってあんまりメンテナンスで停止するっていうのは困るよね。
自宅から時間ギリでファイルアップ→出先のPCでダウンロードしよう→メンテナンス→爆発しろ!
ていうふうにはなるよね。メンテナンス予定見ろっていっても、PCに接続されているストレージのコンテクストを使っているわけだから、それと同等のアクセス性を求めちゃうっていうのはしょうが無いかと。
実際、印刷屋のデータ入稿インフラとして宅ふぁいる便を使っていたわけだけど、メンテナンスでお客様から入稿できないという事態が発生して、やむを得ずデータ入稿システムを自社開発したりするなど。
自社開発して分かったのは、どうやっても建物の電源を落として調査するタイミングがあるから、1か所で動かする場合はサービス停止するのはやむを得ないってことなんですけれども。
ともかく、今時のファイルストレージサービスってメンテナンスで停止しなくても問題なく稼働できる仕組みってできるだろうし、そこに安心感とか生まれるんじゃねーかなーとか思った。まあ、コストかかりますけれども、大手ならできそうですよね。
急にAVIからGIFアニメ作ってみたくなったのだけれども、いまこのWinBookに入っているPhotoshop CS2ではAVI読み込み機能がないので、Adobe Creative Suite 3同梱のPhotoshop CS3 Extendedを入れてみたわけなんですけれども、その後、ニコニコ動画に行ってみたらこんな感じ。
前はFlash Player 10が入っていたので何にも言われなかったのだけれども、CS3入れてから出るようになった。CS3同梱のFlashとバージョンを合わせているんだろうと思うけれども、有無を言わせずダウングレードするってアドビらしくねえなあと思ったり。バージョンとしては、WIN 9,0,45,0が入ったことになっていました。
肝腎のPhotoshop CS3 Extendedのアニメーション機能なんだけれども、そのままオーサリングしちゃっていいんなら楽なんだけれども、アニメとかでコマだけ取り出して、とかやるとてんで役に立たないような気がするんだよね。
元ネタわからない人にはわからない一発芸的な何か。
▲やっつけ仕事ですらない
元ネタ知らない人に解説。ラブプラスの凛子っていうキャラクターにセクシー衣装着て来てよとお願いすると着てくる衣装がこのモデルの衣装なんだよね。
サークルKとかで売っている「天使のクリーミーシフォン」とかいうケーキ、何気なく買って食ったが、良く考えると、なんかのアニメのタイトルにそっくりすぎるぜ!
現行品かよ……ベストセラーすぎるだろ!
Perlの時刻を扱う定番モジュールでDateTimeっていうのがあります。今回、2つの日付の差を取って秒数を得たいと思いまして、おそらくDateTimeモジュールを使う人はほとんどいているだろうっていう
iandeth. - Perlで日付・時間を操作 - DateTime モジュールの使い方 [iandeth.dyndns.org]
を参考にしまして、
2つの日時の差分を調べる [iandeth.dyndns.org]
という見出しのところに書いてあるdelta_ms()とin_units('seconds')を使ってみたらばうまくいかない。
結論から言うと、秒だったら普通にepochでいいってことです。次にソースを示す。
use strict; use warnings; use DateTime::Format::HTTP; delta ( DateTime::Format::HTTP->parse_datetime('2010-05-15T17:32:00'), DateTime::Format::HTTP->parse_datetime('2010-05-15T17:32:51'), ); delta ( DateTime::Format::HTTP->parse_datetime('2010-05-15T17:32:00'), DateTime::Format::HTTP->parse_datetime('2010-05-18T17:32:01'), ); sub delta { my $dt1 = shift; my $dt2 = shift; my $delta1 = $dt1->delta_ms($dt2)->in_units('seconds'); my $delta2 = $dt2->epoch - $dt1->epoch; print "$dt1と$dt2の差の秒数は、\n"; print "delta_ms:$delta1 epoch:$delta2\n\n"; return; }
実行結果:
$ perl time.pl 2010-05-15T17:32:00と2010-05-15T17:32:50の差の秒数は、 delta_ms:51 epoch:51 2010-05-15T17:32:00と2010-05-18T17:32:00の差の秒数は、 delta_ms:1 epoch:259201 $
これは普通にdelta_msの使い方が悪い。分と秒が出てくるんですね。この例だと、in_units('seconds')でわざわざ秒の桁のみ取り出しているから、0~59までしか出ない。だから、何分何秒、ていうのではなくて、本当に累計の秒のみ欲しいのだったらエポックの比較でよいってことですね。
あと、ここら辺も参考になる。
DateTime::Duration - daily dayflower [d.hatena.ne.jp]
今朝社長からいきなりインク交換が5万円するプリンタの話を振られて知らなくて焦ったんだけど、今朝の日経に乗ってたらしい。ぎりぎり出社しちゃったのでWeb版を見れんかったけど、どうやらこれなんだね。
エプソン、ユーザー側によるインク交換不可というインクジェットプリンタを発表 - スラッシュドット・ジャパン [slashdot.jp]
みんな言っているのは、本体が65000ぐらいで、インク交換サービスで52500ていうので使い捨てプリンタなっちゃいそうだよねーていうはなし。
どういう構造になっているか見てみたいねえ。
今日、我が家のWinBookでExcelを起動したら、ライセンス認証しやがれと出ました。インストール後30回の猶予使い果たしちゃったんだね。
しょうがねーということで、こんな面倒くさい仕組みを強制させるマイクロソフトに少しでも金を払わせる目的で電話でアクティベーションをすることにしているわけです。
こんな画面が出ます。
で、画面に表示されたフリーダイヤル番号に電話をかけるわけなんですけれども、かけたことがある方ならわかると思いますが自動応答の音声が早口なんです。
そこで、最近の電話に付いている「ゆったり」機能。音声をバッファして、なるべくゆったりになるように音声を生成し直してしゃべってくれますので、電話の向こうから一方的に発せられるアクティベーションコードの数字の羅列も聴きやすくなりますよ!
このゆったり機能、結構面白くて、117の時報にかけた後使うと、時報の音が等間隔になりません。当然の結果ですわな……
僕がかつて作ったファイル送信のウェブページに、他の人が新しく作ったページでの入力を差し込むため、Cookieを使うっていう案件で、僕の作ったほうはCookieからのデコードをunescapeで行うのだけれども、他の人が作ったページでは、encodeURIで作っていたので、文字化けするっていう話。
これって、ハイドライドIIのマップの表示ルーチンが横方向に展開するのに、マップ担当の人が縦方向に圧縮したみたいな話だよね。この話は電波新聞社の「チャレンジ!ADV&RPG 1」あたりに書いてた記憶がある。
んで、データエンコード側の不始末をデコード側で拭うってことになるよね。こんな感じに。
function unescape2( f ) { if ( f.match(/%u/) ) { return unescape( f ); } else { return decodeURI( f ); } }
そもそもunescapeつかうな、ていう話なんだけど、MacIE5対応のためには外せないんだよね……
そうそう、jQueryのCookieマネージャ、もう自動でdecode済みの値取得するようなんで、これ使えません。そもそもMacIE5だと動きませんけれどもね……
今日の新聞。
▲日本一不味いラーメンじゃあるまいに
そういえば最近2ちゃんねるの「新ジャンル『○○』」ネタってあんまり見ないような気がする。
ヨドバシカメラの通販で買おうかなーとか思っていたiPad、どうやらアップルから通販での販売チャネルを狭める指示が出ているみたいでヨドバシの通販もやめちゃったようです。そんで、アップルストアを使うのだけはイヤなので、ヨドバシカメラに予約しに行こうと思ったんだけれども、うちの近くのヨドバシカメラではなぜか予約受付していない店舗だったのです! というわけで、ケーズデンキに行って予約してきたという次第。
ケーズデンキで予約していたときに聞こえてきた話では、今回の最大容量の64GBモデルを予約している人が多いんだって! でも3G版だと、2年縛りあるのにそれでいいのか、とか思ったけれども、16GBモデルと2万円差、32GBモデルと1万円差なんだよね。結構年配の人が多かったし、2万円差気にならんのだろうな、と思った。
僕は、エロ動画入れないつもりなのでWi-Fiの16GBにしたよ! おそらく日経新聞のアプリはほぼ確実に出るだろうから、それは使ってみたいと思う。
今月、Amazonから5000円アフィリエイト収入が入ったので、サマーウォーズの前に見ておいたほうがいいって言われているDVDをAmazonで買った。
日曜朝9:00だったか9:30だったかにやってたデジモンアドベンチャーを見ていたんだけど、こっちの劇場版のほうは、見たことなかったので、買ってみた。
まだじっくり見られないんだけどね。
ついでに、サマーウォーズ。
Photoshopで中割りのコマをしこしこ作った後1コマごと書きだしてFirefoxのAPNG Editorに読み込んでしこしこ、ていうのがいい加減面倒くさいんで、Photoshop CS5がAPNGに対応していればいいんだと思うんだけれども、なんだかいまいち調べきれない。
うちで使った例としてこんなのが。M.C.P.C.: GoogleMapsAPIで使うマーカーをブリンクしてみた
Photoshopの製品って、オープンソース由来のフォーマットへの対応ってあんまよくないような個人的な印象があるんだよなあ。
僕は購入厨なので買ってきたよ!
んで、これシングル盤だから、オフボーカルになってるインストバージョンが入っているけどこれ聴いてたらなんかのゲームミュージックみたいに感じるわけで。
この曲はボーカルが早口言葉っぽくて有名なんだけれども、トイポップあたりの音楽にボーカルつけてもやっぱり早口言葉になるんだろうなーとか思いました。
「リミットは、残り約677時間、日付にして、……3月31日、24時。」というセリフを3月3日18時半ごろにしゃべるという設定のドラマがあったんで、合っているか確認してみた。
ワンライナーで。
$ perl -MDateTime::Format::HTTP -e '$dt=DateTime::Format::HTTP->parse_datetime("2011-04-01T00:00:00")->set_time_zone("Asia/Tokyo")->add(hours => -677 );print "$dt\n";' 2011-03-03T19:00:00 $
まあま合っているかな。
朝9時20分からずーとNHK-FMでアニソン三昧っていう番組がやっていてずーとアニソン(アニメ主題歌など)が流れておるわけですが、
今日は一日 ○○三昧(ざんまい):2010年5月5日 [www.nhk.or.jp]
僕も聴いているわけですけれども、この番組と、ネットのコミュニケーションツールが合わさると、うちに居ながらにして祭りに参加している気分になる、つまり祭りは一人じゃできないし、人が物理的に集まらなくても情報の集積と整理と分配がなされればこれから何でも祭りになるってことですよね。
今でいえば、2ちゃんねるの実況板とか、Twitterとか。
とりあえず、僕は、司会の緒方恵美、丹下桜両人が演じたMAICO 2010という作品の主題歌がリミットの17時30分までに流れるかどうかというところに注目していましたがギリギリでかかってその時点で祭りに参加した甲斐があったかなーと思ったり。
あした、NHK-FMでアニソン三昧がAM 9:20~AM 1:00(休止あり)、つまり14時間40分ぐらいぶっ続けで放送があるもんだから、これを録音したいと思って、実家から帰ってくる途中、デンコードーじゃなくてケーズデンキ、ヤマダ電機、コジマなどをはしごして、SDカードに32時間録音できるというラジカセを買ってきた。
そんで、帰省から帰ってきて、さっそく設置したらば、これ5時間以上連続録音できないんだって。なんてこったい。
アマゾンのレビューにもしっかり○○三昧録音するには5時間縛りは困る、書いとる。ケンウッドのアホたれー! 2007年発売の製品なんだけど全然アップデートしてない臭くて泣ける。一応2010年製造なんだけどなあ。
そんなこともあろうかと、サン電子のRDPC-101/SていうPC用のラジオチューナーも買っておいたんだけど、これをつなぐ予定のうちのWinBookは、価格.comでみると、熱暴走することで有名なモデルであって、僕のマシンも例に漏れることなく熱暴走して落ちる。14時間の連続運用はきつそうなんだよなあ。くまったくまった!
今作っているのはTwitterの膨大な数のツイートを取得するやつなんですが、その過程で、Twitterに対し操作をするとカウントされて、一定数カウントされると操作ができなくなる仕組みを調査する必要があって作った。
下記のスクリプトは、パスワードを直に書くバージョン。
Filename: check_limit.pl
#!/usr/bin/perl use strict; use warnings; use Net::Twitter; use YAML; print Dump rate_limit_status(); exit; sub rate_limit_status { my $nt = Net::Twitter->new( traits => [qw/API::REST/], username => 'username', password => 'password', ); my $res = $nt->rate_limit_status(); #my $res = $nt->rate_limit_status({authenticate => 0}); return $res; } __END__
実行例。
$ perl check_limit.pl --- hourly_limit: 150 remaining_hits: 143 reset_time: Mon May 03 14:56:45 +0000 2010 reset_time_in_seconds: 1272898605 $
スクリプト内にパスワード入れたくない場合はConfig::Pitでも使い、
Filename: check_limit.pl
#!/usr/bin/perl use strict; use warnings; use Net::Twitter; use YAML; use Config::Pit; print Dump rate_limit_status('twitter.com@username'); exit; sub rate_limit_status { my $account = shift; my $config = pit_get( $account ); my $nt = Net::Twitter->new( traits => [qw/API::REST/], username => $config->{username}, password => $config->{password}, ); my $res = $nt->rate_limit_status(); #my $res = $nt->rate_limit_status({authenticate => 0}); return $res; } __END__
Filename: ~/.pit/default.yaml
--- "twitter.com@username": "username": 'username' "password": 'password'
とするといいのかな。
昨日は、Twitterの特定のユーザーのフォロワー達の最終書き込み日をグラフにして表示してみたけれども、今日は、Twitterの特定ユーザーの書き込みから、書き込んだ時間を取得してグラフにすればどうかなと思って作ってみた。
240発言を採取して、発言をヒストグラムにします。
Filename: activity.pl
#!/usr/bin/perl use strict; use warnings; use Net::Twitter; use Date::Parse; use DateTime; use Text::Graph; use Text::Graph::DataSet; my $screen_name = $ARGV[0] or die 'enter Twitter UserName.'; my $nt = Net::Twitter->new( traits => [qw/API::REST/],); my $c = {}; # TwitterからFollowersの情報を取得して最終発言日を集計 my @list = _get_twitter_value( $screen_name ); foreach my $item ( @list ) { my $epoch = str2time( $item->{created_at} ) || 1; my $create_at = DateTime->from_epoch( epoch => $epoch, time_zone => 'Asia/Tokyo', ); #print "$create_at\n"; $c->{ $create_at->strftime('%H') }++; } # グラフ表示 my $graph = Text::Graph->new( 'Bar', showval => 1, maxlen => 60,); print $graph->to_string( $c,); exit; sub _get_twitter_value { my $screen_name = shift; my @list; for ( my $i = 1; $i < 13; $i++ ) { my $res = $nt->user_timeline({ screen_name => $screen_name, page => $i, }); last unless @$res; @list = ( @list, @$res ); }; return @list; }
実行例。CLCLCLというのは、わっとこのTwitter Usernameです。
$ perl activity.pl CLCLCL 00 :**************************************** (18) 01 :** (2) 02 : (1) 03 : (1) 04 :********************* (10) 05 :** (2) 06 :***** (3) 07 :** (2) 08 :************** (7) 09 :************************** (12) 10 :**************************************** (18) 11 :************** (7) 12 :***************************** (13) 13 :********************* (10) 14 :***** (3) 15 :******************************* (14) 16 :******************************************* (19) 17 :********************************* (15) 18 :********************************* (15) 19 :********** (5) 20 :***************** (8) 21 :***************************** (13) 22 :********************* (10) 23 :************************************************ (21) $
夜型ですな。
時報botでやってみた。
$ perl activity.pl jihou 00 : (10) 01 : (10) 02 : (10) 03 : (10) 04 : (10) 05 : (10) 06 : (10) 07 : (10) 08 : (10) 09 : (10) 10 : (10) 11 : (10) 12 : (10) 13 : (10) 14 : (10) 15 : (10) 16 : (10) 17 : (10) 18 : (10) 19 : (10) 20 : (10) 21 : (10) 22 : (10) 23 : (10)
Text::Graphがセンシティブすぎる。数字からするとまあまあいいんだと思うんだけど。
こーいう統計を取って、Twitterの発言診断サービスとか作っているんだろうな。
Twitterの特定のアカウントのフォロワー達の最終書き込み日をグラフにして表示すればなんか見えてくるかなーて思って作ってみたが大して面白くなかった。
Filename: followers_activities.pl
#!/usr/bin/perl use strict; use warnings; use YAML::XS; use Net::Twitter; use Date::Parse; use DateTime; use Text::Graph; use Text::Graph::DataSet; my $screen_name = $ARGV[0] or die 'enter Twitter UserName.'; my $nt = Net::Twitter->new( traits => [qw/API::REST/],); my $now = DateTime->now( time_zone => 'Asia/Tokyo'); my $c = [ { count => 0, name => '1day', range => $now->clone->add( days => -1 ), }, { count => 0, name => '1week', range => $now->clone->add( weeks => -1 ), }, { count => 0, name => '1month',range => $now->clone->add( months => -1 ), }, { count => 0, name => '1year', range => $now->clone->add( years => -1 ), }, { count => 0, name => 'other', range => DateTime->from_epoch( epoch=> 0), }, ]; # TwitterからFollowersの情報を取得して最終発言日を集計 my @list = _get_twitter_value( $screen_name ); foreach my $item ( @list ) { my $epoch = str2time( $item->{status}->{created_at} ) || 1; my $create_at = DateTime->from_epoch( epoch => $epoch, time_zone => 'Asia/Tokyo', ); #print "$create_at\n"; for ( my $i = 0; $i < $#$c + 1; $i++ ) { if ( $c->[$i]->{range} < $create_at) { $c->[$i]->{count}++; last; } } } # グラフ表示 my @counts = map { $_->{count} } @$c; my @labels = map { $_->{name} } @$c; my $graph = Text::Graph->new( 'Bar', showval => 1, maxlen => 60,); print $graph->to_string( \@counts, labels =>\@labels,); exit; sub _get_twitter_value { my $screen_name = shift; my $cursor = -1; my @list; while ( $cursor != 0 ) { my $res = $nt->friends({ screen_name => $screen_name, cursor => $cursor, }); $cursor = $res->{next_cursor}; push @list, @{ $res->{users} }; } return @list; } __END__
実行例。CLCLCLというのは、わっとこのTwitter Usernameです。
$ ./followers_activities.pl CLCLCL 1day :************************************************** (126) 1week :******** (23) 1month : (7) 1year :** (11) other :* (8) $
Perl 5.12だと$#が使えなくなるとかどうとか聞いたけどどうするんだろ。確認してないけど。