Docker を使ってみよう

最近流行りつくした感のある Docker を触ってみましょう。 Docker をまだ触ったことがないけど、いまいちよく分からない、単純な使い方からまず知りたい、という方向けに記述します。 一言で言うと、Docker とは、カスタマイズされた OS を仮想的に動かして…

64-bit 版 SendSignal

SendSignal の 64bit 版を作成したので、公開します。 上記 32-bit 版と同様にお使いいただけます(ただし、64-bit 版ですので、64-bit プロセスに対してのみ使用可能です)。 使用例(pid に Ctrl+Break を送信): SendSignal64 pid ただ、引数を一つ追加…

Windows サービスプログラムからユーザプログラムを実行する方法 - その2

Windows サービスプログラムからユーザプログラムを実行する方法 の続きです。 前回は winlogon.exe のトークンを元にプロセスを起動させましたが、今回はログオンユーザのリンクトークン(自身の制限されたトークンに紐付く管理者トークン)を元に、ログオ…

yamy シンボリックリンク

yamy 0.03 は、.mayu, .emacsedit.mayu 等がシンボリックリンクの場合ファイルを読み込めませんが、これを読み込めるように修正しました。 yamy-003.zip このソフトウェアを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかね…

テーブルのカラムへの null 値の代入

PreparedStatement を用いて null を入れる場合、 statement.setObject(index, null) とするのがお手軽ではありますが、SQL Server では binary, varbinary 型のカラムに setObject で null を入れられません。そこで、仕方なく setNull を使うのですが、set…

ビジュアルスタイルの適用方法

今更ですが,XPスタイルの適用方法について自分が知っていることをまとめようと思います. XPスタイルを適用するには,主に次の二つの方法があります. manifest ファイルを自身で作成し,埋め込む. manifest を pragma で埋め込む. manifest ファイルを自…

C++ による RC4(Arcfour) 暗号化

「ARCFOUR Algorithm」を C++ に移植したので紹介します. 以下に実装する関数 encrypt_rc4/decrypt_rc4 を用いればバイト列(std::vector)を暗号化/復号化できます. RC4 については「RC4」をご覧下さい. それでは以下に私の実装を示します.rc4.hpp #ifnd…

C++ による base64 エンコード/デコード

C++

C++ で base64 にエンコード/デコードするプログラムを作成したので紹介します.以下に実装する関数 encode_base64/decode_base64 を用いればバイト列(std::vector),プレインテキスト(std::string) 間でデータを変換できます. base64 については「Base64」…

ICU による文字コード変換ライブラリ

C++ で文字コードを変換するプログラムを作成したので紹介します.以下に実装する関数 encode を用いれば std::string, std::wstring 間で文字コードを変換できます. 文字コードの変換には代表的なライブラリとして libiconv と ICU とありますが,主にライ…

Oracle 11g を Linux にインストール

libstdc++6 がインストールされている環境(Ubuntu 10.04 等)には Oracle 11g がインストールできない. 回避方法は以下のリンク先の通り. Installing Oracle 11gR2 Enterprise Edition on Ubuntu 10.04 (Lucid Lynx)要約すると,下記のように libstdc++5 …

Windows サービスプログラムからユーザプログラムを実行する方法

今回は Windows の Service からプログラムを起動する方法を紹介します.Vista 以降ではサービスからユーザセッションにプログラムを実行するには CreateProcessWithLogonW を使用しますが,ここでは指定したプロセスのトークンを複製して CreateProcessAsUs…

Windows のエラー文字列の取得

今回は Windows の GetLastError() などが返すシステムエラーコードに対応するエラー文字列を返す関数を作成します. エラー文字列は例えば C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include などにある WinError.h というファイルに書かれているので…

eclipse で yamy の C-k が効かない問題

表題の通り,yamy では(というより窓使いの憂鬱の時代から)eclipse で C-k(kill-line) が機能しません. これは emacsedit.mayu の keyseq $EmacsEdit/kill-line = &EmacsEditKillLineFunc S-End C-X \ &Sync &EmacsEditKillLinePred((Delete), (Return Le…

Microsoft Visual C++ 2010 ディレクトリの設定方法

VC++ 2010 からはツール→オプション→プロジェクトおよびソリューション→VC++ ディレクトリ(GUI)でのグローバルなパスの設定が非推奨となりました. 代わりに,VC2010 では次のようにしてグローバルなパスを設定をします(VC++ ディレクトリが、オプションダ…

OpenCV 2.0.0a をランタイムライブラリをスタティックリンク(/MT, /MTd)でビルドする方法

OpenCV 2.0 では CMake を使って自分でビルドしますが,デフォルトではランタイムライブラリにダイナミックリンク(/MD, MDd)するようになっています. これをスタティックリンクに変更するには以下のようにします. CMake の設定で CMAKE_CXX_FLAGS_DEBUG と…

ublas::vector, ublas::matrix や OpenCV の CvMat を Visual Studio のデバッグウィンドウに表示する方法

boost.vector や boost.matrix, OpenCV の CvMat, IplImage, Vec, Mat は非常に便利ですが,一つ残念な事があります. それは Visual C++ の“自動変数”や“ローカル”,“ウォッチ”ウィンドウ等にベクトルや行列の要素ではなく,そのクラスのメンバ変数が表示さ…

GSL - GNU Scientific Library を Windows Microsoft Visual Studio で使う方法

今回は GSL と呼ばれるライブラリを Windows の VC++ 環境で使えるようにする方法について説明していこうと思います. 環境としては Windows Vista, XP, Visual C++ 2008, 2005 を想定しています.これ以外の環境では以下で説明する手順ではうまくいかない場…

PolyViewer による3次元図形の表示

研究室のツールとして,3次元空間中に点列やその他の図形を作図したり,アニメーションを保存し簡単に動画にできる単純なプログラムを作成したので紹介します. 作成した動機 Python や Ruby などのスクリプト言語から手軽に OpenGL を通したプログラムが書…

Boost.uBLAS で最小二乗法

今回は AX = B の最小二乗解(Least squares solution),あるいは最小ノルム解(Minimum norm solution)を計算します.lapack を用いてこれを計算するには dgels, dgelss, dgelsd という関数を用いればよく,対応する bindings のヘッダファイルは gels.hpp, g…

Boost.uBLAS で正値対称係数行列の線形方程式系(System of linear equations)の解の計算

今回は AX = B の解行列 X あるいは Ax = b の解ベクトル x を計算する関数を実装します.ただし,A は正値対称行列であるとします. lapack には dposv という関数があり,これが内部で係数行列をコレスキー分解して解を計算してくれます.つまり,前回と同…

Boost.uBLAS で一般係数行列の線形方程式系(System of linear equations)の解の計算 - lapack版

今回は前回の連立方程式の計算を lapack を用いて実装します. lapack には dgesv という関数があり,これが内部で係数行列をLU分解して解を計算してくれます.私たちがするべきことといえば,いつものように bindings.lapack.gesv に渡す column_major な行…

Boost.uBLAS で一般係数行列の線形方程式系(System of linear equations)の解の計算

今回は AX = B の解行列 X あるいは Ax = b の解ベクトル x を計算する関数を実装します.uBLAS にはLU分解を計算する機能が既にあるため,これらの機能を簡単に実装することができます. また,uBLAS による連立方程式の解き方は Boost 数学関係ライブラリ…

Boost.uBLAS でコレスキー分解

今回はコレスキー分解を実装します.コレスキー分解はLU分解の特別な場合であり,入力行列 A が正値対称行列なら,これを A = L x trans(L) あるいは A = trans(U) x U に分解することができます.コレスキー分解は lapack.dpotrf で計算することができます…

Boost.uBLAS で行列式 - lapack版

今回は前回実装した行列式を lapack を用いて実装してみます. 前回と同様にまずLU分解をして,その結果を基に行列式を計算する流れになります. LU分解は前回と同じく lapack.dgetrf を用います.その結果である上三角行列の対角成分の積を計算するだけで行…

Boost.uBLAS で逆行列 - lapack版

今回は前回実装した逆行列を lapack を用いて実装してみます. 前回と同様にまずLU分解をして,その結果を基に逆行列を計算する流れになります. LU分解は前回と同じく lapack.dgetrf を用います.その結果を lapack.dgetri に渡すだけで逆行列を計算できま…

Boost.uBLAS でLU分解 - lapack版

今回は前回実装したLU分解を lapack を用いて実装してみます. 前回は正方行列に限定してLU分解しましたが,今回は PA = LU の形に分解するため,任意の行列をLU分解できます. その代償としてLU分解後の行列の切り出しの処理が必要になり,コード量が増えて…

Boost.uBLAS でLU分解

今回はLU分解を実装します.LU分解を計算する関数はもちろん lapack にもあるのですが,それは次回紹介するとして,今回は uBLAS に実装されている lu_factorize を用いてLU分解してみようと思います.uBLAS の lu_factorize の結果を三角行列に切り出すだけ…

OpenCV での画素値の安全な取得

OpenCV の開発者は非常に多くの機能を実装し提供してくれていますが,最も基本となる画素値への参照にはあまり関心がないようです.CV_IMAGE_ELEM や cvGet*D cvSet*D という機能は用意されていますが,使いにくくしかも安全ではありません. というのも,画…

Boost で正規乱数の生成

シミュレーション実験を行っていると正規乱数が必要になることがよくあります.正規乱数はかなり基本的な乱数であるためさまざまなライブラリに実装されているのですが,私は Boost をよく使っているので,正規乱数でも Boost を使用して発生させています. …

Boost.uBLAS の補完ライブラリの使い方 - その4

今回はベクトルの外積と,前回紹介したuBLASの補完ライブラリの外積の使い方について説明します. 今回説明するのは次の機能です. cross_prod uBLAS には外積を計算する関数がありません.outer_prod というそれらしい名前のものがありますが,これは外積で…