SlideShare a Scribd company logo
BLUETOOTH LEを使った、
すれ違い通信
2014.2.25
Bitz Co., Ltd.
•村上幸雄	

•@m_yukio	

•ビッツ有限会社

http://www.bitz.co.jp/

今回のサンプルコードは以下のURL.
https://github.com/murakami/workbook/tree/master/ios/Wibree
Bluetoothは、省電力な電波を使った無線通信
で、最新の4.xでは対応機器は次の3つに分類さ
れます。
分類

Bluetooth Smart

Bluetooth Smart Ready

Bluetooth

説明
4.0で追加されたBluetooth Low Energyのみ対
応。
Bluetooth LEと従来のBluetoothの両方に対
応。
従来のBluetoothのみ対応。
iOSでBluetoothに対応する方法を整理してみます。

Bluetoothの種類

説明
MFi機器に対してExternal Accessory
Frameworkで通信。

従来のBLuetooth
Game Kit

Bluetooth LE

Core Bluetooth Framework

iOSでは、無関係の機器と自由に通信したいのならBluetooth LEという事にな
るかと思います。
すれ違い通信

Bluetooth LE

識別子

識別子

識別子を交換
Service
UUID

Central

発見

Peripheral

Advertise

Peripheralが対応しているService UUIDをAdvertiseする。
Centralは探しているService UUIDがないか調査する。
Centralが見つけられたら、Peripheralに対して接続要求を出
し、受けいれるとデータ通信が可能になる。
サンプルコードでは、識別子のCharacteristic UUIDを問い合わ
せて、識別子を受け取っている。
SAMPLE CODE
Central Managerの用意
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self
queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];

Peripheralを探す
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
if (central.state != CBCentralManagerStatePoweredOn) {
return;
}
[self scan];
}

!

探すサービスUUID

- (void)scan
{
[self.centralManager scanForPeripheralsWithServices:
@[[CBUUID UUIDWithString:WIBREE_SERVICE_UUID]]
options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
}
Peripheralが見つかったので接続する
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
if (self.discoveredPeripheral != peripheral) {
self.discoveredPeripheral = peripheral;
[self.centralManager connectPeripheral:peripheral options:nil];
}
}

サービスUUIDで検索
- (void)centralManager:(CBCentralManager *)central
didConnectPeripheral:(CBPeripheral *)peripheral
{
[self.centralManager stopScan];
[self.data setLength:0];
peripheral.delegate = self;
[peripheral discoverServices:@[[CBUUID UUIDWithString:WIBREE_SERVICE_UUID]]];
}
キャラクタリスティックUUIDで検索
- (void)peripheral:(CBPeripheral *)peripheral

didDiscoverServices:(NSError *)error

{
if (error) {
[self cleanup];
return;
}
for (CBService *service in peripheral.services) {
[peripheral discoverCharacteristics:
@[[CBUUID UUIDWithString:WIBREE_CHARACTERISTIC_UUID]]
forService:service];
}
}

!

- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverCharacteristicsForService:(CBService *)service
error:(NSError *)error
{
if (error) {
[self cleanup];
return;
}
for (CBCharacteristic *characteristic in service.characteristics) {
if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:
WIBREE_CHARACTERISTIC_UUID]]) {
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
}
}
}
識別子を受け取る
- (void)peripheral:(CBPeripheral *)peripheral
didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error
{
NSString *stringFromData = [[NSString alloc]
initWithData:characteristic.value encoding:NSUTF8StringEncoding];
if ([stringFromData isEqualToString:@"EOM"]) {
NSString
*uniqueIdentifier = [[NSString alloc]
initWithData:self.data encoding:NSUTF8StringEncoding];
dispatch_async(dispatch_get_main_queue(), ^{
[self _notifyParserDidDiscoverUUID:uniqueIdentifier];
});
[peripheral setNotifyValue:NO forCharacteristic:characteristic];
[self.centralManager cancelPeripheralConnection:peripheral];
}
[self.data appendData:characteristic.value];
}

!

- (void)peripheral:(CBPeripheral *)peripheral
didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic
error:(NSError *)error
{
if (![characteristic.UUID isEqual:[CBUUID
UUIDWithString:WIBREE_CHARACTERISTIC_UUID]]) {
return;
}
if (! characteristic.isNotifying) {
[self.centralManager cancelPeripheralConnection:peripheral];
}
}
Peripheral Managerの用意
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self
queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
[self.peripheralManager startAdvertising:
見つけてもらうサービスUUID
@{ CBAdvertisementDataServiceUUIDsKey :
@[[CBUUID UUIDWithString:WIBREE_SERVICE_UUID]] }];

Peripheralが利用可能
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral
{
if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
return;
}
self.transferCharacteristic = [[CBMutableCharacteristic alloc]
initWithType:[CBUUID UUIDWithString:WIBREE_CHARACTERISTIC_UUID]
properties:CBCharacteristicPropertyNotify
value:nil
permissions:CBAttributePermissionsReadable];
CBMutableService *transferService = [[CBMutableService alloc]
initWithType:[CBUUID UUIDWithString:WIBREE_SERVICE_UUID]
primary:YES];
transferService.characteristics = @[self.transferCharacteristic];
[self.peripheralManager addService:transferService];
}
識別子の送信
- (void)peripheralManager:(CBPeripheralManager *)peripheral
central:(CBCentral *)central
didSubscribeToCharacteristic:(CBCharacteristic *)characteristic
{
self.dataToSend = [[Document sharedDocument].uniqueIdentifier dataUsingEncoding:NSUTF8StringEncoding];
self.sendDataIndex = 0;
[self sendData];
}

!

- (void)sendData
{
static BOOL sendingEOM = NO;
if (sendingEOM) {
BOOL didSend = [self.peripheralManager
updateValue:[@"EOM" dataUsingEncoding:NSUTF8StringEncoding]
forCharacteristic:self.transferCharacteristic onSubscribedCentrals:nil];
if (didSend) sendingEOM = NO;
return;
}
if (self.sendDataIndex >= self.dataToSend.length) return;
BOOL didSend = YES;
while (didSend) {
NSInteger amountToSend = self.dataToSend.length - self.sendDataIndex;
if (amountToSend > NOTIFY_MTU) amountToSend = NOTIFY_MTU;
NSData *chunk = [NSData dataWithBytes:self.dataToSend.bytes+self.sendDataIndex length:amountToSend];
didSend = [self.peripheralManager updateValue:chunk
forCharacteristic:self.transferCharacteristic onSubscribedCentrals:nil];
if (!didSend) return;
NSString *stringFromData = [[NSString alloc] initWithData:chunk encoding:NSUTF8StringEncoding];
self.sendDataIndex += amountToSend;
if (self.sendDataIndex >= self.dataToSend.length) {
sendingEOM = YES;
BOOL eomSent = [self.peripheralManager updateValue:
[@"EOM" dataUsingEncoding:NSUTF8StringEncoding]
forCharacteristic:self.transferCharacteristic onSubscribedCentrals:nil];
if (eomSent) sendingEOM = NO;
return;
}
}
}

!

- (void)peripheralManagerIsReadyToUpdateSubscribers:(CBPeripheralManager *)peripheral
{
[self sendData];
}
バックグラウンドで動かすには
Info.plistのRequired background modesでApp
communicates using CoreBluetoothを設定。
Info.plistのRequired background modesでApp
shares data using CoreBluetoothを設定。
Core Bluetooth使用時の課題
数分単位の周期でしたバックグラウンドで動かな
いし、動いても数秒。
なので、実際のすれ違い通信は難しい。
iBeaconを試してみる。
CoreBluetoothでビーコンを実装。
CoreLocationでビーコンを検出。
常に検出できるみたい。
iBeaconを探す
/* CLLocationManagerを生成 */
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if (! self.locationManager) {
/* CLLocationManagerの初期化失敗 */
self.state = kBeaconCentralStateError;
self.error = [self _errorWithCode:kBeaconCentralResponseParserGenericError
localizedDescription:@"CLLocationManagerの初期化に失敗しました。"];
}

return;

探すビーコンのUUID

!

/* ビーコン領域を生成 */
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACON_SERVICE_UUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
                identifier:@"demo.Wibree.BeaconCentralResponseParser"];
if (! self.beaconRegion) {
/* ビーコン領域の初期化失敗 */
self.state = kBeaconCentralStateError;
self.error = [self _errorWithCode:kBeaconCentralResponseParserGenericError
localizedDescription:@"ビーコン領域の初期化に失敗しました。"];

}

self.locationManager = nil;
return;

!

/* ビーコン領域の出入りを監視 */
[self.locationManager startMonitoringForRegion:self.beaconRegion];

!

/* 距離を監視 */
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
検出

領域に入る

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
DBGMSG(@"%s", __func__);
if ([self.delegate respondsToSelector:@selector(beaconCentralResponseParser:didEnterRegion:)]) {
[self.delegate beaconCentralResponseParser:self didEnterRegion:region];
}
領域から外れる
}

!

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
DBGMSG(@"%s", __func__);
if ([self.delegate respondsToSelector:@selector(beaconCentralResponseParser:didExitRegion:)]) {
[self.delegate beaconCentralResponseParser:self didExitRegion:region];
}
}
距離を監視

!

-(void)locationManager:(CLLocationManager *)manager

{

}

!

didRangeBeacons:(NSArray *)beacons

inRegion:(CLBeaconRegion *)region

DBGMSG(@"%s", __func__);
if ([self.delegate respondsToSelector:@selector(beaconCentralResponseParser:didRangeBeacons:inRegion:)]) {
[self.delegate beaconCentralResponseParser:self didRangeBeacons:beacons inRegion:region];
}

- (void)locationManager:(CLLocationManager *)manager

monitoringDidFailForRegion:(CLRegion *)region

withError:(NSError *)error
{
DBGMSG(@"%s region:%@", __func__, region);
DBGMSG(@"%s error:%@", __func__, error);
}
見つけてほしいUUIDを告知

/* CBPeripheralManagerを生成 */
self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self
queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
if (! self.peripheralManager) {
/* CBPeripheralManagerの初期化失敗 */
self.state = kBeaconPeripheralStateError;
self.error = [self _errorWithCode:kBeaconPeripheralResponseParserGenericError
localizedDescription:@"CBPeripheralManagerの初期化に失敗しました。"];
return;
}

!

見つけてほしいビーコンのUUID

/* ビーコン領域を生成 */
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACON_SERVICE_UUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
major:12345
minor:67890
identifier:@"demo.Wibree.BeaconCentralResponseParser"];
if (! self.beaconRegion) {
/* ビーコン領域の初期化失敗 */
self.state = kBeaconPeripheralStateError;
self.error = [self _errorWithCode:kBeaconPeripheralResponseParserGenericError
localizedDescription:@"ビーコン領域の初期化に失敗しました。"];
self.peripheralManager = nil;
return;
}

!

/* 告知開始 */
NSDictionary
*dictionary = [self.beaconRegion peripheralDataWithMeasuredPower:nil];
[self.peripheralManager startAdvertising:dictionary];
iBeacon使用時の課題
個体の識別子はmajorとminorの番号。
ただし、Sample Codeでは取得できていない。

More Related Content

Similar to Bluetooth LEとiBeaconを使った、すれ違い通信

I2CでRaspberry Piから 複数の周辺機器を制御する
I2CでRaspberry Piから複数の周辺機器を制御するI2CでRaspberry Piから複数の周辺機器を制御する
I2CでRaspberry Piから 複数の周辺機器を制御する
Hirokazu Nishio
 
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
Seeed K.K.
 
プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
titoi2
 
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Deep Learning Lab(ディープラーニング・ラボ)
 
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
Takehiko Tomiyama
 
Android bluetooth
Android bluetoothAndroid bluetooth
Android bluetooth
Masahiro Hidaka
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
日本マイクロソフト株式会社
 
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
日本マイクロソフト株式会社
 
de:code 2018 一挙紹介! Azure が提供する IoT 系サービス
de:code 2018 一挙紹介! Azure が提供する IoT 系サービスde:code 2018 一挙紹介! Azure が提供する IoT 系サービス
de:code 2018 一挙紹介! Azure が提供する IoT 系サービス
Masaru Takahashi
 
IoTLT-Vol92-Wiki-IoT-20221009-1.pptx
IoTLT-Vol92-Wiki-IoT-20221009-1.pptxIoTLT-Vol92-Wiki-IoT-20221009-1.pptx
IoTLT-Vol92-Wiki-IoT-20221009-1.pptx
Takashi Yamanoue
 
BOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSBOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWS
i_yudai
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティFFRI, Inc.
 
M5 stickvand and_spresense_wi-fi add-on
M5 stickvand and_spresense_wi-fi add-onM5 stickvand and_spresense_wi-fi add-on
M5 stickvand and_spresense_wi-fi add-on
Masawo Yamazaki
 
IoT Architecture
IoT ArchitectureIoT Architecture
IoT Architecture
Daisuke Inoue
 
Bluetooth connecting iot bluetooth
Bluetooth connecting iot bluetoothBluetooth connecting iot bluetooth
Bluetooth connecting iot bluetooth
Daisuke Nagata
 
Azure RTOS 概要 - IoT ALGYAN 技術セミナー
Azure RTOS 概要 - IoT ALGYAN 技術セミナーAzure RTOS 概要 - IoT ALGYAN 技術セミナー
Azure RTOS 概要 - IoT ALGYAN 技術セミナー
Knowledge & Experience
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switch
Akihiro Ehara
 
ラズパイ × Bluemix IoTハンズオンセミナー
ラズパイ × Bluemix IoTハンズオンセミナーラズパイ × Bluemix IoTハンズオンセミナー
ラズパイ × Bluemix IoTハンズオンセミナー
softlayerjp
 
Microsoft Build 2020: Azure IoT 関連最新情報
Microsoft Build 2020: Azure IoT 関連最新情報Microsoft Build 2020: Azure IoT 関連最新情報
Microsoft Build 2020: Azure IoT 関連最新情報
IoTビジネス共創ラボ
 

Similar to Bluetooth LEとiBeaconを使った、すれ違い通信 (20)

I2CでRaspberry Piから 複数の周辺機器を制御する
I2CでRaspberry Piから複数の周辺機器を制御するI2CでRaspberry Piから複数の周辺機器を制御する
I2CでRaspberry Piから 複数の周辺機器を制御する
 
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
IoT Kit ハンズオントレーニング ~ Seeed Wio LTE + SORACOM Beam ~ V4.1
 
プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
 
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
Jetson x Azure ハンズオン DeepStream With Azure IoT 事前準備
 
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
mbed祭り2016@秋の虎ノ門(AzureIoTSuiteの検証)
 
Android bluetooth
Android bluetoothAndroid bluetooth
Android bluetooth
 
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
 
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
【de:code 2020】 Azure IoT 最新動向 - クラウドからエッジまで網羅的にご紹介
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
de:code 2018 一挙紹介! Azure が提供する IoT 系サービス
de:code 2018 一挙紹介! Azure が提供する IoT 系サービスde:code 2018 一挙紹介! Azure が提供する IoT 系サービス
de:code 2018 一挙紹介! Azure が提供する IoT 系サービス
 
IoTLT-Vol92-Wiki-IoT-20221009-1.pptx
IoTLT-Vol92-Wiki-IoT-20221009-1.pptxIoTLT-Vol92-Wiki-IoT-20221009-1.pptx
IoTLT-Vol92-Wiki-IoT-20221009-1.pptx
 
BOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSBOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWS
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティ
 
M5 stickvand and_spresense_wi-fi add-on
M5 stickvand and_spresense_wi-fi add-onM5 stickvand and_spresense_wi-fi add-on
M5 stickvand and_spresense_wi-fi add-on
 
IoT Architecture
IoT ArchitectureIoT Architecture
IoT Architecture
 
Bluetooth connecting iot bluetooth
Bluetooth connecting iot bluetoothBluetooth connecting iot bluetooth
Bluetooth connecting iot bluetooth
 
Azure RTOS 概要 - IoT ALGYAN 技術セミナー
Azure RTOS 概要 - IoT ALGYAN 技術セミナーAzure RTOS 概要 - IoT ALGYAN 技術セミナー
Azure RTOS 概要 - IoT ALGYAN 技術セミナー
 
エンタープライズ.Net light switch
エンタープライズ.Net light switchエンタープライズ.Net light switch
エンタープライズ.Net light switch
 
ラズパイ × Bluemix IoTハンズオンセミナー
ラズパイ × Bluemix IoTハンズオンセミナーラズパイ × Bluemix IoTハンズオンセミナー
ラズパイ × Bluemix IoTハンズオンセミナー
 
Microsoft Build 2020: Azure IoT 関連最新情報
Microsoft Build 2020: Azure IoT 関連最新情報Microsoft Build 2020: Azure IoT 関連最新情報
Microsoft Build 2020: Azure IoT 関連最新情報
 

More from 幸雄 村上

アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf
幸雄 村上
 
圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf
幸雄 村上
 
分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み
幸雄 村上
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
幸雄 村上
 
え!それって参照渡し?
え!それって参照渡し?え!それって参照渡し?
え!それって参照渡し?
幸雄 村上
 
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
幸雄 村上
 
AppleScriptなど
AppleScriptなどAppleScriptなど
AppleScriptなど
幸雄 村上
 
MojaveのDark Mode
MojaveのDark ModeMojaveのDark Mode
MojaveのDark Mode
幸雄 村上
 
AppleScriptとは何ぞや
AppleScriptとは何ぞやAppleScriptとは何ぞや
AppleScriptとは何ぞや
幸雄 村上
 
Web API 通信の符号化について
Web API 通信の符号化についてWeb API 通信の符号化について
Web API 通信の符号化について
幸雄 村上
 
Master-Detail App を実装する
Master-Detail App を実装するMaster-Detail App を実装する
Master-Detail App を実装する
幸雄 村上
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
幸雄 村上
 
Getting a packet trace
Getting a packet traceGetting a packet trace
Getting a packet trace
幸雄 村上
 
The Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKitThe Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKit
幸雄 村上
 
Swiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装するSwiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装する
幸雄 村上
 
ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦
幸雄 村上
 
IBM Watson Services for Core ML
IBM Watson Services for Core MLIBM Watson Services for Core ML
IBM Watson Services for Core ML
幸雄 村上
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
幸雄 村上
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
幸雄 村上
 

More from 幸雄 村上 (20)

アプリケーション識別子.pdf
アプリケーション識別子.pdfアプリケーション識別子.pdf
アプリケーション識別子.pdf
 
圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf圧縮ネイティブ・ライブラリについて.pdf
圧縮ネイティブ・ライブラリについて.pdf
 
分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み分散環境におけるジャストインタイム設定の試み
分散環境におけるジャストインタイム設定の試み
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
え!それって参照渡し?
え!それって参照渡し?え!それって参照渡し?
え!それって参照渡し?
 
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
プライバシーとセキュリティ(リモート通知のデバイストークンの扱いなど)
 
AppleScriptなど
AppleScriptなどAppleScriptなど
AppleScriptなど
 
MojaveのDark Mode
MojaveのDark ModeMojaveのDark Mode
MojaveのDark Mode
 
AppleScriptとは何ぞや
AppleScriptとは何ぞやAppleScriptとは何ぞや
AppleScriptとは何ぞや
 
Web API 通信の符号化について
Web API 通信の符号化についてWeb API 通信の符号化について
Web API 通信の符号化について
 
Master-Detail App を実装する
Master-Detail App を実装するMaster-Detail App を実装する
Master-Detail App を実装する
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
Getting a packet trace
Getting a packet traceGetting a packet trace
Getting a packet trace
 
The Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKitThe Bash in Tokyo : AppKitとUIKit
The Bash in Tokyo : AppKitとUIKit
 
RUDP
RUDPRUDP
RUDP
 
Swiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装するSwiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装する
 
ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦ゲームの企画書づくりに挑戦
ゲームの企画書づくりに挑戦
 
IBM Watson Services for Core ML
IBM Watson Services for Core MLIBM Watson Services for Core ML
IBM Watson Services for Core ML
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
 
独自Documentクラス
独自Documentクラス独自Documentクラス
独自Documentクラス
 

Recently uploaded

【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 

Recently uploaded (10)

【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 

Bluetooth LEとiBeaconを使った、すれ違い通信