「Mac」カテゴリーアーカイブ

MacPorts で gnutls

研究室の環境もぼちぼちMojaveにアップデートしつつあるのですが、Emacs + Wanderlust でメールを読もうとしたらいきなりクラッシュ。なんでかー、と思って backtrace を眺めたらどうやら IMAP で STARTTLS しようとして、 gnutls-cli を呼んだところで落ちている。Ivy Bridge とか Haswell な Mac だとダメで、いまどきの新しい Mac なら問題ないようだ。つまり、SSEx だとかその手のやつですよね。

というわけで、
% gnutls-cli –startls-proto=imap my.mail.server
としたら本当に落ちるじゃありませんか。しかも Illegal instruction だと…

で、どうやら gnutls の問題じゃなくて、GMP の問題らしい: http://lfsbookja.osdn.jp/7.10/chapter06/gmp.html

MacPorts の枠組みの中でなんとかならんかなー、と思った結果、GMP に core2 という variant があるので、これを使えば Core2 アーキテクチャまでの最適化しかしない、ということで、とりあえず解決。よかった… (まあ GMP でごりごり、みたいなことはしないので、いいか)

GTK-mac-bundler HOWTO (ビルド編)

gtk-mac-bundler の本体もとってきて、適当なディレクトリに展開して make install します。
[code:plain]
$ tar xf gtk-mac-bundler-0.7.3.tar.xz
$ cd gtk-mac-bundler-0.7.3
$ make install
[/code]
これで gtk-mac-bundler がインストールされる先は ~/.local/ 以下で、jhbuild で gtk をインストールした先と同じです。また、展開したフォルダ以下の examples/ には gtk-mac-bundler を実行するときの設定ファイルのサンプルがいろいろあります。
pkg-config が参照する GTK のインストールディレクトリを適切に選択するためには、PKG_CONFIG_PATH とかを設定する必要があるのですが、そういうのはまとめて jhbuild に委ねます。
[code:plain]
$ jhbuild shell
[/code]
これで起動するシェルは環境設定がちゃんとできているだけで普通の bash なので、このなかで普通に自分のプログラムを build して実行ファイルを作ります。
アプリケーションバンドルを作るには以下のファイルが必要です。
– .bundle ファイル (gtk-mac-bundle の設定)
– Info.plist (OS X 用)
– 起動用シェルスクリプト
– アイコンファイル
[.bundle ファイル]
gtk-demo をアプリケーションバンドルにするためのサンプルが examples/gtk-demo.bundle として用意されており、中味は XML ファイルです。最低限変更が必要なのは、
– launcher-script (起動用シェルスクリプト)
– plist (Info.plist として使うファイル)
– main-binary (実行ファイル本体)
の3つです。アイコンのファイルがある場合には、これも変更しておきましょう。
また、pango に関連するバイナリが不足しており、このままだとポータビリティのない (他のMacで動かない) バンドルができてしまうので、pango-querymodules や pango のモジュールを含める設定をします。
[code:xml]

${prefix}/bin/pango-querymodules
${prefix}/lib/pango/1.8.0/modules/*.so

[/code]
[Info.plist]
アプリケーションのバージョンや Copyright の情報などが記述されています。examples/Info.plist をたたき台にしてテキストエディタで書きます。
[起動用シェルスクリプト]
サンプルとして examples/launcher.sh が用意されており、基本的にはこれで変更の必要はない、はずなのですが、やはり pango に関連する部分を修正しておかないと、他の Mac に持って行ったときにフォントが全部□になってしまいます。
修正が必要なのはスクリプトのわりと最初のほうと、一番最後の2カ所です。これで、起動のたびに pango のモジュールパスを正しく生成するようにします。
[code:plain]
export PANGO_RC_FILE=”$bundle_etc/pango/pangorc”
+export PANGO_LIBDIR=”$bundle_lib”
+export PANGO_SYSCONFDIR=”$bundle_etc”
[/code]
[code:plain]
+mkdir -p “$bundle/pango/1.8.0”
+ln -sf ../../ “$bundle/pango/1.8.0/modules”
+
+”$bundle_bin/pango-querymodules” > “$bundle_etc/pango/pango.modules”
+
+export PANGO_LIBDIR=””
+
$EXEC “$bundle_contents/MacOS/$name-bin” “$@” $EXTRA_ARGS
[/code]
これで準備は終わりです。
[code:plain]
$ gtk-mac-bundler hogehoge.bundle
[/code]
とすれば、~/Desktop にアプリケーションバンドルが作られるはずです。

GTK-mac-bundler HOWTO (環境構築編)

ひさびさに GMV を Mac 版バイナリ配布用にビルドすることにしました。で、以前は GTK+ のパッケージを別にインストールしてもらう構成にしていたのだけれど、これ、インストール先の環境を汚してしまう感じがして大変申し訳ないので、ちゃんと Application bundle にしたいなー、と思いまして。
GMV を intensive に開発していた頃は、まだ GTK+-Quartz はあちこち怪しいところもあった (Gimp の配布も X11 版でした) んですが、いまはかなり安定して動くようになりましたし、しかも gtk-mac-bundler なんていうツールまで提供されているので、これは使うしかない。
まず、MacOS X 10.8 + Xcode をセットアップ。最近は MacOS X も仮想マシンとして使えるようになって本当に便利。職場では VMware Fusion ですが、自宅では VirtualBox でやってます。どっちもちゃんと動きます。VirtualBox だと、MacOS 用の Guest Additions がないので GUI で使うには若干不便 (host からの copy & paste とかができない) ですが、Xcode のセットアップまでやっちゃえばあとは ssh でログインして作業できることが大半ですし、あんまり問題ない感じ。
GNOME.org の GTK+-OSX のページから、gtk-osx-build-setup.sh というのをとってきてスタートです。なお、一連のツールは jhbuild という仕掛けを利用しており、gtk-osx-build-setp はこれを ~/.local/bin にインストールします。
[code:plain]
$ sh ./gtk-osx-build-setup.sh
$ export PATH=~/.local/bin:$PATH
$ jhbuild bootstrap
[/code]
これでとっかかりの部分があっけなく完了です。

ここから先は bootstrap でインストールされたツール群を利用するために、~/gtk/inst/bin にも PATH を通す必要がありますが、いろいろの環境変数の設定が面倒なので、
[code:plain]
$ jhbuild shell
[/code]
として、構築環境を起動します。しかしここでは MACOSX_DEPLOYMENT_TARGET という環境変数がなぜか 10.7 に設定されており、あとで GTK の build がエラーになるので、
[code:plain]
$ export MACOSX_DEPLOYMENT_TARGET=10.8
[/code]
としておいて、一通りのツールを作ります。Python は build しておかないと、システム標準のでは meta-gtk-osx-core の build でエラーがでる気がします。
[code:plain]
% jhbuild build python
% jhbuild build meta-gtk-osx-bootstrap
% jhbuild build meta-gtk-osx-core
[/code]
(続く)

Yosemite Beta と iOS 8

古い MacBook Air (Late 2010) を引っ張り出してきて Yosemite Beta をクリーンインストールしてみました。Yosemite Beta のインストーラのフォルダの中に createinstallmedia みたいなツールがあり、それで USB メモリを起動ディスクにできます。
[ iCloud ]
Yosemite では iCloud Drive にアップグレードしないと iWork で作って iCloud に置いてあるデータにアクセスできないっぽい。
iOS 8 では iCloud (Drive でない) のデータにアクセスできています。
[ iOS – Mac 連携 ]
iPhone に電話かかってくると Mac の画面に通知が出る。出たからどうにかなるかっていうと、iPhone で普通に電話とるしかないみたいですが。
発信もできそうだけど、やってみても何もおきませんでした。
FaceTime の設定の画面には iPhone と同じ WiFi ネットワークにつながっていれば連携ができる、という説明があります。
[ 動いたもの ]
– ATOK
– Dropbox (ただしファイルやフォルダのアイコンに同期状況のマークがつかない)
– Evernote

Mac mini で謎トラブル

うちの研究室の学生用端末はみんな Mac mini なんですが、先日とある学生が「なんか調子悪いっす」というので、top で変なプロセスがいないかとか、いろいろみてたんですが、結局わからなくてふと log をのぞいたらこんなのがいっぱい。
[code:plain]
Sep 3 16:43:48 macmini3 kernel[0]: stampWait: Overflowed checking for stamp 0x0 on MAIN ring: called from
Sep 3 16:43:48 macmini3 kernel[0]: timestamp = 0x8024f028
Sep 3 16:43:48 macmini3 kernel[0]: **** Debug info for *possible* hang in MAIN graphics engine ****
Sep 3 16:43:48 macmini3 kernel[0]: ring head = 0x5c804250, wrap count = 740
Sep 3 16:43:48 macmini3 kernel[0]: ring tail = 0x00004250
Sep 3 16:43:48 macmini3 kernel[0]: ring control = 0x0000f001 enabled, auto report disabled, not waiting, semaphore not waiting, length = 0x010 4KB pages
Sep 3 16:43:48 macmini3 kernel[0]: timestamps = 0x8024f028
Sep 3 16:43:48 macmini3 kernel[0]: Semaphore register values:
Sep 3 16:43:48 macmini3 kernel[0]: VRSYNC: (0x12044) = 0x8024f028
Sep 3 16:43:48 macmini3 kernel[0]: BRSYNC: (0x22040) = 0x0
Sep 3 16:43:48 macmini3 kernel[0]: RVSYNC: (0x 2040) = 0x0
Sep 3 16:43:48 macmini3 kernel[0]: BVSYNC: (0x22044) = 0x0
Sep 3 16:43:48 macmini3 kernel[0]: RBSYNC: (0x 2044) = 0x0
Sep 3 16:43:48 macmini3 kernel[0]: VBSYNC: (0x12040) = 0x0
[/code]
Userland のトラブルじゃないし、やむなく reboot しました。Intel HD3000 Graphics なモデルなのですけれど、なんでかねー。

Netgear ReadyNAS + FreeBSD + Mac on an APC UPS

(日本語版はまた後日)
There were ReadyNAS, FreeBSD box, and OS X server (Mac mini) all working in my lab. Today, I’ve installed an APC’s UPS, because we have a planned power outage tomorrow.
Since the UPS has enough output capacity for all of NAS + FreeBSD box + Mac, my first plan was:
1) connect UPS to OS X server
2) install apcupsd on FreeBSD
3) NAS + FreeBSD shares the UPS via SNMP
but the plan was soon collapsed because OS X server has no easy way to share its UPS status via SNMP.
The second plan was:
1) connect UPS to OS X server, with apcupsd installed
2) install apcupsd
3) NAS + FreeBSD shares the UPS via SNMP or apcupsd’s NIS feature
* acpupsd NIS is not the Sun’s one, but just it’s special protocol over TCP.
however, again the plan didn’t work. The UPS could be shared between the Mac and FreeBSD box pretty well by apcupsd’s NIS feature, but the NAS couldn’t communicate with the acpupsd NIS server on Mac. One more thing I got know was that apcupsd can’t share its UPS status via SNMP. apcupsd can only “refer” UPS via SNMP, but it can’t provide its status to SNMP servers.
Situation got too bad at this point. There’s no substitute plan, so I can’t go home… But suddenly I’ve found that ReadyNAS has its tcp/3493 port open, and this port is for nut (network UPS tools). So the final plan was this:
1) connect UPS to ReadyNAS
2) install nut on FreeBSD and Mac (both in ports collection and MacPorts)
3) share the UPS with nut protocol
… and I was at the gate of the hell, at this point. apcupsd doesn’t require any kind of authentication info, but nut requires UPS name to connect with a remote UPS. Netgear’s document doesn’t say anything about nut auth.
After an hour, I finally found the UPS name “UPS” on ReadyNAS. And this is everything I’ve wrote in upsmon.conf.
MONITOR UPS@192.168.x.x 1 upsmon pass master
On Mac, I had to write /Library/LaunchDaemons/org.nut.upsmon.plist:
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>Label</key>
<string>org.nut.upsmon</string>
<key>RunAtLoad</key>
<false/>
<key>KeepAlive</key>
<dict>
<key>NetworkState</key>
<true/>
</dict>
<key>ProgramArguments</key>
<array>
<string>/opt/local/sbin/upsmon</string>
<string>-D</string>
</array>
</dict>
</plist>
then:
sudo launchctl load -w /Library/LaunchDaemons/org.nut.upsmon.plist
NAS, FreeBSD and Mac goes down at the battery remaining capacity that is configured in ReadyNAS’s web interface.

MacBook 最強仕様

MacBook が最強仕様になりました。

メモリは 4GB x 2 で 8GB。最初は 6GB までしか使えなかったのですが、いつぞやの firmware update 以降はちゃんと使える模様。Amazon で 16,000 円くらいでした。
IMG_0493.jpg
ハードディスクは 750GB 。もう、CAD でもゲノムでもどんとこい、という感じ。
DSCN4124.JPG

MacBook 修理

母が使っていた MacBook の液晶が突然真っ白になって、映らなくなったので交換した。
液晶パネルは iFixit で、$119. 送料込みで 15,200 円でした。探せば日本国内でも手に入るみたい。
仮組の状態で起動したところ。
DSCN3496.JPG
再組立中。DVD ドライブの右側にツメの受け側が4つ並んでおり、これは左にずらすと
取れるようになっている。
DSCN3498.JPG
交換に関する日本語の記事はちょこちょこ出ているので、多くは書かないけれど、キーボードはネジを外したあと、左側にスライドさせて外す感じ。右側にはほとんどネジがなくて、DVD ドライブの上はツメで止まっているのだけれど、そこは力を入れて外すのじゃなくて、横方向に引っ張って外す仕掛けになっている。それから、ディスプレイのベゼルは、取り外しは比較的簡単だけど、取り付けのときに爪を損傷しやすくて、だいぶダメにしてしまった。
何はともあれ、1万5千円と2時間半で、コンピュータが復活するというのは、めでたい。

iPhone のケース

昨日は銀座の Apple に、MacBook を修理に出してきた。一年ちょっと使って、あちこち不具合がでてきたので持って行ったのだが、意外と大がかりな修理になって、ディスプレイアセンブリとマザーボードが交換だそうだ。しかし、Protection Plan を購入していたおかげで無償。
でも、保険とはいえ、タダで直してもらうのもなんだか申し訳ないので、最近ずっと買おうと思っていた iPhone のケースを新調した。incase の、Monochrome Slider Case というやつ。ちょっと厚みがあるんだけど、すごくいい感じ。
DSCN3248
正面側は、銀色の縁取りのところまでちゃんとカバーされる。実はここがけっこう傷だらけになっていたので、よかった。それに、画面が一段下がったところになるので、床に落としたりしたときに傷つく確率がだいぶ下がると思う。
DSCN3247.JPG
裏側はこんな感じ。暖色系で、非常にかわいい。
最初に買ったケースはシリコンゴムのやつで、あまりホコリがつかないような加工もされており、わりとよかったのだが、だんだん伸びてきてだぼだぼになったので、次は裏からぱちっとはめるタイプの、薄手の硬めの、白いのにした。汚れてきたので同じような透明なのをもう一度買ったんだけど、これは本体と触れる部分にニュートンリングが見えたりして、なんか汚れて見えるのでどうかなー、と思っていたんだ。今度のは大変お気に入り。
しかし、こうやって各社からいろんなケースが出るところが Apple の製品の徳というか、そういうところで、ちゃんとしたケースがあるおかげで本体が長持ちするのは大変すばらしいことです。

GTK on Snow Leopard

Testing the latest GTK+-X11 (installed by MacPorts) on my MacBook, but opening particular windows take too long… I found this problem with my own application, but this is common to other GTK-based applications.
Last night I took a profile with GQVIEW, then found the most time consuming part is Pango. But… why?
gqview_profile.png