Č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)
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)
仙台広瀬川ワイルド系ワーキングマザー社長 (feed)
nidoの雑記 (feed)
忘備録1.0 (feed)
ryopeiの日記 (feed)
試行錯誤と創意工夫(S!アプリ開発日記+α) (feed)
しんさんの出張所 はてな編 (feed)
やさしいデスマーチ (feed)
ささくれ、深爪、口内炎。 (feed)
Tomute’s Notes (feed)
じゃばてないわーニュージーランド地獄篇 (feed)
torutkの日記 (feed)
仙台Rails牛タン社長 (feed)
Servlet Garden @はてな (feed)
草木のにをいに誘われた (feed)
Happy my life » 検索結果: » netbeans (feed)
ねこび~ん (feed)
へびのぬけがら (feed)
Where's my Blog?!

Powered by:    Planet

Last updated:
July 23, 2014 10:18 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
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%に近いくらいフルスクリーンでのプレイとなります。そのせいで現在の時間やバッテリなどを確認するためにホームボタンを押すというのはやはり使いにくいと常におもっていましたので。

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


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

へびのぬけがら - January 19, 2014 01:33 AM
NetBeans と RoboVM で iOS アプリ開発(Gradle 編)

前回に引き続き、 NetBeans と RoboVM で iOS アプリ開発を行う方法についてです
今回は Gradle を使用した開発を紹介します
Gradle プラグインは公式では提供されていませんので、拙作のプラグインを利用します
使用する環境は以下の通りです

OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)

まず、使用する環境に Gradle をインストールします
以下の例では、 Homebrew を使用してインストールを行っています

$ brew install gradle


次に NetBeans に Gradle Support プラグインをインストールします


拙作のサンプルアプリケーションのリポジトリを clone します
このサンプルアプリケーションは、公式のサンプルアプリケーションを Gradle 対応に変更したプロジェクトになります


clone 後、 Gradle wrapper を利用するため、プロジェクトのプロパティを開き、以下のように「Gradle home」のフィールドを空白に設定します


設定後、実際に動かしてみます
Gradle プラグインのタスクは下記の通りになっています
  1. launchIPhoneSimulator … iPhone シミュレータにて実行
  2. launchIPadSimulator … iPad シミュレータにて実行
  3. launchIOSDevice … 実機にて実行(要プロビジョニング済)
  4. createIPA … ipa ファイル生成
今回は Maven プラグインのときと同様に iPhone シミュレータにて実行します
プロジェクトのコンテキストメニューから「Tasks」>「launchIPhoneSimulator」を実行します


初回実行時はビルドに時間が掛かりますが、完了後以下のように iPhone シミュレータが起動します


Maven 、 Gradle を利用した RoboVM による iOS アプリケーション開発ということで前回、今回と紹介してきました
今後、 RoboVM についてより詳しい紹介を行えたらと思います

torutkの日記 - January 19, 2014 12:00 AM
[Git]ソースコード管理ツールをSubversionからGitへ変更して感じたこと

少人数チームでのソフトウェア開発でソースコードを管理するリポジトリにGitを適用して1,2ヶ月ほど経過しました。Gitを開発に使用するのは今回が始めてで、みなSubversionを使っていたメンバーです。 開発環境 OS Linux、たまにWindows 開発言語 Java プログラミングツール NetBeans 7.4 Gitクライアント NetBeans標準搭載のGit機能、たまにコマンドライン、WindowsではたまにTortoiseGit Gitサーバーapacheでgit-http- ...

へびのぬけがら - January 18, 2014 01:31 AM
NetBeans と RoboVM で iOS アプリ開発(Maven 編)

NetBeans と RoboVM で iOS アプリ開発を行う方法について紹介します

まず、 RoboVM についてですが、 Java にて iOS 用ネイティブアプリケーションを作成することができるコンパイラ、およびライブラリとなります
(詳細は公式ページ等を参照ください)

RoboVM コミュニティでは上述のコンパイラ、ライブラリに加え、 Maven 用プラグイン、 Eclipse 用プラグインが配布されていますが、残念ながらNetBeans 用プラグインはありません
NetBeans にて RoboVM を利用するにはいくつか方法がありますが、 Maven プラグインを使用する方法が最も簡単かと思います

Maven プラグインの使い方を、サンプルアプリケーションを使って解説します
使用する環境は以下の通りです

OS: Mac OS X 10.9.1
Xcode: 5.0.2
NetBeans: 7.4 (Build 201310111528)


まず、 github にある RoboVM サンプルアプリケーションのリポジトリを cloneします
clone 後、最新の RoboVM 、 Maven プラグインを利用するために pom.xml を編集します
2014年1月18日現在、最新の RoboVM のバージョンは "0.0.8"、 Maven プラグインのバージョンは "0.0.8.1"になるので、以下の2カ所を修正します
<plugin>
  <groupId>org.robovm</groupId>
  <artifactId>robovm-maven-plugin</artifactId>
  <version>0.0.8.1</version>
  <configuration>
    <config>
      <mainClass>org.robovm.sample.ios.RoboVMSampleIOSApp</mainClass>
      <os>ios</os>
      <arch>x86</arch>
    </config>
  </configuration>
</plugin>

<dependency&gt
  <groupId>org.robovm</groupId>
  <artifactId>robovm-rt</artifactId>
  <version>0.0.8</version>
</dependency>
<dependency>
  <groupId>org.robovm</groupId>
  <artifactId>robovm-cocoatouch</artifactId>
  <version>0.0.8</version>
</dependency>

設定後、実際に動かしてみます
Maven プラグインのゴールは下記の通りになっています
  1. robovm:iphone-sim … iPhone シミュレータにて実行
  2. robovm:ipad-sim … iPad シミュレータにて実行
  3. robovm:ios-device … 実機にて実行(要プロビジョニング済)
  4. robovm:create-ipa … ipa ファイル生成
今回は iPhone シミュレータにて実行します
コンテキストメニューより「カスタム」>「ゴール...」を選択します


表示されたウィンドウにて、"robovm:iphone-sim" を入力し、「OK」ボタンをクリックします


初回実行時はビルドに時間が掛かりますが、完了後以下のように iPhone シミュレータが起動します


RoboVM はまだ開発途上のプロダクトですが、ゲーム開発などパフォーマンスが要求されるような場面でも十分に使用できるレベルまでになっていると思います
Java + RoboVM + NetBeans にて iOS アプリケーション開発に挑戦してみてはいかがでしょうか

torutkの日記 - January 16, 2014 12:00 AM
[Java]Java SE 7u51, Java SE 8 b123, NetBeans 8.0 Betaなど

今週はいろいろリリースがありました。 Java SE 7 update51 ダウンロードサイト http://www.oracle.com/technetwork/java/javase/downloads/index.html Oracle Blog日本語まとめ「Java SE 7 Update 51 Released」 http://orablogs-jp.blogspot.jp/2014/01/java-se-7-update-51-released.html デフォルトのセキュリティレベル( ...

torutkの日記 - December 16, 2013 12:00 AM
[Java][JavaFX]JavaFXの自動テストツールTestFXを始める第1歩

JavaFX Advent Calendar 2013の16日目のエントリーです。 前日のエントリーはYasuyuki Fukaiさんの3D初心者がJavaFXの3Dを使い初めてみた。 : 人生、気合いと具合 - blog、翌日のエントリーはpeko_kunさんです。 はじめに GUIの部分をユニットテストしようとすると、通常は人がGUIを操作して結果を判定するので、ロジックのユニットテストのように自動化することが困難です。 JavaのSwingでは、FEST-SwingというGUI自動化テストツー ...

uyota 匠の一手 - November 19, 2013 06:39 AM
FreeBSD で OpenJDK の日本語を設定

FreeBSD の Java は openjdk になっていた。現在のシステムは、8.4-RELEASE。インストールしたそのままでは日本語が使えない。いわゆる豆腐になる。

まずは、FreeBSD 上の Java で日本語が文字化けで行った fallback を試してみた。しかし、□のまま。そこで、fontconfig を用いた設定を試みる。以前の手順の fontconfig を試したが、相変わらずうまくいかない。もう少し調べると、どうもファイル名が違うのと、フォントのパスが違うのが原因のようだ。

まずは、fontconfig.properties には、アーキテクチャの名前が入るみたいだ。FreeBSD では openjdk6 が /usr/local に入る。その中の jre/lib 内で fontconfig.FreeBSD.properties を設定する。


$ cp /usr/local/openjdk6/jre/lib/fontconfig.properties.src /usr/local/openjdk6/jre/lib/fontconfig.FreeBSD.properties
$ diff -u fontconfig.properties.src fontconfig.FreeBSD.properties
--- fontconfig.properties.src   2013-11-16 23:19:06.000000000 -0500
+++ fontconfig.FreeBSD.properties       2013-11-19 01:34:04.000000000 -0500
@@ -180,8 +180,8 @@
 filename.DejaVu_Serif_Oblique=/usr/local/lib/X11/fonts/dejavu/DejaVuSerif-Oblique.ttf
 filename.DejaVu_Serif_Bold_Oblique=/usr/local/lib/X11/fonts/dejavu/DejaVuSerif-BoldOblique.ttf
 
-filename.Sazanami_Gothic=/usr/local/lib/X11/fonts/TTF/sazanami-gothic.ttf
-filename.Sazanami_Mincho=/usr/local/lib/X11/fonts/TTF/sazanami-mincho.ttf
+filename.Sazanami_Gothic=/usr/local/lib/X11/fonts/OTF/ipag.otf
+filename.Sazanami_Mincho=/usr/local/lib/X11/fonts/OTF/ipam.otf
 filename.AR_PL_UMing=/usr/local/lib/X11/fonts/TrueType/uming.ttc
 filename.AR_PL_UKai=/usr/local/lib/X11/fonts/TrueType/ukai.ttc
 filename.UnDotum=/usr/local/lib/X11/fonts/unfonts-core/UnDotum.ttf

そして、Sazanami と設定されているフォントだが、現在の FreeBSD では入れられないようだ。これを japanese/font-ipa に設定する。

これで、NetBeans は日本語で起動した。NetBeans で utf8 の XML を読み込んで、表示してみたがコンソールにも日本語が正しく表示されている。

前々回前回

uyota 匠の一手 - November 18, 2013 04:15 AM
FreeBSD の Java は openjdk

久しぶりに NetBean で Java を使おうと思ったら、NetBean がインストールされていなかった。長いこと使っていなかったので消してしまっていたらしい。そして、Java もどの実装が現役なのだか。古いものだが四つ入っている。


% ls -d /usr/local/*jdk*
/usr/local/diablo-jdk1.5.0      /usr/local/jdk1.5.0
/usr/local/diablo-jdk1.6.0      /usr/local/jdk1.6.0

さて、make install で引っ張られてくるのは openjdk だった。FreeBSD Java Project: How To Install によると、OpenJDK が現在の公式の Java サポートみたいだ。

OpenJDK は以前の Java の様に自分でダウンロードをしておかなくても良いみたいだ。文句を言われてから取りに行こうと思って、おもむろに make install を叩いたが、そのまま無事に終了してしまった。

もう一つ。8.4 RELEASE 時の ports を使っているが、「Enable Legacy Debugging Support」を使って i386 上ではコンパイルエラーが発生した。これを無効にしてコンパイルを再度始めたところ、今度は問題なく終了できた。メモリが 4GB あると tmpfs を使って、OpenJDK をメモリ上だけでコンパイルとインストールできる。IO が省けて速くなる。

NetBeans 7.3 がデフォルトで、 NetBeans 6.1 の ports もあった。どちらともインストールするだけで動いた。ワークスペースの情報が引き継がれないみたいで、7.3 ではプロジェクトが空っぽだった。

前回次回

torutkの日記 - November 09, 2013 12:00 AM
[Java]JJUG CCC 2013 Fallに参加してきました #jjug_ccc

本日、日本Javaユーザーグループ(JJUG:Japan Java User Group)主催のJJUG CCC 2013 Fall*1に参加してきました。 http://www.java-users.jp/?page_id=695 午前中は基調講演2つ、午後は公募で採択された技術セッション、ハンズオンから構成されています。ユーザーグループ主催なので費用は無料です。 午前中は、子供の学校のイベントがあったので2つ目の講演から少々遅れて参加しました。夕方までのセッションは同じ時間帯に複数聴きたいものがあ ...

torutkの日記 - November 03, 2013 12:00 AM
[C#][.NET]アプリケーション開発と保守における考慮事項

先日社内でJavaOneサンフランシスコ参加報告を行った際に、なぜかJavaと.NET Frameworkの違いについての質問を多々受けました。質問は過去に開発したソフトウェアを再利用する場合の互換性などで、Javaについては1996年来からウォッチしていたので回答できますが、.NET Frameworkは過去に一時期技術調査をしたことしかないので、補足調査をしてみました。 なお、調査にあたり念頭においているのはエンタープライズ向けシステムに搭載するアプリケーションソフトウェアの開発で、デスクトップ側 ...

torutkの日記 - October 19, 2013 12:00 AM
[Java]JavaOne 2013 サンフランシスコ報告会 Tokyo参加&LT発表

本日は、JJUG&Javaカンファレンス主催の「JavaOne 2013 サンフランシスコ報告会 Tokyo」がオラクル青山センターで開催されました。 http://www.java-users.jp/?p=682 JavaOne参加者のLT発表枠で発表してきました。発表スライドは次です。 http://www.slideshare.net/torutk/java-one-2013-sf-lt 発表の中で動かしたデモはJavaFX 3Dで作成しました。作成の経緯は次の日記から辿れるWikiに詳しく記 ...

marsのメモ - October 13, 2013 01:25 PM
[life] TDDBC(TDD Boot Camp)仙台03に参加してきた

TDD Boot Camp(TDDBC) - TDDBC仙台03/課題

TDD Boot Camp(TDDBC) - TDDBC仙台03/課題用語集

TDDBC 仙台 the 3rd #tddbc のまとめ - Togetterまとめ

去年の感想はこちら。→ TDDBC(TDD Boot Camp)仙台02に参加してきた - marsのメモ


またの名を「 @ 無双レビュー大会」。今年もTA(Teaching Assistant)枠で参加したんですが、普通に一般参加者としてペアプロしてました。実を言うと受講者枠で参加したのは今回が初めて、TAだったのキレイさっぱり忘れてTDDBCを楽しませて頂きました。


毎度の事ながら主催およびスタッフのみなさん、一般参加された方々、おつかれさまでした&ありがとうございました。


基調講演 in 杜王町

3年続けて同じ事言ってた。


ペアプロのデモ

@ と @ という鬼軍曹×新兵コンビによる @ 公開処刑劇場。leecomお疲れ様ッ!!

個人的には、Java+Eclipseのライブデモは定番過ぎるのでは、たまには他の言語やIDEのパターンも見てみたいなと。


ブートキャンプ実施

課題は「整数の区間」。今回TAやってないんでコードレビューんときの発表内容からの推測なんだけど、チーム訳と開発環境はこんな感じだった(去年に続きNetBeansはゼロ!)。

#1JavaEclipseJUnit4hamcrest使用
#2JavaEclipseJUnit4hamcrest使用
#3PythonPyChampytest 
#4Python 
#5GroovyEclipseSpockプロダクトコードはJava
#6GroovyIntelliJSpockプロダクトコードはGroovy→Kotlin
#7Objective-CXcode 
#8RubySublime Textrspec 
#9PHPvimphpunit途中までEC2で開発してたらしい
#10C#Visual Studio 

去年は6組で半分はJava+Eclipse組だった事を思うと、今年の組み合わせは多彩だなぁと。あとMacBook率が高かった印象ある。この1年でなにがあったんだ?と思うほどの変化で隔世の感がありますなぁ。


ちなみに私は #6 のGroovyペアで参加してました。開発環境どうしようかってペアの方と話をしていたら「実はIntelliJ興味あるんです」とおっしゃっていたので『じゃあ、Community版でいいのでダウンロードしといてください』と。普段からGrailsやSpock使っているようで「正直TA要らないな」というレベルの方でしたので「IntelliJ接待モード」でどっちか言うとIntelliJの使い方をナビゲートしてました。:-)

#こちらはこちらでSpockの使い方教えてもらって大変ありがたかったです。


1回目のコードレビューで一段落した頃に、今度は「ちょっとKotlin使ってみたいんですよ」とおっしゃるので『じゃあ、プラグイン入れますか』と。Kotlinのテスティングフレームワークに心当たりが無かったので、テストコードはSpockのままプロダクトコードをGroovyからKotlinに差し替えてました。


みんなが課題を進める中、なぜかウチのペアは「言語をより良い(?)ものに変える」という大胆なリファクタリングを行っていたわけです。Kotlinの流儀はよくわかってないけど、ちょっとでもKotlinかじってたおかげて挫折すること無く、基本の課題はすべてクリアすることができました。


他のペアでも見かけましたが、ウチのペアは課題開始時点からGithubにプロジェクトを作り、PCを共有してペアを交代するのではなく、ペア交代のたびにcommit & push, pull & mergeをしてコードを共有してました。去年、TAやってたとき、みんなバージョニングしないでどんどん課題を進めていくのがスゴく気になっていただけに、今回半分くらいはGithubを使ってたみたいで、またしても隔世の感をひとり噛みしめたのでありました。


Githubのプロジェクトはこちらです。→ masanobuimai/groovy_spock ? GitHub


二人ともIntelliJを使っていたので、ビルドスクリプトなどは作らずIntelliJのプロジェクト管理情報ごと共有してました。実はそこに密かな企みがあって、IntelliJでチーム開発する機会なんて滅多にないので、普通にこの辺を共有するどどんな感じなるのか体験させてもらいました(おかげで良いネタ仕込ませて頂きましたよ。


コードレビュー大会

これが全てを物語っとりますわ。


(追記)これでおわかりいただけだろうか。

\シアーハートアタック!!!/


所感

実際にコード書くとなおさら実感するんだけど、仕事で作るコードはJavaじゃないほうが良くないか?と改めて思った(特にJVM系)。Groovyは柔らか過ぎるけどテストコードだったら別にいいんじゃないかとか(SpockはGroovyと言って良いのか疑問は残るけどw)。Kotlinはマイナー過ぎるやろ、というならScalaだってあるし。


なにより、JavaもScalaもKotlinもGroovyもまぜこぜにしたってちゃんと開発できるんだから。

そうIntelliJならね。(・ω<)

torutkの日記 - September 26, 2013 12:00 AM
[Java]JavaOne 2013 SF(09-25)

JavaOne 2013 SFの4日目(セッション3日目)です。概要だけ書いた暫定版です。 昨日はセッションが21:00過ぎまであって宿に戻ったのが22:00、ブログ(暫定)を書いたり翌日のセッションを確認したりと遅くなり、睡眠不足での参加です。 本日聴講したセッションは次です。 Java in Real-Time Secure Mission-Critical Applications (8:30-9:30) Garbage-First Garbage Collector: Migratio ...

torutkの日記 - September 25, 2013 12:00 AM
[Java]JavaOne 2013 SF(09-24)

JavaOneの3日目(セッション2日目)(暫定版)です。 今日は、朝8:30から夜21:00過ぎまで長い1日でした。 本日聴講したセッション一覧は次です。 The JavaFX API’s Synergy with JavaFX 3D (8:30-9:30) Integrating JavaFX with Native Technologies (10:00-11:00) The Modular Java Platform and Project Jigsaw (11:30-12:30) ...

torutkの日記 - September 23, 2013 12:00 AM
[Java]JavaOne 2013 SF(09-22)

8月末に急遽JavaOne SFに参加する話が持ち上がり、翌週会社から費用負担がOKとなってバタバタ準備を開始しました。 海外のカンファレンス系に参加するのは初ですし、海外出張も初です(個人で海外旅行はいろいろいっており、サンフランシスコは3度目です)。 事前準備 パスポート、ESTA(電子渡航承認システム) アメリカに渡航するのに必要です。ESTAは有効期限2年間で昨年申請したものが有効期限内なので今回は申請せずに済みました。 航空機・宿泊の確保 9月にはいってから航空機と宿の確保に走りまし ...

torutkの日記 - July 22, 2013 12:00 AM
[Java]JJUGナイトセミナー「インサイド・ラムダ」

本日はJJUG主催のナイトセミナー「Inside Lambda」が開催されました。 http://kokucheese.com/event/index/101955/ 内容は2部構成で、目玉はJavaのラムダ式が裏でinvokedynamicを使っている件について「ラムダとinvokedynamicの蜜月」の題名で宮川拓さんの講演、そしてその前の時間にラムダ理解の導入として「Project Lambdaの基礎」の題名で櫻庭祐一さんの講演がありました。 「Project Lambdaの基礎」 http ...

marsのメモ - July 14, 2013 01:46 PM
[life][IDEA] レッツゴーデベロッパー変真に行ってこなかった

http://tohoku-dev.jp/modules/news/article.php?storyid=207


当日は予定が入っていたので前夜祭と打ち上げにだけ参加してきた。ヒゲの人イケメンさんが来仙するというので「すわ!JetBrainsの宣伝しないとッ!!」と片っ端から紹介していった。


自分自身が地元でなーんも宣伝してないので「お前が言うな」状態なんだけど、予想通りというか予想外というか、ほとんどの人がIntelliJもReSharperも知らなかった。JavaやAndroidについては予想通りEclipse無双。あと結構iOSデベロッパーもいらっしゃいましたがXcode無双だった。:-)


ヒゲメンイケメンさんや他の人と話して、普及のため(?)の要望が多いのは、つぎの2点だったように思う。どれもホントにやっても普及促進効果があるの?というと微妙なところが玉に瑕。

  1. 日本語化
    • よくあるけど、昔やって失敗した黒歴史もある。何より準備するリソースが膨大なので割に合うのかよーわからん。
    • 実際、今でも英語圏以外でも売れてるみたいだけど、ローカライズ版は出てない。
  2. 教育
    • デモやってくれとか、ハンズアウトセミナーやってくれとか。マンパワーかかるし、難しいよね。
  3. ヘルプデスク
    • ハンズアウトがダメでも日本語でサポート受けたいよねぇとか。マンパワーかかるし、難しいよね。

(NetBeansはともかく)Eclipseは最初の「日本語化」だけで、十分なシェアを獲得したからねぇ。何よりかにより「タダであること」が強みなんだろなと。ちなみに、.NET屋さんはVisual StudioのおかげかJava屋さんより開発環境に金を出すことに抵抗がないらしい。あとReSharperがVSのアドオンってのも、既存環境を変えない(VSのままで良い)とい点で抵抗が少ないそうな。


ps.

仙台に居る人はある程度まで私がサポートしてあげれるので、欲しいなと思った人はサムライズムにじゃんじゃん発注するといいよッ!

ねこび~ん - June 26, 2013 09:37 AM
グッズ売上げを義援金として寄付させていただきました

東北を応援しよう!

ねこび〜んグッズで売上げた利益を
そのまま義援金として寄付させていただきました。

東北デベロッパーズコミュニティ設立総会を機に生まれたねこび〜ん。
少しでも恩返しできれば...と思います。

しんさんの出張所 はてな編 - June 14, 2013 12:00 AM
[ソフトウェア技術][NetBeans][Java]JavaEE 7 超入門 8クリックでEE7Webアプリ?起動確認とか

なにが「超入門」かというとおいらにとって超入門。

まずはJavEE7なアプリを起動させることを今回の目標にする。

サンプルは過去の例を見ても大げさすぎて、でかすぎて把握しにくいので無視で。

適当にフィーリングで行き当たりばったりでいい。JavaEEとはそういう感じのゆるい誰でもお気楽極楽に触れるものですよ。肩ひじ張るようなものではない。

しかし、「NetBeansタグ」すげー久々だのう。


ダウンロード

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

https://netbeans.org/downloads/

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-01.png

JavaEEをえらぶ。このへん。


インストール

ダブルクリックでインストーラ起動。適当に押していけばOK。Glassfish 4もついてくるのでチェックを外さないように。

別途ダウンロードする必要もないのでインストーラ版がおすすめ。ダウンロードもIDE上で完成するので別にいいけど。

とにかくすぐに確認ができるのでNetBeansを常用はするつもりはないけどどんなものか知りたい人はこちらで。


起動

インストールしたアイコンをダブルクリックで立ち上げよう。

起動時に旧バージョンのNetBeansがあると設定を引き継ぐが、その場合、Glassfish4が追加されていないため、お手軽に試したい場合は設定を引き継がないほうがいいかも。

たぶんNetBeans 7.3.1のバグ。速攻でバグを踏むのもお約束。


プロジェクト作成

プロジェクトを作成する。

アイコンは右上のこのへんにあるのでクリック。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-02.png


ウィザードが立ち上がったら以下の順序でクリック。

  • 「カテゴリ」に「Java Web」
  • 「プロジェクト」に「Webアプリケーション」
  • 「次」ボタン

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-03.png


パスとプロジェクト名を入力して「次」ボタンクリック。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-04.png


Glassfish 4 とJavaEE 7が設定されているのを確認して 「次」をクリック。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-05.png


フレームワークは特別何も設定しないでよい。あとでも設定できるため。「終了」をクリック。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-06.png

これでプロジェクトの新規作成はおわり。


実行

上にある緑色の再生ボタンをクリック。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-07.png


ブラウザが自動で立ち上がり、表示する。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-08.png

NetBeansを立ち上げてから8クリックだけで新規作成からGlassfish4上でのJavaEE稼働の確認までできたわけだ。


EE7なの?

たしかにログはGlassfishが立ち上がっていることはわかるが、表示しているのがHTMLでぜんぜんEE7って感じがしない。

実はGlassfish 3とかTomcatじゃないの?といわれても仕方がないレベル。

というわけで、index.htmlを消して以下のようにJSPを書いてみる。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-09.png

うん、ちゃんとラムダ式も補完きくね。

ちなみに「<c:」とうつとtaglib設定してくれるんでまぁ楽。

    <body>
        合計=<c:out value="${[4,3,1,2].stream().sum()}" />
    </body>

ブラウザのリロード。JSPの変更程度はもちろん再デプロイは必要ない。

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-10.png

JavaEE 7ではJavaSE 8より一足お先にラムダがかけるw


ここでネタに走ってStrutsでラムダを書く・・・とおもったけど、みんなやってると思うのでやめておく。

プロジェクトを右クリックして「プロパティ」を選んで、フレームワーク>追加>Strutsとやるとライブラリも設定ファイルも全部初期設定してくれるんで、やりたい人はそこから始めるとよいだろう。


いまいち定数を合計しても面白くないのでBeansを作ってそれをアクセスしてみるか。

package bean;

public class HogeArray {
    private int[] array = {2,1,4,3,5};

    public int[] getArray() {
        return array;
    }
}

とつくっておいて

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="hoge" scope="page" class="bean.HogeArray"/>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        合計=<c:out value="${hoge.array.stream().sum()}" />
    </body>
</html>

これでJavaコードから配列をもらってEL側で合計されているのがわかる。

もちろんソートもできる。

    <body>
        合計=<c:out value="${hoge.array.stream().sum()}" />
        <hr>
        <c:forEach items="${hoge.array.stream().sorted().iterator()}" var="row">
            <div><c:out value="${row}"/></div>
        </c:forEach>
    </body>

実行

https://s3-ap-northeast-1.amazonaws.com/shinsan/diary/2013/0613-11.png

ちゃんとソートもされてるね。


ラムダの例。フィルタで奇数のものだけ処理してる。

    <body>
        合計=<c:out value="${hoge.array.stream().filter((num)->num%2==1).sum()}" />
        <hr>
        <c:forEach items="${hoge.array.stream().filter((num)->num%2==1).sorted().iterator()}" var="row">
            <div><c:out value="${row}"/></div>
        </c:forEach>
    </body>

まずはいろいろと遊んでみるといいかもですね。

marsのメモ - May 17, 2013 01:39 PM
[IDEA][life] Java Day Tokyo 2013でIDEバトルやってきました

https://oj-events.jp/public/application/add/64


血で血を洗う勝者なき闘い!!...なんてことはなく,和気藹々とやりましたよ。

こんな面白い企画に誘って頂き関係者の皆さん(&出張扱いにしてくれた弊社)には感謝です。こんな場所で話せるほどIntelliJがメジャーになったと思うと感慨深いものがありますね。


みんな気付いているけど,これが真実だよね。

そんでもご贔屓のツールについて語るのも聴くのも楽しいんだからしょうがない。:-)


当日モデレータとグルになった広報活動では伝えきれなかった点について若干補足しときます。IntelliJの特徴で伝え損ねたのですが,これの最大の特徴は,これだと思ってます。

基本的なコンセプトは,使う人が 『いろいろ』 知ってる前提でサポートするIDEで、
やりたいことが,よく知らなくても何とかしてくれる系ではないです

EclipseのCtrl+2みたいな「これだけ知ってれば何とかなる」みたいな機能は少なめですし,NetBeansのように「細けぇ事は気にするな」的なお手軽さはありません。「なんでもしてやるから指示しな」「ダメだったら文句言ってやる」となかなかスパルタンなところがあります。(´・ω・`)

裏を返すと,やりたいことがハッキリしてれば,その手順を邪魔しないし,絶妙なアシストをしてくれます。そんなIDEですが,クセが強いのであわない人はあわないだろうな...。


テキストエディタと異なるIDEのメリットについては,きしださんがキレイにまとめてくれました。


FindBugsやCheckstyleあたりをうまいこと使えばテキストエディタでも似たような事はできますが,シームレスさに置いてはIDEに軍配があがると思います。テキストエディタより動作が重くなる理由のひとつでもあるんだから,そこは認めとこう。

この手のお節介機能については,IntelliJも負けてないんだけど,頑張りすぎて項目が膨大になり互いに矛盾するものもあって,使いこなすのは結構ちょっと大変。IntelliJ(Hectorおじさん)に指摘されたことを盲目的に信じずに「これは直す」「これはいいや」と取捨選択できないとうっとうしいだけだろな。

24日目 Inspections & Intentions - marsのメモ


ps.

今までほとんどIntelliJユーザに遭遇したことがなかったので行くまで「IntelliJが流行ってるとかガセ」と思ってたら違ってた。東京すごい。

あとtwitterでしかあったことがない皆さま方も実在してた。現実すごい。


(゜Д゜)ハッ!! これが「深淵をのぞく時、深淵もまたこちらをのぞいているのだ。」と言うことか...。

torutkの日記 - May 04, 2013 12:00 AM
[Java]自宅PC(Windows)のJava環境メモ(JDK7/JDK8, NetBeans IDE)

JDK(Java SE 開発キット) 自宅PC(Windows 8 64bit)のJDKを、Java SE 7 u21にアップデートしました。OSは64bit版ですが、JDKは32bit版と64bit版の両方をインストールしています。Javaで書かれたプログラム(クラスファイル)だけなら64bit版Javaだけインストールしていれば動きますが、ネイティブコードを伴うプログラムは32bit版ネイティブコードの場合32bit版Javaが必要になるので両方をインストールしています。 次に、Java SE ...

marsのメモ - April 21, 2013 08:47 AM
[IDEA][mac] Dash LauncherプラグインをIntelliJにインストールする

APIリファレンス&スニペットブラウザのDashなんですが、設定見るとAppCodeと連携できるようです(NetBeansはありませんね...。|ω・`)チラッチラッ

f:id:masanobuimai:20130421173741p:image

Mac App Store - Dash (Docs & Snippets)


調べてみると、AppCodeのプラグインとして提供しているようだったので、ものは試しとIntelliJに入れてみたらアッサリ動いた。やったことと言えば、"Tools->Search in Dash"の割り当てキーが「ctrl+SHIFT+D」で既存のキーマップと競合していたので、こっちを優先してあげたくらい。

f:id:masanobuimai:20130421173038p:image


たぶん、これIntelliJ以外のJetBrains系IDEでも動くよね。DashのAppCode用プラグインは、Githubのプロジェクト内にある(Dash.jar)ので、それを取ってきてインストールするだけでよい。

Page not found · GitHub


docset指定したり、もうちょっと使いやすくする余地はありそうなんだけど、それよりもDashのWindows版が欲しいです。:-)

marsのメモ - March 26, 2013 02:10 PM
[memo] JDKのバージョンアップポリシーについて

長いだけでオチは無いよ。


「Java6がサポート切れた」だの「秋にはJava8が出る」だのとJavaのバージョンアップキャンペーンっぽい話題をちらほら聞きますよね。実際、保守しているシステムも、やれハードウェアの老朽化だ、OSやミドルウェアの保守切れだ、とかいう理由で否応なしにJVMのバージョンアップをするハメになりますよね。でもコンパイラ(JDK)のバージョンアップってどうしてるんですかね?


JVMはそれを必要とするミドルウェア(大抵はAPサーバですわな)がサポートしてないって大義名分があるので、Java5だJava6だと定期的にバージョンアップしてくんだけど、その上で動いているシステム(まあ業務アプリだわな)のコンパイラ(JDK)まで気にしてるって話は意外なほど聞かないのよね。


んで、どうしてるかというと、何もしない。いわゆるSI業界では、ソフトウェアは「やわらかいモノ」ではなく「モロいモノ」という扱いなので「寝た子は起こすな」が鉄則なので、要らんことはしない。したがって、JDK1.4が主流だった時に作成したシステムは2013年になった今でもJDK1.4でコンパイルしているのが普通...なんだと思うのデスよ。

え?そんな古いJDKどっから手に入れるかって?抜け目の無いプロジェクトは、保守に必要な環境をインストーラごと保管しているので、そんな心配はご無用さ。:-)

システムを構築した業態・業界にもよると思うんですが、業務システムって想像以上に長生きで、2000年あたりに新規構築したシステムが今でも現役なんて珍しくないですよね(と誰とは無く。


「JDKは据え置き」が果たしていいのか?というと悪いとも思うし、良いとも思う。つまるところ、そのプロジェクトなり会社なりのバージョンアップポリシー如何なんだけど、実際は前述の通り「何かあったら怖いから現状のままにしてる」が多数派なんじゃなかろうかと。なんで「ウチはこれこれ、こうゆう理由で、こんな対応してるよ」って事例があったら、それによろこんで倣うと思うんですよね。それがある程度の権威がある事例だったらなおさら。:-P


そうは言っても、選択肢は多くは無くて、やる事と言ったら

  1. JDKのバージョンは塩漬けのまま変えない
  2. JDKもバージョンアップするJVMと同じバージョンにあわせる

くらいかと。後者(JDKもバージョンアップ)を選ぶ理由のわかりやすい例は「JDKだってサポートプラットフォームがあるんだぞ」ってヤツ。今でもWindowsXPで開発してるところはあるけど、だいたいWindows7使ってるところもあるよね。で、仮にJDK1.4を使うとして、それがWindows7をサポートしてるか?っていったら、そんなワケないですよね。

正直、JDKのサポートプラットフォームなんて「細けぇこたぁどうでも良いんだ」と思うのだけど寝た子を起こすな哲学は長いものに巻かれろ哲学と互換性があるので、何かあっても文句言えるところを確保するってのも立派な理由のひとつですわな。


じゃあ、JDKもいっしょにバージョンアップするとした場合、どんなパターンが考えられるか。


JDKだけバージョンアップしてコンパイルする

大抵、これでしょうね。多少、警告が出ると思うけど見なかったことにして、ほとんど何もしないで完了する。運が悪いと、次の理由でコードを修正することになるけどね。

  • 変数名とかが新しいJDKで採用された予約語と被った
    • assertが被るって事はそうそう無いけど、enumはありそう。:-)
  • JDKのAPIを独自拡張してるクラスが、JDK側のAPIの追加・非推奨化の影響を受けた
    • 継承したり委譲してたりしてたJDKのAPIが増えた・減った場合ですね。これはフレームワークとかユーティリティを自作してると直面しそうですね。

JDKのバージョンアップに伴い、ソースコードもそのJDKの特徴にあわせて修正する

たとえばJDK1.4からJDK5以上にしたから、ついでにソースコードにも手を加えて、拡張forやオートボクシング、ジェネリクスといった特徴を取り込もうってヤツです。普通の発想だったらまずやりませんよね、こんなことw

個人的には、この手(ミドルウェアの更新みたいな)バージョンアップは4〜5年に1回の割合でしか起きないので、これくらいの無難な変更を全体に行うことで保守要員の育成にもなるんじゃないかなって思うんですよね。なんですかね、伊勢神宮方式とでも言いますかね。

ただ現実問題、

  • そんな広範囲に手を加えるためのコストが捻出できない
  • 無難な修正といってもデグレードを起こす可能性はある

などの理由で、これが採用されることはないだろうなと思ってます(そんな話を聞いた試しもない。:-P


そんわけで、JDKは据え置き/運が良くてJVMと同じバージョンのJDKを使うけどソースコードは必要最低限しか弄らないのどっちかだろなと。ただ後者(JDKもバージョンアップ)を選択した場合、その後の保守でソースコードに手を加えるときはどうすんだ?って疑問が残るのですよ。


つまり「元はJDK1.4で作ったソースコードだけど、今はJDK7でコンパイルしてる」なーんて状況で、何かしらの仕様変更を行うとき、そのソースコードはJDK7の特徴を存分に使っていいのかどうかって事ですわ。放っておくと、eclipseさんやNetBeansさんといったIDEが気を利かせて、最新のJDKの特徴を駆使したテンプレートを展開したり、何古くさいコード書いてんだって警告してくれるので、否応なしに新しいコードになってきますよね。で、古い書き方のコードと新しい書き方のコードがパッチワークみたいに混在しちゃうわけだ。


「それでいいのか!?」って思うけど、それもプロジェクト事のポリシーに寄るんだよね。当然、パッチワークになるのを嫌えば新しい書き方禁止!で、カビが生えたプロジェクト固有のコーディングルールを守るわけだ。これって特に若手にとって不幸な事だと思うのよね。だって書籍だの研修だので覚えるJavaはいわゆる近代のJavaだと思うんだ、なのに仕事で書くのは習ったことも無い古典Javaなーんて話が笑い話じゃ無く起きてる。


Java5、Java6、Java7でもって今度はJava8でそれなりにJavaも便利な書き方ができるようになってるんだけど、すぐに新しい特徴を取り込める状況にあるかというと、そうでも無いどころか、取り込むのを禁止したいと思う状況だったりするので、悩みは尽きないのですよ(でオチも無いw


ps.

ちなみに、JDK1.2からJDK7.0までの間にJDKの互換性がらみで困ったことは、この2つくらいしかないんですよ。

  • enumが予約語になった(JDK5.0から)
  • JDK1.4までのBigDecimal.toString()がJDK5.0からBigDecimal.toPlainString()になった
    • 他にもJDBCまわりでAPIの増減はあったけど、それで困るケースってそうなかった

それ以外については、JDK1.2でコンパイルしたクラスファイルであろうと元気に最新のJVMで動くので、Javaの上位互換性はスゴいなって正直思う(それ故にBigDecimalの件はイラっと来たけど)。


ふむふむ。

へびのぬけがら - March 15, 2013 11:10 PM
NetBeans IDE 7.3 リリース

ずいぶん、時間が経過していしまいましたが、 NetBeans IDE 7.3 がリリースされています
恒例のスプラッシュです

今回のリリースで最も目玉となる新機能はやはり HTML5 サポートかと思います
その他にも多くの新機能が追加されていますので、ぜひお試しください
何かお気づきの点がありましたら、 ML 等へご連絡お願い致します

marsのメモ - March 10, 2013 05:54 AM
[IDEA][eclipse][NetBeans][IdeaVIM] jVi, Vrapper, IdeaVIMの比較

ちょいと前にマジメに比較してみて、そのまま死蔵してた資料が出てきたので供養のつもりで公開してみる。知らない人に簡単に説明すると、jVi, Vrapper, IdeaVIMはそれぞれNetBeans, eclipse, IntelliJ IDEAのvi/vimプラグイン。世の中のvi/vimユーザの怨念たるや凄まじく、IDEなんてモードレスエディタが当たり前なのに、無理矢理vi/vimモードを実装した猛者がいるのです。


どれも一定水準以上のすばらしい出来なんだけど、vi/vim(特にvim)に対する拘りも人それぞれで、満足する人、それでも不満が残る人がちらほら。でも、どうがんばってもこれらプラグインがvimに追いつくことは叶わぬ夢なので、どの辺で妥協できるかが、これらを受け入れられるかどうかのポイントになるかと。

それと想像に難しくないけど、どれもvimscriptはサポートしてないよ。


jVi, Vrapper, IdeaVIM以外のvi/vimプラグインについては、この辺を参照のこと。

各種IDEのvi/vimプラグイン - marsのメモ

VsVim - 猫とC#について書くmatarilloの雑記


jVi 1.4.5 : NetBeans用vimプラグイン

http://jvi.sourceforge.net/

古くはJBuilderのviプラグインでNetBeansに移植された。もともと"vi"プラグインだったので、vimの機能が不足してたんだけど、この前調べたらそんなことなかった。

気になった点をいくつか。

  • Ctrl-[ でエディットモードに復帰できないけど、オプションで指定できるようになる。
  オプション -&gt; jVi Config -&gt; Ctrl-Key Bindings で "Ctrl-[ the "real" &lt;ESC&gt;"をチェックする。
  • :コマンドにNetBeans固有のコマンドがある。
  :fiximports    ... import文の最適化
  :make          ... ビルド実行(引数にターゲット名を指定できる)
  :grep          ... 「使用状況を検索」ダイアログを表示する。検索対象はカーソル位置から決定。
  :tselect       ... 「型に移動」ダイアログを表示する。
  :e#            ... #で現在開いているファイルの一覧が表示される。
  • ウィンドウ分割機能あり。わりとしっかりしている。
  Ctrl-W, h j k l   で分割ウィンドウ間の移動が可能。
  Ctrl-W, H J K L   で分割ウィンドウ間の位置移動が可能。
  • ワード移動は日本語(全角)と英語(半角)を区別しない
  • ある程度のオプションはNetBeansよりjViが優先される。たとえば、行番号,不可視文字の表示,ワードラップ...なんかはNetBeansのオプション指定が効かない。

Vrapper 0.24.0 : Eclipse用vimプラグイン

http://vrapper.sourceforge.net/home/

eclipse最古参のvimプラグインはviPlugin(http://www.viplugin.com/viplugin.htm)だったと思うけど、今はこっちのほうが有名なんでは?

こいつの一番の売りは mapコマンドでeclipseのコマンドをvimにアサインできることだと思う。

Eclipseのキーバインドをvim風にできるVrapperが素晴らしすぎる件について - ( ???) ゆるよろ日記


あと surround.vim(相当?)を独自実装してるみたい。

ワード移動は日本語(全角)と英語(半角)を区別しないどころか、特定の区切り子だけをみてるだけっぽかった。


IdeaVIM 0.23.93 : IntelliJ IDEAのvimプラグイン

https://github.com/JetBrains/ideavim

これもだいぶ古くからあるプラグイン。一番使い込んでて、不満があったらパッチ当てちゃうので公正な評価ができない。:-P

[IdeaVIM] - marsのメモ


元々はRick Maddyさんが個人的に公開してたプラグインなんだけど、彼がメンテできなくなったのでメンテナに @ さんが名乗りをあげて、このあたりからJetBrains公式プラグインになったみたい。ちなみに現在のメンテナである @ さんはとても意欲的で twitter で "IdeaVIM" ってつぶやくと、どの言語でつぶやいたかに関わりなく「バグだったらYouTrackにファイルしてね?」ってmention送ってくる。

ちなみに、IdeaVIMのワード移動はvim互換でちゃんと日本語と英語を区別するよ。


機能比較表

一式もろもろを比較したのがこちら。思ってみればクリップボード操作も拘りもってる人居そう。あたしは、vimでもCtrl+X,C,Vにremapしてるから全然気にしてないけど。:-)

あと設定できるオプションもプラグインによって異なるのでご注意を。

marsのメモ - February 24, 2013 01:09 AM
[life] Java One 2012 フィードバック!( #てらだよしおまつり )に参加してきた

http://tohoku-dev.jp/modules/news/article.php?storyid=182


約半年ぶりに寺田さん(@)が来仙するってんで参加してきました。内容はJava One 2012 SF中心でJavaEE7とかJava8とかといったかなり未来の話。:-)


いろいろ考えさせられたが、それ故に消化するまで時間がかかりそうなので、主立ったメモだけ残すよ。


はじまった。


JCPはよりオープンになったって話。Specification LeadsやExpert Groupに属して無くても意見があったらガンガン言えるようになった(むろん英語で)。Java8のλに関しても日本の大学生がガンガン意見言ってたという事例があるそうな。

そう思うと日本初のJSRが一つくらいあってもいいんじゃないかと。例えば2Way-SQLなんかJSR化してもいいくらいの良い考え方だと思うけどなー、とか思ってみたり。


「社外のコミュニティに積極的に参加してる人とそうでない人で情報格差が広まっている」とのこと。まあ、そうかも。こうゆう場に集まる人たちはアンテナ高いけど、それを職場にフィードバック出来てないのは不徳の致すところでございます。


JSF2.2やWebSocketのAPIとか見てて思わず「ラッパー組んじゃる」って考えるのは悪いクセ。いちいち帯に短したすきに長しと思わないで、黙って出来合いのAPIを使ってみようという境地に至りたい。


番外編:

スライドにあったIDEの紹介にeclipseやNetBeansだけでなくIntelliJ IDEAもあったのは評価するが、相変わらず動的言語でgroovyを飛ばす(なんか恨みでもあるのかw

JavaScript無双をどこまで信じていいものか...。(´・ω・`)


おまけ:

まだJava6すら使ってない我々にとっては未来過ぎる話でしたね。:-)


ps.

寺田さん、最新情報をありがとうございました。テム・レイ化しないようコツコツ素振りします。それと運営の村上さん(@)おつかれさまでした。ノシ

torutkの日記 - February 24, 2013 12:00 AM
[Java][NetBeans]NetBeans 7.3をインストール

先日、NetBeans 7.3が正式リリースされたので早速インストールしてみました。今回はWindows 8(64bit版)に、NetBeans IDE 7.3 すべて版を入れました。すべて版にはJava SEのほか、JavaCard、Java ME、Java EE開発環境とJava EEアプリケーションサーバー(GlassFishおよびTomcat)、C++、Groovy、PHPのプログラミング言語開発、HTML5+JavaScript+CSS開発機能が同梱されたものになります。 NetBean ...

torutkの日記 - February 15, 2013 12:00 AM
[Java読書会]デブサミ2013コミュニティブース出展(2日目)

デブサミ2013コミュニティブース出展(1日目) - torutkの日記に引き続き、2日目の出展です。 昨日は、過去Java読書会BOFで読んだ本を、年代順に手前から並べていたので、最新のものが奥側になっていました。ここ最近オライリー本が多く、オライリー本は表紙のレイアウトでタイトルが下の方に位置しているので、写真のように重ねて並べるとタイトルが隠れてしまうという問題がありました。 そこで、今日は、年代順に奥から並べてみました。 また、ポストイットでいくつかの本にキャッチーをつけてみました。例えば ...

torutkの日記 - January 14, 2013 12:00 AM
[Android]Android端末実機デバッグ

Android開発環境を構築する(オフライン環境)(続) - torutkの日記のおまけです。 Android SDKを使った開発では、PC上でAndroidエミュレータ(AVD)を使ってAndroidアプリケーションを実行します。しかし、このAVDが「激重」で、起動するのに数分かかる代物です。 そこで、Android携帯端末を持っていれば直接その端末で実行・デバッグした方が快適です。PCとAndroid携帯端末をUSBケーブルで接続してPC上で作成したAndroidアプリケーションを 実行できる ...

torutkの日記 - January 13, 2013 12:00 AM
[Android]Android開発環境を構築する(オフライン環境)(続)

Android開発環境を構築する(オフライン環境) - torutkの日記の続編です。 今回は、NetBeans IDEにAndroidプラグインをインストールし、NetBeans上でAndroidプログラミングができるまでの環境を構築します。 NetBeans用Android開発プラグイン NBAndroidのインストール NetBeansのAndroidプラグインは、「NBAndroid」を使います。NBAndroidホームページは次のURLです。NetBeansは基本的には7.2以降です。 ...

torutkの日記 - January 09, 2013 12:00 AM
[JavaFX]JavaFXのTableViewを使う画面をシーンビルダーで作成する

JavaFX 2の表(テーブル)コントロールTableViewを使った簡単なサンプルを、SceneBuilderを使って作成する手順を、以前の日記 id:torutk:20121005 に文章で書きました。 文章だけでは分かりにくいので、SceneBuilderとNetBeansを使ってJavaFX FXMLアプリケーションでTableViewを使う簡単なプログラミングについて画面キャプチャを交えて次のホームページに作成しました。 http://www.02.246.ne.jp/~torutk/j ...

forest of netBeans - January 04, 2013 08:07 PM
あけまして おめでとうございます。2013

去年は何かすべてにおいて行き詰っていて、NetBeansを使っていませんでした。

そんな中、年末に片貝さんのセッションや自分の周りのNetBenasユーザーの

使用状況を聞いて刺激をうけたので、自分も今年はNetBeansを使っていきた

いとおもいます。

それにしても、久しぶりNetBeans使ってみたら立ち上がり軽くなったなあ!

marsのメモ - December 24, 2012 03:18 PM
[IDEA] 25日目 IntelliJ IDEA Advent Calendar 2012 インデックス

やっと終わったわ。:-(


IntelliJが出来ることはもっといろいろありますし、正直びみょーなところや「これって他(Eclipse/NetBeans/etc)のほうがマシじゃね?」って点も多々ありますので、おのおのそれなりなつきあい方を模索してみてください。


信者になれば毎年の年貢や不意のセールで心が揺らぐこともなくなるでしょう(ンな分けない。:-P

marsのメモ - December 23, 2012 03:08 PM
[IDEA][advent] 24日目 Inspections & Intentions

私に「Javaでいいや」どころか下手すると「Javaが良い」と思わせるIntelliJの超絶変態機能。Inspectionsはコードの検査で,いわゆる「Checkstyle&Findbugsの強力バージョン」。Intentionsは意図というか気づき?EclipseでいうQuick Assistっぽい感じ。


Inspectionsは検査なので,エラーや警告,プロジェクト固有の規約違反などを指摘する(指摘項目によっては,その解決もしてくれる)。Intentionsは「こうも書けるよ」的なアドバイス。どっちも実行キーは,ALT+Enter(macだとopt+Enter)で実行可能な箇所にカーソルを置くと電球アイコンが表示される。


ALT+Enterについては、はるか昔に解説してた。

31日間ReSharper一周 ... それIDEAでもできるよ(その8)


Eclipse知ってる人には「Ctrl+1のようなもの」と言えばピンとくるかも(Ctrl+2っぽいのは無い)。NetBeansはまんま同じキーで同じことできるから分かるでしょ。


Inspectionsはエラーや警告の類いなので、エディタの右側にマーカーバーとして指摘箇所を表示してくれる。マーカーバーの説明も昔書いてた。

31日間ReSharper一周 ... それIDEAでもできるよ


ファイルを開くたびに検査を実行するので、有効になってるInspectionsが多いほど検査に時間がかかります。検査中はエディタ右上端のコンパイルステータス(compile status)が目玉マークの間は検査中ということを示してます。

f:id:masanobuimai:20121216105926p:image


このコンパイルステータスを緑に保つのが良いことなのですが、検査項目をうまいこと調整しないと緑にするのは至難の業です。2007年に紹介したときは630項目くらいだったのですが、IDEA12のデフォルト*1であらためて数えなおしたところ1,600項目近くありました。中には互いを打ち消し合う検査項目もあるので未調整でステータスを緑にするのは今や不可能ですね。:-P


うまいとこ手綱を握らないと鬱陶しいことこの上ないInspectionsですが、普段だったらうっかり見落とすような事まで指摘してくれるので、とても頼りになるパートナーとペアプロしてると錯覚することもままあります。ここまで徹底して指摘できるのも、型でガチガチに縛ってるJavaだからなんだよなぁと思うと「(IntelliJ使うんなら)Javaも悪くないな」と思うわけです。むろん、RubyやJavaScriptなどの他言語用のInspectionsもありますが、数や精度ではJavaのソレに及ばないです。


Inspectionsはひとつひとつ警告レベルを指定でき、モノによっては専用のオプションもあるので、一度じっくり項目をながめてみることをオススメします。過去に紹介したInspections系のエントリにも、いくつかオススメが載ってますので、ご参考まで。

「正しいソースの書き方養成ギプス」をIDEAでもやってみる。

behind the times: 10 Best IDEA Inspections You’re Not Using

Usages of API documented as @since 1.5


Inspectionsの調整は、まず項目ごとの警告レベルの設定ができます。デフォルトの警告レベルは「As typo/As server problem/As weak warning/As info/As warning/As Error」の6種類。

f:id:masanobuimai:20121222220641p:image


"As server problem"はJetBrainsのCIサーバであるTeamCityを使ってなければ設定する必要すらありません。通常は"As warning"なんですが「ウザいけどOFFにするのはどうも」ってのは"As weak warning"か"As info"にしとくといいです。

一応、デフォルト以外の警告レベルも追加できるのですが、そこまでするのはやり過ぎかなと思います。

f:id:masanobuimai:20121222220642p:image


それと先ほども言いましたが、Inspectorによっては独自のオプションを持っているものもあります。正直、プロジェクトごとにいちいち設定するのは大変ですので、その辺はうまいこと使い分けしましょう。

f:id:masanobuimai:20121222220643p:image


ちなみに、Inspectionsの設定は、Settings->Inspectionsで行います。この設定画面にはステータスバーに居るHectorおじさん経由でもたどり着けます(おじさんをクリックして"Configure Inspections"をクリック。

f:id:masanobuimai:20121222222246p:image


それ以外にも、警告箇所でALT+Enterを押し、該当する検査項目からInspectionsの設定画面に飛ぶこともできます(下図の場合、"Flip comparison(Constant on right side of comparison)"が検査項目で、そこから展開したメニューにある"Edit inspection profile setting"で設定画面に飛べます)。

f:id:masanobuimai:20121222222250p:image


Inspectionsの設定項目が多すぎるので、とりあえず全設定ONにして実コードの検査度合いをみつつ、上記方法で個別に警告レベルの調整をしたりしてます(それでも調整はくたびれます)。このサブメニューを見てもわかるように、検査項目の設定に飛ぶだけでは無く、検査項目そのものを無効(Disable inspection)にしたり、ここでだけ検査を無効(Suppress ...)することも可能です。ただし、"Disable inspection"を選択した場合、その検査項目は二度と登場してきませんので、復帰させるには1,600もあるInspectorsから探し出さないといけません(これもかなりくたびれる作業です。:-(


ちなみに、上記スクリーンショットの"Flip comparison"の下にある鉛筆アイコンの項目3つがIntentionsになります。こちらは検査項目ではないのでマーカーバーには影響ありません。


Hectorおじさんについて補足すると、検査レベル(Highlighting Level)を「Inspections/Syntax/None」に変えるたび、おじさんがそっぽを向いていくという細かい芸があります。

f:id:masanobuimai:20121222222247p:image

f:id:masanobuimai:20121222222248p:image


なんとなく想像が付くかと思いますが、このInspectoinsは結構CPUパワーを食います(つまり動作が重くなる)。そのため検査レベルを下げていけばいくほどIntelliJが軽くなります。その分、IntelliJを使っている良さも減っていきますが...。とはいえ非力なマシンでIntelliJを使うと、ホントに泣きたくなるほど遅くなるので、背に腹は代えられないときは、この辺から調整してみることをオススメします。


それとIDEA9あたりから"Power Save Mode"というのがつきました。Helpを読んでも要用を得なかったのですが、名称からしてCPUにやさしいモードなのだと思います。その証拠(?)に、このモードにするとHectorおじさんが完全に沈黙します。

f:id:masanobuimai:20121222222249p:image


いずれにしろ、明らかに余計だと思えるInsepctionsは無効にしておいたほうがPCにも、利用者の気持ちにもやさしいと思います。:-)


あと、その気になれば自分でもInspectionsやIntentionsを作れます。

独自Inspectorを作ってみる

QuickFixの作り方

この前,独自Inspectorで試したことを,他の方法で実現してみんとす


やめりゃ良かったと作り始めてから思ったのですが、IDEA12でデフォルトのプラグインをすべて有効にしたときのInspectionsとIntentionsの一覧を作りました。気になる&使っている順にコメントも付けてます。まだ完成してませんが、気長にこつこつやってこうと思います("+"付いてるのが、個人的オススメ。それらをError, Warinig, Infoのどれにするかは各自が決めて。

IntelliJ IDEA : inspections&intentions




当然ながら、RubyやPHP、Python、Scala、Kotlinなどの言語系プラグインを入れると、それ用のInsepctionsやIntentionsが増えます。:-P

*1:IDEA12の標準プラグインを全て有効にした状態

marsのメモ - December 20, 2012 02:26 PM
[IDEA][advent] 20日目 artifactの設定(ついでにProject Structure )

Settingsの話は3回もやりましたが,Project Structureの話をしてませんでしたね。正直,面倒なので,昔に書いたエントリーやIntelliJ本体のヘルプを参照してください(だんだんやる気がなくなってる。

初めてIntelliJに触れる人へ − プロジェクトの設定とかテスト実行の話


IntelliJのバージョンがあがるたびに設定画面もびみょうに変わってますが,まあ何とか読み替えられると思います。ちょっと補足すると,ライブラリの設定(File->Project Structure->Modules->Dependencies)にあるスコープ(Scope)は,Mavenを知らないと意味がわからないと思います。

f:id:masanobuimai:20121121213704p:image


設定可能な値と意味は以下の通りです。

  • Compile
    • 普通はこれです。コンパイルや実行時に参照されます。
  • Test
    • テストコードのコンパイルとテストの実行時に参照されます。
    • junit.jarとかがここに属します。
  • Runtime
    • 実行時にだけ参照されます。コンパイル時には参照されませんので,コード補完の対象になりません。
    • 強いて言えばJDBCドライバなどが,ここに属します。
  • Provided
    • 実行環境にあらかじめ用意されているライブラリを指定します。コンパイル時に参照されますが,実行時には参照されません(実行環境に相当品があるので)。
    • 具体的に言うと,J2EEのAPI(javaee.jar)とかが,ここに属します。

NetBeansにも同様の考え方があるので,NetBeansからの移行組はすんなり理解できると思いますが,eclipseにはどうゆうわけか伝統的にこの考えが無いので,はじめは戸惑うかと思います。でも,これを知ってしまうとスコープが無い世界には戻れないと思いますヨ。:-)


あと,ライブラリはMaven Repositoryから直接ダウンロードできます。

IntelliJ IDEA 10のEAPが登場したよ


Artifactsの指定

ちょっと脱線が長引いたのでセクション分けて本題に戻ります。IDEA9あたりからプロジェクトごとに成果物を定義できるArtifactsという機能がついきました。設定箇所は,File->Project Structure->Artifacts。

何ができるって「成果物を定義できる」んですが「成果物ってなによ?」と言うと,要するにJarファイルとかWARファイルとかEARファイルとかってアレです。

f:id:masanobuimai:20121121214919p:image


使い方は,昔書いたこのあたりが参考になると思います。

IntelliJ CE用Winstoneプラグイン公開しました



これの良いところは,自分のニーズに応じていくつもの成果物を定義できることです。これで,zipファイルも作れれば,実行モジュールだけではなく,リリースモジュールも作れそうなので,ちょっと残念ではあります(だったら自分でプラグイン作ったら?という話でもありますが。:-P


ps.

チーム開発する場合など,ライブラリや成果物の生成はIDEではなくAntやMavenといったビルドツールに任せるのが望ましいのです。ただ,個人の実験や趣味で作るちょっとしたプロジェクトなどは,IDEで完結できることが多いととても楽なのです。

marsのメモ - December 17, 2012 03:09 PM
[IDEA][advent] 18日目 Databaseプラグイン

地味に便利な Databaseプラグインについてです。IDEからDBを操作する機能ですが、NetBeansにも似たような機能があるし、今やさほど珍しい機能ではないですね。


そんな中でIntelliJっぽいなぁという機能について紹介します。


DDL 文からDBの定義を再現

この手の機能はDBに接続すると相場が決まっているのですが、IntelliJの場合、DDLが定義されたファイルだけでも、この機能を利用できます。


使い方は、Databaseウィンドウを開き「+」ボタンを押して "DDL Data Source"を選択。以下のようなダイアログが表示されるので,"DDL Files"の「+」ボタンを押して,任意のDDLファイルを指定します。

f:id:masanobuimai:20121121215845p:image


DB が別のネットワークにあるなどの理由で参照できないときでも、構造を可視化できて意外と助かる事が多いです。


スキーマの比較

DB専用ツールだと、そんなの出来のがあったと思いますが、実はIntelliJでも出来ました。

Databaseウィンドウで比較したいスキーマを2つ選んで、ツールバーの「Compare」を押す。

f:id:masanobuimai:20121121220250p:image


オンラインとDDLの比較なんてのもできるので,まあまあ便利です。普通のDiffと異なるのは,DDLの記述順に囚われずテーブルの比較をしてくれるので,DDLファイル同士のdiffを取るよりは,親切な結果が得られます。

f:id:masanobuimai:20121121220405p:image



Language Injection でプログラム中でもコード補完

Data Sourceが設定されている状態で,JDBC API(StatementやPrepareStatementクラスなど)にSQL文をタイプすると(うまくすると)コード補完が効きます。「うまくいくと」というのは,何か知らないけど上手く行かない事もままあるためです。


それと,JDBCではなく別のAPI(オレオレAPIだったりするかもしれません)で,SQL文の補完を有効にしたい場合は,Intension(ALT+Enter)メニューの"Language Injections Settings"から追加で設定することができます。

f:id:masanobuimai:20121121221506p:image


すると、こうなります。結構うれしい。:-)

f:id:masanobuimai:20121121221505p:image


特定のAPIだけではなく、String型のローカル変数に対してもLanguage Injectionをかけることが出来るのですが、その場合、次のようにIntelliJ固有のアノテーションを付けなければならないのが難しいところです。:-(

f:id:masanobuimai:20121121222424p:image


アノテーション付けなくても何とかする方法もあったと思ったのですが、ちょっとその設定を特定できてません...。が、IDEA12だとアノテーションやコメントアノテーションを使わなくてもLanguage Injectionができるようです。

f:id:masanobuimai:20121122231548p:image


(追記)しおしおさんが追加調査してくれました。:-)

しおしおの雑記帳



JPAについて

一応、JPAエンティティを作る機能を持っていますが、あまり洗練されてるように思えないし、正直使いづらかったです。生成されるエンティティもアノテーションごてごてで見づらかった記憶が...。このへんについてはNetBeansのほうが扱いやすいと思います。


一応、画面の紹介だけしておきます。

f:id:masanobuimai:20121121223241p:image


(おまけ)DBの起動

NetBeansの組み込みJavaDBがうらやましくて、Derbyを起動・停止するだけのプラグインを作ったこともありますが、よーく考えてみると外部ツールに登録すれば済む話だったのはナイショです。:-)

Derbyプラグインできたよ


ps.

本家ブログでIDEA12のDatabaseプラグインの説明が出ましたね。

Manage Your Database Schema in IntelliJ IDEA 12 | JetBrains IntelliJ IDEA Blog

torutkの日記 - December 17, 2012 12:00 AM
[Java][GIS]Javaで地図を表示〜GeoToolsを使って

はじめに Java Advent Calendar 2012の17日目です。 エントリ時は、昨年度まで担当していたJavaの仕事でenumのいろいろな活用を知ったので、enumについて整理を兼ねて書こうと思っていました。しかし、Javaのenumをググってみるとすでに数多くのenumの紹介記事があり、また、名著Effective Java 第2版 (The Java Series)で触れられていた「シングルトンをenumで」もちらほら紹介しているブログがあり、いまさら感がありました。 そこで、方針を ...

marsのメモ - December 12, 2012 01:49 PM
[IDEA][advent] 12日目 IDEの設定(IDE Settings:後編)

設定編の後編です。


Keymap

  f:id:masanobuimai:20121118225556p:image

ショートカットキーの設定を行います。Keymapsにはプリセットでいくつかのキーマップが登録してあるので,好みが合えばそちらを使うのも良いでしょう。「この手のはなるべくデフォルトを覚えたい」というならば,"Default"や"Mac OS X 10.5+"を選ぶと良いかと。

個人的には,IntelliJのデフォルトキーマップは分かりやすいと思ってないので,がしがしカスタマイズしてしまい,今となってはデフォルトキーマップでは使えない体になってしまいました(それにIdeaVIMも必須w


他のIDEやエディタからの乗り換え組向けに"Eclipse", "NetBeans 6.5", "VisualStudio", "Emacs"なんてのもありますが,その出来については未評価です。IntelliJのエディタはいわゆるモードレスエディタなので,お決まりのように"Emacs"キーマップがありますが,この手のEmacs風キーマップが生粋のEmacs使いを満足させた試しは無いので,それなりに見てあげると落胆も少ないかと思います。


Keymapsの別の使い道として,IntelliJで提供している全コマンドを俯瞰することができます。"Main menu"はメニューバーの項目なので,なにもここで確認しなくても分かりますが,"Editor Actions"や"Other"などを覗いてみると面白い発見があると思います。


また「プラグインを入れたけど,そのプラグインがどんな機能を提供しているのかわからない」ときは,ここの"Plug-ins"を見ると,プラグインが提供しているコマンドを見つけることができます。

IntelliJのショートカットを素早く知る方法+α


それはそうと,WindowsでもMacでもIntelliJを使う場合,キーマップをどうしようか非常に悩みます。わたしは面倒なのでMacでもWindowsのキーマップを使っているので,コピー&ペーストは Ctrl+C, Ctrl+V です。



Live Templates

  f:id:masanobuimai:20121118225622p:image

スニペットというかキーワード展開を行うLive Templatesを設定します。プリセットされているテンプレートも非常に多いのですが,この手の機能は他のIDEにも実装されているので,特に取り上げるほどの機能ではありません。むしろ,キーワード展開がコード補完とは別のキーになっていたり*1,キーワード展開例がプレビューできないなど,EclipseやNetBeansのソレと比べて劣っている気もします。

31日間ReSharper一周 ... それIDEAでもできるよ(その7)



Menu and Toolbars

  f:id:masanobuimai:20121118225646p:image

メニューバーやツールバー,ナビバー,それにProjectウィンドウやエディタなどのコンテキストメニューの項目を設定します。



Notifications

  f:id:masanobuimai:20121118225701p:image

コンパイル結果,テスト結果など,IntelliJからのレスポンスの通知方法を設定します。



Passwords

主にバージョン管理システムとの連係で入力するパスワードをどこまで記憶していくかを設定します。



Path Variables

  f:id:masanobuimai:20121118225743p:image

いわゆる環境変数を設定します。が,あまり使った事はありません。Mavenプロジェクトを利用したときに「M2_HOMEはどこ?」と聞かれたくらいしか記憶がありません。



Plugins

  f:id:masanobuimai:20121118225723p:image

プラグインマネージャです。"Browse repositories"で公式プラグインサイトに登録してあるプラグインの一覧から任意のプラグインをインストールできます。一覧で"Bundle"とあるのは,IntelliJ付属のプラグインで削除することはできません(無効化まで)。


プラグインは非常にたくさんありますが,なんだかんだでIntelliJ標準のままか,JetBrains公式プラグインくらいしか使わなくなります。:-)


それと,プラグインのインストールやアンインストール,有効・無効化にはIntelliJの再起動が必要になります。



Quick Lists

  f:id:masanobuimai:20121118225803p:image

お好みのコマンドを集約したQuickリストを登録します。Quickリストは,よく使うけど,ひとつひとつのショートカットキーを覚えられない,なんて場合に便利です。

31日間ReSharper一周 ... それIDEAでもできるよ(その4)



TODO

TODOウィンドウに表示する,TODOコメントのパターンを定義します。



Updates

自動アップデートの設定をします。アップデートモジュールは,必ずしもパッチ方式で提供されるわけではないようです(場合によっては,ダウンロードページにジャンプするだけもある。



Usage Statistics

IntelliJの使用統計情報をJetBrainsに送信する頻度を設定します。使っているIntelliJの統計情報は,Help->Productivity Guideで確認できます。


Web Browsers

IntelliJから起動できるWebブラウザを登録します。エディタでHTMLなどを編集していると,右上にブラウザアイコンが浮かんできますが,それのことです。


"Default Web Browser"は,View->Open in Browserで起動するWebブラウザの事です。



XPath Viewer

XPathに関する設定です。XPathに関するコマンドは,

  • Edit->Find->Evaluate XPath (ツールバーのヘルプアイコンの隣にもある)
  • Edit->Find->Find in XPath
  • View->Unique XPath

の3つです。"Find in XPath"以外の2つは,XMLを編集しているエディタのコンテキストメニュー最下部も表示されます。



XSLT

XMLに関連付けしたXSLファイルをProjectウィンドウに表示するかどうか(Show Associated Files in Project View)の設定がありますが,XSLT使ってないのでどうなるかは分かってません。:-)

*1:隠しオプションで変更可能ですが...。