関数とオブジェクト

Firebugのコンソールで実行

function func_or_obj () {
    this.arg = 1;
    return this;
}

// オブジェクト生成
var obj  = new func_or_obj();
//関数として実行
var func_rtn = func_or_obj();

console.log(obj.arg);      // 1
console.log(func_rtn.arg); // 1

console.log(obj);      // Object { arg = 1 }
console.log(func_rtn); // Window ....

//関数じゃないのでエラー
//var obj_rtn = obj(); 

ポイント

  • function で定義された関数は new することでオブジェクトになる
  • thisについて
    • newした場合は、これから生成されるオブジェクトを指す(今回はobj)
    • 関数呼び出しの場合は関数を呼び出したオブジェクトを指す(今回はwindow)

[lighttpd] lighttpd + fcgi で perlする

  • 必要なもの lighttpd + fcgi + libpcre
  • 全てrootにて作業。

fcgi

http://www.fastcgi.com/dist/から取得してインストール

wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
tar zxvf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make
make install

libpcre

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/から取得してインストール

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.6.tar.gz
tar zxvf pcre-7.6.tar.gz
cd pcre-7.6
./configure
make
make install

lighttpd

http://www.lighttpd.net/download/から取得して、/usr/local/lighttpdにインストール。なるべくapacheに近いディレクトリ構成にするために、lighttpd.confの設定も書き換える。

wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
tar zxvf lighttpd-1.4.19.tar.gz
cd lighttpd-1.4.19
./configure
(省略)
configure: error: bzip2-headers and/or libs where not found,
install them or build with --without-bzip2
./configure --without-bzip2 --prefix=/usr/local/lighttpd
make
make install
mkdir /usr/local/lighttpd/conf
mkdir /usr/local/lighttpd/htdocs
mkdir /usr/local/lighttpd/logs
cp doc/lighttpd.conf /usr/local/lighttpd/conf/
vi /usr/local/lighttpd/conf/lighttpd.conf
diff doc/lighttpd.conf /usr/local/lighttpd/conf/lighttpd.conf
40c40
< server.document-root        = "/srv/www/htdocs/"
---
> server.document-root        = "/usr/local/lighttpd/htdocs/"
43c43
< server.errorlog             = "/var/log/lighttpd/error.log"
---
> server.errorlog             = "/usr/local/lighttpd/logs/error.log"
119c119
< accesslog.filename          = "/var/log/lighttpd/access.log"
---
> accesslog.filename          = "/usr/local/lighttpd/logs/access.log"
  • bzip2がないって起こられたので--without-bzip2付けて再度configure

起動ファイルコピーと書き換え
/usr/local/lighttpd以下にconfファイル、/etc/initd/以下に起動用のスクリプトをコピーする。

cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd
vi /etc/init.d/lighttpd
diff doc/rc.lighttpd.redhat /etc/init.d/lighttpd
25c25
<       LIGHTTPD_CONF_PATH="/etc/lighttpd/lighttpd.conf"
---
>       LIGHTTPD_CONF_PATH="/usr/local/lighttpd/conf/lighttpd.conf"
29c29
< lighttpd="/usr/sbin/lighttpd"
---
> lighttpd="/usr/local/lighttpd/sbin/lighttpd"
  • 起動用スクリプトは、lighttpd本体のパスと設定ファイルのパスを自分の環境に合わせて書き換えておく

lighttpd起動

適当な内容のhtmlファイルを作って/usr/local/lighttpd/htdocs/にindex.htmlとして置き、ブラウザからhttp://hostname/にアクセスして、書いた内容が表示されればOK。

vi /usr/local/lighttpd/htdocs/index.html
chmod 744 /usr/local/lighttpd/htdocs/index.html
/etc/init.d/lighttpd start
(失敗した)
/etc/init.d/lighttpd status
lighttpd lighttpd dead but subsys locked
rm /var/lock/subsys/lighttpd
/etc/init.d/lighttpd start
  • statusすると「lighttpd lighttpd dead but subsys locked」と表示されうまく起動できないので、/var/lock/subsys/lighttpdを削除して、再度起動してみたら無事起動した

fcgi のプロセスを立てる

再度/usr/local/lighttpd/conf/lighttpd.confを編集して、必要なモジュールとfcgi関連の設定を行う。http://host/fcgi/index.fcgiにアクセスして「test」が表示されればOK。

cpan install FCGI
mkdir /var/run/lighttpd
mkdir /usr/local/lighttpd/fcgi
cp /usr/local/lighttpd/conf/lighttpd.conf /usr/local/lighttpd/conf/lighttpd.conf.bak
vi /usr/local/lighttpd/conf/lighttpd.conf
diff /usr/local/lighttpd/conf/lighttpd.conf.bak /usr/local/lighttpd/conf/lighttpd.conf
17c17
< #                               "mod_alias",
---
>                                 "mod_alias",
24c24
< #                               "mod_fastcgi",
---
>                                 "mod_fastcgi",
213,220c213,220
< #fastcgi.server             = ( ".php" =>
< #                               ( "localhost" =>
< #                                 (
< #                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",
< #                                   "bin-path" => "/usr/local/bin/php-cgi"
< #                                 )
< #                               )
< #                            )
---
> fastcgi.server             = ( ".fcgi" =>
>                                ( "localhost" =>
>                                  (
>                                    "socket" => "/var/run/lighttpd/fastcgi.socket",
>                                    "bin-path" => "/usr/local/lighttpd/fcgi/index.fcgi"
>                                  )
>                                )
>                             )
309a310,312
> ## mod_alias
> alias.url = ("/fcgi/" => "/usr/local/lighttpd/fcgi/" )
> 
vi /usr/local/lighttpd/fcgi/index.fcgi
chmod 744 /usr/local/lighttpd/fcgi/index.fcgi

index.fcgi

#!/usr/bin/perl

use FCGI;

eval {

    my $req = FCGI::Request();
    while ($req->Accept() >= 0) {
        print "Content-type:text/html\n\n";
        print "TEST";
    }
    continue {
        $req->Finish();
    }
};
if ($@) {
    die $@;
}

dankogaiヒゲを切る!?

404 Blog Not Found のエントリーに「私はこうしてヒゲを切りました」とありました。いったい何があったんだろうと、読んでみる。

これ、定性的には事実なのかも知れないけど、定量的に事実かというと、

一向にヒゲの話しが出てこないが、最後のオチだろうかと思っていた矢先ヒゲじゃなくてクビだと気が付いた。orz

Windowsをルーターに

Routing and Remote Accessというサービス(通称 google:RRAS])を使うとwindowsがルーターになる。こんな感じで、[google:netshコマンドを使って色々できるっぽいです。

C:\>netsh
netsh>routing
netsh routing>dump
# ルーティング構成
pushd routing
.....
netsh routing>

coLinuxのネットワーク周りの設定をいじってる時に発見したもので、windowsの裏に、いわゆるブロードバンドルータとは別のセグメントを作って、そのセグメントへ外部からアクセスできるようになる模様。まだ試していないけど。

サービス設計の上手さ

髪を切りに行った際、美容師さんから

  • 携帯から予約できる
  • カット代金の10%がポイントとして溜まる

と言われサロンマイルというサービスに入会しました。このサービスは、予約サービス+ポイントサイトのような雰囲気ですが、どのようにして収益を上げているのでしょうか。少し気になりますね。

儲ける仕組みはあとで調べるとして、ここで感じたのはこのサービスにおいては、以下の2点がいいバランスでデザインされているなということでした。

  • 予約業務の削減
  • 客に使ってもらう仕組み

このシステムが導入されることにより、美容室側からすれば予約電話を受ける必要が無くなり、雑務が削減されるわけです。

で、その作業は客が負担しているはず。だけど、いつでも気兼ねなく、電話口で会話することなく、たとえ夜中でも予約できることなどを考えたら、そんな負担してるって気持ちにならない。さらに予約することでポイントが増えたりもする。「これは嬉しいぞ」とまったく逆の心境になるわけです。

ここの仕組みのポイントは

  • 作業の分散化
  • コミニケーション負荷の軽減

だと思います。作業の分散化は、チリはチリのままで居てくれよと。積もって山になってくれるなよと。小さな負荷であればユーザーに負わせてしまうことです。1件の予約電話で行う予約業務は小さくても、1日に100件の予約が入れば大変な作業になってしまうでしょう、その1件1件をユーザー主体で行ってもらうことで、作業は分散化されます。

作業コミニケーション負荷の軽減は、電話口でおしゃべりすることに関する認知的な負荷(大げさな言い方だけど、得体の知れない相手と電話口で話すという行為は少なからずエネルギーを使う)を軽減することです。さらに付け加えると、WEBの操作は電話に比べ、人目を気にすることなく行えることもコミニケーション負荷削減と言っていいと思います。でも年代や習慣によって、認知的な負荷の具合は変わると思いますが、普通にWEBを使いなれている人々にとっては電話よりWEBの方が明らかに楽でしょう。

記憶の片鱗

もの忘れが一段とひどくなってきたました。記憶を外部メディアにスクラップしておかないと何だか困ったことになりそうだなと危機感を感じて久しぶりにブログの編集ページを開きました。

漠然と危機感を感じたものの、さて何書こう?と思い、懐かしさ半分、昔のエントリーをチラ見してみると。。。なるほどなと考えさせられることがあります。内容云々ではなく、その姿勢。思ったことを突き詰めて考えて1つのエントリーとして書いてたりするのです。

さすがにもうそんなスタイルでは書けないなと思い、学生時代の豊富な時間が羨ましく思えます。今後は、まとまりがなくともメモ程度と割り切って、その日の印象的な思考を文章にしてみることからはじめようと思います。