2009-09-02[n年前へ]
■MacOSX版「ミニチュア写真作成ソフト(本城直季風ミニチュア写真作成ソフト」について
OpenCVと言えば、以前作った「ミニチュア写真作成ソフト(本城直季風ミニチュア写真作成ソフト)」のMacOSX版アプリケーション・インストール・スクリプト(当然アプリケーションも)が動かない、というメールを頂きました。
調べてみると、インストール・スクリプト中の、
/usr/bin/sudo cp -n src dstの -n オプションが原因でエラーが出ているようでした。この -n オプションは、ファイルコピー時の(もし同名ファイルが存在した場合のための)上書き禁止オプションです。通常のコマンドとして実行はできるので、このオプションを付けることで、なぜスクリプト実行時にエラーが出るのかは未だわかりません。ただ、エラー発生の直接の原因は、この-nオプションのようです。
とはいえ、この-nオプションを消すと、スクリプトは途中まで、システムにすでに入っている(私が添付したライブラリよりも新しい)ライブラリを消してしまうことになるので、システム・ライブラリを壊してしまうことになります。 そのため、このスクリプトから-nオプションを消すことは、絶対にできません・・・。
いつの間にか、Mac OSを使わなくっていました。しかも、恐ろしいことに、ソースやプロジェクトファイルやMac用の開発用資料をどこに置いたのかもすべて忘れてしまいました。OpenCVで遊ぶことを再開したこともありますし、もう一度、Mac OSX版を適当に書きなおして作ってみることにでもしましょう。(また、ソース・ファイルなどは後で置いておきます)
それまでは、WEBアプリ版の画像処理ソフトや、そういったツールで作った(下に張り付けたような)画像ジェネレータで、お茶を濁していて頂けますでしょうか・・・。
2009-11-24[n年前へ]
■「デバッグ用出力コードを書く」と自動的に「パーサー・スクリプト」を生成するツール
記憶容量が少ないハードウェアでのデバッグを目的として、外部に対して各種変数の内容を出力するプログラムを書く。そんな作業が行われている一方で、ログに出力された内容を解析するスクリプトを書く。…そんな超原始的デバッグ作業をしていると、「各種変数の内容を出力するプログラム」を書くと同時に、そのフォーマットに準じた「ログに出力された内容を解析するスクリプト」を生成するツールがないものだろうか?と思うことがある。
もちろん、このprintfを多用する「出力ログ頼りの超原始的デバッグ」を行う、というところにおそらく根本的な問題があるのだろうとは思うが、色々な制約がある中ではそんな状況に出会ったりする。そんなこんなで、「デバッグ出力」用コード」を書くと、自動的に「パーサー・スクリプト」が生成されるツールがあれば良いな、と思う。
といっても、それが開発環境に組み込まれているような何だかエライ(ここは関西弁の「えらい」で、東京弁の「偉い」ではない)・システムを使え、という答えでは何だか今一つ面白くない。もっと、気軽に・汎用的に使える、原始的な道具が欲しいのである。
そんな、「デバッグ用出力コードを書く」と自動的に「パーサー・スクリプト」を生成するシステムというものが、どこかに転がっていないものだろうか。
2009-12-23[n年前へ]
■続 rubyscript2exe.rb のエラー
Rubyスクリプトを実行形式(Windowsで言えば.EXE形式)にするrubyscript2exe.rbというスクリプトがある。このスクリプトは、ただ一つのファイルを(変換したいRubyスクリプトと同じディレクトリに置くだけで使うことができるので)実に便利で重宝する。
しかし、このrubyscript2exe.rbが動作しないことがある。そんなシチュエーションのひとつは以前書いた、rubyscript2exe.rbが"Frozen String error"を出力し動かない場合である。
そして、他にも、
uninitialized constant Gem::RubyGemsVersion (NameError)とか
Couldn't execute this command (rc=256):というメッセージが吐かれ、Rubyスクリプトを実行形式に変換することができないことがある。
そんな時は、DOSプロンプトから、
set RUYBOPT=とか、
set RUBYOPT=-Ke -rkconvとか、適当にRUBYOPTを設定してやると、rubyscript2exe.rbが動くようになる。つまり、
ruby rubyscript2exe.rb hoge.rbという具合で、hoge.rbをhoge.exeに変換することができるようになる。
2010-01-18[n年前へ]
■アプリケーション間を繋ぐRubyスクリプトを作るには?
Windows上で動くアプリケーション間を繋ぎたい、と思うことがあります。そんな例のひとつが、たとえば、こんなものになります。
それは、ハードウェアに繋がれたログファイルを定期的に吐き出すアプリケーションがあり、そのハードウェアの状況に応じて、他の制御アプリケーションを通じて他のハードウェアを制御したい、というような場合です。
そんな時、Rubyでこんな具合のスクリプトを組み、対応してしまうことがあります。hoge.txtは、「ハードウェアに繋がれたログファイルを定期的に吐き出すアプリケーション」が刻々出力を行っている「ログファイル」です。
require 'win32GuiTest' open("hoge.txt", "r") do |f| data=f.readlines[f.readlines.length-1] message=$1 if /^hoge:(.+)$/=~data @gui.sendKeys(message+'{ENTER}',1) endつまり、ログファイルの最後の行を読み込み、その出力結果を用いた何かの処理を行い、SendKeys(Win32guitest)で他の(異なる・あるいは同じハードウェアを制御するための)アプリケーションを操作する、という具合です。ここでは、単純のために、捜査対象ウィンドウを最前面に持ってきたり・フォーカスさせる、といった部分は端折っていますが、こんな「その場対応スクリプト」を書いてしまうことがあります。そんな風に対応せざるを得なかったりすることもあります。
ログファイルを出力できないアプリケーション1と、それと全く無関係の、他のアプリケーション2を繋ぐ場合には、どうすれば良いのでしょう。アプリケーション1のウィンドウを監視する・ウィンドウに対するメッセージをフックする、といったことをすれば良いのでしょうか・・・?
2010-01-22[n年前へ]
■Tera TermをRuby(や他の言語から)強引に操作する方法
「Tera Termマクロ活用入門(2):リモートマシンを自在に操作する」を読んだ。ちょうど、Tera Term のマクロ機能の使い方や、どのように使われているかを知りたかったところだったので、とても参考になった。
「Tera Term」はWindows 向けのターミナルエミュレータとして有名だが、マクロ機能を利用することでネットワーク経由でサーバーやネットワーク機器を自動制御するためのツールとしても利用できる。今回は、ネットワーク経由でLinuxサーバーを制御したり、Windowsのバッチファイルと連携させて使用する例を紹介しよう。
Tera Termの自動制御というと、「アプリケーション間を繋ぐRubyスクリプトを作るには?」で行ったテクニックを使っても、Tera Termを自動制御することができる。多量のテキストデータを高速にやりとりするような用途には使うことができないが、そうでない場合には、「アプリケーション間を繋ぐRubyスクリプトを作るには?」で書いた方法でRuby(や他の言語からも同様に)Tera Termを操作することができる。
Tera Termから、ログファイルを吐き出すようにしておいて(Fileメニュー→Logメニュー)、その内容を随時外部スクリプトから読み込んで、Tera Termを操作してやれば良い、という手順である。そうすれば、Tera Termの送受信内容に応じた動作をRuby(や他の言語)を使って行わせることができる。つまり、Tera termのマクロを自分が使い慣れているスクリプト言語などを使って書くことができる、というわけである。
「Tera Termのマクロではできそうにないこと」がある時には、そんな強引な外部言語を使った、強引マイウェイなTera Term操作(マクロ)テクニックもある。