タグ

ブックマーク / blog.dakatsuka.jp (9)

  • MongoMapperでER図っぽいものを生成するgemを作った

    モデルの数がそれなりにあるプロジェクトに途中から参加すると、モデル同士の関連を把握するのに結構苦労するので、ER図の存在が重要になってくる。ActiveRecordならRails ERDというgemを使えばER図を生成してくれるのだが、MongoMapper用のツールは無さそうだったので作った。 こんな感じの画像を生成できる。 まだ One-To-Many だけで Many-To-Many や Embedded には対応していないのだけど、ひとまず全体を把握するのには役にたった。余裕があれば対応していきたい。Pull requestも待ってます! dakatsuka/mongo_mapper_diagram - GitHub ちなみにグラフの生成には@merborne氏のGvizを使いました。Rubyから簡単にGraphvizが扱えて便利だった。 使い方# Gemfileに追加。

    MongoMapperでER図っぽいものを生成するgemを作った
    yuiseki
    yuiseki 2014/02/20
  • Node.js + Vowsではじめるテスト駆動開発

    Node.jsで使えるTDD, BDDフレームワークはいくつかあるのですが(nodeunit, Jasmine, etc)コールバック・イベント周りのテストのしやすさとCoffeeScriptが利用出来る Vows が非常に熱い感じです。 特にテストコードをCoffeeScriptで(別途コンパイルせずに)そのまま記述出来るのは、テストコードの可読性を考えると大きなメリットだと思います。 Vowsのインストール# VowsはNode Package Manager(npm)でインストールする事が出来ます。vowsコマンドを有効にするためにカレントディレクトリの node_modules の他にグローバルにも入れておきましょう。 npm install vows npm install -g vows Vowsを使った開発手順# サンプルとして自分のフルネームを返す事しか出来ないPerson

    Node.js + Vowsではじめるテスト駆動開発
  • Redis の Pub/Sub を使って Node.js + WebSocket のスケールアウトを実現する方法

    Node におけるスケールアーキテクチャ考察(Scale 編)というエントリーを読んで、RedisはPub/Sub型通信をサポートしているという事を知りました。エントリーでも言及されているように、Pub/Subを使えば Node.js + WebSocket サーバをスケールする際に、中継サーバの役割を果たす事が出来るはずです。 そんな訳で実際に Node.js と Redis を使って Pub/Sub の実験を行なってみました。ユーザが別々のNode.jsサーバに接続していてもWebSocketを通してメッセージのやり取りを出来るようにします。 イメージとしてはこんな感じです。 下準備# Ubuntuの場合は apt-get で1発でインストールする事が出来ます。 $ sudo apt-get install redis npmでredisモジュールをインストールします。 $ npm i

    Redis の Pub/Sub を使って Node.js + WebSocket のスケールアウトを実現する方法
  • Twitter Streaming APIをMongoDBに保存して遊んでみる

    TwitterのストリーミングAPIを利用する場合、かなりのデータ量が流れてくるので、リアルタイムに解析・集計などを行うと処理が追いつかない可能性が出てきます。 そこで、流れてきたデータをいったんどこかに保存しておいて後からバッチ処理で解析をしていく事になると思います。今回はその保存先にMongoDBをチョイスします。 なぜMongoDBなのか# RDBMSに比べて高速 BSON形式で保存するので、JSONの階層構造をそのまま維持して保存可能 NoSQLながらGROUP BYライクな集計処理が可能 ということで、試しにストリーミングAPIのsampleから流れてくるデータをMongoDBに保存するスクリプトを書いてみました。このスクリプトを動かすには、別途MongoDB体と「json」「bson_ext」「mongo」の3つのgemが必要になります。 # coding: utf-8 #

    Twitter Streaming APIをMongoDBに保存して遊んでみる
  • さくらのVPS(Ubuntu 10.04)にRed5を入れたときのメモ

    とある事情でさくらのVPSにRed5(ストリーミングサーバ)を入れたので、その時のメモをブログに残しておきます。なお、さくらのVPSで動かしているOSはUbuntu 10.04です。 ※ Red5とはRTMPを使ったオープンソースのストリーミングサーバですが、詳しい説明は割愛します。 Red5はSun Javaで動かした方が良いらしいので、まずsun-java6をインストールします。 sudo apt-get install python-software-properties sudo add-apt-repository 'deb http://archive.canonical.com/ lucid partner' sudo apt-get update sudo apt-get install sun-java6-jre sun-java6-jdk ant java-common

    さくらのVPS(Ubuntu 10.04)にRed5を入れたときのメモ
    yuiseki
    yuiseki 2011/12/26
  • Node.js アプリをデプロイして Upstart で起動させる Capistrano レシピを書いた

    Node.js アプリをデプロイする場合、Heroku などの PaaS を使っているとすごく簡単なのですが、デプロイ先が VPS や専用サーバの場合、何かしらのツールを使ってデプロイをする事になると思います。 今回はデプロイツールに Capistrano を使うことにしました。ただ、Capistrano はそのままだと Rails 用になっているので、Node.js 用に少しレシピを書き換えます。ちなみに当初の予定では起動・監視ツールに Node.js製の Forever を使うはずだったのですが、v0.5系でうまく動作しなかったので急遽 Upstart で代用することにしました。他にも Upstart + God という組み合わせも良さそうですがまだ未検証。 # This program is free software. It comes without any warranty,

    Node.js アプリをデプロイして Upstart で起動させる Capistrano レシピを書いた
  • Consistent HashingをNode.jsで実装してみた

    Node.js から Key Value Store などを利用する際に、キーを複数のノードに分散させる汎用的なライブラリがあったら便利なのではと思い実装してみました。 ソースコードはGitHubで公開しています。ライセンスはMIT Licenseとします。 git clone git://github.com/dakatsuka/node-consistent-hashing.git また、npmでもインストール出来るようにしました。 npm install consistent-hashing 使い方# 基的な使い方は下記の通りです。 var ConsistentHashing = require('consistent-hashing'); var cons = new ConsistentHashing(["node1", "node2", "node3"]); console.

    Consistent HashingをNode.jsで実装してみた
  • APIの作成に特化したRuby製フレームワーク grape を試してみた

    RESTful API の作成に特化したマイクロフレームワーク grape の存在を知ったので調査してみる事にしました。API の実装 に Rails の ActionController は重厚すぎる、Sinatra は軽いけど手間がかかる。。。という中で作られたこのフレームワーク、はたしてその実力は… grape の特徴# grape の特徴は概ね以下の通りです。grape 自体が Rack アプリケーションなので Rails3 に組み込むことが出来ます。というよりは組み込んで使うのが前提のようです(勿論単体でも動きます)。 Rack アプリケーション Sinatra ライクな DSL 自動で JSON にシリアライズ(#serializable_hash または #to_json が存在すればOKみたい) grape を使ってみる# 特徴を掴んだところで、実際にインストールして使って

    APIの作成に特化したRuby製フレームワーク grape を試してみた
  • hirb を導入して rails console を快適に利用する

    ruby-1.9.2-p180 > Hirb.enable => true ruby-1.9.2-p180 > Prefecture.limit(3) Prefecture Load (0.3ms) SELECT `prefectures`.* FROM `prefectures` LIMIT 3 +----+--------+ | id | name | +----+--------+ | 1 | 北海道 | | 2 | 青森県 | | 3 | 岩手県 | +----+--------+ 3 rows in set ruby-1.9.2-p180 > Gender.limit(3) Gender Load (0.4ms) SELECT `genders`.* FROM `genders` LIMIT 3 +----+------+---------------+-------------

    hirb を導入して rails console を快適に利用する
    yuiseki
    yuiseki 2011/05/16
  • 1