SlideShare a Scribd company logo
1 of 106
Download to read offline
TS-#TS-6
まだ間に合う!Androidの最新機能
を使ったアプリ開発

~Android2.3のシェアが20%を切った今、ターゲ
ットバージョンを切り替えるチャンス!~
AVCマルチメディアソフト株式会社 浜田 怜実
株式会社システナ 森 祥太郎
AVCマルチメディアソフト株式会社 小林 慎治
AVCマルチメディアソフト株式会社 木村 尭海
TS-#TS-6 2
目次	
1.  Androidの最新動向
AVCマルチメディアソフト株式会社 浜田 怜実
 
2.  AndroidアプリにGoogleAnalyticsを
導入しよう
株式会社システナ 森 祥太郎
 
3.  AndroidのBLE対応手法
AVCマルチメディアソフト株式会社 小林 慎治
 
4.  これからのセキュリティ
AVCマルチメディアソフト株式会社 木村 尭海
TS-#TS-6
1.Androidの最新動向	
AVCマルチメディアソフト株式会社
浜田 怜実
TS-#TS-6
自己紹介	
•  浜田 怜実(はまだ としみ)	
•  所属	
– AVCマルチメディアソフト株式会社	
•  担当業務	
•  Android端末のドライバ、OS開発	
•  プリインストール用アプリケーション開発	
•  特定用途向け技術研究・開発
•  個人的な活動
•  AndroidのカスタムROM開発
•  Firefox OSの世界初の技術系同人誌執筆(共著)
TS-#TS-6
目次	
•  現在のAndroid Version分布
•  Androidの変遷	
•  Androidを取り巻くデバイス
– iBeacon / BLE
– Google Glass
– Android Wear
– Android Auto
TS-#TS-6
Version 分布	
6
約14%	
https://developer.android.com/about/dashboards/index.html
TS-#TS-6
Androidの変遷	
10/22	
 4/30	
9/15	
10/26	
 1/5	
 5/20	
 12/6	
2/22	
10/19	
 6/27	
 11/13	
 7/24	
 10/31	
 2014秋	
2010	
2009	
2012	
 2013	
2011	
2008	
2011	
 2014	
L
TS-#TS-6 8
過去の遺物は捨て去って、
もっと大きな世界に打って出ませんか?
TS-#TS-6
iBeacon / BLE	
•  iBeacon
– AppleがBLEを拡張して開発した、近接する端末
に対して情報をプッシュできるデバイス
•  BLE(Bluetooth Low Energy)
– Bluetooth 4.0で追加された超低消費電力規格
•  低電力通信に特化した仕様
•  通信速度は非常に遅い
•  フィットネス、医療機器、
腕時計などでの利用を想定
9
TS-#TS-6
Google Glass	
•  2012年4月発表
•  メガネ型ウェアラブル
コンピュータ
•  Androidベースだが、Androidアプリケーショ
ンではなくGlasswareと呼ばれる専用のWeb
アプリケーションを使用する
•  GoogleI/O 2014でAndroid Wear対応を発表	
10
TS-#TS-6
Android Wear	
•  2014年3月発表
•  ウェアラブル端末専用のAndroid platform
•  端末形状は時計に限らない
– Google GlassがAndroid Wearに対応
•  Androidスマートフォンと連携して使う	
11
TS-#TS-6
Android Wear	
12
TS-#TS-6
既存アプリのAndroid Wear対応:通知	
13
Notification notif = new Notification.Builder(mContext)
.setContentTitle("New mail from " + sender.toString())
.setContentText(subject)
.setSmallIcon(R.drawable.new_mail)
.extend(new Notification.WearableExtender()
.setContentIcon(R.drawable.new_mail))
.build();
NotificationManager notificationManger =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManger.notify(0, notif);	
④通知の発行	
①WearableExtender
   インスタンスの生成	
②WearableExtender
   に内容を設定する	
③WearableExtender
   をnotificationにセット
TS-#TS-6
既存アプリのAndroid Wear対応:通知	
•  WearableExtenderで設定できる主な項目
– 背景       :setBackground()
– アイコン     :setContentIcon()
– ページの追加  :addPage() / addPages()
– アクション    :addAction() / addActions()
•  通知はAndroid Auto / Android TVでも同じ
手法で対応可能(!)
14
※ android.app.Notification.WearableExtender
TS-#TS-6
Android Auto	
•  2014年6月発表(in Google I/O 2014)
•  Android端末を車に接続し、端末の機能を車
側から操作・利用できるようにするシステム
15
TS-#TS-6
まとめ	
•  Androidと繋がるデバイスが作る世界は拡大
される方向にある
– ウェアラブルに限らない
•  手の中の端末とインターネットの世界の時代
から、より大きな外の世界と繋がる時代へ
– OSが新しいほど世界は大きい
16
TS-#TS-6 17
2.AndroidアプリにGoogleAnalyticsを
導入しよう	
株式会社システナ
森 祥太郎
TS-#TS-6
自己紹介	
•  森 祥太郎(もり しょうたろう)
•  所属
– 株式会社システナ
•  業務経歴
– Androidアプリケーション開発
– Androidデバイス開発
18
TS-#TS-6
目次	
•  GoogleAnalyticsとは	
•  なぜGoogleAnalyticsなのか	
•  アプリへの導入方法
•  注意点
•  まとめ
TS-#TS-6
GoogleAnalyticsとは	
•  以下のようなことを収集できる	
– アクティブユーザー数	
– 世界中のどこで使用されているか	
– 導入や特定の機能の使われ方	
– アプリのクラッシュや例外発生	
– アプリ内課金および、取引
TS-#TS-6
GoogleAnalyticsを使う理由	
•  無料ではじめられる	
•  DeveloperConsoleとの連携が容易	
•  Google Play Servicesに統合されている
TS-#TS-6
Google Play Services
TS-#TS-6
アプリへの導入方法	
•  導入	
•  画面遷移のトラッキング	
•  イベントのトラッキング	
•  クラッシュと例外のトラッキング
TS-#TS-6
アプリへの導入方法	
•  AndroidManifest.xmlの修正	
– パーミッションの付与	
    <uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
TS-#TS-6
アプリへの導入方法	
•  Trackerの生成(Applicationクラス)
private Tracker mTracker;
private static final String TRACKING_ID = "UA-XXXXXXX-Y";
@Override
protected void onCreate() {
super.onCreate();
// Trackerの生成と初期化	
    GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
mTracker = analytics.newTracker(TRACKING_ID);
}
public Tracker getTracker() {
return mTracker;
}
TS-#TS-6
画面遷移のトラッキング	
•  Activityの場合(APILevel14以上)	
– Applicationクラス	
@Override
protected void onCreate() {
super.onCreate();
// Trackerの生成と初期化	
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
mTracker = analytics.newTracker(TRACKING_ID);
// 画面遷移の自動トラッキング有効化	
analytics.enableAutoActivityReports(this);
mTracker.enableAutoActivityTracking(true);
}
TS-#TS-6
画面遷移のトラッキング	
•  Activityの場合(APILevel13以下)	
– Activityクラス	
@Override
public void onStart(){
super.onStart();
mAnalytics.reportActivityStart(this);
}
@Override
public void onStop() {
super.onStop();
mAnalytics.reportActivityStop(this);
}
TS-#TS-6
画面遷移のトラッキング	
•  Fragmentの場合	
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Trackerの取得
Tracker t = mApplication.getTracker();
// スクリーン名の設定
t.setScreenName(Fragment.class.getName());
// 送信
t.send(new HitBuilders.AppViewBuilder().build());
}
TS-#TS-6
画面遷移のトラッキング	
スクリーンビュー画像
TS-#TS-6
画面遷移のトラッキング	
ユーザー行動フロー画像
TS-#TS-6
イベントのトラッキング	
•  EventとしてTrackingできる内容	
– Category
•  文字列	
– Action
•  文字列	
– Label
•  文字列	
– Value
•  long型の値
TS-#TS-6
イベントのトラッキング	
•  実装例	
– Menuクリックの場合	
Public Map generat(MenuItem item) {
Map event = null;
switch (item.getItemId()) {
case R.id.menu_scan:
     event = generateEvent("scan", "start", "menu");	
break;
case R.id.menu_stop:
     event = generateEvent("scan", "stop", "menu");
break;
}
if (event != null) {
mTracker.send(event);
}
return true;
}
TS-#TS-6
イベントのトラッキング	
•  イベント生成部分	
public Map generateEvent(String category, String action, String label) {
HitBuilders.EventBuilder builder = new HitBuilders.EventBuilder();
builder.setCategory(category);
builder.setAction(action);
builder.setLabel(label);
return builder.build();
}
TS-#TS-6
イベントのトラッキング	
画像カテゴリリスト
TS-#TS-6
イベントのトラッキング	
画像アクションリスト
TS-#TS-6
クラッシュのトラッキング	
•  クラッシュのトラッキング	
@Override
public void onCreate() {
super.onCreate();
	
 	
(略)	
      	
UncaughtExceptionHandler myHandler = new ExceptionReporter(
mTracker,//Tracker
Thread.getDefaultUncaughtExceptionHandler(),// default Handler
this// app context
);
Thread.setDefaultUncaughtExceptionHandler(myHandler);
}
TS-#TS-6
例外のトラッキング	
•  例外のトラッキング	
– 例外としてトラッキングできる値	
•  Description
–  文字列	
例外クラス名(@クラス名:メソッド名:行数){スレッド名}	
•  Fatal
–  真偽値
TS-#TS-6
例外のトラッキング	
•  実装例
private int convertStringToInt(String num) {
int ret = 0;// 初期値	
try {
ret = Integer.parseInt(num);
} catch (NumberFormatException e) {
ExceptionBuilder builder = new ExceptionBuilder();
builder.setFatal(false);
StandardExceptionParser parser = new StandardExceptionParser(this,
null);
String description = parser.getDescription(Thread.currentThread()
.getName(), e);
builder.setDescription(description);
mTracker.send(builder.build());
}
return ret;
}
TS-#TS-6
クラッシュと例外のトラッキング
TS-#TS-6
XMLファイルでの設定	
•  Trackerの設定	
– res/xml/tracker.xml
<resources>
<!-- トラッキングID -->
<string name=“ga_trackingId” >UA-********-2</string>
<!-- Activityの自動トラッキング有効化 -->
<bool name="ga_autoActivityTracking" >true</bool>
</resources>
TS-#TS-6
XMLファイルでの設定	
•  Activityの自動トラッキング	
– XMLの設定を読み込む	
@Override
protected void onCreate() {
super.onCreate();
// Trackerの生成と初期化	
     GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
mTracker = analytics.newTracker(R.xml.tracker);
}
TS-#TS-6
XMLファイルでの設定	
•  Analyticsの設定	
– res/values/analytics.xml
<resources>
<!-- Activityの自動トラッキング有効化 -->
<bool name="ga_autoActivityTracking" >true</bool>
<!-- Activityの自動トラッキング有効化 -->
<bool name="ga_reportUncaughtExceptions">true</bool>	
</resources>
TS-#TS-6
注意点など	
•  収集データの送信タイミング	
•  収集機能のオン/オフ	
•  導入のコスト
TS-#TS-6
収集データの送信タイミング	
•  デフォルトでは30分毎に送信	
– GoogleAnalytics#setDispatchLocalPeriod()	
•  手動での送信	
– GoogleAnalytics#dispatchLocalHits()
TS-#TS-6
収集機能のオン/オフ	
•  データを収集することを、ユーザに通知する
必要がある	
– 収集機能をオフに出来る機能を提供する	
– 同意が得られない場合アプリを終了する
TS-#TS-6
導入コスト	
•  完成後のアプリケーションへの導入	
– コスト大
TS-#TS-6
まとめ	
•  開発ドキュメントをよく読む(特にV3)
•  プライバシーに配慮する
•  導入を考えて居るなら開発初期から設計に
盛り込む
TS-#TS-6 48
3.AndroidのBLE対応手法	
AVCマルチメディアソフト株式会社	
エンジニア  小林 慎治
TS-#TS-6
自己紹介	
•  小林 慎治(こばやし しんじ)
–  Twitter:@kobashinG
•  所属
–  AVCマルチメディアソフト株式会社
•  業務経歴
–  Androidデバイス開発
–  Androidアプリケーション開発
•  執筆
–  プロの力が身につくAndroidプログラミングの教科書
–  Androidタブレットアプリ開発ガイド など
49
TS-#TS-6
目次	
•  BLEとは?
•  AndroidにおけるBLE対応
	
50
TS-#TS-6
BLEとは?	
51
TS-#TS-6
BLEの特徴	
•  Bluetooth3.0までと4.0の違い
– Bluetooth 3.0まで
•  240Mbps
•  ペアリング必要
– Bluetooth 4.0
•  1Mbps(パケット長 47octet)
•  Classicとの互換性無
•  低電力(ボタン電池で駆動可)
•  ペアリング必要無し
52
TS-#TS-6
BLEの通信手法	
53
Peripheral	
Central	
Scan	
1. Scan & Discover	
 2. Connect 	
3. Scan Service(Profile) 	
 4. Read / Write / Notify 	
Peripheral	
Central	
Peripheral	
Find Me Profile	
Proximty Profile	
Peripheral	
Central	
Profile	
Service	
R / W	
Notify	
Advertise
TS-#TS-6
BLEの通信手法	
54
Peripheral	
Central	
Scan	
1. Scan & Discover	
 2. Connect 	
3. Scan Service(Profile) 	
 4. Read / Write / Notify 	
Peripheral	
Central	
Peripheral	
Find Me Profile	
Proximty Profile	
Peripheral	
Central	
Profile	
Service	
R / W	
Notify	
Advertise	
- Peripheral
- Advertise Packet
- 一定間隔で発信
- Central
- Scan
- Advを検出
TS-#TS-6
BLEの通信手法	
55
Peripheral	
Central	
Scan	
1. Scan & Discover	
 2. Connect 	
3. Scan Service(Profile) 	
 4. Read / Write / Notify 	
Peripheral	
Central	
Peripheral	
Find Me Profile	
Proximty Profile	
Peripheral	
Central	
Profile	
Service	
R / W	
Notify	
Advertise	
- Central
- 検出したPeripheralへ
接続
TS-#TS-6
BLEの通信手法	
56
Peripheral	
Central	
Scan	
1. Scan & Discover	
 2. Connect 	
3. Scan Service(Profile) 	
 4. Read / Write / Notify 	
Peripheral	
Central	
Peripheral	
Find Me Profile	
Proximty Profile	
Peripheral	
Central	
Profile	
Service	
R / W	
Notify	
Advertise	
- Central
- (P)のServiceを検索
- Peripheral
- Notify(Charcteristicの
変化通知)
- Central
- Read / Write
TS-#TS-6
BLEの通信手法	
57
Peripheral	
Proximty Profile	
Immediate Alert	
Link Loss	
Tx Power	
Generic Access	
Battery Service	
Services	
 Characteristics	
Device Name	
Appearance	
Peripheral Privacy Flag	
Reconnection Address	
…
TS-#TS-6
Service & Profile	
•  Profile / Service / Characteristicの定義
–  https://developer.bluetooth.org/gatt/Pages/default.aspx
58
TS-#TS-6
AndroidにおけるBLE対応	
59
TS-#TS-6
BLE対応	
•  対応バージョン
– Android 4.3からCentralに対応
Android 4.4.2以降を推奨
– Peripheralには非対応(Android L以降で対応)
•  対応デバイス(例)
– Nexus 4
– Nexus 5
– Nexus 7(2013)
– Etc…	
60
TS-#TS-6
iBeaconとは何か	
•  iBeacon
– BLEのAdv Packetを使った機能
– RSSI(電波強度)をAdv Packetに含め、機器から
のおおよその距離を判別
•  AndroidでiBeaconの利点
– iOSと共用のハードウェアが利用可
– Android / iOS間の通信
•  簡単なメッセージのやりとりに利用できる	
61
TS-#TS-6
iBeaconとは何か	
•  AndroidでiBeacon?
– もちろん対応可能
•  距離判断の仕組みをアプリで持つ必要有り
– Estimote SDKが利用可
•  https://github.com/Estimote/Android-SDK
•  iOSのインターフェースを真似ており、
プロトタイプなどの短期開発に向いている
•  距離判断の仕組みを含む
62
TS-#TS-6
iBeaconとは何か	
•  AndroidでiBeaconの注意点
–  iBeaconでできることをキチンと伝える
•  細かな距離の取得はできない
–  AndroidとiOSはできることが異なる
•  AndroidはPeripheralになれない
•  iOSはPacketスニファにはなれない
–  iOSに合わせたAndroidの距離判別アルゴリズム
•  同位置でデバイス毎に取得できるRSSIが異なることも
–  アプリのみで解決しようとしない
•  デバイス側を工夫することでできることもある
63
TS-#TS-6
BLEを使う	
•  AndroidでBLEを使う一連の流れ
1.  BLE setup
2.  機器検索
3.  Peripheral接続
4.  Characteristic読み書き
5.  BLE close	
64
TS-#TS-6
BLE setup	
•  必要なPermission
•  BLEが利用できるデバイスか確認
65
android:name="android.permission.BLUETOOTH”!
android:name="android.permission.BLUETOOTH_ADMIN”	
if (!getPackageManager().hasSystemFeature(!
PackageManager.FEATURE_BLUETOOTH_LE)) {!
!
//	
  BLE非対応時の処理!
    finish();!
}
TS-#TS-6
機器検索	
•  スキャン開始:BluetoothAdapter#startLEScan()
•  スキャン終了:BluetoothAdapter#stopLEScan()	
66
@Override	
  
public	
  void	
  handleMessage(Message	
  msg)	
  {	
  
	
  	
  	
  	
  switch	
  (msg.what){	
  
	
  	
  	
  	
  case	
  SERVICE_ACTION_BLE_SCAN:	
  
	
  	
  	
  	
  	
  	
  	
  	
  sendEmptyMessageDelayed(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  SERVICE_ACTION_BLE_STOP_SCAN,	
  10000);	
  
	
  	
  	
  	
  	
  	
  	
  	
  mBtAdapter.startLeScan(mLeCallback);	
  
	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  
	
  	
  	
  	
  case	
  SERVICE_ACTION_BLE_STOP_SCAN:	
  
	
  	
  	
  	
  	
  	
  	
  	
  mBtAdapter.stopLeScan(mLeCallback);	
  
	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  }	
  
}	
  
TS-#TS-6
機器検索	
•  結果は登録したCallbackで取得	
67
BluetoothAdapter.LeScanCallback	
  mLeCallback	
  
	
  =	
  new	
  BluetoothAdapter.LeScanCallback()	
  {	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  public	
  void	
  onLeScan(BluetoothDevice	
  bluetoothDevice,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  int	
  i,	
  byte[]	
  bytes)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  任意の処理	
  
	
  	
  	
  	
  }	
  
};	
Callback内で重たい処理を行うと呼び出し頻度が下がる
  ログのみ 6.4回/1秒
1000ms wait 1回/1秒
TS-#TS-6
機器検索	
•  onLeScanの呼び出され方が異なる
– Nexus7, Nexus4
– 
– Nexus5, XperiaZ
– Issue
•  https://code.google.com/p/android/issues/detail?
id=65863	
68
AdvPacketは以下の場合に取得
  ・ 新しいデバイスを発見したとき
  ・ 接続できないデバイス(non-connectable)	
AdvPacketは以下の場合に取得
  ・ 常時取得可
TS-#TS-6
機器検索	
•  注意点まとめ
– スキャン時はバッテリー消費高
– スキャン間隔はCallback内処理時間に依存
– スキャンはClassicBTと競合する	
69
必要に応じてスキャン実施。常時スキャンは避ける
Handler等を使ったタイマー処理stopを推奨	
Callback内処理負荷を下げれば、間隔を短くできる 	
スキャン以外は競合しないが、スキャンはNG
TS-#TS-6
Peripheral接続	
•  BLEの接続状態
70
切断状態	
 接続状態	
 検索完了状態	
接続要求:
connectGatt()	
検索要求:
discoverService()	
BluetoothGatt経由で
Read/Writeが可能に。
TS-#TS-6
Peripheral接続	
•  接続要求:BluetoothDevice#connectGatt()
–  接続結果は第三引数に設定した
Callback(onConnectionStateChange)で受ける
–  取得したBluetoothGattインスタンスで、接続後R/W可能
71
mBluetoothGatt	
  =	
  bluetoothDevice.connectGatt(	
  
	
  	
  	
  	
  	
  	
  	
  	
  getApplicationContext(),	
  false,	
  mGattCallback);
TS-#TS-6
Peripheral接続	
•  Service検索: BluetoothGatt#discoverService()
–  検索結果は同Callback(onServicesDiscovered)で受ける
72
BluetoothGattCallback	
  mGattCallback	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  =	
  new	
  BluetoothGattCallback()	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  void	
  onConnectionStateChange(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  BluetoothGatt	
  gatt,	
  int	
  status,	
  int	
  newState)	
  {	
  
	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  switch	
  (newState){	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  case	
  BluetoothProfile.STATE_CONNECTED:	
  
	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  Service検索	
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  gatt.discoverServices();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }
TS-#TS-6
Peripheral接続	
•  検索完了状態:
BluetoothGattCallback.onServicesDiscovered()	
  
–  Service	
  /	
  Characteristicの検索完了時に呼ばれる
73
@Override	
  
public	
  void	
  onServicesDiscovered(BluetoothGatt	
  gatt,	
  int	
  status)	
  {	
  
	
  	
  	
  	
  switch	
  (status)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  case	
  BluetoothGatt.GATT_SUCCESS:	
  {	
  //	
  0x00	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //	
  Enable	
  Reading	
  or	
  Writing	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  case	
  BluetoothGatt.GATT_FAILURE:	
  {	
  //	
  0x101	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}	
  
	
  
TS-#TS-6
Peripheral接続	
•  検索完了状態:
BluetoothGattCallback.onServicesDiscovered()	
  
–  Service	
  /	
  Characteristicの検索完了時に呼ばれる	
  
–  呼び出し時に以下ログが出力される
74
$ adb logcat BluetoothGatt:* BluetoothAdapter:* *:S
TS-#TS-6
Characteristic読み書き	
•  BluetoothGatt経由で
CharacteristicsやDescriptorを取得できる	
75
	
  static	
  final	
  String	
  UUID_SERVICE_GENERIC_ACCESS	
  	
  
	
  	
  	
  	
  	
  	
  	
  =	
  "00001800-­‐0000-­‐1000-­‐8000-­‐00805f9b34fb";	
  
	
  static	
  final	
  String	
  UUID_CHAR_DEVICE_NAME	
  
	
  	
  	
  	
  	
  	
  	
  =	
  "00002a00-­‐0000-­‐1000-­‐8000-­‐00805f9b34fb";	
  
	
  	
  
	
  BluetoothGattService	
  service	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  mBluetoothGatt.getService(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  UUID.fromString(UUID_SERVICE_GENERIC_ACCESS));	
  
	
  if(service	
  !=	
  null){	
  
	
  	
  	
  	
  	
  BluetoothGattCharacteristic	
  charcteristic	
  =	
  
	
  	
  	
  	
  	
  service.getCharacteristic(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  UUID.fromString(UUID_CHAR_DEVICE_NAME));	
  
	
  	
  	
  	
  	
  mBluetoothGatt.readCharacteristic(charcteristic);	
  
	
  }
TS-#TS-6
Characteristic読み書き	
•  Service検索と同じく
Callback(onCharacteristicRead)で受信	
  
76
@Override	
  
	
  public	
  void	
  onCharacteristicRead(BluetoothGatt	
  gatt,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  BluetoothGattCharacteristic	
  characteristic,	
  int	
  status)	
  {	
  
	
  
	
  	
  	
  	
  	
  if(characteristic	
  !=	
  null)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  try	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Log.i(“xxx",	
  "get	
  device	
  name	
  :	
  "	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  new	
  String(characteristic.getValue(),	
  "UTF-­‐8"));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  catch	
  (UnsupportedEncodingException	
  e)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  e.printStackTrace();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  }	
  
}
TS-#TS-6
Characteristic読み書き	
•  Read/Writeでfalseになる?	
  
– もう一度接続(connect~discover)を行い	
  
状態を確認すると良い	
  
77
BluetoothGatt#
discoverService()	
接続確認	
切断状態
初めからやり直し。
接続異常状態
初めからやり直しがベター。	
接続OK	
true	
false	
false	
true	
BluetoothGatt#
connect()
TS-#TS-6
BLE close	
•  Close処理
– 忘れるとスキャン不可、不安定動作などの要因に
78
public void close() {!
    if (mBluetoothGatt == null) {!
        return;!
    }!
    mBluetoothGatt.close();!
    mBluetoothGatt = null;!
}
TS-#TS-6
まとめ	
79
•  Android 4.4.2以前は機種差が大きい
– 端末毎に動作が異なることも
– 不安定な端末はサポートから外す等の対応を
•  iBeaconをiOS/Androidで両対応する
– iOSと出来ることが異なる点に注意
•  Callbackベースでの実装に注意する
– 読み書きはCallback経由で取得する必要あり
TS-#TS-6
4. これからのセキュリティ	
AVCマルチメディアソフト株式会社
木村 尭海	
80
TS-#TS-6
自己紹介	
•  木村 尭海(きむら たかうみ)
–  Twitter:@muchiki0226
•  所属
–  AVCマルチメディアソフト株式会社
•  業務経歴
–  家電連携Androidアプリケーション開発
–  Androidメディアフレームワーク開発
–  Androidデバイス開発
•  執筆
–  プロの力が身につくAndroidプログラミングの教科書
–  Effective Android
81
TS-#TS-6
目次	
•  最近のセキュリティトラブル
•  Androidのセキュリティとは
•  これからのセキュリティ
– SELinux
– Hardware Credential Storage
– KeyStore
82
TS-#TS-6
最近のセキュリティトラブル	
•  OpenSSL HeartBleedの脆弱性
–  Android 4.1.1からAndroid4.2.2(一部)がこの脆弱性を抱える
•  秘密鍵/証明書が盗まれる
–  通信内容が覗き放題
83
サーバ	
Android	
個人情報	
偽造サーバ
TS-#TS-6
Androidセキュリティ	
•  Androidアプリのセキュリティによるトラブルが減少
–  2012年の半分ぐらいに減少
•  減少しているが複雑な障害が発生しているケースが多数
–  アプリ
–  カーネル
–  フレームワーク
–  アプリのプラグイン
–  etc
84
0
20
40
60
80
100
120
2010 2011 2012 2013
5
21
118
59
障害件数	
JVNデータ(2014/5月調べ)
TS-#TS-6
Androidセキュリティ	
•  トラブル減少している主な要因
– アプリ開発者
•  セキュリティに対する知識を持った人が増えてきている
•  開発手法でのトラブルについてWebに多数掲載
•  ノウハウの蓄積
•  アプリが洗練されてきている
– Google
•  OSにセキュリティに対する実装が増えいる
–  パーミッション機能の追加など
85
TS-#TS-6
セキュリティは新しい課題に直面している	
•  特定のトラブルが増大
–  ファイルアクセス関連:19件/59件
–  鍵関連:5件/59件
•  Androidセキュリティはどこまで確保するのか
–  個人情報
–  端末のroot
–  アプリ情報
•  セキュリティは考え始めるといくらでも時間がかかる
–  端末の機能を知っていると効率的に保証が出来る
86
保証されている部分を活用したアプリ開発を行う必要がある
TS-#TS-6
これからのセキュリティ	
87
新しい機能を知らないと無駄な実装が増える	
どこまでセキュリティ
対策したらいいの?	
ファイルアクセスは
どうせ防げないので
対策は何もしないでおこう	
Androidはセキュリティに
問題があるので端末に
鍵は置けないな
TS-#TS-6
セキュリティ機能	
•  セキュリティの機能がクローズアップ
–  Android4.3
–  Android4.4
•  追加されたセキュリティ機能
–  Hardware Credential Storage
•  ハードウェア的に安全な領域に鍵などを保存可能
–  TrustZoneなど
–  KeyStore
•  アプリ用に暗号化鍵の生成/保存の機能が提供
–  SELinux
•  2000年から続くLinuxカーネルのモジュール
88
TS-#TS-6
Hardware Credential Storage	
89
TS-#TS-6
Hardware Credential Storageとは	
•  証明書を安全な領域に保存する機能
–  Hardware的に保証されている領域に保存される
•  TrustZone
–  Linuxカーネル上からのアクセス不可
–  エクスポートはできない
→安心して鍵を保存することができる
 ※ただしハードウェアが対応していることが条件
•  KeyChainを拡張して実現されている
–  デジタル証明書や秘密鍵を登録/管理するAPI
•  Android 4.0で追加された機能を拡張している
90
TS-#TS-6
確認方法	
•  ハードウェアが対応しているか確認
–  デバイス情報を確認する
•  [設定]>[セキュリティ]>[ストレージのタイプ]
–  ソースコード上で確認する	
91
// 暗号化方式はRSA、DSA、ECを使うことが可能
if (KeyChain.isBoundKeyAlgorithm("RSA")) {
// ハードウェア的に対応されている時の処理をここに書く	
} else {
// ハードウェア的に対応されていない時の処理をここに書く	
}
TS-#TS-6
KeyStore	
92
TS-#TS-6
KeyStoreとは	
•  秘密鍵/証明書を管理する機能
–  他のアプリがアクセス出来ない場所で保管する
–  Android 4.0で追加された機能
•  ただし全アプリで共用化される
•  Android 4.3で機能拡張
–  アプリごとに秘密鍵/証明書を管理が可能
93
TS-#TS-6
KeyStoreの使い方	
•  秘密鍵/証明書の作成
94
Context ctx = this;
Calendar notBefore = Calendar.getInstance();
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx).setAlias("key1")
.setSubject(new X500Principal(String.format("CN=%s, OU=%s", "test”,ctx.getPackageName())))
.setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime()).setEndDate(notAfter.getTime())
.build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
KeyPair kp = kpGenerator.generateKeyPair();	
アプリA	
 アプリB	
10075_
USRCERT
_key1	
10075_
USRPKEY
_key1	
生成	
生成
TS-#TS-6
KeyStoreの使い方	
•  秘密鍵/公開鍵の取得
95
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
// 別アプリからアクセスされるとnullが返される
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null);
// 公開鍵
RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey();
// 秘密鍵
RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();	
アプリA	
 アプリB	
10075_
USRCERT
_key1	
10075_
USRPKEY
_key1	
取得	
取得	
取得できない
TS-#TS-6
SELinux	
96
TS-#TS-6
rootを取られるとデータ取られ放題	
•  Androidの下にはLinuxカーネル
–  rootだとすべてのファイルの操作ができる
•  コピー
•  削除
•  etc
•  rootが取られると防ぎようがないのが課題
→Linux発祥の対策モジュールSELinux	
97
TS-#TS-6
SELinuxとは	
•  Security-Enhanced Linux
•  アメリカの国家安全保障局が2000年に提供
•  ライセンス
–  GPL
•  Linuxカーネルに組み込むセキュアモジュール
–  CentOSには標準で導入されている
–  Android4.3で導入された
98
TS-#TS-6
SELinuxって	
•  導入すると次のことは必要なくなるのか?
–  ファイアーウォール
•  通信の許可/不許可制御
–  IDS/IPS
•  侵入検知/攻撃ブロック機能
–  アクセス制御
•  不正ユーザのアクセス制限
–  セキュリティパッチ
•  脆弱性対策パッチ
–  ウィルス対策ソフト
•  ウィルス駆除など
99
TS-#TS-6
SELinuxって	
•  導入すると次のことは必要なくなるのか?
–  ファイアーウォール
•  通信の許可/不許可制御
–  IDS/IPS
•  侵入検知/攻撃ブロック機能
–  アクセス制御
•  不正ユーザのアクセス制限
–  セキュリティパッチ
•  脆弱性対策パッチ
–  ウィルス対策ソフト
•  ウィルス駆除など
100
答えはNO
TS-#TS-6
SELinuxのできること	
•  SELinuxの特徴
–  Mandatory Access Control (MAC)
•  リソースやプロセスへのアクセスする権限を自由に制御できない
•  MAC実現のための機能
–  Type Enforcement (TE)
•  プロセスがファイルへアクセスするのを制限する仕組み
–  Role Base Access Control (RBAC)
•  ユーザアカウントの権限を制限する仕組み(rootも含む)
→アカウントが乗っ取られてもアクセス範囲を制限
101
SELinuxは侵入された際に被害が拡大しないようにすること
TS-#TS-6
SELinuxの動作	
•  アクセスの制限は大きく2種類
– Permissiveモード
•  何も制限しないモード
•  ファイルやプロセスのアクセスはすべて許可
•  ルール違反のアクセスはログに記載されるのみ
– Enforcingモード
•  制限モード
•  ルール違反した場合のアクセスは
すべて遮断される
102
TS-#TS-6
Permissiveモードの動作の流れ	
103
プロセス	
 カーネル ファイル	
•  ファイルアクセスの例	
read/writeコマンド実行	
Linux標準の権限確認	
SELinuxの権限確認(MAC)
違反した場合はログに情報出力
TS-#TS-6
Enforcingモードの動作の流れ	
104
プロセス	
 カーネル ファイル	
•  ファイルアクセスの例	
read/writeコマンド実行	
Linux標準の権限確認	
SELinuxの権限確認(MAC)
違反した場合はエラー
TS-#TS-6
AndroidのSELinuxは発展途上	
•  Enforcingモードだがルールの定義が不完全
–  ほとんど動作していない
→今後対応が進む可能性が非常に高い
•  ルールはネットワークからアップデート可能
–  Compatibility Definition Documentに記載されている
–  事例あり
•  SamsungがGalaxyのルールアップデートを行った
105
SELinuxは時間が経つにつれてセキュリティが強固になる
TS-#TS-6
まとめ	
•  障害報告減っている
–  特定の障害報告が増えている
•  鍵/証明書、ファイルアクセスなど
•  KeyChain
–  デジタル証明書を守るために使いましょう
•  KeyStore
–  アプリ内用暗号鍵を守るために使いましょう
•  SELinux
–  rootを取られてもファイルアクセスに制限がある
※時間経過とともに強固になる
106

More Related Content

Similar to Etwest2014 ts 6

Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力Keiji Ariyama
 
失敗しない!Androidアプリ開発最前線!
失敗しない!Androidアプリ開発最前線!失敗しない!Androidアプリ開発最前線!
失敗しない!Androidアプリ開発最前線!Masahiro Hidaka
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -Isao Takaesu
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionYoshitaka Seo
 
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDaiyu Hatakeyama
 
侵入防御の誤検知を減らすためのDeepSecurity運用
侵入防御の誤検知を減らすためのDeepSecurity運用侵入防御の誤検知を減らすためのDeepSecurity運用
侵入防御の誤検知を減らすためのDeepSecurity運用morisshi
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界maruyama097
 
これからのマルウェアの話をしよう
これからのマルウェアの話をしようこれからのマルウェアの話をしよう
これからのマルウェアの話をしようKenji Aiko
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Yuji Kanemoto
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Shinya Nakajima
 
サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方Yuki Morishita
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)Yosuke HASEGAWA
 
サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016cyberagent
 
Azure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するAzure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するYusuke Kojima
 
Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)Daiji Hirata
 
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介Denodo
 

Similar to Etwest2014 ts 6 (20)

Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
失敗しない!Androidアプリ開発最前線!
失敗しない!Androidアプリ開発最前線!失敗しない!Androidアプリ開発最前線!
失敗しない!Androidアプリ開発最前線!
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
 
Azure IoT Edge で Custom Vision
Azure IoT Edge で Custom VisionAzure IoT Edge で Custom Vision
Azure IoT Edge で Custom Vision
 
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data PlatformDB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
 
Parse触ってみた
Parse触ってみたParse触ってみた
Parse触ってみた
 
侵入防御の誤検知を減らすためのDeepSecurity運用
侵入防御の誤検知を減らすためのDeepSecurity運用侵入防御の誤検知を減らすためのDeepSecurity運用
侵入防御の誤検知を減らすためのDeepSecurity運用
 
DartVM on Android
DartVM on AndroidDartVM on Android
DartVM on Android
 
Facebook Parseの世界
Facebook Parseの世界Facebook Parseの世界
Facebook Parseの世界
 
これからのマルウェアの話をしよう
これからのマルウェアの話をしようこれからのマルウェアの話をしよう
これからのマルウェアの話をしよう
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
 
Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)Visual Studio App Centerで始めるCI/CD(Android)
Visual Studio App Centerで始めるCI/CD(Android)
 
サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方サンプルで学ぶCassandraアプリケーションの作り方
サンプルで学ぶCassandraアプリケーションの作り方
 
次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)次世代プラットフォームのセキュリティモデル考察(前編)
次世代プラットフォームのセキュリティモデル考察(前編)
 
サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016
 
Azure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析するAzure の App Center でアプリの 使用状況を分析する
Azure の App Center でアプリの 使用状況を分析する
 
Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)Movable type 6 Overview (2013.10.24)
Movable type 6 Overview (2013.10.24)
 
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
データ仮想化を活用したデータ分析のフローと分析モデル作成の自動化のご紹介
 

Recently uploaded

論文紹介: 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
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/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
 
論文紹介: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
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Recently uploaded (12)

論文紹介: 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
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/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
 
論文紹介: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...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Etwest2014 ts 6