2009年2月26日木曜日

How to burn mp3 files to audioCD with K3b in Ubuntu 8.10

音楽CDを焼こうとしたら、Braseroが音楽プロジェクトの作成画面で焼きたいmp3ファイルを選択しようとすると固まってしまう。
そこで、他の適当なライティングソフトを使おうと思い、「アプリケーションの追加と削除」でK3bを見つけた。

さっそくインストールしていざmp3ファイルを焼こう。。。って、対応してない形式のデータって言われてしまい、書き込みリストに追加できない。

どうやら、ライセンスどうこうでmp3には標準では対応していないらしい。
探してみると、libk3b3-extracodecsというソレっぽい名のパッケージがあったので、さっそくインストール。

$ sudo apt-get install libk3b3-extracodecs

これでmp3ファイルがK3bで直接mp3ファイルが扱えるようになりました。

2009年2月17日火曜日

Unix Time:1234567890

Unix時間が12334567890になる瞬間を思いっきり逃してしまったので
$ sudo date -s '2009/2/14 08:31:30' && date '+%s'

とやってみた。

余計に虚しくなったよママン

2009年2月3日火曜日

Apache+mod_ssl failed to run when booting.

Apache+mod_sslがサーバー機の起動時にだけ起動がコケる、という問題に直面。
まぁ、凡ミスだったのだけれど。同じ轍を踏まないようにメモメモ。
環境:Ubuntu 8.10 Server

http://openssl.robata.org/
上記ページの通りに、証明局とサーバを作った。

サーバーの秘密鍵を作成する段で、パスワード入力を省略できるようにした秘密鍵(nopass_server.key)を作成している。
Apacheの設定でSSLCertificateKeyFile(サーバの秘密鍵)を指定する箇所にはこのnopass_server.keyを指定してやり、Apache起動時のパスワード入力を省略させることができる。
パスワード入力が必要な方の秘密鍵を指定してやると、サーバー(マシン)起動時にはパスワード入力なんか出来ないので、Apacheの起動がコケてしまう。

端末からsudo /etc/init.d/apache startとかやる分にはパスワード入力を促すメッセージが出るけど、起動時にはそんなん無理だ。

2009年2月2日月曜日

Ubuntu has HL-4050CDN(brother) driver.

大学の研究室でLinuxからでも容易に使えるようにと考えた結果、費用対効果などからbrotherのHL-4050CDNを購入。しかし、届いてからずっとほったらかしていた。
卒業研究の発表間近で参考にするためウェブページを印刷するところで、やっと重い腰を上げた。まぁ、研究で頭パンクしそうなので気分転換の意味もあったんですが。

以前使っていたプリンタを撤去して空いていたスペースに設置し、トナーをぶっこむ。
ネットワーク対応なのでおもむろにLANケーブルを繋いで、ちっさな設定画面でIPアドレスを固定してやる。

こっから先は、Ubuntuの賢さに涙が出そうになった。
メニューの「プリンタの設定」で、[新規]ボタンをクリックするとネットワーク上のプリンタを探してきて表示してくれる。HL-4050CDNもちゃんと見つけてくれているので、選択肢して次へ。
HL-4050CDNのプリンタドライバが標準で備わっているので、あとはダイアログを次へ次へと。(Ubuntu8.10)

「プリンタの設定」ウィンドウにHL-4050CDNが追加されたので、プロパティから「テストページの印刷」を選ぶと、、、印刷サレター!


簡単過ぎて、すぐ卒業研究という現実に戻されてしまったのはしょうがない。

2009年2月1日日曜日

What's "~/.wapi"?

HDD上のいらないものを整理してたらなんかホームディレクトリによくわからんドットディレクトリがあった。

~/.wapi

wapiでググってみても中国の独自無線LAN規格とか関係ないものが出てくるんだけど、キーワードにubuntuを追加してみたらUbuntuのフォーラムに同じ疑問を投稿してる人がいて、そのレスポンスのおかげで答えがわかった。

http://ubuntuforums.org/showthread.php?t=1000647

ようするにLinux上などで動作するMonoという.NET互換の環境を作るソフトがあり、そのソフトに関するデータを格納するディレクトリがDebian環境では.wapiとして作成されるそうだ。
WindowsAPIって意味かなぁ。

2009年1月29日木曜日

Matz's talk! in "World of OSS" symposium



1月27日にせんだいメディアテークで催された「オープンソースソフトウェアの世界」というイベントに行ってきました。内容は、IPAの三浦広志氏とRubyの作者であるまつもとゆきひろ氏(Matz)の講演。
買ったばかりの、というか出版されたばかりのオライリーのRuby本にサインしていただきました。

軽く緊張してて、帽子被ったままサインを貰いに行ったのは良い(?)思い出。

2009年1月24日土曜日

OSC 2009 Sendai

オープンソースカンファレンス2009仙台
http://www.ospn.jp/osc2009-sendai/

行ってきました。
LiveCDとかいろいろ貰ったり^^


Ubuntu9.04のコードネームはJaunty Jackalope。Jauntyは素早い(ササっとした動作)という意味で、Jackalopeは角ウサギという空想上の生物。ウサギには角のような突起物が頭に生える病気があるらしく、角ウサギ伝説はそこから来たんじゃないかということらしいです。
「病気のウサギ」というコードネームにJapanese Teamの方が不安を抱いてることを漏らしたり。。。セミナーで「ササっと死んじゃうって事ですか?」と言ったのは私です。失礼しました orz

2009年1月22日木曜日

Skype error[Ubuntu8.10][pulseaudio]

昨日、友人とSkypeしようとしたら通話が出来ないという状況に陥った。
「オーディオプレイヤーに問題があります」というエラーが出て、コールすることが出来ない。

ググったらUbuntuのフォーラムで既に解決策が
http://forums.ubuntulinux.jp/viewtopic.php?id=3413

Skypeとpulseaudioが相性悪いらしい。
なので、pulseaudio関係を一期に削除
$ sudo apt-get remove pulseaudio*
$ sudo rm /etc/X11/Xsession.d/70pulseaudio

Xの起動プロセスからもpulseaudioを削除する必要があるので、2つ目のrmもちゃんと行うこと。怠るとXが起動しなくなる。(その場合にはubuntu-desktopパッケージをインストールすれば良いらしいけど)

<追記>
apt-getはremoveじゃなく、purgeでも良さそう。後者の場合、/etc/X11/Xsession.d/70pulseaudioも勝手に削除してくれる……?(未検証です)

2009年1月15日木曜日

How to use GETOPT function in C

端末で使ういろいろなコマンドは大抵はオプションを付けていろいろな機能を使うことが出来る。そういったプログラムをCで書くのに必要なgetopt関数の覚書。
unistd.hをインクルードしておくこと。

引数を取るプログラムをCで書くとき、mainの宣言は
 int main(int argc,char *argv[])
こんな感じに書くのが普通。*argv[]が**argvとなってるコードも見たことがある。

で、getoptの使い方。
while ((ch = getopt(argc, argv, "ab:")) != -1){
switch (ch){
case 'a':
-aオプションの処理
break;
case 'b':
-bオプションの処理
この時、-bの次の引数へのポインタがoptargに収まっている
break;
}
}


初めてgetoptを使おうとしたときに見落としていてちょっと躓いたのが、getoptの引数"ab:"の部分。
これはaは引数を取らない、bは引数を取る、という具合になる。使うオプションを""で括ってずらずらっと書いてやり、引数を取るものの後ろにだけ:(コロン)を付けてやればいい。
引数を取るオプションを見つけたときにgetoptはgetargというcharポインタに引数を与えてくれる。例えばコマンドに「-b hogehoge」というオプションが与えられていたならば、getoptがbを見つけたときに、hogehogeという文字列がoptargに収まる。

2009年1月7日水曜日

Compile error of Rockbox's sendfirm.c with libmtp0.3[Ubuntu8.10][libmtp0.3]

作業環境はUbuntu8.10。検索で来たWindowsユーザはこの記事見ても無意味だと思います。悪しからず。

gigabeatSにRockboxをインストールするには、現時点(20090107)では全て手動でコンパイル〜ファームウェア書き込みを行わなければいけないみたい。同じgigabeatでも、FやXシリーズは解析/開発されきってインストールユーティリティのソフトが用意されているのだけど、まだSシリーズは開発途上。

まだ実際にgigabeatSにRockboxをインストールした訳ではないのだけれど、作業時に必要になるsendfirmプログラムをコンパイルする時点で躓いたのでちょっと書いておく。

sendfirmにはlibmtpが必要になるので、
$ sudo apt-get install libmtp-dev
こんな感じでlibmtpのdevelopmentパッケージをインストールしておく。

http://www.rockbox.org/twiki/bin/view/Main/GigabeatSInstallation#A_Compile_the_sendfirm_utility
Rockbox wikiのgigabeatSへのインストール指南に書かれている通りに、現行ビルド一覧ページ(http://build.rockbox.org/)からソースコードをDL。
アーカイブを展開し、端末でその中のutils/MTPディレクトリに入りmakeすると、sendfirmがコンパイルされる。
rockbox-3.1/utils/MTP$ make
gcc -Wall -lmtp -o sendfirm sendfirm.c
sendfirm.c: In function ‘sendfile_function’:
sendfirm.c:94: error: too many arguments to function ‘LIBMTP_Send_File_From_File’
make: *** [sendfirm] エラー 1
$

LIBMTP_Send_File_From_File関数への引数が多すぎるとエラーを吐かれてしまった。

これはどういうことだろうと思い、ソースを見てみる。
エラーが出ているsendfirm.cの94行め付近は
ret = LIBMTP_Send_File_From_File(device, from_path, genfile, progress,
NULL, parent_id);
となっていて、6つ引数が与えられているのが分かる。
で、Ubuntuのリポジトリから落ちてくるlibmtpのver0.3のソースを見てみる。
http://libmtp.sourcearchive.com/documentation/0.3.0/group__files_g552e760a429b0e47a593b8ade20bb763.html#g552e760a429b0e47a593b8ade20bb763
int LIBMTP_Send_File_From_File(
LIBMTP_mtpdevice_t * device,
char const *const path,
LIBMTP_file_t *const filedata,
LIBMTP_progressfunc_t const callback,
void const *const data
)
与えるべき引数の数は5つだ。そりゃエラーになる筈。

今度はver0.2系のソースを見てみる。
http://libmtp.sourcearchive.com/documentation/0.2.1/group__files_gfaf21159580eef716b24da3a257b3060.html#gfaf21159580eef716b24da3a257b3060
int LIBMTP_Send_File_From_File(
LIBMTP_mtpdevice_t * device,
char const *const path,
LIBMTP_file_t *const filedata,
LIBMTP_progressfunc_t const callback,
void const *const data,
uint32_t const parenthandle
)
こっちは6つになってる。
つまり、libmtpのver0.2系(0.1系も引数は6つだった)を考えて書かれたソースだったのね。

んでまぁ、libmtpの0.2系を持ってきてやるのが正当なんだろうけど、面倒なのでいらなそうな6つ目の引数を削除してみる。sendfirm.cの94行め付近「device, from_path, genfile, progress,NULL, parent_id」となってる箇所からparent_idを抜いて、「device, from_path, genfile, progress, NULL」としてから、改めてmake。
rockbox-3.1/utils/MTP$ make
gcc -Wall -lmtp -o sendfirm sendfirm.c
sendfirm.c: In function ‘sendfile_function’:
sendfirm.c:67: 警告: unused variable ‘parent_id’
$
警告出たけど、案の定parent_idが宣言されたけど一度も使われてないよ、ということなのでキニシナイ。

まぁ、肝心のこっから先をやってないんだけどね。

2009年1月5日月曜日

Happy New Year!/[memo]Rcokbox for gigabeat S/Leap second error of Zune&gigabeat

明けましておめでとうございます。
いきなりですが、暫くの間1日1更新できるか怪しくなります。だって、大学の方で卒論の締切りが迫ってきてますから。。。

というわけで、今日のところはちょっと覚書程度に愛機gigabeatSをRockbox化するために必要なページをbookmark。

Gigabeat S Port - Rockbox
http://www.rockbox.org/twiki/bin/view/Main/GigabeatSPort

Rockbox for Gigabeat S
http://audio-p.hp.infoseek.co.jp/

今までMTPデバイスとして扱う方法をいろいろ試してきましたが、Rhythmboxで楽曲を転送した時にVideoフォルダに入れられるという新たな不具合に出くわし、いよいよRockbox試してみるかという心境になったのです。


ところで、閏秒問題について

Zuneとgigabeatが閏年の処理の問題でフリーズ
http://slashdot.jp/it/article.pl?sid=09/01/01/1247219

記事中ではgigabeatのTとVのシリーズしか触れられてませんが、それらと同じPortable Media Centerをファームウェアとして使っているSシリーズも同じ症状で固まりました。もうサポート終わってるとはいえ、除け者にしなくたっていいじゃない(´・ω・`)
症状は起動画面から進まない、とかの筈らしいんですが、私のは故障メッセージが出てたのでこの問題とは関係なく故障したのだと思ってました。以前にも同じメッセージが出て修理に出したことがあったので、さっくり諦めたわけですハイ。
でも、閏秒後にバッテリを放電しきった後に再起動〜〜という対処法を行ったら何故か直っちゃいました。。。(実際にはバッテリが悪くなってるので勝手に放電しきってしまったのですが)

2008年12月25日木曜日

Bacolicio.us

ITmedia ねとらぼ:Webページにベーコン画像を貼り付けられる「Bacolicio.us」
http://www.itmedia.co.jp/news/articles/0812/22/news068.html
http://bacolicio.us/

要するにこんな感じ↓


クリスマスだとかそんなことは関係なく粛々とエントリを更新するこのブログ。
でも、冬休みは取らせていただく予定。


<追記>
クリスマス限定バージョンになってた。

2008年12月24日水曜日

encode video with h264+aac codecs by ffmpeg on Ubuntu8.10 Intrepid Ibex

Ubuntu8.04まではMedibuntuのリポジトリを入れていれば、h264,aacなどのコーデックに対応した版のffmpegがaptでインストール出来たのですが、8.10からやり方が変わったようです。

ffmpegでPSP用に動画をエンコードしようとして、「h264なんてエンコーダ知らないよ」とエラーメッセージを吐かれてびっくらこきました。
確かに、ffmpeg -formatsの出力結果のCodec欄を見ても、h264の行にエンコード可を示すEの字がありません。

Medibuntuの8.04Hardy用のパッケージ一覧ページを見るとちゃんとffmpegがあるのが分かりますが、8.10Intrepidのページではffmpegがそもそもffmpegがありません。
Intrepidでは、ffmpeg本体は公式リポジトリのものを使い、h264などのエンコードには外部ライブラリで対応するという形のようです。


IntrepidのMedibuntuリポジトリを入れた状態で、libavcodec-unstripped-51,libavdevice-unstripped-52,libavformat-unstripped-52,libavutil-unstripped-49,libpostproc-unstripped-51,libswscale-unstripped-0の6つのパッケージをインストールします。
$ sudo apt-get install libavcodec-unstripped-51 libavdevice-unstripped-52 \
libavformat-unstripped-52 libavutil-unstripped-49 libpostproc-unstripped-51 \
libswscale-unstripped-0


Ubuntu公式のリポジトリにはlibavformat52といったパッケージがありますが、これらのMedibutu版が〜-unstripped-〜と名前についたパッケージ達です。ffmpeg本体は公式のもののままで大丈夫のはずです。

これでffmpeg -formatsを実行すると、h264のところはそのままですが、「 EV libx264」という行が追加されている筈です。libx264というのはh264コーデックでエンコードするためのffmpeg外部のライブラリです。(libx264パッケージは勝手にインストールされます)
実際にエンコードを行う場合には、以前なら「-vcodec h264」としていた箇所を、「-vcodec libx264」とすれば良いです。aacも、libfaacとします。
この他にも、外部ライブラリとして対応するようになったものがあります(ogg,xvidなど)。ffmpeg -formatsで確認してください。

試しに、一つ動画をPSP用にエンコードしてみましたが問題なく再生出来ました。

$ ffmpeg -i smile.flv -acodec libfaac -ab 256kb -vcodec libx264 -b 256kb -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -aspect 360:272 -s 360x272 -r 30000/1001 -f psp -flags loop -trellis 2 -level 30 -threads 2 output.mp4 -y

2008年12月23日火曜日

OpenSource/LinuxKeywords:ITpro

オープンソース/Linuxキーワード - 索引 : ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070105/258133/

地味に勉強になります。

あと、こっちも
Linuxコマンド逆引き大全 Index : ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230579/

ブックマーク必須

2008年12月22日月曜日

特定電子メールの送信の適正化等に関する法律[column-spammail]

法改正でメール送信はこう変わる : ASCII.jp
http://ascii.jp/elem/000/000/198/198595/
 今回の法改正の重要な点として、広告・宣伝メールを送る場合に従来の「オプトアウト方式」からメール送信側が受け取り手から事前に送信することに対しての承諾を受けなければいけない「オプトイン方式」への移行が挙げられる。


受信者に無断で広告メールを送る事自体を禁じるらしいです。ってか、既に施行されてるのね。
加えて、送信者は受信者のメールアドレスをどこから入手したのかを証明できるように記録しておく必要がある、と。

無断で送信する行為自体を違法にしたのはグッジョブとしても、これが実効力があるかどうかは別の話だよね。。。

元々無断で広告送るような業者は、法律とか関係ないぜ、という感じな気がするし。実際に違法な広告メール送信が見つかった場合に、どこまで捜査できるの?
あと、PCでメールを使っている人にとっては、海外からの広告メールのほうが多いんじゃないかなぁ。

結局やっぱり自己防衛を徹底するのが一番だと思う。

怪しげなポイントが貰えるケータイサイトの「ご登録いただいたお客様の情報は本サービス提供のためを除き使用致しません。」とかなんとかの文言をアッサリ信じて、メールボックスの8割が広告メールという状態の友人がいるので、決してこういう業者はいなくならないんだろうなぁ、と思います。

2008年12月21日日曜日

A Standard for the Transmission of IP Datagrams on Avian Carriers

こんな動画を見つけたので今日の記事。




今更な話ですが、ジョークRFCの中でも名高い「鳥類キャリアによるIPデータグラム送信標準」(RFC1149)を実際にやった人たちがいます。

The highly unofficial CPIP WG
http://www.blug.linux.no/rfc1149/

要するに、OSI参照モデルの物理層を生体パケット……つまり鳥(実験では伝書鳩が使われた)にやらせよう、というもの。
んはアホなという感じですがちゃんとメリットもあります。

  • コリジョン(信号の衝突)の心配が無い

  • 1次元でしかない銅線の電気信号経路上ではどうしてもコリジョンが発生してしまいますが、3次元空間を利用出来、さらには生体パケットは自身がコリジョン回避機能を持っています。
  • ワームの除去機能

  • キャリアの自己修復機能



さらにはQoSを追求した「IP over Avian Carriers with Quality of Service」(RFC 2549)も存在しています。

2008年12月20日土曜日

How to use mtp-albumart command[mtp-tools][Ubuntu8.10]

GigabeatSを、Ubuntu上でlibmtpを使ったソフトで接続する際は、必ず一度USBケーブル繋ぎなおし&GigabeatSの電源入れ直し(本体下の主電源スイッチではない)しないと、次の接続セッションを開始することが出来ない。これはもう仕様と思って諦めるとして、接続セッションを極力切らずにやれば少しでも楽になるはず。

と言うわけで、あるもので間に合わせる限り、GigabeatSに音楽CDアルバムを取り込む場合の最低限の手順はこんな感じじゃないかと。
既にCDのリッピング/楽曲ファイル作成は済んでいるとします。mtp-sendtrコマンドは一曲ずつしか転送出来ないので使いません。

  1. Rhythmboxでファイルをまとめて転送

  2. GigabeatS繋ぎ直し

  3. mtp-tracksコマンドで楽曲ファイルのIDを調べる

  4. GigabeatS繋ぎ直し

  5. mtp-albumartでアルバム情報作成&アルバムアート転送

こんな感じでしょうか。

Rhythmboxでの操作は、楽曲一覧から転送したい曲をまとめて選択しつつGigabeatSのアイコン(何故か旧iPod Nanoアイコン)にドラッグ&ドロップしてやるだけです。

mtp-tracksコマンドはGigabeatSを繋いだ状態で、
$ mtp-tracks > tracklist.txt
と打って、mtp-tracksの表示結果がtracklist.txtに保存されるようにします。tracklist.txtをgeditあたりで開いて、アルバム分けしたいトラックのIDだけを別にメモしときます。GigabeatSにトラックを転送したのが新しい順番になってるので、転送したばかりのは上のほうにあるはずです。

mtp-albumartコマンドは
$ mtp-albumart 
libmtp version: 0.3.0

You need to pass a filename.
Usage: albumart -i <fileid/trackid> -n <albumname> <imagefile>
で、usageを見る限り1曲ずつしかIDを指定できなさそうですが、実は複数イケます。こんなんソース見ないとわかんねぇよ。。。(http://libmtp.sourcearchive.com/documentation/0.3.4/albumart_8c-source.html)
今回、Number Girlのベストアルバムで試したんですが、こんな感じで指定してやる必要がありました。カレントディレクトリにアルバムアートのファイル(Folder.jpg)があるとします。
$ mtp-albumart -i 16778654 -i 16778655 -i 16778656 -i 16778657 -i 16778658 \
-i 16778659 -i 16778660 -i 16778661 -i 16778662 -i 16778663 -i 16778664 \
-i 16778665 -i 16778666 -i 16778667 -i 16778668 -i 16778669 -i 16778670 \
-i 16778671 -n "OMOIDE IN MY HEAD 1~BEST & B-SIDES~ [Disc 1]" ./Folder.jpg
IDは私のGigabeatSに実際に転送した際に割り振られたもの。いちいち-iオプションをすべての番号の前に付ける必要がありますが、少なくともmtp-albumartコマンドではこれで複数ファイルを指定できます。

地味に面倒くさいのが、IDを抽出する作業という。

2008年12月19日金曜日

Authentication & Authorization

jmblog.jp - 認証と許可
http://jmblog.jp/archives/219

引用


  1. 認証(ユーザーが誰かを確認する)

  2. 許可(そのユーザーがアクセスを許可されているかどうかを確認する)


引用終わり

あぁ、確かにこの違いって実は重要。気をつけないと。

にしても、AuthenticationとAuthorizationってぱっと見同じに見えてしまう俺日本人。何故か、最初に間違えて読んでしまって俺の頭の中でAuthenticationがAuthentificationになってしまってる。そして時折Certificationが混ざり込む。

2008年12月18日木曜日

Picasa 3 for Linux Beta[Ubuntu8.10]

ググって来た人向けに肝心な情報だけ頭に書いときます。
・Picasa3でメニュー回り日本語が豆腐(□)に文字化けするのを解消する方法
(2.7系でもイケるかもしれませんが、試してないです。)
一度環境変数LANGをen_US.UTF-8としてPicasaを起動する。
$ env "LANG=en_US.UTF-8" picasa
Picasaを終了し、その後通常通り起動させれば何故か豆腐が直ってる。

- - - 以下本文 - - -

Windows版のPicasa3が正式リリースされました。
http://picasa.google.co.jp/

なんか悔しかったので、Picasa2.7をapt-get removeして、Picasa 3 for Linux Betaのdebを持ってきてインストール。
http://picasa.google.co.jp/linux/

インストールされるディレクトリが/opt/picasa/〜から/opt/google/picasa/3.0/〜に変更されてます。
アプリケーションメニューにショートカットが作成されなかったので、メニューの編集ウィンドウで2.7の時と同じように作成。フォントの設定ツールは/opt/google/picasa/3.0/bin/picasafontcfg。アイコン画像は/opt/google/picasa/3.0/desktop/にあります。

初めに起動した時に、もし旧バージョンのプロファイルが残っていたらそれを引き継ぐかどうかの確認メッセージが出ます。プロファイルが無い、というか旧バージョンを使った事が無いならこのメッセージは出ません。


その次には、カメラなんかを接続した時に自動でPicasaに取り込むかどうかの確認。


そして、予想通りに文字化けして豆腐状態の利用規約。
この次にも英語で別の規約が表示されますがスクリーンショットは割愛。

ようやくPicasaが起動。勝手にHDDの中を画像を検索してライブラリに加えていきます。ここでは初めから日本語が文字化けせずにいてくれます。


ウィンドウメニューなどは英語表示ですが、大して困らないので別に……と思ったら変な箇所で豆腐が。
設定ウィンドウの、おそらく「キャンセル」「適用」「閉じる」とか表示されるであろう箇所です。

どうもメニューまわりだけ日本語に対応していないのに、環境変数から日本語環境だと読み取って表示出来やしないくせに対応しようとしてます。

Font設定ツールでも表示は文字化けしてますが、設定自体はPicasaのウィンドウ(上述の設定ウィンドウは除く)でちゃんと生きてくれます。Addボタンを押して表示される、代替に指定できるフォントの一覧がちゃんとシステムにインストールされているものも表示してくれて嬉しい限り。もっとも日本語名のフォントは豆腐なので面倒臭いですが。



で、どうにも設定ウィンドウの豆腐が気になったので、Picasaを起動するときだけ環境変数を英語にしてやりゃあ、「キャンセル」が「□□□□□」にならずに「Cancel」となっていっそスッキリするじゃあないか、と思ったので即実行。
アプリケーションメニューに作成したPicasaのショートカットのプロパティのコマンド欄を次の用に書き換え
env "LANG=en_US.UTF-8" picasa
フォント設定ツールのほうも
env "LANG=en_US.UTF-8" /opt/google/picasa/3.0/bin/picasafontcfg

言語環境を表す環境変数LANGは日本語環境なら「ja_JP.UTF-8」なんですが、それをそれぞれの起動時のみ「en_US.UTF-8」で英語に設定。
結果は次の通り


これでいい感じだ〜、と思いながらさらに弄っていると……あれ? 豆腐が直ってる!!


もしや……と思いながら、一度rm -rf ~/.google/picasaでPicasaのプロファイルを削除。
改めて、
素のままpicasaと打って起動……豆腐文字化け。
env "LANG=en_US.UTF-8" picasaで英語表示で一度起動した後に素のままpicasaで起動……日本語が表示される!!

なんだか回りくどくなりましたが、とりあえずPicasaで豆腐を回避する方法を見つけました…… orz

2008年12月17日水曜日

libmtpの覚書

Amarokで同期できなかったので、仕方なく久方ぶりにWindowsXPを起動してWMPで同期しようとしたら、Microsoft Updateやらウィルススキャンやらが勝手に動いてまともに使えやしない。
おまけにWMPはGripでリッピングしたmp3のタグが読めないと来たもんだ。

結局Rhythmboxで転送したよ orz
アルバム分けしてくれないのが難なんだけどね。Amarokではアルバム分けしてくれるのになぁ。

少なくとも、一度GigabeatSとの接続セッションを切ると、デバイスを接続しなおさなきゃ(ソフトウェア上の操作でなく、実際にUSBケーブルを抜き差しする)再接続できないみたい。
同じlibmtpを使っていても、接続セッションを保ちつづけるソフトなら使えるが、一度何かを実行する度セッションを切ってしまうような物は少なくとも私のGigabeatSでは使えないだろう。mtp-toolsも結局一つ一つ別々のコマンドだから、シェルスクリプトで扱うにも駄目だろう。

GigabeatSでは、楽曲ファイル転送時に一緒に送るタグ情報のアルバムの項目には目もくれない。曲の転送とは別にアルバム情報のデータをGigabeatS上に作成してやらなきゃアルバム分けしてくれない。曲ファイル単体のタグの中のアルバム情報と、MTPデバイス上で扱うアルバム情報が明確に分けられている。そしてGigabeatSでは後者だけを使用する仕様みたい。

mtp-albumartコマンドでGigabeatS上の曲ファイルにアルバムアートを付加してやると、何故アルバム分けしてくれたのかというと↓

mtp-albumartコマンドのソースはこれらしい
http://libmtp.sourcearchive.com/documentation/0.3.4/albumart_8c-source.html
本来はlibmtpに付いてくるサンプルコードみたい。

このコード中では、LIBMTP_Create_New_Album関数でアルバム情報をデバイス上に作成してから、そのアルバム情報に対して、LIBMTP_Send_Representative_Sample関数でアルバムアートのデータを転送している。

アルバムアートを扱う専用の方法があるんじゃないかと思い込んでいたのだが、Send_AlbumArtみたいな関数は存在しない
Representative_Sampleというのは、アルバムを「代表するサンプル」という名前の通り、そのアルバムについてのサンプルとなる情報を設定するものだそうだ。要するに、サムネイル(アルバムアート)とか、プレビュー用に楽曲のサビの部分だとかを扱うもの。(参考:MTPの仕様書 http://www.usb.org/developers/devclass_docs/MTP_1.0.zip)
それが今回の場合はアルバムアートという訳。
LIBMTP_Send_Representative_Sample関数の説明を読むと、iRiverやCreativeのデバイスでもJPEGデータ(要するにアルバムアート/サムネイル)を扱うらしい。

ちなみにこのコードでは、既にアルバム情報が存在しているかどうかを確認せずに、必ず新たにアルバム情報を作成している。なので、コマンドを実行する度に新たなアルバムが出来る。まったく同じ内容を指定して実行すると、まったく同じ内容が作成されるだけだ。

既に存在している場合にそのアルバム情報を更新するには、LIBMTP_Get_Album_List,LIBMTP_Get_Album,LIBMTP_Update_Album,あたりの関数を使えば良いだろう。


libmtpのサイトを見ると、libmtpを使ったソフトの例が載っている。
http://libmtp.sourceforge.net/downstream.php

RhythmboxやAmarokなどのソフトや、RubyとPython向けのlibmtpのwrapperもある。