JPerl Advent Calendar 2008/12/25

JPerl Advent Calendar 200824日youpyさんからまわってきたので書いた。
バイナリファイルを解析する
perlのtipsでなくモジュール紹介になってるけど、よっぽどのことがないとperl触らないであろうバイナリな方々が振り向いてくれるきっかけになればいいなと思います。

mercurialのリポジトリをgitに変換する

No Clumps, Fisheyes or Microgels - Blog - Converting Mercurial To Gitを見て、mercurialで管理してたWebService::Wedataで試してgithubを上げた。細かく見てないけどmercurialで管理してた頃のcommit logも見えてるので問題なさそう。
特に難しい操作は無いんだけど一応日本語でも書くと、gitリポジトリ用に空のディレクトリ用意してそこでgit init-dbしてhg-to-gitというツールに入ってるhg-fast-export.shにmercurialで管理してたディレクトリを指定して実行するとgit移行用に準備してくれるのでその後にgitのリモートリポジトリにpushで移行できる。

バーコードを読み取るrubyモジュール

バーコードが写った画像ファイルからバーコードを読み取るモジュールを書いた。実装はlibzebraのラッパになってるだけ。640x480以上あって水平に写ってればEAN値を取得できる。

http://github.com/koyachi/ruby-barcodescanner/tree/master

flashのカメラで入力した画像をサーバに送って解析すれば本棚.orgブクログみたいなサービスの簡単入力フロントエンドとして使えるかと思ってとりあえず動いて見せられるものも作ってたけどeeepc+ubuntu+flash10の環境で640x480キャプチャできなかった。webcamからキャプチャするlinuxのデスクトップアプリでは同じカメラ使って640x480で撮影できるしthinkpad+windows+flashは640x480キャプチャ成功してるのでflashに与えるパラメータが何か足りないかlinuxflashの問題だと思う。ものによっては普段linuxデスクトップ使ってる人なんて無視していいと思うけど原因切り分けできてないのでデモなし。試験に使ったソースはこんな感じflashクライアントはcyazoのとき作ったもののpost先を試験サーバに変えて。

まとめ,関連

  • flash.media.Cameraまわりの制限を要調査
  • flash通すならクライアントで解析すれば->javaの実装を移植するとか
  • en.barcodepedia.com/downloadで公開されてる"opensource"なflash barcode scannerはソースがflaでIDEないと見れない上に見たらこんなかんじで使ってるswcのソースは非公開だった
  • rubyはc拡張書きやすい
  • sinatra簡単


追記 2010-03-20
RubyPulse :: RubyPulse Episode 0.31 - barcodescanner - Retrieve barcode value from barcode image file. - koyachi でaaalexさんが紹介してました。debianにzbarとbarcodescannerインストールする方法も解説してます。barcodescanner作った時点ではlibzebra使ってたんだけど公開してしばらくしたらVishnu Gopalさんからzbar使えっていうパッチが送られて来たので現在はlibzebraでなくzbarを使っています。

きょうのスケッチ tts可視化

http://buffr.org/tmp/tts/

katakoto speaker作ったあとにyahoo ttsの音を他にも使いたいと思っていて、こねくりまわした成果。katakoto speakerのperl版みたいのを作って単語単位のタイミングをjsonにしてprocessing.jsの描画ループでflashのmp3再生と同期させようとした。p5.jsの描画ループベースにすると描画の遅れで音との同期が外れるので、p5の描画ループを使わないで音をベースに描画を合わせた。

Cyazo

flashwebcamからキャプチャしてGoogle AppEngine経由でgyazo.comに保存
http://send2gyazo.appspot.com/cyazo/

最初にflash playerにカメラ使用とポップアップ許可が必要だけど、webcam持ってて撮ったものをネット経由で見せたいときにgyazoのようにユーザ登録不要でクリックだけで簡単に使える。携帯電話のカメラ、デジカメ+Eye-Fiがライバル。

gyazoへの送信部をappjetで作り始めたけどwpostの中身を真似てmulti-post/form-dataをポストできるようにするにはappjet._nativeの中身自由に触れないと実現できなさそうだった。appjetでホストするには10Mじゃ不安というのもありGoogle AppEngine向けに書き直した。crossdomain.xmlを置いていて、BitmapDataと成功/エラーハンドラ渡すようなactionscript関数にしてあるので外からもwebcam画像以外もgyazoに保存できる。

[追記]appengineのurlfetch応答に5秒くらいかかるとDownloadErrorが出ていて、昼間は連続して失敗することが多かった。画像サイズを640x480から400x300に変更してみたけどエラー出るときは出るので、send2gyazo.appspot.com経由でgyazoに送るのは画像がそんなに大きくない or gyazoサーバが忙しくないときしか成功しないかも。アプリでリトライしてもいいけど相手側状況に影響されるのでappengineのurlfetch使ってる限りあまり改善しなさそう。Cyazoで失敗したら何回かクリックしてみて、連続エラーでるようなら時間置いて試してみてください。手軽じゃないけど。

aidy3 search更新

http://search.aidy3.buffr.org/
検索用データベースをGoogle BaseからHyper Estraierに変更してまともに使えるようにした。現状2万件くらい登録されてる。gbaseのjson読んでjavascriptで動的に書き換えるスタイルからstatic htmlな検索結果ページに変更。

hyper estraierは親子ノード作って実データは子に登録して親子間をリンク、検索は親に対してdepth=1で実行している。こうしておくと後で子を増やしたり条件変えてインデックスを作り直して差し替えるのが簡単にできる。

Firefoxで開いてるタブのリストをurlistに送るJSActions

http://buffr.org/tmp/sendTabsToUrlist.js
binWord/blog: Firefoxで開いたページを携帯電話やPDAで閲覧するを見てアップまで簡単にできるといいよなーと思ったのもurlistのアイデアのひとつだったのを思い出したのでurlist向けのものを作った。スクリプトの内容はほとんどそのままです。