M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Java

Java言語ではFunc<T>とFunc<T,U>は区別できない

この1年くらいの間Javaを離れてC#ばかりをコーディングしていました。戻ってきて愕然としたのは例えばFunc<T>とFunc<T,U>という型を仮定した時、Java言語においてはそれらが区別のつかない型、型名の競合を引き起こす型として捉えられてしまうということです。これは</t,u></t>…

Springのプロパティ・プレースホルダでデフォルト値指定

Spring BootおよびSpring Web MVCのAPIリファレンスを見ていて知ったことのメモ。例えばSpring Web MVCが提供するアノテーションの1つ、RequestMappingのvalueフィールド(Javadoc)。アノテーションが付与される型もしくはメソッド(コントローラ)が処理す…

Apache POIのMissingCellPolicyの解説を見つけた

Apache POIはJavaアプリケーションからExcelやWordのドキュメントを参照/更新するためのライブラリです。このライブラリには「Missing Cell」とか「Blank Cell」という概念があり、その意味するところはいまいち判然としないのですが、とくに「Missing Cell…

JavaでEPUB3形式ファイルをパッケージングする

直近、例によっていろいろあってEPUB3形式ファイルのつくり方を調べていました。EPUB3はごくごく単純化して言えば拡張子が.epubで終わるZIPファイルなのですが、ディレクトリ構造や必須のファイルなどいくつかのルールがあります。こちらのページにある手順…

C#のメソッド戻り値や可視性が共変(Covariance)でないのが地味ーに窮屈

近ごろお手製ライブラリのJava版とC#版のあいだを行き来していて、その中で地味ーに窮屈だと感じているのが、「C#のメソッド戻り値や可視性が共変(Covariance)でない」ということです。※一応註記しておくと、ここで「戻り値の共変」と述べているのはジェネ…

JP1/AJS2ユニット定義パーサAPIをC#向けにポーティングした

すでに何度も紹介してきたJP1/AJS2ユニット定義パーサAPIですが、最近取り組んでいるC#のお勉強の「実践編」としてC#向けにポーティングしてみました。リポジトリはこちら。サンプル・コードをご覧になればお分かりのように使い方はほとんどかわりません。途…

C#のyield return文に対応するものをJava 1.6でがんばってつくってみた

直近C#についてお勉強していて「これは、やばい・・・」と感じたのはなんといってもyield return文です。細かいことを述べるのはやめておきます。ようするに「for文を書いて遅延評価型の反復子をつくる」というとんでもない糖衣構文です。裏側ではC#のコンパ…

"JDK-6962931 : move interned strings out of the perm gen" の意味するところが判然としない

今現在.NETのCLR関連の資料を読んでいて、それと比較対象するためにJVMについての資料も漁っていたのですが、そのなかで「OracleのJDK7に同梱されたHotspot VMからinternされた文字列の格納先がPermanent領域から非PermanentなHeap領域に変更になった」とい…

DOMをラップし代替するライブラリをつくってみた

なんだか過去にも似たようなことをした記憶があるのですが、使い勝手の悪いDOMのAPIをラップし、代替するライブラリをつくってみました。リポジトリはこちらです。 重要なオブジェクト このライブラリの中核にあるのはQuery<R>オブジェクトです。このオブジェク</r>…

JP1/AJS2ユニット定義パーサにDate-Time APIライクな機能追加

以前何度か紹介したJP1/AJS2ユニット定義パーサに、Java 8で導入されたDate-Time APIをまねた機能を追加しました。これにともない古いAPIのかなりの部分を破棄しています。Date-Time APIはその名の通り日付・時間をあつかうためのクラス/インターフェース群…

JDKバージョン8+ターゲットバージョン7以下でIteratorコンパイルエラー

ハマった後で「ははーなるほどー」と感じた事象について。EclipseでJavaプロジェクトをつくって開発をしていたのですが、その際のプロジェクトのJavaコンパイラ設定のターゲット・バージョンは6もしくは7にしていました。一方で全体設定の「インストールされ…

Jacksonシリアライザの@JsonIgnoreは@JsonPropertyと対にして使う

例によって細かい話です。現在開発中のアプリケーションではSpring MVCのRestConrtollerを利用してクライアント側とJSON形式でデータをやり取りする構成をとっているので、内部的にはJacksonシリアライザによるJavaのオブジェクトとJSONとの相互変換が行われ…

SVNKitのDate型をPostgreSQLドライバに食べさせると毒死

引続きMyBatis関連でハマったはなしです。SVNリポジトリや作業コピーをJavaコードから操作するためのライブラリSVNKitにまつわるはなしです。まずは結論。 結論 SVNKitのAPIが返すjava.util.Date型オブジェクトをPostgreSQLのJDBCドライバに食べさせてはいけ…

MyBatisのEnumTypeHandlerにハマる

季節感というか日付感のない記事で恐縮ですが、正月とか元旦とか関係なくMyBatisのEnumTypeHandlerでハマったはなしです。例によって結論から述べましょう。 結論 MyBatisでSQLのパラメータとしてenumを渡し、SQLのステートメント内で#{paramName.propertyNa…

Spring Boot x Spring Security のサンプルをつくった

開発中のアプリケーションの実装方法調査のため種々しらべた結果を元に、Spring BootとSpring Securityを組み合わせて使うサンプルをつくってみました。アプリケーションの・・・とくに認証に関する要件は以下のとおりです: アプリケーションのユーザにはロ…

Java7→Java8アップグレードに成功・・・

さっそく、「Upgrade Java SE 7 to JavaSE 8 OCP Programmer」試験を受けてきました。結果、なんとかアップグレードに成功。参考書なしで試験をうけるのはRuby Gold試験以来かもしれません。当たり前ですが基本的にOracleの公式ページに示されたトピックスか…

Java8で導入されたdefaultメソッドについてメモ

Javaプログラミング言語の拡張機能を読む限りだいたいこんな感じでしょうか: 基本ルール defaultキーワードを持つメソッドは実装を持つ。持たねばならない。 defaultキーワードを持つメソッドは同一インターフェースにいくつでも持たせることができる。 宣…

公式チュートリアルの「ターゲット型付け」セクションを読む

前回ポストのあとOracleの公式チュートリアル"The Java Tutorials"の"Nested Classes" > "Lambda Expressions"に含まれるセクション"Target Typing"を読んでみました。ターゲット型とターゲット型付けという概念の理解のため若干の助けになるかと思います。 …

Java8の試験トピックにある「ターゲット型付け」とは何か?

・・・というわけで、にわかにJava8の新機能についてしらべはじめたのですが、アップグレード試験「Upgrade Java SE 7 to JavaSE 8 OCP Programmer」のトピックの中に「ターゲット型付け」というワードを見かけて「なんだこれは」ということになりました。ラ…

Oracle認定 Java資格受験 20%OFF キャンペーン開催中・・・

Java SE 8系試験の日本語版が順次リリースされていますが、ピアソンVUEではこれと並行してJava 20周年記念!Oracle認定 Java資格受験 20%OFF キャンペーンを開催中です。試験体系が刷新され、Programmer資格がBronze・Silver・Goldに階層化されたことで、従…

XMLドキュメント・トラバースを支援するライブラリつくった

作成中のツールで設定情報をXMLから読み取るロジックを書こうとしたところ、Java標準APIのDOM実装──org.w3c.domパッケージに含まれる各種API──がとてつもなく使い勝手のわるいものであることに気が付きました。使い勝手がわるいのはW3Cの標準に忠実にあろう…

Typesafe Config 「ライブラリを使用する」を読む

というわけでTypesafe ConfigのGithubで公開されているREADME.mdのなかから"Using the Library"のセクションを読んでみました。ただしどうも記載内容に古い部分があるらしく現状の事実に即していない部分があったのと、意味をとることができないセンテンスが…

Typesafe Configを使ってみる

近ごろ(といってもすでに数年来)、ScalaやPlay Frameworkとともに存在感を増しているTypesafe社。同社が汎用のコンフィギュレーションAPIとして公開しているその名もConfigというライブラリがある(キャメルではなくローワーケースが正式名称かも知れない…

それはParserというよりScannerだったのか

プログラミングの用語法とJava標準ライブラリのAPIに関するちょっとした話。結論を先にいえば「標準ライブラリ」についてきちんと理解しておくことは生産性の観点で重要」というそれだけの話です。以前、JP1/AJS2(日立製のスイートに含まれるジョブ実行管理…

型パラメータのスコープとシャドウ化の実験

Javaのジェネリクスの復習をしてヘンなコードを書いてみた。「やってはいけない」のカタマリみたいなコードである。 package x; class A {} class X {} // ...(1) public class Container<X extends A> { // ...(2) private X content; // ...(3) public <X> Container(X con</x></x>…

Spring Web MVCのコントローラで任意の型のパラメータを受け取る

久しぶりにSpring Web MVCについて調べてみた。タイトルの通り、やりたいことは「Spring Web MVCのコントローラで任意の型のパラメータを受け取る」ということ。サンプルコードは公式リファレンスのセクション"Customizing WebDataBinder initialization"に…

Scala.jsはもはや試験的段階を脱した!との由

ちょっと気になった記事の訳出を。Scala言語の公式サイトで公開されている2015年2月5日付けの記事です。原文は"Scala.js no longer experimental"です(2015/07/19取得)。 * * * Scala.jsはもはや試験的段階を脱した! 執筆:Sébastien Doeraene本日、私…

JP1/AJS2ユニット定義関連のライブラリとツールの依存性を整理

(2016/02/26追記 パーサ・ライブラリのリポジトリを移動しました。新しいリポジトリはこちらです。)おとといのポストで話題にしたGithub上にMavenリポジトリを構築する方法を応用して、個人用かつプロジェクト共用のMavenリポジトリをつくってみた。これは…

Github上に私設Mavenリポジトリをつくる

Mavenは依存性解決やビルド/デプロイ処理のためのツールとして非常に便利なのですが、個人的に作成した各種ライブラリやツールを配布するには、通常中央のリポジトリにものを登録する必要があります。そして中央リポジトリに登録するには、いろいろ準備がい…

Apache Commons CLI 1.3がリリースされている

いつのまにかApache Commons CLI 1.3がリリースされていました。Apache Commons CLIはJavaでコマンドライン・ツールを作成する際に便利なライブラリ。コマンドライン・オプションの定義を行い、その定義にしたがって引数(public void main(String... args)…