2014

お年玉キャンペーン 当たったよ(^_^)

General Java

OTN Newsletter のお年玉キャンペーンに何気に応募していた。

すっかり忘れていたのですが(当たると思っていなかった)昨日怪しげな白い包みが届いていた。

なんだろうと思っていたが PC の調子が悪く、そちらの修理におわれていた。

やっと一段落ついたので怪しげな白い包みを開けてきたところ Duke の T シャツが入っていた。

白い包みには小さな赤い文字で ORACLE と書かれていた。

やっとお年玉キャンペーンで当たったんだなと理解した。^_^;

このところ、ベビースターラーメンのメガタオル、パン屋さんのキャンペーンでの食パンをイメージした座椅子、

KitKat の Nexus7 と応募していたがことごとく外れた。

このお年玉は凄くうれしい!

今年はこれを着てドヤ顔で夏を楽しもう!

4

5

Oracle さん、ありがとう (^_^)

Hatena タグ:

JDK9 の Windows 8.1 64bit での Build

Java

ちまたでは先日リリースされた Java SE 8 で盛り上がってます。

Java SE 8 は革新的な変革をとげ、多くの Java デベロッパに愛されるでしょう。

さて、今日はせっかちな人の為に・・・と言いつつ新しい物好きの私は Windows 環境での OpenJDK  JDK9 の構築に挑戦してみました。

あくまで洒落です!

OpenJDK の Build Infrastructure Group のページにはまだ JDK9 のBuild ドキュメントはアップされてないようです。

それで私は、JDK8 のビルドガイドを参考に駄目元で試してみました。

ビルドに必要なツールを準備します。

Windows SDK for Windows 7.1

Microsoft VisualC++ 2010 Express

Cygwin (64 bit)

make

freetype

Ant

Java SE 8

以上です。

ダウンロードしたプログラムのなかには圧縮されたものもありますからお好みの解凍ツールをご用意くださいませ。

まず、Java SE 8 と Ant をインストールします。

そして、Path を設定します。

次に Windows SDK for Windows 7.1 をインストールします。

1

 

そして次は、Microsoft VisualC++ 2010 Express をインストールします。

2

 

では次に、Cygwin (64 bit) をインストールします。

3

 

インストールの途中で Cygwin にインストールするプログラムを選択します。

下記のものをインストールするようにビルドガイドにはあります。

ar.exe
Devel
binutils
The GNU assembler, linker and binary utilities

make.exe
Devel
make
The GNU version of the ‘make’ utility built for CYGWIN

m4.exe
Interpreters
m4
GNU implementation of the traditional Unix macro processor

cpio.exe
Utils
cpio
A program to manage archives of files

gawk.exe
Utils
awk
Pattern-directed scanning and processing language

file.exe
Utils
file
Determines file type using ‘magic’ numbers

zip.exe
Archive
zip
Package and compress (archive) files

unzip.exe
Archive
unzip
Extract compressed files in a ZIP archive

free.exe
System
procps
Display amount of free and used memory in the system

 

私の環境では Windows OS 側の Mercurial が正しく動作せず、Cygwin に Mercurial をインストールすることで回避できました。

33

 

Cygwin のインストールには 自国の ftp サーバーを選んでも少し時間がかかるので小休憩をします。(^_^;)

Cygwin のインストールが終わったら次は make を展開配備します。

その前にビルド作業用のディレクトリを作成しておきましょう。

今回私は、C ドライブ直下に OpenJDK と言う名前のディレクトリを作りました。

そこに make を展開配備してください。

OpenJDK ディレクトリ内に、make-3-82 と言う名前のディレクトリが作成されその中にファイルが納められていれば OK です。

ディレクトリの名前は make のバージョンによって変わります。

次に同様に freetype を OpenJDK ディレクトリ内に展開配備します。

OpenJDK ディレクトリ内に freetype が展開配備されたら OK です。

それでは先ほど展開配備した make をインストールしましょう。

Cygwin を起動します。

スクリーンショットを撮り忘れたのですがターミナルウィンドウが表示されます。

次のようにコマンドを打ち込みます。

cd /cygdrive/c/OpenJDK/make-3-82

make-3-82 ディレクトリまで移動したら次のようにコマンドを打ち込みます。

./configure

そして最後に

make

これで make のインストールは完了です。

さて、次は freetype ライブラリを作ります。

Cygwin ターミナルで

cd /cygdrive/c/OpenJDK/freetype

とコマンドを打ち込み freetype ディレクトリまで移動します。

そして

./configure

と打ち込みます。

ここでついでにこれから作成するライブラリを格納するディレクトリを作成しておきます。

mkdir lib

と打ち込めば freetype ディレクトリの中に lib ディレクトリが作成されます。

それでは freetype ライブラリを作りましょう。

C:\OpenJDK\freetype\builds\win32\vc2010\freetype.vcxproj をダブルクリックして VisualC++ Express 2010 を起動させます。

そして、ソリューションエクスプローラーの中にある freetype を右クリックしてコンテキストメニューを表示させ、プロパティをクリックします。

11

 

プロパティページが表示されます。

12

 

これを次のように編集していきます。

アクティブ ソリューションプラットホームを新規作成します。

13

 

新しいプラットホームの名前を x64 と入力します。

14

 

構成を Release Multithreaded に変更します。

15

 

もう一度構成マネージャーを表示させます。

16

 

このようになります。

これを編集していきます。

まず、全般を編集します。

17

 

出力ディレクトリを編集します。

18

 

19

 

中間ディレクトリを編集します。

20

 

ターゲット名を編集します。

21

 

プラットフォーム ツールセットを Windows7.1SDK に変更します。

22

 

このように全般の編集を終えます。

23

 

それでは freetype を右クリックして表示されたコンテキストメニューでビルドをクリックします。

24

 

出力に freetype.lib が作成されたことが確認できます。

25

 

もう一度プロパティページを表示させ、プロジェクトの規定値の構成の種類を変更します。

ダイナミック ライブラリ(.dll)に変更します。

26

 

27

 

もう一度 freetype をビルドします。

出力に freetype.dll ができたことが確認できます。

28

 

freetype.lib と freetype.dll を配備します。

Cygwin ターミナルを起動して下記コマンドを入力します。

cd /cygdrive/c/OpenJDK/freetype/objs/win64/vc2010

そして

cp -R freetype.dll freetype.lib /cygdrive/c/OpenJDK/freetype/lib

これで配備完了です。

Linux 環境だとこんな面倒なことはしなくていいのですが・・・

Windows 環境だと非常に面倒です!

でも、後はお気楽に作業できます。

それでは JDK9 をビルドする作業ディレクトリを作成します。

Cygwin ターミナルを起動して下記コマンドを入力します。

cd /cygdrive/C/OpenJDK/

そして MyJDK9 というディレクトリをそこに作ります。

mkdir MyJDK9

これで準備完了です。

Mercurial でソースをダウンロードしてビルドするだけです。

今回ソースはこちらのリポジトリよりダウンロードしてきました。

http://hg.openjdk.java.net/jdk9/dev

これとは別に http://hg.openjdk.java.net/jdk9/jdk9 もあるようですが試していません。

それでは Cygwin ターミナルを起動して下記コマンドを入力します。

hg clone http://hg.openjdk.java.net/jdk9/dev MyJDK9

53

 

そして、Mercurial でダウンロードしたファイルを使用してソースをダウンロードします。

cd MyJDK9

MyJDK9 ディレクトリへ移動したら get_source.sh を実行してソースを取得します。

これは通信環境にもよりますが時間がかかるのでコーヒータイムとします。^_^;

55

56

57

 

コーヒータイムの間にソースのダウンロードは済んだようですね。

では make する(ビルドする)ために Configure を実行しなくてはいけません。

Cygwin ターミナルで MyJDK9 ディレクトリに移動します。(既にそこにいるなら必要ないです)

cd /cygdrive/C/OpenJDK/MyJDK9

そして、make と freetype のオプションを設定して実行します。

./configure MAKE=/cygdrive/C/OpenJDK/make-3-82/make.exe with_freetype=/cygdrive/C/OpenJDK/freetype

58

59

 

最後に make を実行してビルド完了となります。

make all

これも時間がかかるのでコーヒーのおかわりをします。( ̄▽ ̄;)

61

 

これで終わりです。

ちょっと確認してみましょう。

cd build/windows-x86_64-normal-server-release/images/j2sdk-image と入力して移動します。

63

 

そして bin/java –version と打ち込みます。

openjdk version “1.9.0-internal”  … と表示され完了です。

64

 

念には念をで Windows のコマンドプロンプトでも確認してみました。

65

 

さらに本当に動くのか試してみた。

NetBeans IDE 8.0 を OpenJDK9 で動かしてみた。

71

 

Hello World は動くことを確認しました。

JavaFX は無いような・・・残念!

と言うことで近い将来正式なビルドガイドがリリースされ、ビルド方法も変わると思うのであくまで洒落でってことで!

ところで Java 9 の注目の新機能って Project Jigsaw の他に何かあったっけ?

 

Hatena タグ:

Java8 の Date & Time API ではまった。

Java

日経ソフトウェア4月号の「至極の Java クイズ」で JSR310 の問題がでていた。

知らない内容が鍵となっていてとても勉強になった。

しかし、それにもかかわらずはまってしまった。

ここでクイズです。

下記プログラムを実行するとどうなるでしょうか?

1.2014-03-03

2.2014-3-03

3.2014-3-3

4.実行時エラー

解りましたでしょうか?

 

このプログラムは DateTimeFormatter でパターンを設定し、ResolverStyle を設定しただけのシンプルなものですね。

LocalDate d = LocalDate.parse(“2014/3/03”, DateTimeFormatter.ofPattern(“yyyy/M/d”)
                .withResolverStyle(ResolverStyle.STRICT));

この問題の答えは 4.実行時エラーです。

Exception in thread “main” java.time.format.DateTimeParseException: Text ‘2014/03/10’ could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {YearOfEra=2014, MonthOfYear=3, DayOfMonth=10},ISO of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1919)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1854)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at jp.yucchi.localdateparsetest.LocalDateParseTest.main(LocalDateParseTest.java:15)
Caused by: java.time.DateTimeException: Unable to obtain LocalDate from TemporalAccessor: {YearOfEra=2014, MonthOfYear=3, DayOfMonth=10},ISO of type java.time.format.Parsed
    at java.time.LocalDate.from(LocalDate.java:368)
    at java.time.LocalDate$$Lambda$7/980546781.queryFrom(Unknown Source)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1850)
    … 2 more

 

ResolverStyle.LENIENT もしくは ResolverStyle.SMART だと 2014-03-03 と表示されます。

何故、ResolverStyle.STRICT だとエラーになるか解りますか?

エラーメッセージを読んでピンッてきたかたもいると思います。

ResolverStyle.STRICT は厳密に判定を下すので DateTimeFormatter.ofPattern(“yyyy/M/d”) の y をきっちり解釈してしまうのです。

ここでパターン設定に使われている y は year-of-era となっています。

これがエラーを引き起こす原因です。

じゃあどうすればいいかというと u を使えばいいのです。

u は year なので厳密に判断される場合でも全然問題ないのです。

よって、このプログラムを正しく動作させるには

LocalDate d = LocalDate.parse(“2014/3/03”, DateTimeFormatter.ofPattern(“uuuu/M/d”)
                .withResolverStyle(ResolverStyle.STRICT));

と DateTimeFormatter.ofPattern(“yyyy/M/d”) を DateTimeFormatter.ofPattern(“uuuu/M/d”) としてあげればいいのです。

よく見かけるサンプルは DateTimeFormatter.ofPattern(“yyyy/M/d”) となっているのが多いので注意が必要ですね。(^_^)

Hatena タグ:

JJUGイベント 「祝☆Java 8 Launch」

Java

昨日、東京で JJUGイベント 「祝☆Java 8 Launch」が開催された。

私は仕事で参加出来なかったが(休日でも東京まで行く元気は無いかも(^_^;) YouTube にその模様がアップされているので保存用に貼っておきます。

途中まで見かけたのですが昨日は YouTube が非常に重くあきらめました。

笑っていいともに安倍首相が出演したらしくその影響だったのかな?

ちなみに今の日本の総理大臣が安倍さんだって昨日知りました。( ̄。 ̄;)

アベノミクスって安倍首相からもじって名付けられたとか・・・ やっと納得!

政治にあまり興味がないのと NEWS もほとんど見ないので ← 非国民です!

さて、どうでもいいことはほっといて動画をどうぞ!

 

祝 Java SE 8 正式リリース

 

祝☆Java 8 Launch – 徹底解説!Project Lambdaのすべて リターンズ 吉田 真也 @bitter_fox #jjug

 

祝☆Java 8 Launch – Brand new Date and Time API 蓮沼 賢志 @khasunuma #jjug

 

祝☆Java 8 Launch – null書いたら負け!Java8コーディング作法 @kis #jjug

祝☆Java 8 Launch JavaFX – GUI by Illusion @skrb #jjug

 

祝☆Java 8 Launch from old Java to modern Java – reloaded @cero_t #jjug

 

祝☆Java 8 Launch – Raspberry Pi on Java ショートアップデート #jjug @masafumiohta

 

まだほとんど見てないのでこれからゆっくり見る!

凄く楽しそうな雰囲気が十分に伝わってくる!

JJUG の録画スタッフのかたはじめ、みなさまに感謝感激です!

Java 最高! (^_^)

Hatena タグ:

PS4 スタンバイモード移行時の不具合

未分類

PS4 のスタンバイモード移行時の不具合が発生しました。

本来なら移行時に白色の点滅の後オレンジ色に転倒するインジケーターが白色点滅のままフリーズしてしまいます。

ネットで調べても解決策は無いし、SONY のサポートに連絡すると交換となるそうです。

私が換装用に使用した東芝製の SSHD が原因の可能性があるのではないかと疑うユーザーも多いようです。

これは利用ユーザーが多いからかもしれません。

スタンバイモードが便利に使えるのでそれの移行でフリーズなんて許されることではありません。

しかたないので普通の HDD に交換しました。

ここで解ったことなのですが一部システム情報は本体のメモリーに保存されているようです。

初めてのセットアップのときのように全ての情報を入力しなくても済みました。

中途半端に情報が残っているのが気になりましたがどうしようもないので・・・

ひょっとしたら初期化をすれば良かったのかもしれません。

肝心のスタンバイモード移行時の不具合は改善されたかというと今のところ直っているようです。

この不具合は初めはなんともなくて、突然発生したのでひょっとしたらまた発生するかもしれません。

今回使用した HDD は HGST Travelstar パッケージ版 2.5inch 1.5TB 5400rpm 32MB SATA 6.0Gb/s 0S03634 です。

ちょっと中途半端な大容量となってます。

体感スピードは東芝製の SSHD と違いは感じられませんでした。

所詮、HDD ですからね(^_^;)

このまま不具合が出なければ東芝製の SSHD との相性問題ということになるのでしょうか?

はっきり言えることはスタンバイモードは便利だからこの不具合は絶対に許せないということですね。

SONY としては全ての HDD で動作保証はしないとしているので HDD 換装予定の人は気をつけてくださいね。

Hatena タグ:

« 古い記事 新しい記事 »