Linux Gazette 2005年5月投稿記事
目次
シェル・スクリプトは、UNIX上で走るソフトウエア・アプリケーションほとんど全部の一部となっており、その使用は自動データベースバックアップを扱う単なるスクリプトから、規則的表現で複雑な演算を共同でおこなう一群のスクリプトまでに渡る。
スクリプトとプログラム言語との間を分けるのは、単なる設計上の決定であるけれども、私は、プログラム言語で同じ機能を実行させるのと比較すると、これが、コードの時間と行数の大変な節約になることがあると考える。事実、少数の例外を除いて、シェル・スクリプトの複雑さはC言語のコードのそれに達する。これら多数のUNIXコマンドの力に加え、シェルスクリプトに出来ることを考えて見る。
ここでは、中間的シェルプログラマに主として関係する話題を考える。
シェルからOracleデータベースに? アクセスする
コマンド 'sqlplus' を直接用いて(Oracleがインストールされており、エクゼクタブルが存在するとき)パラメータを渡すことが出来る。不要なメッセージを閉め出すよう、 ?s オプション(サイレントモード)の使用を薦める。下記に、データベースに接続する方法と、エラーがあるときの処理方法の考え方の分かる例を示す。
read empId
# < を倍角括弧と読取る、HTML は倍角括弧の特別な解釈を有する
# またここにこれを置くのは、書式を混乱させる
export empName=`sqlplus -s ${ORA_USER}/${ORA_PASS}@${ORA_INSTANCE} < @
set pages 0
set head off
set feed off
SELECT emp_name
FROM EMP_TABLE
WHERE emp_id = $empId;
@`
echo "Employee Name is $empName"
status=`echo $empName | grep -c 'ORA-'`
if [ $status -gt 0 ]; then
echo "\nERROR : Unable to fetch the Employee Info ....\n"
Exit 1
fi
注記:上のコードで '@' は、単に一時ファイルをあらわすだけで、sqlplusはそのファイルからコマンド全部を読取るので、 '@' の代わりに 'foo' など任意のものを使うことが出来る。同様の論理で、任意の物理的に存在するSQLスクリプトをも次のように使うことが出来る。
echo `sqlplus -s ${ORA_USER}/${ORA_PASS}@${ORA_INSTANCE} < ~/DbBackup.sql`
? リダイレクション
ここで、エラー処理のため使用するリダイレクションの別の方法を考えて見る。大々的に説明することは出来ないけれども、以下の説明から基本は理解されるであろう。
常に三つのファイル、stdin (キイボードをあらわす標準入力)、tdout(画面をあらわす標準出力)、stderr (画面へのエラーメッセージ出力をあらわす標準エラー処理)、が開いている。これら各々には、それぞれ固定ファイルディスクリプタ0、1、2が関連している。リダイレクションはこれらのうち何れか又は開いている任意のファイルを用いることが出来る。
リダイレクションの使用法数個を見る
1) command 2>/dev/null [エラーを dev/nullにリダイレクト]:エラーを画面にログもプリントもしないとき必要。実際には、夜中に監督無しで作業をおこない、巨大なログが予想されるときにおこなう:
2) command > file 2>&1 [stdout をファイルにstderr をstdout ポイントしている場所即ちファイルに、リダイレクト]:最後にファイルにはコマンドの出力とエラーの両方が入る。これは、ランの詳細全部が分かるので、使用されることが多い。
3) echo "$0: cannot find $file" 1>&2:カスタム・エラーメッセージをstterrに入れたい場合にシェルスクリプトで用いる。ここに示すように、stdoutにstderrをポイントさせることは、普通のやり方ではないので、注意して用いること、もっと良い方法は、カスタム・エラーメッセージをポイントした後、FDにデフォルト・デバイスをポイントさせてリダイレクションを元に戻すこと。
4) リダイレクションが来るときには、自分の意志でFDを指定し使用の後閉じるオプションを備えているBourneが最良である。
例えば、次を用いる
exec n FileToOpen ; to open file 'FileToOpen' and assign FD 'n' to it.
同様にして、これを閉じるには
exec n>&-
これにより、stderrを /dev/nullにリダイレクトするの同じではない 2>&- に似た何かが出来る。これら全部を研究すると、自分のサーバ上でリダイレクトのサービスをするのに役立つ色々な面白い構文とセマンティックを見出すことが出来る。
? ここで最後の話題 'trap'を用いる信号処理に移る。
'trap' はUNIXコマンドではなく、応答/操作割込に対するシェル埋込ルーチンである。これに関する情報はUNIXマニュアルにある。
短く言うと 'trap' は、特殊信号に対するハンドラ・ルーチンを指定するとの観点でCの signal ()ファンクションに似ている。これは、関連信号を受け取ると自動的に呼び出される。この同期動作は、信号プログラム作成を極めて難しくすることがある。
シェルでハンドラ[USR1などの信号を受けたとき、実行したいファンクション]を指定するには、一つまたは信号に対し下記を書く:
trap 'SigHandler' USR1
ここで 'SigHadler' は信号USR1のためのハンドラである。
複数の信号を単一のハンドラに結合するには、下のようにスペースを空けて信号名を書く。
trap 'SigHandler' USR1 SIGHUP SIGINT SIGTERM
新たな 'SigHandler' は、示す信号の何れかが生じたとき呼出される。
Trapsを用いて、最後にクリーンアップ・プロシージャを呼出すことがあるが、trapsは、特別の割込を受け取った際に全プログラムをスタートする必要がある場合を含む別の各種の状態で用いられる。
下記のコードを通覧して、SHELLの力を理解されたい[繰返し呼出が使用される場合を確認]。
#!/bin/ksh
###########################
# 信号ハンドラ #
###########################
sigHandler()
{
echo
echo "Restarting the job"
count=10
_Job
#実行はここで終了
}
##################################
# メイン処理ファンクション #
##################################
_Job()
{
echo " "
if [ $count -ne 0 ]; then
echo "In Func at time `date` with count [${count}]"
count=`expr $count - 1`
sleep 1
_Job
fi
}
##################################
# ここから実行開始.. #
##################################
trap 'sigHandler' USR1 SIGHUP SIGINT SIGTERM
count=10
_Job
このジョブを走らせて ctrl-cを押して見ると、、割込毎に、プログラムが再開される
注記:SIGKILL [信号 9]が捕捉出来ない少数の例外について、私は、ファイルロックを解放するなど、希な条件でのみSIGKILLのためのハンドラを用いると考える。
UNIXツールの威力を説明する記事の締め括りに述べるべき唯一の言葉は、「不可能であっても、私はUNIXで可能であると言う」
Magumaが7月1日にWorkbenchバージョン2.5をリリース
Magumaは、2005年7月1日にWorkbenchのバージョン2.5をリリースする。これは、スクリプト作成能力を多数拡張しており、PHP開発者を対象とする機能強化だけでなく、今回はPython開発者もまた、良い物が出来たと喜ぶ筈である。新版には、Pythonスクリプトを実行し試験する機能を含み、ファイル拡張子設定を基にスクリプト型を自動的に検出する。このバージョンで新しいのは、PHPスクリプトに関するプロファイリング・サポートで、ファイル、ファンクション及び行によるスクリプトタイミングの内訳の概観を開発者に示す。ファンクション・リスト・モジュールが強化されて、ユーザがスクリプトを作成しカスタム・ライブラリ及びオブジェクトを表示することが出来るようになる。ファイルに基づくテンプレート・サポートがWorkbenchに追加されて、ローカル・レポジトリを個人使用に使ったりネットワーク・リソースが作業グループ内でテンプレートを共有する定義をしたりするようカスタム化することが出来る。
完全なChangelogは、このリリースと共にサイト上に掲載され、Maguma Workbenchに対する変更全部が詳しく述べられる。、
Maguma チーム
www.maguma.com
この記事において、社会に存在する階級が自分の個人的/営業的利用のためオペレーティングシステム(OS)を選ぶに当たって個人の選択力を伝えるのに果たす正確な役割を論述死、解析し例証しようと思う。既存の社会階級(多くの社会学者が個人であるかもっと大きい「同類の」中産階級であるか論じることもあるが)は、近代的ホモサピエンスの選択を形成する際に非常に捉えにくいが大変目立つ役割を演じる。既存のソフトウエア産業、特にOSの市場占有率は、絶対にその影響力以下には下がらない。ここに述べる考えに対する教化を進めることに勇気が生まれる。
ステートメント
OSのマイクロソフト・ウィンドウズ一族とその他の大小OSのの現在の市場占有率を見ると、多くのLinuxユーザ(ファン及び追随者)は統計数字に愕然とする。これら市販と無料の両方の型のOSを使うことの長所短所を説明する記事が沢山ある。重要で注意に値する点は、マイクロソフトとLinux のユーザの間に深い格差(統計の観点から)が存在する理由を誰も詳細に説明しないことである。年数が経つにつれて、マイクロソフトが依然としてデスクトップ・コンピュータで主導権を握っている理由は何だろうか?この点を理解しなければならない。私は個人的に、マイクロソフトがデスクトップ・コンピュータで主導権を握り今後をそれを続けるのは、最も基本的な社会的理由−「自分達が不利になるか又は自分達を制約するか何れかに個人の選択を変形させる社会階級差別により啓蒙される人間哲学」−によるとの結論を得た。
理論
先ず社会学解析理論の流血場面の詳しい描写を見てみよう。フェミニズムなどの相互作用説、機能説その他の理論を離れて、「社会葛藤論」を詳しく見てみよう。この理論の淵源は、カール・マルクス(1818-1883)とエンゲルスその他の政治経済学者、哲学者及び作家に由来する。だが最も一般的にはマルキスト理論にしたがう。「唯物史観」の定義を考えよう(マルクスの言葉による)
"・・・自分達の社会生産において、人々は、自分の意志に関係なく一定の関係、つまり、与えられる生産の物質力発展段階に適する生産関係に入る。生産のこの全体性が、社会の経済構造、実際の機能を構成し、その上、社会感情の決定的な形に対応する法律的、政治的上部構造が生じり。物質生産生活の様式が、社会的、政治的及び知的正確の一般過程の条件を定める。自分の存在を決定するのは人々の感情ではなく、自分達の感情を決めるのは自分達の社会的存在なのだ。."
最も重要なのは最後の部分だ。"自分の存在を決定するのは人々の感情ではなく、自分達の感情を決めるのは自分達の社会的存在なのだ..."とマルクスは言う。これが社会葛藤論とその他上述の理論全部との間の基本的な相違だ(逆も真なり、当たり前だ)。読者は次のことに注意しなければならない。用語「生産関係」は、資本、資金、労働、機械、及び土地、地代などを意味するので、用語「生産関係」は、階級の定義、即ちブルジョアとプロレタリアを意味する。この理論が述べるように、与えられる階級の間には常に闘争、定立と反定立との弁証法的闘争があり、これが新たな定立を生じて、別の反定立により攻撃され、結局全体として別の新たな定立を作る。主要点は、プロセスの定立と反定立の定常的な混乱の只中にあるときにのみ最良の結果が得られる(プロセスには無関係)。
しかし、この事実は、コード−バグ−コード仕直し−のサイクルを常に繰り返す「フリーBSDソフトウエア・プロジェクト」、「オープンBSDプロジェクト」などなどの大型ソフトウエア・プロジェクトにより実生活で立証されている。これはマルクスの「唯物史観」の改良版の適用である(マルクスのこの理論はヘーゲルの唯物論に基づくと言う読者もいるだろうが)。重要な点は、定立と反定立との間の永遠の闘争と混乱の只中で、社会階級の果たす役割は何で、それを果たす方法は何か?だ。
実際の応用
我々の社会を、問題の国家が試みる工業化のレベルに基づいて、小さい離散的な断片に分けて見よう。世界のどの国も、三つのクラスに分けられる。1)先進国(工業的及び社会的に、第一世界とも言う)これには、米国、英国、フランス、ドイツ、殆どのEU諸国(EEAの諸国)、日本及び米国と同様の社会経済構造を有する諸国が含まれる。2)発展途上国(新興市場及び通商貿易の強力な中心)これには、インド、中国、ロシア、及びブラジルなどが含まれる。3)低開発国。これには、著しく変動する市場、政治的に不安定な政府を持ち、社会経済体制が整っていない国々、ほとんどのアフリカ諸国(南アフリカなど少数を除く)、少数の東欧諸国(旧ソ連衛星国)及び多数のアジア諸国が個の範疇に入る。
1) クラス A: あらゆる物質が豊富で、生活手段が多数あり、購買力が平均している富裕階級で、通常、先進国におけるサラリーマンの大多数を占める。開発途上国、低開発国では少数派なので重要部分ではない。2) クラス B: 知識労働中間階級であるが、まともな生活をする必需品は豊富に持っているが、クラスA程の娯楽、贅沢のほとんどは出来ない。クラスBは、例えば、インド、中国、ロシアなどのソフトウエア開発者/プログラマ/ソフトウエア技術者など、重要な発展途上国の多数派である。しかし、注意しなければならないのは、クラスBは労働者階級であっても、このクラスのメンバーは高い知識と働く能力を持っているので、長い目でみると次第にクラスAに溶け込むことである。これは、米国及び英国への移民を決意するインド人、中国人、ロシア人の高い流入率に関する社会的説明になる。. 3) クラス C: 社会の貧困層で、本質的な知識に乏しく、創造性も解析的能力も欠けているか、又は上述のものを備える手段をもっていないだけかも知れない。常に戦争、内乱などに巻き込まれる国々の国民の大多数がこの範疇を構成する。イラク、コンゴ、ソマリアなどが含まれる。国民は怠惰で、自力で条件を良くする意欲もないことがある。
解析
これで分割を終えたので、九つの順列組合せがある。先進国のクラスA、クラスB、クラスC、開発途上国のクラスA、クラスB、クラスC、低開発国のクラスA、クラスB、クラスCだ。しかし、先進国のクラスC(少数派の欠如のため)、開発途上国のクラスC(このクラスは全体としてコンピュータ産業に貢献しないので)及び低開発国のクラスA(少数派の欠如のため)は、我々の論議から除外する。したがって先進国のクラスA(多数派)、クラスB(第二多数派)、開発途上国のクラスA(第二多数派)、クラスB(多数派)、低開発国のクラスB(第二多数派)、クラスC(多数派)が残る。以下が私の仮説である。
1.クラスA(先進国)、クラスA(開発途上国)、クラスBとクラスC(低開発国)は、商業OS(及び一般的なソフトウエアプログラム)を使用する傾向が大きい。その理由は、先進国と開発途上国のクラスAは商業パケージのライセンス版購入の費用を負担し、所定の期限でライセンス更新費用を負担しすることが出来るのと、さらに重要なのは、既製の解決策が、手の届くところにあるとき、新たな解決策を見付けるため時間と労力と金を掛ける気持ちが元々ないからである。デスクトップ用のマイクロソフト・ウインドウズOS及び使命重視サーバ用のサン・ソラリスは、絶対的な最良選択であると思われている。出て来る重要な疑問は、クラスBとC(開発途上国)が、商業ソフトウエアに関するこのような途方もない費用を負担する方法である。最も容易な解決策は、国民が元のソフトウエアの非ライセンス「海賊版」を買うことが出来るようにすることである。(実際の観測から)示すように、モスコーのクラスBとCは、毎日「海賊版」の恩恵を受けている。良いとも悪いとも、私は問題にする気がない。この世に存在する機知のソフトウエア・パケージ/プログラムの殆どは、3ドルほどのCDで入手することが出来るので、元のソフトウエアのライセンス版を購入する緊急の必要はないからである。
2.クラスB(先進国)とクラスB(開発途上国)は、無料(オープンソース)OSを使う傾向が大きい。これは知力が高いのと、もっと重要なのは、手の届くところにいる社会のクラスA(最高階級層)に合流したい欲求である。コードは自由に入手出来るので、(この層を構成する)ユーザ、学生/技術者が、個人的な努力を投じて新しい刺激的なソフトウエア断片を作るのが歓迎される。殆どの人に取って、魅力的な仕事の提供、又は「域外プログラム作成指名」が心理的な最終目的となっている。高い知力、器用さ、及び先進国と開発途上国双方における労働階級の融合と忍耐に対する希望が、フリーOS産業の主な担い手になっている。しかし、直ちに起こる疑問は、次の通りである。クラスB(先進国)の個人が、自分でクラスA(先進国/開発途上国)入りを果たすことが出来るとき、社会変形のこの連続過程が止まるだろうか?だ。私は個人的にイエスだと思う。
例証
ホモサピエンスが社会で生きることを好む動物である所以は、社会が彼らの安らぐ場補であり、健康的で高度の心理的、経済的、社会的安全と賞賛を与えるからである。したがって、唯物的弁証法、言い換えると定立−反定立−定立の規則、を通じて、個人が絶対的唯物論的満足の段階に達した時、さらに洗練することは不可能になる。したがって、プロセスは崩壊する。言い換えると、与えられる社会的、経済的、政治的な身分に合流することを考えている個人と、社会的変貌のプロセスが存在しなくなる。最終目標である奴隷解放は、既に果たされた。したがって、先進国及び開発途上国の知的労働者階級は、最初はフリーOSとプログラムの使用/作成/著作に興味を持っても、クラスAに合流してしまうと、この過程が止まってしまう。彼らは、通常経歴選択の変更、転職(新たな味に合わせるため)を終わって、最初の過程から出てしまう。その結果、登録/非登録商業ユーザが日に日に増える。特に現在は、IBM、サンマイクロシステムズ、HPなどの多国籍企業が、インド、中国、ロシアなど多数の場所に、支店と研究開発センタを開いているので、フリー・ソフトウエア・プロジェクトの機運は、将来不正の打撃を受けることになるだろう。先進国の生産海外依存とともに、もっと悪い想像もされる。ソフトウエア/ハードウエア関連の仕事の海外依存が速い速度で起こると、知識労働者階級は、クラスAに合流するのに、最早大した時間と努力を必要としなくなる、健康的な故郷の環境での、良い職業選択の結果、それによる合流が社会変貌の速度をさらに加速する。
実例
フリーBSDソフトウエア・プロジェクトの重要な開発者何名かは、経済的に商業スポンサ、又はヤフーから経済的援助を受けている。ヤフーの共同出資者デイビッド・フィロは「今まで経験した中で最も易しいOSインストールだった。フリーBSDをほとんど専用で、生産と同時に我が社の開発環境に使った」と言う(フリーBSDソフトウエア・プロジェクトからの「フリーBSDハンドブック」から引用)。最初に出発したとき、フリーBSDソフトウエア・プロジェクトのほとんどの貢献者は米国のクラスBを構成していた。時間と共に、彼らのほとんどが良い仕事又は会社パートナを見付けて、新しいソフトウエアの仕事に就きたがった。新たな開発者/コード作成者が全体の連続性を平衡させたけれども、変貌過程は著しかった。別の例は、ライナス・ベネディクト・トルバルド自身のことである。1991年に初めてLinux Kernelを(大学のプロジェクトとして)書いたとき、彼はフィンランドのクラスBであった。社会の共通基準から決別しようとする高い知性の結果、「 i386とi386 互換品のためUNIX複製品を作る試み」となった。その時以来、主要な開発過程を離れて、米国に移住し、現在はトランスメタ社に雇われている。重要なのは、彼がクラスBからクラスAに変貌したとき、トルバルドの生涯における「唯物弁証法」が止まったことである。
まとめ
この記事は、先進国/開発途上国/低開発国における異なる社会階級差別が、(ソフトウエア自体のコード化により)直接に、又は(与えられる社会経済的条件の下でライセンス・ソフトウエア又は海賊版を購入することにより)間接にソフトウエア産業に貢献することが出来ることを要約することを探る。この連続過程のどの時点で、「商業ソフトウエア」又は「フリー・ソフトウエア」が利益を受けるかは、告げるのが大変難しい。だが、階級差別が「唯物弁証法」の連続過程の中で重要な役割を演じる。マルクスが言ったように、低階級の(高い位置の社会階級に対する)合流が起こると、連続過程は存在を止める。世界的には、すべての国々が進歩して高いレベルの工業化と高い生活水準に達するので、社会的差別は存在を続けるけれども、フリー(オープンソース)ソフトウエアから商業ソフトウエアへの変貌の連続過程は、存在を止める。世界的な資本主義経済におけるこの定立−反定立−定立の連続過程の最終的に洗練された出力は、「商業ソフトウエア」であろう。
筆者について
Subhasish Ghoshは現在、ロシアのモスコーにあるモスコー動力技術高校(技術大学)のオートメーション・コンピュータ科学工学の学部課程の学生である。2005年9月にはオックスフォード大学の「政治社会学」大学院過程に入るよていである。ご意見があれば、subhasish_g@rediffmail.comへ。
White Box Linux 3 環境における多重スレッドRPCサーバ
[1]で開発された技術をRHL 9 の環境で試験した。
Red Hat Linux 9 にあるglibcのバージョンは2.3.2-11.9.である。
White Box Linux 3 環境で[1]から square_svc.c ファイルをコンパイルしようとしてコンパイルミスをしてしまった。
glibcのバージョンは、RHL 9と異なり、2.3.2-95.20.である。
下に示すのは、square_svc.cソースコードの修正版である。square_svc.cのこのバージョンにより、多重スレッドRPCサーバをWhite Box Linux 3環境内で、[1]で言われる通りに構築することが出来る。
/* square_svc.c
* このファイルを編集しないこと
* Iこれは rpcgenを用いて作られている。
*/
#include "square.h"
#include <stdio.h>
#include <stdlib.h>
#include <rpc/pmap_clnt.h>
#include <string.h>
#include <memory.h>
#include <sys/socket.h>
#include <netinet/in.h>
#ifndef SIG_PF
#define SIG_PF void(*)(int)
#endif
struct thr_data
{
struct svc_req *rqstp;
SVCXPRT *transp;
} ;
pthread_t p_thread;
pthread_attr_t attr;
/* スレッドで走らせるプロシージャ */
void *
serv_request(void *data)
{
struct thr_data *ptr_data = (struct thr_data *)data;
{
union {
square_in squareproc_2_arg;
} argument;
union {
square_out squareproc_2_res;
} result;
bool_t retval;
xdrproc_t _xdr_argument, _xdr_result;
bool_t (*local)(char *, void *, struct svc_req *);
struct svc_req *rqstp = ptr_data->rqstp;
register SVCXPRT *transp = ptr_data->transp;
switch (rqstp->rq_proc) {
case NULLPROC:
(void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
return;
case SQUAREPROC:
_xdr_argument = (xdrproc_t) xdr_square_in;
_xdr_result = (xdrproc_t) xdr_square_out;
local = (bool_t (*) (char *, void *, struct svc_req *))squareproc_2_svc;
break;
default:
svcerr_noproc (transp);
return;
}
memset ((char *)&argument, 0, sizeof (argument));
if (!svc_getargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
svcerr_decode (transp);
return;
}
retval = (bool_t) (*local)((char *)&argument, (void *)&result, rqstp);
if (retval > 0 && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result))
{
svcerr_systemerr (transp);
}
if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
fprintf (stderr, "%s", "unable to free arguments");
exit (1);
}
if (!square_prog_2_freeresult (transp, _xdr_result, (caddr_t) &result))
fprintf (stderr, "%s", "unable to free results");
return;
}
}
/*
square_prog_2のための新規コード
*/
static void
square_prog_2(struct svc_req *rqstp, register SVCXPRT *transp)
{
struct data_str
{
struct svc_req *rqstp;
SVCXPRT *transp;
} *data_ptr=(struct data_str*)malloc(sizeof(struct data_str));
{
data_ptr->rqstp = rqstp;
data_ptr->transp = transp;
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
pthread_create(&p_thread,&attr,serv_request,(void *)data_ptr);
}
}
int
main (int argc, char **argv)
{
register SVCXPRT *transp;
pmap_unset (SQUARE_PROG, SQUARE_VERS);
transp = svcudp_create(RPC_ANYSOCK);
if (transp == NULL) {
fprintf (stderr, "%s", "cannot create udp service.");
exit(1);
}
if (!svc_register(transp, SQUARE_PROG, SQUARE_VERS, square_prog_2, IPPROTO_UDP)) {
fprintf (stderr, "%s", "unable to register (SQUARE_PROG, SQUARE_VERS, udp).");
exit(1);
}
transp = svctcp_create(RPC_ANYSOCK, 0, 0);
if (transp == NULL) {
fprintf (stderr, "%s", "cannot create tcp service.");
exit(1);
}
if (!svc_register(transp, SQUARE_PROG, SQUARE_VERS, square_prog_2, IPPROTO_TCP)) {
fprintf (stderr, "%s", "unable to register (SQUARE_PROG, SQUARE_VERS, tcp).");
exit(1);
}
svc_run ();
fprintf (stderr, "%s", "svc_run returned");
exit (1);
/* NOTREACHED */
}
参考資料
地方新聞でAcerからの広告を見付けた。内容は次の通りである。
「ロードされているLinux は無料版なので、別のオペレティング・システムをインストールするまでは機能に限界があるだろう」
何を言いたいのか良く分からないが、このような広告は曖昧で誤解を招く。Linuxが自己完結型のOSで、一般的には他からの援助を必要としないことは、誰でも知っている。無料版と言う言葉も間違った呼び方だ。それに別のOSとは何の意味だ。別のLinux なのか、別のM$ OSなのか?
ここで懸念されるのは、自分でセットにして売りながらLinux の意味の分からないAcer なる会社が、人々をミスリードすることだ。責任のある行動と言えるだろうか?
# cd /home/avirup
#find /home/avirup/temp/ -name \* -mtime +10 -exec rm {} \;
上記のコマンドで、私の一時ディレクトリ(/home/avirup/temp)にあるファイルで、10日より古いものは全部削除される。
以下の問題につき援助して頂けないでしょうか?
s/wシミュレーションのため10台ほどのサーバを持っています。Linuxサーバ幾つかが時々過負荷になるので、最低負荷のサーバを見出してそれにログインするスクリプトを書きたいのです。
良い考えがあれば教えて下さい。
PostfixとFetchmailを用いる家庭用Linux上の
Google Gメール
Software Libreを用いて情報格差を解決
これを読んでいる人々は
情報格差(Digital Divide)の表にいる人々だ。裏にいる−取り残された−人々は、実現可能なマーケットと見なされていないので、相手にされないことが多い。お金がない人々を、近代的なインフラストラクチャを持つ国々の営利会社は、市場でないと考える。したがって情報格差を解決することを、そのままは、営利刊行物は余り話題にしない。それでも世界の大多数の人々は問題を抱えている。
それでも、影響された地域にいる多数の非政府団体,非営利団体及び個人がこの目標に向かい、世界の有線、無線の部分で必需品になっている
Hacker Ethic を持って働いている。この種の事柄を行う人々は、自分の地域の痒いところを掻く傾向がある。
Ndiyo: Swahili for 'Yes'
数日前に、WorldChanging.comが
Ndiyoプロジェクトに言及したが、その重要性を危うく見逃すところだった。私は今、パナマ市のホテルのロビーにいて、ホテルが無線アクセスを修理するのを待っている。一寸した皮肉だ。
念のため、Linux (及びGNU/Linux、GNUを用いるディストリビューション用)は、市販のため出発したものではない。これはリチャード・ストールマンのような人が始めて、リナックス・トルバルドが欲しがったので皆が作ったた。ブロードバンドが人々の夢で政治家の約束でもある−情報格差の別の面は、人々に欲望があり解決すべき別の問題だ。
シンピュータ(Simputer)
開発途上国を助ける可能性のある別の技術革新は
Simputerである。これもまた、問題を目指すためと同じ程には営利の成功のため設計されなかった。不満を満たしている。メディアがそれを失敗と言った程、ソフトウエアとハードウエアさえも極めてオープンである。 UN ICTポリシイ・リストの反対意見に書いたように−Simputerは見捨てられない限り失敗ではない。これを用いて誰でも何でも出来る。オープンなのだ。
ソフトウエア、保証
Linux とSoftware Libre は、薬屋が無料見本を配るのとは異なり営利会社がソフトウエアを割引する世界で、次第に重要な役割を演じている。財産権−及びLinuxの特定ディストリビューション−に関する保証は、人々を特定のベンダーに束縛し、それが世界中で会社に対する期待についての問題を生じている。
それでも大きい市場がある。世界中には−アフリカ、南米、インド、中国−それに米国にも、オンラインに入る人々の成長著しい市場がある(コストが下がれば、最低賃金で働く人々でも費用が払えるだろう)。
世界は、平等か?
面白い記事
It's a Flat World, After All(結局、平等な世界?)が物事の変化を論じている。だが世界は平等になろうとしてはいない。世界中の国の経済は、平衡を求めて互いに闘っており、Linux−及び全体としてのSoftware Libre−はその中で目立った役割を有する。既にその役を果たしており、誰かが(特に市場予測から)考えたがるような商業的なサポート無しで殆どを果たしている。
世界は平等にはならない。Software Libre、オープン規格、オープンコンテント、オープン・ハードウエアなどの技術のお陰で物事速く進んでいる。
James Gleick は早くも1990年代に(2000年発刊)
Faster: The Acceleration of Just About Everything(早く:何事も加速)を書き、コンピュータの文脈を世界経済に当て嵌めると、色々なことが分かると言った。
問題は−常にそうだが−世界の共同体でどんな欲望を満たすかで、そのため何が出来るかだ。国連と同時に世界中の金融機関からから来る資金は、これらの問題の解決を目的としている。市販Linux は、重要ではあるが、誰かが考えるように重要ではない。参加民主主義においては、世界は最大多数の周りで革新する。
そして最大多数はLinuxの商業ユーザではない。