これは、ソフトウエア特許自体への反感からもこの導入の非民主的性質の点からも、暴挙である。フランス日刊紙ルモンドがい言うように、欧州政府は問題条項の変更を細部の調査が完了するまで延期することに決した。
ドイツ経済技術省(BMW1)がおこなった調査studyでは、ソフトウエア特許は現在成功している多くのソフトウエア会社を苦況に追い込み、ソフトウエア分野で革新を減速させることが見出された(おかしなことに、この報告書はさらに進んでこれら特許の導入を推薦している)。欧州委員会諮問報告書consultative report は、回答者の91%がソフトウエア特許に反対と述べている。しかし、「経済的大勢」は特許に好意的だ。
ソフトウエア特許に関心のある人が利用出来るオンライン情報源がいくつかある。
スラショットは新 European Cybercrime Treaty.(欧州サイバー犯罪条約)の署名を報じた。最終版はここ hereで入手できる。これはコンピュータを使った犯罪に関する法律を署名各国が立案する際の下敷きとなる。ガーディアンが報じる通り、この条約は「コンピュータ関連犯罪の共通定義を概説し、犯罪捜査と立件の方法を定め、法制関係者間の国際交流の方法を確立している」
好意的な見方もあるが、市民団体は、警察力が強すぎてプライバシイを侵すと非難している。一つの慰めは、security work (安全作業)における「ハッキング/クラッキング」ツールの使用の正統性が条約に明記されたことだ。それでも、逃亡犯罪人引き渡しと越境行動に関する条項が悲劇的悪用を受けるとの強い懸念がある。
ヨーロッパニュースの最後に、EUマイクロソフト公聴会が12月に開催され2002年初めに判決が出る。どうなるかは分からない。
● 英国の進展
英国政府は、欧州サイバー犯罪条約に余り関心がない。既に厳しい対策を講じているからだ。テロの脅威のある現況の下で、物事はさらに厳しく監視されている。デビッド・ブランケット(英国内務大臣)が導入した新対策は、法令執行当局に全英国の電話とインターネットのユーザー記録を見る権限を与えた。この傍聴はテロリスト捜査だけでなく、軽犯罪や税金にも適用される。これは、ガーディアンが報道した。これは基本的には、外部セキュリテイの少ない傍聴の捜査権を政府に与え裁判所の命令さえ不要とした彼の評判の悪い捜査権法2000の拡張/明確化である。国家安全や経済的福祉が関係する場合の手続きに、判事が関与するのは明らかに「不適切」である。「刑法レビュー」誌は「全く非論理的だ」を述べている。
Foundation for Information Policy Research (FIPR) と Magna Carta Plus に本件及び関連問題に関する沢山の情報がある
●OEMソフトウエア再販業者に対するAdobeの差止請求を地裁が却下
(1)ソフトウエアは「使用権許諾」か「販売」か(2)使用許諾契約(EULA)の有効性の問題を提起した事件において、米国地裁は、元々OEM方式でコンピュータに包含されているがコンピュータ所有主が希望しないAdobeソフトウエアに関し、ソフトマン・プロダクト社に対するAdobeの差止請求を却下した。
判決は、包含ソフトウエアは「使用許諾」であって「販売」ではないとのAdobe主張を却下した。そこで、Adobeは初期販売後のソフトウエア移転を管理出来ないとの、第一販売原理が適用される。法廷はまた、ソフトマンがEULAに同意した事実はないので、それに束縛されないとも言う。販売に先立って条文が完全に明らかにされなかったことからEULAの有効性もまた疑われた。Linux Joural に詳しい記事がある。
Linux Weekly News もまた、本件が他の事件に及ぼす影響を検討した論説を載せている。一つの可能性は(第一販売が適用されるとき)e-ブック再販または不要OS搭載が可能になることである。DeCSS事件にも影響する。これらの事件は「市販DVDパケージが”不当に”逆工作された事件に一部関連する」。逆工作を禁止するのはソフトウエアのEULAである。搭載せずEULAに同意しないでコードを逆工作したとき(例えばLinuxシステム上で逆アセンブルしたとき)EULAは適用されないことになる。
●Lawrence Lessig
通信関係を管理から自由に変形するインターネットの革新と、その多くが再び管理される実際の脅威に関するLawrence Lessigの記事がForeign Policy にある。
重要な各種インターネット・プロトコル及びサービスを発明し、管理との戦いに資本を投じた人達について面白い意見を述べている。「世界の政策立案者はインターネット反革命に最も強く守られたインターネットは、彼らのものでは無いことを認めるべきである。革新により最も脅かされるものがそれに抵抗することを可能にする法律機構を、彼らは疑うべきである。」
● Yahooのナチス遺物競売に対するフランス立法を地裁が拒否
米国地裁裁判官ジェレミイ・フォーゲルは、Yahooが、フランス国民もアクセス出来る米国サイトでナチス記念品を競売するの禁じたフランス裁判所の命令に効力を与えるのを拒否した。
LGは、立場が逆で、その米国特許とDMCA著作権を外国でも認めさせようとする米国会社の今の努力を見たとき、裁判官はどう判決したか興味を持ち。
●DeCCSの吉報と凶報
少し暗いが、ニューヨークMPAA対2600の事件で、上訴審判決はMPAAに軍配を上げた。判決文はここ here とここhere。Cryptome.org が両件の文書を集めてcollection いる。判決は、コンピュータ・コードが第一改訂の談話の形で保護出来ると言う。次いで、差し止め命令の対象はスピーチではないとしながら、基本要件であるとした。したがって「内容に無関係」でスピーチ部分に対する影響が偶発的である限り差し止め命令は与えられるとした。判決文は、次のように言う。
注記:筆者は法律家ではないので、この解釈は、今月の締め切り前に慌てて読んだ法律に基づく。しかし上述に重要な点は含まれていると思う。法律/意見には自分の考えをまとめられたい。個人的には2種類の区別があると思う。コンピュータ・コードに関してスピーチとファンクションを分けることは、キイの上のロゴや鉄砲の上の詩の場合のように明確ではない。また、合法的に購入したDVDをLinux上で再生するの問題は退けられて、DMCAの1201(a)(3)(A) 項が適用される。
スラショットにはeyewitness account of the Felten vs RIAA hearing. がある。覚えておられるだろうが、フェルトン教授が商業DVDに使われるCSS暗号の弱点を述べた論文を書いた。RIAAは、論文を学会に論文を提出したら訴えると脅迫した。だが訴えなかった。公衆の声に応じて論文提出への反対を引っ込めた。一方フェルトンは、RIAAの行動により、研究者が自己規制をするようになったと、自分で訴えた。訴えは却下された。事実問題でない可能性の問題(訴えるとのRIAAの脅迫)を取り上げることは出来ないと言う。彼は犯罪でない場合の憲法問題(フェルトンの自由発言権が侵された)が理由もなく退けられたと言う。彼は、ドリミティ・スクリャロフの事件と裏腹だと言う。ドリミティは商業利得を侵害したとして刑罰を受けた。
ドリミティの公判は、却下されなければ2002年4月15日の予定
これらの問題の詳細は Electronic Frontier Foundation ホームページ。
● Napsterに関する凶報
悪いニュース。電子フロティア基金(Electronic Frontier Foundation)は、Nasperはユーザー共有ファイルについて有責であるとの米国上訴審判決に関する白書white paper を出版した。裁判所は、ファイル共有技術そのものは非合法でないと認めたが、その開発者またはユーザーが、特定の侵害ファイルがシステム上でサービス出来るとの合理的な知識を得た瞬間に、これらのファイル又はそのISPを削除しなければならない責任があると言う。侵害使用の知識は、ユーザーのおこなう非侵害使用に影を落とす。実際問題として、脅しによる削除、侵害していないが侵害ファイルに関係あるファイルの削除などの影響がある。また、システム管理者が会社利益代表にならないと、責任を問われる結果となる。警察ユーザーがアクセス出来ないフリーネットのような技術が、この規則の下では利益を得る。
新開発シリーズ2.5xが発足した。しかし、2.5.0は2.4.15と同じなので、同様のバグがある。言い換えると、これを使わないこと。LWNは、そのバグを修復した2.5.1-pre3 の入手をここ reported で報じた。大きい変更はない(ほとんどが修復)。kernel開発の中絶がこれで終わる
この利得はUNIXサーバー (WinInfo)の費用であることは指摘する価値がある。RefisterのマイクロソフトメモでもLinuxを「長い目で見た脅威」と言っている。MSはUNIXサーバーをMSサーバーに変える障碍はLinuxであると見ている。営業マンは客先組織内のUNIXサーバーを見付けて、早く(Linuxになる前に)MSを組み込むよう急かされている。
これは1998年のHalloween memo を思い出させる。「予想のうち幾つ当たるか」を質疑応答形式で書いている。
●ブラウザ締め出しが有効な一方マイクロソフトPRスピンは続く
●フェルミ国立加速器研究所が Linux NerworXクラスタスーパーコンピュータを使って新粒子発見を増強
Linux NetworX は、原子より小さい宇宙の構成物質を見出す世界的科学共同研究の一部である新粒子識別にフェルミ国立加速器研究所(フェルミ研)の科学者がLinux NetworXクラスタを使用すると発表した。フェルミ研ではプロトンと反プロトンの衝突の結果生じる新粒子を研究している。
イリノイ州バタビアにあるフェルミ研のLinux NetworX 48ノードクラスタは、ペイチアムIII、1.0GHzプロセッサ、RAM 48 GB、イーサネット接続を含む。
● Lunux クラスタ
営業面では、IBMが、e-ビジネス用に最適化した強力で拡張可能なシステム、世界初のパック済みLinuxクラスタを紹介した。IBM e-サーバークラスタは、色々な部品から「自分用」を作る時間も気持ちもない企業顧客の要求に合致する。これらの人々は、単一販売業者から引き渡され保守されるシステムを望んでいる。IBMには新聞発表のリンクがない。
● LinuxはLyrisのナンバー1
e-メールの送付とフィルタのソフトウエア開発者Lyris Technologies, Inc.は、そのLinux用アプリケーションが、他のすべてのUNIXベース・バージョン組み合わせを超えたと発表した。Lyrisの中心製品には、オプションe-メールニュースレター用ListManager 及び迷惑メール防護用MailShield が含まれる。LyrisソフトウエアのLinuxバージョンは2001年1月以来会社のUNIXダウロードの40%から60%以上に成長した。
オープンソースでリアルタイムの埋め込みソフトウエアのプロバイダLynuxWorks Inc.が、有名な BlueCat Linuxディストリビューションを発表した。
SuSE Linux は、SuSE Linux Connectivity Serverを発表した。この社の最終事業製品は、特に中小企業の要求に合致しており会社ネットワークでのファイル及びプリントサービスに適するとともに、インターネットへの確実な接続ができる構成済みLinuxネットワーク・ソリューションである。
SuSE Linuxは、IBMの全ソフトウエアを、欧州、中東及びアフリカでLinux用に付加価値Linuxディストリビュータとして販売する契約をIBMと結んだ。
FirstLinux.com は、最近PowerPC Edition を発表したSuSE 7.3 を審査した reviewed 。
OpenSSH 3.0が発表されたreleased 。詳細とダウンロードははホームペイジhomepage へ。
グラフィックの権威Michael J. Hammelが、Linux及びUNIX用の個人用情報マネージャXNotesPlusのバージョン3.4.0を発表した。XNotesPlusは、メモ、行事予定、住所録及び日程表などPalm Pilotに関するすべての機能をサポートする。すべての機能はXNotesPlus内で編集されてPilotからダウンロードしPilotにアプロード出来る。加えてPilot PDAのバックアップとレポートをXNotesPlusが管理する。
XNotesPlusのリリースでは、前の版の重大なバグを修復している。古い版は新版に変えることをお薦めする。XNotesPlusはsource とRed Hat Linux 7.0 動的構成バイナリ・ディストリビューションの双方で入手出来る。
Creature Labs 社とLinux ゲーム出版社は、Creaturesシリーズの最終版Creaturesインターネット版をLinux用に発表した。Creaturesインターネット版は、Creatures3とCreaturesドッキングステーションをまとめたもので、4種類のNorn繁殖(ゲーム内のクリエーチャ)を含む。ゲームはインターネット上で他のプレーヤとの接続出来る。詳細は、http://ds.creatures.net/expansion/cie.pl.へ。
Operaソフトウエアは、シャープ Opera SoftwareがザウラスSL-5000D開発ユニットにLinuxウエブブラウサ用Opera 5の使用を発表したと、と本日発表した。ザウラスSL-5000Dは頑丈なLinux/Javaハンドヘルドである。Operaウエブブラウザは、今年1月にJavaOneで立ち上げたLineo社のソフトウエアEmbedix Plus PDAの一部として用いられる。Linux用Opera 5の後、Embedix Plus PDAソリューションは、Lineoの Embedix Linux、 Trolltech'sのQt/Embedded と QT Palmtop グラフィカルユーザーインターフェイス、及び Insignia Solution's のJeode PDAを含む。
Python/QTの本、Pythonを用いるGUIプログラミングQT版が編集を終わり月末に出荷される。QTとは、Linux/UNIX用KDEデスクトップを含む多くの強力なアプリケーションの背後にあるツールキットである。
新しい本は、ウインドウズ及びLinux用のBlackadder RAD 環境を含むPython とQT の使用を説明している。興味のある向きはhttp://stage.linuxports.com/projects/pyqtへ。
富士通の子会社Teamware Groupは、Linux用に、今日のビジネス専門家のための即席グループウエアTeamware Office 5.3の4版をリリースした。新版での主眼はウエブサービスの強化である。4版はTeamware Officeで初めてのLinux用で、ブラウザに重点をおいている。顧客とともに使用感を追求した結果、見て感じるウエブサイトテンプレートを開発した。新しいウエブサービスTeamware Officeを通じ、標準ブラウザを用いて容易にモジュールスキャンにアクセス出来る。サービスは、標準HTMLテンプレート上で任意のTeamware Officeオブジェクトのため固定wwwアドレッシングを可能にし、他のウエブベースシステムと同時にサーチエンジンへと統合する。
Teamware Office は www.teamware.com/linux. にあるTearwareウエブサイトと通じてオンラインで購入出来る。このサイトから90日無料体験版も入手出来る。
Linux Gazetteで発表した以前の漫画は、・Linux User Charactures 72号(11月号)
別のスケッチは projects page.で。
1.緒言
私はアタリSTのファンだ。Armigaの好きな人は、STの悪口を言う代わりに自分で記事を書かれたい。
何?STを御存知ない?アタリが16/32ビット家庭用コンピュータを作ったのは80年代終わりから90年代初めだ。STの友人は未だに世界中にいる。エミュレーションのお陰で、仲間はウェブ上で活躍している。Little Green Desktop (http://www.atari.st/) 又は http://www.atari.org/ を訪ねれば意味が分かるだろう。
この記事は、Linux上のAtari ST emulation に集中して、利用出来るエミュレータと、有用な情報を一般的に述べる。
2.エミュレーションとは?
エミュレーションとは、ハードウエア部品の働きをソフトウエアで再現する試みだ。これは実際上、別のハードウエアを持ちOSも異なる別のコンピュータであるとPCに考えさせ、エミュレートしたシステムのため書かれたアプリケーションを働かせることだ。
今の場合、アタリST用ソフトウエアをLinuxボックス上で走らせることを意味する。
3.マシン事情
エミュレーションに関心のある人は、少なくともエミュレートされるシステムのハードウエア事情を知らなければならない。以下の通りだ:
(データはすべて、TT、Falcon 又は同類でなく標準STによる)
このマシンは1985年春に導入されたので型が大きいのを念頭におくこと。当時のマッキントッシュより強力で安価だった。
エミュレータがエミュレートする事項を簡単に眺めて見よう。
4.STエミュレーション
最初にSTでエミュレーションを試みたのは1994年か1995年の Gemulator だ。DOS用のエミュレータで、特別のハードウエアプラグインカードを必要とした。今ではSTエミュレータ全部がソフトウエアのみで解決している。
STエミュレーションは、Frederic Gidouinが書いたDOSベースのエミュレータPacifiST から流行し始めた。
それ以来、WinSTon や STEEMなど幾つかのSTエミュレータが高いレベルに達した。これはLinux上のSTエミュレーションにも当て嵌まる。STEEMはLinux用に公式に入手することが出来るので、STonX はリリース毎に改良されている。
5.Linux用STエミュレータ
5.1 STエミュレータすべてに共通の事項
STエミュレータすべては、次の事項が共通である:
5.2 STonX
STonXは最初から長い間ユニシスで利用出来る唯一のSTエミュレータだった。今では、ゲームをしたりデモを走らせるのに優れてはいないが、実際に利用出来る状態に進歩した。
二,三の点は:
今の悩みは:
STonX は、http://stonx.sourceforge.net/.で見付けることが出来る。
5.3 Linux 上の STEEM
これはSTEEMのLinuxへの移植である。GPLされていないがフリーウエアである。
STEEMは、STEグラフィックスとサウンド、オーバースキャン、ラスター効果を含んでいるのでゲームに適している。
STEEM の特色は:
STEEMは、 http://steem.atari.org/.で見出すことが出来る。
5.4 Hatari
Hatariは WinSTonソースコードのLinuxへの移植である。アルファ段階の早期なので今は使えない。
詳細は、http://hatari.sourceforge.net/ をチェックのこと。
6.TOS
上述のようにTOSはアタリSTの規定値OSである。(Minix, Mint その他のシステムも働かせることが出来る)
明らかに、すべてのSTエミュレータは、働かせるのにTOS ROM を必要とする。これはエミュレータに含まれておらず、著作権を念頭におく必要がある。ネット上でTOS画像の得られる場所は幾つかあって、手持ちSTのTOS ROM をファイルに抽出することの出来るプログラムが入手出来るる。
7.ST用ソフトウエア
ネット上には未だ大量のSTソフトウエアがある。FTPサイトは公開ドメインとフリーウエアがあり、幾つかのサイトには海賊版STゲームがオンラインである。最後に、STソフトウエアを捜すにはネット上のSTコミュニティが大変役立つ。
8.STコミュニティ
ネット上には、巨大なアタリ・コミュニティがあり、幾つかのIRCチャンネル、伝言板、ユースネットニュース階層構造が利用出来る。
有用なヒントは:
9.まとめ
アタリSTは未だ生きている−Linux上での成長を助けることが出来る。アタリSTエミュレータを働かせて我々に合流されたい。STを持ったことがなくとも、試す価値がある。
筆者の例では、 C64, VCS2600 やZX スペクトラムを持ったこともないが、それらすべてのエミュレータを働かせている。
アタリは死なない!
10年余りの間にユニックス熟練ユーザーは、多くのテキスト処理ルールを採用して文書作成を容易にして来た。sed, awk, cut, paste, join などのコンソール・ユティリティは、単独でも有用だが、パイプを使って組み合わせたときにのみ本当の力を発揮する。
最近LinuxがASCIIテキストの処理以上のため使われて来た。画像及び音響の形の各種マルチメディアフォーマットの普及が、このようなファイルを扱うツールの発達をもたらした。これらツールの多くはGUIを有し、ユーザーとの会話なしで働くことは出来ない。しかし、インターフェイスを働かなくしてバッチモードで働くことの出来るツールが沢山成長している。コマンドプロンプト又はシェルスクリプトから使う設計のツールさえある。
この記事で調べるのはこの種類のツールである。複合メディア取扱機能は、通常テキスト処理フィルタに応用される技術を使って、簡単なツールを組み合わせることにより、実現されることが多い。重点はオーディオストリーム処理である。これらフォーマットは、ユニックスフィルタパイプラインの中で極めて良く処理することが出来るカラである。
音響サンプル・トランスレータ
沢山の音響ファイルフォーマットがあるので、その間の転換はしばしば起こる操作である。次のコマンドプロンプトで呼び出す音響交換ユティリティ sox がこの役割を満たす。
sox sample.wav sample.aiff
sox sample.aiff -r 8000 -b -c 1 low.aiff
sox がファイル拡張子から行き先フォーマットを推測出来ないときは、これを明確に示す必要がある:
sox sample.wav -t aiff sample.000
ファイル拡張子が .rawである時は "-t raw" オプションを使う必要はないが、このオプションは、rawサンプルが標準入力から来るか又は標準出力に送るとき不可欠である。これをおこなうには、ファイル名の代わりに "-" を用いる:
sox -t raw -r 11025 -sw -c 2 - sample.aiff < sample.raw
sox sample.aiff -t raw -r 11025 -sw -c 2 - > sample.raw
同様にしてサンプルの最後の秒を抽出するには:
sox sample.aiff -t raw -r 44100 -sw -c 2 - | tail -c 176400 |
sox -t raw -r 44100 -sw -c 2 - lastsec.aiff
異なるサンプルの一部を抽出し、ネストされたサブシェルコマンドを経由してそれらを一つのファイルにまとめることが出来る:
(sox sample-1.aiff -t raw -r 44100 -sw -c 2 - | head -c 176400
sox sample-2.aiff -t raw -r 44100 -sw -c 2 - | head -c 176400 ) |
sox -t raw -r 44100 -sw -c 2 - newsample.aiff
デスクトップ音響出力
"-t ossdsp" オプションを用いて、音響をOSS (オープンサウンドシステム) device /dev/dspに送ることが出来る:
sox sample.aiff -t ossdsp /dev/dsp
この方法で再生された音響サンプルは出力ハードウエアを独占する。音響能力のある別のアプリケーションは、音響装置が解放されるのを待って別のサンプルを再生しなければならない。GNOME やKDE などのデスクトップ環境は、一つ以上のサンプルを同時演奏する装置を備えている。サンプルは、別々のアプリケーションが待ったなしで送って来るが、すべての音響アプリケーションが、デスクトップそれぞれについてのやり方を知っている訳ではない。sox はそうした能力に欠けるプログラムの一つである。しかし、GNOME やKDE などの提供する音響メディアを一寸調べれば、この短所を補う方法が見付かる。
音響装置共有の出来るパケージは、極めて少ない。一つの共通戦略は、バックグラウンドサーバーを働かせて、クライアントアプリケーションは再生するサンプルをそこに送らなければならないようにすることだ。次いでサーバーが音響装置の制御を握り、音響データをそこに送る。一つ以上のクライアントが同時にサンプルを送ると、サーバーはそれをミックスし単一の組合せストリームとして出力装置に送る。
ESD(Enlightened Sound Daemon)はこの方法を用いる。GNOMEデスクトップでは、サーバー、esd、がバックグラウンドを働かせていることが多い。ESDパケージは、ほとんどのディストリビューションで esoundの名で来ており、次のような少数のクライアントアプリケーションを含む:
アナログ・リアルタイム・シンセサイザ(ARtS)はESDと似ているが、KDEに対して用いられることが多い。バックグラウンドサーバーは対応するクライアントプログラムを artsd し、artsplay し artscatする。サンプルを再生するには:
sox sample.cdr -t raw -r 44100 -sw -c 2 - | tail -c 352800 |artscat
ESD もARtS も特定のデスクトップ環境に従属しない。一寸した作業で、理論的にはESD をKDEで、 ARtS をGNOME で使うことが出来る。いずれも、コンソールログイン作業で使うことも出来る。こうして、各種フォーマットでエンコードされたサンプルを、グラフィック・デスクトップ・インターフェイスミックスの有無に関係なく、ミックスすることが出来る。
サンプル源としての音楽
音響パイプライン側でおこなわれることを理解した上で、最初に何を置くべきかを考える。MP3, MIDI, またはモジュール(MOD, XM, S3M, など) フォーマットのファイルから抽出したサンプルを扱いたいことがある。これらフォーマットそれぞれに、原始サンプルを標準出力に出力するコマンド行ツールがある。
MP3 音楽用には "maplay -s" を用いることが出来る
maplay -s music.mp3 | artscat
Ogg Vorbis のユーザーは次を用いる:
ogg123 -d raw -f - music.ogg | artscat
音楽ファイルはまた、MIDIフォーマットでも得られる。シーケンサハードウエアの貧弱なサウンドカードを使っているときは、timidityに脅威的な働きをさせることが出来る。通常このパケージは、MIDIファイルを、音響装置直接出力用音響サンプルに転換する。コマンド行オプションを注意深く選ぶとこの出力をリダイレクトすることが出来る:
timidity -Or1sl -o - -s 44100 music.mid | artscat
デモシーンのファンであれば、デスクトップで少数の音楽モジュールを再生することがあるだろう。幸い mikmod で普通のモジュールフォーマットが再生出来る。libmikmod, 3.1.9の現行安定バージョンは、未だ ARtS アウエアではないようだ。コマンドパイプラインを通じてこれを修理することが出来る:
mikmod -d stdout -q -f 44100 music.mod | artscat
play sample.aiff echo 1 0.6 150 0.6
play sample.aiff vibro 20 0.9
play sample.aiff flanger 0.7 0.7 4 0.8 2 play sample.aiff phaser 0.6 0.6 4 0.6 2
play sample.aiff band 3000 700
play sample.aiff band 0 700
play sample.aiff chorus 0.7 0.7 20 1 5 2 -s
play sample.aiff reverse
maplay -s mono32.mp3 | sox -v 0.5 -t raw -r 32000 -sw -c 1 - -t raw -r 44100 -c 2 - split | oggenc -o music.ogg --raw -
これらが、パイピング技術で出来ることのヒントになれば幸いだ。洗練されたグラフィック・ユーザー・インターフェイスのある会話型アプリケーションの使用に異議を唱えることは出来ない。これらは、引数フラッグのペイジを覚える必要がなくて、複雑な課題を実行することが出来る。しかし、数多くの場合にコマンドパイプラインが有用である。多数の音響サンプルの転換には、何らかの形のスクリプトが必要である。会話型プログラムは、at 又は cron ジョブの一部として呼び出すことは出来ない。
音響パイプラインはディスク空間の節約にも用いられる。加えた修正は異なるが本質的には同じサンプルのコピイを多数記憶する必要はない。各種のフィルタのパイプラインを用いて、各サンプルを作ることが出来る。これらは、音響サンプルの修正バージョンが必要な度に呼び出され、変更された音響が演奏される。
この記事のツールを試して見られたい。組合せを色々工夫されたい。重要なのは興味を持つことだ。
今や、ソフトウエア産業やフリーウエア動向に関心のある人は、マイクロソフトが、独禁法事件の和解のため米国公立学校にコンピュータとソフトウエアを提供するとの法的措置につきお聞き及びであろう。
マイクロソフトの術中に嵌ると考えるのは私だけでないと思う。子供達全部がマイクロソフトのソフトだけしか習わなかったら、大学や生涯を通じてそうなるだろう。
マイクロソフトはそんな有利な特権を得ようとしている。罰や補償とは程遠い。実際ソフトウエア産業との競合修復に反する。
Linuxユーザーとして、私はマイクロソフトを問題にしていない。連邦独禁法が有効だと思ったことはなく、各州の訴訟はその反映だと思っている。欧州人はECがもっと有効な手を打つと思っているが、そうなりそうもない。しかし、ソフトウエア産業に関心のあるものとして、本件に関する見解を繰り返し述べたい。
本件の有効で公正な唯一の収拾策は、ソフトウエアに関連付けなければならない。特にマイクロソフトには、完全なソースコード及び、そのアプリケーション及びOSのいずれかで使用する各プロトコル、API及びファイルフォーマットの実働リファレンス・インプリメンテーションの、公開を要求するべきだ。リファレンス・インプリメンテーションが公開されるまで、彼らは新ソフトウエアの配布を中止すべきだ。リファレンス・インプリメンテーションは、(すべての無料及び商業作業が自由に使える)公開ドメインに置かなければならない。
言い換えると、マイクロソフトが(少なくとも一部は非合法、反競合手段により)工業標準になるとして、相互運用性を保証する十分な情報を各人に与えるとの、責任を負わなければならない。
文書の適切性、及び「内部」プログラムインターフェイス又は「管理」プロトコルの公開必要性について無限に論じることが出来る。これは判事の間違いだ。コマンド行プリミチブユティリティのセットのためリファレンス・インプリメンテーションを要求して、ANSI標準C及びC++(MSC又はMIFCの絡みなし)は、明確な標準を好意で提供している。必要参照ツールがそのプロトコルで、目標ファイルに、専用(最小)機能を実行し、又はOS/ライブラリ成分を呼び出すことが出来るようになか、又はMSが罰金を払ってこれ以上の販売を禁止されるかの何れかだ。
この方法は、MSにそのOS又はアプリケーションのソースの公開を強制はしないことに留意されたい。独自のリファレンス・インプリメンテーションを作るのは彼らの自由だ。勿論、それには金がかかる。彼らに取って最も安い方法は、コア(これは別個のリファレンス訴訟になる)を用いてソフトウエアを作り、自分のUIエレメントをその上に付け加えることだ。
しかし、リファレンス訴訟が必要相互運用性を与えると示すまで、新ソフトウエアのリリースを禁止することの方が重要だ。保証が、プロトコル、API及びファイルフォーマットを含むこともまた重要だ。
これに少しでも欠けるところがあれば、それは政府と大企業の大衆に対する姿勢のあらわれで、政治家の私腹を肥やし「小企業」の仕事を閉め出す裏取引を示すこととなる。
11月号で(デスクトップの争い:Linuxが勝たない理由、72号)、IBMシンクパッドへのLinux搭載に失敗した話をし、ソフトのサポートが不十分だと述べた。だが、それは別の話だ・・・。
そのシンクパッドは売り払って、CDから直接ブート出来るシンクパッドを捜している。予算不足の上、ウインドウズXPで働くとの贅沢な希望なので未だ見付からない。
ディストリビューションに関する限り、Libranet Linux の最新版が来ることになっている。先月の記事からE−メールや、、ハードウエア要件の公開に悩まされたベンダーの一つだ。一方で、新リリースを買う前に旧版をデスクトップで試した。Libranet は Debianに基づいており、Debianは私が格付けに使っている文書を提供している。私の引用する文書を既に提供しているベンダーがあれば、この記事は、そうでないベンダーを相手にしていると了解されたい。
ウインドウズXPは終わったので、Linuxベンダーが標準になる日を夢見ている。Linuxの機能的バージョンを見出し損ねた後、ホームPCをXPで更新せざるを得なくなった。XPは、98で出来なかったことすべてが出来る訳ではないが、3週間働かせて故障は2回だった。2回ともロックせず、自動的に再ブートした。だが、世界中のコンピュータをハイジャックしようとのマイクロソフト計画に毒された人々は依然としてXPに捕らわれている。良いビジネス・アプリケーションと組み合わせとパックした機能的OSをLinuxベンダーが提供することが出来れば、直ぐにもマイクロソフトを圧倒出来ると思う。
マイクロソフトとの闘いに勝つ最初で重要なステップは、Linux社会には全く知られていないコンセプトを導入することである。この革命的新戦略は、カスタマサービスと呼ばれる。「お客は神様」との意味ではない。Linuxを一体型馬鹿チョンにしろと言うのでもない。ウインドウズは、したいことも、そうでないことも、何もかもやってくれる。私が言いたいのは、Linuxを進歩させたい人の対象、目的、取組姿勢がカスタマのニーズに合わせることであるべきだ、と言うことだ。気を付けて聞いて欲しい。今のLinux関係者が理解していないことがある。対象はCDに乗せたソフトウエアではない。対象はカスタマだ。つまり、エンドユーザーが、そのソフトを仕事、生活、銀河の征服、何にでもうまく使えるようにすることだ。
ダグラス・アダムスはその科学小説「生命、宇宙及びすべて」の中で「SEPフィールド」と言う妙な機械を発明した(3章)。何か(例えば山)を全く見えなくする発明は、複雑で莫大なエネルギーを必要とすることから説明し始めた。だが、山の周りに安くて簡単なSEPフィールドを作ることが出来れば「山があることに気付かずに歩き回ることが出来る。SEPとは、見ることが出来ない、又は見るのは他人の問題だから脳が見ようとしない、何かだ。他人の問題。心ここにあらざれば、見れども見えずだ」。
Linuxにはダグラス・アダムスのファンが多いらしい。先月号の私の記事に反対する意見で最も多かったのは、ベンダーには出来ないことでベンダーを非難していると言うものだった。君のソフトが搭載出来ない?私の知ったことではない!がベンダーの共通観念だ。ファイアーウオールの構成法を述べたインストラクションがない?悪いね!ソフトは働くが、思うことがさせられない?自分で解決しなさい!Linuxを買う前に自分のハードで働くか聞きたいって?そんなレベルのサービスを期待するのは妥当でない!
そこで記録だ。世界中で3人しか使っていないプリンタなら、サポートはないよ、と言いさえすれば、カスタマは敢えて働かせようとしないので時間の無駄が省ける。だが、これは最低限のことで、カスタマの問題は解決していない。この姿勢は、ユーザーの問題解決に役立っていないことは認めざるを得ないだろう。Linuxの世界では、プリントドライバ以上の多くの問題が「他人の問題」になっている。
ベンダーがカスタマの問題を解決してくれると期待するのは、不合理だろうか?多くの人が、Linuxベンダーは第三者の問題には関与しないと言っている。一つの物語をしよう。昨年、事務所全員が金を出し合ってボスに Handspring Visor をクリスマスプレゼントした。手に入れて最初の週に第三者ソフトを搭載したところ、ウインドウズボックスのUSB接続が一掃された。第三者ベンダーを呼んだが、問題の存在を否定し、問題解決が出来なかった。Handspring に電話して、第三者ソフトを搭載するまでVisor はうまく接続出来たが今は出来ないと、説明した。第三者ソフトの削除、ウインドウズUSBドライバの再搭載、悪いソフトのリファレンスのレジストリからの削除、など色々やったが駄目だった、と説明した。Handspring に何か良い考えがあるか?と聞いた返事は「問題ありません。前に解決しています」だった。踏むべき手順を電話で順に告げ、その通りにすると静かにコンピュータが再ブートされる修復されるのを待って呉れた。さて、Handspring は、ウインドウズに責任はない。問題を起こした第三者ソフトには勿論責任がない。だが、Handspring は、自分の製品価値が、PCにつなぐことないあると承知している。だから、他人に文句を言う前に問題を解決することに重点をおいている。最後に聞いたのは、Handspring は主として企業向けにVisor を、作る片端から売っている。この同じ企業は、Linuxを無料で使おうとはしない。どの方法が効果的だろうか?ヒントを上げよう。今、私の事務所に6台のVisorがあるがLinuxは1台もない。
一寸待て。反対の叫びが聞こえる。地球上のあらゆるLinuxベンダーが、そのための資源がないと私e-メールしようとしているのが見える。IBMには世界中のサポートをする力があるだろうが、哀れなLinuxベンダーとソフトウエア社には、電話で答える人を雇う力がない。どうやってカスタマをサポートすれば良いのだ?よかろう、解決策はある。「インターネット」がある。「ウエブサイト」を構築し、情報をそこに送る。何?ウエブサイトは既にある?じゃ、テストして見よう。ibm.comに行こう。コンピュータモデルを見て、カスタマ援助のためどれだけの情報を用意しているか見てみよう。Linuxサイトを幾つか見て、その情報量を見よう。エッ、反対の叫びがさらに大きくなる。「IBMのような専門レベルのウエブサイトの構築と維持に一体どれだけ費用が掛かるか分かっているのか?」そう、多分、分かっていない。だが、洗練されておらすグラフィックになっていなくとも、最小のLinuxベンダーが、利用出来る情報の点でIBMに匹敵する方法を知っている。
ここでも、IBMのウェブサイトのキイは、自分のサーバーを作っていることではない。キイは、カスタマはその製品を何に使うかを確かめることにIBMの関心があることだ。IBMは「完全なデスクトップを作りました。貴方が使えなくても私の問題ではありません」とは決して言わない。IBMは、顧客が使えることを確かめる。同じように、Linuxベンダーも、二つの重要特徴を持つサポート・ウエブサイトを構築することを提案する。
1)ベンダーは、ディストリビューションのファイル構造、ブートオプション、ポート割当、共通コマンド行スイッチなどに関する新しい話題を投稿しなければならない。これには、新Xサーバーの搭載、kernelの再構成、ネットワーク問題故障探査、その他の共通問題に関する専門的処理方法も含む。これらはネットワークで得られるだろうか?イエスだが、どの方法にも「SUSEでは働くが、RedHatは知らない」とか「バージョン5.1では試したが、5.2では違う」が入っている。ベンダーは、ファイル構造も特定バージョンについての正しい手順も知っている筈で、それが人々の欲しがる情報なのだ。Linuxの大きい強味の一つは、自分で手直し出来ることだ。だが、メルセデスベンツの96年型エンジンを修理しようとして、メーカーが84年型フォードの修理マニュアルを送って寄越して「大変似ているから、自分で違いを見付けなさい」と言ったらどう思うだろうか?
2)だが、ベンダーはすべてのハードウエアを試験出来る訳でもないし、各種ネットワーク構成を知っている訳でもない。だから、ユーザーにサポートを提供しようとしてはいけないか?違う!ベンダーのウエブサイトに必要な第二の特性は、ユーザーが自分の方法を投稿する場所であることだ。あるプリンタバージョンをあるLinuxバージョンに搭載するのでなく、キャノンBJC250 をディストリビューション6.5に搭載するのだ。こうして、最初の人が、正しい手順を万人に伝えることが出来る(さもないと、皆が初めから研究しなければならない)。だがインターネットには既にLinuxのハウツーが載っている。それに付け加える理由は幾つかある。バージョンを特定した情報の他に、ベンダーにハウツーを投稿するのは、ベンダーが全部をテストしなくとも、少なくとも掲載前に見て明らかな間違いを見出せることを意味する。これでイタズラ者が初心者に嘘を教えるのを少なくとも防止することが出来る。またベンダーのために沢山の研究材料となる。ユーザーフィードバック用にラジオボタンを付けると、問題解決に役立ったか否かで各ハウツーにランクを付けることも出来る。こうして、もしMP3ファイル取扱いに5回のヒットしかなく、CD焼き付けに200回ヒットがあれば、ベンダーは次のバージョンに何を加えるべきか判断が出来る。CD焼き付けを試した人の半数しか成功しなければ、その問題を解決する必要がある。このフィードバックにより、ハウツーの自動修正も出来る。常に問題を解決するハウツーは、ベンダー文書の一部になり、マニュアルに入れることも出来る。役立たないハウツーは削除すれば良い。
私がベンダーなら、このアイデアを一歩進める。ハウツーがユーザーから肯定的反響を受けたときは、投稿者に感謝の品(会社のロゴの入ったペンなど)を贈る。1ヶ月以内に、技術志向のクライアントの間で、賞品を集める競走が起こるのは間違いない。最も有用なハウツーを提供した人には特別賞を出して奨励する。費用が掛かるだろうか?調べて見よう。客先の問題解決のため10時間掛け、5ドルの野球帽を贈ったとすると、熟練者を1時間50セントで雇ったことになる。
馬鹿馬鹿しいと言う人もいるだろう。結局、既に色々な種類のLinuxユーザーグループ、メールリスト、クラブがある。ベンダーはこれらの一つでも援助するのに時間を使わなければならないのだろうか?答は、顧客だからだ。君がamazon.comのCEOで、サーバーが故障したと聞いたとしよう。IT部長を呼び「何が起こったか?」「何時解決するか?」と聞いたとき、IT部長が「何が起こったか知りませんが、友人に聞き回り始めたので、数日中には誰かが考えてくれるでしょう」と答えたら、IT部長は職を失うだろう。貴社のソフトを使い、たった1台のプリンタで生計を立てている人に取って、そのプリンタはamazon.comのウエブサーバーと同じ位重要なのだ。ユーザーグループは、学習、問題解決策共有、などの重要資源だ。だが、ボトムラインは、製品の働きを維持する責任のあるベンダーであることだ。ベンダーがその責任を厳しく受け止めるとカスタマが信じないなら、ソフトウエアは買わないだろう。
私が間違っているのでない限り、有用なウエブサイトを構築する時間がないと叫んでいる人々は、数分前に、既に獲得したカスタマサービス要求を満たすことが出来ないと叫んでいたのと同じ人だ。人手の足りないカスタマサービス部に電話するのは、ウェブサイトで必要な情報を見出すことの出来る人々のうち一人以下だ。電話をしたとしても、時間は掛からない。電話で一寸説明して、サイトを見て貰うか、印刷物をe-メールして問題を解決して貰うかだ。それでもカスタマサービスが出来ないだろうか?大手ベンダーの幾つかはカスタマサービスを変えようとしている。残念乍ら、そのうち一つは、有料で提供しようとしている。
終わりに言いたいのは、レコードに関して、Linuxには期待しないと言うことだ。Linuxは好きだ。マイクロソフトとの競合に勝てば良いと思う。だが、今のところ、ほとんどのLinuxベンダーは、秘密にビルゲーツの所有になっているのかと思わせる。マイクロソフトはそのマーケットシェアを護るため、Linuxベンダーが既におこなっている以上の良い戦略を見出すことができないからだ。
概観
ソフトのバグを見付けるためには、良いツールが必要だ。GNUプロジェクトから無料で入手出来る極めて有力なデバッガがある。使った人はそのスパルタ式インターフェイスをご存知だろう。これは悪くはないが、良くもない。コマンド行とテキストベースのユティリティに慣れたいても、この形のデバッガを使うのは、楽しくはなく厳しい仕事だ。複雑なデータ構造の大システムの場合は特にそうだ。テキストインターフェイスは、プログラム全体庭田って一段毎に簡単な値又は一定の条件を点検して互いに深く関連する構造体をデバッグするには有効で容易だ。他のインターフェイス(emacs gud-mode など)は、やや楽だが、理想的ではない。
したがって、グラフィック・インターフェイスを必要とする。ここでも、GNUプロジェクトが大変良い可能性、DDD、データ・ディスプレイ・デバッガを提供する。DDDはAndreas Zeller とDorothea Luetkenhaus が書いたグラフィック・インターフェイスで、少し前にGNUプログラムに入れられた。デバッグが時に極めて厳しい仕事でなければ、dddは楽しみだとさえ言ったかも知れない。
他のデバッガに比べてdddの特徴は何だろう?主要点は、dddがサポートするDDDの正常デバッグ機能(ソースファイル一行毎の点検、ブレークポイント設定、変数値の変更など)ではなく、DDDがデータ構造をグラフィックに表示することにある。その意味は?後の例に示すような、Cのリンクされたリストを考える。データ構造体は基本的に、同じ型の別の構造体を指すポインタと一緒に幾つかのデータフィールドから成り、これらが一緒になって相互接続ネットワークを形成する。ネットワークは、ポインタ変数の値から作られている。これは階層内容により再構築される主値において、前又は次の要素のメモリ位置を与えるが、これは便利でも心地よくもない課題だ。この方法で状態の小型概観を作るのは極めて難しいのが欠点だ。次のプログラムラン(又は別の入力データセットなど)ではメモリ位置が変わるので、DDDがメモリ内容から自動的にダイアグラムを作成し、複雑な構造を簡単で見易くしてこの困難を克服しない限り、この作業は忽ち終わってしまう。
しかし、古いダイアログベースのデバッグ方法に比べてdddが提供するのは、プログラム構造をグラフィックに描く能力だけではない:
簡単なプログラム例のデバッグを用いて、これらが実際にどう見えるかを見よう。
標準オプションでプログラムにデバッグ情報を含ませるには、gccを呼び出すときスイッチ- gを用いる:
@jupiter wolfgang]$ gcc -g fac.c -o fac
これは、通常の実行可能ファイルよりサイズの大きいバイナリファイル fac を作る。追加情報(機械語命令ブロック間の割当、ソースコードの行番号など)があるからで、驚くには当たらない。
gccが、競合コンパイラ中では極めて稀な特性を与えることに注目するのは重要である。gcc -g -O2 fac.c fac が働くなど、最適化になっている場合でも、(コードの数行から最適化を外すなどで)最適化され且つデバッグ情報を含むバイナリファイルを作って、デバッグ情報を作ることが出来るので、ここでこの組合せを解説する。
fac.c hに関するソースファイルには、次の内容が含まれる:
#include<stdio.h>
int main() {
int count;
int fac;
for (count = 1; count < 10; count++) {
fac = faculty(count);
printf("count: %u, fac: %u\n", count, fac);
}
return 0;
}
int faculty(int num) {
if (num = 0) {
return 1;
}
else {
return num * faculty(num - 1);
}
}
お分かりの通り、このプログラムは簡単な計算をするだけである。整数値1から9までの範囲をループして、各ループステップで各番号のfacultyの数を計算する。これうぃ遙かに効率的な方法でおこなうことが出来るのは明らかだが、一般的デバッグ技術の例としては役立つ。これはエラーがあるので正しく働かない。付属デバッガを使わないで、通常シェルを実行してこれを点検することが出来る(デバッグ記号を含むバイナリは少し遅いだけで通常プログラムのように働く)。得られるのは、セグメンテーション不具合によって起こるコアダンプだけである。そこで、このプログラムをデバッガにおいて何が悪いか見てみよう。
@jupiter wolfgang]$ ddd&
デバッグするプログラムのファイル名は、オプション引数として与えることが出来る。dddを搭載していないときは、dddバイナリはすべての主要ディストリビューションに付いて供給されるので、好みのパケージ管理システム(apt-get, rpm など)を用いてほとんど確実におこなうことが出来る。バイナリパケージがないときは、ftp.gnu.org (又はそのミラー)からソース配布を受けて、付属 INSTALL ファイルの指示にしたがう。
コマンド行に名称を入れないときは、 File->Openプログラムの入力ダイアログボックスを通じて選ぶことが出来る。dddがそのプログラムをロードして、デバッグ記号を解析し(正確にはバックエンド・デバッガに解析させ)、その後、メイン・ソースファイルをロードする。ディスプレーに図1と同じようなウインドウが示される筈だ。
![]() |
我々の課題に ``Command Tool''-Subwindow は極めて重要だ。これは規定値で、メイン・ウインドウの右に示され、コードを用いて各種作業が実行出来る(誤ってウインドウズを閉じたとき、F8又はウインドウメニュー項目View->コマンドを使って開くことが出来る)
ここで、コマンドツールから " run'' を選ぶ。これはデバッガにコードの開始を命令する。ブレークポイントが始めに近くてプログラムは長くないので、直ぐデバッガ干渉モードに入る。ソースコード左の緑矢印が、ソースファイルで次ぎに実行される行を示す。
ソースコードのステップ毎実行に二つの方法がある。"next" は1行毎に実行するが、プロシージャ呼出は省略(呼出の結果を示すだけ)する一方で、"step" は、呼び出されている間サブルーチンコードを掘り下げる。プログラムの悪いところを見付けたいので(普通のエラーなので、熟練プログラマには分かっている筈)、プログラム全体を "step" する。ボタンを押すと、faculty サブルーチンの始めの右に緑のソース行ポインタが出る。これが、したいことなので、もう一度 "step" を押して、緑矢印を条件決定のelseブランチに向ける。これもOKだ。次に何を期待するか?サブルーチンに入ったとき num の値は1なので、回帰してサブルーチンに再び入るときは、直ちに値1を返す0の筈で、これはまた最初の呼出の1*1=1 を返し、メインプログラムに戻る筈だ。もう一度 "step" を押したとき実際にそうなるか調べよう。緑ポインタは、再びファンクションの始めに戻るが、次のステップでelseブランチに入ってしまう。何かが間違っている。num の値を調べる必要がある。
簡単な変数(int, long, floatなどの簡単な型の変数など)の値を示すには幾つかの方法がある。最も普通の方法は、ソースウインドウの中でマウスポインタを変数の上に置き、内容を示すツールチップが画面に現れるのを待つことだ。別の方法は、アイデンティファイアの上でマウスを右クリックしポップアップメニューから Print num を選ぶか、又はアイデンティファイアをマークして Data->Print() メニュー入力を選ぶことだ。後の二つの方法を使うと、値はウインドウズ下側のgdb出力ウインドウに表示される。
方法に関わりなく、num の値として0が得られる。num が0なのに何故第二ブランチに入ったのか?もう一度stepを使って、エラーの推測を確認する。ファンクションの始めに num の値を見ると、-1であると分かるが、次のstep(またif条件の第二ブランチ)ではまた0になる。エラーは、ifに=を忘れて、条件でなく指定を示したことだ。Cプログラムでは有り勝ちなエラーだが、隠れているとプログラム開発を著しく遅らせる。不正確なプログラムからは、意味のある結果が得られないので、実行ウインドウの"kill"ボタンを使って、これを殺すことが出来る。
"=" を"=="で置き換えて、プログラムをコンパイルし直し、(デバッグ記号をわすれないこと)"File"-メニューからdddにロードし直す。ブレークポイントは保たれているので、プログラムを始めからスタートすることが出来る。今度は faculty ファンクション呼出がうまく完了し、緑ソース行ポインタは printf(...)-l行にある。もう一度"step"を選ぶと、dddはプリント呼出をステップ毎におこなうが、これは不可能だ。ファンクションを、普通はデバッグ記号無しでコンパイルされる標準Cライブラリから取っているからだ。だからこの場合は"next"が良い。"step" は、ありもしない幾つかのソースファイルについてエラーメッセージを出し、何度も"next"くりっくをしなければならなくなる。
#include<stdio.h>
int main() {
typedef struct person_struct {
/* データエレメント*/
char* name;
int age;
/* リンクエレメント*/
struct person_struct *next;
struct person_struct *prev;
} person_t;
person_t *start;
person_t *pers;
person_t *temp;
char *names[] = {"Linus Torvalds", "Alan Cox", "Rik van Riel"};
int ages[] = {30, 31, 32};
int count; /* 臨時カウンタ*/
start = (person_t*)malloc(sizeof(person_t));
start->name = names[0];
start->age = ages[0];
start->prev = NULL;
start->next = NULL;
pers = start;
for (count=1; count < 3; count++) {
temp = (person_t*)malloc(sizeof(person_t));
temp->name = names[count];
temp->age = ages[count];
pers->next = temp;
temp->prev = pers;
pers = temp;
}
temp->next = NULL;
printf("Data structure created\n");
return 0;
}
例に使用されたnameはご存じだろうが、それは重要でない。ageは無作為で選んだ。
このコードは個人特性二つ(nameとage)を二つのポインタ(リストの前と後のperson)とともに記憶するpersonエレメントの二重リンクリストを定義する。これはCで最も重要な構造体なので、どのプログラマも何度か見た筈だ。前と同様、このプログラムは余り重要な仕事はしない。メモリに構造体を作って終わるだけだが、今の目的にはこれで十分だ。プログラムは、デバッグ記号を付けてコンパイルし、dddにロードする。
今度は、最初のブレークポイントを28行目(forループの始め)に置く。start-アイデンティファイアの上にマウスポインタを置く。一寸待つと現れるバリューツールチップにdddが、六角形の記号で特定のメモリ位置にある struct person_t のインスタンスへのポインタであることを示す。グラフィック視覚化の完璧な候補だ!
startアイデンティファイアの上でマウスを右クリックして、コンテキストメニューをポップアップし、"Display *start" - を選ぶ。*は、dddが自動的にポインタの参照を外し構造体の内容を示すため必要だ。dddウインドウ上部の新しい部分が示され、startの内容を含んでいる。nameとageは数行先を割り当てる値に設定され、 next, prev は期待通りNULLポインタを含む。図2は、ディスプレイで見られる筈のボックスを示す(ポインタの六角形の値はシステムにより異なる)
![]() |
これだけでも立派な特性だが、プログラムをもう少し進めてデータ構造体がメモリ内にどう構築されるか見よう。"next"ボタンを使ってforループを34行(pers->next = temp)に達するまで進める。このとき二人目の個人データ構造体が構築されて一人目のものと接続される。後でグラフ表示を見ると、一人目の次のフィールドが、0でなくなっていて別の構造体を指している。呼び物は、この値をダブルクリックすると、二人目の構造体のある新しいボックスが開く。一人目から二人目へのポインタがボックス間の矢印として自動的に表示される。
三人目のデータ構造体を作るには別の方法を用いる。結果を見るのにコードを一行だけ進めるのが便利だからである。printf(...)ステートメントを含む39行目に新しいブレークポイントを設定する。"cont" を押すとプログラムは次のブレークポイントに達するまで継続する。
通常の方法で三人目のデータを示すことが出来る。だが今度は、n 人目から n+1人目までだけでなく、後ろ向きポインタも見たい。例えば、第二グラフの prev-フィールドをダブルクリックすると、一人目のボックスを表示中に写した別のボックスがポップアップする。三人目の prev-フィールドでも同じことが起こる。これは同じ構造体を二度表示するのは、我々のしたいことではない。これの修正をdddに命令する。
dddは、alias detectionと言う特性を使ってこれをおこなう。これは Data->Detect アリアスメニューエントリを使って実行する。表示は図3のようになる。
![]() |
すべてのポインタが正しく示され、メモリ内のデータ構造体の様子がよく分かる。残念乍ら、アリアス検出機能を使うと、特に密に接続された構造体を持つものは、dddの速度を遅くする欠点がある。グラフをそれぞれ比較して表示中のどの構造体が同じメモリ位置にあるかを見るため、プログラムステップの後で幾つかのメモリ位置を比較しなければならないからである。加えて、アリアス検出は、バックエンドデバッガに任意のオブジェクトのアドレスを与えることの出来るソース言語を用いるときしか利用出来ないので、今のところC、C++及びjavaに限られる。
#include<stdio.h>
/* 数学式をあらわすバイナリツリー構造体を作る */
enum operator { plus, minus, times, div };
typedef struct tree_struct {
struct tree_struct *left;
struct tree_struct *right;
union {
int op:2;
int val;
} opval;
} tree_t;
int main() {
tree_t *node;
tree_t *root = (tree_t*)malloc(sizeof(tree_t));
root->opval.op = times;
node = (tree_t*)malloc(sizeof(tree_t));
node->right = NULL;
node->left = NULL;
node->opval.val = 7;
root->right = node;
node = (tree_t*)malloc(sizeof(tree_t));
node->opval.op = plus;
root->left = node;
node = (tree_t*)malloc(sizeof(tree_t));
node->left = NULL;
node->right = NULL;
node->opval.val = 5;
root->left->left = node;
node = (tree_t*)malloc(sizeof(tree_t));
node->left = NULL;
node->right = NULL;
node->opval.val = 3;
root->left->right = node;
printf("Tree created\n");
return 0;
}
このプログラムは、パース過程完了後コンパイラがそれらを見る方法で数学式をあらわすバイナリツリー構造体を作る。グラフ構造体がこの情報を本質的に含むので、この形では括弧が異常に多い。各ノードが、数学演算子(方程式operatorsが定義する、+、−、×、÷)又は一定(整数)値の何れかを含む。データ構造体のあらわす式は、明確に表現すると (5+3)*7 である。
プログラムを走らせる(終わりの前で、データ構造体構築の後にブレークポイントを設定しておく)。構造体のleft/right-メンバーをダブルクリックして、ルートエレメントと引き続くメンバーすべてを開く。メモリ構造に関するすべての情報が得られるが、見掛けは良くない。図4の様な見掛けにしたい。
![]() |
ツリーを単に展開して作った図に比べて明らかに一つの変更がある。すべてのエレメントが順に並んでいる。これは、マウスを使ってエレメントをそれぞれの位置にドラッグすればよいが、それは不便だ。遙かに簡単な方法は、dddが提供する自動配置機能だ。それを使うには、メニュー入力 Data->Layout Graph (又はショートカットALT+Y)を選ぶ。dddが、後に示す方法でグラフを配置する。
グラフには別の人手変更が加えられていることに注意。各モードで値又は演算子の何れかをあらわすのに、ユニオンストラクチャを使っているので、dddは同時に両方を表示する。これは混乱し易いので、避けなければならない。ルールは明確だ。left と right ポインタ双方が NULL になっているノードは数値を、他は演算子をあらわす。右マウスボタンを用いてアクセス出来るコンテキストメニューから"Unidisplay"を選んで、不要なエントリを消去する。dddは、作用をすべてのフィッティング構造体に適用するか、現在のものだけかを聞いて来る。各種ボックスから各種値を消去したいので、二番目を選ぶ。
dddのデータメニュー内には、グラフ配置を扱う追加機能がある。これらは分かり易いので、読者は簡単に使い方を習得出来るる筈だ。
![]() |
#include<stdio.h>
#include<math.h>
int main() {
float *val;
float sval[100];
float **threed;
int points = 100;
float period = 2*M_PI;
int count, count2;
val = (float*) malloc(points*sizeof(float));
for (count = 0; count < points; count++) {
val[count] = sin(count * period/(float)points);
sval[count] = val[count];
}
threed = (float**)malloc(points*sizeof(float));
float x,y;
for (count = 0; count < points; count++) {
threed[count] = (float*)malloc(points*sizeof(float));
for (count2 = 0; count2 < points; count2++) {
x = count*period/(float)points;
y = count2*period/(float)points;
threed[count][count2] = 1.0f/(x+y)*sin(x+y);
}
}
/* 通常、作成したデータをファイルなどに書き込む */
printf("Value tables created\n");
return 0;
}
通常、ほとんどのプログラムは複雑な関数を扱う(又はそのデータセットを異なる方法で取得する)が、基本原理(アレーに値を満たす)はすべての場合に変わらない。
データ描画の各種方法を示すため、サンプルプログラム内に三種類のアレーを作る。最も簡単なのは、svalのように静的な、一次元アレーである。この場合、アイデンティファイアの上でマウスを右クリックして光らせ、ウインドウの上部に出る"plot"アイコンを押すだけで良い。望みのグラフのある gnuplot-ウインドウが新たに開く。グラフの見掛けは、幾つかのメニュー入力を用いて変更することが出来る。図6は、メニューでPlot->Linesを選んで、スタイルを規定値の「点」でなく「線」にした出力を示す。
![]() |
動的作成アレーの場合はやや複雑になる。dddがその長さを自動的に決められないからだ。この仕事は所謂る array slicesの利用だ。これはdddウインドウ下部のデバッガ会話部分で人手により定義しなければならない。
式 graph display val[0]@points が、このようなアレースライスを作る。ここで、インデクス式[0]は、使用値(メモリ値 pointsの代わりに、単純整数値が同様に使える)に関するも下限を、 @points は上限を意味する。このグラフの描画は、前と同じにおこなう("plot"ボタンを押す)と、同じデータセットを使っているので、同じ結果が得られる。
三次元グラフもほとんど同じ方法だ。後で"plot"ボタンを押すためマウスを使って静的アレーのアイデンティファイアを光らせる一方で、動的割当構造体をを使うときはアレースライスを作らなければならない。このためのシンタクスは、読者の予想通りgraph display threed[0][0]@points@pointsである。
変更機能が使えるので、三次元グラフ用gnuplotは、dddインターフェイスで余りよくサポートされていない。このような描画は二次元の様な意味のある結果を示さない。
File->Print Graphを選ぶだけだ。選択の出来るメニューがポップアップするので、プリントボタンを押すと、ファイルに送るか又はプリントに直接出力する。
プロットにも同じ方法を使う。唯一の違いは、プリントダイアログのオプションが少ないことだ。グラフはPostscript にもfig-フォーマットにも移出できるが、プロットはPostscriptだけにしか移出できない。
dddは、ウオッチポイント、多言語サポートなど多数の機能を与える。これらは、この記事の話題を超える。dddと一緒に来る文書の内容を繰り返す気はないからだ。(文書は http://www.gnu.org/software/ddd.で入手出来る)代わりに、読者が自分のプログラムをデバッグしてdddの豊富な機能を探求されることをお薦めする。
最後に諺を引用する:
システム管理者は、時に最新のLinuxディストリビューションがサポートしないサーバーハードウエアを取得することがある。これは普通は問題でない。ベースシステムを搭載出来る限り、それが走れば接ぎ木出来るからだ。唯一の例外は、ルートデバイスがサポートされていないときだ。
ここでの問題は、ハードウエアをディストリビューションがサポートしていないときだ。ほとんどの場合、最新のkernelはハードウエアをサポートするので、kernelを更新すると問題は解決する。システムを未だ走らせていないとき、これは鶏と卵の関係になる。この記事では、そうした頭痛の種を和らげたい。例として用いるのディストリビューションはRed Hat 7.1(以後RH7.1と言う)で、サーバールートデバイスはAdaptec 2100ホストサーバー上のRAIDデバイスだが、どのようなデバイスにもこの記事が役立つよう、一般化して説明する。
RH7.1と一緒に来るkernelは、Red Hat が修正した 2.4.2-2, a 2.4.2-ac ベースのkernelだ。私の目標kernelは2.4.10-ac1だ。私は"-ac"を薦める。Alan Coxがテスト用に沢山の実験的ドライバを組み込んでいるので、各種デバイスにためのサポートがあるからだ。kernelを構築するには、コンパイルを行いブートディスクを作るため追加のLinuxボックスを必要とする。ブートディスクを作るとき、dmesg)からのバッファ出力に基づくとの仮定をおこなうことが出来る。サイズはここでの対象だ。オリジナルと同じ空間に新kernelを合わせる必要があるからだ。余裕は余りないので慎重に進めなければならない。ここに、新コンフィギュレーションの概略を説明を付けて示す。
CONFIG_X86=y CONFIG_ISA=y CONFIG_UID16=y # 新ドライバーに必要 CONFIG_EXPERIMENTAL=y CONFIG_MODULES=y CONFIG_MODVERSIONS=y CONFIG_KMOD=y # 目標CPUを選ぶが、サイズのためSMPを飛ばす # イネーブルのときヒット CONFIG_MPENTIUMIII=y # 1G以上のRAMがあっても、インストレーションには # 高メモリにこだわらないい CONFIG_NOHIGHMEM=y CONFIG_NET=y CONFIG_PCI=y CONFIG_PCI_GOANY=y CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y # この特定のオプションがkernelを膨らませるだけ # インストール中にこの必要はない # CONFIG_PCI_NAMES is not set CONFIG_SYSVIPC=y CONFIG_SYSCTL=y CONFIG_KCORE_ELF=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=y # デスクトップシステム上の通常演算のためにも # ACPI とAPM は不要なのでスキップすること # CONFIG_PM is not set # CONFIG_ACPI is not set # CONFIG_APM is not set # 今はパラレルポートは不要 # CONFIG_PARPORT は設定しない CONFIG_BLK_DEV_FD=y # ディストリビューションによっては # インストレーション中にループデバイスを用いる CONFIG_BLK_DEV_LOOP=y # インストレーション中Initrds はほとんど常時使用する CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_PACKET=y # CONFIG_PACKET_MMAP は設定しない # CONFIG_NETLINK は設定しない # CONFIG_NETFILTER は設定しない # CONFIG_FILTER は設定しない CONFIG_UNIX=y CONFIG_INET=y # IDE デバイスがあるか? 私は常に使う # IDE cdroms CONFIG_IDE=y CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDEDISK=y # 一時に多数のセクターを読込んで # 物事のスピードを上げる CONFIG_IDEDISK_MULTI_MODE=y CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_BLK_DEV_ADMA=y # アドオンカード上のディスクにインストールするとき # これが必要になる筈はず # CONFIG_BLK_DEV_OFFBOARD は設定しない # DMA はインストール時間と # 一般的エラーチェック時間の短縮に良い CONFIG_IDEDMA_PCI_AUTO=y CONFIG_BLK_DEV_IDEDMA=y CONFIG_IDEDMA_AUTO=y # これら IDE-RAID カードから出たとき # 出たことをチェックしたい筈 # CONFIG_BLK_DEV_ATARAID は設定しない # CONFIG_BLK_DEV_ATARAID_PDC は設定しない # CONFIG_BLK_DEV_ATARAID_HPT は設定しない CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y CONFIG_SD_EXTRA_DEVS=40 CONFIG_SCSI_MULTI_LUN=y # 低レベルドライバに関しては、インストール # する必要のある一つだけを取り上げる # 私は aic7xxx ベースのカードを選ばない # これには、テープドライブがあるだけだからだ CONFIG_SCSI_DPT_I2O=y # kernel サイズを大きくする、飛ばす # CONFIG_SCSI_DEBUG は設定しない # この i2o ベースのRAID # 特定カードに必要 CONFIG_I2O=y CONFIG_I2O_PCI=y CONFIG_I2O_BLOCK=y CONFIG_I2O_SCSI=y # 実際にネットワークカードを必要としない CONFIG_NETDEVICES=y # どこかにタイプしなければならない ;) CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 # 「テキスト」ベースのインストレーションを使うことが出来る # CONFIG_MOUSE は設定しない # CONFIG_PSMOUSE は設定しない # CONFIG_82C710_MOUSE は設定しない # CONFIG_PC110_PAD は設定しない # 後で BOFH にすることが出来る ;) # CONFIG_QUOTA は設定しない # ext3サポートを持つディストリビューション上にあるときは # これをイネーブルにしたい(レジスタも同じ)筈だが # サポートされるファイルシステム数を低く保つ # CONFIG_EXT3_FS は設定しない # ディストリビューションによっては msdos fsが必要 CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # インストレーション媒体に関して CONFIG_ISO9660_FS=y # CONFIG_JOLIET は設定しない CONFIG_PROC_FS=y CONFIG_DEVPTS_FS=y CONFIG_EXT2_FS=y # レギュラーPC パーティション CONFIG_MSDOS_PARTITION=y # これは必要ないだろうが、ものごとを解決する CONFIG_NLS_DEFAULT="iso8859-1" # コンソールドライバ # CONFIG_VGA_CONSOLE=y # 今は余り可愛くない penguins :) # CONFIG_FB は設定しない # USB キイボード/マウスを持っているのでない限り、ここは飛ばす # CONFIG_USBは設定しない
# cd /tmp # cp /cdrom/boot/boot.img . # mkdir bootdisk # mount -t msdos boot.img bootdisk -o loop # cp /usr/src/linux-2.4.10-ac11/arch/i386/boot/bzImage bootdisk/vmlinuz
# ブートディスクを外す # dd if=boot.img of=/dev/fd0
元のインストレーションのkernel : 652k カスタム・インストレーションの kernel : 632k カスタム「ノーマル」kernel : 951k
# rdev bzImage /dev/sda1 # dd if=bzImage of=/dev/fd0
これをおこなってシェルにブートしたとき、新tarballを目標コンピュータ/サーバー上にアンパックして、必要な構成をおこなうことが出来る。ディストリビューションのconfigファイルを取って、次のようにして構築する。
# cd /usr/src/linux-2.4.10-ac11 # cp /home/zwane/config-2.4.2-2 .config # make oldconfig
# make menuconfig # make dep bzImage modules modules_install
# rdev /boot/vmlinuz /dev/sda1
この記事は、投稿質問に対し意味のある回答を得る機会を最大にするため必要な事柄を述べる。人に笑われたり、迷惑を掛けたりするのも防止する。これはMcClellanのPosting Guidelines for comp.lang.perl.misc 及び Netiquette Guidelines RFC.に負うところが大きい。
投稿の前に
ご期待のように、Answer Gangの議論は技術的性質のものなので、これらの議論を進めるには、慣習を守ることが絶対に必要です。
投稿前にFAQを点検することは、普通にネットフォーラムで要求されます。こらはTAG特有ではありません。
TAGには毎月数百のメッセージがあります。どれに答えるか決めなければなりません。貴方の投稿は他の人と競合する訳です。誰かの助けを得る前に「勝つ」必要があります。
表題の40文字で印象が決まります。何が問題か分かり易く表現して下さい。経験レベル(熟練、初心)の説明に費やさないで下さい。挨拶(どうぞ、助けて)に使わないで下さい。主題以外(Linuxの質問、質問します)を言わないで下さい
ネットフォーラム力学の美しさの一部は、初めての投稿が社会への貢献になることです。選んだ主題が、躓きの理由を研究者が研究する動機になれば、質問すること自体が貢献になります。
後報を作るとき、貴方が加える意見に必要な文脈構成に必要なだけ引用して下さい。誰の文かは常に示して下さい。記事全部を引用しないで下さい。
意見を付ける引用文に「続けて」貴方の意見を配置して下さい。そうしないのを「危険な」投稿と言います。質問の前に答が来るからです。順が逆になると分かり難くなります。読みたくなくなる人もいます。 http://www.geocities.com/nnqweb/nquote.htmlの引用の仕方について詳しい説明があります。
e-メールはテキストのみの媒体です。Word文書、vcads、HTML、MIME(言語特有の文字をあらわすのにMIMEが必要でない限り)は使わないで下さい。多くの人が投稿を読めなくて迷惑を掛けます。普通のテキストは誰でも読めます。
公開された回答は社会に役立ちます。それがTAGでやっていることです。「これは機密にしたい」と告げたときは、答はありません。無償で個人指導は得られません。
「働かない」と言うのには気を付けて下さい。これは「レッドフラッグ」です。それを書くときは「働かない」以外の言葉がないか良く考えて下さい。つまり、自分のしたいことを、どのようにやってくれないのかを記述して下さい。
「馬鹿話」は適切な表題でないかも知れない。「馬鹿話」より「面白話」の方が多いからだ。だが、この表題を続ける。
LinuxをPCで始めた頃のことだ。あれはRed Hat(6.2だったと思う)で、すべてが順調に進んだ。
ブートに差し掛かったとき、恐る恐るルートパスワードをタイプした。次ぎにすべきことは、喜び勇んであらゆる文書を読んだところでは、bash番号を捜すことだった。Red Hat に電話して登録プロセスのヘルプを頼まなかったのは確かだ。
パスワードでログインしたとき、見えたのは、お分かりの通り
bash#
馬鹿話ではないかも知れないが、この1年半で私の辿った道程を示している。今は、ガールフレンドが香港で買ってきたミニエチャMP3プレイヤ用のデバイスドライバとファイル管理ソフトウエアに取り組んでいる。
ロシアからの物語 BaRoN!
皆さん今日は!馬鹿話のロシア語訳を読みました。次は友達の話です。
5,6年前のこと。100Mbハードディスクを買った。半年働いた後、BIOSが検出しなくなった。1990年代中頃のロシアの技術サポートは極めて悪く、今ではもっと悪い。人口330万人ほどの小さい町に住んでいるが、1900年代中頃には100人程の友人がPCを持っていた。業者は、HDDを壊したのは友人だから交換出来ないと言った。
100Mb HDD を新しく買うお金はなかったので、それを使って別のことを始めた。
友人のアレックスが、それを誰かに見せたら、買って帰った。何とBIOSは検出した。
パーティションを作ってフォーマットしたら、順調に出来た!だが天国は1日続いただけだった。
また働かなくなったとき、アレックスは別の作戦を立てた。HDDを担いで20分歩いたら、−また検出された。(摂氏マイナス25度の冬のことだ)
HDDをポリエチレンで包んで冷蔵庫のフリーザーに15分入れることを薦めた。これもうまく働いた。
そこで、友人は毎日登校前にHDDをフリーザーに入れている。あららしいHDDが買えるようになるまで、これを5ヶ月続けた。