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

Gradle プロジェクトの準備 init タスクでプロジェクト準備します(gradle は導入済みの前提)。 $ mkdir kotlin-example $ cd kotlin-example $ gradle init kotlin-gradle-plugin を使うよう build.gradle を編集します。 plugins { id "org.jetbrains.kotli…

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

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

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

List<String> list = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"); カンマ区切りの文字列に変換 A, B, C, D, E, F, G, H, I いろいろなやり方がある 文字列結合 String result = ""; for (String s : list) result += result.isEmpty() ? s : ", " </string>…

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

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

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

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

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

はじまりは ログイン画面でキーボード入力を受け付けなくなった。 しばらく触っていると、レインボーカーソルが回りだした。 電源ボタン押して再起動するも、アップルマークの起動画面で進捗バーが進まない。 MacBook Air (Mid 2012[13]) は、その昔 SSDが壊…

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

payara-embedded や payara-micro では普通にログイン認証作っても動きません。 login.conf を明示的に指定しないといけません。 embedded サーバを使うには payara-embedded-all (や glassfish-embedded-all) で Java EE をサクッと動かすのはとても簡単で…

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

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

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

Gradle のマルチプロジェクトで、ビルドスクリプトの評価順序を定義するには evaluationDependsOn を使う。 ビルド成果物の依存は dependencies settings.gradle で以下のようにマルチモジュールプロジェクトを定義していたとする。 include 'war', 'app' ビ…

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

可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと複雑だが、簡単に書くと以下のような for ループでのヌルポ。 public void method(String... args) { for (String s…

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

前回はデータベースの操作方法を見てきました。 etc9.hatenablog.com 今回はWebサーバで受けた情報をデータベースに保存します。 POST でデータ保存 POSTで受けたリクエストボディの Json 文字列をデコードし、データベースにインサートしてみます。 func us…

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

前回は H2 データベースの準備を行いました。 etc9.hatenablog.com 今回はデータベース操作を行っていきます。 ドライバのインポート postgres のドライバはいろいろありますが、ここでは github.com/lib/pq を使います。 go get しましょう。 $ cd $GOPATH …

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

前回は Go で簡単なWebサーバを作成しました。 etc9.hatenablog.com 今回からはデータベース操作を行っていきます。 データベースの準備 今回はデータベースサーバに H2 を使います。 H2 は postgres プロトコル互換モードがあるので、postgres 用のドライバ…

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

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

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

インストール Homebrew 更新 $ brew update $ brew info go インストール & バージョン確認 $ brew install go $ go version go version go1.8 darwin/amd64 ワークスペースの作成 Go では任意のディレクトリをワークスペースとして指定し、ワークスペースの…

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 〜

前回 etc9.hatenablog.com の続きです。 TemplateEngineProducer Ozark で Thymeleaf を使えるように org.thymeleaf.TemplateEngine の Producer を作成します。 @Dependent public class DefaultTemplateEngineProducer { @Produces @ViewEngineConfig publ…

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

はじめに Spring MVC ベースのサンプル・アプリケーション Spring Petclinic を JavaEE MVC 1.0 に移植してみます。 MVC 1.0 は Early Draft 段階ではありますが、JavaEE 7 環境でもそれなりに動かすことができます。ここでは、なるべく JavaEE 標準機能をそ…

JavaEE Model-View-Controller API 1.0 - JSR 371 の基礎

Java EE の MVC1.0 (Model-View-Controller API 1.0 - JSR 371)、Early Draft Review 2 時点のまとめです。 Jersey MVC と同じように JAX-RS の上に乗っかる形となっているため、ほとんどは JAX-RS と同じで、コントローラメソッドに @Controller 付けて戻り…

Windows でハウスキーピング

Linux でハウスキーピング find で -mtime で最終更新日N日前でフィルタして rm できます。 find /log/*.log -type f -mtime +10 | xargs rm -rf BSD系などで -delete アクションがあれば以下でも可です。 find /log/*.log -type f -mtime +10 -delete cront…

JavaEE8 - MVC 1.0 (Ozark M2) で Thymeleaf を使う

JavaEE8 で仕様検討が進んでいる MVC1.0 (Model-View-Controller API 1.0 - JSR 371) の参照実装である Ozark は既に M2 が出ていて簡単に試すことができます。 テンプレートエンジンも Extension として、Mustache、Freemarker、Velocity、Thymeleaf などが…

Java 上の JavaScript エンジン Nashorn で Java ライブラリを使う

Nashorn スクリプトから外部 Java ライブラリを使うのは意外と面倒です。 Nashorn の基本的な使い方は以下を参照ください。 etc9.hatenablog.com ここでは、Nashorn スクリプトから Ivy を使い、外部の Java ライブラリを使う方法を紹介します。 クラスパス …

JUL を少しマシにする

JUL に対する不満 Java でログ出力する場合は、大抵 SLF4J + logback を使いますが、なるべく外部ライブラリに依存したくない時もあります(ちなみに SLF は Simple Logging Facade の略です)。 そんな時には Java 標準のログAPI Java.util.logger に手を出し…

Windows でファイル日付を変更する

Linux では touch Linux でファイルのタイムスタンプを変更するには touch でサクッとできます。 最終アクセス時刻を変更(2017年07月23日12時30分) $ touch -at 20170723123000 hoge.txt 最終更新日時を変更 $ touch -mt 20170723123000 hoge.txt -t は日時…

MXBean から取得できる情報あれこれ

Java Management Extensions の主要どころの簡単なまとめです。 RuntimeMXBean ランタイム関連情報の取得。 RuntimeMXBean runtimeMx = ManagementFactory.getRuntimeMXBean(); 以下のような情報が取得できます。 メソッド 出力例 説明 getVmName() Java Hot…

RebelLabs による Java ツール & テクノロジ 調査レポート 2016

RebelLabs による 2016年度の Java ツール & テクノロジの調査結果が公開されました。 2,040名の Geeks に対する調査結果ということで、気になった箇所をピックアップ。 Intellij IDEA が首位に Eclipseが過半数割れてIDEAが首位になりました。 JavaEEはどの…

2003年に IEEE から出された Michael Cusumano らによる国際的 Survey

前回のプロジェクトの成功率についての Survey に続き、国際的な Survey の結果紹介です。 etc9.hatenablog.com 2003年に IEEE から出された Michael Cusumano らによる国際的 Survey 2001年から2002年の間に以下の組織を対象に調査。 インド Motorola India…

ソフトウェア開発プロジェクトの成功率

Scott W. Ambler の Survey スコット・アンブラー(Scott W. Ambler)氏は定期的にITプロジェクトの Survey を出してくれています。 アンブラー・スコット と言えば、ディシプリンド・アジャイル・デリバリー(DAD)、アジャイルモデリング(AM)、アジャイル統一…

Java の上の JavaScript エンジン Nashorn の基本

Nashorn とは Java7 までは JavaScript スクリプティングエンジンとして Rino が同梱されていましたが、Java8 からは Nashorn が同梱されるようになりました。 ナースホルン(Nashorn)はドイツ語でサイを意味します。 Nashorn は ECMAScript-262 に準拠してお…

Amazon RDS(Oracle) の rdsadmin パッケージ

etc

RDS はマネージド・サービスなので、OSにログインしたり、sysdba でDBに接続することはできない。 その代わり rdsadmin という PL/SQLパッケージで必要な操作ができるようになっている。 よく使いそうなものは以下かなぁ。 Oracle RDS セッションの強制終了a…

Java8 で追加された Exact 系メソッド

Java8 の目立たない変更として、Math クラスにオーバーフロー時には例外を投げるExact (正確な) 系メソッドが追加された。 いずれも int または long を引数に取るようにオーバーロードされている。 算術演算の結果がオーバフローする場合には ArithmeticExc…

JSF ライフサイクルはソース見るのが手っ取り早い

JSF のライフサイクルを理解するにはソース見てしまうのが一番早いですねー。 いまさらですが、Mojarra 2.2.13 のソースでライフサイクルを追ってみます。いまさらですが。 大枠を眺めるため、ソースは大幅に削ったり加工したりしたものなのでご注意ください…

Payara Micro clustered CDI Event Bus -インスタンスを跨いだCDIイベント-

Clustered CDI Event Bus Payara Micro は Glassfish を元にしたマイクロサービス向けの JavaEE コンテナです。 Payara Micro の簡単な概要は以下を参照してください。 etc9.hatenablog.com Payara は Hazelcast でクラスタサポートをしており、Payara Micro…

macOS Sierra で NetBeans から GlassFish が起動できない (というか起動はするけど繋がらない)

Sierra にアップデート後、NetBeans のサービスタブから GlassFish を起動しても応答が帰ってこない事象があり、あまり情報が落ちていないので書いておきます。 事象 NetBeans の GlassFish バンドル版をインストール時、インストールにえらい時間がかかる(…

日本人の名字をランダムに抽出する 〜 Alias Method 〜

なにがやりたいか 日本人の名字をランダムに取得したい。 ただし、佐藤さんや鈴木さんはより多く、大柿さんや桑畑さんは低頻度といった具合に、名字の分布に応じた確率で取得したい。 重み付きランダム 発生確率に重み付けされたランダムで、復元抽出(ある特…

JSF で JQueryUI Sortable を使う

最近すぐに忘れてしまうので、細かいことでも書いておこう。 テーブルの一覧画面の並び順や項目名、表示/非表示などをユーザが自由にカスタマイズする機能追加の対応があった。 ユーザ独自のビューとして画面で見たり、ダウンロードして他のシステムに投入し…

Class#getEnumConstants() って初めて使った気がする

Enum#values() ある Enum の値を取得したい場合は Enum の static メソッドである values() を使う。 public enum Fruits { APPLE, ORANGE, BANANA; } Fruits.values(); この values() の実装は、コンパイラが生成してクラスに埋め込む。 言語仕様的には 8.9…

リリース間近 JUnit5 に備えよう

はじめに JUnit5 のリリースが近づいています。現在は M2 で M3 の作業が進んでいます。 今のところの予定は以下のようになってます。 2016/10/21 M3 リリース 2016/11/30 M4 リリース 2016/12/30 M5 リリース JUnit4 とは(中身は)全く別ものです。が普通に…

Payara micro で Hello World

Payara とは Glassfish から fork した JavaEE アプリケーションサーバです。 Glassfish は Oracle による商用サポートの提供が廃止されましたが、Payara は Payara Team による商用サポートが提供されています。 Glassfish 4.1 のコードベースに対してバグ…

遅延初期化とvolatileにまつわるエトセトラ

JSON Processing Java API for JSON Processing (JSR 353) の RI 実装を見ていたらこんなコードがありました。 abstract class JsonNumberImpl implements JsonNumber { // ・・・略 // Optimized JsonNumber impl for int numbers. private static final cl…

Docker for mac 正式版が公開されたので改めて導入手順を見てみましょう

2016年7月28日 「Docker For Mac And Windows Is Now Generally Available And Ready For Production」というポストで Docker For Mac と Docker For Windows の正式リリースが発表されました。 2016年3月に公開された限定ベータ、パブリックベータを経た い…

ディシジョンテーブルをカルノー図で簡単化するか?

SlideShare でこんなスライドがあった。 エスイーが要件定義でやるべきたったひとつのこと from Yoshitka Kawashima www.slideshare.net ディシジョンテーブルはいいけど、カルノー図かいて整理してロジックに落としましょう。 という至極まっとうなもの。 …

未来を感じずにはいられないクラウドIDE 〜番外編 Codenvy〜

前回は Cloud9 で Java開発環境の構築について見てみました。 etc9.hatenablog.com Cloud9 による Java サポートはまだまだこれからといった感じでした。 今回は Eclipse Che が使えるクラウドIDE である Codenvy を簡単に見ていきましょう。 Eclipse Che と…

未来を感じずにはいられないクラウドIDE 〜Cloud9〜 Java開発編

前回は Cloud9 の導入方法を見てきました。 etc9.hatenablog.com 今回は Cloud9 IDE による Java 開発について見ていきましょう。 Cloud9 IDE の言語サポートは、今のところ PHP, Ruby, Python, JavaScript(Node), Go が手厚くなっています。 Java 向けサポ…

未来を感じずにはいられないクラウドIDE 〜Cloud9〜

Cloud9 IDE とは Webブラウザ上で動作する統合開発環境です。 クライアント環境に依存せず、Docker コンテナ上に構築されたワークスペースを共有でき、GitHub や Heroku などのサービスとの連携もスムーズです。 あらかじめ容易されたワークスペースのテンプ…

サーバサイドエンジニアのためのフロントエンド入門 〜ECMAScript編〜

フロントエンドの移り変わりが激しすぎてついていけない。 というサーバサイドエンジニア向けのフロントエンドの概要第3回目です。 より深い話題については他を当たってください。。 前回は CSS について見ました。 etc9.hatenablog.com 今回は ECMAScript …

サーバサイドエンジニアのためのフロントエンド入門 〜Sass編〜

フロントエンドの移り変わりが激しすぎてついていけない。 というサーバサイドエンジニア向けのフロントエンドの概要第2回目です。 より深い話題については他を当たってください。。 前回までで、node と gulp を導入しました。 etc9.hatenablog.com 今回は …