日時場所
- 2009/06/27(土)14:00-18:00 早稲田大学
セッション内容
- RIA勉強会だけどCHI [大磯さん]
- Silverlightについて [クラスメソッド 杉浦さん]
- ExtJSについて [ゼノフィ 小堤さん]
- iPhone、Objective-C について [天野さん]
1. RIA勉強会だけどCHI[大磯さん]
- 未来のインタフェースを実際に行っている研究動画の紹介。
光を使ったリアルタイム描画処理など、
見ていて興味が引かれる動画を何十種類か紹介されていました。
以下、紹介していた動画のリンクまとめ。
・Photosynth
http://wiredvision.jp/blog/goto/200808/200808150147.html
・StickyLight
http://www.k2.t.u-tokyo.ac.jp/perception/StickyLight/index-j.html
・DeformableWorkspace
http://www.k2.t.u-tokyo.ac.jp/perception/DeformableWorkspace/index-j.html
・KhronosProjector
http://www.k2.t.u-tokyo.ac.jp/perception/KhronosProjector/index-j.html
・typing_system
http://www.k2.t.u-tokyo.ac.jp/vision/typing_system/index-j.html
・comvision_G2
http://ip.hhi.de/comvision_G2/clothing.htm
・Layar
http://www.youtube.com/watch?v=b64_16K2e08
・Sekai Camera
http://www.youtube.com/watch?v=KgTwSXK_5dg
・Data Tiles
http://www.youtube.com/watch?v=7imqHEqszo8
・Tangible Bit
http://tangible.media.mit.edu/projects/
・Reactable
http://www.youtube.com/watch?v=WEDia3CFdfg
・触れて感じるテレビ01(NHK)
http://www.youtube.com/watch?v=qwG6kEPVsjs
・PTAM + AR on an iPhone 3G
http://www.youtube.com/watch?v=pBI5HwitBX4
・oblog
http://oblong.com/
・E3 2009: Project Natal Xbox 360 Announcement
http://www.youtube.com/watch?v=p2qlHoxPioM&feature=fvst
・Xbox 360 Project NATAL - Official E3 First Look
http://www.youtube.com/watch?v=B2r9cKjNQe4&feature=fvst
・Nintendo
http://wii.com/jp/articles/wii-sports-resort/crv/vol/page3.html#id=cv_wsr_02
・Wii
http://johnnylee.net/projects/wii/
2. BlendでSilverlight[クラスメソッド 杉浦さん]
なぜSilverlightをやるのか
- Flashでいいんじゃない?
- Flexでいいんじゃない?
- Silverlightってあまり普及してないよね?
- Silverlightは、最近Windows Updateでインストールされるようになった。
- 業務系アプリケーションの場合、OSを限定出来る状況がある。
- Flexへの置き換え案件は、現行業務の移行が多い。
- Silverlightの場合は.NET関連なので、現状サーバ側が.NET技術の場合は親和性が高い。
- 両方とも同じ技術者が使える。データの受け渡しが容易。
- Flexの場合は、言語も違う(サーバ側はJavaだったりする)。
- Webの広告やサイトの場合は、Silverlightを使うシーンは少ない。
- 業務系アプリケーションの場合、Silverlightは有望なプラットフォームになりうる。
Silverlightの開発に必要なもの
- Visual Studio 2008
- Expression Blend 3
- Silverlight 3 Tools for Visual Studio
- Silverlight Toolkt
- .Net RIA Services
- Eclipse for Silverlight
Visual Studio 2010では、デフォルトでSilverlightの開発が出来るようになっているらしい。
3. ExtJSについて [ゼノフィ 小堤さん]
ExtJSとは
ExtJWT
- JavaScriptではなく、Javaで記述
デモ
- データベースへの読み込み時、読み込み中と表示が可能。
- JavaScriptでグリッドパネルやチャートパネルを作成可能。
- FlashPlayer上で表示
実際のデモを見ると、やはり動作が遅いと感じた。
JavaScriptとしてはかなり高性能。
ただ、現状、わざわざExtJSを採用する優位性が感じられなかった。
4. iPhone、Objective-C について [天野さん]
iPhoneでWebにアクセスする場合
- Safari(Mobile Safari)経由
- Safari向けのWebページを開発することになる
- WebページはSafariで確認する
- Dashcodeやエディタ、Webページ作成ツールを使う場合もある
SafariでのWebページの確認
- Safari デバッグ(今まで)
- WebKitとDroseraを組み合わせてよく確認していた
- Safari (3.1以降では・・・)
- Safari開発メニュー
- 開発メニューの出し方
- 「Safari」->「環境設定」->「詳細」->「メニューバーに開発メニューを表示」にチェック
Webページ開発が可能なソフトウェア
- Dashcode
- Xcodeと共にインストール
- 無償
- Apple純正ソフトウェア
- Dreamweaver CS4
- ライブコード / ライブビュー
- 解析エンジンはWebKit
iPhoneアプリの開発
- 開発環境の入手
- Develop for iPhone OS 3.0 というサイトにアクセス
- iPhone Dev Centerにアクセスする
- iPhoneヒューマンインタフェースガイドラインを絶対守るようにすること
- 守っておくと、ファームウェアのバージョンアップ後も対応可能になる
開発環境 Xcodeを入手
- Interface Builder
- コーディングなしで開発可能
- Property List Editor
- 後工程で使う場合もある
- xml形式でアプリケーションの設定情報を編集可能
- iPhone Simulator
- 実機に入れる前にチェックが可能
- Instruments
- 実際にどれぐらいのパフォーマンスが出るか測定が出来る
開発言語 Objective-C
- C言語を拡張したOOP言語(開始は main())
- 動的バインディングが可能になった(特徴)
- あるオブジェクトから別のオブジェクトへ情報を送る際、送信時にオブジェクトの型が決まる
- C++は遅延バインディングなので、送信直前までにオブジェクトの型が決まるので、C++とは異なる
- C言語の関数を呼び出すことが可能
- GNUに還元(gccにコンパイラ搭載)
- optionインストールする必要はある(デフォルトでは入っていない)
- クラス定義は .h
- 実装は .m
- メインコードも .m
- iPhone開発に使用するのは、Objective-C 2.0
- C++を拡張した Objective-C++ も存在する(使用可)
- C++のクラスを使用可能
- Objective-C++の実装は .mm か .M
- Objective-Pascalなんてものも存在する
クラスの作成
- 宣言クラス
1 2 3 4 5 6 7 |
@interface クラス名 : スーパークラス { インスタンス変数宣言 } メソッド宣言 @end |
- 実装クラス
1 2 3 |
@implementation クラス名 メソッド定義 @end |
メソッドの宣言
- インスタンスメソッド
1 |
- (返値の型) メソッド名 [:仮変数リスト...]; |
- クラスメソッド
1 |
+ (返値の型) メソッド名 [:仮変数リスト...]; |
- 型の宣言を省略すると id になる
- 動作する直前まで型が決まらない原因は、ここにある
例)
1 2 3 4 |
+ (id) alloc; - init; - (void) sayHello:(String) yourName; |
メソッドの呼び出し
- メッセージ式
1 |
[レシーバ メッセージセレクタ]; |
例)
1 2 |
[myObj sayHello]; [self sayHello:@"Apple" from:@"Japan"]; |
※ self とは thisと同じ。
※ @"??????" は Stringと同じ。
HelloWorldのデモ
1 2 3 |
@interface hello : Object - (void) sayHello; @end |
1 2 3 4 5 |
@implementation hello - (void) sayHello { printf ("Hello, Objective-C World.\n"); } @end |
1 2 3 4 |
int main (void) { [[hello alloc] sayHello]; return 0; } |
※ printf内の文字列宣言は、通常のC言語の表記になっていることに注意
クラスの拡張
- サブクラス化
- 継承
- カテゴリ
- 既存のクラスにメソッドを追加可能
- インスタンス変数は追加不可
- 拡張したメソッドが、既存のメソッドに影響を与えない仕組みになる
- デリゲート
- 自分に来たイベントを、全部外に投げてしまう
- ターゲット / アクション
- ある指定したメッセージセレクタの場合、別に投げてしまう
- 通知
- iPhone独自
メモリ(インスタンス)管理
- ガーベジコレクションは無し
- Objective-C 2.0で実装
- allocメソッドでメモリ確保
- releaseメソッドでメモリ解放
1 2 |
id myInstance = [NSObject alloc]; [myInstance release]; |
- NSAutoreleasePoolを使った autorelease
- ガーベジコレクションとは違う
- 参照数をカウントしておき、参照数が0になったら解放する
※ NS = NextStepの略
Objective-C 2.0での変更点
- ガーベジコレクションの実装
- コンパイラオプションとしてガーベジコレクションを使うかどうか指定
- autorelease、ガーベジコレクションの組み合わせ・併用は自由
- iPhone OSではガーベジコレクションは使用不可
- プロパティの追加
- @propertyでプロパティを定義
- アクセッサメソッドを自動作成(管理可)
- ドットシンタックスの採用
- 高速列挙(NSEnumeratorを使わないループ)
- for eachなどが使えるようになった