2012年12月31日月曜日

openFrameworksのMacアプリにアイコンを設定する

openFrameworks(この記事の執筆時点では0073)のprojectGeneratorで作成したプロジェクトからビルドしたMac OS Xアプリにはアイコンを設定するには、Xcode 4上の意外な部分の変更が必要だったのでメモしておく。

1. まず通常の手順(参考)でアイコンを追加した。しかしこれだけだと.appにはアイコンは設定されない。

2. この時足りないのは以下の画像のように、Copy Bundle Resourcesでアイコンファイルをコピーするように設定されていなかった。
Xcode 4のBuild Phases画面
このCopy Bundle Resourcesの項目は、通常の手順でCocoa Applicationを作成した場合は最初から存在するので意識することはないのだが、projectGeneratorで作成したプロジェクトにはなかった。
Info.plistやicnsの設定ばかり疑ってしまったが、意外な落とし穴だった。

2012年11月13日火曜日

Mac OS Xの普段使いで爆速で計算する方法

Macを使っているときに簡単な計算をしたいだけなら、計算機アプリを起動する必要はないことを知ったのでメモ。

やり方は、
Command+Space でSpotlightを開いて計算したい式を入れるだけ。
入力する式の例. 1+2

定数eやpi、さらに括弧も使える。例. (1+2)/3
三角関数も使える。例. sin(pi/4)
べき乗は^。例. 5^2
log()は常用対数だ。例. log(10)

およそ2秒で計算完了。

※ GCDやOpenCL等の記事を期待していらした方、ご期待に添えずすみません。

2012年10月5日金曜日

node.js + express + socket.io 仕様変更対応

expressとsocket.ioのAPI仕様が変わったらしく、適当にアップデートしたら動かなくなってしまった。
対処方法は下記の通り。

サーバー側
var express = require('express')
  , app = express();
  , io = require('socket.io').listen(app.listen(3000));

app.configure(function(){
 app.use(express.static(__dirname + '/public'));
});

クライアント側 HTML
<script src="/socket.io/socket.io.js"></script>

参考にしたページ
「Cannot GET /socket.io/socket.io.js」の解決法 (Node.js v0.8.0/express v3.0.0/socket.io v0.9.6)

2012年10月3日水曜日

vimで一括処理

文字コードや改行コードを一括で変換したい時や特定の文字列を置換したい時に、nkfがなくても、sedを知らなくても、vimさえあればなんとかなります。

1. Vimを起動する

2. カレントディレクトリを置換対象のファイルがあるディレクトリに移動する
:cd foo

3. 引数リストにファイルを追加する
例. カレントディレクトリ以下の拡張子がcのファイル。
:args  **/*.c

4. 確認する
:args

5. 置換する
例. エンコーディングをutf-8、改行コードをLF、タブをスペースにする。
:argdo fenc=utf8 ff=unix et | update

余談
argdoの他にbufdo、tabdo、windoもある。
argsの他に個別に追加削除するためのargaddやargdeleteもある。

2012年5月14日月曜日

UnityとKinectとOpenNIを組み合わせる

UnityOpenNIKinectXtion Proを使って、Unity内のオブジェクト操作する環境を構築する方法についてまとめておこうと思う。

前提条件: OpenNI一式とUnityが動作していること。
検証した環境: Mac OSX Lion、Unity 3.5、Xtion ProまたはKinect


  1. OpenNIのダウンロードページから"PrimeSene Unity Wrapper Unstable Build v0.9.7.4"(2012.5.14時点の最新)をダウンロードする
  2. ダウンロードしたopenni_unity_toolkit-0.9.7.4.zipを展開するとOpenNI_Unity_Toolkit-0.9.7.4.unitypackageが出来る。
  3. UnityのProjectにOpenNI_Unity_Toolkit-0.9.7.4.unitypackageをインポートする。方法はメニューから"Assets"->"Import Package"->"Custom Package ..."でOpenNI_Unity_Toolkit-0.9.7.4.unitypackageを選択。
  4. Unity 3.5を使っている場合、3でインポートしたパッケージ内のNIInput.csにエラーが起こるのでここを参考に次の通り修正する。295行目の"return Input.GetRotation(deviceID);"を"return Quaternion.Euler(Vector3.zero);"。306行目の"return Input.GetPosition(deviceID);"を"return Vector3.zero;"にそれぞれ書き換える。
  5. "OpenNI"->"Prefabs"->"Sample Prefabs" "OpenNI"->"Sample Scenes"にある各種サンプルをHierarchyに追加して動かしてみる。
以上だが、Cheetah3Dで自作したキャラクターにリグを組んでインポートしたら、回転と前後左右が逆になった。右手系と左手系の変換が上手くいっていないようで、久しぶりにBlenderを使おうかと。

参考
[Unity][Blender] BlenderからUnityへキャラクターをインポートする

2012.5.14 手順の5番目の記述が間違えていたので修正


2012年2月29日水曜日

GitoliteをMac OS X Lion Serverにインストールする

クライアントからgitolite-adminがclone出来ずに非常に悩んだのだが、最終的には次のサイトを見て分かった。
gitolite で Git リポジトリへの SSH アクセスを制御する
Gitolite git clone error

ポイント
  1. ssh-keygenで生成するファイルは、普段利用しているid_rsa.pubでは無く、別のものにする。
  2. Appleの提供するGitを使うならサーバーにXcodeをインストールする。
  3. 2でインストールされたGitを使うなら、サーバーのgitユーザーのホームフォルダにある.gitolite.rcに下記の一行を追加する。
  4. $ENV{GIT_EXEC_PATH} = "/usr/libexec/git-core";

以上の全てを満たしておかないと、クライアントからgitolite-adminをcloneしようとした時に下記のエラーが出る。
$ git clone GITUSER@SERVERNAME:gitolite-admin
Cloning into 'gitolite-admin'...
Warning: No xauth data; using fake authentication data for X11 forwarding.
Assertion failed: (argv0_path), function system_path, file exec_cmd.c, line 30.
error: git-shell died of signal 6
fatal: The remote end hung up unexpectedly

特に上記ポイントの3番目は忘れがちなので注意が必要だ。

2012年2月25日土曜日

AndroidとMacをBluetoothのSPPで接続してデータ送受信

AndroidのサンプルコードにBluetoothChatというものがある。
これを改造してMacと繋いで文字列を送受信したので手順を書いておく。

EclipseでBluetoothChatのプロジェクトを作り、BluetoothChatからサンプルコード一式を取ってきて追加する。

BluetoothChatService.javaのUUIDを次のように変更する。
private static final UUID   MY_UUID_SECURE = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

今回、BluetoothChatService.javaのInsecureと書いてある部分は使わないので、メンバ変数から、MY_UUID_INSECUREとmInsecureAcceptThreadを削除する。この状態でビルドするとエラーが出るので、そのエラーに関連する部分もまとめて削除する。
さらにBluetoothChat.javaやリソースXMLの方も、insecureと書いてある部分は使わないので削除してよい。

この状態でビルドしたものをインストールして起動後、メニューボタンを押してMake discoverableを選んでMacから接続しておく。

接続が出来ていれば、Mac側に/dev/tty.NexusOne-BluetoothChatのようなデバイスファイルが出来ているはずだ。
ここまで出来たら、シリアルコンソールで接続する。
例えばscreenを使うなら以下のようにする。
sudo screen /dev/tty.NexusOne-BluetoothChat 9600

双方から文字列をやり取り出来れば完了だ。

Tips
図1のエラーが出る場合は、Mac側から設定を削除した後にもう一度最初から接続設定をするとうまくいくかもしれない。または図2および図3のようにBluetoothの設定画面を開いて、プロトコルを現在RS-232Cが設定されていたらモデムに、モデムならRS-232Cに設定して適用するとうまくいくかもしれない。


図1

図2

図3

参考にしたサイト
BluetoothChatでシリアル接続(SPP)を行う
Androidアプリ開発 ~Bluetooth SPP による無線通信~