2011-01-01から1年間の記事一覧

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…

続:gen_server のコールバックモジュール内で badarith が発生すると supervisor ごと落とされる

二年半前に gen_server のコールバックモジュール内で badarith が発生すると supervisor ごと落とされる というメモを残したにも関わらず、すっかり内容を忘れてしまい、変な Process Design の poolboy*1 の poolboy_sup が安全か検証をするのに時間が掛か…

Supervisor Tree を Alloy で記述してみた

今ひとつ Alloy を理解できていないので、Erlang や Scala で使う Supervisor Tree の仕様を記述まずは、集合を定義してみる。 abstract sig Actor { parent : lone Supervisor } sig Worker extends Actor {} sig Supervisor extends Actor { child : Actor…

RabbitMQ のクラスタリング機能にキューのミラーリングが追加されたので RabbitFoot (AnyEvent::RabbitMQ) から試してみる

クラスタリングやキューのミラーリングの詳細は、下記参照の事。 RabbitMQ - Clustering Guide RabbitMQ - Highly Available Queues RabbitMQ をクラスタリングする 今回はサーバを複数用意できなかったので、一つのサーバ上で RabbitMQ を二つ起動する。 % …

CCCrypt(Objective-C) で暗号化したデータを Crypt::OpenSSL::AES(perl) で復号化する

iPhone/iPad/iPod で暗号化(AES256 を使用)したデータをサーバ側で復号化するのに半日ハマったのでメモ。まず、ObjC 側。CCCrypt の解説は方々に存在しているので割愛。IV に NULL を指定しているので 0x00 が 16 Byte という事になる。 CCCrypt( kCCEncrypt…

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).…

Mochikit で sendXMLHttpRequest する際に Content-Type を設定しないと、CGI.pm で URL エンコードされた POST データを受け取れない

サーバの入れ替えを行う際に、時間を無駄にしたのでメモ。旧環境では、下記のコードで問題なく動作していたのだが… // ..snip.. var r = getXMLHttpRequest(); r.open('POST', CGI_PATH, true); var args = formContents('form_id'); this.d = sendXMLHttpRe…

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

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

Unite を始めてみた(ack と組み合わせて使う方法など…)

vim

Vim の Plugin を更新がてら、Yokohama.vim #0 の頃から気になっていた Unite に入門してみました。 基本設定 一先ずインストール後に下記のようなキーマッピングにしてみました。 nmap ;; :Unite nmap ;s :Unite source<CR> nmap ;b :Unite buffer<CR> nmap ;f :Uni</cr></cr>…

neocomplcache + snipMate をやめて neocomplcache 単体に切り替える

vim

久しぶりに neocomplcache を git pull したら snipMate の multiple snippets*1 に対応していたので、neocomplcache 単体に切り替えてみました。 これで、snipMate_complete.vim は、お払い箱です。 .vimrc に追加した内容 始めに、snipMate の TAB キーを…

他のプロセスから送られてきたメッセージを誤受信しないよう制限する

刺身☆ブーメランのはてなダイアリー 2011/01/12(Wed) への返信です。 元コードの wait_server:client/3 は、receive で From を束縛しているので、この状態だとメッセージの選択受信になりません。From を Server_Pid に変更すると、ただしく動作すると思い…

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…