〜2011年1月下旬〜
T30ではプレイリストのエントリー削除が可能なので、
もう聴かない曲はプレイリストから消したりするわけだが、
ふと気づいてみると何を消したかわからない。
大本のファイルのほうは消してないので、
そっちと比較すればわかるがそれをT30上でやるのは面倒。
というわけでPC上でプレイリスト表示。
まあ、メンテもしたいしね。
% ruby -e '$<.read(512).unpack("N")[0].times{puts $<.read(512).unpack("x2A*")[0].encode("utf-8", "utf-16be")}' playlist.pla
unpackはxで読み飛ばすことができ、Aで後続の不要なNUL文字を消してくれる。
1GB増やした。長すぎるので途中からはカンニングした。
"Rubyのエンコード指定マジックコメントを##<esc>で挿入できるようにした - LazyLoadLife"を見て、
inoreabbrev <buffer> ## # -*- coding: utf-8 -*-
と設定してみた。
意味があるかわかないけど、ファイルリストを自由にいじれるってことは、
ファイルリストの中にファイルリストを入れることも可能。
実際にやってみるとちゃんとPLというアイコンも出てきて認識してるっぽいが、
選択するとThe file does not exist!になってしまう。なんか惜しいな。
Firefoxのcookies.sqliteはロックされてるので、起動中は外からはどうにもならないと思っていたが、
cpしてからsqlite3すれば普通に読めて拍子抜けした。
クッキーはそんな動的に変化するもんでもないのでこの手は使えそうだ。
cookies.sqliteをcpしたはいいが、このままでは使えない。
Firefox 2の時代に使われていた形式にしないとwgetとかも認識してくれない。
というわけでsqlite3で変換だ。
% sqlite3 -separator $'\t' cookies.sqlite 'SELECT host, CASE host GLOB ".*" WHEN 1 THEN "TRUE" ELSE "FALSE" END, path, CASE isSecure WHEN 0 THEN "FALSE" ELSE "TRUE" END, expiry, name, value FROM moz_cookies' > cookies.txt
長いな。
davfs2でマウントしてみたが9MB弱しかないのにコピーに55分もかかるってのはちょっと遅すぎるなあ。
エラーも頻発してるし。残念ながらちょっと使えない。
rsync: mkstemp "/home/eban/drivee/anagol/.a.out.V515IR" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.countup-emasaka.sed.tQtwBF" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.permission+list.sh.GYsMAF" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.sedsed.prhGzI" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.sedsed-1.0.8yTEZw" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.tetris-1.in.5xGDbF" failed: Resource temporarily unavailable (11) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.applypatch-msg.sample.86kPUo" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.commit-msg.sample.XrwRdw" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.post-commit.sample.k4uTWE" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.post-receive.sample.B7fY0O" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.post-update.sample.EfBzE9" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.pre-applypatch.sample.t83u3v" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.pre-commit.sample.IQjxMT" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.pre-rebase.sample.bgyW6i" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.prepare-commit-msg.sample.mmtueK" failed: Invalid argument (22) rsync: mkstemp "/home/eban/drivee/anagol/.git/hooks/.update.sample.xWY0wd" failed: Invalid argument (22) sent 3383524 bytes received 27144 bytes 1022.23 bytes/sec total size is 3286459 speedup is 0.96 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1060) [sender=3.0.7] zsh: exit 23 rsync -av ~/anagol ~/drivee rsync -av ~/anagol ~/drivee 0.27s user 1.41s system 0% cpu 55:36.35 total
今回は惨敗だったわけだが。
#!ruby -p gsub(/([A-Z])([a-z]*)([A-Z]?)/){$1+($2+$3).swapcase} #!ruby -p gsub(/([A-Z][a-z]*)([A-Z]?)/){$1.upcase+$2.downcase} #!ruby -p gsub(/([A-Z])([a-z]*[A-Z]?)/){$1+$2.swapcase} #!ruby -p gsub(/([A-Z])([a-z]+.?)/){$1+$2.swapcase} #!ruby -nl m=0 $_.bytes{|c|putc c^m;m^= ~c&32} puts #!ruby -nl m=0 $_.bytes{|c|putc c^m;m^=32&~c} puts
^を使うというのはわかったが、計算が苦手で縮まなかったな。
\nの扱いかたがひどすぎる。
そりゃもうびっくりだよ。まさかこんなに縮むとは。
定期的に流行るFizzBuzz祭りも役に立つんだな。
たまに思い出すとまた違った視点で考えられるのかな。
Firefoxのプロファイルの位置は~/.mozilla/firefox/までは決め打ちでいいんだけど、
その後がランダムな文字列の組み合わせになっている。
~/.mozilla/firefox/profile.iniにその位置は書いてあるが、
これがini形式のファイルなのでshell scriptからはちょっと扱いにくい。
そこでgit configだ。gitconfigファイルもini形式なので値を読むことに使える。
現在使われているセクションはDefault = 1という記述があるので、
これ見つけるには
% git config -f ~/.mozilla/firefox/profiles.ini --get-regexp 'profile.*\.default' profile0.default 1
でいける。git configは全部小文字で扱えばいいようだ。
% alias fx-prof='git config -f ~/.mozilla/firefox/profiles.ini' % prof=$(fx-prof --get-regexp 'profile.*\.default' | cut -f1 -d.) % echo $prof profile0 % fx-prof --get $prof.path pusupjaq.default
さて縮めるかと思ったら終わっていた。出題者は日本人か?
Bash版はパイプの部分を分けないとだめかと思ったらゴルフ場では通ってしまった。
いろいろなフックのおかげか?手元ではqをteeで書き換えるのが早いようで通らない。
まだ30日経ってないのになあ。もう面倒だから20日で更新するようにしよう。
echo {0,1}{0,1}...で生成して必要なのだけフィルタリングする方法だと、32ビットもあると破綻する。
あと順番がよくわからないな。