2009-05-01から1ヶ月間の記事一覧

Boostでありがちなこと

C++

リンクするライブラリが分からなくなる。

Cygwinでasioが動かない

C++

無言で死ぬ。なーぜーだー #define _WIN32_WINNT 0x0501 #define __USE_W32_SOCKETS #include <iostream> #include <string> #include <boost/asio.hpp> using namespace std; using namespace boost::asio; int main() { ip::tcp::iostream s("www.example.com", "http"); s << "GET / HTTP/1.</boost/asio.hpp></string></iostream>…

C++ Coding Standards

C++

C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス (C++ in‐depth series)作者: ハーブサッター,アンドレイアレキサンドレスク,浜田光之,Herb Sutter,Andrei Alexandrescu,浜田真理出版社/メーカー: ピアソンエデュケーション発売日: 200…

適当にauto_ptrを実装する

C++

#include <iostream> #include <string> using namespace std; template<class T> class AutoPtr { T *p_; public: AutoPtr(T *p) { cout << "new:" << this << endl; p_ = p; } ~AutoPtr() { cout << "delete:" << this << endl; if (p_) { cout << "!!delete object!!" << endl; delet</class></string></iostream>…

cygwin, gcc4, tr1

C++

このソースが一応、cygwinでもビルドできた。 #include <iostream> #include <tr1/functional> using namespace std; int count1(int n) { return ++n; } int count2(int &n) { return ++n; } int count3(int *n) { return ++(*n); } int main() { int n1 = 0, n2 = 0, n3 = 0; tr1::fu</tr1/functional></iostream>…

静的なメンバ変数の初期化

C++

多分、問題ない…と思う。 class Foo { static const int bar[]; }; const int Foo::bar[] = {1, 2, 3}; int main() { return 0; } 実態の定義にstaticをつけるとエラー。 class/structで使う修飾子だから?

placement new

C++

使う機会はなさそうな。 #include <iostream> #include <new> using namespace std; class Foo { int i_; public: Foo() : i_(0) { cout << "Foo(0)" << endl; } Foo(int i) : i_(i) { cout << "Foo(" << i_ << ")" << endl; } Foo(const Foo& foo) { cout << "copy constru</new></iostream>…

メモだけ

C++

#include <iostream> using namespace std; template <int N, int _3 = N % 3, int _5 = N % 5> struct FizzBuzz { FizzBuzz() { FizzBuzz<N - 1>(); cout << N << " "; } }; template <int N, int _5> struct FizzBuzz<N, 0, _5> { FizzBuzz() { FizzBuzz<N - 1>(); cout << "Fizz "; } }; template <int N, int _3> struc…</int></n></n,></int></n></int></iostream>

gflags

C++

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/gflags/?root=svn 一応、VCでもビルドできた。 #include <iostream> #include "gflags/gflags.h" #include "gflags/gflags_completions.h" DEFINE_bool(big_menu, false, "Include 'advanced' options in the menu l</iostream>…

cpp圧勝

C++

http://q.hatena.ne.jp/1243223376 VCが多いせいかも。その他が気になる。

vectorの二次元配列

C++

便利なのか微妙なところだ…。 #include <iostream> #include <vector> using namespace std; void f(vector< vector<int> >& vv_) { vector< vector<int> > vv = vv_; for (vector< vector<int> >::const_iterator i = vv.begin(); i != vv.end(); i++) { vector<int> v = *i; for (vector<int>::const_i</int></int></int></int></int></vector></iostream>…

link:typedefテンプレート

C++

http://msdn.microsoft.com/ja-jp/library/cc440199(VS.71).aspx ふむふむ。

typedefテンプレートもどき

C++

typedefにテンプレートは使えないので、継承で何とかしてみる。 #include <iostream> #include <vector> using namespace std; template<typename T> class vecvec : public vector< vector<T> > {}; template <class T> void func(vecvec<T> vv) { for (vecvec<T>::const_iterator i = vv.begin() ; i != vv.</t></t></class></t></typename></vector></iostream>…

typedefテンプレートもどき その2

C++

structを使ってみる。 #include <iostream> #include <vector> using namespace std; template<class T> struct vecvec { typedef vector< vector<T> > type; }; void func(vecvec<int>::type& vv) { for (vecvec<int>::type::const_iterator i = vv.begin() ; i != vv.end() ; i++) { for (vector<int>::c</int></int></int></t></class></vector></iostream>…

sparsehash 0.1.0

http://sparsehash.rubyforge.org/ リリースしました。ファイルはCodoReposに置いてます。 http://coderepos.org/share/browser/lang/ruby/ruby-sparsehash

Sparse Hash: Linuxでの測定

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/ext/sparsehash.cpp?root=svn&view=markup Linux上だと実用的な速度に見えなくもない。 [root@andLinux ruby-sparsehash]# ruby test.rb SparseHashMap 1000000 Sparsehash::SparseHashMa…

Twitter投稿プラグイン

http://storehouse.sakura.ne.jp/tpp/ Firefoxは常時立ち上げているので、検索窓からTwitterに投稿する検索プラグインを作ってみた。追記 これ、検索と間違えて投稿してしまうなぁ…追記2 期待していなかった副作用として、選択した箇所を右クリックで投稿で…

ついでにSTLのマップのバインディングも作ってみた

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/sparsehash.cpp?revision=2640&root=svn&view=markup テンプレート、強力だなー。 key_compareの実装の仕方があっているのかどうか…。 rnum= 100 10000 1000000 Hash 0.454 sec. / 0.168 …

Sparse HashのRubyバインディング

Sparse Hashに興味があったので、Rubyバインディングを作ってみた。http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/ruby-sparsehash/?root=svn #include "google/sparse_hash_map" #include "google/dense_hash_map" #include "sparsehash_internal.h" n…

Sparse HashのRubyバインディング: アクセス速度

一応、アクセス速度も測ってみる。 require 'sparsehash' require 'timeout' include Sparsehash [100, 10000, 1000000].each do |rnum| [Hash, DenseHashMap].each do |clazz| puts("#{clazz}: #{rnum}") hash = clazz.new (0...rnum).each do |i| buf = sp…

Sparse HashのRubyバインディング: charを使う

charを使えば少しは早くなるかもと思って、少し修正。 #include "google/sparse_hash_map" #include "google/dense_hash_map" #include "sparsehash_internal.h" #include <cstring> namespace { template <class T> struct Sparsehash { typename T *m; static void rb_sparse</class></cstring>…

ruby_errinfo -> rb_errinfo()

1.9でruby_errinfoがrb_errinfo()になったらしい。 Tue Jan 2 10:29:54 2007 Eric Hodel <drbrain@segment7.net> * ext/zlib/zlib.c: fix to compile on YARV ruby_errinfo -> rb_errinfo() Mon Jan 1 08:07:06 2007 Koichi Sasada <ko1@atdot.net> * ext/tk/tcltklib.c: fix to compile on YARV r</ko1@atdot.net></drbrain@segment7.net>…

read_bodyでジェネレータ

ジェネレータを使えば、呼び出し側トリガでread_bodyを回せるなぁ…と思って、少し頭をひねってみる。 #!/usr/bin/env ruby1.9 require 'net/http' require 'uri' require 'enumerator' class WebEnum def initialize(uri) @uri = URI.parse(uri) @http = Net…

net/httpでZIPファイルを開く

Zip/Rubyには、ProcオブジェクトをZIPのストリームとしてファイルを開くという、無駄な機能があるので、少し活用してみる。 #!/usr/bin/env ruby1.9 require 'net/http' require 'uri' require 'enumerator' require 'zipruby' class WebEnum def initialize…

link:Fat binary gems make the rockin’ world go round

http://tenderlovemaking.com/2009/05/07/fat-binary-gems-make-the-rockin-world-go-round/ しばらくはgemとパッケージ名を分けるけど、アーロンさんの案には賛成。 なんか手伝えないかな…。

sparse_hash_mapを使う

C++

http://google-sparsehash.googlecode.com/ APIは普通のMapと変わらない感じ。 #include <iostream> #include <google/sparse_hash_map> using namespace std; using namespace google; int main() { typedef sparse_hash_map<const char *, const char *> cmap; cmap m; m["foo"] = "hoge"; m["bar"] = "piyo"; m["zoo"] = </const></google/sparse_hash_map></iostream>…

標準出力は60KBまで

http://redmine.ruby-lang.org/issues/show/1063 今回のリリースでは直ったのかな?

るぱん?

http://rubypan.org/ なにこれ?

Ruby 1.9.1でfcloseで落ちる件

これか? 時間があったら追ってみよう。

link:Performance:Home Page

https://wiki.mozilla.org/Performance This page is meant to provide a starting point for developers who want to improve performance in Gecko and Firefox. Leak Toolsのページはもうちょいよく読もう。