Entries from 2010-01-01 to 1 year

COMFRK vol2

http://ratiwo.blogspot.com/2010/12/comfrk-vol-2.htmlvol1 に引き続き、何か書きました。C++0x のムーブセマンティクスに関してです。基本的なモチベーションであるとか、そもそも参照って何?右辺値って何?みたいなレベルの話から、コピー、ムーブの可否…

循環参照と所有権の共有

循環参照というと C++ では下のようなコードのことを指すわけですが、 struct A { shared_ptr<B> bp; }; struct B { shared_ptr<A> ap; }; shared_ptr<A> ap(new A()); shared_ptr<B> bp(new B()); ap->bp = bp; bp->ap = ap; これに対する解決として weak_ptr を使うと</b></a></a></b>…

循環参照と所有権の共有訂正

なんか完全に間違えてました。本来は既に管理しているオブジェクトの一部をさす時に使うためのものなので、カスタムデリータが必要なんでした。 struct B; struct A { weak_ptr<B> b; }; struct B { weak_ptr<A> a; }; struct Deleter { Deleter(B* b) : b(b) { } </a></b>…

mutable

C++

別に自身の直接のメンバじゃなくてもよかったんですね。 struct A { mutable int i; }; struct B { void f() const { a.i = 0; } A a; }; 知らなかったというか、考えたことがなかった。あと const と同じで別に推移的ではない。

C++ プログラマのための C++0x 入門

これは C++ advent calendar の参加記事です。真面目な C++0x の紹介や入門は 25 日もあれば誰かが書いてくれると思うので、C++0x について何も知らなくてもすぐに分かる、ちょっとだけ幸せになれるかもしれない極めて些細な tips を書きます。後に変態記事…

メタプログラミングの会に参加しました。

絶対迷うまい、とあらかじめ地図をしっかり頭に叩きこんでおいたのに、まさかの乗り換え時に迷子っていう悲劇が発生しました。走り回って、凹んだ。 プログラミング言語Polemy(仮) ようは eval に評価機を指定できる言語、とでもいえばいいのかなあ。 eval(e…

peep 続報

ピンをたてたり、既読にしたり未読にしたりする操作は、同時に一つしたの項目に移るべきだよなーと思ったのでそうした。 ブラウザで開く処理が同期的に処理されてるみたいで、複数ピン立ててブラウザで開くのがあまりに辛い。それが辛くなるようなスペックの…

ocaml の多相比較関数の最適化の問題について調べた

もう一月前の話ですが…忘れる前に書いておきます。ocaml の多相関数が、より効率のよい単相な関数に置き換えられるのは、全適用の形でかかれている場合のみ、というちょっとした罠があります。詳細はこちら→ http://d.hatena.ne.jp/camlspotter/20100130/126…

google reader を使い始めましたの巻

RSS リーダーというのをボクも使ってみようかしら…ということで google reader を使い始めました。rss とかブラウザで見る必要性ないでしょ、ということで CUI のクライアントを探したら peep というのがあったのでした。やったー。認証に関する API の仕様…

refloid

テストサーバーのアンドロイド sdk のアップデートが終わらないので暇つぶしに書きます。vim からアンドロイドのクラスリファレンスをひくものを作ってました。Eclipse でなく vim でアンドロイドの開発を行っているマゾの方は良かったら使ってみてください…

git さんと darcs さん

HIMA' に参加してきました。今回のお題は「gitとdarcsの使い方」。 darcs のパッチ理論の話とか聞けるかなーと思っていたのですが、聞けなかったのでちょっと残念でした。そもそもパッチ理論の話出来る人っているのかなっていう…とりあえず恐らく利用者が多…

git cherry-pick

git

前回の日記でコメントして頂いた cherry-pick ですが、これはコミットを一つしかとれないため、複数のコミットを扱う場合、何度も cherry-pick するか、rebase してブランチを操作するしかなくて悲しい…というのは昔の話で、cherry-pick でも複数のコミット…

git のお話

git

例えば E-F / A-B-C-D みたいな状況があるとします。ここから、 E-F / A-B-C-D-F としてやりたい。どうすべきか。結局 git format-patch して git am したんですが、やろうと思えば E を消し去って F だけになったブランチを rebase したうえで fast-forward…

有界の会#1 に参加しました

何か各自でスライドとか持ち込んで話す会だと思ってスライドとか真面目に作って行ったら、皆でダラリとおしゃべりする会だったようでビビリました。20 人集まってそれか…!という。でも集まり自体は非常に面白かったです。色んな界隈の色んな人たちが無作為…

セッションの遅延ロードの罠

これも rails バージョン 2.3.8 の話です。セッションには遅延ロードの仕組みがありますが、SessionHash#has_key? などの一部のメンバの実装は、Hash#has_key? の実装と変わらないので、そのまま使うとちょっとまずいです。適切に SessionHash#has_key? をオ…

ActiveRecord::SessionStore を利用している場合に reset_session した後で session_id を取得する

たまには仕事の話をします。rails バージョン 2.3.8 での話。通常 reset_session してしまうと、そのセッションの id は失われてしまいます。reset_session 後にセッションの id を取得したい場合には、request.session_options[:id] に自前で id を発行する…

opaque enum declaration

gcc のメーリングリストに、enum の前方宣言に関するパッチが、未完成ながらも投げられています。簡単そうなので enum class と一緒に実装されててもいいのに、と思っていたんですが、割合面倒なようです。gcc の現在のツリー構造では「まだ enumrator list …

accumulator generator in C++0x

accumulator generator というものがあります。暇つぶしに C++0x で書いてみました。 #include <memory> #include <functional> template <typename Num> auto accgen(Num n) -> std::function<auto (Num) -> Num> { auto np = std::make_shared<Num>(n); return [np](Num i) -> Num { return (*np) += i; }; } ラ</num></auto></typename></functional></memory>…

range-based for の declaration と expression の可視性について

先週、ようやく range-based for が gcc-4.6 に実装されました。めでたい。さて range-based for ですが、規格によると for ( for-range-declaration : expression ) statement と { auto && __range = ( expression ); for ( auto __begin = begin-expr, __…

map 色々

http://ls-al.jp/blog2/?itemid=3477 より。色んな map を書いてみます。 template <typename F, typename A> std::vector<typename std::result_of<F(A)>::type> map(const F& f, const std::vector<A> &v) { std::vector<typename std::result_of<F(A)>::type> r; for(auto it = v.begin(); it != v.end(); it++) r.push_back(f(*it)); …</typename></a></typename></typename>

C++0x のお話を

ちょっとずつ書こうかなと思います。誰も書いてくれやしない…とグズっていても仕方ないことに気がついてしまいました。悲しいね… 勿論ボクも全然知らないことだらけなので、調べながら少しずつ、になってしまうとは思いますが、ぼちぼちやってみようと思いま…

プログラミングの魔導書を読みました

C++

プログラミングの魔導書を読みました。面白かったところだけ、軽く感想など書いてみます。Hello, C++ World! は kinaba さんのこの話がよりまとまったもの。本が出る前にちらっと内容は伺っていたんですが、矢張り面白かったです。たまに思うんですが kinaba…

一時的にメソッドをすり替える

メタプログラミング ruby を読みました。よくまとまっていて、いい本だなあと思いました。 個人的にはあんまり ruby で実行時にメソッドやクラス、モジュールを操作することはメタじゃないと思っているんですが…それはうさつのとして…折角なのでメタっぽい話…

はんぶんこしよう

FCD によると、C++0x では少なくとも 1024 回の再帰的なテンプレートの実体化が保証されることになっています。 1024 回というのは、通常は十分に大きく問題のない数字なのですが、メタプログラミングな気分の時には、ちょっと少ないカナ?という気持ちに、…

WebDav 越しに git の bare リポジトリを公開する際の注意点

git

WebDav 越しに git のリモートリポジトリに push すると、push 時にリモートリポジトリ側で通常呼ばれるはずの、いくつかのフックが呼び出されません。公式のマニュアルにあるように、これらのフックは git-receive-pack コマンドが呼び出すものです。WebDav…

こるーちん☆いん☆しー

C

id:kikx さんに面白いソースコードを教えてもらいました。http://www.google.com/codesearch/p?hl=ja#ZmjNDPVeNGc/ssh.c&q=putty%20ssh.c&sa=N&cd=1&ct=rc&l=377C のマクロでコルーチンを実現しています。 マクロだけ見て理解するのはちょっと大変ですが、展…

include 死んじゃえというはなし

C++

元のやりとりが imihu なので意味が分からない話になってしまいましたが、そもそも目的の違う物を比較して、便利だとか不便だとか言っているのはよく分からない、ということが言いたかったのでした。最初からそういえばよかった。そして、比較とかしなくても…

pimpl と abstract class とわたし

http://togetter.com/li/42968全体的に違和感があったので、少し書きます。 yreeen: ファクトリなら機能追加を見越してバージョン番号を渡すように引き数作っとけばいいし。pimplの方が優れている部分が正直思い浮かばないんだけど何かあるんですか教えてえ…

Rakudo Star Crash

エレガントにクラッシュさせることはできませんでしたが、FizzBuzz くらいはかけるようになりました。 ("","","Fizz") <<~<< ("","","","","Buzz")xx 20 Z|| 1..100嘘です

C++ クイズ

C++

#include <cstdio> template <typename T> struct id { typedef T type; }; template <typename T> void f(T){ printf("T\n"); } template <typename T> void f(typename id<T>::type){ printf("id<T>::type\n"); } int main(){ f(0); f<int>(0); return 0; } 何がでるかな♪何がでるかな♪</int></t></t></typename></typename></typename></cstdio>