These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

こんばんわ♪ 現在は5月9日(木)1時26分。 1時を過ぎました。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2011年01月 来月
01
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2011年01月01日(土)

freebsd-swfed*FreeBSD ports graphics php5-swfed

自作の SWF Editor が FreeBSD の ports に commit されました。 このまま行けば、次バージョンの 8.2 RELEASE に含まれる予定です。
わーぃ \(^o^)/

2011年01月11日(火)

Zend Engine 勉強会の会場確保


GREEさんのセミナールームを2/16(水)で借りられました。
開催の要領は roppongi.st を参考に設計中です。今しばらくお待ちを。

案:

roppongi.st からパクり (人数だけ増やす)
  • 日時: 2011年2月16日(水) 20:00 to 23:00
  • 定員LIMIT: 100人
  • 会場: グリー株式会社 (東京都港区六本木6-10-1 六本木ヒルズ森タワー)
  • 懇親会参加費: 2000円 (参加するか選択)
  • 発表募集: 一般枠(10,20,30,40分)、LT枠(5,10分)
  • 入館管理: 実名リスト必要。当日名刺or身分証明で照会

課題:

把握するべき事。
  • 会場までの案内フロー
  • 会場設営の手順
  • ケータリングの手続き
  • 発表枠の調整方法
  • 実名リストの管理方法 (プライバシー怖い)
  • 当日の会場運営 (案内、タイムキーパー、UST、諸々…)
他にもまだ沢山ありそう…

2011年01月12日(水)

[phpopengl] glReadPixels はオフスクリーンで動かない?

OpenGL をバックエンドで使う為にディスプレイ表示せずに画像ファイルだけ生成しようと、glReadPixels の PHP バインディングを実装したのですが、どうやら、ディスプレイ表示抜きで使うのは無理そう。
glReadPixelsはVRAMに書き込まれたデータをメモリ上へ取得
するAPIです.それゆえ,VRAMに書き込まれないと各ピクセルの
データを取得できないので,オフスクリーンバッファを用いて
描画するときにはglReadPixelsは使用できません.
何かの環境(多分、MacOSX)で display の callback を外したらウィンドウを開かず glReadPixels を使えた記憶があるのですが、 Debian Linux で試すとウィンドウが表示されます。
OS 毎にオフスクリーンで画像生成する方法があるようですが、 とりあえずウィンドウを開かずに描画出来れば我慢できそうなので、 そこから攻めてみようかと思います。
(パフォーマンスの観点でもメリットがあるかもしれないし)

続き:


2011年01月13日(木)

ZendEngine勉強会 ATND下書き

ATND は下書き出来ないのでココで。まだまだ説明足りない気がします。要確認。
タイトル: ZendEngine勉強会@東京
サブタイトル: PHP拡張のすゝめ
内容: <後述>
日時: 2011/2/16 20:00-23:00
定員: 100
会場: グリー株式会社 セミナールーム
住所: 東京都港区六本木6-10-1 六本木ヒルズ森タワー
URL: http://groups.google.com/group/php-zendengine
アンケート: <後述>

内容:

PHP拡張を主眼にした ZendEngine 勉強会を実施します。

h1. ZendEngine勉強会@東京

h2. スケジュール

- 19:30 開場
- 20:00 発表開始
- <発表枠>
- 22:00-23:00 懇親会

h2. 発表者募集中

ネタ募集中です。

PHP Zend Engine & extension 周りでうんちく話したいひとや、
面白い extension を知ってる、又は作ってるので自慢したい。といった方、是非!
http://groups.google.com/group/php-zendengine の ML へ、
発表タイトル、発表時に名乗る名前、発表時間(10〜30min)をセットでご連絡下さい。

h2. ヒルズ入館手続きについて

事前に実名リストをビル管理側に提出する必要がある為、
参加申し込みのアンケートで実名をご記入下さい。

オフィスタワー正面入り口に特設受付を用意します。
名刺又は本人確認出来るものをお持ちください。

h2. 懇親会

22:00 から会場で懇親会を開きます。会費は 2,000円です。
懇親会開始時に徴収します。会場にプロジェクタを設置して
おきますので、シャイな方はネタを用意して LT 発表での
ブロードキャストなコミュニケーションをお勧めします。

h1. 今後

@東京の勉強会が無事に終われば、2回目,3回目を計画します。
東京以外の都市での開催要望があれば承ります。詳細は後ほど。

アンケート:

六本木ヒルズ森タワーでは、入館者の名簿を提出する必要があります。必ず実名をお書きいただけますようお願いいたします。 
テキスト入力 
懇親会は参加されますか? 
セレクトボックス => ○参加 , ×不参加 

参考:

不安:

1000円だと足りない。1500円はお釣りが大変。2000円だと高すぎない? どうしよう…
懇親会 1時間って長いかな。

2011年01月14日(金)

ZendEngine勉強会@東京 ATND募集開始しました

よろしくお願いいたします。

募集で最低限必要な情報:

  • 開催目的
  • 場所(勿論開場を予約した上で)
  • 日時、タイムスケジュール
  • 懇親会の会費 (任意かどうかも)
  • 手伝い必須:

    慣れてない自分は、全ての役割を割り振って指示に回らないとダメだと思う。
    中の人に頼む事
    • 案内 (下の階で机置いて待ち構える) 遅れてきた人対応で電話番号公開する?
    • 設営準備 (無線準備、プロジェクタ準備)
    • 懇親会のケータリング (社員しか入れない場所で受け渡しがある)
    • Ust 放送
    中の人に限らないもの
    • 司会 (自分。だよね…)
    • タイムキーパー
    • ドア番 (遅れてきた人が入ってきた時にちゃんと閉める)
    • 設営 (椅子並び変え、プロジェクタ準備、コンセント他)

    TODO:

    • 発表者募集と枠調整
    • 会場運営の準備や申請
    • 手伝ってくれる人を探す
    • 裏方のタイムスケジュール作成
    もっと沢山あるはず。

    2011年01月21日(金)

    Zynga Japan さんとこで話してきた事

    先週の木曜日に、Zynga Japan さんのオフィスにお邪魔して色々と話してきました。
    とりあえず僕が口を開けば SWF しか出てきません。(キリっ
    NDA 的な事は話してないので、ブログにまとめてみます。
    # 隠し玉のネタも話してきましたが、実装してから公にしたいので秘密 :-)

    SWF のおさらい:

    ヘッダ構造と画像系のタグ。制御系タグとディスプレイリスト。
    gordon.js を知る為の前提知識の復習。

    gordon.js について:

    JS 製の Flash Player。 但し v1 しか対応してない。
    JS で SWF を parse して Shape 構造を Placeタグで配置するのを SVG で表現して、setInterval で ShowFrame までの制御構造を読んで SVG のノードを DOM につけ外しする事でアニメーションしたり、JS の mouse や button のハンドラで、内部イベントを発生させたり、ActionByte コードを 1 operand ずつ読んで VM っぽい構造を操作して動く。
    最近は、シンボルによる multi timeline に対応しようとしてるコードがあるけど、オブジェクトの取り回しに失敗してるっぽくて全然動かない。Worker スレッド使ってて、ちょっと嫌な感じがする。(デバッグしにくいし同期とか怪しくなるし微妙)

    gordon.js の対案:

    gordon.js は js でバイナリパースしたり、コンテンツを base64 で展開したり、ベクトル画像を全て SVG で展開してコマ毎に DOM につけたり外したりしてる。
    とにかく重たそう。
    透明度付き画像の扱いに難儀してるのを考えると、バックエンドでコンテンツリポジトリを持って URL でアクセスする事にして、画像はすべてα補正を戻した PNG 画像に変換して使ったり、SVG 構造も表示枠の大きさに応じてデフォルメしたりすれば、かなり軽くなるんじゃない?
    ActionByteCode を逆アセして JS (変数名に prefix 付けるとかして、ほぼそのまま展開するとかして) で出力すると fetch exec が一段階軽くなるよね。という話もあったけど、Flash Lite で複雑な Script を組むのはあまり無さそうなので、後回しがよさそう。

    SWFEditor:

    setActionVariables というActionScript の変数代入イメージを、1 frame 目に挿入するメソッドを紹介。そんな処理なので 1 frame 目に戻った時にまた初期化される罠がある。
    FlashLite の王道として 1frame 目はダミーで 2frame 目が実質的な先頭コマになる事が多いので大丈夫なはず。。。 setActionVariables で値の入った変数は定数として扱って、別の変数に代入して使いまわすのが良いと思う。
    setShapeAdjustMode の紹介。サイズの違う画像を入れ替えた場合に枠に合わせた処理を入れたので、その枠への合わせ方を指定するメソッド。 これを作る為にアフィン変換の処理を書いたので、その処理を直接呼ぶメソッド(applyShapeMatrixFactor)も用意してる。アフィン変換なので本来は傾ける事も出来るが、とりあえず角度を指定して回転させるインターフェースを用意した。ただ、(0,0)原点での回転なので扱いづらい。180度回転する枠の外にはみ出ちゃう。実験段階だし、処理を変える可能性が高い。
    それを実装するにあたって、DefineShape タグを一年近くいじってきてて、とても面白い構造をしていたのでその紹介。
    画像のスケールに応じてベクトルデータを省略する処理を作っているとも。
    縮小して表示する場合は、そもそも細かいベクトルは要らないので、線分の真ん中を端折るとか。そういう処理を実装中。
    あと、色々と改善提案も伺いました。もう少し具体的なイメージを固めたら実装に入ります。

    その他:

    • FlashLite(SWF動的生成)勉強会お願いしますー。
    • ZendEngine 勉強会2月の真ん中にしました。発表お願いしますー。
    • また遊びに来させて下さい。お願いします。
    お願いばっかりで、すみませんw

    2011年01月23日(日)

    今日は高校の後輩にドラムを教えてました

    高校生の演奏を見てると努力不足より、ノウハウが伝わってない所が大きいと思ったので、最近は教えるモードに入ってます。(自分は自分で隙見て練習するけど)
    今日は主にベードラとハイハットのへダルの踏み方をレクチャ。
    自分はただ適当にへダルを踏んでるつもりが、当たり前のように色々と細かい配慮をしていた事に気付かされました。
    その当たり前を再発見して人に教えるので、自分にとっても勉強になります。

    ポイント:

    ポイントは基本タメは大目に、ペダルを踏む時は音がまとまるようにする。
    へダルを緩める時は次に必要な音量に応じて振りかぶる大きさを決めるのと、ハイハットでオープンにもっていく時はデジタル的に力を加減する所。
    特にハイハットのオープンとクローズは、1 か 0 かはっきりした音色の違いを出さないといけないので、力の下限が中途半端にならないよう注意が必要です。
    足での細かい操作は日常生活に無いので難しいけれど、数を練習して慣れれば何とかなります。
    また、練習が少なくても上記の事は知ってるだけで音が変わると思うので、あとどれだけ上達するかは本人の努力次第って事で。

    2011年01月24日(月)

    FizzBuzz に挑戦

    Twitter の TL上で FizzBuzz って単語が飛び交っているので、挑戦してみました。
    (take1,2,3 合わせて所要時間5分、気分転換にイイネ)

    参考:

    お題:

    1から100までの数をプリントするプログラムを書け。
    ただし3の倍数のときは数の代わりに「Fizz」と、
    5の倍数のときは「Buzz」とプリントし、
    3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
    

    take1:

    何も考えず素直に作ってみました。
    <?php
    foreach (range(1, 100) as $n) {
        if ($n % 3 == 0)  {
            if ($n % 5 == 0)  {
              echo "FizzBuzz\n";
            } else {
              echo "Fizz\n";
            }
        } elseif ($n % 5 == 0)  {
              echo "Buzz\n";
        } else {
            echo "$n\n";
        }
    }
    

    take2:

    %5 が二カ所あるのが気持ち悪いのでまとめてみました。
    <?php
    foreach (range(1, 100) as $n) {
        $d = '';
        if ($n % 3 == 0)  {
            $d .= "Fizz";
        }
        if ($n % 5 == 0)  {
            $d .= "Buzz";
        }
        if ($d === '') {
            $d = $n;
        }
        echo "$d\n";
    }
    

    take2':

    PHPでは忌み嫌われる三項演算を多用してみました。
    <?php
    foreach (range(1, 100) as $n) {
        $d = ($n % 3)?'':"Fizz";
        $d .= ($n % 5)?'':"Buzz";
        echo ($d?$d:$n)."\n";
    }
    
    三項演算子を入れ子にすれば更に短くなりそうですが、その一線は越えたくないです…

    take3:

    フラグ使えばキレイにかけないかな? でもコードは余計長くなったような気も…
    <?php
    foreach (range(1, 100) as $n) {
        $b3 = ($n % 3)?0:1;
        $b5 = ($n % 5)?0:2;
        switch ($b3 | $b5) {
            case 0:
                 echo "$n\n";
                 break;
            case 1:
                 echo "Fizz\n";
                 break;
            case 2:
                 echo "Buzz\n";
                 break;
            case 3:
                 echo "FizzBuzz\n";
                 break;
        }
    }
    

    take3':

    4パターンを fmt にして printf 使うと短くなりますね。
    $fmt = array('%d', 'Fizz', 'Buzz', 'FizzBuzz');
    foreach (range(1, 100) as $n) {
        $b3 = ($n % 3)?0:1;
        $b5 = ($n % 5)?0:2;
        printf($fmt[$b3 | $b5]."\n", $n);
    }
    

    perl でも作ってみた:

    foreach (1 .. 100) {
        $a = ('FizzBuzz', 'Fizz', 'Buzz', 0)[($_ % 3 > 0) + 2 * ($_ % 5 > 0)] || $_;
        print "$a\n";
    }
    
    || $_ とかトリッキーな事しなくても 0 を $_ にすればよいですね。

    perl のを短くしてみた:

    foreach (1 .. 100) {
        $_ = ($_, 'Fizz', 'Buzz', 'FizzBuzz')[!($_ % 3) + 2 * !($_ % 5)]."\n"; print
    }
    
    奇麗に記述できます。

    所感:

    噂が本当だとすると、僕は某Y社には入れそうにないですw

    2011年01月28日(金)

    SWF DefineShape parser

    DefineShape1,2,3のバイナリを切り出すプログラムをPHPで作ってみました。

    プログラムの概要:

    $this->_shapeBounds = IO_SWF_Type::parseRECT($reader);
    $this->_parseFILLSTYLEARRAY($reader);
    $this->_parseLINESTYLEARRAY($reader);
    $reader->byteAlign();
    $numFillBits = $reader->getUIBits(4);
    $numLineBits = $reader->getUIBits(4);
    while ($done === false) {
        $typeFlag = $reader->getUIBit();
        if ($typeFlag == 0) {
            $endOfShape = $reader->getUIBits(5);
            if ($endOfShape == 0) {
                $done = true;
            } else {
                // StyleChangeRecord
                ...
    	    $stateNewStyles = $reader->getUIBit();
    	    if ($stateNewStyles) {
    		$this->_parseFILLSTYLEARRAY($reader);
    		$this->_parseLINESTYLEARRAY($reader);
                    $reader->byteAlign();
    		$numFillBits = $reader->getUIBits(4);
    		$numLineBits = $reader->getUIBits(4);
    	    }
            }
        } else {
            $straightFlag = $reader->getUIBit();
            if ($straightFlag) {
                 // StraightEdgeRecord
                 ...
            } else {
                 // CurvedEdgeRecord
                 ...
            }
        }
    }
    

    実行結果:

    pear channel-discover openpear.org
    pear install openpear/IO_Bit
    pear install openpear/IO_SWF
    
    でインストールして、pear ディレクトリの sample/swfdump.php にファイルを渡すと動作します。
    ShapeId: 1
    ShapeBounds:
            (-7.75, -7.75) - (7.75, 7.75)
    FillStyles:
            solid fill: #0066ff
    LineStyles:
    ShapeRecords:
            ChangeStyle: MoveTo: (-7.75, -7.75)  FillStyle: 0|1  LineStyle: 0
            StraightEdge: MoveTo: (7.75, -7.75)
            StraightEdge: MoveTo: (7.75, 7.75)
            StraightEdge: MoveTo: (-7.75, 7.75)
            StraightEdge: MoveTo: (-7.75, -7.75)
    
    こんな感じです。

    TODO:

    SVG に変換して表示できれば…

    2011年01月31日(月)

    SWF Shape サイズ削減

    Flash の SWF を parse して build するだけのプログラムを作ってみました。 ここから更にベクター情報をデフォルメするつもりですが、とりあえず、バイナリを構築し直すだけで少しサイズが減ったので報告。

    プログラム:

    サイズ比較:

    処理前
    magic=CWS  version=8  file_length=3166474
     rect=(0, 0)-(550, 300) (f_size=15)
    
    処理後
    magic=CWS  version=8  file_length=3166366
     rect=(0, 0)-(550, 300) (f_size=15)
    

    理屈:

    SWF DefineShape のベクター情報の値は、まず値を格納するのに必要なフィールド長があって、その後ろに実際の値が続きます。
    典型例
    +------------------------------+
    | numBits |  deltaX  | deltaY  |
    +------------------------------+
    <4or5 bits><-numBits-><-numBits->
    
    この numBits が実際に必要な値より大き目にとる事があるようです。
    ギリギリのフィールド長でバイナリを作り直したら、少しだけサイズが減りました。

    新たな課題:

    • ChaneStyleRecord の StateNewStyle があると表示が少し変。
    • これ、Style に追加でなく、Style を入れ替えてる気がする。
    • だとすると、さらに数バイト削れてラッキーですが。

    続き:


    これで、10 日分だよ〜。

    タイトル一覧
    カテゴリ分類
    Database
    JXTA
    Java
    XML
    awm
    bookmark
    keyword
    memo
    news
    research
    Powered by hns-2.19.5, HyperNikkiSystem Project