JavaScript によるタイマー
ちょっとした必要があって JavaScript をつかったタイマーをつくった. プログラムをみるにはこのページをひらいて,Web ブラウザのメニューバーから 「表示 > ページのソース」 を選択して,みてもらう必要がある.
ちょっとした必要があって JavaScript をつかったタイマーをつくった. プログラムをみるにはこのページをひらいて,Web ブラウザのメニューバーから 「表示 > ページのソース」 を選択して,みてもらう必要がある.
Perl には tie() というくみこみのサブルーティンがあって,ハッシュに設定した値を自動的に外部ファイルにかきこむことができる. ただし,このハッシュにはどんな値でもかきこめるというわけではなく,構造データをいれることができない. したがって,Perl の内部であつかう複雑なデータ構造をファイルにかきこむには,他のおおくの言語におけるのと同様に,データ構造を線形化 (serialize,シリアライズ) してやる必要がある. ここでは線形化 (serialization,シリアライゼーション) と逆線形化 (deserialization,デシリアライゼーション) の方法について書く.
SSIP コミュニケータは GUI ベースでチャットができる,みじかい Java のプログラムである. プロトコルと通信プログラムの学習のためにつかうことを意図している. まずプログラムをうごかしてみてください. そして興味があれば,なかをのぞいてみてください. ここでは SSIP というプロトコルと SSIP コミュニケータの 使用法,構造などについて説明する. また,SSIP の問題点とその可能な解決策などについてもふれる.
私がもっともふるくから公開しているプログラムとして,JavaScript をつかって書いた単純な電卓がある. プログラムをみるにはこのページをひらいて,Web ブラウザのメニューバーから 「表示 > ページのソース」 を選択して,みてもらう必要がある.
RTP (Real-time Transport Protocol) による 2 チャンネル (ステレオ) の音声 (VoIP, Voice over IP) を受信してオーディオ再生するプログラムをしめす. 音声は 16 bit 線形を基本とするが,u-Law (G.711) などもあつかえるようにしてある. 受信のためのポート番号はこのプログラムのなかで指定されている ($IN_PORT_RTP). とりあえず,こまかい説明ははぶくが,あとで必要に応じて説明をくわえることにしたい.
ファイルにふくまれる音声 (VoIP, Voice over IP) を RTP (Real-time Transport Protocol) によって送信する Perl プログラムをしめす. 音声は線形 16 bit を基本とするが,u-Law (G.711) などもあつかえるようにしてある. 送信・受信のためのポート番号と受信者の IP アドレスはこのプログラムのなかで指定されている ($REMOTE_PORT_RTP, $LOCAL_PORT_RTP, $ip など). RTCP (Real-Time Control Protocol) もあつかっているが,RTCP によって特別の制御をしようとしているわけではない.
つぎつぎと入力されてくるデータを固定長の配列をつかってバッファリングするとき,たとえば VoIP (Voice over IP) の音声を入力するプログラムにおいて,リングバッファというデータ構造がよくつかわれる. リングバッファをきちんとつくるのがめんどうだったので,Perl をつかって,常にあたらしい要素を配列の末尾に追加する “疑似リングバッファ” による VoIP のプログラムをつくった. これでリアルタイムにちゃんと動作するのかどうか不安だったが,「Perl によるリアルタイム音声処理 ― voiscape 3D 化プログラムの奇跡」 にも書いたようにうまく動作したので,ここではこの “疑似リングバッファ” について書いてみる.
Linux 上でイーサネットのハブのようなふるまいをするプログラムをつくろうとすると,ソケットを promiscuous mode (プロミスキャス・モード) で動作させる必要がある. きちんとハブとして動作させようとするとやや複雑なプログラムを書く必要があるが,ここではもっとさぼって,ハブにちかいがもうすこしいいかげんに動作するプログラムをしめす.
音声にしろ動画にしろ,おおくのコーデックの処理は複雑で,ライブラリのお世話にならなければならない. しかし,電話などでつかわれる G.711 という ITU-T 標準のコーデックは非常にかんたんであり,ほとんどテーブル引きだけで実現することができる. ここでは Perl による G.711 の変換・逆変換のプログラムをしめす. もちろん,Perl の特殊機能はつかっていないので,他の言語に容易にかきかえることができる.
複数のコンピュータをネットワークを介してつなぎ,それらにのせられたアプリケーションのあいだで相互に通信させる実験をするとき,実験を起動するのに,最初に通信をおこなうアプリケーションのポートをたたくようにするのが便利である. この目的で内容のない UDP (User Datagram Protocol) メッセージをおくるプログラムを書いてみた (UDP を TCP にかえるのは容易であるが,受信プログラムはやや複雑になる).
ただしい XML インタフェースをつくるには XML の API をつかう必要があるが,かんたんに XML (もどき) のインタフェースをつくるには,Perl のパターンマッチ機能をつかうのが便利である. 本来の XML は 1 行にいくつタグがあってもよいし,タグでかこまれる内容が複数行にまたがってもかまわないが,それに制限をくわえればかんたんに処理することができる. こんなインチキな XML 処理は奨励されないかもしれないが,ちょっとしたプロトタイプをつくるには便利である.
関係データベースのような本格的なデータベースのかわりに Perl の tie() をつかうと,簡易データベースを容易にあつかうことができる. つまり,tie() をつかうことによって Perl のハッシュを外部ファイルとむすびつけて,恒久的 (permanent) なものにすることができる. ただし,本格的なデータベースとはちがって並列にかきこんだりすることはできないし,性能もひくいとかんがえられる. したがって,プロトタイプには適するが実用には適さない.
一方,かんたんなデータベースのようなデータ群あるいはデータベースに登録するべきデータ群をつくるとき,Excel がよくつかわれる. そこで,Excel などでつくったデータを,たとえばタブくぎりのテキストとして出力して,それを Perl のデータベースにとりこみたくなる. そういうプログラムの例をしめす.
Web ページ上にラジオボタンを自由に配置したいことがある. 私のばあいは,被験者に立体音をきいてもらってその音源方向や距離をあててもらうときに,結果を Web ページ上にならべた,つぎのようなラジオボタンのうちのひとつをクリックして,こたえてもらった. この方法をつかうとボタンを円形にかぎらず自由に配置できるかわりに,おなじページの他のコンテンツとかさならないように,配置を慎重にきめる必要がある. したがって,他の方法たとえば表などをつかって容易に配置できる形状のときはつかわないほうがよいとかんがえられる.