自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2013年10月27日日曜日

node.jsで jsonファイルを解析

node.jsでjsonファイルを解析して、中身を表示させるサンプルです。

コード
var fs = require('fs');
var path = require('path');
var pkg = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json')));
console.log(pkg.name);
console.log(pkg.version);
console.log(pkg.private);
console.log(pkg.scripts);
console.log(pkg.scripts.start);
console.log(pkg.dependencies);

実行結果
site01
0.0.1
true
{ start: 'nodemon app.js' }
nodemon app.js
{ express: '*',
  jade: '*',
  stylus: '*',
  mongoose: '*',
  nodemon: '*' }

2013年10月26日土曜日

リバースサーバーNginxは Ubuntuにインストール

リバースサーバーNginxインストール手順を紹介します。

参照URL
http://nginx.org/en/linux_packages.html

インストール手順
$wget http://nginx.org/keys/nginx_signing.key
$sudo apt-key add nginx_signing.key
$sudo nano /etc/apt/sources.list
...
#codename
#Version Codename
#10.04   lucid
#11.10   oneiric
#12.04   precise
#12.10   quantal
#13.04   raring
deb http://nginx.org/packages/ubuntu/ [codename] nginx
deb-src http://nginx.org/packages/ubuntu/ [codename] nginx
...
$apt-get update
$apt-get install nginx

$nginx -v
nginx version: nginx/1.4.3

2013年10月23日水曜日

node.jsモジュール一覧

node.js開発にはモジュールが必要不可欠です、下記のURLから利用可能なモジュールをご確認できます。

https://github.com/joyent/node/wiki/Modules

I like Node.js!

node.jsでmarkdown利用

node.jsのmarkedモジュールを使って、markdown文章を作成できます。

markedインストール
https://github.com/chjj/marked
npm install marked

サンプルコード
var marked = require('marked');
console.log(marked('I am using __markdown__.'));
console.log(marked('> scross site scripting!'));

実行結果
$node marked.js
<p>I am using <strong>markdown</strong>.</p>

<blockquote>
<p>scross site scripting!</p>
</blockquote>

※markdownも紹介
https://github.com/evilstreak/markdown-js
npm install markdown

サンプルコード
console.log('=====markdown出力=====');
var markdown = require( "markdown" ).markdown;
console.log( markdown.toHTML( "Hello *World*!" ) );
console.log( markdown.toHTML( 'I am using __markdown__.' ) );
console.log( markdown.toHTML( '> scross site scripting!' ) );

console.log('=====markedと比較=====');
var marked = require('marked');
console.log(marked('Hello *World*!'));
console.log(marked('I am using __markdown__.'));
console.log(marked('> scross site scripting!'));

実行結果
$node markdown.js
=====markdown出力=====
<p>Hello <em>World</em>!</p>
<p>I am using <strong>markdown</strong>.</p>
<blockquote><p>scross site scripting!</p></blockquote>
=====markedと比較=====
<p>Hello <em>World</em>!</p>

<p>I am using <strong>markdown</strong>.</p>

<blockquote>
<p>scross site scripting!</p>
</blockquote>

node.jsでメール送信処理

node.jsのnodemailerモジュールを使って、メール送信処理を紹介します。

nodemailerインストール
npm install nodemailer

送信コード
var nodemailer = require('nodemailer');
var transport = nodemailer.createTransport('SMTP', {
    host: 'stmp-server-ip',
    secureConnection: true,
    port: 465,
    auth: {
        user: 'smtpuser',
        pass: 'smtppass'
    }
});

var msg = {
    from: 'aaaa@fortest.com',
    to:   'bbbb@fortest.com',
    subject: 'this is a test mail.',
    text: '日本語テスト'
};

transport.sendMail(msg, function(error){
    if (error) {
        console.log('送信失敗');
    }
    else {
        console.log('送信終了');
    }
    msg.transport.close();
});

2013年10月22日火曜日

node.jsでhttpリクエストサンプル

Node.jsを使って、httpでウェブサイト内容をダウンロードする

var http = require('http');

var req = http.get('http://komanew.blogspot.jp', function(res){
    console.log(res.statusCode);
    console.log(res.headers.location);

    res.setEncoding('utf8');
    res.on('data', function(str) {
        console.log(str);
    });
});
req.on('timeout', function() {
    console.log('request timed out');
    req.abort()
});
req.on('error', function(err) {
    console.log("Error: " + err.code + ", " + err.message);
});

2013年10月20日日曜日

mongoose-virtualプロパティ

mongooseはバーチャルプロパティ(virtual property)をサポートしています、このトピックで紹介します。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test01');

var PersonSchema = new mongoose.Schema({
  name:{
      first:String,
      last:String
  }
});
PersonSchema.virtual('name.full').get(function(){
    return this.name.first + ' ' + this.name.last;
});
PersonSchema.virtual('name.full').set(function(name){
    var split = name.split(' ');
    this.name.first = split[0];
    this.name.last = split[1];
});

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {

    var PersonModel = mongoose.model('Person',PersonSchema);

    var person1 = new PersonModel({
      name:{first:'koma',last:'endia'}
    });
    console.log("person1=" + person1.name.first + " " + person1.name.last);
    console.log("person1=" + person1.name.full);

    var person2 = new PersonModel({});
    person2.name.full = "koma endia";
    console.log("person2=" + person2.name.first + " " + person2.name.last);
    console.log("person2=" + person2.name.full);
});

javascriptコールバック例

Node.jsはコールバック関数をよく使われますので、コールバック簡単なサンプルをメモします。

function aaa(a, b, cb) {
    return cb(a, b);
}

function add(x, y) {
    return x+y;
}

console.log(add(1, 2));
console.log(aaa(2, 3, add));

$node callback.js
3
5

mongooseでMongoDBに接続してみる

前回と前々回はmongodbとmongoskinを使ってMongoDBに接続処理を紹介しました、今回はmongooseの使い方を紹介します。

Mongoose
http://mongoosejs.com/

まず、インストールします
npm install mongoose

MongoDBは何もせずに、直接にアクセスコードを書きます
nano mongoose.js
...
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test01');

var kittySchema = mongoose.Schema({
    name: String,
    age: Number
    });
kittySchema.methods.speak = function () {
  var greeting = this.name
      ? "Meow name is " + this.name : "I don't have a name"
  console.log(greeting);
}
kittySchema.statics.findAge10 = function(cb) {
  this.find({age:10}, cb);
}

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
    var Kitten = mongoose.model('Kitten', kittySchema);
    var silence = new Kitten({ name: 'Silence', age: 10 });
    console.log(silence.name);
    silence.speak();

    silence.save(function(error, doc){
        if (error) throw error;

        doc.speak();
    });

    Kitten.find({age:10}, function(error, kittens){
        if (error) throw error;
        //console.log(kittens.length);
        for(var i = 0; i < kittens.length; i++) {
            console.log("name=" + kittens[i].name + ", age=" + kittens[i].age);
        }
    });
    Kitten.findAge10(function(error, kittens){
        if (error) throw error;
        for(var i = 0; i < kittens.length; i++) {
            console.log("[findAge10]" + "_id=" + kittens[i]._id + ", name=" + kittens[i].name + ", age=" + kittens[i].age);
        }
    });
});
...

express.jsのエラー処理

express.jsのエラー処理サンプルです。

app.js
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(path.join(__dirname, 'public')));

//一般処理
app.use(function(request, response, next){
    console.log('ここだよ=[' + request.url + ']');
    response.send(404, "何もない");
});
//errorオブジェクトある処理
app.use(function(error, request, response, next) {
    //クライアントに送るHTTPコードです。基本はerrorオブジェクトにセットするべきですが、
    //セットされてない場合は、404をセットする
    response.status(error.status || 404);
    response.send("error.message=" + error.message);
});

app.get('/', routes.index);

//パラメーター処理例1
app.get('/user/:username', function(request, response, next){
    var username = request.params.username;
    if (username === 'koma') {
        next(); //404
    } else if (username === 'endia') {
        var err = new Error('該当するユーザーは存在していません。');
        //err.status = 500; //セットしたら、500を返す;セットしなければ、404を返す
        next(err);
    } else {
        response.send("ここは<strong>" + username + "</strong>さんのページです。");
    }
});

//パラメーター処理例2:チェック処理
app.param('postname', function(request, response, next, postname){
    if (postname === 'koma') {
        next(new Error(postname + "ポストは存在しません。")); //404
    } else {
        request.postname = postname;
        next();
    }
});
//パラメーターチェックOKだったら、ここへ
app.get('/post/:postname', function(request, response){
    response.send("this is <h1>" + request.postname + ".</h1>");
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Express.jsサンプル

Express.jsフレームワークでウェブアプリケーションを開発するサンプルです。

app.js
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', function(request, response){
    response.send("helo express new aaabbb-bobopapa.");
});

app.get('/hi', function(request, response){
    response.send("<h1>hi</h1>");
});

app.get('/usrs/:userid', function(request, response){
    response.send("<h1>Helo, User " + request.params.userid + "</h1>");
});

app.get('/home', function(request, response){
    response.send(request.get('user-agent'));
});

app.param('from', function(request, response, next){
   request.from = parseInt(request.params.from, 10);
   next();
});

app.get('/user/:from-:to', function(request, response){
    var from = request.from;
    var to   = parseInt(request.params.to, 10);
    res.send("new.from=" + from + ", to=" + to);
});

var count = 0;
app.get('/helo.txt', function(request, response, next){
    //res.send("app.js helo.txt");
    count++;
    next();
});
app.get('/count', function(request, response, next){
    response.send(count + " views.");
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

2013年10月19日土曜日

node再起動せずに、直したコードを自動適用

通常はnode.jsコードを直して、[node app.js]を再起動しないと、適用されない問題あります。直したコードを即時に反映させるため、nodemonモジュールを利用して実現できます。

$vim package.json
...
  "scripts": {
    "start": "nodemon app.js"
  },
...
  "devDependencies": {
    "nodemon": "*"
  }
...

$npm install
npm http GET https://registry.npmjs.org/nodemon
npm http 200 https://registry.npmjs.org/nodemon
npm http GET https://registry.npmjs.org/nodemon/-/nodemon-0.7.10.tgz
npm http 200 https://registry.npmjs.org/nodemon/-/nodemon-0.7.10.tgz
nodemon@0.7.10 node_modules/nodemon

$npm start
> application-name@0.0.1 start /home/user/node/webapps/site1
> nodemon app.js
19 Oct 22:25:29 - [nodemon] v0.7.10
19 Oct 22:25:29 - [nodemon] to restart at any time, enter `rs`
19 Oct 22:25:29 - [nodemon] watching: /home/user/node/webapps/site1
19 Oct 22:25:29 - [nodemon] starting `node app.js`

2013年10月14日月曜日

MongoSkin基本使用

MongoDBにアクセスできるドライバーMongoskinの基本使い方です。

/**
 * Mongoskin
 * https://github.com/kissjs/node-mongoskin
 * http://www.hacksparrow.com/mongoskin-tutorial-with-examples.html
 */
// ライブラリ参照
var mongo = require('mongoskin');
// DB接続
var db = mongo.db('192.168.11.1:27017/blog_db', {
    safe : false
});
// コレクション取得
var users = db.collection('users');
// user検索
users.find({
    "name" : {
        $regex : /user-[0-4]/i
    }
}).toArray(function(error, band) {
    for ( var i = 0; i < band.length; i++) {
        console.log("name" + i + "=" + band[i].name);
    }
});
var threads = db.collection('threads');
var thread = {
    "title" : "title-4",
    "content" : "this is title-4 content."
};
// データ追加
threads.insert(thread, function(error, resultArray) {
    console.log("inserted thread title=" + JSON.stringify(resultArray));
    threads.find({}).each(function(error, thread) {
        if (thread !== null)
            console.log("thread title=" + thread.title);
    });
    // データ更新
    threads.update({
        "title" : "title-4"
    }, {
        $set : {
            "content" : "new title-4 content."
        }
    }, function(error, result) {
        console.log("object is updated.");
        threads.findOne({
            "title" : "title-4"
        }, function(error, thread) {
            console.log("thread4 new content=" + thread.content);
        });
    });
});
// データ削除
threads.remove({
    "title" : "title-4"
}, function(error, result) {
    console.log("object is removed.");
});
// データ件数取得
threads.count({}, function(error, count) {
    console.log("threads.count=" + count);
});

Node.jsで MongoDBにアクセスしてみる

node-mongodb-nativeドライバーを使ってNode.jsはドキュメント指向データベースMongoDBにアクセスするサンプルです。

MongoDBドライバーインストール
npm install mongodb

/**
 * MongoDB Access Sample http://mongodb.github.io/node-mongodb-native/
 */
var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://192.168.11.1:27017/blog_db", function(err, db) {
    // threadsコレクションオブジェクト作成
    var threads = db.collection('threads');
    // threadsデータクリア
    threads.remove({}, function(error, result) {
        console.log("removed result=" + result);
        // 追加データ用意
        var thread = [ {
            "title" : "title-1",
            "content" : "this is thread1 \"content\"."
        }, {
            "title" : "title-2",
            "content" : "this is thread2 \"content\"."
        }, {
            "title" : "title-3",
            "content" : "this is thread3 \"content\"."
        } ];
        threads.insert(thread, function(error, result) {
            console.log("inserted count=" + result.length);
            console.log("result[0].title=" + result[0].title);
            console.log("result[1].title=" + result[1].title);
            console.log("result[2].title=" + result[2].title);

            // 件数取得
            threads.count(function(error, count) {
                console.log('all threads count=' + count);
            });

            // title-2データ取得
            threads.findOne({
                "title" : "title-2"
            }, function(error, item) {
                if (error) {
                    throw error;
                }
                console.log("findOne({title-2})=" + item.content);

                // title-2データ更新
                threads.update({
                    "title" : "title-2"
                }, {
                    $set : {
                        "content" : "thread2 new content"
                    }
                }, function(error, result) {
                    console.log("updated result=" + result);

                    // 更新したデータを取得
                    threads.findOne({
                        "title" : "title-2"
                    }, function(error, item) {
                        console.log("updated thread2 content=" + item.content);
                    });
                });
            });
        });
    });
});

2013年10月13日日曜日

MongoDB基本使用

今日はドキュメント向けのデータベースMongoDBをいろいろと触りました、試したコマンドをメモします。

まず結論から言うと、MongoDBは本当に面白いデータベースです、今後のサイト構築は使うでしょう。

#mongodbシェルに入る
$mongo
#現在DB一覧
show dbs;
#利用DBに切り替える
use local
use blog_db;
#コレクション作成(テーブル)
db.createCollection("users");
show dbs;
#dbコマンドヘルプ
db.help();
#現在DB状態
db.stats();
#現在DB削除
db.dropDatabase();
#DB一覧
show dbs;

use blog_db;
db.createCollection("posts");
#コレクション一覧
show collections;
#コレクション削除
db.users.drop();
#コレクションリネーム
db.posts.renameCollection("threads");
#mongodbシェル終了
exit

#blog_dbに入る
$mongo blog_db
#コレクション一覧
show collections;
#usersコレクションにデータを追加
db.users.insert({"name":"koma","address":"tokyo","point":100});
#usersコレクションデータ検索
db.users.find();
#usersコレクションに違うスキマーデータを追加
db.users.insert({"name":"xiaoma", "skill":["linux","unix","mac os"]});
db.users.find();
#usersコレクション削除
db.users.remove();
db.users.find();

show collections;
db.users.find();
#大量データ追加(javascriptで)
for(var i = 0; i < 10; i++) {
db.users.insert({"name":"user-" + i, "group": i%3, "point": Math.floor(Math.random() * 100)});
}
db.users.find();

#検索条件付き(group=1)
db.users.find({"group":1});
#検索項目指定(name)
db.users.find({"group":1}, {"name":true});
#検索条件(group<>1)
db.users.find({"group":{$ne:1}}); //1以外を
#検索条件(point>40)
db.users.find({"point":{$gt:40}});
$gt >
$gte >=
$lt <
$lte <=
#検索条件(point>40 and point<60)
db.users.find({"point":{&gt:40, &lt:60}});
#検索条件(正規表現)
db.users.find({"name":{$regex:/user-[0-4]/i}});
#検索結果並び替え(point asc)
db.users.find().sort({"point":1}); // 1=asc;-1:desc
#SELECT TOP 1
db.users.findOne();
#検索件数制限(最初の3件)
db.users.find().limit(3);
#検索件数制限(3個目から3件)
db.users.find().skip(2).limit(3);
#検索件数
db.users.find().count();
#SELECT DISTINCT group
db.users.distinct("group");
#SELECT IN
db.users.find({"name":{$in:["user-3", "user-7"]}}); //in
#SELECT NOT IN
db.users.find({"name":{$nin:["user-3", "user-7"]}}); //not in
#データ追加
db.users.insert({"address":"my address content"});
#address項目存在のみデータ抽出
db.users.find({"address":{$exists:true}});

#インデックス情報取得
db.users.getIndexes();
#インデックス作成
db.users.ensureIndex({"point":1}); //1:asc;-1:desc
db.users.getIndexes();
#インデックス削除
db.users.dropIndex({"point":1});
db.users.getIndexes();
#唯一インデックス作成
db.users.ensureIndex({"name":1}, {"unique":true});
db.users.insert({"name":"user-5"});

#データ更新(CLEAR更新)
db.users.update({"name":"user-1"}, {"point":100});
db.users.find();
#データ更新(指定項目)
db.users.update({"name":"user-2"}, {$set:{"point":100}});
db.users.find();
#データ更新(数値累計)
db.users.find({"name":"user-3"}, {$inc:{"point":10}});
db.users.find();
#データ更新(項目削除)
db.users.update({"name":"user-4"}, {$unset:{"point":1}});
db.users.find();
#データ更新(項目名変更)
db.users.update({"name":"user-5"}, {$rename:{"group":"mygroup"}});
db.users.find();

#データあれば更新、なければ作成
db.users.update({"name":"user-10"}, {$inc:{"point":10}}, true); //upsert
db.users.find();
#最初の1件だけ+100
db.users.update({}, {$inc:{"point":100}});
#全件+100
db.users.update({}, {$inc:{"point":100}}, false, true);

#コマンドバッチ作成
$nano batch.js
...
db.users.remove({"name":"user-10"});
...
#バッチ実行(コマンドライン)
$mongo blog_db batch.js
$mongo blog_db
db.users.find();
#バッチ実行(load関数)
load("batch.js"); //load script
db.users.find();

#DBバックアップ
$mongodump --db blog_db
#DBリストア
$mongorestore --drop

Ubuntuファイアウォール知識メモ-ufw

Ubuntuファイアウォール機能をまとめます。Redhat系のLinuxシステム(CentOSなど)はiptablesを使ってファイアウォールを機能しています、Ubuntuはもちろんiptablesコマンドで設定できますが、このトピックはこれを割愛して、もっと簡単なツール―ufwの知識を紹介します。

ファイアウォール状態確認
sudo ufw status
ファイアウォールを起動
sudo ufw enable
ファイアウォールを停止
sudo ufw disable
ファイアウォールログ機能を起動
sudo ufw logging on
ファイアウォールログ機能を停止
sudo ufw logging off
ファイアウォールサービス再起動
sudo service ufw restart
基本はファイアウォールが起動したら、デフォールトとしてすべてのポートをブロックされます、必要なポートを後自分で一つ一つオープンするようにします。
ポートオープン
sudo ufw allow 22
TCPポートのみオープン
sudo ufw allow 22/tcp
UPDポートのみオープン
sudo ufw allow 53/udp
サービス名で設定
sudo ufw allow ssh
※サービス名チェック
less /etc/services
ルール削除
sudo ufw delete allow 22
IPアドレス許可
sudo ufw allow from 192.168.1.1
IPアドレス禁止
sudo ufw deny from 192.168.1.1
セグメント許可
sudo ufw allow from 192.168.1.0/24
セグメント禁止
sudo ufw deny from 192.168.1.0/24
あるIPアドレスからポート許可
sudo ufw allow from 192.168.1.1 to any port 22
あるIPアドレスをポート禁止
sudo ufw deny from 192.168.1.1 to any port 22
ping禁止
sudo nano -wciE -T 4 /etc/ufw/before.rules
...
#-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP
...

2013年10月12日土曜日

UbuntuでMongoDBインストール

MongoDBをUbuntuでインストールしてみました。

参照URL
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

#MongoDB GPGキー追加
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

#MongoDBサーバーリストを追加
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

#Ubuntuシステム更新(上記設定した内容を適用)
sudo apt-get update

#MongoDBインストール
sudo apt-get install mongodb-10gen

#インストールMongoDBバージョン選択もできる
apt-get install mongodb-10gen=2.2.3
echo "mongodb-10gen hold" | sudo dpkg --set-selections

#インストールした関連ファイル
/etc/mongodb.conf
/etc/init.d/mongodb
/var/lib/mongodb
/var/log/mongodb

#MongoDBサービス利用
sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart

Node.jsオブジェクト指向プログラミング

Node.jsオブジェクト指向サンプルを紹介します。

object.js
function Helo(){
    var name;

    this.setName = function(pName){
        this.name = pName;
    }

    this.sayHelo = function(){
        console.log('Helo ' + this.name);
    }
};

//exports.Helo = Helo;
module.exports = Helo;

object_use.js
var Helo = require('./object');

helo1 = new Helo();
helo1.setName('koma');
helo1.sayHelo();

helo2 = new Helo();
helo2.setName('xiaoma');
helo2.sayHelo();

Node.jsモジュールサンプル

Node.jsで膨大なアプリを開発する場合、すべてのロジックをワインファイルに書くわけではないですから、モジュール化にする必要です。

module.js
var name;

exports.setName = function(pName){
    this.name = pName;
};

exports.sayHelo = function(){
    console.log('Helo ' + this.name);
};

module_use.js
var myModule = require('./module');

myModule.setName('koma');
myModule.setName('xiaoma');
myModule.sayHelo();

Node-Eventサンプル

Node.jsはイベント駆動開発フレームワークです、ここはイベントサンプルをメモします。

var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();

event.on('myevent', function(){
    console.log('myevent occured.');
});

setTimeout(function(){
    event.emit('myevent');
}, 2000);

ファイル存在判定(node.js)

Node.jsでファイル存在判定サンプルです。

仕様:
ファイル存在すれば、ファイル内容を出力;
存在しなければ、エラー内容を出力。

nano readfile.js
...
var fs = require('fs');

fs.readFile('test1.js', 'utf-8', function(error, data){
    if (error) {
        console.error(error);
    }
    else {
        console.log(data);
    }
});
...

2013年10月11日金曜日

httpサーバー自作成

Node.jsを使って、簡単にhttpサーバーを作成できます。

var http = require('http');
var path = require('path');

http.createServer(
        function(request, response) {
            var lookup = path.basename(decodeURI(request.url));
            response.writeHead(200, {
                'Content-Type' : 'text/plain'
            });

            var pages = [ {
                route : '',
                output : 'Woohoo!'
            }, {
                route : 'about',
                output : 'About Page'
            }, {
                route : 'another',
                output : function() {
                    return "This is a route.";
                }
            } ];

            pages.forEach(function(page) {
                if (page.route == lookup) {
                    response.writeHead(200, {
                        'Content-Type' : 'text/plain'
                    });
                    response.end(typeof page.out === 'function' ? page.output()
                            : page.output);
                }
            });

            if (!response.finished) {
                response.writeHead(404);
                response.end('Page Not Found.');
            }

        }).listen(8080, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8080/');

2013年10月9日水曜日

オブジェクト指向-Javascript

オブジェクト指向Javascriptサンプル

サンプルコード
// javascriptオブジェクト宣言
var Person = function(living, age, gender){
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function(){return this.gender}
}

// インスタンス作成
var cody = new Person(true, 33, 'femail');

// JSON出力
console.log(cody);
console.log('cody.getGender()=' + cody.getGender());

// String型オブジェクト
var myString = new String('google!');

console.log(myString);

2013年10月6日日曜日

Ubuntuカーネルファイル削除

/boot容量を開放する方法を紹介します。

#/boot内容確認
ll /boot
...
#linuxカーネルパッケージ確認
dpkg --get-selections |grep linux-image
linux-image-3.2.0-31-generic                    install
linux-image-3.2.0-32-generic                    install
linux-image-3.2.0-33-generic                    install
linux-image-3.2.0-34-generic                    install
linux-image-3.2.0-35-generic                    install
linux-image-3.2.0-36-generic                    install
linux-image-3.2.0-37-generic                    install
linux-image-generic                             install
...
#不要なlinuxカーネルを削除
sudo apt-get remove -y linux-image-3.2.0-31-generic
sudo apt-get autoremove -y
...
#/boot容量確認
df -h
#使用中カーネルバージョン確認
uname -a

2013年10月5日土曜日

Ubuntuでnode.jsインストール

参照ページ:
https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

インストール手順:
sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Expressインストール(MVC)
sudo npm install express -g
express --version
3.4.0

インストール先:
/usr/lib/nodejs
/usr/lib/node_modules

ホームページ