Mac OS X で pkg-configでエラーになった

普段から OS Xのパッケージ管理には Homebrew を使っています。
Homebrew に含まれる一部パッケージ(pango)のバージョンを変えてインストールする必要があり、自分でビルドしてみようと思ったところすっかりはまってしまいました。

発生した症状

Homebrew でインストールしたパッケージ(cairo)に依存している箇所でエラーになってしまいました。

具体的には ./configure の実行中に pkg-config で依存しているパッケージの.pc ファイルが存在しないと怒られています。

# config.log
pkg-config --cflags --print-errors cairo 

Package xcb-shm was not found in the pkg-config search path.
Perhaps you should add the directory containing `xcb-shm.pc'
to the PKG_CONFIG_PATH environment variable
Package 'xcb-shm', required by 'cairo', not found

解決するには?

エラーメッセージどおり、環境変数 PKG_CONFIG_PATHの通るところに .pc ファイルを配置するか、環境変数にパスを追加して再実行することで解決しました。

PKG_CONFIG_PATHが空の場合のデフォルトは

/usr/local/lib/pkgconfig

です。

今回は /opt/X11/lib/pkgconfig/ の中に依存している .pcファイルがあったので、パス追加で対応しました。

$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/

再実行し、エラーが出なくなるのを確認します。

$ pkg-config --cflags --print-errors cairo

あとは通常通り、./configure, make などを実行すればOKです。

OS X では(Homebrewでは?) X11 関係の pkgconfigのパッケージ情報ファイル(.pcファイル)は /opt/X11/lib/pkgconfig/ にあるのですね。

【Java】 Mapを値でソートする方法

Javaでソート対応のマップと言えばTreeMapだけど、TreeMapはキーのソートにしか対応してません。

マップの値でのソートはオブジェクト外の要素でソートしたい時などは値でのソートが出来ると便利ですので、今回はその方法をご紹介します。

続きを読む 【Java】 Mapを値でソートする方法

Mac OS X でポートを開いているプログラムを調べる

WindowsやLinuxでは netstat の -bオプションや-pオプションでポートを待ち受けているプロセスを調べる事ができるのに、Mac OS Xではそんなオプションが無く困った。

なんとか方法が他にないか調べた所、
Mac OS X では lsof を使うのが一番簡単そう。

$ lsof -i | grep LISTEN

結果はこんな感じになる。

$ lsof -i | grep LISTEN
Dropbox     303   user   19u  IPv4 0xffffff0123456789      0t0  TCP *:17500 (LISTEN)
Dropbox     303   user   25u  IPv4 0xffffff0123456789      0t0  TCP localhost:26165 (LISTEN)
node      56728   user    8u  IPv4 0xffffff0123456789      0t0  TCP *:hbci (LISTEN)
mongod    57071   user    6u  IPv4 0xffffff0123456789      0t0  TCP localhost:28017 (LISTEN)
mongod    57071   user    7u  IPv4 0xffffff0123456789      0t0  TCP localhost:27017 (LISTEN)

調べようと思った動機は mongodb のListenポートをど忘れして確認したかっただけでした。
実行結果を見ると mongodb は TCP localhost:27017, TCP localhost:28017とあるので、
待ち受けているポートはTCPポート27017, 28017の2つですね。

Linuxで “ls -l” のパーミッションに現れるドットの謎

Linux で ls -l の表示をした時に、パーミッション欄の右側にドット(“.”)が現れる事がある。

# ll -h /etc/profile.d/
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.csh
-rw-r--r--. 1 root root 1.2K  4月 28 23:58 2010 colorls.sh
-rw-r--r--  1 root root 1.8K 12月 11 08:19 2011 foo.sh

何度か調べるのだけど、すぐ忘れてしまうのでメモしておく。 続きを読む Linuxで “ls -l” のパーミッションに現れるドットの謎

WebViewでshouldOverrideUrlLoading()が反応しない問題

StackOverflowでも”shouldOverrideUrlLoading(…) not executed if “window.location.href” modified in a timeout callback“と報告されているが、WebViewで JavaScript から location.href を書き換えると通常shouldOverrideUrlLoading()が反応するのに setTimeout()を使用して location.href を書き換えた場合は shouldOverrideUrlLoading() が呼ばれません。 続きを読む WebViewでshouldOverrideUrlLoading()が反応しない問題

RVMでRuby環境の切り替えを簡単に!

Rvm image
Ruby 開発を始める時はまずgem管理ツールを入れておくと便利です。
実行環境やプロダクトに応じ、Ruby本体やgemパッケージの依存するバージョンが異なる事も多々あります。これらのバージョンを管理して切り替えを容易にしてくれるのがRVM(Ruby Version Manager)やBundlerといった管理ツールなのです。

今回はRVMのインストール手順をまとめました。それでは続きをどうぞ。 続きを読む RVMでRuby環境の切り替えを簡単に!

iPhoneで電話番号リンク問題の対処方法まとめ

iPhone の Safariは連続する数字が勝手に電話番号のリンクになってしまいます。
電話番号や郵便番号(123-4567)のようなハイフン区切りだけでなく、
小数点(123.4567)のようにドット区切りの数値までも電話番号リンクになります。

これでは困るので対処方法をまとめました。
(iPhone 4, iPhone 4sで動作確認)

目次:

  1. 1.iPhone 版 Safari用の対策
  2. 2.Safari以外のアプリ用の対策
  3. 3.修正できないアプリ用の対策

続きを読む iPhoneで電話番号リンク問題の対処方法まとめ

Android Javaの正規表現の落とし穴

Androidで正規表現を使っていて、全角のパターンマッチで少しはまったのでメモ。

Javaでは他の正規表現エンジンと同様、POSIX文字クラスが利用できます。

if("Hello".match("^\\p{Alpha}+$")){
System.out.println("アルファベットだけ!");
}

続きを読む Android Javaの正規表現の落とし穴