いろいろ@はてな このページをアンテナに追加 RSSフィード

2005-08-17

[] 地震

宮城方面にはけっこう知合いがいるのでとっさに心配したけど,どこも大きな被害はなかったようで一安心.ただ,食器や棚の物が落ちて割れてとても怖かったという話があるいっぽうで,ほとんど被害もなかったという所もある.お盆休みだったせいで,そもそも現地にいなかったという人も何人かいた.


東京でもかなり揺れた.戸棚の中の物ががたがたぶつかり合ってるのが聞こえたし,地下鉄もまた止まった.

2 分くらい揺れてたかな.衝撃は少ないけどゆっくりと大きく長く揺れる気持の悪い揺れで,震源が遠いのがよくわかった.阪神大震災の時に東京で感じた揺れに似ていた (誰も信じてくれないんだけど,確かに東京でも震度 1 程度は揺れたのだ).

[] Perl プログラマのレベル 10

自分はレベル 4 くらいだと思います….正規表現? わからないに決まってるじゃないか!(ぉ [2005-08-18]

実は Perl勉強というものをまともにしたことがない.perldoc もラクダ本もほとんど眺めたことない.だからすごく基本的な知識が時々すっぽり抜けてたりする.

何かいい勉強法ありませんかね.

[] BibTeX から iTunes

以前,PDF の管理を iTunes でできるという記事を /.-j で読んだ.フォルダ指向でなく属性指向のインタフェースで使い勝手がいいという.なんとなく気になってた.

試しに手元の数個の PDF を放り込んでみたが,確かに検索やソートが使いやすい.うん,悪くない.


で,本格的に使おうとしたときに障害になるのが,ファイルプロパティをどう入力するか,である.手持ちの PDF論文が多いのだけど,曲名=論文タイトルアーティスト=著者,アルバム名=書誌名…みたいなのを数百件も手で入力するなんてヤダ.

/.-j でも同意見がちらほら.

普段は BibTeXエントリPerl に喰わせてエセ検索とかしてるので,このデータベースをなんとか使いたい.調べると iTunes ではタブ区切りテキストXML 形式の曲リストインポートできるらしい.

ていうことで,Perl でなんとかなりそうなので,BibTeX ファイルを読み込んで iTunesインポートファイルを吐き出すようなものを,やっつけ仕事で作ってみた.Perl レベル 4 なのでそのつもりで(ぉ.なお,インポートファイルはタブ区切りテキストです.iTunes の扱う XML仕様がまるで謎だったので.


なお,以下では

というやや妙な設定になってます.


では,とりあえず Text::BibTeX というものを入れて手を抜く.

あとは Perl レベル 3 くらいの人であればすぐに書ける.

まず iTune インポートファイル用のヘッダを出力.これをはじめ,iTunes に喰わせるテキストSJISCL+LF でないといけない.

$header = "名前\tアーティスト\t作曲者\tアルバム\t分類\tジャンル\tサイズ\t時間\tディスク番号\tディスク数\tトラック番号\tトラック数\t年\t変更日\t追加日\tビットレート\tサンプルレート\t音量調整\t種類\tイコライザ\tコメント\t再生回数\t最後に再生した日\tマイレート\t場所\x0D\x0A";
 jcode::convert(\$header, 'sjis');
print $header;

次に bib ファイルの読み込み.ここで気をつけないといけないのは,bib ファイルEUC で書かれてないといけない.必要なら前段で文字コード変換する.Perl でのスマートな方法が思い付かないので略(ぉ.

$bibfile = new Text::BibTeX::File "hoge.bib";
$bibfile->set_structure ('Bib');
while ($entry = new Text::BibTeX::Entry $bibfile)
{
    &action;
}

で,sub action の中ではまず,

	warn "error in input" unless $entry->parse_ok;
	my $type = $entry->type;
	
	my $key = $entry->key;                  # only for BTE_REGULAR metatype
	my $num_fields = $entry->num_fields;
	my @fieldlist = $entry->fieldlist;
	my $title = $entry->get ('title');
	my $year = $entry->get('year');
	my $vol = $entry->get('volume') unless ( $entry->get('volume') =~ /\D/ );
	my $num = $entry->get('number') unless ( $entry->get('number') =~ /\D/ );
	my $pages = $entry->get('pages');
	if ( $entry->exists ('journal') ){
	    my $journal = $entry->get('journal');
	}
	if ( $entry->exists ('booktitle') ){
	    my $journal = $entry->get('booktitle');
	}
	my $comment = $entry->get('comment');
	
	if ( $entry->exists ('author') ){
	    my @authors = $entry->split ('author');
	    ($first_author) = $entry->names ('author');
	} else {
	    my @authors = $entry->split ('editor');
	}
		
	my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev,
	    $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat( "$pdfdir$key.pdf" );

雑誌によっては,数字以外の文字が含まれる巻号だったりしますが (J82-D-II とかww),そういうのは省いてます.iTunesアルバム番号エントリは数字以外許さないので.


次に,ファイル情報から出力をでっちあげます.

	if ( $size ne "" ){
	    
	    my $pdfpath = "$pdfdirwin$key\.pdf";
	    	    
	    my @mdate = localtime( $mtime );
	    my $mt = sprintf("%d/%02d/%02d %d:%d",
			     $mdate[5]+1900, $mdate[4]+1, $mdate[3], $mdate[2], $mdate[1]);
	    my @cdate = localtime( $ctime );
	    my $ct = sprintf("%d/%02d/%02d %d:%d",
			     $cdate[5]+1900, $cdate[4]+1, $cdate[3], $cdate[2], $cdate[1]);
	    my @adate = localtime( $atime );
	    my $at = sprintf("%d/%02d/%02d %d:%d",\
			     $adate[5]+1900, $adate[4]+1, $adate[3], $adate[2], $adate[1]);
	    	    
	    my $output = "$title\t@authors\t\t$journal\t$pages\t$type\t$size\t\t$vol\t\t$num\t\t$year\t$mt\t$ct\t\t\t\tPDF 書類\t\t$comment\t\t\t\t$pdfpath\x0D\x0A";
	    
	  jcode::convert(\$output, 'sjis', 'euc');
	    print $output;
	    
        }

ctime,mtime,atime はなくても動く.ていうか所詮合ってないので,単なる気休め.


で,最後にこんなことを書くと怒られそうなのですが,なぜか手元の環境では年号が正しく iTunes で読めません.出力したテキストファイルは合ってるはずなんだけど.謎.

あと,これをやると iTunes の「ジャンル」の項目が汚くなるのも問題.Rocks とか Classics の中に inproceedings とか入ってきちゃうので.なので,スクリプトを書いただけで満足して,結局活用してません(激ぉ

[] 池上遼一クロ高

池上氏,大人だよアンタ.モーニングによくわからない漫画を載せていたので敬遠してたが(激ぉ,ちょっと見直した.

ちなみに映画を見に行った人は誰かおらんのか.

[] 元 Google 社員の超セレブ生活

エンドレスプールワロタ.そんなに金があるなら広大なプールを買えばいいのではとも思ったが,Google 社員だからこういうのが好きなのかな.

Connection: close