Java 8 update 151 でのJCE無制限強度管轄ポリシーの適用方法
JavaSE8u144まではAES256のような強度の高い暗号を利用するにはJCE無制限強度管轄ポリシーファイルをJRE(またはJDK)とは別途Oracleのサイト(Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download)からダウンロードして
local_policy.jar
と
US_export_policy.jar
とを差し替える必要がありました。
JavaSE8u151では、
JAVA_HOME/lib/security/policy/unlimited/ ディレクトリに
2つのJCE無制限強度管轄ポリシーファイルが既にあるので、
JAVA_HOME/lib/security/java.security
を編集して
crypto.policy=unlimited
を記載するだけで利用できるようになりました。
(デフォルト値はlimited)
※2018/02/05追記:8u161からデフォルト値がunlimitedに変更になりました。
詳細はOracleの更新情報を確認してください。
Java 8リリースの変更
JavaOne2017報告会に行ってきました
2017/10/21(土)に開催されたJavaOne2017報告会に行ってきました。
他の方々が既に素晴らしい感想記事をあげていらっしゃるので、こちらでは私的に気になったところの感想を少々。
私はJavaを組み込むのを少々やっているため、その関係で1番気になったのはリリースモデルの変更です。
従来はメジャーバージョンアップデートと共にOracleJDKがリリースされ、それに数年間の保証があったわけですが、Java9には次にJava18.3がリリースされるまでの半年間の保証しかありません。
LTS(Long Term Service?)のリリースとそうでないリリースに分かれ、Java9はNot LTSなのです。LTSになるのはJava18.9、つまり2018/9にリリースされるOracleJDKというわけです。
また、このように今後はバージョン名の付き方も変わります。Java{年の下2桁}.{月}ですね。(Javaを来世紀に持ち越す気は無いようです。)
Java18.9の次のLTSは3年後(Java21.9?)とされており、これが従来のメジャーバージョンアップに当たると思われます。
更に従来機能が出揃うまでメジャーバージョンアップが延期続きになったという反省を踏まえて、LTS版も日付で区切ってそこまでで出来ている機能を出すという方針に変更されました(果たして上手くいくのでしょうか)。
まあ、組み込むにはLTSのJava以外に無いなあという感じですね。
以上です。
JavaSE8u151
もうそろそろ(10/16頃)Java8u151が出ると思うのですが、更新内容は↓で良いのかな。
JDK: 8u151 - Java Bug System
リリースされたらリリースノートが出ると思うのですが。
Scratchとプログラミン
子供向けビジュアルプログラミングの先駆けScratch、長いことiPad版(正確にはScratch1.4ベース実装のピョンキー)を使っていたのですが、この度PC版を弄ってみることにしました。
scratch.mit.edu
PCだと操作し易くて、バージョンも高いので命令も色々ある感じです。
とりあえずチュートリアルがあるのでチュートリアル通りに作れば色々作れます。
肝心の子がまだ幼過ぎるのであまり関心を示してくれないのが悲しいです。
言語設定を英語にしておくと英語の勉強にもなって一石二鳥かもしれません。
ScratchはMIT産ですが、日本にも文部科学省の提供するプログラミンというビジュアルプログラミングがあったりします。
www.mext.go.jp
国産だからかなんだか絵が可愛らしいのが利点。
アニメーションのほかに、ゲームも作れます。
手前味噌ですが昔作ったのを貼っておきます。
# 自分でどう作ったかあまり記憶にありませんがw
www.mext.go.jp
Java9 JShellのいろは
OpenJDK9のうちからJava9からの機能であるJShellを弄っていて記事にしようと思っていたらJava9が正式リリースになってしまいました。せっかくなのでメモ的なものを書いておきます。本当は社内向けに作った教育用資料を貼れると良いのですが、機密文書横流しで始末書とかになったらたまらないので諦めます。
JShellはREPL(Read–eval–print loop)です。Javaは今までいちいちコンパイルして実行しないと結果が分からなかったのが、コマンド1つ打てばすぐに結果が分かるようになったわけです。
JShellを利用するには、JDK9をインストールして(JRE9の方ではありません)jdk-9\binにパスを通してjshellって打ち込めば良いです。Windowsの場合はエクスプローラからjshell.exeを実行してもよいです。
C:\Program Files\Java\jdk-9\bin>jshell.exe
JShellへようこそ -- バージョン9
概要については、次を入力してください: /help intro
とりあえず /help intro と打ち込めば、JShell の説明を出してくれます。
jshell> /help intro
intro
jshellツールを使用すると、Javaコードを実行して即座に結果を取得できます。
int x = 8などのJava定義(変数、メソッド、クラスなど)、
x + xなどのJava式またはJava文を入力したり、
インポートしたりできます。
これらのJavaコードの小さなチャンクを「スニペット」と呼びます。
また、/listなどの実行する内容を理解および制御できるjshellコマンドも
あります
コマンドのリストを参照する場合: /help
HelloWorld的なものは本当に簡単に試せます。クラスとかメソッドを途中まで打ち込んでTabキーを押すと補完が動くので楽です。1行に1命令だけ書く場合は、行末のセミコロンは不要です(あっても良い)。
jshell> System.out.print
print( printf( println(
jshell> System.out.println("Hello, JShell!!")
Hello, JShell!!
受け皿となる変数を用意せずに適当な計算をすると、勝手に型を推定してテンポラリの変数に代入してくれます。便利。
jshell> 1 + 2 + 3.14
$2 ==> 6.140000000000001jshell> /var
double $2 = 6.140000000000001
JShellのコマンドは全て / から始まります。/help を打ち込めば表示されるので、一通り試せばJShellの使い方はかなり理解できるかと思います。必見です。
JShellを終えるときは /exit です。お疲れ様でした。
JavaSE9では--vesionが使えるようになりました
一部で話題になっていたので確認の意味も込めて。
Java9の場合。
C:\>java -version
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
C:\>java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
どちらかが標準出力でどちらかが標準エラー出力だという話も聞いたのですが、未検証。
Java8(JavaSE8u131)の場合。
C:\>"C:\Program Files\Java\jdk1.8.0_131\bin\java" -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
C:\>"C:\Program Files\Java\jdk1.8.0_131\bin\java" --version
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit
# はてなブログだと円記号がバックスラッシュになる?
Java Day Tokyo 2017に行ってきました
とある勉強会である人は言いました。
「勉強会は家に帰ってブログを更新するまでが勉強会です。」
これは当然イベントにも当てはまるわけなので、ひとまずここに行ってきた記録を残します。
尚、私はJavaに詳しくないJava開発者なので浅いですが、ご容赦ください。
Java Day Tokyo 2017
2017/05/17(水)9時半から。
参加したセッション
Java SE 9のすすめ
@skrb さんのセッション。互換性、新機能、改善点について。私の仕事上互換性はかなり心配です。
Ahead-of-Time Compilation with JDK9
AoTの話ですが、正式サポートではないのですね。ちょっと残念。
AoTの効果は速くなる※場合もあるということなのですが、とりあえず試してみるのが良いのかもしれません。
appletviewerにクラスパスを渡す方法
JavaにはJavaアップレットを簡単に起動する方法としてappletviewerがある。
appletviewer hoge.html
本来これだけでアップレットが起動出来る(hoge.htmlは予めちゃんと書いておく)のだが、jarファイルが違う場所にあって、java.lang.NoClassDefFoundErrorで半日悶える羽目になったのでメモしておく。
結論から書くと、-Jオプションを使えば良い。
appletviewer -J-Djava.class.path=クラスパス hoge.html
-J-cpや-J-classpathは使えなかった(スペースが上手く扱えなかった可能性がある)。
あと-Jオプションは非標準なので将来使えなくなる可能性がある。
尚、バージョンはJavaSE8でした。