p_tan's blog

勉強日記です。ツッコミ大歓迎

COM構造化ストレージの IStream 生ポインタを C# 側に引き渡す

COM の構造化ストレージのストリームインターフェースであるIStream を生ポインタで持っているとして、 それをC#側からアクセスしたい時。 .NET には、ネイティブのIStream インターフェースに対応する System.Runtime.InteropServices.ComTypes.IStream が…

C++/CLIのdllからネイティブ関数をエクスポートする際の注意事項

C++のネイティブdllの.vcxprojなら、プロジェクト参照に入れればインポートライブラリ(.lib)を自動でリンクしてくれる。 しかし、C++/CLIのdllからネイティブ関数やネイティブクラスをエクスポートする際、使う側からプロジェクト参照してもインポートライブ…

複数の.vcxproj間で特定のパスを共有する方法

環境 Visual Studio 2017 C++開発 やりたいこと 巨大なコードベースでVC++のソリューションを分けて開発している時に、すべての .vcxproj でルートディレクトリのパスを共有したい ** 出力ディレクトリやINCLUDEパスなど ただし、環境変数は使いたくない。レ…

CoTaskMemAllocのリークをIMallocSpy で検知する

C++

MSVCでメモリリークチェックと言えば、CRT ライブラリを使用したメモリ リークの検出 が定番ですが、これだとCランタイム経由じゃない CoTaskMemAlloc, CoTaskMemReallocで確保したメモリのリークは検知できません。 そこで IMallocSpy interface (COM) を使…

なぜC#ではなくF#を使いたいのか : 構造化分析と関数型プログラミング #fsharp

F#

この記事は F# Advent Calendar 2017 - Qiita の 11 日目の記事です。 本記事では、なぜ自分がC#ではなくF#を使いたいのかを記したいと思います。 この記事で言いたいこと コンピュータシステムの本質とは入力データを出力データに変換することだと思ってい…

レコードの不変条件を強制する方法 #fsharp

F#

この記事は F# Advent Calendar 2017 - Qiita 10日目の記事です。 F#でレコードを使う場合に、型の不変条件を強制したい場合があったので調べました。 例 : Triangle 型 例えば、以下のような辺の長さ a, b , c を持つ三角形を表すレコードがあったとします…

PODクラスのデフォルトコンストラクタとメンバ変数をprivateにすることでクラスの不変条件を担保する

C++でCと互換性のあるデータ型を使いたい場合は、POD(Plain Old Data)型としなければならない。 C++11 でPODクラスの要件が緩和されたので、PODクラスのメンバ変数やdefaultコンストラクタをprivate に定義できるようになった。 これにより、PODクラスでもコ…

なぜC#よりもF#なのか 2017 #fsharp

F#

以前このような記事を書きました。 なぜC#よりもF#なのか - p_tan's blog 「F# C# 比較」とかでググると比較的上位に表示されるようで、毎日少しずつアクセスがあるようです。 さすがに6年前の記事で内容が古いので、現状での F# を見てみたいと思います。 …

技術習得のレベル

技術習得のレベルについて、最近の思うところ。 プログラミング言語やソフトウェア設計パターン、Webアプリのフレームワークなど、何らかの技術の習得には、以下のようなレベルがあると思う。 レベル0:存在すら知らない レベル1:名前だけは知っている レベ…

ユーザビリティにおける探索/実行モデル

ソフトウェアに限らず、何らかの道具のユーザビリティについて、探索/実行モデルというものを考えている。 ユーザビリティ研究において、もっと整理された理論がきっとあるのだろうが、見つけられていない。 前提 人は、何らかの目的を達成するために、手段…

Rでプロットするときにインタラクティブにズームとか移動とかしたい

R

[2014/09/20 追記] rChartsパッケージのhPlotでもインタラクティブなズームができるみたい。 参考 : rCharts:Highchartsの使い方 [追記ここまで] ざっと調べただけ GGOBI + rggobi パッケージ : library(rggobi)でエラー。未調査。 iplots パッケージ : Jav…

関数に渡された実引数を文字列化する

R

元ネタ -> r - Quick question: cast function argument as a character string? - Stack Overflowdeparse と substitute を使うと実引数を文字列化できる。 > f <- function(x) deparse(substitute(x)) > f(1) [1] "1" > f(x) [1] "x" > f(list(x=3)) [1] "…

RでF#のパイプ演算子

R

2014/03/26追記 magrittrパッケージに以下で書いてるようなパイプ演算子があります。 下でやってることよりもっとちゃんとつくってあるので、 unaryとか必要ないです。 > 1:3 %>% sort(dec=T) [1] 3 2 1 追記ここまで Rは演算子の定義ができるので、F#のパイ…

直積集合 (追記:expand.grid)

R

2012/09/20 追記 R Tips 第2版を購入して読んでいたら、expand.gridなる関数があるじゃないですか・・・。 The R Tips―データ解析環境Rの基本技・グラフィックス活用集ということで、下でやっていることはexpand.grid関数でできます。 ああ、もっと検索力が…

Windows XPでVundle使おうとしたらハマった

vimのプラグイン管理用プラグイン(ややこしい)であるVundleをWindows XPで使おうとしたらハマったので、解決した手順をメモっておく。 問題 VundleでいざBundleInstallしようとしたら、error: inflate: data stream error (incorrect header check) とか言わ…

const参照引数でハマった

C++

const参照の引数でうっかりしてハマったこと。以下のような、レンジの全ての要素から、一括してある値を引くようなヘルパ関数を作っていた。 (実際は足し算や掛け算などもサポートするように汎用的に書いていたが) template<class T, class Range> void Sub(Range &r, const T& v</class>…

データメンバに触らなければヌルポインタの参照外しを行なっても実行時エラーにならない

C++

恥ずかしながら知らなかった。 ヌルポインタの参照外しを行ったらすぐにセグメンテーションフォールト等で落ちるもんだと思い込んでたけど、データメンバに触らなければ実行できてしまうようだ。 規格上認められてるのか、それとも未定義動作なのか。 #inclu…

autoを使おう

GoingNative 2012のスライドを眺めていたらびっくりしたのでメモ。 STL11: Magic && Secrets | GoingNative 2012 | Channel 9のスライド24枚目。 map<string, int> m; for(const auto& p1 : m) for(const pair<string, int>& p2 : m) このfor文、どっちが速い?って問い。答えは上の方</string,></string,>…

EigenでNMF

C++

C++の行列演算ライブラリEigenを使うとNMFが超簡単に実装できる。 Eigen http://eigen.tuxfamily.org/index.php?title=Main_Page NMF : Non-negative Matrix Factorization Wikipediaとか、この文献見るといいです。 Daniel D. Lee and H. Sebastian Seung (…

constexpr関数とstatic_assertでコンパイル時ユニットテスト

constexprな関数はstatic_assertでコンパイル時にユニットテストできる。 // ユークリッド互除法による最大公約数 constexpr int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } // constexprな関数gcdのユニットテスト static_assert(gcd(1, 1)…

Boost.Iteratorでfizzbuzz_iterator

Boost.Iterator のtransform_iteratorとcounting_iteratorを使ってfizzbuzz_iteratorを作ってFizzBuzzを解いてみた。http://ideone.com/5nAWjそれだけ。

F#でFizzBuzz #fsharp

F#

今更ながらF#でFizzBuzz書いた。http://ideone.com/IlUMc遅延評価による無限データ構造という奴ですな。

POD型の初期化

C++

参考サイト C++における構造体の初期化 | 株式会社きじねこPOD(Plain Old Data)型の初期化には集成体(aggregate)用の{}による初期化とは別に値初期化というものが使えるらしい。 以下VC++2005 Express Editionの実行結果と共に。 #include <vector> #include <iostream> // POD</iostream></vector>…

整数型か浮動小数型かで四捨五入するかどうか分岐する関数テンプレート

C++

こんな関数テンプレートがあったら使い所があるかも。 #include <cassert> // RetTypeが整数型の場合は四捨五入した値を返し、 // RetTypeが浮動小数型の場合はそのままの値を返す。 template<typename RetType, typename ArgType> RetType IfIntegralThenRound(ArgType val) { return static_cast<RetType>(val + 0</rettype></typename></cassert>…

汎用LessBy

C++

小さなクラスを特定のメンバの値を基準にしてソートしたい場合。 しかも、Boost.MultiIndexを使うのは大げさだなーという時。 C++11ならラムダ式で書けるが、それでもめんどくさい。 例: class X{ int a; double b; public: // ...コンストラクタとか... in…

Seq.triplewise #fsharp

F#

F# Snippetsに投稿。 Seq.pairwiseの3つ組版。http://fssnip.net/50

シーケンスの要素をグループに分ける Seq.groupBy #fsharp

F#

Seq.groupByはseq中の要素に対応する整数値でseqの要素をグループに分ける。 seq {1..100} |> Seq.groupBy (fun x -> x % 2) // seq [(1, seq [1; 3; 5; 7; ...]); (0, seq [2; 4; 6; 8; ...])] 使用例 // シーケンスをn個毎のサブシーケンスに分ける let sp…

シーケンスの前後の値を見ながらの処理 Seq.windowed [追記] #fsharp

F#

Seq.windowedはseq中の隣接するn要素の配列のseqを返す関数。 > Seq.windowed 3 [1..5];; val it : seq<int []> = seq [[|1; 2; 3|]; [|2; 3; 4|]; [|3; 4; 5|]] 例えば数値のシーケンスの極大値のみをselectする処理は以下のように書ける。 > let SelectLocalMaxs (</int>…

C++のwchar_t型について

C++

参考 日本工業標準調査会:データベース検索-JIS検索でプログラム言語C++を検索 ワイド文字 - Wikipedia charとUnicodeとワイド文字をごっちゃにしないために wchar_t ワイド文字を表す型 規格ではサイズは16bitとは限らない 規格では内部表現の規定がないの…

F#で簡易DPLL 修正版

F#

この前の日記で書いた簡易DPLLをちょいと修正、充足可能なときにリテラルへの割り当てを返すようにしてみた。Ideone.com | 9qbbk