SlideShare a Scribd company logo
避けては通れないバイナリ地獄
  - NDEFってなんだろう -
  山下智樹 / tomorrowkey
もくじ

•   自己紹介

•   NDEFって何?

•   なぜNDEFが重要になる?

•   もっとNDEFを知ろう

•   ちょっとRTD

•   NDEF完成

•   さらなるNDEFの世界へ…
自己紹介
自己紹介



• NFCラボ運営委員
• 山下智樹 / @tomorrowkey
• 株式会社ブリリアントサービス
• バイナリ楽しい!
NDEFって何?
NDEFとは




• NFC Data Exchange Format
• NFCの通信で使用されるデータ・
 フォーマット
なぜNDEFが重要になる?
NFCのモード




• Reader/Writer Mode
• P2P Mode
• Card Emulation Mode
どんなモードでも
NDEFは避けて通れない
でも、バイナリまで
知ってる必要あるの?
各プラットフォームのNDEFについて

• Android SDK API Level 16
   •   一部サポート

   •   PAYLOADについては自作する必要あり

   •   作成はRTD-URIのみサポート、パースはURIに関連するものをサ
       ポート


• Windows(SDK for NFC Starter Kit Ver.1.0)
   •   コマンド発行までサポート

   •   NDEFはすべて自作する必要あり
探せばそのへんに
ライブラリ落ちてます
避けて通れます
趣味です
もっとNDEFを知ろう
NDEF Message


• NDEFには一つのNDEF Messageが含
 まれる

• NDEF Messageには1つ以上の
 NDEF Recordが含まれる



            構成
NDEF Record




    構成
FLAGS

•   MB(Message Begin)

    •   NDEF Messageの始まりを意味する

•   ME(Message End)

    •   NDEF Messageの終わりを意味する

•   CF(Chunked Flag)

    •   分割されたNDEF Messageの一部を意味する

•   SR(Short Record)

    •   255Byte以下のレコードを意味する

    •   PAYLOAD LENGTHが1Byteになる

•   IL(ID Length)

    •   IDが設定されていることを意味する
TNF (Type Name Format)

        •   TYPEフィールドの種類を表す

        •   3bitの値を設定する

            •   0x00 Empty

            •   0x01 NFC Forum well-known-type

            •   0x02 Media-type as define in RFC2046

            •   0x03 Absolute URI as define in RFC3986

            •   0x04 NFC Forum external type

            •   0x05 Unknown

            •   0x06 Unchanged

            •   0x07 Reserved
TYPE LENGTH




  •   符号なし8bit整数

  •   TYPEフィールドの長さを指定する
PAYLOAD LENGTH




    •   SRの値によって長さが変化する

    •   符号なしビックエンディアン

    •   PAYLOADの長さを指定する
ID LENGTH




 •   ILの値によって無い場合がある

 •   符号なし8bit整数

 •   IDの長さを指定する
TYPE


•   TYPE LENGTHによって長さが変わる

•   TNFの値によって設定値が変わる

•   0x01 well-known typesだった場合

    •   T ... Text Record

    •   U ... URI Record

    •   Sp ... Smart Poster

    •   ...
ID




•   ILの値によって無い場合がある

•   ID LENGTHによって長さが変わる

•   IDを設定することができる
PAYLOAD



 •   PAYLOAD LENGTHの値によって長さが
     変化する

 •   TNFとTYPEの値によって内容が変わる

 •   well-known typesの仕様書はNFC
     Forumに定義されています
ちょっとRTD
RTD


• Record Type Definition
• Typeでwell-known-type(0x01)を指定
 した場合に使用されるフォーマット

• NFC Forumで仕様書を見ることができ
 ます。
  •   http://www.nfc-forum.org/specs/spec_list/#rtds
RTDの種類

• Text
• URI
• SmartPoster
• Generic Control
• Handover Request / Select / Carrier
• Signature
Textだけ紹介




   構成
Encode




• テキストの文字コードを表す
• 0 ... UTF-8
• 1 ... UTF-16
RFU




• Reserved For Future Use
Language Code Length




• 言語コードの長さを指定する
Language Code




•   言語コードを表す

•   Language Code Lengthによって長さが変わる

•   ISO/IANA

    •   en ... English

    •   en-us ... English(United States)

    •   ja ... Japanese
Actual Text




•   実際のテキスト

•   PAYLOADの残り部分

•   Encodeで指定されたエンコードを使用する
NDEF完成!
Hello, World.と書かれたNDEF

                    •   FLAGS

                        •   Message Begin : 1

                        •   Message End : 1

                        •   Chunked Flag : 0

D1   01   10   54       •   Short Record : 1


02   65   6E   48       •   ID Length : 0

                    •   TNF : 01(well-known types)
65   6C   6C   6F   •   TYPE LENGTH : 1

2C   20   57   6F   •   PAYLOAD LENGTH : 10


72   6C   64   2E   •   TYPE : T

                    •   PAYLOAD

                        •   Encoding : utf-8

                        •   Language Code : en

                        •   Actual Text : Hello, World.
さらなるNDEFの世界へ
まだ始まったばかり




• 紹介したフォーマットはごく一部
• well-known-typeだけでも知っておく
 べき
おわり

More Related Content

What's hot (20)

DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話
terurou
 
Type 4 andefを自力で読む
Type 4 andefを自力で読むType 4 andefを自力で読む
Type 4 andefを自力で読む
Hiroshi Tanaka
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況
Isao Soma
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
 
凝集度と責務
凝集度と責務凝集度と責務
凝集度と責務
Toshinori Chiba
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
 
月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)
Hirokuma Ueno
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
Naohiro Fujie
 
Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオン
Tomoki YAMASHITA
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
 
チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019
cocodrips
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
 
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
Sho FUJIMURA
 
Ndefってなんだろう
NdefってなんだろうNdefってなんだろう
Ndefってなんだろう
Tomoki YAMASHITA
 
コンピュテーション式ハンズオン
コンピュテーション式ハンズオンコンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
 
絵を読む技術 Pythonによるイラスト解析
絵を読む技術 Pythonによるイラスト解析絵を読む技術 Pythonによるイラスト解析
絵を読む技術 Pythonによるイラスト解析
Hirosaji
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
DataGridを自前実装する話
DataGridを自前実装する話DataGridを自前実装する話
DataGridを自前実装する話
terurou
 
Type 4 andefを自力で読む
Type 4 andefを自力で読むType 4 andefを自力で読む
Type 4 andefを自力で読む
Hiroshi Tanaka
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況
Isao Soma
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)Tensor flow usergroup 2016 (公開版)
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
 
月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)
Hirokuma Ueno
 
MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要MicrosoftのDID/VC実装概要
MicrosoftのDID/VC実装概要
Naohiro Fujie
 
Android NFCアプリハンズオン
Android NFCアプリハンズオンAndroid NFCアプリハンズオン
Android NFCアプリハンズオン
Tomoki YAMASHITA
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
trmr
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
torisoup
 
チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019チームメイトのためにdocstringを書こう! pyconjp2019
チームメイトのためにdocstringを書こう! pyconjp2019
cocodrips
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
 
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
福岡大学における公開用NTPサービス事例(LACNOG2019発表資料日本語版)
Sho FUJIMURA
 
Ndefってなんだろう
NdefってなんだろうNdefってなんだろう
Ndefってなんだろう
Tomoki YAMASHITA
 
コンピュテーション式ハンズオン
コンピュテーション式ハンズオンコンピュテーション式ハンズオン
コンピュテーション式ハンズオン
ssuserb6e6d5
 
絵を読む技術 Pythonによるイラスト解析
絵を読む技術 Pythonによるイラスト解析絵を読む技術 Pythonによるイラスト解析
絵を読む技術 Pythonによるイラスト解析
Hirosaji
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 

Similar to 避けては通れないバイナリ地獄 - NDEFってなんだろう - (20)

月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号
Hirokuma Ueno
 
月刊NDEF 2013年1月号
月刊NDEF 2013年1月号月刊NDEF 2013年1月号
月刊NDEF 2013年1月号
Hirokuma Ueno
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
Tomoki YAMASHITA
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もう
treby
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
treby
 
Nfcのアプリつくってみる
NfcのアプリつくってみるNfcのアプリつくってみる
Nfcのアプリつくってみる
meco300
 
NDEF Writerを使ってみよう
NDEF Writerを使ってみようNDEF Writerを使ってみよう
NDEF Writerを使ってみよう
Hirokuma Ueno
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
Kouta Imanaka
 
NFC キャンドル
NFC キャンドルNFC キャンドル
NFC キャンドル
treby
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
 
月刊NDEF 2013年8月号
月刊NDEF 2013年8月号月刊NDEF 2013年8月号
月刊NDEF 2013年8月号
Hirokuma Ueno
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 
Masafumi Terazono
 
SNEPは大変だった
SNEPは大変だったSNEPは大変だった
SNEPは大変だった
Hirokuma Ueno
 
福岡NFC勉強会
福岡NFC勉強会福岡NFC勉強会
福岡NFC勉強会
treby
 
私とNFC(歴史編)
私とNFC(歴史編)私とNFC(歴史編)
私とNFC(歴史編)
Hirokuma Ueno
 
NFC
NFCNFC
NFC
Yoshikazu Torimoto
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号
Hirokuma Ueno
 
月刊NDEF 2013年1月号
月刊NDEF 2013年1月号月刊NDEF 2013年1月号
月刊NDEF 2013年1月号
Hirokuma Ueno
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
Tomoki YAMASHITA
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もう
treby
 
URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!URIやTEXTをBEAMするアプリを作ったよ!
URIやTEXTをBEAMするアプリを作ったよ!
treby
 
Nfcのアプリつくってみる
NfcのアプリつくってみるNfcのアプリつくってみる
Nfcのアプリつくってみる
meco300
 
NDEF Writerを使ってみよう
NDEF Writerを使ってみようNDEF Writerを使ってみよう
NDEF Writerを使ってみよう
Hirokuma Ueno
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
Kouta Imanaka
 
NFC キャンドル
NFC キャンドルNFC キャンドル
NFC キャンドル
treby
 
ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
 
月刊NDEF 2013年8月号
月刊NDEF 2013年8月号月刊NDEF 2013年8月号
月刊NDEF 2013年8月号
Hirokuma Ueno
 
関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 関西支部 第二回 NFCLab勉強会 
関西支部 第二回 NFCLab勉強会 
Masafumi Terazono
 
SNEPは大変だった
SNEPは大変だったSNEPは大変だった
SNEPは大変だった
Hirokuma Ueno
 
福岡NFC勉強会
福岡NFC勉強会福岡NFC勉強会
福岡NFC勉強会
treby
 
私とNFC(歴史編)
私とNFC(歴史編)私とNFC(歴史編)
私とNFC(歴史編)
Hirokuma Ueno
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 

More from Tomoki YAMASHITA (8)

Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android development
Tomoki YAMASHITA
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなく
Tomoki YAMASHITA
 
UUID
UUIDUUID
UUID
Tomoki YAMASHITA
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみた
Tomoki YAMASHITA
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
Tomoki YAMASHITA
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてます
Tomoki YAMASHITA
 
Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android development
Tomoki YAMASHITA
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなく
Tomoki YAMASHITA
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみた
Tomoki YAMASHITA
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
Tomoki YAMASHITA
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてます
Tomoki YAMASHITA
 

避けては通れないバイナリ地獄 - NDEFってなんだろう -

Editor's Notes