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

Node.jsをデバッグオプションでデバッグしてみる

前にnode-inspectorを使ってのデバッグ方法を書いたけど、node-inspectorをバッググランドで起動させたり、デバック用のポート(例:http://localhost:8080/debug?port=5858)にアクセスするとか面倒だったのNode.jsのデバッグオプションを使ってgdbライクにデバッグしてみました。
※サンプルはお絵描きアプリです。
続きを読む Node.jsをデバッグオプションでデバッグしてみる

LionでOpenCVをコマンドラインからコンパイル

前にOSX LionにMacPortsからインストールしたOpenCVをXCodeでコンパイル方法を書いたけど、コマンドラインからコンパイル方法を書いてなかったので書いておきます。

gcc -wall -g -o opencv_test main.c `pkg-config –cflags opencv` `pkg-config –libs opencv`

pkg-configについて

ヘッダファイルやライブラリをリンクするのに、ファイルパス指定をやってくれるのがpkg-configです。
pkg-config –cflags opencv:OpenCVのヘッダファイル指定
pkg-config –libs opencv:OpenCVのライブラリ指定

これはコマンド扱いなのでターミナルで叩くとファイルパスが見れます。
僕の環境だとこんな感じ。
・ヘッダファイルパス

pkg-config –cflags opencv -I /opt/local/include/opencv -I /opt/local/include

・ライブラリファイルパス

pkg-config –libs opencv -L/opt/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann

 
なので、次のように各オプションを指定すれば、pkg-configを使用した場合と同値になる。長いけど。。

gcc -wall -g -o opencv_test main.c -I/opt/local/include/opencv -I/opt/local/include -L/opt/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann

(補足)コンパイルオプション
 -o:実行ファイル名を指定
 -g:実行ファイルにデバッグ用の情報を埋め込む
 -Wall:warningをすべて表示
 -I:コンパイラがヘッダファイルを探すディレクトリを指定
 -L:コンパイラがライブラリを探すディレクトリを指定

ちなみにコンパイルコマンドは、/opt/local/share/OpenCV/samples/c配下に「build_all.sh」なるmakeファイルがあるのでそれを見ればわかるよ。

白黒と輪郭抽出のサンプルを置いたので試しに使ってください。

dotcloudバージョンアップ後にNodejsがデプロイ出来ない対処

dotcloudがバージョンアップしてから、今までのDeploy出来てたものが出来なくなった。。。
port8080のwarningがでてるし、吐き出されたURLにアクセスすると、502。。

同じ現象で解決している人がいたので参考にしながらやったらうまくいったのでメモを。

まずログの確認。

$ dotcloud logs アプリケーション名.www
# tail -F /var/log/supervisor/*.log
==> /var/log/supervisor/node-stderr—supervisor-BkNQQ9.log <== at Function._resolveFilename (module.js:317:11) at Function._load (module.js:262:25) at require (module.js:346:19) at Object. (/home/dotcloud/rsync-xxxxxx/フォルダ名/node_modules/express/node_modules/connect/lib/middleware/compress.js:14:12)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at require (module.js:346:19)
at Object.compress (/home/dotcloud/rsync-xxxxxx/フォルダ名/node_modules/express/node_modules/connect/lib/connect.js:89:14)
 
==> /var/log/supervisor/node-stdout—supervisor-l9fdKH.log <==

express/node_modules/connect/lib/middleware/compress.jsとexpress/node_modules/connect/lib/connect.jsで何かやらかしてるらしい。。原因はローカルとdotCloudでconnectのバージョンが違うことらしい。

続きを読む dotcloudバージョンアップ後にNodejsがデプロイ出来ない対処

Androidアプリ開発時のBreakPointについて

EcripseにBreakPointを設定してもブレークしないなぁと思っていたら、
デバッグ用のメソッドを叩く必要があるみたい。。

叩くメソッドは

android.os.Debug.waitForDebugger();

になります。
ブレークしたいところの前で叩けば止まりそうですが、生成時にやっとくのが無難なので
onCreateで。こんな感じです。

public void onCreate(Bundle savedInstanceState){
       android.os.Debug.waitForDebugger();
       super.onCreate(savedInstanceState);
}

これでデバッグしやすくなったー。

expressでBasic認証

expressを使用してBASIC認証を試してみたよ。

やり方は、expressのbasicAuthメソッドをcreateServer時に叩くだけ。
これで、サーバはクライアントに401を返すので、ブラウザからユーザ名とパスワードを入力すると
authorizeメソッドが呼ばれます。

var app = express.createServer(express.basicAuth(authorize));
// Basic Auth
function authorize(username, password) {
    return 'username' === username & 'password' === password;
}

3行目以降を次のように変更すれば、パスを分けてBasic認証することが可能っす。

app.all('/hoge/*', express.basicAuth(function(user, password) {
  return user === 'username' && password === 'password';
}));

 
 
■■■■■■■■ 追記(2012/10/18) ■■■■■■■■
expressのバージョンがあがって使い方が少し変わりました。

app.configure(function(){
  app.use(express.basicAuth(function(user, pass){
    return 'username' == user & 'password' == pass;
  }));
 
  app.use(app.router); // これより前にBasic認証を書く
 });

Arduino1.0の変更点とか。

久しぶりにArduinoを触ったら1.0がリリースされていたのを忘れてた。。
ちょうどいい機会だから変更点とかをまとめておこうかと。

1.0は Arduino Software からダウンロードしてね。

【変更点】
・拡張子
  拡張子が .pde から .ino に変更。

・標準ライブラリ
 ・Serial周り
  Serial.print()などデータの送信はバックグラウンドで実施。
  Serial.flush():受信データを破棄する処理から、送信データがすべて送信されるまで待つ処理に変更。
  Serial.print(byteVal):数値を文字として送信
  byte型を数値のまま送信したい場合:Serial.write(byteVal) を使います。あわせてBYTEキーワードも廃止。
 
 ・ネットワーク周り
  ネットワークアクセス用の抽象クラスClient、Server、UDPを追加
  EthernetClient、EthernetServer、EthernetUDPはこれからのクラスを継承

 ・Arduino APIのヘッダ名変更
  WProgram.h → Arduino.h に変更。
  0022の開発環境で新しいライブラリを入れると「Arduino.hがないよ」って怒られる。
  次のようにARDUINOマクロをチェックするコードを入れることで
  Arduino 0022以前のIDEでもコンパイルを通すことは可能。
  [java]
  #if defined(ARDUINO) && ARDUINO >= 100
  #include “Arduino.h”
  #else
  #include “WProgram.h”
  #endif
  [/java]
  
  動く保証はないので1.0で作り直す方がいいのかな。
  
他にもいろいろあるけど自分がいろいろ作って遊んでいたところで関わりそうなのはこのへんなのかなと。
詳しい変更点は Release Notes を見てください。

Leopardにdotcloud CLIのインストール失敗

dotCloud CLIをLeopardに入れたときにエラーが発生。。。
結論から言うと、macportsを使用してのPythonでdotCloud CLIを動かすのはダメみたい。
それなりに時間を使ったのでメモを。

【環境】
 Mac 10.5
 MacPorts 2.0.4
DotCloud DocumentationのMacOSタブを選択して
dotCloud CLI (Command Line Interface)をターミナルを使用してインストールする。

$ sudo easy_install pip && sudo pip install dotcloud
Searching for pip
Best match: pip 1.1
Processing pip-1.1-py2.5.egg
pip 1.1 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
Installing pip-2.5 script to /usr/local/bin
Using /Library/Python/2.5/site-packages/pip-1.1-py2.5.egg
Processing dependencies for pip
Finished processing dependencies for pip
Downloading/unpacking dotcloud
 Running setup.py egg_info for package dotcloud
  Traceback (most recent call last):
   File ““, line 14, in
   File “/Users/takeda/build/dotcloud/setup.py”, line 47, in

    install_requires = [‘dotcloud.cli == {0}’.format(VERSION)],
  AttributeError: ‘str’ object has no attribute ‘format’
  Complete output from command python setup.py egg_info:
  Traceback (most recent call last):
 
 File ““, line 14, in
 
 File “/Users/takeda/build/dotcloud/setup.py”, line 47, in

 
  install_requires = [‘dotcloud.cli == {0}’.format(VERSION)],
 
AttributeError: ‘str’ object has no attribute ‘format’
 
—————————————-
Command python setup.py egg_info failed with error code 1 in /Users/takeda/build/dotcloud
Storing complete log in /Users/hogehoge/Library/Logs/pip.log

pipはうまく入ったっぽいが、dotcloudのインストールでエラーが発生してるくさい。
strにはformatなんていう関数は無いよって。

続きを読む Leopardにdotcloud CLIのインストール失敗