『ドメイン駆動設計のためのオブジェクト指向入門』で発表してきました

kansaiddd.connpass.com

増田さんが「亀岡温泉に行きたい」とおっしゃったので京都になった。
会場が見つからなくて、すんでのところでガレリア亀岡になりかけた。
それはそれで面白かったかも。

直前に補欠から繰り上がった方まで全員参加いただいて、とても盛況な場になったと思う。
ご参加いただいた方々、増田さん、本当にありがとうございました!

フロントエンドはDDDの夢を見るか

  • タイトルつっこみなしで寂しい
  • JavaScriptのところが一番悩んだ
  • DDD初実践のよいふりかえりになった

speakerdeck.com

発表後、リアルやネットで色んな意見がいただけてとても嬉しかった。 中でも多かったのが以下の2つ。

TypeScript使わないの?

「ユーザー定義型が作れないとDDDは無理じゃない?」という意見を複数の方からいただいた。まったくそのとおりだ。
導入"できなかった"理由は一つ、導入を考えたタイミングで、Gradleに組み込むためのnode.jsのプラグインが死んでいたのだ。
すでに開発は中盤に入っていて、クライアントさん、デザイナーさんそれぞれがリモートでプロダクトの開発・検証を進めていた。
この状況でbootrunでまるっと起動できる開発環境を捨てたくはなかった。

同じ理由でsassのコンパイルもnode.jsではなくgemを使っていたのだが、後日今度はそのgemが失踪した。
フロントエンド周りの開発環境マジやばい。パない。こわい。

ビューモデル作らないの?

今回の開発ではあえて「ビューモデル禁止縛り」していた。
ビューモデルは便利なのだ。ともすれば、ドメインモデルにやらせるべき仕事がビューモデルに染み出しそうになる。そこを適切に設計できるか、DDD未経験だった当時の私には自信がなかった。
言わばDDD養成ギプスとしての「ビューモデル禁止縛り」だった。
といっても、発表資料中にもあるように、要所要所でそれっぽいクラスは作っていた。レイヤーとしてビューモデルは作らなかった、というのが正しい。

余談

最大32名の部屋に対して30名募集し、おかげさまであれよあれよと申込みいただいたあとになって、ある重要なことに気がついた。

登壇者(3名)を数に入れてなくない?

でもまぁ、なんとかなるか〜と挑んだ当日の結果…

こざけさん、本当にごめんなさい!そしてありがとうございました。

VPC上のELBにsubnet が設定できない

エラー

AWSでELB(Elastic Load Balancer)をCREATEしようとすると、以下のメッセージが出た。

At least one subnet must be specified for a VPC load balancer.
(VPCロードバランサーには少なくとも1つのサブネットが必要です)

それならということで、一つ前の画面に戻り「Edit Subnets」から

設定したいサブネットを選択するも

元の画面まで戻ってくるとアレ?選択したサブネットが反映されていない。

解決策

「Create Load Balancer」の最初の画面、「1.Define Load Balancer」で"Enable advanced VPC configuration"にチェックを入れる。

すると、作成手順に「3.Select Subnets」が増えて

CREATE手前の画面でも設定が確認できるようになる。

作成成功

どういうこと?

デフォルト VPC での基本的なロードバランサーの作成に上記でチェックした"Enable advanced VPC configuration"の説明がある。

[Enable advanced VPC configuration:] オプションでは、独自のサブネットを指定できます。このオプションは、独自のサブネットを作成済みでデフォルトサブネットの代わりに使用したい場合に選択します。
つまりこのオプションをONにしておかないと、デフォルトサブネットが設定される仕組みだった。私はデフォルトサブネットを削除していたので、このような挙動不審におちいってしまったらしい。

でもこれManagement Consoleのバグっぽい気がするのでそのうち修正されるかも?
インスタンス作るときには「デフォルトサブネットがないのでサブネット選択必須ですよ!」って警告でるし、同じようにしてくれればいいのにな。

(参考)ELBに設定できるサブネットの条件

  • publicサブネットであること
  • ELB自身のスケーラビリティのために、最低でも/27ビットマスクのCIDRの範囲が必要
  • AZ(Availability Zones)ごとにひとつしか設定できない
  • ロードバランシングする対象のインスタンスとは同じサブネットでなくて良い

関西Javaエンジニアの会スペシャル! JavaOne 2014 報告会

関西Javaエンジニアの会スペシャル! JavaOne 2014 報告会

JavaOne 2014 サンフランシスコの最新レポートについて

@yoshioteradaさん
#てらだよしおがんばれ でおなじみ、国民的エバンジェリストの寺田さんです。今回ハッシュタグつぶやきそびれた…

CREATE THE FUTURE Java

企業主体で先導してきた時代から、コミュニティの活性化により変わってきているようです。個人的に気になったのは@jyukutyoさんのこの発言。

Java、JUGs入り?

Lambda

ゴールドマン・サックスが自社で開発したコレクション・フレームワークをLambdaに置き換えて9%のコード削減に成功したそうです。もともと置き換え想定で実装していたらしいですけど。あとで調べたらこのあたりに記事(pdf)がありました。

Duke 2014 デロリアンのデモ動画

基調講演でデモされたJava SE, ME, EEすべてを駆使してJavaで構築したドライブシミュレータ…もといデロリアンの動画です。
始めは動かなかったらしく、途中でリブートされたとか。
作っている人楽しかっただろうなー

Advanced Management Console (AMC) 1.0
  • 企業システムにおけるjava Applet, Java Web Start の利用状況の収集
  • アクセス制限をかけられる
  • 一部のアプリケーションのみ古いJREで動作させられる

私は業務アプリケーションエンジニアなので、将来的に使うこともあるかも?とちょっと興味をそそられました。利用にはライセンス料が必要とのこと。ランニングコストが気になります。

JDK Enhancement-Proposal

Javaの今後についてはJEPを見てね!」という話に、さくらばさんから「Open JDKだけだよ」というツッコミが。

JEP 182:Policy for Retiring javac -source and -target
javacには実行バージョンと対象バージョンを指定できるオプションがあるのですが、ここでの話題は「JDK 9では1.5/5は実行できなくなりますよ」とのこと。"one plus three back"…三世代前までしかサポートせんよってことですね。

Java EE 8

JSR366で仕様策定中。
アピールポイントに「かんたん開発」というワードが上がっていましたが、日本には「かんたん」「らくらく」「超高速」と聞くとトラウマがよみがえるエンジニアもいるので、ネーミングは要検討ではないでしょうか。

Java SE 7
  • 2015年の4月に死にます
  • 知ってた

学生がJavaOneに初参加して得たもの

@bitter_foxさん
いつも発表を拝見するたび生きるのが辛くなる学生さんです。最近、OpenJDK Project Lambda の Authorにジョインされました。おめでとうございます。『Javaエンジニア養成読本』にサインをいただきました。ありがとうございます。なんかもうまぶしすぎてお顔を直視できない。

Java
  • ニッチなJavaのセッションに出会える
  • 豊富なセッション数〜自分の興味がある分野のセッションがかならずある!

JEP 222: Java Read-Eval-Print Loop (REPL)
なんとJavaにREPLが

JEP 225: Javadoc Search
JavaDocのサーチ機能が強化。HTML5が使用できるようになるらしいです。これは楽しみです。

英語
  • 自分の英語力を試すバロメータになる
  • 5日間いると英語耳になる

本当に?Java耳にならない?

日本人
  • 5日間行動をともにすることになるので、日本にいるときより深く交流できる
  • 毎晩開催されるパーティーが楽しい
外国人
  • 日本にいると交流する機会はない

JavaOneは若いうちに参加するといいと思う』(1HIT!)
『日本でいやいや仕事で1.4触っている人たちとは違う人達と交流できる』(2HIT!)
『若いうちにこうした経験をすることで、有意義なエンジニア人生が送れると思います』(3HIT!!)

orz

OracleOpenWorld/JavaOne

じんさん&岡本さん

  • ハンバーガー、ハンバーガー、ハンバーガー
  • あとカニ

写真が多く、見ていて楽しかったです。5日間なにを食べて過ごすの?どんなとこで寝るの?そういう疑問がわかりやすい発表でした。
OOWの様子が見られたのも良かったな。

The Good Parts of JavaOne

@tomo_taka01さん
2年連続、2回目の参加となるともたかさん。
英語難しい!と言いながら、現地でめいっぱい交流されている姿勢には頭が下がります。いつも発表資料がJavaFX製なのもすごい。

  • 英語難しい!セッションハードル高い!
  • でも色んなエンジニアと交流できるのはとても楽しい
  • 一人で参加している人も多いので、とりあえずこちらから話しかけてみる
  • ネイティブスピーカーでない人も多いので、片言の英語でも相手してもらえる
  • きっかけは「Where do you from?」や「May I interrupt you?」(ちょっといいですか?)

JavaOne 2014 では Java SE について何が語られたのか

@skrbさん
日本で唯一のJava チャンピオン&スイーツ王のさくらばさん。

Project Valhalla
  • Brian Goetzさんが言語仕様、John RoseさんがVM
  • Specialized Generics

ジェネリクスにプリミティブ型が使えるようになるよ』という話です。

List<int> list = new ArrayList<>();

これが書けるようになる。
実装はまだまだ先に(Java SE 10以降?)なりそうですが、ゆくゆくはプリミティブ型に特化したクラスは不要になるかも。IntStreamとか。

  • Value Types

オブジェクト型の配列を作ると配列にはオブジェクトへの参照が格納されます。これをオブジェクトを直接格納することでヒープメモリを節約しよう、という試み。
実装イメージは

value class Point {
    final int x;
    final int y;
}

こんなかんじですが、「valueを予約語にすると多くの開発現場で悲鳴があがるであろう。実際はvalue以外になるんじゃないか」と、さくらばさん談。
個人的には使いどころが思いつかないです。100万個を超える要素を配列に格納しなければならなくなった場合、まず自分の頬を殴ってから設計を見直します。

Project Panama
  • Charles Nutterさんが言語仕様(Jrubyの開発者)、John RoseさんがVM
  • Foreign Function Interface(FFI)

ネイティブコードをコールするには、JNI→JNAと来てJNRが実装されつつあるようです。JNAに比べると10倍速いらしいです。
GitHubはもう上がっているとか。

Project Jigsaw

Javaのモジュールシステム化を実現し、依存関係をより柔軟にコントロールできる仕組み。今まで固定販売だった幕の内弁当のおかずを、量も種類も好きに選べるようなかんじです。
言わずもがなJavaのスペックリード、Mark Reinholdさんがチーフアーキテクトです。
資料に写っていたJDKの依存関係図は、見ているだけで不安定な気持ちになりました…
Java SE 9には入る!と信じているのですが、だいじょうぶかな…ともあれ、9で一番楽しみにしている実装です。

JavaFX
  • Richard Bairはデロリアンのデモとかやって遊んでいるうちにIoT担当になってJavaFXから離れちゃった
  • 法線・ダイアログ・3Dモデル
じゃんけん大会

欲しかったデュークのキーホルダーは取り逃しましたが、レア物ボールペンをいただきました!ありがとうございます。

solaris…懐かしいですね。真夜中に先輩からの電話で起こされて「STOPキーがないからシャットダウンできない」と言われ、Solarisキーボードを抱えてデータセンターへ向かった過去とか思い出しましたね。

感想
  • Javaのイベントは行くたび「あ、やっぱりJava好きかも」と思います。スタッフ&登壇者の方々、今回もありがとうございました。
  • Project Jigsaw本当楽しみにしているのでお願いします。もう電車遅延はなしで。
  • 2015年のJava Oneは10/25-29だそうです。
  • 私が生きている間にJavaにプロダクトスコープが出来ますように。

いろふさんの来年を考えてみる

こんにちは。いろふ型駆逐艦12番艦のゆきーんです。

これはいろふ Advent Calendar 2013の24日目の記事です。
前の日は@hajikamiさんのirof history i18n 対応への第一歩でした。
およそ1年ぶりの記事ですね。私のブログはいろふ Advent Calendarを書くためだけに存在しているみたいですね。まぁ良いでしょう。

2013年のいろふさんをふりかえる

いやぁ、今年もいろふさんは大躍進でしたね!

そんないろふさんの来年とおなかの調子が気になりますよね?
そこでご用意したのがこちらのLirofe Gameとなります。

Lirofe Gameとは?

ライフゲーム + irofさんな融合合体型未来感覚セル・オートマトンです。
何はともあれご覧あれ。

いかがでしたでしょうか?
飛び交うグライダー、花火のようなパルサー…どれもこれもいろふさんの平穏無事な2014年を表していましたね。
これで来年も武運長久まちがいなし!

おまけ


綺麗な多重配列だろう…手書きなんだぜ…

ソース

https://github.com/yukieen/LirofeGame

明日はいよいよ@irofさんです。

いろふさん絵描き歌

いろふ Advent Calendarの12日目担当、ゆきーんです。
前日は@masafumi_ohtaさんのI don”t know ‘irof-san’ but I know ‘roifadm’.(Just kidding for Japan Java UG :-p)です。

歌います。

これっくらいの♪canvasにっ♪

var canvas = document.getElementById('irof');
if ( ! canvas || ! canvas.getContext ) { return false; }
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.lineWidth = 5;
ctx.fillStyle = "#FFF";
ctx.strokeRect(0, 0, 300, 300);

ぐるっと輪郭ちょっと描いて♪

ctx.beginPath();
ctx.lineWidth = 10;
ctx.arc(242,250,117,172 * Math.PI / 180, 214 * Math.PI / 180,true);
ctx.stroke();

ぱっくぱっく開いたお口をつっけて♪

ctx.lineTo(210, 255);
ctx.closePath();
ctx.stroke();

ふっきだっしはっ♪ベッジェきょっくせんっ♪

ctx.beginPath();
ctx.moveTo(50, 30);
ctx.lineTo(153, 30);
ctx.arc(153, 60, 30, 270 * Math.PI / 180, 90 * Math.PI / 180, false);
ctx.lineTo(105, 90);
ctx.bezierCurveTo(105, 90, 90, 105, 129, 141);
ctx.bezierCurveTo(90, 135, 66, 120, 81, 90);
ctx.lineTo(57,90);
ctx.arc(50, 60, 30, 90 * Math.PI / 180, 270 * Math.PI / 180, false);
ctx.stroke();

点、点、点、点、つっぶやっいて♪

ctx.beginPath();
ctx.fillStyle = "#000";
ctx.arc(51, 60, 5, 0, Math.PI * 2 ,true);
ctx.arc(84, 60, 5, 0, Math.PI * 2 ,true);
ctx.arc(120, 60, 5, 0, Math.PI * 2 ,true);
ctx.arc(154, 60, 5, 0, Math.PI * 2 ,true);
ctx.fill();

あーなを開ーけたらいろふさん♪

ctx.beginPath();
ctx.arc(255,204,15,0,Math.PI * 2,true);
ctx.stroke();

でっきあがり!

本物

座標計算には@kawakawaさんのExcel方眼紙の世界にいろふさん(@irof)をご招待してみようを参考にさせていただきました。
やはりExcel方眼紙は素晴らしいですね!

明日は@bufferingsさんです。

SQL Server 2005 エラー番号

環境

エラー番号

  • 一意エラー:2627
  • ロックエラー:1222

例(VB.NET Framework2.0)

Try
    Dim dao As New SampleDao
    dao.insertSample()
Catch ex As SqlClient.SqlException
    If ex.Number = 2627 Then
        '一意エラー
        Console.WriteLine("一意エラーが発生しました。")
    ElseIf ex.Number = 1222 Then
        'ロックエラー
    Console.WriteLine("対象データにロックがかかっていました。")
    End If
    Throw ex
End Try

エラー番号を調べる

SQL Serverのsys.messagesを参照する(全67941件,うち日本語7549件)。

SELECT * FROM sys.messages WHERE language_id = 1041

"1041"は日本語のlanguage_id。英語は"1033"。

OutOfMemoryExceptionテスト

OutOfMemoryExceptionのテストを行うためわざと発生させるお手軽な方法。
Long型の配列を作成する。

Try
     Dim longs(100000000) As Long 'DEBUGコード
Catch ex As OutOfMemoryException
    MsgBox("メモリが不足しています。再起動してください。")
  System.GC.Collect()               'ガベージコレクションを明示的に発生
End Try