スパゲッティコード

色々やりたいので書いてこうと思います

Java Day Tokyo 2013行ってきました

Java Day Tokyo 2013 に参加して来ました!

Oracle主催のJavaイベント。 今回は主に次期バージョンのJavaについてのフィーチャーを紹介とか。

Java Day Tokyo 2013 togetterまとめ

参加したセッション

  • 基調講演
  • Ask The Experts!
  • Raspberry Pi NightHacking (Java SE / JavaFXを楽しもう)
  • Java IDE の最新トレンド
  • Java プラットフォームにおける Batch アプリケーション (JSR 352)
  • InvokeDynamic から Nashorn のご紹介
  • "Java The Night"

基調講演

OracleJava開発のリーダーみたいな人たちの講演。
主にそれぞれ新バージョンのJavaについての話だった。

はじめに

みんな、Java7使うと、パフォーマンスとかセキュリティとか色々向上するからぜひ使ってくださいね!
※ 補足: 5月14日にJava SE7 の日本語ドキュメントが公開されました。
http://docs.oracle.com/javase/jp/7/api/

Java7、update5あたりから一気にダウンロード数伸びてる。

リリースについて

JDK8は来年2月にリリース。
ホントは3ヶ月前だったんだけど、確実にするために来年2月にしたそうです。
JDK8は現在EarlyAccessで、みんな使ってね!(人柱募集!!!)ってことらしいw
あと、以降のJDKリリースは2年サイクルでやってくそうですよ。
3年サイクルくらいがいいなー。

Java SE

ラムダ式

Java8ではラムダ式使えるようになります。
コードが簡潔になります。
ラムダ式そのものは上記の効果くらいのもんだけど、本当の効果はこれに付随して並列処理をできるようになるというのが大きいところ。
今はスマホもマルチコアになってシングルコアなんてほぼないに等しいので、並列処理に最適化されたコードが書けるのは必要ですよね。
そうですよね。
(並列処理については別セッションで詳しくやってたそうだけど、裏セッションに参加してたため聞けず。そっちに参加すればよかったとちょっと公開してる)

デフォルトメソッド

インターフェースに基本のメソッドを追加できるように。
何がいいかって、インターフェースにメソッドを追加した際にデフォルトの動きを実装することで implements してる既存のクラスは必要なければわざわざ実装する必要がない、って話。

JVM

InvokeDynamicで動的型付け言語動かすのが良い感じになるよ!

Java FX

GUI 開発のためのツールキット群。
かなりすげーいろいろできそう。
テクスチャとか3Dとか、まあ色々。

サーバーサイドエンジニアなせいでGUIとかあんまり…。
クライアントツールとかたしかに作ろうかな、って思うんでまあ知っといたほうがいいんだろうなあ。
FXMLとかCSSとかでいけるっぽいから今度なんかあったら作ってみよう。
そうししょう。

あと、デモで使用してた MS の Surface が超いいかんじでした。
Coolです。
物欲くすぐられました。
やばい。

あと、ここのデモで名言出た。
「JDK8ダウンロード、イツヤルノ?イマデショ!!」
これ、日本人が言ったんじゃないですよ。
プレゼンターの方が言ってましたよw

組み込みJava

カードデバイスとかにもJavaが使えるぜ!
カードから大型機器まで、Javaは色んな所にいるんだぜ。
と、いうことだそうですw

どうもサーバーサイドエンジニアなせいで組み込み系は怖いしあんまり興味をそそられない・・・。
けどいつも見ててすげえな、って思う次第です。

Java EE

EE7 は今 Final で6月リリースらしいっす。
Java EE7の参照実装が GlassFish 4 。

まあ Java EE って色いろあるよねー。
後のセッションで出てくるけど、Java EE 使ってるってどこからなんだろうねw

JJUGに参加してくださいとか、みんな学習は一生続くんだぜー、ってお話を聞きました。
そのとおりですよ。
あとね、積極的にフィードバックを!ってことでした。
たぶん英語辛いだろうけど、変な英語書くより日本語でメールとかしちゃった方が誰か読んでくれるんじゃね?とか思っちゃいましたw

Ask the Experts!

基調講演で公演したJavaエキスパートたちが質問に答えるコーナー。

Java後方互換について

これはこれでみんなどうしたいの?って聞かれた。
もちろんミーハーな僕は、新しいフィーチャー派です。
現状は後方互換を切り捨てるってのはけっこう難しくて、たぶんJava9とかでも無理なんじゃね?って話でした。
ここに関しても、みんなどうしてほしいのってのを言ってましたよ。
あと、Scalaを使うってのが後方互換が必要なのかとかの一つの指標になるんじゃねーか、って話でした。
たしかに、現状の Java の問題を解決するために Scala ってのはある意味近道ではあるだろうし、いいんじゃねーかな。
でも今有名どころで Scala 使ってるのって Twitter とかくらいか?
まあ探せばいっぱいいるんだろうな。
最悪そのまま Java 書いても動くしなあw(意味ないけど)
自分はわりと Scala 好き派。

ラムダ式について

さっきの基調講演で出てきたラムダ式にクロージャって書いてたけど違うやろ、ってツッコミ。
うん、知ってる、だってw
ここでもイマデショでたwww

WebSocketについて

もうちょいサポートするやつらが多くなって使われるようになれば本番運用のノウハウもたまってくるってばよ、って話でした。
WebLogicも新しいバージョンだとサポートするらしいですね。
本番環境ではWebLogicも通るようにしてもらわねーとだね!

Java EE 使ってるって、どれくらいでそう言えるの?

たしかに、Java EE の中っていっぱいあるもんなあw
フルスタックで全部使って初めて使ってるって言えるのか?
答えはノー。
好きに使いたい奴を使えばいいさ、と。

もっと踏み込んで、Servletだけでもいい?って質問にはServletだけでもいいらしいw

だが Struts 、てめーはダメだwww
Java EE 素直に使え、って言ってた。

Raspberry Pi NightHacking (Java SE / JavaFXを楽しもう)

えーと、組み込み系苦手といいつつ、完全に趣味な感じで行ってきました。
別に特にどうってのはないんですけど、ジャイロセンサーとモニタくっつけて、FXで作ったゲームのデモやってました。
FX、夢が広がりまくりングだな・・・。
スピーカーのStephanはCPU900MHzにクロックアップしてるらしいwww
安定してるらしいよ。

Java IDE の最新トレンド

別名 IDE Wars。
オープニング動画はこちら
要するに宗教戦争ですよね。
わかります。
エディタ宗教戦争から派生したIDEの戦争です。
戦争とは言いつつ(誰も言ってない)、和気藹々とやってましたねw

個人的にはEclipse重すぎる(プラグイン入れすぎ)なので、どうにかなんねーかなー。とは思います。
NetBeansにしたいなー、ダメかなー。
IntelliJ IDEA も面白そうだけど有料だから会社で使うにはめんどくさいんだよなあ。

Java プラットフォームにおける Batch アプリケーション (JSR 352)

Java EE7から含まれる JBatch の話。
バッチ処理の上位層は定義ベースで書けるよって話。
チャンク構造のバッチの場合、入力・処理・出力をそれぞれ定義して実装すれば、あとは定義するだけで実行できちゃう、ステキ!っていうシロモノ。
後は定義の方で例外発生時の挙動とかも書ける。スキップしたり、終了したり。

まあ難点はXMLってことだけなのかなー。
別にいいと思うけど。
まあ数が多いとあれだけど・・・。

それから、並列化できるらしい。
これはいい!!

裏セッションではこんなまとめがw

なにがあったんだろーか

Java the Night

色んなスピーカーがLTするセッション。
9組がLTで自分がやってみたJava関連の話。
8分で話すってのはけっこう大変。
学生もいた。
あと最後の人がちゃんとオチを用意してくれてサイコーだったw

FX率が高いので純粋なサーバーサイドに関係ないやつはあんまり記憶に残ってないです・・・。
ごめんなさい。

大学生2人組

北海道の大学生たち。
FX使ったプレゼンツールの紹介。
pdFXってツール。
純粋にすげーな、こいつら。
羨ましいぜー、と思った。

桜庭さん

FX使ったプレゼンツール。
前の学生さんと内容がかぶってるというか・・・w
デュクレレがよかったです。

CTCの人

Raspberry Pi で Java を動かすときの注意みたいな話。
けっこうあれで Java 動かすのって大変なのね。

奥さん

8分間のうち、最初の6分間Javaの「じゃ」の字も出て来なかったセッションw
個人的にはこのセッションがすげー楽しかった。
本来の内容はミニ四駆で勝ちたいから情報収集するためにTwitter上からミニ四駆のツイート拾いまくって(Twitter4J)、データ蓄積して(MongoDB)、機械学習して解析(Mahout)、データを閲覧するってことだったはず。
けど、基本最初から最後までミニ四駆そのものの話題に終始してたw
個人的にはダッシュ四駆郎とか胸熱すぎたw
今のミニ四駆ってコースものすげーことになってんのなw
ちょうど今自分がMongoDBやってるから話聞きたかったし、Mahoutの話とかも最近気になってるから気にはしてたんだけどなあw

全体的に

セッション内の最後の方に質疑応答とかあったんだけど、Oracle 側のスタンスというかユーザーに求める姿勢みたいなのがなんとなくわかった。
あれってどうなるんですかー?とか聞いても、むしろそれはお前らどう思ってるんだよ、積極的に要望上げてこいよ、という感じだった。
たしかに、受け身な姿勢っていうか、あれどうなってんのって聞くくらいならもっと要望上げてこいや、って気持ちはたしかにそうだな、と思った。

単純にいいな、使えそうだな、って思ったのはJBatch。
たしかにバッチ処理ってデータ取得して処理して出力してって流れがほとんどだから、そこのコントローラーが定義ベースに鳴るってのはいいな、って思った。

まあとにかく一日Java漬けの日でした。

プロファイルで環境ごとのモジュール作成

リソースファイルを環境ごとに使い分けてビルドしてモジュール作りたいんだけど、これでいけるはずなのにいくらやっても環境ごとのファイルで置き換わらない!
WRYYYYYYYYY!!!!

と、まあ切れかけてしまった所で解決策を見出したのでメモ。
しょうもないです。

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <overwrite>true</overwrite>
    </configuration>
</plugin>

答えは overwrite にありました。
本当にありがとうございました。

tigが超絶便利な件

MacでもWindowsでもLinuxでも、GUI系ツールが豊富(って言うほど豊富じゃないか?定番はほぼ決まってるし。)でクライアント環境なら別になんも問題のないGitブラウザツールですが、サーバーでGitリポジトリをクローンしてサーバー動かしてるようなやつだとやっぱブラウザで見たい時があるじゃないですかあ。
え、ないっすか?

まあそんなわけでtigいい子ですよ、ってことで。

というか、超絶便利で脳汁が出そうだったので、言いたくなっただけです。

Ubuntuは普通にサクッとインストールできました。

sudo aptitude install tig

終わり。

リモートデスクトップでリモートのドライブで書き込む

開発とは関係ないんですけど、困ったので。

リモートデスクトップで接続したPCでCDとかを取り込みたい時に取り込めない時があります。
前は普通にできたような気がしたんですけど、Windows8からダメになったのかな?
Windows7の時もダメだったような気もするけど。。。

そんなわけで、以下の手順でいけます。

  1. コマンドプロンプトを管理者権限で実行
  2. 以下コマンドを実行

    pgdedit

ローカル グループポリシーエディタが起動します。
3. [コンピューターの構成]、[管理用テンプレート]、[システム]、[リムーバブル記憶域へのアクセス]をたどってく
4. [すべてのリムーバブル記憶域:リモート セッションでの直接アクセスを許可する]をダブルクリックして、有効にしてOK!

これでいけるはずです。

参考にしたのは以下です。

http://windows.microsoft.com/ja-JP/windows7/Burn-a-CD-or-DVD-over-a-remote-connection

ふと思ったんだけど

すでにMaven使ってる人なんていないもんだから記事も古いまんまなんだろうなあ、おれなんて希少種なんだろうなあ。
とふと思った。
Maven3の本こないだ買ってみたんだけど、正直へのつっぱりになるかならないか程度だった。

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

まあしょうがないんだけどさ。。。

かといってGradle本出てるかっていうとそうでもないんだな、これが。

Gradle流行りかけてるといえばそうなんだけど、このままだとMavenのようになっちゃうのかなあ、と思った。

悲しいけどこれ戦争なのよね。
いやいや、戦争じゃないっす。ごめんなさい。
Javaなのよね。
言いたかっただけです。

複数ソースディレクトリのプロジェクトをMavenで指定する

なんかタイトル変ですねえw
とりあえず、Eclipseのプロジェクトで複数ディレクトリをソースディレクトリとして指定したい場合はこうやるよ、って話です。
なんかちょっとググったら出てくるんですけど、ここの中の指定の仕方が古かったっぽいので、これで動いたよ、ということで。

Maven3です。
こんな感じ。

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <id>add-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/main/java/no-generate</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

えへへ。
そのまま貼り付けちゃったけど意味はないからいいよね、別に!

executionsに入れないとダメでした。
ちょっとググったところだと、executions/execution/goalsじゃなくてgoalsとかが書かれてたもんだから、ちゃんと含まれてなかったりしてちょっと泣きそうになったけど、これで行けましたよ。
やってね、たえちゃん!

Windows版のSource Treeが降って来ました

MacのGitクライアントとして使ってる Source Treeのベータ版が今日メールを頂いて使えるようになりました!
そんな訳で軽く感想をば。

ファーストインプレッション

お、リポジトリを複数開ける!!!
タブで複数開ける!!!

こいつ…、動くぞ!

当たり前です。

まあそうなんですが、ちょっといじった感じ、

重いです…。

orz...

いいところは?

複数タブでリポジトリを開けるところです!!!
これは声を大にして言いたいです!

なぜか?

ええとですね。
これは自分の環境のせいでもあるんですが、一つのプロダクトを構成するJavaプロジェクトが複数あり、これがいくつかのリポジトリに分かれてるんですねえ。
これが地味にめんどくさい。
WindowsではGit Extensionsを使っているんですが、リポジトリ1つしか開けません。
多重起動できるので、まあ複数立ち上げればいいんですが、これがねえ…。
なぜか15リポジトリもあるんですよ!
アホかと…。
まあそれは置いといて。
こないだ8リポジトリまで減らしました。
いやあ、半分になっただけですごく減ったような気がしますよ。

まあそんなわけでですね、複数リポジトリだけどIDE上はそんなの関係なく編集するわけですよ。
そうすると、一目見て変更しているファイルが見えないとコミット漏れとかが発生しちゃうわけです。
あー、やだやだ。

そんなわけでタブで複数開いてサイドバーにリポジトリの状態が表示されてるってのは非常に便利。
複数リポジトリ操作するためにコマンド作っちゃったくらいめんどくさいんですよ。
サブモジュールでやるわけにもいかないんですよ、いろいろな問題があり…。

そんなわけでこれだけでも使う価値ありです。
でも、状態の更新がすごく重い。
PCの問題もあるし、対象ファイル数の問題もあると思いますが、重いです。

期待することは?

やっぱ速度改善ですかね。
そこらへんのレスポンスが早くなったら嬉しいなー。

正式バージョンは6月らしいのでだいぶ先です。
みんなも登録してベータバージョン使ってみよう!

http://blog.sourcetreeapp.com/2013/02/14/sourcetree-for-windows-beta-signup/

Mavenでローカルに置いてるライブラリをリポジトリとして参照する方法

ずっと前職で調べて、今また使うかもしれないので。

<repository>
    <id>id</id>
    <name>name repository</name>
    <url>file:${project.basedir}</url>
</repository>

${project.basedir} が味噌ですかね。
あとはfile:ですか。 まあそんな感じで。

Eclipseがビルド中から全く動かなくなって泣きそうになったの巻

今日Eclipseのビルドをしてみたら、何時まで経ってもビルドが終了しない…。 PHPのプロジェクトをビルドしてるところでずっと止まってる…。

そもそもなんでPHPなのにビルドしてんのよ? 意味不明すぎるだろ、常識的に考えて。

プロセスを見るとちょいちょいEclipseJavaのプロセスからPHPのプロセスが生まれてる。

よく見てるとプログレスバーPHPファイルがちょいちょい切り替わって表示されてる。

ココらへんから導き出される結論。

たぶんPHPCheckstyleを有効にしたせいです。 本当にありがとうございました。

たしかにね、こないだPHPCheckstyleがワークスペース上で有効になってなかったからONにしたんですよ。 なんでやってないんだ、アホかよ、と。

まだビルド終わってないんですけど、たぶん黒です。 もうやだ。 これ放置して帰っちゃうよ。 僕帰っちゃうからね。 やだやだ。

じゃあの。