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

2009-06-22

Web , 文字列

Perl でフォームデータから UTF-8 日本語文字をとりだす方法

UTF-8 のフォームによっておくられたデータのなかから日本語文字をとりだすことは,日本の Perl CGI プログラマならたいてい必要になることである. ところが,その方法は意外に確立されていないようにみえる. ここでは私が試行錯誤したうえ確立した方法を書く.

つづく…

2009-01-25

ストリームデータ処理

ストリーム・データ処理によるオンライン・オークションのシミュレーション (構造化版)

ストリーム・データ処理は通常はデータベースの処理と同様にインタプリタ的に実行される. しかし,ここではクエリの実行のしくみをみるために,あえてそれを Perl のプログラム (“コンパイル・コード”) でシミュレートしてみる. とりあげる例題は STREAM (Stanford Stream Data Manager) や ATLaS (Aggregate & Table Language and System) でも使用されているオンライン・オークションである. なお,このページでは構造的な Perl に翻訳するやりかたをしめす. 「ストリーム・データ処理によるオンライン・オークションのシミュレーション (非構造化版)」 においては goto 文をつかった非構造的な版のプログラムをしめす.

つづく…

2009-01-05

ストリームデータ処理

ストリーム・データ処理によるオンライン・オークションのシミュレーション (非構造化版)

ストリーム・データ処理は通常はデータベースの処理と同様にインタプリタ的に実行される. しかし,ここではクエリの実行のしくみをみるために,あえてそれを Perl のプログラム (“コンパイル・コード”) でシミュレートしてみる. とりあげる例題は STREAM (Stanford Stream Data Manager) や ATLaS (Aggregate & Table Language and System) でも使用されているオンライン・オークションである. なお,このページでは非構造的な Perl に翻訳するやりかたをしめす. 「ストリーム・データ処理によるオンライン・オークションのシミュレーション (構造化版)」 において,構造化されたプログラムをしめす.

つづく…

2009-01-01

ストリームデータ処理

開催中のオークションをもとめるクエリの実行法

DSMS によって開催中のオークションをもとめる問題の解法」 に書いたプログラムの実行法についてかんがえる.

つづく…

2008-12-31

ストリームデータ処理

DSMS によって開催中のオークションをもとめる問題の解法

データストリーム管理システム (DSMS) の例題として,STREAM (Stanford Stream Data Manager) や ATLaS (Aggregate & Table Language and System) などにおいて,オンライン・オークションに関するものがとりあげられている. オークションの例題のひとつとして,「現在開催されているオークションをもとめる」 というものがある. STREAM,ATLaS の両方でとりあげられているが,どちらの記述も問題がおおいとおもわれる. この例題について,かんがえてみる.

つづく…

2008-12-29

データベース

Perl による関係データベースのクエリのシミュレーション

関係データベースがひろくつかわれるようになっているが,SQL によって記述したクエリがどのように実行されているかは不透明である. クエリは通常,DBMS の内部でインタプリタ的に実行される. 機械語にコンパイルせずに実行されるおもな理由は,クエリの対象であるテーブルの性質をみて実行時にクエリを最適化することが重要だからである. しかし,ここではクエリの実行のしくみをみるために,あえてそれを Perl のプログラム (“コンパイル・コード”) でシミュレートしてみる.

つづく…

2008-09-22

未整理

JavaScript によるタイマー

ちょっとした必要があって JavaScript をつかったタイマーをつくった. プログラムをみるにはこのページをひらいて,Web ブラウザのメニューバーから 「表示 > ページのソース」 を選択して,みてもらう必要がある.

つづく…

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 処理は奨励されないかもしれないが,ちょっとしたプロトタイプをつくるには便利である.

つづく…