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-10-18[n年前へ]
2008-11-10[n年前へ]
■「ボールレンズ」のネックレス
たとえば、凸レンズの形を描いてみると、その形が球形のガラス玉とよく似ている形であることがわかります。つまりは、ガラス玉は一種の凸レンズです。球形の形をしたプラスチックやガラスは、ボールレンズという名前のレンズであるわけです。曲率が極めて高い凸レンズなのです。
ボールの直径に応じて拡大率が大きくなるので、大きなボールレンズを使えば、大きくものを拡大することができます。・・・といっても、もっとも、球面収差がとても大きいので、周辺部はボケてしまいます。
ちなみに、屈折率が2.0のもので作ったボールレンズが球面収差が一番小さくなります。ランタン系ガラス材料のS-LAH79は屈折率が2.003と2.0にとても近いので、球面収差が小さなボールレンズを作ることができます。
ところで、光学カタログを眺めていると、サファイヤやルビーで作られたボールレンズも載っています。サファイヤ/ルビーは屈折率は1.8弱なので、球面収差は小さくないのですが、その硬さからキズがつきにくいということで、商品化(つまりはよく使われている)されているのです。
サファイアで作ったボールレンズも、ルビーで作ったボールレンズあっても、どちらも直径1cm程度で七千円くらいです。拡大鏡・マイクロスコープを持ち歩く人も多いと思いますが、サファイア・ルビーで作ったボールレンズを持ち歩いてみるのはいかがでしょうか。透明なサファイアで作った「ボールレンズ」をネックレスにしてみたら・・・あるいは指輪にしてみたら・・・お洒落な光学技術者になれるかも?・・・それとも、単に変な光学技術者になってしまうかも?
2008-11-19[n年前へ]
■Rubyで「シリアル通信スレッドクラス」を作る
Rubyで「(Rubyシリアル通信ライブラリ(Windows用)TEXCELL を使った)シリアル通信スレッドクラス」を作りました。ソースコードとサンプルはここに置いておきます。”Microsoft Windows VISTAではほとんど見捨てられているような”シリアルポートでの送受信をRubyでスレッドを使って行うクラスです。Queueにデータを突っ込めば「シリアル通信スレッドクラス」から自動的に送信されます。また、受信した文字列が「(指定した改行コードで)一行になるたびに」receiveイベントが呼ばれるので(また、その際にQueueを指定しておけば受信行が自動的にそのQueueに追加されていきます)、読み込みのタイミング・必要な情報がまだ途中までしか読み込まれていない場合などの処理を気にすることなく使いたい、と考えながら作ってみた「シリアル通信スレッドクラス」です。
たとえば、COM3で受信した内容をコンソールに出力するだけであれば、このようなコードで動くはずです。
require 'comThread' receiveComThread=ComThread.new({:icomno=>3}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sleep 60 receiveComThread.stopシリアル通信モニタプログラム(シリアルポート間で送受信されている内容を眺めるプログラム)も、多分10行くらいで書けると思います。チェックせずに書いてしまうと、こんな感じになると思います。
require 'comThread' q=Queue.new receiveComThread=ComThread.new({:icomno=>3,:rq=>q}) sendComThread=ComThread.new({:icomno=>4,:sq=>q}) receiveComThread.start({:receive=>true, :receiveMonitor=>true}) sendComThread.start({:send=>true}) sleep 60 sendComThread.stop receiveComThread.stop
「計測・解析ソフトウェア/ハードウェアのハック」が実験系技術者の一番のLifeHackかもしれない…と思っています。その思いを逆に言うならば、実験系技術者が費やす多くの時間を、計測・解析処理が消費していると思っているからです。そして、一番時間を消費している部分の高速化をすることが、全体の高速化に効果的だろう、と思っているわけです。というわけで、先週末はこの「Perlでシリアル通信とユーザインターフェース自動制御のやり方を整理しておくことにしました」の部分を「Rubyでシリアル通信とユーザインターフェース自動制御を書いて整理しておくことにしました」ということをしてみたわけです。この「シリアル通信クラス」と「ユーザインターフェース自動制御」があると、結構便利な実験屋さんもいるかもしれません。
そんなこんなで、何を今更…という、Perlで「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に(既成機器をを使わざるえないことが多い)「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できる、からです。
2008-12-04[n年前へ]
■ぼくらはどういう状態にいたいのだろう?
Rubyのまつもと氏「エンジニアに安住の地がなくなってきている」と警鐘という記事を読む。
情報の格差というものがある。それは解消すべきともいわれるが、モノが高いところにあれば、位置エネルギーが発生し、電気を起こしたりすることができる。情報の場合も、上の方やまんなか辺りにいれば、位置の差でエネルギーを取り出せる
まつもとゆきひろ
この言葉を読むと、以前「競馬」と「資本主義」で書いた、(AERA Mook Special 「21世紀を読む」の中で岩井克人が書いていた)「イデオロギーとしての資本主義は、”見えざる手により調整される自己完結したシステム”だが、現実の資本主義は ”(場所・価格・情報といった)違いを利用して利潤を生むシステム”だ」といった言葉を思い出す。
”違い・差”があって初めて、現在(現実)の資本主義を回すエネルギーは生まれているのだと思っている。いや、現在どころか、はるかな昔からそうだったに違いないと信じている。そして、この事実は技術者の志向と実は相反することが多いのではないか、とも思うことがある。
「PCを自由自在に使うことができる人」がいたとする。その人が「技術的な面で心地よく理解しあえる人」を周囲に求めようとしたならば、つまり周囲と自分との間の技術的な”違い・差”="境界"を小さくしたいと願うなら、多くの場合、”利益”を生むことはできないのではないだろうか。「あなたにできること」は「相手もできたりする」ということは、つまり、境界がないのだから、そうそう利益が生まれるわけもない。
しかし、「PCを自由自在に使うことができる人」が、「PCという言葉もよく知らないし、そんな代物を使うこともできない人」たちの「間」に立つのなら、そこから「利益」を生むことは比較的容易だろう。
ということは、「技術的な満足」と「大きな利益」はなかなか両立しえない、ということになる。
「競馬」と「資本主義」
ぼくらはどういう状態にいたいのだろう?位置エネルギー、ポテンシャルを高めたいのだろうか、それともエネルギー変換効率が良い場所にいたいだろうか。
やりたいことと売れるというのは違うね。売れるってことはハリウッド映画みたいな、頭悪~い奴もわからなきゃいけないってことだぜ。
(西原理恵子との対談で)みうらじゅん ユリイカ 2006.07
「技術的満足」と「大きな利益」は両立するのだろうか。そんなことができるのだろうか。・・・きっと、その答えは自分で探すしかないのだろう。
そこまでをやりたいの。
西原理恵子@ユリイカ