Scala

sbt-install 作った

https://github.com/tototoshi/sbt-installsbt は manual install するのが好みなんですが、あっ、このマシン sbt 入ってないとかあっ、sbt が古いってときに例の java -jar sbt-launch.jar するスクリプト書くのがいい加減めんどくさくなったので、インスト…

Playのバージョンを比較するやつ書いた、が

Play はプロジェクトのバージョンと使用している Play コマンドのバージョンが食い違っていると警告が出るんですが、バージョンの比較が同じかどうかしか見ていないのにエラーメッセージが Update しろとかいうやつなので https://github.com/playframework/…

scalikejdbc-play-fixture-plugin を作りました

(また Play プラグイン作ったのかよと言われそうですが、、、) おしごと的な Play アプリでは Fixture 機能を自前実装して、それでテストをしていました。 ただ、scalikejdbc に依存していたため、そこだけ切り出して Play プラグインにするとかはしてません…

Play flyway プラグインを作りました

https://github.com/tototoshi/play-flywayPlay にはもともと Evolutions というデータベースマイグレーション機能がついていますが、それと同じような機能を Flyway で作りました。 Flyway は Java 製のデータベースマイグレーションライブラリなんですが、…

slick-joda-mapper を作りました

誰も java.sql.Date とかさわりたくないですよね。 Slick では標準では日付型として java.sql.Date を使うことになりますが、java.sql.Date は JDBC のための型で、UI やコントローラーとかの層に出てくることは不自然です。java.util.Date や joda-time の…

Scala Conference in Japan の感想

Scala Conference in Japan はほんとうに素晴らしいイベントでございました。運営チームの皆様ありがとうございます。これだけ満足できたイベントは初めてです。 今まで Scala Days とかに参加したくてもできなかったのですが、Scala Conference のおかげで…

Scala Conference in Japan でしゃべりました(オマケ付き)

Scala Conference in Japan でしゃべりました、ので、スライドあげときました。 Scala のバイナリ互換性などの問題とその解決法などです。 Talked in Scala Conference in Japan. Thanks. I Uploaded my slides to gh-pages. See below. I talked mainly abo…

【再】Play 2.x の QueryStringBindable, PathBindable について

先日 Play 2.x の QueryStringBindable, PathBindable について - tototoshiの日記 で joda-time 用に QueryStringBindable[T] を定義して遊びましたが、それをライブラリ化しました。ご自由にお使い下さい。tototoshi/play-joda-routes-binder · GitHub 設…

scalikejdbc-config モジュールを作りました

scalikejdbc 使うときに、設定ファイル読んだりするのがめんどくさくなったので、typesafe-config を使って application.conf を読む処理をまとめました。 https://github.com/tototoshi/scalikejdbc-config (中略) scalikejdbc 本体に入れてもらいました。 …

【宣伝】Scala Conference in Japan 2013 で15分くらいしゃべります

スピーカー応募しようか迷ってたんですが、スポンサー枠で出ることになりました。「泣かないための Scala ライブラリの使い方・作り方」という釣りっぽいタイトルで、スポンサー枠なのに仕事と全然関係ないことをしゃべります。 http://www.scalaconf.jp/ja/…

Play 2.x の QueryStringBindable, PathBindable について

よしださんのこんなツイートを見たので、 https://twitter.com/xuwei_k/status/302445064976732160 Play 2.x ではリクエストの処理をどのコントローラーのどのアクションに任せるか、 conf/routes というファイルで定義します。そのとき、パスやクエリストリ…

play-json4s をリリースしました

https://github.com/tototoshi/play-json4sPlay 標準の Json はちょっと使いにくいなあということで、以前 Play でも lift-json を使えるようにするライブラリ(https://github.com/tototoshi/lift-json-play-module)を作りました。 Play 2.1 のリリースとと…

Scala用のCSVライブラリを作りました

https://github.com/tototoshi/scala-csv 結構前に作った scala-csv というやつを、2.10.0 対応しました。 ついでに Maven central に置いてもらうことにしました。 実装は、Java のライブラリをラップしただけです。 使い方 build.sbt に以下の行を加えてく…

図で分かるfoldLeft

foldLeft って map, filter, foreach といった他の高階関数に比べて難しい気がします。多分いきなり「畳込み」とか「アキュムレータ」とか言うからだめで、手続き脳フレンドリーな言い方は「ループの変形」なんじゃないかと思いました。実は書くだけだったら…

ScalaLogging の使い方

https://github.com/typesafehub/scalalogging Scala 2.10.0 に合わせて ScalaLogging が 1.0.0 としてリリースされました。 ScalaLogging とはその名の通りロギングのためのライブラリです。と言ってもログを出力するためのライブラリではなく、log4j や sl…

Play2 でファイルアップロードをテストする

Play2.0 の FakeRequest って withFormUrlEncodedBody はあるけど withMultipartFormDataBody はありません。 ですが、FakeRequest[MultipartFormData[TemporaryFile] ] を地道に作ってあげれば大丈夫。*1 こんな感じになります。 package controllers impor…

Slick ガイド

この記事は Play or Scala Advent Calendar 2012 の 4日目です去年 ScalaQuery の記事を書いたのですが、今年はその後継、Slick です。 Slick とは? Slick とは Typesafe stack に名を連ねる Typesafe 社お墨付きの ORM です。以前は ScalaQuery と呼ばれて…

僕達プログラマはちょっとした Excel に Scalaz を使います!

出オチ乙 この記事は Scalaz Advent Calendar 2012 の 3日目です。 poi.scala という Apache POI のラッパーを教えてもらったのですが、これに Scalaz が使用されていたので紹介します。Scalaz を使って Excel 使うなんて倒錯したなにかを感じます。 "folone…

sbt 0.12.x から導入された binary version について

Play 2.1-RC1 を使おうとしたらいろいろハマったのでまとめました。 scala 2.9系, sbt 0.11系 までの依存管理 scala の異なるバージョンのScala用にビルドされたライブラリは使えないことがあります。 例えば、Scala2.8と2.9ではバイナリ互換性がないので、2…

ScalaTest 2.0 の Selenium DSL がいいかんじ

ScalaTest 2.0-M4 に Selenium 用の DSL が入っていました。ScalaTest Selenium DSL go to "...." でページを開けたり、 click on "foo" でクリックできたり、 delete all cookies でクッキー消せたりと、かなり自然な DSL になっています。 build.sbt には …

Squeryl の KeyedEntity がオワコンになっていた

0.9.6-SNAPSHOT の話です。最新安定版の 0.9.5-2 では下記コードは動作しません。KeyedEntity is dead, long live KeyedEntityDef ! らしいですよ。 これからは自動採番のために KeyedEntityDef というものを implicit に定義することになります。 めんどく…

rpscala#83 で String interpolation についてしゃべった

Scala勉強会第83回 in 秋葉原で、scala 2.10 から入る String interpolation について少し説明しました。ので簡単ですが、資料をあげときます。rpscala-83-string-interpolation rpscalaをシェアリングスさんでやるのは今回か次回が最後になるようです。 シ…

第三回Playframework勉強会でしゃべった

スライド Togetter ustPlay2.0 いいと思います

忙しい人のための sbt プロジェクト作成講座

$ g8 typesafehub/scala-sbt 以上です。 最低限の設定項目を聞いてくれます。 $ g8 typesafehub/scala-sbt Scala Project Using sbt organization [org.example]: com.github.tototoshi name [Scala Project]: mou-yada- scala_version [2.9.2]: version [0.…

Scalaで型安全Builderパターン

NantokaBuilder().setHoge("hoge").setFoo("bar")...build() のようにプロパティを足していって作る必要がある Nantoka クラスがあったとします。 Java でもたまに見かけますね。チェーンできると使いやすくてうれしい。 ただ、困ったことにsetXXX はいつも…

Play20 で lift-json を使う

ドメインオブジェクトからJSONへのアンマーシャルがだるい - ikeike443のブログはい、だるいので、実は productFormatN というお手軽 Read/Write=Format 定義メソッドがあります ドキュメントにまだ載ってないみたい。 使い方 ただ、ikeikeさんの例だと User…

Scala で g8 や conscript みたいなコマンドを作る

Scala でちょっとしたコマンドラインツールを作る場合 scalaコマンドで実行 sbt run assemblyしてjava -jar xsbt-start-script-plugin とかが考えられるけれど、 sbt-launch.jar をランチャにする という方法もあります。一番シェルコマンドっぽく使えるんじ…

sbt の multi-project 構成で xsbt-start-script-plugin を使う。

sbtでmulti-projectしたときstart-scriptどうしたらいいんだろう。sbt 'project foo' 'run' 相当のことをやりたい。 と思ったのですが、やってみたらすんなりできてしまいました。 // project/plugins.sbt resolvers += Classpaths.typesafeResolver addSbtP…

typesafehub/config を使いましょう

Scala で設定ファイルを扱う方法いろいろです Scalaで設定ファイルを使いたい時どうしたらいいの? が、 最近は typesafehub/config もあります。 Play2.0 で使われているのはこれです。 何がいいのか シンプル Propertyそのまま使うとかよりは楽 typesafe製…

Play2.0 の Form に自分で定義した Field を加える

Play 2.0 では次のように "name" -> text などのマッピングを定義してコメントのフォームを作ります。 例 case class User(name: String, email: Option[String]) val userForm = Form( mapping( "name" -> text, "email" -> optional(text) )(User.apply, U…

Scala + Selenium

当然ですが、java 用の driver を使えば使えます。 サンプルとして、Scalatest のページに User Guide へのリンクが出ているかのテストをします。 // build.sbt libraryDependencies ++= Seq( "org.seleniumhq.selenium" % "selenium-java" % "2.19.0", "org…

sbt cleanで消してほしくないファイルを指定する。

xsbt-start-script-plugin で sbt stage して作った target/start が clean したら消えちゃいましたよ。みたいなことを防げます。 cleanKeepFiles += new File("target/start") https://github.com/harrah/xsbt/blob/v0.11.2/main/Keys.scala#L113-114 ↑ほと…

giter8 テンプレートの作り方

n8han/giter8 · GitHub 前提 このエントリは giter8 の使いかたについては知っている前提です。 やっておく giter8をアップデートしましょう。 verbatimとかの機能が最近追加されてます。 $ cs n8han/giter8 ディレクトリ構成 src/main/g8 の中にテンプレー…

unfiltered-scalateをtomcatで動かす

結論 くじけそう オススメできない 設定 動いたは動いた。 でもデフォルトだとダメです。https://github.com/unfiltered/unfiltered-scalate/blob/0.5.3/src/main/scala/scalate.scala#L45-46ここを変えたやつをimplicitに渡してあげます。 implicit val def…

ScalaのREPLをカラフルにして遊ぶ

scala.Consoleを使うと文字に色をつけることができます。 import scala.Console._ println(BLUE + "僕" + RESET + "は" + CYAN + "友達" + RESET + RED_B + "が" + YELLOW + "少" + RESET + RED_B + "ない" + RESET) RESET付けないとその後の出力もずっとそ…

Scalaパターンマッチの Infix Operation Pattern

Unfiltered を使うときに必要になるのですが、キモ便利です ちょっとテストデータを定義しますね。 case class Person(name: String, age: Int, height: Int) val tanaka = Person("tanaka", 16, 170) 田中君は16才で170cmです。 田中君は case class として…

ScalaでMarkdownをHTMLに変換する

knockoff を使えばMarkdownを簡単にHTMLに変換できます。 HTMLの文字列としてではなく、Scalaのオブジェクト(scala.xml.Node)に変換するので使い勝手が良いです。 pamflet や picture-show が knockoff を使っています。 使い方 knockoff して toXML, toXHTM…

unfilteredで作ったアプリをtomcatで動かす

手順 unfilteredでアプリを作る web.xmlを書く xsbt-web-pluginでwarにする tomcatにデプロイ unfilteredでアプリを作る "Hello"って返すだけのアプリを作ります。 Unfiltered では Plan ってのを作って URL のルーティングをします。 package com.github.to…

Scalaでスクリプトとか書くときのコマンドライン引数の処理

昔つぶやいたけどブログにはまだ書いていなかったっぽい。 getopt的なものはない(よね?)。 コマンドラインパースしてくれるライブラリもあるっちゃあるっぽいけれど これで充分じゃないかと思ってる。 ポイントは Array[String]をList[String]に変換してから…

lift-json リファレンス

参考: JSON Support | Lift Project | Assembla Scala標準にもjsonパーサとかありますが、lift-jsonのほうが人気。 基礎知識 A central concept in lift-json library is JSON AST (Abstract Syntax Tree) which models the structure of a JSON document as…

ScalaQueryでカラムのオプションを指定する

ScalaQueryではカラムのオプションを"O ほにゃらら"という形で指定します。 O NotNullとかO PrimaryKeyとか。 https://github.com/szeiger/scala-query/blob/0.9.5/src/main/scala/org/scalaquery/ql/basic/BasicTable.scala#L12 https://github.com/szeiger…

ScalaでXMLからjQueryっぽく要素を抜き出せるものを作った

ScalaでXMLから要素を抜き出す方法について。 // テストデータ val html = <html> <head> <title> </title> </head> <body> <ul> <li>akemashite</li> <li>omedetou</li> </ul> <div id="container"> <div class="contents"> <span class="foo">happy</span> <span class="foo">new</span> <span class="foo">year</span> </div> </div> </body></html>

ScalaでWebスクレイピングして画像収集する

2011年も相変わらず「Scalaは実用的なのか?」という 「え、実用的も何も、普通に使ってますが、、、」としか答えられない質問を幾度も受けました。 Scalaは実用的で、例えばコミケのコスプレ画像の収集などができます。*1 【コミケ81】コスプレイヤー画像ま…

LiftyでLiftアプリを作る

http://lifty.github.com/ Lift in Actionでも紹介されてるのにイマイチな知名度のLifty。 最近sbtの0.11系に対応しました。 Liftyを使えば lifty create lift project でプロジェクト作成 lifty create lift mapper でモデルのテンプレ作成 lifty create li…

ScalaQueryでConnection Poolを使う

Database#createConnectionをoverrideします。 ConnectionPoolはscalikejdbc/scalikejdbc · GitHubを使わせてもらいました。

ScalaQueryでレコードをcase classにマッピングする

少し前のエントリ(ScalaQueryの使い方&サンプル集)ではDBのレコードをタプルにマッピングしましたが、 case classにマッピングすることもできます。<>にapplyとunapplyを渡すのですね。ちょっとかっこ悪いような。 で、<>が定義されているのは...https://git…

unfiltered-scalateがunfilteredのexternal module扱いになっていた件

いつの間にかunfiltered-scalateがunfiltered本体のリポジトリから外され、external moduleになってました。 https://github.com/unfiltered/unfiltered-scalate 気になってunfilteredのMLを漁りました。理由っぽいのを見つけました。 https://groups.google…

第二回Scala会議にて勝手にrpscala/akskscalaの宣伝をした

http://www.ustream.tv/recorded/19044858/highlight/224421 ust、なんなんでしょうかこの画質...yusukeyさんごいすー...

ScalaQueryの使い方&サンプル集

Scala Advent Calendar jp 2011 - PARTAKEの2日目の記事です。 Scala から RDB を使う必要があり、 ScalaQuery をいろいろ調べてみました。 DBオブジェクトの取得 Database.forURL とかを使います。 scala> import org.scalaquery.session.Database import o…

ScalaQuery で SQL を実行する

ScalaQuery を使おうかと思っていじってます。とりあえずシンプルに SQL を実行するところから。StaticQuery ってのを使うみたいです。 https://github.com/szeiger/scala-query/blob/master/src/main/scala/org/scalaquery/simple/StaticQuery.scala データ…