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)からダウンロードして
/lib/security/ ディレクトリにある
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報告会に行ってきました

f:id:lore:20171021172204j:plain
2017/10/21(土)に開催されたJavaOne2017報告会に行ってきました。

jjug.doorkeeper.jp

他の方々が既に素晴らしい感想記事をあげていらっしゃるので、こちらでは私的に気になったところの感想を少々。

私は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以外に無いなあという感じですね。
以上です。

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.140000000000001

jshell> /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

# はてなブログだと円記号がバックスラッシュになる?

iPhoneのボイスメモをPCに取り込む方法

iPhoneの容量がほとんど無いのでさしあたりボイスメモをPCに移そうかと思ってぐぐったところ、メールで送る(容量制限がある)とか、iTunesで同期するとか、PCにソフトウェアをインストールするとかでちょっと面倒だなと思っていたのですが、今どきのiOS(書いている時点ではiOS10です)は該当するアプリがiPhoneに入っていればボイスメモアプリから直接Dropbox等々に保存することもできるんですね。便利でありがたいです。

iTunesで0xE800000Cが出る

f:id:lore:20170913030820p:plain
iTunesiPhone5sを繋いで同期しようと思ったら上記の「不明なエラーが発生しました(0xE800000C)。」というダイアログが出てしまい、iPhoneiTunesに認識されず、ケーブルを刺しなおしたりしても直らないので困りましたが、結論から書くとPCとiPhoneを再起動したら直りました。

iTunes で iPhone、iPad、iPod が認識されない場合 - Apple サポート

上記ページの
6. コンピュータと iPhoneiPad、または iPod を再起動します。
で直ったことになります。
あ~良かった。

Java Day Tokyo 2017に行ってきました

とある勉強会である人は言いました。
「勉強会は家に帰ってブログを更新するまでが勉強会です。」
これは当然イベントにも当てはまるわけなので、ひとまずここに行ってきた記録を残します。
尚、私はJavaに詳しくないJava開発者なので浅いですが、ご容赦ください。

Java Day Tokyo 2017

2017/05/17(水)9時半から。

参加したセッション

  • D1-KY: Java Day Tokyo 2017 基調講演
  • D1-A1: Java 9 and Beyond: Java Renaissance in the Cloud
  • D1-A2: Modular Development with JDK9
  • D1-D3: Deep Learning with Java
  • D1-A4: Java SE 9のすすめ
  • D1-A5: Ahead-of-Time Compilation with JDK9
  • D1-NT: スペシャルセッション

Java Day Tokyo 2017 基調講演

クラウドとセキュリティを推していた印象。他社事例やデモがありましたが、Javaならでは感はやや希薄な印象を受けました。

Java 9 and Beyond: Java Renaissance in the Cloud

モジュールの使い方などについて綺麗にまとまっていました。

Deep Learning with Java

ディープラーニングの話が95%くらいで、少しだけDeeplearning4jというものがあるよ的なセッションでした。

Java SE 9のすすめ

@skrb さんのセッション。互換性、新機能、改善点について。私の仕事上互換性はかなり心配です。

Ahead-of-Time Compilation with JDK9

AoTの話ですが、正式サポートではないのですね。ちょっと残念。
AoTの効果は速くなる※場合もあるということなのですが、とりあえず試してみるのが良いのかもしれません。

スペシャルセッション

コミュニティリーダーと各国のJavaチャンピオンによるパネルディスカッション。
簡単なことです、まずは英語で発信しましょうと言われましたが、私にとってはそれがなかなか難しいです。
いつも英語を使うようにしていれば慣れるんでしょうか。

会場に関してなど

結構つぶやいている方もいらしたのですが、冷房が効き過ぎて寒かったです。こういうのは多分壇上の方は暑いので調整が難しそうです。
あとアンケートURLが複数回変わってちょっと巻き込まれました。
Twitterハッシュタグはあったのですが、デブサミなどに比べるとかなり静かでした。本来ハッシュタグはセッション毎にあった方が良いと思うのですが、人数が少ないので1人だけでTweetし続けるなんてことにもなりかねず、悩ましいですね。

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でした。