Google devfest 2010にいってきました
3/11のdevfest2010に参加しました
A会場にずっといました。
以下メモです
基調講演
及川さん
- Webアプリ
- Client
- Webアプリがローカルアプリに追い付く
- ほぼ全ての機能はWeb標準技術で提供できる
デモ
html5
-
- HTML5/CSS3でWebをパワフルに
- Chrome4の機能
- WebFonts
Fontはローカルに入っているものを使う
ローカルではゴシックと明朝のみ(多くのプラットフォームに対応しようとすると)
サーバからダウンロードできたら...
Chrome4で実装
-
-
- WebSockets
-
いままではCommetという技術を使っていた
ひとつのポートを張っただけで任意のタイミングでデータを送信可能
-
- Androidアップデート
- 26修理 60キャリア 49ヶ国 一日あたり60,000台
- Webプラットフォームでの開発
- Androidアップデート
石原さん
- Google I/O
- 一番大きいイベント
- Google Developer Day
- 日本では秋に開催予定
- DevFest
- Hack-a-thon
- Community Events
Google,User,Developerが一体となってEcosystemを作る
Google Code Archive - Long-term storage for Google Code Project Hosting.
- クイズサマリ
- 開催期間:7日間
- エントリした人:2113
- クリアした人:461
- 最高点:36.6/46
- パスした人:22/46
- 11問目
- Google DevQuiz 2010 Japanを採点
たのしい Android : カスタム UI で Android アプリにワクワク感を加えよう
自己紹介
- 矢野りんさん
- adamrockerさん
- さくらのレンタルサーバ
- adamrocker (@adamrocker) | Twitter
- ソフトウェアの研究 --Android向けIMEのSimejiを開発中
- SimejiはUS市場の端末にプリインストール予定
インタラクションのキモeasingとは何か?
- "ため"のあるアニメーションを実現する方法
- UIの動きに特徴をあたえることで、楽しく使っている
Tweener Documentation and Language Reference
- どの程度のeasingが妥当か
- 自分自身が気持ちいいと感じるまで、微調整を繰り返す
easingをDialogに採り入れよう
Interpolator:アニメーションの程度を調整する変換関数
android.view.animation
<?xml/ version="1.0" encoding="utf-8"> <resouces> <style name="Theme.CustomDialog" parent="andoird:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/Mydialog</item> </style> </resouces>
<?xml/ version="1.0" encoding="utf-8"> <set xmlns:android=" android:interpolator="@anim/anticipate"> <!-- ここ同じ --> </set>
mDialog = new Dialog(this,R.style.xxxx)だけ
カラーコーディネートの効果
- レイアウトした素材の徒手津間をなくし、ユーザに操作の余計な違和感を感じさせない
- 目立たせたい部分を計画的に目立たせる
themes.xml
<?xml/ version="1.0" encoding="utf-8"> <resouces> <style name="Theme.CustomDialog" parent="andoird:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/Mydialog</item> <item name="android:windowBackgroun">@drowable/xx_bg</item> </style> </resouces>
btn_image.xml
<?xml/ version="1.0" encoding="utf-8"> <selector> <item nadroid:state_pressed="true".. <item nadroid:state_forcused="true".. </set>
mDialog = new Dialog(this,R.style.xxxx)だけ
easing付き横スクロールで楽しい操作感
移動幅に応じてテンションの値を変更する
- 移動量大->派手=テンション小さめ
- 移動量小->地味=テンション高め
float tension = 1.2f - (0.1f*x);//xは移動量 Interpolator ip = new OvershootInterpolator(tension); mScroller = new Scroller(context,ip);
移動幅に応じてアニメーション時間を変更する
- 移動量大=アニメーション時間:長
- 移動量小=アニメーション時間:短
int duration = (1+Math.log(x))*350;//xは移動量 mScroller.startScroll(mScrollX,mScrollY,dx,dy,duration);
HorizontalScrollViewのsmoothScrollByの第3引数にdurationを設定できるように
MyHorizontalScrollViewを作る
OSSならでわ
やさしい Android -- ユーザフレンドリかつデベロッパーフレンドリーな Android アプリケーション開発手法
自己紹介
ユーザにとって"やさしい"とは
- クラッシュ/フリーズしない
- 安心して使える
互換性を保つ
複数解像度
- 各解像度用にディレクトリを作りデータを管理は必須
- drawable-ldpi
- drawable-mdpi
- drawable-hdpi
- drawable-land-ldpi
- 特定の解像度にしたい
XMLでレイアウトを記述する
国際化対応
- 本質的には非常に難しい
- 10 out of 10 "%s out of %s" =>日本語だと10件中1000件
- Androidの市場で英語圏は無視できない
- 文字列をJavaプログラム本体に埋め込まない
- 絵文字
- Unicodemojiに画像をかぶせてみる
String tulip = "u1F340"; //文字の上に何かをかぶせる SpannableStringBuilder ssBuilder = new SpannableSringBuilder(); ssBuilder.append(tulip); Drawable drawlabe = getResources().etDrawable(R.drawalbe.tulip) drawable.setBound(0,0,100,100); ssBuilder.setSpan( new ImageSpan(drawable),0,ssBuilder.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ssBuilder);
バグを未然に防ぐ:ユニットテスト
- Classを作るときにJUnitTestCase
バグを未然に防ぐ:ロギング
- logcat
バグに見える挙動を減らす
- 次にして欲しいことを表示
- 例:メニューを押してください
- フィードバックをもらう
- アプリを説明せずに使ってもらう
- 操作方法に気づくまで、何十秒もかかる
- UIが不親切
Mobile Mapping
- Mano Marksさん google
- ManoMarks🏳️🌈 (@ManoMarks) | Twitter
- モバイル
- プライマリのコミュニケーション・デバイス
- プライマリPCへ
- 環境
- iPhone,Android,soon other smart phones JavaScriptAPI
- モバイル開発で何が難しいか
- screen size
- サイズ調整
- Latency
- 起動時間
- User interface and interaction
- Speed
- Location Based Services
- Device services
- screen size
レイテンシとは
- ページロードにかかる時間
- 画面の変化に気づく時間
ブラウザベースのMapsの利点
- たくさんのプラットフォームに存在する
- アプリんダウンロードいらず
- すぐに最新のバージョンになる
- HTML5GeoLocation
NativeAPIを使う利点
- NativeUIが使える
- 改善が簡単に行える
- AppStoreで見付けられる
- レイテンシが少ない
- ブラウザベースだとJavaScript ダウンロードとか..
使いどころ
Static Maps API
- 静的画像をresponse
- Version 2 は以下の特徴
- カスタムアイコン
- encoded polylines
- special mobile tiles
- 広く互換性がある
改良点
- StaticMapをDLして、JSをDLする方法にかえた
- MapsAPIの起動時間比較
V2:bootstrap->main.js ->set_center -> tiles
9s 18s
V3:bootstrap->main.js ->set_center -> tiles
2s 7s
デモ
native APIでGeoLocationを得て
WebViewでGoogle MAP V3つかうAndroidコード
http://beta.gr-3.net/map-api
プログラミング言語Go
- 鵜飼さん google
Go言語とは
- 2009/11/10にリリース
- Fast
- Fun
- Productive
- 開発エンジニア
- Plan9にいた人
hello world
gofmtでGOの標準フォーマットで
Code Example
i := 0
は
var i int = 0
と等しい
- 関数
func enc(s string) string {
r := kk
}
- 多値の return ができる
- if の条件式に複数指定できる
まとめ
- Fast
- コンパイル速度
- バイナリの実行速度
- Fun
質問
- コンパイル速度が速い理由
- いらない機能を省いている
- テンプレートとかない
- Goはパッケージが既にできている状態だから
- いらない機能を省いている
- 実行速度が速い理由
- いらない機能を省いている
- Exceptionがない
- いらない機能を省いている
GoogleWave
概要
- Google WaveはGoogle I/Oで発表したコラボレーションツール
- リアルタイム性の高いコミュニケーションが使える
新しい
- 多人数でDocを編集できるのはログイン - Google アカウントでも
- 多人数でも同じドキュメントをリアルタイムに編集してもコンフリクトしない
操作変換
- 自分の操作と他人の操作をそのまま反映すると衝突がおこってしまう場合にその操作を変換することで
衝突を避ける
GoogleWaveの拡張
- Wave gadget
- Waveに張り付けることができる小さなアプリケーション、他のユーザと共有が可能
- Wave robot
- ユーザのWave操作...
Wave Gadget
同期処理
- Waveガジェット上での他のユーザとのデータの同期処理は非常に簡単に実装することができる
Wave Robot
- ウェーブに対する変更をイベントとして駆動するプログラム
- 例:
- プログラムを張り付けると 自動的に色をつけてくれるロボット
- 顔文字を書くと自動的にアイコン変換
- 開発環境
- GAEの環境が必要
- [app id]@appspot.comがロボットアドレスになる
ビデオチャット
Pamela Fox (@pamelafox) | Twitter
と言う人に質問タイム
Google Moderator has gone away - Google Search Help
に一覧がある
Advanced Google Chrome Extensions with HTML5
資料
Advanced Google Chrome Extensions with HTML5 - Google スライド
Do Task Queues Dream of MapRedule?
TaskQueueとは
http://code.google.com/intl/ja/appengine/docs/python/taskqueue/
Queue queue = QueueFactory.getDefaultQueue();
queue.add(url(xxx)...)
GAEの管理コンソール上でQueueが確認できる
使い道
- GAEで特に遅い並列な更新処理に活用
- メール送信
- 他のサイトからRSSをfetch
気を付ける点
- 個々のタスクも30秒ルール
- 1アプリあたり20task/sが上限
デモ
- 500文字のランダムなアルファベットを全文検索するデモ
- GTalkでサーブレットにXMPPで話しかけると サーブレットはTQにタスクを積んで、返答するアプリ
- シーケンシャルの処理よりもTQで実装すると4倍位少なくとも高速になる
- GAEはウォーミングアップが必要
参考
Google App Engine for Javaを使ってみよう! (9)XMPP Java API (1/4):CodeZine(コードジン)
- TQはAppサーバを並列
- クライアントで並列にrequestを投げる
- もしくはサービスが並列
Appサーバを増やすには
- 初期は2instance
- 負荷がかかってくるとinstanceが自動的に増える
- 30req/sが上限
- googleに個別相談すればリミットを外してくれる
参考
http://code.google.com/intl/ja/appengine/docs/quotas.html