タイトル募集中3.0

しがないITソルジャーの雑記。

入門書購入

PHPフレームワーク Zend Framework入門

PHPフレームワーク Zend Framework入門

ネットの情報だけだとどうしても限界があったので入門書を購入.

ベースになるURLと各Viewの関係が謎だったが,とりあえずbasePath指定すれば統一はされることがわかった.
しかし,その前はどこが基準になってたんだろうか.いまだにわからん.

検証中

まず,デバッグ用の出力を表示する

verbose: true

が効いてない.

普通に導入すると,verboseがtrueの状態でマウスがリンク乗ったりすると

initializedSwiff.Uploader.js (367 行目)
Main::fireEvent "buttonEnter"Swiff.Uploader.js (367 行目)
Main::fireEvent "buttonLeave"Swiff.Uploader.js (367 行目)

こんな風に情報がでるんだけど,ZendFrameworkに乗っけた方はこれがでない.

じゃあ,javascript動いてないんじゃないのか?と思ったけど,mootoolsで要素を隠したりしてる部分はちゃんと動いてるし,ブラウザ側でOFFにしてるわけでもない.

次に,リンク(にはなってないけどリンクになるはずのところ)をクリックすると,何も起こっていないようで実は,ちゃんとアップロードの処理をするflashのobjectが埋め込まれてる.でもリンクになってない.

ということは,リンクを作るところが怪しいなってことで探す.

        • -

これ,ログだしてるのflash側だったのか・・・

んー,javascript側のaddEvent動いてないぞこれ.

大きな問題は解決

たぶん,原因はmod-rewrite使ってことだろうなと勝手に推測.というかそうに違いない.
ZendFrameworkではリクエストは(全て)以下の.htaccessによってフロントコンローラに渡される.

RewriteEngine on
RewriteBase /app/
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

で,まあこれ,デフォルトだとjsは除外されてるからいいんだけど,肝心のflash部分(swf)が除外されてない.
なので,swf呼び出してもフロントコントローラへのリクエスト扱いされて動いてなかったということ.
さらに,ffmepegにエンコードリクエスト投げるところのphpなので,同じようになって返り値もエラー.
ということで,RewiteRuleを少し修正(swfを追加)して

RewriteEngine on
RewriteBase /app/
RewriteRule !\.(swf|js|ico|gif|jpg|png|css)$ index.php

これでinitializedまで動くようになった.

でもこのままだと,ffmpegにリクエスト投げる部分で落ちる.処理してるのがphpなので.
さてどうするか.

おおっと,アップロードも失敗してた.まあこれもphpにpostしてるんだし当たり前か

とりあえず全て解決

RewriteCond %{REQUEST_URI} !/src/(.*)

必要なスクリプトをフォルダに突っ込んで,RewriteCondでそのフォルダ以下は除外.
これで,動くようになった.しかしこれは気持ち悪いな,フレームワークつかってるのに,除外って・・・
Zend_Controller_Request_Httpってのがあるから,できるんだろうけど,面倒だな.
とりあえず他が終わってからにするか.

そういう話ではないのか?

できた?

普通にffmpegAction作って,viewにffmpeg.phtmlを置く
で,jsのリクエストを/app/Up/ffmpeg?name=hoge.avi
のようにする.(Upコントローラってのがあるのが前提でその中のffmpegアクション)
これで,viewで

<?php echo $this->escape($this->name);?>

ってやるとajaxになってるっぽい.

あってるのか,この使い方w

それっぽいファイルならエンコードをスルーする

某所から落としたflvとmp4を参考に,

ffmpeg -i ファイル名

をやって,情報を取得.

■flv
Input #0, flv, from 'smile.flv':
  Duration: 00:05:??.9, start: 0.000000, bitrate: 96 kb/s
  Stream #0.0: Video: vp6f, yuv420p, 320x240, 29.97 fps(r)
  Stream #0.1: Audio: mp3, 44100 Hz, stereo, 96 kb/s
■mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'smile.mp4':
  Duration: 00:01:??.?, start: 0.000000, bitrate: 608 kb/s
  Stream #0.0(und): Video: h264, yuv420p, 512x384, 29.97 fps(r)
  Stream #0.1(und): Audio: aac, 44100 Hz, stereo

時間は少し隠した.
それぞれこんな感じ.おそらくこのコーデックの組み合わせならエンコードスルーしてもそのままFlashで再生できるはず.

だから,

  • vp6f,mp3
  • h264,aac

この部分を正規表現でもなんでもいいのでログから探してなければエンコードするという形にしよう.

【MooTools】1.2.2を少しだけ

FancyUploadを触ってる都合上,MooToolsのソースも読んでるんだけど,

  • MooTools1.2.2アップデートまとめ(ttp://takahashifumiki.com/web/programing/628/)

によると,1.2.2でMoreのほうが更新されて,

Requestクラスの拡張。JSONPが新たに加わったこと、リクエストをキューに入れ(順番待ちさせ)たり、定期的に実行させるクラスが追加。

とのことだったので,ちょっと試してみました.

  • MooTools Docs - Request/Request.Periodical(ttp://mootools.net/docs/more/Request/Request.Periodical)

html側

<ul id="status"></ul>

javascript

new Request({
	url:"http://localhost/hoge.php",
	method: 'get',
	onSuccess: function(responseText) {
		new Element('li', {text: responseText}).inject($('status'), 'bottom');
},
onFailure: function() {
		new Element('li', {text: 'error!'}).inject($('status'), 'bottom');
	}
}).startTimer({
    param: 'hogeeeeee'
});

↑のはデフォルトの設定間隔でリクエストを送るけど,リクエストを送る間隔などは,オプションで設定できる.

new Request({
	url:"http://localhost/hoge.php",
	method: 'get',
	initialDelay: 1000,
	delay: 5000,
	limit: 15000
}).startTimer({
	param: 'hogeeeeee'
});

FlashPlayer10のデモ見た

今さらだけど.
http://www.adobe.com/jp/products/flashplayer/
http://www.adobe.com/jp/products/flashplayer/features/#section-1

すげーなこれ.
ハードウェアアクセラレーションの話の最後で,
「When use correctly, you can hava incredible results.」
って言ってたのが印象的だった.(これであってるよな?w

うーんw難しいなwwww

httpsのあれ

http://www.net-phantom.jp/blog5/2008/12/debian-apache-apache2sslhttps.html
こちらを参考にDebian(Etch)でhttpsを使えるようにします.

■インストール
$sudo aptitude install openssl
$emacs /etc/ssl/openssl.cnf


■編集箇所
dir = /var/www/cert/CA   # Where everything is kept
countryName_default = JP


■作業フォルダ作成
# mkdir /var/www/cert
# cd /var/www/cert


■準備
# cp /usr/bin/ssl/misc/CA.sh .
# emacs /usr/bin//ssl/misc/CA.sh


■編集箇所
CATOP=/var/www/cert/CA


■鍵作る
# ./CA.sh -newca
…いろいろ聞かれるので適当に答える
(Common Name (eg, YOUR name) []:192.168.xx.xx


# openssl rsa -in CA/private/cakey.pem -out CA/private/cakey.pem
# openssl x509 -in CA/cacert.pem -out CA/cacert.crt


$ cd /etc/apache2/
$ mkdir ssl
$ sudo cp /var/www/cert/CA/private/cakey.pem /var/www/cert/CA/cacert.crt /etc/apache2/ssl/


sslの設定の雛形
$ cp /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz .
$ sudo gunzip httpd-ssl.conf.gz
$ cp httpd-ssl.conf /etc/apache2/sites-available/
$ ln -s /etc/apache2/sites-available/httpd-ssl.conf /etc/apache2/sites-enabled/http-ssl.conf


■編集箇所
SSLCertificateFile /etc/apache2/ssl/cacert.crt
SSLCertificateKeyFile /etc/apache2/ssl/cakey.pem


■設定反映させましょ
# a2enmod ssl
# a2ensite httpd-ssl.conf
# /etc/init.d/apache2 restart

やたーできたぞ!さあ,アクセスアクセス.

https://192.168.xx.xx/

安全な接続ができませんでした

192.168.xx.xx への接続中にエラーが発生しました。

SSL received a record that exceeded the maximum permissible length.

(エラーコード: ssl_error_rx_record_too_long)

Ω ΩΩ< な、なんだってー!!

さてググるか・・・

できました

/etc/apache2/sites-available/defaultの最初の部分を

NameVirtualHost *

NameVirtualHost *:80

これで大丈夫のようです.

あとは例外に登録してやるといける!