2017-01-01から1年間の記事一覧

Kotlin 1.1.60 周辺ライブラリの導入

November 13, 2017 に Kotlin 1.1.60 がリリースされました。 だからって訳ではないですが、以下について最初の一歩として簡単な導入部分を見ていきます。 kotlin-dsl によるGradle プロジェクトのビルド Kotlin でサーブレット Kotlin の SQLライブラリ Exp…

Java におけるタイプセーフとジェネリクスの微妙な関係

はじめに 当たり前な話 ジェネリック型の継承関係 共変(covariant)の問題点 共変(covariant) が妥当なケース 反変 (contravariant) の問題点 反変 (contravariant) が妥当なケース ここまでのまとめ ジェネリクスが不変だと、、 ジェネリクスに共変性を持た…

知らなくても困らない Javaクラスのバイトコードの読み方

クラスファイルの中身 クラスファイルの構造 javap コマンド javap 出力の概要 型とメソッドの読み方 オペランドスタック コンストラクタの実行 加算メソッド invoke 系命令 条件判断 for ループ まとめ 普段使いでは困ることはないですが、昨今はバイトコー…

Java8 lambda の裏舞台は、きっとあなたが考えているより強かだ

前回、Stream の裏舞台について見てみました。 blog1.mammb.com ついでなので、今回は Lambda 式の裏舞台について見てみましょう。 はじめに 有名な話ではありますが、以下の匿名クラスを含むコードをコンパイルすると、2つのクラスファイルが生成されます。…

Java8 Stream の裏舞台は、きっとあなたが考えているより忙しない

Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String…

JavaEE Code探索 その3 〜 トランザクション属性 〜

前回はEJBにおけるトランザクションの開始と終了の流れを見てきました。 blog1.mammb.com 今回は、トランザクション属性による動作を少しだけみてみましょう。 はじめに 最初のトランザクション 次のトランザクション トランザクションのサスペンド REQUIRES…

JavaEE Code探索 その2 〜 トランザクション 〜

前回は Glassfish 4.1.2 のソースコードを元にして EJB のメソッド呼び出しの概要を見ました。 blog1.mammb.com 今回は、この流れの中でトランザクションの開始と終了について見ていきます。 前回と同様に今回の説明のために不要な箇所は大幅に省略または改…

JavaEE Code探索 その1 〜 EJB コール 〜

Glassfish のソースコードを元に、リモートEJBコールがどのように処理されていくかを説明します。 トラブルシュートにはどうしてもソースコードを読む必要がありますし、設定の問題なのかバグなのかの切り分けも容易になります。手っ取り早いし確実です。 そ…

Rust の初期環境構築 【2017年版】

Rust のインストール Hello World ビルドと実行 IntelliJ Rust Rust のインストール brew 使う場合は以下。 $ brew install rust ただ、公式通り rustup を使った方が複数バージョンの管理できたりするので、以下でインストールする。 $ curl https://sh.rus…

Kotlin を Gradle でビルドする minimal サンプル

Gradle プロジェクトの準備 ソースファイルの作成 ビルド&実行 ビルドスクリプトをKotlinで書く Gradle プロジェクトの準備 init タスクでプロジェクト準備します(gradle は導入済みの前提)。 $ mkdir kotlin-example $ cd kotlin-example $ gradle init kot…

【Gradle 4.0 版】プロジェクト作成時に便利な Build Init Plugin

Gradle 4.0 向けに以下の記事の更新版です。 blog1.mammb.com 試験的な提供なので将来が計画されていますが、Gradle 4.0 時点でどのようなになるかメモしておきます。 Build Init Plugin Build Init Plugin を使うと Gradle build プロジェクトの作成をタイ…

Java によるいろいろなカンマ区切り変換(または OpenJDKで提供されるJMH を利用したマイクロベンチマーク測定のやり方)

文字列結合 StringBuilder StringBuilder 簡略版 commons.lang StringUtils Guava Joiner Java8 String Collectors joining StringJoiner collect with StringJoiner JMH ベンチマーク測定ツール Gradle ビルドスクリプトの作成 ベンチマーク用ソースの作成 …

Markdown エディタ Typora が好きになる7つの理由

みなさんは Markdown エディタは何を使っているでしょうか? Atom や Visual Studio Code のプラグインでプレビュー表示していたり、Windows だったらMarkdownPad 、Mac だったら MacDown などの専用エディタを使っている方が多いのではないでしょうか。 そ…

2017年夏 Siera クリーンインストール直後の作業

blog1.mammb.com ということで、クリーンインストール直後の作業をメモしておく。 キーリピート システム環境設定の最速では遅すぎるので変更。 現在値の表示 defaults read -g KeyRepeat defaults read -g InitialKeyRepeat 設定変更 defaults write -g Key…

MacBook Air (Mid 2012[13]) の SSD がふたたび逝った

はじまりは まずはお決まりの NVRAM(PRAM) リセット 念のため SMC リセット セーフモードで起動する リカバリモードで シングルユーザモードでディスク復旧 Apple Hardware Test ターミナルからデータバックアップ どうしようか Sierra クリーンインストール…

Glassfish や Payara の embedded サーバではログイン認証は動きません(そのままでは)

payara-embedded や payara-micro では普通にログイン認証作っても動きません。 login.conf を明示的に指定しないといけません。 embedded サーバを使うには fileRealm とか jdbcRealm が動かない どこでエラーになるか JAASログイン構成ファイルとは payara…

Java のログ出力がローカライズされて鬱陶しい

例えば JUL のログレベルや、H2 database や Glassfish などのログメッセージなどローカライズされていて鬱陶しい。 エンコーディングが違ったりすると読めないし。 ログ内容で検索しても国外の情報拾えないし。 起動時のシステムプロパティで変更する 実行…

Gradle で評価時の依存を定義するには evaluationDependsOn を使う

Gradle のマルチプロジェクトで、ビルドスクリプトの評価順序を定義するには evaluationDependsOn を使う。 ビルド成果物の依存は dependencies タスク間の実行時依存関係は dependsOn 評価時の依存は evaluationDependsOn ビルド成果物の依存は dependencie…

10年の長きに渡り Java の可変長引数を過信していた話

可変長引数のループで ヌルポ発生 普通の呼び出し なんだ!? これ 念のため どうしても null を渡したい場合 まとめ 可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと…

かけ足で学ぶ Golang その5 〜Webサーバからデータベース操作〜

Go

前回はデータベースの操作方法を見てきました。 blog1.mammb.com 今回はWebサーバで受けた情報をデータベースに保存します。 POST でデータ保存 GET でデータ取得 実行 まとめ POST でデータ保存 POSTで受けたリクエストボディの Json 文字列をデコードし、…

かけ足で学ぶ Golang その4 〜データベース操作〜

Go

前回は H2 データベースの準備を行いました。 blog1.mammb.com 今回はデータベース操作を行っていきます。 ドライバのインポート データベース接続 テーブル作成とレコードの挿入 Query h2パッケージの作成 ドライバのインポート postgres のドライバはいろ…

かけ足で学ぶ Golang その3 〜データベースの準備〜

Go

前回は Go で簡単なWebサーバを作成しました。 blog1.mammb.com 今回からはデータベース操作を行っていきます。 データベースの準備 ファイルのダウンロード コマンドの実行 まとめ データベースの準備 今回はデータベースサーバに H2 を使います。 H2 は po…

かけ足で学ぶ Golang その2 〜HTTPサーバでHelloWorld〜

Go

前回、 blog1.mammb.com の続きです。 Hello, World on HTTP REST サーバ Hello, World on HTTP Go には簡易な Http サーバのパッケージがバンドルされています。 net/http をインポートするだけで簡単に Http サーバを動かすことができます。 package main …

かけ足で学ぶ Golang その1 〜環境構築編〜

Go

インストール Homebrew 更新 インストール & バージョン確認 ワークスペースの作成 Hello World ライブラリの作成 JetBrains Gogland インストール Homebrew 更新 $ brew update $ brew info go インストール & バージョン確認 $ brew install go $ go versi…

Hibernate in Action における DTO についての考察

もう10年以上前の本、Hibernate in Action に書かれている DTO についての考察です。 HIBERNATE イン アクション作者: Christain Bauer,Gavin Ki,倉橋央,勝嶌和彦出版社/メーカー: ソフトバンク クリエイティブ発売日: 2005/12/28メディア: 大型本購入: 3人 …

MacOS Sierra アップグレード後にJavaアプリケーションの起動がノキナミ遅い

例えば H2 database を以下のように起動するとめっぽう遅い java -cp h2.jar org.h2.tools.Server H2 database に限らず、Tomcat だったり Logback だったり、あらゆるものが遅い 以下にあるように InetAddress.getLocalHost() から呼ばれる DNS Lookup に原…

Collectors.toMap() は第3引数を意識してください

リストからマップを作る時に使う以下のコード Map<String, String> phoneBook = people.stream() .collect(Collectors.toMap(Person::getName, Person::getAddress); なつかしい以下のコードとは挙動が異なります。 Map<String, String> phoneBook = new HashMap<>(); for (Person p : people</string,></string,>…

Arrays.asList() は単なる配列のラッパを返すだけなので、要素の追加も削除もできません

いつまでたっても間違いが無くなりません。 以下のようにListの初期化で多用するArrays.asList()。 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); Arrays.asList() が返すインスタンスは、java.util.Arrays$ArrayList であって、java.util.ArrayL</string>…

Spring Petclinic を JavaEE MVC 1.0 (JSR-371) で作る 〜 その2 〜

前回 blog1.mammb.com の続きです。 TemplateEngineProducer JAX-RS Application Fragments コントローラ Owner 検索 Owner 編集 使いにくい点 まとめ TemplateEngineProducer Ozark で Thymeleaf を使えるように org.thymeleaf.TemplateEngine の Producer …

Spring Petclinic を JavaEE MVC 1.0 (JSR-371) で作る 〜 その1 〜

はじめに モデル 構成 Payara 起動クラス persistence.xml web.xml ベースエンティティ Owner Pet Visit Repository OwnerRepository の実装 PetRepository の実装 VisitRepository の実装 まとめ はじめに Spring MVC ベースのサンプル・アプリケーション S…