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 による無線通信~

2011年12月31日土曜日

phpのデバッグ

php.iniでエラー表示がOff(下記)になっている環境でデバッグする場合。
display_errors = Off
スクリプトに、ini_set( 'display_errors', 1 ); と書く。
<?
ini_set( 'display_errors', 1 );
...何らかの処理....
?>
そうしておいてテストすると、こんな風にエラーが表示される。
php -f foo.php

Fatal error: Call to undefined function bar() in /home/como/foo.php on line 15
リリース版では元に戻すのを忘れずに。

2011年12月29日木曜日

Lion ServerでのApache設定

Mac OSX Lion ServerのWebサーバのDocumentRootは、
/Library/Server/Web/Data/Sites/Default/
設定ファイルは、
/etc/apache2/sites/0000_any_80_.conf
システム環境設定→共有→Web共有→コンピュータのWebサイトフォルダを開く... からだと、
/Library/WebServer/Documents
が開かれてしまうので注意する。

2011年12月27日火曜日

NodeでWebSocket

2011/12/27現在NodeでWebSocketを使うなら、WebSocket-Nodeがベストなようだ。
ブラウザサポートが幅広い。

proxy環境内からnpm

npmnodeにパッケージを追加しようとしたらエラー発生。
対策はこちら。
npm config set registry http://registry.npmjs.org/

先人の知恵に感謝。 proxy環境でnpm使おうとしたら、Error: socket hang up

2011年8月9日火曜日

vimdiffは忘れやすい

たまにしか使わないのでいつも忘れてしまう。
とりあえずdoとdpの使い方さえマスター出来れば、マージ作業の速度は10倍ぐらいに上がるはず。

起動
vimdiff file1 file2 [file3 [file4]]

起動 gvimの場合
gvim -d file1 file2 [file3 [file4]]

あるいは
alias gvimdiff='gvim -d' #もし無ければaliasを設定

gvimdiff file1 file2 [file3 [file4]]

前の差分へ移動
[c

次の差分へ移動
]c

現在のバッファをもう1つのバッファと同じくなるように変更をする
"o" は "obtain"の意味 (via :h vimdiff)
do

もう1つのバッファを現在のバッファと同じくなるように変更する
"p"何だろう?"put"のp?
dp

2011年6月3日金曜日

デュアルブートをシングルブートにしてパーティションサイズを広げる方法

WindowsとUbuntuのデュアルブートにしていたPCから、Windowsを削除してUbuntuのみシングルブートにした時のやり方。

ゴール
プライマリパーティションのWindowsを削除する
拡張パーティションのUbuntuをプライマリパーティションに移動する
拡張パーティションを削除する
プライマリパーティションを目一杯大きく取る

前提条件
プライマリパーティションが拡張パーティションよりも容量が大きいこと。
そうでない場合は、一時退避用に外部のストレージを用意する必要がある。

手順

  1. UbuntuのLiveCDを用意する

  2. 1のLiveCDでブートする

  3. 一時転送

  4. ddrescueを入れて、パーティションのクローンを作る
  5. ここらへんを参考に。
  6. GPartedをインストールする

  7. GPartedで転送先のパーティションをチェックする

  8. GPartedで不要となる拡張パーティションを削除し、プライマリパーティションを広げる

  9. 拡張パーティションにSwap領域を確保してマウントしている場合、swapoffする必要があるかも。
  10. Grubをインストールしなおす
  11. ここらへんを参考に。
  12. 再起動する
  13. 再インストールしたGrubによって、新しいパーティションのUbuntuで起動。


転送先の容量を間違えて転送元よりも小さなものを使ってしまい、クローン作成に失敗してはまった。

数百GBあるとかなり時間がかかるので、暇なときにやるとよいでしょう。