2010-06-30

古いXcode用のアイコンを作ったよ - Xcode aged


http://bit.ly/aIshfv

焼けた青写真てな感じにしてみました。もう、Xcodeだらけでわかんないから!

icnsファイルなので、Xcodeのパッケージを開いてResourcesの中に突っ込んでね。

2010-06-27

iPhoneのオモチャ箱 - 刊行記念イベント@ジュンク堂新宿

iPhoneのオモチャ箱 - 刊行記念イベント@ジュンク堂新宿 - バスケ
View more presentations from Yosuke Suzuki.

iPadのキーノートで制作。40分。素晴らしい。

2010-06-24

駅ベル - 乗り越し防止アラーム

iPhone 4で盛り上がる中、ようやくバスケ個人名義の最初のアプリ。「駅ベル」が公開されました。

http://itunes.apple.com/jp/app/id377891789?mt=8 #iTunes

駅ベルとは何か?簡単に言えば、目的の駅に近づいたらアラームを鳴らしてくれるソフトです。全国の駅情報をekidataさんからいただきましてアプリ内に最初から収めてありますので、簡単に目的地を探すことができます。

そして、なんと言ってもiOSの各種機能に対応しています。Fast App Switchはもちろん、iOS4の目玉、マルチタスクにもちゃんと対応しています。バックグラウンドにいても監視は続けますので、ウェブをみたりゲームをしていても大丈夫です。Local Notificationを使ってアラート画面が表示されます。iOS 4で追加された新しい位置情報取得の仕組みを使っているので、これまでのアプリよりもバッテリーの減りも少なくてすんでます(それでも結構使いますが)。バックグラウンドに回ったときの挙動も、WWDCで学んだことは実践してますので省メモリ化もできているはず。

このアプリ、SDKが公開された2年前から作り始めたモノで、なかなか完成しなかったのです。だって監視している間アプリを終了させられないわけで、できることと言えば音楽を聴くことだけ。電源をスリープにしてしまうと、位置情報の精度がまったく当てにならず。アプリ内にブラウザを入れたりTwitterみれるようにしたり、いろいろ工夫してみたんですがどうもしっくりこず。

が、iOS 4になってアプリを後ろに回せるようになったことでがぜん盛り上がりました。ちゃんと位置情報もバックグラウンドにいながら取得できるわけで、これはオレのためのアップデート!wと勝手に理解して一気に仕上げました。と言うわけで無事iPhone 4の発売日にリリース。

しかし、長かった〜。リリースまで2年3ヶ月は自分の中でも最長記録。この二年間、各所でデモなんかをしてましたが、会う人会う人に、あれまだ出てないの?となじられてきましたが、それも今日まで。胸を張ってリリースされてます!と言えますよ。でましたよ!

2010-06-18

WWDC 10 - みとくべきセッションビデオ

全部なんだけどねw

とりあえず自分がみたセッションで面白かったモノ、見逃したモノを列挙。随時更新していきます。


Session 116 - Model-View-Controller for iPhone OS
リピートセッションまで行われた人気セッション。参加者曰く、刺激になりますよーとのこと。
実際のところMVCを考えるための現実的解を示してくれます。これはいいセッション。

Session 207 - Network Apps for iPhone OS, Part 1
Session 208 - Network Apps for iPhone OS, Part 2
ずっと昔からDTSで活躍するQuinn the Eskimoさんがネットの難しさを語ります。Part2は必見。RunLoopとスレッド。GCDの時代はまだやってこない、など。


Session 103 - iPad and iPhone User Interface Design
毎年同じような内容と言いながら、iPadでいったんリセットされた似等しいインターフェースデザインについてみときたい。面白かった。

Session 104 - Designing Apps with Scroll Views
長蛇の列ナンバー1だったかもという人気セッション。ScrollViewの入れ子構造で実現する写真アプリの作り方。

Session 105 - Adopting Multitasking on iPhone OS, Part 1
Session 109 - Adopting Multitasking on iPhone OS, Part 2
iOS 4の見所No1のマルチタスクについては必見。

Session 107 - Cocoa Tips and Tricks
あの人が出ます。

Session 115 - Using Core Location in iOS 4
ローケーションの取り方がだいぶん変わってます。バッテリーに気を遣いたいアプリを書きたければ必見。

Session 206 - Introducing Blocks and Grand Central Dispatch on iPhone
Session 211 - Simplifying iPhone App Development with Grand Central Dispatch
ようやく使えるようになったブロックとGCD。

Session 423 - Sensing Device Motion in iOS 4
ジャイロが追加されたセンサー系をまとめる CoreMotion フレームワークの唯一の情報。

Session 300 - Developer Tools State of the Union
今回はツール系のフィーチャーしっぷりがすごかった。その最初としてこれだけは観とくべき。

Session 304 - What's New in Instruments
何がすごいってこんなツールを提供するアップルがすごい!

Session 306 - Automating User Interface Testing with Instruments
JavaScriptを使って自動化よ! 繰り返しテストが楽になります。多分。

Session 505 - Creating Extensions for Safari, Part 1
Session 506 - Creating Extensions for Safari, Part 2
すごく簡単に作れる。概念も理解しやすい。今日から、作るべし。

Session 130 - Future Proofing your Application
将来にわたって安心して動くアプリを作りたければ、という内容。ちょっと期待はずれではあるがみとくと言い訳になる。

まだみてないやつ。

Session 138 - API Design for Cocoa and Cocoa Touch
CocoaのAPI設計の妙を学ぶ。


2010-06-17

iOS 4のマルチタスクへの対応

前のポストで、そもそもiOS 4に対応するフェーズをまとめました。で、iOS 4に対応するとした場合、どの機能に対応するとどうなるかをまとめます。


高速アプリ切り替え
SDK 4.0でビルドすると自動的に対応します。ただし、マルチタスク自体のアプリとしては、裏に回ったときの正しい作法というものがありますので、それに従った動作が求められます。


バックグラウンド・オーディオ
Info.plistでバックグラウンドでの再生を希望する旨を記述しておくと、バックグラウンドに回った場合の音の再生処理が継続して行えます。アプリ側で特別にやらなくてはいけないことは増えませんが、メモリの使い量、I/Oの使い方など工夫しなくてはいけなくなると予想されます。

Voice over IP

Info.plistでVoIPを実装したいと記述しておくと、インターネット電話を実現するために必要な待ち受け接続への対応をシステムがやってくれます。起動し続けなくても、必要なときに起こされます。標準の電話アプリと同じような立ち位置になれると言うことです。実装は大変でしょう。

バックグラウンドロケーション
Info.plistでロケーションを取得したいと記述しておくと、バックグラウンドにいるときも位置情報を取得できるアプリが作れます。バッテリーのことを考えると一番やっかいな種類のアプリです。

タスクの完了待ち
これら上記の特定用途のマルチタスク機能と関係なく、すべてのiOS 4対応アプリは、バックグラウンドに回る前に一定期間の猶予が与えられます。まだ仕事完了してないよって場合には、ブロックで処理を記述して実行させることができます。この処理が終わるまでサスペンドはされません(見た目上バックグラウンドに回ったことにはなります)。一定時間を過ぎてもタスクが終わっていない場合、システムのやつは勝手に殺すぞと言ってますので気をつけましょう。

ローカル・ノーティフィケーション
上記のバックグラウンド処理がユーザーに通知するUIとしてローカル・ノーティフィケーションが追加されてます。

これ以上の詳しい情報は、iPhone developer登録をすればドキュメントで見れますので、各自調べること。

iOS 4への対応の仕方まとめ

未対応iOS 4テスト済みiOS 4対応
ビルドするSDK※1~ SDK 3.2~ SDK 3.2SDK 4.0 ~
iOS 4で動作するか?わからんするする
OS 3.1で動作するか?するするする※2
バックグラウンドで動作しないしない可能※3
サスペンドするか?しないしないする
アプリ切り替えリスト※4に並ぶ並ぶ並ぶ並ぶ
高速アプリ切替非対応非対応対応


※1 Base SDKのこと
※2 Deployment TargetがiPhone OS 3.1以前になっていれば
※3 追加で設定、コードの記述が必要
※4 マルチタスク切り替えのために画面の一番下に出るアプリのリスト

2010-06-03

PHP 5.3

いまさらながらPHP 5.3と向き合う。もうPHPなんかに期待しないよ、仕事でみんなと使う言語だよ。面白いことはPythonでやるよ、とPHPを見捨ててから3年。PHP 5の進化もまったく注意も払っていなかった。今更どうにもならんだろうと。

さて、今年。自分的には今のところ激動の2010年なのだが、いろんなテクノロジーがPHP 5.3へバトンをつなげてくれた。

KVS → Tokyo Tyrant → MongoDB → Lithium → PHP 5.3

実は5.3のことはあまり知らず、6.0へのつなぎ、内部文字コードがUnicodeになるよー、覚悟しとけバージョンだと思い込んでいたら、実はとてつもなく強力な機能が投入された、まるで別の言語になっていた。その二つとは、無名関数と名前空間。

無名関数=名前のない関数、昔はそんなものがなんに役立つのと思っていたが、最近のコーディングを振り返ってみると何でなくてやってこれたんだ?という思いになる。イベント駆動型のプログラミングを今までもやってく体他が、かなりの苦労と意味のない名前、特に日本人にとっては頭の切り替えを必要とする英語名をつけなければいけないという作業をやっていたことになる。

「この作業をやって欲しい、中身はこれこれこうだ」
「わかりました、それでこの作業に名前はなんでしょうか?」
「名前が必要なのか?やることはわかっただろうに」
「名前が必要なんです。決まりです」
「じゃあお掃除処理でいこう」
「すみません、英語でお願いします」
「…」

名前つけなくてよければ、これお願いですむところを、余計な頭を使わされていたことがわかる。無名関数万歳。関数が変数に入れられるとか、そういう恩恵以上に大事な要素と思う。

そして名前空間。過去に「結局クラスって名前空間、責務の分離だよね」という暴論をはいたことがある。若さ故の過ち、でも名前空間はそのくらいの大事な要素。これはクラスという機能をねじ曲げてでも名前空間が欲しいという気持ちの表れと今は擁護したい気持ちでいっぱいだ。

またPHPはここでも論争の的となるチョイスをしている。名前空間の区切り文字にバックスラッシュを採用している。もーっ!とも思うんだけど、これはたいしたことではないなと。もたらされるメリットのためなら目をつぶる。無視できる範囲。変数に$、メッセージ送信に->と同じレベル。いちいち語尾に「じゃん」とか付けるなよ的な。

ということでLithiumとともにしばらく遊んでみたいと思う。幸いSnow LeopardはPHP 5.3なので問題なし。ローカルで試せるのがうれしい。