*Article*
★
AVeL LinkPlayer
ふと
AVLP2/DVDGを購入。
型落ち品だけど、ファームをアップデートすると DVDG-2 相当になるらしいし。
*
接続
D端子があるので、そちらでアンプと接続してみるも映らず。しばらく悩んだが、
アンプから TV に D端子接続していかなったためであった。
とはいえ D端子ケーブはもう余っていないし、どうせ動画再生には
ほとんど使わないだろうから Sビデオで済ます。
*
ネットワーク設定
無線LANルータに MAC アドレスを登録する時に typo ってはまったくらいで、
あとは問題無く。
それにしても、WEP キーを文字列で入力できないとはなんてダサイんだ…。
*
ファーム更新
ネットワークの確認も兼ねてファームの更新。
しかしながら最新版が March とか言ってますよ?
とりあえずそれにしておくけど。
ぐへっ、ファームを更新したら設定がクリアされた。また WEP キーとか
入れなおしですか、そうですか。
*
Link Server
とりあえず Windows で Link Server を動かしてみたところ、アッサリと
PC 上の MP3 の再生に成功。
*
wizd
Linux 上で wizd を入れてみる。
面倒だったので
こちらから wizd_0.12g-1_i386.deb を拾ってきてインストール。
/etc/wizd.conf の document_root と server_language_code だけ変更して
起動。問題無く wave の再生ができた。
む、リモコンからの連続再生ができない。ググって見付けた
掲示板の記事に従って、tail.html の "blue" を "pgdn" に、"yellow" を "pgup" に書換えた
ところ解決。
ということで、20枚くらい CD をリッピング。
★
ClamAV
最近 Virus メールが多いので
ClamAVを導入してみた。
maildrop から呼出すことにして、~/.mailfilter に以下を追加っと。
`clamscan --quiet -`
if ($RETURNCODE == 1)
{
to "$MAILDIR.virus"
}
おっ、早速
HTML.Phishing.Auction-42と
Worm.Mydoom.Mがひっかかった。フィッシングメールもチェックしてくれるのか。
★
LinkPlayer Music Server
LinkPlayer を Music Server として利用しているけど、wizd ではそういった用途には
向いていないようなので、それ用のサーバを作ろうかな。
試しに WEBrick で適当に作ってみたけど、playlist を作成して再生するといった
ところまでは、比較的容易にできたし。
playlist が画面に表示されるだけで、再生が始まらないというのにしばらく
悩んだけど、これは playlist へのリンクに 「vod="playlist"」と付ける
必要があるということであった。
*
仕様
とりあえず以下のような仕様で実装してみた。
- フォルダ一覧だけが表示される。
- フォルダを選択するだけで、そのフォルダの音楽ファイルが再生される。
- フォルダ一覧は最近再生した順に並ぶ。
- 途中で停止したフォルダを再度再生すると、停止した曲から開始する。
これだと、途中まで再生したフォルダを頭から再生したい時に面倒だなあ。
*
TODO
以下は気が向いたら。
- MP3 対応
- Skin 対応
- SSDP による自動認識
- 各種カスタマイズ (ファイルシステムの文字コードや port 指定など)
以下は全くやる気なし。
★
LinkPlayer Music Server
数字入力でフォルダを指定できるようにして、その時はフォルダ頭から再生する
ようにしてみた。
これで自分で使う分には充分かな。
*
MP3 対応
rmp3に附属の mp3info.rb を使おうかと思ったら ID3v2 に対応していないみたい。
mp3info を使おうかと思ったけど、これも ID3v2 に対応していなかった…。
Debian パッケージを探ってみたら id3v2 ってコマンドがあったけど、
これはマイナー?
jiMPachiってプレイヤに libid3 のラッパーが含まれているらしいので、
これを使ってみるかな。
★
ルータ
今週3回目のルータのハングアップ。うーむ、寿命かな?
もしかしたら熱のせいだろうか。PC からちょっと離して様子を見るとしよう。
*
MP3
昨日は RAA にアクセスできなかったので、日を改めて検索してみたところ
id3 関係のライブラリをいくつか見付けた。どれが良いのか分からんので、
最も最近更新されている
ruby-mp3infoを使ってみよう。
*
Skin
非常に簡単ながら Skin に対応した。
*
release
★
mem_fun_ref
STL の mem_fun_ref ではまったのでメモ。例えば CString::Find は以下のように
宣言されているとする。
class CString {
int Find(PCXSTR, int = 0) const;
int Find(XCHAR, int = 0) const;
}
*
オーバーロード
以下のようにフツーに mem_fun_ref を使おうとしたらコンパイルエラー。
std::find_if(v.begin(), v.end(), std::bind2nd(std::mem_fun_ref(&CString::Find), _T("hoge")))
これは CString::Find がオーバーロードされたメソッドだったためであろう。
ということで、以下のようにメソッドの型を明示してみる。
std::mem_fun_ref((int (CString::*)(CString::PCXSTR, int) const)&CString::Find)
*
引数の数
でもやっぱりダメ。mem_fun_ref は引数一つ以下のメソッドにしか
対応していないためであった…。
*
結論
CString を継承して Find に引数を一つしか取れないメソッドを作成し
それを指定すればいけると思うが、そんなことが必要なら関数オブジェクトを作る。
というか、そんなことするなら find_if を使うのをヤメる。
Win32 対応。といっても、ファイルシステムが CP932 の場合の問題に対応したくらい。
*
exerb
せっかくだから exerb で実行ファイルを作ってみるも動かず。
しばらく悩んだが、インストールした ruby が 1.8.3preview1 と exerb の版
(1.8.2)と異なるためみたい。1.8.2 をインストールしたら問題無く動作した。
しかしながら、Windows だと fork が無いから daemon として動作させられない…。
*
SSDP
wizd と同時に使っているとポート 1900 に bind できないことに気付く。
ってことで SSDP 対応はヤメ。
★
Ruby + Win32API で MyMusic のフォルダを取得
def getMyMusic
begin
require 'Win32API'
proc = Win32API.new("shell32.dll", "SHGetSpecialFolderPath", %w(p p i i) , 'i')
rescue LoadError, StandardError
return nil
end
str = "\0" * 260
if proc.call(nil, str, 13, 0) == 0 then
return nil
end
str.rstrip
end
以下のページを参考にした。
スライドショー対応。
pod を指定する時に vod も指定するとスライドショーが行われず、かなり悩まされた。
あっ、昨日試していた MyMusic の自動取得機能を入れるのを忘れていた(^^;
*
URL メモ
★
今日のハマリ
以下の perl スクリプトで 2回目の proceedAll の呼出し時に @list の各要素が空に
なっていて悩む。
my @list = ("elem1", "elem2");
proceedAll() && proceedAll();
sub proceedAll() {
my $sts = 0;
foreach (@list) {
$sts |= proceed($_);
}
$sts;
}
sub proceed($) {
my $elem = shift;
print "$elem\n";
open(F, "hoge.txt");
while (<F>) {
print;
}
close(F);
return 1;
}
原因は proceed の while 文で $_ が書換えられるためであった…。
proceedAll のループで $_ なんて使うなよ!
せめて proceedAll に引数で @list を渡していれば大丈夫だったのに。
誰だ、こんなに手抜きコードを書いたのは!
*1
*
STL の mem_fun
STL の mem_fun でまたはまる。
void Base::spread(Base* pBase)
{
for (vector<int>::iterator it = m_vec.begin(); it != m_vec.end(); it++) {
pBase->Base::func(*it);
}
}
↑から↓に書換えたところ、どうも意図しない動きに。
void Base::spread(Base* pBase)
{
for_each(m_vec.begin(), m_vec.end(), bind1st(mem_fun(&Base::func), pBase));
}
Base::spread に渡されるオブジェクトが派生クラスのオブジェクトでかつ
その派生クラスで spread をオーバーライドしている場合に、
前者は Base::func が呼ばれるのに対して後者は Derived::func が
呼ばれるためであった…。
*
ruby の module_function
これはハマリではなく ruby を知らないためだが。
モジュール関数からプライベートメソッドは呼べないの?
module Hoge
def base_func
end
def funcA
base_func
end
module_function :funcA
end
Hoge::funcA # => エラー
「Hoge::funcA といった呼出しは出来るけど、Hoge::base_func といった呼出しは
出来ない」としたいので、base_func はモジュール関数にはしたくない。
★
LinkPMS for OSX
ホコリまみれの iBook を久々に起動して、LinkPMS を動かしてみたがいろいろツラい。
*
ruby-1.8.2
fink で提供されている ruby-1.8.1 では動かず。どうやら 1.8.2 で入った
pstore の変更が必要らしい。
とりあえず、ruby-1.8.2 から pstore.rb だけコピーして試す。
*
UTF-8-MAC
文字コードの変換でエラー。濁点がアレでナニのようだ。
調べたところ UTF-8-MAC を指定すると良いらしいが、iconv -l で表示されず。
どうやら fink の libiconv が使われているためみたい。
DYLD_LIBRARY_PATH を /sw/lib から /usr/lib にしたら使えるようになった。
いったいこの文字に何回泣かされたことか…。
といったところで挫折。
★
UTF-8-MAC to CP932
「〜」が U+301C になっているのであれば CP932 ではなく SHIFT_JIS にならば
変換できるのではないかと思ったけどやっぱりダメ。
ということでちゃんと調べてみたところ、変換に失敗した文字は U+FF5E であった。
これであれば CP932 に変換できるはずだが、
Darwin 7.8 Source Codeから libiconv のソースを拾ってきて libiconv/lib/cp932.h を眺めたところ、
冒頭にこんな記述が。
* 2. Some characters in the JISX0208 range are defined differently:
*
* code SHIFTJIS.TXT CP932.TXT
* 0x815F 0x005C # REVERSE SOLIDUS 0xFF3C # FULLWIDTH REVERSE SOLIDUS
* 0x8160 0x301C # WAVE DASH 0xFF5E # FULLWIDTH TILDE
[...]
* We don't implement these changes. SHIFTJIS.TXT makes more sense.
いったい OSX を使っている人々は iconv でファイル名を SHIFT_JIS 系の文字コードに
変換する時はどうしているんだろう?
みんな
libiconv cp932修正パッチをあてているなんてこともないだろうし。
文字コードまわりを改善。
mp3info.rb を見たら、Iconv.iconv("ISO-8859-1", "UNICODE", data) などという
ヒドイことをされていた…。ということで、
id3.rbを使うように変更。
以上、11 日分です。