2012年12月4日火曜日

I'm back!


Some of you sharp people out there might have noticed. The title of the blog has changed. The first objective with this blog was to write about experiences from developing iOS apps using Objective-C. I have now broaden the content a bit to even include development in Objective-C on other platforms. For example by using the open source implementation of Cocoa, GNUstep, you can develop apps easily on Mac, Windows, Linux and *BSD in a platform independent environment.

First off, I want to show you how to get Obj-C 2.0 (@properties, new literals etc.) and GCD (Grand Central Dispatch) up and running on FreeBSD using GNUstep framework and some other libraries.

Let's say you've installed FreeBSD 9.x and have the system up and running. Here's my recipe for success:

- Install LLVM development package
# pkg install llvm-devel
Note: In FreeBSD 9.1 RC2/3 llvm-ld is missing so you have rebuild the kernel+world with "WITH_CLANG_EXTRAS=YES" in src.conf or use the gcc linker. Don't know if the missing llvm-files will come back for the final release or not...

- Install GNUstep and libobjc2 from tarballs
First install from ports to get all dependencies, then delete gnustep packages and install tarballs. Do this as root, not with sudo. GNUstep from ports does not support the new libobjc2 so we can't use it for development.
# pkg install gmake
# cd /usr/ports/devel/gnustep && make install clean
# [delete gnustep packages]

Download gnustep-make, -base, -gui and -backend from http://www.gnustep.org/resources/downloads.php.

Download latest libobjc2 from http://download.gna.org/gnustep/.

Start with installing gnustep-make
# [unpack gnustep-make and cd into directory]
# ./configure --with-layout=gnustep --prefix=/usr/local/GNUstep --enable-objc-nonfragile-abi CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++
# . /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh (source the script, add this line to .bashrc or similar script)

libobjc2
# [unpack libobjc2 and cd into directory]
# gmake install CC=clang CXX=clang++

- Reinstall gnustep-make as above to configure it for new libobjc2

For gnustep-base, gnustep-gui, gnustep-back
# [unpack tarball and cd into directory]
# ./configure CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++

GCD - Grand Central Dispatch
# cd /usr/ports/devel/libdispatch && make install clean
Include <dispatch/dispatch.h> to use.

And that's it. We will use two files to test our newly installed framework and libraries.
HelloWorld.m and the makefile GNUmakefile.

The sample code will test the new literals like @autorelease, @[ ... ], blocks and the dispatch library (launching blocks of code in different thread and with time delay).

HelloWorld.m start

#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
#import <unistd.h>

int main (int argc, const char *argv[])
{

  @autoreleasepool {

    NSLog(@"Hello, World!");

    NSArray *a = @[ @"A", @"B", @"C" ];
    [a enumerateObjectsUsingBlock:^(NSString *s, NSUInteger index, BOOL *stop) {
      NSLog(@"String with index %d has value %@",(int)index, s);
    }];


    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_global_queue(0,0), ^(void){
             NSLog(@"Hello from delayed dispatch!");
           });
 
    dispatch_async(dispatch_get_global_queue(0,0), ^{
             NSLog(@"Hello from dispatch!");
           });
  }
  sleep(3);
  return 0;
}


HelloWorld.m end


GNUmakefile start

ifeq ($(GNUSTEP_MAKEFILES),)
 GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null)
endif
ifeq ($(GNUSTEP_MAKEFILES),)
 $(error You need to set GNUSTEP_MAKEFILES before compiling!)
endif

include $(GNUSTEP_MAKEFILES)/common.make

ADDITIONAL_OBJC_LIBS += -ldispatch

#
# Application
#
VERSION = 0.1
PACKAGE_NAME = HelloWorld
APP_NAME = HelloWorld
HelloWorld_APPLICATION_ICON =

#
# Other sources
#
HelloWorld_OBJC_FILES += \
HelloWorld.m

#
# Makefiles
#
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/aggregate.make
include $(GNUSTEP_MAKEFILES)/application.make
-include GNUmakefile.postamble


GNUmakefile end

Put these two files in a folder and compile using

$ gmake

This will produce the bundle HelloWorld.app (which is basically just a folder)

Launch the app by typing
$ openapp ./HelloWorld

Have fun and good luck with Objective-C 2.0 and GNUstep :)




Cocoa on FreeBSD

I'm back!


Some of you sharp people out there might have noticed. The title of the blog has changed. The first objective with this blog was to write about experiences from developing iOS apps using Objective-C. I have now broaden the content a bit to even include development in Objective-C on other platforms. For example by using the open source implementation of Cocoa, GNUstep, you can develop apps easily on Mac, Windows, Linux and *BSD in a platform independent environment.

First off, I want to show you how to get Obj-C 2.0 (@properties, new literals etc.) and GCD (Grand Central Dispatch) up and running on FreeBSD using GNUstep framework and some other libraries.

Let's say you've installed FreeBSD 9.x and have the system up and running. Here's my recipe for success:

- Install LLVM development package
# pkg install llvm-devel
Note: In FreeBSD 9.1 RC2/3 llvm-ld is missing so you have rebuild the kernel+world with "WITH_CLANG_EXTRAS=YES" in src.conf or use the gcc linker. Don't know if the missing llvm-files will come back for the final release or not...

- Install GNUstep and libobjc2 from tarballs
First install from ports to get all dependencies, then delete gnustep packages and install tarballs. Do this as root, not with sudo. GNUstep from ports does not support the new libobjc2 so we can't use it for development.
# pkg install gmake
# cd /usr/ports/devel/gnustep && make install clean
# [delete gnustep packages]

Download gnustep-make, -base, -gui and -backend from http://www.gnustep.org/resources/downloads.php.

Download latest libobjc2 from http://download.gna.org/gnustep/.

Start with installing gnustep-make
# [unpack gnustep-make and cd into directory]
# ./configure --with-layout=gnustep --prefix=/usr/local/GNUstep --enable-objc-nonfragile-abi CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++
# . /usr/local/GNUstep/System/Library/Makefiles/GNUstep.sh (source the script, add this line to .bashrc or similar script)

libobjc2
# [unpack libobjc2 and cd into directory]
# gmake install CC=clang CXX=clang++

- Reinstall gnustep-make as above to configure it for new libobjc2

For gnustep-base, gnustep-gui, gnustep-back
# [unpack tarball and cd into directory]
# ./configure CC=clang CXX=clang++
# gmake install CC=clang CXX=clang++

GCD - Grand Central Dispatch
# cd /usr/ports/devel/libdispatch && make install clean
Include <dispatch/dispatch.h> to use.

And that's it. We will use two files to test our newly installed framework and libraries.
HelloWorld.m and the makefile GNUmakefile.

The sample code will test the new literals like @autorelease, @[ ... ], blocks and the dispatch library (launching blocks of code in different thread and with time delay).

HelloWorld.m start

#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
#import <unistd.h>

int main (int argc, const char *argv[])
{

  @autoreleasepool {

    NSLog(@"Hello, World!");

    NSArray *a = @[ @"A", @"B", @"C" ];
    [a enumerateObjectsUsingBlock:^(NSString *s, NSUInteger index, BOOL *stop) {
      NSLog(@"String with index %d has value %@",(int)index, s);
    }];


    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_global_queue(0,0), ^(void){
             NSLog(@"Hello from delayed dispatch!");
           });
 
    dispatch_async(dispatch_get_global_queue(0,0), ^{
             NSLog(@"Hello from dispatch!");
           });
  }
  sleep(3);
  return 0;
}


HelloWorld.m end


GNUmakefile start

ifeq ($(GNUSTEP_MAKEFILES),)
 GNUSTEP_MAKEFILES := $(shell gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null)
endif
ifeq ($(GNUSTEP_MAKEFILES),)
 $(error You need to set GNUSTEP_MAKEFILES before compiling!)
endif

include $(GNUSTEP_MAKEFILES)/common.make

ADDITIONAL_OBJC_LIBS += -ldispatch

#
# Application
#
VERSION = 0.1
PACKAGE_NAME = HelloWorld
APP_NAME = HelloWorld
HelloWorld_APPLICATION_ICON =

#
# Other sources
#
HelloWorld_OBJC_FILES += \
HelloWorld.m

#
# Makefiles
#
-include GNUmakefile.preamble
include $(GNUSTEP_MAKEFILES)/aggregate.make
include $(GNUSTEP_MAKEFILES)/application.make
-include GNUmakefile.postamble


GNUmakefile end

Put these two files in a folder and compile using

$ gmake

This will produce the bundle HelloWorld.app (which is basically just a folder)

Launch the app by typing
$ openapp ./HelloWorld

Have fun and good luck with Objective-C 2.0 and GNUstep :)




2012年10月23日火曜日



前回に引き続きロボットを作っている住友です。今回は回路設計と接続までです。


マイコンボード



マイコンボードにはArduino Pro Mini 328 5V 16MHzを使用します。ArduinoといえばAndroidで開発されている方ならADK(Accessory Development Kit)でArduinoが使われていることをご存知かも知れません。今回使用するArduino Pro MiniはADKの機能が無い代わりに小型のものです。

(最初の記事ではArduino Pro Mini 328 3.3Vを記載していましたが、諸事情により5Vに変更しています。)

f:id:bs-android:20121023002436j:image

根性試しにロボットを作る~基板作成編~



前回に引き続きロボットを作っている住友です。今回は回路設計と接続までです。


マイコンボード



マイコンボードにはArduino Pro Mini 328 5V 16MHzを使用します。ArduinoといえばAndroidで開発されている方ならADK(Accessory Development Kit)でArduinoが使われていることをご存知かも知れません。今回使用するArduino Pro MiniはADKの機能が無い代わりに小型のものです。

(最初の記事ではArduino Pro Mini 328 3.3Vを記載していましたが、諸事情により5Vに変更しています。)

f:id:bs-android:20121023002436j:image

2012年10月11日木曜日


前回SDK for NFC Wrapper Libraryのプロトタイプを作りました。
ここから各NFCデバイスに向けての機能を肉付けしていきたいと思います。
現段階ではコマンドを発行することができないので、コマンド発行まで実装したいと思います。

SDK for NFC Wrapper Library - Polling


前回SDK for NFC Wrapper Libraryのプロトタイプを作りました。
ここから各NFCデバイスに向けての機能を肉付けしていきたいと思います。
現段階ではコマンドを発行することができないので、コマンド発行まで実装したいと思います。

2012年10月5日金曜日


呼び出しが大変

新しいプロジェクト立ち上げの度に、毎回API呼び出し手順にしたがって呼び出すのも、なかなかめんどうです。
またこのSDKでは各NFCデバイス(NFC-A,NFC-B,NFC-F)の検出までは共通化できますが、そこからのコマンド発行については個別に実装していかなければなりません。
ライブラリ化してより簡単にNFCデバイスにアクセスできるようにします。

SDK for NFC Wrapper Library


呼び出しが大変

新しいプロジェクト立ち上げの度に、毎回API呼び出し手順にしたがって呼び出すのも、なかなかめんどうです。
またこのSDKでは各NFCデバイス(NFC-A,NFC-B,NFC-F)の検出までは共通化できますが、そこからのコマンド発行については個別に実装していかなければなりません。
ライブラリ化してより簡単にNFCデバイスにアクセスできるようにします。

2012年10月4日木曜日

NFC対応アプリケーションを作る

Windows7にPaSoRi(RC-S330)を接続してNFCタグをかざすと、そのIDを表示するアプリケーションを作成します。
API呼び出し順序については前回のエントリを参照してください

NFC-IDを表示するWindowsアプリケーションを作る

NFC対応アプリケーションを作る

Windows7にPaSoRi(RC-S330)を接続してNFCタグをかざすと、そのIDを表示するアプリケーションを作成します。
API呼び出し順序については前回のエントリを参照してください

2012年10月3日水曜日

SDK for NFCのライブラリのAPIを見る

SDK for NFCを使ったプログラムを作成するには、”felica_nfc_library.dll“というライブラリを使用します。
ライブラリのAPIについて簡単にまとめます。
この内容はSDKに含まれるマニュアルに書かれていますので、詳しくはそちらを御覧ください。

APIアクセスの順序

簡単に図にまとめました。


































SDK for NFCのライブラリのAPIを見る

SDK for NFCのライブラリのAPIを見る

SDK for NFCを使ったプログラムを作成するには、”felica_nfc_library.dll“というライブラリを使用します。
ライブラリのAPIについて簡単にまとめます。
この内容はSDKに含まれるマニュアルに書かれていますので、詳しくはそちらを御覧ください。

APIアクセスの順序

簡単に図にまとめました。


































WindowsでのNFC開発環境を整える

WindowsでNFC開発するための環境を整えます。

PC

Windows 7 SP1 .NET Framework 4.0
開発にはC#を使用するため、.NET Frameworkが必要です。

NFC-R/W

PaSoRi RC-S330/S
PaSoRi RC-S370
PaSoRi RC-S380
店頭では確定申告のコーナーにおいてあるかも…。
ネット通販で買うのがお勧めです。

ドライバ

Sony Japan | FeliCa | 個人のお客様 | ダウンロード | NFCポートソフトウェア
http://www.sony.co.jp/Products/felica/consumer/download/felicaportsoftware.html
SDKに同梱されています。

SDK

Sony Japan | FeliCa | 法人のお客様 | 製品情報 | ICS-D010・D004・D002・D003
http://www.sony.co.jp/Products/felica/business/products/ICS-D004_002_003.html
NFCのSDKは「SDK for NFC Starter Kit」と「SDK for NFC Lite」です。
個人利用や評価の場合のみ「SDK for NFC Starter Kit」が使用できます。
商用利用の場合、「SDK for NFC Lite」を購入しましょう。

IDE

Microsoft Visual Studio 2010
http://www.microsoft.com/japan/visualstudio/products/2010-editions
C#で開発します。

カスタマー開発部 山下智樹

WindowsでのNFC開発環境を整える

WindowsでのNFC開発環境を整える

WindowsでNFC開発するための環境を整えます。

PC

Windows 7 SP1 .NET Framework 4.0
開発にはC#を使用するため、.NET Frameworkが必要です。

NFC-R/W

PaSoRi RC-S330/S
PaSoRi RC-S370
PaSoRi RC-S380
店頭では確定申告のコーナーにおいてあるかも…。
ネット通販で買うのがお勧めです。

ドライバ

Sony Japan | FeliCa | 個人のお客様 | ダウンロード | NFCポートソフトウェア
http://www.sony.co.jp/Products/felica/consumer/download/felicaportsoftware.html
SDKに同梱されています。

SDK

Sony Japan | FeliCa | 法人のお客様 | 製品情報 | ICS-D010・D004・D002・D003
http://www.sony.co.jp/Products/felica/business/products/ICS-D004_002_003.html
NFCのSDKは「SDK for NFC Starter Kit」と「SDK for NFC Lite」です。
個人利用や評価の場合のみ「SDK for NFC Starter Kit」が使用できます。
商用利用の場合、「SDK for NFC Lite」を購入しましょう。

IDE

Microsoft Visual Studio 2010
http://www.microsoft.com/japan/visualstudio/products/2010-editions
C#で開発します。

カスタマー開発部 山下智樹

2012年10月2日火曜日



前回に引き続きロボットを作っている住友です。


今回は筐体の設計とプロトタイプの作成までです。


FreeCAD


筐体の設計にはFreeCADというオープンソースの3Dモデラーを使用しました。


FreeCADでは立方体、球体、円柱、円錐などの基本的な形状を組み合わせて形を作ることができます。


Ubuntuを使っている人ならapt-getで直ぐに使うことができます。


住友はDebianを使っていて、新しいバージョン(0.13)が使いたかったのでビルドしました。


外観


外観は球体をベースに手足を生やしたものにしようと思います。


f:id:bs-android:20121002013329p:image


デフォルメしたロボットで2足歩行は難しそうなので手足を使って動けるようにしようと思います。


頭も振り向けるようにしたいです。


眼にもレンズを埋め込み、LEDでチカチカさせるつもりです。


f:id:bs-android:20121002013330p:image





フレーム


筐体に埋め込むフレームです。


サーボモータを手足の4つと頭の合計5つを埋め込むことを想定しています。


f:id:bs-android:20121002013331p:image





フレームの原型を作成


ボディまで一気に作ってみたいところですが、


とりあえず今回はフレームだけ作ってみようと思います。


3Dプリンタがあれば簡単に作れるのですが生憎持っていないので手作りです。


取り出したるは厚さ5mmのスチレンボート、これを切って貼ってして形状を作ります。


f:id:bs-android:20121002013332j:image


f:id:bs-android:20121002013333j:image


切り出せた部品をピンやスチロール用のボンドで繋げていき、形状ができあがりました。


f:id:bs-android:20121002013808j:image


出来上がったのはいいのですがスチレンボードは柔らかく、


このままではフレームには使えないのでシリコンで型を取ってレジンで整形します。


市販の型取り用ブロックにフレームを入れてシリコンを流しこめば型が作れます。


2ピースの型にしようと思うので粘土で片面を包み、ブロックに入れてシリコンを流し込みます。


f:id:bs-android:20121002014458j:image


f:id:bs-android:20121002014459j:image


f:id:bs-android:20121002013810j:image


一度固まったらひっくり返してもう片面の粘土を剥がし、再度ブロックに入れてシリコンを流し込みます。


これで2ピースの型が出来上がりました。


f:id:bs-android:20121002013811j:image


フレームのレジンキャスト


出来上がった型に剥離剤を塗ってウレタン樹脂を流し込めば


レジン製の頑丈なフレームの出来上がりです。


※:使用するレジンによっては有毒なガスが出ますので換気をしっかりしましょう。


f:id:bs-android:20121002013812j:image


3つ作ったのですが、1つは気泡が入ってしまい三叉の部分がボコボコになってしまいました。





出来上がったものにサーボモータを4つ乗せて、ついでにスチロール性の足をつけて見ました。


この段階で既に歩けるのか心配になったのですが気にせず続けていこうと思います。


f:id:bs-android:20121002014246j:image




というわけで筐体の設計からフレームのプロトタイプ制作まででした。


(ソフト屋さんのはずなのにソフトの話が一つもありませんでしたが、、、)


次はこのフレームに乗せるための制御用のボードの作成をしていく予定です。




文責:カスタマー開発部 住友孝郎





根性試しにロボットを作る~筐体設計編~



前回に引き続きロボットを作っている住友です。


今回は筐体の設計とプロトタイプの作成までです。


FreeCAD


筐体の設計にはFreeCADというオープンソースの3Dモデラーを使用しました。


FreeCADでは立方体、球体、円柱、円錐などの基本的な形状を組み合わせて形を作ることができます。


Ubuntuを使っている人ならapt-getで直ぐに使うことができます。


住友はDebianを使っていて、新しいバージョン(0.13)が使いたかったのでビルドしました。


外観


外観は球体をベースに手足を生やしたものにしようと思います。


f:id:bs-android:20121002013329p:image


デフォルメしたロボットで2足歩行は難しそうなので手足を使って動けるようにしようと思います。


頭も振り向けるようにしたいです。


眼にもレンズを埋め込み、LEDでチカチカさせるつもりです。


f:id:bs-android:20121002013330p:image





フレーム


筐体に埋め込むフレームです。


サーボモータを手足の4つと頭の合計5つを埋め込むことを想定しています。


f:id:bs-android:20121002013331p:image





フレームの原型を作成


ボディまで一気に作ってみたいところですが、


とりあえず今回はフレームだけ作ってみようと思います。


3Dプリンタがあれば簡単に作れるのですが生憎持っていないので手作りです。


取り出したるは厚さ5mmのスチレンボート、これを切って貼ってして形状を作ります。


f:id:bs-android:20121002013332j:image


f:id:bs-android:20121002013333j:image


切り出せた部品をピンやスチロール用のボンドで繋げていき、形状ができあがりました。


f:id:bs-android:20121002013808j:image


出来上がったのはいいのですがスチレンボードは柔らかく、


このままではフレームには使えないのでシリコンで型を取ってレジンで整形します。


市販の型取り用ブロックにフレームを入れてシリコンを流しこめば型が作れます。


2ピースの型にしようと思うので粘土で片面を包み、ブロックに入れてシリコンを流し込みます。


f:id:bs-android:20121002014458j:image


f:id:bs-android:20121002014459j:image


f:id:bs-android:20121002013810j:image


一度固まったらひっくり返してもう片面の粘土を剥がし、再度ブロックに入れてシリコンを流し込みます。


これで2ピースの型が出来上がりました。


f:id:bs-android:20121002013811j:image


フレームのレジンキャスト


出来上がった型に剥離剤を塗ってウレタン樹脂を流し込めば


レジン製の頑丈なフレームの出来上がりです。


※:使用するレジンによっては有毒なガスが出ますので換気をしっかりしましょう。


f:id:bs-android:20121002013812j:image


3つ作ったのですが、1つは気泡が入ってしまい三叉の部分がボコボコになってしまいました。





出来上がったものにサーボモータを4つ乗せて、ついでにスチロール性の足をつけて見ました。


この段階で既に歩けるのか心配になったのですが気にせず続けていこうと思います。


f:id:bs-android:20121002014246j:image




というわけで筐体の設計からフレームのプロトタイプ制作まででした。


(ソフト屋さんのはずなのにソフトの話が一つもありませんでしたが、、、)


次はこのフレームに乗せるための制御用のボードの作成をしていく予定です。




文責:カスタマー開発部 住友孝郎





2012年9月25日火曜日

AndroidでRTD URIを書く

RTD URIを書く

AndroidでRTD URIを書き込みます
NFCに反応する部分までは以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

NdefMessageの作成

書き込み対象のRTD URI RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_URI を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。


NDEFを書き込む

NDEFの書き込みに関しては以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

ソースコード


カスタマー開発部 山下智樹

AndroidでRTD URIを書く

AndroidでRTD URIを書く

RTD URIを書く

AndroidでRTD URIを書き込みます
NFCに反応する部分までは以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

NdefMessageの作成

書き込み対象のRTD URI RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_URI を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。


NDEFを書き込む

NDEFの書き込みに関しては以前書きましたので、そちらをご参照ください。
> ブリリアントサービス NFC技術ブログ: AndroidでRTD Textを書く 

ソースコード


カスタマー開発部 山下智樹

2012年9月21日金曜日



ものを作るのが好きで、Androidを使ったロボットアームなど、

ADKを使用したロボットを勉強会やイベントの展示に持って行っている住友です。

私自身、ソフトウェア開発を生業にしているのですが、

フィジカルコンピューティングという言葉が浸透しつつある昨今ですので

一からロボットを作って見ることにしました。

今回は構想と材料の準備と紹介です。

根性試しにロボットを作る~準備編~



ものを作るのが好きで、Androidを使ったロボットアームなど、

ADKを使用したロボットを勉強会やイベントの展示に持って行っている住友です。

私自身、ソフトウェア開発を生業にしているのですが、

フィジカルコンピューティングという言葉が浸透しつつある昨今ですので

一からロボットを作って見ることにしました。

今回は構想と材料の準備と紹介です。

2012年9月20日木曜日


RTD URIを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

Ndef Recordを取得する

Ndef Recordの取得までは前回解説したので、省略します。

RTD URIを判定する

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'U'になっていることを確認します。

RTD Uriをパースする

PAYLOADを、RTD URIの仕様に従いパースしていきます。
RTD URIの仕様についてはこちらをご覧ください。
ブリリアントサービス NFC技術ブログ: RTD URIとは 
例ではURIを作成した後にブラウザを起動します。

実行イメージ





















ソースコード

https://github.com/bs-nfc/ReadRTDUri

カスタマー開発部 山下智樹

AndroidでRTD URIを読む


RTD URIを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

Ndef Recordを取得する

Ndef Recordの取得までは前回解説したので、省略します。

RTD URIを判定する

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'U'になっていることを確認します。

RTD Uriをパースする

PAYLOADを、RTD URIの仕様に従いパースしていきます。
RTD URIの仕様についてはこちらをご覧ください。
ブリリアントサービス NFC技術ブログ: RTD URIとは 
例ではURIを作成した後にブラウザを起動します。

実行イメージ





















ソースコード

https://github.com/bs-nfc/ReadRTDUri

カスタマー開発部 山下智樹

2012年9月19日水曜日

RTD URIとは

Record Type DefinitionのURIフォーマットのことを指します。
仕様書はこちらにあります

NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

URIフォーマットの構造













  • Uri Identifier Code
    • 1Byte
    • 接頭辞のコードを表します。
      以下が代表的なコードです
      • 0x01 -> http://www.
      • 0x02 -> https://www.
      • 0x03 -> http://
      • 0x04 -> https://
      • 0x06 -> mailto://
      • 0x0D -> ftp://
      • 0x1D -> file://
      • 詳しくは仕様書を御覧ください。
  • Uri FIeld
    • Uri Identifier Codeで省略した文字を除くURIを格納します。
    • UTF-8でエンコード/デコードします。

URIを格納したNDEFの例

"http://bs-nfc.blogspot.jp"を表したNDEFは以下のようになります。
D1 01 13 55
03 62 73 2D
6E 66 63 2E
62 6C 6F 67
73 70 6F 74
2E 6A 70

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x13
  • TYPE 0x55 -> 'U'
  • PAYLOAD
    • Uri Identifier Code 0x03 -> "http://"
    • Uri Field 0x62 0x73 0x2D 0x6E 0x66 0x63 0x2E 0x62 0x6C 0x6F 0x67 0x73 0x70 0x6F 0x74 0x2E 0x6A 0x70
      -> "bs-nfc.blogspot.jp"

カスタマー開発部 山下智樹

RTD URIとは

RTD URIとは

Record Type DefinitionのURIフォーマットのことを指します。
仕様書はこちらにあります

NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

URIフォーマットの構造













  • Uri Identifier Code
    • 1Byte
    • 接頭辞のコードを表します。
      以下が代表的なコードです
      • 0x01 -> http://www.
      • 0x02 -> https://www.
      • 0x03 -> http://
      • 0x04 -> https://
      • 0x06 -> mailto://
      • 0x0D -> ftp://
      • 0x1D -> file://
      • 詳しくは仕様書を御覧ください。
  • Uri FIeld
    • Uri Identifier Codeで省略した文字を除くURIを格納します。
    • UTF-8でエンコード/デコードします。

URIを格納したNDEFの例

"http://bs-nfc.blogspot.jp"を表したNDEFは以下のようになります。
D1 01 13 55
03 62 73 2D
6E 66 63 2E
62 6C 6F 67
73 70 6F 74
2E 6A 70

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x13
  • TYPE 0x55 -> 'U'
  • PAYLOAD
    • Uri Identifier Code 0x03 -> "http://"
    • Uri Field 0x62 0x73 0x2D 0x6E 0x66 0x63 0x2E 0x62 0x6C 0x6F 0x67 0x73 0x70 0x6F 0x74 0x2E 0x6A 0x70
      -> "bs-nfc.blogspot.jp"

カスタマー開発部 山下智樹

2012年9月11日火曜日



HTML5カンファレンスに参加してきました宮地です。

最近、巷で話題のHTML5のカンファレンスが横浜であったので参加してきました。

内容的には草案の最終コール段階の

HTML5に関してのブラウザの対応や実際の開発現場でのお話をお聞きいたしました。

このブログにはカンファレンスを聞いていて思ったことを書きます。

(間違っていたら速攻でツッコミを入れてあげてください。)

スタッフさんの集合写真


f:id:bs-android:20120908194258j:image:w640

HTML5 Conference 2012に行ってきました。



HTML5カンファレンスに参加してきました宮地です。

最近、巷で話題のHTML5のカンファレンスが横浜であったので参加してきました。

内容的には草案の最終コール段階の

HTML5に関してのブラウザの対応や実際の開発現場でのお話をお聞きいたしました。

このブログにはカンファレンスを聞いていて思ったことを書きます。

(間違っていたら速攻でツッコミを入れてあげてください。)

スタッフさんの集合写真


f:id:bs-android:20120908194258j:image:w640

2012年8月31日金曜日

SNEP通信してみた

SNEPとはP2Pで使用されるプロトコルの名前です。
AndroidではAndroid BEAMという名前で呼ばれていますが、このSNEPプロトコルを使用して実現しています。
今回はAndroidとWindows8でSNEP通信をしてみます。


用意するもの

Windows8















RC-S380















Android 4.0















Windows8にRC-S380を接続しドライバをインストールします。
AndroidはSC-04D Android 4.0.4を使用しています。


カードを読み取る

SNEPをする前に普通のNFCカードを読み取ってみます。
中にはNDEFでURLを書き込んでいます。
NFCカード















カードをRC-S380にかざします。
読み取るとぴこぴこ音がします。















Windows8側に通知が表示されました。
クリックではなくタップになっていますね。















通知をクリックするとブラウザが起動します。
NFC QUESTのページが表示されました。















カードを読み取って中のNDEFデータからURLを取得し
ブラウザに表示することができました。
これはRC-S330/Sでも可能でしたね。


SNEP通信をする

続いてSNEP通信をしてみます。
Androidでブラウザを開いている状態でRC-S380にタッチすると通信することができます。


Androidでブラウザを起動します。
弊社のホームページ見てます。















AndroidをRC-S380にかざします。
Android BEAMの画面になった!!















タップしてビームを送信するとWindows8に
カードの時同様、通知が表示されます。
さっきとは違うアングルから















こちらも通知をクリックすることでブラウザが表示されます。
大きい画面で見れた!















無事SNEPでも通信することができました。

まとめ

今回SNEP通信をしましたが、ドライバのインストールをしただけで、プログラムは一切書かずに実現することができました。

今後パソコンにもNFCが搭載されていきます。今回はその片鱗が少し見えたような気がしました。利用シーンで考えると、帰宅時に見ていたホームページを、家に帰ってきてから大きい画面で見たいなと思った時に便利なのではないでしょうか。
さらにプログラムからアクセスできるようならば、もっと夢が広がると思います。


Windows8用ドライバは評価用にお借りしたものなので一般公開はされていませんが
今後Windows8のリリース後に公開されるのではないでしょうか。
さらに今後のアップデートに期待です。

カスタマー開発部 山下智樹

Windows8とAndroidでSNEP通信してみた

SNEP通信してみた

SNEPとはP2Pで使用されるプロトコルの名前です。
AndroidではAndroid BEAMという名前で呼ばれていますが、このSNEPプロトコルを使用して実現しています。
今回はAndroidとWindows8でSNEP通信をしてみます。


用意するもの

Windows8















RC-S380















Android 4.0















Windows8にRC-S380を接続しドライバをインストールします。
AndroidはSC-04D Android 4.0.4を使用しています。


カードを読み取る

SNEPをする前に普通のNFCカードを読み取ってみます。
中にはNDEFでURLを書き込んでいます。
NFCカード















カードをRC-S380にかざします。
読み取るとぴこぴこ音がします。















Windows8側に通知が表示されました。
クリックではなくタップになっていますね。















通知をクリックするとブラウザが起動します。
NFC QUESTのページが表示されました。















カードを読み取って中のNDEFデータからURLを取得し
ブラウザに表示することができました。
これはRC-S330/Sでも可能でしたね。


SNEP通信をする

続いてSNEP通信をしてみます。
Androidでブラウザを開いている状態でRC-S380にタッチすると通信することができます。


Androidでブラウザを起動します。
弊社のホームページ見てます。















AndroidをRC-S380にかざします。
Android BEAMの画面になった!!















タップしてビームを送信するとWindows8に
カードの時同様、通知が表示されます。
さっきとは違うアングルから















こちらも通知をクリックすることでブラウザが表示されます。
大きい画面で見れた!















無事SNEPでも通信することができました。

まとめ

今回SNEP通信をしましたが、ドライバのインストールをしただけで、プログラムは一切書かずに実現することができました。

今後パソコンにもNFCが搭載されていきます。今回はその片鱗が少し見えたような気がしました。利用シーンで考えると、帰宅時に見ていたホームページを、家に帰ってきてから大きい画面で見たいなと思った時に便利なのではないでしょうか。
さらにプログラムからアクセスできるようならば、もっと夢が広がると思います。


Windows8用ドライバは評価用にお借りしたものなので一般公開はされていませんが
今後Windows8のリリース後に公開されるのではないでしょうか。
さらに今後のアップデートに期待です。

カスタマー開発部 山下智樹


2012年映像情報メディア学会の2日目となりました。学会自体は明日8/31(金)までありますが、本日大阪に帰らなければいけなかったので、私にとっては最終日となりました。3日目のキネクトやARなどのデモが本当は出席したかったので、実に残念です。

さて、本日は朝の9:00から夕方の17:30までいろいろな講演・研究発表を回ってきました。簡単に見てきたことを書きます。今日はもう遅いので詳しくはまたの機会に。。。

映像情報メディア学会 2日目



2012年映像情報メディア学会の2日目となりました。学会自体は明日8/31(金)までありますが、本日大阪に帰らなければいけなかったので、私にとっては最終日となりました。3日目のキネクトやARなどのデモが本当は出席したかったので、実に残念です。

さて、本日は朝の9:00から夕方の17:30までいろいろな講演・研究発表を回ってきました。簡単に見てきたことを書きます。今日はもう遅いので詳しくはまたの機会に。。。

2012年8月30日木曜日



2012年映像情報メディア学会にアンドロイド講習会講師として参加してきました。

場所は広島市立大学です。広島市立大学は、広島駅からJR可部線で一駅の横川駅からバスで12分、市街地を出たかと思うと、2kmほどの長いトンネルを抜けたところにキャンパスがあります。

f:id:bs-android:20120829125100j:image:w360:right

映像情報メディア学会 アンドロイド講習会



2012年映像情報メディア学会にアンドロイド講習会講師として参加してきました。

場所は広島市立大学です。広島市立大学は、広島駅からJR可部線で一駅の横川駅からバスで12分、市街地を出たかと思うと、2kmほどの長いトンネルを抜けたところにキャンパスがあります。

f:id:bs-android:20120829125100j:image:w360:right

2012年8月21日火曜日



街コンって?


みなさんは街コンというイベントをご存知でしょうか


街コンとは、地域振興を目的とした大規模な合コンイベントです。


参加者は少ない場合でも100名、多い時は1000名を超えます。


街コンは地域の商店街で開催されることが多く、地域活性化の側面をもっていますが


合コンなので、参加者が出会いを求められるという側面ももっています。


座席指定で男女が必ずテーブルを囲むように案内されることや


気になる異性に声をかけやすくする仕組みがある場合があります。



街コン - Wikipedia
http://ja.wikipedia.org/wiki/%E8%A1%97%E3%82%B3%E3%83%B3

濱コンって?


f:id:bs-android:20120816163222j:image:h400


[こののぼりが目印!]


横浜最大の街コンイベントです。


横浜市関内を中心に、横浜市のさまざまな場所で開催されています。


完全事前受付制となっており


受付でリストバンドを受け取った後、街コン参加店舗で


食べ放題、飲み放題となります。



濱コンオフィシャルサイト | 濱コン
http://www.hamacon.jp/


濱コン@横濱 | Facebook
http://www.facebook.com/hamacon.jp

NFCがやってきた!


今回濱コン事務局さんと協力して、街コンにNFCを組込みました。


全国初!NFCを街コンに実戦投入しましたので、そちらのレポートを書きます。


プレスリリースはこちら



街コン支援システム「NFCで街コンつく~る」を提供開始
http://www.brilliantservice.co.jp/press/pdf/nfc-machikon.pdf

濱コン行ってきたよ!


今回参加したイベントは20代限定のイベントでした。


通常は年齢制限のない濱コンですが、今回は20代のみの参加者となります。



濱コンUnder30~【20代限定】横浜へ集え!素敵な出会いをGet!(街コン) | 横濱史上最大規模の地域活性化イベント・濱コン
http://www.hamacon.jp/satellite_120817/index.html

受付

f:id:bs-android:20120816190928j:image:w400


受付では事前に登録した情報と、リストバンドをひもづけるために


パソコンとPaSoRiを使ってヒモ付作業をします。


リストバンドを装着

f:id:bs-android:20120816200037j:image:w400


参加者にはひもづけられたリストバンドを装着してもらい


街コンに参加してもらいます。


今回使ったリストバンド

f:id:bs-android:20120816200357j:image:w400


今回使用したリストバンドがこちらです。


裏にシール型のNFCタグが貼られています。


NFCタグにはFeliCa Liteを使用しております。


今回もSonyさんにご協力いただきました!ありがとうございます!


店頭でリストバンドを読み取り!

f:id:bs-android:20120816205254j:image:w400


参加者は店舗入退店時に、スタッフのもつスマホにリストバンドをかざしてもらうことで


入店状況を記録します。


ここは仕組み上不安なところでした。


リストバンドをタッチするということが馴染みないので


実施にやってみたら、みんな面倒がってタッチしてくれないんじゃないかな…と考えていました。


しかし実際にやってみると、慣れないのは最初だけで


慣れてくると積極的にタッチしていただけていたので、無駄な不安だったみたいです(笑)


混雑状況が分かる!

f:id:bs-android:20120821084751j:image:w400


サーバに蓄積されたデータから、参加者に直接混雑状況を配信します。


楽しい街コン!

f:id:bs-android:20120816220206j:image:w400


店内ではみなさん楽しそうに過ごしていました。


ぱっと見は普通の居酒屋さんっぽいですが


リストバンドをつけていることで、「あ、この人も同じイベントに参加しているんだ」という一体感とか安心感がありますね(笑)





個人的な感想など


私自身街コンを目にすることが初めてだったのですが


さまざまな人が参加し、非常に活気のあるイベントでした。(私も参加したかった!!)





街コンの中でも、特に濱コンは大人気です。応募総数を明かすことはできないのですが


多くの参加希望者が集まったそうです。


ちなみに次回開催は9月8日に1000人規模で開催されますので、参加されてはいかがでしょうか。


受付もまもなく開始と聞いていますので、濱コンホームページをこまめにチェックしてみてください!


もちろんそちらでもNFCが使われますよ!


今回、参加人数は男女200名とあまり大きいものではありませんでしたが


貴重なデータが得られましたので、今後に活かしてもっとよいシステムに改良していきたいと思います!





文責:カスタマー開発部 品川開発課 山下 智樹





NFCが濱コンにやってきた!



街コンって?


みなさんは街コンというイベントをご存知でしょうか


街コンとは、地域振興を目的とした大規模な合コンイベントです。


参加者は少ない場合でも100名、多い時は1000名を超えます。


街コンは地域の商店街で開催されることが多く、地域活性化の側面をもっていますが


合コンなので、参加者が出会いを求められるという側面ももっています。


座席指定で男女が必ずテーブルを囲むように案内されることや


気になる異性に声をかけやすくする仕組みがある場合があります。



街コン - Wikipedia
http://ja.wikipedia.org/wiki/%E8%A1%97%E3%82%B3%E3%83%B3

濱コンって?


f:id:bs-android:20120816163222j:image:h400


[こののぼりが目印!]


横浜最大の街コンイベントです。


横浜市関内を中心に、横浜市のさまざまな場所で開催されています。


完全事前受付制となっており


受付でリストバンドを受け取った後、街コン参加店舗で


食べ放題、飲み放題となります。



濱コンオフィシャルサイト | 濱コン
http://www.hamacon.jp/


濱コン@横濱 | Facebook
http://www.facebook.com/hamacon.jp

NFCがやってきた!


今回濱コン事務局さんと協力して、街コンにNFCを組込みました。


全国初!NFCを街コンに実戦投入しましたので、そちらのレポートを書きます。


プレスリリースはこちら



街コン支援システム「NFCで街コンつく~る」を提供開始
http://www.brilliantservice.co.jp/press/pdf/nfc-machikon.pdf

濱コン行ってきたよ!


今回参加したイベントは20代限定のイベントでした。


通常は年齢制限のない濱コンですが、今回は20代のみの参加者となります。



濱コンUnder30~【20代限定】横浜へ集え!素敵な出会いをGet!(街コン) | 横濱史上最大規模の地域活性化イベント・濱コン
http://www.hamacon.jp/satellite_120817/index.html

受付

f:id:bs-android:20120816190928j:image:w400


受付では事前に登録した情報と、リストバンドをひもづけるために


パソコンとPaSoRiを使ってヒモ付作業をします。


リストバンドを装着

f:id:bs-android:20120816200037j:image:w400


参加者にはひもづけられたリストバンドを装着してもらい


街コンに参加してもらいます。


今回使ったリストバンド

f:id:bs-android:20120816200357j:image:w400


今回使用したリストバンドがこちらです。


裏にシール型のNFCタグが貼られています。


NFCタグにはFeliCa Liteを使用しております。


今回もSonyさんにご協力いただきました!ありがとうございます!


店頭でリストバンドを読み取り!

f:id:bs-android:20120816205254j:image:w400


参加者は店舗入退店時に、スタッフのもつスマホにリストバンドをかざしてもらうことで


入店状況を記録します。


ここは仕組み上不安なところでした。


リストバンドをタッチするということが馴染みないので


実施にやってみたら、みんな面倒がってタッチしてくれないんじゃないかな…と考えていました。


しかし実際にやってみると、慣れないのは最初だけで


慣れてくると積極的にタッチしていただけていたので、無駄な不安だったみたいです(笑)


混雑状況が分かる!

f:id:bs-android:20120821084751j:image:w400


サーバに蓄積されたデータから、参加者に直接混雑状況を配信します。


楽しい街コン!

f:id:bs-android:20120816220206j:image:w400


店内ではみなさん楽しそうに過ごしていました。


ぱっと見は普通の居酒屋さんっぽいですが


リストバンドをつけていることで、「あ、この人も同じイベントに参加しているんだ」という一体感とか安心感がありますね(笑)





個人的な感想など


私自身街コンを目にすることが初めてだったのですが


さまざまな人が参加し、非常に活気のあるイベントでした。(私も参加したかった!!)





街コンの中でも、特に濱コンは大人気です。応募総数を明かすことはできないのですが


多くの参加希望者が集まったそうです。


ちなみに次回開催は9月8日に1000人規模で開催されますので、参加されてはいかがでしょうか。


受付もまもなく開始と聞いていますので、濱コンホームページをこまめにチェックしてみてください!


もちろんそちらでもNFCが使われますよ!


今回、参加人数は男女200名とあまり大きいものではありませんでしたが


貴重なデータが得られましたので、今後に活かしてもっとよいシステムに改良していきたいと思います!





文責:カスタマー開発部 品川開発課 山下 智樹





2012年8月8日水曜日

RTD Textを書く

AndroidでRTD Textを書き込みます。

反応するタグの種類の限定

NDEFを書き込めるタグの種類はNDEFタグもしくはNDEFFormatableタグなので、どちらかに反応するようにNfcAdapter#enableForgroundDispatch()を呼んであげます。

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()), 0);
IntentFilter[] intentFilter = new IntentFilter[] {
new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED),
};
String[][] techList = new String[][] {
{
android.nfc.tech.NdefFormatable.class.getName()
}, {
android.nfc.tech.Ndef.class.getName()
}
};
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilter, techList);

NdefMessageの作成

書き込み対象のRTD Text RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_TEXT を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。

NDEFを書き込む

タグの判定

NDEFを書き込むには、NFC反応時に発行されるIntent内に含まれるTagから
Ndef クラスもしくはNdefFormatable クラスに変換する必要があります。
また、NdefクラスとNdefFormatableクラスに親子関係はないので
どのタグなのか判定した上で、処理を別にする必要があります。

Ndefの書き込み

Ndefの場合、書き込み禁止やサイズを見ることができるので
判定した上で書き込みます。

NdefFormatableの書き込み

NdefFormatableの場合、Ndefの様にタグの状態を見ることができないので
そのまま書き込みます。

ソースコード


カスタマー開発部 山下智樹

AndroidでRTD Textを書く

RTD Textを書く

AndroidでRTD Textを書き込みます。

反応するタグの種類の限定

NDEFを書き込めるタグの種類はNDEFタグもしくはNDEFFormatableタグなので、どちらかに反応するようにNfcAdapter#enableForgroundDispatch()を呼んであげます。

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()), 0);
IntentFilter[] intentFilter = new IntentFilter[] {
new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED),
};
String[][] techList = new String[][] {
{
android.nfc.tech.NdefFormatable.class.getName()
}, {
android.nfc.tech.Ndef.class.getName()
}
};
mNfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilter, techList);

NdefMessageの作成

書き込み対象のRTD Text RecordをもったNdefMessageを作成します。
NdefRecordの作成には
  • TNF
  • TYPE
  • ID
  • PAYLOAD
が必要になります。(他に全てのバイナリから作成することも可能です)
TNFはTextRecord#TNF_WELL_KNOWN を使用します。
TYPEはTextRecord#RTD_TEXT を使用します。
IDは今回使用しないので空の配列を渡します。
PAYLOADは自作する必要があります。

NDEFを書き込む

タグの判定

NDEFを書き込むには、NFC反応時に発行されるIntent内に含まれるTagから
Ndef クラスもしくはNdefFormatable クラスに変換する必要があります。
また、NdefクラスとNdefFormatableクラスに親子関係はないので
どのタグなのか判定した上で、処理を別にする必要があります。

Ndefの書き込み

Ndefの場合、書き込み禁止やサイズを見ることができるので
判定した上で書き込みます。

NdefFormatableの書き込み

NdefFormatableの場合、Ndefの様にタグの状態を見ることができないので
そのまま書き込みます。

ソースコード


カスタマー開発部 山下智樹

2012年8月7日火曜日

SNEPとは

Simple NDEF Exchange Protocol(通称SNEP)とは、NFCのP2Pで使われるプロトコルです。
NFC Device同士でServerとClientになり、HTTPのようにGETやPUTなどのメソッドを使いデータのやり取りを行います。


原文

Simple NDEF Exchange Protocol
Technical Specification
NFC Forum™
SNEP 1.0
NFCForum-TS-SNEP_1.0
2011-08-31

NFC Simple NDEF Exchange Protocol (SNEP) specification


和訳



カスタマー開発部 山下智樹

SNEP(Simple NDEF Exchange Protocol)の仕様書を和訳しました。

SNEPとは

Simple NDEF Exchange Protocol(通称SNEP)とは、NFCのP2Pで使われるプロトコルです。
NFC Device同士でServerとClientになり、HTTPのようにGETやPUTなどのメソッドを使いデータのやり取りを行います。


原文

Simple NDEF Exchange Protocol
Technical Specification
NFC Forum™
SNEP 1.0
NFCForum-TS-SNEP_1.0
2011-08-31

NFC Simple NDEF Exchange Protocol (SNEP) specification


和訳



カスタマー開発部 山下智樹

2012年8月3日金曜日

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

AndroidでRTD Textを読む

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

2012年8月2日木曜日

NDEFとは

NFC Data Exchange Formatと呼ばれるもので、NFCでデータのやり取りをする際に使われるデータ・フォーマットです。
仕様書はこちらにあります


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#ndefts


この内容についてNFC Labにて発表をしました。
資料はこちらです。
http://www.slideshare.net/tomorrowkey/ndef-13784268

Ndefの構成


NDEFには一つのNdef Messageが含まれます。
またNdef Messageには0個以上のNdef Recordが含まれます。

Ndef Recordの構成


Ndef Recordは大きくヘッダとペイロードの2つに分けることができます。

  • ヘッダ
    • MB(Message Begin)
      • 1bit
      • このフラグが1になっていると、最初のNdef Recordであることを表します。
    • ME(Message End)
      • 1bit
      • このフラグが1になっていると、最後のNdefRecordであることを表します。
    • CR(Chunked Flag)
      • 1bit
      • このフラグが1になっていると、分割されたNdef Messageであることを表します。
    • SR(Short Record)
      • 1bit
      • このフラグが1になっていると、Ndef Message全体が255Byte以下であることを表します。
      • またその場合、Payload Lengthが1Byteになります。(データサイズの節約になります)
    • IL(ID Length)
      • 1bit
      • このフラグが1になっていると、IDが格納されていることを表します。
    • TNF(Type Name Format)
      • 3bit
      • TYPEの種類を表します。
        • 0x00 Empty
        • 0x01 NFC Forum well-known-type
        • 0x02 Media-type as define in RFC2046
        • 0x03 Absolute URI as define in RFC 3986
        • 0x04 NFC Forum external type
        • 0x05 Unknown
        • 0x06 Unchanged
        • 0x07 Reserved
      • ここの内容によってTYPE の解釈が変わります。
    • TYPE LENGTH
      • 1Byte
      • TYPEフィールドの長さを表します。
      • 符号なし整数
    • PAYLOAD LENGTH
      • 1Byte or 4Byte
      • PAYLOADの長さを表します。
      • ビッグエンディアン、符号なし整数
      • SRが1だった場合、1Byteになります。
    • ID LENGTH
      • 1Byte
      • IDの長さを指定します。
      • 符号なし整数
    • TYPE
      • TYPE LENGTHによって長さが変わります。
      • TNFの値によって内容の解釈が変わります。
      • 例えば0x01 NFC Forum well-known-type だった場合
        • 'T' -> Text
        • 'U' -> URI
        • 'Sp' -> Smart Poster
    • ID
      • ILによって存在しない場合があります。
      • ID LENGTHによって長さが変わります。
      • Ndef RecordのIDを設定することができます。
  • ペイロード
    • データ本体
    • TYPEとTNFによってフォーマットが異なります。
    • well-known-typeについては別エントリにて解説します。



カスタマー開発部 山下智樹

NDEFとは

NDEFとは

NFC Data Exchange Formatと呼ばれるもので、NFCでデータのやり取りをする際に使われるデータ・フォーマットです。
仕様書はこちらにあります


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#ndefts


この内容についてNFC Labにて発表をしました。
資料はこちらです。
http://www.slideshare.net/tomorrowkey/ndef-13784268

Ndefの構成


NDEFには一つのNdef Messageが含まれます。
またNdef Messageには0個以上のNdef Recordが含まれます。

Ndef Recordの構成


Ndef Recordは大きくヘッダとペイロードの2つに分けることができます。

  • ヘッダ
    • MB(Message Begin)
      • 1bit
      • このフラグが1になっていると、最初のNdef Recordであることを表します。
    • ME(Message End)
      • 1bit
      • このフラグが1になっていると、最後のNdefRecordであることを表します。
    • CR(Chunked Flag)
      • 1bit
      • このフラグが1になっていると、分割されたNdef Messageであることを表します。
    • SR(Short Record)
      • 1bit
      • このフラグが1になっていると、Ndef Message全体が255Byte以下であることを表します。
      • またその場合、Payload Lengthが1Byteになります。(データサイズの節約になります)
    • IL(ID Length)
      • 1bit
      • このフラグが1になっていると、IDが格納されていることを表します。
    • TNF(Type Name Format)
      • 3bit
      • TYPEの種類を表します。
        • 0x00 Empty
        • 0x01 NFC Forum well-known-type
        • 0x02 Media-type as define in RFC2046
        • 0x03 Absolute URI as define in RFC 3986
        • 0x04 NFC Forum external type
        • 0x05 Unknown
        • 0x06 Unchanged
        • 0x07 Reserved
      • ここの内容によってTYPE の解釈が変わります。
    • TYPE LENGTH
      • 1Byte
      • TYPEフィールドの長さを表します。
      • 符号なし整数
    • PAYLOAD LENGTH
      • 1Byte or 4Byte
      • PAYLOADの長さを表します。
      • ビッグエンディアン、符号なし整数
      • SRが1だった場合、1Byteになります。
    • ID LENGTH
      • 1Byte
      • IDの長さを指定します。
      • 符号なし整数
    • TYPE
      • TYPE LENGTHによって長さが変わります。
      • TNFの値によって内容の解釈が変わります。
      • 例えば0x01 NFC Forum well-known-type だった場合
        • 'T' -> Text
        • 'U' -> URI
        • 'Sp' -> Smart Poster
    • ID
      • ILによって存在しない場合があります。
      • ID LENGTHによって長さが変わります。
      • Ndef RecordのIDを設定することができます。
  • ペイロード
    • データ本体
    • TYPEとTNFによってフォーマットが異なります。
    • well-known-typeについては別エントリにて解説します。



カスタマー開発部 山下智樹

RTD Textとは

Record Type DefinitionのTextフォーマットのことを指します。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

Textフォーマットの構造

  • Encode
    • 1bit
    • エンコードを表します。
      • 0 -> UTF-8
      • 1 -> UTF-16
  • RFU
    • 1bit
    • Reserved for Future Use
  • Language Code Length
    • 6bit
    • 言語コードの長さを表します。
  • Language Code
    • Language Code Lengthによって長さが変わります。
    • 言語コードを表します。(ISO/IANA)
    • US-ASCIIエンコードで格納します。
  • Actual Text
    • 実際のテキストを格納します。
    • Encodeにて指定したエンコードで格納します。

Textを格納したNDEFの例

"Hello, World." を表したNDEFは以下のようになります。

D1 01 10 54
02 65 6E 48
65 6C 6C 6F
2C 20 57 6F
72 6C 64 2E

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x10 -> 16
  • TYPE 0x54 -> 'T'
  • PAYLOAD
    • Encoding 0x00 -> UTF-8
    • Language Code Length 0x02
    • Language Code 0x65 0x6E -> "en"
    • Actual Text
      • 0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x6F 0x72 0x6C 0x64 0x2E
      • -> "Hello, World."

カスタマー開発部 山下智樹

RTD Textとは

RTD Textとは

Record Type DefinitionのTextフォーマットのことを指します。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

Textフォーマットの構造

  • Encode
    • 1bit
    • エンコードを表します。
      • 0 -> UTF-8
      • 1 -> UTF-16
  • RFU
    • 1bit
    • Reserved for Future Use
  • Language Code Length
    • 6bit
    • 言語コードの長さを表します。
  • Language Code
    • Language Code Lengthによって長さが変わります。
    • 言語コードを表します。(ISO/IANA)
    • US-ASCIIエンコードで格納します。
  • Actual Text
    • 実際のテキストを格納します。
    • Encodeにて指定したエンコードで格納します。

Textを格納したNDEFの例

"Hello, World." を表したNDEFは以下のようになります。

D1 01 10 54
02 65 6E 48
65 6C 6C 6F
2C 20 57 6F
72 6C 64 2E

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x10 -> 16
  • TYPE 0x54 -> 'T'
  • PAYLOAD
    • Encoding 0x00 -> UTF-8
    • Language Code Length 0x02
    • Language Code 0x65 0x6E -> "en"
    • Actual Text
      • 0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x6F 0x72 0x6C 0x64 0x2E
      • -> "Hello, World."

カスタマー開発部 山下智樹

RTDとは

Record Type Definitionの略称で、NDEFのTNFにWell Known Typeが指定された際に、使用できるTYPEです。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds


2012年8月時点では以下の種類のフォーマットがあります。

  • Text
    • 複数の言語のテキストを効率的に格納するためのフォーマットです。
  • URI
    • URI(Uniform Resource Identifier)を効率的に格納するフォーマットです。
  • SmartPoster
    • URLやSMS,電話番号などを格納するフォーマットです。
    • このフォーマットはTextのブロックとURIのブロックで構成されています。
  • GenericControl
    • NFCの通信を介して他のデバイス、タグに特定のアクション(アプリケーションの起動やモードの変更など)を要求する簡単な方法を提供します。
  • Signature
    • NDEFに署名を追加するためのフォーマットです。

カスタマー開発部 山下智樹

RTDとは

RTDとは

Record Type Definitionの略称で、NDEFのTNFにWell Known Typeが指定された際に、使用できるTYPEです。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds


2012年8月時点では以下の種類のフォーマットがあります。

  • Text
    • 複数の言語のテキストを効率的に格納するためのフォーマットです。
  • URI
    • URI(Uniform Resource Identifier)を効率的に格納するフォーマットです。
  • SmartPoster
    • URLやSMS,電話番号などを格納するフォーマットです。
    • このフォーマットはTextのブロックとURIのブロックで構成されています。
  • GenericControl
    • NFCの通信を介して他のデバイス、タグに特定のアクション(アプリケーションの起動やモードの変更など)を要求する簡単な方法を提供します。
  • Signature
    • NDEFに署名を追加するためのフォーマットです。

カスタマー開発部 山下智樹

2012年7月25日水曜日

作るもの

  • ホームアプリでNFCに反応するアプリを作る
  • タグの種類によって制限する

解説

AndroidManifest.xml

1. NFCのIntentFilterを定義する
タグの種類によって制限をかけたいので、TECH_DISCOVEREDというアクションを設定します。


2. 制限するタグの定義ファイルを設定する
タグを制限するにはxmlファイルを定義する必要があります。


/res/xml/nfc_tech_filter.xml

1. 制限するタグを定義する
NfcFのみ反応したい場合、以下のように定義します。

NfcFかつNdefが定義されている場合のみ反応したい場合、以下のように定義します。

NfcFとNfcA両方に反応したい場合、以下のように定義します。


HomeActivity.java

1. Intentを受信したらNFC-IDを表示する
NFCのIntentが呼ばれた時にNFC-IDを取得し、Toastに表示します。
Intentを受信するイベントはアプリが起動する場合と、バックスタックにいる場合があるので
onCreate(:Bundle):void とonNewIntent(:Intent):void の2ヶ所から呼び出しています。


実行イメージ

ソースコード

https://github.com/bs-nfc/NFCHandlerOnHome

カスタマー開発部 山下智樹

アプリを起動していなくてもNFCに反応するアプリを作る

作るもの

  • ホームアプリでNFCに反応するアプリを作る
  • タグの種類によって制限する

解説

AndroidManifest.xml

1. NFCのIntentFilterを定義する
タグの種類によって制限をかけたいので、TECH_DISCOVEREDというアクションを設定します。


2. 制限するタグの定義ファイルを設定する
タグを制限するにはxmlファイルを定義する必要があります。


/res/xml/nfc_tech_filter.xml

1. 制限するタグを定義する
NfcFのみ反応したい場合、以下のように定義します。

NfcFかつNdefが定義されている場合のみ反応したい場合、以下のように定義します。

NfcFとNfcA両方に反応したい場合、以下のように定義します。


HomeActivity.java

1. Intentを受信したらNFC-IDを表示する
NFCのIntentが呼ばれた時にNFC-IDを取得し、Toastに表示します。
Intentを受信するイベントはアプリが起動する場合と、バックスタックにいる場合があるので
onCreate(:Bundle):void とonNewIntent(:Intent):void の2ヶ所から呼び出しています。


実行イメージ

ソースコード

https://github.com/bs-nfc/NFCHandlerOnHome

カスタマー開発部 山下智樹

2012年7月20日金曜日

指定するタグの種類について

AndroidでNFC対応アプリを作成する場合、どのタグに反応するかを指定することができます。(ACTION_TAG_DISCOVEREDの場合必要ありません)
指定できるタグの種類は以下があります。

  • IsoDep
  • MifareClassic
  • MifareUltralight
  • Ndef
  • NdefFormattable
  • NfcA
  • NfcB
  • NfcF
  • NfcV

これらのクラスはandroid.nfc.techパッケージに定義されています。
それぞれを説明します。

  • IsoDep
    • ISO-DEP(ISO/IEC 14443-4 DataExchangeProtocol)にアクセスできる
    • NfcAもしくはNfcBである
  • MifareClassic
    • NXP MifareClassic
    • NfcAである
  • MifareUltralight
    • NXP MifareUltralight
    • NfcAである
  • Ndef
    • Ndefにフォーマットされているタグ
  • NdefFormattable
    • Ndefにフォーマットできるタグ
  • NfcA
    • ISO/IEC 14443 TypeA
    • Mifare系がこれに該当する
  • NfcB
    • ISO/IEC 14443 TypeB
    • 日本の公共団体発行のカード等が該当する
  • NfcF
    • FeliCa系がこれに該当する
  • NfcV
    • いわゆる近傍型と呼ばれるタグの種類
    • ISO/IEC 15693
    • ICODE
    • NFCチップによっては対応していない場合があります

具体的にどれなんだろう

どのようなタグが該当するか、私の手持ちのタグをかざしてみます。

Suica

  • NfcF


Taspo

  • NdefFormattable
  • MifareClassic
  • NfcA


運転免許証

  • IsoDep
  • NfcB


Edy

  • NfcF


Clipper Card

  • NdefFormattable
  • IsoDep
  • NfcA


Brother ラベルプリンター RL-700S

  • NfcV
  • Ndef


ネットカフェの会員証

  • NdefFormattable
  • MifareClassic
  • NfcA


名刺

  • NfcF
  • Ndef

(中にNDEFフォーマットにvCardを書き込んだFeliCa Liteを仕込んでいます)


OCTOPUS

  • NfcF


NFC QUEST Card

  • Ndef
  • NfcF

カスタマー開発部 山下智樹

Androidで指定するタグの種類について

指定するタグの種類について

AndroidでNFC対応アプリを作成する場合、どのタグに反応するかを指定することができます。(ACTION_TAG_DISCOVEREDの場合必要ありません)
指定できるタグの種類は以下があります。

  • IsoDep
  • MifareClassic
  • MifareUltralight
  • Ndef
  • NdefFormattable
  • NfcA
  • NfcB
  • NfcF
  • NfcV

これらのクラスはandroid.nfc.techパッケージに定義されています。
それぞれを説明します。

  • IsoDep
    • ISO-DEP(ISO/IEC 14443-4 DataExchangeProtocol)にアクセスできる
    • NfcAもしくはNfcBである
  • MifareClassic
    • NXP MifareClassic
    • NfcAである
  • MifareUltralight
    • NXP MifareUltralight
    • NfcAである
  • Ndef
    • Ndefにフォーマットされているタグ
  • NdefFormattable
    • Ndefにフォーマットできるタグ
  • NfcA
    • ISO/IEC 14443 TypeA
    • Mifare系がこれに該当する
  • NfcB
    • ISO/IEC 14443 TypeB
    • 日本の公共団体発行のカード等が該当する
  • NfcF
    • FeliCa系がこれに該当する
  • NfcV
    • いわゆる近傍型と呼ばれるタグの種類
    • ISO/IEC 15693
    • ICODE
    • NFCチップによっては対応していない場合があります

具体的にどれなんだろう

どのようなタグが該当するか、私の手持ちのタグをかざしてみます。

Suica

  • NfcF


Taspo

  • NdefFormattable
  • MifareClassic
  • NfcA


運転免許証

  • IsoDep
  • NfcB


Edy

  • NfcF


Clipper Card

  • NdefFormattable
  • IsoDep
  • NfcA


Brother ラベルプリンター RL-700S

  • NfcV
  • Ndef


ネットカフェの会員証

  • NdefFormattable
  • MifareClassic
  • NfcA


名刺

  • NfcF
  • Ndef

(中にNDEFフォーマットにvCardを書き込んだFeliCa Liteを仕込んでいます)


OCTOPUS

  • NfcF


NFC QUEST Card

  • Ndef
  • NfcF

カスタマー開発部 山下智樹

Related Posts Plugin for WordPress, Blogger...