Hatena::ブログ(Diary)

ホワイトぼーど このページをアンテナに追加 RSSフィード Twitter

2012-02-18

『情弱姫+iPhone』第27話公開しました

http://hime.dojin.com/

おまたせしました。
第27話更新しました。
サーバに反映されるのはちと遅れるかもしれませんが、とりあえず今週中は守りきった。
コメントはこちらでお願いします。

2011-11-13

『情弱姫+iPhone』第26話公開しました

http://hime.dojin.com/

久しぶりの更新です。
気がついたら寒くなってしまって、ストーブで手を温めながら作業してます。

この記事のコメント欄を第26話のコメント欄にしますので、
感想などございましたら、ぜひ残して行ってください。

2011-11-12

MongoDBをWindowsのサービスに登録する

執筆時点でのMongoDBの最新バージョンは2.0.1。
MongoDBは、データの格納形式がBSONというJSONバイナリ版のような形式で、また、JavaScriptをストアドプロシージャとして利用できるなど、これからnode.jsと共にJavascriptを学ぼうという私のような人間には一石二鳥な仕様です。


MongoDBダウンロード


MongoDBサイトからファイルをダウンロードします。
http://www.mongodb.org/downloads
環境に応じて「Windows 64-bit」か「Windows 32-bit」を選択し、ダウンロードしたら解凍します。
mongodb-win32-x86_64-2.0.1」というディレクトリができます。(64bitの場合)


USBメモリなどで持ち歩いて使う場合


学校など勝手にアプリケーションインストールができないようになっているパソコンでも、USBメモリなどで持ち歩いて簡単に利用できるのがMongoDBのいいところです。

例えばUSBメモリのドライブが「K:」だった場合は、「K:\MongoDB」というディレクトリを作って、ここに先ほど解凍した「mongodb-win32-x86_64-2.0.1」を入れます。
すると、「K:\MongoDB\mongodb-win32-x86_64-2.0.1\bin\mongod.exe」を実行するだけで、データベースが立ち上がります。

ただし、データとログの格納場所がデフォルトでは「C:\data」ディレトリ内になっているので、これを変える必要はあります。
「K:\MongoDB\log」ディレクトリと「K:\MongoDB\dbディレクトリを作った上で、以下のようにコマンドプロンプトオプションを指定して起動すると問題ありません。

> K:\MongoDB\mongodb-win32-x86_64-2.0.1\bin\mongod.exe --logpath K:\MongoDB\log\log.txt --dbpath K:\MongoDB\db
all output going to: K:\MongoDB\log\log.txt

コマンドプロンプトのウィンドウが開いたままですが、この状態でデータベースは起動しています。


MongoDBWindowsのサービスとして登録する


自分のパソコンで使用する際は逆に、イチイチコマンドを打って立ち上げるのも面倒だし、コマンドプロンプトも邪魔です。
自分のパソコンの場合は、Windowsのサービスとして登録しておくのがベスト。

注意点は上の「USBメモリで使う」場合と同じで、まず、データとログの格納ディレクトリを作成し、サービス登録時にそのディレクトリを指定します。
私の場合、「C:\MongoDBディレクトリを作成し、その下に「mongodb-win32-x86_64-2.0.1」をコピーし、「C:\MongoDB\log」ディレクトリと「C:\MongoDB\dbディレクトリを作りました。

インストールコマンドは具体的には以下になります。
といっても、「--install」を加えただけですが、注意点としてコマンドプロンプトは管理者として実行する必要があります。

> C:\MongoDB\mongodb-win32-x86_64-2.0.1\bin\mongod.exe --install --logpath C:\MongoDB\log\log.txt --dbpath C:\MongoDB\db
all output going to: C:\MongoDB\log\log.txt

インストールできたかどうかのログは既にlog.txtの方に書きこまれているので確認してみましょう。


動作しているか確認する


「C:\MongoDB\mongodb-win32-x86_64-2.0.1\bin\mongo.exe」をダブルクリックすると、データベースへのインターフェイスが立ち上がります。

MongoDB shell version: 2.0.1
connecting to: test
>

「show dbs」と打ち込むと現在登録されているDBが表示されます。

> show dbs
local   (empty)


Windowsのサービスから削除する

> mongod --remove
Deleting service MongoDB.
Service deleted successfully.

2011-11-11

windows版node.js0.6のモジュールの配置

node.jsv0.6ではNODE_PATHを使う



この記事を書いた12時間後に新しい情報が出ました。詳しくは一番下に。

モジュールをまとめて置いておけて、参照される場所は無いのかと思い調べてみました。
調べてみたら、以下のnode.jsコードを実行すればパスが表示されるという記事を多くみかけました。

console.log(require.paths);

ところがエラーが返ってきました。
『v0.4 から v0.6 で変更された API』を見てみると
http://nodejs.jp/nodejs.org_ja/api/change_0.4_to_0.6.html

require.paths は削除されました (NODE_PATH 環境変数を使用してください).



NODE_PATH環境変数に登録する


「コントロール パネル\システムとセキュリティ\システム」から「システムのプロパティ」を開いて、NODE_PATHを追加する。
値は「C:\node\node_modules」にして、この中にモジュールを詰め込んでいきたいと思います。
f:id:white_chi:20111111012233g:image



csvモジュールを入れる


さっそく、前回使用した『csv.js』を入れてみたいと思います。
もう一度ダウンロードして、解凍すると「voodootikigod-node-csv-ac2e136」というディレクトリができましたが、これを「csv」という名前に変更して、「C:\node\node_modules」以下に移動します。

これだけです。
簡単ですね。
これでもう、わざわざソース内でパスを指定しなくても使えるようになりました。

試してみましょう。

var csv = require('csv');
var infile = './KEN_ALL.CSV';
var outfile = './KEN_ALL_transformed.txt';

csv().fromPath(infile).toPath(outfile).transform(function(data){
	return data[6] + data[7] + data[8] + '\n';
});

無事動きました。



module.paths


require.pathsが削除された代わりに

console.log(module.paths);

がrequire.pathsと同じような結果を出します。
実際、ソースの先頭に

module.paths = [ 'C:\\node\\node_modules' ];

という一行を置いても、先ほどのNODE_PATHを環境変数に追加したのと同じような結果になりました。


追記(12時間後)


そうこう書いてるうちに、Windowsでのnpmのインストールの話が出てました。
Node.js と npm のインストール方法(Windows編)
うれしいやら、悲しいやら…。
いやうれしいです。

2011-11-10

node.jsでCSVファイルを読み込む

モジュール『csv.js』を使う


VirtualBoxイチイチ立ち上げるのが面倒だし、メモリも足り無いので、最近はWindows上でnode.jsイジってます。
node.exeファイル1つをダウンロードするだけだし、パスの通ったフォルダに入れてるだけで使えるので、楽チンです。

UNIX上だと、npmを使ってモジュールを簡単にインストールできますが、Windows版のnpmはまだこの時点では無い様です。ですので今回使用する『csv.js』は手動でダウンロードして使うことになります。

csv.js』はjavascriptで書かれていますので、コンパイルの必要は無く、ダウンロードすればそのまますぐに使用出来ます。


csv.js』の入手


以下からダウンロードします。
https://github.com/wdavidw/node-csv-parser
(「Downloads」のボタンを押すしてダウンロード
ダウンロードした圧縮ファイルを解凍し、「./lib」ディレクトリの中に『csv.js』が入ってますので、これを作業ディレクトリにコピーしておきます。


郵便番号CSVの入手


CSVデータとして手軽に入り、かつ比較的仕事でも扱うことの多い、郵便番号CSVデータを使います。
以下からダウンロードできます。
http://www.post.japanpost.jp/zipcode/dl/kogaki.html
(『全国一括』をクリック)

解凍すると、『KEN_ALL.CSV』が入手できます。
これも作業ディレクトリに入れておきます。


csv.js』の使い方(1) カラムの取り出し

var csv = require('./csv.js');
var infile = './KEN_ALL.CSV';

csv().fromPath(infile).on('data',function(data){
	console.log(data[6]);
});

実行してみると、都道府県名がすごい勢いで出力されます。
単に、csvのカラムの6番目(都道府県名)のデータを取り出して出力しているだけです。
シンプルに書けますね。


csv.js』の使い方(2) transformは出力の際に便利

var csv = require('./csv.js');
var infile = './KEN_ALL.CSV';
var outfile = './KEN_ALL_transformed.txt';

csv().fromPath(infile).toPath(outfile).transform(function(data){
	return data[6] + data[7] + data[8] + '\n';
});

csv.js』の面白い使い方として、transformがあります。

読み込み、その中で条件分岐して使用するだけなら(1)で十分ですが、データを1行ずつ加工して一気に出力する場合、transformはとても強力な使い方ができます。

上のソースを実行すると住所が「KEN_ALL_transformed.txt」に書きこまれます。
CSVのカラムの6番目(都道府県名)、7番目(市区町村名)、8番目(それ以下)の3つを結合して出力しているだけですが、かなりシンプルに記述できます。