医療情報学
システム工学
...な生活
ホーム / ...な生活
* 更新情報
  • プログラマの暮らしぶり: 2005/11/07
  • はじまり: 2005/01/23

計算機やネットワークを設定・管理したり、プログラムや文書を書いたりする上での雑多なことを書き綴ってあります。

私自身はウィザードやグルのような技術を持っているわけではありません。ただ、変な事にこだわる傾向があるため、一般的なマニュアル通りの設定や手順では満足できず、妙な事を試行錯誤してやっています。なので、同じように変な事をしている人には少しでもお役に立てるかもしれません。

なぜ FreeBSD なのか

いくつかの理由があります。まず、ライセンスが GPL のように "Copyleft" ではないこと。もしかすると書いたプログラムを製品として販売するようなことになるかもしれないので、ライセンスの「緩い」BSD がよい。そういう事態にはならないように注意していますが。

インストールにかかる時間が短い。フロッピーディスクと大学のネット接続で Celeron 566MHz/HDD10GB のマシンに最低限(Kernel Developer。追加パッケージは無し)のインストールするのに操作を含めて15分くらい。CDからなら10分を切る。

アプリケーションはソースからビルドした方が最適化やオプションが選べて良い。となると FreeBSD の ports システムが使い易い。バイナリパッケージをインストールするのであれば Linux のシステム(特に Debian の apt/dselect は Good)の方が使い易いですが、ソースからだとちょっと分かりにくい。超初心者向けに ports の使い方を書いてみました。

OS 由来のファイルと、ports のファイルが分離されている。OS のファイルは/(etc|usr)、portsのファイルは /usr/local/* とはっきり分かれている。Linux はごちゃ混ぜになる。

性能面や安全性での Linux に対する優位性もあるのでしょうが、ちゃんと比較はしていないのでここでは理由に挙げません。

最後の理由は主観的なものですが、私の UN*X 初体験は Sun 2 で以後かなりの期間を SunOS 4x を使っていた所為で System V 系はなんか馴染まない。


VPN敷設時のMTU,MSS

FreeBSD を使って VPNを敷設するのは簡単です。特に、遅いマシン (Celeron 566MHz/MEM64MB)で十分ですが VPN ピアー専用のマシンが確保できれば設定も複雑にならずに済みます。私は FreeBSD の IPSec と ports から OpenVPN をインストールし、混在させて使っています。VPN の設定自体はそれぞれのマニュアル通りですぐに設置できます。

ただ、ping や ssh が通ったのでうまく行ったと思い、いろいろ使い始めると rlogin とか imap (Mozilla, Thunderbird)等が通ってくれません。rlogin とか imap が特別なプロトコルというわけではなく、あくまでも実装(socketの使い方?)の問題のようです。

IP 経路上に VPN のように MTU が小さくなってしまう区間があった場合、そこのルータに DF (データグラム分割不可)フラグが立った MTU サイズの大きいデータグラムが到着した場合、ルータが MTU の縮小を通知(ICMP)し、送信側がデータグラムのサイズを小さくする、という仕組みがあります。しかし、FreeBSD の仮想ネットワークインタフェイス(gif, tun)の現在の実装では MTU の縮小を通知してくれないのです。

なので若干工夫をしなければなりません。


amd64 + gcc4x

amd64 で ports を作る上での注意点・問題回避など。特に base の gcc ではなく ports/lang/gcc4x を使う場合について。

Wikiに移動しました。

64-bit時代到来

いよいよ我が家(研究室)にも64-bitの波がやってまいりました。主力マシン(のCPU)を I 社製の32-bit 疑似デュアルCPU から A 社製の 64-bit CPU に切替えました。

というのも、約1年半、サーバ兼ワークステーションとして連続稼働させてきた世界最大の某オンライン販売メーカのゲーマー向け高性能デスクトップ機が悲鳴をあげ始めた為でした。突然のリブートやディスクからの異音など、またファンが全開になる割合も増えたような気もするし。ひどい目に会う前に切替えようと思い、同じメーカのビジネス向けバリューデスクトップ機を購入したのですが、なんとちょっとしたコンパイルでもファン全開。どうも、某最大手の CPU メーカの CPU の発熱の増加に、今まで静かで安定したPCを提供してきた大手メーカですら対応が厳しくなってきたと感じました。

最近の噂を聞くと、かつては「コア焼き」でならした互換CPUメーカのチップの方が今や発熱や消費電力が少ないそうで。この互換 CPU メーカの今の主力製品である 64-bit CPU の市販 PC への搭載はなかなか進んでいないようで、強いていえばかつてはワークステーションシェア No.1 を誇ったメーカが自社 CPU をさしおいてワークステーションやブレードサーバに搭載しているくらいで、とても高くて買えない(実際には買えなくはないけど、何台も買うのにはちょっときつい)。それに、大手メーカー製のワークステーションと名の付く高性能PC は安定性を重視してか、ファンがうるさい。狭い研究室で何台も走らせたら、とてもじゃないけどお昼寝ができません(業務時間中にお昼寝をしてはいけません)。

と言うことで、静かで冷たい 64-bit FreeBSD マシンを手にするため、始めての自作に挑戦することになりました。

自作 PC 製作記(執筆中)

暑い!

研究室のサーバを一時、全て最新の CPU (Athlon64, Celeron D) を搭載したキューブ型(xpc)に切替えました。音は静かなったし、筐体から排出される熱風の温度も下がった。これで「夏が越せる」と思ったけど、大間違い。

排出される熱風の温度は下がったのに、部屋はむしろ暑くなった...考えてみれば当り前。部屋の温度の上昇は、熱風の温度で決まるんじゃなくて、熱量で決まるんでした。おばかでした。工学部の先生として恥ずかしい...orz

結局、古い省スペース PC に戻しまスた。皆さんも古い PC を大事にしましょう。

そんなに毛嫌いしなくても...

何と言っても PC を買うと黙ってインストールされています。某世界最大手PC直販メーカは OS をインストールしていないモデルを最近は売るようになりましたが、大抵のメーカでは外しようがありません。インストールされている以上は使わないともったい無いです。何しろ、ハードウェア部品の価格が下落している中で、OS などのソフトウェアの価格の占める割合はどんどん大きくなっていますから...


cygwin/X があれば

以前は、デスクトップ機を買うとすぐに FreeBSD をインストールして Windows を消しさっていました。でも最近はそのまま Windows をいれたまま使うようになりました。というのも、cygwin/X が安定して来ましたし、もしかすると、FreeBSD 上の X(org | Free86) より速いのではないかと感じます。特に

XWin -fullscreen -clipboard -unixkill -nowinkill -engine 4 -dpi 96 &

と フルスクリーン の DirectDraw モードで動かすとかなり速いです。なにより、面倒な XF86Config を全く触る必要がない!。

都合があって、cygwin/X で別のマシンにある xfs (X Font Server) を使おうとしたが常に同じエラーになる。

host# xset +fp tcp/fshost:7100
xset:  bad font path element (#58), possible causes are:
    Directory does not exist or has wrong permissions
    Directory missing fonts.dir
    Incorrect font server address or syntax

xorg のソースを追って判明

まずはコピーから

個人的なことですが、中坊から高校のころ、電気ギターを弾いていました(音楽的才能が無いので速弾きばっかりしてましたが...)。とにかく上手くなるには(技術面だけでなく、感性などもふくめ)、いろいろな曲を「コピー」しろと、至るところ(偉大なロックスターからその辺の音楽雑誌の解説記事で)で言われていました。

「コピー」とは、音楽を聞いて、全く同じに弾くことです。パート(楽器) 単位や、バンドとして、いかに完全に真似するかが問われます。完璧だと「完コピ」と呼ばれ、それができることは、音楽的才能の有無にかかわらず称賛されました。

ロック等の大衆音楽では、作曲や編曲の結果が譜面に残されることはないため、自分の耳で聞いてメロディーを解析してそのまま演奏することになるわけです。それに、譜面があったとしても、それは演奏の微妙な違いまでは記述できません。例えばギターであれば、フレットを押える位置や力で音程も微妙に変わります。音色についてもギターのような弦楽器は同じ音程の音を違う弦で出すことができ、弦が違えば音色が違いますし、ピックの材質や形状、持ち方(ハジキ方)でも違います。勿論、ギターの機種、年代、電気ギターであれば、アンプ、エフェクターの組合せやセッティングなども大きく影響します。

コピーばっかりやっていると、オリジナリティのある音楽が演れないのではないか、と素人さんは思うかもしれません。しかし、実際には逆です。超絶テクをもった個性溢れるスーパーギタリストたちは、みな、彼らのギターヒーローを完コピできます(私のギターヒーローは Allan Holdsworth です。勿論完全コピなんてできません)。おそらく、Eddie Van Halen と Stieve Vai が(...古い...)が、Jeff Beck の Scatterbrain をレコードと同時に、しかもお互いに相手やレコードの演奏を聞くことなく弾いたとしても完璧なユニゾンになるでしょう。しかし、ひとたびこの二人が好きに弾き始めたら、まったくオリジナルな演奏をすることもできるでしょう。

それはなぜでしょうか?簡単なことです。既に誰かがやったことをできる人間だけが、新しいものをやることができるからです。

先人の真似をしないで試行錯誤をすれば、その試行錯誤はおそらく先人と同じ結果をもたらすでしょう。つまり、オリジナルかもしれないけど、オリジナリティが無い!。先人の真似をすれば、その中に凝縮されたノウハウを試行錯誤無しに受け継ぐことができます。真似は完璧な方が、より沢山のノウハウを受け継ぐことができます。

この原則は、プログラミングにも適用されます。

プログラマにとって「完コピ」は簡単。だって、ソースコードを持って来れば努力無しに...と思いきや、そうでもありません。なぜなら、計算機の環境まで真似しなければ、同じソースコードでも、コンパイルができなかったり、実行できなかったり、実行結果が微妙に違ったり。最近は Autotools (autoconf, automake, libtool) のおかげで、そうでもなくなってきました。それでも、他人の書いたプログラムをちゃんと動かすというのは意外と難しいし、その機能を使いのなすにはかなりの勉強が必要です。

ギタリストにとっての「コピー」をプログラマに当てはめると、他人の書いたプログラムを自分の環境にインストールし使いこなすこと。これが楽にできるようになって、やっと「オリジナリティ」のあるプログラムが書けるようになります。勿論、これは第一歩に過ぎず、他人の書いたソースコードを解析して、きれいに利用(流用)できるようにならないと、オリジナリティがあり、かつ、オリジナルなプログラムは書けませんが。


検索

若いプログラマ(の卵)が、バグが取れないで困っていると言って来た。「ネットで検索しても原因がわからない」...。どうも、エラーメッセージを読む前に、自分のコードをチェックする前に、エラーメッセージをそのままキーワードにしてネット検索をしているようだ...。確かに、ログを見てみると、このサイトをネット検索から訪れてくれる人の大半がそうだった。

ネット検索で原因を探すのは最後の手段にして、まずは、自分のソースコードの中を検索したり、オンラインドキュメントの中を検索しましょう!。

なぜなら、バグの原因の大半は自分自身にあります。つまり、それは自分固有のことで他の人と共通ではありません。自分が原因となっているバグは自分で解消するしかありません。

もし、世界中のプログラマが各自のバグ解決情報をネットに溢れさせたら...それが未来の姿なのでしょうか?。そのときき、プログラマに求められるものはどうなるのでしょうか?創造性 <<< 検索(エンジン活用)能力?。