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

他にも、大文字小文字数字記号の割合を指定して、ランダムな文字列を作成する、スクリプトが有ったはずだけど、今は見当たりません。