2011年9月4日日曜日

クラウドとネイティブアプリの狭間に。

今流行の「クラウド」、iPhoneやiPadそしてMacでネイティブに動作するネイティブアプリケーション。
どう作り分けるか。自分なりに考えてみました。
・クラウドで作るシチュエーション
 処理速度を要求されないもの
 データを不特定多数に公開するもの
 デバイス間で情報を共有するもの(iCloudがこれからなんとかしてくれる?)
 どんなデバイスからでもアクセスできる必要があるもの
 
 逆に
 セキュリティの配慮が必要
 ネットワークでつながっていること、サーバーの信頼性を問われること
 を考慮しないといけない。

・ネイティブアプリケーション
 高速な動作を必要とするもの
 iPhoneやiPad,Macの性能やフレームワークをガンガン使う必要があるもの
 
 逆に
 デバイス間の移植の容易さ
 改めてObjective-Cを勉強すること
 ユーザーデータをどこに保存するか
 を考慮しないといけない。

クラウドとネイティブアプリの合わせ技というのもアリかな。

結論として
・共有する情報はクラウド。スピードを必要としない簡単なゲームもクラウド。
・個人的な情報はネイティブアプリ。スピードを問われるゲームもネイティブアプリ。

こんな感じかな。

Objective-C勉強開始!まずはC言語の基本から(ポインタ)

C言語といえばポインタ。
javaの時は意識することがありませんでした。
購入したObjective-Cの本にも、Objective-Cではポインタ演算を使うことはほとんど使うことないと買いてありましたが、おさらいを兼ねてコードを書いてみました。

void addkazu(int* x,int y);//javaでいう抽象メソッドの定義みたいなもの。
int main (int argc, const char * argv[])
{
//ポインタを試してみる
int taizyuu=0;//変数の定義
int* p;//ポインタ変数の定義
p=&taizyuu;//pにtaizyuuのメモリアドレスを代入
printf("%p,%p",&taizyuu,p);//taizyuu,pのメモリアドレスを表示
*p=78;//pが指すメモリアドレス(すなわちtaizyuuのメモリアドレス)に78を代入
printf(",%d,%d",taizyuu,*p);//taizyuu,pのメモリアドレスを表示 もちろん同値

//ポインタを使った参照渡しと値渡し
int kazu=10;
addkazu(&kazu,25);//kazuのメモリアドレスと25の値でadd関数を呼び出す
printf(",%d",kazu);//数に25が代入されて35になりました。

//ポインタ配列
int tokuten[5]={50,67,84,54,56};//配列の定義
int* p2;//ポインタ変数p2を定義
p2=tokuten;//tokutenのメモリアドレスをp2に代入
p2=&tokuten[0];//↑同じ意味
for(int i=0;i<5;i++){//メモリアドレスの表示
printf(",%p,%p",p2+i,&tokuten[i]);
}
for(int i=0;i<5;i++){//値の表示
printf(",%d,%d",*(p2+i),tokuten[i]);
}
return 0;
}
void addkazu(int* x,int y){
*x+=y;//main関数で定義した値に値渡しで渡したyを代入する
}

イメージ的にはjavaの参照渡しのイメージかな。javaでオブジェクトにアクセスするイメージかな。
自分なりに理解できたっぽい。

Objective-C勉強開始!まずはC言語の基本から(構造体)

MacやiPhoneでネイティブなアプリケーションを開発しようとするとObjective-Cは避けて通れない道です。
目的をiPhone阪家計簿、Mac阪家計簿の開発として勉強をしていこうと思います。
ここ最近はjavaを中心にプログラムを書いていました。C言語すらあまり知らないので、まずはそこからスタートすることに。

↑購入したのはこの本。C言語の基本からObjective-C独特のオブジェクトの扱い方が書いてあってわかりやすい。GUIのアプリケーションを書けるようになるにはちと厳しいが、本当にわかりやすい。
C言語とjavaの基本構文はとってもよく似ているので、320ページある中の71ページまでは読み進めるだけで十分でした。でもここからが・・・・
C言語の基本で学び直したのが、「ポインタ」と「構造体」
忘れてはいけないので、自分なりにコードを書いてみました。
まずは構造体。

struct tokuten{
int kokugo;
int suugaku;
int lika;
int syakai;
int eigo;
};
int main (int argc, const char * argv[])
{
struct tokuten t={95,83,54,45,34};//構造体の宣言とメンバへの値の代入
printf("国語%d 数学%d 理科%d 社会%d 英語%d",t.kokugo,t.suugaku,t.lika,t.syakai,t.eigo);
return 0;
}

実行結果
国語95 数学83 理科54 社会45 英語34

僕の解釈では、javaで言う、「変数のメンバだけ定義できるクラス」みたいなものかな。

ところで、今まで僕はEclipseを使ってjavaやJSPのコードを書いていました。
今回、MacOS10.7にしたときにXCode4.1になりました。しかも無料。
辛いのは英語環境であるということ。
簡単なコードを書こうにもたくさんファイルが生成されたり、いろんな機能がたくさんあってわかりにくいなと思いつつ、使ってみると「結構簡単。しかも使いやすくて便利。」
結構気に入っています。
よし、次はポインタを理解しよう。javaの時はポインタなんて感覚でコード書かなかったから。がんばろう。