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

はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingはじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingTakashi Yoshinaga
 
つぶやきGLSLのススメ
つぶやきGLSLのススメつぶやきGLSLのススメ
つぶやきGLSLのススメnotargs
 
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~ UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~ masayahamazaki
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話m ishizaki
 
バグ0の資産を積み上げるための証明駆動開発入門
バグ0の資産を積み上げるための証明駆動開発入門バグ0の資産を積み上げるための証明駆動開発入門
バグ0の資産を積み上げるための証明駆動開発入門Riku Sakamoto
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development Shotaro Suzuki
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lttorisoup
 
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたいリアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたいYutoNishine
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Hiroaki Kaneda
 
20190307 visualslam summary
20190307 visualslam summary20190307 visualslam summary
20190307 visualslam summaryTakuya Minagawa
 
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますHubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますhironroinakae
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版Contest Ntt-west
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
スマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCスマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCNatsuki Yamanaka
 

What's hot (20)

はじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTrackingはじめようARCore:自己位置推定・平面検出・FaceTracking
はじめようARCore:自己位置推定・平面検出・FaceTracking
 
つぶやきGLSLのススメ
つぶやきGLSLのススメつぶやきGLSLのススメ
つぶやきGLSLのススメ
 
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~ UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~
UIと2D/3Dと私 ~2D/3Dを混在させたUIを作ったら、とてもめんどくさかった話~
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
 
バグ0の資産を積み上げるための証明駆動開発入門
バグ0の資産を積み上げるための証明駆動開発入門バグ0の資産を積み上げるための証明駆動開発入門
バグ0の資産を積み上げるための証明駆動開発入門
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
 
Doozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_ltDoozy UI 使おうぜ! #unity_lt
Doozy UI 使おうぜ! #unity_lt
 
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたいリアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
 
20190307 visualslam summary
20190307 visualslam summary20190307 visualslam summary
20190307 visualslam summary
 
Hubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話しますHubsを何度も破壊して得た知見、話します
Hubsを何度も破壊して得た知見、話します
 
WebRTCの技術解説 公開版
WebRTCの技術解説 公開版WebRTCの技術解説 公開版
WebRTCの技術解説 公開版
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
スマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCスマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTC
 

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

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介: 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
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/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
 
論文紹介: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
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (10)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: 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
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/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...
 
論文紹介: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
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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