きりかノート 3冊め

おあそびプログラミング

コマンドラインツール 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 の改善(優先度低。めんどくさいから)

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