2013年8月27日火曜日

シンプルとは何なのか【開発日誌8月26日分】

長期の合宿で間が開いていたので、久しぶりの開発になりました。

合宿の内容は、組み込み開発の基礎を学んで、実際に開発を行ってみるというもので、kobukiというrumbaから掃除機能を抜いたロボットを使って、障害物を避けながらゴールを目指す、というコンテストに参加しました。



そこで、MDD(モデル駆動開発)での組み込みを体験しましたが、UMLモデルを普段書かないこともあって、なかなか苦戦しました…。
あまりいいタイムは残せなかったのですが、ベストモデラー賞をいただくことができたので、結果的には良かったです。




合宿の話はここらへんにしておいて、開発の内容に移ります。


今回まず行ったことは、Appleさんが復活していたので、前々からやろうと思っていたiOS Developer Programの登録を行いました。

予想通り過ぎるのですが、今回もまた問題が発生しました。


こんなエラーが出るんですね。
調べてみたとこ、もうApple Supportに連絡するのが一番早いということだったので、連絡してみたところ、AppleIDの名前と住所をローマ字表記にすればいいとのことでした。
変更してApple Supportの方に連絡はしたので、あとは返信を待つだけです。


次に、進めているプロジェクトのUIを考えます。
わかりやすくて、重要な情報をすぐに知ることができるというUIを考えていたのですが…。

難しいです、自分にデザインの才能が皆無なのは22年前くらいからわかっていたことなのですが、全く思いつきません。絶望しました。

シンプルに、わかりやすく、というのが大事なことはわかるのですが、考えれば考える程、シンプルというのは何なのかがわからなくなってきました。
オブジェクトが少なければシンプルなのか?機能を少なくすればシンプルなのか?

さっぱりわかりません。

出来る人は直感的に出来るものなんですね。
結局、チームの一番デザインに長けている人が活躍して大体決まりました。
絵とか書ける人、いいですよね…。


次に、サーバーとの通信で得た時間のデータを、自然な表記に直す、というプログラミングを行いました。
これはNSDateFormatterを使用して実装しました。


NSDateFormatter *inputDateFormatter = [NSDateFormatter new];
[inputDateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];
[inputDateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZZ"];
NSDate *timeDate = [inputDateFormatter dateFromString:rawDateString];
return timeDate;

こんな感じで書いたんですが、このコードのsetDateFormatの部分を変えるだけで、色々な形式に対応できると思います。
表記方法としては、データと関係ない『-』や『:』は『'』で囲むというのが正しい表記みたいです。


今回はここで時間がきました。
次回はコードレビューが中心なので、中々開発は進まないと思います。

2013年8月7日水曜日

地獄のマージ地獄【開発日誌 6日目】

やっぱりタイトルつけないと寂しいのでタイトルつけました。
と言っても、適当に思いついたものを書いてるだけですけど。

開発 6日目の目標
  • Storyboardの完成
というわけで、アプリの画面遷移をまず完成させてしまおうということで、Storyboardをあちゃこちゃいじってました。
まず躓いたのが、Storyboardを分岐させる方法です。


これは完成した後のStoryboardですが、こんな感じで、Viewが分岐しておるのです。
ボタンを押下した時にViewの遷移をするようにすると、Viewへの紐付けが一つまでしかできません。
今回は、前回に通ったViewの種類を判別して、次に遷移するViewを選択するようにしたいのでボタンから紐付ける方法ではできませんでした。(どうにかしたらできるかもですが、未熟なので許してください)
そこで調べてみたところ、ViewからViewへの紐付けなら複数でき、そこからsegueにidentifierを付けてやることによって、簡単に分岐できるとありました。
その通りでした、こんなことを知らなかったのが恥ずかしくなるくらいその通りでした。

[self performSegueWithIdentifier:@"segue identifier" sender:self];

これだけで、指定したSegueを呼び出して画面遷移を行なってくれる、超便利。

あと、NavigationControllerの便利です。
Viewをスタックしてくれるので、戻る処理などがすごく簡単に実装できます。

Storyboard周りをもっとくわしく知ることが出来たら、開発も少しは楽になりそうな気がしました。
といっても、全体的に技術力が足りてないので頑張って勉強します。


今回でStoryboardは結構できたので、次はサーバー通信のほうを実装してみようかと思います。

2013年8月6日火曜日

開発日誌【5日目】

開発日誌の5日目、今日の目標は

  • コードレビューを行い、他のチームメンバーが書いたコードを理解する
  • Storyboardをあらかた完成させる

この2つです。
喪に服していた自分としては、コードレビューは非常に重要です。人のコードを理解する、ということは、自分が得るものも非常に大きいと思っています。

コードレビューで重要だと思ったこと
  • delegateの明確な意味
  • メソッドオブジェクトパターン
  • Storyboard周りの画面遷移
  • サーバーとの通信方法

結構わからないことが多くて大変でした…
細かい内容は、調査してからまたブログに書こうかと思っています。

今回はコードレビューでかなり時間をとったので、開発の時間はあまりありませんでした。
次回もStoryboardの作成を続けたいと思っているので、NavgationControllerの使い方をよく理解しなければ…

あ、Developerはまだできません、早く治らないものか…

2013年8月2日金曜日

開発日記 【1~4日目】

やっと授業が終了したので、長期休みを使って本格的に開発をして行きたいと思ってます。
夏休みが終わるまでは

■月~金
   共同研究のプロジェクトを10:00~19:00
■土、日
   自作iPhoneアプリ作成(気が向いたら)

こんな感じで行きたいと思ってます。
そんなに内容を詳しく書くつもりもありませんが。ドキュメント作る時間がもったいないと感じてしまうのはまだまだ未熟だからなのでしょうか…


開発【1日目】
目的 : iPhoneでQRコードを読み込む機能と、3軸加速度を測定する機能を実装する。

まず最初に、QRコードを読み取る機能を実装する。QRコードを読み込むライブラリはデフォルトでは用意されていないので、外から取ってくる必要がある。
今回はZXingObjC.frameworkを導入した。

早速シミュレーターで実行!!…できませんでした。

シミュレーターにはカメラがついてないのであたりまえでした。
私はまだiOS Developer Programに登録していないので、実機でプロジェクトを走らせられないんです。
そこで、この機会に登録してしまうことにしました、どうせ後でするつもりでしたし。


しかし…


iOS Developer Programがメンテナンス中でいつまで経っても登録できず、結局あきらめました…


気を取り直して加速度を測定する機能をやることにします。
加速度を取得するために、CoreMotion.frameworksを導入します。
これはデフォルトで用意してあるので、ライブラリをインポートするだけでオッケーです。
その後コードを書いて、いざ実行しようとしました。


しかし…


実機じゃないと加速度もクソもないです。そして登録してないので実機で実行できないです(絶望)

Developer登録してないと何もできない、そう実感した一日でした。【一日目終了】

【2日目】
喪に服してました

【3日目】
喪に服してました。

【4日目】
目的 : QRコードを読み込む機能と、加速度を測定する機能を完成させる。

しばらく喪に服してたので久々の開発です、やる気満々です。


しかし…


チームメンバーが優秀過ぎて、私がいない間にQRコードを読み込む機能は終わってました。他のプロジェクトも同時並行で開発してるのに…どういうことなの…

気を取り直して、加速度を測定する機能をやります。
まず、前回できなかったDeveloper登録を…


【メンテナンス中】


あまりにも長すぎるでしょう?
これじゃあまた実機で実行できないじゃないですか…

しょうがなく、他のプロジェクトの開発をしてる、Developer登録をしているチームメンバーに、頼んで実行。

上手く行きませんでした…
原因はよくわかりませんでした…


4日目は、他のプロジェクトに首突っ込んだり、進んだ分の情報を共有したりしてたら終わってました。
あまり書くこともないので終了。【4日目終了】