Upgrade to Pro — share decks privately, control downloads, hide ads and more …

とあるライブラリをGoに移植した結果……

MakKi
November 13, 2018
4.3k

 とあるライブラリをGoに移植した結果……

golang.tokyo #19 LT

MakKi

November 13, 2018
Tweet

More Decks by MakKi

Transcript

  1. 移植後の私 デンソーウェーブ BCH符号 JIS X 0510 ISO/IEC 18004 8つのマスクパターン GB2312

    バージョン1〜40 ガロア拡大体 Alphanumeric Mode ReedSolomon符号 ISO-8859-1 構造的連接 þ(ソーン) AIM Inc. Position Pattern 拡張チャネル解釈 中华人民共和国国家标准
  2. 移植したライブラリ ZXing (zebra crossing) • https://github.com/zxing/zxing • QRコードとかを読んだり書いたりするライブラリ • 多くのフォーマットに対応

    ◦ 2次元: QRCode, DataMatrix, PDF417, … ◦ 1次元: UPC/EAN, Code39/93/128, ITF, … • Java製 ◦ Androidアプリもあるよ
  3. 移植した理由 • QRコードを読むコマンドがほしい ◦ 探してみるとあんまり無い • そもそも読み取るライブラリ少ない ◦ 生成する方はたくさんある •

    せっかくなのでGoで書きたい ◦ 気持ちが大事 • いい感じのライブラリを移植しよう ◦ ZXingに目をつける
  4. 移植先: gozxing https://github.com/makiuchi-d/gozxing • image.Imageから読み取り可 • Pure Go • QRCode,

    DataMatrix, UPC-A/E, EAN-8/13, Code39/93/(128) ◦ 他は順次移植作業中 bmp, _ := gozxing.NewBinaryBitmapFromImage(img) result, _ := qrcode.NewQRCodeReader().Decode(bmp, nil) fmt.Println(result.GetText())
  5. 移植しただけでは  こうはならない  BCH符号 JIS X 0510 ISO/IEC 18004 8つのマスクパターン GB2312

    バージョン1〜40 ガロア拡大体 Alphanumeric Mode ReedSolomon符号 ISO-8859-1 構造的連接 þ(ソーン) AIM Inc. Position Pattern 拡張チャネル解釈 中华人民共和国国家标准
  6. 学習以外の効果 • 一般的なテストの効果 ◦ 単純ミスの防止 ▪ 書き間違い、言語仕様の違い ◦ リファクタや修正も安心 •

    元のライブラリのバグも見つかる ◦ これまで8本のPRがマージ済み ◦ さらに1本PR準備中
  7. gozxingのカバレッジ • 11/12現在 98.35% 右図について • CodecovのSunburst • 緑=カバレッジ100% ◦

    赤に近いほどカバレッジが低い オレンジの場所はReedSolomonDecoder まだ理解が不十分なことがわかる https://codecov.io/gh/makiuchi-d/gozxing