はじめてのscala-redis
import com.redis.RedisClientPool import com.redis.serialization.Parse.Implicits._ import com.redis.serialization._ object RedisTest extends App{ val clients = new RedisClientPool("localhost", 6379) clients.withClient(client => { client.set("fuga", "hoge") val result1 = client.get[String]("fuga") println(result1) //Some(hoge) client.set("fuga", 3L) val result2 = client.get[Long]("fuga") println(result2.get) //3 client.del("log") client.lpush("log", "a", "b", "c") val result3 = client.lrange[String]("log", 0, 100) println(result3.get) //List(Some(c), Some(b), Some(a)) }) }
なんでresult3、List[Option[String]]なんだろ。List[String]でよさそうな気がするのに…うーん。
即flatMapしたくなる。
ThreadLocalのお勉強
ThreadLocalというものの存在を知ったので、Play Frameworkがマルチスレッドで動いており、スレッドが使い回されていることを実感できるテストをしてみた。
object Application extends Controller { val threadLocal = new ThreadLocal[Int] { override protected def initialValue(): Int = { 0 } } def index = Action { threadLocal.set(threadLocal.get() + 1) Ok(views.html.index("Number: "+threadLocal.get())) } }
これでindexを叩くと 1→2→3...と順調に上がっていくけど、大量に叩く(同時にab実行したりとかする)と突然数値が減ったり、突然大きくあがったりする。
そういえばTomcatの場合、HttpRequestのインスタンス自体が使いまわされているんだっけ…(うろ覚え)すごくハマった覚えが…
javadoc-sbtを使う方法
https://github.com/bartschuller/javadoc-sbt を使う方法
build.sbtのかわりに…
lazy val scalastudy = Project( id = "scalastudy", base = file("."), settings = Project.defaultSettings ++ javadoc.JavadocPlugin.javadocSettings ++ Seq( name := "hogefuga", organization := "jp.example.exex", version := "0.1-SNAPSHOT", scalaVersion := "2.9.1", javadoc.JavadocPlugin.JavadocKeys.javadocOptions := Seq("-encoding", "UTF-8", "-charset", "UTF-8") // add other settings here ) )
javadoc.JavadocPlugin.javadocSettingsを追加する。
javadocコマンドを実行する際のオプションはjavadoc.JavadocPlugin.JavadocKeys.javadocOptions := Seq("-encoding", "UTF-8", "-charset", "UTF-8")のようにして指定可能(もっと良い書き方あるのかも。教えて><)
Playで指定したアクションにリンクを貼る方法
<a href="@routes.Application.index">hogehoge</a>
と書く。
簡単なのはいいんだけど、どこにこのことに関するドキュメントあるんだろう…