MozEmbed の存在を知って以来、もうメロメロぞっこんになって色々遊んでいま
したが、まぁ色々といってもスクリーンショットを撮ってただけなので全然色々
ではありませんが。
・Xvfb を入れる
デーモン化しようと思ったら、なんか ubuntu server 用の設定がどこにも見つ
からなかったので見よう見まねでこしらえました。丸一日かかりました。linux
難しすぎる。
xvfb.txt を /etc/init.d/ にコピー
$ sudo chmod +x /etc/init.d/xvfb
$ sudo update-rc.d xvfb defaults
$ sudo /etc/init.d/xvfb start
※ X11::Xvfb を使うなら一連の操作は要りません。
Xvfb を起動するとなんかフォント系の警告がでまくるので、apt-get でフォント
が沢山入るパッケージを入れます。申し訳ありませんがパッケージ名は忘れまし
た。一日で忘れました。linux 覚えづらすぎる。(追記: xfonts-base でした)
・xulrunner とかを入れる
これだけ指定すればたぶん必要なものは芋づる式に色々入ります。
$ sudo apt-get install pkg-config xulrunner-dev \
libgtk2-perl libgtk2.0-bin libgtk2.0-common libgtk2.0-dev
足りない場合は $ apt-cache search xulrunner で出てくるものを全部入れれ
ばいいです。linux 楽チンすぎる。
・Mozilla::DOM を入れてから Gtk2::MozEmbed を入れる
Mozilla::DOM が無くても Gtk2::MozEmbed が入ってしまうのは罠でしょ……。
Mozilla::DOM を入れる際に libxul.so が見つからない旨のエラーが出るので、
事前に以下の操作を行っておきます。
$ sudo su
# cat >> /etc/ld.so.conf.d/libxulcrap.conf
/usr/lib/xulrunner-devel-1.9.0.14/lib
ctrl-d
# ldconfig
(追記:ubuntu 9.10 で xulrunner-1.9.1.*/lib になったようです)
つーか README に載ってるんですよこれ。README 読まなすぎる。
※ デスクトップ版 ubuntu でこれを行うと firefox-3.5 が起動できなくなり
ます。共有ライブラリを使い分ける方法があると思うんですが Linux が難し
すぎて分かりませんでした。Linux が難しすぎる。
あとは CPAN で入れるだけです。
sudo cpan -i Mozilla::DOM Gtk2::MozEmbed
・スクロールバーを消す
MDC を見ると、スクロールバーをトグルで非表示にする window.scrollbars が
あるので、Mozilla::DOM::Window にも GetScrollBars がありそうな気がしま
すが……無いので他の方法をとりました。
my @elems = $embed->
get_nsIWebBrowser()->
GetContentDOMWindow()->
GetDocument()->
GetElementsByTagName('body');
for my $elem (@elems) {
my $attr;
if ($elem->HasAttribute('style')) {
$attr = $elem->GetAttribute('style');
}
$attr .= '; overflow: hidden;';
$elem->SetAttribute('style', $attr);
}
・ディレクトリを別ける
調子に乗ってあれこれ撮りまくっていたら、ファイルが多すぎてディレクトリを
閲覧するのが困難になってきました。パスを切って分散します。
先人であるところの「はてなブックマーク」の切り方を調べてみると、
/a/b/c/d/e/[0-9a-z]{35}.jpg
というパスになっており、どう見ても SHA-1 でした。
パスの生成に一方向ハッシュを用いると元の名前が連想できず、手動アクセスし
たいときに不便です。手動アクセスをする機会なんかそんなに無い気もしますが、
今回はドメインネームを逆さに連結することにしました。この方法はいずれ破綻
しますが一時の延命には使えます。
sub make_directory_path_from_url
{
my $url = shift;
my ($domain) = $url =~ m{^.*?://(.+?)/};
my $path = join '/', reverse split(/\./, $domain);
return $path;
}
そんなこんなでページショットが撮れるようになりました。
ページショットを撮る時は ScrollTo を使って少しずつ pixbuf に流し込みまし
た。
Flash でフェードインやら skip >> やらをしているサイトは、スクリーンショッ
トを撮ると真っ白とか真っ黒になるのでアホかと思いました。3〜5秒以内に絵
が出てこないサイト(を作るようなデザイナー)は○○○ればいいのにと思いま
した。
終わりです。
こんなマニアックなテクがあるなんて、今まで気づかなかったよ……。
とは言えウェイトが必要な実機だと、タイミングは完全にシーケンス依存なので
実用は難しそうだ。レジスタ書き換えとシーケンス実行が(音源から見て)ゼロ
時間で済んでしまうエミュプレイヤー向けのネタかな。……ネタと言っても、こ
んなテクをどう活用すればいいのか全く思いつかない。単チャネルでフェーザー
効果が得られるかなぁ。
なんの話だか分からない人の方が多いと思いますが、FM音源の話です。