2005年4月10日

MacOSXで環境変数を設定する

VMwareのBIOSの分際でおちるWindows XPに辟易として、 先日からMacOSXに乗り換えました。 まあ、Windowsを完全に避けて通ることはできないので、 両刀ということにはなるかと思いますが、メインの生活環境を移したということで。

さて、ログインしたらセッション・グローバルな環境変数を設定したくなります。 たとえば、DISPLAYなんて設定したくなりますね。 そんなときには、~/.MacOSX/environment.plistに書くようです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
                      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>DISPLAY</key>
        <string>localhost:0.0</string>
        <key>XAPPLRESDIR</key>
        <string>/usr/pkg/lib/X11/app-defaults</string>
</dict>
</plist>

2005年11月25日

MacOS Xでldd

調べてもすぐに忘れてしまうのでメモ。

otool -L

2005年12月 7日

MacOSXでisoイメージを焼く

これまたよく忘れるのでメモ。

graffiti:~[505]% hdiutil burn i386cd.iso
ディスクに書き込むデータを準備中
セッションを開いています
トラックを開いています
トラックを書き込み中
............................................................................
トラックを閉じています
............................................................................
セッションを閉じています
..............................................................................
ディスクの作成を終了中
ディスク作成の検証中...
検証
...............................................................................
ディスクの作成は問題なく完了しました
...............................................................................
hdiutil: burn: completed
graffiti:~[506]%

ってかんじ。

2005年12月 9日

Gtk on MacOSX

Imedio ABってところが、Gtkのポーティングを始めたらしい。 噂は聞いてたんだけど、すばらしいことですな。 これでetherealつかえるよー。

2006年1月26日

Quartz2DExtreme

MacOSXユーザの中では、まあ知らない人はあまりいないと思われる、 Quartz2DExtremeを有効にするための技。

defaults write /Library/Preferences/com.apple.windowserver Quartz2DExtremeEnabled -bool YES

しかしついにやって参りました、システムクラッシュ。 100%再現する手順を見つけてしまったので、 これはさすがにちょっと使えない。 というわけで、無効にしました。

2006年2月21日

Carbon Emacs

久しぶりにCarbon Emacsを更新したら、いまいち調子が悪い。 WanderlustでPluggedなときにSuspendすると、 ResumeしたときにEmacsがささる。しくしく。

ちなみに、毎回コンパイルの仕方を探し出すのも大変なのでメモ。 使うパッチは以下の通り。

  • hide_menubar
  • inline-patch
  • transparency2

適当にパッチをあてたら、

$ CFLAGS="-DUSE_ATSUI" \
    ./configure --without-x \
    --enable-carbon-app=/Applications \
    --prefix=/Applications/Emacs.app/Contents/Resources
  …
$ make
  …
$ cd lisp
$ make recompile EMACS=../src/emacs
  …
$ cd ..
$ make
  …
$ sudo make install
  …
$

という感じで。

2006年3月10日

Intel MacでVMware???

Mac OS X使いならほとんどの人が読んでるであろう、海上さんの「OS Xハッキング」ですが、Intel Mac強化計画 〜 Intel MacでVMwareが動いた!!なんて記事があったので、うひょーと思ってみてみた。 つくってるのではないかという噂だけ微妙に流れたVMware for Mac OS X(Intel)が、 早くも動き出したのか???

結果はまあ、みていただければわかるんですが、KNOPPIXの上でVMwareってことらしい。 海上さんも冒頭で書いてるけど、これ単に趣味の領域じゃん。わけわからん。 LinuxでVMware動かすんだったらPC/ATでやればいい話でしょ。

2006年3月17日

Intel MacでWindows XP

注目していたWindows XP on an Intel Macプロジェクトですが、 遂にWindows XPとMac OS Xのdual bootに成功したようです。 すばらしい。

2006年3月20日

libpq.dylib: No such file or directory

話に聞くところでは、MacOS X使いでパッケージシステムにpkgsrcを使っているひとは、 相当少ないらしい。NetBSDから移ったひとでさえ「なんでpkgsrc?」とまで云うありさま。 その中には、その昔、*BSDで統一的なパッケージシステムを目指してたひともいるはずなのに、 なんなんでしょうね。あがっちゃったということでしょうか。

それはさておき、やはりNetBSD以外で使おうとすると問題が多いことも確か。 たとえば、databases/postgresql80-clientもすんなりとはコンパイルが通りません。

で、ちゃんと追いかけてないので、だっさいworkaroundなんですが、 とりあえず動かないと困るひとも多い(かもしれない)ので、メモ程度に。

# cd work/postgresql-8.0.7/src/interfaces/ecpg/compatlib
# for i in ../../libpq/.libs/*.dylib; do
> ln -s $i
> done

ってなもんで。

2006年7月18日

Virtual PC Is Now Free!

Whether Microsoft virtualization technology is an important component of your existing infrastructure or you're just a Virtual PC enthusiast, you can now download Virtual PC 2004 absolutely free. Microsoft is also offering the free download of Virtual PC 2007, with support for Windows Vista in 2007.

へー。なんでもただにしないと戦えないんですなあ。

2006年7月28日

teTeX3とdvipdfmx

MacOSXでpkgsrcを使ってるのは物好きらしいですが、その物好きなわけです。 理由はいろいろあるんだけど、まあそこは今回の主題ではないので触れないことで。

で、いつだったかteTeXを3系統に更新しました。 バージョン2ではコンパイルのときにちょっくら細工をしないとだめだったんですが、 そういうこともなくなり快適…かとおもいきや、思わぬ落とし穴が。 dvipdfmxがまともに動かないのです。

これ、ちゃんと調べてませんが、おそらくpkgsrcがどうこうというよりは、 teTeX3ではちゃんと環境にあった設定をしろよって方針に変わったんですかね。 結論から書くと、設定がことごとくされてなかったと云うことです。 まず、

** WARNING ** Could not locate a virtual/physical font for TFM "rml".
** WARNING ** >> There are no valid font mapping entry for this font.
** WARNING ** >> Font file name "rml" was assumed but failed to locate that font.
** ERROR ** Cannot proceed without .vf or "physical" font for PDF output...

って怒られます。dvipdfmxではフォントはcid-x.map (pkgsrcでは/usr/pkg/share/texmf-local/dvipdfm/config/cid-x.map) に書かれてるんですけど、見事に空っぽ。 ってことで、お好みに応じてなんですけど、次のような感じに。

%% This file 'cid-x.map' is read by dvipdfmx for default
%% dvipdfmx.cfg setting.  Please append fontmap entries here.

rml  H Ryumin-Light
gbm  H GothicBBB-Medium
rmlv V Ryumin-Light
gbmv V GothicBBB-Medium

さて、これで万事解決かというとそういうわけにもいかず。

** WARNING ** No image converter available for converting file "xxxxx.eps" to PDF format.
** WARNING ** >> Please check if you have 'D' option in config file.
** WARNING ** pdf: image inclusion failed for "xxxxx.eps".
** WARNING ** Failed to read image file: xxxxx.eps
** WARNING ** Interpreting special command PSfile (ps:) failed.
** WARNING ** >> at page="4" position="(141.304, 552.345)" (in PDF)
** WARNING ** >> xxx "PSfile="xxxxx.eps" llx=0 lly=0 urx=1039 ury=612 rwi=103"

まーじで。teTeX2ではこんなことはなかったんだがなーとおもいつつ、 云われるがままにDオプションを確認するとdvipdfmx.cfg (/usr/pkg/share/texmf-local/dvipdfm/config/dvipdfmx.cfg) を確認すると(ちょっと長いので途中折り返してます)、

%% *Examples* for GhostScript (PS-to-PDF)%%
%% The following example decode all DCT (i.e., JPEG) encoded images
%% and then recompress images with Flate (zlib, same as PNG) encode
%% filter. If you are using recent version of gs, then please remove
%% -dAutoFilterXXXImages and -dXXXImageFilter.
%% /FlateEncode is introduced to avoid quality loss of "EPS JPEG"
%% images.
%%
%% Also note that PAPERSIZE=a0 is specified below. This convert PS
%% files (including EPS) to A0 papersize PDF. This is necessary to
%% prevent gs from clipping PS figure at some papersize. (A0 above
%% simply means large size paper)%%
%% GhostScript (Unix/Linux):
%D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 
  -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false 
  -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile=%o %i -c quit"
  (略)

全部コメントアウトされてるじゃん… ってことで、gsのコメントアウトをはずして、めでたしめでたし。 ちなみに、Windowsの場合はその次のgswin32cを使えばいいだろうし、 Acrobat持ってるひとはdistill使えばいいってことでしょうね。 MacOSXのAcrobatではDistillerを単独起動できなさそうなので、 まあgsを使って満足。

2006年8月 7日

VMware Virtualization for Mac OS X!

待ってました、遂に来た! VMware for Mac OS X! WWDCで発表されるんじゃないかと云われてますが、 ベータテスタの先行登録が始まってます。 これでだいぶ幸せになれそうだ!

ところでこの先行登録のページ、どこにもVMware for "Intel" Mac OS Xとは書いてないんだよね… PowerPCではエミュレーションするのかなあ。遅そう。

2006年8月16日

やっぱりコマンドラインでしょ。

MacOSXに対するイメージというか使い方は人それぞれだと思いますが、 個人的には、ちょっときれいなウィンドウ・システムを持った、 でもちょっと脆弱なBSDというイメージで使っています。 で、「ちょっときれいな」とか「ちょっと脆弱な」はここではひとまず忘れると、 やっぱりBSDなわけです。そうするとどうしてもターミナルでの作業が中心になりますね。

このような民生用商用OSでは、基本的にGUIでの作業が必須となることも多いですが、 MacOSXでは、

  • ソフトウェア・アップデート
  • ディスク・イメージのマウント
  • パッケージのインストール

なんかも、コマンドラインで処理できます。これはかなりうれしい!

ソフトウェア・アップデート

ちょっと脆弱なBSDであるところのMacOSXは、 Windowsに負けないくらい頻繁なソフトウェア・アップデートが必要です。 コマンドラインからソフトウェア・アップデートを実行するためには、 softwareupdate(8)を使います。

Invoke softwareupdate by specifying a command followed by zero or more args.

ってことですが、 基本的には-iオプション(インストール)と-aオプション(すべて)をつければいいでしょう。

softwareupdate -i -a

なお、--listというオプションで利用可能なアップデートの一覧が確認できます。

ディスク・イメージのマウント

「そんなん、openすればええんちゃうん」というあなた、はい、正解です。 ただ、ディスク・イメージ(.dmgファイル)をopenすると、 Finderのウィンドウが開いてフォーカスが奪われます。 そんなときには、hdiutil(1)のmountコマンドを使います。

hdiutil mount xcode_2.4_8k1079_6936199.dmg

パッケージのインストール

MacOSXでアプリケーションなどをインストールする代表的な方法としては、 アプリケーションのアイコン(実は名前が.appで終わるディレクトリ) をアプリケーション・フォルダにDrag&Dropするか、 パッケージ・ファイル(これも実は.pkgまたは.mpkgで終わるディレクトリ) からインストールするかのどちらかです。 このうち、後者のパッケージ・ファイルを使うパターンの場合は、 そのファイルをopenするとインストーラが起動することになります。

このファイルをコマンドラインからインストールするためには、 installer(8)を使います。

The installer command is used to install Mac OS X installer packages to a specified volume. The installer will install a single package per invo- cation. This package can be either a single package or a metapackage.

-pkgオプションでパッケージ・ファイルを、 -targetオプションでインストール先のボリュームを指定します。 また、上記のとおり、通常のパッケージだけでなくメタ・パッケージもインストールできます。

installer -pkg XcodeTools.mpkg -target /

2006年8月25日

teTeX3とvfxdvi

pkgsrcでteTeX3をいれると、vfxdviも動きません。

Unexpected error in "read_ZEIT_char()"

環境をMacBook Proに乗り換えたこともあって、まっさら状態。 これteTeX2のときもあったなー、なんだったけなー、と記憶をたどると、 そういえばフォントが足りないんだったような気がしてきた。

ってことで、fonts/watanabe_vfをインストールすると…正解! まあ、最近X11あがってないから使わないんですけどね、これ。

2006年8月27日

MacOSXでpkgsrc

繰り返しになりますが、 MacOSXでpkgsrcを使う人は物好きらしいです。 そんな物好きに贈る、pkgsrc on MacOSX講座。 ただし、pkgsrcの若干の知識を前提としています。あしからず。

前準備(前編)

まずは、 特にpkgsrcに限らず一般的にやっておいた方がいいと思われることから。

なににつけても、まずは開発環境が必要です。 Xcodeを入手してインストールしましょう。 OSXのインストールメディアにも入ってますが、 ADC (Apple Developer Connection)からも入手可能です。 ADCのメンバじゃない場合は適当にサインアップしてください。 ちなみに、最新版はXcode 2.4です。

それから、 なにかにつけX11が(使わなくても)インストールされているほうがよいです。 こいつはOSXのインストール時にカスタマイズで選択するのですが、 あとからインストールすることもできます。 正式なインストール方法はいまいちよく分からないんですが、 インストールメディアをつっこんで Optional Installsを起動すればいいようです。

前準備(後編)

次に、pkgsrcに特化した準備を。

前提として、 pkgsrcを使うためにはcase-sensitiveなファイルシステムが必要です。 すなわち、ファイル名で大文字と小文字の区別ができなければなりません。 以下、bootstrap/README.Darwin (このファイルはまだみなさんの手元にありません)から抜粋。

(Why can't you just use the HFS+ filesystem you've already got? Because pkgsrc currently requires the underlying filesystem to be case-sensitive, and HFS+ isn't.)

OSXで普通に使えるcase-sensitiveなファイルシステムは、 UFSとHFSXのふたつです。 前者はOSXのインストール時に 「UNIXファイルシステム」として選択できるものです… が、このフォーマットでシステムをインストールした場合、 市販の多くのアプリケーションが動かない可能性が高いのです。 したがって、この選択肢は捨てた方がよいでしょう。

一方、後者はHFS+のcase-sensitive拡張です。 HFSXでOSXをインストールするには、 インストール時に「ディスクユーティリティ」を起動してごにょごにょする必要があり、 という若干難易度が高いかもしれません。 昔は起動パーティションをHFSXにすると不具合があると言われてましたが、 実際にやってみたところ、特に問題は見あたりませんでした。 ATOK2006も普通に動くし。 とはいえ、 未だにcase-insensitiveなファイルシステムを前提にしている市販アプリケーションもありそうなので、 猛者でなければお勧めはできないことも事実です。

ではどうするのか。 前出のbootstrap/README.Darwinでは、 UFSのディスクイメージを利用する方法が説明されています。 つまり、システムはHFS+のままインストールし、 pkgsrcの部分だけをディスクイメージにしてマウントしちゃおうという作戦です。 若干遅くなるかもしれませんが、後で自由が効くのでお勧めです。 というわけで、この方法を採用することにします。

まず、 このディスクイメージとマウントポイントを置くためのディレクトリを作ります。

$ sudo mkdir -p /PKGSRC/mnt
$

次に、適当な大きさのディスクイメージを作ります。 「適当な大きさ」は、 どれくらいのパッケージをインストールするかに依存しまするわけですが、 多くの場合で4Gもあれば十分だと思います。 ファイルシステムは、上記の通りUFSにしてもかまいませんが、 折角なのでHFSXにしましょう。 サイズが大きいと若干時間がかかるかもしれません。

$ sudo hdiutil create /PKGSRC/HFSX.dmg \
  -size 4g -layout SPUD -type UDIF -volname pkgsrc \
  -partitionType Apple_HFSX -fs 'Case-sensitive Journaled HFS+'
...............................................................................
created: /PKGSRC/HFSX.dmg
$

ディスクイメージができたらマウントします。

$ sudo hdiutil attach /PKGSRC/HFSX.dmg \
  -mountpoint /PKGSRC/mnt \
  -owners on -nobrowse -notremovable
/dev/disk1              Apple_partition_scheme         
/dev/disk1s1            Apple_partition_map            
/dev/disk1s2            Apple_HFSX                      /PKGSRC/mnt
$

以下のように、必要なディレクトリを作ります。 つまり、pkgsrcに必要な部分だけをHFSX.dmgに押し込め、 シンボリックリンクを張るぜという方針です。 /varは必要ないのではないかと思われるかもしれませんが、 これがあるとディスクイメージごとほかのホストに移動して利用できます。 また、pkgsrcに関係のあるファイルの実体を、 全てディスクイメージに入れられるので、 システムとの切り分けという意味でも望ましいでしょう。

$ sudo mkdir -p /PKGSRC/mnt/{usr/pkg/etc,var/db/pkg{,.refcount}}
$

で、これらを所定の場所へシンボリックリンクを張ります。 これがいやな場合は、PREFIXを変更するという手もありますが、 無用なトラブルを避けたいのであれば、 シンボリックリンクをお勧めします。

$ sudo ln -s /PKGSRC/mnt/usr/pkg{,src} /usr
$ sudo ln -s /PKGSRC/mnt/var/db/pkg{,.refcount} /var/db
$

/PKGSRC/mnt/usr/pkgsrcなんてmkdirしてないよ? というあなた、正解です。 このディレクトリはあとでpkgsrcを取得するときにできるのですが、 先走ってシンボリックリンクを張っています。

というわけで、ここまでで準備はほぼ終わりました。

pkgsrcで、ごー。

それでは、pkgsrcをチェックアウトしましょう。 Xcodeはインストール済みのはずなので、 cvsは既に利用可能です。

$ cvs -d :pserver:anoncvs@anoncvs.netbsd.org/cvsroot login
Logging in to :pserver:anoncvs@anoncvs.netbsd.org:2401/cvsroot
CVS password:                                    ←anoncvs
$ cd /PKGSRC/mnt/usr
$ sudo cvs -d :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot co -P pkgsrc
cvs checkout: Updating pkgsrc
U pkgsrc/Makefile
U pkgsrc/README
    :
U pkgsrc/x11/zenity
$

NetBSDであればこのままお好みのパッケージをインストールすればいいのですが、 それ以外のプラットフォームの場合は、 pkgsrc用のコンパイル環境、bootstrapが必要です。 といっても、BSD makeとかそのあたりの軽いものばかりですけど。

$ cd /usr/pkgsrc/bootstrap
$ sudo ./bootstrap
===> bootstrap command: ./bootstrap 
===> bootstrap started: Sat Aug 26 21:49:10 JST 2006
Working directory is: /usr/pkgsrc/bootstrap/work
   :
Hopefully everything is now complete.
Thank you
===> bootstrap started: Sat Aug 26 21:49:10 JST 2006
===> bootstrap ended:   Sat Aug 26 21:51:47 JST 2006
$

余談ですが、このbootstrapというディレクトリの中に、 前述のREADME.Darwinがあります。

さて、pkgsrcでは、 コンパイル時のさまざまなオプション指定に /etc/mk.conf、または、/usr/pkg/etc/mk.confというファイルで使います。 NetBSDのmakeの場合は前者、bootstrapが提供するbmakeの場合は後者です。 したがって、MacOSXの場合は/usr/pkg/etc/mk.confに設定を記述します。

mk.confは、 システムにあらかじめインストールされているなにかを、 pkgsrcで提供されているものより優先的に使う、 という指定も可能です。 例えば、MacOSXではzlibがシステムで提供されているので、 特に必要がなければこれを優先して使いたい、と思うわけです。 mk.confの内容は試行錯誤ですが、 MacOSXではおおよそ以下のような感じで問題ないと思います (というか、あまり綿密にチェックしてないので、 意味をなしてない設定も多いかもしれません)。

.ifdef BSD_PKG_MK   # begin pkgsrc settings

PKG_DBDIR=      /var/db/pkg
LOCALBASE=      /usr/pkg
FETCH_CMD=      ${LOCALBASE}/bin/ftp
PAX=            ${LOCALBASE}/bin/pax

PREFER_NATIVE=  readline freetype2 Xft2 fontconfig \
                Xrender render Xrandr randrext xcursor \
                MesaLib glu xpm zlib iconv openssl pam \
                dlcompat curl ncurses sun-jre13 sun-jre14 \
                tcp_wrappers openldap openldap-client cups \
                net-snmp pthread cyrus-sasl2 libxml2 libpcap \
                tcl mit-krb5 libltdl gmake bzip2 bunzip \
                flex pth unzip

TOOLS_PLATFORM.unzip?=  /usr/bin/unzip
TOOLS_PLATFORM.gm4?=    /usr/bin/gm4

PKG_DEFAULT_OPTIONS+=   inet6

.endif              # end pkgsrc settings

個々のパッケージのオプションに関してはお好みで追加してください。 このへんは、NetBSDでつかうpkgsrcとまったく同じです。 たとえば、w3mだったら以下のようなものを追加すればいいでしょう。

PKG_OPTIONS.w3m=        w3m-image-imlib2 w3m-m17n w3m-unicode

あとはがんがんインストールするのみです。 日本語でTeXを使いたいのであれば、

$ cd /usr/pkgsrc/textproc/ja-ptex
$ sudo make install
   :

ってな感じです。

起動時にマウントしたいんですけど。

とりあえずこれでpkgsrcが使えるようになりました。 が、実はOSXを再起動するとマウントが外れてしまいます。 なんとか起動時に自動的にマウントするようにしたいものです。 OSXでは、 /System/Library/StartupItemsや /Library/StartupItemsにある設定を起動時に実行するので、 これを使って自動マウントを実現しましょう。 なお、上記ディレクトリのうち、前者はシステムで提供されているもの、 後者はローカルで利用するものです。 /etcと/usr/local/etcの関係と同じと云えばわかりやすいでしょうか。

まずはPKGSRC用StartupItemsディレクトリを作成します (注意!これはシンボリックリンクでは動作しません)。

$ sudo mkdir /Library/StartupItems/PKGSRC
$

ここに、 PKGSRCおよびStartupParameters.plistというふたつのファイルを準備します。 PKGSRCの内容は以下の通り。

#!/bin/sh

exec > /tmp/PKGSRC.log 2>&1

##
# Mount HFSX Filesystem for PKGSRC
##

. /etc/rc.common

PKGSRC_DISKIMAGE="/PKGSRC/HFSX.dmg"
PKGSRC_MOUNTPOINT="/PKGSRC/mnt"

StartService ()
{
    local device

    if [ ! -f "${PKGSRC_DISKIMAGE}" ]; then
        ConsoleMessage "No diskimage ${PKGSRC_DISKIMAGE}"
        return 0;
    fi

    ConsoleMessage "Mounting HFSX Filesystem for PKGSRC"

    hdiutil attach ${PKGSRC_DISKIMAGE} \
        -mountpoint ${PKGSRC_MOUNTPOINT} \
        -owners on -nobrowse -notremovable
    sleep 1

    if [ -d /usr/pkg/etc/rc.d ]; then
        for rc in /usr/pkg/etc/rc.d/*; do 
            ConsoleMessage "Starting ${rc##*/}";
            sh ${rc} start;
        done;
    fi
}

StopService ()
{
    return 0;
}

RestartService ()
{
    return 0;
}

RunService "$1"

これは実行可能でなければなりません。

$ sudo chmod 755 /Library/StartupItems/PKGSRC/PKGSRC
$

一方、StartupParameters.plistはこれ。

{
  Description     = "Mount Filesystem for PKGSRC";
  Provides        = ("PKGSRC");
  Requires        = ("Disks");
}

これで再起動すると自動的にマウントしてくれるようになります。

2006年8月28日

Copy&Pasteもやっぱりコマンドラインでしょ。

コマンドラインでがんばろうシリーズ(いつの間にシリーズに…?)、 今回はpbcopy(1)とpbpaste(1)です。

manの概要から引用。

pbcopy, pbpaste - provide copying and pasting to the pasteboard (the Clipboard) from command line

要するに、コマンドラインからクリップボードを扱えるわけです。 例えば、次のように使います。

$ cal | pbcopy
$ pbpaste
    August 2006
 S  M Tu  W Th  F  S
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

$

すなわち、pbcopyは標準入力をクリップボードに転送し、 pbpasteはクリップボードの内容を標準出力に出力するわけです。 当然、pbcopyしてEmacsに貼り付けとかその逆も可能です。

2006年9月 4日

ハードウェアとかソフトウェアの詳細もコマンドラインで。

「…がうまく動かないんだけどさー」
「OSXのバージョンは?」

なんて会話、よくありますよね。 そんなときは林檎のアイコンから「このMacについて」を選択すると、 OSXのバージョンとプロセッサ、および、メモリについて簡単な情報を得ることができます。 もうちょっと詳しい情報が必要な場合は、 システムプロファイラを起動します。 これは、 上記の「このMacについて」で現れるダイアログから「詳しい情報…」をクリックしてもいいし、 ユーティリティから直接起動することもできます。

でも…こんな情報もコマンドラインで知りたいですよね、ふつー。 ってことで、今回はシステムに関する情報を得る、です。

unameとsw_ver

まず、OSXに関する情報から。 上記の会話のように、OSXのバージョンを得るには… ええ、もちろんunameでもいいんですよ、unameでも。 これはBSDでもLinuxでもSolarisでも(略)でも使えるので、 説明するまでもないですが、

$ uname -a
Darwin xxxx.xxxx 8.7.1 Darwin Kernel Version 8.7.1: Wed Jun  7 16:19:56 PDT 2006; 
root:xnu-792.9.72.obj~2/RELEASE_I386 i386 i386
$

ってな具合です。 一方、sw_verというOSX用のコマンドもあります…が、 実はunameのほうが情報量が多いかもしれない。 sw_verで勝ってるのはBuildVersionが得られることくらいです。

$ sw_ver
ProductName:    Mac OS X
ProductVersion: 10.4.7
BuildVersion:   8J2135
$

system_profiler

一方、上記のシステムプロファイラのコマンドライン版がsystem_profilerです。 -detailLevelで情報量を指定することができます。 可能な値はmini/basic/fullで、省略するとbasicです。

$ system_profiler -detailLevel mini
Hardware:

    Hardware Overview:

      Machine Name: MacBook Pro 15"
      Machine Model: MacBookPro1,1
      CPU Type: Intel Core Duo
      Number Of Cores: 2
      CPU Speed: 2 GHz
      L2 Cache (shared): 2 MB
      Memory: 2 GB
      Bus Speed: 667 MHz
      Boot ROM Version: MBP11.0055.B02
      SMC Version: 1.2f10
      Sudden Motion Sensor:
          State: Enabled

    …(略)…

AirPort Card:

    AirPort Card Information:

      Wireless Card Type: AirPort Extreme  (0x168C, 0x86)
      Wireless Card Locale: Japan
      Wireless Card Firmware Version: 0.1.24
      Wireless Channel: 11

$

-detailLevel fullにするとアプリケーションからStartupItemsに至るまで、 ありとあらゆる情報が出力されます。 これだけの情報が出ればさすがに十分ではないかと。

ちなみに-xmlオプションをつけると、上記の情報をXMLで出力できます。 その出力を.spxという拡張子で保存すると、 システムプロファイラで見ることができるようです。 まあ、コマンドラインでやろうぜという趣旨からすると、 どうでもいい機能ですねー。

2006年9月18日

PowerBook G4は工業製品として失敗だ

内蔵スピーカ見あたらず S/P-DIF

と、数年前に吠えた人がいましたが、ほんとに品質低いなあ。 今使っているMacBook Proも使い始めて一ヶ月くらいだというのに、 なんと内蔵スピーカを認識しなくなった。 先日もiPod shuffleのバグを踏んだしさ。 さて、そうすると何が起きるか。 サウンド出力デバイスとして内蔵スピーカは死んでいる。 ライン出力には何も挿さっていない。 そうすると残っているのは、なんとS/P-DIFなんですな。 というわけで手元のMacBook Pro、ライン出力端子が赤く光っております。 …ていうか、Apple、いい加減にしろよ。

追記

その後、突然スピーカデバイスが認識されました。 PMU Resetしても見えなかったのに、 再起動もせず、ログアウトすらしてないのに。意味不明…

2006年9月21日

iTunes7とAirMac Express

ちまたではiTunes7の新機能がどうだという話題で持ちきりですが(ほんとか?)、 実はすてきな機能が追加されていました。

iTunesで複数スピーカ

ご存じの通り、 iTunesからはAirMac Expressに接続されたスピーカに出力できるわけですが、 たとえば家中にAirMac Expressを配置して音楽で埋め尽くそうとしても、 同時にひとつのスピーカしか選択できなかったのです。 しかし、iTunes7では複数のスピーカを同時に選択できるようになりました。 これで家中を音楽の洪水で満たすことができます!

なお、「iTunes7では」と書きましたが、 ちゃんと見ていたわけではないので、 iTunes6の後半で既にサポートされていたのかもしれません。

2006年10月 2日

CrashReporterとcore dump

ひょっとして常識かもしれないし、 あるいは、意外に知られてないかもしれないし、ってことで、 OSXでのCrashReporterとcore dumpについて。

クラッシュ・ダイアログでデバッグ情報を。

CrashReporterPrefs Developerでクラッシュ・レポート

アプリケーションを使っていると、

このアプリケーションは予期せず終了しました。

みたいなダイアログが出て終了することがありますね。 心の中で「ちっ」とか云いながら再起動したりするわけですが、 もしもそのアプリケーションが自分の開発したものだったりすると、 もうちょっと詳細なデバッグ情報が欲しくなるわけです。 そんなときは、CrashReporterPrefsで設定を変更しましょう。

$ open -a CrashReporterPrefs
$

これでDeveloperを選んでおくと、 アプリケーションが落ちたときに、 その原因とバックトレースが表示されるようになります。 ちなみに、バックグラウンドで動いているdaemonなんかでもレポートが来ます(たぶん)。

クラッシュのログをみたい

上記のダイアログは、最初は「おぉ」なんて思うかもしれませんが、 常用するにはうざすぎます。 そもそも「ふつーコマンドライン」と思う人には、 閉じるボタンを押さないと消えてくれないなんて邪魔以外の何者でもありません。

そんなときでも大丈夫。 実は、OSXでは何もしなくてもクラッシュをログに残しておいてくれるのです。 システム関係であれば/Library/Logs/CrashReporterに、 ユーザ権限で動いているものであれば~/Library/Logs/CrashReporterに、 それぞれクラッシュ・レポートが残っているはずです。 たまに見ると、 ATOK19がびしばし落ちている形跡なんかが残っていて驚愕できます。

core吐けよ、core

OSXでコードを書いていると、

「あれ?げろってるのにcoreないぞ」意味不明

なんてことはないでしょうか。 実は、OSXではcore dumpがデフォルトで無効になっているのです。 coreを吐かせるには、/etc/hostconfigに

COREDUMPS=-YES-

を追加して再起動してください。 きっと、/cores/core.### (###はpid)というファイルがたくさんできるでしょう。 え、できない? それは、シェルでリソース制限がかかってるんじゃないですか。

$ limit coredumpsize
coredumpsize    0kB
$ limit coredumpsize 100M
$ limit coredumpsize
coredumpsize    100MB
$

とかなんとか、どんなシェルでも大差はないと思うんですが、 まあシェルにあった方法でリソースを設定してあげてください。

ちなみにこれで吐いてくれるcoreファイル、Mach-Oだからかばかでかいです。 NetBSDなんかで吐かせている感覚でいくと大変です。 というわけで、実は実用的ではありません。 なので、現実的にはgdb使うことになるんだろうと思います。

2006年10月 5日

ネットワーク環境の切り替えもコマンドラインでしょ。

いまどきネットワークに繋がってない計算機なんて滅多にないわけで、 なぜかこのブログを見ているあなたもネットワークに繋がってるわけですね。 で、ラップトップを使っていると接続するネットワークが頻繁に変わるので、 環境に応じた設定をプロファイルとして保存しておき、 接続先によって切り替えてあげるわけです。 この仕組みはOSやハードウェアのベンダによってさまざまで、 ThinkPad+Windows XPではAccessConnectionsだったり、 OSXではネットワーク環境設定だったりします。

今回は、例によってOSXのネットワーク環境設定をコマンドラインから切り替えてあげましょう、という趣旨です。

scselectを使う

OSXにはSystem Configurationという枠組みがあって、 configdが管理しているわけですが、 こいつをいじるためには以下のようなコマンドがあります。

  • configd(8)
  • scutil(8)
  • scselect(8)

今回使うのは一番最後のscselectです。 scという割にSystem Configurationに汎用的ななにかではなく、 ネットワーク環境を切り替えられるだけです。

さて、すでにPowerBookとかMacBookを使っている人は、 ネットワーク環境がいくつも定義されていることだと思います。 scselectを引数なしで実行すると、 定義されている環境の一覧が表示されます (下記の例は適当に削ってますが)

$ scselect
Defined sets include: (* == current set)
   F770774D-ABDC-4686-90ED-BBB7D686D1E4 (???)
   F89CD707-21C5-4121-99F3-1C6AF4805CF5 (DHCP (Wireless))
   0    (Automatic)
 * 0BACA6E6-9B74-4B3C-858D-79E5D2F2314D (DHCP (Wired))
   575CFD8C-1A50-42FF-B7AD-64A27CE6B611 (OFF)
$

最初の十六進数の羅列が識別子で、 続く括弧の中はユーザが定義したネットワーク環境の名称です。 また、先頭にアスタリスクがついているものが現在利用中の環境です。

ネットワーク環境を切り替えるには、 scselectの引数に識別子か名称を指定します。

$ scselect F770774D-ABDC-4686-90ED-BBB7D686D1E4
CurrentSet updated to F770774D-ABDC-4686-90ED-BBB7D686D1E4 (???)
$

名称が???になっているのは日本語を使っているからです。 残念ながら日本語は扱えないようなので、 こういうときは上記のように識別子を使うしかありません。 ちなみに、-nというオプションもあるようで、 これをつけると再起動時にネットワーク環境が切り替わる…らしいですが、 使ったことがないので分かりません。

以上でおしまい…というのもあんまりなので、 ついでにzshを使っている皆様へ、 scselectで補完するための定義を載せておきます。 いつも通り、fpathの通ったところに_scselectというファイル名でおいてください (正しさに責任は持てません…)

#compdef scselect

local curcontext="$curcontext" context state line ret=1

_arguments -C \
  '-n[Delay changing the next system boot]' \
  '(-n)1::locations:->locations' \
  && ret=0

if [[ -n "$state" ]]; then
  local tmp desc list identifiers names expl

  tmp=( "${(@f)$(_call_program locations scselect 2>&1)}" )
  desc="$tmp[1]"
  list=( "${(@M)tmp[2,-1]:##(( |\*)#${PREFIX//\\/}*|[^(]#\(${PREFIX//\\/}*\))}" )
  names=( "${(@)${(@)list#*\(}%\)}" )
  identifiers=( "${(@M)${(@)list##( |\*)#}##[[:xdigit:]-]#}" )

  if (( ${#list} )); then
    _message -r $desc
    _message -r ${(F)list}
  fi
  zstyle ":completion:${curcontext}:$1" sort off
  _wanted locations expl 'Locations' \
    compadd "$@" -n -a names identifiers && ret=0
fi

return ret

2006年10月14日

OSXで『デ{1,2}フラグ』

最近、シリアルで4Mくらいのファイルを転送することが多いので、 その待ち時間に小ネタを書くことにしてみた。

しげやさんがOSXでもデフラグが結構効くなんて話を書いてたので、 ではこっちはこれで。 手元の環境にはTechTools Proみたいな何かはないので、 残念ながらというか当然というか、試してません。 勇気のあるかたは是非どうぞ! もちろん当方でも責任はとりませんのであしからず。

2006年10月29日

ちょっと悲しい最近のMacOSX

Tigerを使っていると、最新のバージョンは10.4.8ですが、 10.4の初期にはなかったバグがかなり増えてきて、 だいぶ悲しいことになっています。

最も悲しいのは次のふたつ。

IPv6リンクローカルの挙動がおかしい

リンクローカルの挙動というか経路を引くあたりではないかと予想しますが、 RAが降ってこない環境において、

$ ping6 -w -I en0 ff02::1
PING6(72=40+8+24 bytes) fe80::216:cbff:fe8b:9df2%en0 --> ff02::1
44 bytes from fe80::xxxx:xxxx:xxxx:xxxx%en0: xxx
37 bytes from fe80::yyyy:yyyy:yyyy:yyyy%en0: yyy
31 bytes from fe80::zzzz:zzzz:zzzz:zzzz%en0: zzz
^C
--- ff02::1 ping6 statistics ---
1 packets transmitted, 1 packets rece
$

というのはいいとして、こいつらに個別に撃つと、

$ ping6 fe80::yyyy:yyyy:yyyy:yyyy%en0
ping6: UDP connect: No route to host
$

おーい。…といいつつ、実はif indexを指定すると通る。

$ ping6 fe80:4::yyyy:yyyy:yyyy:yyyy
PING6(56=40+8+8 bytes) fe80::xxxx:xxxx:xxxx:xxxx%en0 --> fe80::yyyy:yyyy:yyyy:yyyy%en0
16 bytes from fe80::yyyy:yyyy:yyyy:yyyy%en0, icmp_seq=0 hlim=64 time=0.4 ms
^C
--- fe80:4::yyyy:yyyy:yyyy:yyyy ping6 statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.400/0.400/0.400 ms
$

おーい、なんだよこれー。 使えないことはないと云っても、超KAME実装依存なんですけど。

ちなみに、RAが降ってくる環境では微妙に挙動が違った気がする…

「ネットワーク環境」とAirMacの仲が悪い

初期のTigerは、AirMacの設定を定義したネットワーク環境ごとに独立して保持していました。 というか、これが本来の正しい姿。 ところが最近は、あるネットワーク環境でAirMacの設定を変更すると、 ほかのネットワーク環境の定義でも設定が変わってしまう。 すなわち、システムで単一のAirMac設定セットしかもてないようなのです。

なんだかよく分かりませんね、はい。 ええと、要するに、あるネットワーク環境の定義でAirMacを使う場合、 SSIDとWEPなんかをひとつにしたいわけですよ。 「職場」のネットワーク環境定義には、職場のSSIDとWEP。 「自宅」のネットワーク環境定義には、自宅のSSIDとWEP。 ところが、このようにネットワーク環境定義ごとに独立してAirMacの設定を保持できないということです。

これによってどのような被害を被るか、ですが。

  • SSIDをばらまくので、そのノートの持ち主の行動範囲が分かる
  • すべてのSSIDを試行するので接続するまでにやたら時間がかかる

なんてところでしょうか。うーん、はやくなおしてよー。

2007年1月 6日

Gtk on MacOSX (pkgsrc編)

昔、Gtk on MacOSXの開発が進められているらしいということを書きましたが、 pkgsrcでも使えるようになりました。

とはいえ、まあ開発途上という感じですが、使えないことはない。 少なくとも、wiresharkはなんとなく使えました。 /usr/pkg/etc/mk.confに以下のような記述を追加してください。

PKG_OPTIONS.pango=      -x11
PKG_OPTIONS.cairo=      -x11
PKG_OPTIONS.glitz=      -x11
PKG_OPTIONS.gtk2+ =     -x11 quartz

どーでもいいことですが、PKG_OPTIONS.gtk2+と=の間は、 スペースを挿入しないとだめです…

2007年1月16日

imlib2 on MacOSX

imlib2 1.3.0をMacOSX(Intel)でコンパイルしようとしても、そのままでは通りません。 CPUがIntelだとMMXを有効にするために一部のコードがアセンブラに入れ替わるのですが、 そのアセンブラがMach-O用ではないからです。

で、解決法としては、

  1. MMXを無効にする
  2. コードを修正する

ですが、別に激しく使ってるわけではないので前者で逃げます。 これを実現する一番簡単な方法は、configureに--disable-mmxをつけること。 多くの場合はこれでいいでしょう。

では、pkgsrcでgraphics/imlib2を使ってる場合はどうすればいいでしょう。 CONFIGURE_ARGSに上記のオプションを追加してもいいんですが、 そもそもimlib2自体の問題なので、configure{,.in}にパッチを当てる方向で。 graphics/imlib2/pathcesに、 以下のファイルをpatch-local-aaおよびpatch-local-abとして置くと、 DarwinではMMXのデフォルト値がoffになります。 もちろん、--enable-mmxするとonになりますが、コンパイルは通りません。

--- configure.in.orig   2007-01-15 14:59:39.000000000 +0900
+++ configure.in        2007-01-15 14:59:52.000000000 +0900
@@ -116,6 +116,7 @@
 
 case $host_os in
   solaris*) mmx="no";;
+  darwin*) mmx="no";;
 esac
 
 dnl 
--- configure.orig      2007-01-15 15:01:34.000000000 +0900
+++ configure   2007-01-15 15:01:45.000000000 +0900
@@ -21224,6 +21224,7 @@
 
 case $host_os in
   solaris*) mmx="no";;
+  darwin*) mmx="no";;
 esac
 
 # Check whether --enable-mmx was given.

2007年2月10日

MacOSXのホスト名を固定したい

そういえば、これ書くの忘れてた。 MacOSXでホスト名を固定したい。 ここでいうホスト名とは、mDNSで応えるxxx.localってやつではなくて、 hostnameで表示されるほうです。 これを固定しないと、たとえばDHCPでアドレスを拾ったときに、 一緒に名前を配られるとそれになっちゃいます。

やり方は簡単で、/etc/hostconfigに以下の行を追加するだけ。

HOSTNAME=hoge.fuga.com

特に、シェルでホスト名を表示してると気になるかも。

2007年2月14日

SSHKeychain

ssh-agentのMacOSX用フロントエンドであるSSHKeychainですが、 sleep/wakeupの瞬間にクラッシュしたり、逆に無限ループに入るという不具合がありました。 この不具合がsubversionの先頭(r96)で修正されたようです。 対応するバグ報告はこちら

2007年2月22日

Spanning Syncすごい!

スケジュール管理、みんなが頭を悩ませるところです。 普段の生活環境はOSXなのでiCal使ってるんですが、例えばMacBook ProとMacProのiCalをどうやって同期するんだとか、みんなで共有して変更できるカレンダーが欲しい、とか、そういうことができないわけです。

Spanning Sync

いや、できるんですよ。.macつかえばね。 でもやっぱり使わないでしょ、ふつう。

と、あきらめかけていたわけですが、そこに突如現れた(というか発見しただけですが)Spanning Syncです。 このツール、なんとiCalとGoogle Calendarの同期ができるのです。 これで一気にさまざまな問題が解決…

  • Google Calendar経由で複数台のOSXでiCalを同期できる
  • Google Calendarは他の人とカレンダーを共有できるので、事実上iCalでも共有カレンダーをサポートできる
  • 手元にOSXがなくてもスケジュールを確認できる

すばらしい、すばらしすぎるぞSpanning Sync… 今はベータ版ですが、今のところは特に不具合もなく動いているようです。 もうすぐ正式版が発売されるようですが、いくらになるんだろう。

2007年2月28日

OSXクラッシュしまくり

OSXクラッシュしまくりです。ひどいです。Windowsとかわりません。

まずひとつめ。AFPでのマウントを外したときに(だとおもう、Backtraceからはちょっと微妙)、マウントされてる側でクラッシュするというもので、比較的再現性あり。

panic(cpu 0 caller 0x0035BEAC): freeing free mbuf
Backtrace, Format - Frame : Return Address (4 potential args on stack) 
0x24efbdb8 : 0x128d1f (0x3c9540 0x24efbddc 0x131df4 0x0) 
0x24efbdf8 : 0x35beac (0x3e9c7c 0x441838 0x0 0x19778c) 
0x24efbe38 : 0x7034a4 (0x36c1dc00 0x0 0x23757000 0x23757000) 
0x24efbe58 : 0x9d4454 (0x23757000 0x36c1dc00 0x0 0x2) 
0x24efbe88 : 0x9d2ad0 (0x23757000 0x36c1dc00 0x0 0x384ba00) 
0x24efbea8 : 0x9d5d7c (0x23757000 0x0 0x40000000 0x0) 
0x24efbf08 : 0x398a1f (0x23757000 0x384ba00 0x1 0x371c06c) 
0x24efbf58 : 0x397bf1 (0x384ba00 0x0 0x24efbf98 0x0) 
0x24efbf88 : 0x397927 (0x384c900 0x0 0x24efbfc8 0x202b3f) 
0x24efbfc8 : 0x19a74c (0x384c900 0x0 0x19d0b5 0x4285f78)
Backtrace terminated-invalid frame pointer 0x0
      Kernel loadable modules in backtrace (with dependencies):
         com.apple.iokit.AppleYukon(1.0.7b3)@0x9d0000
            dependency: com.apple.iokit.IONetworkingFamily(1.5.1)@0x6fc000
            dependency: com.apple.iokit.IOPCIFamily(2.1)@0x57f000
         com.apple.iokit.IONetworkingFamily(1.5.1)@0x6fc000

いまどきfreeing free mbufですよ。そんな根っこがばぐっててどーすんの。

ふたつめ、こっちはちょっと特殊。今のところ再現性なし。ParallelsでゲストOSをインストールしていないときに電源を入れたらクラッシュ。まあ、Parallelsいろいろやってるからやむを得ないともいえるけど、なんだかなー。

panic(cpu 1 caller 0x001A329B): Unresolved kernel trap (CPU 1, Type 27=Unknown), registers:
CR0: 0x8001003b, CR2: 0x50a1c000, CR3: 0x00e25000, CR4: 0x000006e0
EAX: 0x0000000a, EBX: 0x6d626572, ECX: 0x00000000, EDX: 0x00ed6fc0
CR2: 0x50a1c000, EBP: 0x36403b18, ESI: 0x6d616769, EDI: 0x63216e75
EFL: 0x00000246, EIP: 0x4fa8a2d1, CS:  0x00000008, DS:  0x50a10010

Backtrace, Format - Frame : Return Address (4 potential args on stack) 
0x36403908 : 0x128d08 (0x3c9ac4 0x3640392c 0x131de5 0x0) 
0x36403948 : 0x1a329b (0x3cf784 0x1 0x1b 0x3c8f8c) 
0x36403a58 : 0x19a934 (0x36403a70 0x36400048 0x36400010 0x190010) 
0x36403b18 : 0x4ed4d10a (0x4b13a98 0x0 0x4b13a84 0x169) 
0x36403bd8 : 0x4ed4d862 (0x4b13a84 0x36403eb8 0x18 0x6) 
0x36403d38 : 0x4ed4a8c7 (0x4b13a84 0xc0185401 0x36403eb8 0x6) 
0x36403d68 : 0x1ef52e (0xd000000 0xc0185401 0x36403eb8 0x81) 
0x36403da8 : 0x1e63b0 (0x36403dd0 0x297 0x36403e08 0x55e79c4) 
0x36403e08 : 0x1de1b1 (0x5acebdc 0xc0185401 0x36403eb8 0x81) 
0x36403e58 : 0x330795 (0x51fcc80 0xc0185401 0x36403eb8 0x55e79c4) 
0x36403e88 : 0x34eaf1 (0x51fcc80 0xc0185401 0x36403eb8 0x55e79c4) 
0x36403f58 : 0x3788ea (0x55e79c4 0x5687f38 0x5687f7c 0x0) 
0x36403fc8 : 0x19ad0e (0x78ac180 0x0 0x10 0x0) No mapping exists for frame pointer
Backtrace terminated-invalid frame pointer 0xbfffdf58
      Kernel loadable modules in backtrace (with dependencies):
         com.parallels.kext.vmmain(2.2)@0x4ed49000

2007年3月 7日

メモリ不具合疑惑

最近、OSXの不具合ばっかりですが、また落ちました。

とはいっても、今度は前回までとちと様子がちがう。

panic(cpu 0 caller 0x001944A8): pmap_enter: null pv_list!
Backtrace, Format - Frame : Return Address (4 potential args on stack) 
0x363fbd28 : 0x128d08 (0x3c9ac4 0x363fbd4c 0x131de5 0x0) 
0x363fbd68 : 0x1944a8 (0x3cd0cc 0x1519000 0x0 0x0) 
0x363fbdf8 : 0x160ab6 (0x657ac70 0x1519000 0x0 0x76783) 
0x363fbf48 : 0x1a350e (0x52cc000 0x1519000 0x0 0x1) 
0x363fbfc8 : 0x19a864 (0x5bbd180 0x0 0x19d0b5 0x5442960) No mapping exists for f
rame pointer
Backtrace terminated-invalid frame pointer 0xbfffe808

これ、まさにターミナルからmakeって打った瞬間に落ちたんですけど、さすがに今どきpmapまわりが腐ってることはないだろうと。そんなことがあったら、先日のmbufよりたちが悪い。しかも、前日の夜にFinderは激しく落ちるわ、gccは転けまくるわ(しかも転ける場所は不定)、Terminalも落ちるわのお祭りでした。なので、このpanicでさすがにこれはメモリが腐ってるでしょうと疑わざるを得なくなったわけです(というか、重い腰をあげたって感じ)。

さて、i386なら(って、MacBook Proもi386だけど、EFIじゃないふつーのBIOSならってことね)memtest86で終わりなんですが、いかんせんMacBook Proなのでどうしたものかと。で、ちょっと探してみるとRemberというメモリチェッカがありました。本家はここで、日本語化したのはMacのメモリ専用ショップ(これもすごいと思うが)のマックメムさん。本家から取得してもたぶん日本語化されていると思います。メモリチェッカなので英語のままでもいいと思いますけど。

RemberはOSXの上で動きます。本当はこんなでかいOSの上で動かさない方がいいんだけど、面倒な気分でいっぱいなのでこれでいくことにします。以下、一部整形済み結果。

Memtest version 4.13 (32-bit)
Copyright (C) 2004 Charles Cazabon
Copyright (C) 2004, 2005 Tony Scaminaci (Macintosh port)
Licensed under the GNU General Public License version 2 only

MacOS X (Darwin) running in multiuser mode
POSIX version 200112
Pagesize is 4096
Requested memory: 2598MB (2724560896 bytes)
Available memory: 2598MB (2724560896 bytes)
Allocated memory: 2269MB (2380234752 bytes) at local address 0x02008000
Attempting memory lock... locked successfully
Creating test buffers...
Buffer A: 1134MB (1190117376 bytes) at local address 0x02008000
Buffer B: 1134MB (1190117376 bytes) at local address 0x48f04000

Running 1 test sequence...

Test sequence 1 of 1:
  Stuck Address       : FAILURE: possible bad address line at offset 0x0f473802.
Skipping to next test...
  Random Value        : FAILURE: 0xc2b75a9b != 0xf2b75a9b at offset 0x0f473802.
FAILURE: 0xd7ffd72b != 0x77ffd72b at offset 0x0f47380a.
FAILURE: 0x677fe5da != 0xf77fe5da at offset 0x0f473812.
  (略)
FAILURE: 0xcc9c8bdd != 0x5c9c8bdd at offset 0x0f473bfa.
FAILURE: 0x4bbf0351 != 0xfbbf0351 at offset 0x0f473df2.
  Compare XOR         : FAILURE: 0xc608ce22 != 0x9608ce22 at offset 0x0f473802.
FAILURE: 0xd3404392 != 0x13404392 at offset 0x0f47380a.
FAILURE: 0x63c07163 != 0x93c07163 at offset 0x0f473812.
  (略)
FAILURE: 0xc8231f64 != 0x38231f64 at offset 0x0f473bfa.
FAILURE: 0x4f0097e8 != 0x9f0097e8 at offset 0x0f473df2.
  Compare SUB         : FAILURE: 0xce1a3c5a != 0x9e1a3c5a at offset 0x0f473802.
FAILURE: 0x5b51b1ca != 0x1b51b1ca at offset 0x0f47380a.
FAILURE: 0x6bd1df9b != 0x9bd1df9b at offset 0x0f473812.
  (略)
FAILURE: 0xc0348d9c != 0x40348d9c at offset 0x0f473bfa.
FAILURE: 0x47120620 != 0xa7120620 at offset 0x0f473df2.
  Compare MUL         : FAILURE: 0xcafacae4 != 0x2afacae4 at offset 0x0f473802.
FAILURE: 0x585d8244 != 0xc85d8244 at offset 0x0f47380a.
FAILURE: 0x66772bde != 0x46772bde at offset 0x0f473812.
  (略)
FAILURE: 0xc8edac58 != 0xb8edac58 at offset 0x0f473bfa.
FAILURE: 0x4f016b40 != 0xaf016b40 at offset 0x0f473df2.
  Compare DIV         : FAILURE: 0x40000000 != 0x00000000 at offset 0x0f473802.
FAILURE: 0x50000000 != 0x00000000 at offset 0x0f47380a.
FAILURE: 0x40000000 != 0x00000000 at offset 0x0f473812.
  (略)
FAILURE: 0x20000000 != 0x00000000 at offset 0x0f473bf2.
FAILURE: 0xc0000000 != 0x00000000 at offset 0x0f473bfa.
  Compare OR          : FAILURE: 0xcda73066 != 0xada73066 at offset 0x0f473802.
FAILURE: 0xdda73066 != 0xada73066 at offset 0x0f47380a.
FAILURE: 0x6da73066 != 0xada73066 at offset 0x0f473812.
  (略)
FAILURE: 0xcda73066 != 0xada73066 at offset 0x0f473bfa.
FAILURE: 0x4da73066 != 0xada73066 at offset 0x0f473df2.
  Compare AND         : FAILURE: 0xc9853002 != 0x29853002 at offset 0x0f473802.
FAILURE: 0x59853002 != 0x29853002 at offset 0x0f47380a.
FAILURE: 0x69853002 != 0x29853002 at offset 0x0f473812.
  (略)
FAILURE: 0xc9853002 != 0x29853002 at offset 0x0f473bfa.
FAILURE: 0x49853002 != 0x29853002 at offset 0x0f473df2.
  Sequential Increment: FAILURE: 0xcef9e7ff != 0x8ef9e7ff at offset 0x0f473802.
FAILURE: 0x5ef9e807 != 0x8ef9e807 at offset 0x0f47380a.
FAILURE: 0x6ef9e80f != 0x8ef9e80f at offset 0x0f473812.
  (略)
FAILURE: 0xcef9ebf7 != 0x8ef9ebf7 at offset 0x0f473bfa.
FAILURE: 0x4ef9edef != 0x8ef9edef at offset 0x0f473df2.
  Solid Bits          : FAILURE: 0xcfffffff != 0xffffffff at offset 0x0f473802.
FAILURE: 0x6fffffff != 0xffffffff at offset 0x0f473812.
FAILURE: 0x6fffffff != 0xffffffff at offset 0x0f473822.
  (略)
FAILURE: 0xcfffffff != 0xffffffff at offset 0x0f473bfa.
FAILURE: 0x5fffffff != 0xffffffff at offset 0x0f473df2.
  Block Sequential    : FAILURE: 0x40000000 != 0x00000000 at offset 0x0f473802.
FAILURE: 0x50000000 != 0x00000000 at offset 0x0f47380a.
FAILURE: 0x40000000 != 0x00000000 at offset 0x0f473812.
  (略)
FAILURE: 0x20000000 != 0x00000000 at offset 0x0f473bf2.
FAILURE: 0xc0000000 != 0x00000000 at offset 0x0f473bfa.
  Checkerboard        : FAILURE: 0xc5555555 != 0x55555555 at offset 0x0f473802.
FAILURE: 0xd5555555 != 0x55555555 at offset 0x0f47380a.
FAILURE: 0x65555555 != 0x55555555 at offset 0x0f473812.
  (略)
FAILURE: 0xc5555555 != 0x55555555 at offset 0x0f473bfa.
FAILURE: 0x45555555 != 0x55555555 at offset 0x0f473df2.
  Bit Spread          : FAILURE: 0xc0000005 != 0x00000005 at offset 0x0f473802.
FAILURE: 0x50000005 != 0x00000005 at offset 0x0f47380a.
FAILURE: 0x40000005 != 0x00000005 at offset 0x0f473812.
  (略)
FAILURE: 0x20000005 != 0x00000005 at offset 0x0f473bf2.
FAILURE: 0xc0000005 != 0x00000005 at offset 0x0f473bfa.
  Bit Flip            : FAILURE: 0xcffffffe != 0xfffffffe at offset 0x0f473802.
FAILURE: 0x6ffffffe != 0xfffffffe at offset 0x0f473812.
FAILURE: 0x6ffffffe != 0xfffffffe at offset 0x0f473822.
  (略)
FAILURE: 0xcffffffe != 0xfffffffe at offset 0x0f473bfa.
FAILURE: 0x5ffffffe != 0xfffffffe at offset 0x0f473df2.
  Walking Ones        : FAILURE: 0xcffffffe != 0xfffffffe at offset 0x0f473802.
FAILURE: 0x6ffffffe != 0xfffffffe at offset 0x0f473812.
FAILURE: 0x6ffffffe != 0xfffffffe at offset 0x0f473822.
  (略)
FAILURE: 0xcffffffe != 0xfffffffe at offset 0x0f473bfa.
FAILURE: 0x5ffffffe != 0xfffffffe at offset 0x0f473df2.
  Walking Zeroes      : FAILURE: 0x40000001 != 0x00000001 at offset 0x0f473802.
FAILURE: 0x50000001 != 0x00000001 at offset 0x0f47380a.
FAILURE: 0x40000001 != 0x00000001 at offset 0x0f473812.
  (略)
FAILURE: 0x20000001 != 0x00000001 at offset 0x0f473bf2.
FAILURE: 0xc0000001 != 0x00000001 at offset 0x0f473bfa.

*** Address Test Failed ***  One or more DIMM address lines are non-functional.
*** Memory Test Failed ***  Please check transcript for details.

…すげえ、ぼろぼろだ。このMacBook Proは1+2の3Gなんですけど、一応抜き差ししてみる…のついでに、とりあえず1GにしてRemberを走らせてみよう。

Memtest version 4.13 (32-bit)
Copyright (C) 2004 Charles Cazabon
Copyright (C) 2004, 2005 Tony Scaminaci (Macintosh port)
Licensed under the GNU General Public License version 2 only

MacOS X (Darwin) running in multiuser mode
POSIX version 200112
Pagesize is 4096
Requested memory: 740MB (776441856 bytes)
Available memory: 740MB (776441856 bytes)
Allocated memory: 740MB (776441856 bytes) at local address 0x02008000
Attempting memory lock... locked successfully
Creating test buffers...
Buffer A: 370MB (388220928 bytes) at local address 0x02008000
Buffer B: 370MB (388220928 bytes) at local address 0x19244800

Running 1 test sequence...

Test sequence 1 of 1:
  Stuck Address       : ok
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok
  Block Sequential    : ok
  Checkerboard        : ok
  Bit Spread          : ok
  Bit Flip            : ok
  Walking Ones        : ok
  Walking Zeroes      : ok

All tests passed.

ほほう。じゃあ次に、2Gにしてやってみよう。てか、石がひとつやられてるだけだと思うんだけど、運が悪ければOSがあがることすら無理かもしれず…が、なんかあがったので、以下Remberの一部整形済み結果。

Memtest version 4.13 (32-bit)
Copyright (C) 2004 Charles Cazabon
Copyright (C) 2004, 2005 Tony Scaminaci (Macintosh port)
Licensed under the GNU General Public License version 2 only

MacOS X (Darwin) running in multiuser mode
POSIX version 200112
Pagesize is 4096
Requested memory: 1754MB (1839308800 bytes)
Available memory: 1754MB (1839308800 bytes)
Allocated memory: 1754MB (1839308800 bytes) at local address 0x02008000
Attempting memory lock... locked successfully
Creating test buffers...
Buffer A: 877MB (919654400 bytes) at local address 0x02008000
Buffer B: 877MB (919654400 bytes) at local address 0x38d15000

Running 1 test sequence...

Test sequence 1 of 1:
  Stuck Address       : FAILURE: possible bad address line at offset 0x1209e80a.
Skipping to next test...
  Random Value        : FAILURE: 0x3fff225d != 0x5bff225d at offset 0x0455b402.
  (ばっさり略)
*** Address Test Failed ***  One or more DIMM address lines are non-functional.
*** Memory Test Failed ***  Please check transcript for details.

ぼろぼろー。あと考えられるのは、Remberが2Gのメモリと仲悪い…なんてことは考えにくいでしょうが、一応3GのMBPのひとにもテストをお願いしました。待て次号!

ってわけで、現在1G状態…

2007年3月 8日

続:メモリ不具合疑惑

ってことで、同じ3GのMBPでRember試してもらいましたが、ちゃんとpassしたそうです。 やっぱりメモリ不良でした…

2007年3月15日

SpanningSync 1.0

でたようです

you'll be able to choose either a $25 one-year subscription or a $65 one-time payment.

ううむ、予想よりも高い…

2007年10月17日

LeopardのKeychainはいかがなものか

というわけで、10月26日に出荷と正式にアナウンスがあったわけですが。 このへんに300+ New Featuresという情報が掲載されています。

Keychainは複数のクライアント証明書の扱いがちょーへたくそで、これが頭痛の種だったわけですが、前述のページでKeychainと証明書に関する記述は以下のような感じ。

Multiple User Certificates

Have more flexibility in choosing a digital certificate for encrypting email messages. With support for multiple user certificates, you can use the Keychain application to associate your certificates with various email addresses.

…いやなんとも微妙。Mail.appで扱えるのはいいとして、Safariはどうなんでしょう。 こちらのほうが切実なんですけど。

2007年12月19日

またおちた

ひょっとして相性悪いのか?

Wed Dec 19 01:03:27 2007
panic(cpu 1 caller 0x0039CD77): "m_free: freeing an already freed mbuf"@/SourceCache/xnu/xnu-1228.0.2/bsd/kern/uipc_mbuf.c:2742
Backtrace, Format - Frame : Return Address (4 potential args on stack) 
0x35b7b708 : 0x12b0e1 (0x455670 0x35b7b73c 0x133238 0x0) 
0x35b7b758 : 0x39cd77 (0x48e03c 0x1 0x35a9e01c 0x35b7b7c4) 
0x35b7b798 : 0x39d073 (0x3006b300 0x0 0x40fcbdc4 0x40fccb18) 
0x35b7b7b8 : 0x34fa5821 (0x3006b300 0x0 0x20 0x35001f1c) 
0x35b7b8e8 : 0x34fae9e5 (0x1 0x0 0x40fa0410 0x40fccb94) 
0x35b7bc08 : 0x34fb393a (0x237b22c8 0x0 0x237b3d98 0x40d9c000) 
0x35b7bde8 : 0x34fb4fb1 (0x237b22c8 0x1ae25 0x35b7be18 0x1a6d13) 
0x35b7bf18 : 0x41d149 (0x237b2000 0x3b27b00 0x1 0x19ccc1) 
0x35b7bf68 : 0x41c2a6 (0x3b27b00 0x4917048 0x35b7bf98 0x1368db) 
0x35b7bf98 : 0x41bf88 (0x4132600 0x4132600 0x35b7bfc8 0x4917048) 
0x35b7bfc8 : 0x19e2ec (0x4132600 0x0 0x1a10b5 0x46be128) 
Backtrace terminated-invalid frame pointer 0
      Kernel loadable modules in backtrace (with dependencies):
         com.apple.driver.AirPort.Atheros(300.22)@0x34f80000->0x3500afff
            dependency: com.apple.iokit.IO80211Family(200.7)@0x346f6000
            dependency: com.apple.iokit.IOPCIFamily(2.4)@0x2e230000
            dependency: com.apple.iokit.IONetworkingFamily(1.6.0)@0x346d9000

BSD process name corresponding to current thread: kernel_task

Mac OS version:
9B18

Kernel version:
Darwin Kernel Version 9.1.0: Wed Oct 31 17:46:22 PDT 2007; root:xnu-1228.0.2~1/RELEASE_I386
System model name: MacBookPro1,1 (Mac-F425BEC8)

mbufか…またメモリ怪しいのかなあ。

2008年7月16日

Dictionary.app

最近、LeopardのDictionary.appではWikipediaの検索もできると云うことを知りました。ほんとうはWikibooksも索けるとうれしいんですけど、Wikipediaだけでもまあまあ便利。

で、まあだからというわけでもないんですが、Emacsから手軽にDictionary.app使えるとうれしいなー、なんて。

(defvar open-dictionary-history nil)
(defun open-dictionary (&optional word)
  (interactive)
  (let ((word (or word (read-string "Open Dictionary.app for: "
				    (cons (thing-at-point 'word) 0)
				    'open-dictionary-history))))
    (start-process "dictionary.app" nil "open"
		   (format "dict:///%s" (encode-coding-string word 'utf-8)))))

(global-set-key "\M-l" 'open-dictionary)

あーWikibooks索きたい。