読者です 読者をやめる 読者になる 読者になる

かとじゅんの技術日誌

技術の話をするところ

混乱しがちなサービスという概念について

社内でサービスがよくわからないという話になったので、考察を少しまとめておきます。 過去のエントリでも以下のように触れましたが、もう少しかみ砕いてみよう。 サービスという言葉はあいまい まず、簡単に前提の整理から。単に"サービス"って言葉が何を指…

ServiceとDCIについて

面白そうなネタがあったので、自分なりの考えをまとめてみる。 Ruby/Rails 用 DI コンテナ Dee をつくった、あるいは Ruby のカルチャーについて この記事はRuby用のDIコンテナの話題なんですが、DCIについても言及されているようです。比較軸はDIそのものと…

ScalaでのDCIの実装を考える

みなさん、こんばんわ。 会社のアドベントカレンダーで、Scalaコードでわかった気になるDDDというブログを書いたのですが、最近、老害を防ぐためにDCIについても勉強中です。 DCIアーキテクチャ - Trygve Reenskaug and James O. Coplien とりあえず、これを…

ドメインモデルの関連を表現するには

(Scala前提の記事なので注意してください) たとえばこんなモデルがあって、相互に依存しているケースを考えよう。 注意:説明を簡単にするために、varを利用しています。 従業員 class Employee( val id: Long, val name: String, var department: Option[Dep…

関数のカリー化と部分適用

今日は、カリー化と関数の部分適用の話題。 Haskellの視座からScalaのカリー化と部分適用を見てみる まず、Haskellでの関数のカリー化と部分適用についておさらい。 例えば、引数を合計する関数 mysum があるとして、 mysum :: Num a => a -> a -> a -> a my…

Scalazを使ってMaybeモナドを自作してみる(後編)

はい。 Scalaz Advent Calendar 2012 12/22 です。 前回に引き続き、MyOptionのためのMonoidとMonadを実装してみます。 Monoidの実装 Monoidはtrait Monoid[F]と定義されているので、今回はMyOptionのInt型の実装を定義します。 コードは次のとおり。 実装す…

Scalazを使ってMaybeモナドを自作してみる(前編)

Play or Scala Advent Calendar 2012の 12/21日の記事です。 モナドを理解するために、Haskellでモナドを作ってみたのですが、Scalaz*1でもMaybeモナドを作ってみようと思い試した結果を報告します。 MyOptionを定義する 例のごとくMaybe型を定義します。 Ha…

Maybeを自作してみる(Monad編 その2)

do式でのモナドの記述方法について簡単にまとめる。 Some 1 >>= \x -> Some(x+2) をdo式に書き直すと apply = do a <- Some 1 Some $ a + 2 Monadにはreturnがあるのでそれに書き換える。 apply = do a <- return 1 :: Option Int return $ a + 2 関数の引数…

リトライハンドラを書いてみた(Scala版)

Scalaでもリトライハンドラ*1が欲しくなったので、このブログを参考に作ってみた。 Ruby の retry-handler が激しく便利そうなので Java で実装してみた - YoshioriのBlog試行錯誤してたら、id:xuwei がforkしてくれていた!→ https://gist.github.com/29969…

Play2.0アプリをデーモン化する方法

commons-daemonを使ったら、NettyServerをちゃんとLinuxのデーモン化できた。 https://gist.github.com/2156447

パラレルコレクションの性能測定

Scala Advent Calendar jp 2011 6日目 いきます。STMの話にしようと思ったのですが、いろいろまだ調査中なんでまた後日ということで、今回はパラレルコレクションでいきます。すでにあちこちのブログで扱っているネタなので目新しさはないですが...パラレル…

Baseunits for Scala を 作ってみました。

Scalaで初プロダクトということで、日常的に使うものからということで、以下のBaseunitsのScala版を作ってみました。Baseunits Library - 都元ダイスケ IT-PRESSScalaはJavaの資産が使えるので、普通に考えるとBaseunitsのJava版を使えばよいわけです。しか…

Javaの列挙型っぽいもの

私は、ScalaのEnumerationは好みではないので、以下のようなJavaの列挙型っぽい実装を使っています。みなさん具体的にどんな実装にしてますかね?

日経ソフトウエア 2011年6月号でScalaの特集記事を書きました

こんばんわ。 ブログの記事が滞っているときは執筆中だったりするわけですが、今回はScalaの記事を書きました。 日経ソフトウエア 2011年 06月号 [雑誌]作者: 日経ソフトウエア出版社/メーカー: 日経BP社発売日: 2011/04/23メディア: 雑誌購入: 3人 クリック…

ScalaでBrainf*ckインタープリタを実装してみた

ScalaでBrainf*ckのインタプリタを書いてみたよ - 都元ダイスケ IT-PRESS Scalaを頑張っておるようなので、私もBrainf*ckのインタープリタをなんとなく実装してみた。BrainfuckRuntimeと、Expression系のクラスが関数型らしくないのでなんとかしたいな...。 …

Scalaの統一アクセス(プロパティ構文)がなかなかイカしてる件

今回は統一アクセス(プロパティ構文)がなかなかイカしてる件について。C#とかRuby,Pythonやってる人からすると何を今頃という感じなのですが。 Scalaで統一アクセス(プロパティ構文)を使う Scalaでフィールドを宣言する場合は以下のような書き方になります。…

ScalaのシングルトンをJavaの視点で読み解く

Scalaでシングルトンといえば、object型でしょう。実は、「はい それで終わり」ではありません。今日はそんな話。 object Singleton { println("Construct") val name = "SINGLETON" } println(Singleton.name) jadるとこんな感じ。 public final class Sing…

ScalaのクラスをJavaの視点で解剖する

Scalaのクラスをちょっと解剖して、なぜそうなっているか読み取ってみようと思います。 ScalaのクラスをJavaのクラスに変換してみる まず、こんなScalaのクラスを作ってみた。コンストラクタに氏と名のフィールドを二つ取る単純な人名クラスです。 class Per…

Scalaでアクターではなくスレッドを操る

Scalaといえば並行処理、並行処理といえばアクター。ということだけど、そこまで大袈裟ではなくサクっとスレッドを起こしたい時はどうしたらよいか。「プログラミングScala」のP220に「9.4.1 その場限りのスレッド」にopsオブジェクトのspawnメソッドが紹介…

JavaでActorっぽいものを作ってみる

前回 JavaでScalaの"アクターのようなもの"を作ろうということだったので、早速 作ってみました。目的は、Actorの概念に触れることで、並行処理プログラミングの勘所を学ぶことなので、その前提で読んでいただければと思います。 リソース共有モデルには限界…

トレイトで契約を表現してみる

Javaで契約をサポートする Googleが開発したJavaデバッグを簡単にする新技術「cofoja」 は記憶に新しいところですが、 まぁ、そこまでこだわるところでもないのですが、アノテーションに記述する事前条件や事後条件が文字列なのでちょっと残念かなと。Scala…

副作用を最小限に抑えるために必要なこと

若干、難しい話ですが、設計力を上げたいプログラマ向けなエントリ。私も道半ばです。一緒に考えていただければ幸いです。 堅牢なアプリケーションを実現する上で「副作用を最小限に抑える」という設計思想は、非常に重要な示唆を含んでいます。 その「副作…

JMockitは理想的なモックフレームワーク

テストを書いているとモックオブジェクトを使う機会が多いと思います。そのモックオブジェクトは自前で作るよりは、JMockやMockito*1などのフレームワークを利用した方が楽でしょう。今回は機能的に、ほぼ最強と思われるJMockitを紹介します。 これが、他の…

Scala IDE for Eclipse の 出来が良くなった件

重くて固まると定評のあったScala IDE for Eclipseですが、最新版を入れてみたらできがよくったようで、普通に使えました。 Scala IDE for Eclipse既存のEclipseがあるからそれを壊したくなかったので、Scala用にEclipse環境をコピーして作りました。Javaの…

「プログラミングScala」を献本していただきました

非常に嬉しいことに、「プログラミングScala」を献本していただきました。@yyamanoさん、お声がけありがとうございました。 訳者の方、オライリー・ジャパン様、ありがとうございます。とても嬉しいです!!ノートとScalaバッチまで同梱というスペシャルなパ…

ScalaとGoogle Collectionsで関数オブジェクト

あけましておめでとうございます。 年末年始はいかがでしたか?私は大晦日から実家の兵庫に向かう道中、滋賀で大雪に見舞われまして、10時間ぐらい立ち往生して車中泊という幸先悪い年越しでしたorzさて、今日は関数オブジェクトの話です。関数オブジェクト…

ScalaでDDDをはじめてみよう

2010年も今日で終わりですが、皆様におかれましてはどのような年でしたか。 私は、この一年で「新しい技術の価値観」と「人との出会い」の二つの機会が恵まれた年でした。仕事に、コミュニティ活動に、お世話になった皆様、本当にありがとうございました。20…

パーサーコンビネータで遊んでみた

ちょりーす。 以前、こちらのエントリで、(((1 + -2)*-3)/4)+5のような計算式を渡して、BigDecimalで計算結果を求める簡単な言語を作ったわけですが、 数値がBigDecimal型な計算式言語を作ってみた - じゅんいち☆かとうの技術日誌これと同じものをScalaでや…

Scalaのジェネリックスを学ぶ

Scalaのジェネリックスを少し学んでみました。(なんか違うんじゃね?とかあれば、ツッコミお願いしますm(_ _)m) Javaのジェネリックスでは、型パラメータは共変/反変ではない Javaでこんなコードを書いてコンパイラに怒られたことないですか。 public interf…

JavaプログラマがScalaを学習するときに参考になる本

とりあえず、ひとり Scalaに感染させますた。 scalaを始めたんですね。前々からやろうと思っていましたが、id:j5ik2o氏に触発されて本格的に。 ということで、JavaプログラマがScalaを始める時に参考になる本とか、列挙します。Javaとの対比で書かれているの…

ScalaにAOPをやらせてみる

今回は、AOPをScalaでやるには?ってテーマです。JavaだとAOPのライブラリを使って黒魔術的にごにょるワケですが、Scalaの場合はトレイトを使ったミックスインで実現できます。 trait Login { def login(userName:String,password:String) } trait LoggableL…

Scalaのカリー化について学ぶ

Scalaでカリー化。「カリーか」って聞くと、あれしか想像できなかったのですが、なんとなく理解したというエントリ。まず、このエントリを読む。 Scalaの関数部分適用とカリー化 - kyabの日記関数型プログラミングの世界は奇妙な世界ですね。慣れてくると好…

今日のScala

とりあえず、リストの宣言 scala> var list = List(1,2,3,4,5) list: List[Int] = List(1, 2, 3, 4, 5)繰り返し処理をかいてみる。 scala> list.foreach(println) 1 2 3 4 5これも同じことができる。 scala> for( i <- list ) println(i) 1 2 3 4 5戻り値は…

今日のScala

Scalaの記事も面白いと思うので、気分転換に読んでみてくださいませw本日書いたScalaコードはこちら。 val strList = List("K","A","T","O") val join = strList.reduceLeft((x,y) => x + ", " + y) println(join) とすると、カンマ区切り文字列を簡単に作…

Scala始めました

今からでも遅くないということで、私もScalaを始めました。去年ぐらいにも耳に入っていたのですが、なんか小難しい言語だなーと思っていました。まぁ、でも食わず嫌いはよくないということで、まずやってみようと本を何冊かを買い込んで勉強してます。やって…

Cross Commnunity Conferenceに参加してきました。

途中参加でしたが、Cross Commnunity Conferenceに行ってきました。http://www.java-users.jp/contents/events/ccc2008spring/ Android SIProp 今村さん(私の古くからのお友達です)のAndroidのデモ残念ながら動作しませんでしたが、Androidの可能性のお話を…