yoyaのメモ

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 で試した所では問題なかった。

対処

  • PEAR 1.9.1 の Downloader.php を参考にして1行書き換え。
  • /usr/share/php/PEAR/Downloader.php:L1620-1626
            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);

改善点

  • 前回までのは DOM で何番目に並んでいるかをハードコーディングしていて変更に対して弱く、現状でも再生中でしか動かない残念な動作になっていました。

プログラムを作る過程

全て、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 (= youtubeURL) がないエントリを読み捨てる事にしましたが、もう少し良い方法がないか考え中。

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 をリリースしました

メモリリークの修正がメインです。

不具合修正

  • 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 を返す時があります)

IO_SWF 2.1.8 をリリースしました

不具合修正

  • PlaceObject (2 じゃない方)で CXFORM が省略されるケースで処理がエラーで中断する事がありました。(IO_Bit-1.0.9 側の修正で、IO_SWF は依存をそっちに向けただけの対応です)
  • DefineEditText の dump でインデントが揃ってなかったので見やすいように修正しました。

ツール

  • Actionタグ一覧表示ツールを追加しました
  • Actionタグ削除ツールをシンボルに対応させました。(今までは root の Actionタグしか削除していませんでした)

2012/02/19(Sun) picotube のプレイリスト吸出しブックマークレット(4)

picotube のプレイリスト吸出しブックマークレット(4)


この辺の続き。

再生中はプレイリストの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] で動かして下さい。

尚、FireFoxChrome でしか動きません。(IE だとエラーになります)

f:id:yoya:20120221113458p:image:w640

  • 一応、インデントしたもの
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 小公女セーラ  ひまわり (下成 佐登子)
<略>

メモ

  • 動的な(HTML ソースで見れなくて JavaScript で作られた) DOM を操作するブックマークレットを作る時は、FireBugs から DOM 要素をコピーで吸い出して、それで実験すると楽ですが、コピーの際に閉じ括弧が消えて DOM 構造が変わる事があるのに注意。
  • やっぱり Chrome が便利
  • IE 消えてなくなるといいのに。