<?xml version="1.0" encoding="shift_jis"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>nothing but ordinary</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/" />
    <link rel="self" type="application/atom+xml" href="http://www.ubieta.net/atom.xml" />
   <id>tag:www.ubieta.net,2008://5</id>
    <link rel="service.post" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5" title="nothing but ordinary" />
    <updated>2008-08-25T15:21:43Z</updated>
    <subtitle>とんがったエントリーをメモしたり、日々の暮らしをつづったり・・</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type  3.34</generator>
 
<entry>
    <title>John Butler Trio - Ocean</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/08/john_butler_trio_ocean.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=315" title="John Butler Trio - Ocean" />
    <id>tag:www.ubieta.net,2008://5.315</id>
    
    <published>2008-08-25T15:12:45Z</published>
    <updated>2008-08-25T15:21:43Z</updated>
    
    <summary>一目見て、ヒッピーぽいなー、とか 伊達男（←表現が古い）だなーとか、 こいつ、結...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="005)music" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[一目見て、ヒッピーぽいなー、とか
伊達男（←表現が古い）だなーとか、
こいつ、結構モテそうだなーとか、
色々思ったけど、すごい好きな感じだった。

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/6VAkOhXIsI0&hl=ja&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/6VAkOhXIsI0&hl=ja&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>

この人、絶対シタールの影響受けてるでしょー、
知らないけど。

どうでもいい話ですが、ブログを分けました。
http://d.hatena.ne.jp/bannyan/
↑技術っぽい話はこっちにしました。
]]>
        
    </content>
</entry>
<entry>
    <title>JavaScript prototypeに触れる</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/javascript_prototype.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=314" title="JavaScript prototypeに触れる" />
    <id>tag:www.ubieta.net,2008://5.314</id>
    
    <published>2008-02-25T15:25:09Z</published>
    <updated>2008-02-25T16:43:36Z</updated>
    
    <summary>JavaScript はじめてのクロージャ入門の続き。 今度はprototype...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="JavaScript" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a href="http://www.ubieta.net/2008/02/javascript.html#extended">JavaScript はじめてのクロージャ入門</a>の続き。

今度はprototypeにメソッドを追加して、以下の結果が出るプログラムを作る。

<pre>
var tanaka = new generateAgeCounter('1934-06-15');
console.log(tanaka.getDate('1968-07-14')); // 34
console.log(tanaka.getDate('1958-07-15')); // 24<br />
var yoshida = new generateAgeCounter('1974-06-15');<br />console.log(yoshida.getDate('2005-07-14')); // 31<br />console.log(yoshida.getDate('2066-07-15')); // 92
</pre>]]>
        <![CDATA[はじめは<a href="http://www.ubieta.net/2008/02/javascript.html#extended">前回</a>のものをこのように書いた。

<pre>
generateAgeCounter.prototype.parseDate = function (date_text) {
	if (String(date_text).match(/^(?:(\d{4})-|)(\d{2})-(\d{2})$/)) {
		var year = RegExp.$1, month = RegExp.$2, day = RegExp.$3;
		return year + month + day;
	} else {
		return false;
	}
}<br />function generateAgeCounter(d) {
	var birth_date = this.parseDate(d);

	this.getDate = function(diff_d) {
		return parseInt((this.parseDate(diff_d) - birth_date) / 10000);
	}
}
</pre>

これでも望みの結果が出たが、ここでgetDateはすべての
オブジェクトで共有されるはずのメソッドなのでさらにprototypeに足してみる。

<pre>

//コンストラクタ
function generateAgeCounter(d) {
  var birth_date = this.parseDate(d);
}

generateAgeCounter.prototype.parseDate = function (date_text) {
	if (String(date_text).match(/^(?:(\d{4})-|)(\d{2})-(\d{2})$/)) {
		var year = RegExp.$1, month = RegExp.$2, day = RegExp.$3;
		return year + month + day;
	} else {
		return false;
	}
}

generateAgeCounter.prototype.getDate = function(diff_d) {
	return parseInt((this.parseDate(diff_d) - birth_date) / 10000);
}

var tanaka = new generateAgeCounter('1934-06-15');
console.log(tanaka.getDate('1968-07-14')); // 34
console.log(tanaka.getDate('1958-07-15')); // 24

var yoshida = new generateAgeCounter('1974-06-15');
console.log(yoshida.getDate('2005-07-14')); // 31
console.log(yoshida.getDate('2066-07-15')); // 92
</pre>

でちゃんと動いた（けどいいのかな？）

<a href="http://d.hatena.ne.jp/brazil/20060131/1138692196">以下</a>を読んで、
クロージャの良さと、オブジェクトは使い分けるべきのようだ。

<blockquote>

カウンタは、スコープがあり状態を保持する必要があるため、関数は向いてないな。<br />
<br />
簡単なカウンタだったらクロージャで充分で、リッチなカウンタだったらオブジェクトが便利だな、と考えられます。<br /><br />



コントロールに色を付け、徐々に色が薄くなっていくような処理だったらどうでしょうか？<br /><br />

必要な処理は、色を薄くする処理の一つだけなのでオブジェクトは使う必要はなさそうです。<br /><br />

クライアントにストップなどの処理を一つ渡す必要があるならクロージャ、そうではなくスタートだけなら関数で充分だと思います。<br /><br />



クロージャで良いところへオブジェクトを持ってくるのは大げさです。<br /><br />

複雑な状態を持つものを関数やクロージャで書くのも無理があります。<br /><br />

それぞれのメリットを生かし、適材適所でミックスして使いプログラミングをするのが良いと思っています。<br /><br />
</blockquote>

もう少し体感覚でこのあたりを覚えたい。
引き続き勉強しよう。

以下、JavaScript 第5版 P,151〜P,163あたりの備忘録としてのメモ

<blockquote>
オブジェクト指向的なコードであれば、関数にオブジェクトを引数として渡す
のではなく、オブジェクトに対してメソッドを呼び出すようにする。<br /><br />

var a = r.area();<br /><br />

コンストラクタは、オブジェクトの「クラス」を定義し、widthやheightプロパティを
初期化します。コンストラクタで初期化されたオブジェクトは、コンストラクタに
関連付けられたプロトタイプオブジェクトからまったく同じプロパティを継承します。
このような理由により、プロトタイプオブジェクトはメソッドや定数プロパティを
定義するのに理想的なのです。<br /><br />

プロパティが継承されたものかどうかを区別するためには、Object.hasOwnProperty()
メソッドを使う。<br /><br />

たとえば、オブジェクトoのプロパティpを読み出すときにJavaScriptは最初に
オブジェクトoにプロパティpがあるかどうかをチェック。もしなかった場合、
オブジェクトoのプロトタイプオブジェクトにプロパティpがあるかどうかを
チェックします。<br /><br />

プロトタイププロパティは、あるクラスのすべてのオブジェクトで共有されるので
そのクラスのすべてのオブジェクトに対して同一のプロパティを定義する場合に
限って使用するのが一般的です。たとえばメソッドの定義や数学定数など。<br /><br />

</blockquote>]]>
    </content>
</entry>
<entry>
    <title>世界のナベアツ問題 on Javascript</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/_on_javascript.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=313" title="世界のナベアツ問題 on Javascript" />
    <id>tag:www.ubieta.net,2008://5.313</id>
    
    <published>2008-02-24T17:19:34Z</published>
    <updated>2008-02-24T17:30:34Z</updated>
    
    <summary>FizzBuzzはもう古い！世界のナベアツ問題。 for (var i = 1,...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="015)メモ" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a href="http://www.yabooo.org/archives/60">FizzBuzzはもう古い！世界のナベアツ問題。</a>

<pre><code>
for (var i = 1, tmp; i <= 40; i++) {
	tmp = String(i);
	(i % 3 === 0 || tmp.match('3') ? tmp += '〜〜〜' : '' ) + (i % 8 === 0 ? tmp += 'ぅぅういえぇえあ' : '') ? console.log(tmp) : console.log(i);
}
</code></pre>

1
2
3〜〜〜
4
5
6〜〜〜
7
8ぅぅういえぇえあ
9〜〜〜
10
11
12〜〜〜
13〜〜〜
14
15〜〜〜
16ぅぅういえぇえあ
17
18〜〜〜
19
20
21〜〜〜
22
23〜〜〜
24〜〜〜ぅぅういえぇえあ
25
26
27〜〜〜
28
29
30〜〜〜
31〜〜〜
32〜〜〜ぅぅういえぇえあ
33〜〜〜
34〜〜〜
35〜〜〜
36〜〜〜
37〜〜〜
38〜〜〜
39〜〜〜
40ぅぅういえぇえあ


時間意識して書いてないからわからないけど、
2、3分じゃあ、まだまだ書けないなーorz]]>
        
    </content>
</entry>
<entry>
    <title>樹木曲線</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/post_126.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=312" title="樹木曲線" />
    <id>tag:www.ubieta.net,2008://5.312</id>
    
    <published>2008-02-24T15:55:06Z</published>
    <updated>2008-02-24T16:37:15Z</updated>
    
    <summary> 前から一回だけ書いてみたかった樹木曲線を書くテスト。 ...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="015)メモ" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<head>
<script type="text/javascript" src="http://www.ubieta.net/wz_jsgraphics.js"></script>
</head>
前から一回だけ書いてみたかった樹木曲線を書くテスト。
]]>
        <![CDATA[<input type="button" value="Click!" onclick="myDrawFunction();return false">
<div id="myCanvas" style="width:600px;height:600px;">
</div>

線の描画には<a href="http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm#download">「wz_jsgraphics.js」</a>を使用。
基本的には会社にあった<a href="http://www.amazon.co.jp/%E6%98%8E%E5%BF%AB%E5%85%A5%E9%96%80-Visual-Basic-%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E7%B7%A8-%E6%9E%97%E6%99%B4%E6%AF%94%E5%8F%A4%E5%AE%9F%E7%94%A8%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4797335661/ref=pd_bbs_2?ie=UTF8&s=books&qid=1203870948&sr=8-2">本</a>を参考にしながらそのまま書いてみた。
<a href="http://www.nikonet.or.jp/spring/sanae/MathTopic/jyumoku/jyumoku.htm">樹木曲線</a>かー。乱数とかを適当に使ってもあんまりきれいな感じにならないなー。（当たり前かｗ）
次書く時はこんな感じ→<a href="http://accelart.jp/shibuyajs/logo/logo.html">Logo on JavaScript</a>のものを書きたいな。

<pre><code>
function myDrawFunction()
{
	var xsize = 750;
	var ysize = 850;
	var length = 90;
	(function() {
			var n, deg, kaido, x, y;
			n = 6;
			kaido = 160 / n;
			x = xsize / 2;
			y = ysize / 3;
			deg = 180 / 2;
		  jg.setColor("#000");
			jg.drawLine(x, ysize, x, ysize - y);
		  jg.paint();
		  tree(x, y, length, deg, kaido);
	})();

	function tree(x, y, lenn, deg, kaido) {
		var x1, x2, y1, y2, deg_r, deg_l;

		if (lenn >= length / 15) {
	
			lenn = lenn * 0.75;
			deg_r = deg - kaido;
			deg_l = deg + kaido;
			
			x1 = x + lenn * Math.cos(deg_r * Math.PI / 180);
			y1 = y + lenn * Math.sin(deg_r * Math.PI / 180);
			x2 = x + lenn * Math.cos(deg_l * Math.PI / 180);
			y2 = y + lenn * Math.sin(deg_l * Math.PI / 180);
			
		  jg.setColor("#000");
		  jg.drawLine(x, ysize - y, x1, ysize - y1);
		  jg.drawLine(x, ysize - y, x2, ysize - y2);
		  jg.paint();
		  tree(x1, y1, lenn, deg_r, kaido);
			tree(x2, y2, lenn, deg_l, kaido);
	
		} else {
			return;
		}
	}
}

var jg = new jsGraphics("myCanvas");
</code></pre>]]>
    </content>
</entry>
<entry>
    <title>WEB+DB風の見出しを作るジェネレータ</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/webdb.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=311" title="WEB+DB風の見出しを作るジェネレータ" />
    <id>tag:www.ubieta.net,2008://5.311</id>
    
    <published>2008-02-20T13:07:44Z</published>
    <updated>2008-02-20T16:53:54Z</updated>
    
    <summary>社内勉強会用のお題用に。。...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="015)メモ" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        社内勉強会用のお題用に。。
        <![CDATA[左に単語を入力して改行で右にそれっぽい見出しができます。

<form id="form1">
<textarea cols="45" rows="7" id="word" name="word" ></textarea> <textarea cols="55" rows="7" id="change_word" name="change_word" ></textarea><br />
<input type="button" value="Click!" onclick="getCaptions();return false">

</form>

<blockquote>ゼロからはじめるデザインパターン（25回）<br />
サルでもわかるシェルプログラミング（5回）<br />
HTTP/TCP/IP(5回)実践テクニック<br />
徹底活用！ActionScript(5回)<br />
JavaScript(10回)使いこなし術<br />
REST(5回)徹底攻略<br />
正規表現(5回)実践テクニック<br />
Ruby(10回)の基礎知識<br />
UML(5回)の基礎知識<br />
SQL(5回)との賢いつきあい方</blockquote>

これだけでも80回。
週1回だとしても、2年弱は軽く持つ。
これに読書会とかかぶせていくと、うん、
ネタは尽きないんだ。

[追記]

array.mapを使ったら
オブジェクトでサポートされてないプロパティまたはメソッドです。
とIEでエラーが出てて、

<blockquote>map は ECMA-262 標準に対する JavaScript 拡張なので、ECMA-262 標準の他の実装では存在しない場合があります。次のコードをスクリプトの先頭に挿入すると、map がネイティブでサポートされていない ECMA-262 実装でも map を使用できるようになります。これは Firefox および SpiderMonkey で使われているアルゴリズムとまったく同じものです。 </blockquote>

<a href="http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map">Core JavaScript 1.5 Reference:Global Objects:Array:map</a>
を参考にして、array.prototype.mapを挿入したら動いた。。。

[追記の追記]

<s>IEだと挙動が変だ。
単語の後ろに見出しがつく場合に改行されるなー。
firefoxだといいけど、IEが悪いせいにしたくなってきた。
けど、普通にプログラムがおかしい気がする。</s>

↑コメントのご指摘のおかげで直りました。

<blockquote>また、Windowsの場合、改行文字はCRとLFの2バイトで表現されます。これは、プログラマにとっては厄介です。たとえば、Cのプログラムで、 

    putchar('\n');      /* \は本当はバックスラッシュ */
と書いた場合、Windowsでは「CR LF」(0x0d0a)の2バイトが出力されます。ここで、'\n'は、プログラムの中での改行文字を表していて、これのサイズは1バイトです。つまりプログラム内では1バイトを出力したはずなのに、OSによっては、現実には2バイト出力されることもありうるわけです。こういうことは他にもあるので、この改行文字だけに目くじらをたてても仕方ないといえば仕方ないのですが、とは言え、なんか気持ちが悪いのも事実です。</blockquote>

<a href="http://www.amy.hi-ho.ne.jp/~lepton/program/p4/prog431.html">新・闘わないプログラマ No.431 　改行する</a>

なるほどー。なんか少し分かったような気がする。
今回の場合2バイト出力されていたのに、(CR LF)片方だけしか
マッチしないようにしていた、ということかな。

<pre><code>
function getCaptions() {
	if (! Array.prototype.map ) Array.prototype.map = function(f){
	    var a = [];
	    for(var i = 0; i &lt; this.length; i++){
	      a[i] = f(this[i]);
	    }
	    return a;
	};

	if (document.getElementById('word').value) {
		var words = document.getElementById('word').value;
		var split_words = words.split(/\n?\r/);
		var generate_words = split_words.map(generateCaption);
		var str = generate_words.join(&quot;\n&quot;);
		document.getElementById('change_word').value = str;
	}


	function generateCaption(w) {
		
		this.forwards = [
			'ゼロからはじめる',
			'そろそろ本気で',
			'[速習]',
			'免許皆伝！',
			'[超級]',
			'知っておきたい！',
			'徹底活用！',
			'「虎の巻」',
			'現場で役立つ！',
			'再入門！',
			'これでカンペキ！',
			'サルでもわかる'
		];
		
		this.backwards = [
			'実践テクニック',
			'との賢いつきあい方',
			'使いこなし術',
			'の基礎知識',
			'徹底攻略',
			'最前線!'
		];
		
		var i = Math.floor( Math.random() * this.forwards.length );
		var j = Math.floor( Math.random() * this.backwards.length );
		var k = Math.floor( Math.random() * 2 );
	  return k === 0 ? this.forwards[i] + w : w + this.backwards[j];
	}
}
</code></pre>]]>
    </content>
</entry>
<entry>
    <title>JavaScript はじめてのクロージャ入門</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/javascript.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=310" title="JavaScript はじめてのクロージャ入門" />
    <id>tag:www.ubieta.net,2008://5.310</id>
    
    <published>2008-02-19T15:04:49Z</published>
    <updated>2008-02-19T17:12:01Z</updated>
    
    <summary>JavaScript はじめてのクロージャ入門 というタイトルの割には、クロージ...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="JavaScript" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[JavaScript はじめてのクロージャ入門
というタイトルの割には、クロージャについてあんまり深く突っ込んでないなー。

問い　以下の結果が返ってくる関数を作りなさい。

<pre><code>
var tanaka = generateAgeCounter('1984-06-24');
console.log(tanaka('2008-02-18')); // =&gt; 23
console.log(tanaka('1999-07-31')); // =&gt; 15

</code></pre>

会社の先輩からクロージャを理解するため(かどうかは分からないけど)
にこのような問題を出して頂いたので考えてみる。

]]>
        <![CDATA[これは変数が参照している誕生日から、
ある時点で何歳かどうかを調べるというもの。

クロージャを使わないで、このプログラムを作るとすれば
今までの自分の考え方だと単純に引数を2つ持たせることを考えてたと思う。

が、このプログラムでは引数はひとつしか持っていない。
クロージャを理解するためにちょうどいいような問題なので考えてみる。

まずクロージャを理解するために色々サイトを眺めてみる。

<blockquote>
<a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3">クロージャ - Wikipedia</a>
<br />
<br />
典型的には、クロージャはある関数全体が他の関数（以下、エンクロージャ）の内部で
宣言されたときに発生し、内部の関数はエンクロージャのローカル変数（レキシカル変数）を参照する。
実行時に外部の関数が実行された際、クロージャが形成される。
クロージャは内部の関数のコードとエンクロージャのスコープ内の必要なすべての変数への参照からなる。
</blockquote>


<pre><code>
↓ここからエンクロージャ（クロージャを包み込む関数）
function a() {
	var str = 'enclosure_local';
	//↓ここからクロージャ
	function b() {
		return 'Hello' + str;//エンクロージャのローカル変数(レキシカル変数というらしい)strをクロージャによる参照
	}
	return b();
}

</code></pre>


<blockquote>
<a href="http://archiva.jp/web/javascript/writing_style.html">JavaScriptの巧い書き方</a>

また、匿名関数を使ってスコープを一段下げてやることで、関数内のローカル変数をグローバル変数のように扱うこともできる。この辺はクロージャでよく使います。

参照している変数は、クロージャをつくった関数の終了後も存続する 

</blockquote>


<pre><code>
function(){ // 匿名関数でスコープを一段下げる 
	var msg = &quot;sage&quot;; // msgはグローバル変数ではない 
	window.onunload = function(){ // グローバルオブジェクトwindow.onloadに関数を付加 
		alert( msg ); // msgはクロージャによる参照 
	} // close function 
}(); 
</code></pre>


<pre><code>
function newCounter() { 
var i = 0; 
return function() { // anonymous function 
i = i + 1; 
return i; 
} 
} 
  
c1 = newCounter(); 
alert(c1()); // 1 
alert(c1()); // 2 
alert(c1()); // 3 
</code></pre>

<pre><code>
function foo(x) { return x }
var foo = function(x) { return x }
</code></pre>


<blockquote>
<a href="http://smpl.seesaa.net/article/19591451.html">JavaScript</a>

関数定義はクロージャの変数への束縛にすぎない。次の2つはほぼ同義。

括弧をつけてfoo(1)とすれば関数適用だが、fooと名前だけ書くと変数として参照する。

クロージャであるから当然次のようなコードも可能。


</blockquote>

<pre><code>
function make_counter() {
  var x=0
  return function() { return x++; }
}
var c = make_counter()
alert(c()) // 0を表示
alert(c()) // 1を表示
</code></pre>


なんとなく分かってきた気もするけど、
完全には理解できてない。。

とりあえずここまで見てきたプログラムの動きを真似して作る。


<pre><code>
function diffYearCounter(year){
  var current = year;
  
  return function(diff_year){
    return current + diff_year;
  }
}

var counter = diffYearCounter(2000);
counter(8); //2008
counter(16); //2016
</code></pre>

動いた。
これこそが今回したかったことで、
currentの値を参照して、その値の差を足すことができた。

ということでこれをベースに作ってみて、
できた!と思ったら微妙にうまくいかない。

<pre><code>
var tanaka = generateAgeCounter('1980-07-15');
alert(tanaka('2000-07-14'));
</code></pre>

こういうので一日早いのに20歳になってしまう。
ちょっと考えてたら、うるう年に気がつく（笑）
うるう年か。

というかこのあたりからクロージャ一切関係ないけど
getTimeでDateオブジェクトにしてそれをひいた差分で
でるかな？と思ってたけどそうではないみたい。

<a href="http://192.244.150.43/lecture/lbp/m/tb09b2.htm">生れてから今日まで、何日生きてきただろう！</a>

↑このサイトに詳しく書いてあり、なるほど
と思い参考にしようと思っていると、

<a href="http://itpro.nikkeibp.co.jp/article/Watcher/20070822/280097/">生年月日から年齢を計算する簡単な計算式</a>

こういうのを見つけてしまった。

<blockquote>
読者の方から「生年月日から年齢を計算する簡単な計算式」はこの式はこのままで使えるとは限らないというご指摘をいただきましたので追記させていただきます。 

「誕生日の前日が終了する瞬間（すなわち誕生日をむかえる午前0時00分の直前）に1歳を加えることになる」の部分の解釈には前日に1日加えると解釈される場合と当日に1日加えると解釈される場合の2種類があるようです。特に自治体においては前者で解釈される場合が多いとのことです。大変重要なご指摘でしたので追記させていただきました。 
</blockquote>

うーん、よく分からないけれどとりあえず試した限り
いい感じで動く。（といういい加減なことを言っているとダメだと思う）
ただ、今回はどっちかというとクロージャがメインなのでよしとする。

ということでこんな感じで作った。

<pre><code>
function generateAgeCounter(d) {
  var birth_date = getDate(d);
  
	return function(diff_d) {
		return parseInt((getDate(diff_d) - birth_date) / 10000);
	}

	function getDate(date_text) {
		if (String(date_text).match(/^(?:(\d{4})-|)(\d{2})-(\d{2})$/)) {
			var year = RegExp.$1, month = RegExp.$2, day = RegExp.$3;
			return year + month + day;
		} else {
			return false;
		}
	}
}

var tanaka = generateAgeCounter('1970-07-15');
alert(tanaka('2000-07-14')); // 29
alert(tanaka('2000-07-15')); // 30
alert(tanaka('2020-02-17')); // 49 
</code></pre>

まだまだよく分からないけれど少し分かったような気もする。
うーん、今回は引用だけという感じなのでちゃんと言葉にできるようにまとめたいなー。
]]>
    </content>
</entry>
<entry>
    <title>JavaScript argumentsオブジェクトとcalleeプロパティのお勉強</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/javascript_argumentscallee.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=309" title="JavaScript argumentsオブジェクトとcalleeプロパティのお勉強" />
    <id>tag:www.ubieta.net,2008://5.309</id>
    
    <published>2008-02-14T18:02:03Z</published>
    <updated>2008-02-14T18:36:36Z</updated>
    
    <summary>第2回　JavaScriptの関数をマスターしよう ↑このあたりとかオライリーサ...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="JavaScript" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a href="http://www.atmarkit.co.jp/fdotnet/ajaxjs/ajaxjs02/ajaxjs02_04.html">第2回　JavaScriptの関数をマスターしよう</a>

↑このあたりとかオライリーサイ本124Pあたりを見ながら。

<pre><code>
function factorial(x) {
    if (x <= 1)
        return 1;
    return x * factorial(x-1);
}

for (i=1; i<10; i++) 
    console.log(factorial(i));
</code></pre>

で、こういう値が返ってくる。

<blockquote>1
2
6
24
120
720
5040
40320
362880</blockquote>

再帰関数か。かっこいいなー。
使いたいｗ

<pre><code>
var factorial = function(n) {

  if (n == 0) {
    return 1;
  } else {
    return n * arguments.callee(n - 1);
  }
}
for (i=1; i<10; i++) 
    console.log(factorial(i));
</code></pre>

<blockquote>しかし、関数が匿名関数の場合はどうだろう。再帰処理に際して呼び出すべき名前がないので、この場合は、calleeプロパティを利用する必要があるというわけだ。</blockquote>

なるほど。無名関数の場合はargumentsオブジェクトの
calleeプロパティを使って参照すればいいのかー。

うん、珍しくきれいに納得できたーと思ったら

<blockquote>［参考］argumentsオブジェクトの実体

　厳密には、JavaScriptは関数呼び出しのタイミングで、ローカル変数や引数情報を、Activation Object（通称、「Callオブジェクト」とも呼ばれる）のプロパティとして格納している。argumentsオブジェクトも、その実体はCallオブジェクトのargumentsプロパティであある。

　Callオブジェクトは、アプリケーション側から明示的に生成したり呼び出したりすることはできないし、通常は意識することすらない存在であるので、本稿ではただ単に「argumentsオブジェクト」と呼ぶものとする。</blockquote>

ん、なんだ？Callオブジェクトのプロパティ？
Activation ObjectがCallオブジェクトって呼ばれるんだ。
Activation Objectか、名前はちらちら見るけれど。。
このへんはまだ理解できてないな＞＜
雰囲気だけ分かる。そしてそれは分かったとは言わないのだけれど。
]]>
        
    </content>
</entry>
<entry>
    <title>福本マンガ風にするブックマークレットを作った</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/02/post_125.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=308" title="福本マンガ風にするブックマークレットを作った" />
    <id>tag:www.ubieta.net,2008://5.308</id>
    
    <published>2008-02-12T16:41:59Z</published>
    <updated>2008-02-12T17:29:33Z</updated>
    
    <summary>今日は仕事の谷間的な感じで18時にあがった。 いやーやっぱいいな。18時あがり。...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="015)メモ" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[今日は仕事の谷間的な感じで18時にあがった。

いやーやっぱいいな。18時あがり。ほとんど休日に近い感じで、
1日ってこんなに長いんだ、と思わせてくれる。

下北にちょっと寄ったりなんかして、帰ってDOMの勉強してたはずが
すごいくだらないことを途中からしてた。

<pre><code>
&#106;&#97;va&#115;&#99;&#114;&#105;pt&#58;&#100;oc&#117;&#109;ent.b&#111;&#100;y.in&#110;&#101;rH&#84;ML=&#100;o&#99;&#117;me&#110;&#116;.&#98;&#111;&#100;y.&#105;n&#110;er&#72;&#84;&#77;&#76;&#46;rep&#108;a&#99;e&#40;&#47;&#12383;&#12290;&#47;&#103;&#44;'た&#12290;&#12374;わわ&#8230;').rep&#108;a&#99;&#101;(&#47;&#12399;、&#47;g,'は、 &#12463;クク&#8230;&#39;).&#114;&#101;p&#108;&#97;&#99;e&#40;&#47;り、&#47;g,'&#12426;、&#32;&#12374;わ&#8230;&#32;')&#46;rep&#108;&#97;c&#101;&#40;&#47;とし&#12390;、&#47;g&#44;&#39;&#12392;&#12375;&#12390;　&#60;&#102;o&#110;t&#32;siz&#101;=&#34;5&#101;m&#34;&#62;ざわ…ざわ…<&#47;f&#111;n&#116;&#62;　&#39;&#41;&#46;r&#101;p&#108;&#97;c&#101;&#40;&#47;る&#12290;&#47;g,&#39;&#12427;&#12387;…&#12290;'&#41;.re&#112;la&#99;e&#40;&#47;&#12391;あ&#12427;。&#47;&#103;,'&#12384;&#12387;&#65381;&#65381;&#65381;&#65381;･･！&#39;&#41;.&#114;&#101;p&#108;&#97;&#99;e(&#47;。&#47;&#103;&#44;&#39;&#8230;…&#33;&#39;);&#102;&#111;cus&#40;)&#59; 
</code></pre>

↑コピってアドレスバーに貼り付ければ動きます。

<a href="http://ja.wikipedia.org/wiki/%E5%8D%92%E6%A5%AD" >卒業 - Wikipedia</a>

とかのページが
<blockquote>卒業（そつぎょう）とは、 ククク…学校の規定の全課程を修了する事であるっ………!幼稚園については、 ククク…卒園（そつえん）ということが多い……!対義語は入学であるっ………!また、卒業した者は、 ククク…卒業生、既卒者という……!</blockquote>

みたくなるだけ。

<a href="http://www.kantei.go.jp/jp/abespeech/2006/09/26press.html">安倍内閣総理大臣記者会見</a>←安部総理ってのも古いけど。

<blockquote>【安倍総理冒頭発言】 

　第90代内閣総理大臣を拝命いたしました、安倍晋三です……!どうぞよろしくお願いいたします……! 

　私は、 ククク…自由民主党・公明党連立政権の下、戦後生まれ初の総理大臣として　ざわ…ざわ…　しっかりと正しい方向にリーダーシップを発揮してまいります……!日本を活力とチャンスと優しさに満ちあふれた国にしてまいります……!本日より、 ざわ… 新しい国づくりに向けてしっかりとスタートしてまいります……! 

　私は、 ククク…特定の団体、特定の既得権を持った人たち、あるいはまた特定の考え方を持つ人たちのための政治を行うつもりはありません……!毎日、額に汗して働き、家族を愛し、地域をよくしたいと願っているっ………!そして日本の未来を信じたいと考えている普通の人たち、すべての国民の皆様のための政治をしっかりと行ってまいります……!そのために、本日、「美しい国創り内閣」を組織いたしました……!ざわわ… </blockquote>

でも改めて福本マンガを調べると（というか手元に3巻しかなかったけど）
「ざわ・・」の比率が最近になるほど少なくなってるのかな？
なんか印象としてはほとんど「ざわ・・」っていうイメージだったけど。
あと文章がすべて「・・・・！」で終わってるｗ
とりあえず「。」を「・・・・！」に置換するだけでそれっぽくなるなー。

でもYahoo!のニュースとかだとうまく変換できないなー。

ただ、<a href="http://love6.2ch.net/test/read.cgi/kao/1197345606/1-100">http://love6.2ch.net/test/read.cgi/kao/1197345606/1-100</a>
こういう名言が一番福本マンガのいいところだから、
これを使わないといけない気もしながら。


]]>
        
    </content>
</entry>
<entry>
    <title>Yahoo!Pipesでほぼ日のコラムのRSSを作ってみた</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2008/01/yahoopipesrss.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=307" title="Yahoo!Pipesでほぼ日のコラムのRSSを作ってみた" />
    <id>tag:www.ubieta.net,2008://5.307</id>
    
    <published>2008-01-10T17:55:57Z</published>
    <updated>2008-01-10T18:12:08Z</updated>
    
    <summary>ほぼ日刊イトイ新聞-ダーリンコラムのRSSをYahoo!Pipesで作ってみた。...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="ネットサービス" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a href="http://www.1101.com/darling_column/index.html">ほぼ日刊イトイ新聞-ダーリンコラム</a>のRSSをYahoo!Pipesで作ってみた。

<a href="http://pipes.yahoo.com/pipes/pipe.info?_id=5f512004e0ba6201d6a88260af4ef037">Yahoo!Pipes　ほぼ日刊イトイ新聞-ダーリンコラム</a>

<a href="http://d.hatena.ne.jp/nitoyon/20071212/pipes_page_fetch">[pipes]Yahoo! Pipes の Page Fetch モジュールでスクレイピングし放題</a>
<a href="http://pipes.yahoo.com/pipes/pipe.info?_id=6648059c4753230ecd3190aeddd074dd">混沌の庭研究所 全文配信</a>

を参考にして。正規表現まだ始めたばかりだけど
Yahoo!Pipesはすごい正規表現の勉強にいい気がするなー、楽しい！

]]>
        
    </content>
</entry>
<entry>
    <title>PHPの参照渡しについて20分で完全に理解したい　その1</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/12/php201.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=306" title="PHPの参照渡しについて20分で完全に理解したい　その1" />
    <id>tag:www.ubieta.net,2007://5.306</id>
    
    <published>2007-12-26T15:47:39Z</published>
    <updated>2007-12-26T16:38:26Z</updated>
    
    <summary>なぜ20分かというと、今日は早く眠って明日朝早く起きたいので。 さて、PHPの参...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="PHP" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        なぜ20分かというと、今日は早く眠って明日朝早く起きたいので。

さて、PHPの参照渡しについて調べてみたい。











        <![CDATA[WEB+DB PRESS 総集編の7ページを見ると、

<blockquote>PHPでの代入は基本的にデータのコピーになります。
このため、PHPにおいては基本的に変数とデータが
一対一に対応することになります。</blockquote>

という一文を電車の帰りに読んではっとしました。

<blockquote>PHPのリファレンス（参照）はデータに付随する特別な何かを
変数に代入するというよりは、指定した変数に対して、別名を
付けるイメージに近くこの点でC言語のポインタやRubyでのリファレンス
とは意味合いが異なります。</blockquote>

そうなのか。まずPHPのデータ型というところを
ちゃんと理解してなかったから腑に落ちなかったのだなー。
そのあたりをちゃんと知りたい。

僕はPHPを始めた時、会社の優しい先輩にはじめてPHPの
参照渡しがでてきた時、
「えーと、あれだ、つまりC言語でいうポインタみたいなもんだ」
と言われて内心Cすら分からない俺にCで言うなよ、と思ったのを
よく覚えていますが、その言葉は頭の中に残り、ずっと一緒なのだと思っていました。

つまりPHPにおいては基本的に参照はしない（ということでいいのだろうか？）

変数代入の参照渡し

<pre>$a = "hello";
$b = $a;  /*通常の代入
$c = &$a;  /*リファレンスによる代入（参照渡し）
$a .= "goodbye";  /*$a, $cとも"hellogoodbye"になり、$bは"hello"のまま

$c = 123;  /*$a, $cとも"123"になり、$bは"hello"のまま</pre>

これがjavascriptだったら、

<pre>var a = [1,2,3];
var b = a;
a[0] = 99;
alert(b);</pre>

となって一見同じに見えるけど全然違う。
ということを書こうと思ったけど、話が大きくなりそうなので、
今日はここまでにします。

<a title="PHP第1回：PHP基礎(関数/参照渡し/デフォルト値/スコープ)" href="http://www.stackasterisk.jp/tech/php/php01_04.jsp" target="_blank">PHP第1回：PHP基礎(関数/参照渡し/デフォルト値/スコープ)</a>

ここを見ると、

<blockquote>つまり、foo 関数は引数が「値(This is a pen.)」として渡されたのに対し、 hoge関数は引数が格納されている場所の「アドレス」が渡されています(という説明ではピンときませんよね。。。)。 </blockquote>

アドレスが渡されている、という言い方をしているなー？?
完全に理解してもう一度まとめた記事を書きたいと思います。
（結局1時間経ったし。。）]]>
    </content>
</entry>
<entry>
    <title>公と私</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/12/post_124.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=305" title="公と私" />
    <id>tag:www.ubieta.net,2007://5.305</id>
    
    <published>2007-12-10T15:20:31Z</published>
    <updated>2007-12-10T15:42:33Z</updated>
    
    <summary>便利なモノにつきまとう不快さ：D・A・ノーマン氏にきく「配慮のある技術デザイン」...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="003)雑記" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a title="便利なモノにつきまとう不快さ：D・A・ノーマン氏にきく「配慮のある技術デザイン」:インタビュー - CNET Japan" href="http://japan.cnet.com/interview/biz/story/0,2000055955,20362396-2,00.htm" target="_blank">便利なモノにつきまとう不快さ：D・A・ノーマン氏にきく「配慮のある技術デザイン」:インタビュー - CNET Japan</a>

<blockquote>人々は、今では常に連絡を取りあっています。どこにいるかはもはや問題ではありません。 <br />

　さらに、個人の生活と仕事の区別は消えつつあります。多くの人は、いつでもどこでも週7日間働くことを期待されているとこぼしています。これは事実ですが、週に7日間、いつでもどこにいても個人的なことも同じようにできるのであれば構わないのではないかとわたしは思っています。多くの企業はまだこれを理解していませんが、人々はそうしています。これが、人が仕事中にインスタントメッセージングやインターネットショッピングをする理由です。 <br /><br />

　これは別に新しいことではなく、以前はこうだったのです。 </blockquote>

ちょっと前の記事だけれど、なんだかずっと頭にひっかかる記事。]]>
        <![CDATA[今の自分が働いてる会社はすべて残業代が出て、まーそれだけが理由じゃないだろうけど
多分インスタントメッセージングなどは禁止されていると思う。ちゃんと聞いた
わけではないけれど。インターネットショッピングなんかまして当然というか
はっきり禁止されている。
ただ、目の前にPCがあって、ネットがつながっていて、人々がつながるサービスが
たくさんできて、そういうものとは逆の流れもある。
メッセとかのおかげで分からないことをどれだけ友達から教えてもらったかは
あげたらキリがない。ないけれど無駄な話もしてるんだな、同時に。
その無駄が無駄じゃなかったりもするんだけど。
このおじさんは、

<blockquote>週に7日間、いつでもどこにいても個人的なことも同じようにできるのであれば構わないのではないかとわたしは思っています。</blockquote>

という直球を投げてきてて、いやすごいなー、というか逆に自分が人を
使う立場だったらこう言えるのかなーというところもあり。
仕事に役に立つんだったらいい、とかそういう境界線の引き方って難しい。

<blockquote>産業革命以前は、家族全員で裁縫をし、大工仕事をし、農作業をし、必要なことは何でもやっていました。全員が同じ時間にオフィスにいなくてはならなくなったのは、工場の発展、産業革命、ホワイトカラー革命の後に過ぎません。 <br /><br />

　しかし考えてみてください。今ではわれわれはグローバルな社会にいます。全員が同じ時間にオフィスにいるというのは、全員が同じ時間帯にいることを仮定しています。・・・われわれは今、誰もがより柔軟な時間、柔軟性と向き合わなくてはならない、興味深い活動のスケジュールの混在に直面しているとわたしは考えています。 </blockquote>

確かに1日8時間であったり、それ以上オフィスにいなければいけない、という習慣は
本当に近代的なものであり、そういう公と私の境目がゆっくりと侵食しあってる今の状態
っていうのは、結構不安定な状態なのかも。「禁止」したり、「こうしなければいけない」
というのは簡単だけど、答えをすぐに出してはいけないような気がする。今は。
]]>
    </content>
</entry>
<entry>
    <title>はてブショートカッツ</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/12/post_123.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=304" title="はてブショートカッツ" />
    <id>tag:www.ubieta.net,2007://5.304</id>
    
    <published>2007-12-07T15:45:16Z</published>
    <updated>2008-01-10T18:11:08Z</updated>
    
    <summary>&quot;javascript:location.href=&apos;http://b.hate...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="015)メモ" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<pre><code>"javascript:location.href='http://b.hatena.ne.jp/entry/'+location.href;"</code></pre>

はてブのコメントのページへのショートカット、ブックマークレット。]]>
        
    </content>
</entry>
<entry>
    <title>CNETのfeedが追えない</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/12/cnetfeed.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=303" title="CNETのfeedが追えない" />
    <id>tag:www.ubieta.net,2007://5.303</id>
    
    <published>2007-12-07T15:35:54Z</published>
    <updated>2007-12-07T16:13:10Z</updated>
    
    <summary>まー、別にCNETじゃなくてもいいけど、いわゆるIT/ネット系のニュース のメデ...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="ネットサービス" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[まー、別に<a href="http://japan.cnet.com/">CNET</a>じゃなくてもいいけど、いわゆるIT/ネット系のニュース
のメディアはRSSで記事も配信してたりして、それはありがたいことだけど
いつも未読でたまってしまって読めない。
たとえば新聞とか、忙しい時はちゃちゃっと見出ししか読まない。
（今は新聞取ってないけど）
あーなんか4000円も払ってるのに1分も読んでないや、という時もある。
それでも一面には目を通して経済欄とか社会とかスポーツもちょこっと見たり。

つまり情報の大小があるからそういう読み方が可能だと思う。
だからCNETも毎日更新される記事、
プレスリリースすべてを垂れ流しにするのではなく、
これは重要だと思う記事、とか1日5個くらいに絞ったRSSも配信してほしい。

追記：と思ったら、
<a title="CNET Japan フィード／ポッドキャスト - CNET Japan" href="http://japan.cnet.com/info/feed/" target="_blank">CNET Japan フィード／ポッドキャスト - CNET Japan</a>
結構たくさんのfeedを配信してるんだなー。知りませんでした。ごめんなさい。
この中だったらどれだろう。とりあえず総合を取ってるからよくないんだ。多分。
そう、言い訳がましいけど、総合の核、CNETの編集部がこれは外せない
と思うようなfeedもほしいな、ということにしておこう。
]]>
        
    </content>
</entry>
<entry>
    <title>Polarisのふわふわ加減</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/11/polaris.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=302" title="Polarisのふわふわ加減" />
    <id>tag:www.ubieta.net,2007://5.302</id>
    
    <published>2007-11-25T11:56:38Z</published>
    <updated>2007-11-25T12:20:15Z</updated>
    
    <summary>空間Polaris オオヤユウスケ ZAK 有限会社PSC  2006-10-0...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="005)music" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000HCPU5Q/jikotoushiwoh-22/ref=nosim/" target="_blank">空間</a><br />Polaris オオヤユウスケ ZAK <br /><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000HCPU5Q/jikotoushiwoh-22/ref=nosim/" target="_blank"><img src="http://ecx.images-amazon.com/images/I/2113W755QWL.jpg" border="0" alt="空間" /></a><br /><font size="-1">有限会社PSC  2006-10-04<br />売り上げランキング : 49175<br /><br /><strong>おすすめ平均  </strong><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" border="0" /><br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" border="0" />風を想う<br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" border="0" />空気に恋をしています<br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" border="0" />言葉の生み出す魅力<br /><br /><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000HCPU5Q/jikotoushiwoh-22/ref=nosim/" target="_blank">Amazonで詳しく見る</a></font><font size="-2"> by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font>

Polarisの新しい新譜が発売されていたようで、と言っても、
今から1年前くらいのだけど、TSUTAYAで借りた。

<a title="Polaris (バンド) - Wikipedia" href="http://ja.wikipedia.org/wiki/Polaris_%28%E3%83%90%E3%83%B3%E3%83%89%29" target="_blank">Polaris (バンド) - Wikipedia</a>


]]>
        <![CDATA[Polarisは、あんまりよく知らないんだけど、
このふわふわ感はいつもすごいうきうきさせる。
冬でも春のような気分にさせる。

そしてふわふわしていて、いい意味で詩が頭に残らない。
鼻歌というか、曲を聴きながら、詩を口づさむこともできたりするけど、
ほとんどその詩は僕の中で意味を成してない。ただ発してる音だけ
というかそんな感じ。

村上春樹の新作の本の中で語られていた言葉を借りるならば、
「必要以上に自分を大きく見せようとしない音楽」
だと思う。「俺の、俺の」と言った考えとか、こういうことを歌ったら
人がどう思うかな〜、とかそういうことをあんまり考えていないように感じる。

言葉の選択とかでもちょっと恥ずかしい感じでも自然に歌う。
この言葉は〜、とか作為的な感じがなくて、自然に思うことを、
自然に歌っているように思う。

それって何かを表現しようと思う人にとっては実はすごい難しいことだと思う。
かっこつけてない人たちのかっこいい音楽。そんな感じかな。

<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/Cnk0Z9lIz1c&rel=1&color1=0xd6d6d6&color2=0xf0f0f0&border=0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Cnk0Z9lIz1c&rel=1&color1=0xd6d6d6&color2=0xf0f0f0&border=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>]]>
    </content>
</entry>
<entry>
    <title>ログイン画面を作ってみる/CakePHP</title>
    <link rel="alternate" type="text/html" href="http://www.ubieta.net/2007/11/cakephp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ubieta.net/mt32/mt-atom.cgi/weblog/blog_id=5/entry_id=301" title="ログイン画面を作ってみる/CakePHP" />
    <id>tag:www.ubieta.net,2007://5.301</id>
    
    <published>2007-11-24T11:27:49Z</published>
    <updated>2007-11-24T12:36:59Z</updated>
    
    <summary>ログイン画面をデバッグする（CakePHP修行 #012） | IDEA*IDE...</summary>
    <author>
        <name>banyan</name>
        <uri>banyan</uri>
    </author>
            <category term="PHP" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ubieta.net/">
        <![CDATA[<a title="ログイン画面をデバッグする（CakePHP修行 #012） | IDEA*IDEA" href="http://www.ideaxidea.com/archives/2007/06/cakephp_012.html" target="_blank">ログイン画面をデバッグする（CakePHP修行 #012） | IDEA*IDEA</a>
<a title="CakePHP Manual" href="http://manual.cakephp.org/appendix/simple_user_auth" target="_blank">CakePHP Manual</a>

などを参考にさせて頂き、自分のDBと合わせながら、
ログイン画面を作成してみました。



]]>
        <![CDATA[1ビューの部分を作成する

<pre>
<code>
&lt;form action=&quot;&lt;?php echo $html-&gt;url('/users/login'); ?&gt;&quot; method=&quot;post&quot;&gt;
&lt;div&gt;
    &lt;label for=&quot;username&quot;&gt;Username:&lt;/label&gt;
    &lt;?php echo $html-&gt;input('User/name', array('size' =&gt; 20)); ?&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;label for=&quot;password&quot;&gt;Password:&lt;/label&gt;
    &lt;?php echo $html-&gt;password('User/passwd', array('size' =&gt; 20)); ?&gt;
&lt;/div&gt;
&lt;div&gt;
    &lt;?php echo $html-&gt;submit('Login'); ?&gt;
&lt;/div&gt;
&lt;/form&gt;
</code>
</pre>

本当はsmartyが使いたいのですが、なんか配列の部分でCakePHPは使い勝手が
悪い部分もあるということなので、とりあえずこのままでいこうと思います。
でもsmartyに慣れてるのでちょっと気持ち悪いです。
 <pre><code>&lt;?php echo $html-&gt;input('User/name', array('size' =&gt; 20)); ?&gt;</code></pre>

この場合の「array('size' => 20)」というのはビューの部分にvalidateみたいな
ロジックを書いてるということだと思うのですが、これが当たり前のことなのかは
今後わかってくるのかな？

２、/app/controllers/users_controller.php (partial)

<pre><code>
&lt;pre&gt;&lt;code&gt;
&lt;?php
class UsersController extends AppController
{
    function home ()
    {
	    $this-&gt;checkSession();
	    $this-&gt;set('me', $this-&gt;User-&gt;findById($this-&gt;Session-&gt;read('authenticated_id')));
    }
    
    function login()
    {
        //Don't show the error message if no data has been submitted.
        $this-&gt;set('error', false); 

        // If a user has submitted form data:
        if (!empty($this-&gt;data))
        {
            // First, let's see if there are any users in the database
            // with the username supplied by the user using the form:

			$someone = $this-&gt;User-&gt;findByName($this-&gt;data['User']['name']);

            // At this point, $someone is full of user data, or its empty.
            // Let's compare the form-submitted password with the one in 
            // the database.

            if(!empty($someone['User']['passwd']) &amp;&amp; $someone['User']['passwd'] == $this-&gt;data['User']['passwd'])
            {
                // Note: hopefully your password in the DB is hashed, 
                // so your comparison might look more like:
                // md5($this-&gt;data['User']['password']) == ...

                // This means they were the same. We can now build some basic
                // session information to remember this user as 'logged-in'.

 				$this-&gt;Session-&gt;write('authenticated_id', $someone['User']['id']);

                // Now that we have them stored in a session, forward them on
                // to a landing page for the application. 

                $this-&gt;redirect('/users/home/');
            }
            // Else, they supplied incorrect data:
            else
            {
                // Remember the $error var in the view? Let's set that to true:
                $this-&gt;set('error', true);
            }
        }
    }

    function logout()
    {
        // Redirect users to this action if they click on a Logout button.
        // All we need to do here is trash the session information:

        $this-&gt;Session-&gt;delete('authenticated_id');

        // And we should probably forward them somewhere, too...
     
        $this-&gt;redirect('/');
    }
}
?&gt;
</code></pre>


３、/app/app_controller.php (partial)

<pre><code>
&lt;?php
class AppController extends Controller
{
    function checkSession()
    {
        // If the session info hasn't been set...
        if (!$this-&gt;Session-&gt;check('authenticated_id'))
        {
            // Force the user to login
            $this-&gt;redirect('/users/login');
            exit();
        }
    }
}

?&gt;
</code></pre>


/app直下にAppControllerというクラスを作って、
checkSessionというメソッドを呼び出す。このあたりは
真似をさせて頂きました。

４、/app/views/users/home.thtml
にログイン後に飛ぶページを作ります。
とりあえずこれも百式さんの真似で、var_dumpでdumpします。

<pre><code>
&lt;?php
  var_dump($me);
?&gt;
</code></pre>


以下みたいな感じでログインページの作成はできましたー。

<img alt="login0.jpg" src="http://www.ubieta.net/login0.jpg" width="400" height="263" />]]>
    </content>
</entry>

</feed> 

