0

クロージャーとか無名関数とか

最近javascriptを触る機会が多くなり、いい機会なのでいつも適当だった無名関数とかクロージャーとかについて纏めてみた。
コードだらけ。

まさに”無名”関数といった書式。()で括るのが少し気持ち悪いけど()がない限り実行されない。
// hoge1と出力
(function(){console.log('hoge1');})();

var fc = function(){console.log(‘hoge2’);}で一旦途切れると考えれば納得の出力。
// hoge2と出力
var fc = function(){console.log('hoge2');}();

function fc()とほぼ同じ。
// hoge3と出力
var fc = function(){console.log('hoge3');}
fc();

クロージャー。
// hoge4と出力
function test4(){
return function(){
console.log('hoge4');
};
}
var fc = test4();
fc();

()で括るのを知らなかった時、出力されるものかと重いえらいハマった。
// 出力なし
function test5(){
return function(){
console.log('hoge5');
};
}
test5();

//関数の中の関数なんでこんな呼び方も一応OK
// hoge6と出力
function test6(){
return function(){
console.log('hoge6');
};
}
test6()();

test5で出力できないけど、こっちは()で括ってるので内側の関数が実行され出力される。
// hoge7と出力
function test7(){
return (function(){
console.log('hoge7');
})();
}
test7();

test5と同じく出力しない。
// 出力なし
var test8 = function(){
return function(){
console.log('hoge8');
};
}
test8();

引数のテスト。無理やり内側の関数に渡すことは可能。
// fuga9 hoge9と出力
function test9(i){
return sub(i);
function sub (i){
console.log(i);
console.log('hoge9');
}
}
test9('fuga9');

一見混乱しそうだけど、fcは内側の関数を呼びだそうとしてるので問題なし。
// fuga9 hoge10と出力
function test10(){
return function (i){
console.log(i);
console.log('hoge10');
};
}
var fc = test10();
fc('fuga10');

クロージャーの良さはグローバル変数を多用してると気づかない。
漠然とグローバル変数は遅いという認識だったけど、実際ベンチマークをとってる記事とかをみると確かに遅い。
本題と関係ないけど、重いとか遅いとかってのは主観とかスペックとかにもよるし、そもそも多少の遅さより開発の速度を優先せんとダメな場合もあるのでどれくらい重いとか遅いというのを数値化するのは重要。

0

nginx

nginxを入れてPHPも動くようにしたときのメモ。
nginxは何かと一言でいうと軽いwebサーバー。

# yum --enablerepo=epel,remi install nginx
でとりあえずnginxをインストール。

/etc/nginx/nginx.conf を編集
(apacheでいうところのhttpd.conf)

ポートを指定
listen 80;

listen 8080;

ドキュメントルートを指定
root /usr/share/nginx/html;

root /home/www/html;

# /etc/init.d/nginx restart
でとりあえずhtmlは扱えるようになる

http://localhost:8080/
表示された。

次にPHPを扱えるようにする。
公式サイトの説明ではfastCGIを使ったら良いとの事なのでそれに従う。
fastCGIのプロセス管理もdaemontoolsではなく、spawn-fcgiというものを使う。
nginxからではfastCGIの起動ができない。

spawn-fcgiはlighttpdの付属としてインストールできるらしいので、lighttpdごとインストールしてしまう。

# yum --enablerepo=epel,remi install lighttpd lighttpd-fastcgi
 
# /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -C 2 -f /usr/bin/php-cgi

以下の一行がでたら無事起動してる。
spawn-fcgi: child spawned successfully: PID: 24589

9000というポートを指定してるけど、これはnginxとの通信に使うものなので8080にしてはダメ。
ユーザー名もnginxと合わせてnginxとしておく。

nginx.conf を再度設定する。

location / {
index index.html index.htm;
root /home/www/html;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME /home/www/html/$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
}

# /etc/init.d/nginx restart

これで、http://localhost:8080/hoge.php 無事表示できるようになった。
phpはapacheで動かすより遅いけど特に気にならない程度。
session周りとかパーミッションの変更したりが必要なはずだけど今回はベンチマーク取りたいだけなのでとりあえず無視。

0

CakePHPでルーティング

今までオレオレフレームワークを使ってきたけど、結局のところプロジェクト全体ではOSSのフレームワークを使って処理の重い所だけ、別途作成予定のオレオレ軽量フレームワークを使うのが一番開発効率がいい気がしてきた。

という事で最近cakePHPをちょこちょこ触ってます。
今回はずっと気になってたcakephpのルーティングについてのメモ。

CakePHPのルーティングを何も分からずcakephpで作ってるとURLがこんな感じに一階層ものばかりになってしまいます。

  • http://hoge.com/profiles/add
  • http://hoge.com/profiles/edit
  • http://hoge.com/profiles/list

もちろんコンテンツの内容によって以下ように2階層目以下も使って表示させたいわけで、そういう時はroutes.phpに記述していきます。

  • http://hoge.com/mypage/profiles/add
  • http://hoge.com/mypage/profiles/edit
  • http://hoge.com/mypage/profiles/list

app/config/routes.php
Router::connect('/mypage/profiles/add', array('controller' => 'profiles', 'action' => 'add'));
Router::connect('/mypage/profiles/edit', array('controller' => 'profiles', 'action' => 'edit'));
Router::connect('/mypage/profiles/list', array('controller' => 'profiles', 'action' => 'list'));

と、一つ一つ書いていってもいいし:actionを使ってワイルドカードのようにも扱えます。
Router::connect('/mypage/profiles/:action', array('controller' => 'profiles'));

今後主とするフレームワークをどれにするかかなり迷い中。
一番手になじんでるcakephp、なんとなく恰好良いsymfony、今ならあえてLithiumか。

0

evernoteを晒す

はじめに書いておくけど、全然evernoteの良さを最大化できてない使い方です。だいぶ緩い使い方です。
ノートブックとタグを駆使して名刺をスキャンして、食べた物を取り込んで、ライフログだよ!みたいなのは全然ないです。そういうのをみたい時はこことかここがきっと参考になります。
ただ友人にどう使えばいいのか分からないといわれたので参考までに。こんな低次元な使い方でも2年近く使い続けれるというのが伝われば幸いです。


広告枠からもわかるように無料ユーザーです。困った事はないです。
基本的にwebクリップ8割で残りは後述にもあるような下書き用として使っています。
現在は2009年の5月から使い初めて約800のタイトルです。いらないものはたまに消します。
ノートブックは3つ、タグは20くらいあります。ノートブックはどんどん減ってきてこの数字。逆にタグは少しずつ増えていってます。
このノートブックとタグの使い分けは散々悩んでる時に、どこかのブログでノートブックはあまり使わない、タグですべて管理するという記事をみて真似してみたところ一番しっくりきたのでそのままにしています。
外枠はノートブックで内枠がタグといった感じです。
ノートブックは、

  • メモ(すぐ消す)
  • 一般

以上3つ。なんともセンスのないノートブックです。
9割のアイテムは「一般」に分類されています。
「飯」は食べるところで悩んだ時用に近所の美味しお店のブログ記事をクリップしています。
「メモ」はブログや長文メールの下書きに使っています。
この3つで全然不自由しません。

タグは画面が切れてるけどもう少し下に伸びます。
ほんと思ったままの言葉をタグにしてるので、新たなアイテムにタグつけるときも数文字入力後オートコンプリートでだいたい補完されます。
タグは複数付与できるけど、たまに2つ付ける程度でほとんど一つです。
タグの内容はみたまんまで特に説明するほどのものでもないです。
todoのタグはチェックボックスのついたものがほとんどです。他にタスク管理ツールみたいなのは特に使ってないのでevernoteのチェックボックスで簡易的なタスク管理を行っています。
これも特に時系列にしたり多段化したりはしていません。

後、色々意識していること。

  • 不要になったアイテムは捨てる
  • コードは書かない
  • 気が向いたらタグ整理
  • 検索用に適当な単語を挿入

といった具合に、メモ帳に毛の生えた様な使い方しかしてないけどevernoteの恩恵は十分に受けることができます。

0

明けましておめでとう

あけましておめでとうございます。
2010年本業は良くも悪くもソーシャルアプリ一色の年でした。
友だちの少ない私には、ソーシャルアプリの楽しさがイマイチ理解できぬままだったけど、ソーシャルアプリをホストするインフラ(EC2)や負荷分散は非常に興味深いものでした。

プライベートはまあまあ充実してたと思う。
去年の年始に抱負みたいのを書いたので、なんとなく読み返してみた。

人と会いまくる
これは一昨年よりは人に会う機会に恵まれたもの年の中頃、IT飲○会といういってから、色んな意味で衝撃を受けこの意識が縮小してしまった。
会えばいいってものじゃないけど、今年も誘われた断らないをモットーに人に会っていく。

朝早く起きる/会社を早くでる

前者は完全に1月で失速し以後上向く事はなかった。
これは今年はしない。10分くらい早く起きるくらいにしとこう。
後者は少し早くでてコーヒー屋でコード書いたり、子供の世話したりとやってみたけどあんまり満足いくものではなかった気がする。
そもそもこれは抱負でも目標でもない気がするけど、一応頭の片隅に置いておく。

そして、今年の抱負を再設定してみた。

プライベートワークは変な構成で作る
sinatra、node.js、GAE等々触ってみたいけど結局これらはあくまでサービスを作るためのツールであり手段であるので、これらをマスターすることに重きを置くのではなく何かを作る過程でマスターする。

2chまとめサイトは(あまり)みない
時間の無駄。サエコが一千万円の養育費がどうのこうとかほんとどうでもいいです。
フリーで働いてる時にお昼のワイドショー14時から16時まで観てた時期を思い出してしまうのでもうダラダラ2chまとめサイトをみるのをやめる。

どうすれば儲かるかどんなサービスを作れば人気が出るかを考える癖と時間を作る
これもフリーで働いてる頃は常に意識してたけどどんどん薄れてきてる。考えるのが面倒と思う事すらあったのでこれを改善する。

技術書を読む
自意識過剰にならない。底辺の俺は本を読む。

気軽にコードを書く
perlの牧さんがバス停のベンチや在来線の電車の中でコード書いてる姿をみて衝撃を受けた。
真似る。

たまに夜走る
最近腰痛が半端ないので生活習慣を変えて回復を目指す。
12月くらいから初めて何となく走る楽しさが分かりかけてきたので引き続きがんばる。

子供にいろんな経験をさせる
物心ついてくる頃なので、色々経験させてやりたい。
まずは天体観測。