YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

MacBook Airをついに発表!

ついに出た!Macworld 2008の実況テキストをじっと追っていたら,ついに噂の激薄MacBookが発表されたみたい.

10:14: It's got a 13.3-inch display, and it's LED backlit. It has the same built-in iSight camera as the other notebooks, and it's got what Jobs claims is a full-size keyboard, which is also backlit. The trackpad is "generous" and it has multitouch gesture support that expands upon the gesture support already present in Macbooks.

10:12: Jobs holds up the MacBook Air as flashbulbs pop. Well, I guess they don't really pop anymore. It's got a full-size keyboard, which is my perennial complaint with ultraportables.

10:11: Most ultraportable notebooks are around 3 pounds, with miniature keyboards and about a 11-inch to 12-inch screen. Jobs says Apple likes the weight goal, but says you have to make too many compromises. The Macbook Air is about half as thin as a Sony ultraportable model that he uses for comparison--0.76 inches at the thickest part, and just 0.16 inches at the thinnest. That's thin; it's so thin, it fits inside one of those office-to-office envelopes.

10:08: The rumors were true: "Today we're introducing a third kind of notebook, and it's called the MacBook Air. In a sentence, it's the world's thinnest notebook."

噂は本当だった!
f:id:ymotongpoo:20080116031330j:image

以下スペックらしきモノを拾ってみると

  • 13.3inch ディスプレイ (LEDバックライト)
  • iSight内蔵(今までのMacBookと同様)
  • フルサイズキーボード(バックライトつき.今までと同様)
  • でかいトラックパッド(噂どおり.マルチタッチジェスチャー対応.)
  • 1.8inch 80GB HDD (iPod Classicに入っているモノと同様)
  • 64GBのフラッシュメモリディスク(オプション)
  • Core 2 Duo(1.6GHz.1.8GHzに移行可?)
  • 例のごとくMagSafe
  • 802.11n規格ワイヤレスポート
  • Bluetooth 2.1
  • EDR
  • 光学ドライブはなし($99で追加可能)
  • 重量3ポンド(約1.36kg)
  • 2GB RAM
  • 標準価格$1,799(約19万7400円) 光学ドライブフラッシュメモリドライブを追加するといくらかは不明.

レートは日本時間1/16 3:30現在のものです.このスペックでこの価格は安い!なによりかっこいい!

CORBAを使ってみる(インストール編)

動機

研究で急遽分散オブジェクト通信をする必要が出てきた上に,ちょうど過去にCORBAで作られたプログラムがあったのでそれを流用する形で行こうと思ったため.

方法

今回はMICO CORBAというライブラリを使ってCORBA環境を構築します.動作要件は下記の通り.

C++コンパイラGCCなら3.2以上)
flex 2.5.3(オプション)
bison 1.25(オプション)

Cygwinでこれらのパッケージは追加してあるので要件は満たしています.次にMICO CORBAのサイトからソースをダウンロードしてビルドします.

# wget http://www.mico.org/mico-2.3.12.tar.gz
# mv mico-2.3.12.tar.gz /usr/local
# cd /usr/local
# tar xzf mico-2.3.12.tar.gz
# cd mico
# ./configure
# make
../include/mico/os-misc.h:286: error: declaration of C function `int
gettimeofday(timeval*, timezone*)' conflicts with
/usr/include/sys/time.h:73: error: previous declaration `int
gettimeofday(timeval*, void*)' here

あら,エラーが出てしまった.どうしてだろう?とりあえず /usr/include/sys/time.h を見てみる.するとこんなコードを発見した.

struct timezone {
  int tz_minuteswest;
  int tz_dsttime;
};

これって"tzcode: The time zone package"ってやつと関係あるのかな?それをUninstallしたいけど,coreutilsと依存関係があるしなぁ.とりあえず分からないんで./include/mico/os-misc.hの286行目にあるgettimeofday関数をコメントアウト.この部分ですね.

#ifdef __CYGWIN32__
extern "C" int gettimeofday (struct timeval *, struct timezone *);
#endif

でもってもう一度makeする.

# make
(略)
make[1]: *** [libmicoir2.3.12.dll] Error 1

落ちやがった!今度は逆にさっきのコメントアウトを戻して,/usr/include/sys/time.hの73行目をコメントアウトする.この部分.

int _EXFUN(gettimeofday, (struct timeval *__p, void *__z));

これでもう一度makeしてみる.

# make
make[1]: *** [libmicoir2.3.12.dll] Error 1

ダメだ!なんかやたらundefined reference to xxxが出て死んだ.落ち着け,俺.とりあえずここでREADMEを読んでないことに気が付く.(遅い)しかし根本的な解決方法は見つからず,普通にconfigure, make, make installをしろとしか書いていない.とりあえずFAQ見て環境変数を設定してみる.

export PATH=/usr/local/gcc/bin:$PATH
export CXXFLAGS=-L/usr/local/gcc/lib
export LD_LIBRARY_PATH=/usr/local/gcc/lib:$LD_LIBRARY_PATH

これでmake通らなかったらもうしらないや.…で,結果だめ,と.もう一度手順をおさらいしてみよう.今までは./configureをした後にmakeして,そこでファイルを書き換えていた.そこで今度はファイルを書き換えた後に./configureをしてみることにした.変更箇所は上と同様/usr/include/sys/time.h.

# ./configure
# make
# make install
(略)
make: ldconfig: Command not found
make: [install] Error 127 (ignored)

このエラーは想定済みなので,これにてインストール完了!長かった….Macworld 2008の実況が無かったら確実に寝てた.

参考

ここではすんなりインストールが完了しているのが非常にうらめしいです.

まとめ

やっぱりうまくいかない時はうまくいかない.でもだましだまし動かしてみると意外とうまくいく.

テンプレートをヘッダファイル外で定義する

動機

普通テンプレートはマクロと似たような扱いを受けるので,通常はヘッダファイルに書くことになる.しかし,見た目は関数なのにヘッダファイルに書くというのがどうも気持ちが悪くてソースファイルに書くことができないのかなと思ったのがきっかけ.

方法

意外にもWikipediaに情報が載っていた.exportというキーワードを使ってテンプレートをソースファイルに書くことができるようである.つまり

  • test.h
template <typename T> void func(std::vector<T>& container, T obj>
  • test.cpp
export template <typename T> void func(std::vector<T>& container, T obj>
{
    container.push_back(obj);
}

くそみたいな例ですみません.ただしexportをサポートしているコンパイラは少なく実際にGCCでは使えません.実際に使ってみると,

warning: keyword `export' not implemented, and will be ignored

と警告が出て実際には実装の部分は無視されます.

感想

やっぱりtemplateは見た目が実装だから,なんとなくソースファイルに書いておきたい気持ちが収まらない.けどまあ,別にtemplateと分かっていたら始めからヘッダファイルを見るだろうし,気持ちの問題な気がするなぁ.inlineってキーワードがあるんだからexportをサポートしてもいいと思うんだけど.

まとめ

templateはヘッダファイルに書きましょう.

メモリ増設その後

昨日メモリを購入して早速ThnkPad X60sとMacBookのメモリを増設しました。別に格段早くなったというわけではないのですが、複数のアプリケーションを同時に立ち上げているときの動作がはやり軽快ですね。しかしこの環境でLinuxを走らせたらもっと早いんだろうなぁ。
とりあえずこれで当面自分の環境に施すことはなくなった。あとは修論研究をばんばん進めるのみ!