t-fjkの日記

日々の気になったことを適当に。ネタは Windows/Android アプリとか。これからサーバサイド系の話が増えていく予感。

SRM 589

TopCoder を始めてみた。

このままスキルが停滞したままだと将来詰むと思ったから。
#もう詰んでる可能性があるのが辛いところorz

生きながらにして腐るのは人間だけらしいので、無理矢理でもいろいろ始めることにする。



結果は惨敗orz

250 はSystestをクリアしてたけど
500 はテストが落ちてた(0点)orz
1000 はテストが解けるところまでも行かず。

同じ部屋にいた人をいろいろみてたけど
ほとんどが学生&みんな無駄のないコードを書くのね。
#インデントがないコードもけっこうあったけどあれはあれでいいのだろうか。


でも社会人になってからこうやって試される機会ってのは
減ってきているので継続的にチャレンジしてみようと思う。

mongoose を使う

Node.js で MongoDB の読み書きをする際に mongoose.js を使ったときのメモ。

http://mongoosejs.com/

mongoose はDB への接続するコードをできるだけ隠蔽しようとしているので、
モデル定義を使って DB への接続をほぼ意識せず使うことが可能。

DBへの接続を意識するのは起動時だけ。app.js の中で Mongo に接続する。

var mongoose = require('mongoose');
var uri = process.env.MONGOHQ_URL || 'mongodb://localhost/collectionName';
mongoose.connect(uri); 

モデルを module として定義する。

var mongoose = require('mongoose');

NAME_RECORD = 'entry';

var schema = new mongoose.Schema({
    title: {
        type: String,
        required: true
    },

    ....

    category: {
        type: Array,
        required: false
    }
});

// create object
module.exports = mongoose.model(NAME_RECORD, schema);


保存/検索を行う。

var Post = require('../models/post.js');

Post.find(condition).skip(offset).limit(limit).sort({date: order}).exec(function(err, result) {
         ...............
        });


var newPost = {title: title, url: url, from: from, to: to, date: date, category: [category]};
new Post(newPost).save(function(err)
{
    	if(!err){
		res.send(newPost);
    	}else{
		res.send("NG");
    	}
});

退職系エントリを Backbone.js + Node.js on Heroku でまとめてみる

最近流行ってる退職系エントリをまとめ中。

単にブログとかでまとめるだけだとつまらないので
せっかくなのでいろいろ使ってみることにした。

http://quitentry.herokuapp.com/

Frontend を Backbone,js + Twitter bootstrap、
Backend を Express.js + Node.js + MongoDB で作成。

Express.js を使うけど API サーバとして使うだけ。

API のルーティングはこんな感じ。

app.get('/api/search', entry.search);
app.get('/api/companies', entry.companies);
app.get('/api/add', entry.add);

ルーティングされた先で退職エントリをMongoDBから読み出して返す。

ブログエントリの構造はこんな感じ。

{
	title: 'Google 辞めました - アスペ日記',
	url: 'http://d.hatena.ne.jp/takeda25/20120511/1336746314',
	from: 'Google',
	to: '',
	date: ISODate("2012-05-11T15:00:00Z"),
	category: ["WEB"]
}

選んだエントリに特に意味はない。
DB の読み出しは Mongoose を使った。

デプロイ先は Heroku にしてみた。
データは Heroku のアドオンにある MongoHQ に直接突っ込んでる。
これからブラウザから登録できるようにしてみよう。


ソースコード全体はこちら。
https://github.com/t-fujiki/quitEntry

Vagrant をまず使ってみる

最近はソースコードのビルドやテストだけじゃなく、
環境までコマンド一発で作れるようになりつつあるみたいですね。

チームで開発してるとよく聞く「俺の環境では動いた」という名言。
よくよく調べたらMySQLのテーブルを追加しないと動かなくなるような変更入れられてた、とか。
そういうトラブルを解決するための素敵なツール、Vagrant。
#「ベイグラント」と読むらしい

http://www.vagrantup.com/

簡単にVMの構築、破棄ができて
設定ファイルにApacheなどのインストールスクリプトも含めることができるらしい。

まずはダウンロード&インストール。
http://downloads.vagrantup.com/

そのあとは作業用のディレクトリ作成&初期化。

mkdir vagrant_getting_started
cd vagrant_getting_started
vagrant init

次にVMのイメージの追加。

vagrant box add precise32 http://files.vagrantup.com/precise32.box

ここでは Ubuntu イメージを precise32 という名前で追加。

Vagrant では VM イメージのことを Box と呼ぶらしい。
その他の VM イメージはこちら参照。
http://www.vagrantbox.es/

作業ディレクトリのVagrantfileが設定ファイルになっている。
このファイルでここで使用するVMイメージを指定。

config.vm.box = "precise32"

これで準備完了。

vagrant up

で起動して、

vagrant ssh

で接続。

作業ディレクトリの中身と、立ち上げた VM の /vagrant の中身が同期しているので
ホストマシンで作業したものを VM に持って行けて便利。

apache などを VM に入れたい場合、
インストールスクリプトを書いたものを
作業ディレクトリに保存したあと("bootstrap.sh" )、設定ファイルに反映する。

config.vm.provision :shell, :path => "bootstrap.sh"

このあと、

vagrant reload

で VM に変更が反映される(インストールされる)。

作業が終わって破棄したくなったら

vagrant destroy

でおしまい。

destroy をすると、VM で行った作業はすべて破棄される。
作業を中断する場合は、

vagrant suspend

vagrant halt

を使う。
作業を再会するときは

vagrant up

で。すごい時代だ。

mi addidas に申し込んでみる。

自分で靴をデザインできる mi addidas をやってみた。
#デザインって言っても色だけだけど。

http://adidas.jp/miadidas/special/

昔履いてたスニーカーが好きだったんだけど
気付いたら生産終了してて手に入らない状態に。

ないなら作ってしまえ、と好きだったスニーカーと同じテイストで作ってみた。

miadidas

check out the
mi SS II
I just customised at miadidas.com

Customize Your Own

早く届け。

Eclipse で TestNG で Java のテストコードを書いて、EclEmma でカバレッジを計測する。

Java のテストフレームワークと言えば JUnit だと思っていましたが、
最近は TestNG というのがいいらしいです。

公式サイト
http://testng.org/doc/index.html

EclipseTestNG を使うためには、
「Help」→「Install new software」で

Eclipse 3.4 以降なら http://beust.com/eclipse
Eclipse 3.3 以前なら http://beust.com/eclipse1 を入力。

f:id:t-fjk:20130114161503p:plain

各テストメソッドに @Test アノテーションを追加する。

	@Test
	public void verify()
	{
        }

これでテストコードの準備は完了。


続いてカバレッジを計測してくれるプラグイン、EclEmma を追加。

「Help」→「Install new software」で http://update.eclemma.org/ を指定。

f:id:t-fjk:20130114161224p:plain

追加が終わったらテスト実行。
「Debug as 〜」でTestNG を選択してデバッグ実行。

結果が色分けされて表示される。
緑色の部分がテストで通った場所、赤色がテストで通らなかった場所。

f:id:t-fjk:20130114173846p:plain