はじめに Play Frameworkを利用してアプリケーションを開発する動機の一つとして「高い負荷に耐えることができる(C10K)」が挙げられます。 しかしながら、たとえPlayを使っていても、チューニングが十分でなければ高いスループットが出るとは限りません。 今回は、300RPS(RPS=リクエスト毎秒)を超えるような負荷をPlayアプリケーションにかける前に確認すべきポイントをいくつかご紹介します。 本稿ではPlay Frameworkのバージョン2.4を前提としています。 Playアプリの負荷試験前に確認すべきこと 目次 ExecutionContextが適切に分割されているか 並列実行可能なスレッド数の設定は適切か ログ出力方法は十分考慮されているか (おまけ)Amazon Linuxの設定で配慮すべきもの ExecutionContextが適切に分割されているか Executi
よりよい実装を作りました。 → http://qiita.com/yyu/items/bd6e205e801fb653a9cc はじめに ActionContとは継続モナドCont[R, A]の型AにPlayのコントローラーの結果を表す型Resultを組み合わせたCont[Future[Result], A]のことである。このActionContは継続モナドの力を用いて柔軟にコントローラーを合成するために用いられる。この記事ではまず、このActionContについて軽く紹介した後に、既存のActionContではカバーできない点について言及し、それを解決するために今回作成したActionCont.recoverWithについて説明する。 ActionContとエラー処理 ActionContとは“継続モナドを使ってWebアプリケーションのコントローラーを自由自在に組み立てる”で導入された継
Play 2.3 が出たばっかで 2.4 の話をします。 前置き: Scala での DI Scala では DI についてのベストプラクティスと言える方法はなく、まだ意見が分かれている状態です。大きく割ると DI コンテナなどを使った動的な DI と、cake pattern, implicit parameter, macro, reader monad などを利用した静的な DI の 2 パターンです。 動的な DI と静的な DI にはそれぞれメリットとデメリットがあります。動的な DI のメリットは Java のわりと優秀な DI コンテナ (Guice とか) が使えて比較的取っ付きやすいこと、デメリットは型安全ではないところ。静的な DI のメリットは型安全、デメリットは trait だの macro だの implicit parameter だの、コンパイル時間が伸びる要
Play2はsbtを使用してビルドを行っており、必要なライブラリをインターネット経由でダウンロードできることが前提になっていますが、インターネットに接続できない環境でPlay2を使用したアプリケーションをビルドする必要があったのでやってみました。 なんとなくPlay2が使用しているIvyのローカルキャッシュをそのまま持っていけばビルドできるだろうと思っていたのですが、いくつかハマりポイントがあったのでメモも兼ねて手順を書いておきます。Play2だけではなくて普通にsbtを使ったプロジェクトにも応用できると思います。 前提知識と基本方針 まず、Play2はsbtを使用していますが、sbt(というかIvy)が標準で使用するUSER_HOME/.ivyではなくPLAY_HOME/repositoryをIvyのホームディレクトリとして使用します。同様にsbtのホームディレクトリもUSER_HOME
case class Cont[R, A](run: (A => R) => R) { def map[B](f: A => B): Cont[R, B] = Cont(k => run(a => k(f(a)))) def flatMap[B](f: A => Cont[R, B]): Cont[R, B] = Cont(k => run(a => f(a).run(k))) } ここで重要なのは Cont のコンストラクターに渡される run 関数です。 この run 関数を作り Cont のコンストラクターに渡すことで、継続モナドを作ることができます。 それで run 関数の型を見てみますと (A => R) => R とあります。 A => R という型の関数を受け取り、おそらく受け取った関数を実行し R という結果を返すという動作が期待できます。 ここで A を全体の中の途中の計
タイトルの通り、playとmongoでrest apiを実装してみようと思います。 apiの実装ならsprayなどを使う手もあると思いますが、以前playで実装したときにだいぶ残念な感じになってしまったので、リベンジとしてplay-salatのサンプルを咀嚼しつついろいろ書き直してみました。 要件 サンプルとして以下のようなブログの記事を操作するAPIを作成します。 作りたいのはこんな感じの物です。 API HTTPメソッド エンドポイント 概要 GET /api/posts 記事一覧の取得 POST /api/posts 記事の作成 GET /api/posts/:id 記事の取得 PUT /api/posts/:id 記事の更新 DELETE /api/posts/:id 記事の削除 レスポンスのイメージ [ { 'id':'123456ABCDEF`, 'title': '今日の晩ご
N高等学校でプログラミングを学ぼうとしている新入生向けに、プログラミングをやっているN高等学校の生徒/卒業生の情報発信、メディア露出、作品まとめを作ってみました。適当にまとめたので、自分のも入れて欲しい!とかというのがあったらN高のSlackの #programming にて @teacher_sifue までメンションください。 7coco Tech Blog 7cocoさんの技術ブログ 文系女子高生をどん底から救ったプログラミングの魅力 | 日経 xTECH(クロステック) 7cocoさんのメディア露出 uehr uehrさんのポートフォリオサイト 「N高等学校」ってどうなの? 卒業生に聞いた、学校生活と現在 ohtasojiさんのメディア露出 学校生活振り返り - deletend’s diary deletendさんの競技プログラミングブログ かっこいいサイバーマスクを作る[後編]
Play 2.0 が正式リリースされました。Play 1.x が Java 用フレームワークであとから Scala モジュールを加えることで Scala でも利用できていたのに対して Play 2.0 は最初から Scala に対応しています。というよりも、Scala メインと言ってもいいでしょう。 Play 2.0 はとても使いやすい Web アプリケーションフレームワークですが、まだまだ情報が不足しています。今回は公式ドキュメントの Handling form submission の補足を行います。 どんなフォームデータマッピングが使用きるのか? 公式ドキュメントではフォームデータのマッピングは text と number についてだけ少しだけ述べているに過ぎません。ですが、デフォルトでもたくさんのマッピングが利用できます。 text フォームデータを String 型にマッピングし
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く