Linux Gazette 2003年11月号 #96
今月のLinux Gazette の主な記事
n Linux ラジオ局
n XfigとTEXを用いる科学ポスターのデザイン
n サーボモータ、Linux/TRAIその他面白い材料
n tcp/ipデバッグの簡単な手引き
n snmp拡張の簡単な手引き
n ソフトウエア・セキュリティの現状
n キイを用いるSSH
n スクリーンの使用
n RTOSとしてのLinux
n Cサウンド:Boulanger博士との会見
 
(訳者注)
1.今月号からLinux Gazetteの形式・内容が大幅に変更されました。
2.原文を一括して一つのファイルでセーブするには、下記のリンクがあります。
TWDT 1 (gzipped text file)
TWDT 2 (HTML file)
前者はテキスト形式で、後者はHTML形式です。これらは一括セーブする目的のもので、
HTML版のリンクが働くとは限りません。
 
 
 
 
 
Linux ラジオ局
By Phil Hughes
 
9月末Linux Journalウエブサイト用に radio station automation(ラジオ局自動化) を執筆した。頂いたご意見から、関心のあることが分かった。ここでは、実際にこのようなプロジェクトに取り組んでくれる人がいるかどうかを見極めたい。この仕事を遂行する場所として LG Projects Wiki を作った。

頂いたご意見から、色々な断片があることが分かった。殆どは知っているものだったので、驚くには当たらないが、買い物リストを作るのではなく、ソリューションを構築したい。そのソリューションは、各種のソフトウエア断片が含まれ、全てがまとまってサポートの役目を果たさなければならない。分かっている断片は以下である:

・Audio conversion tools(オーディオ転換ツール)
・Audio editor(オーディオ・エディタ)
・Streamer(ストリーマ)
・Station automation(放送局自動化)
・Logging(ロギング)
・Transmitter(送信器)
始めの三つは明白で、沢山の選択対象がある。ロギングも明らかだ。残りの二つは、私が基本概念を組み立てた後の議論になる。

基本的カスタマ

基本的なカスタマになりそうな相手先を、次の三つの方法で考えることが出来る:

・資金提供先
・書くことの出来る面白いコードの種類
・到達することの出来る政治的結果

マーケットは巨大で多様だ。多様である結果、このプロジェクトに取り込みたい選択対象が沢山ある。例えば、贔屓の政治又は宗教を助ける武器にしたいのであれば、効率の良いラジオ音声に落ち着くだろう。金儲けだけが目的なら、助力を求め報酬を支払うラジオ局は掃いて捨てる程ある。.

FM放送局だけを見ても、そのバンド内に100個の利用可能周波数がある。米国では、これらの周波数を、同一及び隣接周波数の他局の信号強度に基づいて割り当てている。正確な数は知らないが、米国だけで数千局あって良いことになる。AM放送と短波局に目を転じても製品の潜在顧客がある。それで不十分なら、インターネット専用局も同一システムを使用することが出来る。

読み進んで頂くと、良く分かる筈だ。プロジェクト全体計画を述べてから、それに基づく特定問題を取り上げる。

全体展望

在来ラジオ局の働きを述べよう。在来とは、多年稼働して来た局のことだ。何処が自動化されるかが分かると、物事が理解し易くなる。

一般的な局には、一つ以上のスタジオと送信施設がある。スタジオは音響装置のある防音室以外の何物でもない。送信器は、同一建物内にあるか又は専用線又はラジオリンクで結ばれた遠隔地にある。送信リンクについても議論の余地があるが、ここでは、スタジオの話を限る。

一般的に、1スタジオだけを生放送にする。そのスタジオ内の出来事は、何でも直接送信器に送られると言う意味だ。生放送に代わるのは、外部入力又はあらかじめ記録したものの再放送だ。いずれの場合にも、送信器の放送中は番組の出所がなければならない。再生番組材料を構築するため追加スタジオを利用することが出来る。

各スタジオには、放送中のマイクロフォンが一つ以上、複数の再生用録音媒体(CDプレーヤ、ターンテーブル、テープデッキ) 及び番組録音用の何か(普通はテープレコーダ又はミニディスク)がある。複数の音源をミックスして編集することが出来るよう、オーディオ・ミキサー及びモニタシステムがあることもある。

小さい放送局では、スタジオが一つで一人の人間がキューを出して、録音を再生したりニュースなどをアナウンスする。一般的な音楽局では、この人は殆どの時間、放送中の歌が終わるのを待って、一寸したコメントはさみ、次のキューを出すだけである。必要な著作権料を支払うため演奏の記録を残す。.

放送局自動化

自動システムを用いてCDトラックにキューを出す面倒な仕事に代えるのは、システムの最も明白な仕事である。最も基本的なステップは、ディスクにまつわる仕事を全部コンピュータに任せ、人は所定の時間にどの曲を再生するか撰ぶことが出来るようにする。これは、比較的小さい仕事で、我々は、もっと多くのことをさせたい。

殆どの局は、DJがしたがう演奏リストを作る。このリストには、どの歌をどんな頻度で再生するかの指針が付いている。このリストがあると、無作為に撰んだように見せかけ、必要な制約内で、何を演奏するかを決定することが出来る。

次にアナウンスがある。これは

・コマーシャル
・生で提供する情報
・自動化することの出来る情報

に分けることが出来る。コマーシャルの自動化は音楽再生リストと余り変わらない。主な違いは、コマーシャルを放送する特定時刻があることだ。別の型のイベントを番組計画作成に組み込むのと、違いはない。

生番組の資料は、ニュース放送などの番組に、人手でまとめなければならないものだ。これは人がスタジオ内で(又はインターネット接続を通じて遠隔で))生でおこなうことも出来るし、予め録音しておくことも出来る。ニュースを項目のセットとして録音しておくと、後のニュース放送で前の放送の適切な部分を再使用することが出来る。いずれの場合も、別のイベントのスケジュール作成と異なることははなく、難しくはない。

私は、自動化することの出来る情報は、追加プロジェクトなので、分離した。つまり、この元のパケージにはこれを含まない。ここで思い浮かぶのは、

・時報
・天気予報

である。これらは両方とも、デジタルデータを人の音声に構築する以外の何物でもない。両者とも集約の問題に帰する。

放送局の中にはリクエスト申し込みを受けるところがある。これは、人手によるリクエストに対する応答、利用可能か否か及び再生リストが正しいと見なす計画回数以上は再生されていないことのチェックを意味する。これはウエブペイジを利用する完璧な場所と思われる。聴取者はリクエストを置き、ソフトウエアが演奏曲目を判断することが出来る。曲目が利用出来ないときは、その事実を告げるか又は、リクエストの多いものは購入を要請するることが出来る。

送信器

在来送信器は、このプロジェクトの範囲から遠く離れているが、送信器オプションも一応考慮する。ニカラグアの計画のためFM放送送信器を探したところでは、PCIカード上でFM放送送信をおこなう会社があった。新しいカードを作成中なので、そのためのLinuxドライバを書くよう手紙を出した。

この計画に興味がおありか、又は大学ですることがあるとお考えなら、このようなカードが入場券になるかも知れない。番組資料選択にウエブインターフェイスを用い、近くのFM受信器に放送することが出来る。 radioファンであると同時にコンピュータ・ファンでもある私は、これに大変興味がある。

全体見通し

これが変人の考えの全部だが、始めに言ったように、買い物リスト以上の物を差し上げたい。家族が聞くことの出来る自宅地下室の100mw放送局は商業の上客にはならないが、数万の商業局が顧客になるかも知れない。

ソリューション提案に必要なソフトウエア全部を統合するのが、最初の部分だ。次は、インストレーションとサポートになる。完全雇用職員が運営するラジオ局及び、コマーシャルに数百万ドルも支払っている広告主は、このようなシステムの利点を直ちに理解するだろう。最大の障害はソリューションにサポートがあることを示すことだ。つまり、これを撰んだため、その放送局が放送中止をしないことだ。

小型局にとって、これは誰かを呼ん問題を解決して貰えること意味する。大型局にとっては、現場職員の教育訓練を意味する。予備システム、共有サーバなどを初めとする別のレベルのサポートもある。言い換えると、同一ソフトウエアを提案するがサポートの可能性が異なる色々な市場の取り合わせになる。

次は?

次は読者次第だ。プロジェクトは説明した。残念乍ら、私には「日常業務」があって、これらをまとめる時間がない。仮にまとまっても、ソフトウエア・サポートの仕事に入る気はない。

私が望むのは、細々したことをする人がいることだ。それがこの記事を執筆した目的なのだ。私は、入力の提案、方向付けの援助、討論フォーラムのメールリスト提供、プロジェクトの広報をしたい。参加ご希望があればhttp://www.linuxgazette.com/issue96/ィmailto:phil@ssc.com" にメールして関心がある旨をお知らせ頂きたい。又は LG Projects Wiki の呼び鈴を押されたい。知らない間にLinux-制御ラジオが出るかも知れない。

 

Phil Hughes はLinux Journal及びLinux Gazetteの発行人である。オリンピック半島の太平洋岸にある自宅から、生涯発信し続けたいと願っている。

 

Copyright © 2003, Phil Hughes. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
XfigとTEXを用いる科学ポスターのデザイン
By C.E.C. Artime, J.A. Baro

 

変な伝統的ユーザベースが沢山の科学ツールのフリーソフトウエアの概観を作った。科学的業績の重要特性は、科学的会合における研究方法と結果の公開弁論で、これは通常、プレゼンテーション又はポスターを用いて果たされる。両方とも著者自身が口頭弁論で示すためスライドか何かを沢山のツール(OpenOffice, LATEX,...)を用いて作り、ポスターセッションに合ったポスターを作る必要がある。これはA0版用紙で、内容説明が肝要である。

the GIMPなど、グラフィック取扱用の一般ツールは、ポスターの大部分を写真とアナログ画像で埋めるとき大変役立つ。それでも、科学的画像はベクトル的グラフィック・ツールを用いて扱うのが最良である。この記事では、科学ポスターにグラフィックを取り込む方法を簡単に概観する。

The GIMP interface

デザイン: Xfig

GIMPは、ビッチマップ即ちラスター指向のツールである。したがって、個々のピクセルを扱うのを目的とする。この方法は写真と芸術品に適している。技術図面は、別の方法を取る。これらは、連続ピクセルではなく幾何学的要素を用いて記述する方が良い。この「ベクトル的」方法には、解像度に無関係のグラフィックを作るので任意の拡大縮小が出来るとの追加利点がある。.

Gfig: the GIMP vectorial tool

ベクトル的フリーソフトウエアSodipodi, Karbon14, Sketch... 幾つかを現在入手することが出来る。Gnome及びKDE デスクトップ環境に好適に組み込まれる物もある。GIMPでも、バージョン1.2以降では、極めて精緻なベクトルデザイン Gfig;のプラグインが可能で、メニュー(Filters->Render)の下にある。しかし古典X Windowアプリケーションは Xfigである。

The Xfig initial screen

Xfig は徹底的な検証を終えたプログラムでX Athenaウィジェット・ツールキットを用いる。したがって、成熟した製品で安定性に疑いの余地はない。締め切りが迫ることの多いポスターには大変重宝されている。

成熟したプロジェクトである当然の帰結として、Xfigには広範なユーザが様々な貢献をして来た。そのため各種分野(電子工学、UML、音楽、地図など)のため包括的な集積が作られた。

これは、情報再生が極めて直截的な読み易いテキスト・フォーマットで情報を記憶するので、信頼性のあるプログラムだ。この種のフォーマットは、SGML-に基づく近代の傾向にしたがわないで、グラフィックの記述用のASCII文字で記憶される最低限の情報から構成される。詳しい説明は、 The FIG file format か又は Debian システムのファイル/usr/share/doc/xfig/FORMAT3.2.gz.などにある。規則的なので、古典的な Unix/GNU テキストフィルタ、sed, awk などを用いる処理に適している。だからXMLフォーマットに対しASCIIを好む公算が大きい。他方、Gnuplot 及び GNU plotutils などの重要アプリケーションは、Xfigディストリビューションの範囲内で、FIGファイルを作ることが出来る。ファイルFIGAPPSの中に包括的リストを利用することが出来る。

Xfigの別の良い特徴は、LATEX フレンドリ・フォーマットを使用してエキスポートする能力があることだ。これはテキストにもグラフィックにも通用する。テキストの各断片に、'raw' でエキスポートするか 'as TEX'.でエキスポートするかを知らせる“special flag”を割り当てる。グラフィックは、ユーザの撰ぶ LATEXパケージ・オプションにしたがってコードする。これについては後で述べるので、続けて読むか又は Xfig ディストリビューションにあるLATEX.AND.XFIG 及び PDFLATEX.AND.XFIGファイルを読まれたい。

公平のため、Xfigの好ましくない特徴も明らかにしておかなければならない。悪く年取った訳ではない,Xfigには古い技術から受け継いだ欠点がある。

近代プログラムのユーザは、取消のレベルが一つなのが不満だろう。設計の際には注意が必要だ。

上述のように、Xfig はAthenaウィジェットを使うので、その制限を受ける。例えば、(編集ツールを用いるときなど)ダイアログ・ウインドウで強調文字を使うのが難しい。殆どの欧州人ユーザが不満に思っている。メタ・キイをコンポーズ・キイとして使うことが出来るのでキャンバス上でテキスト・ツールを用いる時は強調文字を作ることが出来る。

他方、Xfigは多数のエキスポート・フォーマットを用いる。中には LATEX ユーザに役立つものもある。しかし、XMLベースの SGV (伸縮可能ベクトル・グラフィック)など、新しいグラフィック・フォーマットのサポートは、未だ模索中である。

後処理

LATEX

LATEX は、TEXタイプ設定システムのトップに構築されるマクロである。科学論文、科学書の出版用に広く用いられる。知らないユーザが多いが、スライドを容易に圧縮することが出来る。だがLATEX だけを用いてポスターをデザインするのは怖ろしい。沢山の対象物を2次元空間内に多分複雑な相互接続で配置しなければならないからだ。そこでXfigを用い視覚で配置を決め、後でTEXエディタを使って磨き上げることにする。

視覚作業とTEXソースコードを上手く統合するため、Xfigユーザは、広範囲のオプションで強化した。先ず、ファイルをLATEX チャンク又は完成 LATEX ファイルとしてエキスポートする。次に、所与のグラフィック要素を、ユーザがどのマクロを利用するか又は好むかにしたがって、いくつかのTEX表現に転換する。この点は次の章で論じる。

fig2dev

Xfig ウェブサイトもまた transfigをホストする。これは、Figフォーマットから幾つかの「デバイス」にエキスポートするプログラムfig2devを含む。この機能は、GUIからもファイル・メニューの Export オプションの下で得られる。最終目標として作業全体を出来るだけ多く自動化したいので、スタンドアローン・プログラムに重点を置く。

Fig文書のTEX 要素への転換は幾つかの方法で行うことが出来る。どの方法も、高級な LATEXパケージ、epic, eepic, eepicemu, pictex、に支払う費用により、取扱うことの出来るグラフィック要素(回転テキスト、塗り潰し四角など)の数が異なる。最高の結果は、 PostScript (又はPDF) と TeXの組合せで得られた。これはXfig画面で見る要素全部を確実に印刷出力に与える。注意事項が二つある。specially flagged テキストはXfigでは列TEXとして示されるが、最終文書では上手く活字になる。Xdvi (teTEXで記述)など幾つかのプレビューワはこの種の要素を正しく表現することが出来ない。だからdvips と PostScriptビューワを用いるのが良い。

dvips

TEXファイルを処理すると規定値でDVI(DeVice Independent)フォーマットファイルを作る。このフォーマットは容易く表示命令一式に転換する事が出来る。最終文書用に最も普及しているのは PostScriptで、殆どすべての高級プリンタが理解することの出来る完成プログラム作成言語を特徴とする。

プログラム dvips は、DVIファイルを PostScriptに転換する。これは、tetexのように主TEXパケージと一緒に配布される。これはPostScriptの強力な特徴にアクセスすることが出来るので、幾つかの面白いオプションがある。そのうち一つは、cmでもA1などの名称でも、用紙サイズを設定する能力があることである。この特徴には -t 及び-T オプションを用いてアクセスする。

poster

dvipsの出力がA0版印刷の出来るプリンタに出力されると良い。これは余りない。代案はA4を16枚又はA3を8枚プリントすることだ。 poster パケージはPostScript1頁を数枚に区切ることが出来る。これを張り合わせて一つの画像を作る。切取線も示される Poster Debian パケージなどのように、KDEウェブサイトで入手することが出来る。

psresize

ポスターの小型コピイを作るに良いツールは psresize だ。 psutils Debian パケージに含まれている。

bash

Xfig図面に何か変更をするには、全体プロセスを反復しなければならない。上述のステップ全部をシェル・スクリプトとして貼り合わせることを勧める。最も普及するシェルGNU bash 用に開発されたものをここに示す。Figファイルを含むディレクトリ内から以下のスクリプトを呼び出すと、全体のプロセスが実行される。著者が用いた若干のLATEX特性が要求するLATEXのもの、及びXfigエキスポートが要求する前文と後文があることに注意されたい)。

(簡単なスクリプトの挿入は、Xfigディストリビューションの中で、FigフォーマットからEPS, TeXfig2eps、への転換の実行を意味することに気付いた。論じたように、多くの場合これだけでは十分でない)

#!/bin/bash
################################################
# Processes the FIG source file for the poster #
################################################

######################################################
#                                                    #
# Usage:                                             #
#         1. Design a poster with Xfig.              #
#         2. Save it as a normal FIG file, with      #
#            the name, e.g., `myfile.fig'.     	     #
#         3. Substitute `BASE=myfile' for the line   #
#            `BASE=poster' in this script.	     #
#         4. Run this script within the directory    #
#            where `myfile.fig' lies.	             #
#         5. The output files will be:		     #
#            `myfile-a0.ps' - one poster-sized page  #
#            `myfile-a4-1.ps' - a4-sized mini-poster #
#            `myfile-a4-16.ps' - sixteen tile pages  #
#						     #
######################################################

# basename

BASE=poster

# convert the FIG into LaTeX + PostScript

echo '
\documentclass{article}
\usepackage{amsmath}          % symbols and equations
\usepackage{amsfonts}         % needed for blackboard characters
\usepackage[spanish]{babel}   % titles in our language
\usepackage[latin9]{inputenc} % accented characters
\usepackage[a0paper,margin=0cm,nohead,nofoot]{geometry} % margins
\usepackage{graphicx}         % including figures
\usepackage{color}            % import from Xfig
\usepackage{epic}             % complements the following
\usepackage{eepic}            % Xfig filling
\usepackage{rotating}         % text in figures
\usepackage{type1cm}          % arbitrarily sized fonts
\begin{document}
' > $BASE.tex

fig2dev -L pstex $BASE.fig > $BASE.pstex

echo -n '
\begin{picture}(0,0)
\includegraphics{'$BASE'.pstex}
\end{picture}
' >> $BASE.tex

fig2dev -L pstex_t $BASE.fig >> $BASE.tex

echo '\end{document}' >> $BASE.tex

# typeset the source LaTeX

latex $BASE

# transform into a PostScript of size almost DIN A0

dvips -o $BASE-a0.ps -T 84cm,118cm $BASE

# build the small A4 version of the poster

psresize -Pa0 -pa4 $BASE-a0.ps $BASE-a4-1.ps

# build the 16 A4 pages composing the poster

dvips -o $BASE.eps -T 84cm,118cm -E $BASE
poster -mA4 -pA0 $BASE.eps > $BASE-a4-16.ps
スクリプトで用いたコマンドの中には説明の必要なものがある。以下でこれらを明らかにする。

\usepackage{color} は、Debianシステムの /usr/share/doc/xfig/README.Debianの中で提案されている。Xfig's pstex 最新版は\RGBコマンドを使用して文字色指定する。

その他のパケージは必要に応じ試行錯誤で含める。例ではそれらを使用していないが、ポスターに必要だったことのあるパケージの包括リストの説明にはなるだろう。ファイル

psresize.ps ファイル上で及び poster.eps ファイル上で働くことに注意されたい。したがってdvips は、-E オプション有りと無しで二度実行される。

このスクリプトの用法を示すため、先ず、Xfigを使ってグラフィックレイアウトを作る。コマンド
$ xfig -paper a0 -portrait
により、必要なポスターのサイズと向きをキャンバスが採用する。 ここ に示すサンプルポスターをスクリーンショットでデザインする。Figフォーマットをここに示す。これをposter.figの名でセーブする。スクリプトの最初の行で、basename posterBASE変数に割り当てられる。poster.figがあるのと同じディレクトリでスクリプトを走らせた後、次の出力ファイルが関心のあるものである。
poster-a0.ps: A0適合プリンタで印刷出来る A0-サイズ postcriptを含む。
poster-a4-1.ps: ポスター会議参加者配布用のA4サイズに縮小したポスター。
poster-a4-16.ps: まとめてA0にするA4版16枚を含む postscript ファイル。

超大型フォント: 裏技が必要

標準tetex ディストリビューションは、規定値でビットマップ・フォントを使用する。これは離散的なmagstepを必要とするので、次のような警告がでることがある。

LaTeX フォント警告:フォント形状 `OT1/cmr/m/n' のサイズ <30> はありません
(Font)              入力5行目はサイズ <24.88> で置き換え

LaTeX フォント警告:相違のあるサイズ置換
(Font)              5.12pt までが生じました
tetex ドキュメントに記述するように、\usepackage{type1cm} により、任意のタイプサイズでコンピュータ用フォントを使用する事が出来るので、これを他のパケージの後にインクルードする必要がある。

transfig は、固定セットのフォントサイズを、マクロを通じて

#define TEXFONTSIZE(S)        (texfontsizes[((S) <= MAXFONTSIZE) ? round(S)\
                                                         : (MAXFONTSIZE-1))])
使用するので、これが間接的にフォントの最大サイズを41ポイントに制限することに注意。示した例では、transfigのソース(ファイル texfonts.h) をエディットしてマクロを次のように変更する
#define TEXFONTSIZE(S)   (S)
Debian の方法:
$ su
Password:
# apt-get remove transfig
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
  transfig
0 packages upgraded, 0 newly installed, 1 to remove and 3  not upgraded.
Need to get 0B of archives. After unpacking 799kB will be freed.
Do you want to continue? [Y/n]
(Reading database ... 67797 files and directories currently installed.)
Removing transfig ...
# exit
$ apt-get source transfig
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 340kB of source archives.
Get:1 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (dsc) [652B]
Get:2 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (tar) [326kB]
Get:3 ftp://ftp.es.debian.org testing/main transfig 1:3.2.4-rel-4 (diff) [13.0kB]
Fetched 340kB in 1m51s (3062B/s)
dpkg-source: extracting transfig in transfig-3.2.4-rel
$ vi transfig-3.2.4-rel/fig2dev/dev/texfonts.h
$ cd transfig-3.2.4-rel/
$ dpkg-buildpackage -rfakeroot -uc -us
...
[lots of output]
...
$ cd ..
$ su
Password:
# dpkg -i transfig_3.2.4-rel-4_i386.deb
Selecting previously deselected package transfig.
(Reading database ... 67734 files and directories currently installed.)
Unpacking transfig (from transfig_3.2.4-rel-4_i386.deb) ...
Setting up transfig (3.2.4-rel-4) ...
# exit

この方法が面倒だと思うなら、この directory を見ると、大きい頁(ポスター)用の大型フォントを作る目的のスタイルファイルがある。

 

著者紹介:

C.E.C. Artime は、GNU のファンで、2000年以来のフリー・ソフトウエア提唱者だ。

J.A. Baroは、Linuxユーザで、1996年以来の Perl 愛好者だ。

 

Copyright © 2003, C.E.C. Artime, J.A. Baro. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
サーボモータ、Linux/TRAIその他面白い材料
By Pramode C.E

緒言

先月号の 記事(オシロスコープを通じるLinux)で、Linuxの下でタイミングに敏感なコードを書くのに伴う問題を探求し、RTAI が優れた方法でこれを解決するのが分かった。この問題で、Computer Visionプロジェクトの私の学生が開発した面白いアプリケーションを示す。RATI理解のため私が書いたプログラムも示す。

・PWM 信号のパルス幅を測定する簡単なプログラム
・RTAIの下で割込を用いる周波数計数プログラム
・マルチスレッド・コードにおける優先度逆転の影響及び、RATIの下でリソースsemaphoresの使用を実証しようとするプログラム。(ここを理解するため基本的 semaphore作用を理解している読者えお期待する)

プロジェクト

コルト・ドーガンは記事Creating a web page controlled 2-axis movable camera with RTLlinux/Proの中で、自分の飼い猫ケプラーを常時監視することの出来る装置の構築に関するソフトウエアとハードウエアを述べている。元のwebcamは、二つのサーボモータで制御する。一つは上下に他は左右に180度振らす。両サーボの運動はリアルタイムで制御する。

この記事に刺激されて、私の学生数名がシステムの設計を始めた。結果を示す。

上下のサーボがはっきり見える。下にあるものは、その軸上にある台を回転する。(台上にwebcam)。全体を透明プラスチックで作った。下に拡大写真を示す。

サーボの制御

5V DCで動く模型用サーボモータ(ここで用いたフタバ S2003 など)は、トルクが大きく、180度の円弧に沿う点(又は少し大きい−サーボは360度回転しない。機械的ストップが組み込んである。servo hacking(サーボ細工)にのめり込みたいなら取り去ってもよい)に位置決めする事が出来る。サーボの制御線(通常白色)には、20ms位の周期でデジタル信号を連続的に送る−周期は正確でなくとも良いが、オンの時間は正確に制御する。これがサーボの動く位置を決める。今の場合、2.2ms から 0.5msまでのオン時間で約170度サーボが動く。下に制御パルスの図を示す。

「通常」Linuxを使ってこの制御パルスを作るのは難しい−システム上の別の活動が波形を妨害する。そこで、リアルタイムRATIタスクを使用する。

リアルタイム・タスク二つがサーボを制御する。一つは上のサーボで一つは下だ。サーボ位置はリアルタイムfifo2個の助けを借りてユーザ空間からリアルタイムタスクに連絡する。先ずマクロ/変数定義を見よう(実際の回転角度は正確に測定しないのでフタバ S2003 のユーザは数値の違いを気にしなくとも良い):

#define BOTTOM_SERVO_FIFO 0
#define TOP_SERVO_FIFO 1

#define FIFO_SIZE 1024

#define BOTTOM_SERVO 0
#define TOP_SERVO 1

#define BOTTOM_SERVO_PIN 2 /* Bit D1 of parport o/p register */
#define TOP_SERVO_PIN 4 /* Bit D2 of parport o/p register */

#define TICK_PERIOD 1000000 /* 1 ms */
#define STACK_SIZE 4096

#define MIN_ON_PERIOD 500000 /* .5 ms */
#define NSTEPS 35
#define STEP_PERIOD 50000 /* 50 micro seconds */

#define TOTAL_PERIOD 20000000 /* 20ms */

#define ONE_SHOT

RTIME on_time[2], off_time[2];
RT_TASK my_task1, my_task2;

下部サーボ(bottom servo)はパラレルポートのピン3に、他はピン4に接続してある。マクロのBOTTOM_SERVO_PIN とTOP_SERVO_PINがこれらのピンに設定するためパラレルポート・データレジスタに書き込む値を定義する(パラレルポート・データレジスタ制御ピン番号2のビットD0、ピン番号3のビットD1など−マクロの命名が良くないと読者が混乱する)。制御パルスの最低オン時間は500000 ナノ秒(.5 ms)と決める。0.5msから2.2msまでのパルス幅について170度回転するのでパルス幅50マイクロ秒の変化で5度回転するからである。サーボの「0番ステップ」をパルスが0.5ms継続するとき動く位置と定義し、「35番ステップ」をパルスのオン時間が 0.5ms + (50 マイクロ秒 * 34)、つまり2.2ms継続するとき動く位置と定義する。したがって、各ステップが約5度、全体で35ステップで170度回転することになる。fifoを通じてユーザ・プログラムが連絡するのはこのステップ番号である。

全体周期を20msと定義する。on_timeアレーの0番要素に下部サーボを制御するパルスの現在オン時間を、1番要素に上部サーボのそれを記憶する。off_timeアレーについても同様である。

サーボ制御用コードを見よう:

static void servo_task(int pin)
{
	while(1) {
		outb(inb(0x378) | pin, 0x378);
		rt_sleep(on_time[(pin >> 1) - 1]);
		outb(inb(0x378) & ~pin, 0x378);
		rt_sleep(off_time[(pin >> 1) - 1]);
	}
}
タスクに対するアーギュメントは、制御するサーボにしたがって、BOTTOM_SERVO_PIN 又はTOP_SERVO_PINである。これらの値を1度右シフトして1を減ずれば、サーボ番号が得られる。先ず、対応するパラレルポート・ピンをハイにして、sleepを実行し−次いでピンをローにすると、タスクはもう一度sleepに入る。

ここでfifoハンドラ・コードを見ると−ユーザ・プログラムはリアルタイム・タスクと二つのfifo−サーボ毎に一つ−を通じて連絡する。ユーザ空間からいずれか一つに書込があるとき実行されるfifoハンドラは同じである。ユーザ・プログラムは「ステップ番号」つまり0から34までの整数を連絡する。

int fifo_handler(unsigned int fifo)
{
	int n, r;
	unsigned int on;
	r = rtf_get(fifo, &n, sizeof(n));
	rt_printk("fifo = %d, r = %u, n = %u\n", fifo, r, n);
	if((n < 0) && (n > 34)) return -1;
	on = MIN_ON_PERIOD + n*STEP_PERIOD;
	on_time[fifo] = nano2count(on);
	off_time[fifo] = nano2count(TOTAL_PERIOD - on);
	return 0;
}
このコードは分かり易い筈だ。ステップ番号を読んで、対応する「オン時間」に転換の上on_time アレーの適切なスロットに記憶する。ハンドラに対するアーギュメントは、ユーザ空間プログラムからデータを書き込むfifo番号である。

ここから、モジュール初期化部分に入る。コードは分かり易い筈だ。

int init_module(void)
{
	RTIME tick_period;
	RTIME now;

	rtf_create(BOTTOM_SERVO_FIFO, FIFO_SIZE);
	rtf_create_handler(BOTTOM_SERVO_FIFO, fifo_handler);
	rtf_create(TOP_SERVO_FIFO, FIFO_SIZE);
	rtf_create_handler(TOP_SERVO_FIFO, fifo_handler);
	
#ifdef ONE_SHOT
	rt_set_oneshot_mode();
#endif
	rt_task_init(&my_task1, servo_task, BOTTOM_SERVO_PIN, STACK_SIZE, 0, 0, 0);
	rt_task_init(&my_task2, servo_task, TOP_SERVO_PIN, STACK_SIZE, 0, 0, 0);
	tick_period = start_rt_timer(nano2count(TICK_PERIOD));
	on_time[BOTTOM_SERVO] = nano2count(MIN_ON_PERIOD);
	on_time[TOP_SERVO] = on_time[BOTTOM_SERVO];
	off_time[BOTTOM_SERVO] = nano2count(TOTAL_PERIOD - MIN_ON_PERIOD);
	off_time[TOP_SERVO] = off_time[BOTTOM_SERVO];
	now = rt_get_time() + tick_period;
	rt_task_make_periodic(&my_task1, now, tick_period);
	rt_task_make_periodic(&my_task2, now, tick_period);
	
	return 0;
}

これから、モジュールをクリーンアップする:

void cleanup_module(void)
{
	stop_rt_timer();
	rt_busy_sleep(10000000);
	rtf_destroy(BOTTOM_SERVO_FIFO);
	rtf_destroy(TOP_SERVO_FIFO);
	rt_task_delete(&my_task1);
	rt_task_delete(&my_task2);
}

リアルタイム・タスクは、サーボを完全に制御することが分かった。多数のkernelコンパイルを走らせ、大型ファイルをコピイさせuntarrさせるなどして、システムに負荷を掛けたが、リアルタイム・タスクは十分に働くことが分かった。

割込の使用

低周波矩形波の周波数測定は容易だ。パラレルポート割込ピンに供給し、割込サービスルーチンを書いてルーチン内で計数を一宛増加するだけだ。この計数をリアルタイムfifo経由でユーザ空間プログラムに送付する。

リアルタイム・アプリケーションは割込を見過ごしたり、割込取扱コード実行まで割込確認後長時間経つことを許さない。「通常」Linux kernelでは、これは全く問題なのだ。Linux kernelは、コードの重要部分を実行しているとき割込を無効にする−この間、システムは外部イベントに応答しないままになる。RTAIでパッチしたkernelでは、Linuxが割込を無効にするよう命じても、実際には無効にしないで、RATIはLinux kernelが割込を見ないようにする。リアルタイム・タスクは、邪魔されないで割込を扱うことが出来る。.

パラレルポート割込ピンに入る割込の数を計数する小型プログラムを示す。関数発生器を用いて各種周波数で矩形波を発生させてこれをテストした。簡単な555タイマーに基づく回路でも同じことが出来る。

#include <linux/module.h>
#include <rtai.h>
#include <rtai_sched.h>
#include <rtai_fifos.h>
#include <asm/io.h>

#define FIFO_R 0
#define FIFO_W 1
#define TIMERTICKS 1000000000 /* 1 second */
#define STACK_SIZE 4096
#define FIFO_SIZE 1024

static int prev_total_count = 0;
static int new_total_count = 0;
static RT_TASK my_task;

static void fun(int t)
{
	while(1) {
		prev_total_count = new_total_count;
		new_total_count = 0;
		rt_task_wait_period();
	}
}

int fifo_handler(unsigned int fifo)
{
	char c;
	rtf_get(FIFO_R, &c, sizeof(c));
	rtf_put(FIFO_W, &prev_total_count, sizeof(prev_total_count));
	return 0;
}
	

static void handler(void)
{
	new_total_count++;
}

int init_module(void)
{
	RTIME tick_period, now;

	rt_set_periodic_mode();
	rt_task_init(&my_task, fun, 0, STACK_SIZE, 0, 0, 0);
	tick_period = start_rt_timer(nano2count(TIMERTICKS));
	now = rt_get_time();
	rt_task_make_periodic(&my_task, now + tick_period, tick_period);

	rtf_create(FIFO_R, FIFO_SIZE);
	rtf_create(FIFO_W, FIFO_SIZE);
	rtf_create_handler(FIFO_R, fifo_handler);
	
	rt_request_global_irq(7, handler);
	rt_enable_irq(7);
	outb(0x10, 0x37a); 
	return 0;
}

void cleanup_module(void)
{
	stop_rt_timer();
	rt_busy_sleep(10000000);
	rt_task_delete(&my_task);
	rt_disable_irq(7);
	rt_free_global_irq(7);
	rtf_destroy(FIFO_R);
	rtf_destroy(FIFO_W);
}

rt_request_global_irq とrt_enable_irq functions は、一緒にRTAI kernel に割込んで(パラレルポート割込である)、IRQ 7 にサービスする。割込ハンドラは計数をインクレメントするだけだ。一秒毎に(我々の入力は迅速に変化しないし、長い累積計数の観測に関心がある)、リアルタイム・タスクがウエークアップして、この計数値を別の変数(prev_total_countと言う)に記憶するとともにカウンタをクリアする。ユーザ・プログラムはFIFOを経由して prev_total_count にアクセスする事が出来る。

ユーザ・プログラムはダミイ値をFIFO_Rに書込み、FIFO_Wから読取って計数する。FIFO_Rに書込む結果、fifo_handlerが実行され、これが計数をFIFO_Wに書込む。もっと良い方法があるかも知れないが、私は知らない。ユーザ・プログラムを示す。

/* User space test program */

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>

#define FIFO_W "/dev/rtf0"
#define FIFO_R "/dev/rtf1"

main()
{
	int fd1, fd2, dat,r;

	fd1 = open(FIFO_W, O_WRONLY);
	fd2 = open(FIFO_R, O_RDONLY);
	assert(fd1 > 2);
	assert(fd2 > 2);
	
	write(fd1, "a", 1);
	r = read(fd2, &dat, sizeof(dat));
	assert(r == 4);
	printf("interrupt count = %d\n", dat);
}

パルス幅の測定

全幅3msのパルスのオフ時間を0.1ms以内の確度で測定したい。周期0.1msの周期的タスクを開始する。この周期的タスクの「awakening」毎に、信号の高低を点検する。30個のサンプルのうち信号が低であった回数を記録する。この手順を実行するコードを示す:

#include <linux/module.h>
#include <rtai.h>
#include <rtai_sched.h>

#define LPT1_BASE 0x378
#define LPT1_STATUS 0x379
#define ACK 6

#define STACK_SIZE 4096
#define TIMERTICKS 100000 /*  0.1 milli second */
#define TOTAL_SAMPLES 30 /* Take 30 samples at 0.1 ms each */

static RT_TASK my_task;
static int old_off_samples, new_off_samples;

static void fun(int t)
{
	static int count = 0;
	while(1) {
		new_off_samples = new_off_samples + ((inb(LPT1_STATUS) >> ACK) & 0x1);
		if(++count == TOTAL_SAMPLES) {
			count = 0;
			old_off_samples = new_off_samples;
			new_off_samples = 0;
		}
		rt_task_wait_period();
	}
}

int init_module(void)
{
	RTIME tick_period, now;

	rt_set_periodic_mode();
	rt_task_init(&my_task, fun, 0, STACK_SIZE, 0, 0, 0);
	tick_period = start_rt_timer(nano2count(TIMERTICKS));
	now = rt_get_time();
	rt_task_make_periodic(&my_task, now + tick_period, tick_period);
	return 0;
}

void cleanup_module(void)
{
	stop_rt_timer();
	rt_printk("old = %u, new = %u\n", old_off_samples, new_off_samples);
	rt_busy_sleep(10000000);
	rt_task_delete(&my_task);
}
周期的タスクはパラレルポート・ステータスレジスタのD6番ビットを点検する。10番ピンの入力信号が低であると、これは1になる。計数は、いつものように、fifoを通じてユーザ空間に移すことが出来る。

Semaphores と優先度の逆転

プログラマはsemaphoreを用いて多数スレッドを同期させる。RATIには

void rt_sem_init(SEM *sem, int value);
ファンクションがあって、これをsemaphoreオブジェクトの作成と初期化に用いる。各種優先度を持つタスクの優先実行の出来る環境におけるロック機構の使用に伴う「優先度逆転」と言う面白い問題がある。火星探査機計画の間に出会った故障により、リアルタイム設計者達の注意を引いたと思われる(Googleで検索すると情報がある)。先ずこの問題を述べる(火星探査機故障に関するネット情報に基づく)。

データを書込む(又は読取る)ため定期的にバッファにアクセスする極めて優先度の高いタスクHがあるとしよう。優先度が低くて偶にほんの短時間だけ走る別のタスクLもまた、そのバッファに書込読取のためアクセスする必要があるとしよう。両タスクは、そのうち一つがアクセスする前にlookを捕捉しなければならない。lookは一時に一つのタスクだけが取得を許される。タスクLがlookを捕捉してバッファへのアクセスを開始するとする。その間に割込がタスクHのスケジューリングを生じると、タスクHもまたlookを捕捉しようとするが、タスクLが捕捉しているので、阻止される。通常の場合、タスクLは短時間で作業を終えてlookを解放するので、タスクHは続けることが出来る。だが、中優先度のタスクMがスケジュールされていると、タスクMが終わらない限り、OSはタスクLが続くのを許さない。タスクLが終わってlookを解放したときのみ、タスクHを続けることが出来る。結局、タスクHはタスクMが完了する時間だけ遅れさせられる。システム設計者がこれを見逃して、タスクHが短時間でも走らないときは時間切れにしてシステムを再立ち上げするウォッチドッグ・タイマーを構築すると−その結果は、タスクMがタスクHとタスクLとの間の入った時はいつでも、システムが再立ち上げされることとなる。

この問題を実証するプログラムを示す:

#include <linux/module.h>
#include <rtai.h>
#include <rtai_sched.h>

#define LPT1_BASE 0x378
#define STACK_SIZE 4096
#define TIMERTICKS 100000000 /*  .1 second */

#define HIGH_PRIO 0
#define MEDIUM_PRIO 1
#define LOW_PRIO 2

#define PORTB 0x61
#define PIT_CTRL 0x43
#define PIT_DATA 0x42

static RT_TASK my_task1, my_task2, my_task3;
SEM flag;
RTIME tick_period;
unsigned char c = 0;

void speaker_on(void)
{
	unsigned char c;
	c = inb(PORTB)|0x3;
	outb(c, PORTB);
}

void speaker_off(void)
{
	unsigned char c;
	c = inb(PORTB)&~0x3;
	outb(c, PORTB);
}

void generate_tone(void)
{
	/* Counter 2, low and high, mode 3, binary */
	outb(0xb6, PIT_CTRL);
	outb(152, PIT_DATA);
	outb(10, PIT_DATA);
}


static void my_delay(unsigned int i)
{
	while(i--);
}

/* Highest priority */
static void info_bus_task(int t)
{
	speaker_on();
	rt_sem_wait(&flag);
	rt_printk("info bus task got mutex...\n");
	rt_sem_signal(&flag);
	speaker_off();

}

/* Medium Priority */
static void comm_task(int t)
{
	my_delay(0xffffffff);
	my_delay(0xffffffff);
	my_delay(0xffffffff);
}

/* Low priority */
static void weather_task(int t)
{
	rt_sem_wait(&flag);
	rt_sleep(30*tick_period);
	rt_sem_signal(&flag);
}


int init_module(void)
{
	RTIME  now;

	//rt_typed_sem_init(&flag, 1, RES_SEM);
	rt_sem_init(&flag, 1);
	rt_set_periodic_mode();
	generate_tone();
	rt_task_init(&my_task1, info_bus_task, 0, STACK_SIZE, HIGH_PRIO, 0, 0);
	rt_task_init(&my_task2, comm_task, 0, STACK_SIZE, MEDIUM_PRIO, 0, 0);
	rt_task_init(&my_task3, weather_task, 0, STACK_SIZE, LOW_PRIO, 0, 0);

	tick_period = start_rt_timer(nano2count(TIMERTICKS));
	now = rt_get_time();
	rt_task_make_periodic(&my_task1, now + 2*tick_period, tick_period);
	rt_task_make_periodic(&my_task2, now + 3*tick_period, tick_period);
	rt_task_make_periodic(&my_task3, now + tick_period, tick_period);
	return 0;
}

void cleanup_module(void)
{
	stop_rt_timer();
	rt_busy_sleep(10000000);
	rt_sem_delete(&flag);

	rt_task_delete(&my_task1);
	rt_task_delete(&my_task2);
	rt_task_delete(&my_task3);
}
information bus、communication及び weather タスクは、それぞれ高、中、低の優先度を有する。RTAIは、rt_task_iniの間にタスクに優先度を設定させる。weather タスクが最初に始まる。これがsemaphore(このsemaphoreは、rt_sem_initで1に設定される)を捕捉し次いで30tick(各tickは0.1秒なので3秒)だけ休眠に入る。information busタスクは、次のタイマーtickで走る( rt_task_make_periodicに対する秒アーギュメントは、タスクの開始時点である)、これはPCスピーカをオンにし、semaphore上で`down' 操作をしようとし、その途中で阻止される。我々は、weather タスクが休眠を完了しsemaphoreを解放して、information busタスクを完了まで走らせてスピーカから雑音が出るのを止めると、期待する。だが問題は、wetherタスクが休眠から出る前に、中優先度の`communication' タスクがスケジュールされて、一連の忙しいループの実行を開始する(私のAthlon XPシステム上では、 -O2 を用いてコンパイルするとき約17秒の遅延を生じる−kernelにプラグインする前に時間遅延をユーザランド・プログラムで測定するのが良いだろう−遅延ループが走っている限りマシンは不安定状態になるので、注意深く実行するのを忘れないと)。OSは、中優先度タスクがループの実行に忙殺されているため、3秒過ぎてもweatherタスクを休眠から出すことが出来ない−約17秒後にcommunicationタスクが完了して、weatherタスクがその実行を継続する。weatherタスクは、semaphore上で `up' 操作を実行し、information busタスクを阻止状態から出してスピーカを止めさせる。高優先度のinformation busタスクがcommunicationタスクにより遅延させられるのが分かる。

RTAI は `resource semaphores' をサポートする−これらは上述の問題を解決するため使用する事が出来る。我々のsemaphoreを、

rt_typed_sem_init(&flag, 1, RES_SEM);
のように初期化する。元々semaphoreを「取得」するたタスク(Weatherタスク)が、その上で阻止されるinformation busタスクの高優先度を「相続」する。その結果、RTAIスケジューラはcommunicationタスクに優先して、正確に3秒の休眠後に、制御をweatherタスクに戻す。

謝辞

webcam-サーボ・モータ設定は、Krishna Prasad, Mahesh 及び友人がComputer Visionプロジェクトの一部として実行した。アイデアをRTLinuxに実行したことにつきCort Douganの影響に感謝する。RTAI には良い文書と沢山のコード例が付いている。システムだけでなく、文書まで作られた大勢の人々に感謝する。

著者から

私は1997年以来GNU/Linux と基礎コンピュータ科学を教えている。時間を割く気があれば、ホームペイジpramode2.tripod.comを訪ねられたい。

 

著者紹介:

私は インドのカラチにあるICソフトウエアで働くインストラクタです。有機化学者になりたいと思っていましたが、可能な第二志望で満足しています。それはLinuxと取り組んで、プログラム作成を教えることです。

Copyright © 2003, Pramode C.E. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 

tcp/ipデバッグの簡単な手引き

By David Dorgan
 

これはTCP/IPネットワークのデバッグの手引きである。Linux又はUnix類似OSを使用者を対象とする。

 

金曜日の午後5時、ユーザが$someウェブサイトに接続出来ないと言って来た。どうするか?パスはあまりない。内部又は外部サイトは、別々の方法を必要とすることが多い。

 

何かは変わらないだろう。こう考えて見よう。(物理)レイヤ1が働いていないときは、その上にあるもの全部が働こうとしない。telnet, ping, traceroute, tracepath など数多くのツールを使って、問題はどこか、どのレイヤで何がOKかを見極めるのは良い考えだ。pingとtracerouteがホストに対して働くとすると、ポート80でなくポート50が手に入るので、ウエブサーバが死んでいる可能性がある。ローカル・ゲートウエイは通過出来ないが、ローカル・ゲートウエイをpingすることは出来るなら、送信しない場合で、ファイアウォール構成の問題などの可能性がある。

 

ポート80上でthesite.comにtelenetを試して、接続出来るかを見る。接続を拒否されるならば、外向き接続をブロックするファイアウォールもプロキシもない、何かの種類のサービス休止の可能性がある。暫くそこに止まってから「接続不能」と言うときは、継続する。

 

リモートサイトをpingして見る。これは有用だが、ブロックICMPをする場所もある(これらは、tcp/ipを作る間に、最初の6日間で週の仕事の大部分をおこない、土曜には何もしないとの印象を持っていて、ICMPを冗談に発明したに違いない)。だからtracerouteを試すことが出来る。これもブロックされるかも知れないが、一般的に問題の所在の状態を示す。この時点で、止まった場所を見る。ローカル・ゲートウエイかゲートウエイ装置の内部ルータの筈だ。その後、ICPネットワークに入るのが分かる。ICPが見つからなくて、最初の数ステップで止まるときは、ISPへのリンクの問題である可能性がある。ICPを示して、ISP名の直後に機能休止があるときは、ICPが上流へのパスを見失い古いパスが未だ有効なので、パケットがそこで止まっている。最後に、他端まで届いて全く完了してしまうか、又は某社-gw.customer.isp.netで止まるときは、相手側が入信ICMPをブロックしている。

 

何も接続しないと思われるときは、IPを試すよう命じる。これが働けば、DNS設定を点検する。

 

一定の出来事に共通の特質。

 

サービスは駄目だが、ネットワークは良好なとき:ping とtracerouteが上手くいって、別のオープンポートに接続出来るとき、つまりマシンがメールとリモートアクセスをするときは、ポート22(ssh)は良いがポート25(smtp)は駄目なときは、MTAだけの問題の可能性がある。

 

ファイアウォールがポートをブロックする:ルータ又はファイアウォールに「全部無視」の規定値があるとき、上手く働かないが、ほとんどの人はそうしない。このマシン上でtelnetするとき、ポート25に入れないとすると、時間切れになるが、メールサーバであることが分かる。高番号ポートだけ無作為に少数のポートにtelnetしてみる。接続を拒否されるときは、IPのせいでファイヤウォールがポート25をブロックしている可能性がある。このポート入手することが出来ないのにマシンが応答するからだ。

 

ISPへのリンクが故障:どこかにtracerouteを試みると、時間切れでない最後のホップが自社内部からのものであることが分かり、whatever-isp.netの付いた何物も見えない。

 

リンクが別の側に行く:この場合、tracerouteパケットをブロックしないのが分かるので、 tracerouteするとき、自分のispから、キャリアへ、そのispへと行き、そのISPのリンクで正常に停止する。

 

ISPのルート決定に問題がある:プロバイダ*ahem*に起こることがある。私は、物理的に異なる場所にあり異なるプロバイダを使用する少数のマシンにアカウントを持っている。だから望みのリソースが手に入らないときは、それをLINXに直接ぶら下がるマシン及びUS ISPから離れたマシンからtracerouteして見る。そこから働き、自分からのtracerouteが、london.isp.netなどで、時間切れ又は高い遅延を示すときは、ロンドンへのリンクが使い過ぎか又は問題がある。

 

マシンへのログインに約2分を要する:ログインのとき、w又はwhoとタイプして、IP又はホスト名から来ていると告げるか否かを見る。ホスト名は告げない筈だ。基本的にDNS上で長く待っている。迅速に返答する内部DNSを使用するか、又はIPアドレスを逆に見る筈だ。

 

サービスに接続出来ないと苦情を言う人がいる。ホスト外側から手動で接続してみても役立たない。そのときは、マシンに行って、ポートにtelenetするか又はnetstat -an | grep LISTEN をおこなって、聴取中のポート番号を見る。それがあるときは、パスに沿って又はローカルホストでフィルタされている。聴取しないときは、fstat又はlsof をしてプロセス名がIPv4、又は聴取中のipアドレスとホストを示すインターネット・エントリを示すのをgrepする。

 

著者紹介:

David は、活動的な執筆者で、将来もっと貢献したいと考えている。

 

Copyright © 2003, David Dorgan. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
snmp 拡張の簡単な手引き
By David Dorgan
 
SNMP とMRTGを用いるモニタ及びグラフ作製アプリケーション.
 
この記事の主要部分は二つだ。最初は net-snmpを用いるサービス又はプロセスの点検だ。
 
先ず、net-snmp.orgから net-snmp をダウンロードする。単に、
./configure ; make ; make installとすれば、ほとんどの場合に全てが完了する。
この後 sudo snmpconf を走らせて snmpd.confファイルを作る。
これにコミュニュティ名、位置、などが入る。
次いで、基本的コンフィギュレーションを用い、
sudo snmpdでsnmpdをスタートさせることが出来る、
又はsudo snmpd -r で スタートアップ直後に殆ど特典を落とす
net-snmpをスタートさせることが出来る。
 
この規定値設定では、規定値コンフィギュレーションで、
snmpwalk -v 1 -cのような何かをして、内蔵設定の幾つかを見ることが出来る。
ここで興味のあるセクションに到達するには、
今書いたアプリケーションをモニタしたいと言う...
ポート25がアップか否かをsnmp経由でチェックしたいと言う...
成功なら0を、失敗なら1を返す簡単なpyohonアプリケーション[0]を書くことが出来る。
 
(実際には、これをリモートホストから行うだけであろうが、
これは、アプリケーションに拡張することの出来る簡単な例に過ぎない)
 
そこで、このイベントをモニタするには、/etc/snmpd.conf に
exec 1.3.6.1.4.1.5000.100 check-smtp /software/snmp/check-smtp.py
のような行を追加する
極端に簡略化した数字表現は、
1.3.6.1.4.1が企業を、5000 は組織のMIB番号を、100は特定OIDを
意味する。組織私有企業番号取得に関する情報は、
http://www.iana.org/cgi-bin/enterprise.pl
 
ここで snmpwalk -v 1 -c public localhost 1.3.6.1.4.1.5000.100とタイプすると
返答だけではなく、OID内のあらゆるオブジェクトが見られる。
(snmpマネージャ又はmrtg...を行う必要のある)特殊なものがあれば、
snmpwalk -v 1 -c public localhost 1.3.6.1.4.1.5000.100.101.1などとする。
 
又はリモートマシン上でsnmpとmrtg?を付けて何か(何でも)をgraphする
 
mysqlデータベース内のスレッド量をチェックするだけの
単純なmrtgが欲しいと言う。これも有用だが、また別の簡単な例、
シェルを増殖してコマンドを実行するのを気にしないと言う。
mysqladmin status | awk {â??print $4â??} などをさせる。
これはシステムに馴染まないが、この場合頑丈なCアプリケーション
を示す多くの点はない。ここで、 /etc/snmpd.conf に
exec 1.3.6.1.4.1.5000.101 mysql-thread-load /software/snmp/mysql-thread-load.sh
を加え、ファイル内に次を入れる
#!/bin/sh
mysqladmin status | awk {â??print $4â??}
 
そしてプロセスを呼び出すことにより実行可能であることを確認する。
 
簡単な部分的 mrtg configの例を示す[1].
 
Targetの中で、&記号で分けて数字を2回繰り返した理由は:
一般的にmrtgは、入信と出信の二つの入力を気体するので、こうして両方に
同一回答を使用するだけである。勿論、mysql threadsなどを用いてモニタし、
平均をロードすることが出来るので、同一の図にグラフすることが出来る。
これは、アプリケーションとシステム負荷との相関ため、興味がある。
 
[0]:
import socket
import time
 
HOST = â??localhostâ??
PORT = 25
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((HOST, PORT))
print â??0â??
except socket.error:
print â??1â??;
 
[1]:
Target[mysqlconnections]: 1.3.6.1.4.1.5000.101.101.1&1.3.6.1.4.1.5000.101.101.1:public@hostname
options[mysqlconnections]: nobanner,absolute,gauge,growright,nopercent
Title[mysqlconnections]:Mysql Threads
PageTop[mysqlconnections]: <h1>Mysql Threads</h1>
MaxBytes[mysqlconnections]: 1000
YLegend[mysqlconnections]: connections
ShortLegend[mysqlconnections]: connections
LegendI[mysqlconnections]: connections:
LegendO[mysqlconnections]:
Legend1[mysqlconnections]: connections
Legend2[mysqlconnections]:
Step[mysqlconnections]: 12
 

著者紹介:

David は、活動的な執筆者で、将来もっと貢献したいと考えている。

 

Copyright © 2003, David Dorgan. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
ソフトウエア・セキュリティの現状
By David Dorgan
 

これはほんの草稿で、もっと煮詰めたいと思っている。

今日のコンピュータ・セキュリティは、驚異的だ。何時でもウイルスがいて、e-メールやircネットワークを攻撃する。通信量が膨大になって、制御不能になることもある。助ける「会社」も知らない。寧ろ事態を悪化させている。感染ホストが沢山あって、誰かが感染すると人に伝染する。opensshバグがはじめて今年のdefconで公開されたが、「一定のサークル」では数年前から知られていたものだ。こんなものが、今、どの位あるかと思う。

 

ソフトウエア・セキュリティには失望しつつある。勝目のない戦のように思える。各社が特効薬を売り出し、ユーザが認めている。例を挙げると、最近ウイルスが突発して多数のマシンが感染した。感染前のホストにも潜伏していたが、返事をしたものだけが感染した。これがクライアントサイトのDoSを頻繁に攻撃した。サブネットから発生したと思われ、ネットワーク全体に蔓延する。MSが走らせる応急処置サイトは、アンチウィルス・ソフトウエアが役立たぬので、極めて遅い。ISPがこのウイルスをカスタマのネットワークに発見したら、ネットワークから切り離せば、ユーザに時間の無駄がなくなると思う。

 

アンチウィルス・ソフトウエアには、幾つかの問題がある。

・今日の問題でなく、昨日の問題を解決する
・更新していても、誰もが簡単に作る専用ウィルからは保護してくれない
・これは次善策であって、根本原因に迫っていない

 

最近の騒ぎの後、「インターネットつぎはぎ」が一回っし、馬鹿者が実際に実行ファイルをクリックした。勿論、無知の言い訳は出来るけれども、車に乗って誰かにぶつけたら、言い訳など出来ない。ユーザーはコンピュータを使ったことにつき、販売者はソフトウエアの品質につき、何の責任もない。販売者が如何に不注意かはUnpatched IE security holesを訪ねると判る。

 

これらの多くは、プログラム作成における、一寸したヒントで止めることが出来る。Cを使うとき、学校でCを教えるときSTRCPYを使う理由は何だ。誰にもこれを使わせるな!これを使うと誰でも失敗する。コードのテスト段階で、ユーザからの入力などにstrcpyを使う不謹慎をすると必ず失敗する。

エンドユーザは、実行ファイルをクリックしない。しないだけで、理由は聞かない。誰が送ったか誰も判らない。実行もしないし pif files、bat files、scr files もしない。Word文書は使わない。HTMLの方が見掛けも良い。.

良くなる前にもっと悪くなると思われる。一つではなく1000種ものウイルスがはびこっていいるとしよう。馬鹿なソフトウエアに100,000人が応えるとしよう。安全なコンピュータはsymantec,から来るのではない。

 

著者紹介:

David は、活動的な執筆者で、将来もっと貢献したいと考えている。

 

Copyright © 2003, David Dorgan. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
キイを用いるSSH
By David Dorgan
 
sshを使うのを好む多くの人が、キイを用いないことに気付いた。衝撃を受けたのは、キイを使う人も一緒にパスフレーズを使わないことだ。理由を聞いたところ、パスワードを毎回打ち込むのが面倒だからとのことだった。
 
背景として、マシン上でアカウントに関するパスワードを誰かに知らせたいが、誰が聞いているか知らないとすると、唯一の通信方法は、不安全なチャンネルを通じて、平文で送ることになる。このとき、どうするか?
公開キイ暗号がその答えだ。誰にでも公開キイを送ることが出来る。自分の私有キイを自分で保持するだけだ。
 
キイを作るには、オプション
ssh-keygen -t dsa
を用いて、ssh-keygenを走らせるだけだ。
キイをセーブする場所を聞いて来る。/home/user/.ssh/id_dsa 及び /home/user/.ssh/id_dsa.pubだ。
次いで、パスワードを聞いて来る。公開キープシステムはセキュリティが大きいが、最も弱いリンク程度のものなので、パスフレーズを最弱リンクにはしないこと。
 
私有キイは「決して」サーバーに置かないこと。ディスクにも置かないこと。
私は、ラップトップに置いている。他に置いたことはない。次いで、公開キイをファイル /home/user/.ssh/authorized_keys の中のリモートホストに置く。
 
サーバ設定をRSAキイ認証だけ受付ける設定にする人もいる。悪くない考えだ。
 
ここで、毎回パスワードを入力するのに文句を言う人もいるが、それは問題でない。私はXをrc.localの中のスクリプト
$ cat /etc/rc.local
ssh-agent xdm
で開始する。
 
ユーザとしてXに入ったら、ssh-addとタイプし、パスフレーズを入力し、ここで各xtermを開く。sshサーバに入ることが出来るが、パスワードは聞いて来ない。
ここて注意すべきことは、数秒で良いからワークステーションから離れて「必ず」眺めることだ。、

 

著者紹介:

David は、活動的な執筆者で、将来もっと貢献したいと考えている。

 

Copyright © 2003, David Dorgan. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
スクリーンの使用
By David Dorgan
 
これはscreenの有用な特性幾つかの基本的な紹介である。
 
screenには幾つか有用な用途がある。基本的にscreenンはターミナル・エミュレーションのあるスクリーン・マネージャである。働きを知るる最良の方法は、使用することだ。私が使う理由を一つ上げると、私はircを沢山使う。遊ばせるのもクライアントがscreen上に止まるのも気にしないし、放置したままにして、nickservがそのサーバ上で利用出来るときは、接続を切らなければならないが、使用するサーバにそのscreenでログインし、ログインするだけで、screenが常にあるので、セッションをattach、detach、reattachすることが出来る。
 
全く基本的な例として、screenをインストールしてから、screenとタイプして、スクリーンを走らせる。中に入ったらvim myfile.cとタイプし、ここでCtrl Aとタイプして、dキイを叩く。これで通常のシェルに戻るので、screen -listとタイプすると、スクリーン・セッション一つが所属しているのが分かる。このセッションをreattachするには、screen -xtoとタイプする。同じセッションが出る。ここでリモートホストにアカウントがあるときは、ログインしてIRCを用いて同じことをしてよい。次いでdetachしてreattachすると、新しいメッセージ全部もまた現れるので、これをどこからでもアプリケーションを終了するのに用いることが出来る。便利ではないか?
 
ここまでで、数個のセッションを走らせることが出来ることと、リアタッチする一方法をscreen -list 及び次いで-R $screen_number に対しておこなうことを知った。これを扱う良い方法があるが、詳細情報はscreenのマニュアルを見られたい。
 

screenセッション毎に一つ以上のシェルを持ちたいとすると、screenをスタートする。次いでecho 'this is number one' とタイプする。次に Ctrl-A and nとタイプする。これで別の新ウインドウが現れる。 ctrl-a and 0を叩くと最初のターミナルに戻る。こうして、いくつも作ることが出来る。一つを廃棄するには ctrl-a and kとタイプするだけ、ctrl-a and p で元のウインドウに戻りctrl-a nで次のウインドウに入る。ヘルプにはctrl-a ?とタイプする

 

他にも色々なことが出来るので、マニュアルを参照されたい。

 

著者紹介:

David は、活動的な執筆者で、将来もっと貢献したいと考えている。

 

Copyright © 2003, David Dorgan. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
RTOSとしてのLinux
By Nikhil Bhargava
 
リアルタイム・オペレーティング・システム(RTOS) [1] は、その制御下にあるプロセスのタイミング要件を保証する能力のあるOSである。UNIXなどの時分割OSは平均性能の向上に努めているが、RTOSでは正しいタイミングが重要特性である。スループット[2]は二の次の問題である。確かなリアルタイムに必要な、最悪の場合のタイミング性能を実現するため、RTOSは、簡単、小型、予想可能で最悪事態性能を最小にするため最適化されていなければならない。Linus Travaldoが学生プロジェクトして発足させ80年代後半に勢いを付けLinux OSは、殆ど全部の型のユーザ要求に合致する完全なOSとなっている。更に開発者の大群がコアkernelと同時にKLM(kernel loadable modules)に特性を追加した。しかし、不正確な応答時間、割込の取扱い、スケジュール計画及びタイマー細分化などが、Linuxを確定応答時間が不可欠な埋込世界に不適切なものとする、特性となっている。裸のLinux kernelを修正して厳しいリアルタイムOSとして受け入れられるものとする技術と修正モジュールを、幾つか利用することが出来る。
 
1.1 Linuxのリアルタイム・アプリケーション不適合性
以下の特性のため、Linixは厳しいリアルタイム・アプリケーションを走らせるのに使用することが出来ない。1.スケジュール作成が予測不能−システム負荷に左右される。2.粗いタイマー分解能(10ms)。3.非優先kernel。4.粗雑な同期のため使用される割込の無効化。6.効率(ディスクI/Oなど)のためリクエストの記録。さらに、Linuxプロセッサは重量プロセスで、複雑な切換えを完了するのに数百マイクロ秒を要することがあるので、100秒毎にセンサーを呼び出す課題をスケジュールするのは不可能である。Linuxの別の欠点は、スレッド・モデルではなく、プロセスに基づくモデルを使用するので、信号がプロセス実行中に失われる傾向がある。
 
1.2 リアルタイムOS実行の基本的方法
RTOSの実行を促進するため、POSIX規格がRTOS関連仕様書を定義した。 POSIX.1b-1993 規格は、UNIXにおけるリアルタイム特性を幾つか規定する。この規格は、優先度付きスケジュール作成、ユーザメモリ・ペイジのメモリ内への閉じ込め、リアルタイム信号、IPCとタイマーの改善、その他多数の特徴を含む。Linuxは部分的にPOSIX.1b規格を満たすが、POSIX.1b適合は、Linux一定種類のソフト・リアルタイム処理が出来るのみである。
 
一般的にRTOS実現には三つの方法がある。
 
1. ミクロkernel 法: 一例は QNXである[4]。これはプロセス・スケジュール作成、プロセス間通信、低レベル・ネットワーク通信、及び割込発送を実行するのみである。デバイスドライバ、ファイルシステムなどその他のサービスは、ユーザプロセスとして取扱われる。したがってkernelは極めて小型(7KBのコード)で速い。モノリシックkernelに比べ、幾つかの利点がある。ユーザプロセスのデバッグがkernel成分のデバッグより容易である。ユーザプロセスを別のアドレス空間で実行すると、異なるモジュールにおけるメモリ管理エラーが分離される。別の利点は拡張性である。QNXシステムはROMに合わせて100Kに縮小することも、完全装備多重マシン開発環境に拡張することも出来る。移植及び保守も容易である。加えて、モノシリックkernelでは出来ないことだが、リアルタイム・ユーザプロセスがデバイスドライバに優先する。
しかし、ミクロkernelアーキテクチャはプロセス間通信と前後関係切換に重負荷を掛けるので、性能が貧弱になる。ミクロkernelは、単純なサービスだけを直接提供する。したがって、ミクロkernelシステムでは、同一タスクを達成するのに、モノリシックkernelより多くのシステム呼出を実行しなければならない。モノリシックkernelが未だにもてはやされるのは、性能が理由であると思われる。
 
2. モノリシック法: モノリシック・システムの一例はVxWorksである[7]。VxWorksはホスト/ターゲット方法を目指す著作権RTOSである。ソフトウエア開発用及びアプリケーションの非リアルタイム部分用にはにUNIXホストが使用される。VxWorks kernelが呼出すウインドウが、ターゲット・コンピュータ上でリアルタイム・タスクを走らせる。マシンは、TCP/IPネットワークを用いて連絡する。VxWorksでは、kernelとタスクが同一アドレス空間で走る。これにより、タスク切換が極めて速くなり、システム呼出トラップん必要をなくする。ランタイム・リンカにより、タスクとシステム・モジュール双方のダイナミック・ローディングをすることが出来る。この特徴が拡張性を作る。C-類似構文を用いる会話的シェルを使用して、変数の検査と修正、表現の評価、呼出ファンクション、及び簡単なデバッグの実行を、することが出来る。これらの特徴が、実験を促進し開発をある程度容易にする。しかし、一つのモジュールのエラーが別のモジュールに影響し易いのでシステムを脆弱なものにする。
 
1. 分離法: 「リアルタイム種汎用OS作成」(IRIX)[6]及び「リアルタイムOSに非リアルタイム特性を追加し続ける」(VxWorks),[7]代わりに、独創的Real-Time Linux設計者が別の代替案を採用した。RTLinux[5] は、システムをリアルタイムと非リアルタイムに分離する。この機構は、リアルタイム・システムを簡単、迅速、予想可能で最悪事態性能を最小にするため最適化する。同時に非リアルタイム・アプリケーションをサポートするため、汎用Linuxを最低優先度スレッドとして走らせる。
 
1.4 纏め
Linuxは、埋込世界の中で容易に最速で成長するOSである。その低コスト、豊富な特徴及び公開性が、Linuxを耕作に適する肥沃な土地にする。多数の会社が、kernelに特注変更を加えたりLinuxにリアルタイム概観と感触を与える新技術を導入した。Linux kernel 開発者達は、裸のLinuxが実生活では酸素のようはリアルタイム性能を与えることが出来ないとの事実を自覚した。そこでkernelバージョン2.6の新リリースにおいては、リアルタイム性能、新コンピュータへの移植、大型メモリモデルのサポート、マイクロコントローラのサポートを強化し、I/Oを改良した。Linux 2.6 は、小型腕時計から大型交換機までの埋込システムの需要全体を覆うサポートのため強化されている。その重要性が増すにつれて、将来の進歩が先ずLinuxで起こることを期待する。
 
1.5 参考資料
[1] Real time systems by KG SHIN and C.M. Krishna, 1st Edition, The McGraw-Hill Companies, Inc., chapter 2.
[2] Operating System Concepts by Avi Silberschatz (Author), Greg Gagne (Author), Peter Baer Galvin (Author)
[2] Operating System Concepts by Avi Silberschatz (Author), Greg Gagne (Author), Peter Baer Galvin (Author)
[3] http://www.embedded-linux.com
[4] QNX company website: http://www.qnx.com
[5] http://www.rtlinux.org
[6] SGI Company website: http://www.sgi.com/software
[7[8] http://www.linuxdevices.com/articles/AT7751365763.html
 
著者紹介:
インドのデリーから来たNikhil Bhargava です。コンピュータ技術者で、インドのCDOTで働き始めて現在1年になります。
 
Copyright © 2003, Nikhil Bhargava. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
Cサウンド:Boulanger博士との会見
By Michael Baxter
 
Boulanger博士は、長い間Csoundに携わって来られたCsoundの権威者で、Csound教科書(参考資料を見よ)の編集者でもある。お話の間に最も古いCベースの音響合成環境の一つの展望を知った。この会見は最新Linuxソフト合成環境についてDave Phillipsの記事(LJ 2003年5月号80頁)を補完する。
 
:4年前に、Linux JournalがLinux上のCsoundに関するDavid Phillipsの記事を載せました。それ以来のCsoundの進歩を御説明いただけますか?
:Csoundは、間違いなく現在入手出来るうちで最も強力なクロスプラットホームのソフトウエア合成及び信号処理システムです。信じ難いほど成長と改善を続けており、最も重要なことは無料です。Max/MSP, PD, SuperCollider, Tassman, Reaktorなど多数の市販アプリケーションが、Csoundのプログラム性、能力、機能性に段々近付いていますが、どれも、与えられた全てのプラットホームとOSの上でCsoundと同じオーケストラ、楽譜、楽器を演奏することは出来ません。
この信じ難いほど強力で多様なプログラムを構成し、今まで25年間も教えたり書いたりして来ました。1979年Barry Vercoeと一緒に、MIT実験音楽スタジアムで勉強を始めました。そこではBerryのmusic11プログラム−特にPDP11マイクロプロセッサ用Csoundを使って音の設計と作曲をしていました。最初のmusic11作曲- "Trapped in Convert" は世界中のコンサートで紹介されました。芽の出かけた若年作曲家には大変なことです。1986年にコンピュータ音楽博士号を手にしてMITメディア研に帰ったとき、彼の新言語Csoundを使って、Berryと一緒に働きました。 "Trapped" を使って演算コードの働きを確認することが出来ました。
事実、今日演奏され微調整される "Trapped in Convert" の版は最初のCsound作品です。私にとって重要なのはこれと全く同じものを今日殆ど全部のコンピュータ上で演奏し学習することが出来ることです。(http://csounds.com/compositions/colleaguezip/Trapped.zip)1979年に戻ると、24Kで−各音とジェスチャの翻訳に1時間、各フレーズとセクションの翻訳に1日、4分半の全体を翻訳するのに1週間掛かりました。今では、44.1Kで、殆どどんなPCでも"Trapped in Convert"をリアルタイムで演奏します。
私に取って、コンピュータ音楽作曲と音響設計の歴史を保存する能力は、極めて重要です。シーケンサ、シンセサイザ、MIDI装置を使って80年代から90年代に掛けて私が作曲した音楽の殆どは、道具が売られたり、壊されたり、早期のシーケンサとサウンドエディタを走らせたコンピュータが地下室にしまい込まれたとき、退蔵されて無くなりました。古いコンピュータを廃棄することは、通常音楽も投げ捨てることを意味します。だが、私が未だに"tweek,"を演奏し、私の古いCsound曲を教えることが出来るとの事実は、Csoundの偉大さの証拠です。少なくとも私に取って、Csoundの将来は保証されています。事実、Csoundは、50年代にベル研でMax Mathewsが開発したMusicN言語の直系子孫なので、コンピュータ音楽研究の全歴史がこのプログラムに保存されています。Rissetなどによる古典曲及び古典楽器設計カタログの多くは、全部Csoundで再構成され、今日演奏し、学習し、修正することが出来ます。
Csoundに関するDave Phillipsの立派なLinux Journal 記事以来、重要な沢山の画期的出来事がありました。Csoundの書物も刊行されました。Csound Book (MIT 出版), Virtual Sound (ConTempo)、Cooking with Csound (AR Editions)などです。Csound楽器カタログも、学習と修正のため数千のモデルを付けてリリースされました。季刊のCsound Ezineにも色々な思いつきや解釈が載っています。広範なCsound解説がキイボードと音楽雑誌の呼び物になっています。Csoundメールリストに加え、新しいCsound・メールリストが二つ、csoundTekno リストとcsoundDeveloper's list、がスタートしました。Csound教師、ユーザ、開発者の国際的コミュニティが成長して、彼らのcSoundが、主要ハリウッド映画(Traffic, Black Hawk Down, Narc)とコンピュータ・ゲームを特徴つける、主流になっています。Dave Phillips自身は素晴らしい著書"The Book of Linux Music and Sound" を完成し、これはLinuxオーディオ世界の新人の助けになるCsoundと関連アプリケーションのユティリティの素晴らしい内容を呼び物にしています。
ここ数年で、キイボード開発者と保持者によりCsoundが信じ難いほど発展しました。Barry Vercoeは、依然として埋込システム用とアナログ装置DSPチップ用に著作権付き拡張Csoundの開発を続けています。Matt IngallsはCsoundのマッキントッシュ版を追い続けています。彼のMacCsoundには、ラウンチャに組込まれたユーザ定義GUIウイジェット、プラグインとしての楽器のサポート、極めて綺麗なMIDIなどがあります。更に賢明なのは、彼のCsound〜はMax/MSP とPD()の外部で、Csound言語全部を実質的にMax/MSP/Jitter とPD/GEM 画像プログラム作成環境に埋込むので、途方もない相互作用性、広範なアルゴリズム的能力、スーパーMIDI、マルチチャンネル/低遅延ASIOサポートををMacのCsoundに付け加えます。Joo Won Park、Sean Meagher、Takeyoshi Moriなどの音響設計者と作曲者は、CsoundMax、CsoundFX、CsoundMixerなど素晴らしいリアルタイムGUIベース・アプリケーションを開発しました。

Michael GoginsはCsoundVSTに忙殺されています。PC用のCubaseとNuendoにVSTプラグインとして働くCsoundの変形です。彼は最近、Csoundを完全にアルゴリズム的作曲言語SilenceVSTに埋込みました。これは独立でもCubase又はNuendoのPC 版に受入れても走ることが出来ます。Matt Ingallsと協力して予備的なCsoundAPIも作りました。

Gabriel Maldonadoのウインドウズ用CsoundAVもまたASIOをサポートを持っており、言語に数百のオープンGLとGUIオペコードを追加します。音響機器を、全部が同一Csound・オーケストラから来て全部が全く同じ構文を用いるGUI器具と交信させるのは素晴らしいことです。Pavan、Josep Comajuncosas、Oeyvind Brandtsegg、Alessandro Petrolatiなど多数のCsound設計者が、リアルタイムGUIベースアプリケーション、楽器、エフェクトのコレクションの集積を開発しました。

ある程度論議の余地があり急進的なCsoundのLinux版をMaurizio Umberto Puxeddu が開発し(iCsound)、現在Istvan Vargaが精力的に育てています。

その後ろでは、John ffitchが、Richard Dobsonの助けを得て、全プラットホーム用標準Csound(Canonical Csound)を維持し、改善し、拡張しています。事実、我々は現在「オペコード飢饉」(新オペコード無し)の状態なので、彼は完全にコア変更して、プラグイン・サポート、ASIOサポート、新パーサーその他諸々の新しいレベルの明確性と機能性を追加しながら、Varga、Ingalls、Gogins、Maldonadoなどが紹介した多数の新機軸をサポートすることが出来ます。(彼の緊急案件リストは、cSounds.comのニュースに投稿されています)。一つは、ffitchが仕上げた時、ユーザに取って、プログラム全体をコンパイルし直すことなく、自分のオペコードを追加するのが楽になるでしょう。

全てのプラットホームで注意しなければならないのは、Steven Yiが提唱する「陰鬱」で「定型的」な作曲と音響設計の環境です。また、Bill Beckがウインドウズ版にで生かし、Stephan BourgeoisとHans-Christoph SteinerがLinux とosX版で改良した、素晴らしいCsoundFLTK信号処理と村境設計前線「Cecilia」にも注意しなければならなりません。

全ての偉大な新しいCsound編集者とアプレット及びCsound・コードに基づく全ての無料VSTとDirectXプラグイン−Delay Lama VST プラグイン及び DobsonのCakewalk's Project 5用新 PVFXなど−など沢山のことに言及するのをを忘れていました。私に何が言えるでしょう?四年の間に、これら全てのプラットホーム上のこれらすべてのの学生、作曲者、教師、開発者に、これら全ての音楽上の夢と予測を持って、何を期待できるでしょうか?これらの新変形は全て偉大です。新オペコード全ては素晴らしい。新しい能力全ても素晴らしい。正直のところ、新しいCsound音楽と音楽家がCsoundを使う方法にぞくぞくしています。これはCsoundの新しい飛躍です。

だが、一寸待って頂きたい。夾雑物を無視していないだろうか?名前全部を思い出しただろうか?子供の喧嘩や泥仕合は?「私の変形はどの変形より良い」は、若くて優れた音楽プログラマの全てが言うことです。そう、それからも、また四年経ちました(Linux社会の人は、CsoundのLinux版で泥は全部なくなったと威張っているでしょう)。これらの成果はどうなったでしょう?多くは時間の無駄でした。癒すことの出来ない深傷を負いました。沢山の良いCsound変形−特にLinux用−がありました。そして勿論、沢山の負傷者、数百の新入者があり古参者がCsound社会から脱落してCsoundに取組むのを永久に諦めました。その人達を私は責めません。荒廃地で教えたり音楽を演奏するのに疲れました。

(csounds.comでは、過去四年に開発された各種ツールとユティリティにリンクする過去現在のCsoundニュースを見ることが出来る。またCsound・メーリングリスト・アーカイブも見出す。ここで「Csoundの将来を覆う戦争」と、「Csoundの最高支配者になる価値のあるのは誰か」との不快な子供染みた論争を回想することが出来る)

 

:私の印象は、最近の商品PCプラットホームの計算力の向上が、DSPマイクロプロセッサの価格低下以上にCsoundの役に立っていることですが、どうでしょうか?ご意見をお聴かせ下さい。

:数年間、私はSHARC DSPチップの周りに構築するCsoundの変形を開発し商業化するため、Barry Vercoe及び開発者のチーム(Barryの息子Scottyを含む−私はScottyのCsound教師だった)と Analog Devicesのプロジェクトで一緒に働きました。何かのアプリケーションように今でもあります。Barryは、このシステムの開発を続けています。そのチームの一員になって、迅速、明瞭で商品指向のCsound変形を作るのは楽しい事でしたが、私は本来のCsound、公開Csound、標準Csoundが好きです。 Analog Devicesで、我々は、もっと効率良くするためメチャメチャに言語を簡素化して再構築しましたが、その結果は一般性がなくなりました。物事をお粉留最良の方法に帰着しました。標準公開Csoundについて私が好むものは、働く方法が沢山あることです。沢山の開発者、音響設計者、教師、作曲者がAnalog Devicesで持っていない特徴を追加することです。さらに、彼らの独特の仕事と独創的な設計が、物事を進める新しい方法を示し、物事の理解を助けてくれることです。そこで驚くべきシステム、Csoundの市販版、を構築はしたけれども、私はJohn ffitch, Matt Ingalls, Michael Gogins, Richard Dobson, Gabriel Maldonadoと一緒に働き、万人が無料で使うことの出来る版のCsoundに追加し改善することを望んでいました。

四年前に、Csound.でリアルタイムMIDIコントロールが働き、リアルタイム・オーディオもまたサポートされましたが、いずれも上手く働きませんでした。当時、Csoundのどのバージョンも殆どの商業ハードウエアやソフトウエア・ツールのように明瞭で直截的には働きませんでした(事実、私はMIDIとリアルタイム・オーディオの章の殆どを"The Csound Book"から外しました。言語のこの側面は当時流動的で、書いていたのはリアルタイムMIDIとリアルタイム・オーディオを働かせるため使うべき細かな仕掛けが全てだったからです)。今日では、CsoundのALLバージョンにある改良MIDIとオーディオを用い、廉価な多チャンネルUSBとFireWireインターフェイスを用い、高速のラップトップや廉価で高速のデスクトップを用い、結局、舞台を任意の市販ハードウエア又はソフトウエア・シンセサイザの側に持って来るのためCsoundに必要なあらゆるものを手に入れ−君達はこれらの多くを見始め−多くの人がCsoundを実行し、会話的音響設計、フレーズサンプリングなどをおこなっています。

 

:今日の新ユーザが抱えている問題の一つは、Csoundがバッチ指向の構文を持ち続けることです。販売部門は助けるけれども、この構文は、本当に直接Csoundを使いたいが既にオブジェクト指向言語を使用している人に取っては、後退になることがあります。Csound社会の中でCsoundの構文を変えることに付いての感触を伺えますか?

:Csound社会に付いては話しません。これは物凄く豊富で多様で、そのことは、沢山の希望、要求、期待、偏見、先入主があることを意味します。また扱わなければならないプラットホームとOSの戦争もあります。お分かりのように、ハッカーは一つの道を望みます。作曲家は別の道を、演奏者は、プルジューサーは、音響デザイナは、それぞれ別の道を望みます。Csoundとはそんなものです。習うのは楽です。拡張も、個人化も楽です。合成と信号処理に付いて習う素晴らしい方法です。

私はCsoundが上手く働くことを望みます。何も失わないため、100%後向き互換であって欲しいと思います。同時に、リアルタイムMIDIとリアルタイム・オーディオが今日の市販アプリケーションの何れがサポートするものにも匹敵するものであって欲しいと思います。各ハードウエア・プラットホーム上で、また各OSの下で、Csoundが継目無しに他のMIDI及びオーディオ・アプリケーションを統合するのを見たいと思います。今日と遠い将来、Csoundが無料で、強力な、拡張性のある一般に役立つ万人のためのツールになって欲しいと思います。

Csoundがプラグイン/オーディオ・ユニットとして働き、Csound楽器がプラグイン及びオーディオ・ユニットとしてコンパイルされるのを望みます。(それに近づきつつあります。)John ffitchその他の重要開発者達がコアともっと強固で分かり易くして、コアとの交信を楽にするのを望みます。ユーザが簡単にソフトウエア/フリーウエア/著作権オペコード及びライブラリをプラグインすることの出来るAPIに関する仕事があります。今でもそれに近い状態にあります。

新規ユーザに取って、グラフィック指向で、親しみ易い「インターネットCsound」が数多く現れ始めています。Csoundを用いてグラフィック的に、直感的に、分かり易く即座に仕事をする方法が沢山あるためです。事実、Csoundが隠れていることを知る必要も気にする必要もありません。Ceciliaはこの型のユーザとして前々から優れており、今は遙かに改良されました。自分のモジュールを追加することにより、このシステムを確実に拡張することが出来ます(尤も既に大規模なのでその必要はないでしょうが)。自分のCsound用グラフィック・フロントエンドを作りたいときは、昔より容易になっています。マッキントッシュos9 及び osXのためにはMatt Ingalls MacCsoundでGUI機能が、Cycling74の Max/Msp/JitterでGUIツールが与えられ、ウインドウズとLinuxのためには、双方にCsound言語全体を単一外部オブジェクトとしてMatt Ingallsが埋め込んだMiller Puckette'ss PDが与えられ、ウインドウズのためには広範で優れたGabriel MaldonadoのCsoundAVのFLTKサポートが与えられています。(オペコードがLinux用にIstvan VargaのDeveloperCsoundが加わりました)。

CsoundはCではありません。一瞥して、テキスト、数値、暗号変数名すべてを持つプログラム作成言語に似ています。だが、500以上のオペコードが単なるモジュールで、変数と一緒になってパッチすることが出来るのを音楽家が理解するのに長くは掛かりません。最低(で最強)レベルで、Csoundはテキストに基づきますが、朝飯前に私の独創的Csound ツールつまり "The Csound Book," の第一章の幾つかを読んで、殆ど誰でもがCsoundの働きを理解しその力を身に付けます。直観力のあ「作品指向」のノブを回したい音楽家であると、ノイズを作り、ノブを回して自分の作ったノイズを押し潰してしまうなど、筋道がなければ、Csoundは自分のものになりません。Csoundは、ソフトウエア合成に付いて何かを知っていることを必要とする。いたずら者−つまり強力なユーザからCsoundを完全に隠すダミー・アプリケーション又はユティリティを設計するのは難しいことではありません。

 

:Linux社会の多くの人は、ソフトウエア・ライセンスを大変気にします。Csoundが研究専用条項の下でライセンスされるのを、余りに厳しいと感じる人がいると思われます。例えば、バグを修復することも、自分のコピイに特性を追加することも出来ますが、変更を付けて再配布することは明らかに禁止されています。オープンソース・ライセンスを象徴する特性でなく、Csoundライセンスがこのように設定されているのには、何か理由があるのでしょうか?

:その点に付いて言いましょう。Csoundに制限を加えるのはBarry Vercoeの意志ではありません。「教育研究」目的のためには、Csoundに何をしても構いません。販売は厄介な問題の一つと思われます。販売に関して、Bath大学の標準Csound維持者John ffitch及びcSounds.comは、MIT とBarry VercoeからCsound販売の許可を受けています。加えて、私も "The Csound Book" と "The Csound Instrument Catalog." の CDROM を販売する許可を持っています。私が開発者のその変形の販売を助けるにはどうしたら良いでしょうか?私は個人的に重要開発者全部のためウェブ空間の費用を負担し、cSounds.comを通じてプログラムの彼らの変形を販売出来るようにしています。していること、したいことを今は行うことの出来ないCsoundの無料バージョンを作る人は誰もいません。Csoundを用いて作った音楽とサンプルの売却もBarry Vercoe とMITはOKです。勿論、Csoundの販売はいけません。MITは、Csoundを用いる市販アプリケーション開発の権利をAnalog Devicesその他の会社に売却したので、彼らにははこれらの契約と権利を保護する既得利害関係があります。

未だに、我々全部はCsoundが全く無料であるか、ライセンスにおける曖昧さが明確になったらと、望んでいます。Barryと私は、この問題で過去数週間話し合いました。私は彼に中核開発者各々の観点−Csoundを用いて何をしたがっているか、現行ライセンスのどの言葉遣いがCsoundをあれこれの方向に向けるを妨げているかを示しました。最後の話し合いの間に、彼はMIT弁護士と連絡し、BarryがMedia 研の仕事とCsound の仕事をしているロシアとインドから帰国したとき会う機会を作りました。これらの話合いで新しいライセンス又は将来の開発者が言語を改良し拡張する努力を励ます新しい言葉遣いが生まれると良いと思います。

 

:Csoundは、学生のための、音楽、音響、音響心理学、DSPの橋渡しをする素晴らしい学際ツールだと思います。大学環境でCsoundを使った良い経験はおありでしょうか?

:Csoundは、コンピュータ音楽の学生の究極の教育舞台です。Csound教科書の中では合成と信号処理理論の全てが、学生の手で編集し拡張し調査することの出来る完璧で完全に働くCsound楽器を用いて述べてあり説明されています。私はバークレー音楽学校で18年間もCsoundを色々な学部で教えて来ました。この4年間は、Csoundをニューヨーク大学の大学院生に教えて来ました。東欧、西欧及び南東アフリカでCsoundの研修会、セミナーを開いて来ました。私はCsoundをバークレー大とニューヨーク大のDSPクラスでも私の Max/MSPクラスでも使います。現在、バークレー大で音楽治療用の音響心理学ツール一式を開発しているところで、私の息子Adam(Scotty大学学生)が開発した完全に新しい領域をcSounds.com に導入しようとしているところです。

Csound は、これまで合成、音響学及び信号処理の教育、学習のための優れた道具であり続けました。Csound教科書は、音楽の秘密を殆ど全て明らかにします。私の学生がCsoundを映画やTVプログラムに取り入れるとき、ビデオゲームに取り入れるとき、ロックスターのために働かせるとき、広告代理店、音楽スタディオに就職して声優と共にCsound広告を作るとき、ソフトウエア会社に就職するとき、Csound作曲がコンクールで賞を取るとき、Csoundが大学院に入る助けになるとき、音楽ツールキットでCsoundを働かせる方法を見出すとき、Csoundを教える喜びを感じます。

世界中のコンピュータ音楽の教師、学生がCsoundとCsound教科書を使っているのは素晴らしいことです。それはCsoundが優れているからで、常に改善されています。私の仕事がこれに役立つのは嬉しいことでる。コンピュータ音楽の父Max Mathewsは、良き友人でBarry Vercoeと私を助けて呉れます。彼のMusicVプログラムに刺激されて、BarryがCsoundを開発し、彼の"The Technology of Computer Music" に刺激された、私が "The Csound Book." を書きました。Barryの息子Scottyは私の学生で、私の息子Adam、バークレー大の音楽治療家、はScottyの学生でした。現在Adamは自分の音響心理学研究の為のツールをCsoundで構築中で、彼の研究ツールを通じて、Csoundを音楽治療の分野に持ち込んでいます。Csoundの将来が、これら数人の優秀は学生の手に委ねられているのは大変嬉しいことです。

私が生まれた1956年に、Max Mathews(コンピュータ音楽の父)が、MusicN言語開発の夢を持って実現しました。彼はバトンをBarry Vercoeに渡しそれがRichard Boulangerと言う名の19才の作曲家兼電子音楽家に渡されました。彼らから学んだことと、私の優秀な学生から学んだことを伝えたいと思います。私がこの会見で言ったことが、LGの読者に役立って、今日のCsoundを調べる気になって頂ければ良いと思います。

 

参考資料

Csoundのウェブサイト:http://csounds.com

Dave Phillipsの記事:http://www.linuxjournal.com/article.php?sid=3187

Richard Boulanger編集:"The Csound Book: Perspectives in Software Synthesis, Sound Design, Signal Processing, and Programming." 、The MIT Press、マサチューセッツ州ケンブリッジ、英国ロンドン。

 

Copyright © 2003, Michael Baxter. Copying license http://www.linuxgazette.com/copying.html
Published in Issue 96 of Linux Gazette, November 2003
 
 
 
 
 
END