タグ

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

  • ScalaのHTTPインターフェース http4s 超入門

    What’s http4s# RackやWSGIのScala版といったところ。公式サイトの説明も次のように書いてある。 http4s is a minimal, idiomatic Scala interface for HTTP. http4s is Scala’s answer to Ruby’s Rack, Python’s WSGI, Haskell’s WAI, and Java’s Servlets. まだまだ開発途中でドキュメントなどはあまり整備されていなくて、まともに使おうと思ったらソースコードを読む必要が出てきそう。次期Scalatraのバックエンドになるとかならないとか噂されているけどはてさて?もしかしたらAkkaやFinagleに押されて流行らずに終わる可能性もある。 ちなみにscalaz-streamが使われている。 Install# 最小構成で使う場合は http

    ScalaのHTTPインターフェース http4s 超入門
  • PHP 5.4のトレイトで読み取り専用配列を実装してみる

    traitを使って何か作ってみようと思い立ち、読み取り専用の配列を実装してみました。配列として扱いたい(例えばforeachで回したいとか)けど外側からの変更は受け付けたくないというシチュエーションで使えます。 <?php trait ReadOnlyArray { private $items = []; public function offsetGet($key) { if (!array_key_exists($key, $this->items)) { throw new OutOfRangeException(); } return $this->items[$key]; } public function offsetSet($key, $value) { throw new BadMethodCallException(); } public function offset

    PHP 5.4のトレイトで読み取り専用配列を実装してみる
  • Chefで始めるシステム構成管理入門 その1

    最近 Chef というシステムの構成を自動で管理するツールを使い始めました。同様のツールとして Puppet が有名ですが、レシピを内部DSLで記述出来るほうが自分には合っていると思ったので、今回は Chef を採用しました。折角覚えたので復習も兼ねてエントリを起こしてみます。このエントリがChefの導入を検討している方への手助けになれば幸いです。 Chefの仕組み – 意外と依存関係が面倒なChef Server# Chefの基的な仕組みは、サーバに設定を置き、クライアントがサーバに問い合わせるPull型のシステムです。クライアントはサーバからのレスポンスに従いパッケージのインストールなどを行います。しかし、Chef ServerはRuby(Merb), CouchDB, RabbitMQなど依存が多く、お世辞にもシンプルなシステムとは言えません。そのせいかネットで検索して出てくる情報

    Chefで始めるシステム構成管理入門 その1
  • Vowsで前処理・後処理を行うには

    Vowsの場合、前処理はtopic内で行い、後処理はteardownを使用します。RSpecの after(:all) の動作に近い感じです。 vows .describe("Hoge") .addBatch 'a instance': # 前処理 topic: -> 'should hogehoge': (topic) -> assert.ok topic.hogehoge # 後処理 teardown: (topic) -> また、別のアプローチでaddBatchを利用する事も出来そうです。addBatchは順に実行されるので、前処理・後処理というよりは、一番最初・最後に実施したいテストなどがある場合に有効かもしれません。 suite = vows.describe("Hoge") suite.addBatch 'first test': topic: -> suite.addBatc

    Vowsで前処理・後処理を行うには
  • 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 のスケールアウトを実現する方法
  • Gitを使った開発・運用フローの紹介

    私の所属している会社では、2年程前にバージョン管理システムをSubversionからGitに移行し、現在まで開発フローを試行錯誤してきました。ようやく形になってきたということで、守秘義務に接触しない程度に紹介&考察していきたいと思います。 形になってきたとはいえ、まだまだ試行錯誤中ですので色々なツッコミは大歓迎です。 現在の開発フローの俯瞰図# 現在の開発フローを俯瞰してみると大体下記図のような感じになっています。途中で図を書くのが面倒になった都合上、Jenkinsさんが1人しか居ませんが、実際はmasterブランチの他にreleaseブランチも監視してもらっています。 以降この図を元に話を進めていきたと思います。 Gitoriousを利用して自由に開発# GitoriousというGitHubに似たサービスがあります。このGitoriousはオープンソースとしても公開されていますので社内に

    Gitを使った開発・運用フローの紹介
  • 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 を快適に利用する
  • 1