2011-10-01から1ヶ月間の記事一覧

Shader のコンパイルエラーを取得

OGLplus で Shader のコンパイルに失敗した場合、Comple() 時に例外(CompileError)が飛んできます。 [ソース] #include <vector> #include <iostream> #define GL_VERSION_4_1 1 #include <GL/glew.h> #include <oglplus/gl.hpp> #include <oglplus/context.hpp> #include <oglplus/shader.hpp> #include <GL/Glut.h> int main(int argc, char *argv[]){ n…</gl/glut.h></oglplus/shader.hpp></oglplus/context.hpp></oglplus/gl.hpp></gl/glew.h></iostream></vector>

OGLplus を使ってシェーダで遊んでみた

実行時にシェーダファイルをリロードできるようにして遊んでみました。 [main.cpp] #include <vector> #include <GL/glew.h> #include <oglplus/gl.hpp> // OGLplus 0.5.0 以降だと near far を undef しておかないと動かない #undef near #undef far //#include <oglplus/all.hpp> #include <oglplus/context.hpp> #include <oglplus/buffer.hpp> #include </oglplus/buffer.hpp></oglplus/context.hpp></oglplus/all.hpp></oglplus/gl.hpp></gl/glew.h></vector>

if 文を使わないで FizzBuzz

C++

というものをみかけたので C++ でやってみました。 条件演算子を使うとかいうトンチではない。 [ソース] #include <string> #include <iostream> #include <boost/lexical_cast.hpp> int main(){ std::string fizz[2] = { "", "Fizz" }; std::string buzz[2] = { "", "Buzz" }; for(int i = 1 ; i < 30 </boost/lexical_cast.hpp></iostream></string>…

Boost 1.48.0 beta1

が公開されたらしいです。 Boost 1.48.0 beta1 とりあえず Boost.Fusion の std::tuple アダプタを試してみました。 [ソース] #include <boost/fusion/include/for_each.hpp> #include <boost/fusion/adapted/std_tuple.hpp> #include <boost/fusion/include/make_fused.hpp> #include <boost/lambda/lambda.hpp> #include <iostream> #include <tuple> #inclu…</tuple></iostream></boost/lambda/lambda.hpp></boost/fusion/include/make_fused.hpp></boost/fusion/adapted/std_tuple.hpp></boost/fusion/include/for_each.hpp>

OGLplus 0.6.0

いつの間にか OGLplus がバージョンアップしていました。 0.6.0 はまだ正式リリースじゃないのかな? 最新版の OGLplus だと gcc 4.6.1 にも対応しているみたいです。Windows にはまだ対応していないみたいなので、ソースコードに手を加えないと Windows だ…

Boost.Phoenix でフィボナッチ数列

メモ化していないので実行速度は遅いですが。 [ソース] #include <boost/phoenix/core.hpp> #include <boost/phoenix/bind.hpp> #include <boost/phoenix/operator.hpp> #include <boost/phoenix/scope.hpp> #include <boost/function.hpp> #include <boost/range/irange.hpp> #include <boost/range/algorithm/for_each.hpp> #include <iostream> i…</iostream></boost/range/algorithm/for_each.hpp></boost/range/irange.hpp></boost/function.hpp></boost/phoenix/scope.hpp></boost/phoenix/operator.hpp></boost/phoenix/bind.hpp></boost/phoenix/core.hpp>

Boost.Phoenix で sleep sort

一時期流行ったアレ。 最初は、Boost.Thread を使った sleep sort を書こうと思っていただけなんですが、気がついたら Boost.Phoenix でガシガシ書いていました。 [ソース] #include <boost/thread.hpp> #include <boost/phoenix.hpp> #include <boost/function.hpp> #include <boost/typeof/typeof.hpp> #include <iostream> int main(){ namespace phx = </iostream></boost/typeof/typeof.hpp></boost/function.hpp></boost/phoenix.hpp></boost/thread.hpp>…

vim で filetype ごとの設定を簡単に行う

vim

っていうのを以前 Twitter で見かけたので自分でもやってみました。 [vimrc] " after/ftplugin/{&filetype}.vim ファイルを開く " ディレクトリは各環境にあわせて設定 let $AFTER_FTPLUGIN = $BUNDLE_ROOT."/after/ftplugin" nnoremap <silent> <Space><CR> :execute ":e ".$AF</cr></space></silent>…

Vim を使うなら入れておきたい 10 のプラグイン

vim

Vim を使うなら『これぐらいは入れておいたほうがいい』っていうプラグインの紹介です。 どちらかといえば初心者向けな感じで、なるべく汎用的に使えそうなプラグインを選んでみました。 しかし、正直、初心者向けにしては数が多かったかも知れない…。 0.各…

エラトステネスの篩

を Boost.MPL で。 [ソース] #include <boost/mpl/print.hpp> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/range_c.hpp> #include <boost/mpl/modulus.hpp> #include <boost/mpl/copy.hpp> #include <boost/mpl/copy_if.hpp> #include <boost/mpl/not_equal_to.hpp> #include <boost/mpl/back_inserter.hpp> #include…</boost/mpl/back_inserter.hpp></boost/mpl/not_equal_to.hpp></boost/mpl/copy_if.hpp></boost/mpl/copy.hpp></boost/mpl/modulus.hpp></boost/mpl/range_c.hpp></boost/mpl/vector_c.hpp></boost/mpl/print.hpp>

パス区切りの置換

vim

いい加減、\ → / への変換を手打ちするのは疲れたのでキーマップ。 [vimrc] " \ から / へ置換 vnoremap <silent> <Leader>/ :s/\\/\//g<CR>:nohlsearch<CR> nnoremap <silent> <Leader>/ :s/\\/\//g<CR>:nohlsearch<CR> ふぅ、これですっきり。</cr></cr></leader></silent></cr></cr></leader></silent>

OGLplus で複数の△ポリゴンの描画

oglplus/001_triangle.cpp をベースにして複数のポリゴン描画を行ってみました。 [ソース] #include <vector> #define GL_VERSION_4_1 #include <GL/glew.h> #include <oglplus/gl.hpp> //#include <oglplus/all.hpp> #include <oglplus/context.hpp> #include <oglplus/buffer.hpp> #include <oglplus/vertex_attrib.hpp> #include </oglplus/vertex_attrib.hpp></oglplus/buffer.hpp></oglplus/context.hpp></oglplus/all.hpp></oglplus/gl.hpp></gl/glew.h></vector>

Vim から GUI アプリケーションを起動する

vim

Vim のコマンドから直接起動してもいいのですが、それだと GUI アプリケーションが終了するまで、Vim を操作することが出来ないので、open-browser.vim を使用して起動させてみたいと思います。 [プラグイン] open-browser.vim [vimrc] " 実行ファイルを呼び…

OGLPlus を Windows で動かしてみた

OGLPlus に関してはここら辺を参照して下さい。 OGLplus はまだ Linux しかサポートされていませんが、無理やりがんばって Windows で動かしてみました。 glew が使える環境であれば多分問題ないはず…。 [手元の環境] WindowsXP MinGW gcc-4.5.2 OGLPlus 0.4…

Haskell で FibBuzz 書いてみた

とりあえず自力で書いてみた。 [ソース] fizzbuzz :: Int -> String fizzbuzz n = case (n `mod` 3 == 0, n `mod` 5 == 0) of (True, True) -> "FizzBuzz" (True, False) -> "Fizz" (False, True) -> "Buzz" (_, _) -> show n fibonacciImpl :: Int -> Int -…

make の実行結果を unite.vim へ出力する

unite-build を使用することで、非同期で make を実行し、その結果を unite.vim へと出力します。 unite.vim へ出力されることで、全体が見やすく、絞りこみなどをスムーズに行うことができます。 また、エラー出力を行う際に『テンプレート引数の畳み込み』…

Vim の括弧をカラフルにする

vim

() をカラフルにハイライトする事で対応する括弧をわかりやすくします。 [プラグイン] [git://github.com/kien/rainbow_parentheses.vim.git:title=rainbow_parentheses.vim] [vimrc] " () をハイライト autocmd FileType * :RainbowParenthesesLoadRound " …

C++ で セミコロンを使わずに FibBuzz

C++

前回と同じしばりですね。 今回も Boost.Phoenix を使用しました。 フィボナッチ数列は再帰で処理していたので FibBuzz は無理かなーと思ったんですが、別のアルゴリズムがあったのでやってみました。 [ソース] #include <boost/phoenix.hpp> #include <boost/lexical_cast.hpp> #include <iostream> #include <string> int</string></iostream></boost/lexical_cast.hpp></boost/phoenix.hpp>…

Boost.MPL で FibBuzz

ついカッとなってやった。反省はしていない。 [ソース] #define BOOST_MPL_LIMIT_VECTOR_SIZE 40 #include <boost/type_traits/is_same.hpp> #include <boost/mpl/assert.hpp> #include <boost/mpl/if.hpp> #include <boost/mpl/eval_if.hpp> #include <boost/mpl/long.hpp> #include <boost/mpl/equal_to.hpp> #include <boost/mpl/plus.hpp> #incl…</boost/mpl/plus.hpp></boost/mpl/equal_to.hpp></boost/mpl/long.hpp></boost/mpl/eval_if.hpp></boost/mpl/if.hpp></boost/mpl/assert.hpp></boost/type_traits/is_same.hpp>

FibBuzz で fibonacci をメモ化

C++

前回の続き。 Boost.Flyweight を使用してfibonacci をメモ化しました。 これで実行速度が鬼のように早くなった。 [ソース] #include <boost/flyweight.hpp> #include <boost/flyweight/key_value.hpp> #include <boost/flyweight/no_tracking.hpp> #include <boost/phoenix/bind.hpp> #include <boost/phoenix/operator.hpp> #include </boost/phoenix/operator.hpp></boost/phoenix/bind.hpp></boost/flyweight/no_tracking.hpp></boost/flyweight/key_value.hpp></boost/flyweight.hpp>

C++ で FibBuzz

C++

元ネタ:FizzBuzz は時代遅れらしいので FibBuzz はどうでしょう #fibbuzz - cod.note C++ で書いてみた。 [ソース] #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/range/irange.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/adaptor/transformed.hpp> #include </boost/range/adaptor/transformed.hpp></boost/range/algorithm/for_each.hpp></boost/range/irange.hpp></boost/lambda/bind.hpp></boost/lambda/lambda.hpp>

オブジェクト指向と関数型

ちょっと前にTLで見かけたんですが、わたしのイメージはこんな感じ。 [ソース] #include <cmath> #include <iostream> // オブジェクト指向的な書き方 namespace object{ struct vector{ vector() : x(0.0f), y(0.0f), z(0.0f){} vector(float x, float y, float z) : x(x), y</iostream></cmath>…

vim script 力を高める

元ネタ: Hack #236: 短期間でVim script力を向上する - vim-users.jp [ソース] echo eval(join(filter(range(1000), "!(v:val % 3 && v:val % 5)"), "+")) " => 233168 二項演算子であれば、eval と join で foldl をエミュレート出来るので便利ですね。 [参…

clang 3.0 で追加される C++11 の機能

いつの間にか C++ and C++'11 Support in Clang のページレイアウトが変更されていました。 バージョンごとの実装が見やすくなっている…! clang 3.0 で追加される C++11 の機能は以下のとおり。 Non-static data member initializers Alias templates Null …

quickrun.vim の設定晒し

ちょっと設定をゴニョゴニョしながら見直したのでついでに晒します。 前回、C++ の設定を晒した時よりは読みやすいかと。 [vimrc] " g:quickrun_config の初期化 if !exists("g:quickrun_config") let g:quickrun_config={} endif " デフォルトの設定 " 非同…

constexpr な transform_view

C++

Sequence の変換を行うラッパーです。 [] などで Sequence へアクセスする際に変換を行います。 [ソース] #include <utility> #include <type_traits> namespace ce{ template<std::size_t... Indices> struct index_tuple{}; template< std::size_t Start, std::size_t Finish, std::size_t Step = 1, type</std::size_t...></type_traits></utility>…

Vim C++11 Syntax 対応 その後

ちょっと前ですが、vim-jp に C++11 Syntax についての issues をつくりました。 C++11 の Syntax 対応 - vim-jp 現在も進行中なので、C++er や Vimmer の方の意見などを頂ければ助かります。

unite.vim で quickrun_config の列挙

vim

複数の処理系から1つを選んでスムーズに実行(コンパイル)を行います。 以前にも同様の事をやったんですが、これを unite.vim を使用して実装しました。 quickrun_config に現在の filetype と同じ filetype の設定があれば列挙して実行(コンパイル)出来…

unite-menu

vim

という unite-source を unite.vim 追加してもらいました。 これを使用すると昨日の unite-source はこんな感じになります。 [vimrc] if !exists("g:unite_source_menu_menus") let g:unite_source_menu_menus = {} endif " menu の説明 let s:commands = { …

unite.vim を使用して Boost のドキュメントを開く

やっていることは前回と同じです。 open-browser.vim を使用して、ブラウザで Boost のオンラインドキュメントを開きます。 [プラグイン] unite.vim open-browser.vim [vimrc] " unite-boost-ref " ブラウザで boost のドキュメントを起動 let s:unite_sourc…