Mac OS X で動作するシリアルプロキシ Seriette を紹介します。シリアルポートを操作できない Flash などから、RS232 で接続された(あるいはそのように認識される)シリアル通信デバイスを TCP ソケットを使って制御することができます。また、TCP/IP スタックを持たない安価なデバイスとネットワーク経由でシリアル通信を行えるようになります。
現在は開発プレビュー段階です。主要な機能は実装済みです。あと一歩作り込んだのちにコードも公開する予定です。
追記:なかなか時間が取れないので、現状のままソースコード公開しておきます。
http://github.com/sgss/Seriette
特徴
- 複数のシリアルポートとの接続およびプロキシサーバの実行
- マルチスレッド化された非同期通信プロセス
- フロー制御などの詳細なシリアル通信機能
開発プレビューの入手
» Download “Seriette” Preview Release
動作環境
Mac OS X 10.6 Snow Leopard
使用しているサードパーティ・フレームワークとライブラリ
- BWToolkit by Brandon Walkin under BSD License
- AMSerialPort by Andreas Mayer under BSD License
- AsyncSocket by Dustin Voss under MIT License
Flash でのシリアル通信
Flash からシリアルポートを操作するには、何かしらの仲介役、プロキシが必要になります。具体的には flash.net.XMLSocket か flash.net.Socket を使って、シリアルポートを制御するプロキシと通信することになります。プロキシはネットワークからデータを受け取ると、対応するデータを直接シリアルポートへ送信します。シリアルポートから受信したときは反対の流れです。
さてこのプロキシですが、Windows や Linux には選択肢が色々とあります。ところが Mac OS X で動作するものは知る限り serproxy という CUI アプリケーションだけです(不幸にも serproxy はこの記事の執筆中に発見)。
Seriette はこのプロキシ・アプリケーションの一種になります。
Seriette の使いかた
使いかたを書かなければならないのが開発プレビューである理由です。
サービスの追加
左下のプラスボタンを押して、管理するシリアルポートのサービスを追加しましょう。

ステータスが “Available” である項目が、現在実際に接続できる状態にあるサービスです。“Unknown” はサービスはあるけれど接続可能かどうか不確かなものです。

シリアルポートの接続
ソースリストから接続するサービスを選択して、設定しましょう。黒いクイックバー上でボーレートとデータフレームを変更できます。また、“More Options” ボタンからフロー制御などのより詳細な設定へアクセスできます。

ソースリストの項目を右クリックして出てくるコンテキストメニューから “Connect” を選びます。Connect/Disconnect ボタン(否、むしろアイコン)はいずれ作ります。

クイックバーが緑色になれば無事に接続完了です。

TCP サーバーの起動
手順はシリアルポートと同様です。ツールバー上の “TCP Server” をクリックし、サーバを設定します。クイックバーの “Interface” ポップアップには利用可能なホストの IP アドレスと予約語が一覧されています。恐らくここでは “More Options” を覗いておいたほうが良いでしょう。
デフォルトでは “Manually allow incoming connection” がオンになっていることを確認しておいて下さい。意味は注釈の通りです。

ソースリストの項目を右クリックして出てくるコンテキストメニューから “Run TCP Server” を選択して完了です。これも同じく Run/Stop ボタンを後々作ります。
Seriette の TCP サーバは、相手ソケットとのハンドシェイクを終えればその IP アドレスをリストに追加します。“Manually allow incoming connection” がオンのとき、“Allow” をしなければいかなるソケット通信も処理されないことに注意して下さい。

おわりに
Mac OS X で動作するシリアルサーバ “Seriette” の開発プレビューを紹介しました。まだ一度もシリアル通信をしたことがない方にはイメージが沸かないかもしれませんが、Seriette を使えば Mac OS X 上でのシリアル通信を使った電子工作および開発が少し楽になります。時間を確保できればサンプル・プロジェクトを紹介する予定です。また試用してみてのバグ報告や要望もお待ちしています。













PHP Dictionary Stored in Database | ja
Fontaine でよく使っているクラスを紹介する。データベースのテーブルを単に連想配列として扱う PHP クラスだ。トランザクション処理はしないので、直接データベース・アダプタからトランザクション処理をする必要はある。あまりに使いすぎてるため、致命的な欠陥があれば指摘していただきたい。(というのも値の取得時に同時アクセスがあったときが怪しい。)
入力値のサニテーションは Zend_Db_Adapter_Abstract が行うことを前提にしている。
例えば次のようなテーブルを考える。
CREATE TABLE IF NOT EXISTS dictionary ( name TEXT PRIMARY KEY, value TEXT );そのテーブルをこう扱うことができる。
以下、クラス定義全文。Fontaine_Db_Dictionary_Interface はヘッダファイルの無い PHP のクラス定義を明確にするためのインタフェースだ。Fontaine_Db_Dictionary_Interface は ArrayAccess を継承している。