mojavy.com

www2014のアドテク関連のResearch Trackメモ

October 06, 2014 at 09:05 PM | categories: adtech |

www2014のResearch TrackOnline Experiments & Advertisingというのがあったので、概要だけメモ。

Adscape: Harvesting and Analyzing Online Display Ads

クローラを用いて広告データを収集することによって、現状のディスプレイ広告でどのようなターゲティングが行われているのかについてを分析している。 340通りのユーザプロファイルを用いて180件のウェブサイトをクロールし、17万5000件の広告を収集したとのこと。

プロファイルの内容によってどのカテゴリの広告が配信されやすいかとか、ウェブページあたりの広告主数の分布とか、実験結果は結構おもしろい。

Statistical Inference in Two-Stage Online Controlled Experiments with Treatment Selection and Validation

より進んだA/Bテストの方法について。Bingのデータを用いているが、他の分野でも適用できる。 Bonferroni法やHolm法といった従来の多重比較における補正方法より実用的なものが紹介されている。

An Experimental Evaluation of Bidders’ Behavior in Ad Auctions

実際に人間を使ってadwords的なオークションのゲームを行い、理論通りの挙動をするかを検証するというもの。 概ね期待通りの価格に近づくが、予想に反して平衡に逹しないという結果が得られたとのこと。



flappymacs がMELPAに登録されました

July 16, 2014 at 01:07 AM | categories: game, emacs |

flappymacs がMELPAに登録されました。

(add-to-list
 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)

を設定して、M-x package-list-packages からflappymacsを探してインストールするとすぐに遊べます。



EmacsでFlappy Birdっぽいもの書きました

July 10, 2014 at 08:01 PM | categories: game, emacs |

flappyvird にインスパイアされてEmacs版のFlappy Bird書きました。

flappymacs

flappymacs

flappymacs.elをロードして、M-x flappymacsで遊べます。

2014/07/16 追記

MELPAに登録されました



C++のdreaded diamondについて

July 09, 2014 at 09:56 PM | categories: programming, c++ |

以下のようなダイアモンド継承をしたときに発生する問題のことをdreaded diamondと呼ぶらしい。

    Base
    /  \
   D1  D2
    \  /
     D3

例えば以下のようなクラスではアップキャストをするときやBaseクラスのメンバにアクセスするときに曖昧性が生じる。

class Base {
public:
    int data;
    virtual ~Base() {}
};

class D1 : public Base {
public:
    virtual ~D1() {}
};

class D2 : public Base {
public:
    virtual ~D2() {}
};

class D3 : public D1, public D2 {
public:
    virtual ~D3() {}
};

以下のようなコードをコンパイルしようとしてもエラーになる。

void f1() {
    D3 d3;
    Base &base = d3;
    d3.data = 123;
}
      ambiguous conversion from derived class 'D3' to base class 'Base':
    class D3 -> class D1 -> class Base
    class D3 -> class D2 -> class Base
    Base &base = d3;
                 ^~

      non-static member 'data' found in multiple base-class subobjects of type 'Base':
    class D3 -> class D1 -> class Base
    class D3 -> class D2 -> class Base
    d3.data = 123;
       ^

これを回避するためには明示的に中継するクラスを指定してやる必要がある。

void f2() {
    D3 d3;
    Base &base = dynamic_cast<D1&>(d3);
    d3.D1::data = 123;
    d3.D2::data = 456;

    cout << d3.D1::data << ',' << d3.D2::data << endl;  // => 123,456
}

でも普通は継承元にそれぞれの別々の親を持つのではなく、共通の1つだけを持っていてほしい。 それを解決するには仮想継承を使う。

class D1 : public virtual Base { /* 省略 */ };
class D2 : public virtual Base { /* 省略 */ };
class D3 : public D1, public D2 { /* 省略 */ };

このようにすればBaseクラスのインスタンスは1つだけになって曖昧性が解消される。

void f3() {
    D3 d3;
    Base &base = d3;
    d3.data = 123;

    cout << d3.D1::data << ',' << d3.D2::data << endl;  // => 123,123
}


pthreadの取り消しポイント(cancellation point)についてのメモ

March 18, 2014 at 09:41 PM | categories: unix, programming |

cancellation pointsとは、スレッドのキャンセル種別がdeferredのときに、そこに到達したときにはじめて実際にそのスレッドのキャンセル要求が処理されるような関数のこと。

POSIX.1では、基本的にはブロックするような関数がcancellation pointsであることが要求されている。

参考



About Me

pic
mojavy

Recent posts






Categories



Badges