2013年2月28日木曜日

Node.jsが利用できるクラウドホスティングのまとめ「Node Hosting」

Node.jsが利用できるクラウドホスティングのまとめ「Node Hosting」が良くまとめられています。実は、今まで快適に利用させていただいていたNodejitsuが、お試し期間は30日までであることに気づきました。確かに、その旨、ページ上に明記されています。どこを見ていたのでしょうか。というわけで、急遽、実験プロジェクトサーバーの引越し先を探さなければならなくなりました。とにかく、Nodejitsuさんには、感謝であります。

2013年2月27日水曜日

Expressフレームワークで、Nodemailerを利用してのメール送信

Expressフレームワークで、Nodemailerを利用してのメール送信です。Nodemailerを利用すると、HTMLメールや添付ファイルなども送信できるようです。今回は、GmailをSMTPサーバーとして利用しました。良い感じで、送信できています。

package.json
{
  "dependencies": {
    "nodemailer": "0.3.x"
  }
}
app.js
app.post('/message', message.home);
/routes/message.js
//モジュールロード
var nodemailer = require("nodemailer");
var mailOpts, smtpTrans, mailErr;

smtpTrans = nodemailer.createTransport('SMTP', {
  service: 'Gmail',
  auth: {
      user: "youname@gmail.com",
      pass: "yourpassword" 
  }
});

exports.home = function(req, res, next){
  mailOpts = {
    from: 'youname@gmail.com', 
    to: 'to@gmail.com',
    subject: req.body.username,
    text: req.body.letter 
  };

  if ( req.body.username != "" && req.body.letter != "" ) {
    smtpTrans.sendMail(mailOpts, function (error, response) {
      if (error) {
          mailErr = error ;
      } else {
          mailErr = null ;
      }
    });
  }
  res.render('message', { title: title, username: req.body.username, letter: req.body.letter, error: mailErr });
};

実際に設定してみたサイトがこちら

参考サイト
Simple form handling with Express and Nodemailer(QScriptsさん)

2013年2月26日火曜日

Expressフレームワークで、ベーシック認証

Expressフレームワークで、ベーシック認証です。

サイト全体に設定する場合
app.js
app.use(express.basicAuth('admin','password'));
特定ページのみに設定する場合
app.js
var auth = express.basicAuth('admin','password');
app.get('/hello', auth, hello.home);

実際に設定してみたサイトがこちら

参考サイト
Node.js and Express - Basic Authentication(Tech.Pro)

2013年2月25日月曜日

nodejitsuで、製品環境(production)と開発環境(development)の切り替え

nodejitsuで、製品環境(production)と開発環境(development)の切り替えです。

// 製品環境
jitsu env set NODE_ENV production
jitsu apps restart

// 開発環境
jitsu env set NODE_ENV development
jitsu apps restart

// コマンド確認
jitsu help
参考サイト
Getting started with Express in Node(Quick Leftさん)

2013年2月24日日曜日

無料で10GBまで利用できるオンラインストレージ「Bitcasa」

無料で10GBまで利用できるオンラインストレージ「Bitcasa」を利用してみました。シンプルで良いのですが、操作性が、いまいち? しかしながら、オンライン上で、直接、写真を表示したり、動画を再生したりできるので、これは便利だなと思います。Chrome用の拡張機能やスマホアプリなども準備されていますので、クラウドストレージとして活躍してくれるでしょう。



Video streaming by Ustream

2013年2月23日土曜日

選択したエリアのみ翻訳してくれるChrome拡張機能「Translate selection」

選択したエリアのみ翻訳してくれるChrome拡張機能「Translate selection」、翻訳スピードが早いので、ストレスなく利用できます。オリジナル画面はそのままで、別ウィンドウ内に翻訳結果が表示されるので、使い勝手も良し。お勧めです。



2013年2月22日金曜日

Expressフレームワークで、MongoDBのデータ更新

Expressフレームワークで、MongoDBのデータ更新です。特定のデータ1つを取得するには、配列のdocs[0]を利用すれば良いらしい。とりあえず、データは更新できるようになりましたが、相変わらず、エラー処理がわからない。一歩一歩進めることにします。

app.js
app.get('/users/edit/:name?', user.edit);
app.post('/users/edit/:name?', user.edit);
/routes/user.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://userid:password@linus.mongohq.com:10036/dbname');
var UserSchema = edit mongoose.Schema({ 
  name: String
});
Users = mongoose.model('Users', UserSchema);

exports.edit = function(req, res, next){
  name = '';
  if (req.body.name) name = req.body.name;

  if ( name != "" ) {
    Users.find({name: req.params.name}, function(err, docs) {
      Users.update({ name: req.params.name }, { name: name }, function(err) {
          // if (err) return next(err);
      });
    });
    res.redirect('/');
  } else {
    Users.find({name: req.params.name}, function(err, docs) {
      res.render('useredit', {title: "会員編集", user: docs[0] });
    });
  }
};
/views/useredit.jade
h2 新規登録
form(action='/users/edit/#{user.name}', method='post')
  label(for='form_name') お名前
  input#form_name(name='name', value='#{name}', type='text')
  input#form_submit(name='submit', value='変更', type='submit')

実際に設定してみたサイトがこちら

2013年2月21日木曜日

Expressフレームワークで、MongoDBのデータ削除

Expressフレームワークで、MongoDBのデータ削除です。Usersオブジェクトを指定して、Users.remove()で削除できます。GETで削除していますが、POST等にするべきかも。

app.js
app.get('/users/delete/:fullname?', user.delete);
/routes/user.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://userid:password@linus.mongohq.com:10036/dbname');
var UserSchema = new mongoose.Schema({ 
  fullname: String
});
Users = mongoose.model('Users', UserSchema);

exports.delete = function(req, res){
  Users.remove({fullname: req.params.fullname}, function(err) {
    res.redirect('/users/list/');
  });
};
/views/userlist.jade
h2 ユーザー一覧
ul
each alluser in allusers
  li: a(href="/users/profile/#{alluser.fullname}") #{alluser.fullname}
  p: a(href="/users/delete/#{alluser.fullname}") 削除

実際に設定してみたサイトがこちら

2013年2月20日水曜日

Expressフレームワークで、MongoDBにデータ新規登録

Expressフレームワークで、MongoDBにデータ新規登録です。Usersオブジェクトを指定して、Users.save()で登録できるらしい。しかしながら、エラー(err)を拾おうとすると、サーバーがストップしてしまいます。対処法がわからずに、力尽きました。まだまだ、課題多しです。

app.js
app.get('/users/new', user.newuser);
app.post('/users/new', user.newuser);
/routes/user.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://userid:password@linus.mongohq.com:10036/dbname');
var UserSchema = new mongoose.Schema({ 
  fullname: String
});
Users = mongoose.model('Users', UserSchema);

exports.newuser = function(req, res){
  username = '';
  if (req.body.username) username = req.body.username;

  if (req.body.username) {
    var newusers = new Users({ 
      fullname: req.body.username
    });
    newusers.save(function (err) {
      // if (err) return next(err);
    });
    res.redirect('/users/list');
  }

  res.render('usernew', {title: "会員登録", username: username});
};
/views/usernew.jade
h2 新規登録
form(action='/users/new', method='post')
  label(for='form_name') お名前
  input#form_name(name='username', value='#{username}', type='text')
  input#form_submit(name='submit', value='登録', type='submit')

実際に設定してみたサイトがこちら

2013年2月19日火曜日

Expressフレームワークで、MongoDBに接続

Expressフレームワークで、MongoDBに接続です。実は、MongoDBデビューだったわけですが、何とか接続までは、できたような気がします。勢いだけで進めていますが、実用的なアプリが出来上がるのか、甚だ疑問です(笑)。サンプルは、nodejitsuでの例。MongoDB用の接続ドライバ「mongoose」を利用しています。

package.json
{
  "dependencies": {
    "mongoose": "2.7.x"
  }
}
app.js
app.get('/users/list', user.list);
/routes/user.js (fullnameをフィールドとしてUsersオブジェクトを確保)
var mongoose = require('mongoose');
mongoose.connect('mongodb://userid:password@linus.mongohq.com:10036/dbname');
var UserSchema = new mongoose.Schema({ 
  fullname: String
});
Users = mongoose.model('Users', UserSchema);

exports.list = function(req, res){
  Users.find({}, function(err, docs) {
    res.render('userlist', {title: "User List", allusers: docs });
  });
};
/views/userlist.jade
h2 ユーザー一覧
ul
each alluser in allusers
  li: a(href="/users/profile/#{alluser.fullname}") #{alluser.fullname}

実際に設定してみたサイトがこちら

2013年2月18日月曜日

Ubuntu 12.10 ServerにMongoDBをインストール

Ubuntu 12.10 ServerにMongoDBをインストールしてみました。こちらのページを参考に、インストールは出来たのですが、どうしても起動出来ません。何が悪いのか原因がわからず、悶々とすること、しばし。ジャーナルファイル用の領域が足らないことが原因と判明。何とか対処出来ました。デフォルトでは、起動するだけで、3.3GBほど消費されるようです。お恥ずかしながら、ハードディスクの容量不足です。mongod --smallfilesを指定してから起動すると、見事に立ち上がりました。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
vi /etc/apt/sources.list.d/10gen.list(10gen.listファイルに、下記の1行を書き込んで保存)
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
sudo apt-get update
sudo apt-get install mongodb-10gen
sudo service mongodb start
sudo service mongodb stop
下記のエラーが表示され、起動できていませんでした。
ERROR: Insufficient free space for journal files
Please make at least 3379MB available in /var/mongodb/journal or use --smallfiles
mongod --smallfiles
sudo service mongodb start


参考サイト
ケチケチMongoDB(しのぶら!!!さん)

2013年2月17日日曜日

U.S. Geological SurveyとGoogle Mapのマッシュアップ「過去1週間の地震」

U.S. Geological SurveyGoogle Mapのマッシュアップ「過去1週間の地震」。数多く存在するマッシュアップサイトの中でも、非常に有益な情報を提供してくれるものの1つ。こういった情報を気にかけていくことが、防災対策の第一歩になるはずです。こちらで地震データを、RSSやCSV、Json形式で提供してくれています。開発者魂に火がついてしまった方、是非、どうぞ。

2013年2月16日土曜日

Expressフレームワークで、エラーページ

Expressフレームワークで、エラーページの設定です。res.sendで、各種ステータスコードが送信できるらしい。res.sendは、一番最初に押さえておくべき基本でした。

res.send(200);
res.send('sample html');
res.send(404, 'error message');
res.send(500, { error: 'error message' });
app.js
app.configure(function(){
  // 各種定義、設定、モジュールの読み込みの後
  // ルートにマッチするページがない場合404エラーページ表示

  // 404
  app.use(function(req, res){
    res.send(404, '<h1>404 yon-maru-yon</h1><p>ファイルが見つかりません。</p>');
  });
実際に設定してみたサイトがこちら

2013年2月15日金曜日

Expressフレームワークで、セッション(session)

Expressフレームワークで、セッション(session)の設定です。app.jsexpress.sessionを宣言して、ハッシュ値を指定する必要があるらしい。

app.js
app.configure(function(){
  // ハッシュ値として、「this is a secret」を指定
  app.use(express.session({secret: 'this is a secret'}));
/routes/message.js
  // 設定
  req.session.name = req.param('letter') ;
  // 取得
  name = req.session.name ;
実際に設定してみたサイトがこちら

2013年2月14日木曜日

Expressフレームワークで、クッキー(cookie)

Expressフレームワークで、クッキー(cookie)の設定です。app.jsに、express.cookieParser()の宣言が必要らしいです。res.cookieで設定、res.clearCookieで削除、req.cookiesで設定値を取得。これなら理解しやすい。

app.js
app.configure(function(){
  app.use(express.cookieParser());
/routes/message.js
  // 設定
  res.cookie('name', req.param('letter')) ;
  // 削除
  res.clearCookie('name') ;
  // 設定値を取得
  name = req.cookies.name ;
実際に設定してみたサイトがこちら

2013年2月13日水曜日

Expressフレームワークで、json形式のデータを返す

Expressフレームワークで、json形式のデータを返す設定です。res.jsonにデータを指定するだけ。これは非常に楽。他にも、Responseオブジェクトには、便利に使えるメソッドが数多く用意されていて、見ていて飽きません。これらを組み合わせれば、なんでもできそうな気がしてきます(笑)。

/routes/user.js
exports.list = function(req, res){
  var users = ['aaa','bbbb','ccccc','dddddd','ee','fff','gggg'] ;
  res.json(users);
};
実際に設定してみたサイトがこちら

2013年2月12日火曜日

ExpressフレームワークのYouTubeチュートリアル、全14回(英語)

ExpressフレームワークのYouTubeチュートリアル、全14回(英語)です。話すスピードが速いですが、多少の聴き逃しがあっても、具体例を示しながら丁寧に解説されているので、何とかついていけます。ドキュメントを読むよりも、実践的で、身につくこと間違いなし。作者に感謝です。



























2013年2月11日月曜日

GETやPOST以外に、PUT、DELETEなどのHTTPリクエストをテストできるchrome拡張機能「Advanced REST Client」

GETやPOST以外に、PUT、DELETEなどのHTTPリクエストをテストできるchrome拡張機能「Advanced REST Client」、これがウェブアプリを作成する際のデバック用に非常に便利。テストしたいURLに、簡単にHTTPリクエストを送信することができます。返される値も、ステータスコードやリクエストヘッダ、レスポンスヘッダなど、細かく確認することが可能です。素晴らしい。



2013年2月10日日曜日

Ubuntu 12.10 ServerにSambaを設定

Ubuntu 12.10 ServerにSamba(3.6.6)を設定してみました。Samba4がリリースされたということで、新しいものを試してみたのですが、バージョン3がインストールされてしまいました。とりあえず、利用できるので、力尽きて、道半ばにして終わりました。

sudo apt-get install samba

# 新しいものをインストールする場合
sudo apt-get install samba4
vi /etc/samba/smb.conf
# "security = user" is always a good idea. This will require a Unix account
# in this server for every user accessing the server. See
# /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
# in the samba-doc package for details.
security = user

[allusers]
  comment = All Users
  path = /home/shares/allusers
  valid users = @users
  force group = users
  create mask = 0660
  directory mask = 0771
  writable = yes

[homes]
   comment = Home Directories
   browseable = no
   valid users = %S
   writable = yes
   create mask = 0700
   directory mask = 0700
/etc/init.d/smbd restart

mkdir -p /home/shares/allusers
chown -R root:users /home/shares/allusers/
chmod -R ug+rwx,o+rx-w /home/shares/allusers/

useradd sampleuser -m -G users
passwd sampleuser
smbpasswd -a sampleuser

/etc/init.d/smbd restart

smbd -V
Version 3.6.6

参考サイト
Ubuntu 12.10 Samba Standalone Server With tdbsam Backend(HowtoForge)

2013年2月9日土曜日

Expressフレームワークで、GET、POSTデータの取得

Expressフレームワークで、GET、POSTデータの取得です。GETは、req.param('変数名')、POSTは、req.body.(変数名)で取得できるらしい。やっとの思いでここまで辿り着きました。先は長い(笑)。

/routes/message.js
exports.home = function(req, res){
  username = req.body.username;
  letter = req.body.letter;
  if (req.param('username')) username = req.param('username')
  if (req.param('letter')) letter = req.param('letter')
  res.render('message', { username: username, letter: letter });
};
実際に設定してみたサイトがこちら


2013年2月8日金曜日

Expressフレームワークで、新規ページ追加

Expressフレームワークで、新規ページ追加です。単純に、メッセージを表示するだけのmessage.jsとmessage.jade。初歩の初歩です。これで喜んでしまっているわけですから、おめでたいと言ってしまいましょう(笑)。

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

app.get('/message', message.home);
/routes/message.js
exports.home = function(req, res){
  res.render('message', { title: 'タイトル' });
};
/view/message.jade
extends layout
block content
  h2 結果
  p #{title}

実際に設定してみたサイトがこちら

参考サイト
Expressでのルーティングの肥大化と解消法(Node.js)(ZeBeVogue別館さん)

2013年2月7日木曜日

HTMLから、Jade形式のフォーマットに変換してくれる「HTML to Jade converter」

HTMLから、Jade形式のフォーマットに変換してくれる「HTML to Jade converter」。対応するタグを調べるのが面倒だなと思っていたら、便利なものがありました。有難いサービスです。ドキュメントを読むよりも、使い勝手が良いです。



参考サイト
html2jade(GitHub)

2013年2月6日水曜日

nodejitsuに、node.jsのExpressフレームワークを設定

nodejitsuに、node.jsExpressフレームワークを何とか設定できました。うまくいかなかったのは、jadeの設定が欠けていたために、サーバーが起動できていなかったことが原因でした。これでまた、いろいろ試してみることができそうです。

package.json
{
  "name": "myapp",
  "subdomain": "yourname.myapp",
  "scripts": {
    "start": "app.js"
  },
  "version": "0.0.0-1",
  "engines": {
    "node": "0.8.x"
  },
  "dependencies": {
    "express": "3.1.x",
    "jade": "0.28.x"
  }
}
実際に設定してみたサイトがこちら

参考サイト
Nodejitsu.deploy(Node Guyさん)

2013年2月5日火曜日

node.jsのフレームワーク「Express」をインストール

node.jsのフレームワーク「Express」をインストールしてみました。ローカル環境では問題なくインストールでき、ウェブサーバーも起動できたのですが、nodejitsuにデプロイできない。ちょっと挫折気味。もっと基本的なことから勉強しなおさないとダメですね。

npm install -g express
express -t ejs myapp
cd myapp
npm install -d
node app.js


参考サイト
基礎から学ぶNode.js(gihyo.jp)

2013年2月4日月曜日

node.jsクラウドの「nodejitsu」で、「Hello World」

node.jsクラウドの「nodejitsu」で、「Hello World」です。jitsuコマンドインストール後、アカウントにログインして、デプロイするだけです。ローカルの環境は、Ubuntu 12.10 Server。特に躓くこともなく、すんなり進められました。

npm install jitsu -g
jitsu login
jitsu deploy
実際に設定したサイトがこちら



参考サイト
Node.js cloud products and services(Nodejitsu)

2013年2月3日日曜日

4KウルトラHD映像の素晴らしさが確認できるYouTube映像「INK DROPS 4K」

4KウルトラHD映像の素晴らしさが確認できるYouTube映像「INK DROPS 4K」が登場しています(Watching This Clip Shows Why 4K Video Might Be A Thing)。実に、1080p映像の4倍の画質です。この素晴らしさを確認するには、それなりのモニターを利用している必要があると思いますが、ソフト側の準備は意外と早く進むのかもしれません。次期オリンピック時には、スタンダードになっていると思われる画質です。ハード面も着々と準備が勧められているのでしょう。変化のスピードに、ついていけない(笑)。

2013年2月2日土曜日

node.jsで、「Hello World」(続き)

node.jsで、「Hello World」の続きです。どうもよくわからないのですが、http.createServerは、requestListenerを受け取るということで、理解しておきましょう。とりあえず、ブラウザ上で表示を確認できました。

var http = require('http');

var requestListener = function(req, res) {
  res.writeHead(200);
  res.end('Hello, World!\n');
}

var server = http.createServer(requestListener);
server.listen(8888);

2013年2月1日金曜日

node.jsで、「Hello World」

node.jsで、「Hello World」です。また実験プロジェクトをスタートさせようと思います。今回は、node.jsの気分(笑)。何もわかっていないので、楽しみながら、少しづつ進めていけたらと思います。

ubuntu 12.10 serverにnode.jsをインストール
apt-get install python-software-properties
add-apt-repository ppa:chris-lea/node.js
apt-get update
apt-get install nodejs npm
helloworld.js
console.log("Hello World");
helloworld.jsを起動
node helloworld.js
素晴らしい! 表示できました。ちょっと感動です。



参考サイト
Nodeビギナーズブック
Ubuntu 12.04.1 LTSにNode.js環境を作る(visible trueさん)
Installing Node.js via package manager(GitHub)