tryjshell

Java9のREPLであるJShell。
インストールすればコマンドからすぐ使えるのですが、それすら面倒な場合は下記のサイトですぐに使えます。

tryjshell.org

ただ、iOSChromeから使おうとしたら下の方がキーで隠れちゃいました。
f:id:lore:20171108002843p:plain

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)

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

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

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