mRadio by Lyra over the Silverlight! Moraの視聴曲を再生しまくるWebアプリでfirefoxにも対応しました!

今年に入ってLyra(Lyra. Silverlight 2 MediaElementを操作するJavascriptライブラリ)というSilverlightのMediaElementをJavascriptでコントロールするライブラリを公開したのですが、ようやくそれをmRadioで使うようにしました。

http://x-jukebox.com/mradio
mRadioはMora.winのランキングの試聴曲をラジオのようにエンドレスで再生しまくるWebアプリです。Mora.winではWindows Media Streaming形式で試聴曲が公開されており従来のバージョンのmRadioではWindows Meida Player.ocxを使って再生していました。

ocx(ActiveX)はIEでしか使えないのでfirefoxでは非対応という制限がありましたが、今回の更新でLyraを経由してSilverlight 2で再生するようにしました。これでfirefoxでも再生できるようになりました!!!
これでmRadioは作業中音源でも使えるね。iPhoneで再生できるとうれしいなぁ。Silverlight対応してほしい。

Symfony 1.2にアップデート

自宅サーバのWebアプリで使っているPHPのフレームワークであるsymfonyのバージョンを1.2にあげました。

kwLabsのSandbox
x-jukebox.com
walkmanlog.com
などに影響があります。

下記を参考にやりました。

http://www.symfony-project.org/installation/1_2/upgrade
symfonyというか、Propelの1.2->1.3の変更でそこそこ影響をうけました。symfonyのModelをちゃんと使っていればPropelの変更などには影響をうけないんですが、複雑なSQLをModelでがんばるのが面倒で、中途半端にPropelを直接使っていたのでいくつか変更が必要でした。

PropelのUpdateにはこちらが参考になります。

http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Upgrading
symfonyの変更でいうと、
Modelの日付型の属性を取得するときにformat=nullで指定してUnixTimeStampを取得するような感じにしていたのだけど、symfony 1.2ではformat=nullで日付型の属性を取得するとDateTimeオブジェクトが返ってくるようでした。素直にformat=’U’でTimeStampをとるように変更。はまったのはそれくらい。

mRadio ExtJSでちょっと復活

mRadioずーと動いてなかったのよね。

Silverlight2で書き直す予定だったのだけど、とりあえずExtJSで書き直しました。

http://x-jukebox.com/mradio

mRadioはmoraのランキングから視聴曲を勝手に連続再生するハッキングラジオです。視聴曲がWindows Media形式のためWindows Media PlayerをActiveX経由でたたいて再生しています。このためIEでしか使えません。

Silverlightを使えばWindows Mediaストリーミングが再生できるので、Firefoxでも使えるようになります。本当はUIもSilverlightで書きたかったけど面倒だから再生エンジンだけライブラリ化してJavascriptからたたけないかな?

aTunesリファクタリング

aTunesの内部実装を書き直しました。JavaScript側はWALKMANLOGと同じフレームワークを使いました。これでOpenIDログインのところとかを共通に使い回す予定。

デザインも若干変わっています。(メニューの追加とか)
http://x-jukebox.com/atunes
機能的には、お気に入りアーティストの編集(削除)ができるようになりました。今までは追加ができても削除できませんでした。削除するAPIは用意していたのですがその機能を使うUIが追いつきませんでした。ログインとかこのあたりではlightWindowを使ってお茶を濁していたのですが新しいフレームワークのWindowで書き直し削除もできるようになりました。

あとは内部的にPEARのService_YouTubeで旧YouTube APIを使っていたところをGoogle Data APIのクライアントライブラリを用いてGoogle Data API版のYouTube APIを使うようにしました。動画の検索が早くなるといいなぁ。

自宅サーバのsymfonyを1.1.4にアップデート

自宅サーバのsymfonyのバージョンを10/4にリリースされた1.1.4にアップデートしました。なんか(x-jukeboxとかWALKMAN.LOGとか)動かなくなってたらごめんなさい。

「symfonyで開発日記」が全然1.1系のバージョンアップの記事を書いてくれないので、購読をやめて普通に本家のブログを追っかけることにした。(というか最初からそれで良かったのでは・・・)
マイルストーンだと今月に1.2が出るっぽいんだけど、どうなんだろう。チケットまだ半分以上残ってるだけど。

aTunesでOpenID対応しました

仕事より趣味のプログラミングの方で疲労する件について。

昨日の明け方にaTunesを更新しました。

http://x-jukebox.com/atunes

まず大きな対応としてOpenID。OpenID技術セミナーを聞いて日も浅い内にOpenID対応しました。ユーザ認証を外部のサービスに任せるというのはだいぶ前から考えていました。個人でつくるwebサイトだとユーザ登録作業って面倒なんですよね。内輪のサービスなら適当でもいいですが、真面目にやるとメールでの本人確認とか、sslでパスワードの入力画面などは暗号化するとかは個人の自宅サーバではかなり面倒な作業。

そういうわけでaTunesはユーザ登録に対応していなかったのですが、最近のOpenIDの流行具合に触発されてユーザ認証に対応しました!
いまんところ

  • mixi
  • Yahoo! JAPAN
  • はてな

のアカウントでログインできます。

もちろん上記サービスに限らず任意のOpenIDでログインできるはずなんですが、テストとかしてる余裕がなかったので今のところ上記サービスに限定しています。

さて今回のupdateのrelease note的なもの

OpenIDでのユーザ認証に対応

前述の通り。

お気に入りアーティストの管理

ユーザ認証ができるようになったので、お気に入りアーティストを保存できるようにしました。少しは日常的に使えるようになったか?

feedの配信

意外と目玉機能かもしれない?アーティストの新着動画をfeedにして配信することにしました。YouTubeのH.264のmp4をenclosureにつけてpodcast配信しています。なのでiTunesに登録すれば動画がそのままダウンロードできる!

“.”(dot)問題の修正

(俺的には)通称アリス九號.問題。

“アリス九號.”、”Mr.Children”などアーティスト名に”.”(dot)を含む場合にエラーが発生していました。フレームワークのrouting系の問題で、forumにいろいろ解決方法が載っていたのでそれに従いました。

2ページ目以降の動画再生できない問題の修正

なんで気がつかなかったのだろう。。。

aTunesで連続再生できるようになりました

aTunesがようやく使い物になるplayerになりました。

http://x-jukebox.com/atunes
具体的には連続再生に対応しました。playerにYouTubeのflashを貼り付けていただけなので1動画の再生が終わるとそのまま放置。1曲再生で終わるplayerでは作業用なんかには使えないわけで・・・でもeventとれないから仕方ないじゃん。。。と思っていました。

javascriptでハンドリングできないか調べようとしたらあっさり見つかりました。

http://code.google.com/intl/ja/apis/youtube/js_api_reference.html#Events
別にhackとかなんでもなく普通にJavascript APIが公開されていました。これを使ってplayerの再生が終了したら次の動画のplayerをajaxでとってきてreplaceするというコードを書きました。内部でリスト管理するようにしたのでバグとかがあるかもしれません。

連続再生できると今度は音楽ビデオじゃないものはスキップする機能が欲しくなりました。自前のdbにMusicVideoのフラグを用意しようかと思ったりしています。

symfony 1.1にアップデート

自宅サーバのsymfonyを1.0から1.1に更新しました。

x-jukebox(atunes/mradio)
walkmanlog
のプロジェクトも更新しました。

普通はバージョンをあげるメリットを見極めてあげるもんなのですが、勉強がてらつくってるWebサービスなのでなるだけ新しいものを使おうかと思った次第です。なんとなく軽くなんないかなーという淡い期待はあります。

1.0と1.1の互換性のない部分の更新のためプロジェクトのアップデートに数分かかったのですが、symfony(PHPの1ライブラリ)のアップデートでapacheを止めるわけにもいかないので一旦メンテナンス画面にした上で更新しました。

symfonyプロジェクトのwebフォルダの下に
maintenance.htaccess
maintenance.html
の二つを用意。

maintenance.htaccessはこんなん。

Options +FollowSymLinks +ExecCGI
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ maintenance.html [QSA,L]
</IfModule>

maintenance.htmlはメンテナンスです。を表示するただのhtml。

でsymfonyプロジェクトのwebディレクトリで下記コマンドを実行し、.htaccessを置き換え

mv .htaccess symfony.htaccess; mv maintenance.htaccess .htaccess

アップデートが終わったら

mv .htaccess maintenance.htaccess; mv symfony.htaccess .htaccess; cd ..; symfony cc;

で元に戻す。

mRadioをラジオっぽくしてみた

その日の思いつきでつくったmRadioでしたが、使い勝手があまり良くなかったと思うのでちゃんとラジオっぽくしてみました。

変更点は

  • Play/Pauseボタン追加
  • Next(Skip)ボタン追加
  • 再生時間表示
  • チャンネル選択(MoraWinAll,MoraWin邦楽,MoraWin洋楽の3種類)
  • 音量設定

SliderはYUI Libraryを使用。正直IE6でしか確認していません。

ラジオの周波数は、邦楽+洋楽、邦楽、洋楽の3つとなっています。

流行の視聴曲をランダム再生するmRadioをリリース

x-jukebox.comにて流行の視聴曲をランダム再生するmRadioをリリースしました。

mradio_20080302.jpg

mora winの邦楽ランキングのxmlを使って視聴曲をランダム再生しています。視聴曲がWindows Media形式のため、Windows Media PlayerをActiveX Object経由で内部生成し再生しています。このためWindows + IEでしか使うことができません。。。。この制限事項を解決するためにSilverlightで作ってみようと考えています。

SongWidgetのようにアマゾンのレビューを表示するバージョンも作ったのですが、デザインがgdgdになったので最初のバージョンはシンプルにということで機能を削りました。

mRadioは帰りの電車に思いついてそのまま夜中に作成したのですが、これを可能にできたのはWidget用に作っていたWidget Abstract Layer+Bullseyeという自作汎用ライブラリ(Javascript)です。例えばWindows Media Playerを叩くところはSongWidgetと共通のソースコードを使っています。