Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Your Language  
PlanetNetbeans
プラネット NetBeans には、ブロゴスフィアの各所から集められた、NetBeans に関連する概念やアイデアがあります。
フィード
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
NetBeansのブログを書いていますか? PlanetNetBeansにあなたのブログを登録してください!!
フィード登録
uyota 匠の一手 (feed)
“netbeans” の検索結果 – Happy My Life (feed)
Florian’s NewestDiary (feed)
HighLookの日記 (feed)
Kazzzの日記 (feed)
MineAPの(開発)日記 (feed)
bojovs blog (feed)
challenge Ruby on Rails (feed)
ぼそっと (feed)
チョッパーのほふく前進 (feed)
Sacrificed & Exploited (feed)
こくぼ@Everything is the experience. (feed)
不可逆な毎日 (feed)
ネットランダム改 (feed)
Scala で TAPLを勉強しつつ LLVM コンパイラを作る日記 (feed)
人工無脳が作りたかった (feed)
PHP,MySQL,Flex,JSな日々+イラストとか (feed)
ひたすらプログラミング日記 (feed)
henacho-coの日記 (feed)
Foo am I? (feed)
CROSSFIRE DBとコンパイラの日記 (feed)
イトウ アスカ blog (feed)
techlog (feed)
asa nisi masa (feed)
怒りのJava学習 (feed)
kaisehのブログ (feed)
?   ...!?   ...!!   from Kei-Miya... (feed)
へぼの壷 (feed)
紫水晶の和 (feed)
forest of netBeans (feed)
鎌倉でも手の平捕球!エースコーチの日記 (feed)
marsのメモ (feed)
mk18のプログラミング日記 (feed)
nidoの雑記 (feed)
きしだのはてな (feed)
忘備録1.0 (feed)
ryopeiの日記 (feed)
試行錯誤と創意工夫(S!アプリ開発日記+α) (feed)
しんさんの出張所 はてな編 (feed)
やさしいデスマーチ (feed)
ささくれ、深爪、口内炎。 (feed)
Tomute’s Notes (feed)
torutkの日記 (feed)
Servlet Garden @はてな (feed)
草木のにをいに誘われた (feed)
ねこび~ん (feed)
へびのぬけがら (feed)
Where's my Blog?!

Powered by:    Planet

Last updated:
June 30, 2016 10:08 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
torutkの日記 - May 24, 2016 12:00 AM
[Java]Java Day Tokyo 2016に参加してきました #JavaDayTokyo

本日は、Java Day Tokyo 2016|日本オラクル に参加してきました。 なお、午前中は会社で仕事をして、午後からの参加でした。 会場は、東京マリオットホテル、品川駅から10分ほどの御殿山です。お昼を食べる余裕がなく、途中駅でパンを買ってきました。 ホテルに付いた後、会場の場所が分からずさまよってしまいました。入り口に案内がなく、あちこちうろうろしてやっと地下に降りて受付の案内板があり会場にたどり着くことができました。 Java Day Tokyo 2016のサイトには会場アクセスでホテ ...

きしだのはてな - February 28, 2016 05:14 AM
Javaをチラ見する

Javaを知らないからちょっとだけ見てみたい、みたいな人のために、ちょっとしたチュートリアルを書いてみました。


準備

まずはJDKをダウンロード・インストールしてください。

http://www.oracle.com/technetwork/java/javase/downloads/index.html

ダウンロードページでは「Accept License Agreement」にチェックして、自分の環境にあわせたインストーラをダウンロードします。

今だとu73とu74がありますが、初めてインストールするなら74でいいと思います。


インストールするものを選ぶダイアログで「開発ツール」「ソースコード」「パブリックJRE」が出ますが、パブリックJREは不要なので、左のアイコンをクリックして、×がついてる感じのを選ぶといいと思います。


あと、NetBeansもダウンロード・インストールします。

https://netbeans.org/downloads/

「Java EE」か、「すべて」にします。


途中「互換性のあるJDKインストールがみつかりませんでした」と出るので、先ほどインストールしたフォルダを指定します。「C:\Program Files\Java\JDK1.8.0_74」とか。


JDK+NetBeansでインストールすると楽かも。(未確認)

http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-142931.html


Javaのプログラムを動かしてみる

メニューで、「ファイル > 新規プロジェクト」を選んで、「Java」カテゴリの「Javaアプリケーション」を選んで「次へ」

f:id:nowokay:20160228144009p:image


こだわりがあるならプロジェクト名になにか入力して、「終了」を押します。


// TODO code application logic here

を消して、

System.out.println("Hello!");

と入力します。printlnはPRINTLNの小文字です。PRINTINではありません。

ctrl+space(macはcommand+\)を押すと補完候補がでるので、そこから選ぶと楽だしミスもないです。


エディタ内で右クリックして「ファイルの実行」を選びます。

「出力」に

run:
Hello
ビルド成功(合計時間: 0秒)

と出たら勝ち。

f:id:nowokay:20160228144504p:image


デスクトップアプリを作る

左側の「プロジェクト」のツリーで、「ソース・パッケージ」の下の「javaapplication」とかになってるところを右クリックして、メニューから「新規 > JFrameフォーム」を選びます。


「New JFrameフォーム」ダイアログの「クラス名」に「MyForm」とか入力して「終了」を押します。


右側の「パレット」から「Swingコントロール」内の「ボタン」をクリックします。

f:id:nowokay:20160228144011p:image

デザイン画面の中の適当な位置でクリックするとボタンが押されます。

f:id:nowokay:20160228144010p:image


同様に「テキスト領域」を適当なところに置いてください。これは大きさも適当に大きくするほうがいいです。


配置したボタンをダブルクリックすると、なんかコードが生成されるので

// TODO add your handling code here:

の部分に

jTextArea1.append("Hello!\n");

と入力します。


そしたら、さっきと同様に、エディタ上で右クリックして「ファイルを実行」します。

ウィンドウが開いて、ボタンを押したときに「Hello!」ってテキストエリアに出てきたら勝ち。

f:id:nowokay:20160228144012p:image


Webアプリケーション

「ファイル > 新規プロジェクト」を選んで「Java Web」カテゴリの「Webアプリケーション」を選んで「次へ」を押します。

f:id:nowokay:20160228144008p:image


こだわりがあれば「プロジェクト名」をなんか書き換えて、「次へ」を押します。

そこで「終了」ですよ。


プロジェクトツリーの「ソース・パッケージ」を右クリックして、メニューから「新規 > サーブレット」を選びます。

「クラス名」に「MyServlet」とか入れて、「パッケージ」に「servlet」とか入れて「終了」を押します。次にいかなくていい。


なんか、だばーっとソースが生成されるので、44行目あたり、<h1>の下の行に

out.println("today is " + java.time.LocalDate.now());

を追加します。


また同様にエディタ上で右クリックして、「ファイルを実行」します。


「サーブレット実行URIを設定」と出るので、そのまま「OK」と押します。

なんかいろいろ起動します。

ブラウザが開いて

Servlet MyServlet at /WebApplication2
today is 2016-02-28 

みたいなのが表示されたら勝ち

f:id:nowokay:20160228144014p:image


Windowsだとアクセスコントロール的なのが出るかもしれないけど、パブリックにチェックを*入れない*ようにして、おっけーします。


そしたら、さっきのjava.time.LocalDate.now()を、java.time.chrono.JapaneseDate.now()に書き換えて保存(ctrl+S)します。

そのままブラウザをリロードして

today is Japanese Heisei 28-02-28 

って出たら大勝利。

f:id:nowokay:20160228144013p:image


終了。

気に入らなかったらアンインストールしましょう。でもNetBeansはGit用GUIとしてとかRDBMSツールとかJavaScriptエディタとして結構優秀なので、そのまま使うのもいいよ!


torutkの日記 - February 15, 2016 12:00 AM
[NetBeans]NetBeansのプラグイン:MoreEmacs、Darcula LAF、ItaEditor

最近登場したNetBeansプラグインから、Emacsキーバインドを強化するMoreEmacsプラグイン、ダークテーマ化するDarcula LAF for NetBeans、エディタペインの背景に画像を表示するItaEditorの3つを紹介します。 MoreEmacsプラグイン NetBeans IDEには標準でEmacsキーバインドが用意されているので、Emacs使いがNetBeans IDEを使う際はキーバインドをデフォルトからEmacsに変更することで、手に馴染んだエディタ操作が可能です。しか ...

きしだのはてな - October 28, 2015 08:37 PM
[javaone2015][javaone] JavaOne2015サンフランシスコ-一日目

今年もJavaOneの季節です!

f:id:nowokay:20151025135842j:image


今回は、China Airlineの台北経由で来たのだけど、2万円くらい多く払うとプレミアムエコノミーになって快適なので、来年からもそうしようかと思います。ANAだとプレミアムエコノミーにするのに15万円くらいかかって倍になるので。

台北で4時間くらいの待ちがあってヒマだけど。成田乗り換えだと両替とか出国手続きとかで時間がつぶれるけど、台北経由ならすでに出国してしまっててやることないし。

ただ、荷物の受け取りはカオスでした。ひっかかった荷物からバキバキという音が・・・

f:id:nowokay:20151024201848j:image


レジストレーション

ちょっと体調わるかったので、昼から。まずはレジストレーションにヒルトンまで来ます。

なんか、ヒルトンのロビーが改装中でした。

f:id:nowokay:20151026094601j:image


ビックリしてたら、レジストレーションはあっちだよーってサンフランシスコ弁で言われたので、そっちに移動。

f:id:nowokay:20151025141059j:image


特になにごともなく、スムーズにバッヂもらえました。

f:id:nowokay:20151025141108j:image


OracleOpenWrold/JavaOne期間中は、これをぶら下げている人が街中をたくさんうろうろすることになります。


Java Keynote [KEY8049]

キーノートはMoscone Centerであるので、移動します。

いつもどおり、ヨットがかざあってある。

f:id:nowokay:20151025142941j:image


そしてMosconeの前は道路を封鎖してくつろぎ会場に。

f:id:nowokay:20151025143122j:image


キーノート会場に降りていきます。

f:id:nowokay:20151025143224j:image


すげー寒い(物理)。

f:id:nowokay:20151025143748j:image


内容も・・・で外に出ていく人が多くて、さらに寒くなっていきました。

楽天の岩崎さんとArshallが登壇してたのが驚きだった!

f:id:nowokay:20151025153836j:image


スコットマクネリが出てきたのがサプライズだけど、会場の半分くらいは、だれこのオッサンとか思ってたんじゃなかろうか。


ということで、特に新しい情報はなく終了

f:id:nowokay:20151025155857j:image


GlassFish Performance Tuning: Tips from the Field [UGF11182]

GlassFishのパフォーマンスチューニングのセッション

f:id:nowokay:20151027152653j:image


ということだったけど、なんかプロファイラとかそういうツールの説明ばっかりしてた、ような気がする。

途中で寝落ちた。


Evolving Java EE [UGF10283]

JavaEEの歴史のセッション

f:id:nowokay:20151027141150j:image


EJBのLocalInterfaceとかHomeInterfaceの話から始まって、JavaEEがどう進化したかということを話してた、ような気がする。

途中で寝落ちた。


WildFly, Hadoop, JavaFX, and HTML5 in the Enterprise [UGF10306]

なんかHadoopの話ばかりしてた、ような気がする。

f:id:nowokay:20151027141151j:image

途中で退出


Building Nanoservices with Java EE and Java 8 [UGF10284]

隣の部屋にきたら、なんか寺田さんのような人がいるなーと思ったら、寺田さんだった。

f:id:nowokay:20151027141152j:image


すごく自信たっぷりに、日本語メッセージの動画を流していたので、全日本人に希望を与えた。

f:id:nowokay:20151027141153j:image


ということで終了

f:id:nowokay:20151027141154j:image


Oracle Appliciation Event

外に出ると、なんかイベントが始まってました。

f:id:nowokay:20151025192949j:image


ビールもあります。

f:id:nowokay:20151025193139j:image


けど、ここでは飲まずに移動。


GlassFish, NetBeans, Payara Party

今年もThirsty Bearでパーティーです。

f:id:nowokay:20151025195349j:image


ここで醸造したビールが飲めます。

f:id:nowokay:20151025201744j:image


たくさん人がいます。

f:id:nowokay:20151025223352j:image


寺田さんはいろいろ抱き付いて写真をとってもらってました。

f:id:nowokay:20151025225640j:image


そして連行。

f:id:nowokay:20151025231522j:image


おつかれさまでしたー


英語

英語は結局ぜんぜんわからないけど、何を言われるのかがわかっているので推測して反応するって感じでした。

ということでまた明日。


と思ったら、cero_tが近所の居酒屋に行くというのでうどん食ってきました。

f:id:nowokay:20151026004025j:image

Javaやってる人が2ブロック先に住んでて夜中にふらっとうどん食いに行くとか、日本じゃできませんね。JavaOneならでは。

f:id:nowokay:20151026002653j:image

torutkの日記 - October 04, 2015 12:00 AM
[Java][JavaFX]Apache PDFBoxライブラリを使ってPDF文書の表示(着手編)

ときおり、PDF文書から任意のページを切り出したいということがあります。PDF文書を扱うのはAcrobat(≠Acrobat Reader)を購入するのが一番でしょうし、フリーのツールも多々存在しますが、ここはJavaでツールを作成してみたいと思います。 まず、第一歩としてPDF文書をページ単位でJavaで表示するPDFのビューアーを作成し、次にページを指定して切り出す機能を付けるという段階で進めていこうと考えました。 JavaからPDFを扱うオープンソースライブラリとしては、昔からの定番のiText ...

torutkの日記 - September 26, 2015 12:00 AM
[Java読書会]Java読書会BOF「Javaパフォーマンス」を読む会(第4回)を開催して #javareading

通算198回目のJava読書会を本日開催しました。再来月は200回記念です。 川崎市の団体登録更新 Java読書会BOFは、主に川崎市の公共施設の会議室を借りて開催しています。川崎市の会議室を借りるには、川崎市の「ふれあいネット」と呼ばれるシステムに利用者登録(団体登録)をする必要があります。登録をすると、インターネットや各公共施設に設置の端末から会議室の抽選申込、検索、予約ができるようになります。 Java読書会BOFは、この「ふれあいネット」に団体登録をして会議室を予約・使用して読書会を開催して ...

torutkの日記 - September 01, 2015 12:00 AM
[NetBeans][Java]NetBeans 8.0.2からのScene Builder 8.0.0起動

本日記の確認環境 OS Windows 7 64bit版 JDKOracle JDK 8u60 64bit版 Scene BuilderScene Builder 8.0.0 x64版 NetBeans NetBeans 8.0.2(更新非適用) NetBeans 8.0.2からScene Builder 8.0.0を起動する JavaFX Scene Builderは、現在Gluon社からビルド済みバイナリ(OSごとのインストーラ)が提供されています(次のURL)。 http://gluonh ...

torutkの日記 - August 23, 2015 12:00 AM
[NetBeans]JUnitプラグインなどをオフラインでインストール

インターネットに接続できない環境でNetBeans IDE 8.0をインストールすると、JavaのユニットテストライブラリJUnitのプラグインがインストールされません。 また、NetBeansの認定プラグインサイトを調べてJUnitプラグインのファイル(.nbm)をダウンロードして、それをインターネット非接続環境でインストールしようとした際、ネットワーク接続をしに行ってエラーとなるため、インストールをすることが出来ません。 この問題を説明している記事がstackoverflow上にありました。 ht ...

torutkの日記 - August 06, 2015 12:00 AM
[NetBeans]EasyPMD 9.0/9.1はNetBeansにエラーを起こさせる模様

ソースコード検証ツールPMDのNetBeans用プラグインであるEasyPMDがここのところ活発にアップデートされています。 最新のEasyPMD 9.1をインストールしたところ、NetBeansの新規プロジェクト作成ウィザードが正常終了しなくなってしまいました。[通知]を見るとエラーが発生しており、フィードバックを送信すると、次のバグIDに誘導されました。 https://netbeans.org/bugzilla/show_bug.cgi?id=247192 EasyPMDのサイトから、順次古いバ ...

torutkの日記 - August 06, 2015 12:00 AM
[NetBeans][JavaFX]GluonのScene BuilderをNetBeansが認識

JavaFX Scene Builderのバイナリ入手先 - torutkの日記 で、Scene Builderの新しいバージョン(Java 8u40で追加されたJavaFXのダイアログなどの機能)のバイナリがGluon社のサイトで公開されていますが、NetBeansからは認識できないという件を書きました。 最近、NetBeans 8.0の更新に、JavaFX 2 Scene Builderという文言を見かけたので、気になって[ツール]メニュー > [オプション] > [Java] > ...

torutkの日記 - August 01, 2015 12:00 AM
[Java]複数JDKバージョンのインストール(Windows OS編)

Javaでプログラミングをしていると、複数のJDKバージョンを扱うことが必要になることがあります。そこで、アップデートの度に古いバージョンをアンインストールせずに新しいバージョンを入れていくとこんな感じになります。 インストール先のディレクトリは次のようになります。 C:\Program Files\Java>dir jdk* 2013/05/25 22:32 <DIR> jdk1.6.0_45 2015/04/15 23: ...

torutkの日記 - May 24, 2015 12:00 AM
[JavaFX][NetBeans] Java SE 8 Update40のJavaFXをScene Builderで使い、NetBeans 8.0と連携させる

id:torutk:20150313 のコメントに、Gluonがビルド/配布しているJava SE 8u40対応Scene BuilderをNetBeans 8.0から認識させる方法を寄せていただきました(樋口さん、ありがとうございます)。 そこで、追試してみることにしました。確認環境はWindows 7 64bit版です。 Gluon のScene Builderをインストールする Gluonのサイトで各OS向けのScene Builder インストーラがBSDライセンス公開されています。 htt ...

torutkの日記 - May 06, 2015 12:00 AM
[コンピュータ]ゴールデンウィークにやったことなど

CentOS 6(Red Hat Enterprise Linux 6)用RPMパッケージの作成 GitBucket 3.2およびRuby 2.1.6/2.2.2のRPMパッケージを作成しました。 GitBucket - ソフトウェアエンジニアリング - Torutk CentOS 6でrubyのRPMパッケージを作る - ソフトウェアエンジニアリング - Torutk Android関連 片手を突っ込んでいるプロジェクトでAndroidプラットフォーム上のソフトウェア開発をするので、2015年に ...

torutkの日記 - April 30, 2015 12:00 AM
[Gradle][Java]Gradleでビルドする際に使用するライブラリをローカルに置く際の問題

Android Studioで、外部のライブラリを使用するアプリケーションのプロジェクトを作成しようとしています。Android StuidoはビルドにデフォルトでGradleを使っており、外部のライブラリを使う場合はその設定をGradleの設定ファイルに記述します。 外部のライブラリの参照は、デフォルトではインターネット上のmavenリポジトリ(BintrayのJCenter Mavenリポジトリ)を使用します。また、定義を追加すれば他のmavenリポジトリやIvyリポジトリも使用できます。 And ...

torutkの日記 - April 12, 2015 12:00 AM
[Java][JavaFX]JJUG CCC 2015 Springに参加して(#jjug_ccc)

昨日4月11日(土)は、日本Javaユーザーグループ(JJUG: Japan Java User Group)が主催するカンファレンスが開催されました。年2回、春と秋に開催されています。 http://www.java-users.jp/?page_id=1647 今回は29セッションあります。僕もJavaFXのセッションでお話してきました。 午前はセッション準備で午後から参加・・・ 3月半ばから準備に着手はしていたのですが(言い訳モード)、発表資料作成が終わったのが当日0時半でした。いったん就寝し ...

しんさんの出張所 はてな編 - April 12, 2015 12:00 AM
[NetBeans][Java][ソフトウェア技術]JavaEE 8/MVC 1.0 RI Ozark + Handlebarsを試す

久々にだれでも気軽に使えそうなJavaEEのパーツが出てきたようなので、自分で動かしてみる。

まずJAX-RSを動かす

とりあえずMVC1.0のセットアップなどは以下を参照。

http://masatoshitada.hatenadiary.jp/entry/2015/03/31/220509


まずはベースとなるJAX-RS部分がちゃんと動くか動作確認する。

package com.shingames.mvc1.ozarchbs;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("hellojaxrs")
public class HelloJaxrs {
    
    //通常のJAX-RS
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String jaxrs(){
        return "hello JAX-RS";
    }
}

これくらいが動けばよい。


Handlebarsを動かす

JSPもFreeMakerもVelocityもよくあるテンプレートでやっても面白くないのでHandlebarsを使う。

エクステンションがすでに用意されているので以下のように依存性部分に追加する。

https://shinsan.s3.amazonaws.com/diary/2015/0412-01.png

NetBeansだとプロジェクトツリーで依存性を右クリック、依存性を追加でこのダイアログを出せる。


リソースクラスを以下のように記述する。

package com.shingames.mvc1.ozarchbs;

import com.oracle.ozark.core.Models;
import com.oracle.ozark.ext.handlebars.HandlebarsViewEngine;
import javax.mvc.Controller;
import javax.mvc.Viewable;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("hellomvc")
public class HelloMvc {
    
    
    //MVC1.0 Controllerのアノテーションがあるだけ
    @Controller
    @GET
    public Viewable mvc(){
        Models models = new Models();
        models.put("message", "<b>MVC 1.0</b>");
        models.put("loop", new String[]{"1","2","3","4"});
        return new Viewable("hello.html", models, HandlebarsViewEngine.class);
    }
}

大体何を書いているかわかると思うが、ここで利用しているModelsはjavax.mvcパッケージのModelsではなくてozarkなのに注意する。javax.mvcのModelsはMAPインターフェースのみで実装がないため。またCDIのリクエストスコープが付いていて少しややこしいが、今回は無視で。

Viewableの引数が多いが、これはテンプレートエンジンを強制でHandlebarsを利用したいため。デフォルトでは拡張子をもとに判定するのと、拡張子をかえるとツールのサポートが失われるため変更したくないのでこうしてある。

テンプレートが固定の場合@Viewでテンプレート名を設定できるのだが、これはエンジン指定はできないため使えない。

この辺の柔軟性は正式版までには改善するだろうか。


テンプレートはWEB-INF直下にviewsディレクトリを作成してそこに突っ込む。

<!DOCTYPE html>

<html>
    <head>
        <title>MVC 1.0</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <div>Hello {{message}}!</div>
        <div>Hello {{{message}}}!</div>
        {{#loop}}
            <div>{{this}}</div>
        {{/loop}}
    </body>
</html>

JAX-RSはNetBeans上では右クリックでブラウザ起動できるのでGETだけならこれで手軽に試せる。

https://shinsan.s3.amazonaws.com/diary/2015/0412-02.png

実行結果

https://shinsan.s3.amazonaws.com/diary/2015/0412-03.png

想定通り。


ModelsがCDIであることを確認する

リソースクラス。

package com.shingames.mvc1.ozarchbs;

import com.oracle.ozark.ext.handlebars.HandlebarsViewEngine;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.mvc.Controller;
import javax.mvc.Viewable;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("hellologic")
@RequestScoped
public class HelloLogic {
    @Inject
    Logic logic;
    
    @Controller
    @GET
    public Viewable logic(){
        logic.run();
        return new Viewable("hello.html",  HandlebarsViewEngine.class);
    }
}

ロジック

package com.shingames.mvc1.ozarchbs;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

@RequestScoped
public class Logic {
    @Inject
    com.oracle.ozark.core.Models models;
    
    public void run(){
        
        models.put("message", "<b>MVC 1.0</b>");
        models.put("loop", new String[]{"A","B","C","D"});
    }
}

実行結果

https://shinsan.s3.amazonaws.com/diary/2015/0412-04.png

リソースクラスからはテンプレートに渡すModelsすら消えた。

Viewableの引数からも消えている。

このようにJAX-RS側は単純にパラメータやURLなどのマッピングやロジックの呼び出しのみ記述するというやり方もいいだろう。CDI経由で必要なリクエスト情報などが取得できる。

今回はわかりやすくなるように書いたがModelsが実装依存なのかそうでないのかパッケージは意識すること。

現状

まだアーリードラフトレビュー用ということで、たたき台程度のものでしかない。

そもそもJerseyMVC使っている人にとって新しさはどこにもないため面白くもない。ただ、標準化されることでやっとStruts1を捨てる圧力が強くなるといったところか。

MVCといいつつもJAX-RSにおけるVのみのプラグイン的なもの、それも自前でBodyWriter等かけばできる程度のものであるため本当に面白くはない。

テンプレートといえばスタンドアロンで動かしやすそうだが、CDIとサーブレットAPIに依存した実装のため、このままではスタンドアロンでは動かせない。

とはいえ、開発者はサーブレットAPIはさわらないし、ロジックは切り離ししやすいし単体テストはしやすいとは思う。


個人的にはCDI依存、サーブレットAPI依存部分をなくしてもらうのは大前提として、さらにできればどのJAX-RS実装の上でも動くようにしてもらいたいところではある。

torutkの日記 - March 13, 2015 12:00 AM
[JavaFX][NetBeans]JavaFX Scene Builderのバイナリ入手先

Java SE 8u40以後、OracleからはScene Builderのバイナリ(実行体)提供がなくなりました。その直後、Gluonという会社がScene Builderのバイナリと各OS向けインストーラを提供開始しています。 http://gluonhq.com/products/downloads/ さっそくScene Builder 8.0.0のWindowsインストーラを入手してインストールしてみました。インストール場所とディレクトリツリーは次のようになっていました。 C:\ + ...

torutkの日記 - March 08, 2015 12:00 AM
[NetBeans][JavaFX]NetBeans 8.0のソースを追う(Scene Builderの設定)

Scene Builderを自前でビルドしたものをNetBeansの[ツール]メニュー > [オプション] > [Java] > [JavaFX]タブで、Scene Builderホームに設定してみたところエラー(「選択した場所 C:¥Program Files¥JavaFX Scene Builder には有効なJavaFX Scene Builderインストールが表示されていません。」)となってしまいました。 32bitビルドしてみたり、exe名をあわせてみたりと試行錯誤してみた ...

torutkの日記 - March 01, 2015 12:00 AM
[Android]Android開発書籍収集

昨年末から今年に入って、Android端末のソフトウェア開発の技術情報を収集するために書籍をいろいろ探してそろえました。システムの専用端末なので、携帯電話・スマートフォン用のアプリケーションではなく、タブレット上へ専用アプリケーションを入れるという形態です。ターゲットのAndroidバージョンはまだ確定していませんが、この時期ですので4.4から5.0を想定してなるべく新しい本を探しました。 書籍の前にまず、Android開発者向け公式ドキュメントを読むべきなのかもしれませんが。 Androidプラ ...

torutkの日記 - December 31, 2014 12:00 AM
[Java][読書会]「APIデザインの極意」を読む会第3回を終えて

12月27日(土)に、Java読書会BOF主催の「APIデザインの極意」を読む会(第3回)を実施しました。1998年12月にJava読書会BOFの源泉であるJava互助会主催で始まった読書会も今回で通算189回、書籍としては28冊目、17年目に突入しました。参加人数も毎回コンスタントに10人を越えています。来年も毎月一回のペースで開催していく予定です。 現時点での開催予定 2015年1月17日(土)10:00-17:00 川崎市教育文化会館 第3会議室 2015年2月14日(土)10:00-17 ...

torutkの日記 - December 03, 2014 12:00 AM
[JavaFX]Scene Builder 2.0.1をビルドする

この日記は、JavaFX Advent Calendar 2014 - Adventarの3日目です。 昨日はalchemicalogicさんのJavaFXでMMDモデルを表示することにチャレンジした – XiPHiA's noteで、 明日はmike_neckさんのJavaFXで画面を作るときにFXMLを小さく作る #javafx #javafx_ja - mike-neckのブログです。 はじめに 本日のネタは、JavaFX Scene Builder 2.0.1をビルドす ...

しんさんの出張所 はてな編 - December 01, 2014 12:00 AM
[Java][ソフトウェア技術][NetBeans]Spring と JAX-RSを組み合わせる

キクタローさんから「Javaエンジニア養成読本」という本をいただきました。ありがとうございます。

というわけで、JavaEEがらみ、キクタローさんのエントリに乗っかる形の記事を書いてみました。


実はJavaEE方面のエントリを書くのは今年初めて、去年の夏以来だったりします。かなり間が空きましたね。時間がほしいです。誰か仕事手伝ってください。バイトとかいないかねー。


この間にリリースされたものにSpringFramework 4があります。もうすぐでてから1年で、そろそろ使っても問題ないころ合いだと思います。

また、政治面の問題でSpringを使わなければならないというところもかなり多いと思います。JavaEEの技術を使ってみたいと思ってもフルの機能に乗っかるわけにはいかない状況もあるでしょう。

しかし、JavaEEを構成する要素の中でも、もっとも人気の高いJAX-RSならば組み合わせて利用するのも問題は少ないでしょう。最初のバージョン1.0からかなり実用的でした。そしてSpringは本来のDIコンテナのみに集中してもらうのです。これならば社内のライブラリなどSpringベースの資産も問題なく組み込むことができます。


現在のサーバーサイドJavaではずばりベストの組み合わせは

Spring + JAX-RS

だと思います。政治方面、技術方面とあわせてのバランスが一番取れていて説得しやすい形だと思います。アプリケーションサーバーに左右されませんし、設定によっては軽い開発、スタンドアロンのテストなども可能です。


今回はせっかくなのでSpringBootを使います。JAX-RSの実装はRIのJerseyです。JerseyのスタンドアロンサーバーにSpringを組み込むという方法もあると思いますが、今回はこちらで。どちらにしろ、実際の運用はアプリケーションサーバー上になるでしょうから、開発しやすいものを探すとよいでしょう。


SpringBootのセットアップ

こちらを参照してください。

http://kikutaro777.hatenablog.com/entry/2014/11/20/010828

起動できたら終わり。キクタローさんありがとう(*´▽`*)ノ゛


Jerseyを組み込む

プロジェクトツリーから「依存性」を右クリック、「依存性を追加」を選択します。

以下のダイアログが表示されますので、jersey-spring-3のver2.13を探し、追加します。

http://shinsan.s3.amazonaws.com/diary/2014/1201-01.png


プログラムの構造

いよいよコードを書きます。

今回のプログラムは足し算です。http://localhost:8080/rest/add/12/34とうちこんだら、12+34という計算をするといったものになります。とりあえずレスポンスはtext/plainで。


先に構造書いた方がわかりやすいのでのせますが、すべてのソース構成は以下のようになります。

http://shinsan.s3.amazonaws.com/diary/2014/1201-02.png

上から順に解説します。


logicパッケージ

実際の足し算をするクラスが一つだけあります。足し算くらいならこんな分け方は必要ないのですが、実際はここがデータベースアクセスなどが来るものと思ってください。


restパッケージ

URLへのマッピング、リソース部分です。ここがJAX-RSの領域です。


JerseyConfigクラス

JAX-RSの実装であるJerseyの環境設定部分です。packagesはサブパッケージも検索します。


Mainクラス

SpringBootの設定、起動部分です。コンポーネントスキャンのパスを設定しています。Jerseyサーブレットをrestというパスにマッピングしています。CalcRest#addのパスと併せて「http://localhost:8080/rest/add/a/b」となるわけですね。


見てわかるとおり、全部Javaコードで、設定ファイルはありません。



ソース

CalcLogic.java
package com.mycompany.springboottest.logic;

import org.springframework.stereotype.Component;

@Component
public class CalcLogic {
    public int add(int a, int b){
        return a + b;
    }
}
CalcRest.java
package com.mycompany.springboottest.rest;

import com.mycompany.springboottest.logic.CalcLogic;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public class CalcRest {
    @Inject
    CalcLogic calcLogic;
    
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("add/{a}/{b}")
    public int add(
            @PathParam("a") int a,
            @PathParam("b") int b){
        
        return calcLogic.add(a, b);
    }
}
JerseyConfig.java
package com.mycompany.springboottest;

import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JerseyConfig extends ResourceConfig{

    public JerseyConfig() {
        register(RequestContextFilter.class);
        register(LoggingFilter.class);
        packages("com.mycompany.springboottest.rest");//リソースクラスの保存先
    }
}
Main.java
package com.mycompany.springboottest;

import org.glassfish.jersey.servlet.ServletContainer;
import org.glassfish.jersey.servlet.ServletProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan(basePackages = {
    "com.mycompany.springboottest.logic"}
)
public class Main {

    @Bean
    public ServletRegistrationBean jerseyServlet() {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                new ServletContainer(),
                "/rest/*"); 
        
        registration.addInitParameter(
                ServletProperties.JAXRS_APPLICATION_CLASS,
                JerseyConfig.class.getName());
        
        return registration;
    }

    
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

JAX-RSのリソースクラスにはコンポーネントスキャン設定をしなくても見てくれているようなので、省いています。


実行

ブラウザを開き、アドレスバーに http://localhost:8080/rest/add/12/34 を入力します。

http://shinsan.s3.amazonaws.com/diary/2014/1201-03.png


実際にSpringBootで開発する場合ですが、差分デプロイの仕方がわからなかったため毎回起動しているとさすがに遅いです。5,6秒もかかってしまいます。これだとTomcatに普通にデプロイするほうがサクサク開発できそうという感じでした。

というわけで、SpringとJAX-RSの組み合わせのお話でした。さくさく楽々開発しましょう。

きしだのはてな - November 23, 2014 05:22 PM
[今週のニュース]JJUG CCCとか解散とか

一週間、ツイートしたURLをまとめる試み


技術

「FlashAirは、通信方式に無線LAN、プロトコルスタックはHTTPで、ドライバーとプロトコル処理は内蔵マイコン」

Wifi付SDを通信モジュールにする話。おもろい

タブレットで動かすクレーンゲーム、意外と簡単に作れます


「ストレージ・メモリー階層の概念が根本的に変わる」

データセンターでの独自性追求が、FPGAや新型不揮発性メモリーなどの台頭を誘発 - Social Device - 日経テクノロジーオンライン


「無農薬・低生菌の野菜を栽培する」

これでもなんだかんだ面白い理由で自然派の人が批判するんだろうなw

そこはまるで半導体工場でした - 設計・生産 - 日経テクノロジーオンライン


「1社をグローバル規模のデフォルト検索プロバイダーとするのではなく、国・地域で最適な検索サービスプロバイダーの採用を進める戦略に転換する」

Mozilla、04年から続いたGoogleとの検索提携を終了、米でYahooと5年契約


「訳書が出続けると, 英語を読まない人が減らない」という指摘」

訳書がなくても英語よむ人は増えないと思う。暖房があるから寒さに弱くなるみたいな精神論だろうな。リソースあるなら翻訳あったほうがいい

翻訳のススメ ? Elliptium


「全国銀行協会が2018年の稼働を目指している新たな決済システム」

日銀「世界の波に乗り遅れる」 銀行振り込み24時間化:朝日新聞デジタル


「パッケージ版は確定申告の経験がある人向け、クラウド版はまったくの初心者向け。現時点では非常に対照的なソフトとなっている」

こういう明確な方針分けはいいな。

弥生のクラウド会計は誰にオススメ? 既存品との連携は? - 岡本社長に聞く


「Gmailデザインチームのトップは、「あなた方は典型的ユーザーではない」と題するプレゼンを行った。」

基本的に開発者は典型的なユーザーから離れていくよね

GoogleがGmailとInboxを分けた理由 - TechCrunch


Java

「とりあえず「マキ」の本から再始動でw」

NetBeansでやってみた「はじめてのSpring Boot」 - Challenge Java EE !


「今回は469人と、前回よりも100人以上参加者が増えるという大盛況ぶり」

おつかれさまでしたー

JJUG CCC 2014 Fallをやってきた - 水まんじゅう


「OracleとJava標準の話題が中心で、いまいち現実感が乏しいJava One報告会」

JJUG CCC Fall 2014に行ってきました - zyake_mk2の日記


社会

高倉健さんが亡くなった


サンフランシスコか。11階からって、車がなかったら即死なんでは

ビル屋上から清掃員が転落、走行中の車に落ち重傷 米:朝日新聞デジタル


「サーバー」のイントネーション、気になる

1500人分のIDやパスワード 悪用か NHKニュース


「両社の担当者が9月頃、同時期に退職しており、その引き継ぎの過程において、必要な情報が伝達されなかったか、または誤った情報が伝達された可能性がある」

サウンドハウス、「楽天市場」怒りの撤退--「担当者退職」による伝達ミスが原因か


まじかー。というか、萩焼の土の上にバイクで模様つけたりしてたのは先代か。

萩焼作家の坂高麗左衛門さん死去 坂窯初の女性当主:朝日新聞デジタル

しかし、Wikipedia上で2回死んでる実在人物はめったにないだろう。

坂高麗左衛門 - Wikipedia


「40歳代に比べて身長が2センチ以上縮んだ高齢の女性」「気付かないうちに背骨が折れていることもある」

そんなんあるんか

身長2センチ縮むと……介護リスク、女性は2倍に:朝日新聞デジタル


「確定判決の根拠となる証言をした女性と目撃者が説明を一転。男性が事件に関与していないことを示す客観的証拠も見つかった」

目撃者がなんかグルやったってこと?

強姦事件の刑執行停止、男性釈放 「無罪の可能性高い」:朝日新聞デジタル


「富士山はさびしいぞ」

富士山のように絵になると言われての応え。健さんかっこええ

高倉健さんの「黄色いハンカチ」秘話 武田鉄矢さん語る:朝日新聞デジタル


「探索アプリなどを使って探すケースは20%」

スマホ紛失、トップは沖縄 なくしやすい人の特徴は? - ITmedia エンタープライズ


「オスカーは「ただの『皮膚病』だった可能性がある」」

衝撃スクープ!フォークで刺されたはずの盲導犬オスカー「実は刺されてなんか、いなかった」日本中が激怒した事件に意外な新証言が……  | 現代ビジネス 講談社


この記事、ネトウヨとかどうでもよくて、さらっとネットの人の住所特定する話がしてあって怖い

ネットでヘイトスピーチを垂れ流し続ける 中年ネトウヨ「ヨーゲン」(57歳)の哀しすぎる正体【後編】 | 現代ビジネス 講談社


「床から約95センチの高さの窓が開いており、その近くに台が置いてあった。」

4歳、マンションから転落して死亡 窓の近くに台:朝日新聞デジタル


政治

衆議院解散。あと小4サイト構築事件。


まだ話題にならないうちから記事にできるのも、「取材力」のたまものか

「どうして解散するんですか?」Twitter上で政府・メディア関係者ほか100万人に届けられた疑問の声(追記あり) | 現代ビジネス 講談社


なんか、各党「なんたら解散だ!(なんたらには安倍政権を揶揄する言葉が入る)」みたいな話してる中、小沢さんだけこれからどうするかって話してるように見える。

「誠実に愚直に国民に話していく」 生活・小沢代表:朝日新聞デジタル


「それぞれの政治生命を永らえることを考えてもらう。好きにしていい」

哀愁ある

小沢一郎氏「好きにしていい」 生活議員の離党を容認:朝日新聞デジタル


解散か。

政府 衆議院解散を閣議決定 NHKニュース


解党か。

みんなの党、解党決定 渡辺前代表「抹殺事件だ」と批判:朝日新聞デジタル


ネタ系

フリー素材の破壊力がすごかった。


万歳はここでやってくださいw

【衆議院解散!!】万歳のフライング発生 平成26年11月21日 - YouTube


カルミナブラーナって、結構出落ち感が強いんだけど、最後にもう一回もってくるのがずるいな。

カルミナ・ブラーナ - YouTube


記事はおもしろそうなんだけど、右上のフリー素材が気になって集中して読めない! 「Lambda にクラウドの夢を見る | Developers.IO」

Lambda にクラウドの夢を見る | Developers.IO


これは、この少年の写真をとってる人が黒幕やな。

ナショナル・ジオ・グラフィックもびっくり!世界を制した写真家は何と9歳の少年 | エンタメウス


「「せっかくならばとドリンクサーバーの機能を追加することにしたんです」(オリエント工業・広報)」

ちょっとwww(閲覧時背後注意)

男子究極の夢実現!「巨乳から酒が出る」美人給仕登場 | 日刊大衆-WEB版-


きしだとは、4点明らかに異なります。

×大学を卒業(卒業できてない)

×ある事情で会社をやめた(就職経験なし)

×仕事はとても早い

×納期もきちんと守る

「9時までに遅刻せず会社に来る」ということは、本当に重要な事なのだろうか


「流星よりは、はるかに遅いです」「目で確認してから、よけることも可能です」「注意!人工衛星は音より速く飛んでくるので音は聞こえません」

気をつけよう。

落下する人工衛星のよけかた - Yahoo!知恵袋


「うちは,警察としかつながっていない専用電話(警電)があって,一般電話では答えていませんでした」

そんなものがあったりするのか

警察からの問い合わせ電話にこたえるにあたって - davsの日記


「「やりたいこと」を言って、それが叶うことは殆どなかった、ということと、「とりあえず何の仕事でも、一生懸命やれば楽しかった」ということです」

中途採用面接で、志望動機を聞かれて「もっと給料が欲しかったからです」と回答した人がいた


すげー、動画で配信するんか。未来や。oculus捗りそうだ (職場閲覧注意:おっぱいでます)

DMMバーチャルリアリティ - 360°で見たい角度が見れる次世代のアダルト動画体験! - DMM R18


「タミヤF-117開発途中でも正確すぎて問題になったとかいう話があったがホントかね」「イタリアだったかのメーカーが架空機のプラモを発売したらF-117と似た部分があったので問題になった、という話の誤伝」

どこまで本当?タミヤ模型伝説


中国でお金持ちが息子を、自分たちの裕福さを実感させるために田舎に送ったって話、このあたりからの着想なんだろうな

「変形計ーエクスチェンジー」 中国の田舎の子供と都会の子供を一週間入れ替えるドキュメント番組 -Togetterまとめ

torutkの日記 - October 26, 2014 12:00 AM
[Java][読書会]「APIデザインの極意」を読む会(第1回)を実施しました

Java読書会BOF主催の「APIデザインの極意 Java/NetBeansアーキテクト探求ノート」を読む会(第1回)を10/25(土)に実施しました。今回は第1回なので表紙、著者・訳者紹介、前書きから朗読していきました。そのため、原題”Practical API Design: Confessions of a Java Framework Architect”の意味(confessionって何? 教会での懺悔の意味もあるみたいだよ、といった議論)や、邦題ではどうしてNetBeansや探求ノートが入 ...

torutkの日記 - October 21, 2014 12:00 AM
[Java]JavaOne 2014 SFのまとめ、JavaFX活用事例編

JavaOne 2014 SFに参加して、JavaFX関連についてまとめてみます。 JavaOne 2014 SFの参加者(登録者)は9000人を越えたそうです。セッション数も500を越えています。JavaFXに関するセッションは、題名の単純検索で50個強ありました。 スライドや動画が順次公開されていますので、聴講したセッションもしなかったセッションも含めてテーマ・分野でまとめていきます。 企業でのJavaFX活用事例 今年は、JavaFXを活用した事例のセッションが増えていました。 企業レベルでの ...

torutkの日記 - October 19, 2014 12:00 AM
[Java][読書会]「APIデザインの極意」を読む会が始まります

Java読書会BOFでは、11月25日(土)から新しい課題図書「APIデザインの極意」の読書会を開始します。 APIデザインの極意 Java/NetBeansアーキテクト探究ノートJaroslav Tulach 参加申し込みはJava読書会BOFページ(次のURL)から行います。 http://www.javareading.com/bof/ 「APIデザインの極意」に関する技術情報源 この本の著者 Jaroslav Tulach氏によるJavaOne 2014サンフランシスコのセッション”API ...

しんさんの出張所 はてな編 - October 09, 2014 12:00 AM
[Java][ソフトウェア技術][NetBeans]libGDXの基礎6 HTML出力を行う

今回はわかりやすくするためにNetBeansを利用した画面を多く載せています。

今まで以上にスクリーンショットが多く入っていて、一番力が入っているのがわかりますね。

http://qiita.com/shinsan68k/items/4dd74f17cab66b05e73d

libGDXではWindows/mac/Linux/Android/iOS/HTML出力ができる、といいつつWeb版だけは紹介してきませんでした。

せっかくなので、今回紹介してみました。まずはテトリスのようなミニゲームあたりをこれらのプラットフォームすべてに移植してみながら感覚をつかむとよいでしょう。ゲーム部分は100%同一コードでこれらのプラットフォームに出力できます。

きしだのはてな - October 01, 2014 09:53 PM
[javaone][javaone2014] JavaOne 2014 サンフランシスコ3日目

Java SE/ME系のセッションはHiltonです。セッションによって、HiltonとParc55を行ったり来たりするわけです。どちらの建物も、立体迷路になってて、すげー迷います。

Hiltonの駐車場の料金所はケーブルカーの形しててかわいい。

f:id:nowokay:20141001025616j:image


今日は結構さぼってしまったので、この5セッション

  • CON3162:Coding for the Future:The IDE (R)evolution for the Next Generation
  • CON3979:Going Native:Bringing FFI to the JVM
  • CON3353:The Future of MVC in JAX-RS
  • CON8320:Ask the JDK Architects, Part 1
  • BOF2990:Meet the JVM Team

CON3162:Coding for the Future:The IDE (R)evolution for the Next Generation

IDEはどうなるの?って話。ふんわりとしたNetBeansロードマップの話です。

f:id:nowokay:20141001034412j:image


2000年前後にNetBeans、Eclipse、IntelliJが出てきたよねって話とか、

ちなみに、IntelliJ IDEAはIDEAと略さないといけないはずなのだけど、プレゼンにはIntelliJって書いてて仙台方面から怒られそう。

NetBeansを使う人で、Javaを使うのは75%らしい。思いのほか少ない。PHPは35%

f:id:nowokay:20141001030849j:image


で、Web IDEの話になって、まあパフォーマンスも悪いし機能も少ないしオフラインモードの問題もあるし、一方で得られるものは何かって考えると、あまりいいアイデアじゃないと。

f:id:nowokay:20141001031530j:image


けど、たとえばGoogle App Engineみたいにローカルでエミュレートできないものもあるし、CIやらGitやらネット越しのサービスとかあるし、クラスのインデックス作りとかはまとめてやっちゃいたい。

IDEの設定や開発環境の整備もめんどくさい。で、クラウド上に置いたりするのが考えられる。

んで、NetBeansどうするかというと、とりあえずUIとロジックを分離して、サービスとして切り離せるようにしましょう、と。で、これをNetBeansをフォークせずにやりたいと。

f:id:nowokay:20141001034657j:image


これをOracle Developer Cloud Serviceでやるけど、ゆっくりやるよ、という話でした。

ランチ

JavaOneでは、評判のランチがあります。

f:id:nowokay:20141001040114j:image


ジュースもあります。

f:id:nowokay:20141001040225j:image


お茶とかコーヒーも。

f:id:nowokay:20141001040425j:image


味はともかく、でかいです。

f:id:nowokay:20141001041033j:image


ぜひ一度JavaOneに参加して、どういう評判なのか体験するといいと思います。


CON3979:Going Native:Bringing FFI to the JVM

「JNI知ってる人?」はーい

「それを愛してる人?」笑い

という質問からはじまった、JavaにJNIよりも便利なネイティブアクセスを導入しましょうという話。

JRubyのCharles Nutterさんです。

f:id:nowokay:20141001045754j:image

プロジェクタ前で写真をとってるのはさくらばさんです。なので、このセッションの資料を撮った写真のほぼすべてにさくらばさんの頭がいい感じに写りこんでますw


で、まあJNIより抽象度の高い、JNR(Java Native Runtime)を導入しましょう、という話です。

f:id:nowokay:20141001043832j:image


JNAというのがすでにあって、あれは便利なのですが、遅い。

JNRはJNAより10倍速い、と。

f:id:nowokay:20141001045432j:image


で、Project Panamaとして開発してて、JDK9に入れたいということなんですけど、そのためにはJSRにして取り入れてもらわないといけない。

なので、要望とか、うまくいったことや失敗したことを教えてほしい、んで隣の人に教えましょう、と。

f:id:nowokay:20141001050106j:image


あとは質疑応答が結構ありました。聞き間違えてるかも。

「メモリはコピーされるの?」

→「される」

「C++ Libraryは?」

→「テンプレートとかあるから難しいよね(客席にいたJohn Roseから)」

「ネイティブとJavaのメモリライフサイクルは?」

→「違うね。Java 9で一緒になるとうれしいね。」

「メモリのレイアウトとかは?」

→「そのうちやりたい。まずはJNRから」

「Panamaはいつ?」

→「JDK9に入れたい」


ゲームとか

Java EE関連のセッションの会場になってるParc55には、ゲームコーナーがあります。

f:id:nowokay:20141001053153j:image


あとビールも。

f:id:nowokay:20141001061216j:image


CON3353:The Future of MVC in JAX-RS

MVCの話とか。写真とってるのは寺田さん。

f:id:nowokay:20141001062236j:image


MVC仕様の話。これがラフなサンプル

f:id:nowokay:20141001065142j:image


で、JAX-RS実装であるJerseyのMVC機能の話。

f:id:nowokay:20141001070248j:image


なんかこうやって比べてたってことは、似たような仕様を立ち上げてどうするんだって話なのかなー。


CON8320:Ask the JDK Architects, Part 1

JDKのえらい人への質問コーナーです。

f:id:nowokay:20141001080350j:image


ブライアンはリラックスしてますね

f:id:nowokay:20141001080433j:image


Array2.0の話とか、PanamaとかSpecializationとか、シリアライズして透過的にオブジェクト扱うのはファンタジーだとか、immutableなコレクションだとか、いろいろ話してたのですけど、何の話題かわかるものの何をいってるかわからず・・・

英語力2.0が必要です。


そんなんなので、Part 2もとっていたのですが、そのまま帰りました。


ビール

まさたかさんがサンフランシスコにいたので、一緒にビール。

f:id:nowokay:20141001111737j:image


スポーツバーの窓際の席だったのだけど、なんかホームレスの人が窓から野球をみてて、すげーこっちみてるし写真とると背後霊みたいになるし、ウケました。


BOF2990:Meet the JVM Team

で、BOFに戻ります。

JVMチームへの質問コーナー。12〜3人くらいで、前のほうにかたまってました。

f:id:nowokay:20141001132545j:image


もう、マイクも使わないし、ほとんど客席同士で話してるし、まったく何を話してるかわからず。

たぶん、そこまで高度な内容は話してないと思うのだけど、英語わからんのでまるでだめ、ってなってますね。

英語力3.0が必要です。


悲報:JavaOneバッグもらえず

ところで、JavaOne参加者はJavaOneバッグもらえます。

なのだけど、今年はブロガーパスで参加させてもらってて、これはOracle Open Worldまで参加できるんだけど、このパスでバッグをもらいに行くと、JavaOneバッグではなくOOWバッグを渡されるのです。

交換できない?って聞いたんだけど、「ごめんなさいね、できないのよ、決まりだから」みたいなことを流暢なアメリカ弁で返されました。


ということで、奥が去年のJavaOneバッグ、手前が今年のOOWバッグ、左がブロガーパスです。

f:id:nowokay:20141002020004j:image

まあ、でも毎年改良されてて、なんかすげー使いやすくなってます。

きしだのはてな - October 01, 2014 09:53 PM
[javaone][javaone2014] JavaOne 2014 サンフランシスコ3日目

Java SE/ME系のセッションはHiltonです。セッションによって、HiltonとParc55を行ったり来たりするわけです。どちらの建物も、立体迷路になってて、すげー迷います。

Hiltonの駐車場の料金所はケーブルカーの形しててかわいい。

f:id:nowokay:20141001025616j:image


今日は結構さぼってしまったので、この5セッション

  • CON3162:Coding for the Future:The IDE (R)evolution for the Next Generation
  • CON3979:Going Native:Bringing FFI to the JVM
  • CON3353:The Future of MVC in JAX-RS
  • CON8320:Ask the JDK Architects, Part 1
  • BOF2990:Meet the JVM Team

CON3162:Coding for the Future:The IDE (R)evolution for the Next Generation

IDEはどうなるの?って話。ふんわりとしたNetBeansロードマップの話です。

f:id:nowokay:20141001034412j:image


2000年前後にNetBeans、Eclipse、IntelliJが出てきたよねって話とか、

ちなみに、IntelliJ IDEAはIDEAと略さないといけないはずなのだけど、プレゼンにはIntelliJって書いてて仙台方面から怒られそう。

NetBeansを使う人で、Javaを使うのは75%らしい。思いのほか少ない。PHPは35%

f:id:nowokay:20141001030849j:image


で、Web IDEの話になって、まあパフォーマンスも悪いし機能も少ないしオフラインモードの問題もあるし、一方で得られるものは何かって考えると、あまりいいアイデアじゃないと。

f:id:nowokay:20141001031530j:image


けど、たとえばGoogle App Engineみたいにローカルでエミュレートできないものもあるし、CIやらGitやらネット越しのサービスとかあるし、クラスのインデックス作りとかはまとめてやっちゃいたい。

IDEの設定や開発環境の整備もめんどくさい。で、クラウド上に置いたりするのが考えられる。

んで、NetBeansどうするかというと、とりあえずUIとロジックを分離して、サービスとして切り離せるようにしましょう、と。で、これをNetBeansをフォークせずにやりたいと。

f:id:nowokay:20141001034657j:image


これをOracle Developer Cloud Serviceでやるけど、ゆっくりやるよ、という話でした。

ランチ

JavaOneでは、評判のランチがあります。

f:id:nowokay:20141001040114j:image


ジュースもあります。

f:id:nowokay:20141001040225j:image


お茶とかコーヒーも。

f:id:nowokay:20141001040425j:image


味はともかく、でかいです。

f:id:nowokay:20141001041033j:image


ぜひ一度JavaOneに参加して、どういう評判なのか体験するといいと思います。


CON3979:Going Native:Bringing FFI to the JVM

「JNI知ってる人?」はーい

「それを愛してる人?」笑い

という質問からはじまった、JavaにJNIよりも便利なネイティブアクセスを導入しましょうという話。

JRubyのCharles Nutterさんです。

f:id:nowokay:20141001045754j:image

プロジェクタ前で写真をとってるのはさくらばさんです。なので、このセッションの資料を撮った写真のほぼすべてにさくらばさんの頭がいい感じに写りこんでますw


で、まあJNIより抽象度の高い、JNR(Java Native Runtime)を導入しましょう、という話です。

f:id:nowokay:20141001043832j:image


JNAというのがすでにあって、あれは便利なのですが、遅い。

JNRはJNAより10倍速い、と。

f:id:nowokay:20141001045432j:image


で、Project Panamaとして開発してて、JDK9に入れたいということなんですけど、そのためにはJSRにして取り入れてもらわないといけない。

なので、要望とか、うまくいったことや失敗したことを教えてほしい、んで隣の人に教えましょう、と。

f:id:nowokay:20141001050106j:image


あとは質疑応答が結構ありました。聞き間違えてるかも。

「メモリはコピーされるの?」

→「される」

「C++ Libraryは?」

→「テンプレートとかあるから難しいよね(客席にいたJohn Roseから)」

「ネイティブとJavaのメモリライフサイクルは?」

→「違うね。Java 9で一緒になるとうれしいね。」

「メモリのレイアウトとかは?」

→「そのうちやりたい。まずはJNRから」

「Panamaはいつ?」

→「JDK9に入れたい」


ゲームとか

Java EE関連のセッションの会場になってるParc55には、ゲームコーナーがあります。

f:id:nowokay:20141001053153j:image


あとビールも。

f:id:nowokay:20141001061216j:image


CON3353:The Future of MVC in JAX-RS

MVCの話とか。写真とってるのは寺田さん。

f:id:nowokay:20141001062236j:image


MVC仕様の話。これがラフなサンプル

f:id:nowokay:20141001065142j:image


で、JAX-RS実装であるJerseyのMVC機能の話。

f:id:nowokay:20141001070248j:image


なんかこうやって比べてたってことは、似たような仕様を立ち上げてどうするんだって話なのかなー。


CON8320:Ask the JDK Architects, Part 1

JDKのえらい人への質問コーナーです。

f:id:nowokay:20141001080350j:image


ブライアンはリラックスしてますね

f:id:nowokay:20141001080433j:image


Array2.0の話とか、PanamaとかSpecializationとか、シリアライズして透過的にオブジェクト扱うのはファンタジーだとか、immutableなコレクションだとか、いろいろ話してたのですけど、何の話題かわかるものの何をいってるかわからず・・・

英語力2.0が必要です。


そんなんなので、Part 2もとっていたのですが、そのまま帰りました。


ビール

まさたかさんがサンフランシスコにいたので、一緒にビール。

f:id:nowokay:20141001111737j:image


スポーツバーの窓際の席だったのだけど、なんかホームレスの人が窓から野球をみてて、すげーこっちみてるし写真とると背後霊みたいになるし、ウケました。


BOF2990:Meet the JVM Team

で、BOFに戻ります。

JVMチームへの質問コーナー。12〜3人くらいで、前のほうにかたまってました。

f:id:nowokay:20141001132545j:image


もう、マイクも使わないし、ほとんど客席同士で話してるし、まったく何を話してるかわからず。

たぶん、そこまで高度な内容は話してないと思うのだけど、英語わからんのでまるでだめ、ってなってますね。

英語力3.0が必要です。


悲報:JavaOneバッグもらえず

ところで、JavaOne参加者はJavaOneバッグもらえます。

なのだけど、今年はブロガーパスで参加させてもらってて、これはOracle Open Worldまで参加できるんだけど、このパスでバッグをもらいに行くと、JavaOneバッグではなくOOWバッグを渡されるのです。

交換できない?って聞いたんだけど、「ごめんなさいね、できないのよ、決まりだから」みたいなことを流暢なアメリカ弁で返されました。


ということで、奥が去年のJavaOneバッグ、手前が今年のOOWバッグ、左がブロガーパスです。

f:id:nowokay:20141002020004j:image

まあ、でも毎年改良されてて、なんかすげー使いやすくなってます。

torutkの日記 - October 01, 2014 12:00 AM
[Java]JavaOne 2014 SF(10-01)

本日がJavaOne Day Three(通算4日目)となります。 朝は7時から開いている近所のベーカリーカフェ「Le Bourange」でクロワッサンとレーズンデニッシュを買ってきて食べました。クロワッサンおいしいです(バターたっぷりそう)。 CON2951: Creating Amazing Interactive Visualizations with JavaFX 8:30-9:30 本セッションのスライド スピーカーはフランクフルト大学の先生で、ビジュアルプログラミングなどを研究しています ...

きしだのはてな - September 30, 2014 01:33 AM
[javaone][javaone2014]JavaOne 2014 サンフランシスコ初日

JavaOneの季節です。

ということで、サンフランシスコにきました。

f:id:nowokay:20140928020549j:image


今回は、成田から同じ便の人が多かったです。

福岡からの便が遅れて、成田でwifiを受け取る時間がなかったのですけど、ANAのおねえさんが代わりにとってきてくれました。ありがたい。


レジストレーション

レジストレーションは、Hotel Hiltonで行います。

ロビーがJavaOneモードになっています。

f:id:nowokay:20140929012919j:image


まだ並ばずにいけますね。

f:id:nowokay:20140929013253j:image


今日のセッションは、ちょっと歩いてMosconeセンターに行きます。

Mosconeセンターでは主にOracle Open Worldをやってます。JavaOneもキーノートなど一部だけMosconeセンターでやります。

初日のセッションは、ユーザーグループフォーラムとなっていて、OpenJDKとかGlassFishとかNetBeansとかのセッションをやっています。

f:id:nowokay:20140929020115j:image


UGF9120:GlassFish Roadmap and Executive Panel

今回最初のセッションは、GlassFishのロードマップについてのセッションです。

とはいえ、資料もなくだらだら話す系だったので、何の話題についてしゃべってるかはわかるものの、何を言ってるかまったくわからない感じ。

「GlassFishとWebLogicとNetBeansは、Java EEの重要な3つのピースだ」と言っているのはわかりました。

かなり、WebLogicとの関係がどうなるか気になってる人が多かったみたいですね。

f:id:nowokay:20140929022658j:image


KEY10422:Java Strategy and Technical Keynotes

基調講演です。

で、最初にネタバレしておくと、今回のキーノートは回想回でした。

f:id:nowokay:20140929042757j:image


Java コミュニティ

最初はコミュニティ系の話。

Stephan Chinさんが出てきて、JavaOneに先行して行われたDevoxx4Kidsの紹介をします。LEGO Mindstormでなにか作ったそうです。

f:id:nowokay:20140929045122j:image


Java 8

Java 8の話

Georges Saabさんが、Java 8はWebでもバズって書籍もたくさん出ててすごいんだぜ見たいな話をします。

f:id:nowokay:20140929050111j:image


Donald RaabさんはJava 8はパフォーマンスあがってるんだぜという話。

f:id:nowokay:20140929051407j:image


まあ、Java 8の評価がいいって話はわかったからJava 9の話しろやーって思ってたらロードマップ

f:id:nowokay:20140929051923j:image

でも、Java 9の話はほとんどしてませんでした。JDK 9のEarly Accessがダウンロードできるようになったよ、くらい。


Java ME

そして、Java MEの話

CDCがなくなって、Java SE Embeddedに統合されるとか。でもこれ、去年も話したらしい。聞いてなかったけど。

f:id:nowokay:20140929052207j:image


そんで、デモ

なんか、車のダッシュボードっぽいものなんだけど、よくわかんない・・・

f:id:nowokay:20140929052938j:image


あとは、Java ME/Java SE Embededdのロードマップ

あわせてJava Embeddedっていうみたいですね。

f:id:nowokay:20140929054345j:image


Java EE

そして、Java EEです。

Java EE 7の話をしたあと、Java EE 8が満場一致でJSR採用されましたよ、と。

f:id:nowokay:20140929055442j:image

うっすらHTTP2.0/SPDYがServlet 4.0に入るとか書いてあるんですけど、このうっすらする前の写真はとりそこねました。こういった技術的な解説もほとんどなく。


そしてここでブラジルのJavaチャンピオンが出てきて、Red Hatやe-financeの人と一緒にTシャツ投げ。

f:id:nowokay:20140929061004j:image


最後にロードマップを紹介して終わり。

f:id:nowokay:20140929061159j:image


IBMのスポンサー枠

で、ここでIBMさんです。みんな帰り始めます。

f:id:nowokay:20140929061838j:image


なんか車うごかしてました。これもよくわかんなかったけど、Java Embeddedのデモよりは見てておもしろげでした。よくわかんなかったけど。

f:id:nowokay:20140929063447j:image


テクニカルキーノート

そしてここからテクニカルキーノート

Javaプラットフォームの一番えらい人、Mark Reinholdさんにバトンタッチです。

んで、なんか1995年からのJavaの歴史を語り始めます。

f:id:nowokay:20140929065219j:image


そして、Brian Goetzさん登場。

匿名クラスがラムダになってすっきり、とかいう話をします。

f:id:nowokay:20140929070109j:image


それから、もうひとりのBrian登場。Coherenceでキャッシュで並列化でみたいな話をしてたんだと思います。

f:id:nowokay:20140929070904j:image


そしてそして。

なんか、Point型の配列の話をしはじめて、お、これはPanamaの話か、とぼくの中では今回最高レベルの期待。というか、唯一の期待。

f:id:nowokay:20140929072114j:image


と思ったら、なんか時間が来たってことで、Valhalla/Panamaの資料とかすっとばされて終わりました。ひどいw

唯一、未来のJavaの話をするところがはしょられて、なんだかグダグダに終わりました。

ハイッタッチDukeの写真を撮って退散。

f:id:nowokay:20140929072812j:image


ビール

次のセッションに向かおうと思ったら、なんかビールを持ってる人たちがいる地帯にさしかかり、これはどっかでビール配ってるな、と思いながら探してみます。

モスコーニ南で配ってました。

f:id:nowokay:20140929074152j:image


UGF8873:Teaching Java with Free Java Tools

Free Java Toolsとありますが、NetBeansを使ったプログラミング教育というセッションです。

f:id:nowokay:20140929083322j:image


なんか、UMLプラグインの紹介してました。

https://java.net/projects/nb-uml-plugin

f:id:nowokay:20140929083312j:image


あとは、盲目の人むけの機能拡張の話とか。ブレークポイントで止まった行の内容を読み上げたりしてました。

f:id:nowokay:20140929083545j:image


それと、教えるときにMaven使うと、Jarをどっからダウンロードしてどこにいれるとかいう話が不要になっていいよとか、TomEEがちょうどいいとかいう話をしてました。

f:id:nowokay:20140929084827j:image


UGF8906:Lightning Talks:Even More Productivity with Free Java Tools

なんか、NetBeans Platformを使ったアプリケーションに関するLTをやってました。

よくわからないうちに終了・・・

f:id:nowokay:20140929100056j:image


これで今日のセッションは終了です。


移動

モスコーニ北と南の間は道路なんですが、封鎖されてOracle Plazaとして飲食会場になってます。

f:id:nowokay:20140929101627j:image


ということで一旦ホテルに帰ります。

なんか、サンフランシスコは適当に街をとると勝手にカッコイイ感じになるのでズルいと思う。

f:id:nowokay:20140929102714j:image


Java EE Community Appreciation Event

夜は、Moscone近くのThirsty BearでJava EE Community Appreciation Eventというイベントがあります。

Java EE関係のスペックリードとかがわらわらいる飲み会です。

f:id:nowokay:20140929123918j:image


で、まあビールを飲みます。

f:id:nowokay:20140929140244j:image


こんな感じで、フリーダムにビール飲んでます。聞こえるのは英語の会話ばっかりなんですが、だいたいJavaのなんだかについて話してるというのが、なんかおもしろい。

とはいえぼくは英語の会話できないので、日本から来てる人たちと飲んでました。

f:id:nowokay:20140929132513j:image


ちなみに、Thirsty Bearでは、このお店の中でビールを醸造してます。

f:id:nowokay:20140929144940j:image


ということで、初日は終了

torutkの日記 - September 30, 2014 12:00 AM
[Java]JavaOne 2014 SF(09-30)

本日がJavaOne Day Two(通算3日目)となります。 TUT2161: Preventing Errors Before They Happen 8:30-10:30 本セッションのスライド 型検査を強化するためCheker Frameworkを使うお話です。 Javaの型システムは弱いので、NullPointerException、UnsupportedOperationExceptionなどの実行時例外の発生、SQLインジェクションに対する脆弱性などのエラーを型チェックシステム(コンパ ...

torutkの日記 - September 29, 2014 12:00 AM
[Java]JavaOne 2014 SF(09-29)

本日がJavaOne Day One(通算2日目)となります。 ホテルを8時過ぎに出ても会場に10分ちょっとで着くので近いといいですね。 昨晩のアルコールが少し残って食欲が出なかったので青汁、バナナ半分を食べてホテルを出発、徒歩でヒルトンホテルに向かいました。 TUT3227:JavaFX CSS API 8:30-10:30 チュートリアルセッション JavaFXのCSSについてかと思っていたら、JavaFXの部品を自分で作る場合に任意のCSSプロパティを定義するときに使うCSS処理のAPIについ ...

torutkの日記 - September 28, 2014 12:00 AM
[Java]JavaOne 2014 SF(09-28)

本日はJavaOneの0日(The Zero Day)です。明確な記述はないですが、JavaOneの日付の数え方は0オリジンになっているようです。 この日は7時ちょっと前に起床、この時間でもまだ外は暗かったです。宿泊しているホテルの1Fロビーに行ってコーヒー、紅茶を取ってきて、昨日セブンイレブンで買ったドーナツとバナナを食べて、8時過ぎにホテルを出発、本日の会場となるモスコーニ・センターへ歩いて向かいました。 モスコーニ・センターでまず登録を行いパスを受け取りました。このときパスポート等身分証明書とし ...

torutkの日記 - August 30, 2014 12:00 AM
[NetBeans][Java]Windows 7、Java SE 8u20、NetBeans 8の組み合わせで落ちる

【お知らせ】(2014-10-15)本バグはJava SE 8u25で修正されました。 http://www.oracle.com/technetwork/java/javase/8u25-relnotes-2296185.html Windows 7 64bit版にJava SE 8u20 64bit版の上でNetBeans 8を動かしてJavaプログラムを記述していると、高頻度でNetBeansが消失、プロセスが異常終了してしまいます。 数回の操作でいずれも日本語入力中(Microsoft IM ...

torutkの日記 - August 14, 2014 12:00 AM
[Java][JavaFX][NetBeans]JavaFXアプリケーションのJARファイルにバージョン番号を入れる

はじめに Java SEの標準機能に、パッケージのバージョン管理があります。 http://docs.oracle.com/javase/jp/7/technotes/guides/versioning/spec/versioning2.html#wp90779 JARファイルのMANIFEST.MFに所定の属性(Implementation-Version)を記述しておくと、Javaの標準API(java.lang.Packageクラス)のgetImplementationVersionメソッドで ...

きしだのはてな - July 08, 2014 04:55 PM
JAWS-UG三都物語で「そろそろJavaみなおしてもええんやで」というプレゼンしました

夏のJAWS-UG 三都物語 2014というイベントで「そろそろJavaみなおしてもええんやで」というプレゼンしてきました。

Javaのイベントではなかったので、Javaを使ってない人を想定したプレゼンでしたが、実際会場のほとんどがJavaメインではなかったようです。


for(int num : nums){
    if(num > 10) continue;
    sum += num * 2;
}

というコードが、NetBeansの「関数操作を使用」というリファクタリングで

sum = nums.stream().filter((num) -> !(num > 10)).map((num) -> num * 2).reduce(sum, Integer::sum);

になったところがハイライト。

ここまでできるとは思ってなかった。


※ 10:25 End of lifeの意図が誤解されそうなので、その1年後のTechnology Raderも追加しておきました

torutkの日記 - July 05, 2014 12:00 AM
[Java][NetBeans]FindBugs 3.0.0-rc2とNetBeans Plugin

Java SE 8対応のFindBugs 3.0.0リリース候補版(rc2)が公開されています*1。 http://findbugs.sourceforge.net/ FindBugsサイトでは、3.0.0-rc2を組み込んだEclipseプラグインが合わせて公開されています。しかし、NetBeans向けのプラグイン(FindBugs Integration)はまだFindBugs 2.0系列のものしかありません。 NetBeansプラグイン(FindBugs Integration)のソースをいじっ ...

marsのメモ - June 23, 2014 01:41 PM
[Java] Java7から中黒(U+30FB ’・’ KATAKANA MIDDLE DOT)が識別子に使えない

「何を今さら」 と言うなかれ、ようやく仕事でJava7使えるようになったので、今ごろ気づいた。ちょうど日本語テストメソッド名で中黒(・)使ってたんで。:-)

Java6でビルドすれば平気なんだけど、NetBeans8やIntelliJ IDEA13はプロジェクトのターゲットJavaバージョンがJava6でも、エディタ上では中黒(・)を不正な識別子と見なす(ちなみに、エディタ上エラーになってるだけで、コンパイラはJava6なのでビルドは通るよ)。

f:id:masanobuimai:20140623223859p:image

Eclipse(4.3)はターゲットがJava6ならエディタ上でもエラーにしない(偉いw


それ(Java7から中黒がダメ)がホントかどうか知りたくて、言語仕様を探ってみたけど、それっぽいところを見つけられなかった。(´・ω・`)


頑張ってググってみたけど、唯一見つけられたのは、java.netのatomのfeed。その元になったjava.netの掲示板はもう無いみたい。(´・ω・`)


ps.

AppCodeもアカンらしい。これは手抜きっていうかAppCodeのバグなんでないか?


んでもって、JavaじゃなくてUnicodeのせいなんだそうな。

marsのメモ - June 22, 2014 02:17 PM
[IDEA][JavaEE] IntelliJ IDEA13でJavaEEプロジェクトを作る

「New Projectウィザード」で「Java Enterprise」を選んで、いろんなテクノロジを選択するんだけど「Application Server」にGlassfish4を選んでいると「Use library from 'GlassFish 4.0.0' installation」って項目が追加されて、大抵のライブラリをGlassfishから参照するようになる。

f:id:masanobuimai:20140622231407p:image

これはこれで便利なんだけど、なんでか一部のテクノロジ(たとえばJPA)はGlassfish内にある javax.persistence.jar を参照せずにわざわざダウンロードしてくる。それに小刻みに参照ライブラリを区切るので、あぶれるものが出てきたり(javax.interceptorパッケージが見当たらない、とか)と、手放しで喜ぶほどデキがよくない。(´・ω・`)

なにより、ローカルにあるGlassfish上のライブラリを参照するので、プロジェクトを共有するのに向かない。

f:id:masanobuimai:20140622231406p:image

だったら、New Projectでヘンに凝ったことせず、せいぜい「Web Application」か「JSF」それも「Set up library later」にして、プロジェクト作っておいて、

f:id:masanobuimai:20140622231405p:image


あとから「Project Structure」でMavenライブラリ(From Maven...)から「javax:javaee-api:7.0」をダウンロードしたほうが数倍マシ。Scopeは「Provided」でね(Web Profileだと「javax:javaee-web-api:7.0」と指定する)。

f:id:masanobuimai:20140622231404p:image

デプロイ先がGlassfish4だと、ほとんど揃っているので「javaee-api-7.0.jar」はProvidedで済むんだけど、他のAPサーバだと必要に応じてJSFの実装とかWARファイルにバンドルしないとダメなんじゃないかな?

f:id:masanobuimai:20140622231403p:image

というか、このjavaee-api-7.0.jar(または javaee-web-api-7.0.jar)、NetBeansには入っているのにGlassfishやJavaEE 7 SDKに入ってないってのは、どうゆう了見だ!と思わなくもない。

#単に自分の探し方が下手なだけ?

ps.

このヘンはNetBeansのほうがマイルドなんだろか...。

APIDesign - Blogs - June 02, 2014 07:49 AM
Podcast related to Japanese Translation

--JaroslavTulach 07:49, 2 June 2014 (UTC)

torutkの日記 - June 01, 2014 12:00 AM
[Java]FindbugsとJava SE 8

(2014-07-03追記)FindBugs 3.0.0-rc2がリリースされています。 http://findbugs.sourceforge.net/ Java SE 8に対応するFindbugsは、次のバージョン3.0.0の予定ですが、現時点ではまだリリースされていません。NetBeans 8.0でFindbugsのプラグイン「Findbugs Integration」をインストールしてもラムダ式を使用したコードがあると、解析が途中でエラーとなってFindbugsの警告が1つも表示されません。 ...

しんさんの出張所 はてな編 - May 21, 2014 12:00 AM
[NetBeans][Java][自作ソフト][ソフトウェア技術]JavaしかかけないおいらがiPhoneアプリをリリースするまで

今回の内容は前回よりだいぶましだぞ・・・。

の続きになります。

正直実装的にはmixiアプリ第2弾のエントリ(GWT+Flash+JavaSEとの互換レイヤでサクサク開発)が飛びぬけていると思いますが、それ以来くらいのインパクトはあると思います。


長文です。


iOS版を開発するぞ

マモノバスター2のAndroid版は無事だせました。読んでない人は上に並んでる過去のエントリを読んでみてください。

AndroidはJavaSEと同じJava言語ということで、JavaSEと互換のレイヤーを作成して、JavaSE上で開発、そのままアプリのソースは変えずにAndroid版を生成するというものでした。

やはり、Androidと並ぶプラットフォームであるiOS版もださないと片手落ちだろうと。ゲーム機と違ってAndroidとiPhoneを同時に所有している人は少ないはずです。ガラケー時代もそれが理由で遊べないゲームはたくさんありましたし。

問題は開発プラットフォーム選択だけでした。

ObjectiveCは短期的に習得できる状態ではなく、Unityは自分との相性は最悪です。cocos2d-xは触るならver3かなぁ、ver2は触りたくないなぁということで、なかなかいいのがありません。

そこで、思い出します。急激に成長をしているiOS向けの開発環境を。


RoboVM、君に決めた!

そう、RoboVMです。

http://www.robovm.org/

Javaで描いたコードがiOS向けに動きます。シミュレータ用にx86ももちろん出力できます。

パフォーマンスもかなり良好で、iPhone4s/iPod touch5(Apple A5搭載。初代miniもおそらく)でAndroidの現行のハイエンド並のなめらかさ。ただし、負荷が高い部分では差が出ますが、60fpsが安定して出たりします。

RoboVMのいいところはGWTと違い、ソースコードからのジェネレートではなく、コンパイルしたあとのclassファイルから生成されるという点です。したがってjarファイルの既存のライブラリをRoboVMに食わせるとそのまま動きます。びびるくらい動きます。

RoboVMのサンプルコードを書いてみましょう。iOSの開発者は多分、これが何をしているかすぐにわかると思います。

UIButton button = new UIButton(new CGRect(0, 0, 160, 50));

button.setTitle("ぼたん", UIControlState.Normal);
button.setBackgroundColor(UIColor.colorDarkGray());
button.addOnTouchUpInsideListener(new UIControl.OnTouchUpInsideListener() {
  @Override
  public void onTouchUpInside(UIControl uic, UIEvent uie) {
    System.out.println("くりっくした!");
  }
});
window.addSubview(button);

JavaのIDEは非常に優れているため、さくさく補完だけでホイホイ進んでいけますね。

また、サポートされている範囲はGWTの比ではなく、まず問題にならないレベルでサポートされています。恐らくびっくりすると思います。

生成されたipaにjarファイルがありますが、ここにクラスファイルは一切入っていません。たんなるリソース参照用にディレクトリなどがそのままの構造で彫ってあるみたいです。便利ですね。Androidもassets使わず、自動でやってくれるといいのにね。

ちなみにあの有名なJavaFX for iPadもRoboVMを利用しています。サンプルプロジェクトを作るとわかりますが。自分が見たやつはかなり古いバージョンだったと記憶しています。



libGDX、が勝利のカギだ!

RoboVMはいいのですが、JavaSEで実行できる開発環境がなくてはいけません。いちいちシミュレータとか実機起動などたるいことはやっていられないのです。そんな環境で開発している人はいないとは思いますが。

とはいえ、クロスプラットフォームの環境を今、しかも慣れない環境で作るには限界があります。

そこで、クロスプラットフォームで有名なプロダクトに手を出します。

みなさんご存じlibGDXですね。歴史もそこそこあります。最近ぽっと出てきたわけではありません。

http://libgdx.badlogicgames.com/

libGDXはもともとWindows/Mac/Linux/Android/HTMLに対応しています。

iOSも以前はXamarin経由で出力できていたのですが、お金が勿論かかりますし、パフォーマンスもよいとは言えませんでした。

それが去年の夏くらいからRoboVMに対応していきました。こちらも恐ろしいスピードで。昨年末には十分使い物になる感じでした。これでいきます。


libGDXはゲームエンジンや統合開発環境とかいった御大層なものではなく、ただのフレームワーク、ライブラリです。Jarファイル(や環境によってはsoファイル)を配備するだけで環境が整います。クロスプラットフォーム系でこれほど簡単に開発環境が整うのも珍しいと思います。JavaSE版はjarを4ついれるだけの超簡単なものですので試してみてもよいでしょう。AndroidやiOS版(RoboVM)もほんの少しのファイルをクラスパスに入れるだけです。


普段はこのようにJavaSEでそのまま動くので、コードを修正したら一瞬でアプリ起動でさくさく動作確認。

http://shinsan.s3.amazonaws.com/diary/2014/0520-01.png

トライアンドエラーがやりやすいので便利ですね。


HTML5出力というのはGWTを利用しているようです。細かく動かして確認したわけではないのですが、GWTはそれなりに長く追っていたので使い勝手はわかっているため、大体想像はできます。PC向けでWebで出したいのなら少しはありかもしれません。ただし、言語的にRoboVMやAndroidのように気軽にJavaSEという感覚で使えるほどサポートされていませんので、HTML5版を含めて完全にクロスで出力できるとは思わないほうがいいでしょう。


バージョンについて

RoboVM、libGDXともに活発なのでどんどんバージョンアップしていきます。

まずは安定バージョンで開発しました。

当時の安定板はlibGDXが0.9.9、RoboVMが0.0.9でした。Xcodeは5.0です。


ナイトリーでは便利な機能がどんどん追加されていくのがわかっていましたが、互換性も失うところもありました。そのため、リリース間近までこのまま開発していきます。

libGDXの次の正式版が出ました。しかし、ぎりぎりまでひっぱります。開発がほぼ終わった段階で移行しました。1.0.0です。それに合わせて対応しているRoboVMもあげました。0.0.11です。Xcodeは5.1です。

このバージョンに上げることによる変更点は自分はメソッド名が多少変更したという程度ですみました。が、OpenGL ESのデフォルトバージョンが1から2に変更になり、従来は設定で2がつかえたのが今は設定で3が使えるようになりました。OpenGLのコードをがりがり書いていた場合は致命傷でしたが、中/高レベルAPIを利用していたため助かりました。

RoboVMもバージョンが変わることによって大幅に変わっています。iOSへのアクセスするクラスのパッケージがごっそりかわっていました。ですが、このへんからObjectiveCのライブラリ呼び出すブリッジが非常に簡単に扱えるようになり、iOSのAPIサポートも加速していきます。

BROという仕組みなのですが、Javaのコードにアノテーションを付けることによってObjectiveCの呼び出しにマッピングします。ドキュメントが追い付いていないのでバインディングプロジェクトを参考にするとよいでしょう。


で、1.0.0に差し替えて動作を確認した翌日に1.0.1がでました。対応するRoboVMも0.0.12にあがっています。こちらも差し替えましたが、コードの修正はありませんでした。それなりに機能が増えているのも確認しました。




libGDXはプロジェクトをセットアップするツールがついているのが伝統ですが、0.0.9まではEclipseプロジェクトベース、1.0.0以降はGradleベースです。これらはRoboVMのセットアップもしてくれますので(特に後者)試してみたいと思った人はすぐに試すことができます。

NetBeansでJavaSE環境でのGradleはあまりよくないため(Mavenとかと同じ。JavaEEなどのコンテナ系だと気にならないが)、おそらく真面目に開発しようと思うならrobovmコマンドをたたいた方がわかりやすくはるかに幸せになれるかと思います。AndroidやJavaSE版もAntのほうがおそらくよいでしょう。


macのNetBeans上からビルド、シミュレータを起動可能。実機やIPA作成も。デフォルトのセットアッププログラムで生成したものをベースにGradle利用している例。

http://shinsan.s3.amazonaws.com/diary/2014/0520-02.png



ちなみに、Android版はすでにリリース済みのため、このRoboVM + libGDXではiOS版のみ出力しています。もちろん、開発はJavaSEで行っていますので、Windows/Mac/Linux上でもそのまま動きますし、出力しようと思えばAndroidもすぐにはだせます。


libGDXのバランスの良さ

アプリを書くのはlibGDXであって、RoboVMかどうかは全く意識しません。

libGDXは単なるライブラリのため、すきなように利用できるのもポイントです。

GLを取得してそのままガリガリ低レベルに書くこともできるし、高レベルの2Dのシーングラフ、ウィジェットAPIもあります。その一部の高レベルAPIであるノード部分の描画だけを低レベルなGL直で処理してもいいですし、中レベルAPI?(勝手に命名。ウィジェットとGL直の間)で描画することもできます。中レベルAPIはラッピングをしていて、GLを知らずに基本的な描画が可能です。たとえば中レベルAPIのTextureクラスもGLのテクスチャIDをダイレクトに取得可能にしてあるあたり、ボトルネックができたら逃げる道がある、という考え方なのでしょう。

こういった柔軟なことができるバランスの良さが広く支持されている理由だと思います。

あ、そういやなぜか日本だけ知名度ないですね。トレンドみるとcocos2d系は中国韓国(大きく離れてアジア)だけ突出しているっぽい(というか中国が多すぎてなんでも圧倒するけど)のに対して、libGDXはエリアが割とばらけていてアメリカやヨーロッパが多い感じですね。


個人的にはシーングラフを利用しつつ、高レベルコンポーネントの使用をほとんどしない、というのが一番良いと思っています。拡張はいくらでも可能なので、思い切って利用するActor(シーングラフのノードの基本単位)を大きく絞るとよいでしょう。

個人的なベストはベースとなるクラスのActorのほかは以下の3種類のみに絞ることだと思います。

  • Group系(Actorを載せる他のAPIでいうPanel系)
  • ScrollPane
  • Image(癖があると思うのでActorを継承して自前でテクスチャを描画したほうがわかりやすい可能性も大)

多言語化とかスタイルとか闇がありそうなそのへんに振り回されないもの、という意味で。ゲーム用途ならこれで十分でしょう。


とりあえず、8bit時代のBASICとか16bit時代のC言語とかでガリガリゲーム作れた、ソースコードを打ち込んだことがある、という人はlibGDXを利用すれば簡単に当時の感覚でゲームが作れますよ。それもiOS、Android、Mac、Windows、Linuxで60fpsでさくっと動かせるものが。基本的にOpenGLとかは知る必要はありません。


自分がどれだけlibGDXに惚れこんでいるかといえば、スマホ向けに出力する予定が全くない、PCでのみ動けばよいアプリを開発する場合もlibGDXを採用するだろう、といえばわかるでしょうか。


今回は移植という形でしたが(それでもロジック部分は同じJava言語のため6割はもってこれてる)、次からは最初からAndroidとiOSを同時にリリースするつもりで作っていきます。

へびのぬけがら - April 29, 2014 05:07 AM
libGDX のプレゼン資料

4月28日にイスタンブールで行われた Istanbul Tech Talk にて、 Mario Zechner が発表した libGDX についてのプレゼン資料です
また、資料中にある Live-Coding Session に使用したコードは GitHub 上にて公開されています
各実装フェーズ毎にタグが切ってあり、また script.txt にその簡単な解説があるため、 libGDX にてどのように実装を行うかを把握するにはよい資料だと思います
(全体を把握しやすくするため、実装はかなりコンパクトにまとまっています)

へびのぬけがら - April 26, 2014 03:00 AM
libGDX のプロジェクト構成と共通インターフェイスについて

libGDX はマルチプラットフォーム対応のため、(プラットフォーム共通の)ゲームロジックの実装と、各プラットフォームに依存する実装は分離されています
セットアップツールを使い、プロジェクトを作成すると以下のようなディレクトリ構造にてプロジェクトが作成されます
(セットアップツールの "suprojects" の設定にて、 "Desktop" 、 "Android" 、 "Ios" 、 "Html" の4つすべてを選択した場合になります)

"android"、 "desktop" 、 "html" 、 "ios" の各ディレクトリには、それぞれのプラットフォーム毎の実装、設定などを含みます
例えば、 "android" ディレクトリには "AndroidManifest.xml" ファイル、 "ios" ディレクトリには "Info.plist.xml" ファイルなどがあります


これらのプラットフォームの違いを吸収するため、 libGDX は次の5つのインターフェイスを用意しています
  • Application … ライフサイクル、ウィンドウ管理などのアプリケーションレベルイベントインターフェイス
  • Files … ファイルシステムインターフェイス
  • Input … マウス、キーボード、タッチイベントや加速度センサーなどの入力イベントインターフェイス
  • Net … HTTP(S) 、 Socket 通信などのネットワークインターフェイス
  • Audio … PCM 入出力などのオーディオインターフェイス
  • Graphics … OpenGL ES 2.0、3.0 インターフェイス
これらのインターフェイスを利用することで、開発者は個々のプラットフォームの差を意識することなく、実装を行うことができます
なお、プラットフォームによっては提供されていない機能や未実装の機能(2014年4月現在では iOS プラットフォームではコンパスが利用できないなど)が存在するため、すべての機能が共通して利用できるというわけではないので、ご注意ください

へびのぬけがら - April 25, 2014 07:28 AM
libGDX 1.0 リリース

libGDX 1.0 がリリースされました

今回のリリースにて、 Android のバージョンは 2.2 以上(OpenGL ES 1.x サポートが除外されたため)が対象となりました
またセットアップツール、ドキュメントの大幅な刷新が行われています
(現状では公式ドキュメント以外では、ほぼ旧セットアップツール(gdx-setup-ui.jar)を使用した解説がほとんどとなりますので、ご注意ください)
今まで Eclipse での開発を推奨してきていましたが、ビルドツールに Gradle を採用することで IntelliJ IDEA 、および NetBeans での開発が簡単に行えるようになりました

2010年3月から始まり、4年経った今も活発に開発が行われているプロジェクトです
1.0 はプロジェクトにとっては単なる区切りでしかなく、今後も新たな機能や改善が行われていくかと思います
拙作の Gradle プラグインが本プロジェクトに採用されたことがきっかけで、コミュニティに参加するようになりましたが、何もわかっていない初心者でも歓迎してくれる良いコミュニティだと思います

( Unity や(アジア圏に強い) Cocos2d-x と比較して)日本ではまだまだ知名度の低いゲームエンジンゲーム(2D / 3D)開発フレームワークではありますが、おもしろいプロダクトと思いますので、機会がありましたら、ぜひ使ってみて下さい
こちらのブログでも今後も情報提供できたらと思います

torutkの日記 - April 23, 2014 12:00 AM
[JavaFX][GIS]シェープファイル形式の地図データを読んでJavaFXで描画する

電子地図データの形式としてよく使われるシェープファイル形式(ベクターデータ)の地図データを読み込んで、投影変換をしてJavaFXで描画するという流れを確認するサンプルプログラムを作成しました。 JavaFXとベクター地図表示 - ソフトウェアエンジニアリング - Torutk サンプルプログラムは、Java SE 8、NetBeans IDE 8.0、SceneBuilder 2.0 b14で作成しました。ビルドスクリプトはNetBeans IDEの生成したAntです。使用するライブラリは、NetBe ...

へびのぬけがら - April 22, 2014 03:35 PM
書評『Learning Libgdx Game Development』

Packt Publishing の "Learning Libgdx Game Development" のレビューです
本書は Java ゲーム開発フレームワークである libGDX  にについて解説した書籍となります
目次は下記のようになっています

  • Introduction to Libgdx and Project Setup
  • Cross-platform Development – Build Once, Deploy Anywhere
  • Configuring the Game
  • Gathering Resources
  • Making a Scene
  • Adding the Actors
  • Menus and Options
  • Special Effects
  • Screen Transitions
  • Managing Music and Sound Effects
  • Advanced Programming Techniques
  • Animations
ゲームロジックの実装はもちろん、テクスチャのパッキング、 UI 作成、パーティクルによるのエフェクト処理などゲーム開発に必要なことが網羅的に書かれた内容となっています
最初は小さなプログラムから開始し、徐々に機能を解説、追加していくことで libGDX が持つ多くの機能を段階的に学ぶことができます

本書にて対象とするプラットフォームは主にデスクトップと Android となり、 HTML 5 や iOS についてはサポートしている程度にしか記述されていません(特に iOS 対応に関しては、現在の RoboVM 採用前の Xamarin.iOS についての解説になっています)
開発そのものも大半をデスクトップでの動作前提に進められますが、それによりエミュレータの起動などの必要がなくなり、開発そのものに集中して作業が進められることができました
また、入力インターフェイスの調整以外はデスクトップと Android にてゲームロジックを変更することなく同様に動作させることが出来たため、デスクトップにて開発を進め、各モバイル端末で実際の動作確認と細かい調整という効率的な手法が選択できるかと思います(本書の対象外とはなりますが、 gradle を採用した最新のビルドツールによる、 iOS 上での動作も確認できています)

なお、 libGDX が今もなお活発に開発が進められているということもあり、書籍にある通りに記述しても最新のバージョンでは動作しない(※UI のセレクトボックスの仕様変更)というケースもありました

全体的には、 libGDX に関して必要な情報がまとまった良書だとおもいます
(2014年4月現在、 libGDX について書かれた唯一の書籍でもありますが…)
サンプル PDF もダウンロード可能ですので、興味があれば内容を確認してみてはいかがでしょうか

へびのぬけがら - April 22, 2014 03:30 PM
NetBeans で libGDX プロジェクトを作成する

NetBeans で libGDX プロジェクトを作成する方法を紹介します
libGDX は Java 用クロスプラットフォームゲーム開発フレームワークで、現在 Windows, Mac, Linux, Android, iOS, BlackBerry, HTML5 をサポートしています
今までは開発には Eclipse を推奨していたこともあり、他の IDE にて開発するのは少し手間が必要でした
今回新たにセットアップツールの刷新が行われ、ビルドツールとして gradle が採用されたことにより、 NetBeans をはじめ、 Eclipse 以外の IDE 、エディタによる開発が簡単に行うことができるようになりました
本エントリでは、この新しいセットアップツールと、 NetBeans での libGDX プロジェクトの作成方法を紹介したいと思います
なお、 libGDX は現在も活発に開発が進められているプロジェクトであるため、閲覧される時点では挙動が異なる可能性があることをご了承ください
今回使用した環境は以下の通りになります

OS: Mac OS X 10.9.2
JDK: 1.7.0_51
Xcode: 5.1
※ Xcode は iOS プラットフォーム利用時のみ必要となります
NetBeans 8.0(Build 201403101706)
Gradle Support Plugin 1.3.0

まず、セットアップツールをダウンロードします
適当な場所に保存後、下記コマンドにてセットアップツール起動します

$ java -jar gdx-setup.jar

起動後、上記のようなウィンドウが表示されるので、各項目に適当な値を入力します
(※4月23日最新版セットアップツールに更新)

Name … アプリケーション名
Package … 作成するプロジェクトのパッケージ名
Game class … プラットフォーム共通(core)のメインゲームクラス名
Destination … プロジェクト作成先ディレクトリ
Android SDK … Android SDK のパス(local.properties に設定されます)

"Sub Project"、"Extensions" については必要に応じ、チェックを行ってください
入力後、 "Generate" ボタンをクリックすると、プロジェクトが "Destination" フィールドに指定した場所に生成されます

次に作成したプロジェクトを NetBeans で開きます
「ファイル > プロジェクトを開く」にて、生成されたディレクトリまで移動します


プロジェクトを開くと、以下のようなツリー構造で NetBeans に開かれます


作成したプロジェクト(ルートプロジェクト)は、5つのサブプロジェクトで構成されます

android … Android 用プロジェクト
core … プラットフォーム共通プロジェクト
desktop … デスクトップ (Windows, Mac, Linux) 用プロジェクト
gwt … HTML5(GWT) 用プロジェクト
ios … iOS 用プロジェクト

各サブプロジェクトはダブルクリックすることで開くことができます
まず、ルートプロジェクトの設定を行います
(ルートプロジェクトに行った設定はすべてのサブプロジェクトに反映されます)
ルートプロジェクトを右クリックし、コンテキストメニューから "プロパティ" を選択すると以下のようなウィンドウが表示されます



"Gradle home" の "Inherit" チェックボックスをはずします
また、テキストボックスに値が入力されている場合は、それも削除し、空白の状態にします
お使いの環境が Mac で、 JDK に Java 8 を使用されている場合は "Platform for build scripts"、"Target platform"、"Source Level" にて Java 7 (1.7) を選択してください
(デスクトップ用プロジェクトに使用されている lwjgl が2014年3月29日時点で Java 8 に対応していないため)
上記設定が終わったら、"OK" ボタンをクリックし、設定を反映します

プロジェクトの設定が終わったので、各サブプロジェクトを実行してみます
最初はデスクトップ用アプリケーションを実行します
サブプロジェクト内の desktop をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > run」と選択し、クリックします


ビルドが実行され、以下のようなウィンドウが表示されます

次に Android 用アプリケーションを起動します
実行するために事前に端末の接続、またはエミュレータの準備を事前に行っていてください
今回は Genymotion を実行環境として使用します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > installDebug」と選択し、クリックします
Android 用のタスクは量が多いため、表示できていない場合は「Custom Tasks > Custom Tasks」と選択し、表示された "Execute Custom Tasks" ウィンドウの "Tasks" フィールドに "installDebug" と入力し、 "Execute" ボタンをクリックすることで同様に実行することができます
("Save And Execute" ボタンをクリックすると、実行したタスクが保存されるため、2回目以降は入力の手間が省けます)


ビルドが実行され、接続していた端末、またはエミュレータにアプリケーションがインストールされます
実行すると以下のように表示されるかと思います


次は HTML5 (GWT) 用アプリケーションを起動します
サブプロジェクト内の android をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Tasks > superDev」と選択し、クリックします
(リスト内に "gwtSuperDev" という似た名前のタスクがありますが、こちらでは正常に起動できませんので、間違えないようご注意ください)


次にブラウザを開き、 "http://localhost:9876/" へアクセスします
(制限はないのですが、 Google Chrome ブラウザの使用をおすすめします)
以下のような表示がされるので、"Dev Mode On"、"Dev Mode Off" をブックマークレットとしてブックマークバーに登録ください


次に "http://localhost:8080/gwt/" へアクセスします
最初に以下のようなダイアログが表示されますので、先ほど登録した "Dev Mode On" ブックマークレットを実行します


実行すると、以下のように表示されるので、 "Compile" ボタンをクリックします


コンパイル終了後、以下のように表示されます
(再度先ほどのダイアログが出る場合がありますが、ローディングが終わるまでお待ちください)


最後に iOS 用アプリケーションを起動します
サブプロジェクト内の ios をダブルクリックして開きます
開いたプロジェクトを右クリックし、表示されたコンテキスト内から「Build」を選択し、クリックします
ビルド終了後、再度プロジェクトを右クリックし、「Tasks > launchiPhoneSimulator」と選択し、クリックします
(今回は iPhone シミュレータでの実行を行いますが、 iPad シミュレータ、および実機での実行も可能です)


実行後、以下のように表示されます
(初回実行時はシミュレータ起動までかなり時間が掛かりますのでご注意ください)


以上が、サポートする各プラットフォームでの実行となります
新しいセットアップツールと gradle を使用することで、簡単に NetBeans 上にプロジェクト構築が出来ることをご理解頂けたかと思います

実際のゲーム開発は、サブプロジェクトにあった core (プラットフォーム共通)プロジェクトを中心に実装していくことになります
libGDX を使用したゲーム開発の詳細については、また別のエントリにて紹介できればと思います

へびのぬけがら - March 31, 2014 10:21 PM
libGDX について

libGDX は、デスクトップ(Windows, Mac OS X, Linux)、モバイル(Android, iOS, Blackberry)、 HTML5 というマルチプラットフォームをサポートした、オープンソース(Apache License 2.0) の Java ゲーム(2D / 3D)開発フレームワークになります
国内ではまだ有名とは言えない状況ですが、海外では Android ネイティブアプリケーションをはじめ、多くのゲーム開発にて採用されています

このフレームワークの最大の魅力は、ラピッドプロトタイピングと、それによりイテレーションを素早く実行できることにあります
実行、デバッグが容易なデスクトップ用アプリケーションとして開発を進め、その後各プラットフォームにて調整という流れで作業を行うことで開発時間の短縮がはかれます
(ただし、 HTML5 対応に限っては調整にかなりの時間を要するかと思います)

また他のゲーム開発用フレームワークと比較すると、 libGDX は OpenGL による描画や入出力処理などの低レベル API が中心として提供され、ゲーム開発によく使われるトランジションなどの高レベル API はあまり用意されていません
しかし、これにより他のライブラリ、フレームワークとの柔軟な組み合わせ(例えば、先述のトランジションに関しては Universal Tween Engine を使用するなど)を実現することができます

ドキュメントに関しても公式の Wiki 、フォーラムをはじめ、などが充実しています(残念ながら、日本語の資料は少ないです)

YouTube 上にも(公式のものではありませんが)チュートリアル動画がいくつかアップロードされています(以下はシリーズとしてまとまっているものを挙げています)
日本語の資料は少ないのですが、 @rnkv さんの「技情研ネット」内のページがとても実践的な内容にてまとまっています
以上、簡単な libGDX の紹介と資料のリンクまとめになります
(上記以外にもオススメのドキュメント等ありましたら教えてください)

torutkの日記 - March 26, 2014 12:00 AM
[Java][Jenkins][NetBeans]JenkinsでNetBeans AntプロジェクトのJavaソースをビルド

NetBeans IDEでAntプロジェクトで作成しているJavaのソースコードをJenkinsでビルドおよびJUnitユニットテストを実行する環境をLinux上に構築しました。次のURLに記載しています。 Jenkins - ソフトウェアエンジニアリング - Torutk 今後、静的検証ツールのプラグインを追加していく予定なので、随時追記していきます。

へびのぬけがら - March 23, 2014 08:50 PM
Packt Publishing のキャンペーンのお知らせ

先日レビューを書いた "iPhone Game Blueprints" を出版した Packt Publishing 社が、出版タイトル 2000 到達ということで、電子書籍1タイトル購入でさらに1タイトル無料でもらえる キャンペーンを行っているようです。
(キャンペーンの詳細に関しては、リンク先を参照ください)
何か興味のあるタイトルがありましたら、ご利用してみてはいかがでしょうか?
(キャンペーン残り日数わずかですのでご注意ください)

torutkの日記 - March 21, 2014 12:00 AM
[Java]「祝☆Java 8 Launch」イベントに参加して・・・

本日は、日本Javaユーザーグループ(JJUG:Japan Java User Group)主催の「祝☆Java 8 Launch」イベントに参加しました。 今回は各セッションのYouTube動画が作成されています。素晴らしい! セッションメモ 祝 Java SE 8 正式リリース 最初は、Javaエバンジェリスト寺田さん、135枚のスライドを30分で、最初の35枚が講演内容で、残り100枚はJava SE 8の変更点紹介(それでも全体の7-8割の網羅とのこと)です。JavaVMにも性能改善、メモ ...

torutkの日記 - March 19, 2014 12:00 AM
[Java]Java SE 8がリリースされました

Java SE 8が予定通り3月18日(日本時間で2014年3月19日)にリリースされました。あわせて、NetBeans 8もリリースされています。 Java SE ダウンロードページ NetBeans ダウンロードページ Windows 64bit版のJDK 8をデモ・ドキュメントを含めてインストールしセットアップする手順を次に記述しました。 JDK 8セットアップ - ソフトウェアエンジニアリング - Torutk 日本では、Java SE 8リリース記念イベントが開かれます。 ...

torutkの日記 - March 18, 2014 12:00 AM
[Java][NetBeans] NetBeans 8.0RC1とJDK8 b132でFindBugs、Checkstyle、PMDのプラグインを動かす

Java SE 8の正式リリースが、予定では3月18日(日本時間だと3月19日)と間近になっています。 Java SE 8でプログラミングするための開発環境を整備しようとしています。NetBeans IDEは、7.4でJava SE 8対応をある程度していますが、NetBeans 8.0が4月にリリース予定になっており現在RC1版が公開されているので、これを使ってみます。 昨今のソフトウェア開発プロジェクトでは、静的検証ツールを導入して品質向上を図ります。Javaでは、商用製品とオープンソースツールと ...

torutkの日記 - March 05, 2014 12:00 AM
[Java][NetBeans]NetBeans 8.0 RC1とDark Look And Feel Themesプラグイン

NetBeansをWindows上で実行すると、フォント周りが残念な表示になります。これはWindows上でMSゴシックやMS明朝のフォントをClearTypeでレンダリングするときに、文字サイズが大きくないときはMSゴシックとMS明朝に埋め込まれたビットマップをアウトラインフォントの代わりに表示するという振る舞いが原因です。 また、NetBeansのデフォルトの配色が背景が明るい色(白)に文字が黒いというセッティングのため長時間作業すると眼が疲れる原因となります。 今回、NetBeansでMSゴシッ ...

torutkの日記 - February 28, 2014 12:00 AM
[NetBeans][C++]Windows上のNetBeans 8.0 RC1でC++開発を整える

Linuxであれば簡単なのですが、Windows上でNetBeansのC++開発環境を構築するのは少々複雑でした。 NetBeansはGNUコンパイラ系を使用するので、Windows上ではまずGNUコンパイラを整えるところから始まります。GNUコンパイラはUNIX系のツールなので、Windowsへは移植という形でいくつか存在します。著名なところではCygwin、MinGWでしょうか。 NetBeansはCygwinを認識するみたいなのでCygwinであれば設定が簡単です。しかし、CygwinのGCCで ...

torutkの日記 - February 19, 2014 12:00 AM
[Java]JJUGナイトセミナー「2.19 Eclipse, NetBeans, IntelliJ IDEA 3大IDE頂上決戦」に参加して

本日開催されたJJUG主催のセミナー「2.19 Eclipse, NetBeans, IntelliJ IDEA 3大IDE頂上決戦」に参加してきました。 NetBeans、IntelliJ IDEA、Ecilpseそれぞれ約30〜40分ずつ説明・デモが行われました。 開催案内へのリンク http://jjug.doorkeeper.jp/events/8848 togetterまとめへのリンク http://togetter.com/li/631974 講演動画へのリンク(残念ながらEclipseの ...

へびのぬけがら - February 14, 2014 10:45 PM
iPhone Game Blueprints を読みました

Packt Publishing の "iPhone Game Blueprints" のレビューです

本書は iPhone ゲームを開発する上でのゲームデザインと App Store での売り出し方について解説した書籍です
目次は下記のようになっています

  • Preface
  • Chapter 1: Starting the Game
  • Chapter 2: Ergonomics
  • Chapter 3: Gesture Games
  • Chapter 4: Card and Board Games
  • Chapter 5: Puzzles
  • Chapter 6: Platformer
  • Chapter 7: Adventure
  • Chapter 8: Action Games
  • Chapter 9: Games with Reality

前半はゲームをつくる前段階として注意すべき点について記述されています
ここで取り扱われている内容は iPhone ゲーム開発に限らず、他のプラットフォームでも役立つ内容だと思います
(iPhone 固有の注意点もしっかり書かれています)
ただ、扱っている範囲が広いため、やや物足りないものもあり、それらについては別の書籍にて補完していく必要があるかと思います

後半は、前半にて取り扱ったポイントをさらにゲームのジャンルごとに掘り下げています
各ジャンルにて、基本なアイディア(技術的なベース)を説明し、そこからどのように魅力的なゲームとなるようアイディアを広げるかを、いくつかのサンプルとなるアイディアをベースに解説しています

読んだ感想としては、アイディア出しから App Store へのリリースまでの長い行程を網羅的に書かれた良書でした
一点注意いただきたいのは、本書では実装(プログラミング)については扱われていないということです
そういった内容を期待される場合は別のゲーム開発に関する書籍(日本語の書籍も数多く存在します)を参考にされるのがいいかと思います
反対に、いくつかの書籍、チュートリアルを終えたが、いざゼロからゲーム開発を行おうとした際に何から手を付けていいのか詰まっている方の強力な後押しになるものと思います
ページ数はやや多いものの、イラストや画面イメージが多用されていることもあり、詰まることなく読み進めることができました

興味を持たれた方は、上記サイトから Chapter 04 がサンプルとしてダウンロードできますので、確認してみてはいかがでしょうか

しんさんの出張所 はてな編 - January 27, 2014 12:00 AM
[NetBeans][ソフトウェア技術][ゲーム][自作ソフト]JavaしかかけないおいらがAndroidアプリをリリースするまで

の続き。

しかし、Androidの場合、VMはJavaではないものの、言語だけはJava系なのでインパクトがないタイトルだなw


空いた時間にちょくちょく稼げるRPG、マモノバスター2はこちらから落とせます。


今作の開発開始時期そのものはかなり前となります。

ちょうど1年前、mixiアプリ版マモノバスターが配信停止しました。

原因はmixiのアドプログラムの価格改定です。これにより、広告料は1/10以下とかになりました。

mixiで無料で配信するにはアドプログラムしかありませんのでこの金額ではサーバー代が維持できません。そこで泣く泣く停止しました。


次につくるアプリはプラットフォームの広告に依存しないものを、という選択からスタートすることになります。

そうなると、広告が元気なプラットフォームは限られます。ぶっちゃけるとスマホです。

さらに言うとスマホといってもAndroidとiOSです。リワード広告などはAndroidのほうが自由度があるためか数が多いようです。

オンラインのアプリ市場がなぜこの2つに絞られるかというと、その他のプラットフォームでは広告がないからですね。


で、AndroidとiOSとどちらが開発が楽かと聞かれると、Java言語が触れる分圧倒的にAndroidです。iOSは開発が大変なのは目に見えています。


というわけで、プラットフォームはAndroidに決まりでした。


・・・となったのは去年の夏です。


1回目の開発

それまではどうなっていたかというと、WebViewを利用してPC,Android、iOSとクロスプラットフォームで配信しようとしていました。前作がWebアプリだったので当たり前ですね。

ただし、Webアプリでは配信は自由度がありますが、サーバー維持費が出せません。

ここまでが去年の5月ごろまでの話です。

もちろん、Webアプリとしてクロスプラットフォームで作成していました。また、移動するマップもありました。



やはりサーバー代が捻出できないと厳しいなということで止めます。

そこで

サーバー代がかからなければよい

 ↓

スタンドアロンで出せばよい

 ↓

Androidでだせばよい

という感じになりました。


1回目のは破棄、いちからの作り直しです。


https://shinsan.s3.amazonaws.com/diary/2014/0127-01.png

1回目の時。マウスでの操作ならこれでいいけど、タッチは大幅に構成を変えないといけないという。


2回目の開発

気を取り直しての開発。

どうせスタンドアロンなら戦略性の高いパーティープレイがいいだろう、そう思って開発しました。

かわりにマップ機能を削除、ダンジョンの進捗率を表示する前作と同じものにしました。


・・・しかし、しっくりきません。


パーティーバトルということは攻撃にしろ、魔法にしろ、だれを対象にするのかという選択が入ります。十字キー+決定ボタンだと気にならないのですが、タッチ操作をしているとこれがすごく手間です。

特に意識はしてなかったのですが、前作の1対1での戦いはこの辺のバランスが良かったのではないかと思うようになりました。

また、連携的なものもパーティーの場合誰を基準にすればよいのかあいまいです。

ということで、2回目の開発もストップすることになりました。

2回目の作り直しです。


2回目の開発で実装したもので3回目に受け継がれたものとしてマモノのHPやMP表示があります。前作では途中から数値をダイレクトに表示していました。ドラゴンスレイヤー英雄伝説のように。それを今回はメーター制にしました。世界樹の迷宮のように。


3回目の開発

まず、基本的な流れは前作同様にする、1対1の戦いにするなど細かいところを盆の帰省中に練りまくりました。プラットフォームをmixiアプリからAndroidにするというだけで十分チャレンジングなのだから、基本的な流れはそのままで、システムで楽しませるという方向にチェンジします。

システムで楽しませるというのは、たとえば転職です。今作には職業があり、その職業ごとに連携が違います。それだけならば前作の勇者タイプ(ステータスによって決まる)と同じですが、今回は職業によってそれぞれのステータスの成長率と覚えることができるスキルがかわります。転職を繰り返すことでステータスやスキルを調整していく楽しさが生まれました。開発規模は抑えながら。

また、連携用のキャラクターを酒場で登録できるのですが(前作はmixiの友達のプレイヤーが自動で表示された)、キャラのステータスの詳細も見ることができます。バージョンアップを繰り返して少しずつ詳細なステータスは見れるようにしていましたが、今回は持っているお金やスキル、もっている薬草の数など何でも見れます。このひとは薬草かいまくってすすめてるなーとかがわかります。

やりたいことが明確になった後は早いもので、盆明けから開発をスタートして3か月程度でほぼ動くところまで完成しました。平日の夜少しと週末のみの開発です。この時点で100時間程度だったでしょうか。

このあと広告などの組み込みや調整をぎりぎりまで行いました。結果的に150時間程度まで膨れ上がったと思います。毎日8時間開発できたら一か月で開発できることになりますか。

前作は80時間で最初にリリースしましたが、出来上がっていったシステムはその後のバージョンアップによるものが多く、ダンジョンの数も最初は5つだけでした。今作はダンジョンの数は7つありますので、システムとあわせて妥当な線でしょうか。規模は抑えたと思います。

技術的なこと

開発は1回目、2回目、3回目ともにIDEはNetBeansのみです。

1回目はNetBeans+GWT4NBプラグインで開発していました。いつも通りのmixiアプリと同じですね。

2回目、3回目はNetBeans+NBAndroidプラグインで開発しました。

サーバー側はいつも通りJAX-RS、Jersey2で実装です。

運用側はAWSのBeanstalk+DynamoDB+S3です。男らしく3年ヘビーリザーブです。


Androidの開発を常にエミュや実機で開発となると工数が大幅にかかります。そこで共通の描画やサウンド、タッチイベントなどのレイヤーを作り、そこでゲーム自体のコードは100%共通としました。1行たりともPC版とAndroid版と違いはありません。


https://shinsan.s3.amazonaws.com/diary/2014/0127-02.png

PC版。BGMも効果音もなる。おそらくMacやLinuxでもそのまま動く。


2回目までと違い、3回目の開発では描画もOpenGLにしてAndroidとPC(Java+JOGL)とで共通としました。

共通レイヤーを作って作るというのはmixiアプリ第2弾のPONPONと同様ですね。あちらはPC側はSwing+Java2D、Web側の描画&サウンドエンジンはFlash、ゲーム部分はGWTによる100%共通部分をJavascript化で、ロジックは一切Flashにもたないという変態アーキでしたのでアレに比べると難易度ははるかに低いと思います。



そのほか今回注意したのはバナー広告を間違ってタップしないようにすること。バナー広告やアイコン広告をメイン画面から離すようにしました。

また、縦持ちで、画面上のステータスエリアを常に表示するようにすること。フルスクリーンのほうが楽ではありますが、やはりながらプレイは時間や電池、お知らせの表示などをしたままのほうがいいと思いました。スマホのゲームは限りなく100%に近いくらいフルスクリーンでのプレイとなります。そのせいで現在の時間やバッテリなどを確認するためにホームボタンを押すというのはやはり使いにくいと常におもっていましたので。

利用できる画面は狭くなりますが、この考え方は基本変わらないでしょう。


ダウンロードはこちらから。