classics.

2011/02/25 Friflickr

Webページをpdfに変換してKindleに送る

別にmobiじゃなくてpdfでもいいよねということに気付いたので試してみたメモ。wkhtmltopdfを落として、

$ ./wkhtmltopdf --minimum-font-size 25 http://oquno.com/ oqunocom.pdf

みたいにやるだけ。あとはこれみたいにメールで送ればいい。minimum-font-sizeはKindleで見るならそのくらいがちょうどいいかなと自分が感じただけなので、不要ならオプションなしでも。

wkhtmltopdfは優秀でとても便利なのだけれど問題はあって、Kindleがpdfを思うようにレンダリングしてくれない。あまり多く試してはないけれど、このブログでもページ送ってたら画像の位置がずれたりして破滅したので。普通のPCで表示する分には問題なく見れるpdfなんだろうけれど、高機能過ぎる感が。あと、タイトルと作成者情報が自動でセットされない。Kindleだとpdfはファイル名がそのまま一覧表示で表示される。あとはmobiよりフォントが汚いとか。そんなわけで、pdfは諦めた。

2011/02/23 Wedflickr

Webページをmobiに変換してKindleに送る2

http://oquno.com/log/eid2392.html
これの続き。

実運用してみたところ、文字化けと、kindlegenがsegmentation faultとかJSのエラーっぽいので失敗するパターンが発生。文字化けはUTF-8に強制変換で大体対応した。segmentation faultはよくわからないし、JSはscriptタグ除去しても残ったままなのでわからない。まあそんな頻繁にある事例じゃなければいいけれど。

URL投げたらメール送るまでのシェルスクリプトも一応公開しておく。https://gist.github.com/840249

2011/02/23 Wedflickr

Webページをmobiに変換してKindleに送る

単純にページをmobiに変換してKindleに送るというのがあったらいいかと思ったので作ってみるテスト。画像なしだったり自分の管理下でなくてもいいのならばSend to Kindleを使えばいいけれど、画像も欲しかったり個人サービスだと持続しない気がするので。

wgetとかcURLだと別ドメインの画像を含めて一気にダウンロードというのができなかった(調査不足?)ので、pavukとやらを入れた。デフォルトだと再帰的にページ取得しちゃったり、link rel="openid.delegate" のURL取得しちゃったので、以下のようなオプションに落ち着いた。

$ pavuk -singlepage -index_name index.html -fnrules F '*' '1234/%n' -quiet -disable_html_tag link 'http://oquno.com/'

1234のところにはページごとにユニークなIDを入れるとして、ダウンロードが終わったら(カレントディレクトリにkindlegenがあるとして)

$ ./kindlegen '1234/index.html' -o '1234.mobi'

を実行すると 1234/1234.mobi が作成される。これが5MB以下ならば(まあページ1枚なら大体大丈夫だろうけれど) @free.kindle.comで無料でKindle 3 WiFiに送れるのでメールで送信する。送信するメールアドレスはMange Your Kindleのページで追加しておく必要がある。Kindle上では表示されないので、mobiのファイル名は気にしていない。

$ uuencode '1234/1234.mobi' '1234.mobi' |  mail -s 'new page2mobi file' 'YOURACCOUNT@free.kindle.com'

でいけるかと思いきや、できなかった。> kindle3 で無料ニュース配信をする(さくらインターネット編)その1 | moiblog
のでここを参考にスクリプトを改変して、あるいはrubyとかでこのあたりを参考に

$ perl sendmail.pl '1234/1234.mobi'
こんなのをシェルスクリプトにまとめて、CGIかなんかからURLを引数に呼び出せるようにするとか、定期的にソーシャルブックマークの新着URLを投げたりすればいける。

2011/02/19 Satflickr

Google Latitude開始から2年と障害情報

http://googleblog.blogspot.com/2009/02/see-where-your-friends-are-with-google.html
いつの間にか2年以上経っていた。自分はサービス開始当初から主にemobileのemonster(Windows Mobile)で利用していて、位置情報公開しまくって割と便利に使っていたけれど、最近やっとAndroidの普及とiPhoneの似非マルチタスク化のおかげか流行ってきた感じがありますね。昨年末には上京の際なんかに便利に使っていたLocation Alert機能が廃止されてしまってがっかりとか残念なこともありましたが、年越し夜のピクニックでも活躍していました。

そのユーザー急増のせいか、最近は友人リスト取得がうまくいかない障害っぽい状況になることが多くなってきた。Webで見てもこんな感じで更新されない。

latitude dashboard

位置情報送信と個別ユーザーの情報取得は出来ているみたいなので友人リスト回りのAPIがおかしいのだと思いますが、昨日の昼間より前から24時間以上こんな状態で何のアナウンスもない(見つけにくいだけ?)し、天下のGoogleさんらしからぬ状況なので、金払っているわけでもないけれどさっさと改善して欲しいですね。

2011/02/19 Satflickr

自宅サーバープレイヤー改良

new version

Last.fm の track.love と、ディレクトリ構造のインクリメンタル検索(incsearch.jsに少し手を加えた)から、プレイリスト自動生成と再生とか追加。

これ http://oquno.com/log/eid2188.html とかradiko予約録音とか組み合わさって、そこそこ便利になった。音楽流しながら寝落ち率が上がってきている。

2011/02/10 Thuflickr

自宅のLinuxサーバーでmp3を再生してLast.fmにもscrobbleするのをwebから操作

というのを作った。

経緯

  • 自宅のスピーカーで音楽聴きたい
  • デスクトップマシン(普段スピーカーに繋がっている)を起動させるの面倒
  • こたつから出て操作とか面倒
  • Last.fmにscrobbleしたい
  • SSHつないで操作も面倒
  • というようなことを前々から思っていたため、やってみた。

実装

web audio player

レイアウトとか全然凝ってないけどこんな感じ。HTML5で音量コントロールがそれっぽくできるようになったのがいいですね。あと、それっぽい気がしたので再生中にはmarqueeしてみている。

フロントエンドは、適宜XMLHttpRequestでAPIへリクエストして、返ってきたJSONに曲情報とか再生情報が入ってるので適宜反映といった感じ。バックエンドでは、RubyでMPlayerを動かしてるデーモンがあってそれをAPI経由でソケットでコマンド送って操作する。mplayer-rubyを使ってはいるのだけど、結構バグがあったり機能が足りなかったりと色々とひどい感じだったので改造しまくったたこともあり、公開しても動かないのでコードは公開しません。通信部分については、わざわざWeb APIを作らずにWebSocket使ったほうがシンプルにできそうではあったけれど、WebSocketは終わコン説があるのでスルーした。また、Cometはよくわからないのでスルーした。

仕組み

あと、mplayer-rubyでコマンドごとに同じプロセスの標準出力を読み取っているせいなのか、全然スケールしない様子(秒間1リクエストくらいならいけるか?)なので、Webの操作ページは公開しません。まあ家にいないと音楽も聞こえないし。

その他

Webでの操作はスケールしないけど、Twitter botでも作って、replyで曲のリクエストを受け付けるとかならありかも。データベースはmt-daapd用のを使いまわせるので、検索も難しくはない。

参考

http://blog.meganelab.net/archives/2006/11/21/043150
結構前に見てやろうと思ったけどサウンドカードがなくて諦めた

2011/02/07 Monflickr

Ruby で ID3 Tag取得

リモートでサーバーの音楽流して(音はサーバーから出したい)Last.fmにscrobbleなりするのにID3タグの処理とかしなきゃいけない感じになったので、Python は2系統でやって文字コードのトラウマがあるのでRubyやってみた。

fairtilizer/ruby-taglib2 - GitHub これを入れたのだけれど、mt-daapdで文字化けしないmp3に関しては文字コード的にも問題なく読み取りできた。 適当に読み取ってみる。
require 'rubygems'
require 'taglib2'

tag = TagLib2::File.new(ARGV[0])
puts tag.title
puts tag.artist
$ ruby id3.rb ./shintou.mp3
浸透
Anemone
あとはWebから操作するインターフェース作ったり、Last.fmのAPI使ってscrobbleなりnow playingなり更新したり、スピーカーつなげたりすればできそうな感じ。