2008-10-17[n年前へ]
■Mannequin Head Maker / Icosahedron Worlds 引越し
昔Railsで作った画像処理アプリなどのサーバ移行・クラスタ対応を始めました。(正二十面体 顔ペーパークラフト作成ソフト)のMannequin Head Makerと (正二十面体ペーパークラフト作成ソフト)のIcosahedron Worlds の環境移行が終わりました。不具合などありましたら、教えて頂ければ幸いです。
2008-11-03[n年前へ]
■hirax.net::mobileと「後で読む」
携帯電話からhirax.netを眺めることができるように、Railsの携帯電話用コントローラ(アクション)を書きました。アクセスURLは http://www.hirax.net/mobile/latest です。右上のQRコードがそのURLになっています。ちなみに、 上記URLからは、(結局は、「自分で作った道具」で「自分が作るもの」と「クラス分け」やコトバを集めた"Logo"クラスで書いたように、全部Contentクラスの継承クラスだ(という作りにした) というだけの理由なのですが) "insideout""Tech-logs""Logos""できるかな?"のすべてが同じように扱われます。
画像などは送出しないようになっていますから、今ひとつ内容は伝わりにくいとは思います。そういうわけで、説明図が必要になるような内容は飛ばし読みし、つまりは、電車中でのお暇つぶしに、雑文が役に立てば幸いです。
また、PCで「後で読む」用に、携帯電話用ページに(はてな)ブックマーク用のアイコンを設置しました。その際に登録されるURLはPC用のURLです。つまり、同じ記事に対するURLではあっても携帯電話で(その時)アクセスしているURLではありません。あくまで、後で画像付き・レイアウト付きで(つまりはPCで)読み直すためのブックマークだという判断です。
2008-11-15[n年前へ]
■Ruby版 Win32GuiTest クラスを作りました。
(この記事の続きが「続:Ruby版 Win32GuiTest クラスを作りました。」)になります。
Ruby版 Win32GuiTest クラスを作りました。PerlのPerlのWin32-GuiTestと同じような機能を集めたものです。つまり、MoonWolf さんのWin32::GuiTestと同じようなものです。
夕方からPerlのWin32::GuiTestの関数リストを見て、それと同じようなものををつらつら書いていき、私自身が使いそうにない関数・機能が続き始めた辺りでやる気が下がってきたので、とりあえずソースコード(guiTest.rb)をここに置いておくことにします。
(コードにも入っていますが)サンプルコードは下記のようになります。これは、「ワードパッドを立ち上げて、ウィンドーを全面に持ってきて、適当に文字を入力して、その文字をコピーして数回ペーストした後に、保存せずに終了する」という具合に動きます('RichEdit20W'の部分は、クラス名からの子ウィンドゥ検索を示すために入れたので、実際にはなくても構わない部分だと思います)。
gui=Win32GuiTest.new gui.run('wordpad.exe') sleep 2 gui.setForegroundWindow( gui.findWindowLikeName('ワードパッド').first[0] ) gui.setFocus( gui.findWindowLikeClass('RichEdit20W').first[0] ) gui.sendKeys('This is a sample.{ENTER}',1) gui.sendKeys('^a^c') 5.times do |i| gui.sendKeys("#{i} ...{ENTER}") gui.sendKeys('^v') end gui.sendKeys('%f',2) gui.sendKeys('x',1) gui.sendKeys('n',1)VMware上で作業をしていることもあり、動作未確認の部分(マウス操作・ホイール操作)もあるのですが、「キーボード・マウス・ウィンドウを操作する」というGUIの基本三点セット処理にはそこそこ使える・・・と良いな、と思っています。
2008-11-16[n年前へ]
■続:Ruby版 Win32GuiTest クラスを作りました。
(この記事は「Ruby版 Win32GuiTest クラスを作りました。」)の続きです。
Ruby版 Win32GuiTest に関数・機能を追加しました。下の動画は「ペイントを立ち上げて、ウィンドウの場所を動かし、絵を描いた上で、ビットマップファイルを保存する」という作業をRuby版 Win32GuiTestを使ってRubyで自動で行ったものになります。
実際のコードはソースコード(guiTest.rb)に入っているように、下記のようになります。次はリサージュ図形でも書いてみることにしましょうか。
gui=Win32GuiTest.new gui.run('mspaint.exe') sleep 1 w=gui.findWindowLikeName('ペイント').first[0] gui.setForegroundWindow(w) gui.moveWindow(w) r=gui.getWindowRect(gui.getForegroundWindow) sleep 1 360.times do |i| rad=i*2*3.14/360.0 x=r[0]+200+100*Math.cos(rad) y=r[1]+200+100*Math.sin(rad) gui.mouseMoveAbsPix(x.to_i,y.to_i) gui.sendLButtonDown if i==0 end gui.sendLButtonUp gui.sendKeys('%f',2) gui.sendKeys('x',1) gui.sendKeys('y',1) gui.sendKeys('TestBitmap.bmp',2) gui.sendKeys('{ENTER}',2)
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で「シリアル通信とユーザインターフェース自動制御」のやり方を整理しておくことにしました。なぜかというと、経験的に(既成機器をを使わざるえないことが多い)「計測・解析ソフトウェア/ハードウェアのハック」は、シリアル通信制御とユーザインターフェース自動制御でほとんどの場合対応できる、からです。