SlideShare a Scribd company logo
1 of 128
Download to read offline
USB接続する
アプリを開発した時に
試行錯誤したこと
SmartDrive
Masataka Kono
2018-2-8
DroidKaigi 2018
自己紹介
● Android Engineer
● 株式会社スマートドライブ
● Twitter @mapyo
● GitHub @mapyo
● (Server Side Engineer)
We’ re Hiring!
https://www.wantedly.com/companies/smartdrive/projects
質問です
USB接続するアプリを
作った事がある方
質問です
USB接続するアプリを
これから作る予定がある方
質問です
今日お伝えしたいこと
● これから作る予定のある方
○ 基礎知識
○ 雰囲気
● これから作る予定もない方
○ 雑学として
今日お話すること
● どんなアプリを作ったか?
● USB接続の基礎知識
● アプリ開発した時の事
どんなアプリを
作ったか?
どんなアプリを作ったか?
● 車のシガーソケットにつけるハードウェア
● センサーが内蔵されている
どんなアプリを作ったか?
● ハードウェアのセンサの情報をBLE経由で
スマホにアップ
● スマホ経由でサーバにアップ
サーバ
BLE
どんなアプリを作ったか?
● ハードウェアのセンサの情報をBLE経由で
スマホで取得
● スマホ経由でサーバにアップ
サーバ
BLE
USBでも出来るようにし
たい!!
USB接続の
基礎知識
USB接続の基礎知識
● Accessory modeとHost
mode
● 基本的な使い方
● permission
Accessory modeとHost mode
● Accessory mode
○ USB機器からAndroid端末
が電力をもらう
● Host mode
○ USB機器にAndroid端末が
電力を供給する
出典: https://developer.android.com/guide/topics/connectivity/usb/index.html
出典: https://developer.android.com/guide/topics/connectivity/usb/index.html
出典: https://developer.android.com/guide/topics/connectivity/usb/index.html
出典: https://developer.android.com/guide/topics/connectivity/usb/index.html
Accessory modeでやりとりする
アプリを作ったので、こちらにつ
いて説明していきます。
使うAPIも違います。
注意
スマホの機種自体で
Accessory modeをサポートしている
必要があります
※とはいえ、検証した範囲の端末で
はサポートされてない端末はなかっ
た。(Android 5.0以上)
Accessory Modeと接続するハード
ウェアの仕様
● Android Open Acessory(AOA)
protocolをサポートする必要あり
● Android Open Accessory
Development Kit(ADK)がAOAの
リファレンス実装
○ Arduinoなどでも動作可能
USB接続の基礎知識
● Accessory modeとHost
mode
● 基本的な使い方
● permission
USB接続の基礎知識
※ここからはソースコード多め
です。
事前にスライドをアップしてます
ので、そちらも合わせてご確認
下さい。
基本的な使い方
1. USB接続を検知する
2. データのやりとりをする
3. USBの切断を検知する
この流れを実現するサンプルで
説明します
USB接続を検知する
● AndroidManifestに追加
● usb-accessoryを書いたxml
を追加
AndroidManifestに追加
<activity ...>
<intent-filter>
<action
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
AndroidManifestに追加
<activity ...>
<intent-filter>
<action
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
AndroidManifestに追加
<activity ...>
<intent-filter>
<action
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
AndroidManifestに追加
<activity ...>
<intent-filter>
<action
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_ACCESS
ORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
Activityでないと検知出来ない!
accessory_filter
<resources>
<usb-accessory
manufacturer="Sample, Inc."
model="DemoKit"
version="1.0"
/>
</resources>
※HW側の設定と一致させる必
要があります。
accessory_filter
<resources>
<usb-accessory
manufacturer="Sample, Inc."
model="DemoKit"
version="1.0"
/>
</resources>
manufacturerの指定だけでも
OK!
自社製のデバイスであれば起動
させるというイメージ
設定がうまく行っていると、
USB接続すると次のダイアログが開きます
USB接続された時
USB接続された時
AndroidManifestで指定した
Activityが起動
USB接続された時
ダイアログが出ずにActivityが起
動します
USB接続された時
何も起きません。。。
設定がうまくいっていない
もしくは
対応するアプリがインストールされていない
状態でUSB接続した時は次のダイアログが開きま
す
対応したアプリがない時
対応したアプリがない時
HW側で設定可能
対応したアプリがない時
指定したURLが開きます。
アプリの説明のリンクに飛ばす
のが良いでしょう。
基本的な使い方
1. USB接続を検知する
2. データのやりとりをする
3. USBの切断を検知する
この流れを実現するサンプルで
説明します
データのやりとりをする 準備
val usbAccessory: UsbAccessory? =
intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY
)
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
データのやりとりをする 準備
val usbAccessory: UsbAccessory? =
intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY
)
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
val parcelFileDescriptor =
usbManager.openAccessory(usbAccessory)
val fileDescriptor =
parcelFileDescriptor.fileDescriptor
データのやりとりをする 準備
val usbAccessory: UsbAccessory? =
intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY
)
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
val parcelFileDescriptor =
usbManager.openAccessory(usbAccessory)
val fileDescriptor =
parcelFileDescriptor.fileDescriptor
val usbInputStream = FileInputStream(fileDescriptor)
val usbOutputStream =
FileOutputStream(fileDescriptor)
データのやりとりをする 送受信
// 文字列を送信する時
val message = "ほげほげ"
val data = message.toByteArray(charset("UTF-8"))
usbOutputStream.write(data)
usbOutputStream.flush()
データのやりとりをする 送受信
// 文字列を送信する時
val message = "ほげほげ"
val data = message.toByteArray(charset("UTF-8"))
usbOutputStream.write(data)
usbOutputStream.flush()
// 文字列を受信する時
val byteArray = ByteArray(1024)
usbInputStream.read(byteArray)
val receiveMessage = String(byteArray, 0,
byteArray.size, charset("UTF-8"))
ポイント
● ファイルの読み込み/書き込
みのような形でデータの送受
信が可能
● 非同期処理で書く必要あり
● 送信と受信の口が別々
切断を検知する
// BroadcastReceiverで
// UsbManager.ACTION_USB_ACCESSORY_DETACHED
// を受け取る
parcelFileDescriptor.close()
USB接続の基礎知識
● Accessory modeとHost
mode
● 基本的な使い方
● permission
permission
● USB接続された時のダイアログ
でOKすればpermissionは付与
済
● 接続中のUSB一覧を取得して、
接続する時にpermission要求
が必要。
permission
● permissionがないまま接続する
と例外を吐く
● 一般的なAndroidのpermission
と違います
permission
1. 接続されているUSBアクセサ
リを取得
2. permissionを要求する
3. permissionの許可を受け取
る
この流れを実現するサンプル
接続されているUSBアクセサリを取得
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
val usbAccessory =
usbManager.accessoryList?.firstOrNull()
if (usbAccessory == null) {
// USBがささっていない
} else {
// USBがささっている
}
接続されているUSBアクセサリを取得
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
val usbAccessory =
usbManager.accessoryList?.firstOrNull()
if (usbAccessory == null) {
// USBがささっていない
} else {
// USBがささっている
}
一見複数接続に対応しているよ
うだが、サポートされるのは、1
度に1接続だけですとドキュメン
トに書いてあった
val usbManager =
getSystemService(Context.USB_SERVICE) as UsbManager
val usbAccessory =
usbManager.accessoryList?.firstOrNull()
if (usbAccessory == null) {
// USBがささっていない
} else {
// USBがささっている
}
接続されているUSBアクセサリを取得
permissionが付与されているか
確認し、なければpermission要
求します
permissionの確認
if (usbManager.hasPermission(usbAccessory)) {
// データのやり取りをする
} else {
// permissionの要求をする
}
permissionの要求
val ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION"
val permissionIntent =
PendingIntent.getBroadcast(this, 0,
Intent(ACTION_USB_PERMISSION), 0)
usbManager.requestPermission(usbAccessory,
permissionIntent)
permissionの要求
val ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION"
val permissionIntent =
PendingIntent.getBroadcast(this, 0,
Intent(ACTION_USB_PERMISSION), 0)
usbManager.requestPermission(usbAccessory,
permissionIntent)
結果を受け取る時に
つかいます
permissionの要求をすると
こんなダイアログが出ます
permission要求後のダイアログ
permission要求後のダイアログ
最初に説明した、
USB接続した時の
ダイアログとけっこうにてます
接続した時
permission
要求した時
接続した時
permission
要求した時
permission要求後のダイアログ
permission要求後のダイアログ
許可した状態で
ブロードキャストが飛びます
permission要求後のダイアログ
拒否した状態で
ブロードキャストが飛びます
permission要求後のダイアログ
permission要求だけじゃなくて
ATTACHEDイベントの時も自動
的にActivityが起動するようにな
ります
permission要求結果を受け取る
val usbReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent:
Intent) {
// 中身は次のスライドへ
}
}
}
val filter = IntentFilter(ACTION_USB_PERMISSION)
registerReceiver(usbReceiver, filter)
permission要求結果を受け取る
val usbReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent:
Intent) {
// 中身は次のスライドへ
}
}
}
val filter = IntentFilter(ACTION_USB_PERMISSION)
registerReceiver(usbReceiver, filter)
permission要求した時のアクショ
ンを指定します
permission要求結果を受け取る
〜BroadcastReceiverの中身〜
if (ACTION_USB_PERMISSION == intent.action) {
val accessory: UsbAccessory? =
intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY
)
if
(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_
GRANTED, false)) {
// 許可された
// データのやり取りをする
} else {
// 拒否された
}
}
permission要求結果を受け取る
〜BroadcastReceiverの中身〜
if (ACTION_USB_PERMISSION == intent.action) {
val accessory: UsbAccessory? =
intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY
)
if
(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_
GRANTED, false)) {
// 許可された
// データのやり取りをする
} else {
// 拒否された
}
}
USB接続の基礎知識まとめ
● USB Accessoryのページしっかり読みましょう
○ https://developer.android.com/guide/topic
s/connectivity/usb/accessory.html
● ドキュメントだけだとわかりにくかった
● 実際に動かしながら挙動を確かめながら確認し
ていくとわかりやすいです
 アプリ開発
 した時の事
アプリ開発した時のこと
● HWが出来てない時の開発の
進め方
● デバッグが大変
● ハマりどころ
アプリ開発した時のこと
● HWが出来てない時の開発の
進め方
● デバッグが大変
● ハマりどころ
HWが出来てない時の開発の進め方
● そもそもハードがまだ出来てない
● 動くものがないから試せない
● 予想で作るしかない。。。?
USB
HWが出来てない時の開発の進め方
どうしよう。。?
ググる。
HWが出来てない時の開発の進め方
● AndroidとPCのUSB通信のサンプル
○ http://blog.kotemaru.org/2013/10/0
6/android-usb-adk.html
● androidUSBSample
○ https://github.com/kotemaru/kotem
aru/tree/master/androidUSBSampl
e
● Arudinoで動かすという事例も
HWが出来てない時の開発の進め方
PCで動かせる!!
圧倒的感謝!!!!
HWが出来てない時の開発の進め方
● PCとUSB接続して作っていく
● AOAの仕組みで動けばよい
● モックを作って動かしていた
USB
HWが出来てない時の開発の進め方
PCで動かせるということ
は。。。!!!
HWが出来てない時の開発の進め方
今日からみなさんも開発出来ま
すね
アプリの開発
● HWが出来てない時の開発の
進め方
● デバッグが大変
● ハマりどころ
USB接続してハードウエアと通信してい
る。。。
デバッグが大変
USB
デバッグが大変
ん?
デバッグが大変
USB接続しているからPCと接
続できない。。。
デバッグが大変
Wi-Fi経由でadb接続出来
る!!!
デバッグが大変
Wi-Fi経由でadb接続
adb tcpip 5555
adb connect <device-ip-address>:5555
デバッグが大変
しかし何故か手元では出来な
かった。。。
デバッグが大変
1. デバッグ用のログを細かくファ
イルに保存
2. 後からファイルを参照してデ
バッグする
これで一旦は解決!
アプリの開発
● HWが出来てない時の開発の
進め方
● デバッグが大変
● ハマりどころ
ハマりどころ その1
Activityでしか接続のイベントを
受けられない
Activityでしか接続のイベントを受け
られない
● BroadcastReceiverでは受け
られない!
● 受けようしてた。。
● ドキュメントちゃんと読んでな
かった。。。
Activityでしか接続のイベントを受け
られない
でも。。
BroadcastReceiverで受けた
い!
Activityでしか接続のイベントを受け
られない
● Serviceで接続する処理書い
てた
● 裏側でUSBでデータやり取り
● 毎回Activity立ち上がってほ
しくない
Activityでしか接続のイベントを受け
られない
1. USB接続イベントActivityで受ける
2. 自分でBroadcast Intent作って放つ
3. すぐにActivityはfinish
4. BroadcastReceiverで受ける!
ハマりどころ その2
DFUする時に
とある1機種で挙動が違う
DFUする時に
とある1機種で挙動が違う
DFUとは?
● Device Firmware Update
● HWの中で動いてるファームを
アップデートする処理のこと
DFUする時に
とある1機種で挙動が違う
DFUする時の正常な処理の
流れ
DFUする時に
とある機種で挙動が違う
DFUします!
わかりました!
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
2. 切断イベント
close処理
3. 接続イベント
接続処理
データ送信
DFUする時に
とある機種で挙動が違う
とある1機種の場合
DFUする時に
とある機種で挙動が違う
DFUします!
わかりました!
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
。。。
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
。。。
何もイベントが飛んでこな
い。。。
DFUする時に
とある機種で挙動が違う
こうやって対応した
DFUする時に
とある機種で挙動が違う
DFUします!
わかりました!
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
2. 自分でcolse処理
4. 自分で接続処理
     データ送信
3. 数秒待つ。。
DFUする時に
とある機種で挙動が違う
1. 再起動(瞬断)
2. 自分でcolse処理
4. 自分で接続処理
     データ送信
3. 数秒待つ。。
これをしないと接続出来なくなる!
DFUする時に
とある機種で挙動が違う
機種依存的なものは
これ以外にはなかったは
ず。。。!
ハマりどころ その3
物理的にはささっているけど、
切断・接続イベントが飛んでくる
ケーブルや相性によってはグラグラする
と、切断・接続を繰り返す。。。
物理的にはささっているけど、切断・
接続イベントが飛んでくる
USBケーブルは適切なものを選
びましょう
最後に
● USB接続するアプリの開発が
出来るなんてとてもいい経験
だった。
● なるべく実機で動かさずにテ
ストで動作を担保出来るよう
になるといいですね
最後に
● USB接続するアプリ開発され
た経験のある方はお話したい
です
● スマドラや今日お話したハー
ドにご興味ある方は現物もっ
てきているのでお話しましょう
最後に
ご清聴ありがと
うございまし
た!
ふろく
参考文献
● USB Host and Accessory
○ https://developer.android.com/guide/topics/connectivity/
usb/index.html
● AOA2.0を実装してみた
○ https://www.slideshare.net/YuuichiAkagawa/aoa20
● AndroidとPCのUSB通信のサンプル
○ http://blog.kotemaru.org/2013/10/06/android-usb-adk.ht
ml
○ https://github.com/kotemaru/kotemaru/tree/master/andr
oidUSBSample
● Android 2.3.4でUSB Accsesoryを使う場合には
別途Google APIs add-on libraryを導入する必要
がありますが、4系以上の端末が殆どだと思いま
すので、省いています
● 本スライドに載せたサンプルコードは説明を完結
にする為に省略している部分があります。null
チェックや例外の処理など、適切に行いましょう。
補足
● 参考文献のURLにPCとスマホでUSB接続するサ
ンプルがありましたが、僕の方でも作っておりま
す。(現在進行形です)
○ https://github.com/mapyo/UsbAccessorySam
ple
補足

More Related Content

What's hot

AOA2.0を実装してみた
AOA2.0を実装してみたAOA2.0を実装してみた
AOA2.0を実装してみたYuuichi Akagawa
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine PluginMei Nakamura
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門firewood
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステムl_b__
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだNarichika Kajihara
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたHiraku Toyooka
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Masahito Zembutsu
 
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをOSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをi_yudai
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018ak_shio_555
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 

What's hot (20)

【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
AOA2.0を実装してみた
AOA2.0を実装してみたAOA2.0を実装してみた
AOA2.0を実装してみた
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin継続使用と新規追加したRedmine Plugin
継続使用と新規追加したRedmine Plugin
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだ
 
LinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみたLinuxのFull ticklessを試してみた
LinuxのFull ticklessを試してみた
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
DeviceOwnerのお話
DeviceOwnerのお話DeviceOwnerのお話
DeviceOwnerのお話
 
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
 
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチをOSTree: OSイメージとパッケージシステムの間にGitのアプローチを
OSTree: OSイメージとパッケージシステムの間にGitのアプローチを
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 

More from Masataka Kono

minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介Masataka Kono
 
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いPHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いMasataka Kono
 
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみようライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみようMasataka Kono
 
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtipsMasataka Kono
 
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 Masataka Kono
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事Masataka Kono
 
Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Masataka Kono
 
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Masataka Kono
 

More from Masataka Kono (8)

minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
 
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違いPHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
 
ライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみようライブコーディング・Androidのライブラリを作ってみよう
ライブコーディング・Androidのライブラリを作ってみよう
 
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
 
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話 10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
10年続いているwebサービスの画像サーバをノーメンテでftpサーバからs3互換のストレージサーバに移行している話
 
歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事歴史あるWebサービスに携わって2年半の間に起きた事やった事
歴史あるWebサービスに携わって2年半の間に起きた事やった事
 
Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話
 
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
Mysqlを4.0から5.0を経由して5.6へバージョンアップした話
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Usb接続するアプリを開発した時に試行錯誤した事