AndroidアプリをAndroidを使って作る
材料
Androidタブレットにconnectbotをインストール
ちなみに私は下記端末+
8インチタブレット用キーボード付きケースで試しました
- Androidマーケットからconnectbotで検索
- インストール
しかし、、、ctrlやtab,escが効かないので vimで編集とかとてもしにくい状態
UbuntuにCLI Android Development環境をつくる
sun-java6-binをインストール
$ sudo vi /etc/apt/sources.list #下記を追加 deb http://archive.canonical.com/ lucid partner $ sudo aptitude sun-java6-jdk ant apache vim git
android sdk linux x86をインストール
Download Android Studio and SDK tools
から android-sdk_r09-linux_x86.tgzをクリック
$ tar xvzf android-sdk_r09-linux_x86.tgz $ sudo mv android-sdk-linux_x86/ /usr/share/android-sdk/
android sdk セットアップ
$ export PATH=$PATH:/usr/share/android-sdk/tools/ $ android update sdk -u
Installed Google APIs by Google Inc., Android API 8, revision 2
Downloading GALAXY Tab by Samsung Electronics., Android API 8, revision 1
GALAXY Tab用のSDK?もダウンロードしてる..
プロジェクトを作成してみる
$ android create project -t 4 -p $PWD/KeyTest -k "la.zeg.android.keytest" -a KeyTest $ export PATH=$PATH:/usr/share/android-sdk/platform-tools/ $ cd KeyTest/ $ ant debug /usr/share/android-sdk/tools/ant/main_rules.xml:306: Execute failed: java.io.IOException: Cannot run program "/usr/share/android-sdk/platform-tools/aapt": java.io.IOException: error=2, No such file or directory
ん? No such file or directory
$ cd /usr/share/android-sdk/platform-tools $ ./aapt -bash: ./aapt: No such file or directory
んー調べたら 下記をインストールしたらなおるみたい
64bit環境だからかな
$ sudo aptitude install lib32z1-dev lib32stdc++6 $ ./aapt 動くようになった
キーコードを調査するためのでもアプリつくる
$ cd KeyTest $ vim $ vim src/la/zeg/android/keytest/KeyTest.java package la.zeg.android.keytest;
import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.widget.TextView; public class KeyTest extends Activity implements KeyEvent.Callback { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { TextView t = (TextView)findViewById(R.id.textview); t.setText(""+keyCode); return super.onKeyDown(keyCode, event); } }
こんな感じのでもアプリをつくって
apkを公開
$ cp bin/KeyTest-debug.apk /var/www/
Tabletでアクセスしてダウンロード,インストール
調査すると
- ALT:57
- F2:82
- Tab:61
- Ctrl,ESC,F1:0
Ctrl,ESC,F1が同じコードが割り当てられているようだ
そこで
- ALT->Ctrl
- F2->ESC
として Tabのキーコードを変えてconnectbotを使いやすくする
connectbotの改造
android is01+ConnectBotでCTRLとESCが入力出来るようになりました - mk18のプログラミング日記を参考にさせていただいて
改造
$ git clone https://github.com/kruton/connectbot.git
こんな感じに改造
$ diff -c connectbot/src/org/connectbot/service/TerminalKeyListener.java connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java *** connectbot/src/org/connectbot/service/TerminalKeyListener.java 2011-01-29 23:10:06.000000000 +0900 --- connectbot_fr-809/src/org/connectbot/service/TerminalKeyListener.java 2011-01-29 21:03:47.000000000 +0900 *************** *** 49,55 **** public final static int META_SHIFT_ON = 0x10; public final static int META_SHIFT_LOCK = 0x20; public final static int META_SLASH = 0x40;! public final static int META_TAB = 0x80; // The bit mask of momentary and lock states for each public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK; --- 49,57 ---- public final static int META_SHIFT_ON = 0x10; public final static int META_SHIFT_LOCK = 0x20; public final static int META_SLASH = 0x40; ! //public final static int META_TAB = 0x80; ! //zegenvs change TAB 128 -> 61 ! public final static int META_TAB = 0x3D; // The bit mask of momentary and lock states for each public final static int META_CTRL_MASK = META_CTRL_ON | META_CTRL_LOCK; *************** *** 403,408 **** --- 405,420 ---- bridge.redraw(); return true; + case 57: //ALT->CTL + metaPress(META_CTRL_ON); + bridge.redraw(); + return true; + + case 82: //F1->ESC + sendEscape(); + bridge.redraw(); + return true; + } } catch (IOException e)
コンパイル
その前に
ProGuard | Official website
から ダウンロードしてproguard.jar を
connectbot/tools/proguard.jar
に配置
android target を変えないとコンパイルできなかったので7に変更
$ android update project --target 7 --path $PWD $ ant proguard debug #またapacheで公開 $ cp bin/ConnectBot-debug.apk /var/www
Tabletでアクセスしてダウンロード,インストール.
なんとか 出来ました
以上
Android Bazaar and Conference 2011 Winter行ってきました
スマートフォン版GREE (HTML5+JavaScript & Android)
要素技術
HTML Forms
- フォーム機能拡張
- placeholderのサポート
- フォームに薄い表示ができる
- placeholderのサポート
<input placeholder='メールアドレス' />
<input type=email />
-
-
- androidでは対応してない
- パスワードを覚えてもらえてもらえなくなる
- number
-
<input type=number />
-
- url,date,searchなんかがある
- 入力値をクライアント側
CSS3
困ったこと
写真アップロードの仕組み
- class GreeAppJs <->WebView
- WebView.addJavascriptInterfaceでJavaScriptとNative(Java)と通信可能 WebView -> Java
- WebView.loadUrl('javascript:setMoodImage(b64Img)') Java -> WebView
まとめ
- HTML5で表現力も開発力も向上
- クロスプラットフォーム
- 足りない部分はネイティブの機能を組み合わせて表現
- androidとHTML<->ネイティブブリッジは美しい
Application cache
- manifestで指定したファイルをオフラインキャッシュとして保持可能 <10M
- 大量の小さな静的ファイルをキャッシュ
HTML5によるリッチクライアント開発手法についてあれこれ
Web開発/HTML5の標準化団体
- JavaScript(ECMAScript) ... ECMA
- HTTP/WebSocket/JSON/Atom ... IETF
- WebGL ... Khronos
- HTML5は、HTMLとDOMの最新アップデータ
HTML5基礎知識
どこまでがHTML5?
- HTML 5.3 がすべて
- DOM,HTML文法,windowオブジェクト
- 一般的にはJavaScript APi
- Web Storage
- Web Sockets
- Web Workers
- IndexedDB
HTML5が可能にするもの
- より美しく,インタラクティブに
- 操作性とリアルタイム性を高く
- Web Workers .. BackGroundの処理を可能
- Web Socket ... リアルタイム性の高い、新たな通信新形式
- サーバ・クライアントがほぼ対等に
- 任意のタイミングで双方向通信
- 基本的にはHTTPベースではない
- 受け入れられたらその通信が使いまわせる
- Server-Sent Events .. HTTPのサーバプッシュ
- Offlineでも利用可能に
- Webサービス間の連携がさらに容易に
- Cross Document Messaging ... Webページ間のメッセージ通信
- Cross Origin Resource Sharing ... オリジンドメインを超えたHTTP呼び出し
- プラットフォームとのより深い統合
サンプル
HTML5によるRIA開発
- 白石俊平さんの経験
- オフラインRIA開発
- https://chrome.google.com/extensions/detail/ddibbajpifealkjbmkmoknkgnneibkjp?hl=en
- オフライン
- リッチテキスト編集API
- iPhoneむけWebサイト構築
JSによるRIA開発困難
- 非同期処理中心のプログラミング
- コールバック地獄
アプリケーションアーキテクチャ
- クライアントしかできないものはクライアントに
- サーバしかできないものはサーバ
つまり...
オフラインWebアプリへ
- HTML5時代のキャッシュ技術
- 静的なリソースのキャッシュ
- HTTPヘッダで制御可能
- 動的なリソースのキャッシュを適切に行うのは難しい
- 静的なリソースのキャッシュ
- アプリケーションキャッシュ
- HTML/CSS/JS/画像をまるごとキャッシュされる
- リソースがすべてローカルから読み出される
- DaVinciPadすぐ出てくる
- HTML/CSS/JS/画像をまるごとキャッシュされる
- ローカルストレージ
- Web Storage/Web SQL Database/Indexed DB という3つがある
- 動的なキャッシュに向いている
どの技術をいつ用いるか
アーキテクチャはどうなる
Androidウェブアプリケーション連携術
自己紹介
- はてなのAppEngineer id:cho45さん
- Perl/JavaScriptをメインにほかいろいおr
- アプリケーションサーバコード
- UIコード
はてなのAndroid 事例1:フォトライフ for Android
- はてなフォトライフの写真を快適に閲覧
- 写真アップロード,自動アップロード
- Serviceは積極的に使う
- 写真閲覧のプロセスと別にすることでService自体のメモリ使用量を減らし,killされにくくしている
- 非同期API(Intent.ACTION_SEND) Serviceに投げっぱなし
- 同期API
- プログレスを表示するためaidlを書き内部でIPC
- 自動アップロード機能
- Serviceを常時起動
- 数10秒ごとにファイルシステムを監視-> バッテリー食う ->スクリーンが付いている時だけ監視
- lastModifiedが起動直後狂うので頑張る
- Service常時起動
- AlarmManagerで定期的に死活監視
- Notificationが出ていても起動しているとは限らない
- 起動直後の時間狂い
- 起動直後はTZが設定されるまでディレイがある
メモリ消費削減の手段
- Memory Analyzer(Eclipse Plugin)
- どんなオブジェクトがメモリ消費しているのかわかる
- DDMSで得るスレッド一覧
- HttpClientがスレッドをつくるので一本化した(staticにした)
- traceview
- Debug.startMethodTracing プロファイル結果をグラフィカルに見れる
- バグレポート送信機能
はてなのAndroid 事例2:はてなログイン管理
- アカウント情報管理アプリ
- OSのContentPrvider+permissionを考えていた
- セキュリティ上の問題
は先に定義したもの勝つ - 悪意のアプリが先にPermission定義しちゃうとまずい
はてなのAndroid 事例3:はてなモノリス
- バーコードを読んでモノを共有するサービス
- アプリでバーコードを読んで投稿する
- 出来る限りWeb
- Webのシームレスな連携
- zxingを使った
- 依存関係が複雑
- 移植頑張った
- 依存関係が複雑
adb shell am start -n com.example.foo/.Setting --ez debug true
- 国際化
Locale.javaを実装
WebエンジニアからAndroid
- 基本はWeb
- Intentは高級になたハイパーリンク
- Activityはウェブページ
- Serverはワーカプロセス
- TOP - Hatena Developer Center
Android2.3 (Geneerbread API)
NearFileldCommunication
- Android NFC
- FeliCaとかRFID的な物
- 駅の改札
- http:///bit.ly/nfc-about
- http:///bit.ly/nfc-abc2011w
- NFC API
- android.nfc.NfcAdapter
if(NfcAdapter.ACTION_TAG_DISCOVERD.equals(action){... }
DownloadManager
- SystemのService
DownloadMnager mDownloadMnaager = (DownloadManager) getSystemService(Content.DOWNLOAD_SERVICE);
- バックグラウンドでダウンロードしてくれる
- ダウンロードする対象をUriで指定
Uri uri = Uri.parse("http://download/image.png"); DownloadMnager.Request ...
- 保存先をできる
- デフォルトはキャッシュ
StrictMode
Y.A.M の 雑記帳: Android Android 2.3 - StrictMode -
- デバック用
- Application Not Responding
- main threadが5秒以上反応しない
- BroadcastRecieverが10秒以内で終わらない
- ANRの原因になりそうな処理を検出してくれる
- UIスレッド上でのネットワーク処理
- 時間のかかるディスク偉
UI Framework
- 黒基調になった
- OverScroll
Android NDK
android.os.strage
Mixable audio effects
- オーディオエフェクトに対応
- トラック単位でも全体にも適用可能
- OpenSL ESベース
Multiple Camera Support
- 複数カメラ標準でサポート
- android.hardware.Cameara
getCameraInfo(int,CameraInfo) getNumberOfCameras()
PackageManager
- PackageItemInfo
Telephony
- ネットワークタイプが増えた
- getPsc
Graphics
- OpenGL ESが全部入った
AlermClock
- インテントを投げるだけで設定できる
以上 書ききれない部分もありましたが
とても勉強になりました.
個人的には 表示部分をHTMLでつくるどうしても必要なものをNativeでつくる
というのがとても印象に残りました。
kindle3がやっと到着しました
場所 | 日付 | 現地時間 | |
NARITA, JP | 2010/09/04 | 11:25 | ロケーションスキャン |
2010/09/04 | 11:24 | 仕向国センタースキャン | |
2010/09/04 | 10:53 | 空港上屋スキャン(輸入) | |
2010/09/04 | 8:34 | 積み替え完了スキャン | |
2010/09/04 | 8:28 | 空港到着時刻 | |
2010/09/04 | 8:28 | 空港到着時刻 | |
ANCHORAGE, AK, US | 2010/09/03 | 8:36 | 空港出発時刻 |
2010/09/03 | 8:36 | 空港出発時刻 | |
2010/09/03 | 7:00 | 空港到着時刻 | |
2010/09/03 | 7:00 | 空港到着時刻 | |
ONTARIO, CA, US | 2010/09/03 | 2:40 | 空港出発時刻 |
ONTARIO, CA, US | 2010/09/02 | 23:04 | 空港到着時刻 |
PHOENIX, AZ, US | 2010/09/02 | 22:00 | 空港出発時刻 |
大体3日で到着したので以外と早かった
確か到着予想は8日だったので3日も早くきたことになる
さて、箱を開けてすぐにブラウザを立ち上げて
いろんなサイトを見たが、
やっぱり PCのサイトを見るにはちょっと辛い
そこで SmartPhone用のページをいくつかブックマークしたので
メモ
- Google:http://www.google.co.jp/m
- Facebook:http://touch.facebook.com/
- はてなブックマーク:http://b.hatena.ne.jp/touch
- Twitter:http://mobile.twitter.com/
- Gmail:https://mail.google.com/mail/mu
- Google Reader:http://www.google.co.jp/reader/i
- Google ニュース:https://www.google.com/news/i
- Yahoo!ニュース:http://dailynews.yahoo.co.jp/iphone/
- Wikipedia:http://ja.m.wikipedia.org
- Google マップ:http://maps.google.co.jp/maps/m
- Google 乗り換え案内:http://maps.google.co.jp/maps/m?mode=transit
- Google翻訳:http://translate.google.co.jp/m/translate
第102回カーネル読書会に行ってきました
自分用メモ
DTraceでできること
自己紹介
DTrace
- Solaris10,OpenSolarisで使える
- Mac OSやFreeBSDでportingしている
- Linuxでもportingしている最中
http://blogs.sun.com/bmc/entry/dtrace_on_linux
参考
漢(オトコ)のコンピュータ道: D言語基礎文法最速マスター(DTraceのほう)
DTraceの使いかた
観測点が見える
$ dtrace -l
provider一覧
$ dtrace -i | awk "{print $2}" | sort -u
システムコールのプロバイダを見る
$ dtrace -n 'systemcall:write:entry{@lexecname,pid]=count();}'
関連
trasコマンド
CPU負荷
$ dtrace -n 'profile-997/arg1/{@[ufunc(arg1)}=count();}...'
DTraceによるMySQL解析ことはじめ
MySQL
- OpenSouceのRDBMS
- MySQL AB -> Sun -> Oracle
- 使いやすく、安定、高速
- Oracleに買収されても開発は大丈夫
- MySQLチームはほとんど残っている
- MySQL6.0は廃止
- 機能を詰め込み過ぎた
MySQLエキスパートトラブルシューティングガイド
参考
http://forge.mysql.com/wiki/Main_Page
MySQL :: MySQL Community Downloads
MySQLの特徴
DTrace
[ユーザ空間] ユーザプロセス dtrace
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
[カーネル空間] プロバイダ プローブ
カーネル挙動を追尾する「DTrace」の実力 (1/8) - ITmedia エンタープライズ
プロバイダ | 提供される主な情報 |
dtrace | DTraceの開始時や終了時、エラー発生時などにイベントが発生するプローブ。後述のDスクリプトでプログラムするときに、初期化処理や終了処理、エラー処理などを記述する時に用いる |
lookstat | ロック状態が変化した時にイベント発生するプローブ |
profile | 一定時間ごとにタイマイベントを発生するプローブ。定期的に値を集計したい時などに用いる |
fbt | Function Boundary Tracing。カーネル内部の関数への突入/退出ごとにイベントを発生するプローブ |
syscall | システムコールへの突入/退出ごとにイベント発生するプローブ |
sbt | Statically Defined Tracing。アプリケーション定義のプローブ。アプリケーション開発者があらかじめsys/sdt.hにある関数群を呼び出し、DTraceのイベントを発生させるように構成する時、該当ルーチンを通過するとイベント発生する |
sysinfo | カーネルのステータス情報(kstat -n sysで取得できる情報)を提供するプローブ |
vminfo | カーネルの仮想メモリ情報(kstat -n vmで取得できる情報)を提供するプローブ |
proc | プロセスの生成、終了、シグナル受信などが発生した時にイベント発生するプローブ |
sched | CPUスケジューリングに関する情報を提供するプローブ |
io | ディスク入出力情報に関するプローブ。iostatコマンドで取得できる情報を提供する |
mib | Management Information Bases(MIB)情報を提供するプローブ。kstat -nやnetstatコマンドで取得できる情報を提供する |
fpuinfo | SPARCプロセッサのFPUシミュレート機能状態を提供するプローブ |
pid | 任意のプロセスIDをもつプロセス内の指定した位置の関数への突入/退出ごとにイベントを発生するプローブ |
plockstat | プロセスのロック状態を知らせるプローブ |
fasttrap | ユーザープロセスがDTraceを呼び出すときに、そのユーザープロセスに対してデータを流し込むためのハンドラ。現状では利用されない |
D言語
/述語/ { アクション }
mysqld内に設置可能なprobe
なぜかわからないエラーが出る場合にサーバ側でトレースできる!!
- pid
- 関数のentry
- 関数のreturn
- 関数のoffset
- 書式)pid123
- fasttrap
- MySQL5.4で追加された
- 書式)mysql123
SQL文を抽出
pid$target::*mysql_pgrace*:entry
{
trace(copyinstr(arg1));
}
http://forge.mysql.com/wiki/RandomQueryGenerator
MySQL5.4以降の、include/probes_mysql.d
これとか
./support-files/dtrace/query-filesort-time.d
./support-files/dtrace/query-execandqc.d
./support-files/dtrace/statement-time.d
./support-files/dtrace/query-rowops.d
./support-files/dtrace/query-parse-time.d
./support-files/dtrace/query-time.d
./support-files/dtrace/locktime.d
./support-files/dtrace/statement-type-aggregate.d
./support-files/dtrace/query-network-time.d
MySQL5.4で追加されたfastrrap クエリキャッシュのヒット率を算出
[ThinkIT] 第6回:query_cache_sizeの違いによるパフォーマンス比較 (1/3)
文字列をキーにしてキャッシュ
1000行以上ファイルソートしているクエリを探す
BEGIN { printf("Hit Ctrl+C to exit._n"); } mysql$target::filesort-start { self->sortig = 1; self->db= arg0 == 0 ? "NULL" : copyinstr(arg0); self->table = cpoyinstr(arg1); } mysql$target::filesort-done { . . . }
DTraceToolkit
Q&A
- fastrapをマクロで埋め込む場合の注意すべき点
- linux fastrapのような支援マクロはある?
- ない
- dtraceではなく(5.4以下)filesortしているものを抽出するには
- 関数の境界はdtraceが使える(pidプロバイダ)
- dtraceをして負荷が増してdownが嫌
- そういうこともある
- 関数の境界を*で引っかけると負荷がかかる
- 対象をしぼってtraceすることが重要
- まずはOSのstatでどこがネックになっているか調べる
プレゼンやソースが公開されているみたいです
漢(オトコ)のコンピュータ道: 第102回カーネル読書会 at 楽天のプレゼン資料公開しました。 #kernel100329
https://addons.mozilla.org/en-US/firefox/addon/4723をFirefox3.6で使う
IEや他のブラウザ
https://addons.mozilla.org/ja/firefox/downloads/file/50726/save_complete-1.0.1-fx.xpi
を入力してエンター 保存
↓
save_complete-1.0.1-fx.xpi.zip
に名前変更
↓
zipを展開
↓
install.rdf
を編
<em:maxVersion>3.9</em:maxVersion>
↓
zip圧縮
↓
save_complete-1.0.1-fx.xpi
に名前変更
↓
Firefoxでsave_complete-1.0.1-fx.xpi
を開く
↓
Add-onインストール、再起動
↓
http://example.com/page.html
に行く
↓
ファイル->Save Complete Page As..
Cookpad x シリウステクノロジーズ勉強会に行ってきました
cookpadとAWS
自己紹介
- クックパッド株式会社 勝間さん
ログ解析(通常)
scheduler->worker app -> db
- カウントのキャッシュPV/UUの解析
- ユーザの要求が理解できていない
- 複雑な条件で解析したい
- 例
- 無料/有料会員のアクセス頻度
Hadoopクラスタ
- Amazon EC2
- Large instance
- 10-20 instance/day
- Cloudera AMIをカスタマイズ
- CDH1
- 独自スクリプト追加
- MySQL等書くソフトインストール済み
Hive
SELECT count(1) FROM pv_users WHERE date="20100219" and hour = "12"
- MySQLで可能なことは大抵OK
- DISTINCT
- GROUP BY
- JOIN
Hiveのメリット
- SELECTがスケールする
質問
- INSERTやUPDATEはスケールするのか?
クックパッドのものづくり
自己紹介
- クックパッド 西岡さん
- 2009.6入札
- プログラミングノート
Goodはやらない
- Bestに集中する
- Bestとは
- 料理が楽しくなるか(やりたい)
- 世界一になれるか(とくい)
- 儲かる
もの作り3原則
- 無言実行
- 告知なし
- サービスを言葉にできない
- ユーザにメリット無し
- 無言語化
- 機能を一瞬で理解できるI/Fを
- ユーザはヘルプを読まない
- サービスに値段を付ける
- 無料だという理由ではつかわれない
- お金を払ってでも使いたいサービスが無料だと使われる
質問
- なんで500円の有料モデルを止めたのか?
レゴとプラレールをくっつけろ(内外混成チームとものづくり)
自己紹介
- シリウステクノロジーズ高橋さん
- スクラムマスター
シリウステクノロジーズ
- 40名
- 位置情報連動広告
- near near
- cirius labo
- http://adlocal.biz
コミュニケーションや文化の問題を緩和
- 簡単な言葉
- 主語、述語をそろえて
- Skypeチャットで言葉の理解をバッファ
- ホワイトボードの活用
- 問題は仕組みで解決
- 議論はし尽くす
Ridding ショットガン
自己紹介
- Viktor(ハンガリー)さん prezi.comにいた
- Robby(オーストラリア)さん
AdLocalの FlontEnd
- 3層になっている
- unobtrusive JavaScript
- DRY CSS
- Semantic HTML
Semantic HTML
- 最小構成のHTML
- 意味だけを表す
- DIVやSpanを使わない
- インラインCSSを使わない
- インラインJSを使わない
unobrit javascript
Testing@cirius
自己紹介
- Ericさん
Integration Test
受け入れテスト
- Post-itを使う
- マネージャとレビューして機能
負荷テスト
-
- JMeter
- Random locations
- Random load
- JMeter
自動化に関して
- UnitTestとIntegrationTest
- Hudsonを使っている
新製品near nearに付いて(Android)
自己紹介
- 橋本さん
アプリ紹介
- おいしいレストランとか行きたいけど忘れたという経験
- お店を検索してブックマークに追加できるアプリ
- 住所とかタイトルを抜き出して保存できる
- 4sq.comのようなチェックイン機能がある
Sinatra導入事例とTips
自己紹介
Sinatraとは?
- SimpleなRubyFW
- ウェブアプリを書くためのDSL
get '/' do "<h1>hello world"</h1>" end
ruby hello_world.rb
http://localhost:4567
で動く
特徴
- ActiveRecord
- DataMapper
- ERB
- Haml
productionは
- passengerを使うと簡単
Sinatoraに向き
- RDBに依存しないもの
EnigmoとBuyMaのAWS
自己紹介
エニグモ
BUYMA|海外ファッション通販 - 世界中の海外ブランドをお得に購入
ファッションのアイテムが多い
システム
まとめ
- S3はストレージとして使えない
- EBSは便利
CloudFront
- クエリストリングにパラメータをあたえてもキャッシュされてしまう
超小型人間型ロボットEMMA-U0A
自己紹介
- 中野博文 (@nakano_h) | Twitter
- 株式会社ロボットエンジン
デジタルまないた
- まないたに画面が付いている
- 料理のしかたを教えてくれる
- みじん切りの回数表示
デジタルまないたTODO
- ネットワークからレシピを取得
- 料理ログからお薦め
- テレビが見れる
- 重さがはかれる
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