2012年5月31日木曜日

JSX触ってみた



インストール


環境

CentOS6


node.jsとnpm

node.jsは公式サイトからソースDL
普通に、./configure, make, sudo make installで入ります。

次にnpm
curl http://npmjs.org/install.sh | sudo sh


jsx本体

git clone https://github.com/jsx/JSX.git
make setupで、nodeモジュールとperlモジュールが入る。


サンプルを動かす


make web
make server
とすると、サーバーが起動してブラウザ上でサンプルが動かせる。


CUIで動かす


jsx --run hoge.jsx


ドキュメント


ここを一通り読んだ
あわせてtoggetter



  • CUIで最初に実行されるのはmain関数(最初に実行される関数のことをなんて表現するんだっけ、、、)



jsx --test foo.jsx って書くと foo.jsx の(プライベートクラスである) _Test クラスの test で始まる関数が実行されて TAP 形式で集計する



とのことなので、指定しないときのデフォルトが_Mainクラスのmain関数ってことですね。





    • 基本的に文字や数値などの組み込み型は、変更不可だし、undefinedも許されない

    • 文字列の配列string[]やDate、functionは変更可。

    • MayBeUndefined型が追加されている。




  • 関数

    • 引数が異なる同じ名前の関数が存在できる。引数でどの関数が実行されるか変わる。





感想


思った以上にjava likeだった。
ところで、型を表示するのってどうすればいいのかな。


追記


string(nullにならない)とString(nullになり得る)の違いがあって元々JSの仕様だとか。





2012年5月30日水曜日

daemontools



以下Ubuntuの場合。
CentOSの場合は、こちら


インストール



$ sudo apt-get install daemontools daemontools-run svtools
$ sudo reboot # svscanを起動するため再起動



設定


/service以下にプロジェクトと同じ名前のディレクトリを作成。
(logをとる場合、一旦 .pj名のようにドットを入れておいて、daemontoolsに認識されないようにしておいてlog/runも準備してから、renameする。このタイミングでしかsuperviseを作ってくれないみたい。)

しかしubuntuは/etc/service/だった。
/etc/service/サービス名/runを作成。このrunはプロジェクトの中に書いておいて、それのシンボリックリンクにする。


log設定


以下を作成。
/etc/service/サービス名/log/run
/etc/service/サービス名/log/main/

runの中身は、



#!/bin/sh
exec setuidgid logadmin multilog t s1000000 n100 ./main


ユーザも作成しておく。
sudo /usr/sbin/useradd -s /sbin/nologin -d /dev/null logadmin
あとは各ディレクトリの権限をlogadminが書き込めるようにしておく。

以下でログ監視。
tail -f /etc/service/PJ_name/log/main/current | tai64nlocal


動作確認


ps auxf で見てみる。
readproctitle service errors: ...ile does not exist?supervise: fatal
エラーでてるけど、正常に動く、、、はて。
killしてみて、異なるPIDで復活してたので、OK。

追記
http://tech.dclog.jp/2010/12/daemontools.htmlによると、
readproctitleは一度エラーメッセージを出すと、ずっと残るようだ。
メッセージクリア用のコマンドを用意して、消したいときに消せるようにする。

/service/clearmsg/run



#! /bin/bash
yes '' | head -4000 | tr '\n' .


touch /service/clearmsg/down #普段は実行させない
svc -o /service/clearmsg #一度だけ実行





ファイル監視で再起動



今さら感満載。


コマンド


plackup -r でlib以下を監視。それ以外なら-Rオプション。


CPU使用率を下げる


監視は有名所の、Filesys::Notify::Simpleを使用。これは以下を入れておかないと、ディレクトリ以下をフルスキャンするので、以下のxsモジュールを入れておくとCPU使用率が下がる。



  • linux

    • Linux::Inotify2



  • mac

    • Mac::FSEvents





そもそもリクエスト時だけ再起動する


再起動のモジュールをLオプションで指定できるので、shotgunを入れておくと、ファイル変更時ではなく、リクエスト時に再起動がかかる。
plackup -L Shotgun

http://d.hatena.ne.jp/sugyan/20100404/1270320069


関係ないけど、以下で、psgiの仕様にそってるかチェックできるらしい。
enable 'Lint';