Entries from 2012-01-01 to 1 year

図で分かる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をシェアリングスさんでやるのは今回か次回が最後になるようです。 シ…

iedit-mode が便利

変数名の変更には良く、query-replace を使っていたのですが、IDEでよくあるように複数箇所の同時編集がしたくなって探したら iedit-mode というのを見つけました。 tsdh/iedit デフォルトでは「C-;」で iedit-mode に入ります。 すると、バッファ内でカーソ…

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

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

Ubuntu 12.04 で Gnome + StumpWM

gnome-session-fallback を先にインストールしておきます。 $ sudo apt-get install gnome-session-fallbackあとはUbuntu 12.04 and Gnome and StumpWM · sabetts/stumpwm Wikiの設定をパクるだけで動きました。 こんな感じで、gnome-panelが使えるのが良い…

spring-python メモ

python で DI する方法がよくわからなかったのですが、spring-python というのが StackOverflow で紹介されていました。Python Dependency Injection Framework - Stack Overflow Welcome to Spring Python’s documentation! — Spring Python v1.2.1.FINAL…

Python の fileinput モジュール便利

python の fileinput モジュール知らなかった。便利ですねこれ。10.2. fileinput — Iterate over lines from multiple input streams — Python v2.7.6 documentation pythonスクリプトを呼び出す際、コマンドライン引数にファイルを指定していればそのファイ…

忙しい人のための 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 の中にテンプレー…

anythingでプロジェクト内ファイル検索

https://github.com/tototoshi/anything-find-files-in-project/blob/master/anything-find-files-in-project.el動きとしては 1.現在のディレクトリから上にbuild.sbtとかpom.xmlとかそういうプロジェクトのルートに置いてそうなファイル探しにいく。 2.見つ…

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…