java

Java9から三項演算子でのunboxingの挙動がJava8とは変わっている

Java9からJDK11-ea18まで、三項演算子でのunboxingの挙動がJava8とは変わっているようです。Double d = false? 1.0: new HashMap<String, Double>().get("1");yields null in #Java8, but NullPointerException in #Java10. Why?https://t.co/MUaql1vd9e— Nicolai Parlog (@n</string,>…

Java11ではjavacせずにJavaファイルが実行できるようになる

JDK11 ea18から、javacしないでもJavaファイルを実行できるようになりました。 あと、Windowsバイナリはzipファイルで提供されるようになっています。tarコマンドが提供されたとはいえ、エクスプローラーから解凍できるzipファイルになるのは ありがたい。 J…

Javaの新元号対応を試す。そして実用には問題がある。

新元号対応はNewEraという仮の元号で対応が進んでいるので、試してみました。 おそらく、実用では使えない場面がある仕様になっています。 なので、元号対応が必要そうな人は、早めに試して声をあげる必要があると思います。 ビルドする ※ 2018/6/16追記 ea1…

Java9、10でStringの+=に副作用があるバグ

Java 9、10でStringの+=にバグがあるということがStack OverFlowで報告されていました。 Why does array[idx++]+="a" increase idx once in Java 8 but twice in Java 9 and 10? - Stack Overflow どういうバグかというと「s[i++] += i + ""」のようなコー…

JShellを使ってJava2Dであそぶ

JShellを使ってJava2Dであそんでみました。楽しい。 Javaが初めての人はこちらもどうぞ。 JShellで始めるJava - Javaの世界を覗いてみる - Qiita ということで、まずjavax.swing.*をimport jshell> import javax.swing.* JFrameを用意 jshell> var f=new JFr…

GraalVMでRust動かしたりレイトレをネイティブコンパイルしたり

GraalVMが正式にリリースされました。結構話題になってますね。 GraalVMは、JavaベースJITとAoT、そしてASTエンジンTruffleの複合体です。(かな?) GraalVM ということで、Rust動かしたりJavaで書いたレイトレコードをネイティブコンパイルしたりしてみまし…

マイクロサービスフレームワークArmeriaを始める

Armeriaのチュートリアルを書いてみる https://line.github.io/armeria/index.html RESTサーバーとして使う まずは、プロジェクトを用意します。 dependencyにcom.linecorp.armeria:armeria:0.62.0を追加します。 mavenの場合、次のようなpom.xmlを用意しま…

Java10のvarをどう使うか

Java 10でvarが追加されました。が、いろいろ使い方は悩ましい気がします。 いろいろ議論をしたので、そこで考えたことをまとめておきます。 JShellでは読むことを考えなくていいのでガンガン使いましょう。 あと、OpenJDKのStyle Guidelinesも見ておくとよ…

Java 10のコンパイラバグを見つけた

予定通りにJava10が出ましたね!Javaが予定通りにリリースされることが珍しすぎたのか、関東では雪になっていたようです。 Java10の変更点についてはこちらにまとめています。 Java 10新機能まとめ - Qiita Java10のJEP以外の変更まとめ - Qiita ところで、v…

JDK 11で2つメソッドが削除されてHTTP Clientが正式に入る

JDK9でincubatedでJDK10でもincubatedなHTTP Clientが、ようやくJDK11でjava.net.httpパッケージで入るらしい。 JDK HTTP Client - JEP 321 - Update あと、 1.2からDeplicatedだったrunFinalizersOnExitメソッドが削除される。Runtime.runFinalizersOnExit…

Thymeleaf3は2より3倍速く、JDK9では3割遅くなる

Thymeleaf3がどのくらい2より速くなってるか、あとJDK9のcompact stringは有利に働くかどうか、ベンチマークを取ってみました。 結果として、Thymeleaf3は2より3倍速く、JDK9では遅くなっていて、compact stringは関係なさそうという感じ。 あと、Pebble速い…

OpenJDK/amberをビルドしてパターンマッチングの世界を体験する

ほんとはjdk10をビルドしてvarの世界を体験するエントリだったのだけど、ここでバイナリが提供されたので、Amberの話にします。 Project Amberは、Javaにパターンマッチングを導入するプロジェクトです。 varによるローカル変数型推論もAmberの一部だったの…

JUnit5で変わるテストの書き方

JUnit5が案外よさげなので、JUnit5を使うとどんな感じでテストが変わるのか考えてみます。 実際にどこが変わったかとか、使い方自体はいろいろまとめられたブログがあるし、公式ドキュメントも読みやすいのでそちらを。 http://junit.org/junit5/docs/curren…

新しいリリースモデルはJavaを使う人 全員要注目だった

9月の頭くらいに、Javaのリリースモデルが6ヶ月ごとの短期リリースになるということが発表されてました。 で、「へぇ〜」みたいな感じで見てたのですけど、JavaOneでの話を聞くと、これ結構大変なのかも、ということになってそうなので、ちょっとまとめてみ…

JavaOneサンフランシスコ 2017 5日目

さて、今日は最終日です。 「帰りの会」であるコミュニティキーノートがあったのですが、ちょっと体調がわるかったので、そのあとから。 よこな氏がカンフーマスターだったらしいので見たかったのだけど。 Introduction to Machine Learning with Apache Spa…

JavaOneサンフランシスコ 2017 4日目

水曜日は遠足の日です。去年からはAT&Tパークになってますけど。ライブとかビールとかあります。 Machine Learning for Java Developers in 45 Minutes [CON2977] 朝、8:30から来てみた。 機械学習とは何か、みたいな話をしていた。 まずCommons Mathで線形…

JavaOne サンフランシスコ 2017 3日目

JavaOne3日目です。結構本気の日ですね。 とりあえずメモ書きだけで大変なので、詳しくはあとで書く。 Enabling Java for Persistent Memory Hardware [CON7656] 頑張って9:30からのセッションに来ました。永続メモリをJavaで扱う話。Intelのセッションなの…

JavaOneサンフランシスコ2017 2日目

JavaOne、今年も来てます。昨日までのは、あとで書く。 Java EE 8: What’s New in the Java EE 8 Release [CON2661] リンダのセッション。例年は満員なんだけど。 かなり空いてる。 やはり、3年同じことを話してたら、人も来なくなるか。 JSON-BやCDIなどの…

ラムダのオブジェクトはどう作られるか

ラムダは匿名クラスのシンタックスシュガーだとか言われますけど、オブジェクトの作られ方が違いますね。 というのを検証してみます。 (jdk1.8.0_112で動かしています) ループの中でhogeにラムダを渡して、hogeでオブジェクトを表示します。 まず匿名クラス…

Javaの難しいところ

Javaをプログラム未経験者に教えるときの話。 細かいところまでちゃんと理解するための難しさではなくて、とりあえず頻出コードが読み書きできるまでの難しさの話です。細かいところまでの理解、どの言語も難しいので。 あと、ここではプログラム自体の難し…

Java9で小の月を列挙する

jshell> LocalDate.of(2017,1,31).datesUntil(LocalDate.of(2018,1,1),Period.ofMonths(1)). ...> filter(d -> d.getDayOfMonth() != 31). ...> map(LocalDate::getMonth). ...> toArray() $163 ==> Object[5] { FEBRUARY, APRIL, JUNE, SEPTEMBER, NOVEMBER…

Learn about asynchronous processing with Dagger by PPAP

At the previous article, I introduce the DI function in the Dagger. PPAPで学ぶDaggerによるDI - きしだのはてな(Japanese) Dagger is known as a DI container, but it is not known that can be used as an asynchronous framework. There had been th…

PPAPで学ぶDaggerによる非同期処理をZipkinで確認

前回、Daggerで非同期処理をやってみました。 PPAPで学ぶ、Daggerによる非同期処理 - きしだのはてな ただ、こういうログでの実行結果を見せられて、ほら非同期になってるでしょって言われてもよくわからないと思うので、Zipkinで見てみます。 Zipkinは、Goo…

PPAPで学ぶ、Daggerによる非同期処理

前回は、DaggerのDI機能を紹介しました。 PPAPで学ぶDaggerによるDI - きしだのはてな DaggerはDIコンテナとしては知られていますが、非同期処理フレームワークとして使えることはあまり知られていないと思います。機能はあったのに、ドキュメントがなかった…

PPAPで学ぶDaggerによるDI

Daggerってありますよね。コンパイル時に依存性を解決するのでパフォーマンス的に有利なDIコンテナです。 https://google.github.io/dagger/ 依存関係の不備がコンパイル時にエラーになって発見できるのも、実行時にエラーが出たときの修正の難易度が高いAnd…

Javaにデータクラスやパターンマッチングが導入される?

DevoxxでのBrian Goetzのプレゼンで、Javaにデータクラスやパターンマッチを入れるというアイデアが発表されていました。 Oracleの資料では、必ず最初に「将来の仕様について約束したりするものではないですよ」というスライドが入りますが、今回のプレゼン…

離散ウェーブレット変換を使った情報圧縮・電子透かし

離散ウェーブレット変換のコードができたので、これを使っていろいろ遊んでみます。 やり直しのための通信数学―フーリエ変換からウェーブレット変換へ (ディジタル信号処理シリーズ)作者: 三谷政昭出版社/メーカー: CQ出版発売日: 2008/02メディア: 単行本 …

離散ウェーブレット変換の実装

ウェーブレット変換は、時系列データの時間ごとの周波数成分を解析するための手法です。 以前にもウェーブレット変換は やってたのだけど、今回は計算の軽い離散ウェーブレット変換をやってみます。 計算としては、隣り合う2項目の移動差分を値として使い、…

作って理解するWebフレームワーク

前回、簡単なDIコンテナを作ってみたので、次はこれを使ってWebフレームワークを作ってみたいと思います。 Webサーバーをつくる まず、WebフレームワークなのでHTTPサーバーが必要ですね。なので簡単なものを作ります。 とりあえずブラウザからリクエストを…

作って理解するDIコンテナ

DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?…