Java

JOnsen 2019

5月24日から26日にかけて、湯布院!で開催されたJavaのアンカンファレンスJOnsen 2019に参加しました。 湯布院! 温泉地らしい猥雑なところはなくて、農村に温泉宿とちょっとした目抜き通りができました、という感じです。公衆浴場もいくつかあったのですが…

JJUG CCC 2019 Springの記録

5月18日に開催されたJJUG CCC 2019にスタッフとして参加&セッションで喋ってきました。これまでで最多かそれに近い、1,200人以上が参加する巨大イベントになりました。熱気がすごかった。CCCがでっかくなったということで、今回の総会では、CCCの運営を専門…

2/27 JJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」に登壇しました

2月27日(水)に開催したJJUGナイトセミナー「JVM言語を作ろう! GraalVMで遊ぼう!」に登壇しました。セミナーの様子についてはmike-neckさんの記事をご参考ください。無茶苦茶に楽しいイベントでした。 JJUG ナイトセミナー 「JVM言語を作ろう! GraalVMで…

Java女子部「Java SE 8から11で何が起きた?一気におさらいしてみよう!」

Java女子部で、Java SE 8から11にかけての変動について喋らせていただきました。 イベントページ スライド: Java SE 8から11で何が起きた?一気におさらいしてみよう! 特定の技術に限らない、Java SE全体の動向の話をするのははじめての経験だったので、大…

代数的データ型のシミュレーション

タスクの完了状態として、 1. 正常に値を戻した場合 2. 例外を投げた場合 3. まだ完了していない場合 の3種類があるとします。Haskellであれば代数的データ型、OCamlであればvariant型で表すところです。Javaは、このような型を言語としては表せませんが、Vi…

ForkJoinPool vs ThreadPoolExecutor

12月27日のJJUGナイトセミナーLT大会に参加しました(LT資料)。会場片付けの際、マルチスレッド処理に関して発表された @hiroga_cc さんと、ForkJoinPoolとThreadPoolExecutorの使い分けについて、少しだけおしゃべりしました。その場では頭がこんがらがっ…

JJUG CCC 2017 Fallの記録

11月18日に開催されたJJUG CCC 2017 Fallに、スタッフとして参加、およびセッションでしゃべってきました。一日中セッション部屋担当で、なんかアナウンスしたり、「N分前」の紙を出したり、Twitterのハッシュタグを賑わしたりしていました。 AsciiDocとPlan…

自動モジュールと無名モジュールのアクセス権とアクセシビリティ

Java SE 9のモジュール・システムには、古いコードベースからの移行のために、二種類の特殊なモジュールが存在します。自動モジュール (automatic module) と、無名モジュール (unnamed module) のふたつです。自動モジュールは、典型的には、モジュール・レ…

実行時におけるJava SE 9モジュールとクラスローダーの関連

Java SE 9のモジュール・システム(Jigsaw)はコンパイル時と実行時の両方で機能します。実行時には、Java SE 8以前から存在するクラスローダーの機構とうまく帳尻を合わせて、既存のアプリケーションを壊さないようにする必要があります。結果として、両者…

Runtime relationship between class loaders and Java SE 9 modules

The Java SE 9 module system, or Jigsaw, works at both compile-time and run-time. At run-time, Jigsaw must work well together with the old class loader mechanism, without breaking existing applications. It has resulted odd and subtle relati…

Handling auto-generated keys on Bootiful SQL Template

About the library Bootiful SQL Template is an O/R mapper library which acts as a thin wrapper to Spring JdbcTemplate. The library adds following functionalities. SQL files Moderate facade methods such as forObject, forList and update Limit…

各言語のprintfはロケールに依存するか

言語やライブラリによっては、printf系関数の出力がロケールに依存する場合があります。たとえば、ロケールによっては小数点がカンマで出力される場合があります。手元の各環境で調べたところ、次のとおりでした。 ロケールに依存する: POSIX, Java, Lua ロ…

Javaの正規表現における下位サロゲートの問題ある挙動

Javaの正規表現で下位サロゲートコードにマッチするパターンを書くと、完全なサロゲートペアの後半16ビットにマッチしてしまうことがあります。少なくとも、次のバージョンはそのような挙動を示します。 Oracle Hotspot 1.8.0_72 OpenJDK 1.8.0_66 詳細 次の…

Problematic behavior about low surrogate codes in Java regex patterns

Regex patterns or partial patterns representing low surrogate codes wrongly match the latter half of complete surrogate pairs. At least the following JRE versions are affected. Oracle Hotspot 1.8.0_72 OpenJDK 1.8.0_66 Description The follo…

10/14 JJUGナイトセミナーでJavaのログ出力について喋りました

10月14日(水)のJJUGナイトセミナーでJavaのログ出力について喋りました。 Javaのログ出力: 道具と考え方 最近はFluentdやELKスタック (ElasticSearch + Logstash + Kibana) の流行で、ログの収集・可視化についてはよく語られているようです。一方で、なぜ…

渋谷JVM - JVM言語編でLTしました

渋谷JVMという集会の案内を見て、しばらく流していたのですが、実はJVM言語の集まりということが分かったので、Kinkの宣伝のためLT枠に滑り込みました。CCCの懇親会LTを使い回して、午前中には資料を完成させました。用意周到です。本編はScala, Clojure, Gr…

JJUG CCC 2015 Springで金勘定の話をしてきました

4月11日にJJUG CCC 2015 Springが開催されました。だいぶ遅くなりましたが、以下簡単にレポートです。午前中はほぼ受付やってました。午後はCDの部屋に張り付いて、N分前の札を出したりなんかしていました。ということで、聞いたセッションは次のとおりです…

CodeZineのJavaラムダ式連載の最終回が掲載されました

Template Methodパターン+Factory Methodパターンのプログラムにラムダ式を適用するにはどうすれば良いのかしら、という記事を掲載していただきました。これで連載は最終回となります。以下、各回の記事です。 第1回 ラムダ式でCommandパターンで書かれたコ…

CodeZineのJavaラムダ式記事の3回目が掲載されました

少し遅くなりましたが、Obseverパターンのプログラムはラムダ式でこんな風に書けるよ!という記事を掲載していただきました。 Observerパターンをラムダ式で置き換える 〜 オブザーバオブジェクトはラムダ式によって簡潔に生成できる 次回が最終回です。

JavaのGCログのローテーション

Oracle JDKの7u2以降、GCログがローテーションできるようになりました。また、JDK8および、JDK7のPSUリリース*1である7u76では、GCログのファイル名にプロセス番号と日時が含められるようになりました。7u76以外、特に目新しい話ではありませんが、備忘のた…

CodeZineのJavaラムダ式記事の2回目が掲載されました

Strategyパターンのプログラムはラムダ式でこんな風に書けるよ!という記事を掲載していただきました。 ラムダ式でStrategyパターンで実装されたコードをシンプルにする 〜 そこから見えてくるストラテジオブジェクトの本質 ラムダ式の記事というよりも、デ…

CodeZineでJavaラムダ式の連載を始めました

CodeZineで、ラムダ式を使ったJavaプログラムの設計に関する連載を始めました。オブジェクト指向言語のデザインパターンのいくつかは、ラムダ式(というか無名関数一般)を使えば、パターンを意識するまでもなく書けるよ、という内容です。初回はCommandパタ…

Javaによる関数型プログラミング

Javaによる関数型プログラミング ―Java 8ラムダ式とStream作者: Venkat Subramaniam,株式会社プログラミングシステム社出版社/メーカー: オライリージャパン発売日: 2014/10/24メディア: 単行本(ソフトカバー)この商品を含むブログ (3件) を見るラムダ式を…

不動点コンビネータを使ってラムダ式で再帰関数を定義する

Javaのラムダ式で再帰関数を書くのはちょっと面倒です。例として、フィボナッチ数列のN番目の項を再帰的に計算する関数(以降フィボナッチ関数)を考えます*1。次のコードはエラーになってしまいます。 IntUnaryOperator fib = n -> n <= 1 ? 1 : fib.applyA…

throws 節に型変数を使って任意の例外を投げる forEach メソッドが書ける

id:miyakawa_taku:20140609:1402320680 の続きです。Java SE 8 では Iterable インタフェースに forEach メソッドが用意されました。いわゆる内部イテレータで、通常は次のようにラムダ式をともなって使います。 List<String> list = ...; list.forEach(str -> Syste</string>…

Java の throws 節では型変数が使える

つい先だって知ったのですが、 Java のメソッドの throws 節では型変数が使えます。 8.4.6 Method throws / Java Language Specification これによって、投げる可能性のある例外の型が使い手側で変えられるようなメソッドを書くことができます。たとえば次の…

Java SE 8 でのメソッド継承のルール

Java SE 8 では、デフォルトメソッドが追加されたため、メソッド継承のルールが新しくなりました。以下に、 Java SE 8 でのメソッド継承のルールを一通りまとめます。 前提となる概念 型消去 (type erasure) シグネチャ (signature) サブシグネチャ (subsign…

ラムダ式は必ずしも invokedynamic に翻訳されるわけではない

Java 8 で導入される新しい Date & Time API に関する良い記事です。 *1 Java8の日付および時刻処理(Date/Time API(JSR-310))の紹介と利用指針 | ありえるえりあ ですが、冒頭のラムダ式に関する記述に若干の問題があります。 ひとつだけラムダ式について言…

多値と JVM

JVM は多値が素直に扱えないよ、という話。多値とは、式が複数 (>=2) の値を結果とすることです。 Go 言語では積極的に使われているみたいです。求める結果と、エラー値を、併せて戻す、みたいに。 file, error := os.Open(name) if error != nil { return e…

JJUG ナイトセミナーで Java SE 8 のラムダ式について喋ったよ

7月22日の JJUG ナイトセミナーで Java SE 8 のラムダ式について喋りました。櫻庭さんが基礎。私はラムダのインスタンス化の詳細について喋りました。 2013/07/22(#jjug)JJUG Night Seminar ~ Inside Lambda (Togetter) Project Lambdaの基礎 (櫻庭さんの資…