かとじゅんの技術日誌

技術の話をするところ

FluxとDDDの統合方法

おはこんばんにちは、かとじゅんです。 久しぶりにブログを書く…。最近、趣味でAngular2やらReactやらやっています。やっとWebpackになれました…。 さて、今回のお題は「FluxとDDDの統合方法」について。Angular2を先に触っていましたが、Fluxといえばやはり…

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

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

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

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

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/…

言語だけでなく文化も学ぶ

『プログラマが知るべき97のこと』の 『26 言語だけでなく文化も学ぶ』P52 には プログラマが知るべき97のこと作者: 和田卓人,Kevlin Henney,夏目大出版社/メーカー: オライリージャパン発売日: 2010/12/18メディア: 単行本(ソフトカバー)購入: 57人 クリ…

[life] Interviews

I've been looking for another job since the beginning of this month. I said I'll quit my current job on my blog two days ago. Then many people made contact with me and I've got twenty offers so far. I really appreciate their offers. And I'…

転職活動を始めました

トライクレオという会社で、SI業務の本業の傍ら、部下(id:daisuke-m)と研究開発を果敢に取り組んで、試験運用寸前まできましたが、研究開発業務自体が継続できない状況になりました。SI業務の利益をやりくりして研究開発に回していたのですが、、SI疲弊の影…

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

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

WEB+DB PRESSでJavaの連載を担当することになりました

6/24発売 の WEB+DB PRESS vol63 より Javaの連載を担当することになりました。 WEB+DB PRESS Vol.63作者: 竹迫良範,和田卓人,じゅんいち☆かとう,太田昌吾,小野修司,ミック,嶋田裕二,個々一番,みやけん,清水亮,おにたま,中島聡,角田直行,はまちや2,上谷隆宏,…

Javaの列挙型っぽいもの

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

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

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

「エリック・エヴァンスのドメイン駆動設計」 を献本していただきました

嬉しいことに「エリック・エヴァンスのドメイン駆動設計」 を献本していただきました! 訳者の和智さん、関係者の方々、翔泳社さん ありがとうございます。おめでとうございます!Tシャツまでもらった!! 実は、私とid:daisuke-mは、この翻訳版の実装編のレ…

日経ソフトウエアの特集がムックになりました

まず、 3月11日の「東北地方太平洋沖地震」で、被害にあわれた皆様に心よりお見舞い申し上げるとともに、犠牲になられた方々とご遺族の皆様に対し、心よりお悔やみを申し上げます。 私も関西出身で阪神大震災の酷さを体験している人間でもありますし、気を負…

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…

生成だけではなく複製もファクトリに任せたほうがよい

DDDで設計を始めると不変条件を維持するために、エンティティなどの可変オブジェクトの複製を行うことがよくあります。 Javaの場合は、Cloneableインターフェイスを実装して、実装型に応じた複製インスタンスを返すcloneメソッドを作る。以下のような感じ。 …

シングルトンパターンの遅延初期化をスレッドセーフにするには

前回、前々回と割とヘビーな仕様の話だったので、今回は若干実用的なネタとして、シングルトンパターンの遅延初期化をメモリモデルの視点から、どのようにすればスレッドセーフになるか考えてみたいと思います。 そのシングルトンの遅延初期化はスレッドセー…

マルチコア時代に備えて本気でメモリモデルを理解しておこう - メモリバリア編 -

このエントリを読む前提条件として、マルチコア時代に備えて本気でメモリモデルを理解しておこう - リオーダー & finalフィールド 編 - - じゅんいち☆かとうの技術日誌を読んで、リオーダーとは何かを理解していることとします。 前回のおさらいをすると、 …

マルチコア時代に備えて本気でメモリモデルを理解しておこう - リオーダー & finalフィールド 編 -

長い文章になってしまったので、概要だけ先に書きます。 以下のJavaプログラムは、常に上から下に順番に命令が実行されると思いますか?つまり、aに1が格納された後に、bに2が格納されると思いますか? 実は場合によってはこの実行順序が入れ替わる場合があ…

並行処理プログラミングを究めるシリーズの書

並行処理プログラミングを究めるシリーズの書 とりあえず以下を読んでます。他に何かよいのがあれば教えてください。 Java言語仕様 第3版 (The Java Series)作者: ジェームズゴスリン,ガイスティール,ビルジョイ,ギッラードブラーハ,James Gosling,Guy Steel…

Stringの連結はそう簡単なものではない

追記: 指摘の通りで、現実的な連結回数での計測でもないですし、統計手法を用いた分析をしていないので、このエントリの計測値は当てにしないでください。なので以下のブログを参考にしてください。 currentTimeMillis()で計測しておいて plusTime:14780, c…