2009年5月22日金曜日

I wana just add VBR-header to mp3 files...

ffmpegを使って
ffmpeg -i smile.flv -acodec copy output.mp3
ってな感じでflv動画から音を抜いてるんですが、これをやったあとに付きまとう問題点。。。

元の音声がVBRだろうと何だろうと、-acodec copyでとにかく抜き出せるのは良いものの、抜き出して出来たファイルにはVBRヘッダが無いので、プレーヤによっては再生時間がとんでもないことになっちゃったりします。
例えば、実際の再生時間は4分程度の筈なのに、32分として扱われちゃったり。

なので、VBRヘッダをファイルに付加する方法を探してたんですが、linux環境向けのツールを見つけられませんでした。。。

なので、とりあえずWindows向けのVBR Header Makerをwineで使用。
うわぁ、、こんな簡単に出来るのになぁ。。。

2009年5月16日土曜日

'conffiles' in deb packgage.

リポジトリに入ってなかったり、GetDebなんかにもdebファイルが無かったりするソフトは、tar.gzなソースを落としてきて自分で適当な箇所に置いてやる必要がある。
PHPの開発にAptanaを使おうかと思ってるんだけど、そうですdebファイルが無いんです。
後々の管理のことを考えると、debでインストールしてやったほうが楽だと思うんだけどなぁ。。。

そんな訳で、「じゃあ自分でdebファイル作っちまえばいいじゃねぇか」と思って調べてたら、ちょうど以前のエントリにコメントを頂いた。
Skype error[Ubuntu8.10][pulseaudio]
http://mstssk.blogspot.com/2009/01/skype-errorubuntu810pulseaudio.html
akira さんのコメント...
    purgeなら設定も消去されました。


そういえばこの、removeでは設定ファイルが残って、purge指定してやると設定ファイルまで消えるってのはどうなってるんだろうと思い、そこらへんも調べてみた。

$ sudo apt-get -d install pulseaudio
-dオプションを付けてapt-getを実行し、インストールせずパッケージのダウンロードのみをさせる。debファイルは /var/cache/apt/archives に落ちてくる。このやり方だと依存関係が解決されて、他のパッケージもいろいろ落ちてくるけど、、、まぁいい。

debファイルの実態はただのアーカイブなので、file-rollerとかで開けちゃう。
中身は、
 debian-binary … ただのテキスト。debファイルのフォーマットverが書かれている。
 data.tar.gz … インストールされるファイルが収まっている。
 control.tar.gz … インストール時に必要な依存関係etc.etc.の情報が収まっている。
の三つ。

control.tar.gzの中身を見てみると、
 control … 依存関係やパッケージ概要などなど書かれている。
 md5sums … data.tar.gzの中身のハッシュ値が書かれている。
 postinst,postrm,preinst,prerm …… インストール/アンインストール時に実行されるスクリプトなど。
ここまでは知ってたんだけど、もう一つconffilesというファイルがあった。中を見てみると、件の記事で扱った/etc/X11/Xsession.d/70pulseaudioや、他にも設定ファイルっぽいパスが書かれている。
conffilesが何なのかと言うと、
http://www.debian.org/doc/manuals/maint-guide/ch-dother.ja.html#s-conffiles
conffilesにパスを書いておけば、設定ファイルとして扱われ、removeでは削除されず、purgeで初めて消えてくれるそうだ。

ところで、これらを調べていて思ったのは「purgeしなかったパッケージの設定ファイルは全部残っちゃってるんじゃね?」ということ。
removeして設定ファイルだけ残ってしまっているパッケージを簡単に調べる方法は無いもんかと思い、取り合えずSynapticを開いたら、、、あったあった。
Synapticの左ペインを「状態」別表示にして「未インストール(未設定)」を選択すればいい。。。うわ、結構ある。。。


<雑記>
「未インストール(未設定)」って誤訳だよねぇ。「未設定」だと「設定されていない」という意味になっちゃう。LANG=Cな状態での表示は「Not installed(residual config)」。residualの意味は「残っている(もの)」「余り」とかいう意味だから、やっぱり「未設定」ではない。「未インストール」もニュアンスが違うよなぁ。。
でも良い訳が思い浮かばないんだよなぁ。。。

2009年5月11日月曜日

How to create deb package simply.

http://www.aptana.com/dev/index.php/Creating_a_Debian_Aptana_IDE_package
Aptanaのサイトにあったdebファイル作成の解説がシンプルでいい感じだったのでメモ。
上記ページ中では説明が省かれてるけど、run-aptana scriptってのは、Aptanaのための環境変数を設定しながらaptanaを起動させるスクリプトのこと。詳細はAptanaのインストール解説ページとかに任せる。

追記……するかなぁ……

2009年5月9日土曜日

Seagate HDD strikes me!

Seagate 3.5インチ内蔵HDD 1.5TB 7200rpm S-ATA/300 32MB ST31500341ASSeagate 3.5インチ内蔵HDD 1.5TB 7200rpm S-ATA/300 32MB ST31500341AS

Seagate
売り上げランキング : 2547

Amazonで詳しく見る
by G-Tools


発症は稀とのフレコミでしたが、大当たりでした。
http://gigazine.net/index.php?/news/comments/20090118_seagate/
http://wikiwiki.jp/buyhdd/?7200.11%C9%D4%B6%F1%B9%E7
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207931&NewLang=ja
http://pc11.2ch.net/test/read.cgi/jisaku/1240139074/l50

ファームウェアを更新すれば良いらしいですが、それは内臓SATA接続が前提なので、ノートPCしかない私にはどうすることも出来ない orz
大学行ってる友人に話したら、研究室のお遣いで4つ買ったら、全部当たりということがあったらしいです。

流れ
・1.5TBのHDDを買って大喜びで帰宅
・一緒に買った外付け用HDDケースにHDDを入れる
・Gparted起動
・パーティションテーブル作成。(この最初の1回だけ認識できた)
・おっとntfsでフォーマットするにはntfsprogsを入れる必要があるのか
・ntfsprogsをインストール
・さぁてGpartedを起動して今度こそフォーマット……
・HDD認識されねぇEEEEEEE ←いまここ
・買ったパーツショップに連絡予定「フォーマットもしてないのにロックされました orz」
to be continued...

<追記>
原因が判明。
HDDケース付属のUSBケーブルの接触不良でした。斜め上な肩透かし orz

2009年5月8日金曜日

Aptana PHP memo

Aptana Studio
http://www.aptana.com/

Aptana PHP
http://www.aptana.com/php

Aptana PHPの現行バージョンは1.0だが、Alpha版の1.1はSmartyテンプレートの作成などにも対応している。
Aptana PHP 1.1のインストール方法
http://www.aptana.com/docs/index.php/Aptana_PHP_Plug-In_1.1

php.iniのinclude_pathの内容を、Aptana PHPの設定のPHP Libraliesに指定してやる。これをしないと、デバッグ時にSmartyをrequireしようとするところでNot Foundエラーが出る。

http://aptana.com/docs/index.php/Installing_Aptana_on_Linux
http://andrewbleakley.com/blog/2008/11/01/installing-and-running-aptana-on-ubuntu-810/

2009年5月7日木曜日

PHP Smarty tips

最近PHPをちょこっとずつ勉強中。
Smartyのテンプレでよく使うであろうパターンの覚書。

escape修飾子と予約変数$smartyの組み合わせ

Smartyのテンプレでは、変数に修飾子というものを付加して表示結果を弄れる。escape修飾子は文字列中の記号などをエスケープしてくれる。
また、予約変数の$smartyを使うと、テンプレート内からPHPの定義済み変数にアクセスできる。
よくあるwebの入力フォームでは、入力エラーの場合に入力内容をそのまま表示仕返してやったりする。それを、Smartyを使えば次のようにテンプレートに記述することで済む。
<input type="text" name="hoge" value="{$smarty.post.hoge|escape}">

関数も修飾子として使える

escapeなどSmartyで用意されているものだけでなく、PHP側の普通の関数もテンプレート内から修飾子として呼び出せる。
例えば、入力内容をそのスクリプト自身にsubmitさせてやるようなフォームなら、basename関数を修飾子として使い、actionの指定もテンプレート内で動的に書き出せる。
<form action="./{$smarty.server.SCRIPT_NAME|basename}" >