ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

C++

std::numeric_limits<float>::min()について重大な思い違いをしていた話

何があった 線形探索で最大値を探すコードを書いていた。 簡単化するとこんな感じ。 using namespace std; float FindMax(const vector<float>& source) { float max = numeric_limits<float>::min(); // floatの最小値で初期化してるつもり for(const auto& value : sourc</float></float>…

モザイクのその向こうが見たかったオタクの話

この記事は TUT Advent Calender 2015の参加記事です。今年は準備期間がたっぷりあったので、しっかりとネタを用意しましたよ! www.adventar.org 前日の記事 前日の記事はこちら(大学で生き残るための日常生活の過ごし方) 話を始める前に 図とか使ってわか…

位相限定相関法で位置合わせ

この記事は FFTってどうやるんだっけ? のレベルから始まるチョー簡単な位相限定相関法のお勉強ノートです。基本的には参考にしたページをぺたぺたしてセクションごとのまとめだけ書いていく感じで進めます。

eclipse CDTでデバッグするときにmainで一度止まるのをなんとかする

この記事は eclipse CDTでF11をポチッとやってデバッグを開始すると、エントリポイント入ったところで自動的に設定されるブレークポイントに引っかかってしまうのでF8を追加で押す必要があるんですね。これはめんどいのでこの自動ブレークポイントを無効化し…

boost.random使い方簡易まとめ

この記事は boost.randomの使い方の超カンタンなまとめです。使おうとする度に毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回毎回お口チャックマン! つまり使いやすいように自分でまとめるってことなんですね。 サンプルコード やっぱりサンプルコード…

windows環境で自作プログラム叩いたらR6010でabortした話

何があった VisualStudioでC++プログラム書いて出来上がったバイナリをダブルクリックで叩いたらR6010でabortして何のヒントも残さずに死んだ。開発環境上では元気に動いていたのに…。 原因は ファイルオープンで失敗して発生した例外(std::runtime_error)が…

boost::shared_ptr紹介

この記事は TUT Advent Calendar 2014 - Adventarの8日目の参加記事です。 連続値もOKなDeepBeriefNetworkを簡単にC++で実装して・・・とか考えてたんですが、いつの間にか実行速度とか気にしてガチで組み始めて収集つかなくなってもうタイムリミット近いの…

libboardの紹介

この記事は TUT Advent Calendar 2014 - Adventarの参加記事です。 12/1に突然始まってトップバッターで、記事書いてるのはもちろん当日なのでサクッと行きましょう。 libboard is 何 ベクトル画像を簡単に出力できるC++用のライブラリです。 CV系の研究室に…

OpenGLでテクスチャマッピングする時にドハマりした話

なにがあった ネット上のチュートリアル見ながらGLUTで立方体にテクスチャ貼り付けようとしたらどういうわけか全然テクスチャが適用されない。一体何故なのか。コレガワカラナイ。 でもよく考えると前にも似たようなことがSDL+OpenGLであったような・・・? …

ffmpeg(libav)でシークする時の注意点

何があった libavformatとかあそこらへんのAPIを触っていて動画の読み込みをしている時の話。 任意秒にシークした直後、Iフレームが来るまで正常に映像がデコードされないという問題が起きた。 絵面としては黒画面をベースに差分だけが表示される感じ。 解決…

Box2Dでb2Bodyに力とかを加えるいくつかの方法

この記事は Box2Dで物体に力とかを加えようと思った時に取ることが出来る方法のまとめです。自分は古典物理すら全くわからないマンなので必要な範囲で関連する知識とかもまとめます。 SetLinearVelocity() ボディの速度(velocity, [])を直接指定する方法。 …

継承とか仮想デストラクタとか

この記事は 継承する時は仮想デストラクタ書けって言うけど実際の動作よくわかってないから検証してみた private継承するとアップキャストできないのってなんでだろう? みたいなことを調べました。 検証した環境 gcc バージョン 4.7.2 (Ubuntu/Linaro 4.7.2…

多重継承とthisとnewとdeleteと(続き)

何があった 前の記事を公開したあと @NU_Pan B1とB2に仮想デストラクタを定義したらどうでしょうか?たぶん上手くdeleteできそうな気がします(未確認なので間違ってたらすいません)2014-06-02 16:14:38 via Twitter Web Client to @NU_Panというご指摘をい…

テンプレートクラスのテンプレートメンバ関数をテンプレートクラスのメンバ関数から呼び出す

何がった こんなような事したかったんだけど、コンパイルエラーになってしまった template<typename T> struct CHoge{ template<typename U> static U Func(int val){ return val; } }; template<typename T> struct CPiyo{ template<typename U> static U Func(int val){ return CHoge<T>::Func<U>(val); } }; CPiyo<int></int></u></t></typename></typename></typename></typename>…

多重継承とthisとnewとdeleteと

何があった 多重継承のケースで コンストラクタの初期化子リスト内でthisはどうなっているのか? 初期化子リストにthisを渡すと何がまずいのか? 多重継承でnewでもらったポインタとdeleteに渡すポインタが一致しない時どうなってしまうのか? 多重ではない…

C/C++で四捨五入で浮動小数点を整数に丸める

なにがあった 負数込みで丸めようと思うと思いの外回り道をしてしまったのでメモ。結論だけ知りたい人は記事の末尾に飛んでオナシャス! そもそもなんで四捨五入なのか 画像の幾何的な変換を行おうとしたら、変換元の画像のピクセルに実数座標でアクセスすることに…

gccでintrinsicsでSSEでベクタライズする時の簡易的なまとめ

この記事は intrinsicsを使ってSSEでベクタライズするのに必要な足がかりを自分用にまとめたものです。 そもそもSSEって何 SIMD(http://ja.wikipedia.org/wiki/Streaming_SIMD_Extensions)を実現する拡張命令セットの名前。いろいろ種類があるしバージョンも…

google-perftoolsでC++プログラムのプロファイリング

この記事は google-perftoolsのcpu profilerを使ってC++プログラムのプロファイリングする時の一連の手順をまとめた記事です。 ほとんどgoogle-perftoolsの各サブセットのhow toに乗っている事の焼き直しです。 公式へのリンクとか google-perftools : https…

VisualStudio2010でLNK1123が出たら

症状 C++のビルドの際、以下のリンクエラーが発生してビルドに失敗する。 error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています 対処 VisualStudio2010 SP1を当てましょう 参考 LINK : fatal error LNK1123: fa…

boost.regexに2バイト文字を食わせる

なにがあった 艦これのドロップ報告を解析するプログラムを組んでいる時に全角文字の混じった文字列をboost.regexに食べさせてもうまく動かなかったのでその対処法のメモ。 対処法 w付きのあれこれ使ってcharではなくwchar_tにすればOK。 たとえばこんなかん…

gccで実行ファイル生成時に-gの指定?

この記事は gccで実行ファイルを生成するときに-gをつけているmakefileを見かけてめちゃくちゃ不安になったので、リンク時の-gに意味があるのか検証した記事。 前提条件 普通は $gcc -c hoge.c piyo.c $gcc -o foo hoge.o piyo.oみたいに 各ソースをコンパイ…

SDL+OpenGL+Box2Dでデバッグドロー付きHelloWorld

この記事は SDL+OpenGLのゲームにBox2D組み込むのにいろいろいじって勉強しようと思ったけど、ソースコード一個にまとまったごくごく簡単な描画付きサンプルないよなー? って思って自分で作りましたの記事です。 環境とか windows 7 professional 32bit Vis…

Eigen3でアフィン変換するヤツ

なにがあった Eigen3使ってあれこれするのに3次元空間上の点を回転して並進したくなってチュートリアルを覗いてみるとあるじゃないですかアフィン変換が。 アフィン変換行列くらい自分で作ってもいいんですけど、Transform使ったほうがかっこいいし速そう。…

windowsでboostビルドするときのコマンド

何があった 毎回コマンド忘れるのでメモ。 x86とx64で共存できるようにする。 bootstrap.bat b2.exe --build-dir=build/x86 --stagedir=stage/x86 toolset=msvc-10.0 address-model=32 -j9 b2.exe --build-dir=build/x64 --stagedir=stage/x64 toolset=msvc-…

引数のconst参照と値渡しの自動切り替え

なんの話? C++で、サイズの大きいオブジェクトを関数に渡そうと思ったら普通はconstな参照を使うと思います。でも、intとかのプリミティブな型ならわざわざconst参照にしないで素直に値渡しすると思います。この、const参照と値の切り替えをテンプレートな…

windowsでOgreSDK入れてチュートリアル始めるまで

何があった Ogre SDKを導入して最初のチュートリアル始めるのに何故かいろいろ調べて回った感じなので一応メモ。 環境 windows 7 x64 visual studio 2010 express 流れ 順番的には OgreSDKインストール サンプルビルドして動かしてみる チュートリアル用のプ…

クロスプラットフォームゲーム開発で使えるライブラリとか

この記事は クロスプラットフォームのC++ゲーム開発で使えそうなライブラリを自分のためにまとめてる記事です。 追記 2012/2/15 : orgeとirrlicht engineとOpenALとbulletを追加 そもそも前提条件 C++で 楽をして そこそこのパフォーマンスを得られる window…

ブロックでオブジェクトの寿命を制御

なにがあった はるか昔に見たC++のブロックの存在意義に今になって気づいたのでメモ。 そもそもブロックって ブロックっていうのは、関数内で void hoge(){ int foo; ... { int bar; ... cout << foo << endl; //OK cout << bar << endl; //OK ... } ... cou…

eclipse CDTのインデクサーがマクロ定義を認識してくれない

何があった 久しぶりにマクロ定義を使ってみたら、インデクサーがマクロ定義を認識してくれなくて解決できないと言われた。調べてみたらあっさり解決法が出てきたので一応メモ。 やりかた メニューバーの'Window -> Preference' Preference左側のツリーで'C/…

Makefileのヘッダファイルの依存関係のお話

何があった Makefileのどのソースがそのヘッダに依存するとかの話があっていろいろ苦戦したのでメモ。 そもそも依存関係とは Makefileは、依存関係がズラーっと書いてあって、依存関係の末端にそのファイルの生成方法を書いておく、というのが基本的な考え方…

Boostのposix timeでマシンをまたぐマイクロ秒精度のタイマー

何があった 速度測定するのにプラットフォームに依存しないミリ秒単位のタイマーが欲しくなって無理なのかなーって思ったら実はできるのかも? ってことでいろいろ試してメモ。 単一マシン上の場合 特定の関数にかかる時間を調べてたいって言う時はboost::ti…

boost.asioの非同期IOのしくみ

なにがあった 一個前のエントリで同期通信のブロッキングがウンタラカンタラって言って結局非同期通信することに落ち着いたので、非同期通信がどうなってるのかをメモ 基本的な流れとか おおよそ次の3ステップ メインスレッドでio_serviceに送受信バッファ…

boost.asioで同期受信のブロッキング解除

なにがあった TPCでもUDPでも同期受信関数を呼び出すともれなくブロッキングされるのだが、プログラム終了時に安全にブロッキングを解除する方法が無いっぽいことをメモ。 状況 まず、同期受信関数は子スレッドで動作しているものとする。 親スレッドは受信…

debianでg++-4.6.3ビルド

何があった debianのaptitudeで用意されているgccのバージョンが古くてCUDA5.0のnvccがうまくいかないので自分ソースコードを持ってきてビルド。 環境 debian 6.0.6 gcc 4.4.5 gcc 4.6.3 gccのソースを入手 ここ(http://gcc.gnu.org/mirrors.html)の適当なミ…

cmakeをgitからcloneしてビルド

なにがあった aptitudeで用意されているcmakeのバージョンが古くて困ったので最新版をビルド。 gitからクローン git clone git://cmake.org/cmake.git ビルド ./bootstrap make sudo make install

debianにCUDA5.0

なにがあった CUDA5.0使うことになったのでそのインストールメモ。 多分、ubuntuでもおんなじ手順でいけると思います。 パッケージのダウンロード https://developer.nvidia.com/cuda-downloads からパッケージをダウンロード。 debian用はないので、ubuntu1…

gitからソースを持ってきてboostのビルド

何があった Ubuntuとdebianでパッケージとして用意されているboostのバージョンが微妙に違うのでgitから持ってきてビルドしてしまおうと思ったので、ビルドしてインストールまでのメモ。 gitから入手 作業用ディレクトリに移動して次のコマンド git clone gi…

putenvに渡す引数についての注意

発生した問題 putenvでDISPLAY環境変数書きこんで、SDLの初期化したらコアダンプした。試しに文字リテラルを関数に直接渡したら何故かうまく動いた。 何が問題だったのか putenvに渡す引数にnewで確保したヒープ領域のアドレスを渡したのが原因の模様。恐ら…

Makefileでオブジェクトファイルを列挙する

したいこと Makefileに生成するオブジェクトファイルのリストを記述部分がある。ここに並べるオブジェクトファイルはディレクトリ中のソースファイルの拡張子を".o"にしたものなので、自動生成するスクリプトをMakefileに埋め込みたい。 要は面倒臭い。 シェ…

OpenCVで動画がロードできなかった話

発生した問題 OpenCVの動画ロード関数であるcvCaptureFromAVI()関数が存在するはずの動画を読み込んでくれない。ファイルが存在しないなんてオチではない。 環境 Ubuntu 12.04 LTS OpenCV 2.4.2 何が原因だったかというと cvCaptureFromAVI()関数の内部で"ff…

eclipse CDTのDiscoveryにpkg-configの中身まで拾って欲しい時

やりたいこと こんな感じのMakefileを書いたとする all: g++ -o hoge hoge.cpp `pkg-config piyo --cflags --libs`このMakefileを使ってeclipseでビルドしても``で囲まれてる部分から展開される-IオプションはDiscoveryで検出されない。 展開された結果得ら…

OpenCVをビルドしてインストール

動機 なんか手順間違えてる気がするのでちゃんとインストールし直す。 環境 Ubuntu 12.04 LTS OpenCV 2.4.9 必要な依存パッケージの入手 基本的にはこのコマンドでまとめて入手出来る。 sudo apt-get build-dep libcv-dev コンパイルしてて無くて困ったパッ…

ubuntuにffmpegをインストール

動機 gitからソースコード持ってきてビルドしてインストールする手順のメモ。 環境 Ubuntu 12.04 LTS いろいろあった ここ(https://wiki.ubuntulinux.jp/UbuntuTips/Application/HowToInstallAndUseLatestFFmpegAndX264)に乗ってる手順そのまんまでやってみ…

ubuntuにeclipse CDTを導入

動機とか g++とemacsでC++コード組んでたけど、リファクタリングが無い! って所で乗り換えを決意。なんだかんだで生産性ほしかったらIDEに落ち着くんですかね。 CUI環境でアレだけの機能使えるのはメリットだと思うので、二度と使わないって言うことは無い…

ffmpegをg++コンパイルするときのバグフィックスいろいろ

ささっとリンクだけ箇条書きで UINT64_Cでエラーが出たら https://trac.macports.org/attachment/ticket/34094/libavutil-common.h.diff リンクの段階でundefinedが大量に出たら http://ffmpeg-users.933282.n4.nabble.com/undefined-reference-to-all-libav…

gccとVisualStudioの両方でコンパイルできるようにするには

何があった emacs+gccで書いてたコードをVisualStudio 2010に持っていったらコンパイルできない! 割と意味不明なエラーでコンパイルできない! 定数が二行目に続いてますってなんだ! で、原因はやっぱり文字コードっぽい。だって特定の文字に反応してるっ…

VisualStduio2010でのインクルードパスとかのおはなし

なにがあった VisualStudio2010を使っている誰もがネタにしているでしょうが、僕も引っかかりました。で、話がなんか妙にややこしくなっちゃったみたいなので、そこらへんをメモ。 何が問題か ここ(http://d.hatena.ne.jp/blono/20100501/1272709221)を参考…

配列を配列のまま関数に渡したい

何があったか boost.asioでネットワークIO書いてたら次のような状況が出てきた 配列作る 配列を関数に渡す 関数内で配列全体のサイズとる(正確にはテンプレート関数の引数のマッチングの問題なんだけど意味的にはニアリイコールってことで) ただし、関数の…