[ Blog in Japanese ] [ Blog in English ] [ Edit this site ]

2008-03-29

ネットワーク・通信

単純な Perl 版メイル・プロキシ

メイルの誤送信防止などの目的のため,メイル・プロキシ (SMTP プロキシ) が重要になっている. Perl によって書かれたメイル・プロキシとしては Qsmtpd があるが,自分で単純なプロキシをつくりたいとおもったときには,このプログラムは複雑すぎて,あまり参考にはならない. そこで,できるだけ単純なプロキシのプログラムを書いてみた.

つづく…

2007-11-17

データ構造

Perl におけるデータ構造の線形化 (serialization)

Perl には tie() というくみこみのサブルーティンがあって,ハッシュに設定した値を自動的に外部ファイルにかきこむことができる. ただし,このハッシュにはどんな値でもかきこめるというわけではなく,構造データをいれることができない. したがって,Perl の内部であつかう複雑なデータ構造をファイルにかきこむには,他のおおくの言語におけるのと同様に,データ構造を線形化 (serialize,シリアライズ) してやる必要がある. ここでは線形化 (serialization,シリアライゼーション) と逆線形化 (deserialization,デシリアライゼーション) の方法について書く.

つづく…

ネットワーク・通信

Java による簡易 SIP 風プロトコルとチャット・プログラム

SSIP コミュニケータは GUI ベースでチャットができる,みじかい Java のプログラムである. プロトコルと通信プログラムの学習のためにつかうことを意図している. まずプログラムをうごかしてみてください. そして興味があれば,なかをのぞいてみてください. ここでは SSIP というプロトコルと SSIP コミュニケータの 使用法,構造などについて説明する. また,SSIP の問題点とその可能な解決策などについてもふれる.

つづく…

未整理

JavaScript による単純な電卓

私がもっともふるくから公開しているプログラムとして,JavaScript をつかって書いた単純な電卓がある. プログラムをみるにはこのページをひらいて,Web ブラウザのメニューバーから 「表示 > ページのソース」 を選択して,みてもらう必要がある.

つづく…

記号処理

Java によるランダム化された計算をつかった単純な問題解決の例

1994 年前後に私は,局所的な情報だけをつかってランダムさをふくんだやりかた (計算順序などをきめるのに乱数をつかう方法) で記号処理などを計算する方法 CCM (Chemical Computation Method / Chemical Casting Model) の研究をしていた. CCM による計算は Macintosh Common Lisp をつかって実行していたが,それでは Web 上で計算の様子をみせることができないので,1996 年に Java で書いたプログラムを公開した.

つづく…

2007-11-15

ネットワーク・通信 , マルチメディア

Perl による音声 (VoIP) 受信と再生

RTP (Real-time Transport Protocol) による 2 チャンネル (ステレオ) の音声 (VoIP, Voice over IP) を受信してオーディオ再生するプログラムをしめす. 音声は 16 bit 線形を基本とするが,u-Law (G.711) などもあつかえるようにしてある. 受信のためのポート番号はこのプログラムのなかで指定されている ($IN_PORT_RTP). とりあえず,こまかい説明ははぶくが,あとで必要に応じて説明をくわえることにしたい.

つづく…

ネットワーク・通信 , マルチメディア

Perl によるファイルからの音声 (VoIP) 送信

ファイルにふくまれる音声 (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 によって特別の制御をしようとしているわけではない.

つづく…

データ構造

リアルタイム用途にもつかえた Perl による疑似リングバッファ

つぎつぎと入力されてくるデータを固定長の配列をつかってバッファリングするとき,たとえば VoIP (Voice over IP) の音声を入力するプログラムにおいて,リングバッファというデータ構造がよくつかわれる. リングバッファをきちんとつくるのがめんどうだったので,Perl をつかって,常にあたらしい要素を配列の末尾に追加する “疑似リングバッファ” による VoIP のプログラムをつくった. これでリアルタイムにちゃんと動作するのかどうか不安だったが,「Perl によるリアルタイム音声処理 ― voiscape 3D 化プログラムの奇跡」 にも書いたようにうまく動作したので,ここではこの “疑似リングバッファ” について書いてみる.

つづく…

未整理

ブログの目的

この “ブログ” の目的は,私がもっているプログラミングに関するちょっとした知識を紹介することです.

つづく…

ネットワーク・通信

Linux のためのイーサネット・ハブもどきのプログラム

Linux 上でイーサネットのハブのようなふるまいをするプログラムをつくろうとすると,ソケットを promiscuous mode (プロミスキャス・モード) で動作させる必要がある. きちんとハブとして動作させようとするとやや複雑なプログラムを書く必要があるが,ここではもっとさぼって,ハブにちかいがもうすこしいいかげんに動作するプログラムをしめす.

つづく…

2007-11-14

マルチメディア

Perl による G.711 の処理

音声にしろ動画にしろ,おおくのコーデックの処理は複雑で,ライブラリのお世話にならなければならない. しかし,電話などでつかわれる G.711 という ITU-T 標準のコーデックは非常にかんたんであり,ほとんどテーブル引きだけで実現することができる. ここでは Perl による G.711 の変換・逆変換のプログラムをしめす. もちろん,Perl の特殊機能はつかっていないので,他の言語に容易にかきかえることができる.

つづく…

ネットワーク・通信

Perl によって UDP ポートを “たたく” プログラム

複数のコンピュータをネットワークを介してつなぎ,それらにのせられたアプリケーションのあいだで相互に通信させる実験をするとき,実験を起動するのに,最初に通信をおこなうアプリケーションのポートをたたくようにするのが便利である. この目的で内容のない UDP (User Datagram Protocol) メッセージをおくるプログラムを書いてみた (UDP を TCP にかえるのは容易であるが,受信プログラムはやや複雑になる).

つづく…

Web , ネットワーク・通信 , 文字列

Perl による簡易 XML インタフェース ― テーブル型データ表現のハッシュと XML 間の変換

ただしい XML インタフェースをつくるには XML の API をつかう必要があるが,かんたんに XML (もどき) のインタフェースをつくるには,Perl のパターンマッチ機能をつかうのが便利である. 本来の XML は 1 行にいくつタグがあってもよいし,タグでかこまれる内容が複数行にまたがってもかまわないが,それに制限をくわえればかんたんに処理することができる. こんなインチキな XML 処理は奨励されないかもしれないが,ちょっとしたプロトタイプをつくるには便利である.

つづく…

データベース

テキストからの Perl データベース (tie) 生成

関係データベースのような本格的なデータベースのかわりに Perl の tie() をつかうと,簡易データベースを容易にあつかうことができる. つまり,tie() をつかうことによって Perl のハッシュを外部ファイルとむすびつけて,恒久的 (permanent) なものにすることができる. ただし,本格的なデータベースとはちがって並列にかきこんだりすることはできないし,性能もひくいとかんがえられる. したがって,プロトタイプには適するが実用には適さない.

一方,かんたんなデータベースのようなデータ群あるいはデータベースに登録するべきデータ群をつくるとき,Excel がよくつかわれる. そこで,Excel などでつくったデータを,たとえばタブくぎりのテキストとして出力して,それを Perl のデータベースにとりこみたくなる. そういうプログラムの例をしめす.

つづく…

Web

Perl による Web ページへのラジオボタン円形配置

Web ページ上にラジオボタンを自由に配置したいことがある. 私のばあいは,被験者に立体音をきいてもらってその音源方向や距離をあててもらうときに,結果を Web ページ上にならべた,つぎのようなラジオボタンのうちのひとつをクリックして,こたえてもらった. この方法をつかうとボタンを円形にかぎらず自由に配置できるかわりに,おなじページの他のコンテンツとかさならないように,配置を慎重にきめる必要がある. したがって,他の方法たとえば表などをつかって容易に配置できる形状のときはつかわないほうがよいとかんがえられる.

つづく…