java

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って何がいいの?…

SpringBootでPrimefacesのFileUploadを使う

すげーハマった。 正確にはSpring MVCと一緒に使ったとき。 いまのところこんな感じ SpringApplication.runしたときに@ManagedBeanが効く設定がわからない なのでConverterでDIができない(DIさせるにはConverterはManagedBeanにしてconverterId指定じゃなくb…

p:graphicImageでハマったらあきらめよう

PrimeFacesのp:graphicImage、便利ではあるんだけど、バグがまだあるようです。 ちゃんと切り分けてないんで、今回ハマったのが具体的にどんなバグかまではわかってないけど、p:tabPanelでまわすのがダメなのかなー。 画像処理サーブレットを作って対応して…

finalアリ/ナシでの処理時間差と謎現象

気になったので、フィールドにfinalアリ/ナシでメソッド呼び出しに差がでるかどうか確認してみました。 まあ、結論としてはどっちも一緒、なんですけど、ちょっと謎現象がありました。 インタフェースのフィールドとクラスのフィールドそれぞれfinalアリ・ナ…

ぼくの実装した最弱のディープラーニング

8月の頭からディープラーニングを実装していたのを、先日、プレゼンしてきました。 プログラマのための数学勉強会@福岡 - connpass ぼくの実装した最弱のディープラーニング from なおき きしだ ※追記 2023/4/12 SpeakerDeckにも置いてます https://speakerd…

Randomの状態を保存する

Randomを使ったプログラムを一時中断して、あとから再開したり、ほかのコンピュータから再開したりしたいこと、ありますよね。 そういうとき、Randomの状態を保存する必要があります。 そんなときは、とりあえずこんなメソッドを用意します。 public static …

OptionalがSerializableではない話と使い方まとめ

Optionalは意図的にSerializableではなくなってますね。 でその意図としては、一旦Serializableにして出力形式を決めてしまうと、今後ずっとその出力形式を維持しないといけないことになるので、そのメンテナンスコストを嫌ったというのがあるようです。 こ…

畳み込みニューラルネット、失敗

最近流行りのディープラーニングなるものを実装しようと思ってます。 いまやろうとしてるのは、画像認識のための畳み込みニューラルネット(CNN)です。 一応、コードを書いてみるには書いてみたんですけど、失敗。 下のノイズっぽいのが一段目のフィルタ群な…

lombok1.16からはmavenでのcompiler-pluginが必須になってるぽい

どうやら、lombok1.16からは、mavenではmaven-compiler-pluginを使ってバージョン指定することが必須になってるっぽい。 lombok1.14ではOKだったけど。 こういう記述が必須になった、と。Java7以前なら不要かもしれないけど。 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>m</artifactid></plugin></plugins></build>…

Gaborフィルタの逆変換

Gaborフィルタを作ってみたんだけど、逆転させてフィルタかけたらどうなるかなーという実験。 ちょっと、フィルタ部分は汎用な感じで冗長に書いてるから遅いです。 こんな感じになりました。 ついでに、画像をダイアログで選ぶようにしてます。 import java.…