2011年10月24日月曜日

I-O DATAのGigaBit Ether USBアダプタをLionで使う

MacBook Air用にGbEのUSBアダプタが各社から出ている。

そして、いずれもSnow Leopardまでの(32bitモードでの)対応となっている。

しかし、いずれも同じ台湾のASIX(亞信電子社のチップAX88178を使っているようで、チップメーカーから直接ドライバをダウンロードすればLionでも動く。

ちなみに僕がはまったのは、I-O DATAのETG3-US2だ。

Linux用、Windows各種用もここから最新のものをとってくればいいのではないだろうか。

Macの場合、まぁいまどきのUNIXなのでkextなのだが、場所は

/System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns/AX88178.kext
にインストールされるようだ。バイナリはi386, ppc, x86_64の3つのユニバーサルバイナリ。Tigerとかにも対応するためだと思う。

2011年10月21日金曜日

Node.jsが面白い

Node.jsは、よく「サーバサイドのJavaScript実行系」と言われるが、よく見ると、Google ChromeのJavaScriptエンジン「V8」を実行する処理系そのもの、といえる。

一般的な説明だけでは、「Apacheに組み込むのか? それともCGIとして実行するのか?」などの疑問が生じるが、生成されたコマンドnodeをただ実行してみると、プロンプトが出ることで、「つまりインタプリタそのもの」ということがわかる。

> 3+5
8
のような具合だ。JavaScriptのコマンドをそのまま受け取って実行結果を返してくる。

プログラムの実行は、ファイル名を引数として与えてやることになる。そして、プログラムのなかで、TCP/IPのサーバやクライアントとなるモジュールを使ったメソッドなどを書いて、それを実行してやることでWebサーバにもなれる、というわけだ。

http://nodejs.org/ のトップページにある1時間程度の講演が、すべてを物語っている。JavaScriptを多少なりとも触ったことがあるプログラマなら必見だと思う。

Macの場合、MacPortsにnodejsとnodejs-develの2つがある。後述するCalipsoは、0.4系のNode.jsでなければ依存するモジュールのバージョンが合わずインストールに失敗するので、nodejsのほうを入れてやることになる。

Node.jsをサポートするモジュール群は、Perlなどのモジュールと似たような管理をされていて、npmというコマンドで管理することになる。といっても、npmは内部でnodeを呼び出しているので、実際にはJavaScriptが動いているということだ。

公式サイトでは、curlを使って直接ソースを取得してインストールする方法が紹介されているが、MacPortsでnpmをインストールするほうがなにかといいだろう。

Node.jsでサーバサイドJavaScriptがプログラムできるのなら、何か適当なサンプルになるものはないかと探したところ、CalipsoというCMSが開発されていることがわかった。CMSはバックエンドにデータベースサーバを持つが、CalipsoはMongoDBだ。MongoDBはいわゆるNoSQL(SQLでクエリしないデータベースサーバ)であり、JSONでデータのやりとりをするので、Node.jsにうってつけといえる。

問題は、今日現在、MacPortsにあるMongoDBはXcode 4.2ではコンパイルできないこと。というより、LLVM GCCに対応していないようで、clangでコンパイルが通らない。そこで、/usr/bin/{gcc,cpp,g++}を使うように、オプションを与えてportコマンドを実行するというkludgeがMacPortsのメーリングリストで紹介されていた。


sudo port install mongodb configure.cc=/usr/bin/gcc configure.cpp=/usr/bin/cpp configure.cxx=/usr/bin/g++
「configure.??=xxx」というオプションで、それぞれを指定するということができるようだ。実際、-vオプションをつけて様子を見ていたところ、clangやclang++が使われることもなく、見慣れたgccによるコンパイルが行われていた。

MacPortsなので、インストールしたMongoDBは、port load mongodbコマンドで起動してやることになる。そのあとで、Calipsoのサイトにあるように、Git cloneしてソースを取得し、npm installすればよい。実行は、node  appでとりあえず、コンソールにログが出る形で試すことができる。ポート番号は3000番になっているので、ブラウザから適当にhttp://127.0.0.1:3000/などとして開いてみれば、動作していることがわかる。

というところまでやったのだが、あとが続かない。とりあえずきょうはここまで。

2011年10月18日火曜日

MacPorts vs. Xcode 4.2

As all whom upgrade Xcode on Lion to version 4.2 suffered a devastating problem, the dramatical change of new Xcode 4.2 is not compatible with past-installed MacPorts binary.

If you meet the problem of MacPorts in configuring, or building, then please try

port upgrade --force installed

first before "port selfupdate".

This command let the MacPorts recompile everything already installed in your Mac.

You may remember when you upgraded your OS to Lion, the MacPorts recompile everything with Xcode 4.1.  This is the same as that time because the compiler configurations are dramatically changed between Xcode 4.1 and 4.2.

Then, you may do "port selfupdate && port upgrade outdated".  Everything must be OK.

----Japanese below:

MacPorts利用者で、Lion 10.7.2とともにXcode 4.2に変更した方は、MacPortsが奇妙な挙動をするのにお困りと思います。

  • upgradeの際、configureが文句を言う
  • 新たにinstallするものがコンパイルできない
  • その他

これは、Xcode 4.2で標準コンパイラが完全にLLVMに移行したことによるものです。

既存のバイナリはXcode 4.2でコンパイルしたバイナリとの互換性がないので、上記のようないろいろなトラブルが発生します。

そこで、まず最初にすべてをリコンパイルしましょう。これは、Snow LeopardからLionにアップグレードしたときに、Xcode 4.1がMacPortsのバイナリをリコンパイルしてくれたのと同じです。

コマンドは、
port upgrade --force installed
です。selfupdateしてしまった人は、outdateなものをいったんuninstallする必要があります。

いったんすべてリコンパイルすれば、問題は解消するはずです。