MacBook Pro / Battery Life

MacBook Pro の仕様 のページに、バッテリー駆動時間が発表されてた。 17inch は 5.5時間かー。

MacBook Pro の仕様 のページに、バッテリー駆動時間が発表されてた。
17inch は 5.5時間かー。PowerBook G4 に比べると若干短い?
そしてとうとう、PowerBook は 12inch だけになってしまいました…

MacOS X で空きメモリ容量を取得

MacOS X の top とかで表示される空きメモリ容量を、自分のプログラムからシステムコールとか使って取得したいなー、と思ってたのだけれど、どうも sysctl ではダメらしい。で、いろんなフリーのツールのソースを読んだりしてびびっときたのが host_statistics() というやつだ。Mach のシステムコールらしい。

直接参考になったのはこれ。ユーザランドは BSD だけど、カーネルは Mach なんだよなー、なるほどなー、という感じだ。

C のプログラムにするとこんな感じ。

#include <stdio.h>
#include <mach/mach_init.h>
#include <mach/host_info.h>
#include <mach/mach_host.h>
int main(){
vm_statistics_data_t page_info;
vm_size_t pagesize;
mach_msg_type_number_t count;
kern_return_t kret;
pagesize = 0;
kret = host_page_size (mach_host_self(), &pagesize);
count = HOST_VM_INFO_COUNT;
kret = host_statistics (mach_host_self(), HOST_VM_INFO,
(host_info_t)&page_info, &count);
if (kret == KERN_SUCCESS){
unsigned int pw, pa, pi, pf;
pw = page_info.wire_count*pagesize;
pa = page_info.active_count*pagesize;
pi = page_info.inactive_count*pagesize;
pf = page_info.free_count*pagesize;
printf("wired %d\n", pw);
printf("active %d\n", pa);
printf("inactive %d\n", pi);
printf("free %d\n", pf);
}
return 0;
}

実行すればこうだ。

% ./a.out
wired 136630272
active 330928128
inactive 348598272
free 526020608

めでたい。FreeBSD では sysctl でいけるんだけど、Linux は procfs みるしかないのかな?

MacOS/ppc でコンパイル時に 32bit と 64bit 環境を識別

#if defined (__APPLE__) && defined (__ppc__)
printf("ppc32\n");
#endif
#if defined (__APPLE__) && defined (__ppc64__)
printf("ppc64\n");
#endif

こいつを gcc -arch ppc -arch ppc64 hogehoge.c とかしてコンパイルしてやると、32bit な環境と 64bit な環境ではちゃんと違った表示になる。ちなみに、__APPLE__ は、__linux__ とか __FreeBSD__ と同等の識別子、だと思う。

expat

理由はめんどくさいので秘密なのですが、自分が /usr/local/lib にあることを主張しない libexpat.dylib がほしかったので、ちょっとやってみた。テキトウに ./configure –prefix=(/usr/localでない、そのへん) したあとで、
% vi libtool
-archive_cmds=”¥$nonopt ¥$(test ¥¥¥”x¥$module¥¥¥” = xyes && echo -bundle || echo -dynamiclib) ¥$allow_undefined_flag -o ¥$lib ¥$libobjs ¥$deplibs¥$linker_flags -install_name ¥$rpath/¥$soname ¥$verstring”
+archive_cmds=”¥$nonopt ¥$(test ¥¥¥”x¥$module¥¥¥” = xyes && echo -bundle || echo -dynamiclib) ¥$allow_undefined_flag -o ¥$lib ¥$libobjs ¥$deplibs¥$linker_flags -install_name ¥$soname ¥$verstring”
% make
% make install
としてやればよい。
otool -L (つまり ldd) で見ると、こんな感じだ。
% ldd ../expat/lib/libexpat.dylib
../expat/lib/libexpat.dylib:
libexpat.0.dylib (compatibility version 6.0.0, current version 6.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.1.5)

きょうのコンパイル

Hackathon で泥沼 (泥縄かも?)
swig-1.3.29
% ./configure ; make
xerces-c 2.7.0 (/usr/local 用ではない)
% cd xerces-c-src_2_7_0
% setenv XERCESCROOT ${PWD}
% cd src/xercesc
% vi Makefile.incl
– LD_SONAME = -install_name ${PREFIX}/lib/${SO_NAME}
– LD_SODEPDOM = -install_name ${PREFIX}/lib/${SO_DEPDOM}
+ LD_SONAME = -install_name ${SO_NAME}
+ LD_SODEPDOM = -install_name ${SO_DEPDOM}
% ./runConfigure -pmacosx -nnative
% make
libsbml-2.3.4
./configure –with-xerces=`pwd`../xerces-c-src_2_7_0 –with-java=/usr –enable-layout –with-swig
make
こけました。swig が新しいとダメみたいです。1.3.25 あたりがよさそう。

Setting up MacOS X

MacOS をインストールするときに入れるものチェックリスト- Growl (いろいろ通知してくれるツール)- DesktopManager (仮想画面ユーティリティ)- Skype- 買わなきゃ:- ecto の追加ライセンス- proteus の追加ライセンス- iLife ’06 family Pack- ATOK… どうしよー。

MacOS をインストールするときに入れるものチェックリスト
+ .Mac のアカウント設定
+ Growl (いろいろ通知してくれるツール)
++ HardwareGrowler, GrowlTunes (Growl のおまけでついてる)
++ MacBiff (IMAP+Growl な biff)
+ DesktopManager (仮想画面ユーティリティ) : ログイン時起動リストに登録
+ Skype (IP telephone)
– Microsoft Office:mac (Office Suite)
+ Microsoft VirtualPC (PC/AT Emulator)
+ SSH Agent (ssh-agent の GUI: Keychain 対応)
+ Eclipse (統合開発環境)
+ stuffit expander (archiver)
– iWork ’05 (Apple な office suite)
– iWork ’06 (Apple な office suite)
+ X11
+ XCode Tools
+ /usr/local 以下一式 + Emacs (Unix)
買わなきゃ:
– ecto (blogging): ライセンス +1
– proteus (instant messaging): ライセンス +1
– iLife ’06 family Pack: そのうち
+ ATOK2005 買った
コピーするファイル
+ ~/.{emacs,wl,folders}
+ ~/.ssh
+ ~/.{cshrc,xinitrc}
そのほか
+ shell を /bin/tcsh にしなきゃいや

今日のコンパイル

[xerces-c++-2.7.0 ]./configure だとうまくいかない感じ。 % setenv XERCESCROOT ${PWD}% cd src/xercesc% ./runConfigure -pmacosx -nnative -cgcc-3.3 -xg++-3.3 -P/usr/local% gnumakeなんか、最後に警告がいっぱい出るんですが…

[xerces-c++-2.7.0 ]
./configure だとうまくいかない感じ。
% setenv XERCESCROOT ${PWD}
% cd src/xercesc
% ./runConfigure -pmacosx -nnative -cgcc-3.3 -xg++-3.3 -P/usr/local
% gnumake
なんか、最後に警告がいっぱい出るんですが… 動くと信じよう。
[ libSBML-2.3.4 ]
% ./configure –with-swig –with-python –with-perl –with-java –with-xerces –enable-layout=yes
% make
xerces が怪しいのだけれど、なんかちゃんと動いてるみたいだ。
しばらくこのままテストしてみよう。

gtk+-2.8

glib-2.8.6atk-1.10.3cairo-1.0.2cairo は Quartz 対応してるのか。

がっつり更新。
基本的に ./configure ; make ; sudo make install ですな。
2.8 からは cairo が必要。
glib-2.8.6
atk-1.10.3
cairo-1.0.2
pango-1.10.3
cairo は Quartz 対応してるのか。
gtk-2.8.13
こいつだけ configure script を修正して実行。
vi configure
%s/-ltiff/-ltiff37/
%s/-ljpeg/-ljpeg62/
uim も作り直したが、どうせ同じフォルダにインストールされるので、意味なかったかも。

今日の再インストール

[ mlterm-2.9.2 (uim つき) ]./configure –prefix=/usr/local –enable-uim –with-type-engines=xft –with-imagelib=gdk-pixbufuim-mactsm はいろいろテスト中です。… uim-xim 経由で、tgif からも使いたいのだが、これはなんだかうまくいかない。

[ mlterm-2.9.2 (uim つき) ]
./configure –prefix=/usr/local –enable-uim –with-type-engines=xft –with-imagelib=gdk-pixbuf
uim-mactsm はいろいろテスト中です。Gtk+-2.x ではちゃんと動く。
uim-xim 経由で、tgif からも使いたいのだが、これはなんだかうまくいかない。
uim な mlterm ではちゃんと使えました。でもこれって何に役立つかな?
ていうか、Emacs で uim 使えればウハウハだな。のすけ師匠の uim.el 導入か?