外で開発する場合に、マウスがないと不便なので、 vimouseをMacに移植するためにMacRubyをインストールしてみる事にしました。 最初はインストーラを以下のサイトから落としてきて普通にインストールしました。

インストール自体は非常に簡単に終了したのですが、 macirbを実行しようとすると以下のようなエラーが出て、 入力をいっさい受け付けなくなるという悲しい状況に。

   1  % macirb
   2  dyld: lazy symbol binding failed: Symbol not found: _rb_enc_find_index
   3    Referenced from: /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/universal-darwin9.0/nkf.bundle
   4    Expected in: flat namespace
   5  
   6  dyld: Symbol not found: _rb_enc_find_index
   7    Referenced from: /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/universal-darwin9.0/nkf.bundle
   8    Expected in: flat namespace

どうやら今のバージョン(0.3.1)のMacRubyには、 NKFに問題があって、日本語環境でmacirbを実行しようとすると問題があるようでした。

という事で、最新版なら直ってるかもしれないという望みにかけて、 trunkから切り出してきたMacRubyも試してみました。

   1  % git svn clone http://svn.macosforge.org/repository/ruby/MacRuby -T trunk
   2  % cd MacRuby
   3  % rake
   4  % sudo rake install
   5  % macruby -v
   6  MacRuby version 0.4 (ruby 1.9.0 2008-06-03) [universal-darwin9.0]

しかし残念ながら、上記の問題はまだ直っていないようです。

posted by Png genki on Mon 22 Sep 2008 at 15:18 with 3 comments

LeopardでGNU screenを使っているとき、以下のような エラーメッセージが出てくることがあるようです。

   1  ****** Returning nil _server **********

これはLeopardに付属している/usr/bin/screenに当たっているパッチの影響であるらしく、Macports版のGNU screenを使えばこの問題は発生しないようです。

posted by Png genki on Mon 22 Sep 2008 at 09:35

iPhone-2.1になってから、SafariでSVGを表示できるようになったらしい。

SVG working on the iPhone

30AA30FC30AC30CA30A430B6

おお。

See Also

posted by Png genki on Thu 18 Sep 2008 at 23:04

.autotestを書き換えるたびに思い出すのに苦労するのでまとめておきます。

Hook List of autotest
hook namewhen does it happen?
:initialize起動直後
:interruptINT割り込み発生時
:reset初期化の後およびING割り込み時の初期化が完了した後
:run_commandテストの実行前
:ran_commandテスト完了時
:all_goodINTによる全体テストが成功裏に完了した場合
:waitingテスト実行完了後にsleepする直前
:quit終了時

posted by Png genki on Tue 16 Sep 2008 at 08:32

早速Growlとautotestを連携させてみようと思ったのですが、 growlnotify-1.1.4でメッセージを出そうとすると、

   1  % growlnotify -m "test"
   2  2008-09-15 09:13:20.929 growlnotify[901:10b] could not find local GrowlApplicationBridgePathway, falling back to NSDNC

こんな感じのWARNINGが出てきます。 メッセージ自体はきちんと表示されるので、実用上問題ないのですが、 毎回警告が出てくるのはちょっと気になるので、 警告が出ない方法が無いかいくつか試してみた所、 以下のようにホストを指定すると大丈夫なようでした。

   1  % growlnotify -m "test" -H localhost

ということで、autotestと連携させるために、 以下のような.autotestファイルを作成しました。

   1  class Autotest
   2    module Growl
   3      IMG_OK = '/Developer/Examples/Carbon/Dial/English.lproj/' +
   4               'rotate_knob_select.tiff'
   5      IMG_NG = "/Applications/Mail.app/Contents/Resources/Caution.tiff"
   6      class << self
   7        def growl(title, msg, img = nil, pri = 0, sticky = "")
   8          img ||= IMG_NG
   9          msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
  10          system "growlnotify -n autotest #{title} -m #{msg.inspect}" +
  11            " -H localhost --image #{img} -p #{pri} #{sticky}"
  12        end
  13      end
  14  
  15      Autotest.add_hook :run_command do |at|
  16        growl "autotest running", "Started", IMG_OK
  17      end
  18  
  19      Autotest.add_hook :ran_command do |at|
  20        result = [at.results].flatten.join("\n")
  21        examples = result.slice(/(\d+)\s+examples?/).to_i
  22        tests = result.slice(/(\d+)\s+tests?/).to_i
  23        failures = result.slice(/(\d+)\s+failures?/).to_i
  24        errors = result.slice(/(\d+)\s+failures?/).to_i
  25        if failures + errors > 0
  26          growl "Tests Failed",
  27            "#{failures} failures #{errors} errors", IMG_NG, 2#, "-s"
  28        else
  29          growl "Tests Passed", "#{tests + examples} tests", IMG_OK
  30        end
  31      end
  32    end
  33  end

最初はrequire 'autotest/growl'をしてモンキーパッチを当てていたのですが、 結局ほとんど書きかえてしまったのでこうなりました。

エラーが発生した場所や、エラーメッセージなんかも表示できるようになるともっと便利になるかもしれないですね。

posted by Png genki on Mon 15 Sep 2008 at 09:24 with 2 comments

Mac環境でうまく動いていない状況だったので、修正を行いました。

http://github.com/genki/trident/tree/master

基本的な使い方の変更は特にありません。

複数の端末でTridentを起動しているときに、 'Trident.reload'を呼び出した端末でのみリロードが実行されるようになりました。 よろしくお願いします。

posted by Png genki on Sat 13 Sep 2008 at 15:48

まだMacの起動スクリプトのことをなんと呼べばいいのかわからないのですが、 とりあえずなくて困ったので、 HyperEstraier用の起動スクリプトを作ってみました。

hyperestraier.plist

   1  <?xml version="1.0" encoding="UTF-8"?>
   2  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   3  <plist version="1.0">
   4  <dict>  
   5          <key>Debug</key>
   6          <false/>
   7          <key>Label</key>
   8          <string>org.macports.hyperestraier</string>
   9          <key>OnDemand</key>
  10          <false/>
  11          <key>ProgramArguments</key>
  12          <array> 
  13                  <string>/opt/local/bin/daemondo</string>                <string>--label=hyperestraier</string>
  14                  <string>--start-cmd</string>
  15                  <string>/opt/local/etc/LaunchDaemons/org.macports.hyperestraier/hyperestraier.wrapper</string>
  16                  <string>start</string>
  17                  <string>;</string>
  18                  <string>--stop-cmd</string>
  19                  <string>/opt/local/etc/LaunchDaemons/org.macports.hyperestraier/hyperestraier.wrapper</string>
  20                  <string>stop</string>
  21                  <string>;</string>
  22                  <string>--restart-cmd</string>
  23                  <string>/opt/local/etc/LaunchDaemons/org.macports.hyperestraier/hyperestraier.wrapper</string>
  24                  <string>restart</string>
  25                  <string>;</string>
  26                  <string>--pid=none</string>
  27          </array>
  28          <key>RunAtLoad</key>
  29          <false/>
  30  </dict>
  31  </plist>

plistファイルの中で指定されているhyperestraier.wrapper は以下の通り。

   1  !/bin/sh
   2  #
   3  # MacPorts generated daemondo support script
   4  #
   5  
   6  #
   7  # Init
   8  #
   9  prefix=/opt/local
  10  
  11  #
  12  # Start
  13  #
  14  Start()
  15  {
  16    if test ! "`netstat -a -n | grep 1978`"; then
  17      rm -f /opt/local/var/run/hyperestraier/_pid
  18    fi
  19  
  20    /opt/local/bin/estmaster start -bg /opt/local/var/run/hyperestraier
  21  }
  22  
  23  #
  24  # Stop
  25  #
  26  Stop()
  27  {
  28    /opt/local/bin/estmaster stop /opt/local/var/run/hyperestraier
  29  }
  30  
  31  #
  32  # Restart
  33  #
  34  Restart()
  35  {
  36    Stop
  37    Start
  38  }
  39  
  40  #
  41  # Run
  42  #
  43  Run()
  44  {
  45  case $1 in
  46    start  ) Start   ;;
  47    stop   ) Stop    ;;
  48    restart) Restart ;;
  49    *      ) echo "$0: unknown argument: $1";;
  50  esac
  51  }
  52  
  53  #
  54  # Run a phase based on the selector
  55  #
  56  Run $1

macportsで入れたmysql5-develの起動スクリプトを元にしているので、 ディレクトリ構成などがmacports的になっています。

posted by Png genki on Fri 12 Sep 2008 at 15:11 with 1 comment

MacportsでMySQLをインストールしているという前提で。 普通に

   1  sudo gem install msyql

をすると、libmysqlclientが見つからずにインストールが失敗します。 そこで、/opt/local/lib/ruby/gems/1.8/gems/mysql-2.7に移動し、

   1  # ruby extconf.rb --with-mysql-config=/usr/local/mysql/bin/mysql_config
   2  # make
   3  # make install

でOK。

posted by Png genki on Fri 12 Sep 2008 at 14:23 with 2 comments

あなたは今までにインストールしたMySQLの数を覚えているだろうか。

何度となくインストールしてきたMySQLですが、 Macの場合は、いくつもインストールする方法があるので、 どれが良いか迷いました。 @shachiさんにアドバイスをいただいて パッケージ版をインストールしてみたのですが、 Macports版のmysql5-develも捨てがたく、 結局mysql5-devel+GUI Toolsという構成に落ち着きました。

Macportsからインストールした場合、/opt/local 以下にインストールされるので、以下のようにシンボリックリンクを 作成しました。

  • /var/run/mysqld -> /opt/local/var/run/mysql5
  • /etc/my.cnf -> /opt/local/etc/mysql5/my.cnf

だいたいこんな感じです。 非常に快適になりました。

See Also

追記

なぜか不思議なことに、Macを再起動すると、/var/run/mysqld に作成したシンボリックリンクが消えてしまうことがわかりました。 /private/var/run/mysqldにしてみるなど、 いろいろ試してみたのですが、 結局再起動するとなくなってしまいます。 何が原因なのかまだわからないですが、 とりあえず対処療法として、mysqlの起動スクリプトでシンボリックリンクを作成するようにしてみました。

/opt/local/etc/LaunchDaemons/org.macports.mysql5-devel/mysql5-devel.wrapper(抜粋)

   1  #
   2  # Start
   3  #
   4  Start()
   5  {
   6    ln -s -f /opt/local/var/run/mysql5 /private/var/run/mysqld
   7    /opt/local/share/mysql5/mysql/mysql.server start
   8  }

これでひとまず大丈夫になりました。 しかし再起動するとシンボリックリンクが無くなってしまうというのは不可解ですね。きっと何か理由があるんでしょうけれど。

posted by Png genki on Fri 12 Sep 2008 at 12:13 with 1 comment

Macの環境でstat -cが使えなかったので、ついでに以前作成した Rakeタスク補完関数を書き換えてみました。

   1  _rake () {
   2    if [ -f Rakefile ]; then
   3      compadd `rake -T | awk "{print \\$2}" | xargs`
   4    fi
   5  }
   6  
   7  compdef _rake rake

posted by Png genki on Fri 12 Sep 2008 at 06:58 with 1 comment