ニューラルネットワークのサンプルプログラムをC++に移植 [プログラミング]
プログレスダイアログの利用 [プログラミング]
Androidで、ファイルのコピーをする処理が必要になりました。
プログレスダイアログ(ProgressDialog
)には、コピーの進捗を表示します。
で、こんなコードを書いたんですよ。
CUDA用メモリクラス(素体) [プログラミング]
CUDAのプログラムは、思い切りシンプルにすると、こんな感じになります。
const int N = 256; float* h_A = (float*)malloc(sizeof(float)*N); float* d_A; cudaMalloc((void**)&d_A, sizeof(float)*N); for (int i = 0; i < N; i++) h_A[i] = i; cudaMemcpy(d_A, h_A, sizeof(float)*N, cudaMemcpyHostToDevice); func<<<1, N>>>(d_A); cudaMemcpy(h_A, d_A, sizeof(float)*N, cudaMemcpyDeviceToHost); free(h_A); cudaFree(d_A);
- メモリを確保する
- GPUにデータを送る
- 計算する
- GPUからデータを受け取る
- メモリを開放する
ここで忘れてはいけないのが、最後にきちんとメモリを開放することでしょう。
開放し忘れても、プログラムを終了させたら、ちゃんと開放される………のかな?
ポップアップするカレンダーコントロール [プログラミング]
何かのソフトで、日付を選択するコンボボックスって見たことないですか?
コンボボックスの[▼]ボタンを押すと、カレンダーが表示されるヤツ。
そんなのを作ってみました。
Visual C++ で 要MFC です。
数値のイテレータ化 [プログラミング]
vector
に 0 から 9 までの数値を格納しようとする場合、次の様なコードを書きます。
std::vector<int> array; for (int i = 0; i < 10; i++) array.push_back(i);
ところで、値が既に配列に入っている場合は、こんなにシンプルに書くことが出来ます。
int buff[10] = { (略) }; std::vector<int> array(buff, buff + 10);
配列を使わなくても、同じ様にシンプルに書けないものかな……。
CppUnitのOutputterを作ってみた [プログラミング]
C++用の単体テストフレームワークと言えば、CppUnitが有名…というか、定番です。
で、そのCppUnitは、テストの結果をどういう形式で出力するかを Outputter
というクラスで指定します。
CppUnitには、テキスト形式(TextOutputter
)、コンパイラ形式(CompilerOutputter
)、XML形式(XmlOutputter
)が用意されています。
ちなみに、コンパイラ形式とは、コンパイラが出力するエラーメッセージと同じ形式です。
タグジャンプ機能が使えて便利です。
// テキスト形式で標準出力に出力する CppUnit::TextUi::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); CppUnit::Outputter* outputter = new CppUnit::TextOutputter(&runner.result(), std::cout); runner.setOutputter(outputter); runner.run();
// コンパイラ形式で標準出力に出力する CppUnit::TextUi::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); CppUnit::Outputter* outputter = CppUnit::CompilerOutputter::defaultOutputter(&runner.result(), std::cout); runner.setOutputter(outputter); runner.run();
// XMLファイルに出力する CppUnit::TextUi::TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); const char* filename = "test_result.xml"; std::ofstream out(filename); CppUnit::Outputter* outputter = new CppUnit::XmlOutputter(&runner.result(), out); runner.setOutputter(outputter); runner.run();
VB.NET用単体テストフレームワーク(簡易版) [プログラミング]
前回の内容で薄々分かっていたかもしれませんが、Visual Basic .NET用の単体テストフレームワークっぽいものを作ってみました。
.NET 用の単体テストフレームワークは NUnit が有名で、VB.NET でも使えるらしいので、NUnit を使うことをお勧めしておきます。
呼び出し元の情報を取得 [プログラミング]
Visual Basic .NETでの話ですが、
関数の中で、その関数を呼び出している箇所のファイル名と行番号を取得する必要が出てきました。
Public Sub baseFunc() targetFunc() ' (1) End Sub Public Sub targetFunc() ' (2) End Sub
(2)の箇所で、(1)についての情報が欲しいのです。
引数とか使わずに。
VB.NETでDB操作(データ取得篇) [プログラミング]
前回、せっかくVisual Basic .NET を使って、Oracleのデータベースへアクセスする方法を調べたので、もう少しメモ。
MSXMLと名前空間の指定があるXML [プログラミング]
Windows環境で、XMLを操作するプログラムを作ろうと思った場合、MSXMLを使うのが(何もインストールする必要が無いという理由で)簡単です。
一方、XMLには名前空間(namespace)という機能があります。
そこで、名前空間の指定があるXMLデータをMSXMLで操作することにします。
ファイルのアクセス権を変更する [プログラミング]
Windowsでは、ファイル毎にアクセス権を細かく設定できますが、それをプログラム上から変更したいと思います。
変更というか、権限の追加ですが、権限の解除も大体同じ感じで出来るんじゃないかな。
MFCでHTTPS通信 [プログラミング]
今度は、MFCを使ってHTTPS通信してみます。
とはいえ、CInternetSession
クラスのOpenURL()
メソッドを使うのなら、HTTPでもHTTPSでも全く同じです。
const CString urlStr = _T("https://~~"); try { CInternetSession session; std::auto_ptr<CStdioFile> file(session.OpenURL(urlStr); if (file.get() == NULL) return; // 失敗 CString str; while (file->ReadString(str)) { // @@@ 取得したデータを、どうにかする @@@ } file->Close(); } catch (CInternetException* e) { e->Delete(); }