2012/02/23(Thu) Ethna がインストール出来ない
■ Ethna がインストール出来ない
そろそろ Ethna に恩返しようと思い、何か commit 出来る事を探そうと、インストールを試みたら。
% pear -V PEAR Version: 1.7.1 PHP Version: 5.2.6-1+lenny16 Zend Engine Version: 2.2.0 Running on: Linux gw 2.6.26-2-686 #1 SMP Wed Sep 21 04:35:47 UTC 2011 i686 % sudo pear channel-discover pear.ethna.jp [sudo] password for yoya: Discovery of channel "pear.ethna.jp" failed (channel-add: Cannot open "http://pear.ethna.jp/channel.xml" (File http://pear.ethna.jp:80/channel.xml not valid (received: HTTP/1.1 404 Not Found )))
初めに結論
- HTTP/1.1 の Host ヘッダが pear.ethna.jp:80 だと 404 返すみたい。:80 を外せば 200 が返る。
- pear コマンド(1.7.1)が使う PEAR_Download が勝手に :80 つけてアクセスするので NG
- pear 1.9.1 で試した所では問題なかった。
対処
if ($lastmodified === false || $lastmodified) {
$request = "GET $path HTTP/1.1\r\n";
- $request .= "Host: $host:$port\r\n";
+ $request .= "Host: $host\r\n";
} else {
$request = "GET $path HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
}
以下、調査。
エラーの場所
$loc = $downloader->downloadHttp($params[0], $this->ui, $tmpdir, null, false);
var_dump($params); // ← 追加。
↓
array(1) {
[0]=>
string(32) "http://pear.ethna.jp/channel.xml"
}
あれ。ここでは :80 ついてない。
HTTP 叩いてみた
% telnet pear.ethna.jp 80 Trying 207.97.227.245... Connected to ethna.github.com. Escape character is '^]'. GET /channel.xml HTTP/1.1 Host:pear.ethna.jp:80 HTTP/1.1 404 Not Found Server: nginx/1.0.12 Date: Wed, 22 Feb 2012 16:12:03 GMT Content-Type: text/html Content-Length: 15773 Connection: keep-alive
% telnet pear.ethna.jp 80 Trying 207.97.227.245... GET /channel.xml HTTP/1.1 Host:pear.ethna.jp Connected to ethna.github.com. Escape character is '^]'. HTTP/1.1 200 OK Server: nginx/1.0.12 Date: Wed, 22 Feb 2012 16:13:21 GMT Content-Type: text/xml Content-Length: 797
ちょっと不安になったので。
HTTP/1.1 の仕様によれば、port 指定も許されるはず。
apache から nginx に移る時に問題になるかもと不安になったので、 apache に port 付き Host を送って試してみた。
yoya@yoya:~$ telnet awm.jp 80 Trying 49.212.17.121... Connected to awm.jp. Escape character is '^]'. GET /~yoya/ HTTP/1.1 Host: pwiki.awm.jp:80 HTTP/1.1 400 Bad Request
Apache でも駄目かな。
エラー文言からして apache.conf に :80 の VirtualName を明示的に入れても対応出来なさそうだし。
本気で検証するなら apache のソース見た上で色んな設定でゴニョゴニョするのを、複数のバージョンで試すけど、とりあえずココまで。
■picotube のプレイリスト吸出しブックマークレット(5)
↓これの続き
http://d.hatena.ne.jp/yoya/20120219/picotube
しつこいですが、今回でようやく納得バージョンです。
(そして相変わらず IE は置いてけぼり)
javascript:l='';t=$(".main_search_thumbnail");for(i=0;n=t[i],i<t.length;i++)if(p=$(n).attr('data-preview'))l+=p+' '+$(n).attr('data-title')+"\n";alert(l);
改善点
プログラムを作る過程
全て、Chrome で試して、動いてから FireFox で最終確認。
- main_search_thumbnail に欲しい情報がある事に気付く
javascript: l = ''; t = document.getElementsByClassName('main_search_thumbnail'); for (i = 0 ; i < t.length ; i++) { n = t[i] if (p = n.getAttribute('data-preview')) { l += p + ' ' + n.getAttribute('data-title') + "\n"; } } alert(l);
- スペースを削減し、ブロックの括弧も無くす
javascript: l=''; t=document.getElementsByClassName('main_search_thumbnail'); for(i=0;n=t[i],i<t.length;i++) if(p=n.getAttribute('data-preview')) l+=p+' '+n.getAttribute('data-title')+"\n"; alert(l);
- jQuery を使って更にシンプルに
javascript: l=''; t=$(".main_search_thumbnail"); for(i=0;n=t[i],i<t.length;i++) if(p=$(n).attr('data-preview')) l+=p+' '+$(n).attr('data-title')+"\n"; alert(l);
心残り
main_search_thumbnail で一覧を取ったら曲の名前、URL のエントリと別に画像だけのエントリも混ざっていたので、data-preview (= youtube のURL) がないエントリを読み捨てる事にしましたが、もう少し良い方法がないか考え中。
※ IE 未対応はあえて心残りじゃない事にしておく。気が向いたらで。
■PHPOpenGL の OSMESA のワーニング
PHPOpenGL をインストールした環境で apache を動かすと
[Wed Feb 22 02:35:44 2012] [error] [client 192.168.1.12] PHP Notice: Constant OSMESA_MAJOR_VERSION already defined in Unknown on line 0, referer: http://192.168.1.1/~yoya/php/swfed/test1.php [Wed Feb 22 02:35:44 2012] [error] [client 192.168.1.12] PHP Notice: Constant OSMESA_MINOR_VERSION already defined in Unknown on line 0, referer: http://192.168.1.1/~yoya/php/swfed/test1.php
のような警告が大量に出るので対処しました。
osmesa_init の中で定数定義(REGISTER_LONG_CONSTANT)を行っていますが、それを RINIT から呼んでいたので、何度も呼ばれてこうなったと。
2012/02/22(Wed) SWFEditor 0.54 をリリースしました
■SWFEditor 0.54 をリリースしました
メモリリークの修正がメインです。
不具合修正
- purgeUselessContent のメモリリークを修正しました。(0.52 で混入した不具合です。Button オブジェクトに ActionScript が割当たる時に発生します)
- PlaceObject の CXFORM 省略フォーマットに対応しました。(レアケースです)
追加機能
- CharacterID (image_id, shape_id, sprite_id 等)としてメソッドに NULL を渡した時に警告を表示するようにしました。
気になる動く
メモリリークチェック処理で以下の場所が怪しいと出ていますが、対応するコードを見ても問題ないので、チェック処理自体に問題がないか疑ってます。
XXX (176829) ptr=0x98d9d38 (/home/yoya/git/swfed/src/bitstream.c, 105) XXX (176830) ptr=0xbd13330 (/home/yoya/git/swfed/src/bitstream.c, 163) XXX (0) ptr=0x98d9d38 (/home/yoya/git/swfed/src/swf_tag_shape.c, 68)
尚、これが出るかは SWF ファイルの構造次第で、かなりのレアケースです。(大量に SWF をテストした時にたまに発生します。多分普通には出ないはず)
2012/02/21(Tue) SWFEditor 0.53 をリリースしました
■SWFEditor 0.53 をリリースしました
0.52 の修正リリースです。
不具合修正
- php-5.3.10 MPM worker 環境でコンパイル出来ない不具合を修正しました。
- replacePNGData が動かない不具合を修正しました。
- ボタンがある時に purgeUselessContents と swfInfo メソッドで失敗する不具合を修正しました。
いずれも致命的な不具合の為、swfed-0.52 は欠番とします。
すみません。すみません。すみません。
制限事項
- 実害は殆ど無いのですが、初回リリースからずっと、PlaceObject の処理に不具合があるのが判明しました。次回で修正します。
- Flash Lite 1.1/2.0 では画像をディスプレイリストに置くのに PlaceObject2 を使う場合が殆どですが、稀に PlaceObject を使う事があって、かつ、CXFORM を省略する形式の場合に、正しく処理できません。
- 上記の条件に合うと、replaceMovieClip や purgeUselessContents を読んだ時に、エラー出力 (apache の場合は error.log) に bitstream モジュールに関係する数行の警告が出ます。
↓エラー例
bitstream_getbit: bs->data_len(5) <= bs->byte_offset(5) bitstream_getbit: bs->data_len(5) <= bs->byte_offset(5) bitstream_getbit: bs->data_len(5) <= bs->byte_offset(5)
2012/02/20(Mon) IO_Bit 2.0.9 リリースしました
■IO_Bit 2.0.9 リリースしました
- hasNextData の不具合修正です。
bit offset を見てなかったので、読み出し中オフセットのバイト境界のキリが悪い時(bit offset が 1 以上の時)に、正しい boolean値を返さない事がありました。(足りないのに true を返す時があります)
2012/02/19(Sun) picotube のプレイリスト吸出しブックマークレット(4)
■picotube のプレイリスト吸出しブックマークレット(4)
この辺の続き。
- http://d.hatena.ne.jp/yoya/20120213/picotube picotube のプレイリスト吸出しブックマークレット
- http://d.hatena.ne.jp/yoya/20120214/picotube picotube のプレイリスト吸出しブックマークレット(2)
- http://d.hatena.ne.jp/yoya/20120216/picotube picotube のプレイリスト吸出しブックマークレット(3)
再生中はプレイリストの1つ目だけ DOM のインデックスが違うので、その対応。
あと、split 不要なのに気付いて修正したら、少し綺麗になりました。
javascript:pl='';n=$('#main_searchPlayListContent')[0].childNodes;for(i=0;i<n.length;i++){pl+='http://www.youtube.com/watch?v='+n[i].id.substr(4)+"%20"+n[i].childNodes[(i?3:1)].childNodes[3].innerHTML+"\n";}alert(pl);
プレイリストを表示した状態で、上記ブックマークレットを実行して下さい。
# 再生していない時は [(i?3:1)] は [3] で動かして下さい。
尚、FireFox と Chrome でしか動きません。(IE だとエラーになります)
- 一応、インデントしたもの
javascript: pl = ''; n = $('#main_searchPlayListContent')[0].childNodes; for (i = 0 ; i < n.length ; i++) { pl += 'http://www.youtube.com/watch?v=' + n[i].id.substr(4) + " " + n[i].childNodes[(i?3:1)].childNodes[3].innerHTML + "\n"; } alert(pl);
何処かに facebook と連動したサーバを立てて、そこに POST したいものです。
実行結果
http://www.youtube.com/watch?v=F9ZqYYT7WaE パジャマのままで/WinFast PxVC1100 http://www.youtube.com/watch?v=zU-4NIDpMNc 魔女っ子メグちゃん OP/ED http://www.youtube.com/watch?v=RPZRSpvqOss 魔法少女ララベルOP http://www.youtube.com/watch?v=Jd9W-Q6PbnQ 花の子ルンルンOP http://www.youtube.com/watch?v=OYvjCpaaDMc Candy Candy Ending Theme Japanese 1 http://www.youtube.com/watch?v=2fqXi_x6zgI 小公女セーラ ひまわり (下成 佐登子) <略>

