関心空間作ってます。他には駅ベル, NoMeMo Busters, Ramblin, TapBar, など。 興味あるのは Mac, Newton, iPhone, Django, nginx, PHP, CakePHP, Python, Objective-C, Smalltalk, Programmer, Dog, 阪神Tigers
2010-06-30
古いXcode用のアイコンを作ったよ - Xcode aged
http://bit.ly/aIshfv
焼けた青写真てな感じにしてみました。もう、Xcodeだらけでわかんないから!
icnsファイルなので、Xcodeのパッケージを開いてResourcesの中に突っ込んでね。
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ヶ月は自分の中でも最長記録。この二年間、各所でデモなんかをしてましたが、会う人会う人に、あれまだ出てないの?となじられてきましたが、それも今日まで。胸を張ってリリースされてます!と言えますよ。でましたよ!
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 103 - iPad and iPhone User Interface Design
毎年同じような内容と言いながら、iPadでいったんリセットされた似等しいインターフェースデザインについてみときたい。面白かった。
Session 104 - Designing Apps with Scroll Views
長蛇の列ナンバー1だったかもという人気セッション。ScrollViewの入れ子構造で実現する写真アプリの作り方。
Session 138 - API Design for Cocoa and Cocoa Touch
とりあえず自分がみたセッションで面白かったモノ、見逃したモノを列挙。随時更新していきます。
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
将来にわたって安心して動くアプリを作りたければ、という内容。ちょっと期待はずれではあるがみとくと言い訳になる。
まだみてないやつ。
CocoaのAPI設計の妙を学ぶ。
2010-06-17
iOS 4のマルチタスクへの対応
前のポストで、そもそもiOS 4に対応するフェーズをまとめました。で、iOS 4に対応するとした場合、どの機能に対応するとどうなるかをまとめます。
バックグラウンド・オーディオ
Info.plistでバックグラウンドでの再生を希望する旨を記述しておくと、バックグラウンドに回った場合の音の再生処理が継続して行えます。アプリ側で特別にやらなくてはいけないことは増えませんが、メモリの使い量、I/Oの使い方など工夫しなくてはいけなくなると予想されます。
Voice over IP
バックグラウンドロケーション
Info.plistでロケーションを取得したいと記述しておくと、バックグラウンドにいるときも位置情報を取得できるアプリが作れます。バッテリーのことを考えると一番やっかいな種類のアプリです。
タスクの完了待ち
これら上記の特定用途のマルチタスク機能と関係なく、すべてのiOS 4対応アプリは、バックグラウンドに回る前に一定期間の猶予が与えられます。まだ仕事完了してないよって場合には、ブロックで処理を記述して実行させることができます。この処理が終わるまでサスペンドはされません(見た目上バックグラウンドに回ったことにはなります)。一定時間を過ぎてもタスクが終わっていない場合、システムのやつは勝手に殺すぞと言ってますので気をつけましょう。
ローカル・ノーティフィケーション
上記のバックグラウンド処理がユーザーに通知するUIとしてローカル・ノーティフィケーションが追加されてます。
これ以上の詳しい情報は、iPhone developer登録をすればドキュメントで見れますので、各自調べること。
高速アプリ切り替え
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.2 | SDK 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になるよー、覚悟しとけバージョンだと思い込んでいたら、実はとてつもなく強力な機能が投入された、まるで別の言語になっていた。その二つとは、無名関数と名前空間。
さて、今年。自分的には今のところ激動の2010年なのだが、いろんなテクノロジーがPHP 5.3へバトンをつなげてくれた。
KVS → Tokyo Tyrant → MongoDB → Lithium → PHP 5.3
実は5.3のことはあまり知らず、6.0へのつなぎ、内部文字コードがUnicodeになるよー、覚悟しとけバージョンだと思い込んでいたら、実はとてつもなく強力な機能が投入された、まるで別の言語になっていた。その二つとは、無名関数と名前空間。
無名関数=名前のない関数、昔はそんなものがなんに役立つのと思っていたが、最近のコーディングを振り返ってみると何でなくてやってこれたんだ?という思いになる。イベント駆動型のプログラミングを今までもやってく体他が、かなりの苦労と意味のない名前、特に日本人にとっては頭の切り替えを必要とする英語名をつけなければいけないという作業をやっていたことになる。
「この作業をやって欲しい、中身はこれこれこうだ」
「わかりました、それでこの作業に名前はなんでしょうか?」
「名前が必要なのか?やることはわかっただろうに」
「名前が必要なんです。決まりです」
「じゃあお掃除処理でいこう」
「すみません、英語でお願いします」
「…」
名前つけなくてよければ、これお願いですむところを、余計な頭を使わされていたことがわかる。無名関数万歳。関数が変数に入れられるとか、そういう恩恵以上に大事な要素と思う。
そして名前空間。過去に「結局クラスって名前空間、責務の分離だよね」という暴論をはいたことがある。若さ故の過ち、でも名前空間はそのくらいの大事な要素。これはクラスという機能をねじ曲げてでも名前空間が欲しいという気持ちの表れと今は擁護したい気持ちでいっぱいだ。
またPHPはここでも論争の的となるチョイスをしている。名前空間の区切り文字にバックスラッシュを採用している。もーっ!とも思うんだけど、これはたいしたことではないなと。もたらされるメリットのためなら目をつぶる。無視できる範囲。変数に$、メッセージ送信に->と同じレベル。いちいち語尾に「じゃん」とか付けるなよ的な。
ということでLithiumとともにしばらく遊んでみたいと思う。幸いSnow LeopardはPHP 5.3なので問題なし。ローカルで試せるのがうれしい。
2010-05-18
EC2のFedora8インスタンスにgitをインストールするのに最低限必要なパッケージ一覧
いつもインストールにはまるので。エラー出すの遅いよ。ぶつぶつ。
yum install gcc zlib-devel openssl-devel curl-devel perl-ExtUtils-AutoInstall perl-ExtUtils-Embed perl-ExtUtils-MakeMaker perl-ExtUtils-MakeMaker-Coverage asciidoc xmlto python-devel docbook2X
yum install gcc zlib-devel openssl-devel curl-devel perl-ExtUtils-AutoInstall perl-ExtUtils-Embed perl-ExtUtils-MakeMaker perl-ExtUtils-MakeMaker-Coverage asciidoc xmlto python-devel docbook2X
2010-03-27
SharedCenterというクラスを書いてみた
Cocoaでユーティリティ的に使うクラスの定番パターンで、singletonパターンがあります。NSNotificationCenterがいい例で、アプリケーションワイドで使う機能をクラスにする場合に便利なパターン。こんな感じ。
これに従って、自前で作るシングルトンクラスもなんちゃらセンターと言う名前で作りがちです。僕の場合、
などなど。それぞれのクラスにクラスメソッドとしてsharedCenterというメソッドを定義して使ってます。こんな感じ。
このパターン、便利なんですがコードの中では結局グローバル変数を使って管理するという、まああまり見たくないコードでして、アナライザーに文句言われないためにもちゃんと終了時にグローバル変数を破棄してあげる必要があったり。簡単なことだけどちょっと面倒くさい。
というわけで、メタに考えました。シングルトンを管理するシングルトンクラス、SharedCenter。
SharedCenter.h
SharedCenter.m
このクラスを使えば、どんなクラスでも簡単にシングルトンパターンが使えます。しかもグローバル変数は一つだけ。すっきりです。
SupportCenter.h
SupportCenter.m
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sayHello:) name:HelloWorldNotification object:nil];
これに従って、自前で作るシングルトンクラスもなんちゃらセンターと言う名前で作りがちです。僕の場合、
- SupportCenter
- ActivityCenter
- DownloadCenter
などなど。それぞれのクラスにクラスメソッドとしてsharedCenterというメソッドを定義して使ってます。こんな感じ。
[[SupportCenter sharedCenter] alertError:error];
このパターン、便利なんですがコードの中では結局グローバル変数を使って管理するという、まああまり見たくないコードでして、アナライザーに文句言われないためにもちゃんと終了時にグローバル変数を破棄してあげる必要があったり。簡単なことだけどちょっと面倒くさい。
というわけで、メタに考えました。シングルトンを管理するシングルトンクラス、SharedCenter。
SharedCenter.h
// // SharedCenter.h // Ramblin // // Created by Yosuke Suzuki on 10/03/27. // Copyright 2010 Kanshin, Inc.. All rights reserved. // #import <foundation/foundation.h> @interface SharedCenter : NSObject + (id)center:(Class)cls; + (void)registerCenter:(id)center forClass:(Class)cls; @end
SharedCenter.m
//
// SharedCenter.m
// Ramblin
//
// Created by Yosuke Suzuki on 10/03/27.
// Copyright 2010 Kanshin, Inc.. All rights reserved.
//
#import "SharedCenter.h"
@implementation SharedCenter
static NSMutableDictionary *sharedCenters = nil;
+ (void)initialize {
sharedCenters = [[NSMutableDictionary alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeCenters:) name:UIApplicationWillTerminateNotification object:nil];
}
+ (id)center:(Class)cls {
id center = nil;
@synchronized(sharedCenters) {
NSString *className = NSStringFromClass(cls);
center = [sharedCenters objectForKey:className];
if (!center) {
center = [[cls alloc] init];
[sharedCenters setObject:center forKey:className];
[center release];
}
}
return center;
}
+ (void)registerCenter:(id)center forClass:(Class)cls {
@synchronized(sharedCenters) {
[sharedCenters setObject:center forKey:NSStringFromClass(cls)];
}
}
+ (void)closeCenters:(NSNotification *)notification {
[sharedCenters release];
sharedCenters = nil;
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
このクラスを使えば、どんなクラスでも簡単にシングルトンパターンが使えます。しかもグローバル変数は一つだけ。すっきりです。
SupportCenter.h
@interface SupportCenter : NSObject {
...
}
+ (SupportCenter *)sharedCenter; // 定義を追加
...
SupportCenter.m
#import "SupportCenter.m.h"
#import "SharedCenter.h"
@implementation ActivityCenter
// 実装を追加
+ (ActivityCenter *)sharedCenter {
return [SharedCenter center:[self class]];
}
...
ラベル:
Cocoa
2010-03-05
2010-02-03
Diplomacy on iPadを作る計画。
2010年、今年の個人的な目標、iPad用のアプリとしてディプロマシーを作る。iPadでやると、マップの操作性も戦術練るにもいろいろ出来そうだし、秘密交渉の演出も素敵にできそう。秘密文書が届くとか。チャットとか。あーカメラがついていれば。
Diplomacy MOE
Web上で遊べるディプロマシー。これがお手本になるはず。参考にさせてもらいます。
Diplomacy MOE
Web上で遊べるディプロマシー。これがお手本になるはず。参考にさせてもらいます。
AppStoreのバージョン番号ではまる
ランブリンのバージョンアップ版をリリースしようと昨夜から奮闘した記録。
最初のバージョンが1.0でだして、次のマイナーアップデート版を1.01でだしました。ここまでは問題なかったのですが、昨日出すものが機能的にも増えたこともあり、1.02ではなく1.1にしましょうと決定しました。
で、いざリリースの段階になって、サブミットしてみると
The binary you uploaded was invalid. The key CFBundleVersion in the Info.plist file must contain a higher version than that of the previously uploaded version.これは困った。でGoogle様に聞いてみたところ、iPhone Dev SDKに記述を見つけました
Registered Member Join Date: Jul 2009 Posts: 8 | Just went through this process with fairly simple version numbers and here's what I found; Original version '1.0'. Next upgrade version '1.01' - worked fine. Tried to submit an upgrade to version '1.1' and got the "CFBundleVersion in the Info.plist file must contain a higher version than that of the previously uploaded version" error. After much messing around with the package including check the version in the package contents of the built program submitted as version '1.10' and it worked. Seems like there is a problem with the string to float conversion that Apple is doing. |
なるほど、1.01 の次は 1.10ならオッケーなのか。ではそれで...って1.10ってなんだよ!「十」ってなんだ。マイナーバージョン10はないだろう。SuperClock 3.9.10 ぐらいしか聞いたことないぞ。これはそのまま採用しづらいな。
じゃあ、1.1.0 ならどうだ。これならまだ意味は通じるので再度チャレンジ。さて...失敗。
orz
やっぱり1.10しかないか。とバイナリーは作り直して、ふと思う。表記上はあくまで1.1.0としたいのでiTunes Connectでの表記と変えてみてはどうなるか。前に一致してないからダメだよ、といわれたんだけど物は試し。エイヤっとアップしたら、なんと問題なく通った!おぉ、じゃあAppStoreにでるバージョン表記とBundleVersionは関係ないのか?関係がないならいっそ違う番号体系になっているほうが間違いは少ない。ということで、最終的には
iTunesConnect Version = 1.1.0
Info.plist CF Bundle Version = 2
という状態でアップしました。問題はなし。
混乱を極めたバージョン問題ですが、結局見た目のバージョンと内部バージョンを分けるというのがベスト。AppStoreにバイナリーをサブミットしたときに言われエラーは、結局内部バージョンを上げなさいということ。そのバージョンと表記上のバージョン(テキストフィールドにいれるもの=ユーザーの目に触れるもの)は別と考えたほうが混乱はない。だいたい戦略上の理由で見た目のバージョンは決められることも多いし。
ただし、アプリ内のバージョン表記も必要で、これは今までCFBundleVersionKeyを参照していたので、新たにDisplayBundleVersion という項目を追加しました。今後箱の二本立てで管理することにします。
2010-01-29
iPadにはプラグインの仕組みが欲しいな
iPhoneにはプラグインは必要ないかと思ってた。画面も小さいしアプリの規模もそんな大きくない。解決したい物事に特化した単機能の小さいアプリがたくさんそろっていればいいかなぁと。
でも、iPadは事情が違う。移動中に使うというよりは、リビングとかデスクとかカフェとか、落ち着いた場所でじっくり使うモノになりそう。画面もでかいしアプリが出来ることもどんどん高度になっていく。裏を返すと、その分アプリを作るのが大変になる。
例えば、とてもじゃないけど、Pagesに対抗するワープロアプリを書こうなんて考えもしない。書けたとしたら$10じゃ売れない。とても無理。
そしたら、iPadにもiPhoneのアプリみたいに、シンプルなソリューションを提供する場所が必要だと思う。もちろんこれまで通りアプリ作ればいいってことも多いとは思うけど。組み合わせたい機能というのはたくさんある。
例えば?
でも、iPadは事情が違う。移動中に使うというよりは、リビングとかデスクとかカフェとか、落ち着いた場所でじっくり使うモノになりそう。画面もでかいしアプリが出来ることもどんどん高度になっていく。裏を返すと、その分アプリを作るのが大変になる。
例えば、とてもじゃないけど、Pagesに対抗するワープロアプリを書こうなんて考えもしない。書けたとしたら$10じゃ売れない。とても無理。
そしたら、iPadにもiPhoneのアプリみたいに、シンプルなソリューションを提供する場所が必要だと思う。もちろんこれまで通りアプリ作ればいいってことも多いとは思うけど。組み合わせたい機能というのはたくさんある。
例えば?
- テキストの編集中に表示されるメニューに翻訳機能を提供したい
- 写真ライブラリの共有メニューに、うちのサービスへのアップロード機能もつけたい
- Pagesの書類を別の形式で書き出したい
...あんまりないか(笑)。まあ、次の主戦場はアプリではなくもっと機能に集中させて欲しいなぁ、というのが開発者の希望なのかな。AppStore、アプリ内課金、ときたので、機能別課金、PluginStoreみたいなことをやってほしい。
ちなみに、プラグイン機能をつけるとセキュリティ的にやばい、というのは、アプリがみんな好き勝手に自分の独自実装で機能を拡張しようとした場合で、システムがプラグインを管理し、データ中心名設計をすれば問題なく仕組みは作れると思います。どうせStore経由でしか取得できないんだろうし。
ラベル:
iPad
2010-01-25
Objective-C 2.0 ローカルカテゴリの書き方
@interface Hello : NSObject {
...
}
@interface Hello()
- (void)world;
@end
@implementation Hello // ←()のないメインの実装の中に書く
- (void)world {
}
@end
...
}
@interface Hello()
- (void)world;
@end
@implementation Hello // ←()のないメインの実装の中に書く
- (void)world {
}
@end
ラベル:
ObjectiveC
2010-01-05
2010年 - Smalltalkを体験する年
以前から @sumim さんからさんざん言われていたが、年末に呑んだときに話の流れでこういうことに。Smalltalkのすごさがわかる本書いてよ、といったらパーソナルなツールとなるもの、とても万人に向けてよさを伝える本は(面倒くさくて)書けない、結局one to oneでないとよさは伝えられないよ。ということで、聞いてくれたら答えてくれるそうなので勉強してみようという次第です。どうなることやら。
まずは環境構築からだな。うちにあるSqueak入門読んだほうがいいのかな。一回は読んだ気がしますが。
ともかく悩んだら考える前に聞いて、という夢のような先生なので、期待してます。
まずは環境構築からだな。うちにあるSqueak入門読んだほうがいいのかな。一回は読んだ気がしますが。
ともかく悩んだら考える前に聞いて、という夢のような先生なので、期待してます。
登録:
投稿 (Atom)


