著作一覧 |
で、Processingも良いけど、他のはあまり使いたくはない。
で、なんとなくだが、まっとうな方法らしいFunnelを使うのもあまり好きではない。というのは、COMポートたたいて使うデバイスのアプリケーションドライバとソケットで通信するというのが、気に食わないからだ。
で、検索してみるとGainerをRubyから使うという記事を加藤さん(いや、知らないけど、LDRでは購読してるなぁ)が書かれていて、こっちが好みだ。
だが、ruby-termiosが問題だ。だって、OS Xはともかく、Windowsでは使えないじゃん。
でも、おれはCOMポート叩くのはわりと自由にできる。
そこで、
・ruby-termiosのWin32版を作る
ところが、作ってもttyをいじるための仕組みにはWin32の場合、なっていないから全然嬉しくないのだね。gainer-rubyが使っているのは、bpsとビット長の設定だけだから、それだけ実装するというのも手ではあるけど。
・まともなWin32 COMポート拡張ライブラリを作る
が、Gainer以外の使い道が見えないのがなんともかんとも。作るなら、rubyioを無視して別スレッドで非同期IOを使うのが良いだろうなぁとか思うのだが
・Gainer特化のActiveXコントロールを作る
Win32OLEを使えばRubyからも使えるし、VBでちょろちょろGUIも作れるからこのあたりがもっとも良いのではないかとか
・Gainer特化の.NET User Compoenetを作る
でも、考えたらVBって今はマネージドだから、こっちのほうが筋が良いかも……というかRubyから使えないのか。
・だったら、JavaBenasでも良いじゃん
JRubyっていう選択になるけど。
とか、いろいろ選択肢があって、どのタイプで作るか考えるのだが、ここに2種類の楽しみがある。
1つは、どのタイプで作ると、どういう得失があって、と考えるのが楽しい。
でも、本当に楽しいのは、38400として、Rubyioに載せるか、それとも独自にスレッドを起こして同期IOでやるか、AsyncEvent使うか、それともSerialコントロールを使うか、とか、大した状態遷移がないからswithでがんがん分岐するか、ステートパターンを使うか、マトリックスを使うかといった詳細を考えること。
でも、あまり考えすぎると、作る前に十分に堪能してしまっておしまいになるので、適当なところで妥協する必要はあるのであった。
で、それもあって、Rubyioを調べたのだが、winsockのselectを使っていたのか。それでWinsock2が出てくる(Winsock1のselectがVistaでバギーというようなことはあり得ると思う)のか、とか、でもコンソールやPIPEはソケットではないのだが、と見ると最初にピークかけているとか、selectの後に遅延させているとか、うまいなぁと。
しかし、ヘッダに出現する関数名をdefineして上書きして、undefして元に戻すとか、できるものなのだな。なんとなく解決済みの関数名はマクロでは上書きできないのかと思っていた(あるいは、読み方を間違えているだけで、最初にマクロで定義しているのかも知れないけど)。
ジェズイットを見習え |