〜2011年1月中旬〜
- Description:
- LZHAM (LZ, Huffman, Arithmetic, Markov) is a general purpose lossless data compression library that borrows many ideas from LZMA but purposely makes several key tradeoffs that favor decompression speed over compression ratio. LZHAM's compression ratio is currently approximately .5-1.5% less than LZMA, but decompresses approximately 2-3x faster on a Core i7.
LZHAM's decompressor is intended to be particularly fast on embedded devices, handhelds and game console platforms.
ふとgmailでis:unreadしてみたら、PayPalからのメールがいっぱい出てきた。
どうもフィルタで問答無用でPayPalからだったらarchiveしていたようだ。
なんでこんな設定にしたんだろう?って
これだな。たぶんこのときに設定したんだな。ずっと放置していた。
あれ、アカウント消されてなかったんかい。
まあ、メールも大した内容じゃないからよかったが。
問題読まなくてもoutput見れば何を表示すべきかわかる。
要は黒の個数の偶奇で決まるので2つめの数字だけで見ればいい。
と、えらそうに書いているが気づいたのは締め切り2日前だったという。
Rubyのsvnリポジトリをsvnadmin dumpしたら26GBにもなって驚いた。
素のリポジトリは786MBなのになんでこんなに大きくなるんだ?
それはそれとしてgzip, bzip2, xzで圧縮してみたらちょっと信じられない結果に。
% ls -oh ruby-svn.dump* -rw-r--r-- 1 eban 26G 2011-01-14 10:08 ruby-svn.dump -rw-r--r-- 1 eban 4.9G 2011-01-14 23:14 ruby-svn.dump.bz2 -rw-r--r-- 1 eban 7.1G 2011-01-14 20:40 ruby-svn.dump.gz -rw-r--r-- 1 eban 139M 2011-01-14 19:30 ruby-svn.dump.xz
xzはどうなってんの、これ?信じ難いのでmd5sumとってみた。
% time md5sum ruby-svn.dump; time xz -dc <ruby-svn.dump.xz | md5sum 506c2161bfdbfeacb399d0dead52e567 ruby-svn.dump md5sum ruby-svn.dump 90.35s user 14.61s system 39% cpu 4:26.06 total 506c2161bfdbfeacb399d0dead52e567 - xz -dc < ruby-svn.dump.xz 56.67s user 5.15s system 87% cpu 1:10.56 total md5sum 56.73s user 4.49s system 86% cpu 1:10.55 total
合ってるよ。すげー。って、xzで伸長したほうが速いんだな。
このくらいのサイズの差があるとIOのreadよりも計算のほうが速いってことか。
いろいろと予想外だ。
例によって:
73B gets.chars{|c|a=$_.index(c);$_[a]="\0";puts c+": #{B-a}"if B=$_.index(c)} 64B i=-1;gets.chars{|c|$_[i+=1]=0;puts c+": #{A-i}"if A=$_.index(c) 59B i=0;gets.chars{|c|puts c+": #{A-i+1}"if A=$_.index(c,i+=1)} 56B gets;puts$&+": #{A+1}"if A=$'.index($&)while sub! /./,"" 55B gets;($_=$';puts$&+": #{A+1}"if A=$_.index($&))while/./ 54B gets;puts$&+": #{$'.index($&)+1}"if($_=$')[$&]while/./ 52B gets;puts$&+": #{A+1}"if A=($_=$').index($&)while/./
gsubではできないと思い込んでしまったなあ。あとはこれか。
51B gets;puts$&+": #{A+1}"if(A=($_=$').index$&)while/./
まったくもって今更ではあるけど、iriver T30でプレイリストが使いたくなった。
ぐぐったら
Playlist format for iriver T50がヒットした。
なぜかUTF-16BEなんだな。ほぼバイナリでちょっと面倒。
とりあえず、全曲をプレイリスト化するスクリプトを作成。
引数にマウントしたディレクトリを指定するとカレントディレクトリにplaylist.plaを作る。
# coding: UTF-8 playlist = nil Dir.chdir(ARGV[0]) do playlist = *Dir.glob("**/*.{mp3,ogg}") end n = playlist.size open("playlist.pla", "wb") do |f| f.print [n, "iriver UMS PLA"].pack("Na508") playlist.each do |file| file = "/" + file f.print [File.dirname(file).size + 2, file.tr('/','\\').encode("UTF-16BE")].pack("na510") end end
いちおうT30でPlaylistsフォルダに置けば読めた。ファイル名は拡張子を.plaにすればなんでもよさげ。
m3uファイルを作ってPlaylistsフォルダに置いてみたが、さすがに無理だった。
512バイトのあたまにある2バイトでディレクトリの長さ的なものが本当に使われているか実験してみた。
id3tagをつけないとファイル名を表示するようになるが、まさにこの表示する名前は長さで決まっていた。
0にすると絶対パス的なものになる。ものすごく長くなって非常にうっとうしい。
T30自身でファイルを消すとなぜか再生モードがリセットされてしまう。
一方プレイリストにも独立した再生モードがあるんだけど、こちらはちゃんと保持される。
プレイリストを使い始めたきっかけはリセットされるのがうっとうしいからだったりする。
ふと思いついた方法で縮むかと思ったが、例外がありあまり縮まなかった。
非常に惜しいんだけど、上位の二人はこっち方面じゃないのかな。
あるときからssh -XしてもDISPLAYが設定されない状況が続いてしばらくほっといたんだけど、
どうもUbuntuがサーバだとだめみたいという感じだった。3台ともだったので。
で、今日試したら3台ともokだった。どこかの更新でなおったのか?なんだったんだろうな。
正規表現だけかと思ったが、leonidさんの>を含めるかどうかで1B違うというのはなかなか気づかない。
うまいな。と思ったらPerl陣はみんな気づいていた。