2010年2月18日木曜日

お誕生日だった。

いやぁ、また年取ってしまいました。とほほ。

2月17日は私のお誕生日でした。
ここ数年、嫁さんの流行で私のお誕生日におかしなケーキを注文する。というのがあるらしく、
昨年はこんな感じ


やら、こんな感じ


でした。

で、今年。



 

そう、きましたか! www
iPhoneですね、これ。

しかも、AbrViewerがちゃっかりのってますw
つか、アイコンがすべて作ってあるよ。。嫁さん、こんな無茶発注かけて、ケーキ屋さん、ごめんなさいw

なので、せっかくなのでケーキ屋さんの力作アイコンを1つ1つ見ていきましょう。
左上から。
  
コンパス

  
乗換案内

 
Google Earth

 
Skype

 
UstreamのBroadcaster

 
Flickr

 
ニコニコ動画

 
セカイカメラ

 
Classical

  
VoiceBand

 
Dropbox

 
RedLaser

 
和英和

eBay

 
aMart

 
で、AbrViewer

下段は定番のこいつら。
メール、電話、Safari、iPod

いやぁ、やはりパティシエ、Good Job !
こんな仕事してもらって通常のお誕生日ケーキと同じ値段だった(らしい)ので申し訳ないので、お店のリンクだけでも貼らせてもらいます。


というわけで、ここを私がいただきました。w


毎年、毎年、ありがとう、嫁さん。愛してるよw。


p.s.
ムービーにしてみましたw
http://www.nicovideo.jp/watch/sm9762021


2010年2月15日月曜日

でた! AppStore/utilitiesの新着トップだ!

iTunesのAppStoreに新着として表示されました。

これ、どうもリリース日のものをアルファベット順に並べるようで、偶然にも「AbrViewer」なんてけっこう索引の前めの名前だったのでトップページの最上段に表示されました。
あはは、これは良い誤算w

これが日本のiTunesの画面。

こっちがアメリカのもの。


まんなかコンテンツの左上に注目!ほらほら!


左上!左上!


うほほ。らっきぃー♪
つか、他のアプリはエロっちぃのが多いぞ?ここユーティリティカテゴリ―だったよな?(^^;

で、つぎ。

音声ものにするつもりで、録音とか再生の実験コードを書いてます。
MP3を再生させるコードを書いて、テストで何曲かいれてみて、いろいろ操作してたら、そっちが楽しくなってきてしまって、アプリ用のコードが書けてません。(^^;


もちっとマジメにやりますよ、、、はいっ!

無事販売開始されたようです。

AbrViewerはアメリカ太平洋標準時2月14日0時から iTunes AppStoreで販売がはじまりました。
英語と日本語に対応しているので、usと日本のiTunes Storeから検索効いて買えるようです。

iTunesのURIを設置しておきます。

何人かの知人が購入してくれたようで、すでに鋭い意見をいただいています。
さっそくバージョンアップになるかも。。。(^^;


あ、あと、サポートページは結局 mobile safari対応に間に合っていません。ただのwebページしかありませんので見づらいです。
これも実施日未定ですが対応予定になっています。

2010年2月13日土曜日

AbrViewerのサポートページとかいろいろ

AppStoreでアプリを公開するにはサポートのwebページやらなにやらを用意することがAppleから必須にされているので、作った


英語は全く自信なし。とりあえずあるだけ。片言でもあるだけでなんとかなるかな、、、という甘い考え。
実際、私の場合、日本語だってあやしいのに。


で、これを作るついでに会社のwebサイトも、ちゃんと(?)作ることにした。
以前は私個人のwebサイトに会社情報だけ載せてたんだけど、ドメイン自身はだいぶ前から取って持っていたので、それを設定した。

なんと!今時、日本では珍しい .com 企業ですwww
まぁwebのほうはボチボチと更新していきます。


2010年2月11日木曜日

in Review & Ready for Sale

えと、バーコードでISBN読んでamazonのブックレビューを表示するiPhoneのアプリは「AbrViewer」として2月6日にiTune Storeに登録申請しました。
で、2月9日になってin Reviewになり、2月11日早朝、めでたく Ready for Sale になりました。


なにしろハジメテのことだったので、ちょっと(いや、だいぶw)ドキドキしてましたが、けっこうすんなり通りました。
でも、Appleのreviewってどうなんでしょうね?
今回申請してみて思ったんだけど、基本的に申請するものってアプリそのものとそれのサポートサイトのURLくらいで、マニュアル的なものはまったく提出しない。それに今回、サポートサイトもちゃんと出来てるわけではない状態だったので参考にしたとも思わわれない。つまり、いきなりアプリ渡されて、これをAppStoreにのせるかどうか判断してるわけだよね?


これって手の込んだアプリとかだと難くしねーか?
今回、私が申請したヤツは単機能だから比較的わかりやすいし簡単だろうけど、手の込んだヤツだと目的を達成させるための操作が煩雑だったりすると、reviewerの中の人も困惑だろうに。。。
ああ、だからreviewの期間ってアプリ次第でバラバラなのか。


つまりだ、はやくreviewを通りたかったらわかりやすい単純な操作にしとけ。ってことだな。
じつにiPhoneアプリのガイドラインに沿ってるな、と妙に納得w




あ、AbrViewerは登録時に公開日を2月14日にしてしまったので、それまで公開されませんけどねw





2010年2月8日月曜日

カイゼンカイゼンまたはオオキクカイゼン

バーコードは読めるようになったので、アプリ全体の機能をすべてつけて、いざ、大量の本で実地試験と相成りました。

とりあえず、作業デスクのそばにある何冊香の本で試してみたところ、うまく読み取れないコードがいくつかでてきた。
バーコード自身を目視してみると白黒が1モジュールづつ連続しているところだったり、4モジュール連続で白とかの部分がうまく読み取れない場合があった。
(モジュールとはバーコードの最小単位。あのバーの一番細いのが1モジュールにあたる)

自分のソースコードなのでいくらでも手を入れられるし、あーでもない、こーでもない。といった実験もできる。ちょっと反応は鈍くなったけど、手近の本のバーコードが読めるようになった。
まぁ反応の鈍さは複数回のループ処理など、まだコードの最適化をやっていない部分が大きいので、コード確定次第、最適化を施せばいいやと。

ので、自宅にある1,800冊オーバーの蔵書を誇るマンガ棚にいって、かたっぱしからバーコードを読んでみた。(なぜそんなにあるかはここらへん参考にしてね)

、、、、、勝率8割程度、、、、orz

これじゃだめだ。20%も読めない読み間違えが発生する。
せめて95%、希望は99%。願わくば100%認識率にしたい。

ちなみにライセンス買おうかどうか迷ったRedLaserのバーコードは認識率100%。しかもすごい速さで認識される。

負けてる、、、いや、負けてもいいのだけど、負けすぎている。
相手はiPhoneもバーコードも先達で社名からもわかるようにバーコードのプロだろう。
こちとら2日間やそこらでつくったバーコードスキャナだもの、負けているのは仕方がない。しかし、負けすぎだろー。実用にならないよ、、、、80%程度じゃ。

そして、決定的に敗北を味わったのが、いくつかある洋書(主にアメリカ)のバーコードスキャンをおこなったとき。

ぜんぜん認識されない。勝率1割程度。。。
当初からワールドワイドに展開♪とかうそぶいていたのに、なにこのありさま?
アメリカ向けにはバーコードスキャン機能禁止ってしないとならない?
ちなみにRedLaserはこちらも100%認識してました。


 それでも、ちまちまとカイゼンカイゼンを勧めた結果、多少まともに洋書は読めるようになったけど、こんどは日本の本の認識率が下がりだした。

 あっちを立てればこっちがたたず。

もう手詰まり状態で悶々とした日を数日過ごしたので、いっそのこととおもい、バーコード認識部、正確にいえば画像を取り込んでから2値化補正するまでの部分を、まったく新しい方法で実装し直すことにした。
それまでは画面を10分割くらいして、ちまちまドットを数えていたのだが、この新しい方式は分割は3つ。ドットもちまちまカウントするのではなく、X軸の各位置(dot)をY軸方向に全部加算して得られた値からバーコードを内部的に再構成してから、それのドットを数えるようにした。

で、これが大正解!!
日本のバーコードもアメリカのバーコードもほぼ問題なく読めるようになった。稀に間違いがあるよう(経験則からいって1〜2%程度かな)だけど、それも再度バーコードスキャンしてみればちゃんと読める。希望の99%はほぼクリアされただろう。
で、なにが良くなったかって、全体の計算量が減ったので、すごく反応がよくなったこと。レスポンスがいいので使っていてストレスがない。
バーコードをちょっとかざすだけでサクっと読んでくれる。(もちろんオートフォーカスがちゃんと焦点をあわせていることが前提だが)

RedLaserのバーコードスキャナと比べれば、もちろんまだまだ負けてるけど、負けすぎていない。十分実用になる範囲だ。


と、いうことで、この新しい方法を正式に採用し古いバーコードスキャンルーチンは捨ててしまい、これをいれたものをビルドしてAppleにアプリ申請した。
これが2月6日。


さてさて、申請のreviewがいつから始まってどうなることか、まだ先のことはわからんけど、とりあえずiPhoneアプリ第一弾は提出できた。

思いのほかバーコードの認識率がいいので、これを使った第2、第3のアプリの構想もはじめたので乞うご期待!


というわけで、これが現在の本業なのです。

そしてバーコードの読み取り機能

さて、最大の目玉機能であるバーコードスキャンの件。

下調べはamazonアクセス実験なんかと並行して実施してたけど、amazon接続がうまく行くことを確認したので、本格的にバーコードの読み取り機能をつけていこうとした。

下調べ中にわかったんだけど、iPhoneのバーコード読み取り機能ってアプリで販売されている。(RedLaser)
しかも、このアプリは大ヒットらしく、TechCrunchにこの件について記事になっていたくらいだ。
それから、このアプリの会社は、このバーコードスキャン機能を有償でライブラリ提供しているようで、会社のwebサイトにライセンス料金が書いてあった。それによると、、、
  • デベロッパ登録は $50
  • 最低$2,500
  • 5万本以上売ったら、そこからパーセンテージでライセンス料ね。
とのこと。
100本とか200本売れれば御の字だぜ!と思っている身に $2,500はきびしーー。
てか、仕事がなくて貧乏になっているのに、ここで払える金なんぞありません!

とはいえ、バーコード読み取り機能がついてないと、当初の構想の達成にはならないので、最悪、金を払ってでもライセンスを受ける覚悟だけ決めて、まずは自分でバーコードスキャン機能を作ってみることにした。

まずはバーコードとはどのようなもので、ISBNとはどのようなもので、ISBNとバーコードとはどんな風に絡んでいるのか?ってのをwebなどで調べて、それぞれの規格を把握。
これをもとにバーコードの読み取りコードを書いていこうとしたのだけで、その前にiPhone固有の大問題が発覚した。

実はAppleから提供されるドキュメントや前述の「iPhone SDKアプリケーション開発ガイド」にはiPhoneカメラのリアルタイムでの画像取り込み、処理の方法がまったく書いてない。
カメラで写真やムービーを撮る方法はいくらでも解説がありサンプルコードが存在するのに、カメラ機能だけ有効にして写真をとらずに表示されているカメラの映像をプログラムに取り込む方法がまったくわからなかったのだ。
これはバーコードスキャンするほうからすると致命的な問題。だってバーコードの写真をいちいち撮影した上でそれをアプリに読ませて認識されるなんてしたくないじゃない?バーコードにカメラをかざしたら「ピッ!」とかいって即でamazonに飛びたいじゃない?

いやぁ、延々調べましたよ。セカイカメラやUStreamアプリ、それに上記のRedLaserもリアルタイムで画像処理してるんですよ。でもその公式APIが存在しない。まじで途方にくれました。
で、その探しいる途中ですごくヒントになるwebの書き込みを見つけました。

これですべてわかりましたよ。
そうなのです!カメラのリアルタイム画像を取り込むAPIはまったく存在しないのです。そんなものはもともとないんですよ!
カメラの画像を取り込むのではなく、カメラが写したiPhone上の画像を連続でキャプチャすればいいわけだ。
で、キャプチャもAPIがあるわけでもなく、いま現在iPhoneに写っている画像のビットマップメモリを直接参照(実際には一旦、別のCGImageにコピーしたものだけど)すればいいわけです。

実はこの機能も非公開APIなのだけどUStreamが審査を通過してからはその利用が暗黙のうちにOKになったようで、おかげでセカイカメラやそれにつづくAR/VR/リアルタイムカメラエフェクトなアプリも軒並み審査を通過している。
すごく合点がいきました。いっきに視界が晴れ上がった気がしました。

で、さっそくその機能をつかってバーコードをキャプチャし、仕様書をもとにオリジナルで考えたアルゴリズムでバーコードデータをリアルタイムで2値化、補正してみることにした。
それがこれ。
 
画像のが上半分が実際にリアルタイムスキャンしているバーコード。
その中段にあるのが2値化直後の画像。
そして下段、タブバーの上にある細い白黒画像が実際にバーコードとして認識させようとして補正を加えたもので、非常に鮮明にバーコードが二値化された。
で、これをバーコードの規格(JANコード)にそって読み出すと、ISBNコードを取得することができた。
やったね! これで下手にライセンス料を払わないで済むことになるよ!

と、バーコードが読めた瞬間、
「オレって天才! いま、世界はオレを中心に廻っている!」
と、いつもの勘違いを味わっていました。
その後に、まさかあんなことがおきようとは。。。


ちなみに、このバーコードの読取コーディングをはじめてから実際にISBNが読めるようになるまで約2日くらい。結構楽勝!

謎のamazonへのアクセス失敗

さらに続くのだがw

そうなってくると、目的はしっかりしたので、手段を決めて、ひとつづつ解決していけばいいわけです。もう、ここまでくれば50%はできたも同然。
技術的に懸念があるとすれば amazonのAPI使ったことないのでその使い方の習得と、iPhoneでのバーコードスキャン機能。

バーコードスキャン機能はバーコードの規格やら画像認識やら面倒が多そうなので、まずはamazon APIへのアクセス方法を調べて実際にやってみることに。

これはそんなに難しくなかった。
amazonはすでにAWSのEC2をつかっていたりするのでデベロッパとして登録済み。なのでamazonサイトを漁って必要なドキュメントを読んだり、webで解説している人たちのサイトを参考にして自分でもAPIつかってamazonにアクセスしてみることにした。
もちろん、いきなりiPhoneのコードで書くと基本的なところでツマズいた時に原因の切り分けができない可能性あるので手馴れたPHPでwebサービスとして実験コードを書いてみた。資料もあるしPHPのコーディングは慣れているのであっという間に完成。個人的にamazon EC2のサーバを借りているのでそこに設置して実験してみた。
amazon.co.jpにISBNをItemの引数としてアクセスしてみると見事にamazonで表示される情報が引き出せた。これは楽勝!

と、おもいきや、なんかうまく引き出せない場合もある。
まったく同じISBNなのに、うまくできるときとできないときがあり、原因がわからない。ちなみにamazon.comやamazon.co.ukへのアクセスではこのような状況は発生せず、毎回、すべてうまくアクセスできた。amazon.co.jpだけ、なんかダメみたい。
 webで同じ様な境遇が人がいないかと調べたけど、こんな症状はみつからないので、仮説をたてた。

◆仮説
 仮定1.
amazon.co.jpのAPIリクエストを受けるサーバは複数台ある。
(これは仮定ではなくて実際そうだとおもう)

仮定2.
そのサーバは地域もしくはIPアドレスでフィルタされる設定がされている。
もしくはルータとかでフィルタされているかもしれない。
(実際、アクセスしてくるIPアドレスでブロックしていて、amazonからの接続を拒否されているwebサービスもあったらしい)

仮定3.
私が実験しているサーバのIPアドレスもしく地域(us東海岸)がそのフィルタにひっかかっている。IPアドレスはEC2から払い出しされたものなので可能性はある。

仮定4.
で、そのフィルタの設定はamzonのサーバ間で共有、統一されていない。
(不当なwebサービスをブロックしたいなら、一部サーバだけでもブロックすれば恒常的なサービスとして提供できなくなるのでamazonとしてはこれで問題はないだろう)

この4つの仮定が成立していることによって、私の実験コードはうまくいったりいかなかったりしているのではないか?
これはamazon.com/co.uk/.fr/.ca/.de のそれぞれでは発生しなかったため、amazon.co.jpだけの固有の問題だと思われる。

ってことでIPアドレスを変えればうまく行くだろう。という結論にした。
他にグローバルIPアドレスは持っていないので実験はできないけど、これを問題にしている人が見つからないということから、非常に稀な現象であろうと。なので1つでも仮定が崩れれば問題なくアクセスできるであろう。ということにした。こんなことでいつまでも時間とられれていても仕方なのでね。

まぁPHPで不安は残りながらもamazon APIの使い方はわかったのでそれをもとにObjective-CでiPhoneに実装してみたところ、もちろん、アクセスに失敗することなどなく、すべてうまくいきました。
仮説成立!めでたしめでたしw


ちなみに、この時点でISBNコードの手入力でブックレビューを表示するところまでは成功している。これ1月の中旬ごろのことだと記憶している。ここまでくれば機能的には70%はできたも同然状態でしょうか。最悪、バーコードスキャンのプログラムが失敗しても製品としては言い訳がたつくらいの機能はついています。

でも、本当にほしいのはISBNバーコードをサクっとスキャンしてレビュー表示する機能です。本題はこれからだっ!!!


注)
http://twitter.com/ohneta_/status/8064153065
http://twitter.com/ohneta_/status/8064154887
ここらへんで結論をtweetしてるけど、これはiPhoneで実際にamazon.co.jpにアクセスした結果をもとにして確証を得たあとの発言です。

それで本業であるiPhoneのアプリ開発なんだけど

で、いっこ前の話題の続きになるけど、 12月初頭に Mac miniを購入してデベロッパ登録もした。仕事がなくて貧乏なのに年会費1万なにがしとか取られるんだよなぁ。
まぁ、それでMacの操作になれてみたり、ドキュメント読んだり、知人からいただいた本でiPhoneやcocoaフレームワークに慣れてみたり、、、。何を作るか決めてはいなかったのだけど、基本事項を習得していった。
で、実際にプログラムを書き始めると自分専用で使えるiPhoneがほしくなるわけで、12/23に私もMNPしてiPhone 3GSをゲット!

この日から本格的にiPhoneアプリ開発を開始です。

当初、嫁さんが欲しいといっていたマルチタイマーアプリを作ろうかなと目論んでいたんだけど、正月前にオライリーの「iPhone SDKアプリケーション開発ガイド」は読んでおくべきだなと思い、和歌山県で最大の本屋さんに出向いて購入。いったついでにiPhone関連の本も何冊か仕入れておこうとおもって、いろいろ漁っていたのだけど、どの本がいいのかよくわからなかったので、その場で持参したiPhoneでamazonのブックレビューを読んで選んでいた。で、その時、

ピンっ!
 ってきたのよ。

実用書とかって実際どれがいいのかってわかんないじゃない?目的はわかっているのだけど手段がわからないから参考にしようとして本を買って読むのだけど、その本自身に書いてある手段がどれくらい参考になるのか、って自分じゃまだ理解できていない場合がほとんどでしょ?だからamazonのブックレビューとかとても参考になるし、参考にしてもらいたいとの思いで書く人もいるわけです。

 ただ選択肢の本がいっぱいあると、そのブックレビューを見るためにamazonで検索するにも結構な労力が必要じゃない?と思ったわけです。 iPhoneなんか画面小さいからさらに苦労が多いわけですよ。まったく。
だったらさ、せっかく本にISBNついてるんだから、それ入力で即目的の本のブックレビュー読めたらうれしくね?ってのが最初の発想。
実際、amazonの検索ワードにISBN入れれば一発で検索されるんだけど、ブックレビューだけ読みたいのだからamazonの他の情報は邪魔なわけです。専用アプリでサクっと表示できたらいいのになー。と思ったわけです。
そしてISBNっていま出版されている本にはすべてバーコード印刷されている(ここ大事です!試験にでますよ!ww)のですよ。だったらiPhoneのカメラでバーコードをスキャンしてISBNを拾い出して、それのブックレビューを即読めたら、すごくうれしくね? すごくね、それ? 欲しくね?少なくとも、いまの俺はすごく欲しいぞ!!
という連鎖反応がおきて、頭のなかでアプリの構想が決定してしまいました。
で、これ思いついたときに、すんごく興奮していっしょに行っていた嫁さんに話たんだけど、反応はいまいちw。
でも、まぁ、少なくとも俺は欲しいし、俺が欲しいと思うくらいだから、世界中で100人や200人くらいは欲しがるだろうと。ニッチすぎるかもしれないけど、でも欲しがる人はいるだろうと思い、嫁さん要望のマルチタイマーアプリは置いといて、自分の構想のアプリ開発を強行決定!(@自分の中で)したのでした。

これ、去年の12月28日くらいの話です。

flying tweetその後といまなにしてるの?

いやぁ、最後にブログ書いてからすでに3ヶ月近く経ってしまった。
ちょいと本業を本気でやっていたので、flying tweetをぜんぜんやってなかった(汗
盛大にバグってるまま公開放置してたから、もうだれも使ってくれてないようだ。実際自分でも使ってないし。。。。

で、その本業のほうなんだけど、いまさらながらiPhone/iPodのアプリ開発を始めたのです。
去年の夏くらいから受注の仕事が全くなくなってしまって、収入の見通しがたたなくなってしまい、世の中不景気なので営業かけたところでそうそう受注仕事があるわけでもないし、現在住んでいる地域ではそんなもの壊滅的な状態。

なので、「こんな時こそ自分中心でできるものを作っておくべきだよな」とおもい、以前に作っていたwebサービスの展開を考えたり、現場復帰をちょっと希望している組み込み系マイコンやFPGAを触ってみたりとしていたのだけど、どうせやるならワールドワイドに展開したいの思いが強いので、今更ながらiPhone/iPodのアプリ開発をやってみることにした。

実際は11月に嫁さんがiPod 3GSに機種変して実際に触ってみて面白かった。ってのが要因なんだけど、 昔とった杵柄でMacの(Macで)プログラムを書くこと(といってもSystem8ぐらいまでだが)に抵抗はないし、NeXTだってちっとは触っていたので、どうにかなるでしょう。。。と、相変わらず甘い考えで手を出しましたw

てことで、flying tweetはもちっと時間に余裕ができたら、開発再開したいと思っていますが、いまはちとペンディングにしといてください _o_  > 関係各位