日記

昨日の問題は解決。下記の記事の通りにやってみてJavaで新元号の追加にも成功した。
qiita.com
ただしこれはSimpleDateFormatの話で、他も上手くいくのかまだ謎。

今更だけど初めてdockerに触った。やっぱり聞くだけとやるのでは理解度が10000倍くらい違う。(百聞は一見にしかず×百見は一行にしかず)
docker imageの差分がgitみたいになってるのは便利そう。

日記

某サービスがこのご時世にしばらく変更していないパスワードを変更しろなどと言ってきたのでランダムにパスワードを生成する方法は無いかと調べたところ mkpasswd コマンドを使うと楽ちんだった。サービスのポリシーに合わせて
mkpasswd -l 8 -d 1 -c 1 -C 1 -s 1
的な。

viでペーストするときに勝手にインデントされて困ってたのだけど、
:set noautoindent
してからペーストすれば良いって分かった。
:set paste

:a!
vimでは使えるけどviでは使えないっぽかった……。

Developpers Summit 2018へ行きました

2018/2/15, 2/16に開催されたデブサミ2018に行ってきました。
Developers Summit 2018

講演資料やTogetterへのリンクは下記から。
デブサミ2018、講演関連資料まとめ:CodeZine(コードジン)

私的に聞いていて最も興味深かったのは @daiksy さんのセッションでした。
【15-C-5】リモートワークは難しい - それでもぼくらは歯をくいしばってやっていく
リモートワークは難しい / Developer Summit 2018 // Speaker Deck
【デブサミ2018】15-C-5「リモートワークは難しい - それでもぼくらは歯をくいしばってやっていく」 #devsumiC #devsumi - Togetter
だいくしー (@daiksy) | Twitter

仕事の困難さはコミュニケーションの難しさに通ずだなと。
そして「心理的安全性」という言葉を知れて良かったです。
他のセッションでもちらほら聞いた言葉だったのでぐぐったらGoogleの研究結果なのですね。
弊社は完全トップダウンの会社でしかも上の人がやたら怒るタイプだし心理的安全性が限りなくゼロに近いんですが、一平社員に意識改革なんて始められるんですかね……?

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)

※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 です。お疲れ様でした。