Programming

GPGPUをもふもふする会

先日の村主さんのPFIセミナーを受けて,どこかで集まってGPUをいじってみよう!という話をxhlとしました.それで始まったのが,このGPGPUをもふもふする会.適当にtwitterで告知したら知り合いが何人か釣れて,こぢんまりとやる予定だったのですが,気づいた…

wxPythonでマルチスレッドプログラミング

なんだかんだで,Pythonが好きです.楽です.ちょっとGUIのツールを作る必要にかられたので,wxPythonで作りました.GUIのライブラリに何を使うかいつも迷うんですが,もうC++いじるのつかれた,Javaは死ぬほどいじってるので,offのときくらいPythonを.で…

ミニチュア写真風フィルタ

ちょっと最近作っているのが、ミニチュア風フィルタです。Tilt Lens でぐぐるとたくさん引っかかりますが、本城直季さんの写真集を始め、ここ数年 Tilt Lens を使ったミニチュア風写真が流行っているみたいです。原理自体は単純なので昔から有りそうなもので…

四楚面歌

会社で四字熟語の2文字目と3文字目を入れ替えても読めるものがあるということが話題になりました。 四楚面歌 焼定肉食 水宮天前 どうですか! 逆に読めないのは、 一二石鳥 七八転起 ということで、勝手に『四楚面歌』化させるgreasemonkeyを書いてみまし…

そもそもなんでそんな最適化が欲しいのか

さて、ここでちょっと断りを入れておきたいことがあります。それはどのレベルの最適化をしたいのかという点です。私が言うところの最適化というのは、だいたい10〜100倍の高速化を目指すようなときです。個人的には1割速くなるためだけに、既存のインターフ…

Javaをよくできる子にするために

昨日の続きです。一点書き忘れたのは、オブジェクトの生成が無視されることはないようだ、という点です。既存のJavaのインターフェースはオブジェクトを返すようになっているので、それらに乗っ取るならオブジェクトを、たとえばIntegerを返したくなるのが心…

Javaはできる子です

Javaと聞くと、遅くね?と拒否反応を示す人は多いはず。就職して以降、弊社の戦略的事情から(本当だろうか)もっぱらプログラムはJavaで書いています。Javaは適当に遊んでいた程度でしたが、だいぶ慣れてきました。チューニング的な意味で。最近、大規模デ…

boost::random の使い方

あれー、おかしいなぁと思ってたらひどいことになっていた。 #include <boost/random.hpp> using namespace std; using namespace boost; int main() { mt19937 gen(static_cast<unsigned long>(10)); for (int i = 0; i < 10; i++) { cout << variate_generator<mt19937, uniform_smallint<> > (gen, uniform_smallint<>(0</mt19937,></unsigned></boost/random.hpp>…

ウチのコンパイラは微分もしますぜ

誰でも一度はコンパイラで微分してみたくなることがあったず。無性に何か書きたかったので書いてみました。

TokyoCabinet を C++ 上で template とキャスト演算子を使ってエレガントにラップする

moved 先日友人に TokyoCabinet というものを教えてもらいました。今まで DBM というものを知りませんでした。これはハッシュをファイルシステム上に実装したものです。ハッシュの巨大化にも耐えられ、かつメモリにキャッシュすることでオンメモリと遜色ない…

C++ 用の多倍長整数ライブラリ

http://alohakun.blog7.fc2.com/blog-entry-890.html C++ で多倍長整数をごく稀に使いたくなるときがありまして、ぐぐっても全く見つからないので、デファクトスタンダードがないのかなぁと思ってました。あるじゃん。 GNU MP 6.1.2: C++ Interface General …

C++ で __gnu_cxx::hash_map と boost::hash をナチュラルに使う

tr1 で unordered_set が追加されて、バンザーイという方も多いはず。とはいっても、未だに gcc 3.4 な環境は多いわけでして、例えば cygwin とか。そういう環境では、しょうがないので __gnu_cxx::hash_map に逃げるわけですが、これが string に対して has…

C++ で variant とパターンマッチをほんのり実現する

OCaml から離れられない一つの原因が variant とパターンマッチである。関数型であるとかそういうことは、本質的にどうでもいいのだ。関数を引数に渡せたり、無名関数を使えたりしたら関数型だというのなら、Python は関数型ということになってしまう。むし…

template 関数の部分特殊化ってできないんだっけか

stream に任意の型を書き込んだり読み込んだりしたいなぁというようなことを思った。関数ポインタなりを渡しても良かったんだけど、せっかくなので特殊化で楽をしたい。が、思ったよりうまくいかなくて困った。

よくあること

元の実装 A を改良した(されるはずの) B を実装し終わったら、出力が変わっていて、おかしいなぁと A に戻したら、やっぱり変な出力しかしない。そんなことあるよね。

伊豆

本腰入れる前に温泉でもつかりに行こうかと思っていたところで、開発合宿の誘いが来たので便乗して伊東にいってきました。どちらかというと、温泉が目当てだったんだけど。何作ろうかと思ったけど、ながらく放置していたタスクを消化することにした。誰の興…

C# の Sort は stable じゃない

落ち着いて考えると、250 はもっと楽にかけたはずなので書き直してみた。が、どうしても sample が通らない。何でだろうと思ったら驚愕の事実がわかった。 Stable Sort Method - Where Can I Get One? - C# / C Sharp C# の Array.Sort は安定ではない。ヘル…

GWT 1.4 がリリースされたらしい

GWT Blog: GWT 1.4 release and out of beta イマイチ日本では人気がないのが本当に悲しい。言語に不満があったり、コンパイラに文句があるときに、自分で言語を作る、あるいは別言語からコンパイルといったような発想が自然と出てきたいモノだ。それが ISer…

Boost 1.34 の Boost Test Library で BOOST_AUTO_TEST_CASE を使う方法

こないだ、1.34 環境でうごかないとぼやいていたが、結局 unit_test.hpp を見たら分かった(たぶん)。 #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MAIN #include <boost/test/unit_test.hpp> これでいいらしい。BOOST_TEST_DYN_LINK が加わっている。ヘルプに書いてある? それ</boost/test/unit_test.hpp>…

すばらしい洞察

#7 YAPC::Asia 2007 Hackathonスペシャル(後編) Webアプリはコンピュータ史上最悪な出来事:小飼弾のアルファギークに逢いたい♥|gihyo.jp … 技術評論社 紙で人の住める家を造る高度な技術ができましたといわれて、そこに住みたいか、買いたいか、その職に…

yield と collect イディオム

d.y.d. 小町算、parse とか eval とかしないで解こうと思ったら、kinaba さんに elegant な解答をかかれたので萎えてやめた。そういえば、yield って今まで存在すら知らなかったんですが、ここみてわかった。ずいぶん前に id:mmatsuoka さんのところで知った…

Python の何が気に入っているのかというはなし 〜SAX の場合〜

端的に言うとライブラリの「センス」がいいのです。細かい気配りの効いたお店ってあるでしょう。あんな感じ。今日ちょっと話したんですが、最近大変気に入った Python の SAX のはなし。たいていの OO 言語の SAX 実装は Visitor パターンで、startElement …

演算子を使って WHERE 節を書いた方がいいと思いませんか

かなりどうでもいいネタを思いついたので。SQL の WHERE 節を string で書くのが一般的なバインディングですが、それはどうも正しい文法を書いているのか、正しい型を書いているのかどうか怪しい。そんなあなたに・・・。

Python で中置演算子を定義する方法

Infix operators « Python recipes « ActiveState Code これはバカだぁ。こういうの好きだぁ。具体的には、カリー化させて書くとこんな感じ。 2 |x| 3 = ((2 | x) | 3 = (x(2)) | 3 = x(2, 3) Python では左右の | 演算子の挙動を override できるらしい。こ…

jPapers 〜研究者の研究者による研究者のための PDF 論文を管理するそふと

jPapers 0.1.0 ダウンロード そのうち晒そうと思っていてずっと放置していたプログラム。1 日 2 日で作って、あと適当に機能追加しただけなので、多くを期待されても困りますが、世の中で PDF 管理をうたっているソフトよりは使いやすいと思います。PDF XCha…

C/C++ 用の Makefile で楽をする方法

OCaml なら OCamlMakefile、Java なら Eclipse でいいんですが、C++ になったとたん autotools を試すもエラーに泣かされてあきらめて Makefile を手書きする軟弱モノです。なんであんなに使いにくいのよ!最近になって -MM を知りました。こんなのしらなか…

Boost Test Library を使う

http://www.boost.org/libs/test/doc/index.html CppUnit 入れるのめどいので Boost で我慢。細かいところが tutrial に書いてないので自分用メモ。

バグを踏んだ

http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html ↑のようなページを見つけたので、ついかっとなってこんなモノをかいてみた。 #define MAP(col, x, ...) (\ { std::vector p; \ FOREACH(it, col) { \ typeof(*it)& x = *it; \ p.push_b…

gcc の typeof 拡張で型推論な foreach をエレガントに実現する

C++ の for_each は、無名関数が書けないおかげで全く使い物にならないわけですが、それでも foreach を書かないと発狂しそうになるときはマクロでどうにかごまかしてきました。 #define FOREACH(t, it, col) \ for (t::const_iterator it = col.begin(); it…

SWIG がスゴイ件

スクリプト言語から C のライブラリを使うためのラッパを作るなら SWIG です。使ってみると、これが思っている以上に強力でエレガントにラップしてくれることに気づきます。SWIG のすごさというのは、各言語の最大公約数の部分をうまく共通化させてくれると…