Kengo's blog

Technical articles about original projects, JVM, Static Analysis and JavaScript.

java

SpotBugs 3.1.0 RC6の利用とフィードバックのお願い

先日SpotBugsの最新版となる3.1.0 RC6が出ました。大きな問題が無ければ、これが最後のRC版となる予定です。 Release 6th Release Candidate for SpotBugs 3.1.0 · spotbugs/spotbugs · GitHub SpotBugs開発において、私は新マニュアルサイト整備、CHANGELOG…

FindBugsの後継としてのSpotBugsの紹介

このエントリは「Announcing SpotBugs as FindBugs successor」の意訳です。一部、明らかなURLの誤りを修正し、可読性のため強調を施しています。 皆さんこんにちは、 このメールはこのメーリングリストにおける私の最後の投稿であり、また昨年のこちらの投…

javadoc.ioのクローンをreactorで実装した

また技術キャッチアップ用のプロジェクト作りました。今回使いたかったのは以下の4つ: spring-boot v2.0(リリース前) spring-webflux v5.0(リリース前) selenide v4.5 checker framework v2.2 Springは5.0リリース前にマイルストーン版を使って感覚を見…

maven archetype v2の作り方

メモ。公式ドキュメントにはv1の作り方しか書いてないのだが、v2も別のドキュメント読み解けばちゃんと作れるよ、ということを教えてもらった。 https://github.com/spotbugs/spotbugs-archetype/pull/7#issuecomment-320870124

JJUG CCC 2017 Springでセッション&LT参加してきました

前回のエントリでの宣言通り、本日のJJUG CCCでセッション発表してきました。発表のスライドと動画が後日、下記会社のアカウントから共有されると思います。公開されたらこの記事で紹介します。 Worksapplications presentations WAP!TechTalks - YouTube 昼…

JJUG CCC 2017 SpringにてSpotBugsの話をします

最近ブログ熱が下がっていたのと、SpotBugsの中の人になってドキュメントとかいろいろ触っていたのとで更新が途絶えていました。 そろそろSpotBugs 3.1.0−RC2を出せるのではと思いますので、そのうち試してください。 なおJava8対応強化だけであればリリース…

MSAキャッチアップ用プロジェクトを作りました

MSAは理屈が多く、手を動かさないとわからないことが多すぎるので作りました。 GitHub - KengoTODA/brownie: A distributed video converter ついでに非同期I/OとサーバサイドReactiveを学ぶためにVert.xとRxJavaを採用しています。Spring Framework 5は別で…

RxJavaはVert.x 3でSQL書くのに便利

自分にとっての新技術を試すための個人プロジェクトでVert.xを使っているのだが、PostgresクライアントがTechnical Previewになったのでオンメモリに乗せていたデータをpostgresに乗せるようにしたところ、2重3重のネストがコードに現れるようになった。 本…

Impact of error-prone

Findbugs is really good solution to improve quality of code As an author of findbugs-slf4j, I really love Findbugs. It lets us find problems by static bytecode analysis. This tool improves quality of each module, reduce reproducing known b…

エラーログと例外の扱いについて

社内勉強会向けに作成したエラーログと例外の扱いについて説明したスライドを、Speakerdeckで公開しました。一部社内特化部分(ログレベルポリシーやMSA向けMDC使用法 など)を削除して、口頭で補足した部分を補っています。 これらの理想的な使い方はシステ…

コード内コメントとJavadocの書き方

社内勉強会向けに作成したコード内コメントとJavadocの書き方についてのスライドを、Speaker DeckとSliDeckで公開しました。 このスライドは概要とメリットについてざっくり説明し理解と学習の動機を作ることを目的としていますが、これは日本ないし中国の大…

Guava Release19がそろそろ来そう

現時点でRC2まで出ています。 Release19 · google/guava Wiki · GitHub 個人的に興味深いのはCharMatcherにファクトリメソッドが導入された理由。staticフィールドだとクラス初期化時に初期化されなければならないが、ファクトリメソッドならメソッド実行時…

SLF4Jの使い方をfindbugsで自動検証する

今日、拙作findbugs-slf4jのGitHub Pageを作りました。このブログではこのプロジェクトについて日本語で紹介したいと思います。 概要 拙作PMDプラグインをもとに、2012年8月から実装を開始したfindbugsプラグイン SLF4J利用時のよくあるトラブルを未然に防ぎ…

Mirror repositories for developer in China mainland

In China mainland, default repositories are not so useful because of bad network latency. Instead of them, we should use following mirrors for better productivity. Maven central 开源中国 Maven 库 gem RubyGems 镜像 - 淘宝网 npm 淘宝 NPM 镜像

Googleのアサーション用ライブラリTruthを試してみた

Guavaのテストコードを読んでいたらTruthというtesting frameworkが使われていることに気づき、最新の個人プロジェクトで使ってみました。まだアルファ版ですし、自分でも使い続けるかどうか微妙なところですが、試用記録として利点をまとめます。 なお著者…

昨今のメソッドの命名方法事情まとめ

一時期はメソッド名は動詞で始まらなければならないと言われていましたが、昨今ではJava標準APIでも動詞ではないメソッド名が散見されます。本エントリではその傾向をまとめます。 of, from(from, of, valueOf, fromString, fromNullable etc.) fromやofは…

JavaのStreamで末尾再帰

JavaのStreamで末尾再帰するというアイデアが今読んでるFunctional Programming in Javaで紹介されていた。 The Pragmatic Bookshelf | Functional Programming in Java agiledeveloper: Functional Programming in Java is quite Approachable 動かしてみた…

memo: Non-blocking I/O on JVM

Netty http://netty.io/ http://netty.io/wiki/index.html http://netty.io/wiki/user-guide-for-5.x.html http://netty.io/wiki/developer-guide.html Vert.x http://vertx.io/ http://vertx.io/docs.html http://vertx.io/manual.html Related Java NIO Bu…

How to migrate Java 7 with Guava to Java 8

replace Optional with java.util.Optional replace import com.google.common.base.Optional; with import java.util.Optional; replace Optional.fromNull() with Optional.ofNull() replace Optional.absent() with Optional.empty() replace Optional.tr…

ウェブアプリケーションサーバでよくあるクラスローダのトラブル

これはJ2EE Advent Calendarの25日目の記事です。昨日の記事はnobuokaさんによるJava Persistence API (JPA) 実践入門でした! 本記事の趣旨は、developerWorksのクラスローダーとJ2EEパッケージング戦略を理解するに書いてあることをコードで確かめようとい…

Useful libraries and Maven plugins to implement executable jar

When you implement executable jar, there is some good libraries and Maven plugins to implement. I will list them and explain how to use. args4j args4j is a good library to parse command line argument. It is more modern than commons-cli, an…

「それ、Guavaでできるよ」系の話

「Javaってこれがめんどうだよねー」「あ、それGuavaでマシになりますよ」というやりとりが多い気がするので代表例をいくつか書いてみる。気になった方は公式ドキュメントをぜひ。 便利系Map 2キー使って1要素を特定するMap 複数の値を持ちうるMap 完全に同…

How to build FindBugs 3.0-SNAPSHOT by Maven

Now FindBugs 3.0-SNAPSHOT depends on SNAPSHOTs which is not hosted on Maven repository. To build, we have to execute install:install-file manually. $ git clone https://code.google.com/p/skypencil-findbugs/ $ cd findbugs/findbugs $ git chec…

スキル差の存在を前提としたJava開発の私の理想

スキルの低い人が生産性における問題ならその人を何とかするのが根本解決だよねと話したら、人に強要することなんてできないじゃないですかーという反応をいただいた。 これはすごく的を射たもので、チームを引っ張ってモノづくりをするうえで・チームを引っ…

How to use UserValue to implement FindBugs plugin

UserValue is a good way to mark local variable. By this marking, you can chase item or classify type of item. To use operand stack, your detector should extend OprandStackDetector or its subclass. OprandStackDetector OpcodeStackDetector#ge…

処理の流れに関連したFindBugsプラグインを作る2

前回残したTODOの消化。 今の理解が正しいなら、各BasicBlockごとにFactを計算しておいてあとでmeetさせるという話になるので、この辺りのロジックを読めば決着は付くだろう。 結論から言うと、当時の理解は正しかった。 ただすべてのBasicBlockのFactを計算…

処理の流れに関連したFindBugsプラグインを作る

端午节3連休中に調べたことのメモ。たぶんこれで@WillCloseと@WilCloseWhenClosedをサポートするdetectorが実装できるはず。 資源が確実に開放されるかを調べるDetectorを実装するときなど、ありうる処理の流れを列挙してその全てに対して正しい処理が行われ…

3行で解説するSLF4Jの使い方

すみません、この前のエントリでSLF4JというかJavaのロギングがとてもややこしいものだという印象を残してしまったようです。そんなことないので、ログ出力の使い方についてさくっと説明することで誤解を解きたいと思います。 SLF4Jでログを出すのは、たった…

Javaライブラリを配布する際のログ周りにおける配慮と実践

いつも購読させていただいている id:teppeis さんのブックマークに以下のエントリが流れてきて、なるほどこいつはたしかに厄介だと思いました。 javaのロガーが多すぎて訳が解らないので整理してみました - treeのメモ帳 ただSLF4Jが最も先進的かつ著名なイ…

finsbugs-slf4j version 1.0.1 released

Today I released findbugs-slf4j version 1.0.1, since I got a bug report. Now that ClassNotFoundException problem has been fixed. Getting feedback is always great experience. I am very happy :) To use latest version, what you have to do is …