2008-07-31[n年前へ]
■「計測・解析ソフトのハック」が実験系技術者の一番のLifeHack…かもしれない。
「計測・解析ソフトウェア/ハードウェアのハック」が実験系技術者の一番のLifeHack…かもしれない、と思っています。それを逆に言うならば、実験系技術者が費やす多くの時間を、計測・解析ソフトが消費しているということになります。つまり、一番時間を消費している部分の高速化をすることが、全体の高速化に効果的だろう、ということです。
そんなこんなで、何を今更…という、Perlで「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できることが多いから、です。しかも、計測・解析ソフトウェア/ハードウェアを外注したりすると、時間や費用が無視できないほどかかったりするわけで、そういったシステムを簡単に作ることができるということを知っていると、結構便利であるわけです。
たとえば、RBIOシリーズのような汎用(入)出力ボードは、お小遣い程度の価格で「シリアル通信経由でのハードウェア制御をする」ことが簡単にできます。それは、「計測ハードウェアのハック」がとても簡単にできる、ということです。
そして、Windows上(あるいはWindows上で動くソフトウェア)の作業を”勝手に”プログラミングすることができれば、「計測・解析ソフトウェアのハック」も簡単にすることができます。
というわけで、「シリアル通信とユーザインターフェース自動制御」ができれば、「計測・解析ソフトウェア/ハードウェアのハック」を簡単に実現することができるわけです。
とりあえず、たとえば、Perlで「シリアル通信とユーザインターフェース自動制御」を使うには、Win32::SerialPort と Win32::GuiTest という二つのライブラリが必要です。それらのインストールは、コマンドプロンプトから、
ppm install Win32-SerialPortという風に行うことができます。もっとも、インターネットに直接アクセスすることができない Proxy 内部からであれば、
ppm install http://www.bribes.org/perl/ppm/Win32-GuiTest.ppd
set HTTP_proxy=http://proxy.hoge.com:8080といったような、Proxy対策の環境変数設定をコマンドプロンプトから前もって行っておくことが必要になります。
set HTTP_proxy_user=hogehoge
set HTTP_proxy_pass=hogehoge
あとは、シリアルポート通信ようのConfigファイルを作る、プログラムを書く、ということだけです。たとえば、
!c:\perl\bin\perlといったライブラリを読み込む宣言をした後に、ソフトウェアのユーザインターフェース周りは、
use Win32::SerialPort;
use Win32::GuiTest qw( FindWindowLike GetWindowText SetForegroundWindow MouseMoveAbsPix SendMouse GetWindowRect SendKeys);
MouseMoveAbsPix(320, 160);というような感じで、マウスやボタンやキーボードを自動で動かすことができます。また、ハードウェア周りは、
SendMouse("{LEFTCLICK}");
SendKeys($fileName);
SendKeys("{ENTER}");
my $conf_file="serialport.conf";という感じで*、スイッチやモータを適当にシリアル通信(とRB-IOのようなお手軽I/Fボードで)制御すれば良い、という具合です。午前中に秋葉原に行って部品を買って、午後にスクリプトを2,30行書けば、それで自動計測・制御システムのできあがり、というわけです。
tie *PORT, 'Win32::SerialPort',$conf_file or die; pushSwitch(0);
close PORT or warn "Can't close serialport:COM*";
sub pushSwitch{
my ($portNo) = @_;
my $text=sprintf "PCT%d%d\n",$portNo,1;
print PORT $text;
}
*(なお、ここで使用している"serialport_conf"は、こういったserialport_conf.plで作成します)
2008-08-02[n年前へ]
■画像処理WEBアプリを簡単作成用「ビジュアル言語」を作る
「ビジュアル言語」風の画像処理WEBアプリの叩き台を作ってみました。 いえ、正確に言えば、そんな「ビジュアル言語」環境を作ってみました。つまり、画像処理WEBアプリを簡単に作れる!?「ビジュアル言語」を作ってみた、ということになります。
ここで言う「ビジュアル言語」という言葉には、3つの意味合い・特徴があります。
- 処理構造をグラフィカルな部品・ワイヤーで表現・作成すること
- 各場所で処理されている「データが見える」こと
- 部品・ワイヤーを並べ終わった画面そのものが「アプリケーション」のGUI画面となっていること
ブラウザ上の操作感は(UI周りはWireItライブラリを使っていて)YahooPipesを模範にしています。また、処理データ構造は(YahooPipesを意識した)ImagePipesに準拠するようになっていて(つまりある程度緩い規約にもとづいたJSONになっていて)、 「オブジェクト」に対してユーザが何かしたり、あるいは、入力部に他の部品からメッセージを受けた時に、Javascriptでクライアント内部で処理をしたり、あるいは、サーバに対して同期リクエストを送ることで、出力結果を生成し、そして出力ポートの先にある他部品に結果メッセージを送信する、という作りになっています。
下の動画がその「叩き台」アプリケーションの動作動画です(高解像度画像もここに置いておきます)。この動画が「何をしているか」を箇条書きすると、
- 「画像をアップロードするフォームパーツ」を作り(出力はアップロードされた画像情報を示すJSON)
- 入力を2出力に分岐する(JavaScriptで書いた)部品を配置し
- 入力された(JSONで表現されている)画像を表示する部品を置いて
- 部品間をワイヤーをつなぐ
WireItがYahooUIライブラリに実装された折にでも、適当にサービスを立ち上げてみたいな、と思っています。
2008-10-27[n年前へ]
2008-11-12[n年前へ]
■「色が変わるガーネット」と"Spectrum Color Conversion"
深紅のルビーや青や緑のサファイヤ、つまりは宝石「コランダム」を眺めていると、宝石「ガーネット」に目を惹かれました。コランダムにも色々な色のものがあるのと同じように、ガーネットにもさまざまな色を呈するものがあります。そんな中で、目を惹かれたのは”色が変わる”カラーチェンジガーネットです。
陽の光の下や白熱灯の下で、あるいは、蛍光灯の下で・・・つまり、その時々の照明光・環境光に応じて違う色姿を見せる「カラーチェンジガーネット」は実に魅力的に見えます。
ガーネットを照らす光の波長強度分布の関係と、ガーネットの光吸収率分布と、さらにそのガーネットを見る人の色覚・色認識の機構が掛け合わされることで、カラーチェンジガーネットはその色を状況に応じて変えるのでしょうか。そして、その色の変わり具合が激しいのがカラーチェンジガーネットなのでしょうか。
そういえば、以前光スペクトルデータ操作用のMathematicaライブラリを作ってみたり、そのWEBアプリケーション版のSpectrum Color Conversionを動かしてみました。こんなカラーチェンジガーネットを見ると、その色がどのようなもので・どのように感じているのかを、自分の指でMathematicaのコードで書き下ろしてみたくなります。そして、その「色」の仕組みを頭の中でも納得してみたくなります。
・・・と思いを巡らせているうちに、ふとそんな色を楽器でコードで奏でたら、指で弦をつまびいてみたら、それは一体どんな音になるのだろうか・・・とふと思ったりもしました。
2008-11-14[n年前へ]
■「色を変える"宝石"ガーネット」と「"変化"するMathematica」
「色を変える"宝石"ガーネット」の光吸収スペクトルを探すうちに、こんなページやこういったページに出会いました。こういうページを眺めていると、単純な色名では表現できない宝石の光吸収スペクトルを(数式処理プログラムの)Mathematicaで関数にして、さまざまな照明の中で、宝石が外に見せる色を計算するライブラリを作りたい、と思ったりします。
光吸収スペクトルは変わらなくても、照明光スペクトルや視覚スペクトルに依存して「見た感じ」が変わるようすをMathematicaで描いてみたいと思ったわけです。
そんなことを思いながら、もうすぐ公開される Mathematica の新バージョン、バージョン7を見ました。そのMathematicaが"変化"し続けるさまは、なぜか「色を変える"宝石"ガーネット」を連想させました。さまざまな機能が追加され、姿・見た目が大きく変わっているように見えても、少しその新たな装いを脱がしてみると、その下にはこれまで同じ「HEADで表現される構造が組み合わさったオブジェクト」が見えてきて、そこに色を変える宝石と同じさまを感じたのです。
色鮮やかに映える機能をとても魅力的に感じる人は、多いことでしょう。その一方で、特に変化するわけでもない内部の光吸収スペクトルや基本オブジェクト構造に不思議に心惹かれる人もいるように思います。「さまざまな機能を使って何かをしたい」と思う人もいれば、「基本構造を組み合わせて何かを作ってみたい」と思う人もいそうな気がします。
もちろん、その時の気分で「どっちが好き」かは変わることも多いかもしれません。このページを読む人は技術系の人が多いと思いますが、(この瞬間の)あなたなら「どちら」を好むのでしょう。どちらを選ぶのでしょうか?