kazurof weblog

技術ネタのメモなどを並べます

JJUG ナイトセミナー 「6.11 ドメイン駆動設計特集!」に行ってきました。

ドメイン駆動設計と言うのはなんとなく聞いたことがあったかな?という程度の認識でした。実際上は予備知識ゼロです。 けれどなんとなく興味がわいたので行ってきました。この記事は、大嘘・勘違いあると思います。ご容赦を。

【東京】JJUG ナイトセミナー 「6.11 ドメイン駆動設計特集! 」 - 日本Javaユーザーグループ | Doorkeeper

簡単な感想

「お客さんの業務の把握して、客でもエンジニアでも理解を共有できるようにして、開発を進めましょう」ということであるとなんとなく理解しました。元の本が2004年出版ということで、新しいようで古くもあるテーマなのだなと。単なるウォーターフォール型でもなくイテレーティブに行きましょうというのが少し新し目な感じでしょうか。

こういうのはSIerがやる業務アプリの受託開発という要素が多くて地味といえば地味かもしれません。けれどプロジェクトを進める上での根幹に関わる物事ということですね。

加藤さんの話からは、DDDは素晴らしく良いものであるという印象は受けなかったけど部分部分使えるところをつまむ工夫があれば格好がつくかもしれませんね。実プロジェクトへ適用する上での工夫とか取捨選択とか。プロジェクトの進め方とか意思決定は判断間違えた時のリスクを考えると怖いものでもあるけど、何らかでも背景となる根拠や知識があれば自信がつくかも。

twitterのタイムラインからはすぐ読めそうな文書へのリンクが見えたので、概要ぐらいは知っておいても損はないかもしれません。後で読んでみよう。 Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

個人的にはコーバーンさんのユースケース分類について言及されてたのがちょっと嬉しかった。あれってまだobsoleteではなかったのですね。思い入れがあるものなので、よかったよかった。

自分向けメモ - よく使うmavenコマンドについて

mvn package

そのプロジェクトでの成果物を生成する。jarとかwarとか。これでwarを作ってtomcatなどにデプロイするという流れ。

mvn versions:display-dependency-updates

利用可能な最新ライブラリの調査。現在pom.xmlに登録されている依存関係を全部調べてより新しい版が公開されていたらそれを教えてくれる。僕はやってないけど、cronか何かに仕込んでおいて、Struts2の新しいバージョンを検知するのにも良いかもしれない。

mvn dependency:copy-dependencies

依存するjarファイルを/target/dependencyに出力。例えば「現在のプロジェクトは、mavenを使っていない。けれどmavenの依存関係管理の機能は使いたい。」ということもあろうかと思います。

そういう場合とりあえず、pom.xmlだけ作ってしまってこのコマンドを叩くと必要なjarファイルをすべて出力してくれます。出力されたjarファイルを手動で /WEB-INF/lib などにコピーして使うのです。今は無理だがいつかプロジェクトをmavenizeしたい時に重宝します。

コマンド例

providedスコープのjar(servlet-api.jarなど)を除外して出力する。

mvn dependency:copy-dependencies -DexcludeScope=provided

mvn dependency:tree

依存関係ツリーをコンソール上でグラフィカルに表示する。 なんとなく依存関係ツリーを把握するのに便利です。でもこの用途なら Eclipseで見たほうが良いかもしれません。

Google Web Toolkit (GWT) のサンプルを動かすためのTIPS

Development Modeで起動できない時

GWTに同梱しているサンプル*1Eclipse上でDevelopment Modeで動かす場合

Main type not specified

というエラーメッセージが出て起動できない場合がある。

この場合、Run Configurations の画面で、Main Classに設定がされているかをチェック。(画像の真ん中辺り)

f:id:kazurof:20140502193211p:plain

もしこれが空欄だったら

com.google.gwt.dev.DevMode

と設定する。*2

tomcatでは実行できないサンプル

mobilewebapp *3 についてEclipseでDevelopment Modeで動かすことはできるが、warを生成して *4 tomcatにデプロイしても実行できない。tomcatは起動するが、初期画面にアクセスすると403エラーになる。

このアプリはGAE環境のAPIを使って認証をしており、GAEでないと動作しない様子。追試はしていないが依存ライブラリからして多分そう。

mavenを使っているプロジェクトをtomcatで試したい場合は、 DynaTableRf*5 や Validation*6 が良い。

オマケ

検証したツールのバージョンなど

参考にしたリンク

https://code.google.com/p/google-web-toolkit/wiki/WorkingWithMaven#Using_Maven_with_Google_Plugin_for_Eclipse

GWTのプロジェクト構造はGWT固有のものですが、開発をするならばMavenを使いたいものですね。

*1:https://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/

*2:普通に操作している限り空欄にはならないと思うが、初めて環境設定をした時は何かの原因で こうなる時もあるかもしれない。再現するかどうかの追試まではできなかった。

*3:https://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/mobilewebapp

*4:mvn package

*5:https://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/dynatablerf

*6:https://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/validation

黒曜石で小トラブルを起こした話

現象

黒曜石*1でプレゼンをしている最中に BLACKOUTボタンを押すと何も起きない。 (発表者は自分で間違えて押したことに気がついていない場合もある。) その後、次ページに進むべくNEXTボタンを押してもやはり何も起きない。 この時点で発表者が異変に気付き、発表途中に右往左往することになり、聴衆ががっかりしプレゼンの価値がだだ下がりになる。

原因

ボタン押下の操作(bボタン相当)をIMEが拾ってしまい、その後のNEXTボタン(PageDown相当)の操作を受け付けなくなる。 PowerPointにおいてIMEが起動状態の時にプレゼンを開始した場合、PCディスプレイが発表者ビューだとIMEが起動状態のままになってしまう。

発表者ビューとは?

発表者ビューとはノートPCに外部モニタ(プロジェクターとか)を接続した状態でスライドショーを開始すると、 外部モニタにはスライド本文が、PCのモニタには発表者向けの画面が表示される機能である。 PowerPoint 2002 に導入され、PowerPoint 2013からデフォルト有効の機能。 特別な操作なしでこのような表示になる。(PCが外部モニタの接続を識別している様子)

発表者ビューの画面

f:id:kazurof:20140407192305p:plain

トラブル発生時の画面

以下の画像は、ボタン押下の操作(bボタン相当)をIMEが拾ったところ。発表者はPCから離れているのでこれに気がつくことはない。これ以降NEXTボタンを押しても何も起きない。発表者が異変に気付き、発表途中に右往左往以下省略。

f:id:kazurof:20140407192544p:plain

参考URL

http://office.microsoft.com/ja-jp/powerpoint-help/HA102800100.aspx http://blog.goo.ne.jp/edo-toddler/e/0297ecb87191cf346062c6d8448dadee

対応

プレゼン実行前にPowerPoint内でIMEをオフにする。ないしは発表者ツールを使わない。

プレゼン中に発生したらescキーで入力をキャンセルする。

発表者ビューを有効・無効にする操作についてはこちらを参照のこと。 http://www.becoolusers.com/powerpoint/presenter-view.html

教訓

プレゼン前に機器の動作確認を十分に行う。できるかぎり実際の環境ないしはそれに近い形で行う。 外部ディスプレイも実際に繋げて動作確認する。

くだまき

普通のプレゼンの状態(スライドショービュー)では、IMEがオンであったとしてもIMEはキー入力を拾いません。 何か入力するわけでは無いのでこれは当たり前の挙動でしょう。もしIMEが拾ってしまったら一体何のためのキーボードショートカットかと。 しかし、発表者ビューではIMEが生きているままです。

勉強会当日会場でスライドの手直しをするのは全く自然なことであって、発表直前に忘れずにIMEを切る…というのは 全く不自然な気がします。そもそも発表者ビューで入力したい何かがあるのでしょうか?MSにフィードバックしたら直してもらえる…でしょうかね?

第五.五回 #渋谷java で、LT発表してきました。

第五.五回 #渋谷java - connpass で、LT発表してきました。

発表内容は、kazurof/NiUnit · GitHub の紹介です。日本語でJUnitテストケースが書けるというネタライブラリです。

発表振り返りよろしく思ったことをつらつら書いていきます。

発表時間

今回ビデオ撮りしたものを確認したら、約15分程度でした。これは大体当初の予想と同じで、#渋谷Javaでのセッション枠と通常枠のどちらにするか悩んだところでもあります。結果的には、長い方を確保できて正解だったという感じです。

黒曜石*1のblackoutボタンの挙動

Titanium もくもく会 #17 でLTやって来ました。 - kazurof weblogの時と同じような、blackoutボタンによる動作トラブルがまた起きました。私環境のPowerPoint2013でのプロジェクター接続時は、bボタンがIMEに拾われる挙動のようです。あとでちゃんと調べてみます。

納得行く準備がしきれなかったということ

今回は十分準備できなかったのが反省です。(発表しても自分で許せるレベル・まあまあのレベルであるがベストではない。)もっと面白話を入れるべき*2だったのか、技術よりの話*3とかをもっとするべきだったのか、聴衆が望むものをもっと徹底的に考えて内容を充実させられたのではと考えています。時間が余ることはなんとなく見えていたわけですし。

そもそもを言えば日本語ユニット本体を完璧に仕上げろという話で、ここはもうちょっと頑張らないとダメですね。

最後に

第五.五回 #渋谷java の皆様ありがとうございました。また面白いネタができたら発表させてください。それからナンバリングですけど10超えてもそのまま漢数字のまま行って良いと思います。第拾回、第拾壱回で全然問題無いと思います。w

*1:フィンガープレゼンター│コクヨS&T

*2:.みんな ドメインが使えるようになったがさすがに諦めたとか、日本語でJavaのコードを書く際の命名ガイドライン的なものが見えてきたとか

*3:プッシュダウンオートマトンの構造を参考にしたとか。

Titanium もくもく会 #17 でLTやって来ました。

一昨日の話ですが、Titaniumもくもく会 #17 : ATND でLTやって来ました。

発表ネタはTitanium Alloyでのトラブル事例です。3回も似たような事やっててネタが尽きないというのもどうかと思うんですが。(汗) Titaniumは当初はiPhone向け開発環境であったらしく、windowsがまだこなれてない感触です。でも、そういうのを差し引いても小トラブル多いなーという感じがあります。昔からTitaniumやっててサービスにまでしてる人はほんとにえらいと思います。

あと今回プレゼンで小トラブルがありました。私は黒曜石*1なるものを愛用しているのですが、突然動作しなくなりました。原因は、うっかり押したblackoutボタン(bキーに相当)を、マシンのIMEが拾ってしまい、変換状態になっていたようです。PC画面左下に変換のUIが出てました。その後の入力(ページ送り)は一切受け付けません。マウスでつつくか何かして入力状態を解除して解決しました。*2 これからはプレゼンスタート前はIMEを忘れずに切るようにしようと思います。あと不用意にblackoutを押すのも避けないといけないですね。パーム(手に隠す)を意識しすぎて握りこんでしまうのかもしれない。

あとやっぱり、プレゼンするときは体調を整えて元気なときに演るべきだったなと。今週は忙しくてちょっとヘロヘロ気味でした。リポDでも飲むなりしないとなあ。

他の方のLTについて

TiShadow というものが発表ネタにされていました。まだ全然よくわかってませんが、ネットワークの向こうの端末に開発途中版をインストールできたらそれは便利かなと思います。SQLite以外のデータ永続化ライブラリもあるのですね。でも今のところはSQLite一択かな。iPhone,Androidクロスプラットフォームネタはもっと詳しく話を聞きたかった。終わったあと発表者さんに話をしてみればよかったかも。

*1:フィンガープレゼンター│コクヨS&T

*2:プレゼン途中にいきなり発生して1分強ぐらいプレゼンが中断した。とほほ

GoogleのJavaコーディング規約について

やや旧聞な感じですが、GoogleJavaコーディング規約(Google Java Style)について読んだ感触を並べてみます。

ドキュメンテーションコメント」という言葉は使わない。

Sunの文書では、

  1. APIリファレンスを作成するjavadocツール、 
  2. javadocツールに処理されるドキュメンテーションコメント。 (/* ... / こういうの) 
  3. 生成されたAPIリファレンス、 

をそれぞれ分けていて、2にドキュメンテーションコメントという名前をつけていました。googleの規約では単に2番を javadoc と呼ぶようです。慣習上の名前をそのまま規約化したということですね。

インデントはスペース2個。けど4個の場合もある。

あー、なにげに画期的かも。小さいことはいいことだ。

1行は80文字か100文字

これ大丈夫でしょうか。インデント2個ならいけるのかな?元々の80の根拠はかなり古い歴史的理由なわけで、ここはひとつ120文字ぐらい許可してもいいのではとも思います。守れるかな?import packageには及ばないのはそこそこの落とし所かも。

クラスメンバーの順序は特にルールはない。けどオーバーロードしているものは連続させる。

staticなものが先とか、コンストラクタはメソッドの先とか考えることはできて、ルール無しは緩すぎ?とも思うけどまあそんなものかも。

Loggerは定数ではない。static finalにはしない。

いやー、そうかなー。機械的にチェックさせるには、static final なものは全部定数扱いにしたほうが良いと思うけど。ルールは単純で機械でもついてこれるものがいいよ。Checkstyleとか。

@return よりも、本文を書く。

これはいい。さすがGooglejavadocタグよりも要約のところになにか出てくるほうが目立つしね。


以上、それなりによくまとまっているなという印象でした。1行100文字ルールはどこまで行けるかなー?下手をすると、クラス名がバッティングして完全修飾クラス名をコード中に書かざるを得なくなったら守れなくなりそうだけど。

あと、英語の原文を無理やり翻訳してみました。間違いもあろうと思います。参考までにどうぞ。

GoogleJavaStyle-ja/GoogleJavaStyle-ja.textile at master · kazurof/GoogleJavaStyle-ja · GitHub

いずれ、Checkstyleの定義ファイルとか、Eclipseのコードテンプレート設定ファイルとかもつくって上げたいと思います。時間が取れれば。。。