scala

Scala で Android アプリ開発(NDK 編)

下準備 始めに /path/to/hello-world/project/build.scala を次のように修正する。 // ..snip.. object AndroidBuild extends Build { lazy val main = Project ( "Hello World", file("."), settings = General.fullAndroidSettings ++ AndroidNdk.settings…

Scala で Android アプリ開発(AlertDialog 編)

毎回、AlertDialog を作るのは面倒なので、次のようなオブジェクトを作っておく。 package com.github.cooldaemon.HelloWorld import _root_.android.content.Context import _root_.android.app.{Dialog, AlertDialog => AAlertDialog} import _root_.andro…

Scala で Android アプリ開発(AsyncTask 編)

ScalaでAndroidアプリ作成時、AsyncTaskの可変長引数メソッドが使えないことへの対策とサンプル ― Gist を丸パクリ。Scala は、可変長引数を持つメソッドを上書きできないので、可変長引数を上書き済みの /path/to/hello-world/src/main/java/com/github/coo…

Scala で Android アプリ開発(Log 編)

ログを出力する際、ログ出力位置の情報も一緒に出力する。 package com.github.cooldaemon.HelloWorld import _root_.android.util.{Log => ALog} object Log { val TAG = "HelloWorld" def e(m: String) = printlog(ALog.e, m) def w(m: String) = printlog…

Scala で Android アプリ開発(ActionBarSherlock 編)

ActionBar は使いたいけれど、ターゲットの API Level が低い場合に重宝する ActionBarSherlock を Scala から使う。 sbt プロジェクト設定 まずは依存するライブラリを指定する。準備編を参考に作成したディレクトリ /path/to/hello-world の直下に main.sb…

Scala で Android アプリ開発(Toast 編)

Toast 表示中に Toast を表示すると問題があるらしい*1ので、次のようなラッパーオブジェクトを用意する。 package は、準備編で用意したもの。 package com.github.cooldaemon.HelloWorld import _root_.android.content.Context import _root_.android.wid…

Scala で Android アプリ開発(準備編)

備忘という名の引き継ぎ的なアレ。Mac OSX 10.7 上で開発する事を前提とする。 sbt の準備 この辺りを見ながら sbt-launch.jar をダウンロードし、/usr/local/bin 配下に sbt-launch-0.11.3.jar という名前で保存する。 このままだと使い難いので、下記の Sh…

Scala で Iteratee と Enumerator を書く練習

とりあえず使い方だけメモ package com.github.cooldaemon.scalaz_test import scalaz._ object TryIteratee { import Scalaz._ import IterV._ def run { implicit val ListEnum = new Enumerator[Seq] { def apply[E, A](e: Seq[E], i: IterV[E, A]): Iter…

Scalaz.concurrent

この記事は、Scala Advent Calendar JP 2011 の14日目です。無理を言って、二日間も枠を頂いてしまいました。今回は、Scalaz 6.0.3 の concurrent について解説を行います。個人的には Scalaz.concurrent の主役は Promise だと思っているので、早速、その解…

Scala STM CommitBarrier

この記事は、Scala Advent Calendar JP 2011 の13日目です。今回は、Scala STM 0.4 から導入された CommitBarrier の解説を行います。 CommitBarrier の基本 まずは、下記のコードをご覧ください。 import org.scalatest.fixture.FixtureFunSuite import sca…

scalaz.Bifunctor と Either

前回メモし忘れていた Either の小ネタを紹介。 例の如く scalaz の import は必須。 import scalaz._ import Scalaz._ Either を取得した後、普通は、処理の分岐を下記のように記述する。 1.right[String] match { case Right(n :Int) => n + 1 case Left(s…

Either と scalaz.Validation

下記で取り上げられているネタについてメモを残す。 Scala の Either についての考察 - scalaとか・・・ Scala勉強会第53回 (EitherやScalazのValidationについて) - Togetter Either と Scalaz Either は flatMap メソッドを持たないので for 式では使えな…

scalaz.StateT で scalaz.State と Option を組み合わせる

scalaz の ExampleState に StateT のサンプルが無かったので試してみた。 気が向いたら、そもそも State モナドって何よ?という所から説明書くかも。 package com.github.cooldaemon.try_scalaz import scalaz._ object TryState { import Scalaz._ def ru…

ScalaTest で FixtureFlatSpec を使う場合の疑問点など

STM の動作確認のため、下記のようなコードを書いたのですが…*1 import org.scalatest.fixture.FixtureFlatSpec import org.scalatest.matchers.ShouldMatchers import scala.concurrent.stm._ class RefSpec extends FixtureFlatSpec with ShouldMatchers {…

List, Either, Option を for 構文で使う話しの続き(toSeq, toRight, toOption を使いこなしてますか?)

Scala for = Haskell do (Java の例外を Either で包んだ後の話し) が少し好評だったので、調子に乗ってちょいネタ。 for 構文を使うと match case のネストを避けられるけれど、じゃー、下記のように書けるのかと言うと… for { a <- Some(1) b <- Right(2).…

Scala for = Haskell do (Java の例外を Either で包んだ後の話し)

最近、こっそりと RabbitMQ Java Client の Scala Wrapper を書いています。 Scala から Java のライブラリを使う場合、例外処理の扱いに困るのですが、当然、RabbitMQ Java Client も例外投げまくりです。 そこで scala.util.control.Exception.allCatch を…

Scala STM を試してみる その4 (Actor vs Actor + STM その2)

その1、その2、その3 に引き続き、今回は reply が不要なパターン*1で試してみました。 import scala.concurrent.stm._ import scala.actors.{Actor, Exit} import scala.actors.Actor.actor import scala.actors.Actor.State.{New, Terminated} import Syst…

Actor + CPS でコールバック関数を隠蔽する

勉強会第20回 - Scala勉強会 in 渋谷で久しぶりに発表するので下準備など。 ちょっとイロイロと手抜きコードですが… runTest メソッドだけ注目して下さい。switch メソッドを評価する度に Actor が切り替わります。 object Trampoline { import scala.actors…

Remote Actor + CPS

下記は、あまり嬉しくない。Remote Actor 間でトランポリンする方法を考え中。うーん、reset と shift 以外の制御構造が欲しいと思うのは私だけ? object RemoteTest { import scala.actors.{Actor, AbstractActor} import scala.actors.Actor.actor import …

Scala Actor の reply が正しくできない問題は scala.actors.Channel が悪いのかも?

突っ込み大歓迎です。というか助けてください。環境は、Mac OS 10.6.5, Scala 2.8.1.final, Java 1.6.0_22 となります。 検証用のコードは、Scala STM を試してみる その3 で使ったコードの修正版のこちらとなります。STM と対比するために Actor のみを用い…

Scala STM を試してみる その3 (Actor vs Actor + STM)

前々回、前回に引き続き ScalaSTM を試してみました。 結論から言うと、私の環境では Worker の数が 300 を超えた辺りから、カウンタ用の Actor への問い合わせがタイムアウトしまくるので、Actor + STM の方が良好な結果が得られました。 今回テストに使用…

Scala STM を試してみる その2

前回に引き続き ScalaSTM を試してみました。 object SampleForSTM2 { import scala.concurrent.stm._ import scala.util.control.Exception.allCatch def main (args: Array[String]) { doTest( "case5" -> case5, "case6" -> case6 ) } def doTest(testCas…

Scala STM を試してみる

ScalaSTM を試してみました。正直、ライブラリ内でどのように STM を実現しているか理解していませんが、とりあえずプリントデバックしてみました。 準備 面倒なので sbt, maven 共に使いませんでした。 % curl -O http://scala-tools.org/repo-releases/org…

Scala Advent Calendar JP 2010 Day 22: Scala Actor + NIO

この記事は Scala Advent Calendar JP 2010 22 日目(12/28)です。 Scala Actor + NIO で Echo server を書いてみました。 毎度の事ですが、突っ込み添削大歓迎です。 Source 解る方用の説明をさらっと行うと、Actor は Thread Pool として利用しており、NIO …

Scala Advent Calendar jp 2010 の 12/18 - Loan pattern in CPS を読んだ感想

Loan pattern in cps - hano - GitHub Perl の Coro に慣れていると、Scala の限定継続は使い難いなーと思っていたら、認識を覆されたのでメモ。私の理解不足でしたと。 以下に簡単なサンプルを用意しました。 object Sample { import scala.util.continuati…

Scala で XML を Parse する(implicit 編)

以前、Scala で XML を Parse する(添削希望) という記事を書いたところ、ありがたい事に Scala で XML を Parse する ( DSL 編 ) - 国道十六号高架下 というトラックバックを頂いたので、喜び勇んで拝読させて頂いた。 しかし、残念ながら私のスキルでは、…

PartialFunction で FSM(Finite State Machine) やってみた

Twitter で FSM を Actor 無しで…みたいな話しが出ていたのでやってみました。 突っ込み添削大歓迎です。 main の中の zip が余分だった。List(FSM(GetState) -> State1, FSM(ToState2) -> State2, ...) の方が読みやすい。 object Test { def main (args: A…

Scala Actor + HttpServer

Scala で 簡易的な httpd を作れないかと調べていたら、Java に HttpServer という便利なクラスがあった。 handler は、Actor 上で使いたいので Executor を継承した ActorExecutor というのを作ってみた。 import java.net.InetSocketAddress import java.u…

Scala で常駐する Daemon を作る方法

Scala で常駐する Daemon を作る用途があり、fsc が使っている方法をパクったのでメモを残す。例によって添削は熱烈大歓迎です。 ざくっと概要を説明すると ProcessBuilder 経由で別の Java VM を起動し、さっさと exit してしまえば Daemonize 完了となる。…

Play framework の Tutorial を Scala と Scalate で行う(Step1, Step2)

Scala を使い始めて Java 文化*1に辟易している方は絶対に使った方が良い Play framework の Tutorial を行ってみたので、そのメモを残す。Play framework は、1.1 の beta version がインストール済みであると仮定する。 Tutorial を始める前の下準備 Play …