<?xml version="1.0" encoding="UTF-8"?>
<feed
  xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0"
  xml:lang="en"
   >
  <title type="text">mojavy.com</title>
  <subtitle type="text"></subtitle>

  <updated>2015-08-30T16:22:20Z</updated>
  <generator uri="http://blogofile.com/">Blogofile</generator>

  <link rel="alternate" type="text/html" href="http://mojavy.com/blog" />
  <id>http://mojavy.com/blog/feed/atom/</id>
  <link rel="self" type="application/atom+xml" href="http://mojavy.com/blog/feed/atom/" />
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[95/5 Mbps とは]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2015/08/30/95_5_mbps/" />
    <id>http://mojavy.com/blog/2015/08/30/95_5_mbps/</id>
    <updated>2015-08-30T16:22:20Z</updated>
    <published>2015-08-30T16:22:20Z</published>
    <category scheme="http://mojavy.com/blog" term="tips" />
    <category scheme="http://mojavy.com/blog" term="internet" />
    <summary type="html"><![CDATA[95/5 Mbps とは]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2015/08/30/95_5_mbps/"><![CDATA[<p>Akamaiの<a href="https://developer.akamai.com/api/luna/billing-usage/overview.html">Billing Center API</a> では、95/5 Mbpsという単位のデータが取得できる。</p>
<p>95/5 Mbps というのは、特定の期間の平均Mbpsを5分間隔でサンプルしたものをソートした時の95パーセンタイルの値ということらしい。</p>
<p>なぜこのような数字が使われるのかというと、単純にピークのトラフィックを基準にして課金されると利用者側にとってつらいという問題があるからだ。
インターネットのトラフィックは往々にしてスパイクが発生するので、それだと普段はほとんど帯域を使わないのに一瞬のアクセス急増があっただけでコストが大きく増大してしまう。</p>
<p>そこで、あるISPが95/5 Mbpsで課金するようにしたところ市場で支持を得たため、これが一般的な課金形式として広まったらしい。</p>
<h3 id="_1">参考</h3>
<ul>
<li><a href="http://drpeering.net/AskDrPeering/blog/articles/Ask_DrPeering/Entries/2011/4/29_The_Origins_of_95_5.html">http://drpeering.net/AskDrPeering/blog/articles...</a> </li>
<li><a href="https://en.wikipedia.org/wiki/Burstable_billing">https://en.wikipedia.org/wiki/Burstable_billing</a> </li>
</ul>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[組み込み用プログラミング言語のパフォーマンス比較]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2015/04/21/embedded-languages-benchmarks/" />
    <id>http://mojavy.com/blog/2015/04/21/embedded-languages-benchmarks/</id>
    <updated>2015-04-21T01:10:40Z</updated>
    <published>2015-04-21T01:10:40Z</published>
    <category scheme="http://mojavy.com/blog" term="v8" />
    <category scheme="http://mojavy.com/blog" term="lua" />
    <category scheme="http://mojavy.com/blog" term="lisp" />
    <category scheme="http://mojavy.com/blog" term="programming" />
    <category scheme="http://mojavy.com/blog" term="ruby" />
    <summary type="html"><![CDATA[組み込み用プログラミング言語のパフォーマンス比較]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2015/04/21/embedded-languages-benchmarks/"><![CDATA[<p>組み込み用のプログラミング言語といえばLuaがよく使われるけど、最近はmrubyやsquirrelもあって選択肢が広がってきた感があるのでどういう特徴があるのかを知るためにベンチマークをやってみた。</p>
<p>今回対象にしたのは以下。</p>
<ul>
<li>Lua - v5.1</li>
<li>LuaJIT - v2.0.2</li>
<li>squirrel - v3.0.7</li>
<li>V8 - v3.30</li>
<li>mruby - v1.1.0</li>
<li>ecl (Embeddable Common-Lisp) - v15.3.7</li>
</ul>
<p>ここでのベンチマークは言語自体のスピードの比較ではなく、どちらかというと組み込む際に必要なオーバーヘッドやホスト言語側での処理にかかる部分に重点を置いた。</p>
<p>ベンチマークの処理では、関数呼出し比較用の<code>echo</code>関数と、テーブル操作比較用の<code>invert</code>関数を組み込み言語側に実装して、それを繰り返し呼び出すようにした。</p>
<p>また、なるべく公平になるように、組み込み言語側の関数は初期化時にグローバルスコープ(組み込み言語側のグローバルスコープ)に登録しておき、すべて同じインターフェースから呼ぶようにした。</p>
<p>使用したコードは以下。そのうち別の言語とか追加するかもしれない。</p>
<p><a href="https://github.com/taksatou/embench">https://github.com/taksatou/embench</a> </p>
<h2 id="_1">結果</h2>
<h4 id="echo-100000">echo 100000 回実行</h4>
<p><img alt="echo" src="/images/embench-echo-100000.png" /> </p>
<h4 id="invert-100000">invert 100000 回実行</h4>
<p><img alt="invert" src="/images/embench-invert-100000.png" /> </p>
<p><a href="https://gist.github.com/taksatou/8de85bbfe79548864cf5#file-result-md">https://gist.github.com/taksatou/8de85bbfe79548864cf5#file-result-md</a> </p>
<h4 id="_2">備考</h4>
<ul>
<li>control は同等の処理をホスト言語側で実装したもの</li>
<li>LuaJITは<code>LD_PRELOAD</code>で切り替えた</li>
<li>eclはechoが遅くてやるきを失ったのでinvertのほうは省略</li>
</ul>
<h2 id="_3">所感</h2>
<ul>
<li>Luaがパフォーマンスと組み込みやすさの点でやはり一番使いやすい。LuaJITをつかうとさらに数割速くなる。</li>
<li>squirrelは言語機能的にはluaのスーパーセットという感じで、パフォーマンスもluaと同じ程度。ただしドキュメントはあまりない。</li>
<li>V8はマルチスレッド環境や大規模なものには向いてるかもしれない。組み込みはちょっとめんどくさい。</li>
<li>mrubyはechoだと意外と健闘しているがテーブル操作は速くない。組み込みはLuaと同じくらい簡単。</li>
<li>eclにはもうちょっとがんばってほしい。組み込み方法に問題があるのかもしれない。</li>
</ul>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[最近読んだ本]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2015/04/05/books/" />
    <id>http://mojavy.com/blog/2015/04/05/books/</id>
    <updated>2015-04-05T13:23:59Z</updated>
    <published>2015-04-05T13:23:59Z</published>
    <category scheme="http://mojavy.com/blog" term="books" />
    <summary type="html"><![CDATA[最近読んだ本]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2015/04/05/books/"><![CDATA[<p>読んだ本を公開するのは何となく恥ずかしいので今までやらなかったけど、最近忘れるスピードが加速しているので記録のために書くことにした。<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> </p>
<p>あと、ブログをしばらく書かないとさらにブログを書くのが億劫になるのでどうでもいいことでも書くことにした。</p>
<h3 id="wzxhzdk0encyclopedia-of-spiritswzxhzdk1wzxhzdk2"><a href="http://www.amazon.com/gp/product/B003V1WVBG/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B003V1WVBG&linkCode=as2&tag=nikkinoyounam-20&linkId=FEERJ5TXSS2AY5MJ">Encyclopedia of Spirits</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B003V1WVBG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.com/gp/product/B003V1WVBG/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B003V1WVBG&linkCode=as2&tag=nikkinoyounam-20&linkId=E7CPDHGNI3AA2JSU"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B003V1WVBG&Format=_SL250_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=nikkinoyounam-20" ></a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B003V1WVBG" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>妖精とか神話にでてくる悪魔とか霊的ななにかについての図鑑。なにかおもしろい図鑑ないかと思ってさがしてたときにみつけた。kindleだと4ドルくらいだが、内容がマニアックでおもしろい。</p>
<p>エルフとかドワーフとかメジャーどころはもちろん、日本やアフリカのものや、現代のエルビスとか幽遊白書のコエンマとかまで載っている。</p>
<h3 id="wzxhzdk7spice-flavors-of-the-eastern-mediterraneanwzxhzdk8wzxhzdk9"><a href="http://www.amazon.com/gp/product/B00GLS4VM8/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B00GLS4VM8&linkCode=as2&tag=nikkinoyounam-20&linkId=6WD6GCJS5L7SFNUW">Spice: Flavors of the Eastern Mediterranean</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B00GLS4VM8" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.com/gp/product/B00GLS4VM8/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B00GLS4VM8&linkCode=as2&tag=nikkinoyounam-20&linkId=6WD6GCJS5L7SFNUW"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00GLS4VM8&Format=_SL250_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=nikkinoyounam-20" ></a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B00GLS4VM8" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>スパイスについての知識がほしかったので読んでみた。スパイスをつかったレシピ本だけど、スパイスを基準にレシピがソートされていてスパイスをどうつかえばいいかの理解を深めやすい。</p>
<h3 id="wzxhzdk14black-hawk-downwzxhzdk15wzxhzdk16"><a href="http://www.amazon.com/gp/product/B0015346OM/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B0015346OM&linkCode=as2&tag=nikkinoyounam-20&linkId=Q5MWF43SL7LVR623">Black Hawk Down</a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B0015346OM" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.com/gp/product/B0015346OM/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=B0015346OM&linkCode=as2&tag=nikkinoyounam-20&linkId=Q5MWF43SL7LVR623"><img border="0" src="http://ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0015346OM&Format=_SL250_&ID=AsinImage&MarketPlace=US&ServiceVersion=20070822&WS=1&tag=nikkinoyounam-20" ></a><img src="http://ir-na.amazon-adsystem.com/e/ir?t=nikkinoyounam-20&l=as2&o=1&a=B0015346OM" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>先日サバゲーをやったときに出会ったミリオタの知識の豊富さに感銘をうけたので戦争ものの小説を読みたくなった。米軍のスラングとかに無駄に詳しくなれる気がする。Hooah!</p>
<h3 id="wzxhzdk21-wzxhzdk22wzxhzdk23"><a href="http://www.amazon.co.jp/gp/product/B00M8ZVBOY/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00M8ZVBOY&linkCode=as2&tag=armyofpigs-22">最強　世界の歩兵装備図鑑</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00M8ZVBOY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00M8ZVBOY/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00M8ZVBOY&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00M8ZVBOY&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00M8ZVBOY" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>アサルトライフルの作動機構についての解説がよかった。</p>
<h3 id="wzxhzdk28wzxhzdk29wzxhzdk30"><a href="http://www.amazon.co.jp/gp/product/B0081MAET6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0081MAET6&linkCode=as2&tag=armyofpigs-22">村上式シンプル英語勉強法</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B0081MAET6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B0081MAET6/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B0081MAET6&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B0081MAET6&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B0081MAET6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>この本の影響で最近英語の文章を読む量を増やした。でもこの本の内容はスパルタンすぎて大体実践できてない。</p>
<h3 id="wzxhzdk35the-godwulf-manuscript-the-spenser-series-book-1-english-editionwzxhzdk36wzxhzdk37"><a href="http://www.amazon.co.jp/gp/product/B00309SD02/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00309SD02&linkCode=as2&tag=armyofpigs-22">The Godwulf Manuscript (The Spenser Series Book 1) (English Edition)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00309SD02" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00309SD02/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00309SD02&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00309SD02&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00309SD02" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p><a href="http://www.amazon.co.jp/gp/product/B0081MAET6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0081MAET6&linkCode=as2&tag=armyofpigs-22">村上式シンプル英語勉強法</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B0081MAET6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> で紹介されていたので。それなりにおもしろくて読みやすい。</p>
<h3 id="wzxhzdk4510000-cd3-cd-bookwzxhzdk46wzxhzdk47"><a href="http://www.amazon.co.jp/gp/product/4860642112/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4860642112&linkCode=as2&tag=armyofpigs-22">発信型英語10000語レベル スーパーボキャブラリービルディング(CD3枚付) (CD BOOK)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=4860642112" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/4860642112/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4860642112&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4860642112&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=4860642112" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>同じく <a href="http://www.amazon.co.jp/gp/product/B0081MAET6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0081MAET6&linkCode=as2&tag=armyofpigs-22">村上式シンプル英語勉強法</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B0081MAET6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> で紹介されていたので。第1章の実力診断テストで心を折られたけどめげずにちまちま進めている。</p>
<h3 id="wzxhzdk55oxford-picture-dictionary-english-japanesewzxhzdk56wzxhzdk57"><a href="http://www.amazon.co.jp/gp/product/0194740153/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=0194740153&linkCode=as2&tag=armyofpigs-22">Oxford Picture Dictionary: English/ Japanese</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=0194740153" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/0194740153/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=0194740153&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=0194740153&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=0194740153" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>さらに同じく <a href="http://www.amazon.co.jp/gp/product/B0081MAET6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B0081MAET6&linkCode=as2&tag=armyofpigs-22">村上式シンプル英語勉強法</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B0081MAET6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> で紹介されていた。
簡単すぎるかと思ったけど意外と知らない単語がある。コロケーションもあわせてでてるので結構よい。</p>
<h3 id="wzxhzdk65-wzxhzdk66wzxhzdk67"><a href="http://www.amazon.co.jp/gp/product/B00N4LSMB6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00N4LSMB6&linkCode=as2&tag=armyofpigs-22">葉と実でわかる 街路樹の呼び名事典</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00N4LSMB6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00N4LSMB6/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00N4LSMB6&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00N4LSMB6&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00N4LSMB6" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>植物についての理解を深めたいけど図鑑はもちあるきたくない。電子版の植物図鑑を探してたときにみつけた。読み物としては悪くないけど、この本だけで植物の同定ができるようにはあまりならない。</p>
<h3 id="wzxhzdk72-wzxhzdk73wzxhzdk74"><a href="http://www.amazon.co.jp/gp/product/B00JIQ2HOE/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00JIQ2HOE&linkCode=as2&tag=armyofpigs-22">本草図譜　十三 (ソニー・デジタル)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00JIQ2HOE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00JIQ2HOE/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00JIQ2HOE&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00JIQ2HOE&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00JIQ2HOE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>kindleで無料で見れる草図鑑シリーズ。暇潰しにはちょうどいい。</p>
<h3 id="wzxhzdk79-one21wzxhzdk80wzxhzdk81"><a href="http://www.amazon.co.jp/gp/product/B009GPMUGC/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B009GPMUGC&linkCode=as2&tag=armyofpigs-22">決断力 角川oneテーマ21</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B009GPMUGC" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B009GPMUGC/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B009GPMUGC&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B009GPMUGC&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B009GPMUGC" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>何かのときに羽生さんすごいと思ったので。編集者の意向なのかわからないが、ビジネスに関連した教訓じみた話にもっていこうとするのがちょっと鬱陶しい。それを除けば全体的におもしろかった。</p>
<h3 id="wzxhzdk86wzxhzdk87wzxhzdk88"><a href="http://www.amazon.co.jp/gp/product/B00799V39C/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00799V39C&linkCode=as2&tag=armyofpigs-22">道をひらく</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00799V39C" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00799V39C/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00799V39C&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00799V39C&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00799V39C" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>羽生さんの本を読み終わったときにkindleでレコメンドされて評価も高かったので読んでみた。良い話ばかりだが特に新しいことはなかった。</p>
<h3 id="wzxhzdk93-2-12wzxhzdk94wzxhzdk95"><a href="http://www.amazon.co.jp/gp/product/4000068520/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4000068520&linkCode=as2&tag=armyofpigs-22">計算統計 2 マルコフ連鎖モンテカルロ法とその周辺 (統計科学のフロンティア 12)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=4000068520" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/4000068520/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=4000068520&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4000068520&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=4000068520" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>MCMCについて理解を深めるため。<a href="http://www-fcs.acs.i.kyoto-u.ac.jp/~harada/monte.html">イジングモデルとか</a> 様々な分野での応用例が紹介されていておもしろい。</p>
<h3 id="wzxhzdk100-swiftwzxhzdk101wzxhzdk102"><a href="http://www.amazon.co.jp/gp/product/B00TO6KMBI/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00TO6KMBI&linkCode=as2&tag=armyofpigs-22">詳解 Swift</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00TO6KMBI" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00TO6KMBI/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00TO6KMBI&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00TO6KMBI&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00TO6KMBI" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>swiftを書く必要にせまられたので。知りたいところだけ拾い読みした。前から思っていたが、kindleは技術本を拾い読みするにはあまり向かない。</p>
<h3 id="wzxhzdk107wzxhzdk108wzxhzdk109"><a href="http://www.amazon.co.jp/gp/product/B00GRKD6XU/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00GRKD6XU&linkCode=as2&tag=armyofpigs-22">エリック・エヴァンスのドメイン駆動設計</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00GRKD6XU" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></h3>
<p><a href="http://www.amazon.co.jp/gp/product/B00GRKD6XU/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=B00GRKD6XU&linkCode=as2&tag=armyofpigs-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B00GRKD6XU&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=armyofpigs-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=armyofpigs-22&l=as2&o=9&a=B00GRKD6XU" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>買ったのは年末だけど最近になってまじめに読みはじめた。まだDDDを理解してない気がするのでノーコメント。</p>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>読んだというのは読了したという意味ではない&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
</ol>
</div>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[Phabricatorを使ったワークフローについて]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2015/03/02/phabricator-workflow/" />
    <id>http://mojavy.com/blog/2015/03/02/phabricator-workflow/</id>
    <updated>2015-03-02T20:55:43Z</updated>
    <published>2015-03-02T20:55:43Z</published>
    <category scheme="http://mojavy.com/blog" term="tools" />
    <category scheme="http://mojavy.com/blog" term="programming" />
    <category scheme="http://mojavy.com/blog" term="project management" />
    <summary type="html"><![CDATA[Phabricatorを使ったワークフローについて]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2015/03/02/phabricator-workflow/"><![CDATA[<p><img alt="phabricator" src="/images/phabricator-logo.png" /> </p>
<p>最近 <a href="http://phabricator.org/">Phabricator</a> を使ったワークフローを試しています。FacebookやDropboxをはじめとして海外では割と良く使われているようですが、あまり国内には情報がないようなのでまとめておきます。</p>
<h2 id="phabricator">Phabricatorでできること</h2>
<p>Phabricatorはコードレビューがメイン機能のようですが、それに留まらずソフトウェアの開発で必要なものがワンストップでまとまったプロジェクト管理ツールになっています。</p>
<p>メニューのネーミングが独特でとっつきづらいですが、主に以下のような機能があります。</p>
<ul>
<li><code>Differential</code>: pre push型のコードレビュー</li>
<li><code>Audit</code>: post push型のコードレビュー</li>
<li><code>Maniphest</code>: タスクとバグの管理</li>
<li><code>Diffusion</code>: リポジトリの管理</li>
<li><code>Harald</code>: commitやタスクの更新イベントにフックして起動する処理の管理</li>
<li><code>Phriction</code>: Wiki</li>
</ul>
<p>また、<a href="https://github.com/phacility/arcanist">arcanist</a> というコマンドラインから操作するためのツールも別途提供されており、開発のワークフローも含めた統合が意図されているようです。</p>
<h2 id="_1">セットアップ</h2>
<p>docker環境があるなら <code>docker run yesnault/docker-phabricator</code> ですぐ試せます。</p>
<p><a href="https://registry.hub.docker.com/u/yesnault/docker-phabricator/">https://registry.hub.docker.com/u/yesnault/docker-phabricator/</a> </p>
<p>ただし、上記dockerfileから構築したコンテナはデフォルトだとメールは外部に送信できない設定になっています。admin以外のユーザ登録ではメールアドレス認証が必要なので、<code>docker exec -it &lt;container_id&gt; bash</code> でコンテナに入ってメール設定を適宜修正して下さい。</p>
<p>dockerを使わずに普通にインストールする場合は <a href="https://secure.phabricator.com/book/phabricator/article/installation_guide/">https://secure.phabricator.com/book/phabricator/article/installation_guide/</a> を参照してください。</p>
<p>起動直後は色々設定を聞かれますが、特につまるようなところはないので省略します。</p>
<h2 id="phabricator_1">Phabricatorでのコードレビュー</h2>
<h3 id="pre-push-differential">pre-push型のコードレビュー (Differential)</h3>
<p>pre-push型のコードレビューは、フロー的にはGithubでのPull Requestに似ていますが、レビュー対象のcommitをpushするのではなく、パッチを送る点が異なります。Phabricatorでは以下のようなフローで作業することになります。</p>
<ol>
<li>コードを修正した人(author)は、レビュワー(reviewer)を指定して変更内容をDifferentialに登録する</li>
<li>reviewerは通知を受けてレビューをする</li>
<li>reviwerがacceptしたら、authorはupstreamにpushする</li>
</ol>
<p>diffをPhabricatorにコピペして登録することもできますが、基本的にはarcanist経由で作業することになります。</p>
<p>PhabricatorのUser Guideには<a href="https://secure.phabricator.com/book/phabricator/article/reviews_vs_audit/">Differentialの良さ</a> が長々と書かれてますが、実際のところ、長所として挙げられている項目はどれもPull Requestベースでも達成できます。
ただ、Defferentialとarcanistを使えば簡単にレビュー依頼が投げられるので、開発者が自発的に適切な粒度でレビュー依頼する助けにはなりそうです。</p>
<h3 id="post-push-audit">post-push型のコードレビュー (Audit)</h3>
<p>Differentialではレビューが完了するまでpushを待つ必要がありますが、Auditはレビューを待たずにpushしてその後にレビューを実施するための機能です。</p>
<p>例えば、急いでリリースする必要がある場合でも、Auditを用いてあとからレビューすることができます。このときに問題が見つかれば<code>Problem Commits</code>というフラグをたてておいてタスクに積む、というような使い方になるようです。</p>
<p><code>Harald</code>という機能を使えば特定の条件に合致するcommit(例えば変更が大きい、Differentialでレビューされていない、等)があった場合は自動的にAuditを生成させることもできます。</p>
<p>Auditをpull requestのように使うこともできますが、推奨はされていないようです。</p>
<h2 id="_2">所感</h2>
<p>もし開発管理のためにredmineやjiraをつかっているのであればPhabricatorは良い代替になりそうです。開発者向けに特化してる分、プロジェクトのタスクやバグ管理がソースコードとうまく統合されていて、ダッシュボードも柔軟にカスタマイズできます。githubのissueに不満を感じている人もPhabricatorのワークフローは試してみる価値があると思います。</p>
<p>レビューツール単体としてみると、(Differentialをつかうなら)開発者にarcanistの導入をしてもらう必要がある分、Pull Requestの手軽さに比べるとやや煩雑に感じました。既にPull Requestベースの開発が定着していて、単によりよいレビューツールを探しているのであれば<a href="https://code.google.com/p/gerrit/">Gerrit</a> 等のほうが導入しやすいかもしれません。</p>
<h2 id="_3">その他</h2>
<ul>
<li><a href="https://showoff.phab.io/">https://showoff.phab.io/</a> でデモPhabricatorが使えるので一通り試せます。</li>
<li>デフォルトではかなりの頻度でリポジトリに対してポーリングしに行きます。負荷をかけ過ぎないように注意が必要です。</li>
<li>Phabricator自体もそれなりの性能のマシンが必要です。環境によってはworker数を減らしたりmysqlのメモリサイズを調整しておく必要があります。</li>
</ul>
<h2 id="_4">参考</h2>
<ul>
<li><a href="https://secure.phabricator.com/book/phabricator/article/differential/">https://secure.phabricator.com/book/phabricator/article/differential/</a> </li>
<li><a href="https://secure.phabricator.com/book/phabricator/article/audit/">https://secure.phabricator.com/book/phabricator/article/audit/</a> </li>
<li><a href="https://secure.phabricator.com/book/phabricator/article/reviews_vs_audit/">https://secure.phabricator.com/book/phabricator/article/reviews_vs_audit/</a> </li>
</ul>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[dnsimpleでダイナミックDNSをつかう]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/12/23/dnsimple-dynamic-dns/" />
    <id>http://mojavy.com/blog/2014/12/23/dnsimple-dynamic-dns/</id>
    <updated>2014-12-23T20:02:30Z</updated>
    <published>2014-12-23T20:02:30Z</published>
    <category scheme="http://mojavy.com/blog" term="web" />
    <category scheme="http://mojavy.com/blog" term="dns" />
    <summary type="html"><![CDATA[dnsimpleでダイナミックDNSをつかう]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/12/23/dnsimple-dynamic-dns/"><![CDATA[<p><img alt="dnsimple" src="/images/dnsimple.png" /> </p>
<p><a href="https://dnsimple.com/r/4388f43fedebae">dnsimple</a> ではAPIからのDNSレコードアップデートができるので、簡単にダイナミックDNSがつかえる。 </p>
<p>手順は以下の通り。</p>
<ol>
<li>普通にdnsimpleでAレコードを登録する</li>
<li>登録したレコードのrecord idをしらべる。 record id は管理画面のURL <code>https://dnsimple.com/domains/example.com/records/&lt;record id&gt;/edit</code> をみればわかる。</li>
<li>レコードを更新するスクリプトをcronに登録する。 スクリプトは <a href="http://developer.dnsimple.com/ddns/">http://developer.dnsimple.com/ddns/</a> でダウンロードできる。 <code>RECORD_ID</code>には上記の値、<code>DOMAIN_ID</code>にはApexドメインを設定する。</li>
</ol>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[www2014のアドテク関連のResearch Trackメモ]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/10/06/www2014-adtech-research-trach/" />
    <id>http://mojavy.com/blog/2014/10/06/www2014-adtech-research-trach/</id>
    <updated>2014-10-06T21:05:33Z</updated>
    <published>2014-10-06T21:05:33Z</published>
    <category scheme="http://mojavy.com/blog" term="adtech" />
    <summary type="html"><![CDATA[www2014のアドテク関連のResearch Trackメモ]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/10/06/www2014-adtech-research-trach/"><![CDATA[<p><a href="http://www2014.kr/program/research-track/">www2014のResearch Track</a> に<code>Online Experiments &amp; Advertising</code>というのがあったので、概要だけメモ。</p>
<h2 id="adscape-harvesting-and-analyzing-online-display-ads"><a href="http://dl.acm.org/citation.cfm?id=2567992">Adscape: Harvesting and Analyzing Online Display Ads</a></h2>
<p>クローラを用いて広告データを収集することによって、現状のディスプレイ広告でどのようなターゲティングが行われているのかについてを分析している。
340通りのユーザプロファイルを用いて180件のウェブサイトをクロールし、17万5000件の広告を収集したとのこと。</p>
<p>プロファイルの内容によってどのカテゴリの広告が配信されやすいかとか、ウェブページあたりの広告主数の分布とか、実験結果は結構おもしろい。</p>
<h2 id="statistical-inference-in-two-stage-online-controlled-experiments-with-treatment-selection-and-validation"><a href="http://dl.acm.org/citation.cfm?id=2568028">Statistical Inference in Two-Stage Online Controlled Experiments with Treatment Selection and Validation</a></h2>
<p>より進んだA/Bテストの方法について。Bingのデータを用いているが、他の分野でも適用できる。
Bonferroni法やHolm法といった従来の多重比較における補正方法より実用的なものが紹介されている。</p>
<h2 id="an-experimental-evaluation-of-bidders-behavior-in-ad-auctions"><a href="http://dl.acm.org/citation.cfm?id=2568004">An Experimental Evaluation of Bidders’ Behavior in Ad Auctions</a></h2>
<p>実際に人間を使ってadwords的なオークションのゲームを行い、理論通りの挙動をするかを検証するというもの。
概ね期待通りの価格に近づくが、予想に反して平衡に逹しないという結果が得られたとのこと。</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[flappymacs がMELPAに登録されました]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/07/16/flappymacs-melpa/" />
    <id>http://mojavy.com/blog/2014/07/16/flappymacs-melpa/</id>
    <updated>2014-07-16T01:07:04Z</updated>
    <published>2014-07-16T01:07:04Z</published>
    <category scheme="http://mojavy.com/blog" term="game" />
    <category scheme="http://mojavy.com/blog" term="emacs" />
    <summary type="html"><![CDATA[flappymacs がMELPAに登録されました]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/07/16/flappymacs-melpa/"><![CDATA[<p><a href="http://mojavy.com/blog/2014/07/10/flappy-bird-for-emacs-flappymacs/">flappymacs</a> がMELPAに登録されました。</p>
<div class="pygments_borland"><pre>(add-to-list
 &#39;package-archives &#39;(&quot;melpa&quot; . &quot;http://melpa.milkbox.net/packages/&quot;) t)
</pre></div>

<p>を設定して、<code>M-x package-list-packages</code> からflappymacsを探してインストールするとすぐに遊べます。</p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[EmacsでFlappy Birdっぽいもの書きました]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/07/10/flappy-bird-for-emacs-flappymacs/" />
    <id>http://mojavy.com/blog/2014/07/10/flappy-bird-for-emacs-flappymacs/</id>
    <updated>2014-07-10T20:01:50Z</updated>
    <published>2014-07-10T20:01:50Z</published>
    <category scheme="http://mojavy.com/blog" term="game" />
    <category scheme="http://mojavy.com/blog" term="emacs" />
    <summary type="html"><![CDATA[EmacsでFlappy Birdっぽいもの書きました]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/07/10/flappy-bird-for-emacs-flappymacs/"><![CDATA[<p><a href="http://mattn.kaoriya.net/software/vim/20140709202034.htm">flappyvird</a> にインスパイアされて<a href="https://github.com/taksatou/flappymacs">Emacs版のFlappy Bird</a>書きました。</p>
<p><a href="https://github.com/taksatou/flappymacs">flappymacs</a> </p>
<p><img alt="flappymacs" src="https://raw.githubusercontent.com/taksatou/flappymacs/master/data/screenshot.png" /> </p>
<p><code>flappymacs.el</code>をロードして、<code>M-x flappymacs</code>で遊べます。</p>
<h4 id="20140716">2014/07/16 追記</h4>
<p><a href="http://mojavy.com/blog/2014/07/16/flappymacs-melpa/">MELPAに登録されました</a> </p>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[C++のdreaded diamondについて]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/07/09/cpp-dreaded-diamond/" />
    <id>http://mojavy.com/blog/2014/07/09/cpp-dreaded-diamond/</id>
    <updated>2014-07-09T21:56:32Z</updated>
    <published>2014-07-09T21:56:32Z</published>
    <category scheme="http://mojavy.com/blog" term="programming" />
    <category scheme="http://mojavy.com/blog" term="c++" />
    <summary type="html"><![CDATA[C++のdreaded diamondについて]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/07/09/cpp-dreaded-diamond/"><![CDATA[<p>以下のようなダイアモンド継承をしたときに発生する問題のことを<code>dreaded diamond</code>と呼ぶらしい。</p>
<div class="pygments_borland"><pre>    Base
    /  \
   D1  D2
    \  /
     D3
</pre></div>

<p>例えば以下のようなクラスではアップキャストをするときやBaseクラスのメンバにアクセスするときに曖昧性が生じる。</p>
<div class="pygments_borland"><pre><span class="k">class</span> <span class="nc">Base</span> <span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
    <span class="kt">int</span> <span class="n">data</span><span class="p">;</span>
    <span class="k">virtual</span> <span class="o">~</span><span class="n">Base</span><span class="p">()</span> <span class="p">{}</span>
<span class="p">};</span>

<span class="k">class</span> <span class="nc">D1</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Base</span> <span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
    <span class="k">virtual</span> <span class="o">~</span><span class="n">D1</span><span class="p">()</span> <span class="p">{}</span>
<span class="p">};</span>

<span class="k">class</span> <span class="nc">D2</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Base</span> <span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
    <span class="k">virtual</span> <span class="o">~</span><span class="n">D2</span><span class="p">()</span> <span class="p">{}</span>
<span class="p">};</span>

<span class="k">class</span> <span class="nc">D3</span> <span class="o">:</span> <span class="k">public</span> <span class="n">D1</span><span class="p">,</span> <span class="k">public</span> <span class="n">D2</span> <span class="p">{</span>
<span class="k">public</span><span class="o">:</span>
    <span class="k">virtual</span> <span class="o">~</span><span class="n">D3</span><span class="p">()</span> <span class="p">{}</span>
<span class="p">};</span>
</pre></div>

<p>以下のようなコードをコンパイルしようとしてもエラーになる。</p>
<div class="pygments_borland"><pre><span class="kt">void</span> <span class="n">f1</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">D3</span> <span class="n">d3</span><span class="p">;</span>
    <span class="n">Base</span> <span class="o">&amp;</span><span class="n">base</span> <span class="o">=</span> <span class="n">d3</span><span class="p">;</span>
    <span class="n">d3</span><span class="p">.</span><span class="n">data</span> <span class="o">=</span> <span class="mi">123</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>

<div class="pygments_borland"><pre>      ambiguous conversion from derived class &#39;D3&#39; to base class &#39;Base&#39;:
    class D3 -&gt; class D1 -&gt; class Base
    class D3 -&gt; class D2 -&gt; class Base
    Base &amp;base = d3;
                 ^~

      non-static member &#39;data&#39; found in multiple base-class subobjects of type &#39;Base&#39;:
    class D3 -&gt; class D1 -&gt; class Base
    class D3 -&gt; class D2 -&gt; class Base
    d3.data = 123;
       ^
</pre></div>

<p>これを回避するためには明示的に中継するクラスを指定してやる必要がある。</p>
<div class="pygments_borland"><pre><span class="kt">void</span> <span class="n">f2</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">D3</span> <span class="n">d3</span><span class="p">;</span>
    <span class="n">Base</span> <span class="o">&amp;</span><span class="n">base</span> <span class="o">=</span> <span class="k">dynamic_cast</span><span class="o">&lt;</span><span class="n">D1</span><span class="o">&amp;&gt;</span><span class="p">(</span><span class="n">d3</span><span class="p">);</span>
    <span class="n">d3</span><span class="p">.</span><span class="n">D1</span><span class="o">::</span><span class="n">data</span> <span class="o">=</span> <span class="mi">123</span><span class="p">;</span>
    <span class="n">d3</span><span class="p">.</span><span class="n">D2</span><span class="o">::</span><span class="n">data</span> <span class="o">=</span> <span class="mi">456</span><span class="p">;</span>

    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">d3</span><span class="p">.</span><span class="n">D1</span><span class="o">::</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="sc">&#39;,&#39;</span> <span class="o">&lt;&lt;</span> <span class="n">d3</span><span class="p">.</span><span class="n">D2</span><span class="o">::</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>  <span class="c1">// =&gt; 123,456</span>
<span class="p">}</span>
</pre></div>

<p>でも普通は継承元にそれぞれの別々の親を持つのではなく、共通の1つだけを持っていてほしい。
それを解決するには仮想継承を使う。</p>
<div class="pygments_borland"><pre><span class="k">class</span> <span class="nc">D1</span> <span class="o">:</span> <span class="k">public</span> <span class="k">virtual</span> <span class="n">Base</span> <span class="p">{</span> <span class="cm">/* 省略 */</span> <span class="p">};</span>
<span class="k">class</span> <span class="nc">D2</span> <span class="o">:</span> <span class="k">public</span> <span class="k">virtual</span> <span class="n">Base</span> <span class="p">{</span> <span class="cm">/* 省略 */</span> <span class="p">};</span>
<span class="k">class</span> <span class="nc">D3</span> <span class="o">:</span> <span class="k">public</span> <span class="n">D1</span><span class="p">,</span> <span class="k">public</span> <span class="n">D2</span> <span class="p">{</span> <span class="cm">/* 省略 */</span> <span class="p">};</span>
</pre></div>

<p>このようにすればBaseクラスのインスタンスは1つだけになって曖昧性が解消される。</p>
<div class="pygments_borland"><pre><span class="kt">void</span> <span class="n">f3</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">D3</span> <span class="n">d3</span><span class="p">;</span>
    <span class="n">Base</span> <span class="o">&amp;</span><span class="n">base</span> <span class="o">=</span> <span class="n">d3</span><span class="p">;</span>
    <span class="n">d3</span><span class="p">.</span><span class="n">data</span> <span class="o">=</span> <span class="mi">123</span><span class="p">;</span>

    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">d3</span><span class="p">.</span><span class="n">D1</span><span class="o">::</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="sc">&#39;,&#39;</span> <span class="o">&lt;&lt;</span> <span class="n">d3</span><span class="p">.</span><span class="n">D2</span><span class="o">::</span><span class="n">data</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>  <span class="c1">// =&gt; 123,123</span>
<span class="p">}</span>
</pre></div>]]></content>
  </entry>
  <entry>
    <author>
      <name></name>
      <uri>http://mojavy.com/blog</uri>
    </author>
    <title type="html"><![CDATA[pthreadの取り消しポイント(cancellation point)についてのメモ]]></title>
    <link rel="alternate" type="text/html" href="http://mojavy.com/blog/2014/03/18/pthread-cancellation-point/" />
    <id>http://mojavy.com/blog/2014/03/18/pthread-cancellation-point/</id>
    <updated>2014-03-18T21:41:12Z</updated>
    <published>2014-03-18T21:41:12Z</published>
    <category scheme="http://mojavy.com/blog" term="unix" />
    <category scheme="http://mojavy.com/blog" term="programming" />
    <summary type="html"><![CDATA[pthreadの取り消しポイント(cancellation point)についてのメモ]]></summary>
    <content type="html" xml:base="http://mojavy.com/blog/2014/03/18/pthread-cancellation-point/"><![CDATA[<p>cancellation pointsとは、スレッドのキャンセル種別が<code>deferred</code>のときに、そこに到達したときにはじめて実際にそのスレッドのキャンセル要求が処理されるような関数のこと。</p>
<p>POSIX.1では、基本的にはブロックするような関数がcancellation pointsであることが要求されている。</p>
<h2 id="_1">参考</h2>
<ul>
<li><a href="http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html">http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html</a> </li>
<li><a href="http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/pthread_cancel.3.html">pthread_cancel(3)</a> </li>
</ul>]]></content>
  </entry>
</feed>
