<?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>へびにっき &#187; 読書</title>
	<atom:link href="http://wp.serpere.info/archives/tag/%e8%aa%ad%e6%9b%b8/feed" rel="self" type="application/rss+xml" />
	<link>http://wp.serpere.info</link>
	<description>樹上で暮らすヘビのように生きたい</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:25:38 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Functionコンストラクタと関数式（function expression）の違いなど</title>
		<link>http://wp.serpere.info/archives/2022</link>
		<comments>http://wp.serpere.info/archives/2022#comments</comments>
		<pubDate>Thu, 06 Jan 2011 08:25:15 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=2022</guid>
		<description><![CDATA[JavaScript Patterns 2章ではevalの代替としてFunctionコンストラクタを使う方法が紹介されています。Functionコンストラクタは、普通にJavaScriptを書いている分にはなかなか使うことがないので、馴染みがない人も多いだろうと思います。そこで関数式との比較を中心に簡単にまとめておきます。 Functionコンストラクタは、関数オブジェクト（つまりJavaScriptにおける関数）を作るためのコンストラクタです。文字列をJavaScriptコードとして扱えるという点ではevalにも似ていますが、戻り値は普通の関数なので、その他の方法で作った関数と全く同じ使い方ができます。 var funcObj = new Function&#40;'x', 'y', 'console.log(x + y);'&#41;; &#160; //普通に呼び出す funcObj&#40;1,2&#41;; // 3 &#160; //コンストラクタとして使ってみる funcObj.prototype.hello = function&#40;&#41;&#123; console.log&#40;'World'&#41;; &#125;; &#40;new funcObj&#40;4,5&#41;&#41;.hello&#40;&#41;; // 'World' ちなみにコンストラクタではなく関数として呼び出した場合は、コンストラクタとして呼び出した場合と同じ結果になります（仕様上そう規定されています）。よって以下の2つは同じ意味になります。 var funcObj1 = Function&#40;'x', 'y', 'console.log(x + y);'&#41;, funcObj2 = new Function&#40;'x', 'y', 'console.log(x + y);'&#41;; この形、関数式にnew演算子を適用した場合と見た目が似ていますが、全く意味が違うということに注意してください。 // 関数式で関数を作る var funcObj = function&#40;&#41;&#123;&#125; &#160; // [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F2022%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FgOvhDy%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Function%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%81%A8%E9%96%A2%E6%95%B0%E5%BC%8F%EF%BC%88function%20expression%EF%BC%89%E3%81%AE%E9%81%95%E3%81%84%E3%81%AA%E3%81%A9%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596806752"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51mh1TB0n4L._SL160_.jpg" alt="" width="122" height="160" /></a></p>
<p><a href="http://www.amazon.co.jp/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596806752">JavaScript Patterns</a> 2章ではevalの代替としてFunctionコンストラクタを使う方法が紹介されています。Functionコンストラクタは、普通にJavaScriptを書いている分にはなかなか使うことがないので、馴染みがない人も多いだろうと思います。そこで関数式との比較を中心に簡単にまとめておきます。</p>
<p>Functionコンストラクタは、関数オブジェクト（つまりJavaScriptにおける関数）を作るためのコンストラクタです。文字列をJavaScriptコードとして扱えるという点ではevalにも似ていますが、戻り値は普通の関数なので、その他の方法で作った関数と全く同じ使い方ができます。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> funcObj <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'x'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'y'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'console.log(x + y);'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//普通に呼び出す</span>
funcObj<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 3</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//コンストラクタとして使ってみる</span>
funcObj.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">hello</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'World'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> funcObj<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">4</span><span style="color: #339933;">,</span><span style="color: #CC0000;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hello</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 'World'</span></pre></div></div>



<p>ちなみにコンストラクタではなく関数として呼び出した場合は、コンストラクタとして呼び出した場合と同じ結果になります（仕様上そう規定されています）。よって以下の2つは同じ意味になります。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> funcObj1 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'x'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'y'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'console.log(x + y);'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    funcObj2 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'x'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'y'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'console.log(x + y);'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>



<p>この形、関数式にnew演算子を適用した場合と見た目が似ていますが、全く意味が違うということに注意してください。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// 関数式で関数を作る</span>
<span style="color: #003366; font-weight: bold;">var</span> funcObj <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// 関数式で作った関数をコンストラクタとして呼び出す</span>
<span style="color: #003366; font-weight: bold;">var</span> newlyCreatedObject <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>



<h3>varの解釈について</h3>
<p>Functionコンストラクタで作った関数においても、関数本体の中でvarステートメントを使って宣言した変数はローカル変数になります。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span>
    func1 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'var b = 200; return b;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    func2 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #003366; font-weight: bold;">var</span> c <span style="color: #339933;">=</span> <span style="color: #CC0000;">300</span><span style="color: #339933;">;</span> <span style="color: #000066; font-weight: bold;">return</span> c<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 100</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>func1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 200</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>func2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 300</span>
&nbsp;
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//undefined</span>
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//undefined</span></pre></div></div>



<p>変数の生成（instantiation）は<strong>関数が呼び出されたときに実行される</strong>プロセスなので、どのような方法で作った関数でも同じです。</p>
<h3>スコープについて</h3>
<p>関数式で作った関数は、関数式の外側のローカル変数を参照できます。しかしFunctionコンストラクタで作った関数はグローバル変数しか参照することができません。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//JavaScript Patterns Chapter2の例の改変</span>
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> local <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> local <span style="color: #339933;">=</span> <span style="color: #CC0000;">3</span><span style="color: #339933;">;</span> console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>local<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 3</span>
    console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>local<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 3</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> local <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;console.log(typeof local)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//undefined</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>



<p>言い換えると、関数式で作った関数オブジェクトが「関数式が評価された時点でのスコープの状態」を保持しているのに対し、Functionコンストラクタで作った関数オブジェクトは常にグローバルなスコープしか保持していません。なぜこの差が生じるかというと、単に仕様でそう決まっているからです。関数に保持されるスコープは<strong>関数が作られたときに決定される</strong>ので、関数をどこでどのように作ったかによって結果が変わるということです。そして一度作られたあとは変更されることはありません。</p>
<p>この理屈によって、関数式ではクロージャを作ることができるが、Functionコンストラクタでは作ることができない、ということになります。</p>
<p>全くの余談ですが、クロージャが&#8221;閉じる&#8221;のは、スコープチェーンに組み込まれたActivation Objectがプログラマからは操作不可能だから、という事情によります。よってその他のオブジェクトをスコープチェーンに組み込んでやれば、クロージャと似ているが&#8221;開いた&#8221;関数を作り出すこともできます（役に立つかどうかは不明ですが）。</p>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> func<span style="color: #339933;">,</span>
    scope <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">alert</span><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//スコープチェーンの中にオブジェクトを組み込む</span>
<span style="color: #000066; font-weight: bold;">with</span><span style="color: #009900;">&#40;</span>scope<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    func <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>x <span style="color: #339933;">+</span> y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//グローバルのalertは隠蔽されてconsole.logが実行される</span>
func<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//scopeのプロパティを削除することでグローバルなalertが実行されるようになる</span>
<span style="color: #000066; font-weight: bold;">delete</span> scope.<span style="color: #000066;">alert</span><span style="color: #339933;">;</span>
func<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">3</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//再びalertを隠蔽する</span>
scope.<span style="color: #000066;">alert</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
func<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">6</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>



<p>ECMAScript5の用語で言うと、Declarative Environment Recordに関数外部から束縛を追加したり削除したりはできないが、Object Environment Recordならbinding objectを通してそれが可能だということです。</p>
<h3>参照</h3>
<p>仕様書の中で関連する部分は多岐にわたるため、一部のみを挙げておきます。</p>
<ul>
	<li>15.3 Function Objects &#8211; Standard ECMA-262 3rd/5th</li>
	<li>13 Function Definition &#8211; Standard ECMA-262 3rd/5th</li>
</ul>
<p>またこの記事はazuさんのJavaScript Patterns読書記録を踏まえて書かれました。</p>
<ul>
	<li><a href="http://efcl.info/adiary/JavaScriptPatterns/Chapter2Essentials">Chapter 2. Essentials &#8211; prog*sig</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/2022/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>『Webを支える技術』のER図が変な件</title>
		<link>http://wp.serpere.info/archives/1214</link>
		<comments>http://wp.serpere.info/archives/1214#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:06:05 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1214</guid>
		<description><![CDATA[Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ) すごく良い本なんですが、どうしても気になってしまったので、この部分だけ先に書きます。297ページ、17.2『関係モデルからの導出』で示されている郵便番号の関係モデルは変だと思います。ER図は次のようになっています： これのどこが変かというと……要するに正規化が不十分なので、いろいろなところが変です。 郵便番号エンティティが都道府県エンティティと市区町村エンティティを別々に参照しているので、「東京都のIDと大阪市のIDをもつ郵便番号」のようなものが作れてしまいます。 市区町村エンティティが都道府県エンティティに依存していないので、「どの都道府県にも属さない市区町村」が作れてしまいます。 町域エンティティが郵便番号エンティティに入り込んでいます（町域名フリガナは町域名に関数従属する） 町域と都道府県-市区町村の関係が保証されていないので、「東京都のIDと大阪市のIDと愛知県の町域名」みたいなものが作れてしまいます。 実装のことはさておき、純粋にデータの数的な関係に着目するなら、モデルは次のようになるのではないかと思います。 （モデルの”意味”を明確に示すために、あえて数値のIDではなく都道府県名や郵便番号などをそのままPRIMARY KEYとしています。また町域と郵便番号の関係などは日本郵便のサイトを参考にしています） 『Webを支える技術』300ページでは「階層構造は関係モデルからはわかりにくい」とありますが、それは誤解だと思います。普通は正規化を進めれば進めるほどエンティティの階層は深くなっていくはずです。市区町村->町域という階層も上のモデルからは自明です。むしろいかに階層を（正規化を）崩してリソースを抽出するかのほうが難しいと思います。 私はモデリングの専門家ではありませんので、勘違いしている点があったら教えてください。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1214%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fd2k9Vg%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%80%8EWeb%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93%E3%80%8F%E3%81%AEER%E5%9B%B3%E3%81%8C%E5%A4%89%E3%81%AA%E4%BB%B6%22%20%7D);"></div>
<p>
<a href="http://www.amazon.co.jp/Web%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-HTTP%E3%80%81URI%E3%80%81HTML%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6REST-WEB-DB-PRESS%E3%83%97%E3%83%A9%E3%82%B9%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774142042%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774142042">Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ)</a>
</p>
<p>
すごく良い本なんですが、どうしても気になってしまったので、この部分だけ先に書きます。297ページ、17.2『関係モデルからの導出』で示されている郵便番号の関係モデルは変だと思います。ER図は次のようになっています：
</p>
<div id="attachment_1216" class="wp-caption aligncenter" style="width: 310px"><a href="http://wp.serpere.info/wp-content/uploads/2010/04/Webtechbook_ERD_orig.png"><img src="http://wp.serpere.info/wp-content/uploads/2010/04/Webtechbook_ERD_orig-300x143.png" alt="" title="Webtechbook_ERD_orig" width="300" height="143" class="size-medium wp-image-1216" /></a><p class="wp-caption-text">「郵便番号データのER図」、『Webを支える技術』298ページより</p></div>
<p>
これのどこが変かというと……要するに正規化が不十分なので、いろいろなところが変です。
</p>
<ul>
<li>郵便番号エンティティが都道府県エンティティと市区町村エンティティを別々に参照しているので、「東京都のIDと大阪市のIDをもつ郵便番号」のようなものが作れてしまいます。</li>
<li>市区町村エンティティが都道府県エンティティに依存していないので、「どの都道府県にも属さない市区町村」が作れてしまいます。</li>
<li>町域エンティティが郵便番号エンティティに入り込んでいます（町域名フリガナは町域名に関数従属する）
<ul><li>町域と都道府県-市区町村の関係が保証されていないので、「東京都のIDと大阪市のIDと愛知県の町域名」みたいなものが作れてしまいます。</li></ul>
</ul>
<p>
実装のことはさておき、純粋にデータの数的な関係に着目するなら、モデルは次のようになるのではないかと思います。
</p>
<div id="attachment_1218" class="wp-caption aligncenter" style="width: 310px"><a href="http://wp.serpere.info/wp-content/uploads/2010/04/Webtechbook_ERD.png"><img src="http://wp.serpere.info/wp-content/uploads/2010/04/Webtechbook_ERD-300x294.png" alt="" title="Webtechbook_ERD" width="300" height="294" class="size-medium wp-image-1218" /></a><p class="wp-caption-text">郵便番号データのER図・作図例</p></div>
<p>（モデルの”意味”を明確に示すために、あえて数値のIDではなく都道府県名や郵便番号などをそのままPRIMARY KEYとしています。また町域と郵便番号の関係などは<a href="http://www.post.japanpost.jp/zipcode/dl/readme.html">日本郵便のサイト</a>を参考にしています）</p>
<p>
『Webを支える技術』300ページでは「階層構造は関係モデルからはわかりにくい」とありますが、それは誤解だと思います。普通は正規化を進めれば進めるほどエンティティの階層は深くなっていくはずです。市区町村->町域という階層も上のモデルからは自明です。むしろいかに階層を（正規化を）崩してリソースを抽出するかのほうが難しいと思います。
</p>
<p>
私はモデリングの専門家ではありませんので、勘違いしている点があったら教えてください。
</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1214/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>まぐれ—投資家はなぜ、運を実力と勘違いするのか</title>
		<link>http://wp.serpere.info/archives/1205</link>
		<comments>http://wp.serpere.info/archives/1205#comments</comments>
		<pubDate>Wed, 28 Apr 2010 11:50:32 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[読書]]></category>
		<category><![CDATA[経済学]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1205</guid>
		<description><![CDATA[『まぐれ―投資家はなぜ、運を実力と勘違いするのか』の感想。 著者は『ブラック・スワン』のナシーム・ニコラス・タレブ氏。この本は『ブラック・スワン』の一つ前にあたる著作。 日本語の副題「投資家はなぜ、運を実力と勘違いするのか」が的確に内容を要約している。哲学やら社会学やら心理学やら、かなり幅広い話題を扱っているが、結局のところ「市場においてトレーダーはどう振る舞うべきか」というテーマが中心にあって、トレーダーとしての自身の経験と運用哲学が根底にある。非合理的な振る舞いを繰り返す同僚たちをバカだアホだとこき下ろしながらも、実はその一部は自分自身のことで、人間はどうやっても合理的になりきれないと告白する。自分が愚かであることを理解し、受け入れた上で、うまく向き合っていく方法を身につけるしかないのだと。 この本は著者がそういう自分のやり方に、自分で納得するために書いているのではないか、と思える部分がある。結構ドギツイ文章を書く人で、読んでいてうんざりしてしまうことも多かったが（特に前半）、実際はとても正直な人なのだろう。 以下、特に印象に残った内容を6章以降から。この本は6章から俄然面白くなるので、6章までは頑張って読み進めることをお勧めする。 「確率」と「期待値」を混同してはいけない。0.7の確率で1%の上昇、0.3の確率で10%下落なら、期待値は2.3%の下落だから下落にかけた方が良い。勝つ可能性が高くても、それで儲かるとは限らない。 確率と期待値を混同してしまう原因の一つは、確率を習うときにコインの裏表のような対称な分布を使うから。正規分布も典型的に対称な分布。 稀な事象は、めったに起こらないというだけで、起こるときには起こる。そしていつも思いがけないときに起こるので（そうでなければ稀な事象ではない）、起こったときには心理的なバイアスによって適正な値段がつかないことが多い。よって大きく儲けるチャンスがある。 人間は刺激の大きさよりも刺激の有無に敏感な傾向がある。だからトータルで利益が出るかどうかではなく、「損失の回数が少なく、利益の回数が多い」ような戦略を選んでしまう（日本で毎月分配型の投資信託が好まれる理由？） ある理論が「検証可能」であるということは、数量的な要素に分解して統計的に調べることができるということ。よって間違っていると証明すること（反証）はできるが、正しいと証明することはできない。「（今まで）〜ということはなかった」は「（これからも）〜ことはない」とイコールではない。 科学的と言える理論は2種類しかない。(1).反証されて、間違いであることが分かっている理論。(2).まだ反証されていないが、いずれ反証される可能性のある理論。反証できない理論は科学ではない。 取引戦略を立てる時も反証可能性について考えることは重要。どういう状況になったら自分の戦略が間違っていたことになるのかをはっきりさせておき、そうなったときには即座に手仕舞う（ストップロス）。 そして個人的にこの本の中で最も面白いと思ったのは、無限匹のサルがタイプライタを叩く話（170ページ）。サルが無限匹いれば、中には偶然に名作を書き上げてしまう奴が必ず一匹は現れる。ここまでは割とよく聞く例え話だ。しかしここからが面白い：名作を書き上げたその一匹があなたのもとを訪れて、自分で書き上げたその「過去の実績」を示し、パトロンになってくれと頼んできたらどうだろう！そのサルがその名作を書き上げたのは紛れもない事実なのだ。そしてその他大勢のサルたちは皆（特に目立った成果を挙げられなかったのだから当然）どこかに行ってしまった。あなたの目の前にいるのは”奇跡のサル”だけだ……。 どんなに無能な集団でも、母集団が十分大きければ、必ず一定数は成功する。成功しなかった大多数は消えてしまうので、あとから見ると成功した一部しか目に入らない（これを生存バイアスという）。よって「過去にどれだけの実績を上げてきたか」が分かっても意味がない。当初その人が属していた母集団の大きさをこそ知らなければいけない。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1205%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbXIwN2%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%81%BE%E3%81%90%E3%82%8C%E2%80%94%E6%8A%95%E8%B3%87%E5%AE%B6%E3%81%AF%E3%81%AA%E3%81%9C%E3%80%81%E9%81%8B%E3%82%92%E5%AE%9F%E5%8A%9B%E3%81%A8%E5%8B%98%E9%81%95%E3%81%84%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%81%90%E3%82%8C%E2%80%95%E6%8A%95%E8%B3%87%E5%AE%B6%E3%81%AF%E3%81%AA%E3%81%9C%E3%80%81%E9%81%8B%E3%82%92%E5%AE%9F%E5%8A%9B%E3%81%A8%E5%8B%98%E9%81%95%E3%81%84%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B-%E3%83%8A%E3%82%B7%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%8B%E3%82%B3%E3%83%A9%E3%82%B9%E3%83%BB%E3%82%BF%E3%83%AC%E3%83%96/dp/4478001227%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4478001227"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/41ILU%2BKItVL._SL75_.jpg" alt="" /></a></p>
<p>『<a href="http://www.amazon.co.jp/%E3%81%BE%E3%81%90%E3%82%8C%E2%80%95%E6%8A%95%E8%B3%87%E5%AE%B6%E3%81%AF%E3%81%AA%E3%81%9C%E3%80%81%E9%81%8B%E3%82%92%E5%AE%9F%E5%8A%9B%E3%81%A8%E5%8B%98%E9%81%95%E3%81%84%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8B-%E3%83%8A%E3%82%B7%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%8B%E3%82%B3%E3%83%A9%E3%82%B9%E3%83%BB%E3%82%BF%E3%83%AC%E3%83%96/dp/4478001227%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4478001227">まぐれ―投資家はなぜ、運を実力と勘違いするのか</a>』の感想。</p>
<p>著者は『<a href="http://www.amazon.co.jp/%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%E3%83%BB%E3%82%B9%E3%83%AF%E3%83%B3-%E4%B8%8A-%E2%80%95%E4%B8%8D%E7%A2%BA%E5%AE%9F%E6%80%A7%E3%81%A8%E3%83%AA%E3%82%B9%E3%82%AF%E3%81%AE%E6%9C%AC%E8%B3%AA-%E3%83%8A%E3%82%B7%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%8B%E3%82%B3%E3%83%A9%E3%82%B9%E3%83%BB%E3%82%BF%E3%83%AC%E3%83%96/dp/4478001251%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4478001251">ブラック・スワン</a>』のナシーム・ニコラス・タレブ氏。この本は『ブラック・スワン』の一つ前にあたる著作。</p>
<p>日本語の副題「投資家はなぜ、運を実力と勘違いするのか」が的確に内容を要約している。哲学やら社会学やら心理学やら、かなり幅広い話題を扱っているが、結局のところ「市場においてトレーダーはどう振る舞うべきか」というテーマが中心にあって、トレーダーとしての自身の経験と運用哲学が根底にある。非合理的な振る舞いを繰り返す同僚たちをバカだアホだとこき下ろしながらも、実はその一部は自分自身のことで、人間はどうやっても合理的になりきれないと告白する。自分が愚かであることを理解し、受け入れた上で、うまく向き合っていく方法を身につけるしかないのだと。</p>
<p>この本は著者がそういう自分のやり方に、自分で納得するために書いているのではないか、と思える部分がある。結構ドギツイ文章を書く人で、読んでいてうんざりしてしまうことも多かったが（特に前半）、実際はとても正直な人なのだろう。</p>
<p>以下、特に印象に残った内容を6章以降から。この本は6章から俄然面白くなるので、6章までは頑張って読み進めることをお勧めする。</p>
<ul>
	<li>「確率」と「期待値」を混同してはいけない。0.7の確率で1%の上昇、0.3の確率で10%下落なら、期待値は2.3%の下落だから下落にかけた方が良い。勝つ可能性が高くても、それで儲かるとは限らない。</li>
	<li>確率と期待値を混同してしまう原因の一つは、確率を習うときにコインの裏表のような対称な分布を使うから。正規分布も典型的に対称な分布。</li>
	<li>稀な事象は、めったに起こらないというだけで、起こるときには起こる。そしていつも思いがけないときに起こるので（そうでなければ稀な事象ではない）、起こったときには心理的なバイアスによって適正な値段がつかないことが多い。よって大きく儲けるチャンスがある。</li>
	<li>人間は刺激の大きさよりも刺激の有無に敏感な傾向がある。だからトータルで利益が出るかどうかではなく、「損失の回数が少なく、利益の回数が多い」ような戦略を選んでしまう（日本で毎月分配型の投資信託が好まれる理由？）</li>
	<li>ある理論が「検証可能」であるということは、数量的な要素に分解して統計的に調べることができるということ。よって間違っていると証明すること（反証）はできるが、正しいと証明することはできない。「（今まで）〜ということはなかった」は「（これからも）〜ことはない」とイコールではない。</li>
	<li>科学的と言える理論は2種類しかない。(1).反証されて、間違いであることが分かっている理論。(2).まだ反証されていないが、いずれ反証される可能性のある理論。反証できない理論は科学ではない。</li>
	<li>取引戦略を立てる時も反証可能性について考えることは重要。どういう状況になったら自分の戦略が間違っていたことになるのかをはっきりさせておき、そうなったときには即座に手仕舞う（ストップロス）。</li>
</ul>
<p>そして個人的にこの本の中で最も面白いと思ったのは、無限匹のサルがタイプライタを叩く話（170ページ）。サルが無限匹いれば、中には偶然に名作を書き上げてしまう奴が必ず一匹は現れる。ここまでは割とよく聞く例え話だ。しかしここからが面白い：名作を書き上げたその一匹があなたのもとを訪れて、自分で書き上げたその「過去の実績」を示し、パトロンになってくれと頼んできたらどうだろう！そのサルがその名作を書き上げたのは紛れもない事実なのだ。そしてその他大勢のサルたちは皆（特に目立った成果を挙げられなかったのだから当然）どこかに行ってしまった。あなたの目の前にいるのは”奇跡のサル”だけだ……。</p>
<p>どんなに無能な集団でも、母集団が十分大きければ、必ず一定数は成功する。成功しなかった大多数は消えてしまうので、あとから見ると成功した一部しか目に入らない（これを生存バイアスという）。よって「過去にどれだけの実績を上げてきたか」が分かっても意味がない。当初その人が属していた母集団の大きさをこそ知らなければいけない。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1205/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ヤバい経済学 [増補改訂版]</title>
		<link>http://wp.serpere.info/archives/1176</link>
		<comments>http://wp.serpere.info/archives/1176#comments</comments>
		<pubDate>Fri, 16 Apr 2010 15:05:53 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[読書]]></category>
		<category><![CDATA[経済学]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1176</guid>
		<description><![CDATA[ヤバい経済学 [増補改訂版]の感想。 科学としての経済学 経済学は計測の学問だと言う。それは経済学が”科学”であるための方法なのだろうと思う。 自然科学において仮説を検証するには実験を行う。狙った現象が観測可能になるようなうまい状況を整えて、仮説に整合的な結果が生じるかどうか調べる。しかし経済学の対象は現実そのものなので、仮説を検証するための実験を行うことは難しい。代わりに現実の中で得られた膨大なデータに統計学的な分析を加えて、ある現象の原因と結果がうまい具合に立ち現れるよう工夫する。 そういう意味で、経済学におけるあらゆる種類の実験は、あらゆる条件下で常時行われていると言えるかもしれない。 インセンティブは発明されたものである インセンティブとは「発明」されるものだと言う。もっと稼ぎたいからがんばって働く、警察に捕まるのが怖いから不正はしない。現代社会では当然のことと考えてしまいがちだが、これらは普遍的な原理でも何でもなく、そういう風に行動するようにインセンティブが設計されているのだ。ここで私はおれカネゴンさんの日記の次の箇所を思い出した： ところで、「よいことをするとよい報いがある」「悪いことをするとそれなりの報いがある」という因果は、実はまったくの非合理的な信念 (irrational belief)で、この因果は合理的なのだ(筋が通っている)とすべての人によって信じられているということ以外にこれを支える根拠は本来どこにもなかったりする。かといって、論理療法とかを真似て、にわかハッカーのように「これは非合理的です」と斬って捨てたままにしていいことにはならない。というのは、人類は数千年かけて、本来は非合理的であるはずのこの信念が本当になるように全力を尽くしてきたからで、その最たるものが法律なのだと思う。 法律はインセンティブを導入するための強力な手段の一つだ。そして経済学者は、インセンティブを発明したり設計したり導入したりすることで、あらゆる問題は解決できると考える（らしい）。 『割れ窓理論』という通念 150ページからは有名な「割れ窓理論」をもとにしたニューヨーク市の防犯対策と、実はそれは全く効果がなかったという著者の主張が述べられている。主張の根拠は次の3点にまとめられる： 犯罪の急減はニューヨーク市にけではなく、全米で起こっていた。 対策が始まったのは1994年からだが、1990年には既に減少が始まっていた。 対策の内容とは無関係に、警官が増員されていた（警官が増えれば犯罪が減ることは証明できる）。 これだけの証拠があったのに、なぜ割れ窓理論に元づく説明が広く世間に受け入れられ、「通念（conventional wisdom）」となったのか。『通念は、単純で都合がよくて居心地良さそうで、実際居心地がよくなければならない』と著者は言う。確かに、割れ窓理論が提示する筋書きは心地よい。身近なところで起こる軽微な犯罪を徹底的に取り除いていけば、やがて街から犯罪の臭いが消え、殺人や強盗といった重大な犯罪も減少する……。警察が、街のみんなが頑張ったから犯罪は減ったのだ！というのは、ぜひとも信じたくなる考え方だ。 &#8230; 「銃とプール、危ないのはどちらか」、「ヤクの売人はなぜママと住んでいるのか」、「黒人と白人の成績格差は何が原因か」といった本書の話題の多くは、基本的に米国人の通念を前提としており、日本人が読んでも「ふーん」という以上の感想を持つのは難しい。例えばアメリカでは近年、子供に変な名前をつける親が増えているらしい。日本でも同じような話は聞く。しかしそこから親の傾向とか子供の成績との相関を調べたら、アメリカとは全く別の結論になるのではないかという気がする。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1176%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FaUL0R1%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%83%A4%E3%83%90%E3%81%84%E7%B5%8C%E6%B8%88%E5%AD%A6%20%5B%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88%5D%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/%E3%83%A4%E3%83%90%E3%81%84%E7%B5%8C%E6%B8%88%E5%AD%A6-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%B4%E3%83%B3%E3%83%BBD%E3%83%BB%E3%83%AC%E3%83%B4%E3%82%A3%E3%83%83%E3%83%88-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%B4%E3%83%B3%E3%83%BBJ%E3%83%BB%E3%83%80%E3%83%96%E3%83%8A%E3%83%BC/dp/4492313788%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4492313788"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/41C-VhgG8CL._SL75_.jpg" alt="" /></a><a href="http://www.amazon.co.jp/%E3%83%A4%E3%83%90%E3%81%84%E7%B5%8C%E6%B8%88%E5%AD%A6-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%B4%E3%83%B3%E3%83%BBD%E3%83%BB%E3%83%AC%E3%83%B4%E3%82%A3%E3%83%83%E3%83%88-%E3%82%B9%E3%83%86%E3%82%A3%E3%83%BC%E3%83%B4%E3%83%B3%E3%83%BBJ%E3%83%BB%E3%83%80%E3%83%96%E3%83%8A%E3%83%BC/dp/4492313788%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4492313788">ヤバい経済学 [増補改訂版]</a>の感想。</p>
<h3>科学としての経済学</h3>
<p>経済学は計測の学問だと言う。それは経済学が”科学”であるための方法なのだろうと思う。</p>
<p>自然科学において仮説を検証するには実験を行う。狙った現象が観測可能になるようなうまい状況を整えて、仮説に整合的な結果が生じるかどうか調べる。しかし経済学の対象は<strong>現実そのもの</strong>なので、仮説を検証するための実験を行うことは難しい。代わりに現実の中で得られた膨大なデータに統計学的な分析を加えて、ある現象の原因と結果がうまい具合に立ち現れるよう工夫する。</p>
<p>そういう意味で、経済学におけるあらゆる種類の実験は、あらゆる条件下で常時行われていると言えるかもしれない。</p>
<h3>インセンティブは発明されたものである</h3>
<p>インセンティブとは「発明」されるものだと言う。もっと稼ぎたいからがんばって働く、警察に捕まるのが怖いから不正はしない。現代社会では当然のことと考えてしまいがちだが、これらは普遍的な原理でも何でもなく、そういう風に行動するようにインセンティブが設計されているのだ。ここで私は<a href="http://d.hatena.ne.jp/hachi/20050626#p2">おれカネゴンさんの日記</a>の次の箇所を思い出した：</p>
<blockquote cite="http://d.hatena.ne.jp/hachi/20050626#p2">
<p>ところで、「よいことをするとよい報いがある」「悪いことをするとそれなりの報いがある」という因果は、実はまったくの非合理的な信念 (irrational belief)で、この因果は合理的なのだ(筋が通っている)とすべての人によって信じられているということ以外にこれを支える根拠は本来どこにもなかったりする。かといって、論理療法とかを真似て、にわかハッカーのように「これは非合理的です」と斬って捨てたままにしていいことにはならない。というのは、人類は数千年かけて、本来は非合理的であるはずのこの信念が本当になるように全力を尽くしてきたからで、その最たるものが法律なのだと思う。</p></blockquote>
<p>法律はインセンティブを導入するための強力な手段の一つだ。そして経済学者は、インセンティブを発明したり設計したり導入したりすることで、あらゆる問題は解決できると考える（らしい）。</p>
<h3>『割れ窓理論』という通念</h3>
<p>150ページからは有名な「割れ窓理論」をもとにしたニューヨーク市の防犯対策と、実はそれは全く効果がなかったという著者の主張が述べられている。主張の根拠は次の3点にまとめられる：</p>
<ol>
	<li>犯罪の急減はニューヨーク市にけではなく、全米で起こっていた。</li>
	<li>対策が始まったのは1994年からだが、1990年には既に減少が始まっていた。</li>
	<li>対策の内容とは無関係に、警官が増員されていた（警官が増えれば犯罪が減ることは証明できる）。</li>
</ol>
<p>これだけの証拠があったのに、なぜ割れ窓理論に元づく説明が広く世間に受け入れられ、「通念（conventional wisdom）」となったのか。『通念は、単純で都合がよくて居心地良さそうで、実際居心地がよくなければならない』と著者は言う。確かに、割れ窓理論が提示する筋書きは心地よい。身近なところで起こる軽微な犯罪を徹底的に取り除いていけば、やがて街から犯罪の臭いが消え、殺人や強盗といった重大な犯罪も減少する……。警察が、街のみんなが頑張ったから犯罪は減ったのだ！というのは、ぜひとも信じたくなる考え方だ。</p>
<p>&#8230;</p>
<p>「銃とプール、危ないのはどちらか」、「ヤクの売人はなぜママと住んでいるのか」、「黒人と白人の成績格差は何が原因か」といった本書の話題の多くは、基本的に米国人の通念を前提としており、日本人が読んでも「ふーん」という以上の感想を持つのは難しい。例えばアメリカでは近年、子供に変な名前をつける親が増えているらしい。日本でも同じような話は聞く。しかしそこから親の傾向とか子供の成績との相関を調べたら、アメリカとは全く別の結論になるのではないかという気がする。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1176/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>世界一シンプルな経済入門 経済は損得で理解しろ！</title>
		<link>http://wp.serpere.info/archives/1166</link>
		<comments>http://wp.serpere.info/archives/1166#comments</comments>
		<pubDate>Tue, 13 Apr 2010 14:05:34 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[読書]]></category>
		<category><![CDATA[経済学]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=1166</guid>
		<description><![CDATA[世界一シンプルな経済入門 経済は損得で理解しろ! 日頃の疑問からデフレまでの感想。 飯田泰之先生の経済入門本。発売がなぜかエンターブレインだったり、帯にでかでかと勝間和代さんの写真が載っていたり、外観は良く分からないことになっているが、内容はとてもとても分かりやすかった。 主に3章以降から、特に印象に残った部分をメモ。 不況には2種類あり、また2種類しかない。すなわちスタグフレーションか需要不足型不況である。 経済政策には成長政策、安定化政策、再配分政策の3種類があり、それぞれ目的も効果も異なる。間違った状況で間違った政策をとると効果が出ない 60〜70年代の世界はスタグフレーションに陥っており、「成長政策」こそが必要だったが、「安定化政策」をとってしまった。また90年代以降の日本は需要不足型不況で「安定化政策」が必要なのだが、「成長政策」をとってしまった（小泉改革）。 成長政策は中長期的な潜在GDPの上昇に効果がある。代表的な政策は「民営化」と「規制緩和」。 安定化政策は潜在GDPと実質GDPを安定的に一致させる。経済の安定は中長期的な潜在GDPの上昇にも欠かせない。代表的な政策は「財政政策（公共事業/給付金）」、「金融緩和政策」 再配分政策が必要なのは、セーフティネットを整備して成長のための挑戦をしやすくするため。過剰に再配分をやると逆効果。 2002年から2007年までの「いざなぎ超え」は、それだけの期間回復基調が続いたというだけで、需給ギャップはほとんど埋まっていなかった。成長率そのものも低く、結局のところ需要不足型不況が続いていた。 デフレ下では名目金利がどれだけ低くても、実質金利=名目金利-予想インフレ率は高くなり、企業の投資活動は萎縮する。 ミクロの視点では正しくとも、それが合成されたマクロの世界では正しくなくなることを「合成の誤謬」という。デフレ下の個人個人の選択は合理的なので責めようがないが、最終的には自分たちの首を絞めることになる。 税収の増加率≒名目GDP成長率＜国債の名目利子率　が成り立っている限り、どれだけ無駄を省いたとしても、必ず財政は破綻する。 Amazonのレビューにも書いてあるが、一部で図が間違っている。あと誤植が割と多い。そこだけが気になった。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F1166%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbLaJMR%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E4%B8%96%E7%95%8C%E4%B8%80%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E7%B5%8C%E6%B8%88%E5%85%A5%E9%96%80%20%E7%B5%8C%E6%B8%88%E3%81%AF%E6%90%8D%E5%BE%97%E3%81%A7%E7%90%86%E8%A7%A3%E3%81%97%E3%82%8D%EF%BC%81%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E7%B5%8C%E6%B8%88%E5%85%A5%E9%96%80-%E7%B5%8C%E6%B8%88%E3%81%AF%E6%90%8D%E5%BE%97%E3%81%A7%E7%90%86%E8%A7%A3%E3%81%97%E3%82%8D-%E6%97%A5%E9%A0%83%E3%81%AE%E7%96%91%E5%95%8F%E3%81%8B%E3%82%89%E3%83%87%E3%83%95%E3%83%AC%E3%81%BE%E3%81%A7-%E9%A3%AF%E7%94%B0-%E6%B3%B0%E4%B9%8B/dp/4047264458%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4047264458"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51xIzMMQfKL._SL75_.jpg" alt="" /></a></p>
<p><a href="http://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AA%E7%B5%8C%E6%B8%88%E5%85%A5%E9%96%80-%E7%B5%8C%E6%B8%88%E3%81%AF%E6%90%8D%E5%BE%97%E3%81%A7%E7%90%86%E8%A7%A3%E3%81%97%E3%82%8D-%E6%97%A5%E9%A0%83%E3%81%AE%E7%96%91%E5%95%8F%E3%81%8B%E3%82%89%E3%83%87%E3%83%95%E3%83%AC%E3%81%BE%E3%81%A7-%E9%A3%AF%E7%94%B0-%E6%B3%B0%E4%B9%8B/dp/4047264458%3FSubscriptionId%3DAKIAJUX5XJO3NQFNQ4TQ%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4047264458">世界一シンプルな経済入門 経済は損得で理解しろ! 日頃の疑問からデフレまで</a>の感想。</p>
<p>飯田泰之先生の経済入門本。発売がなぜかエンターブレインだったり、帯にでかでかと勝間和代さんの写真が載っていたり、外観は良く分からないことになっているが、内容はとてもとても分かりやすかった。</p>
<p>主に3章以降から、特に印象に残った部分をメモ。</p>
<ul>
	<li>不況には2種類あり、また2種類しかない。すなわちスタグフレーションか需要不足型不況である。</li>
	<li>経済政策には成長政策、安定化政策、再配分政策の3種類があり、それぞれ目的も効果も異なる。間違った状況で間違った政策をとると効果が出ない</li>
	<li>60〜70年代の世界はスタグフレーションに陥っており、「成長政策」こそが必要だったが、「安定化政策」をとってしまった。また90年代以降の日本は需要不足型不況で「安定化政策」が必要なのだが、「成長政策」をとってしまった（小泉改革）。</li>
	<li>成長政策は中長期的な潜在GDPの上昇に効果がある。代表的な政策は「民営化」と「規制緩和」。</li>
	<li>安定化政策は潜在GDPと実質GDPを安定的に一致させる。経済の安定は中長期的な潜在GDPの上昇にも欠かせない。代表的な政策は「財政政策（公共事業/給付金）」、「金融緩和政策」</li>
	<li>再配分政策が必要なのは、セーフティネットを整備して成長のための挑戦をしやすくするため。過剰に再配分をやると逆効果。</li>
	<li>2002年から2007年までの「いざなぎ超え」は、それだけの期間回復基調が続いたというだけで、需給ギャップはほとんど埋まっていなかった。成長率そのものも低く、結局のところ需要不足型不況が続いていた。</li>
	<li>デフレ下では名目金利がどれだけ低くても、実質金利=名目金利-予想インフレ率は高くなり、企業の投資活動は萎縮する。</li>
	<li>ミクロの視点では正しくとも、それが合成されたマクロの世界では正しくなくなることを「合成の誤謬」という。デフレ下の個人個人の選択は合理的なので責めようがないが、最終的には自分たちの首を絞めることになる。</li>
	<li>税収の増加率≒名目GDP成長率＜国債の名目利子率　が成り立っている限り、どれだけ無駄を省いたとしても、必ず財政は破綻する。</li>
</ul>
<p>Amazonのレビューにも書いてあるが、一部で図が間違っている。あと誤植が割と多い。そこだけが気になった。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/1166/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>海外ETFの本</title>
		<link>http://wp.serpere.info/archives/553</link>
		<comments>http://wp.serpere.info/archives/553#comments</comments>
		<pubDate>Mon, 06 Jul 2009 12:42:35 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=553</guid>
		<description><![CDATA[タイトルはちょっとアレだが、至極真っ当な本。インデックス連動型の海外ETFを買って、世界経済の成長に参加しよう！というお話。敢えて一文、本書の肝となる主張を抜き出すとしたら、次の文だろうか（258ページ）： 長期的にみて、世界経済が発展する限り、市場は全体として右肩上がりになります。 この理屈が理解できなかったせいで、私にとって長らく投資という行為は胡散臭い儲け話と区別がつかなかった。いや、多分今でも心の底では理解できていないと思う。失われた10年に青春を過ごした私（たちの世代）にとって、世の中というのは「短期的な上下を繰り返しながらも、緩やかに下降していく」ものだという認識が染みついているので、株価であれ、何らかの指数であれ、投資信託の基準価格であれ、中長期的に右肩上がりに上昇し続けるというのは、鼻で笑ってしまうような馬鹿げた幻想にしか思えないのだ。……むしろそういう世界観を相対化してみたくて、今の私は投資を行っているのかも知れない。 それで海外ETFだが、実際に買おうと思うと、やはり普通の投資信託よりもいろいろと敷居が高くて躊躇している。特に面倒なのが税金。海外ETFは海外株式と同じ扱いになるため、手数料の安いネット証券では特定口座が利用できない。ならば自分で確定申告を、と考えて調べてみると、これがよく分からない。売買差益が譲渡所得で申告分離課税、為替差益が雑所得で総合課税という基本は簡単なのだが、ここで日本円を米ドルに換えて、ここで○○ドルでETFを買って、ここで××ドル分を売却したとして……というリアルなシナリオに沿って考えていくと、いつどのレートでどういう所得が発生するのか、頭がこんがらがってくる。 他にも、これは本にも書いてあることだが、ETFは最低取引金額がまだ高いし、購入する際の手数料もかかるので、小額ずつ積み立てて行くのには向いていない。やはり当面は普通の投資信託で積み立てていくのが簡単そうだ。本書執筆時点では存在していなかったMSCI エマージング・マーケット・インデックスに連動するインデックスファンドも登場したことだし……。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F553%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E6%B5%B7%E5%A4%96ETF%E3%81%AE%E6%9C%AC%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/%E3%81%BB%E3%81%BC%E7%A2%BA%E5%AE%9F%E3%81%AB%E4%B8%96%E7%95%8C%E3%81%AE%E7%B5%8C%E6%B8%88%E6%88%90%E9%95%B7%E3%81%8C%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E8%B2%A1%E7%94%A3%E3%81%AB%E5%A4%89%E3%82%8F%E3%82%8B%E6%9C%80%E3%82%82%E8%B3%A2%E3%81%84ETF%E6%B5%B7%E5%A4%96%E6%8A%95%E8%B3%87%E6%B3%95-%E5%8C%97%E6%9D%91-%E6%85%B6/dp/4023302880%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4023302880"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/415xQlznezL._SL160_.jpg" alt="" width="109" height="160" /></a>タイトルはちょっとアレだが、至極真っ当な本。インデックス連動型の海外ETFを買って、世界経済の成長に参加しよう！というお話。敢えて一文、本書の肝となる主張を抜き出すとしたら、次の文だろうか（258ページ）：</p>
<blockquote style="font-style:italic; font-weight:bold"><p>長期的にみて、世界経済が発展する限り、市場は全体として右肩上がりになります。</p></blockquote>
<p>この理屈が理解できなかったせいで、私にとって長らく投資という行為は胡散臭い儲け話と区別がつかなかった。いや、多分今でも心の底では理解できていないと思う。失われた10年に青春を過ごした私（たちの世代）にとって、世の中というのは「<strong>短期的な上下を繰り返しながらも、緩やかに下降していく</strong>」ものだという認識が染みついているので、株価であれ、何らかの指数であれ、投資信託の基準価格であれ、中長期的に右肩上がりに上昇し続けるというのは、鼻で笑ってしまうような馬鹿げた幻想にしか思えないのだ。……むしろそういう世界観を相対化してみたくて、今の私は投資を行っているのかも知れない。</p>
<p>それで海外ETFだが、実際に買おうと思うと、やはり普通の投資信託よりもいろいろと敷居が高くて躊躇している。特に面倒なのが税金。海外ETFは海外株式と同じ扱いになるため、手数料の安いネット証券では特定口座が利用できない。ならば自分で確定申告を、と考えて調べてみると、これがよく分からない。売買差益が譲渡所得で申告分離課税、為替差益が雑所得で総合課税という基本は簡単なのだが、ここで日本円を米ドルに換えて、ここで○○ドルでETFを買って、ここで××ドル分を売却したとして……というリアルなシナリオに沿って考えていくと、いつどのレートでどういう所得が発生するのか、頭がこんがらがってくる。</p>
<p>他にも、これは本にも書いてあることだが、ETFは最低取引金額がまだ高いし、購入する際の手数料もかかるので、小額ずつ積み立てて行くのには向いていない。やはり当面は普通の投資信託で積み立てていくのが簡単そうだ。本書執筆時点では存在していなかった<a href="http://www.sumishinam.co.jp/stam_index/stam_em_stock.html">MSCI エマージング・マーケット・インデックスに連動するインデックスファンド</a>も登場したことだし……。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/553/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>『実践Common Lisp』読みかけの感想</title>
		<link>http://wp.serpere.info/archives/549</link>
		<comments>http://wp.serpere.info/archives/549#comments</comments>
		<pubDate>Fri, 03 Jul 2009 12:38:42 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[Common Lisp]]></category>
		<category><![CDATA[『実践Common Lisp』]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=549</guid>
		<description><![CDATA[11章途中まで読んだ。 他言語のプログラマに向けたLisp本。リストがどうしたコンスセルがどうしたという定番の説明をすっ飛ばして、とにかくまずはCommon Lispの凄さを見ろと言わんばかりに、最短距離でマクロの実演に突き進む。その姿勢は正しいと思う。ある程度経験のあるプログラマならリストやコンスセルの基礎くらいは知っているものだし、その上で「Lispって、結局何がどう凄いのかよくワカンネ」という人がこの本のターゲットだろう。 実際途中まで読んだだけでも、マクロの凄さはひしひしと伝わってくる。他言語での経験を振り返って、果たしてプログラムを書くということはどういうことだっただろうかと、改めて考え直してしまうくらい示唆に富んだ内容を含んでいる……。 ところでマクロのイディオムとして、次のように処理の”本体”となるコードを埋め込む形が多用されている。 &#40;defmacro foo &#40;a b &#38;body body&#41; `&#40;bar &#40;baz ,@body&#41;&#41; これはRubyのブロックによく似ている。一般にRubyのブロックは無名関数に対するシンタックスシュガーと見なされることが多いのだが、むしろLispのマクロを意識した部分も大きいのかも知れない。 …検索してみるとやはりLispのマクロとRubyのブロックを比較する視点は存在するようだ。Ruby作者のまつもとさん自身も取り上げている： [Ruby] Why Ruby is an acceptable LISP &#8211; Matzにっき まつもと直伝　プログラミングのオキテ 第0回　あらためてRuby入門（基本と他言語との違い）]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F549%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%80%8E%E5%AE%9F%E8%B7%B5Common%20Lisp%E3%80%8F%E8%AA%AD%E3%81%BF%E3%81%8B%E3%81%91%E3%81%AE%E6%84%9F%E6%83%B3%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Common-Lisp-Peter-Seibel/dp/4274067211%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274067211"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51igxAWGMiL._SL160_.jpg" alt="" width="124" height="160" /></a>11章途中まで読んだ。</p>
<p>他言語のプログラマに向けたLisp本。リストがどうしたコンスセルがどうしたという定番の説明をすっ飛ばして、とにかくまずはCommon Lispの凄さを見ろと言わんばかりに、最短距離でマクロの実演に突き進む。その姿勢は正しいと思う。ある程度経験のあるプログラマならリストやコンスセルの基礎くらいは知っているものだし、その上で「Lispって、結局何がどう凄いのかよくワカンネ」という人がこの本のターゲットだろう。</p>
<p>実際途中まで読んだだけでも、マクロの凄さはひしひしと伝わってくる。他言語での経験を振り返って、果たしてプログラムを書くということはどういうことだっただろうかと、改めて考え直してしまうくらい示唆に富んだ内容を含んでいる……。</p>
<p>ところでマクロのイディオムとして、次のように処理の”本体”となるコードを埋め込む形が多用されている。</p>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> foo <span style="color: #66cc66;">&#40;</span>a b <span style="color: #66cc66;">&amp;</span>body body<span style="color: #66cc66;">&#41;</span>
    `<span style="color: #66cc66;">&#40;</span>bar <span style="color: #66cc66;">&#40;</span>baz <span style="color: #66cc66;">,</span>@body<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>



<p>これはRubyのブロックによく似ている。一般にRubyのブロックは無名関数に対するシンタックスシュガーと見なされることが多いのだが、むしろLispのマクロを意識した部分も大きいのかも知れない。</p>
<p>…検索してみるとやはりLispのマクロとRubyのブロックを比較する視点は存在するようだ。Ruby作者のまつもとさん自身も取り上げている：</p>
<ul>
<li><a href="http://www.rubyist.net/~matz/20051205.html#p02">[Ruby] Why Ruby is an acceptable LISP &#8211; Matzにっき</a></li>
<li><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20070725/278238/?ST=oss&amp;P=2">まつもと直伝　プログラミングのオキテ 第0回　あらためてRuby入門（基本と他言語との違い）</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/549/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>実践 Common Lisp 3.8</title>
		<link>http://wp.serpere.info/archives/533</link>
		<comments>http://wp.serpere.info/archives/533#comments</comments>
		<pubDate>Sun, 21 Jun 2009 12:40:34 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[Common Lisp]]></category>
		<category><![CDATA[『実践Common Lisp』]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=533</guid>
		<description><![CDATA[少しずつだが『実践Common Lisp』を読み始めた。3章の where の例で早くも感動。Lispのマクロはとにかく凄いのだと、著者がくどいくらいに主張する理由が分かってきた。確かにこれは凄い。 練習のために update のマクロ版も書いてみた。後の章で出てくるのかも知れないが。 &#40;defun make-update-expr &#40;field value&#41; `&#40;setf &#40;getf cd ,field&#41; ,value&#41;&#41; &#160; &#40;defmacro update &#40;selector-fn &#38;rest clauses&#41; `&#40;setf *db* &#40;mapcar #'&#40;lambda &#40;cd&#41; &#40;when &#40;funcall ,selector-fn cd&#41; ,@&#40;make-expr-list #'make-update-expr clauses&#41;&#41; cd&#41; *db*&#41;&#41;&#41; make-expr-list は make-comparison-list を一般化したもので、次の通り。 &#40;defun make-expr-list &#40;make-expr-fn fields&#41; &#40;loop while fields collecting &#40;funcall make-expr-fn &#40;pop fields&#41; &#40;pop fields&#41;&#41;&#41;&#41;]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F533%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E5%AE%9F%E8%B7%B5%20Common%20Lisp%203.8%22%20%7D);"></div>
<p>少しずつだが『<a name="evtst|a|4274067211" href="http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Common-Lisp-Peter-Seibel/dp/4274067211%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274067211">実践Common Lisp</a>』を読み始めた。3章の where の例で早くも感動。Lispのマクロはとにかく凄いのだと、著者がくどいくらいに主張する理由が分かってきた。確かにこれは凄い。</p>
<p>練習のために update のマクロ版も書いてみた。後の章で出てくるのかも知れないが。</p>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> make-update-expr <span style="color: #66cc66;">&#40;</span>field <span style="color: #b1b100;">value</span><span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">getf</span> cd <span style="color: #66cc66;">,</span>field<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">,</span><span style="color: #b1b100;">value</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
&nbsp;
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defmacro</span> update <span style="color: #66cc66;">&#40;</span>selector-fn <span style="color: #66cc66;">&amp;</span>rest clauses<span style="color: #66cc66;">&#41;</span>
  `<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setf</span> *db*
	 <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">mapcar</span>
	  #'<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">lambda</span> <span style="color: #66cc66;">&#40;</span>cd<span style="color: #66cc66;">&#41;</span>
	      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">when</span> <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">funcall</span> <span style="color: #66cc66;">,</span>selector-fn cd<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">,</span>@<span style="color: #66cc66;">&#40;</span>make-expr-<span style="color: #b1b100;">list</span> #'make-update-expr clauses<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
	      cd<span style="color: #66cc66;">&#41;</span>
	  *db*<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>



<p>make-expr-list は make-comparison-list を一般化したもので、次の通り。</p>


<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> make-expr-<span style="color: #b1b100;">list</span> <span style="color: #66cc66;">&#40;</span>make-expr-fn fields<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>loop while fields
       collecting <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">funcall</span> make-expr-fn <span style="color: #66cc66;">&#40;</span>pop fields<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>pop fields<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>




]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/533/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Authenticated encryption（認証暗号？）</title>
		<link>http://wp.serpere.info/archives/450</link>
		<comments>http://wp.serpere.info/archives/450#comments</comments>
		<pubDate>Sun, 03 May 2009 13:59:28 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[暗号]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=450</guid>
		<description><![CDATA[Authenticated encryption：機密性と完全性を同時に守るための暗号システム。対称暗号とMACとの組み合わせで実現するか、もしくは専用に設計された対称ブロック暗号のモードを使用する。最近になって活発に研究されている分野らしい。 そのような対称ブロック暗号のモードは Authenticated Encryption Modes といった名称で分類され、中でもNISTが標準化しているのは CCM と GCM モード。CCM モードは IEEE 802.11i 規格の一部として実用化されている。また他にNISTに提案されているものとしては CWC, EAX, OCB モードなどがある。 一般に使用可能な実装としては、Brian Gladman氏のサイトで CCM, GCM, EAX, CWC モードの実装がBSDライクなライセンスで公開されている。またパブリックドメインの暗号化ライブラリ libTomCrypt（工事中の新サイト） では EAX, OCB, CCM, GCM モードが利用できる。 『C/C++セキュアプログラミングクックブック〈VOLUME2〉対称鍵暗号の実装』でイチ押しされているのは CWC モードだが、世間的にはNIST標準である CCM モードや GCM モードの方が広く使われているようだ。 比較的新しい分野のためか、WEB上には日本語の情報は少ない（探し方が悪いのかも）。唯一CRYPTREC が2003年に公開した報告書（pdf）『ブロック暗号を使った秘匿、メッセージ認証、及び認証暗号を目的とした利用モードの技術調査報告』の中で「認証暗号に関するモード」として安全性や効率について詳しい検討を行っているが、ちょっと専門的過ぎる。一方でWikipedia英語版の充実振りは素晴らしい。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F450%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Authenticated%20encryption%EF%BC%88%E8%AA%8D%E8%A8%BC%E6%9A%97%E5%8F%B7%EF%BC%9F%EF%BC%89%22%20%7D);"></div>
<p><a href="http://en.wikipedia.org/wiki/Authenticated_encryption">Authenticated encryption</a>：機密性と完全性を同時に守るための暗号システム。対称暗号とMACとの組み合わせで実現するか、もしくは専用に設計された対称ブロック暗号のモードを使用する。最近になって活発に研究されている分野らしい。</p>
<p>そのような対称ブロック暗号のモードは Authenticated Encryption Modes といった名称で分類され、中でも<a href="http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html#05">NISTが標準化している</a>のは CCM と GCM モード。CCM モードは IEEE 802.11i 規格の一部として実用化されている。また他に<a href="http://csrc.nist.gov/groups/ST/toolkit/BCM/modes_development.html">NISTに提案されている</a>ものとしては CWC, EAX, OCB モードなどがある。</p>
<p>一般に使用可能な実装としては、<a href="http://www.gladman.me.uk/">Brian Gladman氏のサイト</a>で CCM, GCM, EAX, CWC モードの実装がBSDライクなライセンスで公開されている。またパブリックドメインの暗号化ライブラリ <a href="http://libtomcrypt.com/features.html">libTomCrypt</a>（<a href="http://libtom.org/">工事中の新サイト</a>） では EAX, OCB, CCM, GCM モードが利用できる。</p>
<p>『<a name="evtst|a|4873112133" href="http://www.amazon.co.jp/C-%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF%E3%80%88VOLUME2%E3%80%89%E5%AF%BE%E7%A7%B0%E9%8D%B5%E6%9A%97%E5%8F%B7%E3%81%AE%E5%AE%9F%E8%A3%85-%E3%82%B8%E3%83%A7%E3%83%B3-%E3%83%93%E3%82%A8%E3%82%AC/dp/4873112133%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112133">C/C++セキュアプログラミングクックブック〈VOLUME2〉対称鍵暗号の実装</a>』でイチ押しされているのは CWC モードだが、世間的にはNIST標準である CCM モードや GCM モードの方が広く使われているようだ。</p>
<p>比較的新しい分野のためか、WEB上には日本語の情報は少ない（探し方が悪いのかも）。唯一CRYPTREC が2003年に公開した報告書（pdf）『<a href="http://www2.nict.go.jp/y/y213/cryptrec_publicity/mode_wg040607.pdf">ブロック暗号を使った秘匿、メッセージ認証、及び認証暗号を目的とした利用モードの技術調査報告</a>』の中で「認証暗号に関するモード」として安全性や効率について詳しい検討を行っているが、ちょっと専門的過ぎる。一方でWikipedia英語版の充実振りは素晴らしい。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/450/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GW読書中</title>
		<link>http://wp.serpere.info/archives/442</link>
		<comments>http://wp.serpere.info/archives/442#comments</comments>
		<pubDate>Sat, 02 May 2009 12:58:08 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[暗号]]></category>
		<category><![CDATA[読書]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=442</guid>
		<description><![CDATA[GWなので欲しかった本をまとめ買いしてきた。 『WEB+DB PRESS vol.50』 だいたい読み終えた。Gitの記事とkey-value storeの記事が面白かった。Gitは内部の構造まで理解しないと使いこなすのが難しい。Subversion とは対照的。でも総合的な使い勝手ではやっぱりGitの方が上だと思う。 Subversion が提示する世界観は分かりやすい。リポジトリ全体は「ディレクトリツリー」なのだという比喩が中心にあって、そのツリーに対する更新やらコピーやらの操作が、各種バージョン管理の操作に対応するようインターフェイスが工夫されている。オブジェクト指向的とも言えるかも知れない。一方Gitは機能指向的というか、まず自分が何をすべきなのか、どのような操作を実行すべきなのか理解した上で、対応するコマンド（とコマンドラインオプション）を選ばなければいけない。操作対象の抽象度も低く、あくまでもプログラマ向けという匂いが強い。そして実際、プログラマなら（慣れれば）Gitの方が使いやすい。 一見「分かりやすい」比喩を用意したとしても上手くいくとは限らないということか、単に比喩の妥当性の問題なのか。いろいろ考えさせられる。 『C/C++セキュアプログラミングクックブック』 前々から買おうかどうか迷っていた本。熟慮の末volume 2と3を買った。立ち読みした限りではそこまでハードなC言語の知識は要求していないっぽい。ギリギリ「コードが読める」レベルの私でもなんとかなりそう。 まだvolume 2を読み始めたばかりだが、まさに私が求めていた本、かもしれない。暗号化周りは実際にコードを書こうとすると分からなくなることが多すぎる。「IVって公開して良いの？」とか「『鍵』ってパスワードみたいにコード中に直接書いておけば良いの？」とか「ソルトってどうやって作って管理すれば良いの？」とか。自力で一つ一つ理屈を積み重ねて判断していくのは辛過ぎる…。しかもこの分野ほど”素人の直感”が裏目に出やすい分野はない。 本文中では「一般人は生の暗号化操作をするな。信頼できる高水準のインターフェイスを使え」と繰り返されている。Ruby やら PHP やらの階層でごにょごにょやるより、既存のC実装へのインターフェイスを作った方が良いのかも知れない（私にそのスキルがあればの話だが）。 以下はまだほとんど手付かず。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F442%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22GW%E8%AA%AD%E6%9B%B8%E4%B8%AD%22%20%7D);"></div>
<p>GWなので欲しかった本をまとめ買いしてきた。</p>
<p><a href="http://www.amazon.co.jp/WEB-DB-PRESS-Vol-50-PRESS%E7%B7%A8%E9%9B%86%E9%83%A8/dp/477413838X%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D477413838X"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/61Co2FMWsRL._SL75_.jpg" alt="" width="53" height="75" /></a>『WEB+DB PRESS vol.50』<br />
だいたい読み終えた。Gitの記事とkey-value storeの記事が面白かった。Gitは内部の構造まで理解しないと使いこなすのが難しい。Subversion とは対照的。でも総合的な使い勝手ではやっぱりGitの方が上だと思う。</p>
<p>Subversion が提示する世界観は分かりやすい。リポジトリ全体は「ディレクトリツリー」なのだという比喩が中心にあって、そのツリーに対する更新やらコピーやらの操作が、各種バージョン管理の操作に対応するようインターフェイスが工夫されている。オブジェクト指向的とも言えるかも知れない。一方Gitは機能指向的というか、まず自分が何をすべきなのか、どのような操作を実行すべきなのか理解した上で、対応するコマンド（とコマンドラインオプション）を選ばなければいけない。操作対象の抽象度も低く、あくまでもプログラマ向けという匂いが強い。そして実際、プログラマなら（慣れれば）Gitの方が使いやすい。</p>
<p>一見「分かりやすい」比喩を用意したとしても上手くいくとは限らないということか、単に比喩の妥当性の問題なのか。いろいろ考えさせられる。</p>
<p><a href="http://www.amazon.co.jp/C-%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF%E3%80%88VOLUME2%E3%80%89%E5%AF%BE%E7%A7%B0%E9%8D%B5%E6%9A%97%E5%8F%B7%E3%81%AE%E5%AE%9F%E8%A3%85-%E3%82%B8%E3%83%A7%E3%83%B3-%E3%83%93%E3%82%A8%E3%82%AC/dp/4873112133%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112133"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/61MK4QJ59SL._SL75_.jpg" alt="" width="58" height="75" /></a> <a href="http://www.amazon.co.jp/C-%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF%E3%80%88VOLUME3%E3%80%89%E5%85%AC%E9%96%8B%E9%8D%B5%E6%9A%97%E5%8F%B7%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%A8%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E3%82%B8%E3%83%A7%E3%83%B3-%E3%83%93%E3%82%A8%E3%82%AC/dp/4873112249%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112249"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51A4R9729RL._SL75_.jpg" alt="" width="59" height="75" /></a>『C/C++セキュアプログラミングクックブック』<br />
前々から買おうかどうか迷っていた本。熟慮の末volume 2と3を買った。立ち読みした限りではそこまでハードなC言語の知識は要求していないっぽい。ギリギリ「コードが読める」レベルの私でもなんとかなりそう。</p>
<p>まだvolume 2を読み始めたばかりだが、まさに私が求めていた本、かもしれない。暗号化周りは実際にコードを書こうとすると分からなくなることが多すぎる。「IVって公開して良いの？」とか「『鍵』ってパスワードみたいにコード中に直接書いておけば良いの？」とか「ソルトってどうやって作って管理すれば良いの？」とか。自力で一つ一つ理屈を積み重ねて判断していくのは辛過ぎる…。しかもこの分野ほど”素人の直感”が裏目に出やすい分野はない。</p>
<p>本文中では「一般人は生の暗号化操作をするな。信頼できる高水準のインターフェイスを使え」と繰り返されている。Ruby やら PHP やらの階層でごにょごにょやるより、既存のC実装へのインターフェイスを作った方が良いのかも知れない（私にそのスキルがあればの話だが）。</p>
<p>以下はまだほとんど手付かず。</p>
<p><a href="http://www.amazon.co.jp/24%E6%99%82%E9%96%93365%E6%97%A5-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-%E2%80%BE%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%80%81%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%80%81%E7%9C%81%E5%8A%9B%E9%81%8B%E7%94%A8-PRESS-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774135666%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774135666"><img src="http://ecx.images-amazon.com/images/I/51uK4ACymiL._SL75_.jpg" alt="" /></a> <a href="http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Common-Lisp-Peter-Seibel/dp/4274067211%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274067211"><img src="http://ecx.images-amazon.com/images/I/51igxAWGMiL._SL75_.jpg" alt="" /></a></p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/442/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

