DSAS開発者の部屋に絶望した
フィードが前文配信じゃなくなってるYO!
ラボ系ブログ(といっていいのか)では多分一番熱心に購読しているのでよけい絶望した。
HTML::TreeBuilder::XPath + WWW::Mechanize なスクリプトを永続化させようとしてはまった
WWW::Mechanize
でコンテンツとってきて TreeBuilder::XPath
で解析するようなのを今まで単機能スクリプトなどでは便利に使っていたのだけど、それを永続的なプロセスで使おうとしたらメモリ使いまくってとんでもないことになったという話。
まずどんどんメモリが増えていくのでタイミングよく読んでいたjrockwayの記事などを参考に、
perl -MDevel::Leak::Object=GLOBAL_bless
付きでスクリプトを実行してみる。
少しソースをいじってまずはループを一回で止めるようにしたときの出力
Tracked objects by class:
Config 1
DBI 1
DBI::var 5
DBIx::Class::ResultSource::Table 1
DateTime::Duration 2
DateTime::Format::Builder::Parser 3
DateTime::Format::Builder::Parser::Regex 10
DateTime::Infinite::Future 1
DateTime::Infinite::Past 1
DateTime::Locale::en 1
DateTime::TimeZone::Asia::Tokyo 1
DateTime::TimeZone::Floating 2
Encode::Internal 1
Encode::utf8 2
Errno 1
FileHandle 3
HTML::Element 1799
HTML::Element::_travsignal 5
HTML::TreeBuilder::XPath 1
XML::XPathEngine 1
XML::XPathEngine::Expr 19
XML::XPathEngine::Function 6
XML::XPathEngine::Literal 9
XML::XPathEngine::LocationPath 4
XML::XPathEngine::Root 1
XML::XPathEngine::Step 9
utf8 2
つぎ、少しループしてから止めたときの出力
Tracked objects by class:
Config 1
DBI 1
DBI::var 5
DBIx::Class::ResultSource::Table 1
DateTime::Duration 2
DateTime::Format::Builder::Parser 3
DateTime::Format::Builder::Parser::Regex 10
DateTime::Infinite::Future 1
DateTime::Infinite::Past 1
DateTime::Locale::en 1
DateTime::TimeZone::Asia::Tokyo 1
DateTime::TimeZone::Floating 2
Encode::Internal 1
Encode::utf8 2
Errno 1
FileHandle 3
HTML::Element 7378
HTML::Element::_travsignal 5
HTML::TreeBuilder::XPath 4
XML::XPathEngine 1
XML::XPathEngine::Expr 19
XML::XPathEngine::Function 6
XML::XPathEngine::Literal 9
XML::XPathEngine::LocationPath 4
XML::XPathEngine::Root 1
XML::XPathEngine::Step 9
utf8 2
となって、TreeBuilderがなんかやばいことになってるくさい。
で、マニュアル読んでたら $tree->delete
やれよ!って書いてあった。
TreeBuilderは明示的にdeleteメソッド呼ばないと綺麗になくならないらしい。たぶん常識なのだが、いままでやってなかったわぁ。。
これやったらずいぶんメモリ増えなくなった、でもまだなんか少しずつ増える。でも、Devel::Leak::Objectの出力は処理数あげてもかわらない。
あとはmechがあやしいなぁとおもって毎回newするようにしたらメモリ増えなくなったのであれれとおもってマニュアル見たら、デフォルトではヒストリを無限に記録していくらしい。
なので
WWW::Mechanize->new( stack_depth => 1 )
とかしたら大丈夫になった。これでとりあえず大丈夫かな。
まぁ結論としては、マニュアル読めということです。あと Devel::Leak::Object は簡単で便利。
携帯にSMSで
こんなのがとどいた
Subject: 株)ORSからのお知らせ
(株)オンラインサービス担当 仲田と申します。 この度、現在お客様ご使用中の携帯端末より、 認可ネットワーク認証事業者センターを介入し、発信者端末電子名義認証し、以前ご登録いただいた、「総合情報サイト」から、無料期間中に退会処理がされてない為 に、登録料金が発生し、現状未払いとなった状態のまま長期放置が続いておりますが、本通達より 再度これ以上放置が続きますと、利用規約に伴い、住民票取得、お客様の身辺調査了承後後日 回収機関により、調査費 回収費用含め、ご自宅、お勤め先、第三者への満額請求と代わります。
現在調査保留中の額面にて、処理をご希望であれば、早期に精算 退会処理データ抹消手続きをお願いします。 早急に、 03-3526-3618 担当 仲田迄 受付時間 平日 09:00〜18:00迄
尚 ご連絡なき場合 手続き開始ご了承とさせて頂きます。
総合情報サイトて...w ちゃんとサービス名書かなきゃ釣れようがないきがするけど。
これが架空請求ってやつか。はじめてきたなぁ。
てか、株)オンラインサービスでORSって。。。
差し出し人電話番号は 08030849942
ブラウザサイズ
この間までsubtechグループのトップにistブログパーツがはられてて、みんながうぜぇメニュー押せねぇ!とかゆってたのを聞いて「ハァ?ドンだけブラウザサイズ小さいんだよ」とか思ったりしてた。
とか思ってたたりしたんだけれども、みんなはもしかして画面サイズが大きくなっても今までどおりのブラウザサイズをつかっているんだろうか。僕はディスプレイが大きくなれば大きくなっただけブラウザサイズを広げてしまってるなぁ。
個人レポジトリを共有しよう!
昨日twitterでつぶやいていたのだけど、
みんながそれぞれ作って公開してる公開レポジトリを一緒くたにしちゃいたい。参加してる全員がどのファイルもみたり変更したりできるような。
パッチ送られてくる代わりに「後で見とくからコミットしといて」とかいえたりとか、つくりかけで放置したもので他の人が興味もったら続き作ってもらうとか、メンテするのめんどくなったのだれかにやってもらうとか、突発的に誰かと一緒にプロジェクト始めたりとか、できる!
で、それやりたくてとりあえずgoogle codeにレポジトリ作ろうとしたんだけど、あそこはなんかレポジトリ全体でライセンスをひとつ決めないといけないようなのでだめだ。
誰か信用できる人ホスティングしてくれないかなー。shibuya.plの人とか、yappoさんとか。
htpasswdだけインストールしたい!
と思ったのだけど、htpasswdとかはapache2-utilsってパッケージにわけられていてそれだけ別にインストールできるようで、一瞬で解決。
$ sudo dpkg -L apache2-utils
/.
/usr
/usr/bin
/usr/bin/dbmmanage
/usr/bin/htdbm
/usr/bin/htdigest
/usr/bin/htpasswd
/usr/sbin
/usr/sbin/ab
/usr/sbin/checkgid
/usr/sbin/logresolve
/usr/sbin/rotatelogs
/usr/sbin/htcacheclean
/usr/sbin/check_forensic
/usr/sbin/split-logfile
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/htdbm.1.gz
/usr/share/man/man1/htpasswd.1.gz
/usr/share/man/man1/dbmmanage.1.gz
/usr/share/man/man1/htdigest.1.gz
/usr/share/man/man8
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/checkgid.8.gz
/usr/share/man/man8/ab.8.gz
/usr/share/man/man8/logresolve.8.gz
/usr/share/man/man8/check_forensic.8.gz
/usr/share/doc
/usr/share/doc/apache2-utils
/usr/share/doc/apache2-utils/copyright
/usr/share/doc/apache2-utils/NEWS.Debian.gz
/usr/share/doc/apache2-utils/changelog.gz
/usr/share/doc/apache2-utils/changelog.Debian.gz
Class::Component
こういうのは経験的にweakenったほうがいい希ガス。なんともいえませんが。