かとじゅんの技術日誌

技術の話をするところ

CQRS+Event Sourcingを学ぶための教材

超久しぶりのブログ…。 Octopressに疲れたのではてなブログに戻ってきました(Octopressの過去の記事ははてなブログにインポート済です)。ついでプロに移行。 さて、海外のDDDコミュニティではCQRS+Event Sourcing(以下, ES)が人気なのですが、ようやく日本で…

DDDのリポジトリのインターフェイスをどのように設計すべきか

scala-dddbase scala-dddbaseではどのようなインターフェイスとしているか? 以下のようになっています。 戻り値はモナドにラップして返すことを想定しているので、高階型としてM型を指定できるようにしました。一般的にMには、同期型リポジトリとしてはTry…

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…

シナリオ -> モデル -> コード ->

昨日もDDDの話題を少ししたので、シナリオ→モデル→コードのサイクルについて身近な例を踏まえてネタを提供できないかと思った。何でもいいんだけど、鍼とか整体とかマッサージとか一度は行った経験あると思うので、そのドメインで考えてみるか。

ユビキタス言語とドメインモデル、そしてモデル探索のうずまき

最近、ドメイン駆動設計ってどうやって実践すればいいかなーという質問をよくされるので、この記事が満額回答にはならないと思いますが、書いてみたいと思います。 シンプルな問題はトランザクションスクリプト、いわゆる手続き型で対処できます。問題が小さ…

Re: Scala の Trait

trait 便利ですね! メソッド名が衝突する。 override を指定してやると動く。 scala> (new M with N { override def m = super[N].m }).m() hi @rosylilly Scala の Trait trait Mとtrait Nは継承関係もないので別の型として識別されているから仕方ないんだ…

ドワンゴを退職しました

2/28日付けでドワンゴを退職しました。お世話になった会社なのでちゃんとお礼をいっておこうと思います。 初めてのコンシューマ向けウェブサービスでした。とてもよい経験をさせてもらいました。ありがとうございました。 一番大きいところは、ScalaとDDDを…

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

今日は、カリー化と関数の部分適用の話題。 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 関数の引数…

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

Monadを調べていると、モナモナ言いたくなりますね! さて、OptionをMonad対応する例を書いてみます。 Monad型クラスは次のような定義になっています。returnと>>=を実装せいということらしい。 class Monad m where return :: a -> m a (>>=) :: m a -> (a …

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

前回の続きから、Maybeの中身がMonoidだった場合の型クラスの実装は次のとおり。 import Data.Monoid data Option a = None | Some a deriving (Eq, Ord, Read, Show) instance (Monoid a) => Monoid (Option a) where mempty = None None `mappend` any = a…

Maybeを自作してみる(Monoid編)

今回は自作したMaybe用のMonoid型クラスの実装を作ってみます。 Monoidって何ってさっぱりわからないので、型クラスの定義を見てみます。 class Monoid m where mempty :: m mappend :: m -> m -> m mconcat :: [m] -> m mconcat = foldr mappend mempty mco…

ページング用データに対応したFunctorを実装してみる

連続投稿ですが、すごいH本を読みながら、ふとアイデアが湧いてきたのでHaskellコードを書きなぐってみた。 すごいHaskellたのしく学ぼう!作者: Miran Lipovaca出版社/メーカー: オーム社発売日: 2012/09/21メディア: Kindle版購入: 1人 クリック: 4回この…

Maybeを自作してみる(Applicative編)

Maybeの自作ですが、前回に引き続きApplicative型クラスの実装を追加してみました。 コードは次のとおり。 import Control.Applicative data Option a = None | Some a deriving (Eq, Show) instance Functor Option where fmap f (Some x) = Some (f x) fma…

Maybeを自作してみる(Functor編)

モナドを理解するためにMaybeを自作することにしたので、適当にコードさらしてみる。モナド強者の方のツコッミあれば、よいコンテンツ化するのでは感。 data Option a = None | Some a deriving (Eq, Show) instance Functor Option where fmap f (Some x) =…

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

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

JavaOne Tokyo 2012 : Community Panel Discussion に登壇しました。

昨日はみなさんおつかれさまでした。 私は二日目の Community Panel Discussion で日本Scalaユーザーズグループ代表*1ということで登壇しました。ありがとうございました! *1:本当の代表は水島代表(仮)です

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

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

WEB+DB PRESS Vol.67 で記事を書きました

WEB+DB PRESS Vol.67作者: 川口耕介,山本和彦,大和田純,白土慧,太田昌吾,個々一番,Shawn M Moore,清水亮,じゅんいち☆かとう,小野修司,おにたま,神林飛志,杵渕朋彦,中島聡,齋藤正浩,高橋征義,ミック,みやけん,WEB+DB PRESS編集部出版社/メーカー: 技術評論社…

WEB+DB PRESS Vol.66 で記事を書きました

12月23日発売のWEB+DB PRESS Vol.66で連載4回目の記事を書きました。WEB+DB PRESS Vol.66作者: 猪狩丈治,じゅんいち☆かとう,大和田純,白土慧,みやけん,小野修司,個々一番,中島聡,おにたま,角田直行,久保達彦,はまちや2,竹内真,高井真也,成田一生,ココロ社,小…

JIRAで謎い黒魔術!!!

http://atnd.org/events/22899 @yusukeyに絡まれたので、しょうがなく我が家秘伝のJIRA黒魔術をざっくり公開します。。。JIRAはワークフローを柔軟に扱えることが一つの魅力です。 たとえば、ストーリチケットを作成するときに、ストーリポイントは必須だよ…

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

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

WEB+DB PRESS Vol.65 で記事を書きました

10月22日発売のWEB+DB PRESS Vol.65で連載3回目の記事を書きました。WEB+DB PRESS Vol.65作者: 天尋左石,柄沢聡太郎,小野修司,ミック,みやけん,長野雅広,おにたま,中島聡,清水亮,角田直行,はまちや2,大塚弘記,松信嘉範,板垣貴裕,福岡博,大和田純,白土慧,太田…

転職先が決まりました

転職活動を始めました - じゅんいち☆かとうの技術日誌 の結果発表の時が来ました。ということで、転職先が決まりました。 「バリューパックでセットで転職をできればいいねぇー」なんていってましたが、結局 別々の会社に転職することになりました。まぁ、別…

WEB+DB PRESS Vol.64で記事を書きました

WEB+DB PRESS Vol.64作者: 柏木泰幸,松野紘明,林聖高,杉義宏,飯塚直,高橋征義,徳永拓之,Tehu(張惺),中島聡,おにたま出版社/メーカー: 技術評論社発売日: 2011/08/24メディア: 大型本購入: 17人 クリック: 708回この商品を含むブログ (16件) を見る 8月24日…

1万時間の訓練

『プログラマが知るべき97のこと』の 『22 1万時間の訓練』P44 をもう一度読み返してみました。以下、だらだらと感想文を書いてみます。 プログラマが知るべき97のこと作者: 和田卓人,Kevlin Henney,夏目大出版社/メーカー: オライリージャパン発売日: 2010/…