Keep on moving

あんまりまとまってないことを書きますよ

Scalatra+scalatra-lift-jsonでJSON

ScalatraでJSONをrequest/responseで扱いたい場合にはscalatra-jsonを使うのが便利。

導入方法

build.sbtに以下のように追加します。
※バージョンは適宜変えてください。

libraryDependencies ++= Seq(
"org.scalatra" % "scalatra" % "2.1.1",
"org.scalatra" % "scalatra-lift-json" % "2.1.1"
)

使用例

↓のエントリを真似して書いてみた例

http://d.hatena.ne.jp/tototoshi/20120526/1338032893

感想

RESTful APIでpost/put/deleteなどでJSONを受ける際に、parsedBodyにpattern matchがすぐに使えるので
ソースコードの見通しが良くなるのが非常に嬉しいですね。

「JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技」という本が出ます。

id:cimadai (@)さんにお誘いを受けまして執筆のお手伝いをさせていただきました。

JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

JavaScriptテクニックバイブル ~効率的な開発に役立つ150の技

この本ってどんな本?

Webアプリケーションを作るときの杖(not 魔法の杖) or 冒険の地図というのがコンセプトの一部です。

JavaScriptの知識はWebを検索すればすぐに見つかるようになりました。
しかし、見つかるものはすでに古くなっていたり、いい記事にたどり着くまでに時間がかかる事も多く、
こういうのをなんとかしたいというのがこの本の目的です。

O'Reilly Japan - Head First JavaScriptを読み終えた初心者から中上級者まで広く楽しんでいただけるような材料を取り揃えさせていただきました。
特にデバッグ&テストに多くのページを用意しております。

id:cimadaiさん、id:rokujyouhitoma(@) をはじめ, id:kiris60(@)さん、浜辺 将太 さん、藤木 祐介 さんら著者達が
選りすぐった読んですぐに役に立つ知識、イベントのような押さえておくべき知識やHTML5,
最新のライブラリの話など盛りだくさんの一冊になっております。

この本の使い方

アプリを開発するときに傍らにおいて使う事を想定しています。
是非他のJavaScriptの良著ともに開発を行っていただけると良いなと思っております。
本書中でも何冊か詳解したうちの何冊化を紹介しておきます。

JavaScript 第6版

JavaScript 第6版


テスト駆動JavaScript

テスト駆動JavaScript


Secrets of the Javascript Ninja

Secrets of the Javascript Ninja

まとめ

初めて読み通した技術書であるサイ本の日本語版の第6版が出る時期に本書を出せたのは、感慨深いものがあります。
本書は8月31日に発売予定です。是非一度手に取って読んでいただけると幸いです。

たぶん日本で一番速いPlay!2.0本感想

前から出る出るっていう話だけ出ていたPlay!framework2.0本が出ましたね。
Java/Scalaで別々の本になっています。

Manning: Play for Scala
Manning: Play for Java

作者は、Scala版はドキュメントの責任者をやってる Peter Hilton、Java版は1.2.X系のリーダーNicolas leroux

とりあえず両方買って現状のものを斜め読みしたので現状(4/27)の感想を書いときます。

感想





まとめ

まだ全体が書かれてないので何とも言えないのですが、一般的なWebシステムの作り方+テスト+Deployが
中心になりそうです。Tutorial++って感じですね。
上でも書いたけど、どちらかというと初心者〜中級者向けがターゲットみたいです。
これから始めたいって方は買ってもいいとおもいます。
あとJavaの方が若干技術よりな話題が多い気がする。

Play2.0の目玉機能である非同期なところとか、Comet/Websocket周りとかの話はなさそう。
個人的には速いところPart III: Advanced techniques が読みたいですね。
あと現状MEAPなので、これ読んでみたいとかはOpen Forumで言えるといいなー
http://www.manning-sandbox.com/forum.jspa?forumID=810

Play2.0で自作プラグインを書く

motivation

Play2.0ではプラグインの書き方の資料はありません。MLを見てる感じだとsbtのsubprojectとして
プラグインを書くのが一般的のようです。他のモジュールを参考にして、github上に

書き方

  1. sbtの構成で書く

現状のModuleはフォルダ構成がまちまちなのですが、今後を考えるとsbtの構成で書くようにした方が良さそう

.
├── build.sbt
├── project
│   ├── plugins.sbt
├── src
│   └── main
│       └── scala
│           └── com
│               └── github
│                   └── masahitojp
│                       └── play2
│                           └── sample
│                               └── SamplePlugin.scala
└── version.sbt
  1. SamplePluginの書き方

Scalaでの書き方を説明します。play.api.Pluginを継承します。
Play!1.Xではたくさんのフックイベントが存在するのですが、2.Xではいまのところ
onStart/onStop/enabledのみ使えます。

package com.github.masahitojp.play2.sample

import play.api._

class SamplePlugin(val app: Application) extends Plugin {
  val name = "sample"
  // 起動時に実行される
  override def onStart() {
    Logger.info("sample on start")
  }
  // アプリケーション終了時に実行
  override def onStop() {
    Logger.info("sample on end")
  }
  // アプリケーションの有効フラグ
  override def enabled() = !app.configuration.getString("SamplePlugin")
      .filter(_ == "disabled").isDefined
}
  1. 公開する

他のモジュールではSonatypeを使ってmaven projectを使うのが一般的みたい。
公開の仕方はこちらを参考にすると良いです。
なおpgp用のキーの作成が必要です。

また、sonatypeを使う場合はbuild.sbtに以下の行を加えておくと良い用です。

// Configuration required for deploying to sonatype

publishMavenStyle := true

publishTo <<= version { (v: String) =>
  val nexus = "https://oss.sonatype.org/"
  if (v.trim.endsWith("SNAPSHOT"))
    Some("snapshots" at nexus + "content/repositories/snapshots")
  else
    Some("releases" at nexus + "service/local/staging/deploy/maven2")
}

pomIncludeRepository := { _ => false }

publishArtifact in Test := false

pomExtra := (
  <url>http://github.com/masahitojp/play2-sample-module</url>
  <inceptionYear>2012</inceptionYear>
  <licenses>
    <license>
      <name>Apache 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>
  <scm>
    <url>git@github.com:masahitojp/play2-sample-module.git</url>
    <connection>scm:git:git@github.com:masahitojp/play2-sample-module.git</connection>
  </scm>
  <developers>
    <developer>
      <name>Nakamura Masato</name>
      <email>randomstep@gmail.com</email>
      <url>http://masahito.me/</url>
      <roles>
        <role>Author</role>
      </roles>
      <organization>Nakamura Masato</organization>
    </developer>
  </developers>)

導入の仕方

  1. project/Build.scala
    val appDependencies = Seq(
      // Add your project dependencies here,
     "com.github.masahitojp" %% "play2-sample-module" % "1.0.0-SNAPSHOT"
    )

    val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
      // Add your own project settings here      
      resolvers += "Sonatype OSS Snapshots Repository" at "http://oss.sonatype.org/content/groups/public"
    )
  1. conf/play.pluginを書く

優先度:使いたいplginのクラス

優先度は小さいほど先に実行されるようです。

10000:com.github.masahitojp.play2.sample.SamplePlugin

summary

まだsbtについてはちゃんと理解できていませんが、pluginの書き方は理解できました。
本当は こちら の用にgithubから直接
取得する方法を調べたのですが、うまく行きませんでした。こちらは後で追加調査する予定です。
先人に感謝。

Play Framework 2.0 ソースコードリーディングの会 で発表してきました。

Play Framework 2.0 ソースコードリーディングの会 - [PARTAKE]で発表してきました。
これでPlay2.0での発表は3度目になりました。

ソースコードの読み方の話もしたんですが、また今度記事にします。