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の環境設定の作業は大きく分けて二つあります。
- タイプセットの設定
- プレビューの日本語フォント表示設定
タイプセットは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