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);
}

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

WordPressでlatexを使う

最近、行列や三角関数に出会うことが多くなってきたので、WordPressでLaTexを使いたいなと思っていたら
プラグイン(wp latex)がありました。
【使い方】
 管理画面のプラグインでwp latexを検索&インストール。
 LaTexで記載する箇所を[latex] [/latex]で囲むだけ。LaTex自体の書き方はそのままで大丈夫。

総和
  [latex]Tx = \displaystyle \sum_{n=1}^{\infty}\lambda_{n}(T)(x_{n}, y_{n})y_{n}[/latex]
サンプルコード

[latex]Tx = \displaystyle \sum_{n=1}^{\infty}\lambda_{n}(T)(x_{n}, y_{n})y_{n} [/latex]

 displaystyleも使えます。
 
 
行列
  [latex]
\left(
\begin{array}{cc}
1 & 22 \\
333 & 4 \\
\end{array}
\right)
[/latex]
 
 
行列式

[latex]
\begin{array}{|cc|}
1 & 0 \\
0 & 0 \\
\end{array}
=0
[/latex]

行列もうまく出力できた。ただ\begin{center}などは使えないようなのでHTMLで実装するしかない。

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のインストール失敗

ubuntu11.10 に Jenkinsをいれるための準備

まずは、javaのバージョンを確認

$ java -varsion
java version “1.6.0_23”
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)

入ってなければ以下のコマンドでjavaをインストール。

sudo apt-get install openjdk-6-jdk openjdk-6-jre

次にgitのインストール

$ sudo apt-get install git-core

$ git –version
git version 1.7.5.4

次にGitHubアカウントのセットアップ
 http://github.comの[Pricing and Signup] をクリック
 Free (無料) アカウント用の [Sing Up!] ボタンをクリックします。
 [Username]、[Email Address]、[Password]、[Confirm Password] を入力します。
 [I agree, sign me up!] ボタンをクリックして、アカウントを作成します。

■レポジトリを作成
 鍵の準備
GitHubに登録する公開鍵の作成

$ cd .ssh
$ ssh-keygen -t rsa -C “your github mail address”
$ Generating public/private rsa key pair.
$ Enter file in which to save the key (/Users//.ssh/id_rsa): /Users//.ssh/github_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

 鍵をGitHubへ登録
  GitHubにアクセスしてログインする。
  画面右上の「Account Settings」をクリック。
  SSH Public Keysを選択。
  タイトルに鍵を識別する任意の名前をつける。
  作った公開鍵(id_rsa.pubとか)の中身を、まるっとコピー&ペーストする。
  Add keyボタンクリックで登録完了。

  以下でGitHubにアクセスできたらOK。

$ ssh -T git@github.com
Hi アカウント名! You’ve successfully authenticated, but GitHub does not provide shell access.

ここまできてやってとレポジトリの作成
 GitHubのページから[Dashboard]をクリックし、画面中段右の[New Repository]ボタンをクリック。
 リポジトリ登録画面が表示されるのでプロジェクト名(HelloWorld)を入力する。
 オプシンでプロジェクトの説明とホームページも入力出来る。
 [Create Repojitory]ボタンで作成完了。
 後は画面に従って操作する。

続いてレポジトリのフォーク
 GutHubのアカウントにログイン
 レポジトリのURLにアクセス
 Forkボタンをクリック

確認のためにローカルコピーをフォーク(レポジトリの個人用コピー)する。

$ git clone git@github.com:アカウント名/HelloWorld.git
Cloning into HelloWorld…
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Receiving objects: 100% (3/3), done.
$ ls
HelloWorld

HelloWorldがClone(SVNでのチェックアウト)されている。

とりあえず今日はここまで。

お勉強

クラウドコンピューティングに触れる機会が多くなってきたから
この辺でしっかりお勉強をしておこうかと。

まずは定義からしっかりと。数学の基本すな。
【構成定義】
 IaaS(Infrastructure as a Service)
  サーバ/CPU/ストレージなどのインフラをサービスとして提供する。
 PaaS(Platform as a Service)
  アプリケーションを稼働させるためのプラットフォームをサービスとして提供する。
 SaaS(Software as a Service)
  アプリケーション(ソフトウェア)をサービスとして提供する。

IaaS

ネットワーク/ハードウエア(CPU・メモリー・ハードディスク)/OSを提供するサービス。ユーザーは何もインストールされていないサーバー環境を提供され、その上にユーザーが必要とするミドルウエアや、アプリケーションソフトウエアをインストールする。
■レンタルサーバとの違い
サーバーのCPU・メモリー・ハードディスクを仮想化技術などによって、ユーザーが必要とする分だけ提供する。
■具体例
Amazon EC2(EC2はOSも提供しているので厳密な意味でのIaaSではないけど)
 

PasS

IaaSの構成要素に加え、データベースソフトやWebサーバーソフトといったWebアプリケーションを稼働させるためのソフトウエアや、アプリケーション開発に必要となるソフトウエアを提供。
ユーザーは、必要なアプリケーションのソースコードをPaaS環境にアップロードし、必要なデータベース定義を設定することで、アプリケーションを動作させることが可能。
■IaaSとの違い
OSの各種設定や保守作業をユーザー自身が行う必要がないため、ユーザが直接操作することはない。
■注意点
アプリケーションで利用できる開発言語が限定される点や、PaaSにおいて提供されていないミドルウエアについてはユーザー自身が準備しなければならない。
■具体例
dotcloud
 

SaaS

ユーザーはネットワーク・ハードウエア・OS・ミドルウエアのすべての要素について、自身で準備をする必要なし。ユーザーはWebブラウザを利用して、 SaaS提供事業者のWebアプリケーションにアクセスし、サービスを利用する。