SlideShare a Scribd company logo
1 of 56
Download to read offline
僕がAndroidWearアプリ
を何も考えずに作った結果
AndroidWear勉強会#2
夜子まま
ストップウォッチが
出来るまで
項目
• 作ったきっかけとWearアプリへの落とし込み
• AndroidWearアプリの実装で躓いた点
• データ共有処理
• AndroidWearアプリで出来る事
• まとめ
もともとはバスケの練習用
練習メニューの作成
ストップウォッチ、タイマー
による計測
日々の記録とグラフ化
今までは
標準のタイマーとEVERNOTEを併用
フォーマットは自由にできるので、
とりあえず記録しておいて
いつかPCでなんとかしてやれ感
WorkOutアプリ
練習メニューを確認
メニューに応じて、タイマー、
ストップウォッチ、回数表示の
機能に
アプリ設計
DB
WorkOut WorkLog
DB
データ通知
WorkOut
Item
Wear側の設計
ワーク名
タイマー
前回のタイム/最高記録
開始、停止ボタン
次のワークへ
ここで問題に気づく
この仕様だと、設定された順番でしか
ワークをこなせない、何らかの方法で
選択をしなければ使いにくい
方法1:スピナー
使えた
だけど画面が狭い
方法2:ダイアログ
Sel
使えた
だけど画面がごちゃご
ちゃしすぎ
ここでふと別の問題に
気づいた
うち、双子だった
この画面で二人分の記録を同
時に出来るようにするには?
二人以上の記録
• 記録にタグ付けをする
• Lap機能を追加し、数人の記録ができるようにす
る
うーんっっ
やめることにした
そもそもWearableは
一人で使うもの
1:1 1:N
こっち
ストップウォッチに特化
してみることにした
ストップウォッチ設計
DB
RecordTag RecordLog
DB
タグの追加
記録にタグ付け
ストップウォッチ設計
DB
RecordTag RecordLog
DB
記録のグラフ表示
外部アプリとの連携
ストップウォッチ設計
必要最低限の機能にとど
めて、タグ付けや、削除
といった作業はスマホ側
で行う。
スマホとウォッチ間の
情報共有
データ共有
Message Data Layer
Message
指定されたpathにデータを送信する。
送信時に接続がなくても処理が終了するため、
一方通行なデータ送信に適している。
送信実装例
DataMap dataMap = new DataMap();
dataMap.putLong(KEY_START_TIME, startTime);
Collection<String> nodes = getNodes();
for (String node : nodes) {
Wearable.MessageApi.sendMessage(
mGoogleApiClient, node, START_TIMER_PATH, dataMap.toByteArray()).setResultCallback(
new ResultCallback<MessageApi.SendMessageResult>() {
@Override
public void onResult(MessageApi.SendMessageResult sendMessageResult) {
if (!sendMessageResult.getStatus().isSuccess()) {
Log.e(TAG, "Failed to send message with status code: "
+ sendMessageResult.getStatus().getStatusCode());
}
}
}
);
}
DataMapクラスを
使うとbyte[]化が楽
OnResultというけど、送信の
可否程度で、結果を受信側で作
成する仕組みはなさそう。
リスナー実装例
@Override
public void onMessageReceived(MessageEvent messageEvent) {
Log.d(TAG, "onMessageReceived: " + messageEvent);
}
MessageApi.MessageListenerを implementsし
下記のメソッドをOverrideする
Wearable.MessageApi.addListener(mGoogleApiClient, this);
実装したリスナーの登録
実装したリスナーの解除
Wearable.MessageApi.removeListener(mGoogleApiClient, this);
onMessageReceiveの実装例
@Override
public void onMessageReceived(MessageEvent messageEvent) {
Log.d(TAG, "onMessageReceived: " + messageEvent);
!
// Check to see if the message is to start an activity
if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) {
Intent startIntent = new Intent(this, MainWearActivity.class);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startIntent);
}
}
MessageEventに登録したPathで
判断するのがいいみたい。
僕がミスった例
リスナーの解除しわすれをしていたため、同じMessage
が何度も飛んできた。
アプリを再起動しても解除されないので???な状況に
07-11 10:54:57.962 5509-5672/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962 5509-5610/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962 5509-5660/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962 5509-5521/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962 5509-5539/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5570/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5604/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5601/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5566/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5520/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5582/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972 5509-5567/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.982 5509-5587/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.002 5509-5581/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.052 5509-5581/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.052 5509-5587/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.062 5509-5570/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
http://stackoverflow.com/questions/24702402/android-mobile-wear-
app-onmessagereceived-called-multiple-times-for-one-message
Stackoverflowにも事例あり
DataLayer
DataItemやAssetsを共有データとしてStoreに登録する。
その後、変更通知を受け取るよう設定されたデバイスは
変更されたデータを取得することができる。
接続されていない場合は一旦待機し、接続された際に
変更を通知するので、同期的なデータ共有に適している。
store
登録実装例
PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(COUNT_PATH);
putDataMapRequest.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = putDataMapRequest.asPutDataRequest();
!
if (!mGoogleApiClient.isConnected()) {
return;
}
Wearable.DataApi.putDataItem(mGoogleApiClient, request)
.setResultCallback(new ResultCallback<DataItemResult>() {
@Override
public void onResult(DataItemResult dataItemResult) {
if (!dataItemResult.getStatus().isSuccess()) {
Log.e(TAG, "ERROR: failed to putDataItem, status code: "
+ dataItemResult.getStatus().getStatusCode());
}
}
});
登録用のデータを作成
Uriは内部で自動生成
一個ずつしか登録でき
ないみたい
取得実装例
PendingResult<DataItemBuffer> results = Wearable.DataApi.getDataItems(mGoogleApiClient);
results.setResultCallback(new ResultCallback<DataItemBuffer>() {
@Override
public void onResult(DataItemBuffer dataItems) {
if (dataItems.getCount() != 0) {
DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItems.get(0));
!
// This should read the correct value.
int value = dataMapItem.getDataMap().getInt(COUNT_KEY);
}
dataItems.release();
}
});
登録したUriを指定、あ
るいは全部取得の二択
登録数分配列で帰ってくるので、
目的のものを検査して処理す
るみたい
リスナー設定
Activityの場合
DataListenerの実装だけでよい
Serviceの場合
WearableListenerServieを実施、且つ
AndroidManifestに一つFilterを追加する必要あり
リスナーの実装例(Activity)
@Override
public abstract void onDataChanged (DataEventBuffer dataEvents) {
Log.d(TAG, "onDataChanged: " + dataEvents);
}
Activityの場合はDataApi.DataListenerを implementsし
下記のメソッドをOverrideする
Wearable.DataApi.addListener(mGoogleApiClient, this);
Activityの場合はさらに、実装したリスナーの登録も必要
登録したリスナーの解除は必ず行うようにすること
Wearable.DataApi.removeListener(mGoogleApiClient, this);
リスナーの実装例(Service)
@Override
public abstract void onDataChanged (DataEventBuffer dataEvents) {
Log.d(TAG, "onDataChanged: " + dataEvents);
}
Serviceの場合はWearableListenerServiceを extendsし
下記のメソッドをOverrideする
<service android:name=".HomeListenerService">
<intent-filter>
<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
</intent-filter>
</service>
AndroidManifest.xmlのServiecの定義に下記のFilterも追加する
onDataChangedの実装例
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents);
dataEvents.close();
for (DataEvent event : events) {
String path = event.getDataItem().getUri().getPath();
if (event.getType() == DataEvent.TYPE_CHANGED) {
Log.d(TAG, "request path:" + path);
} else if (event.getType() == DataEvent.TYPE_DELETED) {
} else {
}
}
}
データの更新種別によって処理を振り分ける。
Createでないのがなんとなくしっくりこない。
Uriの生成private Uri getUriForDataItem() {
// ローカルのノード上のデータのUriの場合
String nodeId = getLocalNodeId();
// リモートの場合は getRemoteNodeId()を使う、またはすでに固定で知っているなら直接打ち込んでもいい
return new Uri.Builder().scheme(PutDataRequest.WEAR_URI_SCHEME).authority(nodeId).path("/path_to_data").build();
}
!
private String getLocalNodeId() {
NodeApi.GetLocalNodeResult nodeResult = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await();
return nodeResult.getNode().getId();
}
!
private String getRemoteNodeId() {
HashSet<String> results = new HashSet<String>();
NodeApi.GetConnectedNodesResult nodesResult =
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
List<Node> nodes = nodesResult.getNodes();
if (nodes.size() > 0) {
return nodes.get(0).getId();
}
return null
}
StackOverflowをみてたら
いいのを見つけた。
http://stackoverflow.com/questions/24601251/what-is-the-uri-
for-wearable-dataapi-getdataitem-after-using-putdatamaprequest
僕がミスった例
07-15 19:16:10.185 9549-9569/? D/MainActivity﹕ onDataChanged:
com.google.android.gms.wearable.DataEventBuffer@191106b8
07-15 19:16:10.186 9549-9569/? D/MainActivity﹕ request path:/action-add
07-15 19:16:10.203 9549-9569/? W/Binder﹕ Caught a RuntimeException from the binder stub implementation.
java.lang.SecurityException: Permission Denial: reading
com.kayosystem.android.easystopwatch.RecordContentProvider uri content://com.kayosystem.android.easystopwatch/
tb_recordlog from pid=0, uid=10009 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:498)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:425)
at android.content.ContentProvider$Transport.query(ContentProvider.java:195)
at android.content.ContentResolver.query(ContentResolver.java:466)
at android.content.ContentResolver.query(ContentResolver.java:410)
at com.kayosystem.android.easystopwatch.MainActivity.registerdCheck(MainActivity.java:326)
at com.kayosystem.android.easystopwatch.MainActivity.onDataChanged(MainActivity.java:211)
at com.google.android.gms.wearable.internal.av.d(Unknown Source)
at com.google.android.gms.wearable.internal.ac$a.onTransact(Unknown Source)
at android.os.Binder.execTransact(Binder.java:404)
07
Wear側からDataLayerを使って変更を通知し、Mobile側
でContentProviderでデータ・アクセスしたら落ちた。
OnDataChangeはWearのプロセスIDからの実行になっている。
処理の前に
long token =Binder.clearCallingIdentity()をよび、処理がおわっ
たら、Binder.restoreCallingIdentity(token)を呼ぶ。
あるいは、runOnUiThreadでも回避できた。
おまけ
幾つかやってて
気づいたこと
Activityの遷移は出来る?
出来ました
Fragmentの遷移は出来る?
出来ました
Dialogは使える?
出来ました
SQLiteは使える?
出来ました
Environment
File data = Environment.getDataDirectory();
File external = Environment.getExternalStorageDirectory();
File download = Environment.getDownloadCacheDirectory();
File root = Environment.getRootDirectory();
!
Log.d(TAG, "data:" + data.getAbsolutePath());
Log.d(TAG, "external:" + external.getAbsolutePath());
Log.d(TAG, "download:" + download.getAbsolutePath());
Log.d(TAG, "root:" + root.getAbsolutePath());
07-14 11:09:50.600 14757-14757/com.kayosystem.android.wearsample D/Fragment1﹕ data:/data
07-14 11:09:50.610 14757-14757/com.kayosystem.android.wearsample D/Fragment1﹕ external:/storage/emulated/0
07-14 11:09:50.610 14757-14757/com.kayosystem.android.wearsample D/Fragment1﹕ download:/cache
07-14 11:09:50.610 14757-14757/com.kayosystem.android.wearsample D/Fragment1﹕ root:/system
SDCard
ない
/system/etc/vold.fstab",
/etc/vold.fstab"
はともに読み取りできませんでした。
URLConnectionは使えるか?
使えない
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ java.io.EOFException
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at com.android.okhttp.internal.Util.readAsciiLine(Util.java:342)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:311)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:353)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:297)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.android.okhttp.internal.http.HttpURLConnectionImpl.getHeaderFields(HttpURLConnectionImpl.java:161)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.kayosystem.android.wearsample.Fragment1.getTechbooster(Fragment1.java:242)
07-14 11:42:34.495 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at com.kayosystem.android.wearsample.Fragment1.access
$300(Fragment1.java:36)
07-14 11:42:34.505 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at
com.kayosystem.android.wearsample.Fragment1$5.run(Fragment1.java:218)
07-14 11:42:34.505 1208-1236/com.kayosystem.android.wearsample W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
ペアリングする前だと、UnknownHostでエラーが発生
ペアリング後だと、Connectionは成功したけど、そのあと落ちた
PackageManagerの
hasFeatureの結果(LGG)
android.software.app_widgets not supported.
android.hardware.audio.low_latency not supported.
android.software.backup not supported.
android.hardware.bluetooth supported.
android.hardware.bluetooth_le supported.
android.hardware.camera not supported.
android.hardware.camera.any not supported.
android.hardware.camera.autofocus not supported.
android.hardware.camera.external not supported.
PackageManagerの
hasFeatureの結果(LGG)
android.hardware.camera.flash not supported.
android.hardware.camera.front not supported.
android.hardware.consumerir not supported.
android.software.device_admin not supported.
android.hardware.faketouch supported.
android.hardware.faketouch.multitouch.distinct not supported.
android.hardware.faketouch.multitouch.jazzhand not supported.
android.software.home_screen supported.
android.software.input_methods not supported.
PackageManagerの
hasFeatureの結果(LGG)
android.software.leanback not supported.
android.software.leanback_only not supported.
android.software.live_wallpaper not supported.
android.hardware.location supported.
android.hardware.location.gps not supported.
android.hardware.location.network not supported.
android.hardware.microphone supported.
android.hardware.nfc not supported.
android.hardware.nfc.hce not supported.
android.hardware.nfc.hce not supported.
PackageManagerの
hasFeatureの結果(LGG)
android.software.print not supported.
android.hardware.screen.landscape not supported.
android.hardware.screen.portrait supported.
android.hardware.sensor.accelerometer supported.
android.hardware.sensor.barometer not supported.
android.hardware.sensor.compass supported.
android.hardware.sensor.gyroscope supported.
android.hardware.sensor.heartrate not supported.
android.hardware.sensor.light not supported.
PackageManagerの
hasFeatureの結果(LGG)
android.hardware.sensor.proximity not supported.
android.hardware.sensor.stepcounter supported.
android.hardware.sensor.stepdetector supported.
android.software.sip not supported.
android.software.sip.voip not supported.
android.hardware.telephony not supported.
android.hardware.telephony.cdma not supported.
android.hardware.telephony.gsm not supported.
android.hardware.type.television not supported.
android.hardware.touchscreen supported.
PackageManagerの
hasFeatureの結果(LGG)
android.hardware.touchscreen.multitouch supported.
android.hardware.touchscreen.multitouch.distinct not supported.
android.hardware.touchscreen.multitouch.jazzhand not supported.
android.hardware.usb.accessory supported.
android.hardware.usb.host not supported.
android.hardware.type.watch supported.
android.software.webview not supported.
android.hardware.wifi not supported.
android.hardware.wifi.direct not supported.
へぇー
やってみた感想
思っていた以上になんでもできた。
僕はてっきり、Mobileのサブ画面的な位置付け
で考えていたので、データの同期は高速で、またほとんど
の処理をモバイル側で暗黙的に処理されるような仕組みだ
と勝手に想像していた。
だけど実際やっぱり別デバイスなんだなと痛感させられた
だから理解に苦しんだところがあった。
しかし良く考えると、これはやはりAndorid端末なので、
なんでもやれるし、面白いデバイスだと思いました。

More Related Content

Similar to Android wear勉強会2

121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateappTakayoshi Tanaka
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションMasanori Satoh
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconDeNA
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向Tsutomu Ogasawara
 
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0Tomonori Takaki
 
マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版i_yudai
 
PhoneGapの始め方
PhoneGapの始め方PhoneGapの始め方
PhoneGapの始め方akabana
 
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)Haruhiko KAJIKAWA
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02Tomohiro Kondo
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02Tomohiro Kondo
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekkySatoshi Sekine
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事Cybozu, Inc.
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキングTakashi Okamoto
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」feedtailor
 

Similar to Android wear勉強会2 (20)

121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0
VMware AirWatch Fee Trial Guide JP Chapter 1 v2.0
 
VMware AirWatch Trial Guide JP Chapter 1 v3.0
VMware AirWatch Trial Guide JP Chapter 1 v3.0VMware AirWatch Trial Guide JP Chapter 1 v3.0
VMware AirWatch Trial Guide JP Chapter 1 v3.0
 
マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版マスタリング DEA/NG 第2版
マスタリング DEA/NG 第2版
 
PhoneGapの始め方
PhoneGapの始め方PhoneGapの始め方
PhoneGapの始め方
 
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)
Scalr hands on (第3回SCALR勉強会で利用、第1回資料の新版)
 
Force.com開発基礎
Force.com開発基礎Force.com開発基礎
Force.com開発基礎
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
ゼロから学ぶIoT
ゼロから学ぶIoTゼロから学ぶIoT
ゼロから学ぶIoT
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekky
 
kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事kintoneの新機能を開発するお仕事
kintoneの新機能を開発するお仕事
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
第2回 近JASA セミナー 「組み込みの世界に影響を与える エンタープライズiOS」
 

More from Masafumi Terazono

Kobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライドKobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライドMasafumi Terazono
 
Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話Masafumi Terazono
 
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)Masafumi Terazono
 
夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料Masafumi Terazono
 
セーラーソン振り返り
セーラーソン振り返りセーラーソン振り返り
セーラーソン振り返りMasafumi Terazono
 
関西Nfc lab勉強会 宣伝
関西Nfc lab勉強会 宣伝関西Nfc lab勉強会 宣伝
関西Nfc lab勉強会 宣伝Masafumi Terazono
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 Masafumi Terazono
 
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料日本Androidの会 中国支部資料
日本Androidの会 中国支部資料Masafumi Terazono
 
Android+NFC 日本Androidの会神戸支部 勉強会
Android+NFC 日本Androidの会神戸支部 勉強会Android+NFC 日本Androidの会神戸支部 勉強会
Android+NFC 日本Androidの会神戸支部 勉強会Masafumi Terazono
 
関西支部Android勉強会(ロボットxnfc)
関西支部Android勉強会(ロボットxnfc)関西支部Android勉強会(ロボットxnfc)
関西支部Android勉強会(ロボットxnfc)Masafumi Terazono
 
夜子まま塾講義12(broadcast reciever)
夜子まま塾講義12(broadcast reciever)夜子まま塾講義12(broadcast reciever)
夜子まま塾講義12(broadcast reciever)Masafumi Terazono
 
夜子まま塾講義11(暗黙的intent)
夜子まま塾講義11(暗黙的intent)夜子まま塾講義11(暗黙的intent)
夜子まま塾講義11(暗黙的intent)Masafumi Terazono
 
夜子まま塾講義10(画面の呼び出し)
夜子まま塾講義10(画面の呼び出し)夜子まま塾講義10(画面の呼び出し)
夜子まま塾講義10(画面の呼び出し)Masafumi Terazono
 

More from Masafumi Terazono (20)

初心者向けSpigot開発
初心者向けSpigot開発初心者向けSpigot開発
初心者向けSpigot開発
 
Minecraft dayの報告
Minecraft dayの報告Minecraft dayの報告
Minecraft dayの報告
 
BungeeCordeについて
BungeeCordeについてBungeeCordeについて
BungeeCordeについて
 
Spongeについて
SpongeについてSpongeについて
Spongeについて
 
Kobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライドKobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライド
 
Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話
 
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
初心者〜中級者 Android StudioによるAndroid勉強会資料(スライド)
 
夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料夜子まま塾 2015年1月23日 進行用資料
夜子まま塾 2015年1月23日 進行用資料
 
Thetalaps
ThetalapsThetalaps
Thetalaps
 
夜子まま塾@鹿児島
夜子まま塾@鹿児島夜子まま塾@鹿児島
夜子まま塾@鹿児島
 
セーラーソン振り返り
セーラーソン振り返りセーラーソン振り返り
セーラーソン振り返り
 
関西Nfc lab勉強会 宣伝
関西Nfc lab勉強会 宣伝関西Nfc lab勉強会 宣伝
関西Nfc lab勉強会 宣伝
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 
 
日本Androidの会 中国支部資料
日本Androidの会 中国支部資料日本Androidの会 中国支部資料
日本Androidの会 中国支部資料
 
Android+NFC 日本Androidの会神戸支部 勉強会
Android+NFC 日本Androidの会神戸支部 勉強会Android+NFC 日本Androidの会神戸支部 勉強会
Android+NFC 日本Androidの会神戸支部 勉強会
 
関西支部Android勉強会(ロボットxnfc)
関西支部Android勉強会(ロボットxnfc)関西支部Android勉強会(ロボットxnfc)
関西支部Android勉強会(ロボットxnfc)
 
関西Unity勉強会
関西Unity勉強会関西Unity勉強会
関西Unity勉強会
 
夜子まま塾講義12(broadcast reciever)
夜子まま塾講義12(broadcast reciever)夜子まま塾講義12(broadcast reciever)
夜子まま塾講義12(broadcast reciever)
 
夜子まま塾講義11(暗黙的intent)
夜子まま塾講義11(暗黙的intent)夜子まま塾講義11(暗黙的intent)
夜子まま塾講義11(暗黙的intent)
 
夜子まま塾講義10(画面の呼び出し)
夜子まま塾講義10(画面の呼び出し)夜子まま塾講義10(画面の呼び出し)
夜子まま塾講義10(画面の呼び出し)
 

Recently uploaded

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

Android wear勉強会2