FIREFOX HACKS'
友達が 日本エイサーのNetPC 「Aspire one」を持って遊びにきた。正確には、修理に やってきた。友人のPC、ある時からWindowsXPが起動しなくなってしまったとの事。
サポートページに出ていた事をやりたいのだが、ネットに繋げないので、車を飛ばしてやってきたのだ。電話で相談を受けた時、どこかのネカフェで落せばいいんでねぇかい と、伝えておいたのだが、地方の悲しさか、ネカフェがことごとく潰れてしまって、無いとの事。
御無沙汰だったので、遊びにおいでよとなったのでした。FAQの手順通りにやったら、 ものの5分で回復しました。それにしても、こういう事例が FAQって事は、そこそこ 同様なトラブルがあるって事ですね。くわばら、くわばら。
gnuplot と fft の合わせ技
gnuplotの説明を読むも、fftを行なう関数は内蔵されていない。(Rには、ちゃんと内蔵されてましたよ、と言うような無理は言うまい!)
ならば、fftした結果だけを渡してあげればいいじゃんとなるのは、当然の帰結。でも、普通の表示と、切替えられれば便利ね と、悪魔のささやき。
(define (fft->gd-data lis) (map (lambda (v) (log (abs v) 10)) (take (fft lis) (/ (length lis) 2))))
まずは、こんなのを用意しました。FFTすると、折り返しが出ますので、それを表示しても見苦しいので、半分にしてます。次は、これを既存のコードに組み込みます。
(define (gp-data lis pos n-frame port how) (define (frame-dump lis x y) (if (null? lis) (display "\n\n" port) (begin (format port "~a ~a ~a\n" x y (car lis)) (frame-dump (cdr lis) x (+ y 1))))) (dotimes (x n-frame) (match how ['fft (frame-dump (fft->gd-data (list-ref lis (+ pos x))) x 0)] [ _ (frame-dump (list-ref lis (+ pos x)) x 0)]))) (define (show3d lis pos n . opt) (let ((how (match opt [('fft) 'fft] [_ #f]))) (sys-system (string-append "/usr/local/bin/xv " (make-graph-3d lis pos n how)))))
途中の make-graph-3d は、省いてしまいましたが、1引数だけ追加してます。 show3dで受けとった、opt を、そのまま、gd-data まで、持ち回ろうとしたら、gaucheに文句を言われてしまったので、こんな不格好な体裁になってしまいました。
(show3d lis 0 10 'fft)
のように、'fft を追加すれば、fftの結果が表示されます。
FIREFOX HACKS'
私の記憶では、タイトルと同名の本が出てたような ... 文句を言われそうなので、プチ改名して ' を付けておきました。(Haskell風)
この間、firefoxの双子問題が発生した時、設定ファイル類を覗いてみたのですが、 面白そうなのがあったので、ちょいと触ってみます。
[sakae@fb ~]$ cd .mozilla/firefox/wgw440mi.default/ [sakae@fb ~/.mozilla/firefox/wgw440mi.default]$ file *db *sqlite cert8.db: Berkeley DB 1.85 (Hash, version 2, native byte-order) key3.db: Berkeley DB 1.85 (Hash, version 2, native byte-order) secmod.db: Berkeley DB 1.85 (Hash, version 2, native byte-order) content-prefs.sqlite: SQLite 3.x database, user version 3 cookies.sqlite: SQLite 3.x database, user version 2 downloads.sqlite: SQLite 3.x database, user version 8 formhistory.sqlite: SQLite 3.x database, user version 1 permissions.sqlite: SQLite 3.x database, user version 1 places.sqlite: SQLite 3.x database, user version 6 search.sqlite: SQLite 3.x database urlclassifier3.sqlite: SQLite 3.x database, user version 5 webappsstore.sqlite: SQLite 3.x database
Key/Value-store の代表である、オラクルBDB や、数年前に何かの金賞を取った、SQLite3が、惜しげもなく使われています。さて、何を保存してるんでしょうか? 楽しいHackの始まりです。
(注; dir名になっている wgw440mi は、皆違うはずです。機密性を高めているんですね。私のが公開されちゃってますが、この記事の後、全て削除して再作成しますんで、悪い気を起こさないでね)
BDBを見るぞ
まずは、簡単そうな BDB を調べてみます。えっと、何語を使う? 久しぶりに Rubyかな。で、はたと指が動かなくなりました。記憶力減退には、 るびきちさんの逆引きRuby が、良く効きそうです。希少価値があるそうですが、田舎では手に入りません。
[sakae@fb ~/.mozilla/firefox/wgw440mi.default]$ cat ~/scandb.rb #!/usr/local/bin/ruby require "dbm" dbfile = ARGV.shift d = DBM.open( dbfile ) x = d.keys.sort x.each do |k| v = d[ k ] printf( "%s --> %s\n",k,v ) end d.close
なんともなコードですが、やっと絞り出しました。笑わないでください。では、早速実行してみます。
[sakae@fb ~/.mozilla/firefox/wgw440mi.default]$ ~/scandb.rb cert8
のように、.db を省いて指定する必要があります。(cert8.db のように指定してしまうと、cert8.db.db のように、新たにファイルが作成されてしまします)で、どうやっても、画面が乱れてしまいます。結論は、value は、binary なんですね。
こういう時は、退散しちゃうのが一番です。次は、sqliteの方ですね。は、良いのですが、長くなりそうなので、to be continue.
おまけ
[sakae@fb ~/.mozilla/firefox]$ ls profiles.ini wgw440mi.default/ [sakae@fb ~/.mozilla/firefox]$ cat profiles.ini [General] StartWithLastProfile=1 [Profile0] Name=default IsRelative=1 Path=wgw440mi.default
なるほど、先程、秘密のdirって書いたけど、ここに登録されてたのね。馬鹿みたいに、 全部消して作り直さなくても、修正の手順が分かったわい。出鱈目な、文字列を作るには 例えば、こんなのをどうぞ。
#!/usr/local/bin/ruby leng = ARGV.shift.to_i leng = 12 if leng == 0 passwd = "" str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\#\$\%\&\=\-\\\@\*\:\+\;\_" str = str + str + str[0,50] srand rand($$) for i in 1..leng ran = rand(100)+Time.now.usec.to_s[0,2].to_i passwd << str[ran,1] end print passwd,"\n"
[sakae@fb ~]$ ./pgen.rb 13 NrGrfoVK2f+xA
他にも、大文字小文字数字記号の割合を指定して、ランダムな文字列を作成する、スクリプトが有ったはずだけど、今は見当たりません。