iPhoneでWeb連携アプリを作る際に注意すること

RemoteTubeLite(App Store)および現在絶賛審査中の有料版を作った経験から
Web屋がiPhoneアプリを作る場合というか、
自前のサーバ側プログラムと連携するアプリを作る場合に
注意した方が良さそうなことなど書きたいと思います。
まあ、iアプリとかクライアントアプリを作ったことのある人には
概ねお馴染みの問題です。


ポイントは大雑把に
Objective-Cという言語を使用する
・ネイティブアプリである
という二点でしょう。


iPhone用アプリを開発するのには
Objective-Cという言語を使用します。
Objective-C自体はJavaっぽいC++といった感じで
それほど難しくはないですし、
CocoaフレームワークXCode + InterfaceBuilderの
開発環境も快適なのである程度いじっていれば慣れるでしょう。


それならば何が問題なのかというと
サーバ側プログラムと連携するアプリを作成する場合、
Objective-CPerl/PHPといったサーバサイドプログラムではなく
HTML + CSS + JavaScriptみたいなクライアントサイド技術みたいな立ち位置であるところです。


Objective-Cの開発がそれほど困難ではないといっても
HTML + CSS + JavaScriptで画面を作成するのよりかはだいぶ大変です。
通信をしてサーバ側からXMLなり何なりでデータを取ってきて
parseしてオブジェクトか何かに詰め込んで云々。


また、Cookieが使えないために、
セッション維持の機能は自前で実装しなければなりません。
通信はNSURLConnectionでの非同期通信が基本なので、
その辺の作法も多少慣れない感じでしたかね。


もちろん、iPhoneアプリ開発には面白いところもあります。
iPhoneアプリではSQLiteが使用できるので、
データを毎回差分だけ取ってくるような作り方が出来ます。
素材画像なんかもアプリに普通にバンドルなので、
通信は差分のテキストと都度の画像だけ。
memcached/Tokyo Cabinetみたいな
Key-Value Storageも使いやすくていいです。


サーバ側プログラムと連携するiPhoneアプリを作るというのは、
何というかアプリをサーバ側とiPhone側で二つ作るような感覚です。
あるいは画面を全てAjaxで作成するぐらいの勢いというか。
まあ、結構ヘヴィでした。

RemoteTubeLiteリリース!!

iPhone用アプリをリリースしたので宣伝します。


iPhoneをリモコンにしてブラウザ上のYouTubeプレイヤーを操作する
RemoteTubeLiteというアプリをリリースしました。
PCやMacのブラウザからRemoteTubeのサイトにログインして使用します。
もちろん、iPhoneYouTubeプレイヤーを立ち上げることも出来ます。


Liteなので無料です。気が向いたらダウンロードしていただけると嬉しいです。
色々と追加機能のある有料版も現在審査中なので
運がよければそのうち告知できるでしょう。
http://bit.ly/9AAuw


本名が元衆議院議員と同じ名前ですが、
関係はないので気にしないでください。
まあ、関係があったとしても気にする必要はないですけど。
わりとどうでもいいサイトのトップページみたいなのはRemoteTubeこちら。


詳細についてはAppStoreのリンク先なり
紹介ページなりを見ていただければいいんですが、
とりあえずコピペしておくと
・RemoteTubeのウェブサイトで動画を再生。
iPhoneYouTubeプレイヤーで動画を再生。
・Eメールであなたの友だちに動画のURLを送信。
Twitterに動画のURLをポスト。
といった感じです。


バグとかみつけた場合は報告していただけると嬉しいです。

追記:
動画をYouTubeにアップしたのでこちらでも貼っておきます。

Object Oriented Python

ということで、ようやくオブジェクト指向です。
これはなかなか独特というか、アレですね……


アクセス修飾子とかいうんでしたっけ、
public, private, protectedみたいなやつ。
あれがありません、Python
アトリビュート(いわゆるメンバ変数のこと)とかメソッドの先頭に
・_をつけると「外から修正しないように」という主張が出来る(システム的な隠蔽ではなくただの慣習)
・__をつけると外部からはアクセスできなくなる
の二種類の方法で隠蔽が出来ます。
アトリビュートは__init__メソッド(コンストラクタ)の中で作成しますが、
動的に作成することも出来ます。


あとメソッドはselfを最初の引数にしなければなりません。
名前はselfじゃなくてもいいらしいですが、
要はobject自身が入ってくるわけですね。


んで、コードはこんな感じで書きます。

class Hoge:
	def __init__(self, hoge):
		self.hoge = hoge
		self.__hogehoge = hoge
	def getHogeHoge(self):
		return self.__hogehoge

hoge = Hoge("aaaa")
print hoge.hoge
aaaa
print hoge.__hogehoge
AttributeError
print hoge.getHogeHoge()
aaaa


JavaとかC++を知っていると異様に違和感がありますが、
郷に入っては郷に従えといいますからね……

Pythonで再帰

Pythonっていわゆるfor文ってないんですよね。
いや、ありはするんですけど、
あれはC系の言語だとforeachとかfor in文にあたるものですから。
カウントとかするには他にごにょごにょしなければならない。


まあ、ループしたければ再帰でしょ、常識的に考えて、ということで。
今日は再帰

def loop(func, x, count):
 if count == 0:
   return x
 else:
  return x + loop(func, func(x), (count - 1))


def sum(x):
    return x + 1

loop(sum, 0, 10)
55

そういえばPythonはx++みたいなインクリメントも無いんですよね。
もう少し抽象化してもいいですが今日は眠いのでこの辺で。

はてブがgoogleでスパム認定?

はてなブックマーク詳細ページがGoogleペナルティ…?という記事。


・どうもこれって、http://b.hatena.ne.jp/entry/ 配下がすべて上位に出なくなるたぐいのペナルティ食らってるように見えるんだけど…
ということらしいです。
はまちちゃんが言うぐらいなのでその通りなのかしらん、ということで
このブログでホットエントリに入った記事で調べてみたところ、
site:b.hatena.ne.jp iPhoneアプリ開発者は『影響力の武器 実践編』を読むべし

は一件目に出たので、偶然かなんかじゃね?
と思いつつ
site:b.hatena.ne.jp お手軽によい習慣を作る方法
を調べたら遙か彼方でした。
んで、自分がブクマしている記事を片っ端から調べたら
概ねお亡くなりになっていたので南無。


まあ、実際のところGoogleで上位から短期間消え去るのは
それほど珍しくないのでしばらく観察しないとわからないという
元も子もない話もありはするんですが、
はまちちゃんの推測が正しいとするならば、
上位に残っている方の記事のGoogleにインデックスされているURLが
http://b.hatena.ne.jp/entry/d.hatena.ne.jp/helmok/20090622/1245675535
になっているのがポイントなんですかね。

追記
元記事を読み直したら、
はてなのクローキング?はもうやめちゃってたんですね。
エントリーページの URL 変更についてCommentsAdd Star
なので最後の推測は微妙なところなのでdel。