先生のページだよ!

NEWS2006-1 060228 - 091205


FreeBSD7.2-RELEASE-p2から8.0-RELEASEへのアップグレード[091205]

SoftwareDesignでも8.0の特集をしていることもあり、また正式リリースになったようですのでうちのサーバもアップグレードすることにしました。

やはり、phttpgetでつまるところがありました。

どうも時間帯によりうまくphttpgetがアップデートサーバとうまく仕事をしてくれないようです。

今回は自動的にアップデートサーバがupdate4.FreeBSD.orgに指定されていて、このサーバとの相性がよくないようです。

そこで調子悪くなった時に-sオプションによりアップデートサーバを変更しました。

freebsd-update upgrade -s update2.FreeBSD.org -r 8.0-RELEASE

これですいすい最後まで仕事してくれるようになりました。

その後でportsを更新しようと思いましたが作業を進めることができませんでした。

これはアップグレード後に7対応のライブラリを削除してしまうため、更新時に必要なライブラリが見つからないためです。

一つだけだといいのですが、これがたくさんあるのでこのままでは大変です。

FreeBSDといったら後藤さんの次のページの最後に対処方法が書いてありました。

http://gihyo.jp/admin/clip/01/fdt/200908/25

要はFreeBSD7x用のライブラリをインストールしておいてから作業を進める必要があるようです。

実際にこのページを参考にして7x用ライブラリをインストールして作業をしています。今のところ問題はありません。

ただし、作業が終わったらセキュリティ面で保障されないライブラリがあるからmake deinstallしておくようにとのメッセージがインストール時に出ました。

作業が終わったら忘れずにmake deinstallしておきましょう。

さて、今日はベガルタ仙台がJ1昇格とJ2優勝を決めました。ロスタイム引き分けになってひやひやものでしたが、セレッソも引き分けからもう一点勝ち越されたということで、今回は勝負運で勝ちました^^

今度は天皇杯ですね。この調子で頂上まで行って欲しいな。

組み込み関連の話に追加しました[090910]

ネット上ではBeagleboardでAndroidを動かす話題がいろいろ紹介されています。自分なりに苦労した点について紹介したいと思います。

Parallelsに関する記事に追加しました[090908]

MacOSX SnowLeopardインストールに伴い、自宅のParallelsもアップグレードしました。

FreeBSD7.1から7.2-RELEASEへのアップグレード時のメモ[090806]

数日前にアップグレードを完了しました。

前回のアップグレード時に不具合が発生した時の対処法について書きました。今回のアップグレード作業を通して、その回避方法を見つけたように思います。

前回、今回と、作業はネットワーク経由で自宅から学校のサーバをアップグレードしていました。この時ParallelsでWindowsXPを起動し、そこでputtyを使って作業を行っていました。

今回も同じ環境で作業をやってみると同じような経過をたどります。また、同じような作業はしたくありません^^;そこでputtyにはMacOSX版もあることを思い出し、早速使って試してみました。

今回は止まることなく順調にアップグレードを終了させることができました。使っているParallelsは一つ前のParallels Desktop 3.0 for Mac Build 5608です。こんな手間のかかることをやっているのでうまくいかないのは当たり前かもしれません。素直に起動時のOSで作業した方がよさそうです。

Parallels自体はFreeBSDのアップグレードの作業を除いてうまくいっているので最新版にする必要はないものと思っていましたが、もしかしたらこのような部分が改善されているのかもしれません。期待したいところです。

プログラミングメモに追加しました[090412]

joglのライブラリファイルをJavaのExtensionsフォルダに置いておくと後々問題が起こるかもしれないということなので対処法を書いておきました。"とりあえずClojureを触ってみる [090411,412]"に文章を追加しておきました。

Rubyプログラミングメモ始めます [090412]

昨日、プログラミングメモをRubyを使ってページにしている時にエラーが発生しました。これはバージョン1.9を使ったせいなんですね。こんな感じの情報を残していきたいと思います。興味のある方は左のRubyプログラミングメモをクリックしてみてください。

プログラミングメモ始めます [090411]

情けない話ですがAmazonのお知らせメールにてclojureなる言語があることを知りました。調べてみるとJavaVMで動くLispライクな言語のようです。早速インストールして、サンプルを試すと、swingアプリやOpenGLもぐいぐい動くではありませんか^^今までLispでグラフィック環境を利用するにはなかなかつらいものがあっただけに目新しさを感じています。これもJavaの豊富なライブラリが使えるおかげなのでしょう。Javaは新しい言語のインフラみたいになっていくのかな。

という感じでプログラミングメモを書いていきたいと思います。興味のある方は左のプログラミングメモをクリックしてみてください。

と言いつつ来週から大学が始まるので、次の更新は学校が夏休みに入ってからということになりそうな予感がしますが...^^;

担当科目(2009年度)の紹介をアップしました [090328]

今年度の担当科目の紹介をアップしました。今年もなんとか出来上がりました^^よかったら読んでください。

組み込み関連の話始めます[090324]

今組み込み関連のプログラミングを行っています。クライアント/サーバシステムやモニタやOSなどの応用が活かされている分野なんですね。そして、高機能なパーツが通信し合ってネットワークを形成する先には何かおもしろいものが出てくるような気がします。

そんな大げさな話にまでいかないと思いますが、ちょっとは役に立つかなと思うことを書き留めていこうと思います。気になる方は左の組み込み関連の話をクリックしてみてください。ただし、マイナーな話なのでおもしろくないかも^^;

7.1-RELEASEへのアップグレード時の後遺症?[090124]

といっても大したことではありません。きっかけはpdサーバのトップページを見たらカウンタの値が2となっています。更新すると1に減ります。ブラウザで再度開くと1のままです。一瞬、ぎょっとしますが、慌ててはいけません^^;まずは原因を探るべし、です。

CGIのプログラムや関連するファイルには問題はありませんでした。HDDの容量をdfコマンドでチェックすると何のことはないカウンタのあるディレクトリのキャパシティが100%をこえているようです^^;そのため、カウンタのデータが正常に書き込めなくなったようです。

どうも、この前、サーバをアップグレードした時のファイルが影響しているようです。duコマンドによれば作業ディレクトリ/var/db/freebsd-updateが100%を超えているようです。

そこで余裕のあるディレクトリにfreebsd-updateディレクトリを移動しておきました。/etc/freebsd-update.confのWorkDirのコメントをはずし、そのディレクトリを指定しておきました。

freebsd-updateコマンドを試すと正常に機能しているようです。テンポラリーファイルにかなりの容量を使うため、HDDはある程度、余裕のあるものを使った方がよさそうです。今回は有り余りのものを使ったところに問題がありました^^;

カウンタはバックアップしてあったデータからのリスタートということになりました^^

FreeBSD7.0から7.1-RELEASEへのアップグレード[090112]

メインサーバのバージョンは7.0-RELEASE-p7でしたが、最近7.1-RELEASEが出たのでアップグレードすることにしました。

前回の6.1からのアップグレードは自宅からのアップグレードでしたが、今回は学校でのアップグレードになります。そのため、まずHTTP_PROXYを設定しておきました。

それからアップグレードのために以下のコマンドを実行します。

freebsd-update upgrade -r 7.1-RELEASE

ところが途中で止まってしまいます。metadataをダウンロードするところで止まってしまいました。debugオプションを使って画面の表示を確認してみます。

freebsd-update --debug upgrade -r 7.1-RELEASE

どうもphttpgetというコマンドで〜.gzというファイルをダウンロードする際に失敗しているようです。

ネットで調べてみるといろんな場面でphttpgetで苦労している方はたくさんいるようです。freebsd-updateとは関係ありませんが、スクリプトによりphttpgetをwgetで置き換えて使用している例もあったので、試してみましたがうまくいきませんでした[1]。

そこで、画面に表示されたダウンロードに失敗したファイル名をfetchにてダウンロードしてから、再度freebsd-updateのコマンドを実行すると先に進みます。

この後、またmetadataをダウンロードするところで止まってしまいますが、同様の方法で回避し先に進みます。

パッチをダウンロード後、ファイルをダウンロードするところでファイル数4296と出てダウンロードが開始されます。しかし、途中で失敗しました。残りのファイル数は643のところで失敗しました。

debugオプションによりダウンロードされなかったファイルが表示されているので、rubyによりファイルリストのファイルを作り、それを読み込んでfetchにてダウンロードしました。確実にダウンロードされます。

ダウンロードしたファイルはすべて

/var/db/freebsd-update/files/

ディレクトリに移動します。

この後で

freebsd-update upgrade -r 7.1-RELEASE

を実行します。無事に質問に答えるところまで進みました。このコマンド終了後、以下のコマンドを実行しました。

freebsd-update install
shutdown -r now

再起動後、もう一度行います。

freebsd-update install
shutdown -r now

で、以上でアップグレードを終了しました。以下のコマンドで7.1-RELEASEを確認しました。

uname -a

以上のようにアップグレード時にphttpgetというコマンドの調子が悪くなるようです。portsnapでは問題はありません。学校の環境下ではプロキシサーバとの相性があるのかもしれません。今回は泥臭い作業となりましたが、7.1-RELEASEになってこのあたりが改善されていると助かります。

[1]http://nhh.mo-blog.jp/ttt/2006/01/portsnapwget_cc00.html、portsnap実行時にphttpgetの代わりにwgetを使用するスクリプトが紹介されています。、ttt氏

FreeBSD6.1から7.1RC2へのアップグレード[081228]

年末となり時間の余裕もできたので、サーバの環境をアップデートしようと考えていました。現在サーバはFreeBSD6.1で動いています。

いきなりアップデートして動かなくなっても困るので、使用していないノートにFreeBSD6.1をインストールして試すことにしました。

その前にfreebsd-updateが使えるか調べてみました。新たにインストールした環境ではfreebsd-updateが使えなかったのでこれをインストールしました[1]。

ところが試しに

freebsd-update fetch

とやってみても、うまくいきません。これは今年5月にサポートが終了したためのようです[2]。ということは、CDROMイメージをダウンロードしてアップグレードするしかないのかと思ってあきらめていました。

たまたま、自宅のマシンはFreeBSD7.1を追いかけていたのですが、最近RC2にアップデートしました[3]。

参考にしたページ[3]の最後の方に以下のような文章があります。

Users of earlier FreeBSD releases (FreeBSD 6.x) can also use freebsd-update to
upgrade to FreeBSD 7.1, 

ということは、6.1から7.1にもアップグレードは可能ということです。

そこで以下のページの手順に従ってアップグレードを試してみることにしました。

http://www.daemonology.net/blog/2007-11-10-freebsd-minor-version-upgrade.html

gpgというツールを使います[4]。ただ、旧いマシンだったのでインストールにけっこう時間がかかりました。

ここからが本番です。まず、次のファイルをダウンロードします。

# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz 

続けて次のファイルをダウンロードします。

# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz.asc 

それからgpgによりファイルの認証を行います。

# gpg --verify freebsd-update-upgrade.tgz.asc freebsd-update-upgrade.tgz 

ところが次のようなエラーが出てきました。

gpg: Signature made Fti Nov 16 23:01:38 2007 JST using DSA key ID CA6CDFB2
gpg: Can't check signature: No public key

これに関しては次のページに対処法があり、参考にさせてもらいました[5]。この方法に従い公開鍵を取り寄せてみます。

# gpg --keyserver pgp.nic.ad.jp --recv-key CA6CDFB2

それから先のコマンドを再実行します。

# gpg --verify freebsd-update-upgrade.tgz.asc freebsd-update-upgrade.tgz

なんとかエラーも出ず、fingerprintも得られたようなので次に進みます。ファイルを展開します。

# tar -xf freebsd-update-upgrade.tgz

シェルスクリプトを実行します。

# sh freebsd-update.sh -f freebsd-update.conf -r 7.1-RC2 upgrade

ところが、Directoryがないと出てきます。ディレクトリ/var/db/freebsd-updateがないようです。

ネット上で探してみると回答がありました[6]。なんと、ないならそのディレクトリを作れとありました。当たり前ですけどね^^;で、作ってみます。

mkdir /var/db/freebsd-update

それから、コマンドを実行するとスクリプトが動き出します。途中質問がありますがyで大丈夫でしょう。

時間がかかりますが、アップグレードが進行しているようです。パッチは32000弱ほどあります^^;

最後にファイルの変更について聞いてきますが、そのままたぶん大丈夫だろうということでyで先に進みました。installの手順に進みます。

# sh freebsd-update.sh -f freebsd-update.conf install

それから再起動します。

# shutdown -r now

この時点で7.1の文字が画面に表示され、うまくいっているようです。

そしてもう一度installを行います。

# sh freebsd-update.sh -f freebsd-update.conf install

この時点でアップグレードを完成させるためにサードパーティのソフトウェアをリビルドしろと注意がでてきます。それからまた、installの作業をするようにとあります。ですが、そのようなものはないのでもう一度再起動して終わります。

念のため確認します。

# uname -a

FreeBSD 7.1-RC2が確認できました。なんとかアップグレードできたようです。

[1]http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/security/freebsd-update-j.html、freebsd-updateのインストール方法が紹介されています。、山口氏
[2]http://www.daemonology.net/blog/2008-06-20-to-everything-a-season.html、Daemonic Dispatches、Colin Percival
[3]http://lists.freebsd.org/pipermail/freebsd-stable/2008-December/047203.html、FreeBSD 7.1-RC2 Available...、Ken Smith
[4]http://www.cyberciti.biz/faq/gnu-privacy-guard-on-freebsd/、FreeBSD Install gnupg Cryptographic Software、Vivek Gite
[5]http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/FreeBSD/FreeBSD%20Update.html、FreeBSD Update、momma氏
[6]http://lists.freebsd.org/pipermail/freebsd-questions/2008-February/168947.html、unable to upgrade to 6.3-R、Wojciech Puchar

D945GCLF2のマザーボードでマルチブート環境[081108]

しばらくぶりの書き込みとなります。実はその間、組み込み関係の実験をしていました。しかし、基板の作成は終わったものの動きません^^;そこで詳細に動作を確認しようと思いJTAGなんていうツールを使ってみようかということになりました。

しかし、最近のノートにはパラレルポートやシリアルポートが付いているものがないため、実験用のパソコンを何とか手に入れようと考えました。

中古のノートでもいいかと考えましたが、さすがに液晶が暗いものが多く、ちょっと心配です。だったら机にちょこんとのっかるデスクトップ型のパソコンはと探したところ、IntelのD945GCLF2のマザーボードを使えば目的にかなうことがわかりました。

しかも、このマザーはATOM330というデュアルコアのCPUがついています。電力消費も8Wと電気代の節約にもなりそうです。

そこで仙台駅裏で部品を集めると

D945GCLF2のマザーボード  一万と少し
SATA HDD 160G  六千と少し
DDR2 PC5300-2G  三千弱
ケースBM639-WH  一万二千弱

ということで約三万で揃えることができました。

このマザーボードはメモリスロットが一つしかないので、最初から最大の2Gにしておいた方がよいでしょう。

また、BIOSの設定はマザーボード上のジャンパを差し替える必要があるので、ちょっと面倒です。

組み立てにはSATAのインターフェイスを使ったので配線が楽でした。

それから、せっかくだからFreeBSD、XP、Vistaの三つのOSをインストールしマルチブートの環境にしてみました。

参考になったURLは次のところです。大変参考になりました。

気分はもう原人
http://tkar.at.webry.info/200707/article_1.html

MBMというブートマネージャーが威力を発揮します。

先のURLにリンクがありますが、なんとAVR Writerで有名なelm-chan.orgで紹介されていたんですね。

MBMを試す前にXP、Vista、FreeBSDの順にインストールして、FreeBSDでブートマネージャーを使えばうまくいくと思っていましたが簡単にはいきませんでした。

MBMを使うと、インストールするたびにMBMをフロッピーディスクからインストールしますが、確実にマルチブート環境を構築できます。

この場合、順序はFreeBSD、XP、Vistaの順になります。FreeBSDインストール時にブートマネージャーをどうするか聞いてきますが、何もしないを選択しておきましょう。

これで起動時、FreeBSDとWindowsを選択できるようになり、Windowsを選んだ場合、XPとVistaを選択する画面になります。

参考までにFreeBSD7をインストールしましたが、X-WindowのグラフィックスのドライバにはINTELを使用し問題なく使用しています。ただし、portsを更新しておいた方がいいかもしれません。

RealtekのLAN用のドライバはないようです。どうも7.1になってからのようです。私の場合USBのポートに指すLANアダプタ(COREGA USB-TXS、旧い^^;)があったのでそれを使ったところ、問題なく使用することができました。

オーディオに関してはこれから試してみようと考えています。

Lavieの再セットアップCDを手作業で^^;[080409]

3月末に同僚の先生から、Lavie LL900/AD がどうも調子が悪いというので、これを借りて必要なデータをバックアップしてから、再セットアップを行いました。この機種はハードディスクリカバリを採用していたため簡単に作業を行えました。

その後、同僚の先生は必要なソフトをインストールし、ネットにもつないでさあインターネットエクスプローラでネットをみるぞというところまできました。ところがアイコンをダブルクリックすると、システムがクラッシュし、再起動後はPOSTでハードディスクに異常が見られる旨のメッセージが表示され、F1キーで進むとWindowsXPの画面がちらと見えたところで再起動し、同じことを繰り返すようになりました。

早速、7日にまたLavieを預かり、症状を確認しました。これはハードディスクの交換で対処するしかなさそうです。一応国内版KnoppixであるEdu5でこのハードディスクにアクセスしてみるとCドライブは中身がなんとか見える状況になっています。ただし、後でWindowsでは確認できなかったのでもうだめっだのかもしれません。再セットアップ用に用意してある他のドライブはファイルを確認できました。

それからヨドバシにて日立の80G,5400rpm,9.5mm,2.5インチのハードディスクを8000円ちょっとで購入、ハードディスクケースは愛用している恵安のものを購入しました。

LL900/ADのハードディスクの交換はいたって楽でLavie前面の下の部分の黒いプラスチック部分のねじをはずして、それを取ることでハードディスクを引っ張り出すためのプラスチックの端を確認することができます。

それをひっぱるとハードディスクが出てきます。ハードディスクに貼ってあるプラスチックを静かにはがし、換装するハードディスクにはりつけます。もとのハードディスクと同じ面にはりつけました。

で、本体はそのままにしておいて、取り出したハードディスクから再セットアップ用のCDを作ることになります。

解説書ではシステムのメニューからたどって再セットアップディスク作成ツールをクリックしろとありますが、もうCドライブがだめなのでこれは使うことができません。

さあ、どうしようと思って同じような方がいないかと思ってネットを調べましたが、同じような境遇でゴリゴリ直した方を見つけることができませんでした。メーカーに頼めば再セットアップディスクを売ってくれるようですが目の前にあるのにもったいないことです。

そこで、取り出したハードディスクのNEC_RECOVERYというボリューム名のドライブを見てみるとBACKUPというフォルダがあります。その中にはBOOTCDというフォルダとFD用のイメージファイル(bootfd.img)、それと拡張子がghsのファイルがいくつか入っています。このあたりを使ってセットアップディスクを作ればよさそうです。

ライティングソフトとしてはDVDドライブについてきたB's Recorderを使いました。そのヘルプによればブータブルCDを作るには、FD用のイメージファイルからまず起動用のフロッピディスクを作りそれをもとに作るということでした。

NEC_RECOVERYのドライブにはFD用のイメージが入っていますのでntrawriteを使って作ります。このソフトは以下のサイトよりダウンロードできます。

http://ntrawrite.sourceforge.net/

こうやってヘルプに従ってFDドライブに作ったFDを入れ、CDを焼きますがその時CDに焼くファイルとしてはフォルダBOOTCDの中に入っていたファイルを指定して焼くことにしました。

後はwxp_b001.ghsから始まり、wxp_b009までと、wxp_base.ghsのファイルをCDに焼いていきます。最初、DVDにまとめて焼いたのですが、再セットアップ時にメディアがだめということで拒否されたので、面倒くさいのですがCDで焼きました。

この時も、このバックアップ用のデータのドライブが途中で見えなくなったりしてあせりました。が、なんとか復活してデータをすべて焼くことができました。

再セットアップの順番は最初に焼いたブートCDから始まり、wzp_base.ghs、wxp_b001.ghsから始まってwzp_b009.ghsまでを順に交換しながらセットアップを続けていきます。

ブートディスクを入れた時にWindows98なんていうのが見えるのはご愛嬌でしょうか。そしてセットアップ時にはghostというソフトを使っているようです。あと、もう一つのドライブに入っているフォルダAPSETUPCをDVDに焼いておきました。

この作業により何とかシステムが使えるようになりました。同僚の先生もこれで一安心かな^^

erlシェルでインクルードのパスを設定する[080331]

下記のWindowsXP(ただしMacOSXでParallelsを使って)にErlangとesdlのインストールのところでサンプルとしてtestgl.erlのプログラムの先頭部分を次のように書きかえていました。

-include("../include/sdl.hrl").
-include("../include/sdl_events.hrl").
-include("../include/sdl_video.hrl").
-include("../include/sdl_keyboard.hrl").
-include("../include/gl.hrl").

../includeをインクルードのパスに付け加えていましたが、毎回これをやるのは面倒です。

-include("sdl.hrl").
-include("sdl_events.hrl").
-include("sdl_video.hrl").
-include("sdl_keyboard.hrl").
-include("gl.hrl").

上記のようにプログラムを直してcのコマンドでインクルードのパスを設定できました。

c(testgl,{i,"../include"}).

2008年度の担当科目の紹介を掲載しました[080331]

年度末になりやっと2008年度の担当科目の紹介が出来上がりました。今回は新しいカリキュラムの説明もあり力作となっています^^;

WindowsXP(ただしMacOSXでParallelsを使って)にErlangとesdlのインストール[080330]

学校の本屋でプログラミングErlang(オーム社)というのがあって、そのとびらに、昔々、あるプログラマが、不思議なプログラミング...から始まって、プログラマはキーボードをたたき始めたという文章があって、ワクワクする出だしにつられてさらに読んでみたくなりました。

最近、いろんな言語を調べていましたが、JavaFX、Scalaあたりがおもしろいかなと思っていたら、どうもこのErlangも面白そうです。前にMacOSX用にWings 3Dをインストールしていた時に見かけていて、言語としてはあまり興味がなかったのですが、マルチコアCPUのプログラム向けとか関数プログラミング、そしてWings 3Dという素晴らしいアプリケーションと関係があるのですから俄然興味がわいてきました。

どうせだったら、Erlangを使って絵を描きたいなと思い、esdlというライブラリを使ってみることにしました。

そこでErlangのインストールから始めます。ただし、esdlに絡んでくるSDLおよびOpenGLに必要なファイルはインストール済みであるものとします。

<参考1>ランタイムライブラリのインストールに関しては、BBBさんの初心者の初心者による初心者の為のSDL−BCCでSDL[1] のサイトが参考になります。私の場合、c:¥windows¥system32に適当にフォルダを作ってそこに入れてあります。そしてパスを通しておきます。

<参考2>OpenGLのランタイムライブラリはc:¥windows¥system32に、最初から入っている(たぶん)opengl.dllとglu32.dllがあります。これに私の場合、GLUT用としてfreeglut.dllを使用しています。freeglut.dllはfreeglutのページ[2]からダウンロードします。

<参考3>bccでOpenGLのプログラムを開発する際にはK.FujimotoさんのGLUT の Borland C++ Compiler への導入手順の項目のあるページ[3]が参考になります。

それからErlangの最新版を開発元のページ[4]からダウンロードします。

Windows binaryの最新版はこの時点でR12B1でした。ダウンロードには時間がかかります。

ダウンロードしたらファイルを実行しインストールをします。それから、コマンドラインで実行するために、例えばC:¥Program Files¥erl5.6.1¥binのように環境変数PATHに追加してください。

これでコマンドプロンプトでerlのコマンドを実行し動作を確認しましょう。

そしてesdlを開発元のページ[5]からダウンロードします。

この時点でバージョンは0.96.0626となっていました。解凍するとesdl-0.96.0626というフォルダが現れます。

これを利用してテスト用のプログラムを試すにあたり(ネット上でも皆さん苦労しているようです^^)、解凍後のフォルダに入っている文書には簡単な説明しかなかったので、しばし苦労することになりました。

インストールしたErlangのフォルダ中にlibというフォルダがあって、どうもいろんなライブラリが入っています。ということはesdlを利用するにはここにそのフォルダ入れれば簡単に使えるようになりそうです。そこでErlangのlibフォルダにesdl-0.96.0626のフォルダをコピーしました。

このesdlのフォルダの中にtestフォルダがあり、お試し用のプログラムがいくつか入っています。 testフォルダでコマンドプロンプトを起動しerlを実行します。まず、testgl.erlをコンパイルしてみます。

c(testgl.erl).

しかし、次のようなメッセージが出ます。

./testgl.erl:16: can't find include file "sdl.hrl"
./testgl.erl:17: can't find include file "sdl_events.hrl"
./testgl.erl:18: can't find include file "sdl_video.hrl"
./testgl.erl:19: can't find include file "sdl_keyboard.hrl"
./testgl.erl:20: can't find include file "gl.hrl"
./testgl.erl:34: undefined macro ''SDL_INIT_VIDEO''
./testgl.erl:112: undefined macro ''GL_PROJECTION''
./testgl.erl:123: undefined macro ''GL_COLOR_BUFFER_BIT''
./testgl.erl:215: undefined macro ''SDLK_q''
./testgl.erl:28: function go/1 undefined
./testgl.erl:31: function go/1 undefined
error

これはtestgl.erlのプログラム中でヘッダーファイルを読む箇所が

-include("sdl.hrl").
-include("sdl_events.hrl").
-include("sdl_video.hrl").
-include("sdl_keyboard.hrl").
-include("gl.hrl").

のようになっていて、esdlフォルダのincludeフォルダを参照できません。そこで次のように変更しました。

-include("../include/sdl.hrl").
-include("../include/sdl_events.hrl").
-include("../include/sdl_video.hrl").
-include("../include/sdl_keyboard.hrl").
-include("../include/gl.hrl").

本来は初期設定ファイル.erlangなどでパスを通しておくものなのでしょう。が、こんな感じで進めます^^

コンパイルし直すと次のようなメッセージが出ます。

./testgl.erl:61: Warning: variable 'SR' is unused
{ok,testgl}

testgl.beamファイルが作られます。

それから次のコマンドを実行してみました。

testgl:go().

次のようにエラーメッセージが出ます。

Driver Failed {error,driver_incorrect_version}
** exception error: einval
     in function  open_port/2
        called as open_port({spawn,"sdl_driver"},[binary])
     in call from sdl:init/1
     in call from testgl:go/1

要はprivフォルダに入っているsdl_driver.dllのバージョンが合わないということのようです。

ネットを検索してみると同じ問題に遭遇している人がいるのを見かけます^^。

直接関係ないのですがTANEさんのへっぽこ実験室の昔の最近の出来事(2008.01)というページ[6]から2008年1月16日の日記を参考にして、Windows版Wings 3Dをダウンロードして、そこに入っているsdl_driver.dllを使ってみることで、このバージョンの問題を解決できるのではと期待してみました。

<参考4>Wings 3DはWings 3Dのトップページ[7]からDevelopment Release 0.99.02のWindows版をダウンロードすることができます。

バージョンWindows版Wings 3D 0.99.02をインストールしそのフォルダを調べてみると、libフォルダの中にesdl-0.96.0626フォルダが入っています。その中にはprivとebinのフォルダがあるので、erl5.6.1>libとたどってesdl-0.96.0626フォルダ中のprivとebinを例えばpriv_old、ebin_oldのように名前を変更してから、Wings 3Dのprivとebinのフォルダをここにコピーしました。

それから、いったんerlのシェルを終了し、erlを起動後、実行してみると七色のキューブが回転し出します。感動です。

そしてさらにerldemo.erlをコンパイルして実行してみます。

いろいろメッセージが出ますがOKが最後にでるので大丈夫なのでしょう。

実行してみると次のようなエラーが出ます。

** exception error: undefined function sdl_audio:loadWAV/1
     in function  erldemo:audio_server/1
     in call from erldemo:go/1

このsdl_driver.dllでもサポートしていないものがあるようです。

やっぱり一度はsdl_driver.dllをmakeしてみる必要がありそうです。ふうっ(笑)

ネットでこのようなことを行っている例としてリリカル☆Lisp 開発日記の中にzickさんのESDL(Erlang SDL)導入メモ[8]があり、ここでcygwin環境でのインストール方法を紹介しています。

そしてcygwin環境でmingwを使うための注意がRue.SATOHさんのMinGW FAQのページ中のどうすれば Cygwin 環境内で MinGW を使えますか?という部分[9]に書かれています。

<参考5>mingwとそれを利用するための環境であるmsysのインストールに関しては出村さんのEX1.1 開発環境とODEのインストール(WindowsXP編)のページ[10]を見てください。2007年度の授業で使用したODEのインストールやサンプルで勉強させてもらったサイトです。わかりやすい説明があります。

<参考6>cygwinのインストールに関してはネット上でいろいろ紹介されていますが、MUSASHIプロジェクトのCygwinのインストール&設定方法のページ[11]などがわかりやすいと思います。

cygwinおよびmingwの環境が整っている上で、した上で[9]のページを参考にしてWindowsのユーザの環境変数PATHに

C:¥mingw¥bin;C:¥mingw¥lib;C:¥cygwin¥bin

を追加しておけばよさそうです。C:\mingw\libを追加しているのはここにSDLのライブラリが入っているためです。

またSDLの開発用のライブラリをインストールするためにSDLのページ[12]からWin32の開発用のライブラリのうち、mingw用のファイル

SDL-devel-1.2.13-mingw32.tar.gz (Mingw32)

をダウンロードします。

適当にデスクトップ上にファイルを展開します。

展開したフォルダSDL-1.2.13の中にbinフォルダがあります。そこに入っているSDL.dllはc:¥windows¥system32などに入れておきます。すでにインストールしてある場合、この操作は必要ないと思います。

それから、SDL-1.2.13フォルダのlibフォルダの中にある、libSDL.dll.a、libSDL.la、libSDLmain.aをmingwフォルダ中のlibフォルダに入れておきます。

これでだいたい準備ができました。

それからerl5.6.1>libとフォルダをたどってesdl-0.96.0626をcygwin>homeとたどったところにある自分のユーザ名のフォルダにコピーしておきます。

デスクトップ上のcygwinのアイコンをダブルクリックしシェルからcdコマンドを使って今コピーしたesdl-0.96.0626のフォルダに入ります。

cygwin環境のインストールのページ[8]を参考にして、このフォルダの中にあるConfigure-cygwin-mingw.shを編集します。

私の場合75行付近のSDLROOTの設定を次のようにしました。

#SDLROOT=`echo $SDLDLL | sed 's,/lib/SDL.dll$,,g'`
#SDLROOT=`echo $SDLROOT | sed 's,/bin/SDL.dll$,,g'`
SDLROOT=/cygdrive/c/MinGW

それから、97行付近のlibSDLの部分を次のようにしました。

elif [ -f $SDLLIB/libSDL.dll.a ]; then
#elif [ -f $SDLLIB/libSDL.a ]; then

そしてcugwinのシェルで以下のコマンドを実行します。

./Configure-cygwin-mingw.sh

その後に次のコマンドを実行します。

./mingw-build.sh

最後の方はなんかうまくいってなさそうですが^^;なんとか終わったようです。

そしてcygwin中のesdlフォルダから、ebinとprivフォルダをコピーします。Wings 3Dの時と同様にErlangのesdlフォルダ中すでにあるebinとprivフォルダの名前を変更してから貼り付けます。

字の書いてあるキューブがウィンドウの枠にはねかえります。これまた感動です^^

で、testフォルダにあるサンプルを試した結果は以下のようになりました。

erldemo       o
testaudio     o
testgl        o
testglutess   x
testjoy       -
testsprite    o

testjoyはjoystickがないので試しようがありませんでした^^;testgluessはどうもTesselation関連のAPIが機能しないようです。予想としてはParallelsの方のOpenGLがサポートしていないのかなというところですが、これからひまな時に調べてみたいと思います。

[1]http://tokyo.cool.ne.jp/sdl/bcc/bcc.html、初心者の初心者による初心者の為のSDL−BCCでSDL、BBB
[2]http://freeglut.sourceforge.net/、freeglut
[3]http://www.h6.dion.ne.jp/~fff/technique/OpenGL/OpenGL_j.html、GLUT の Borland C++ Compiler への導入手順、K.Fujimoto
[4]http://www.erlang.org/download.html、Erlangのダウンロードページ
[5]http://esdl.sourceforge.net/、ESDL
[6]http://www5.ocn.ne.jp/~tane/diary/d2008_01.html、へっぽこ実験室の昔の最近の出来事(2008.01)というページから2008年1月16日の日記、TANE
[7]http://www.wings3d.com/、Wings 3D
[8]http://blog.bugyo.tk/lyrical/2007/11/esdlerlang_sdl.html、リリカル☆Lisp 開発日記−ESDL(Erlang SDL)導入メモ、zick
[9]http://www.sixnine.net/cygwin/translation/mingw-doc/mingwfaq.html#s1-13、MinGW FAQ−どうすれば Cygwin 環境内で MinGW を使えますか?、Rue.SATOH
[10]http://demura.net/9ode/392.html、EX1.1 開発環境とODEのインストール(WindowsXP編)、出村
[11]http://musashi.sourceforge.jp/cygwin/cygwin.html、MUSASHIプロジェクトのCygwinのインストール&設定方法
[12]http://www.libsdl.org/download-1.2.php、SDL

Windows98SEのインストールで役にたったこと[071103]

今回、昔のトラックボールのLet'sNote CF-S23にWindows98SEをインストールすることにしました。以前LinuxのVineなんかをインストールしていました。

ところが、Windows98SEをインストールすることはそんなに簡単ではなかったのです。このマシンはCDROMドライブなどありません。専用のFDDがあります。

購入時のOSで復旧用ディスクを作っておかないとリカバリーディスクは使うことができないようなことがマニュアルに書いてありました。

それで昔のIBM PC/DOS5.02でインストールしてみましたが、起動の途中で止まってしまいます。これはconfig.sysでemm386.exeを指定しているところにコメントを入れることで解決することができました。

なんとかDOSが起動するようになっても今度はCDROMを認識させないとインストールを行うことができません。

このマシンにはPCカードのスロットがあるのでSCSIのカードを挿してSCSIのCDROMドライブを認識させようと試みますが、ハードウェアの不調やドライバがうまく動かないようなのであきらめました。

万事休すかと思っていたら、つぎのページを見つけました。USBのドライブを認識する起動ディスクを作ることができそうです。

http://wiki.milkcup.jp/index.php?DOS%BE%E5%A4%C7%A4%CEUSBCD%A4%CE%C7%A7%BC%B1

うちにはPanasonicのKXL-RW40ANがあったのでこれを利用することにしました。このページの最後に書いてあるように付属のCDROMにドライバが入っています。

しかしドライブは中古で買ったためCDROMが付いていません。今回は同じPanasonicのLF-P968CのCDROMを使いました。フォルダはToolsで各種ブート用のツールもあります。この中のf2hフォルダにドライバが入っています。

このドライブ自体(LF-P968C)はWindows98用とは書いてありませんが、付属のCDROMにはちゃんと入っているんですね。大いに助かりました。Panasonicに感謝です^^

このページに従って起動ディスクを作って起動させると、この起動ディスク1枚からUSBのCDROMを認識できるようになりました。英語モードですのでキー配置に注意してください。

後は通常のWindowsのsetupを実行するだけです。

そしてWindowsが使えるようになりましたが、CDROMドライブは認識してくれません。また、ここから必要なドライバを一つずつインストールしていくことになります。

こつこつインストールしていった結果、今のところ問題なく使っています。ただしWindows98SEですから、こいつの癖を知って使わないといけません。2000やXP以降しか使ったことがない方にはOSとは思えないかもしれません(半分冗談ですが^^;

インストール後、気になるのはデバイスマネージャでプライマリ IDE コントローラ(dual)に!マークがついていることなのですが、これはもう一つあるIntel 82440mx PCI Bus Master IDE Controllerの設定によるものではないかと考えています。

この設定は規定値となっています。今のところ支障がないので、この状態で使っています。

MacOSX10.5 Leopard インストール[071103]

10月26日にMacOSX10.5Leopardが発売されました。次の日にヨドバシに買いに行ってきました。パッケージはでかいものという頭があったせいでなかなか見つけられませんでした。CDサイズだったんですね。

帰ってきて早速インストールと思ったのですが、この時旧いマシンにWindows98SEをインストールしていて、これがなかなかいまくいかないせいもあって、数日たってインストールすることとなりました。このWindows98SEお時の経験は後で役に立ったことを書いておきます。

ということでインストールしてみると、なんとDVDの整合性のチェックに30分ぐらい要します。気にならなければスキップすることができます。インストールを開始しましたがちょっと出かけるところだったのでキャンセルすると、起動ディスクを選ぶ画面が出てきます。

確かDVDディスクからの起動を選択し、指示に従うともう1回起動ディスクを選ぶ画面が出てきます。まだインストールが終了していないのでひやひやしましたが、こお画面でTigerを選択できるようになり無事元のOSを起動できるようになりました。

その後、時間を十分にとってインストールを完了しました。見た目はアルファ化が進んだデスクトップだなという感じでした。

今回のOSで期待しているのはBootCampです。が、別のおもしろいマシンを試すことに気が移りかけているので、また後でということになりそうです。

MacOSXにWINGS 3Dをインストールする[070816]

3D用のデータファイルのコンバートがどの程度使えるのかを調べるためにWINGS 3Dというソフトをインストールしてみることにしました。どうもこのソフトはモデリング用のソフトのようです。そこまで使いこなせるだろうか^^

この時MacPortsを使いましたが便利な面と注意するところ、インストール時に気づいたことについても触れたいと思います。

WINGS 3DのIntel Mac用のバイナリーはちょっと前のバージョンが出ていますが、人がコンパイルしたものだし、WINGS 3Dのサイトにも自分でソースからコンパイルするように書いてあるのでそのようにしてみました。

まずは次のWINGS 3Dのサイトからソースファイルをダウンロードします。

http://www.wings3d.com/

今回はwings-0.98.36.tar.bz2をホームディレクトリにダウンロードしました。

次のコマンドにより解凍します。

tar jvx wings-0.98.36.tar.bz2

解凍後WINGS 3Dのディレクトリに移動します。

cd wings-0.98.36

README(英語)には目を通しておきましょう。

cat README | less

MACOSXのコンパイルには次のファイルを見ろとあるのでこのファイルにも目を通しておきます。

cat BUILD.unix | less

ざっと見るとWINGS 3Dをコンパイルするには次のものが必要なようです。

・Erlang/OTP
・SDL
・ESDL

いちいちダウンロードしてコンパイルは面倒なのでこの前インストールしたMacPortsを使用します。

以下のようにして各ソフトがサポートされているか調べていきます。

port search Erlang/OTP

その結果Erlang、esdlについてはそのままでよいのですが、sdlに関してはlibsdlとなるようです。

取り合えず順にインストールしていきます。

sudo port install Erlang

次にesdlについてインストールしました。

sudo port install esdl

この時libsdlもインストールされるので、これでいいかなと思っていましたがMacOSXの場合には後で説明しますが注意が必要です。

これで準備ができたのでmakeします。

make macosx

早速、エラーが出ました。-pオプションに値が渡されていないというエラーです。Makefileを調べてみるとどうも$ESDL_PATHに値が入っていないようです。

BUILD.unixの手順にもESDL_PATHにesdlのパスを与えよと書いてありました。

以下のコマンドにてパスを与えます。長いので2行にしてありますが一行で書いてください。

また、各自の環境によりパスは異なると思います。あらかじめ自分でesdlまでのパスを探しておきましょう。

それとMacOSX標準のターミナルではこのような長いパスを書いて数行にまたっがて表示する場合、途中の文字列が正常に表示されないことがあります。

入力した文字が消えているわけではありません。ターミナルの画面を横に伸ばして一行で表示すると安全です。

export ESDL_PATH="/opt/local/var/macports/software/esdl/0.96.0626_0+darwin_8/
                      opt/local/lib/erlang/lib/esdl-0.96.0626"

それからまたmakeします。

make macosx

次のエラーが出てきます。今度はplugin_srcディレクトリの中にあるfbxディレクトリのMakefileに問題があるようです。

  ERL_TOP := /usr/local/lib/erlang

とあるところを自分の環境に合わせ次のように訂正しました。

  ERL_TOP := /opt/local/lib/erlang

それからまたmakeします。

今度はFBXSDK2005.12aというライブラリがないと出てきます。

このライブラリはAutodeskが配布しているライブラリのようです。

http://www.autodesk.co.jp/adsk/servlet/index?id=6962262&siteID=1169823

上記のページで右側にFBX SDKのダウンロードのリンクがあるのでクリックします。

FBX 2005.12.1 SDK

という項目があるのでクリックします。

fbxsdk_200512a_macos.pkg.zip (zip - 20041Kb)

をダウンロードします。

これを解凍しますが、標準で添付の解凍ソフトではエラーが出て止まってしまいました。

私の場合Windowsで動くLhaplusをParallelsのコヒーレントモードで使って解凍しました。

このコヒーレントモードWindowsが中途半端に起動されている感じでちょっと心配になりますが無事に解凍できました。

それからパッケージをダブルクリックしてインストールを開始します。

そしてmakeです。MacOSXが出た当時こんなことをよくやっていましたっけ^^慣れない方には苦痛かもしれません。

ですがまたエラーが発生します。今度はERLANG_PATHの設定が自分の環境と一致しないためのエラーです。

Makefileを調べてもこの設定がどこで行われているのかわかりません。こんな時はgrepを使ってファイル中の文字列を調べます。

grep -r ERLANG_PATH *

-rを使っているのがみそで、再帰的にディレクトリ中のファイルを調べていきます。

調べたところmacosxディレクトリ中のWings3d.xcodeprojの中のproject.pbxprojファイルの中の記述に問題があるようです。

Wings3d.xcodeprojはパッケージなのでこのアイコンを右クリックしてパッケージの内容を表示をクリックします。

それからproject.pbxprojをテキストエディタなどで編集します。

後半部分に次のようになっている箇所が3つありますので

ERLANG_PATH = /usr/local/lib/erlang;

自分の環境に合わせ次のように訂正します。

ERLANG_PATH = /opt/local/lib/erlang;

さて、makeしますがまだエラーが出ます。今度は/Library/FrameworksにSDL.frameworkがないと言ってきます。

MacPortsではこのようなframeworkはインストールされないようです。ですのでMacOSX側のライブラリについても用意する必要があるようです。

ここが一般のUNIX系OSのインストールと違うところのようです。MacPortsもこれ一発ですべてOKということではなさそうです。残念。

SDLのページを見てみましょう。

http://www.libsdl.org/index.php

DowmloadでSDL1.2をクリックします。

疲れてきてコンパイルもいやだしRuntime BinaryがあるようなのでMacOSX用の次のファイルをダウンロードしました。

SDL-1.2.12.dmg

これをダブルクリックし、出てきたフォルダにSDL.frameworkがありますので/Library/Frameworksにコピーしインストール終了です。

そしてmakeです。

buildできました。

MacOSXではいろんなことをやらなくちゃいけません。勉強になるような、ならないような^^;

長文、お疲れ様でした。

MaximaでGeomview試す[070809]

GeomviewというソフトウェアがMaximaで使う時に一番良さそうな描画用のソフトウェアだということなのでインストールしてみることにしました。

まずは次のページからソースコードをダウンロードします。保存先はユーザディレクトリでよろしいんじゃないでしょうか。

http://www.geomview.org/download/

このページのMacOSXでのコンパイルについてちょこっと書いてあります。

それによるとFinkやMacPortsではなく自分でコンパイルしろみたいなことが書いてあります。Finkでは旧いバージョンがサポートされ、MacPortsにはportがありません。

そしてopenmotifという言葉が出てきます。かつてPC UNIXのブームが始まった時よく使われていたライブラリです。Geomviewはこれを使って作られているようです。

これはMacPortsでもあるので次のようにしてインストールします。以下、ターミナルでの作業となります。

sudo port install openmotif

インストールが終了したらユーザディレクトリの次のファイルを解凍します。

geomview-1.9.3.tar.bz2

tarコマンドを使用します。

tar jxf geomview-1.9.3.tar.bz2

解凍後、ディレクトリを次のように移動します。

cd geomview-1.9.3

ところで先のダウンロードのページでインストール手順が書いてあります。

export CPPFLAGS=3D-I/path/to/openmotif/include
export LDFLAGS=3D-L/path/to/openmotif/lib
./configure --with-opengl=3D/usr/X11R6
make
make install

その中でCPFLAGS=3D-Iのように書いてあります。この3Dは新しいオプションかと思っていたのですがこの通りconfigureを試すと失敗します。

これはQuoted-printableのエンコーディングによるもので、文字化けと考えてよさそうです。下記のサイトを参考にしてください。

http://homepage1.nifty.com/glass/tom_neko/web/web_03.html

そこで=3Dとある部分は=に直してconfigureを実行するとうまくいくようになりました。

指示通りコンパイルしていきますが、私の場合、目的のディレクトリまでのパスが長くなりました。パスは各自異なるかもしれませんので確認しておきましょう。

まずincludeファイルへの環境変数CPPFLAGSを設定します。便宜上2行に書いていますが1行で書いてください。

export CPPFLAGS="-I/opt/local/var/macports/
                  software/openmotif/2.3.0_0+darwin_8/opt/local/include"

次にlibファイルへの環境変数LDFLAGSを設定します。これも同様に便宜上2行に書いていますが1行で書いてください。

export LDFLAGS="-L/opt/local/var/macports/
                 software/openmotif/2.3.0_0+darwin_8/opt/local/lib"

それからconfigureを実行します

./configure --with-opengl=/usr/X11R6

うまくいったらmakeします。

make

私の場合sudoを使ってinstallしました。

sudo make install

最後に各ユーザディレクトリにある.profileの環境変数PATHに次のパスを追加します。

/usr/local/bin:

いよいよmaximaを試します。アプリケーション>ユーティリティのX11をダブルクッリックして起動します。

xterm上で次のコマンドを実行します。

xmaxima &

次のページのサンプルで試してみました。

http://www.bekkoame.ne.jp/~ponpoko/Math/maxima/maximaGraph.html

プロットオプションを設定してサンプルのグラフを描かせてみました。

確かに銀色に輝く立体が表示されます。

Maximaを試す[070808]

Maximaの使用例がのっている次のページにより動作確認を行いました。

http://phe.phyas.aichi-edu.ac.jp/~cyamauch/maxima/

Maximaを起動するにはターミナルから次のようにコマンドを起動します。maximaで実行するとターミナル上でコマンドを実行するようになります。

次のようにX Window対応のxmaximaを使用します。

xmaxima &

&はバックグラウンドで実行という意味です。

起動するとメニューのところにはGUIのフロントエンドとしてwishが起動しその上でmaximaが動いているようです。

最初のexpandの例は無事に動きました。

やはり気になるのはグラフを描けるかどうかです。先に紹介したページのグラフの作成,編集の例を試してみました。

しかし、エラーが出ます。どうもgnuplotをインストールしていないことが原因のようです。

そこで次のコマンドによりMacPortsを使ってインストールします。このような時、portsはすぐに作業を進められるので便利です。

sudo port install gnuplot

gnuplot以外に依存するソフトウェアが多くあったのでインストールには時間がかかりました。

gnuplotをインストール後、試してみるとどうも正常に動いているようですがグラフが描画されません。

よくわかりませんがメニューのOptionsPlot>Windowsの項目がMultipleになっていたためのようです。Embeddedにしたら描画されましたがウィンドウのサイズをあらかじめ小さめにしておいた方がきれいに描画できそうです。

以上、3Dのグラフも描けマウスでぐりぐり動かすこともできました。後はTeXの出力を使って数式処理ソフトらしく見せればよさそうです。ま、そこまでしないと思いますが^^;

使ってみて気がついたことがあったら報告してみたいと思います。

MacPortsを使ってMaximaをインストールする[070808]

MacPortsを使おうと思ったのは、実はこのMaximaをインストールしようと思ったからです。Maximaはフリーの数式処理ソフトでベースでCommon Lispを使っているところがおもしろいなと思い試してみることにしました。

MacPortsのWikiのページから次のUsingMacPortsQuickStartのページに一通り使い方が書いてあります。

http://trac.macosforge.org/projects/macports/wiki/UsingMacPortsQuickStart

ここも簡単に説明しておきます。詳細についてはこのページを見てください。

1.セルフアップデート

次のコマンドをターミナルで実行します。

sudo port selfupdate

2.portsを調べる

目的のソフトウェアがportsにあるかどうか調べるには次のようにコマンドを実行します。この例ではmaximaについて調べています。

port search maxima

3.portsを使ってソフトウェアをインストールする

次のようにコマンドを使ってみました。

sudo port install maxima

依存するソフトウェアも同時にインストールされます。場合によってはインストールするソフトウェアが多くなり、時間がかかることがあります。何をやっているか見たい時は-vオプションをつけて実行すると経過が表示されると思います。試していませんが^^;

4.インストールされたかどうか確認する

port installed

インストールされたソフトウェアのリストが表示されます。

以上ですんなりインストールが完了します。

MacOSXのMacPortsを試す[070808]

MacOSXも基本はFreeBSD系のOSですからportsの恩恵を受けることができます。portsとはソフトウェアを管理するためのシステムみたいなもので、portsを更新しておくことで常に新しいバージョンのソフトウェアに対応することができます。

portsを使ってmakeしインストールすることで、自分でいちいちソフトをダウンロードしたり、余計な作業をすることなく気持ちよく作業を行うことができます。

でこのようなシステムとしてFink、DarwinPorts、MacPortsなどがあります。自分がインストールしたいソフトウェアに関しIntel Macへの対応はFinkの情報ではunstableのものが多そうなので、DarwinPortsを使うことにしました。

Finkのホーム
http://www.finkproject.org/index.php?phpLang=ja

どうもDarwinPortsはバージョンが1.5となることで名前がMacPortsとなったようです。

MacPortsのホーム
http://www.macports.org/

MacPortsのバージョン1.5をダウンロードしてインストールすればいいのかと思いましたが、あらかじめ確認しておくことがいくつかあります。

インストール、使い方に関する情報はWikiの方にまとめてあります。

http://trac.macosforge.org/projects/macports/wiki

その中からMacPortsのインストールは次のページにあります。

http://trac.macosforge.org/projects/macports/wiki/InstallingMacPorts

詳細は各ページ(英語です)を見てもらうことにして簡単に手順をまとめてみます。

1.Xcode Toolsの最新版をインストールしておく。ただし、1.4Gぐらいあるのでダウンロード環境が整っていないとかなり時間がかかることになります。

2.X11をインストールする。Macを買った時に付いてくるMacOSXインストールディスク1のOptional Installsというパッケージを実行してインストールします。これはこの時のバージョンでよさそうです。

3.環境変数を設定する。bash shellを使っているものとして、ユーザディレクトリの.profileというファイルに次のように設定すると書いています。すでに何らかの設定をしている方は参考にして環境変数の文字列を追加することになります。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export DISPLAY=:0.0

それからアプリケーションのユーティリティフォルダに入っているターミナルを起動してenvコマンドにより今設定した環境変数の確認を行います。

4.同様にユーザディレクトリの.profileに環境変数EDITORを設定します。例ではpicoを設定していますが好きなエディタでいいんじゃないでしょうか。私はvimにしておきました。

export EDITOR=/usr/bin/pico

それから/etc/X11/xinit/xinitrcに一行追加します。エディタを使って開きますが、sudoコマンドにより次のように実行しないと書き換えることができません。

sudo vi /etc/X11/xinit/xinitrc

パスワードを聞いてくるので入力しエディット画面に入ります。

次の一行を先頭の2行のコメント(#で始まる行)の次あたりに書いておきます。

source ~/.profile

エディタを終了しますが、viの場合wq!で終了することになると思います。

さらにユーティリティフォルダに入っているX11を起動してメニューのアプリケーション>メニューのカスタマイズの順にクリックします。

メニュー名ターミナルのコマンド名のところをクリックして次のように変更します。

xterm -ls

5.それからMacPortsのバージョン1.5をダウンロードします。バイナリーパッケージで十分でしょう。リンクがあるのでそこをクリックして必要なものをダウンロードします。

私の場合MacPorts-1.5.0-10.4.dmgをダウンロードし、後は解凍後、パッケージをインストールしました。

6.それからportsのアップデートを行うためにターミナルで次のコマンドを実行します。

sudo port selfupdate

以上でMacPortsのインストールが完了します。次はMacPortsを使ってソフトウェアをインストールしてみましょう。

MacOSXのDrSchemeでグラフィックスを試す[070807]

そもそもは以下のようなチュートリアルがあるのがいけないのです^^;

http://pre.plt-scheme.org/docs/html/quick/index.html

これによればDrSchemeを起動した時に上のDefinition Areaに

#module slideshow

として実行すればpicture libraryが使えるということでした。

しかし、いろいろ試してもそんなものはないというエラーが出てきます。例えばcircleという関数は未定義というようにエラーが出ます。

このチュートリアルをよく読めば将来実現するかもとあるではありませんか。まだ実現されていないもののようです。

ところがネット上では同じようなことをやっている人がいるもので次のページに答えがありました。

http://groups.google.com/group/comp.lang.scheme/browse_thread/
                             thread/61ebf04205962dc5/c21eef74c93f1f87

それによれば言語にPretty Bigを選んでDefinition Areaに次の一文を書いて試してみろとありました。

(require (lib "slideshow.ss" "slideshow")) 

確かにうまくいきます。

MacOSXのEmacsでmzschemeを使う[070807]

DrSchemeのMacOSXのIntel版を試しています。DrSchemeはグラフィックスも扱えるようです。その前に以前インストールしたGnu EmacsでDrSchemeに入っているコマンドラインバージョンのmzschemeを動くようにしてみました。

要は各ユーザのホームディレクトリにある.profileでPATHの設定をmzschemeが使えるように変更します。

まず変更前は次のようになっています。この部分は各人それぞれ違います。

export PATH=/opt/local/bin:$PATH

そしてmzschemeまでのPATHを追加しました。

export PATH=/opt/local/bin:"/Applications/PLT Scheme v370/bin":$PATH

そしてEmacs側でmzschemeを使えるように、各ユーザのホームディレクトリにある.emacsに次の文を追加しました。ここも各人設定がいろいろしてあるかもしれません。場合によっては注意する必要があるでしょう。

(setq scheme-program-name "mzscheme")

それでEmacsを起動しEsc+xキー入力後、続けてrun-schemeとタイプすることで取り合えず実行することができました。

今日も暑いです^^;[070807]

仙台らしくない暑さが続いています。七夕では暑さで具合の悪くなった方もいるようです。今年はホント暑すぎです。

休みに入ったことだしページの更新もちびちびやっていこうかなと思います。

iMacにメモリを増設[070505]

iMacのメモリを1Gから2Gに増設しました。標準で512MB2枚入っていたものを1GB2枚で交換しました。メーカはI-O DATAで1GB、2万弱です。

メモリを増設する時はiMacの下部を開いて交換します。マニュアルどおり液晶画面を下にして交換しますが、この時座布団みたいなものを下に敷いておいて液晶にきずがつかないようにします。

メモリを挿しているときにちょっとヘマをやってしまいました。メモリを挿す時にはスロットの区切りに合わせて挿します。この区切りに合わせて1枚目はメモリを正しい向きに挿しましたが2枚目は表裏反対に入れてしまいました。つまり区切りに合っていません^^;

なんか入りずらいなと思いつつ押さえのレバーをぐいとおすとバチンといって入った感じになります。電源をONにするとiMacは起動しません。スリープ時に転倒する前面下のランプが短い間隔で点灯します。

メモリを取り出して上記のことに気がつきました。でもこんな乱暴なことをしてもメモリやスロットが壊れなかったのでほっとしています。

気を取り直してもう一度挿しなおします。電源をONにするとまたもや点滅です。見かけは壊れていないけど最近の部品は精密だからやはり壊れたのかなとちょっと心配になってきました。

しかし、あきらめてはいけません。もう一度挿しなおし今度は正しく刺さっているか自分の目でじっくり確認しました。今まではレバーがはまればきちんと刺さるものとマニュアルを信じていたのです。

よくよく見ると一方のスロットに挿したメモリが約1ミリほど出っ張っています。これかと思い手でしっかり押すとカシッと刺さった感触があります。これで電源をONにすると今度は大丈夫です。ファインダーの”このMacについて”のところに2GBと出ています。

ささいなことですがこんなことはよくあります。でも値段が値段だけに起動しない時はヒヤッとしますよね^^;

そして、あまった512MB2枚のメモリを使ってPCの自作を検討しています。それについてはまた後で書きたいと思います。

Ubuntuに関する記事を始めました[070420]

UbuntuはLinuxのディストリビューションの一つです。今回、大学院の授業で使ってみることにしました。また、授業をサポートするためにSONY VAIO PCG-C1XGにUbuntuをインストールしてみました。

限定した話になりそうですがUbuntuに関わる話を紹介したいと思います。まとめた記事はページ左側のメニューからUbuntuに関する記事をクリックしてご覧ください。

新学期が始まりました [070405]

トップのページはひさしぶりの更新です。これもParallelsに関する記事の方に力を入れていたためです。それとさっぱり進みませんが今年度のテキスト作りをやっていました。4月に入ってからインターネットで一部公開していく予定です。

掲示板にも投稿したように基本的に先生のページに力を入れていくことにしました。今まで自分ばかり書いているのでこれって掲示板とは違うのではという違和感を覚えていました。この点に関してはかつて院生からも指摘されていました。ちょっと鈍かったようです^^;これで気持ちがふっきれて自分のページ作りに専念できそうです。

なんかブログの日記みたいになりそうです。ブログなんかとケチをつけていたくせに、時代の流れに負けたというような感じです^^

Parallelsに関する記事をまとめました [070216]

iMacを買ってからParallels Desktop for Macに夢中です。MacでWindowsが利用できるわけですからこんなにおもしろいことはありません。今までWindowsマシンでやっていた仕事はParallelsを使ってMacで行っています。後は3Dが可能になればゲームもできるし、テキスト作りでDirectXを試すのにわざわざWindowsマシンを起動する必要がなくなります。

まとめた記事はページ左側のメニューからParallelsに関する記事をクリックしてご覧ください。

年明けて、ページ更新です [070216]

後期の授業のテキストの準備、採点評価、入試、就職活動支援などの様々なスケジュールもひと段落しページを更新するための余裕ができました。まずは来年度の担当科目の紹介からアップしていきます。

今年はのんびり、しかし確実に更新していきたいいなと考えています。

グルーなプログラミング [060815]

グルーとはにかわでくっつけることのようです。プログラミングでグルーというと、あるプログラミングの結果、出力されたデータをグラフで表現したいことがありますが、このような時にちょこっとプログラムを追加するだけで目的を達成できるようなことを意味しているものと思われます。

この実例として下記のページが参考(このページの数値計算とプロットを見てください)になります。Pythonを使用していますが、まず数値計算を行い、その結果を外部コマンドとしてgnuplotに渡すことによりグラフの作成を簡単に行っています。ページを見てわかるように、それだけの結果を出すのに要するプログラムの行数が少ないことに驚かされます。

http://www.otacky.jp/python.html

ところでPythonはそれ自体おもしろい言語ですが、さらにおもしろい言語にRubyがあります。いつもPythonにするかRubyにするか悩んでいます。今回もこのページを見てPythonに流れかけましたが。Rubyでもまねっこできるんじゃないかと思い踏みとどまってRubyで考えてみました。これについては先生のページのRubyプログラミングのところに書いておきたいと思います。

Rubyでも同様のことが実現できます。結局はパイプを使っているのでUNIXやMSDOS時代のフィルターのプログラミングが高級になったような感じがします。少ないプログラムで最大限の効果を引き出すようなプログラミングってかっこいいですよね。

それと2006年に入りRuby on RailsがきっかけになりRuby関連の本が出版されています。これからも続々出てきますが、すべて洋書というのが残念なところです。それだけスタンダードな言語になったということなのでしょう。

オブジェクト指向プログラミングについて思うこと [060815]

今年の前期にJavaを使ってまず、普通にプログラミングの練習を行ってから、オブジェクト指向プログラミングについて練習しました。前半はさほど抵抗なくプログラミングを楽しんでいるようでしたが、オブジェクト指向の説明を始めた途端に理解に苦しむ学生が増えたように思えました。

つまり、プログラミングの能力はある程度あるのですが、さらにオブジェクト指向でプログラミングする理由付け、動機が希薄なため興味がわかなかったものと思われます。自分でクラスを設計しても役に立たないものが多いわけですから、作る意味があまり感じられないのかもしれません。

また、すべてのプログラマがクラスを設計する必要はないんじゃないのかなと考えています。設計するレベルの学生はある程度プログラミングの経験がないとクラスを設計する意味がわからないかもしれません。そこで、次回からは既存の有用なオブジェクトを使って自分のプログラムを充実させることに主体を置いた実習を準備しています。

確かに現状では様々なフレームワークが作られ利用されていますが、同様にクラスを作る側と利用する側に分けて、実習を用意する必要があるものと考えています。願わくはクラスを作りたいと思う学生がたくさん出てくるようなテキストを作りたいなとも考えています。

また、ページ更新の時期です^^ [060815]

前期の授業も終わりほっとしています。雑用も増えてなかなか先生のページの更新にも手が回りませんでした。ただしゼミのページや学内用の授業用のページは充実させたと思っています。

今年からテキストをプリントで配布するのをやめてすべてページで提供しています。前期だけで5教科分作りました。後期もそれぐらいのページを作っていきます。学内用で非公開のものもありますがゼミで使用したものは公開していくので、もし何か気がついたところがあったら教えてください。

ゼミ用としては今のところRubyを使用したプログラミング、CかC++でOpenGLを使用したプログラミングを予定しています。これらについては公開する予定でいます。

それと高校との連携で去年から行っている講義というものがあって、内々でページで公開しているものがあります。それもゼミのページに置いておく予定です。内容はオライリー版のKnoppixの使い方に関するものです。KnoppixとはCD-ROMから起動するLinuxとでも考えてください。

東北学院大学ではオリジナルのKnoppixを配布しています。石巻専修大学では一昨年、経営の院生にプロジェクトを押し付けましたが途中で挫折してしまいました。今年度は理工でプロジェクトを考えているようですから、そのうち石巻専修大学オリジナルのKnoppixが配布されるものと思われます。

こんな感じでまたページ作りに没頭しそうです。今年は先生のページ自体の更新は少ないかもしれません^^;。書ける内に書きこんでおこうかな。

スタイルシートでページ刷新です [060314]

今まで、tableタグ中心にページを構成してきましたが、divタグで構成することにしました。スタイルシートのおかげですね。これも授業に使えそうです。

tableタグでページを作っていた時にrubyを使ってページを出力していましたが、divタグの変更時にもちょいちょいと変更するだけですみました。divタグとスタイルシートの組み合わせはページの出力時に威力を発揮しているようです。

スタイルシートはMacromediaのDreamweaverのテンプレートを参考にして自分用にアレンジしています。今回、簡単にページの効果を時間もかけずにできたので驚いています。それと、やはりタグの知識が必要だと思いました。

ちょっと、FATで悩んでました [060312]

7日に紹介したOS自作入門で遊んでいます。Rubyなんか使いながらイメージファイルを作ったりしています。ところで、イメージファイルを作っている時に16進数で200番地と1400番地にF0、FF、FFと値を入れているのが気になってそれについて調べていました。

フロッピーディスクやファイルシステム関連の本は手元にないので、インターネットで調べることになりました。しかし、これがなかなか見つけにくいのです^^;。ファイルと関連していればすぐわかることなのですが、ひさしぶりにこのあたりの話に触れると見当をつけるのにも時間がかかってしまいました。イメージだからといっても、FDに書きこんだら同じフォーマットなんですから、FDのセクタ単位で考えれば問題はなかったのです。

結局、この三つのデータはFATの二つのクラスターの先頭に置くデータのようでした。F0が3.5インチ、1.44MBのFDを表し、続くFF、FFで使用中あるいは終わりを示しているようです。

参考になったサイトを紹介しておきます。まず、日本語ですがFATに関して具体的に説明されています。

http://gaku.s12.xrea.com/wiki/main.cgi?c=g&p=OS%2FFile+System%2FFAT

次に英語のサイトですが、具体的にわかりやすく解説されています。

http://hjem.get2net.dk/rune_moeller_barnkob/filesystems/fat.html

これは、ホントにささいな事ですが、やはり調べてみるといろいろ他のこともわかってためになりました。ただ、現在このような情報が書籍として見つけることが難しいようです。ま、売れないためだと思いますが。

OSの本2冊 [060307]

3月に入って2冊おもしろそうなOSの本を購入しました。

・OS自作入門、川合秀実 著、毎日コミュニケーションズ、2006、3800円

30日でOSを作ろうという、そのやる気の素晴らしい本です。オープンソースとはいえLinuxのようなソースコードを読むのはなかなか大変なものがあります。それよりはプロトタイプみたいなものがあってそこに必要な機能を追加していくとか、フロッピーから起動して何か簡単なことをやってくれる素のOSを作ったりして、実践的に学習していくことでOSの仕組みが理解できればいいなと考えています。この本にはその気概が感じられます。これからひまを見て試していこうかなと考えています。

・Operating Systems Design and Implementation 3rd Edition、Andrew S. Tanenbaum and Albert S. Woodhull、Pearson Education、2006、約9000円

こちらは、世界的に定評のあるMINIXの本です。ついに第3版が出版されました(ただし洋書です)。ターゲットとするマシンはPentiumとなり、IDEのHDD、CDROMを対象としています。実際にソースコードを見ながらOSについて学習していくのですが、教育用とはいえ約400ページのソースコードを読むには根気が必要です。やはり読み方に注意する必要があるように思えます。OSとしての基本的な機能を実装しています。

OSもPC主体からケータイのような小型の機械に実装されるのがメインとなり、さらにナノテクノロジーの分野やロボティクスの分野で活用されるようになってくるでしょう。そして、分散化が進み現在のOSの概念は過去のフレームワーク用のOSのように陳腐なものになってくるかもしれません。その次世代のOSが将来生まれるためにも、自分が将来予想するコンピュータのモデルを考えるとともに、そのコンピュータに実装するOSを自分で作って試していくような姿勢を身に付けていく必要があるように思えます。ま、力を入れるのはここまでで、OSっていうものが簡単に試せるようになるといいですね。

Rubyプログラミングを始めるよ [060306]

Rubyを使ったプログラミングについてページを作っていきます。取りあえずラフに作っていきますので、読んでくれる方がいて、何かありましたらゼミの掲示板に書き込んでくれるとかメールなどで教えてください。あんまりCoolなことはやりませんので期待しないでくださいね^^;。

ページの更新始まるよ [060303]

Rubyを使ったページ更新が順調に動くようになりました。ただし、先生のページ専用ですけどね。これを使うと、簡単なルールを使ってテキストを追加するだけでページを作ることができます。このルールは不精な私でも何とか使えそうなルールです^^;。

これでページの更新でいろいろ悩む必要がなくなりそうです。今年はページを充実させていきたいと考えています。

春はページ更新の季節かな[060228]

何度かページの更新にチャレンジしてきました。2004年はantなんか使って果敢に挑戦してみたもののやはり素のページしか作れなかったんですね^^;。

そして一年おいて2006年度はrubyを使ってページ更新に挑んでいます。今度こそページ更新が続いていくことを期待しての挑戦です。

なんでRubyかというと、どうもPerlもバージョンが上がってオブジェクト指向くさくなってきましたし、世間ではRuby on Railsなどというフレームワークに人気が出ているようです。しかも、GUI開発環境においてwxWidgetsと呼ばれるライブラリがあるのですが、これをサポートしているwxRubyというものがあり、GUI開発環境も楽しめそうなことがわかったからです。

今回のページ更新システム(そんな大げさなものじゃないけどね)でも作りながらRubyについて説明していこうかなと思います。