SlideShare una empresa de Scribd logo
1 de 9
Descargar para leer sin conexión
Driverについて
最近の状況の整理

2013.07.06
Bitz Co., Ltd. 村上幸雄

1. はじめに
Apple開発者のサイトでDarwinのソースコードが公開されているが、ドライバ関連で
は、文書とサンプルコードも付属しているので、開発したいものに近いサンプルコードを
基に拡張していう方法もあるが、今回は、Xcodeの新規プロジェクトから製作してみよう
と思う。
• Open Source - Releases
http://www.opensource.apple.com/
• Mac OS X 10.7.5 - Source
http://www.opensource.apple.com/release/mac-os-x-1075/"
Xcodeでドライバの新規プロジェクトを生成する場合、雛形としては、Generic
Kernel ExtensionとIOKit Driverの二種類があるが、その違いについてまとめてみる。

Generic kernel extension template

IOKit driver template

開発言語

C

Embedded C++

実装方法

コールバック関数

I/O Kitクラスの派生クラス

実行方法

明示的に起動と停止

自動

2. kext(generic kernel extension)
新規プロジェクトで、Generic kernel extension templateを選択する。
プロジェクト名は、Smart Scrollという製品に対するプログラムを作成しようと思っ
たので、サンプルでは、SmartScrollKextとした。
TARGETSのArchitecturesのBuild Active Architecture Onlyは、NOを選択する。
これを設定しておかないと、32bitカーネルで動作している開発機で、64bitドライバを生
成し、テストに失敗してしまうなどのトラブルに遭遇する可能性がある。

SmartScrollKext.cにデバッグ出力を追加する。

#include <sys/systm.h>
#include <mach/mach_types.h>
kern_return_t SmartScrollKext_start(kmod_info_t * ki, void *d);
kern_return_t SmartScrollKext_stop(kmod_info_t *ki, void *d);
kern_return_t SmartScrollKext_start(kmod_info_t * ki, void *d)
{
printf("SmartScrollKext has started.n");
return KERN_SUCCESS;
}
kern_return_t SmartScrollKext_stop(kmod_info_t *ki, void *d)
{
printf("SmartScrollKext has stopped.n");
return KERN_SUCCESS;
}

SmartScrollKext-Info.plistのCFBundleIdentifierをcom.MyCompany.kext.$
{PRODUCT_NAME:rfc1034identifier}に変更する。下記の例では、MyCompanyは著
者の会社のものにしている。
一度、プロジェクトをビルドする。Show the Log Navigatorから
SmartScrollKext.kextの出力先を調べて、ターミナル.appで、そのディレクトリに移動
する。

$ cd Build/Products/Debug

そこで以下のコマンドを実行する。

$ kextlibs -xml SmartScrollKext.kext
	
<key>OSBundleLibraries</key>
	
<dict>
	
	
<key>com.apple.kpi.libkern</key>
	
	
<string>11.4.2</string>
	
</dict>

この内容をSmartScrollKext-Info.plistのOSBundleLibrariesに設定する。

再度、ビルドし、生成されたSmartScrollKext.kextを/tmpにコピーする。

$ sudo cp -R SmartScrollKext.kext /tmp

以下のコマンドで、問題がないか確認する。

$ kextutil -n -print-diagnostics /tmp/SmartScrollKext.kext
No kernel file specified; using running kernel for linking.
/tmp/SmartScrollKext.kext appears to be loadable (including linkage for on-disk
libraries).

ログ確認の準備を行う。

$ cd /var/log
$ tail -f kernel.log
ロードする。

$ sudo kextload /tmp/SmartScrollKext.kext

アンロードする。

$ sudo kextunload /tmp/SmartScrollKext.kext

ログにデバッグ出力が印字されている事を確認する。

Jun 24 00:31:39 マシン名 kernel[0]: SmartScrollKext has started.
Jun 24 00:33:08 マシン名 kernel[0]: SmartScrollKext has stopped.

3. I/O Kitドライバ
新規プロジェクトで、IOKit driver templateを選択する。

プロジェクト名は、前回の流れからSmartScrollDriverとした。
今回も、前回と同様にTARGETSのArchitecturesのBuild Active Architecture Only
は、NOを選択する。
SmartScrollDriver-Info.plistのCFBundleIdentifierをcom.MyCompany.driver.$
{PRODUCT_NAME:rfc1034identifier}に変更する。著者は、MyCompanyに自分の会
社のものにしている。
SmartScrollDriver-Info.plistのIOKitPersonalitiesにSmartScrollDriver辞書型を追加
して、以下の内容に設定する。

Name

Value

CFBundleIdentifier

com.MyCompany.driver.${PRODUCT_NAME:rfc1034identifier}

IOClass

com_MyCompany_driver_SmartScrollDriver

IOKitDebug

65535

IOProviderClass

IOResources

IOMatchCategory

com_MyCompany_driver_SmartScrollDriver

IOClassは、このドライバの起点となるクラス名の様だ。ようするに、この名前のクラ
スを実装する事になる。
IOProviderClassは、ドライバがぶら下がるnubクラス名。
テンプレートのSmartScrollDriver.hとSmartScrollDriver.cppは空なので中身を実装
する。メソッドが呼ばれたらにデバッグ出力するだけだ。

#include <IOKit/IOService.h>
class jp_co_bitz_driver_SmartScrollDriver : public IOService {
OSDeclareDefaultStructors(jp_co_bitz_driver_SmartScrollDriver)
public:
virtual bool init(OSDictionary *dictionary = 0);
virtual void free(void);
virtual IOService *probe(IOService *provider, SInt32 *score);
virtual bool start(IOService *provider);
virtual void stop(IOService *provider);
};
#include <IOKit/IOLib.h>
#include "SmartScrollDriver.h"
OSDefineMetaClassAndStructors(jp_co_bitz_driver_SmartScrollDriver,
IOService)
#define super IOService
bool jp_co_bitz_driver_SmartScrollDriver::init(OSDictionary *dict)
{
bool result = super::init(dict);
IOLog("Initializingn");
return result;
}
void jp_co_bitz_driver_SmartScrollDriver::free(void)
{
IOLog("Freeingn");
super::free();
}
IOService *jp_co_bitz_driver_SmartScrollDriver::probe(IOService
*provider,
SInt32 *score)
{
IOService *result = super::probe(provider, score);
IOLog("Probingn");
return result;
}
bool jp_co_bitz_driver_SmartScrollDriver::start(IOService *provider)
{
bool result = super::start(provider);
IOLog("Startingn");
return result;
}
void jp_co_bitz_driver_SmartScrollDriver::stop(IOService *provider)
{
IOLog("Stoppingn");
super::stop(provider);
}

一度、プロジェクトをビルドする。Show the Log Navigatorから
SmartScrollDriver.kextの出力先を調べて、ターミナル.appで、そのディレクトリに移動
する。

$ cd Build/Products/Debug

そこで以下のコマンドを実行する。
$ kextlibs -xml SmartScrollDriver.kext
	
<key>OSBundleLibraries</key>
	
<dict>
	
	
<key>com.apple.kpi.iokit</key>
	
	
<string>11.4.2</string>
	
	
<key>com.apple.kpi.libkern</key>
	
	
<string>11.4.2</string>
	
</dict>

この内容をSmartScrollKext-Info.plistのOSBundleLibrariesに設定する。
再度、ビルドし、生成されたSmartScrollDriver.kextを/tmpにコピーする。

$ sudo cp -R SmartScrollDriver.kext /tmp

以下のコマンドで、問題がないか確認する。

$ kextutil -n -t /tmp/SmartScrollDriver.kext
No kernel file specified; using running kernel for linking.
Notice: /tmp/SmartScrollDriver.kext has debug properties set.
/tmp/SmartScrollDriver.kext appears to be loadable (including linkage for on-disk
libraries).

ロードしてみる。

$ sudo kextutil -v /tmp/SmartScrollDriver.kext
Password:
Notice: /tmp/SmartScrollDriver.kext has debug properties set.
/tmp/SmartScrollDriver.kext appears to be loadable (not including linkage for on-disk
libraries).
Loading /tmp/SmartScrollDriver.kext.
/tmp/SmartScrollDriver.kext successfully loaded (or already loaded).

確認する。

$ kextstat | grep jp.co.bitz
162
0 0xb97000
0x4000
3>

0x3000

jp.co.bitz.driver.SmartScrollDriver (1) <4

アンロード。

$ sudo kextunload -v /tmp/SmartScrollDriver.kext
jp.co.bitz.driver.SmartScrollDriver unloaded and personalities removed.

次は、対象と鳴るUSB機器(SmartScroll)が抜き差しされたら、ドライバが反応する
事を確認してみる。
DarwinのソースコードのIOUSBFamily-(バージョン番号).tar.gzのExamplesにある
VendorSpecific Driverのプロジェクトを開いて、Info.plistを確認する。

IOProviderClassをIOUSBDeviceにして、bcdDeviceとiDProduct、idVendorを対象
機器の値にすれば、抜き差しに反応しそうだ!
以前の開発環境に含まれていたUSB Proberを持っていたら、それを使って、
SmartScrollの情報を確認する。
VendorIDが0x056A、ProductIDが0x0050、DeviceVersionNumberが0x0007な
ので、SmartScrollDriver-Info.plistのIOKitPersonalitiesのSmartScrollDriverに
bcdDeviceとidProduct、idVendorを追加して、7と80、1386を入力する。

この内容でビルドしてドライバーを前回の方法でロードする。

$ sudo cp -R SmartScrollDriver.kext /tmp
$ sudo kextutil -v /tmp/SmartScrollDriver.kext
Notice: /tmp/SmartScrollDriver.kext has debug properties set.
/tmp/SmartScrollDriver.kext appears to be loadable (not including linkage for on-disk
libraries).
Loading /tmp/SmartScrollDriver.kext.
/tmp/SmartScrollDriver.kext successfully loaded (or already loaded).

kernel.logをtailし、USB機器を差し込んで、抜く。

$ tail
Jul 1
Jul 1
Jul 1
Jul 1
Jul 1
Jul 1
Jul 1

-f /var/log/kernel.log
22:30:56 mbc2d kernel[0]:
22:30:56 mbc2d kernel[0]:
22:30:56 mbc2d kernel[0]:
22:30:56 mbc2d kernel[0]:
22:31:14 mbc2d kernel[0]:
22:31:14 mbc2d kernel[0]:
22:31:14 mbc2d kernel[0]:

[SmartScrollDriver]Initializing
[SmartScrollDriver]Probing
No interval found for . Using 8000000
[SmartScrollDriver]Starting
No interval found for . Using 8000000
[SmartScrollDriver]Stopping
[SmartScrollDriver]Freeing

アンロード。

$ sudo kextunload -v /tmp/SmartScrollDriver.kext
jp.co.bitz.driver.SmartScrollDriver unloaded and personalities removed.

抜き差しした際に、ログが出力されている事が分かるはずだ。

Más contenido relacionado

La actualidad más candente

Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
shobomaru
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
Brian Gesiak
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
Atsuhiro Kubo
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 

La actualidad más candente (20)

Clang Modules
Clang ModulesClang Modules
Clang Modules
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
アップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられるアップルのテンプレートは有害と考えられる
アップルのテンプレートは有害と考えられる
 
iOSビヘイビア駆動開発
iOSビヘイビア駆動開発iOSビヘイビア駆動開発
iOSビヘイビア駆動開発
 
Symfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るためにSymfony2でより良いソフトウェアを作るために
Symfony2でより良いソフトウェアを作るために
 
OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
Visual studio de debug
Visual studio de debugVisual studio de debug
Visual studio de debug
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
開発チームもIaCやってみたい~VSOとDockerの組合せにチャレンジ~
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したいWindows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
Windows8でOpenCVを使ったAndroid(MOVERIO)開発体験したい
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 

Destacado

2014 CLA NY Anglers Club Presentation_R. Hall
2014 CLA NY Anglers Club Presentation_R. Hall2014 CLA NY Anglers Club Presentation_R. Hall
2014 CLA NY Anglers Club Presentation_R. Hall
Heather Ballew
 
Evaluation- Task 1
Evaluation- Task 1Evaluation- Task 1
Evaluation- Task 1
amanda8885
 
Scaling social engagement via community tony pham - marketing camp
Scaling social engagement via community tony pham - marketing campScaling social engagement via community tony pham - marketing camp
Scaling social engagement via community tony pham - marketing camp
Paul Wcislo
 
Defining and creating quality webinars mitchell levy - marketing camp
Defining and creating quality webinars   mitchell levy - marketing campDefining and creating quality webinars   mitchell levy - marketing camp
Defining and creating quality webinars mitchell levy - marketing camp
Paul Wcislo
 
Getting the right people evy wilkins - marketing campsv
Getting the right people    evy wilkins - marketing campsvGetting the right people    evy wilkins - marketing campsv
Getting the right people evy wilkins - marketing campsv
Paul Wcislo
 
Expert2 guru mitchell levy - marketing camp
Expert2 guru mitchell levy - marketing campExpert2 guru mitchell levy - marketing camp
Expert2 guru mitchell levy - marketing camp
Paul Wcislo
 
Content etc sue duris - marketingcamp
Content etc   sue duris - marketingcampContent etc   sue duris - marketingcamp
Content etc sue duris - marketingcamp
Paul Wcislo
 

Destacado (20)

La curation de contenus - Introduction "La cura... quoi ?"
La curation de contenus - Introduction "La cura... quoi ?"La curation de contenus - Introduction "La cura... quoi ?"
La curation de contenus - Introduction "La cura... quoi ?"
 
2014 CLA NY Anglers Club Presentation_R. Hall
2014 CLA NY Anglers Club Presentation_R. Hall2014 CLA NY Anglers Club Presentation_R. Hall
2014 CLA NY Anglers Club Presentation_R. Hall
 
Evaluation- Task 1
Evaluation- Task 1Evaluation- Task 1
Evaluation- Task 1
 
cu
cucu
cu
 
Scaling social engagement via community tony pham - marketing camp
Scaling social engagement via community tony pham - marketing campScaling social engagement via community tony pham - marketing camp
Scaling social engagement via community tony pham - marketing camp
 
Defining and creating quality webinars mitchell levy - marketing camp
Defining and creating quality webinars   mitchell levy - marketing campDefining and creating quality webinars   mitchell levy - marketing camp
Defining and creating quality webinars mitchell levy - marketing camp
 
Frameworkについて
FrameworkについてFrameworkについて
Frameworkについて
 
Getting the right people evy wilkins - marketing campsv
Getting the right people    evy wilkins - marketing campsvGetting the right people    evy wilkins - marketing campsv
Getting the right people evy wilkins - marketing campsv
 
Sandra Collins - Building a linked data based content discovery service for t...
Sandra Collins - Building a linked data based content discovery service for t...Sandra Collins - Building a linked data based content discovery service for t...
Sandra Collins - Building a linked data based content discovery service for t...
 
Expert2 guru mitchell levy - marketing camp
Expert2 guru mitchell levy - marketing campExpert2 guru mitchell levy - marketing camp
Expert2 guru mitchell levy - marketing camp
 
Bluetooth LEとiBeaconを使った、すれ違い通信
Bluetooth LEとiBeaconを使った、すれ違い通信Bluetooth LEとiBeaconを使った、すれ違い通信
Bluetooth LEとiBeaconを使った、すれ違い通信
 
クラウド対応温度計 (1)
クラウド対応温度計 (1)クラウド対応温度計 (1)
クラウド対応温度計 (1)
 
サーバ側Swift
サーバ側Swiftサーバ側Swift
サーバ側Swift
 
談話と特殊効果 #1
談話と特殊効果 #1談話と特殊効果 #1
談話と特殊効果 #1
 
Text to-speech
Text to-speechText to-speech
Text to-speech
 
Content etc sue duris - marketingcamp
Content etc   sue duris - marketingcampContent etc   sue duris - marketingcamp
Content etc sue duris - marketingcamp
 
Empowering Data in Scholarly Publishing
Empowering Data in Scholarly PublishingEmpowering Data in Scholarly Publishing
Empowering Data in Scholarly Publishing
 
Resource Discovery in the Age of Wikipedia, Damon Zucca
Resource Discovery in the Age of Wikipedia, Damon ZuccaResource Discovery in the Age of Wikipedia, Damon Zucca
Resource Discovery in the Age of Wikipedia, Damon Zucca
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
 
Bluetooth LEとiBeaconを使った、すれ違い通信
Bluetooth LEとiBeaconを使った、すれ違い通信Bluetooth LEとiBeaconを使った、すれ違い通信
Bluetooth LEとiBeaconを使った、すれ違い通信
 

Similar a Driverについて

Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
 
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
Yoichiro Sakurai
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
 

Similar a Driverについて (20)

Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
OpenCLに触れてみよう
OpenCLに触れてみようOpenCLに触れてみよう
OpenCLに触れてみよう
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Mongo db使ってみよう
Mongo db使ってみようMongo db使ってみよう
Mongo db使ってみよう
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
OpenGLプログラミング
OpenGLプログラミングOpenGLプログラミング
OpenGLプログラミング
 
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 

Más de 幸雄 村上

Más de 幸雄 村上 (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クラス
 

Último

Último (7)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Driverについて