Visual StudioだとWindowsなので,DirectX+HLSLが一般的だが,
WebGLとかをやろうとするとGLSLも必要になるので,両方に対応したハイライトプラグインが無いか調べたところNShaderというものがあるらしい.
しかし,オリジナルバージョンの NShader は VS2008 と VS2010 にしか対応していないので, VS2013 の場合は Fork して有志が作ったものを使う必要がある.
さらに直接,フォークしたものをダウンロードしてもソースコードしか無いので自分でビルドする必要がある.
自分でビルドしてもいいが,面倒な場合は,以下のサイトのビルド済みのものを使うと良い.
http://www.horsedrawngames.com/shader-syntax-highlighting-in-visual-studio-2013/

qiita始めました.
まず手始めにラボの後輩へのレクチャーのために作った
を公開しました.

今後もこのブログに更新情報を載せるつもりです.
Kindleのファームのバージョンが5.3.9だったので
5.3.5にダウングレード
Jailbreak用のプログラム

/dev/input/event0 でタッチ動作が取れるよう
参考
http://www.howtogeek.com/168844/how-to-jail-break-your-kindle-paperwhite-for-screensavers-apps-and-more/

これを使って何かしたいけど...
Kindleのファームはどんどん変わるので大変そう
基本的には下のサイトが詳しく書いてあったのでそれに沿ってコンパイルした.

GSLをVisualC++でビルドする

環境はVC++10(2010)で,上のサイトより新しいgsl-1.15をコンパイルした.
基本的にはほぼ同じ変更で良かったが,何点か調整した.
「clはシンボリックリンクが読めない?」のところでコピーしているが今後,cygwinでシンボリックリンクが使えないと困りそうだったので,もう少し根本的な解決として以下のサイトを参考にlnコマンドを変更した.

Cygwinのlnをmklinkに変換するスクリプト

また,バージョンが違うためconfigureファイルは9139行目付近の

old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'

を下のように修正した.

old_archive_cmds='ar cru $oldlib$oldobjs$old_deplibs'

これを行なっても下のエラーが解決されなかった

libtool: link: object name conflicts in archive: .libs/libgsl.lax/libgslblock.lib//cygdrive/e/dev/gsl-1.13/block/.libs/libgslblock.lib

libtoolを--debugオプションをつけて実行したところ競合のチェックは「sort -uc」コマンドでチェックしている事がわかった.
そこで「which sort」とやってみたらwindowsの方にもsortコマンドがあってそちらを呼んでいた.
最終的にパスを

/usr/local/bin:/usr/bin:<windowsのパス>

となるように設定したところうまくいった.
(/usr/local/binにはlnやccclを置き,/usr/binのsortを呼び出すようにした.)



確率モデル検査器PRISMは様々な確率的なモデルに関する性質を調べるためのツールです.
その中でもDTMC(離散時間マルコフ連鎖)のモデルについての例題を使ってひと通り遊んでみます.
用いる例題はこちらのものです.

PRISM Tutorial

DTMCは確率的に状態遷移をするモデルです.
例題として表と裏の2面しかないコインを用いて6面のサイコロを再現するアルゴリズムを使います(Knuth and Yao [KY76]).
下の図のように確率的に状態遷移をすると最終状態にたどりつく確率はすべて1/6になります.
これを式で求めることもできますが,ここではこのことをPRISMを用いて確率を求めます.
PRISMのGUIを起動してエディタに以下のように入力しました.
ここでは,原典のものと一部異なりますが,後の実験のためにこのようにしました.

dtmc

module die
// local state
s : [0..8] init 0;
// value of the die
d : [0..6] init 0;
[] s=0 -> 0.5 : (s'=1) + 0.5 : (s'=2);
[] s=1 -> 0.5 : (s'=3) + 0.5 : (s'=4);
[] s=2 -> 0.5 : (s'=5) + 0.5 : (s'=6);
[] s=3 -> 0.5 : (s'=1) + 0.5 : (s'=7) & (d'=1);
[] s=4 -> 0.5 : (s'=7) & (d'=2) + 0.5 : (s'=7) & (d'=3);
[] s=5 -> 0.5 : (s'=7) & (d'=4) + 0.5 : (s'=7) & (d'=5);
[] s=6 -> 0.5 : (s'=2) + 0.5 : (s'=7) & (d'=6);
[] s=7 -> (s'=8);
[] s=8 -> (s'=8);
endmodule


prism01.jpg



下のタブから Properties のタブを選択し画面を切り替えます.
Properties の白いボックスで右クリックをして「Add」を選択します.
そうするとダイアログが出るので Property にモデルでチェックしたいことを書きます.

P=?[F s=8&d=x ]

これは将来的(F)にs=8かつd=xになる確率は?というような意味です.
Okeyを押すと何やらエラーが出ますが,xが定義されていないよという意味なので.
とりあえずそのダイアログを Yes で閉じた後に
Properties の白いボックスのしたの Constats というところで設定します.
Constatsの枠の中で右クリックをして「Add constants」を選択します.
そうしたら,Name の場所が「C0」となっていると思うので「x」に書き換えてください.
Value は空欄のままにしておいてください.
これで準備は整ったので
右の Experiments のボックスの中で右クリックをして「New Experiment」を選択します.
すると,xの範囲を指定する画面が開きます.
ラジオボタンをRangeの方に切り替えて End を 6 に設定してOkayを押します.
グラフの書き方を聞いてきますがとりあえずそのまま Okey にします.
すると,d=0で0となり,残りで0.1666...ぐらいとなっているグラフが描かれると思います(下図).
これがdの値がそれぞれの値になる確率になります.
dが1~6をとるサイコロの目のような振る舞いをすることがわかると思います.


prism02.jpg



次に,サイコロの目の期待値の計算をこのモデルを用いて行なってみます.
サイコロの目の期待値は1×1/6+2×1/6+3×1/6+4×1/6+5×1/6+6×1/6となり,7/2となるのが正しい値です.

下のタブを Model に戻して以下の式を追加します.

rewards "steps"
[] (s=7): d;
endrewards

この意味はs=7でd(サイコロの目)の値だけ「報酬」をあげるという意味です.
そして Properties の式をダブルクリックすると再び先ほどのダイアログが開くので以下の用に変更します.

R=?[F s=8 ]

先ほど「P」だったのが「R」になっていることに注意してください.
これは s=8 になった時の「報酬」の期待値は?という意味です.
そしてOkeyを押して閉じたら Properties の式を右クリックしてください.
メニューのVerifyを押すと,ダイアログが開きます.
この時,Result (expected reward) が期待値になります.
3.49999....
のような値が表示され,ほぼ7/2になっていることが確認できると思います.

以上がPRISMを用いたDTMCのモデルチェックの基本的な使い方です.
他にもPRISMには様々な機能があるので使ってみてください.


その他・感想
PRISMのUIは変な所で右クリックをしなければいけないという特徴があり,ちょっとなれないと使いにくい部分がありました.それ以外は普通に使うことができ,研究用のツールとしてはかなり良い出来の用に思いました.


OpenCVはバージョンがどんどん上がっていき、
バージョンごとにOpenCVのフォルダ構造まで違ったりします。

なので、まず自分の行った環境を以下に示します。
  • Visual Studio 2010(C/C++)
  • OpenCV-2.3.0-win-superpack.exe(http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3/)
OpenCVは新しいものは2.4まで出ていますが、OpenCV-2.3.0ではsuperpackというライブラリ等がコンパイルがされた状態で配布されているので非常に簡単に開発をはじめる事ができるのでおすすめです。

さらに、ネット上のサンプルのコードはバージョンが古いものしかない場合も多いので、今回はopencv.jpにある物体認識のサンプルプログラム(http://opencv.jp/sample/object_detection.html)を動かすことを目的とする



以降、具体的な手順になります。OpenCV-2.3.0-win-superpack.exeをC:\OpenCV に展開したとして話を進めます。適宜読み替えてください。

まず、VisualStudio2010で空のプロジェクトを新規作成します。ここではcvTestというプロジェクト名にしました。
ソリューションエクスプローラーのcvTest右クリックして、プロパティを開きます。
「構成プロパティ→C/C++→全般→追加のライブラリディレクトリ」
「C:\OpenCV\build\include;C:\OpenCV\build\include\opencv」
と入力します。

次に、
「構成プロパティ→リンカー→全般→追加のインクルードディレクトリ」
の欄に
「C:\OpenCV\build\x86\vc10\staticlib」
を指定し,
「構成プロパティ→リンカー→入力→追加の依存ファイル」
に各種ライブラリを指定します.
私は以下のようにしました

comctl32.lib;Advapi32.lib;user32.lib;Gdi32.lib;
libjasperd.lib;opencv_gpu230d.lib;libjpegd.lib;
opencv_haartraining_engined.lib;libpngd.lib;opencv_highgui230d.lib;
libtiffd.lib;opencv_imgproc230d.lib;opencv_calib3d230d.lib;
opencv_legacy230d.lib;opencv_contrib230d.lib;opencv_ml230d.lib;
opencv_core230d.lib;opencv_objdetect230d.lib;opencv_features2d230d.lib;
opencv_video230d.lib;opencv_flann230d.lib;zlibd.lib

次に、ソリューションエクスプローラーのcvTest右クリックしてメニューから「追加→新しい項目」を選択します。新しい項目の追加でC++ファイルを選択し、名前をmain.cppにします。
このできたmain.cppに物体認識(顔認識)のサンプルプログラム(http://opencv.jp/sample/object_detection.html)をコピペする。

また,このプログラムは
「haarcascade_frontalface_default.xml」
を必要とするので,
「C:\OpenCV\opencv\data\haarcascades」
の中から
「haarcascade_frontalface_default.xml」
を探して,プロジェクトのソースコードがあるフォルダと同じフォルダにコピーしてください.
さらに,顔認識する対象の画像が必要になるので,適当な写真を用意して同じフォルダにおいておいてください.

これでプログラムをVisual Studioからデバッグ実行をするのですが,その前にコマンド引数として対象の画像ファイル名を渡す必要があるので,
もう一度,プロジェクトのプロパティを開き「デバッグ→実行時引数」に対象の画像ファイル名を書きます.
これでVisual Studioからデバッグ実行をすると対象の画像に対して顔の部分に丸のついた画像が表示されるはずです.

BUFFALO NASのTera Stationを買いました。
で、早速ネットワークに繋いで読み書きテスト・・・
Windowsからはうまくいったように見える
Linuxからは・・・オーナー情報消えてるじゃん!!

どういうことなの?

ということで調べてみたら
このNAS中身はどうやら普通のLINUXマシンで
NFSの設定(/etc/exports)に all_squash という項目があってどうやらこれがオンになっているご様子
しかたがないので、これを書き換えようとするわけですがここからが苦労の始まりでした。

なぜ、デフォルトでオーナーが消える設定になっているのか偉い人の考えることはよくわからないが、
それがこの世界の節理なので諦めて気合でどうにかすることにする。

以前から気にはなっていたけど使わなっかったDoxygenを使う気になったので メモメモ

まず、自分はコメントとして///(スラッシュ3つ)使うのが好きなのでこれを採用
この場合、一行のみのコメントだとbriefになって、複数行続くと勝手にdetailになるようです。便利!

doxygenのはまりどころとしては、
VisualC++(2010以前で確認)ではソースファイルはデフォルトでShift-JISになります。
ソースコードのエンコーディングをDoxygenに教えるにはINPUT_ENCODINGのオプションを使います。
また、Doxygenが出力するファイルのエンコーディングはDOXYFILE_ENCODINGオプションを使います。
しかし、DoxygenのINPUT_ENCODINGをShift-JISに、DOXYFILE_ENCODINGをUTF-8にして、Doxygenのコマンドに使うと円マークとバックスラッシュの変換が都合よく行かず、
結果として、Doxygenコマンドを認識できないという問題があります。
(参考:http://blogs.yahoo.co.jp/onion_developer/5791986.html

JavaDocスタイルのコマンドでは@マークを使うため、このような問題は起こりません。
しかし、texを入れてtexコマンドを使おうとしたときに同様の問題にぶつかります。
(自分はこちらに引っかかった)

そこで、回避策としてはINPUT_ENCODINGはCP932 を指定しましょう。
こうすると、Doxygenの中で円マークをうまくバックスラッシュとして読んでくれて、コマンドが通るようになります。

今日、定理証明支援系の集まりproof summit 2011に行ってきました。


場所は株式会社豆蔵トレーニングルーム(新宿三井ビル34F)で、

予定通り迷いました~

でも時間までには着けた。セーフ


午前はチュートリアル

Coq,Agdaについてはほとんど初心者なのですごく勉強になりました

Coqはtacticがあって、割ととっつきやすそう。
Agdaはガリガリ書くタイプには向いてそう。

という印象でした。
でも、両方とも最後はかなり難しそうな話でした。

全国的に昼

ステーキ屋さんでみんなと一緒に食べたー

整楚帰納法について教えてもらい、やや理解が深まった感じでした。
sakaiさんありがとうございます。

午後は発表

  • 自動定理証明
  • Coq,Agdaを用いた応用:回路設計,MsgPack,正規表現
  • Coq,Agdaの拡張:分離論理、代数ライブラリ、ssreflect
勉強会等の紹介
Software Foundations 日本語版
Formal Method Forum勉強会

なかなか証明の話とかで盛り上がれることも少ないのでこういうイベントは非常に貴重だと思います。
特に今回、東京だったので行きやすかったです。
こういうイベントがあるならまた行きたいです。

今後のFormal Method Forum勉強会
とかもチェックしとこう

ということでした。

終わった後

まぁ、今回が初めて参加したイベントだったので
夕飯はいつも通りぼっちかと思いきや、
同じく初参加の人と一緒に食べました。

割と突っ込んだ話とかもいろいろできて楽しかったです。

ちなみにナンでした(おかわり2回もしてしまったー)

###ここからメモ
定理証明の使い方について考えてみた。
・関数型言語が使えるところでは使えそう
・部分部分ではきっちりと仕様が決まっていて、なおかつ巨大な構造を持つもの。
・すでにあるプログラムを実装しなおすことで健全性を示す。
・回路の設計には向いてそう
・プログラムのすべてを実装しなおさなくても、モデル検査だけでも応用できそう
・他の学問の体系の実装とかできないかなー




WindowsにCoq

| コメント(0) | トラックバック(0)
WindowsにもCoqを入れてみた。

そして、コケたのでメモ
Coq8.3pl2のwindows版を
からダウンロード、手順に従えば無事インストール完了。

emacsからこれを使うための設定

ProofGeneralを使うためにはemacsのバージョンに制限があるらしい

Emacs 22.3.1はサポートして無いよう
の下のほうからダウンロード
(注:新しすぎてもダメなよう 自分の環境ではemacs-23.3-rc1でもダメだった。他のバージョンは未確認)

下はProofGeneralの場所によって変更して、.emacsファイルに追加する。

(load-file "C:/SecondDisc/emacs/ProofGeneral/generic/proof-site.el")


emacsの設定中¥は/でいいみたいなのでこちらを採用

うまくいったことを確認するには適当にファイルvファイルを開いておじさんの絵が出てくればOk。
(Verilogファイルと間違えたりした場合は M-x coq-mode で変更できる)


プロフィール

おぬし(onuxy)

  • 「引きこもり」+「厨二病」+「コミュ障」の3称号を持つ男
  • 座右の銘は「働いたら負け!!」
  • 日々の生活を楽にするために全力で活動中

最近のコメント

アイテム

  • pic18_h_eeprom_read.png
  • prism02.jpg
  • prism01.jpg

ウェブページ

Powered by Movable Type 6.2.2