<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oddwit &#187; Whatnot</title>
	<atom:link href="http://oddwit.com/blog/category/whatnot/feed" rel="self" type="application/rss+xml" />
	<link>http://oddwit.com/blog</link>
	<description>Web, Dev, Etc</description>
	<lastBuildDate>Fri, 09 Mar 2012 04:29:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Bobby Mcferrin improvisation with Richard Bona</title>
		<link>http://oddwit.com/blog/2011/bobby-mcferrin-improvisation-with-richard-bona</link>
		<comments>http://oddwit.com/blog/2011/bobby-mcferrin-improvisation-with-richard-bona#comments</comments>
		<pubDate>Sun, 01 May 2011 16:07:34 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=728</guid>
		<description><![CDATA[Bobbyええわあ。]]></description>
			<content:encoded><![CDATA[<p>Bobbyええわあ。</p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/iimMKWF7SK0" frameborder="0" allowfullscreen></iframe></p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2011/bobby-mcferrin-improvisation-with-richard-bona/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objective-Cのretain/releaseことはじめ</title>
		<link>http://oddwit.com/blog/2010/beginners-memory-management-in-objc</link>
		<comments>http://oddwit.com/blog/2010/beginners-memory-management-in-objc#comments</comments>
		<pubDate>Mon, 18 Oct 2010 16:10:40 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[obj-c]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=561</guid>
		<description><![CDATA[iOSでの開発をするために最低限知っておくべきメモリ管理法です。 iOSにはガベージコレクションがありませんね。僕はJava/PHP/Ruby出身でGCに甘やかされてきたので、オブジェクトの開放を意識しながらプログラミン [...]]]></description>
			<content:encoded><![CDATA[<p>iOSでの開発をするために最低限知っておくべきメモリ管理法です。</p>
<p>iOSにはガベージコレクションがありませんね。僕はJava/PHP/Ruby出身でGCに甘やかされてきたので、オブジェクトの開放を意識しながらプログラミングしたのは今回が初めてでした。</p>
<p>iOS Reference Libraryのメモリ管理ドキュメントをさらっと読むと、「とにかく自分でretainしたオブジェクトは自分でreleaseしてね」という感じのことが書かれていますが、ちょっとそれだけではうまくいかないシーンが出てきます。</p>
<p>まず、<strong>releaseすべきなのはどういうオブジェクトか</strong>ですが、これは単純です。</p>
<ul>
<li>alloc、new、またはcopyが名前に含まれるメソッドを呼んで手に入れたオブジェクト</li>
<li>retainしたオブジェクト</li>
</ul>
<p>それ以外の場合はreleaseする必要はありません。たとえば</p>
<pre class="brush:objc">
// init系メソッドから入手したのでreleaseすべき
NSArray *pets = [[NSArray alloc] initWithObjects:@&quot;iguana&quot;, @&quot;prairie dog&quot;, nil];
// initでもnewでもcopyでもないし、retainもしていないので、releaseしなくてよい
NSArray *morePets = [NSArray arrayWithObjects:@&quot;christmas beetle&quot;, @&quot;chimp&quot;, nil];
</pre>
<p>releaseしなくてもよいってのは、正確には「releaseしてはいけない」ですね。自分が所持してないオブジェクトをreleaseすると参照カウントが想定より早く0に達してしまい、EXC_BAD_ACCESSの原因になります。</p>
<p>では逆に<strong>どういう時はreleaseしても大丈夫なのか</strong>という疑問が出てきます。特に、別のクラスのメソッドにオブジェクトを渡した直後にreleaseしてしまって大丈夫なのか？答えは「リファレンスを見ろ」です。メソッドによって扱いが違います。</p>
<p>例えばNSArrayのaddObject:メソッドは、渡されたオブジェクトをretainします。したがって渡したあとでreleaseしてしまって構いません。他にもUIViewのaddSubviewなども渡されたオブジェクトをretainしはります。反対に、同じくNSArrayのindexOfObject:メソッドは渡されたオブジェクトをretainしません。どのメソッドがretainしてどのメソッドがしないのかは、なんとなく雰囲気で分かりますね。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/beginners-memory-management-in-objc/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ruby-debugのちょっとだけ高度な使い方</title>
		<link>http://oddwit.com/blog/2010/advancedruby-debug</link>
		<comments>http://oddwit.com/blog/2010/advancedruby-debug#comments</comments>
		<pubDate>Fri, 25 Jun 2010 18:23:34 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby-debug]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=506</guid>
		<description><![CDATA[便利なコマンド ps オブジェクトが配列なら、ソートした上でカラム上に並べて見やすくしてくれます。 irb その場でirbに突入します。後述のautoevalをONにしてればあまり意味はないかも。 Debugger.se [...]]]></description>
			<content:encoded><![CDATA[<h2>便利なコマンド</h2>
<h3>ps</h3>
<p>オブジェクトが配列なら、ソートした上でカラム上に並べて見やすくしてくれます。<br />
<div id="attachment_508" class="wp-caption alignnone" style="width: 510px"><img class="size-full wp-image-508" title="rdebug-ps" src="http://oddwit.com/blog/wp-content/uploads/2010/06/rdebug-ps.png" alt="Using the ps command in ruby-debug" width="500" height="120" /><p class="wp-caption-text">Railsのメソッド一覧をpsしてみた</p></div></p>
<h3>irb</h3>
<p>その場でirbに突入します。後述のautoevalをONにしてればあまり意味はないかも。</p>
<h2>Debugger.settingsでオプション設定</h2>
<p><code>require 'ruby-debug'</code>したあとで<code>Debugger.settings[:key]=value</code>すると各種オプションを設定できます。<a href="http://bashdb.sourceforge.net/ruby-debug.html#SEC75">網羅的なリストはこちら</a>。特に便利なのは以下。</p>
<h3>:autoeval</h3>
<p>trueにすると、デバッガコマンドが見つからないときは自動的にevalを試してくれます。<code>*** Unknown command: "User.first.name".  Try "help".</code>がしばしば出てしまう僕にとっては必須。</p>
<p>ちなみにRailsでは、テストヘルパ（railties/lib/test_help.rb）でautoevalが設定されてます。</p>
<h3>:autolist</h3>
<p>trueにすると、デバッガに入ったときやステップ実行時などに自動的に<code>list</code>を実行して周辺コードを表示してくれます。</p>
<p>これもRailsのテストヘルパで設定されてます。</p>
<h3>:forcestep</h3>
<p>trueにすると、ステップ実行時に必ず別の行へ飛びます。<br />
Rubyは一行で色々書けるので、普通にステップすると同じ行内でステップすることもありますが、このオプションを使えば一行=１ステップになります。</p>
<p>参考：<br />
<a href="http://bashdb.sourceforge.net/ruby-debug.html#SEC_Top">Debugging with ruby-debug</a></p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/advancedruby-debug/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[未解決] JSのrequireで依存関係のロード完了を保証したい</title>
		<link>http://oddwit.com/blog/2010/%e6%9c%aa%e8%a7%a3%e6%b1%ba-js%e3%81%aerequire%e3%81%a7%e4%be%9d%e5%ad%98%e9%96%a2%e4%bf%82%e3%81%ae%e3%83%ad%e3%83%bc%e3%83%89%e5%ae%8c%e4%ba%86%e3%82%92%e4%bf%9d%e8%a8%bc%e3%81%97%e3%81%9f</link>
		<comments>http://oddwit.com/blog/2010/%e6%9c%aa%e8%a7%a3%e6%b1%ba-js%e3%81%aerequire%e3%81%a7%e4%be%9d%e5%ad%98%e9%96%a2%e4%bf%82%e3%81%ae%e3%83%ad%e3%83%bc%e3%83%89%e5%ae%8c%e4%ba%86%e3%82%92%e4%bf%9d%e8%a8%bc%e3%81%97%e3%81%9f#comments</comments>
		<pubDate>Mon, 07 Jun 2010 18:13:43 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[requirejs]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=488</guid>
		<description><![CDATA[RequireJSでこんなコードを書いてる。 page.html &#60;script&#62; require([&#34;libA&#34;], function(){ libA.foo(); }); &#60;/s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://requirejs.org/">RequireJS</a>でこんなコードを書いてる。</p>
<p>page.html</p>
<pre class="brush:html">
&lt;script&gt;
require([&quot;libA&quot;], function(){
  libA.foo();
});
&lt;/script&gt;
</pre>
<p>libA.js</p>
<pre class="brush:js">
// libB, libC, libD,...など不特定多数多数のライブラリに依存する
require([&quot;libB&quot;, &quot;libC&quot;, &quot;libD&quot;], function(){
  libA = {
    foo: function(){
      libB.something();
    }
  };
});
</pre>
<p>libB.js, libC.js, libD.js, libE.js&#8230;</p>
<pre class="brush:js">
libB = {
  // blah blah blah...
};
</pre>
<p>だがこのコードはほとんどうまく動くことがない（たまに上手くいく）。なぜなら、libAのrequireコールバックが呼ばれたときにまだlibB以降は使えない可能性が高いからだ。</p>
<p>普通ならHTML内のrequireで全部のライブラリを列挙すれば安全にロードできるのだが、ここではlibB以降のライブラリは場合によって必要なものと数が変わるからHTML内では列挙できない。</p>
<p>そこで、libB以降のライブラリの読み込みを保証してからHTML側の処理に入りたい。<br />
どういうやり方が賢いだろうか。</p>
<h2>こんな風に書けたらいいな</h2>
<p>page.html</p>
<pre class="brush:html">
&lt;script&gt;
require([&quot;libA&quot;], function(){
  function(){
    libA.foo();
  }
});
</pre>
<p>libA.js</p>
<pre class="brush:html">
libA = {};
require([&quot;libB&quot;, &quot;libC&quot;, &quot;libD&quot;], function(){
  libA = {
    // blah blah blah...
  };
  loaded(&quot;libA&quot;);
});
</pre>
<p>要はファイルが読み込まれただけじゃなく、初期化が完了して使える状態にあることをローダーに対して伝えたいわけだな。ちょっと実装してみる。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/%e6%9c%aa%e8%a7%a3%e6%b1%ba-js%e3%81%aerequire%e3%81%a7%e4%be%9d%e5%ad%98%e9%96%a2%e4%bf%82%e3%81%ae%e3%83%ad%e3%83%bc%e3%83%89%e5%ae%8c%e4%ba%86%e3%82%92%e4%bf%9d%e8%a8%bc%e3%81%97%e3%81%9f/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby-GetTextの三つのカッコ</title>
		<link>http://oddwit.com/blog/2010/ruby-gettext%e3%81%ae%e4%b8%89%e3%81%a4%e3%81%ae%e3%82%ab%e3%83%83%e3%82%b3</link>
		<comments>http://oddwit.com/blog/2010/ruby-gettext%e3%81%ae%e4%b8%89%e3%81%a4%e3%81%ae%e3%82%ab%e3%83%83%e3%82%b3#comments</comments>
		<pubDate>Sun, 06 Jun 2010 13:57:56 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=483</guid>
		<description><![CDATA[_("Message")はメッセージを翻訳する。 n_("Car", "Cars", 2)は複数形判別つきの翻訳。 N_("Message")は何もしない。poを作るときにメッセージIDを拾わせるときに使う。 参考：Ru [...]]]></description>
			<content:encoded><![CDATA[<p><code>_("Message")</code>はメッセージを翻訳する。<br />
<code>n_("Car", "Cars", 2)</code>は複数形判別つきの翻訳。<br />
<code>N_("Message")</code>は何もしない。poを作るときにメッセージIDを拾わせるときに使う。</p>
<p>参考：<a href="http://www.yotabanana.com/hiki/ruby-gettext-api.html#GetText.n_">Ruby-GetText-Package API Reference &#8211; YotaLab Storage</a></p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/ruby-gettext%e3%81%ae%e4%b8%89%e3%81%a4%e3%81%ae%e3%82%ab%e3%83%83%e3%82%b3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogit.vimからの投稿テスト</title>
		<link>http://oddwit.com/blog/2010/blogit-vim%e3%81%8b%e3%82%89%e3%81%ae%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88</link>
		<comments>http://oddwit.com/blog/2010/blogit-vim%e3%81%8b%e3%82%89%e3%81%ae%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:13:35 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=464</guid>
		<description><![CDATA[blogit.vimを入れてみたので投稿テステス。 追記追記。]]></description>
			<content:encoded><![CDATA[<p><a href="http://symlink.me/projects/blogit/wiki">blogit.vim</a>を入れてみたので投稿テステス。<br />
追記追記。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/blogit-vim%e3%81%8b%e3%82%89%e3%81%ae%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ウガンダでは多くの子どもが生贄として死んでいる</title>
		<link>http://oddwit.com/blog/2010/child-sacrifice-in-uganda</link>
		<comments>http://oddwit.com/blog/2010/child-sacrifice-in-uganda#comments</comments>
		<pubDate>Fri, 08 Jan 2010 01:31:09 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://oddwit.com/blog/?p=354</guid>
		<description><![CDATA[非常に衝撃的な記事を読んだので反射的にポスト。 ウガンダで子どもの生贄の現状が明らかに BBC News &#8211; Newsnight &#8211; Witch-doctors reveal extent of  [...]]]></description>
			<content:encoded><![CDATA[<p>非常に衝撃的な記事を読んだので反射的にポスト。</p>
<p>ウガンダで子どもの生贄の現状が明らかに<br />
<a href="http://news.bbc.co.uk/2/hi/programmes/newsnight/8441813.stm">BBC News &#8211; Newsnight &#8211; Witch-doctors reveal extent of child sacrifice in Uganda</a></p>
<p><img title="Family in Uganda" src="http://newsimg.bbc.co.uk/media/images/47053000/jpg/_47053121_p1010627.jpg" alt="" width="226" height="170" /></p>
<blockquote><p>A BBC investigation into human sacrifice in Uganda has heard first-hand accounts which suggest ritual killings of children may be more common than authorities have acknowledged.</p>
<p>[... A] former witch-doctor who now campaigns to end child sacrifice confessed for the first time to having murdered about 70 people, including his own son.</p>
<p>ウガンダではこれまで知られていた以上に多くの子ども達が生贄として殺されているらしいことが、BBCの調査により分かった。</p>
<p>現在は子供の人身供犠反対運動を行っている元ウィッチ・ドクターは、自分自身の子どもを含めこれまでにおよそ70人を殺害していることを明かした。
</p></blockquote>
<p>話はさらに現実味を増す。</p>
<blockquote><p>
&#8220;They capture other people&#8217;s children. They bring the heart and the blood directly here to take to the spirits… They bring them in small tins [...],&#8221; he said.</p>
<p>Asked how often clients brought blood and body parts, the witch-doctor said they came &#8220;on average three times a week &#8211; with all that the spirits demand from them.&#8221;</p>
<p>「患者たちは子どもをさらって、心臓などを小さな缶に入れて持ってきます。」<br />
[...]<br />
どれくらいの頻度で血液や臓物などが持ち込まれるのかとの質問には、「平均して週三回ほどです。持ち込まれるのは精霊が求めたもの全てです。」と答えた。
</p></blockquote>
<p>なんという…。生贄なんてインディ・ジョーンズの世界でしか知らなかっただけに、これはショッキングだ。そりゃあ世界のどこかでそんなことが起こってるらしい、ぐらいは想像できるが、こんな風に言われると「そんなに！？」と思ってしまう。</p>
<p>さらに記事内では、この証言者が反対運動で回っただけでも2400人の呪術師がいる事、全国レベルの呪術師連合があって末端の呪術師の儲けは連合の偉いさんに上納するシステムになっている事などが明かされている。</p>
<p>平均して週三回とはにわかには信じがたい数だ。2400人の呪術師に週イチで臓物が持ち込まれるとしても年間約12万人の子どもたちが体の一部を切り取られていて、おそらくその大部分が死んでいることになる。ほんまか。しかも2009年に警察で生贄殺人として調査したのがたったの26件だというから、警察などほとんど役に立っていないようだ。</p>
<p>呪術治療なりカウンセリングなどの料金は一回あたり260USDほどだというのも驚きだ。ウガンダの推定一人当たりGDP（2008）が1300USDだから、その比で日本円にすると60万円以上と滅茶苦茶に高い。それを吸い取る連合の後ろには大きなヤクザ組織のようなものがあるような気がする。</p>
<p>想像だが、患者は強制されて子どもを殺すわけではないんだろうな。効果があると信じてしまうんだろう。寝が深そうな問題だ。素人考えではやはり教育によって改善すべきことのような気がするが、どうなんだろうか。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2010/child-sacrifice-in-uganda/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Re: CodeIgniterが急激によくなってきた</title>
		<link>http://oddwit.com/blog/2009/re-coming-to-hate-codeigniter</link>
		<comments>http://oddwit.com/blog/2009/re-coming-to-hate-codeigniter#comments</comments>
		<pubDate>Thu, 22 Oct 2009 12:35:49 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.oddwit.com/blog/?p=259</guid>
		<description><![CDATA[僕が以前に書いたCodeIgniterに関する記事に対して、CodeIgniterが急激によくなってきた &#8211; なんたらノート 第二期というトラックバックをいただきました。 申し訳ないけど、このブログエントリの [...]]]></description>
			<content:encoded><![CDATA[<p>僕が以前に書いた<a href="http://www.oddwit.com/blog/2007/coming-to-hate-code-igniter">CodeIgniterに関する記事</a>に対して、<a href="http://d.hatena.ne.jp/tanakahisateru/20080924/1222190229">CodeIgniterが急激によくなってきた &#8211; なんたらノート 第二期</a>というトラックバックをいただきました。</p>
<blockquote><p>申し訳ないけど、このブログエントリの著者が学生さんだと知りつつ、きつく批判します。</p></blockquote>
<p>「なんたらノート」さんは、僕の狭い視点と一方的にCodeIgniterを酷評するスタンスをよくないと批判してくださっています。</p>
<p>僕の表現が至らないところがあって、大いに誤解を招くような記事を書いた事については反省しています。今更ながら元記事について補足しておきますが、<strong>僕はCodeIgniterに対してネガキャンを張りたかったわけではありません。</strong>あくまで自分の利用目的に合わない部分を書いただけです。</p>
<p>トラックバック元で指摘された各項目について反論を書こうかと思いましたが、おおむね好みや状況によるものなのでやめておきます。僕が指摘した点、向こうで指摘されている点は立場によっては両方正しかったり、どちらかが正しかったりするものだと思います。PHPを使うのもCodeIgniterを使うのも様々な目的とバックグラウンドがあってのことですから、僕が「使いにくい」と感じた点について「それは間違ってる」と指摘されても仕方がありません。</p>
<p>ですので、「きつく批判」される筋合いはないと今も感じてます。</p>
<p>最後に一言だけ。</p>
<blockquote><p>CIに限らず、他人の方法に自分が違和感を覚えるとき、単に「おかしい」とだけ考えて切り捨てていると真実を見逃す。おかしな仕様だと思えば思うほど、「なぜそうなったか」を考えることは重要。</p></blockquote>
<p>確かにその通りですね。批判したいと思ったらもう一歩、なぜそうなっているかを考えてみることは重要ですね。ただ、それだけだと例えばWindowsの使いにくさを批判することなど至難の業となってしまいますから、「自分ならこう作るのに！」という視点とは別に「自分にとっては使いにくい」という視点もありなんだろうとは思っています。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2009/re-coming-to-hate-codeigniter/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HostingRails.comに移転した</title>
		<link>http://oddwit.com/blog/2009/moved-to-hostingrailscom</link>
		<comments>http://oddwit.com/blog/2009/moved-to-hostingrailscom#comments</comments>
		<pubDate>Sat, 23 May 2009 02:48:28 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://shinyamaeyama.com/oddwit/blog/?p=202</guid>
		<description><![CDATA[Dreamhostの契約が間もなく切れるので、少し前に契約したhostingrails.comのアカウントへ移動しました。ついでにWordpressもアップグレード。UIがかなり変わって使いやすくなったように思います。  [...]]]></description>
			<content:encoded><![CDATA[<p>Dreamhostの契約が間もなく切れるので、少し前に契約したhostingrails.comのアカウントへ移動しました。ついでにWordpressもアップグレード。UIがかなり変わって使いやすくなったように思います。</p>
<p>もう一年くらいブログを書いていなかったのですが、今はプライベートな日記をつけているので、時間があればそこからピックアップして記事にしていくつもりです。</p>
<p>それと、<a href="http://www.oddwit.com/blog/2007/coming-to-hate-code-igniter">CodeIgniterが急激に嫌になってきた</a>という記事についてかなり真剣なコメントをもらっているのですが、今まで対処できずにいました。これからトラックバック元をしっかり読んで対応したいと思います。</p>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2009/moved-to-hostingrailscom/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>月例発表会向けのカブロボ考察 途中経過</title>
		<link>http://oddwit.com/blog/2008/first-kaburobo-outline-for-monthly</link>
		<comments>http://oddwit.com/blog/2008/first-kaburobo-outline-for-monthly#comments</comments>
		<pubDate>Fri, 09 May 2008 16:49:16 +0000</pubDate>
		<dc:creator>merikonjatta</dc:creator>
				<category><![CDATA[Whatnot]]></category>
		<category><![CDATA[kaburobo]]></category>
		<category><![CDATA[study]]></category>

		<guid isPermaLink="false">http://www.oddwit.com/blog/?p=104</guid>
		<description><![CDATA[月例発表会向けレジュメとスライドの第一版ができた。最近研究関連の事を書いてなかったので、ラフにではあるがいまのところのアウトラインをまとめておく。 タイトル：「カブロボグリッド実現方法の検討」 カブロボグリッドとは カブ [...]]]></description>
			<content:encoded><![CDATA[<p>月例発表会向けレジュメとスライドの第一版ができた。最近研究関連の事を書いてなかったので、ラフにではあるがいまのところのアウトラインをまとめておく。</p>
<p>タイトル：「カブロボグリッド実現方法の検討」</p>
<h2>カブロボグリッドとは</h2>
<p>カブロボは、自動株取引きプログラム。選択した売買アルゴリズムによって儲かったり儲からなかったりするため、良いアルゴリズムを発見することが大きな課題になる。</p>
<p>カブロボのアルゴリズムは売買ルールとパラメータで表現されるが、ルール同士を組み合わせることも可能なため、その数は膨大。グリッドの力でこれを片っ端から探索しようというのがカブロボグリッドだ。</p>
<p>だが、本当に片っ端からやるだけでは効率が良くない。そこで、より良いアルゴリズムをより短時間で見つけるために、行う仕事の選択と、クライアントへの仕事の割り振り方に関していくつかの方策を提案する。</p>
<h2>仕事の選択</h2>
<p>片っ端から試すより、良いアルゴリズムの周辺を重点的に試行するほうがおそらく効率が良い。さらに、たとえばユーザが希望した部分を優先的に試行するような仕組みが欲しい。</p>
<p>そこで、仕事の生成をオーディションラインとトレーニングラインの二つに分ける。</p>
<p>オーディションラインは、基本的にはユーザが指定した部分の仕事を生成する。</p>
<p>トレーニングラインは、オーディション出身で比較的性能が良かったアルゴリズムの周辺へ手を伸ばしていく。</p>
<p>加えて、トレーニングラインから確率的にジャンプを起こし、少しだけ離れた部分のアルゴリズムをオーディションさせる。これは焼きなまし法に似ている。</p>
<h2>仕事の割り振り方</h2>
<p>ま ず前提として、カブロボグリッドではエラー耐性のために同じ仕事を複数のクライアントに割り当てる。同じ仕事を4つのクライアントに振る、というのは「冗 長性」として自由に設定可能だ。また、このうち最低3つの結果が一致していればそれを正しい結果とみなす、というような設定が可能で、この値を「クオラ ム」と呼ぶ。</p>
<p>さて、いまのカブロボグリッドでは冗長性を一律で設定できるが、仕事ごとに設定できない。だが冗長性をその時々のクライアントたちの能力によって動的に変更することで無駄が減らせるはずだ。</p>
<p>そ こで、何通りか考えられる冗長性rに対して、期待値Erを定義する。これはEr = 1/(jr * lr) で表される。jrは冗長性rのときに一回でコンセンサスが得られない確率。lrはそのときに失われる時間。これらは仕事を受け取るクライアントの能力に よって決まる。常にこのErが最大になるようなrをその仕事の冗長性として設定することで、常にもっとも効率が良いと見込める冗長性設定が可能になる。</p>
<p>次 に、最低限必要でない仕事をどのクライアントに割り振るべきかを考える。これは、たとえば冗長性4、クオラム3の場合の4つ目の仕事だ。前の3つが同じ結 果で返って来たときにこの4つ目の仕事は無駄になるわけで、それを例えばものすごく能力の高いクライアントに渡してしまうのはもったいない。そのクライア ントは無駄にならない別の仕事をすべきだ。</p>
<p>そこで、ある仕事wuを受け取れるそれぞれのクライアントiについて、もったいなさMiを定義す る。これはMi = w/(j * ei) で表される。wは仕事wuの計算量、jは自分と同じ仕事をしているほかのクライアントたちがエラーを起こす確率、eiは自分自身がエラーを起こす確率。こ れらの値は同じ仕事をしているクライアントたちと、手の空いているクライアントたちの能力によって決まる。常にこのMiが最小になるようなクライアントi に仕事を振ることで、もっとも無駄のない割り振りが可能になる。</p>
<h2>これから考えるべきこと</h2>
<ul>
<li>「期待値」という言葉は厳密にはふさわしくないので、他の分かりやすい言葉を考える。</li>
<li>もったいなさの式にjが含まれていていいのか怪しい気がしてきたので、もう一度よく考える。</li>
<li>先着順でないということはクライアントを待たせるということ。これの意味と影響を考える。</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://oddwit.com/blog/2008/first-kaburobo-outline-for-monthly/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

