SlideShare a Scribd company logo
1 of 19
Download to read offline
2次元と仲良くしよう
                と思いました
               NFCLab 8月定例会   下川 敬弘




12年8月25日土曜日
自己紹介

              株式会社ソニックムーブ(神楽坂)

              フロントエンド エンジニア

              NFCLab, JAG, JAG   城支部

              @androhi



12年8月25日土曜日
アプリ作ってみてます




12年8月25日土曜日
概要


              NDEFメッセージ   QRコード

              Library : ZXing 2.0




12年8月25日土曜日
想定する利用シーン

              A「このポスターにタッチすると、スマートフォンで何か見られるらしいぞ。」


              B「どれどれ…。?。何も起きないけど。」


              C「あっ!おサイフケータイには、順次対応予定ですって書いてある!」


              D「私のも、おサイフケータイだからダメだわ。」


              あなた「まかせろっ!(」・ω・)」うー!(/・ω・)/にゃー!」


              ABCD「キャー!ステキー!」




12年8月25日土曜日
勉強になったコード




12年8月25日土曜日
NDEFメッセージ読み込み
      private String getUrl(NdefMessage msg) {

              // NDEFレコードからTNFを取り出す
              NdefRecord[] records = msg.getRecords();
              short tnf = records[0].getTnf();

              if (tnf == NdefRecord.TNF_WELL_KNOWN) {
                  return parseWellKnown(records[0]);
              } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) {
                  return parseAbsolute(records[0]);
              }

              throw new IllegalArgumentException("Unknown TNF " + tnf);
      }



12年8月25日土曜日
TNF = Type Name Format

              TNF_ABSOLUTE_URI

                URIをベースとしたタイプフィールド


              TNF_WELL_KNOWN

                設定したRTDに応じて、振る舞いが変わる



12年8月25日土曜日
NDEFレコード読み込み
     private String parseAbsolute(NdefRecord record) {
         byte[] payload = record.getPayload();
         return new String(payload, Charset.forName("UTF-8"));
     }

     private String parseWellKnown(NdefRecord record) {
         // RTD Uriかチェック
         if (Arrays.equals(record.getType(), NdefRecord.RTD_URI)) {
             byte[] payload = record.getPayload();
             String prefix = prefixMap.get(payload[0]);
             byte[] uriData = Arrays.copyOfRange(payload, 1, payload.length);
             String uri = new String(uriData, Charset.forName("UTF-8"));
             return prefix.concat(uri);
         }
         throw new IllegalArgumentException("Not Support RTD");
     }




12年8月25日土曜日
RTD = Record Type Definition

              RTD_URI

                URIをベースとしたPayload




12年8月25日土曜日
Recordsマッピング
          Name    Offset     Size       Value            Description

                                         URI         The URI identifier
     Identifier
                    0       1 byte    identifier    code, as specified in
        code
                                         code             Table 3.

                                                    The rest of the URI,
          URI                                       or the entire URI (if
                    1          N     UTF-8 string
         field                                        identifier code is
                                                            0x00).



                           引用:NFC URI RTD Technical Specification
                           http://www.nfc-forum.org/specs/spec_list/#rtds


12年8月25日土曜日
URI identifier code
     Decimal   Hex             Protocol            Decimal        Hex         Protocol

        0      0x00              N/A                  18         0x12         rtsp://

        1      0x01          http://www.              19         0x13           urn:

        2      0x02          https://www.             20         0x14           pop:

        3      0x03            http://                21         0x15           sip:

        4      0x04            https://               22         0x16          sips:

        5      0x05              tel:                 23         0x17          tftp:

        6      0x06            mailto:                24         0x18         btspp://

        7      0x07   ftp://anonymous:anonymous@      25         0x19        btl2cap://

        8      0x08           ftp://ftp.              26         0x1A        btgoep://

        9      0x09            ftps://                27         0x1B        tcpobex://

        10     0x0A            sftp://                28         0x1C       irdaobex://

        11     0x0B             smb://                29         0x1D         file://

        12     0x0C             nfs://                30         0x1E       urn:epc:id:

        13     0x0D             ftp://                31         0x1F       urn:epc:tag:

        14     0x0E             dav://                32         0x20       urn:epc:pat:

        15     0x0F             news:                 33         0x21       urn:epc:raw:

        16     0x10           telnet://               34         0x22         urn:epc:

        17     0x11             imap:                 35         0x23         urn:nfc:

                                                   36...255   0x24...0xFF       RFU


12年8月25日土曜日
private String getUrl(NdefMessage msg) {

              // NDEFレコードからTNFを取り出す
              NdefRecord[] records = msg.getRecords();
              short tnf = records[0].getTnf();

              if (tnf == NdefRecord.TNF_WELL_KNOWN) {
                  // URLを取り出す
                  return parseWellKnown(records[0]);
              } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) {
                  // URLを取り出す
                  return parseAbsolute(records[0]);
              }

              throw new IllegalArgumentException("Unknown TNF " + tnf);
      }




12年8月25日土曜日
QRコード生成は、以下を参考にしました。


               ブログ:明日の


               ZXingを使ってQRコードを表示する


               http://d.hatena.ne.jp/tomorrowkey/
               20091114/1258206013




12年8月25日土曜日
public Bitmap createQRCodeByZxing(String contents, int size) throws WriterException {
        QRCodeWriter qrWriter = new QRCodeWriter();
        // 異なる型の値を入れるためgenericは使えない
         @SuppressWarnings("rawtypes")
         Hashtable encodeHint = new Hashtable();
         encodeHint.put(EncodeHintType.CHARACTER_SET, "shiftjis");
         // エラー修復レベルを指定
        encodeHint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        BitMatrix qrCodeData = qrWriter.encode(contents, BarcodeFormat.QR_CODE, size, size,
encodeHint);
        // QRコードのbitmap画像を生成
         Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
         bitmap.eraseColor(Color.argb(255, 255, 255, 255));
         for(int x = 0; x < qrCodeData.getWidth(); x++) {
             for(int y = 0; y < qrCodeData.getHeight(); y++) {
                 if(qrCodeData.get(x, y)) {
                     // trueはBlack
                      bitmap.setPixel(x, y, Color.BLACK);
                  } else {
                      // falseはWhite
                      bitmap.setPixel(x, y, Color.WHITE);
                  }
              }
         }

         return bitmap;
    }


12年8月25日土曜日
QRコード生成のイメージ
              T   F   T   T   F   T   T   F   F

              F   F   F   T   T   T   F   T   F

              T   T   F   T   F   T   T   F   T

              T   F   T   T   F   T   F   F   F

              F   F   T   F   F   F   T   T   T

              F   T   T   F   F   F   T   T   F

              F   F   T   T   F   T   F   F   F

              T   T   F   F   T   T   F   T   F

              F   T   T   T   F   F   T   F   T




12年8月25日土曜日
まとめ1
              NDEFメッセージ

               仕様を理解する

               TNF = Type Name Format

               RTD = Record Type Definition




12年8月25日土曜日
まとめ2
              QRコード

               ZXing超便利(遅っ)




12年8月25日土曜日
ご清聴
              ありがとうございました



12年8月25日土曜日

More Related Content

What's hot

ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体digitalghost
 
ネイティブコードを語る
ネイティブコードを語るネイティブコードを語る
ネイティブコードを語るKenji Imasaki
 
Fftw誰得ガイド
Fftw誰得ガイドFftw誰得ガイド
Fftw誰得ガイドchunjp
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)Shin-ya Koga
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-treeShin-ya Koga
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32kikairoya
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿MITSUNARI Shigeo
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料KLab勉強会#6 発表資料
KLab勉強会#6 発表資料Suguru Oho
 
乱数調整概説
乱数調整概説乱数調整概説
乱数調整概説Blastoise_X
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介Takehiko YOSHIDA
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 

What's hot (20)

ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
ネイティブコードを語る
ネイティブコードを語るネイティブコードを語る
ネイティブコードを語る
 
Fftw誰得ガイド
Fftw誰得ガイドFftw誰得ガイド
Fftw誰得ガイド
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
 
2021 10-12.linx device-tree
2021 10-12.linx device-tree2021 10-12.linx device-tree
2021 10-12.linx device-tree
 
SEH on mingw32
SEH on mingw32SEH on mingw32
SEH on mingw32
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
KLab勉強会#6 発表資料
KLab勉強会#6 発表資料KLab勉強会#6 発表資料
KLab勉強会#6 発表資料
 
乱数調整概説
乱数調整概説乱数調整概説
乱数調整概説
 
Fbx解説 (1 構文編) (1)
Fbx解説 (1  構文編) (1)Fbx解説 (1  構文編) (1)
Fbx解説 (1 構文編) (1)
 
Bluetooth通信の 仕組みと活用法紹介
Bluetooth通信の仕組みと活用法紹介Bluetooth通信の仕組みと活用法紹介
Bluetooth通信の 仕組みと活用法紹介
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
コルーチンを使おう
コルーチンを使おうコルーチンを使おう
コルーチンを使おう
 

Viewers also liked

Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみたTomoki YAMASHITA
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてますTomoki YAMASHITA
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-Tomoki YAMASHITA
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくTomoki YAMASHITA
 
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタ
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタNfc(Jelly Bean)利用アプリ紹介+関連技術ネタ
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタKenichi Kambara
 
UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-Natsuhiko Suwamura
 

Viewers also liked (9)

Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみた
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてます
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなく
 
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタ
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタNfc(Jelly Bean)利用アプリ紹介+関連技術ネタ
Nfc(Jelly Bean)利用アプリ紹介+関連技術ネタ
 
NFC app launcher
NFC app launcherNFC app launcher
NFC app launcher
 
What is androider
What is androiderWhat is androider
What is androider
 
UUID
UUIDUUID
UUID
 
UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-UIDのことわかってますか? -フォーマット編-
UIDのことわかってますか? -フォーマット編-
 

Similar to Nfc lab8月定例会

ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPSハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPSFFRI, Inc.
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性Junichi Akita
 
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Shinichi Hirauchi
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409稔 小林
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門mangantempy
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
Cortex-M0プロセッサから自作して Lチカをやってみた
Cortex-M0プロセッサから自作してLチカをやってみたCortex-M0プロセッサから自作してLチカをやってみた
Cortex-M0プロセッサから自作して LチカをやってみたJunichi Akita
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティFFRI, Inc.
 
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Junichi Akita
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdfTakuya Kubo
 
自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみたJunichi Akita
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜Yusuke Naka
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 

Similar to Nfc lab8月定例会 (20)

ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPSハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
 
自作LSIコミュニティの可能性
自作LSIコミュニティの可能性自作LSIコミュニティの可能性
自作LSIコミュニティの可能性
 
Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
Slide
SlideSlide
Slide
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
0622
06220622
0622
 
サーバ異常検知入門
サーバ異常検知入門サーバ異常検知入門
サーバ異常検知入門
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
Cortex-M0プロセッサから自作して Lチカをやってみた
Cortex-M0プロセッサから自作してLチカをやってみたCortex-M0プロセッサから自作してLチカをやってみた
Cortex-M0プロセッサから自作して Lチカをやってみた
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティ
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdf
 
自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた自作RISC-VチップでLチカをやってみた
自作RISC-VチップでLチカをやってみた
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
実践 WebRTC 〜最新事例と開発ノウハウの紹介〜
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 

Recently uploaded

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Nfc lab8月定例会

  • 1. 2次元と仲良くしよう と思いました NFCLab 8月定例会 下川 敬弘 12年8月25日土曜日
  • 2. 自己紹介 株式会社ソニックムーブ(神楽坂) フロントエンド エンジニア NFCLab, JAG, JAG 城支部 @androhi 12年8月25日土曜日
  • 4. 概要 NDEFメッセージ   QRコード Library : ZXing 2.0 12年8月25日土曜日
  • 5. 想定する利用シーン A「このポスターにタッチすると、スマートフォンで何か見られるらしいぞ。」 B「どれどれ…。?。何も起きないけど。」 C「あっ!おサイフケータイには、順次対応予定ですって書いてある!」 D「私のも、おサイフケータイだからダメだわ。」 あなた「まかせろっ!(」・ω・)」うー!(/・ω・)/にゃー!」 ABCD「キャー!ステキー!」 12年8月25日土曜日
  • 7. NDEFメッセージ読み込み private String getUrl(NdefMessage msg) { // NDEFレコードからTNFを取り出す NdefRecord[] records = msg.getRecords(); short tnf = records[0].getTnf(); if (tnf == NdefRecord.TNF_WELL_KNOWN) { return parseWellKnown(records[0]); } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) { return parseAbsolute(records[0]); } throw new IllegalArgumentException("Unknown TNF " + tnf); } 12年8月25日土曜日
  • 8. TNF = Type Name Format TNF_ABSOLUTE_URI URIをベースとしたタイプフィールド TNF_WELL_KNOWN 設定したRTDに応じて、振る舞いが変わる 12年8月25日土曜日
  • 9. NDEFレコード読み込み private String parseAbsolute(NdefRecord record) { byte[] payload = record.getPayload(); return new String(payload, Charset.forName("UTF-8")); } private String parseWellKnown(NdefRecord record) { // RTD Uriかチェック if (Arrays.equals(record.getType(), NdefRecord.RTD_URI)) { byte[] payload = record.getPayload(); String prefix = prefixMap.get(payload[0]); byte[] uriData = Arrays.copyOfRange(payload, 1, payload.length); String uri = new String(uriData, Charset.forName("UTF-8")); return prefix.concat(uri); } throw new IllegalArgumentException("Not Support RTD"); } 12年8月25日土曜日
  • 10. RTD = Record Type Definition RTD_URI URIをベースとしたPayload 12年8月25日土曜日
  • 11. Recordsマッピング Name Offset Size Value Description URI The URI identifier Identifier 0 1 byte identifier code, as specified in code code Table 3. The rest of the URI, URI or the entire URI (if 1 N UTF-8 string field identifier code is 0x00). 引用:NFC URI RTD Technical Specification http://www.nfc-forum.org/specs/spec_list/#rtds 12年8月25日土曜日
  • 12. URI identifier code Decimal Hex Protocol Decimal Hex Protocol 0 0x00 N/A 18 0x12 rtsp:// 1 0x01 http://www. 19 0x13 urn: 2 0x02 https://www. 20 0x14 pop: 3 0x03 http:// 21 0x15 sip: 4 0x04 https:// 22 0x16 sips: 5 0x05 tel: 23 0x17 tftp: 6 0x06 mailto: 24 0x18 btspp:// 7 0x07 ftp://anonymous:anonymous@ 25 0x19 btl2cap:// 8 0x08 ftp://ftp. 26 0x1A btgoep:// 9 0x09 ftps:// 27 0x1B tcpobex:// 10 0x0A sftp:// 28 0x1C irdaobex:// 11 0x0B smb:// 29 0x1D file:// 12 0x0C nfs:// 30 0x1E urn:epc:id: 13 0x0D ftp:// 31 0x1F urn:epc:tag: 14 0x0E dav:// 32 0x20 urn:epc:pat: 15 0x0F news: 33 0x21 urn:epc:raw: 16 0x10 telnet:// 34 0x22 urn:epc: 17 0x11 imap: 35 0x23 urn:nfc: 36...255 0x24...0xFF RFU 12年8月25日土曜日
  • 13. private String getUrl(NdefMessage msg) { // NDEFレコードからTNFを取り出す NdefRecord[] records = msg.getRecords(); short tnf = records[0].getTnf(); if (tnf == NdefRecord.TNF_WELL_KNOWN) { // URLを取り出す return parseWellKnown(records[0]); } else if (tnf == NdefRecord.TNF_ABSOLUTE_URI) { // URLを取り出す return parseAbsolute(records[0]); } throw new IllegalArgumentException("Unknown TNF " + tnf); } 12年8月25日土曜日
  • 14. QRコード生成は、以下を参考にしました。 ブログ:明日の ZXingを使ってQRコードを表示する http://d.hatena.ne.jp/tomorrowkey/ 20091114/1258206013 12年8月25日土曜日
  • 15. public Bitmap createQRCodeByZxing(String contents, int size) throws WriterException { QRCodeWriter qrWriter = new QRCodeWriter(); // 異なる型の値を入れるためgenericは使えない @SuppressWarnings("rawtypes") Hashtable encodeHint = new Hashtable(); encodeHint.put(EncodeHintType.CHARACTER_SET, "shiftjis"); // エラー修復レベルを指定 encodeHint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L); BitMatrix qrCodeData = qrWriter.encode(contents, BarcodeFormat.QR_CODE, size, size, encodeHint); // QRコードのbitmap画像を生成 Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); bitmap.eraseColor(Color.argb(255, 255, 255, 255)); for(int x = 0; x < qrCodeData.getWidth(); x++) { for(int y = 0; y < qrCodeData.getHeight(); y++) { if(qrCodeData.get(x, y)) { // trueはBlack bitmap.setPixel(x, y, Color.BLACK); } else { // falseはWhite bitmap.setPixel(x, y, Color.WHITE); } } } return bitmap; } 12年8月25日土曜日
  • 16. QRコード生成のイメージ T F T T F T T F F F F F T T T F T F T T F T F T T F T T F T T F T F F F F F T F F F T T T F T T F F F T T F F F T T F T F F F T T F F T T F T F F T T T F F T F T 12年8月25日土曜日
  • 17. まとめ1 NDEFメッセージ 仕様を理解する TNF = Type Name Format RTD = Record Type Definition 12年8月25日土曜日
  • 18. まとめ2 QRコード ZXing超便利(遅っ) 12年8月25日土曜日
  • 19. ご清聴 ありがとうございました 12年8月25日土曜日