Blog

2011.12.27 / Development

個人的に
どーやるんだろ、っておもってたことができたので、jQuery.proxy()のメモ。
説明が面倒だからコードで。

例えば最も単純に書くとこうなるとする

var message = 'hello.';
$('#button').click(function()
{
	alert(message);	
});

クラスにするとこうなる

var message='hello.';
var ExampleButtonController = function(element)
{
	element.click(function()
	{
		alert(message);
	});
}
new ExampleButtonController($('#button'));

messageをコンストラクタで渡そう

var ExampleButtonController = function(element,message)
{
	element.click(function()
	{
		alert(message);
	});
}
new ExampleButtonController($('#button'),'hello.');

でまあここまではいいけど、click()の引数の無名関数が再利用できないとかいけてないからクラスメソッドにしたい。(カプセル化は今は忘れる)

var ExampleButtonController = function(element,message)
{
	element.click(this.onClick);
}
ExampleButtonController.prototype={
	onClick:function()
	{
		alert(message);
	}
};
new ExampleButtonController($('#button'),'hello.');

となるけど、onClickで参照してるmessageはスコープ外。ダメ。インスタンス変数にしよう。じゃあ

var ExampleButtonController = function(element,message)
{
	this.message=message;
	element.click(this.onClick);
}
ExampleButtonController.prototype={
	onClick:function(event)
	{
		alert(this.message);
	}
};
new ExampleButtonController($('#button'),'hello.');

でいいじゃないか、とみせかけてこれもダメ。
onClickのスコープのthisはAS3と違ってインスタンスじゃない。イベントのターゲット。AS2はこんなだったよね。
そこでjQuery.proxy()の登場で

var ExampleButtonController = function(element,message)
{
	this.message=message;
	element.click($.proxy(this.onClick,this));
}
ExampleButtonController.prototype={
	onClick:function(event)
	{
		alert(this.message);
	}
};
new ExampleButtonController($('#button'),'hello.');

と書くと、onClickのthisがインスタンスになる。jQuery.proxyをはさんで、thisを事前に指定する。
じゃあ今までthisで取得してたイベントのターゲットはどうすんのって言うとまあもちろんインスタンス変数に持っておいてもいいんだけどこれもASと一緒で(というかW3Cの仕様らしい)

var ExampleButtonController = function(element,message)
{
	this.message=message;
	element.click($.proxy(this.onClick,this));
}
ExampleButtonController.prototype={
	onClick:function(event)
	{
		//これが、通常jQuery使ってる場合のthisにあたる
		alert(event.currentTarget);
		alert(this.message);
	}
};
new ExampleButtonController($('#button'),'hello.');

event.currentTargetでとれます。
event.targetとかもあります。まあASといっしょですね。

ということで、jQuery.proxy()を使うと、イベントハンドラを無名関数じゃなくできるので慣れた書き方っぽくできますよと。いうかんじでした。

でもJSでのオブジェクト指向はまだまだ勉強不足。
継承とかも結局どれがいーのかかたまってないし。
むずかしー

2011.12.26 / Note

「神のもっとも卑しいしもべ(the servant of the servants of God)」とはローマ教皇の自称らしい。
じゃあ自分は何のしもべだろうか。

まあとりあえず猫のしもべである。
猫がいると延々と時間を使ってしまうのでよくない。
いやいいんだけど。

神とは何かを問うつもりは全くないけれど、
ここでは神とはその人が意識的にせよ無意識的にせよ従っていて取捨選択の拠り所となる何かと仮定する。

僕は何に従い、何を判断の拠り所にしているのか。
と考えた際、たぶん、僕は僕自身の好奇心のしもべだ。

それによって人を傷つけてしまったこともあるし、
自分をも傷つけてしまった事もあるし、失ってしまったものもある。

別に、好奇心が誰よりも強いとは思わない。
不安や恐れで二の足を踏んでしまいチャレンジできなかったこともある。
でも、それは好奇心が足りなかったから、好奇心が足りないということによって踏み込めなかったと思っている。お金や安定やそういうものによっては踏み込む事はないと感じているし、強きにしろ弱きにしろ、いずれにせよ好奇心に縛られていることは確かだと自分では思う。

僕は僕自身の好奇心のもっとも卑しいしもべである。

ちなみに、猫のおしっこには大量の「コーキシン」という物質が含まれているとか。体内にはもっと大量のコーキシンがあるってことだね、猫。

2011.12.16 / Note

PhoTones Works #800
Creative Commons License photo credit: PhoTones_TAKUMA

名前には力があり子はそれに従い育つと、エリオ・グレイシーが言ってた。
自分の名前について考えてみた。

僕の名前は「航成」。その意味は「航海の成功」だと母から聞いた。
航海っていうと直接の意味は船だけど、まあ船どうこうじゃなくて広い意味での旅らしい。
じゃあ人生が旅だとすると、そんな旅の「成功」とは何だろう。

実際の旅を思い出してみると、「今回の旅はよかった」と思う時は、楽しめたとき。
まあ旅は楽しむためのものだからね。当然だ。
じゃあどうしたら楽しいと思うかというと折角の旅なんだしめいっぱい見て食べて行って体験したときだなと、自分では思う。

なら、人生=旅なんだから、じゃあ人生も、人生とは楽しむためのもので、折角の人生なんだしめいっぱい見て食べて行って体験したら、「よかったなー」と思えるんじゃないか。

きっと、それは違う、旅と人生一緒にするなと、そんな甘いもんじゃないと。
旅はは非日常だからそういう選択がとれるのであって人生という日常においてはそんなことできないという人もいそう。
でもそもそも、旅は楽しいけど人生は楽しくないもの、旅は非日常だけど人生は日常、って区分けする必要なんてない。
数日だと旅で数十年だと人生なのか。数日だと非日常で数十年だと日常なのか。数日だと楽しんでよくて数十年だと楽しんだらだめなのか。じゃあ数年なら?10年なら?閾値が実際にあるわけじゃない。

それとよく思うのは、つまらない日常から逃れ束の間の旅に行って何か感銘を受けたとしても、それが日常と切り離された時間のなかのものだと捉えている限り、いずれその感情は日常の中に埋もれ忘れて行く。
何故ならそれは日常という時間では通用しないルールだと思ってしまうから。

だから、人生と切り離された非日常の旅に出るのではなくて、人生を日常を旅にしなくてはいけない。
そして多くの事を見て知って体験して、なにより楽しまなくてはいけない。

そう考えてみると、母が身を以て示してくれている「成功」もまた、おそらくそういうものだ。
いい歳だけどスノーボードとかスケボーとかして(たまにそれで怪我して大丈夫かよ・・・と思うけど)、音楽やって、絵書いて、パソコンもイラレでイラスト書けるくらいに覚えて、家自分でリフォームして。
金持ちではないし有名人でもないけど、楽しそうだ。我が親ながらバイタリティあるなと思って尊敬してる。
もちろん本人は自分のためにそうしたいからそう生きてるだけなんだけど。

この問いに正解はないし、人によって違うものだけど、
ひとつの例として提示してくれているのだと思うし、
実際に自分はその影響を強く受けているなと思う。
まあ、お金の貯め方はもうちょっと教えてくれてもよかったと思うけど。。。

あともうひとつ。
旅が成功だったかどうかがわかるのはいつだろうと考えると、それは旅が終わった時だ。
終わる時にやっと、よかったなーとか思う。
なら旅=人生なんだから、終わるときは死ぬときじゃないか。
死ぬときじゃないとわからないのか。そうか。
逆に言うとわかったときはもう死ぬし、じゃああんまりそこに意味はないんじゃないか。
旅の成功とは楽しむことだからとか言っておきながら矛盾するけどまあいいや。
ただ成功だけでなく失敗も、同じようにたいした意味は無いってことだ。そう考えるとだいぶ気が楽。
成功も失敗もその結果自体にたいして意味がないなら、意味があるのは過程だ。ならやっぱ楽しい方がいい。

あ、とかいいつつ、引っ込み思案な性格なのでヒッピーにもなれないし旅して生きてるわけでもないしすごい凡人だし旅行が嫌いということもないですすみません。
ただでもこの人生そのものを、楽しんではいけない日常と捉えるのをやめよう。日常を旅としよう。楽しむ事に罪悪感を覚えるのはやめよう、ということを多分言いたかった、だれよりも自分自身に対して言いたかったのかなと、ここまで書いて、思った。

それでは、よき旅を。

2011.12.07 / Development

Facebook Friendlist Manager 2
Facebookでフレンドリスト(発言の公開範囲を設定するグループ)を細かく設定するのに公式のUIはあまり向いてないです。一人一人設定していかないといけない。
Google+のはそこらへんやりやすくていいなーと思ったので、作りました。

Facebook FriendList Manager

Functions

まず前提として用語説明。
フレンド=普通に友達のことです。
フレンドリスト=友達のグループ、リスト。発言の公開範囲を選ぶ時に、選択肢に出るやつです。

機能は
・フレンドリストの作成
・フレンドリストの削除
・ユーザーのフレンドリストへの追加
・ユーザーのフレンドリスト除外
です。
フレンド自体を削除したりとかはないです。

Usage

使い方は
Facebook Friendlist Manager 1
とりあえずJOINを押します。でそしたら承認しますかみたいなのが出るので承認します。
Facebook Friendlist Manager 3
左から順に、表示するフレンドリストを選択して、表示されたフレンドから処理対象フレンドを選択、次に処理対象のフレンドリストを選択して、最後に追加or除外を押す。
対象フレンドと対象フレンドリストは複数選択可。jQueryUIのお陰でドラッグでも選択できます。あとCtrl押しながらで複数選択できます。(一番やりたかったのは結局これ)(Windowsで上手く動いてないみたい。jQueryUI使っただけなので謎ですが気が向いたら直します。)
だから10人選んで、それをリストAとリストBに追加とか、その逆とか、できます。
Facebook Friendlist Manager 4
あとは左から三番目の処理対象フレンドリストの下に、フレンドリストの追加ボタンと、選択中のフレンドリストの削除ボタンあり。
フレンドリストの削除だけは間違って消しちゃうと悲しいので、確認ダイアログあり。気をつけて!

英語の成績は学生時代惨憺たるものだったので英語は多分おかしいけど、なんとなく伝わればまあいいです。

Notes

注意事項。
僕はフレンドが120人くらいしかいないので普通に使えてますけど、フレンドがめっちゃ多い人が使ったら多分止まります。何人くらいからやばいか不明。
リストからのフレンドの追加・除外処理は600件くらいまとめて(120人を5つのリストに追加)やっても大丈夫でしたけど、何件くらいからやばいか不明。
ブラウザチェックはMacのFirefox,Chrome,Safariの最新しかしてないです。IE?なにそれ。
止まったらリロードしてね。

一応免責。
このアプリを使って生じたいかなる損害も、その責任は負えませんのでご了承の上でご使用ください。

これでみなさんも今日から快適な陰口ライフを!

Facebook FriendList Manager

あ、キャプチャとるにあたって、嫁に内緒でFacebookやってたりしなさそうな、載せて大丈夫そうな方を選びましたが、問題あったらこっそり連絡ください。すぐ修正します。