LL ばかりのエンジニアが
Xcode にチャレンジしました

     @kanayannet
LLとは
Lightweight Language
 ※和製英語だそうです。 by wikipedia


 例:
      Perl、Python、PHP
      Ruby Javascript
Xcode とは?
  ソフトウェアを開発するための
  アップルの統合開発環境
 例:
  IPhone IPad のアプリケーション
主に使われる言語
 objective-c
Objective-c とは?

 C言語をベースにSmalltalk型の
 オブジェクト指向機能を持たせた上位
 互換言語である。
 by wikipedia
解りづらい
自分なりに解釈してみる

C言語よりは便利に使えるのかな?
LL ではない -> 簡単ではなさそう?
自分が普段使ってる言語
 Perl、Ruby、Javascript...


  LLばっかりです!
今回、話す事
1.始めるキッカケ

2. Xcode + Objective-c を使って開発して...
苦戦した箇所


3. 苦戦しなかった箇所を話します
1.始めるキッカケ



 家庭菜園でブルーベリー作ってます
1.始めるキッカケ
    ブルーベリーの栽培記録を
  その場で残せるアプリが欲しかった
   (土壌PH や 農薬 や 肥料など)
        ↓↓↓↓↓
     作ればいいじゃない!?
1.始めるキッカケ

- どうせ作るなら、今までやった事がないもの

- ブラウザアプリは結構作った

- Xcode + objective-c は経験ない
よし!やろう!
アプリの構成



            HTTP

                   Web API
農作物や日記の入力
                   データの保存
    描画
                   呼び出し
ごめんなさい!

PhoneGapの事は話しません!

 ※話したい方は懇談会で話しましょう
苦戦した箇所

  1. コードの長さ
  2. HTML との違い
苦戦した箇所
1. コードの長さ

    HTTP の通信
苦戦した箇所
   javascript(Jquery) の場合


 $.ajax({
    type: "POST",
    url: "http://example.com",
    data: "xxx=yyy",
    success: function(msg){
      alert( "成功: " + msg );
    }
  });
苦戦した箇所
   objective-c の場合
みなさん使ってるライブラリあるのかな∼?
      っとググってみる....
       ↓↓↓↓↓
 自作ライブラリ配布してる人はいたけど...
    多くがコツコツ書いてる...
苦戦した箇所
          objective-c の場合
NSURL *nsurl = [NSURL URLWithString:@”http://example.com”];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:
nsurl];
[request setHTTPMethod: @"POST"];
[request setValue:@"application/x-www-form-urlencoded"
forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [sendData length]]
forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: sendData];

NSError *error;
NSURLResponse *response;
NSData *buffer = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:&error];
2. HTML との違い
   例: Table 表示

      HTML の場合
2. HTML との違い
  例: Table 表示
       HTML の場合
    <table width=100% border=1 width=100%>
                   <tr>
                         <td>セル1</td>
                   </tr>
                   <tr>
                         <td>セル2</td>
                   </tr>
                   <tr>
                         <td>セル3</td>
                   </tr>
    </table>
2. HTML との違い
  例: Table 表示
  Xcode + Objective-c の場合
//セルの数
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  // table_list の中身は配列
    return [table_list count];
}

// セルの中身の設定
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"product_items";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSInteger row = [indexPath row];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.font = [UIFont boldSystemFontOfSize:18];

    NSDictionary *table_row = [table_list objectAtIndex:row];

    cell.textLabel.text = [table_row objectForKey:@"subject"];
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    return cell;
}
//セルの高さ
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 42;
}
苦戦しなかった箇所

 1. JSON
 2. メモリ管理
苦戦しなかった箇所
     JSON ( javascript )


 var json_string = { status : ok } ;
 var json_obj = JSON.parse(json_string);
 console.log( json_obj.status ); // -> ok
苦戦しなかった箇所
   JSON
                           Objective-c

// json_string にjson文字列 json_string = ‘{”status”:”ok”}’
NSData *json_data = [json_string dataUsingEncoding:NSUTF8StringEncoding];

NSMutableArray *ret = [NSJSONSerialization JSONObjectWithData:json_data
options:NSJSONReadingAllowFragments error:nil];

[ret objectForKey:@"status"]; // -> ok
苦戦しなかった箇所

       JSON
は思ったよりもコーディングしやすかった
苦戦しなかった箇所
 メモリ管理(objective-c)
   ARC (Automatic Reference Counting)

       @autoreleasepool
       {
           // 自動的にメモリ解放してもらいたい処理
       }




    ※LL でいう GC のようなもの
※ ARC の注意点
これ使うと手動で解放する release method が
使えなくなります
まとめ
Objective-c 自体は思っていたよりも、難しくな
かった。
(むしろ、C言語より、やりやすかった)


View(描画)処理が絡むとmethod名の長いものが
出てきて、結構面倒くさい...
最後に モック版(デザインはまだ、適当)
 ですが、ここまで作れたものをデモします

http://www.youtube.com/watch?v=ivQdj8KOz9Y
このモック版作れるようになるまで、
   どんなもん学習したの?


     30時間

 ※30 x 1時間
 (1日1時間 を 30日しました)
- 30時間続けて勉強した訳ではない


- 無理に続けて勉強しても身に付かない


- 睡眠時間と適切な休憩時間は必要


- 睡眠すると頭が整理されて、解らなかった
箇所が解るようになったりする
ご清聴ありがとうございました

Ll xcode