RailsとUnicornでサブディレクトリのデプロイについて

unicorn_railsのオプションでアプリのURLにprefixをつけることができる。

unicorn_rails --path /foo -D -e production

このまま実行するとルートのエラーが起きる。
アプリケーション側でprefixを含んだパスを認識できていないためである。
ENV['RAILS_RELATIVE_URL_ROOT']がアプリのルートパスになるので
起動時に対応させる必要があります。

設定ファイルはconfig.ruで行います。

require ::File.expand_path('../config/environment',  __FILE__)
# run Foo::Application
if ENV['RAILS_RELATIVE_URL_ROOT']
  map ENV['RAILS_RELATIVE_URL_ROOT'] do
    run Foo::Application
  end
else
  run Foo::Application
end

run Foo::Applicationの箇所をコメントアウトして、上のように追加します。

neroAacEncでエラー

動画から音声を抽出して(ffmpegで抽出)、抽出された音声ファイルを
neroAACEncでエンコをしようとした時に、次のようなエラーが出てくる場合がある。

ERROR: could not open WAV file

次のように対処をしたらうまくいった(例)。

rm audio.fifo; mkfifo audio.fifo; cat audio.wav > audio.fifo & neroAacEnc -ignorelength -if audio.fifo -of audio.mp4

ちなみに、-ignorelengthだけつけて、wavファイルを変換しようとしてもwavファイルが読めないためできない。
mkfifoを使うと良い理由はよく分かってないです。


参考URL-http://www.hydrogenaudio.org/forums/index.php?showtopic=66353

Haskellでクイックソート

関数型言語Haskellについて前々から興味があったので、ちょっと勉強し始めています。

今回はHaskellにてクイックソートを実装したことを記そうと思います。

qsort [] = []
qsort (x:xs) = qsort smaller ++ [x] ++ larger
                  where
                     smaller = [a | a <- xs, a <= x]
                     larger = [b | b <- xs,b > x]

C++C言語などの手続き型と比べると異様に短く書けるのが関数型らしいといえますね。
関数型言語にあまり触れない方にはよく分からないソースコードになってると思うので解説。

最初の一行はqsortという関数に空のリストを引数を渡したときの式が記述されています。
その場合、得られる結果は空のリスト(右辺)となります。

次の式は、引数が空でない場合の式です。
基本的に、最初の式がマッチしなかった場合(この場合引数が空リストじゃない場合)次式に
移る仕組みとなってます。2つめの式では、引数には (x:xs) という値が与えられています。
これは、先頭の要素がxのリストを表しており、例えば [1,3,5,2,1,9,10] というリストがあった場合
(x:xs)の中身は、x = 1, xs = [3,5,2,1,9,10] となります。

右辺では、qsortの引数に、smaller ++ [x] ++ larger を与えています。ちなみに、++はリストを結合
する演算子です。つまり、qsortはqsortで値を決定されているため、再帰になっていることがわかります。
次の式、where以下の文でsmallerとlargerの中身について記述されています。
a <- xsからみてみます。これは、aにはxsが入ります。しかし、その後ろに ,a <= x と記述されています。
これは、aに入る要素のフィルターを表し、a <= xの条件式を満たす要素のみをxsから抜き出してaの値を
決めている。largerも同様なので略。

UbuntuにOpenCV2.3を導入

画像処理をするためにOpenCVのライブラリを使いたいので今回そのインストールとテストをしたこを記録。
OpenCVのバージョンは2.3,OSはUbuntu11.10でお送りします。

1, インストール: OpenCV2.3
2, 必要なパッケージ: cmake cmake-qt-gui subversion libeigen3-dev libeigen3-doc libtbb-dev libqt4-dev libunicap2-dev libunicapgtk2-dev ffmpeg

インストール手順は、必要なパッケージのインストール->Makefile作成->インストール となります。
Makefileはcmake-guiをつかって作成します。

必要なパッケージのインストールです。

sudo apt-get install cmake cmake-qt-gui subversion libeigen3-dev libeigen3-doc libtbb-dev libqt4-dev libunicap2-dev libunicapgtk2-dev ffmpeg

先ずはOpenCV2.3をダウンロードします。ダウンロードはこちらです。
任意の場所に解凍して、解凍された階層(以降この階層をOPEN_DIRとする、)に移動し、コマンドラインにて cmake-gui 'pwd' を入力します。

すると次のような画面が表示されます。

ソースコードの参照先を先ほど解凍したOPEN_DIR内に(CMakeLists.txtがあるディレクトリを指定)
Makefileの作成場所は特に指定する必要がなければソースコードと同様の階層で良いと思います。
そのあと、Configureを実行します。Unix MakeFilesを選択し、ラジオボックスには
Use default native compilersをチェックしてFinishを実行。


チェックボックスの一覧にWITH_FFMPEGとWITH_UNICAPにチェックを入れてからGenerateボタンを押します。すると、Makefileが作成されるので、コマンドラインにもどり、 make , make install を実行してインストールを行います。makeには結構な時間が掛かります。また、途中でmakeに失敗した場合、エラーメッセージにあわせて足りないパッケージをインストールして進めてみてください。

また、デフォルトでは/usr/local/lib内にあるライブラリは共有ライブラリとして認識されていないので/etc/ld.so.confを編集あるいわ/etc/ld.so.conf.d/内にconfファイルを作成して認識するように設定します。編集内容は次の1行を追加するだけです。

/urs/local/lib

別の方法として、.bashrcあるいは.bash_profileに export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
とするやり方もあります。


次にインストール後、ダウンロードしたOpenCV内にあるサンプルファイルをコンパイルして実行してみます。場所は、
OPENCV_DIR/sample/ にあります。適当にひっぱてきて実行してみます。

g++ -o my_example matcher_simple.cpp -lopencv_core -lopencv_imgproc -lopencv_calib3d -lopencv_video -lopencv_features2d -lopencv_ml -lopencv_highgui -lopencv_objdetect -lopencv_contrib -lopencv_legacy

私は実行テストとして matcher_simple.cppを選びました。
すると、g++を実行した場所に my_example(第一引数の名前)の実行ファイルが生成されるので、実行します。

./my_example a.png b.png

matcher_simple.cppは引数が二つ必要で、両方とも画像のファイルを指定します(詳細はソースコードを見てください)。
いかが実行結果になります。


参考サイト

http://d.hatena.ne.jp/shirayuu/20111023/1319326630
http://playwithopencv.blogspot.com/2011/06/ubuntu1104-64opencv22.html

Windowsにてtex環境を整える。ついでにTexWorksも設定。

先日Zenbookが届いたので、WindowsにてTexの環境を整えようと思い、そのときの記録を書いておきます。
角藤さんによるW32TeXを含むWindows用日本語TeXインストーラを使ってほとんど自動で環境を整えました。

インストーラーはこちら

次にTexworksにて編集したいので、そちらの環境も整えます。
Texworksの環境設定の作業は大きく分けて二つあります。

  1. タイプセットの設定
  2. プレビューの日本語フォント表示設定

タイプセットはTexworksのwikiにバッチファイルが載っているのでそいつを借ります。私はpdfplatexを使いました。pdfplatex2とかだとうまく動かなかったのでpdfplatexを使用することをお勧めします。
中身のソースをコピーしてバッチファイルを作成します。Texworksを起動して、メニューの編集→設定→タイプセットを選択し、コマンドを追加します。コマンドの参照先に先ほど作成したバッチファイルを選んで引数には$fullname(ファイルのフルパス)を追加します。

次に、日本語の表示のほうです。
まずは下準備です。
C:\w32tex\share\texmf-local\fonts\map\dvipdfmx\base フォルダを作成します(ないところは作る).
C:\w32tex\share\texmf\fonts\map\dvipdfmx\base\cid-x.map を
C:\w32tex\share\texmf-local\fonts\map\dvipdfmx\base にコピーします.

cid-x.mapを編集します。詳細はTexworks wikiにて編集前と編集後が載っているのでそちらを確認。リンク


参考URL:
http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeXworks
http://www.math.sci.hokudai.ac.jp/~abenori/soft/abtexinst.html

サーバーのメモリのキャッシュがたまっていたので解放した。

サーバーなど常時つけっぱなしにしておくとキャッシュがたまってしまうので、メモリの空き容量が減っていくので、解放してメモリを空けました。

# free -m
                      total       used       free     shared    buffers     cached
Mem:          3931     3717       214          0           198           2237
-/+ buffers/cache:       1280       2650
Swap:         4059         34       4025

# echo 1 > /proc/sys/vm/drop_caches
# free -m
                      total       used       free     shared    buffers     cached
Mem:          3931    1260       2670          0            0               33
-/+ buffers/cache:       1227       2704
Swap:         4059         34       4025