2014年7月31日木曜日

非同期通信 → コールバック実装 → Toastを表示する(ここでツマッタのでメモ)


非同期通信で画像を登録



コールバックonCompleteきた



Toast表示 !!!
ん?あれ表示されないし、intentも飛ばされない…orz



android特有でUIスレッド以外のスレッドではUIを操作することはできないことは、前調べた時に知っていたので handler.post() を使用して投げようと思ったところ…
UIのスレッドを特定すればいいのかわからず右往左往 (*ω*;)

調べてみたところ、こんな関数を発見!!

Activity#runOnUiThread()



UIのスレッドに投げてくれる便利な関数がActivityに用意されていました。
さっそく試してみる…


getActivity().runOnUiThread( new Runnable(){
         @Override
         public void run() {
               // TODO Auto-generated method stub
                  Toast.makeText(
                      getActivity(),
                      R.string.regist_complete,
                      Toast.LENGTH_SHORT).show();
                  Intent intent = new Intent( getActivity(), ******** );
                  getActivity().startActivity(intent);
          }
});



やったーーーー表示された!
遷移した!!\(^ω^)/

めでたしめでたいし。やっと次へ進めます。

以上です(・ω・)


■参考サイト
http://visible-true.blogspot.jp/2011/11/activityrunonuithreadrunnable.html


ほんと助かりました。アリガトウございます m(。_。)m

2014年7月30日水曜日

PHPによるセールスフォースAPI連携2(オブジェクト作成/データ登録)


1.セールスフォースでオブジェクトを新規作成する

1.1. 「スキーマビルダ」をクリックします。



































1.2. 「オブジェクト」タブで登録済みのオブジェクトが確認できます。




























 
1.3.  左カラムの「要素」タブを選択し、「オブジェクト」をドラック&ドロップするとオブジェクトが新規作成されます。




























1.4. 新規オブジェクト作成画面で、必要項目を登録します。







































1.5.オブジェクトが作成されます。


































1.6. オブジェクトに登録されているデータを確認するために、タブの設定を行います。
「設定」→「作成」→「タブ」「カスタムオブジェクトタブ」「新規」を押します。


1.7. オブジェクトを選択し、「次へ」を押して行きます。




















1.8. 登録が完了すると、ヘッダメニューにオブジェクト名のリンクが表示されます。






1.9. オブジェクト名のリンクをクリックすると、下記にデータが表示されます。(データが登録されると表示されます。)


2. PHPプログラムからデータをインサートする。

2.1. SQLで使用する、API参照名、項目名を調べる。
「設定」→「作成」→「オブジェクト」→「オブジェクト名」を押す。






















































2.2. プログラムを作成する。

  
<?php

// Toolkitを読込みます。
require_once("./soapclient/SforcePartnerClient.php");

// 事前に必要な情報を宣言します。

// 今回は特定のセールスフォース組織に依存しないような場合に利用する
// Partner WSDL ファイルを利用します。
define("PARTNER_WSDL_FILE", "./configs/partner.wsdl.xml");

// セールスフォースへAPI接続する場合、接続元のIPアドレス許可が必要となりますが、
// 代替手段として、今回はセキュリティトークンを発行してIPアドレス許可の設定はスキップします。
define("SECURITY_TOKEN", "************************");

// API でログインするセールスフォースのアカウントです。
define("LOGIN_ID", "*******@***.**.**");

// パスワードの後ろにセキュリティトークンを付けます。
define("LOGIN_PASS", "**********" . SECURITY_TOKEN);


// 接続用クラスを生成します。
$sforce_connection = new SforcePartnerClient(); 
$soap_client = $sforce_connection->createConnection(PARTNER_WSDL_FILE, null);

echo "<pre>";

try {
    // セールスフォースへログインを実行します。
    $login = $sforce_connection->login(LOGIN_ID, LOGIN_PASS);
    var_dump($login);

} catch (Exception $e) {
    var_dump($e);
}

// 追加するデータは stdClass を利用して作成します。
$insert_data = new stdClass();
$insert_data->type = "test01__c";
$insert_data->fields = array(
"Name" => "あいうえお", 
);
try {
$result = $sforce_connection->create(array($insert_data));
var_dump($result);

} catch (Exception $e) {
var_dump($e);
}

// 通常の SQL と大きく変わりませんが、少し独特な個所がありますので徐々に慣れていきましょう。
try {
$query = "SELECT id, name FROM test01__c";
$result = $sforce_connection->query($query);
$parse_result = get_object_vars($result);
var_dump($parse_result);

} catch (Exception $e) {
var_dump($e);
}


echo "<br />END</pre>";

?>


実行結果
 
array(1) {
  [0]=>
  object(stdClass)#9 (2) {
    ["id"]=>
    string(18) "a041000000TvX03AAF"
    ["success"]=>
    bool(true)
  }
}
array(5) {
  ["queryLocator"]=>
  NULL
  ["done"]=>
  bool(true)
  ["records"]=>
  array(1) {
    [0]=>
    object(stdClass)#10 (3) {
      ["type"]=>
      string(9) "test01__c"
      ["Id"]=>
      array(2) {
        [0]=>
        string(18) "a041000000TvX03AAF"
        [1]=>
        string(18) "a041000000TvX03AAF"
      }
      ["any"]=>
      string(34) "あいうえお"
    }
  }
  ["size"]=>
  int(1)
  ["pointer"]=>
  int(0)
}


2.3. 登録データを確認する。
















2014年7月29日火曜日

PHPによるセールスフォースAPI連携1(準備)

1.セールスフォース(Developer Edition)の準備

1.1.下記のサイトでセールスフォース(Developer Edition)の登録を行います。

https://developer.salesforce.com/





















 1.2. 「サインアップ」からページを開き、必要項目を入力し「サインアップ」を押します。








 1.3. 登録したメールアドレス宛てにメールが届きます。URLをクリックしてパスワード設定を行います。





 1.4. セールスフォースにログインします。

https://login.salesforce.com/























1.5. 必要に応じて携帯確認番号の登録を行います。
























1.6. セールスフォースにログインされます。






























2. セールスフォースへアクセスする外部サーバの準備

2.1. PHPがインストールされている外部サーバに SoapClien をインストールします。


# php -v
PHP 5.3.3 (cli) (built: Jul  3 2012 16:53:21)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
# php -m | grep soap
# yum install php-soap
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                                                                      | 3.7 kB     00:00
base/primary_db                                                                                           | 4.4 MB     00:03
extras                                                                                                    | 3.4 kB     00:00
extras/primary_db                                                                                         |  19 kB     00:00
updates                                                                                                   | 3.4 kB     00:00
updates/primary_db                                                                                        | 4.2 MB     00:03
vz-base                                                                                                   |  951 B     00:00
vz-base/primary                                                                                           | 1.3 kB     00:00
vz-base                                                                                                                      3/3
vz-updates                                                                                                |  951 B     00:00
vz-updates/primary                                                                                        | 2.2 kB     00:00
vz-updates                                                                                                                   8/8
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package php-soap.x86_64 0:5.3.3-27.el6_5 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-27.el6_5 for package: php-soap-5.3.3-27.el6_5.x86_64
--> Running transaction check
---> Package php-common.x86_64 0:5.3.3-14.el6_3 will be updated
--> Processing Dependency: php-common = 5.3.3-14.el6_3 for package: php-gd-5.3.3-14.el6_3.x86_64
--> Processing Dependency: php-common = 5.3.3-14.el6_3 for package: php-pdo-5.3.3-14.el6_3.x86_64
--> Processing Dependency: php-common = 5.3.3-14.el6_3 for package: php-5.3.3-14.el6_3.x86_64
--> Processing Dependency: php-common = 5.3.3-14.el6_3 for package: php-xml-5.3.3-14.el6_3.x86_64
--> Processing Dependency: php-common = 5.3.3-14.el6_3 for package: php-cli-5.3.3-14.el6_3.x86_64
---> Package php-common.x86_64 0:5.3.3-27.el6_5 will be an update
--> Running transaction check
---> Package php.x86_64 0:5.3.3-14.el6_3 will be updated
---> Package php.x86_64 0:5.3.3-27.el6_5 will be an update
--> Processing Dependency: libssl.so.10(libssl.so.10)(64bit) for package: php-5.3.3-27.el6_5.x86_64
--> Processing Dependency: libcrypto.so.10(libcrypto.so.10)(64bit) for package: php-5.3.3-27.el6_5.x86_64
--> Processing Dependency: libcrypto.so.10(OPENSSL_1.0.1)(64bit) for package: php-5.3.3-27.el6_5.x86_64
---> Package php-cli.x86_64 0:5.3.3-14.el6_3 will be updated
---> Package php-cli.x86_64 0:5.3.3-27.el6_5 will be an update
---> Package php-gd.x86_64 0:5.3.3-14.el6_3 will be updated
---> Package php-gd.x86_64 0:5.3.3-27.el6_5 will be an update
--> Processing Dependency: libjpeg.so.62(LIBJPEG_6.2)(64bit) for package: php-gd-5.3.3-27.el6_5.x86_64
---> Package php-pdo.x86_64 0:5.3.3-14.el6_3 will be updated
---> Package php-pdo.x86_64 0:5.3.3-27.el6_5 will be an update
---> Package php-xml.x86_64 0:5.3.3-14.el6_3 will be updated
---> Package php-xml.x86_64 0:5.3.3-27.el6_5 will be an update
--> Running transaction check
---> Package libjpeg.x86_64 0:6b-46.el6 will be obsoleted
--> Processing Dependency: libjpeg = 6b-46.el6 for package: libjpeg-devel-6b-46.el6.x86_64
---> Package libjpeg-turbo.x86_64 0:1.2.1-3.el6_5 will be obsoleting
---> Package openssl.x86_64 0:1.0.0-20.el6_2.5 will be updated
--> Processing Dependency: openssl = 1.0.0-20.el6_2.5 for package: openssl-devel-1.0.0-20.el6_2.5.x86_64
---> Package openssl.x86_64 0:1.0.1e-16.el6_5.14 will be an update
--> Running transaction check
---> Package libjpeg-devel.x86_64 0:6b-46.el6 will be obsoleted
---> Package libjpeg-turbo-devel.x86_64 0:1.2.1-3.el6_5 will be obsoleting
---> Package openssl-devel.x86_64 0:1.0.0-20.el6_2.5 will be updated
---> Package openssl-devel.x86_64 0:1.0.1e-16.el6_5.14 will be an update
base/filelists_db                                                                                         | 5.9 MB     00:05
extras/filelists_db                                                                                       |  11 kB     00:00
updates/filelists_db                                                                                      | 2.5 MB     00:02
vz-base/filelists                                                                                         |  824 B     00:00
vz-updates/filelists                                                                                      | 3.0 kB     00:00
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================================================================
 Package                              Arch                    Version                             Repository                Size
=================================================================================================================================
Installing:
 libjpeg-turbo                        x86_64                  1.2.1-3.el6_5                       updates                  174 k
     replacing  libjpeg.x86_64 6b-46.el6
 libjpeg-turbo-devel                  x86_64                  1.2.1-3.el6_5                       updates                   96 k
     replacing  libjpeg-devel.x86_64 6b-46.el6
 php-soap                             x86_64                  5.3.3-27.el6_5                      updates                  140 k
Updating for dependencies:
 openssl                              x86_64                  1.0.1e-16.el6_5.14                  updates                  1.5 M
 openssl-devel                        x86_64                  1.0.1e-16.el6_5.14                  updates                  1.2 M
 php                                  x86_64                  5.3.3-27.el6_5                      updates                  1.1 M
 php-cli                              x86_64                  5.3.3-27.el6_5                      updates                  2.2 M
 php-common                           x86_64                  5.3.3-27.el6_5                      updates                  525 k
 php-gd                               x86_64                  5.3.3-27.el6_5                      updates                  107 k
 php-pdo                              x86_64                  5.3.3-27.el6_5                      updates                   75 k
 php-xml                              x86_64                  5.3.3-27.el6_5                      updates                  103 k

Transaction Summary
=================================================================================================================================
Install       3 Package(s)
Upgrade       8 Package(s)

Total download size: 7.2 M
Is this ok [y/N]: y
Downloading Packages:
(1/11): libjpeg-turbo-1.2.1-3.el6_5.x86_64.rpm                                                            | 174 kB     00:00
(2/11): libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64.rpm                                                      |  96 kB     00:00
(3/11): openssl-1.0.1e-16.el6_5.14.x86_64.rpm                                                             | 1.5 MB     00:01
(4/11): openssl-devel-1.0.1e-16.el6_5.14.x86_64.rpm                                                       | 1.2 MB     00:01
(5/11): php-5.3.3-27.el6_5.x86_64.rpm                                                                     | 1.1 MB     00:01
(6/11): php-cli-5.3.3-27.el6_5.x86_64.rpm                                                                 | 2.2 MB     00:01
(7/11): php-common-5.3.3-27.el6_5.x86_64.rpm                                                              | 525 kB     00:00
(8/11): php-gd-5.3.3-27.el6_5.x86_64.rpm                                                                  | 107 kB     00:00
(9/11): php-pdo-5.3.3-27.el6_5.x86_64.rpm                                                                 |  75 kB     00:00
(10/11): php-soap-5.3.3-27.el6_5.x86_64.rpm                                                               | 140 kB     00:00
(11/11): php-xml-5.3.3-27.el6_5.x86_64.rpm                                                                | 103 kB     00:00
---------------------------------------------------------------------------------------------------------------------------------
Total                                                                                            1.1 MB/s | 7.2 MB     00:06
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating   : php-common-5.3.3-27.el6_5.x86_64                                                                             1/21
  Updating   : openssl-1.0.1e-16.el6_5.14.x86_64                                                                            2/21
  Installing : libjpeg-turbo-1.2.1-3.el6_5.x86_64                                                                           3/21
  Updating   : php-cli-5.3.3-27.el6_5.x86_64                                                                                4/21
  Updating   : php-5.3.3-27.el6_5.x86_64                                                                                    5/21
  Updating   : php-gd-5.3.3-27.el6_5.x86_64                                                                                 6/21
  Installing : libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64                                                                     7/21
  Updating   : openssl-devel-1.0.1e-16.el6_5.14.x86_64                                                                      8/21
  Updating   : php-xml-5.3.3-27.el6_5.x86_64                                                                                9/21
  Updating   : php-pdo-5.3.3-27.el6_5.x86_64                                                                               10/21
  Installing : php-soap-5.3.3-27.el6_5.x86_64                                                                              11/21
  Cleanup    : php-5.3.3-14.el6_3.x86_64                                                                                   12/21
  Cleanup    : php-cli-5.3.3-14.el6_3.x86_64                                                                               13/21
  Cleanup    : php-gd-5.3.3-14.el6_3.x86_64                                                                                14/21
  Cleanup    : openssl-devel-1.0.0-20.el6_2.5.x86_64                                                                       15/21
  Erasing    : libjpeg-devel-6b-46.el6.x86_64                                                                              16/21
  Cleanup    : php-pdo-5.3.3-14.el6_3.x86_64                                                                               17/21
  Cleanup    : php-xml-5.3.3-14.el6_3.x86_64                                                                               18/21
  Cleanup    : php-common-5.3.3-14.el6_3.x86_64                                                                            19/21
  Erasing    : libjpeg-6b-46.el6.x86_64                                                                                    20/21
  Cleanup    : openssl-1.0.0-20.el6_2.5.x86_64                                                                             21/21
  Verifying  : php-xml-5.3.3-27.el6_5.x86_64                                                                                1/21
  Verifying  : php-cli-5.3.3-27.el6_5.x86_64                                                                                2/21
  Verifying  : php-5.3.3-27.el6_5.x86_64                                                                                    3/21
  Verifying  : php-gd-5.3.3-27.el6_5.x86_64                                                                                 4/21
  Verifying  : php-common-5.3.3-27.el6_5.x86_64                                                                             5/21
  Verifying  : php-pdo-5.3.3-27.el6_5.x86_64                                                                                6/21
  Verifying  : libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64                                                                     7/21
  Verifying  : openssl-devel-1.0.1e-16.el6_5.14.x86_64                                                                      8/21
  Verifying  : openssl-1.0.1e-16.el6_5.14.x86_64                                                                            9/21
  Verifying  : libjpeg-turbo-1.2.1-3.el6_5.x86_64                                                                          10/21
  Verifying  : php-soap-5.3.3-27.el6_5.x86_64                                                                              11/21
  Verifying  : php-common-5.3.3-14.el6_3.x86_64                                                                            12/21
  Verifying  : libjpeg-6b-46.el6.x86_64                                                                                    13/21
  Verifying  : openssl-devel-1.0.0-20.el6_2.5.x86_64                                                                       14/21
  Verifying  : php-xml-5.3.3-14.el6_3.x86_64                                                                               15/21
  Verifying  : openssl-1.0.0-20.el6_2.5.x86_64                                                                             16/21
  Verifying  : php-5.3.3-14.el6_3.x86_64                                                                                   17/21
  Verifying  : php-gd-5.3.3-14.el6_3.x86_64                                                                                18/21
  Verifying  : libjpeg-devel-6b-46.el6.x86_64                                                                              19/21
  Verifying  : php-cli-5.3.3-14.el6_3.x86_64                                                                               20/21
  Verifying  : php-pdo-5.3.3-14.el6_3.x86_64                                                                               21/21

Installed:
  libjpeg-turbo.x86_64 0:1.2.1-3.el6_5      libjpeg-turbo-devel.x86_64 0:1.2.1-3.el6_5      php-soap.x86_64 0:5.3.3-27.el6_5

Dependency Updated:
  openssl.x86_64 0:1.0.1e-16.el6_5.14       openssl-devel.x86_64 0:1.0.1e-16.el6_5.14       php.x86_64 0:5.3.3-27.el6_5
  php-cli.x86_64 0:5.3.3-27.el6_5           php-common.x86_64 0:5.3.3-27.el6_5              php-gd.x86_64 0:5.3.3-27.el6_5
  php-pdo.x86_64 0:5.3.3-27.el6_5           php-xml.x86_64 0:5.3.3-27.el6_5

Replaced:
  libjpeg.x86_64 0:6b-46.el6                                   libjpeg-devel.x86_64 0:6b-46.el6

Complete!
# /etc/init.d/httpd configtest
Syntax OK
# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]


2.2.phpinfo.phpにSoapClienが追加されます。

















3. セールスフォースにアクセスするための設定を行います。

3.1. 下記のサイトから、PHPのライブラリをダウンロードします。

https://developer.salesforce.com/page/Force.com_Toolkit_for_PHP







3.2. ダウンロードした 「Force.com-Toolkit-for-PHP-master.zip」を解凍し、「soapclient」を外部サーバにアップロードします。



















3.3. WSDLファイルをセールスフォースからダウンロードします。

「設定」→「開発」「API」「パートナーWSDLの生成」「名前を付けてリンク先を保存」
 ファイル名:「partner.wsdl.xml」




































3.4. 外部サーバに「configs」ディレクトリを作成して、保存した「partner.wsdl.xml」を、その中にアップロードします。











3.5. セキュリティトークンを発行します。

「私の設定」→「個人用」→「私のセキュリティトークンのリセット」→「セキュリティトークンのリセット」を押します。



3.6. メールでユーザ名とセキュリティトークンが送られてきます。




















3.7. テスト用のPHPのプログラムを作成します。

index.php




















<?php

// Toolkitを読込みます。
require_once("./soapclient/SforcePartnerClient.php");

// 事前に必要な情報を宣言します。

// 今回は特定のセールスフォース組織に依存しないような場合に利用する
// Partner WSDL ファイルを利用します。
define("PARTNER_WSDL_FILE", "./configs/partner.wsdl.xml");

// セールスフォースへAPI接続する場合、接続元のIPアドレス許可が必要となりますが、
// 代替手段として、今回はセキュリティトークンを発行してIPアドレス許可の設定はスキップします。
define("SECURITY_TOKEN", "************************");

// API でログインするセールスフォースのアカウントです。
define("LOGIN_ID", "*******@***.**.**");

// パスワードの後ろにセキュリティトークンを付けます。
define("LOGIN_PASS", "**********" . SECURITY_TOKEN);


// 接続用クラスを生成します。
$sforce_connection = new SforcePartnerClient(); 
$soap_client = $sforce_connection->createConnection(PARTNER_WSDL_FILE, null);

echo "<pre>";

try {
    // セールスフォースへログインを実行します。
    $login = $sforce_connection->login(LOGIN_ID, LOGIN_PASS);
    var_dump($login);

} catch (Exception $e) {
    var_dump($e);
}

echo "</pre>";

?>


実行結果
下記のような登録情報が出力されます。

   

    ["organizationName"]=>
    string(51) "会社名"

    ["userEmail"]=>
    string(17) "Eメールアドレス"

    ["userFullName"]=>
    string(13) "氏名"

    ["userName"]=>
    string(17) "Eメールアドレス"

    ["userTimeZone"]=>
    string(10) "Asia/Tokyo"

    ["userType"]=>
    string(8) "Standard"

    ["userUiSkin"]=>
    string(6) "Theme3"

参考サイト
http://lab.tricorn.co.jp/kid/4196

androidの画像URLから画像pathへ変換する


画像を保存し、POSTするために実体のパスが知りたくて調べた事をメモしますφ(・ω・)



 変換前 : content://media/external/images/media/706
 ↓
 変換後 : /storage/emulated/0/DCIM/100ANDRO/DSC_0092.jpg
そうそうこの形に変換したかったのです(・ω・)ノシわーぃわーぃ 変換の仕方は以下のとおりです ↓
  /*
     * Intent データから bitmapへ変換する
     * 
     */
    public static Bitmap convertBitmapByIntent( Activity activity, Intent data ){
        
        Bitmap bmp = null;
        InputStream stream = null;
        try {
            stream = activity.getContentResolver().openInputStream(
                    data.getData());
            bmp = BitmapFactory.decodeStream(stream);
        
            stream.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return bmp;
        
    }
 

  /*
     * intent から 画像パスを取得する(実体)
     */
    public static String getImagePath( Activity activity, Intent data ){
        
        if( data == null ){
            return "";
        }
        
        //android内画像URLからPATHに変換する
        ContentResolver cr = activity.getContentResolver();
        String[] columns = {MediaStore.Images.Media.DATA};
        Cursor c = cr.query(data.getData(), columns, null, null, null);
        c.moveToFirst();
        
        File fileContents = new File( c.getString(0) );
        
        return fileContents.getAbsolutePath();
    }
    

    /*
     * intent から 画像パスを取得する(実体)
     */
    public static String getImageName( Activity activity, Intent data ){
        
        if( data == null ){
            return "";
        }
        
        String imagePath = getImagePath( activity, data );
        
        String[] array = imagePath.split("/");
        
        int length = array.length;
        
        return array[length-1];//最後の情報を取得する
    }

こちらのサイトを参考にさせていただきました。 どうもありがとうございます(・ν・) http://www.android-navi.com/archives/android_1/_uri_path/

2014年7月14日月曜日

ListView onItemClick と 子ビューのonClickEventを拾う


ListView 内にButtonを置いた際にはまったのでメモします。


ListView自体のonItemClick [ onItemLongClick ]イベントが拾わなくなりました。orz


adapter内 ボタンに setFocusable(false) を設定するとうまくいきました(^ω^)ノシ

リスト内にフォーカスが奪われていたからきかなかったんですね…(・ω・)…


参考サイト
http://www.wildtree.jp/~araki/rakugaki/2012/02/listview-checkbox.html




バックグラウンドで動かす

今までテストでファオグランドで node.js を実行していました。

バックグラウンドで実行したいな~と思い、
単純にバックグラウンド実行用にコマンドの後ろに&をつけてやってみましたがうまくいかず(; ・`д・´) ナ、ナンダッテー!! (`・д´・ ;)

調べてみると、forever という node.js 用のデーモンマネージャーがあるそうです(゚∀゚)キタコレ!!

forever は npm を使ってインストールできるのでそちらからインストールを行います。

-gオプションをつけてグローバルインストールする(npm 1.0系の場合?)
# npm install forever -g
npm http GET https://registry.npmjs.org/forever
npm http 200 https://registry.npmjs.org/forever
npm http GET https://registry.npmjs.org/forever/-/forever-0.11.1.tgz
npm http 200 https://registry.npmjs.org/forever/-/forever-0.11.1.tgz
npm http GET https://registry.npmjs.org/flatiron
npm http GET https://registry.npmjs.org/colors
npm http GET https://registry.npmjs.org/cliff
npm http GET https://registry.npmjs.org/forever-monitor
npm http GET https://registry.npmjs.org/nconf
npm http GET https://registry.npmjs.org/nssocket
npm http GET https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/timespan
npm http GET https://registry.npmjs.org/watch
npm http GET https://registry.npmjs.org/utile
npm http GET https://registry.npmjs.org/winston
npm http GET https://registry.npmjs.org/optimist
npm http 200 https://registry.npmjs.org/colors
npm http GET https://registry.npmjs.org/colors/-/colors-0.6.2.tgz
npm http 200 https://registry.npmjs.org/cliff
npm http GET https://registry.npmjs.org/cliff/-/cliff-0.1.8.tgz
npm http 200 https://registry.npmjs.org/pkginfo
npm http GET https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz
npm http 200 https://registry.npmjs.org/timespan
npm http GET https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz
npm http 200 https://registry.npmjs.org/colors/-/colors-0.6.2.tgz
npm http 200 https://registry.npmjs.org/cliff/-/cliff-0.1.8.tgz
npm http 200 https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.0.tgz
npm http 200 https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz
npm http 200 https://registry.npmjs.org/forever-monitor
npm http GET https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.2.3.tgz
npm http 200 https://registry.npmjs.org/watch
npm http GET https://registry.npmjs.org/watch/-/watch-0.8.0.tgz
npm http 200 https://registry.npmjs.org/flatiron
npm http GET https://registry.npmjs.org/flatiron/-/flatiron-0.3.11.tgz
npm http 304 https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz
npm http 200 https://registry.npmjs.org/nconf
npm http 200 https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.2.3.tgz
npm http GET https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz
npm http 200 https://registry.npmjs.org/utile
npm http GET https://registry.npmjs.org/utile/-/utile-0.2.1.tgz
npm http 200 https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz
npm http 200 https://registry.npmjs.org/watch/-/watch-0.8.0.tgz
npm http 200 https://registry.npmjs.org/utile/-/utile-0.2.1.tgz
npm http 200 https://registry.npmjs.org/flatiron/-/flatiron-0.3.11.tgz
npm http 200 https://registry.npmjs.org/nssocket
npm http GET https://registry.npmjs.org/nssocket/-/nssocket-0.5.1.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz
npm http 200 https://registry.npmjs.org/winston
npm http GET https://registry.npmjs.org/winston/-/winston-0.7.3.tgz
npm http 200 https://registry.npmjs.org/nssocket/-/nssocket-0.5.1.tgz
npm http 200 https://registry.npmjs.org/winston/-/winston-0.7.3.tgz
npm http GET https://registry.npmjs.org/eventemitter2
npm http GET https://registry.npmjs.org/lazy
npm http GET https://registry.npmjs.org/deep-equal
npm http GET https://registry.npmjs.org/i
npm http GET https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/rimraf
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/broadway
npm http GET https://registry.npmjs.org/broadway
npm http GET https://registry.npmjs.org/prompt
npm http GET https://registry.npmjs.org/ps-tree
npm http GET https://registry.npmjs.org/director
npm http 200 https://registry.npmjs.org/deep-equal
npm http 200 https://registry.npmjs.org/i
npm http GET https://registry.npmjs.org/minimatch
npm http 200 https://registry.npmjs.org/ncp
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz
npm http GET https://registry.npmjs.org/watch/-/watch-0.5.1.tgz
npm http GET https://registry.npmjs.org/utile/-/utile-0.1.7.tgz
npm http GET https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.1.tgz
npm http GET https://registry.npmjs.org/i/-/i-0.3.2.tgz
npm http 304 https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz
npm http 200 https://registry.npmjs.org/eventemitter2
npm http GET https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz
npm http 200 https://registry.npmjs.org/rimraf
npm http GET https://registry.npmjs.org/eyes
npm http 304 https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/winston/-/winston-0.6.2.tgz
npm http GET https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz
npm http 200 https://registry.npmjs.org/minimist
npm http GET https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz
npm http GET https://registry.npmjs.org/cycle
npm http GET https://registry.npmjs.org/request
npm http GET https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/lazy
npm http GET https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz
npm http 200 https://registry.npmjs.org/async
npm http 200 https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.1.tgz
npm http 200 https://registry.npmjs.org/utile/-/utile-0.1.7.tgz
npm http 200 https://registry.npmjs.org/watch/-/watch-0.5.1.tgz
npm http GET https://registry.npmjs.org/ini
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz
npm http 200 https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz
npm http GET https://registry.npmjs.org/async/-/async-0.2.9.tgz
npm http 200 https://registry.npmjs.org/i/-/i-0.3.2.tgz
npm http 200 https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz
npm http 200 https://registry.npmjs.org/winston/-/winston-0.6.2.tgz
npm http 200 https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz
npm http 200 https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz
npm http 200 https://registry.npmjs.org/async/-/async-0.2.9.tgz
npm http 200 https://registry.npmjs.org/prompt
npm http 200 https://registry.npmjs.org/ps-tree
npm http GET https://registry.npmjs.org/prompt/-/prompt-0.2.11.tgz
npm http GET https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz
npm http 304 https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz
npm http 200 https://registry.npmjs.org/eyes
npm http GET https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http 200 https://registry.npmjs.org/broadway
npm http 200 https://registry.npmjs.org/cycle
npm http 200 https://registry.npmjs.org/director
npm http GET https://registry.npmjs.org/broadway/-/broadway-0.2.9.tgz
npm http GET https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz
npm http GET https://registry.npmjs.org/director/-/director-1.1.10.tgz
npm http 200 https://registry.npmjs.org/broadway
npm http 200 https://registry.npmjs.org/stack-trace
npm http GET https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz
npm http 200 https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz
npm http 200 https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz
npm http 200 https://registry.npmjs.org/ini
npm http 200 https://registry.npmjs.org/prompt/-/prompt-0.2.11.tgz
npm http 200 https://registry.npmjs.org/broadway/-/broadway-0.2.9.tgz
npm http GET https://registry.npmjs.org/ini/-/ini-1.2.1.tgz
npm http 200 https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz
npm http 200 https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz
npm http 200 https://registry.npmjs.org/director/-/director-1.1.10.tgz
npm http 200 https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz
npm http 200 https://registry.npmjs.org/ini/-/ini-1.2.1.tgz
npm http 200 https://registry.npmjs.org/request
npm http 200 https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/request/-/request-2.16.6.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.16.6.tgz
npm http GET https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz
npm http 200 https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz
npm http GET https://registry.npmjs.org/event-stream
npm http GET https://registry.npmjs.org/lru-cache
npm http GET https://registry.npmjs.org/sigmund
npm http GET https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http GET https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz
npm http GET https://registry.npmjs.org/rimraf/-/rimraf-1.0.9.tgz
npm http 304 https://registry.npmjs.org/lru-cache
npm http 304 https://registry.npmjs.org/sigmund
npm http 200 https://registry.npmjs.org/event-stream
npm http GET https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz
npm http 200 https://registry.npmjs.org/async/-/async-0.1.22.tgz
npm http 200 https://registry.npmjs.org/ncp/-/ncp-0.2.7.tgz
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-1.0.9.tgz
npm http 200 https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz
npm http GET https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.12.tgz
npm http GET https://registry.npmjs.org/winston/-/winston-0.7.2.tgz
npm http 200 https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.12.tgz
npm http 200 https://registry.npmjs.org/winston/-/winston-0.7.2.tgz
npm http GET https://registry.npmjs.org/read
npm http GET https://registry.npmjs.org/revalidator
npm http GET https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz
npm http 200 https://registry.npmjs.org/read
npm http 200 https://registry.npmjs.org/revalidator
npm http GET https://registry.npmjs.org/request/-/request-2.9.203.tgz
npm http GET https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http GET https://registry.npmjs.org/read/-/read-1.0.5.tgz
npm http GET https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz
npm http 200 https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz
npm http 200 https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz
npm http 200 https://registry.npmjs.org/request/-/request-2.9.203.tgz
npm http GET https://registry.npmjs.org/form-data
npm http GET https://registry.npmjs.org/hawk
npm http GET https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/cookie-jar
npm http 200 https://registry.npmjs.org/read/-/read-1.0.5.tgz
npm http GET https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/oauth-sign
npm http GET https://registry.npmjs.org/forever-agent
npm http GET https://registry.npmjs.org/tunnel-agent
npm http 200 https://registry.npmjs.org/pkginfo/-/pkginfo-0.2.3.tgz
npm http GET https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/qs
npm http 200 https://registry.npmjs.org/cookie-jar
npm http 200 https://registry.npmjs.org/aws-sign
npm http GET https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.2.0.tgz
npm http GET https://registry.npmjs.org/aws-sign/-/aws-sign-0.2.0.tgz
npm http 200 https://registry.npmjs.org/oauth-sign
npm http 200 https://registry.npmjs.org/form-data
npm http 200 https://registry.npmjs.org/forever-agent
npm http 200 https://registry.npmjs.org/tunnel-agent
npm http GET https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.2.0.tgz
npm http 200 https://registry.npmjs.org/node-uuid
npm http GET https://registry.npmjs.org/form-data/-/form-data-0.0.10.tgz
npm http 304 https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/forever-agent/-/forever-agent-0.2.0.tgz
npm http GET https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.2.0.tgz
npm http 200 https://registry.npmjs.org/hawk
npm http 304 https://registry.npmjs.org/qs
npm http 200 https://registry.npmjs.org/json-stringify-safe
npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz
npm http 200 https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.2.0.tgz
npm http 200 https://registry.npmjs.org/aws-sign/-/aws-sign-0.2.0.tgz
npm http GET https://registry.npmjs.org/hawk/-/hawk-0.10.2.tgz
npm http 200 https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.2.0.tgz
npm http GET https://registry.npmjs.org/qs/-/qs-0.5.6.tgz
npm http 200 https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.2.0.tgz
npm http GET https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-3.0.0.tgz
npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz
npm http 200 https://registry.npmjs.org/form-data/-/form-data-0.0.10.tgz
npm http 200 https://registry.npmjs.org/forever-agent/-/forever-agent-0.2.0.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.5.6.tgz
npm http 200 https://registry.npmjs.org/hawk/-/hawk-0.10.2.tgz
npm http 200 https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-3.0.0.tgz
npm http GET https://registry.npmjs.org/mute-stream
npm http 200 https://registry.npmjs.org/mute-stream
npm http GET https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz
npm http 200 https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm http GET https://registry.npmjs.org/combined-stream
npm http 200 https://registry.npmjs.org/combined-stream
npm http GET https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz
npm http 200 https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm http GET https://registry.npmjs.org/cryptiles
npm http GET https://registry.npmjs.org/hoek
npm http GET https://registry.npmjs.org/boom
npm http GET https://registry.npmjs.org/sntp
npm http GET https://registry.npmjs.org/delayed-stream
npm http 200 https://registry.npmjs.org/sntp
npm http GET https://registry.npmjs.org/sntp/-/sntp-0.1.4.tgz
npm http 200 https://registry.npmjs.org/cryptiles
npm http GET https://registry.npmjs.org/cryptiles/-/cryptiles-0.1.3.tgz
npm http 200 https://registry.npmjs.org/boom
npm http GET https://registry.npmjs.org/boom/-/boom-0.3.8.tgz
npm http 200 https://registry.npmjs.org/hoek
npm http 200 https://registry.npmjs.org/sntp/-/sntp-0.1.4.tgz
npm http GET https://registry.npmjs.org/hoek/-/hoek-0.7.6.tgz
npm http 200 https://registry.npmjs.org/cryptiles/-/cryptiles-0.1.3.tgz
npm http 200 https://registry.npmjs.org/delayed-stream
npm http GET https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz
npm http 200 https://registry.npmjs.org/boom/-/boom-0.3.8.tgz
npm http 200 https://registry.npmjs.org/hoek/-/hoek-0.7.6.tgz
npm http 200 https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz
npm WARN engine hawk@0.10.2: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine hoek@0.7.6: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine boom@0.3.8: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine cryptiles@0.1.3: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
npm WARN engine sntp@0.1.4: wanted: {"node":"0.8.x"} (current: {"node":"v0.10.28","npm":"1.4.9"})
/root/.nvm/v0.10.28/bin/forever -> /root/.nvm/v0.10.28/lib/node_modules/forever/bin/forever
/root/.nvm/v0.10.28/bin/foreverd -> /root/.nvm/v0.10.28/lib/node_modules/forever/bin/foreverd
forever@0.11.1 /root/.nvm/v0.10.28/lib/node_modules/forever
tqq watch@0.8.0
tqq colors@0.6.2
tqq pkginfo@0.3.0
tqq timespan@2.3.0
tqq optimist@0.6.1 (wordwrap@0.0.2, minimist@0.0.10)
tqq nssocket@0.5.1 (eventemitter2@0.4.14, lazy@1.0.11)
tqq utile@0.2.1 (deep-equal@0.2.1, rimraf@2.2.8, ncp@0.4.2, async@0.2.10, i@0.3.2, mkdirp@0.5.0)
tqq nconf@0.6.9 (ini@1.2.1, async@0.2.9, optimist@0.6.0)
tqq cliff@0.1.8 (eyes@0.1.8, winston@0.6.2)
tqq winston@0.7.3 (cycle@1.0.3, stack-trace@0.0.9, eyes@0.1.8, async@0.2.10, request@2.16.6)
tqq forever-monitor@1.2.3 (watch@0.5.1, minimatch@0.2.14, utile@0.1.7, ps-tree@0.0.3, broadway@0.2.9)
mqq flatiron@0.3.11 (optimist@0.6.0, director@1.1.10, prompt@0.2.11, broadway@0.2.9)
アプリケーションの起動では forever コマンドを利用して起動させます。

アプリケーションの起動
forever start node-chat-demo/app.js
アプリケーションの起動確認
# forever list
info:    Forever processes running
data:        uid  command                      script                forever pid   logfile                 uptime
data:    [0] qigP /root/.nvm/v0.10.28/bin/node node-chat-demo/app.js 21456   21458 /root/.forever/qigP.log 0:0:0:52.274
キタ――(゚∀゚)――!!

forever list で表示されたリストの[]で囲まれた数値がプロセス番号になります。
このプロセス番号を利用して、アプリケーションの停止を行います(´・∀・`)ヘー

アプリケーションの終了(forever stop プロセス番号)
# forever stop 0
info:    Forever stopped process:
data:        uid  command                      script                forever pid   logfile                 uptime
[0] qigP /root/.nvm/v0.10.28/bin/node node-chat-demo/app.js 21456   21458 /root/.forever/qigP.log 0:0:4:9.573
停止後に、アプリケーションの起動確認
# forever list
info:    No forever processes running
foreverコマンドのオプション確認
# forever -h
help:    usage: forever [action] [options] SCRIPT [script-options]
help:
help:    Monitors the script specified in the current process or as a daemon
help:
help:    actions:
help:      start               Start SCRIPT as a daemon
help:      stop                Stop the daemon SCRIPT
help:      stopall             Stop all running forever scripts
help:      restart             Restart the daemon SCRIPT
help:      restartall          Restart all running forever scripts
help:      list                List all running forever scripts
help:      config              Lists all forever user configuration
help:      set <key> <val>     Sets the specified forever config <key>
help:      clear <key>         Clears the specified forever config <key>
help:      logs                Lists log files for all forever processes
help:      logs <script|index> Tails the logs for <script|index>
help:      columns add <col>   Adds the specified column to the output in `forever list`
help:      columns rm <col>    Removed the specified column from the output in `forever list`
help:      columns set <cols>  Set all columns for the output in `forever list`
help:      columns reset       Resets all columns to defaults for the output in `forever list`
help:      cleanlogs           [CAREFUL] Deletes all historical forever log files
help:
help:    options:

help:      -m  MAX          Only run the specified script MAX times
           (スクリプトの起動回数制限)
help:      -l  LOGFILE      Logs the forever output to LOGFILE
           (foevert本体のログ)
help:      -o  OUTFILE      Logs stdout from child script to OUTFILE
           (スクリプト標準出力のログ)
help:      -e  ERRFILE      Logs stderr from child script to ERRFILE
           (スクリプト標準エラー出力のログ)
help:      -p  PATH         Base path for all forever related files?(pid files, etc.)
help:      -c  COMMAND      COMMAND to execute (defaults to node)
           実行するコマンド(デフォルトはnode)
help:      -a, --append     Append logs
           (ログを追記する)
help:      -f, --fifo       Stream logs to stdout
help:      -n, --number     Number of log lines to print
help:      --pidFile        The pid file
help:      --sourceDir      The source directory for which SCRIPT is relative to
help:      --minUptime      Minimum uptime (millis) for a script to not be considered "spinning"
           (最低使用時間(ミリ秒)
help:      --spinSleepTime  Time to wait (millis) between launches of a spinning script.
           (実行中スクリプトの起動待ち時間)
help:      --colors         --no-colors will disable output coloring
help:      --plain          alias of --no-colors
help:      -d, --debug      Forces forever to log debug output
help:      -v, --verbose    Turns on the verbose messages from Forever
help:      -s, --silent     Run the child script silencing stdout and stderr
           (stdout/stderrへの出力を抑制する)
help:      -w, --watch      Watch for file changes
           (ファイル変更を監視する)
help:      --watchDirectory Top-level directory to watch from
help:      --watchIgnore    To ignore pattern when watch is enabled (multiple option is allowed)
help:      --killSignal     Support exit signal customization (default is SIGKILL)
help:                       used for restarting script gracefully eg. --killSignal=SIGTERM
help:      -h, --help       You're staring at it
help:
help:    [Long Running Process]
help:      The forever process will continue to run outputting log messages to the console.
help:      ex. forever -o out.log -e err.log my-script.js
help:
help:    [Daemon]
help:      The forever process will run as a daemon which will make the target process start
help:      in the background. This is extremely useful for remote starting simple node.js scripts
help:      without using nohup. It is recommended to run start with -o -l, & -e.
help:      ex. forever start -l forever.log -o out.log -e err.log my-daemon.js
help:          forever stop my-daemon.js
help:
コマンド例
#起動
forever start app.js

#ログファイルを出力する
forever start -a -l /tmp/node.forever.log -o /tmp/node.out.log -e /tmp/node.error.log app.js

#NODE_ENVを利用して実行モードを変更する
NODE_ENV=developer forever start -a -l /tmp/node.forever.log -o /tmp/node.out.log -e /tmp/node.error.log app.js

#実行中のアプリ一覧を表示
forever list

#指定したアプリのみ停止
forever stop プロセスID

#全てのアプリを停止
forever stopall

#再起動
forever restart

#全てのプロセスを再起動
forever restartall

以上です(`・ω・´)ゞビシッ!!

参考URL

2014年7月12日土曜日

express のインストール

前回は「node.jsのインストール」を行いました(゚д゚)(。_。)(゚д゚)(。_。) ウンウン

今回はnode.jsを使って開発を行うのですが、その際に便利な「Express」をインストールしたいと思います。

Expressとは
node.jsように用意されたWebアプリケーションフレームワークのこと。
(テンプレートの機能やURLのルーティングの処理などWebアプリケーションで必要となるものが用意されているらしい)

ということなので早速インストール+(0゚・∀・) + ワクテカ +

express のインストール
# npm install -g express
npm http GET https://registry.npmjs.org/express
npm http 200 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/express/-/express-4.6.0.tgz
npm http 200 https://registry.npmjs.org/express/-/express-4.6.0.tgz
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/depd
npm http GET https://registry.npmjs.org/escape-html
npm http GET https://registry.npmjs.org/media-typer
npm http GET https://registry.npmjs.org/finalhandler
npm http GET https://registry.npmjs.org/methods
npm http GET https://registry.npmjs.org/parseurl
npm http GET https://registry.npmjs.org/path-to-regexp
npm http GET https://registry.npmjs.org/proxy-addr
npm http GET https://registry.npmjs.org/range-parser
npm http GET https://registry.npmjs.org/send
npm http GET https://registry.npmjs.org/serve-static
npm http GET https://registry.npmjs.org/type-is
npm http GET https://registry.npmjs.org/vary
npm http GET https://registry.npmjs.org/cookie
npm http GET https://registry.npmjs.org/fresh
npm http GET https://registry.npmjs.org/cookie-signature
npm http GET https://registry.npmjs.org/merge-descriptors
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/utils-merge
npm http GET https://registry.npmjs.org/accepts
npm http GET https://registry.npmjs.org/buffer-crc32
npm http 200 https://registry.npmjs.org/finalhandler
npm http GET https://registry.npmjs.org/finalhandler/-/finalhandler-0.0.3.tgz
npm http 200 https://registry.npmjs.org/escape-html
npm http GET https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz
npm http 200 https://registry.npmjs.org/media-typer
npm http GET https://registry.npmjs.org/media-typer/-/media-typer-0.2.0.tgz
npm http 200 https://registry.npmjs.org/depd
npm http 200 https://registry.npmjs.org/methods
npm http GET https://registry.npmjs.org/depd/-/depd-0.3.0.tgz
npm http GET https://registry.npmjs.org/methods/-/methods-1.1.0.tgz
npm http 200 https://registry.npmjs.org/parseurl
npm http 200 https://registry.npmjs.org/range-parser
npm http 200 https://registry.npmjs.org/debug
npm http 200 https://registry.npmjs.org/proxy-addr
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz
npm http GET https://registry.npmjs.org/parseurl/-/parseurl-1.1.3.tgz
npm http GET https://registry.npmjs.org/debug/-/debug-1.0.3.tgz
npm http GET https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz
npm http 200 https://registry.npmjs.org/path-to-regexp
npm http 200 https://registry.npmjs.org/vary
npm http GET https://registry.npmjs.org/vary/-/vary-0.1.0.tgz
npm http GET https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz
npm http 200 https://registry.npmjs.org/serve-static
npm http 200 https://registry.npmjs.org/type-is
npm http 200 https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz
npm http 200 https://registry.npmjs.org/cookie
npm http 200 https://registry.npmjs.org/fresh
npm http 200 https://registry.npmjs.org/cookie-signature
npm http 200 https://registry.npmjs.org/finalhandler/-/finalhandler-0.0.3.tgz
npm http 200 https://registry.npmjs.org/merge-descriptors
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-1.0.0.tgz
npm http 200 https://registry.npmjs.org/send
npm http 200 https://registry.npmjs.org/media-typer/-/media-typer-0.2.0.tgz
npm http 200 https://registry.npmjs.org/methods/-/methods-1.1.0.tgz
npm http 200 https://registry.npmjs.org/utils-merge
npm http GET https://registry.npmjs.org/serve-static/-/serve-static-1.3.2.tgz
npm http 200 https://registry.npmjs.org/buffer-crc32
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz
npm http 200 https://registry.npmjs.org/parseurl/-/parseurl-1.1.3.tgz
npm http GET https://registry.npmjs.org/type-is/-/type-is-1.3.2.tgz
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz
npm http 200 https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz
npm http 200 https://registry.npmjs.org/debug/-/debug-1.0.3.tgz
npm http GET https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.4.tgz
npm http 200 https://registry.npmjs.org/vary/-/vary-0.1.0.tgz
npm http 200 https://registry.npmjs.org/depd/-/depd-0.3.0.tgz
npm http 200 https://registry.npmjs.org/qs
npm http 200 https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz
npm http 200 https://registry.npmjs.org/serve-static/-/serve-static-1.3.2.tgz
npm http GET https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz
npm http GET https://registry.npmjs.org/send/-/send-0.6.0.tgz
npm http 200 https://registry.npmjs.org/accepts
npm http 200 https://registry.npmjs.org/type-is/-/type-is-1.3.2.tgz
npm http GET https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz
npm http GET https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.2.2.tgz
npm http 200 https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.4.tgz
npm http GET https://registry.npmjs.org/qs/-/qs-0.6.6.tgz
npm http 200 https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz
npm http 200 https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.6.0.tgz
npm http 200 https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz
npm http GET https://registry.npmjs.org/accepts/-/accepts-1.0.7.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.6.6.tgz
npm http 200 https://registry.npmjs.org/accepts/-/accepts-1.0.7.tgz
npm http GET https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/negotiator
npm http GET https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/ipaddr.js
npm http GET https://registry.npmjs.org/finished
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/ms
npm http 200 https://registry.npmjs.org/mime-types
npm http GET https://registry.npmjs.org/mime-types/-/mime-types-1.0.1.tgz
npm http 200 https://registry.npmjs.org/mime-types
npm http 200 https://registry.npmjs.org/negotiator
npm http 200 https://registry.npmjs.org/ipaddr.js
npm http 200 https://registry.npmjs.org/mime
npm http 200 https://registry.npmjs.org/ms
npm http GET https://registry.npmjs.org/negotiator/-/negotiator-0.4.7.tgz
npm http GET https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.11.tgz
npm http GET https://registry.npmjs.org/ms/-/ms-0.6.2.tgz
npm http 200 https://registry.npmjs.org/finished
npm http GET https://registry.npmjs.org/finished/-/finished-1.2.2.tgz
npm http 200 https://registry.npmjs.org/mime-types/-/mime-types-1.0.1.tgz
npm http 200 https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz
npm http 200 https://registry.npmjs.org/finished/-/finished-1.2.2.tgz
npm http 200 https://registry.npmjs.org/negotiator/-/negotiator-0.4.7.tgz
npm http 200 https://registry.npmjs.org/ms/-/ms-0.6.2.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.11.tgz
npm http GET https://registry.npmjs.org/ee-first
npm http 200 https://registry.npmjs.org/ee-first
npm http GET https://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz
npm http 200 https://registry.npmjs.org/ee-first/-/ee-first-1.0.3.tgz
express@4.6.0 /root/.nvm/v0.10.28/lib/node_modules/express
tqq merge-descriptors@0.0.2
tqq utils-merge@1.0.0
tqq parseurl@1.1.3
tqq cookie@0.1.2
tqq escape-html@1.0.1
tqq finalhandler@0.0.3
tqq cookie-signature@1.0.4
tqq range-parser@1.0.0
tqq fresh@0.2.2
tqq vary@0.1.0
tqq qs@0.6.6
tqq media-typer@0.2.0
tqq methods@1.1.0
tqq serve-static@1.3.2
tqq buffer-crc32@0.2.3
tqq depd@0.3.0
tqq path-to-regexp@0.1.3
tqq debug@1.0.3 (ms@0.6.2)
tqq proxy-addr@1.0.1 (ipaddr.js@0.1.2)
tqq accepts@1.0.7 (negotiator@0.4.7, mime-types@1.0.1)
tqq type-is@1.3.2 (mime-types@1.0.1)
mqq send@0.6.0 (ms@0.6.2, mime@1.2.11, finished@1.2.2)
バージョンを確認してみる
# express -V
-bash: express: コマンドが見つかりません
なぜか、コマンドが見つからない・・・Σ(゚д゚lll)ガーン
調べてみると express-generator というパッケージをインストールする必要があるそうです。

express-generatorをインストールする
# npm install -g express-generator
npm http GET https://registry.npmjs.org/express-generator
npm http 200 https://registry.npmjs.org/express-generator
npm http GET https://registry.npmjs.org/express-generator/-/express-generator-4.2.0.tgz
npm http 200 https://registry.npmjs.org/express-generator/-/express-generator-4.2.0.tgz
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/mkdirp
npm http 200 https://registry.npmjs.org/commander
npm http 200 https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/commander/-/commander-1.3.2.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz
npm http 200 https://registry.npmjs.org/commander/-/commander-1.3.2.tgz
npm http GET https://registry.npmjs.org/keypress
npm http 200 https://registry.npmjs.org/keypress
npm http GET https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz
npm http 200 https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz
/root/.nvm/v0.10.28/bin/express -> /root/.nvm/v0.10.28/lib/node_modules/express-generator/bin/express
express-generator@4.2.0 /root/.nvm/v0.10.28/lib/node_modules/express-generator
tqq mkdirp@0.3.5
mqq commander@1.3.2 (keypress@0.1.0)
再度、バージョンを確認してみる
# express -V
4.2.0
キタ――(゚∀゚)――!!
expressのオプションを確認
# express -h

  Usage: express [options] [dir]

  Options:

    -h, --help          output usage information
    -V, --version       output the version number
    -e, --ejs           add ejs engine support (defaults to jade)
    -H, --hogan         add hogan.js engine support
    -c, --css <engine>  add stylesheet <engine> support (less|stylus|compass) (defaults to plain css)
    -f, --force         force on non-empty directory

expressのインストールが終わったので、
こちらの記事で公開されているサンプルを実際に動かしてみたいと思います。
Node.js、Socket.IO、MongoDBでリアルタイムWeb (2/2)

ソースコードをダウンロードしてきます。
# git clone git://github.com/coppieee/node-chat-demo.git
Initialized empty Git repository in /root/node-chat-demo/.git/
remote: Counting objects: 32, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 32 (delta 6), reused 32 (delta 6)
Receiving objects: 100% (32/32), 79.46 KiB, done.
Resolving deltas: 100% (6/6), done.
ディレクトリを移動します
cd node-chat-demo
依存関係のライブラリを設定します。
# npm install
npm http GET https://registry.npmjs.org/socket.io
npm http GET https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/ejs
npm http 304 https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/express/-/express-3.0.0rc1.tgz
npm http 304 https://registry.npmjs.org/socket.io
npm http 304 https://registry.npmjs.org/ejs
npm http GET https://registry.npmjs.org/ejs/-/ejs-1.0.0.tgz
npm http 200 https://registry.npmjs.org/ejs/-/ejs-1.0.0.tgz
npm http 200 https://registry.npmjs.org/express/-/express-3.0.0rc1.tgz
npm http GET https://registry.npmjs.org/socket.io-parser
npm http GET https://registry.npmjs.org/socket.io-adapter
npm http GET https://registry.npmjs.org/socket.io-client
npm http GET https://registry.npmjs.org/has-binary-data
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/engine.io
npm http 304 https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/connect
npm http GET https://registry.npmjs.org/crc
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/cookie
npm http GET https://registry.npmjs.org/range-parser
npm http GET https://registry.npmjs.org/mkdirp
npm http GET https://registry.npmjs.org/send
npm http GET https://registry.npmjs.org/methods
npm http GET https://registry.npmjs.org/fresh
npm http 304 https://registry.npmjs.org/socket.io-adapter
npm http 304 https://registry.npmjs.org/socket.io-parser
npm http 304 https://registry.npmjs.org/engine.io
npm http 304 https://registry.npmjs.org/commander
npm http 304 https://registry.npmjs.org/socket.io-client
npm http 304 https://registry.npmjs.org/cookie
npm http 304 https://registry.npmjs.org/has-binary-data
npm http 304 https://registry.npmjs.org/range-parser
npm http GET https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http 304 https://registry.npmjs.org/mkdirp
npm http 304 https://registry.npmjs.org/methods
npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 304 https://registry.npmjs.org/fresh
npm http 200 https://registry.npmjs.org/crc
npm http GET https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http GET https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 304 https://registry.npmjs.org/send
npm http 200 https://registry.npmjs.org/connect
npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.3.tgz
npm http GET https://registry.npmjs.org/connect/-/connect-2.4.1.tgz
npm http GET https://registry.npmjs.org/send/-/send-0.0.3.tgz
npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz
npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz
npm http 200 https://registry.npmjs.org/crc/-/crc-0.2.0.tgz
npm http 200 https://registry.npmjs.org/send/-/send-0.0.3.tgz
npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.1.0.tgz
npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.0.4.tgz
npm http GET https://registry.npmjs.org/isarray
npm http 200 https://registry.npmjs.org/connect/-/connect-2.4.1.tgz
npm http GET http://github.com/component/emitter/archive/1.0.1.tar.gz
npm http GET https://registry.npmjs.org/json3
npm http 304 https://registry.npmjs.org/isarray
npm http GET https://registry.npmjs.org/engine.io-parser
npm http GET https://registry.npmjs.org/base64id
npm http GET https://registry.npmjs.org/ws
npm http 304 https://registry.npmjs.org/json3
npm http 304 https://registry.npmjs.org/ws
npm http 304 https://registry.npmjs.org/engine.io-parser
npm http 304 https://registry.npmjs.org/base64id
npm http GET https://registry.npmjs.org/component-bind
npm http GET https://registry.npmjs.org/object-component
npm http GET https://registry.npmjs.org/component-emitter
npm http GET https://registry.npmjs.org/indexof
npm http GET https://registry.npmjs.org/parseuri
npm http GET https://registry.npmjs.org/to-array
npm http GET https://registry.npmjs.org/engine.io-client
npm http GET https://registry.npmjs.org/utf8
npm http GET https://registry.npmjs.org/base64-arraybuffer
npm http GET https://registry.npmjs.org/arraybuffer.slice
npm http GET https://registry.npmjs.org/after
npm http GET https://registry.npmjs.org/blob
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/ms
npm http 304 https://registry.npmjs.org/component-bind
npm http 304 https://registry.npmjs.org/component-emitter
npm http 304 https://registry.npmjs.org/indexof
npm http 304 https://registry.npmjs.org/object-component
npm http 304 https://registry.npmjs.org/parseuri
npm http 304 https://registry.npmjs.org/to-array
npm http GET https://registry.npmjs.org/nan
npm http GET https://registry.npmjs.org/tinycolor
npm http GET https://registry.npmjs.org/options
npm http 304 https://registry.npmjs.org/base64-arraybuffer
npm http GET https://registry.npmjs.org/formidable
npm http GET https://registry.npmjs.org/pause
npm http GET https://registry.npmjs.org/qs
npm http GET https://registry.npmjs.org/bytes
npm http 304 https://registry.npmjs.org/engine.io-client
npm http 304 https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/utf8
npm http 304 https://registry.npmjs.org/arraybuffer.slice
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http 304 https://registry.npmjs.org/after
npm http 304 https://registry.npmjs.org/tinycolor
npm http 304 https://registry.npmjs.org/options
npm http 200 https://registry.npmjs.org/pause
npm http 200 https://registry.npmjs.org/formidable
npm http 304 https://registry.npmjs.org/qs
npm http 304 https://registry.npmjs.org/blob
npm http 304 https://registry.npmjs.org/bytes
npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.6.tgz
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http GET https://registry.npmjs.org/qs/-/qs-0.4.2.tgz
npm http GET https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 304 https://registry.npmjs.org/nan
npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz
npm http 304 https://registry.npmjs.org/ms
npm http 200 https://registry.npmjs.org/qs/-/qs-0.4.2.tgz
npm http GET https://registry.npmjs.org/better-assert
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.11.tgz
npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.1.0.tgz
npm http 304 https://registry.npmjs.org/better-assert
npm http GET https://registry.npmjs.org/callsite

> ws@0.4.31 install /root/node-chat-demo/node_modules/socket.io/node_modules/engine.io/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

npm http 304 https://registry.npmjs.org/callsite
npm http GET https://registry.npmjs.org/has-cors
npm http GET https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz
npm http GET https://registry.npmjs.org/parsejson
npm http GET https://registry.npmjs.org/parseqs
npm http GET https://registry.npmjs.org/component-inherit
npm http 304 https://registry.npmjs.org/parseqs
npm http 304 https://registry.npmjs.org/parsejson
npm http 304 https://registry.npmjs.org/has-cors
npm http 200 http://github.com/component/emitter/archive/1.0.1.tar.gz
npm http 304 https://registry.npmjs.org/component-inherit
npm http 200 https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz
npm http GET https://github.com/component/global/archive/v2.0.1.tar.gz

> ws@0.4.31 install /root/node-chat-demo/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)

npm http 200 https://github.com/component/global/archive/v2.0.1.tar.gz
ejs@1.0.0 node_modules/ejs

express@3.0.0-rc1 node_modules/express
tqq methods@0.0.1
tqq fresh@0.1.0
tqq range-parser@0.0.4
tqq cookie@0.0.4
tqq crc@0.2.0
tqq commander@0.6.1
tqq mkdirp@0.3.3
tqq debug@1.0.3 (ms@0.6.2)
tqq send@0.0.3 (mime@1.2.6)
mqq connect@2.4.1 (pause@0.0.1, bytes@0.1.0, qs@0.4.2, formidable@1.0.11)

socket.io@1.0.6 node_modules/socket.io
tqq debug@0.7.4
tqq has-binary-data@0.1.1 (isarray@0.0.1)
tqq engine.io@1.3.1 (base64id@0.1.0, debug@0.6.0, engine.io-parser@1.0.6, ws@0.4.31)
tqq socket.io-adapter@0.2.0 (socket.io-parser@2.1.2)
tqq socket.io-parser@2.2.0 (isarray@0.0.1, emitter@1.0.1, json3@3.2.6)
mqq socket.io-client@1.0.6 (to-array@0.1.3, indexof@0.0.1, component-bind@1.0.0, object-component@0.0.3, component-emitter@1.1.2, parseuri@0.0.2, engine.io-client@1.3.1)
node.jsを実行します
# node app
Express server listening on port 3000
ブラウザから3000ポートにアクセスします。
http://ドメイン:3000/

ブラウザでアクセスすると、下の画像のような画面が開かれますので、
タブなどで同じURLの画面を複数個開きます。
(別々のマシンでも可能)



文字を入力して「send」を押すと、
各ブラウザに送信されたメッセージが表示されれば正常に動作しています。


以上です(`・ω・´)ゞビシッ!!

参考URL

2014年7月11日金曜日

node.jsのインストール

久しぶりの投稿(ΦωΦ)フフフ…

今回は業務でnode.jsを使う機会が出来たのでインストールをしてみました+(0゚・∀・) + ワクテカ +
まずは、node.jsのバージョンを管理するnvmをインストールします。

nvmをインストールする
# yum install git
Loaded plugins: fastestmirror, priorities
Determining fastest mirrors
epel/metalink                                                                                                                                                             | 4.5 kB     00:00
 * base: ftp.iij.ad.jp
 * centosplus: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * ius: syd.mirror.rackspace.com
 * rpmforge: ftp.riken.jp
 * updates: ftp.iij.ad.jp
base                                                                                                                                                                      | 3.7 kB     00:00
centosplus                                                                                                                                                                | 3.4 kB     00:00
elrepo                                                                                                                                                                    | 2.9 kB     00:00
elrepo/primary_db                                                                                                                                                         | 673 kB     00:00
epel                                                                                                                                                                      | 4.4 kB     00:00
epel/primary_db                                                                                                                                                           | 6.2 MB     00:05
extras                                                                                                                                                                    | 3.4 kB     00:00
ius                                                                                                                                                                       | 2.1 kB     00:00
ius/primary_db                                                                                                                                                            | 143 kB     00:00
rpmforge                                                                                                                                                                  | 1.9 kB     00:00
rpmforge/primary_db                                                                                                                                                       | 2.7 MB     00:02
updates                                                                                                                                                                   | 3.4 kB     00:00
updates/primary_db                                                                                                                                                        | 3.7 MB     00:03
vz-base                                                                                                                                                                   |  951 B     00:00
vz-updates                                                                                                                                                                |  951 B     00:00
177 packages excluded due to repository priority protections
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package git.x86_64 0:1.7.1-3.el6_4.1 will be installed
--> Processing Dependency: perl-Git = 1.7.1-3.el6_4.1 for package: git-1.7.1-3.el6_4.1.x86_64
--> Processing Dependency: perl(Git) for package: git-1.7.1-3.el6_4.1.x86_64
--> Processing Dependency: perl(Error) for package: git-1.7.1-3.el6_4.1.x86_64
--> Running transaction check
---> Package perl-Error.noarch 1:0.17015-4.el6 will be installed
---> Package perl-Git.noarch 0:1.7.1-3.el6_4.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=================================================================================================================================================================================================
 Package                                        Arch                                       Version                                                Repository                                Size
=================================================================================================================================================================================================
Installing:
 git                                            x86_64                                     1.7.1-3.el6_4.1                                        base                                     4.6 M
Installing for dependencies:
 perl-Error                                     noarch                                     1:0.17015-4.el6                                        base                                      29 k
 perl-Git                                       noarch                                     1.7.1-3.el6_4.1                                        base                                      28 k

Transaction Summary
=================================================================================================================================================================================================
Install       3 Package(s)

Total download size: 4.7 M
Installed size: 15 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): git-1.7.1-3.el6_4.1.x86_64.rpm                                                                                                                                     | 4.6 MB     00:04
(2/3): perl-Error-0.17015-4.el6.noarch.rpm                                                                                                                                |  29 kB     00:00
(3/3): perl-Git-1.7.1-3.el6_4.1.noarch.rpm                                                                                                                                |  28 kB     00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                            1.1 MB/s | 4.7 MB     00:04
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 1:perl-Error-0.17015-4.el6.noarch                                                                                                                                             1/3
  Installing : perl-Git-1.7.1-3.el6_4.1.noarch                                                                                                                                               2/3
  Installing : git-1.7.1-3.el6_4.1.x86_64                                                                                                                                                    3/3
  Verifying  : git-1.7.1-3.el6_4.1.x86_64                                                                                                                                                    1/3
  Verifying  : perl-Git-1.7.1-3.el6_4.1.noarch                                                                                                                                               2/3
  Verifying  : 1:perl-Error-0.17015-4.el6.noarch                                                                                                                                             3/3

Installed:
  git.x86_64 0:1.7.1-3.el6_4.1

Dependency Installed:
  perl-Error.noarch 1:0.17015-4.el6                                                               perl-Git.noarch 0:1.7.1-3.el6_4.1

Complete!
gitからダウンロードします。
 
# git clone git://github.com/creationix/nvm.git ~/.nvm
Initialized empty Git repository in /root/.nvm/.git/
remote: Reusing existing pack: 1618, done.
remote: Total 1618 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1618/1618), 304.05 KiB | 185 KiB/s, done.
Resolving deltas: 100% (829/829), done.
nvmコマンドを使えるようにする
# source ~/.nvm/nvm.sh
nvmのバージョン確認
 
# nvm version
v0.10.28
node.jsのインストール
 
# nvm install v0.10.28
######################################################################## 100.0%
Now using node v0.10.28
node.jsのバージョン確認
 
# node -v
v0.10.28
npmのバージョン確認
 
# npm -v
1.4.9
npmはnode.jsのパッケージなどを管理するものらしいです。
node.jsをインストールするとセットでインストールされる?

v0.10.28を使うようにする
 
# nvm use v0.10.28
Now using node v0.10.28
※注意
useでバージョンを指定する際に、次の点を気をつける必要があります。

useを使うときに、バージョン名をフルネームで書いた場合には、そのバージョンが必ず使われる。

次のような記述にすると、マイナーバージョンで新しいものがインストールされた場合には、
自動的に最新のものが使われるようになる
 
nvm use 0.10
たとえば、v0.10.29がインストールされた場合には自動でv0.10.29が使われる。

useで設定した内容はコンソールからログアウトしたり再起動すると初期化されてしまうので
デフォルトのバージョンを指定する。

v0.10.28のエイリアス名をdefaultにする
 
# nvm alias default v0.10.28
default -> v0.10.28
確認
 
# nvm list
->  v0.10.28
default -> v0.10.28
ログアウトしたら設定が消えてしまうので、.bashrcの末尾に設定しておく。
 
vi ~/.bashrc

#node.js
if [ "$TERM" = "xterm" ]; then
  # Enable nvm (Node Version Manager)
  if [ -s ~/.nvm/nvm.sh ]; then
    . ~/.nvm/nvm.sh
    nvm alias default v0.10.28 > /dev/null
  fi
fi

以上です(`・ω・´)ゞビシッ!!

参考URL

自身のinflaterの取得方法



ダイアログPickerをフラグメント化する際に知らなかった事についてのメモメモφ(・ω・)



LayoutInflater inflater = LayoutInflater.from([ Context ]);

View view = inflater.inflate( R.layout.dialog_date_picker, null, false );

AlertDialog.Builderの setView(view) してめでたくレイアウトの変更ができました。

こんな記述方法もあったのか…(・ω・)フムフム

お勉強になりました。(^・ω・^)

こちらのサイトを拝見しますた。

http://www.ipentec.com/document/document.aspx?page=android-simple-custom-alert-dialog