« iSight でバーコードを読む | トップページ | RubyCocoa で非定型プロトコルの objc_export を自動的に »

2007.02.15

コマンドラインツール bcscan

masuidrive さんのコメントに触発されてつくってみた。とりあえず動くレベルはあっさり終了。

「起動する -> バーコード読む -> 標準出力に値を出力」が可能。

ダウンロード

ソースのコンパイルには、RubyCocoa が必要。バイナリは RubyCocoa 0.5.0 を同梱しているので、RubyCocoa を別途インストールする必要はない。

使いかた

実装は HMDT の Coral 方式。アプリケーションの bcscan.app とそのラッパーシェルスクリプト bcscan の2つで構成される。

  • bcscan.app - /Applications/ にコピー
  • bcscan - 実行可能なパス ${HOME}/bin や /usr/local/bin にコピー

bcscan.app のインストール位置が /Applications でないときは、シェルスクリプト bcscan をそれに合わせて変更すること。

ちなみに RubyCocoa 側のコードはこんだけ。

 require 'osx/cocoa'
 OSX.ns_import :MyBarcodeScanner
 
 class AppDelegate < OSX::NSObject
 
   def awakeFromNib
     scanner = OSX::MyBarcodeScanner.sharedInstance
     scanner.setStaysOpen(false)
     scanner.setDelegate(self)
     scanner.setMirrored(false)
     # start scan
     scanner.scanForBarcodeWindow(nil)
     OSX::NSApplication.sharedApplication.activateIgnoringOtherApps(true)
   end
 
   # MyBarcodeScanner delegate methods
   def gotBarcode(barcode)
     $stdout.puts barcode.to_s
     OSX::NSApplication.sharedApplication.terminate(self)
   end
 
 end

これしかないので、C/Objective-C で書いてもよかったのだけれど、今後コマンドラインオプションを追加しようと思ったときに getopt(3) より Ruby の optparse のほうがやりやすいかなあという理由で Ruby/RubyCocoa を選択。

今後の予定

  • exit status をきちんと(中止時などは 0 以外に)
  • オプションの追加
    • 読み込み値の検証(指定された桁数や形式の値を読み込むまで終了しない)
    • タイムアウトの指定
  • UI の改善(優先度低。めんどくさいから)

あんまりがんばるつもりはないので、興味のある人の開発引き取りを歓迎します。

|

« iSight でバーコードを読む | トップページ | RubyCocoa で非定型プロトコルの objc_export を自動的に »