libqr-0.1.4, php_qr-0.1.3 & pyqr-0.1.1

今回はOO的に書いてみました。finalizeし忘れてハマりました。。。
php_qrがバージョンアップ - Do You PHP はてな

サンプルを書いてくださってありがとうございます。やっぱりそこはハマりますよね...
ちなみに finalize 前に getSymbol/outputSymbol とか、finalize 後に addData/readData したり、その他、値がおかしいときは問答無用で QRException です。ドキュメント書かなきゃ...
次のエントリでは php_qr の OO 的な使い方を書きます。(きっぱり)


ところでまたバージョンアップしました。バグ修正と、Python 版を改良。

  • libqr-0.1.4
    • エラー処理関連の潜在的なバグを修正。
    • 漢字モードの検証をより厳密に。JIS X 0208 の領域のうち、未定義の文字を許可しないように修正。
  • php_qr-0.1.3
    • 同梱の libqr の更新のみ。
  • pyqr-0.1.1
    • qrcode() の第二引数として QRコードを書き込むファイルオブジェクトを指定できるように変更。ファイルオブジェクトが与えられた場合、返り値は QRコードシンボルデータではなくファイルオブジェクトに書き込まれたバイト数。この挙動は再考の余地あり。
    • 関数 mimetype(format) を追加。PHP 版の関数と同じ。
    • 変数 FMT_* の省略形を追加。(ASCII, JSON 等、出力形式を大文字・プリフィクスなしで)
    • 変数 EM_* の省略形を追加。(MN: 数字モード, MA: 英数字モード, M8: 8ビットバイトモード, MK: 漢字モード)
    • 状況に応じて異なる種類の例外を投げるように変更。通常起こりうる例外は TypeError, ValueError と IOError。


PHP/Python の両モジュールに libqr を静的に組み込んでいる理由は、単にその方が確認が楽だという他に、PHP バンドル版の GD と普通の(?) GD は API 的に似て非なるもので、両方がインストールされているときにシンボルの衝突を避けるためでもあります。
(gdFree() の実体が efree() だったり PNG にフィルタオプションがあったり GIF アニメに非対応だったり、他にも細かい違いがあります)


あと ZendEngine2 より Python の C API のほうがキレイな気がしました...
ZendEngine2 からも「がんばってる感」はひしひしと感じるのですが...