mike-neckのブログ

Java or Groovy or Swift or Golang

メモ - Google App Engine の Java バージョン

cloud.google.com Google が維持管理する OpenJDK または OpenJDK+Jetty9 Docker イメージ上でアプリを実行する と書いてあったので、警察ではありませんが調べてみた。

Gradle 5.5 で JUnit Jupiter が gradle init 時にテストフレームワークとして選べるようになっていた

表題の通りです 次のコマンドをターミナルで叩きます。 gradle init \ --type java-library \ --test-framework junit-jupiter \ --dsl groovy \ --package com.example \ --project-name example-library 次のような build.gradle ファイルが生成されます /…

Groovy が書けない人のための Gradle 入門

若干ネタ気味ですが、 Groovy を覚えるのが面倒だけど、 Kotlin を覚えるのも面倒という方のためにお勧めしたいのが、 Java で書くという方法です。 というわけで、次のような build.gradle を書きます。 Project project = getProject(); project.getPlugin…

Functional Spring Hands On に行ってきた

表題の通り、 Functional Spring Hands On に行ってきた。 pivotal-japan.connpass.com ハンズオンの資料はこれ github.com 基本的に手を動かさないと理解が遅いので、わりとハンズオンは好きです(用意する方は大変) 内容は、 Spring(WebFlux) アプリケーシ…

Mono<Void> は常に empty

当然といえば当然ですが、意外と気づかない。 例えば、特定の条件を満たさないとリクエストを処理しないような WebFilter を記述する。 @Bean WebFilter webFilter() { return (exchange, chain) -> { Optional<String> requestDate = extractRequestDate(exchange);</string>…

resilience4j の RateLimiter を少しだけいじった

resilience4j の RateLimiter を少しだけいじったので、そのメモ。 ここの実装はダメな実装になってるので、ちゃんとした使い方を調べてる人は他をあたった方が良い(強く推奨)。

loom の JDK をビルドしてみた

表題の通り、 project loom の JDK をビルドしてみた。 環境 以下の環境でビルドした。癖で(バーストしない方がよいかなと思って)インスタンスタイプは m5a.large にしたけど、 t3a.micro とかでもいいかもしれない(よくわからん)。 マシン : aws ec2 m5a.la…

JJUG CCC 2019 Spring で 「Collections Framework 入門」というタイトルで発表してきました #jjug_ccc

表題の通り、発表してきました。 jjug-ccc 2019 Spring 発表資料 Collections Framework 入門 #jjug #jjug_ccc #ccc_c1 from Shinya Mochida www.slideshare.net いくつか質問を発表後にいただきましたので、ここであらためて回答します (Q) 資料のコードの…

JMH の細かい実行制御

JMH で何かしらの処理のパフォーマンスを計測する時に、すべての計測対象が必ずしもステートレスにできないケースがある。 例えば、 List<String> にデータが 1万レコードほどある時に、 add(int, String) の呼び出しのパフォーマンスを計測する場合など。 この例の</string>…

今更な Effective Java 番号1. コンストラクターより static ファクトリーメソッドを選ぶ

今勤めてる企業で質問された際に、うろ覚えで答えたので、もっかい Effective Java 読んだので、そのメモ 番号1. コンストラクターより static ファクトリーメソッドを選ぶ pros コンストラクターとは異なって、名前を持てる コンストラクターとは異なり、イ…

Swift の Result にあると良さそうな関数

Swift の Result をいじっていて、書いてしまった拡張関数 現在の値を消費して終わりの関数 extension Result { func doOn(success: (Success) -> Void, failure: (Failure) -> Void) { switch self { case .success(let value): success(value) case .failu…

Swift愛好会 vol39 に行ってきた

表題の通り、 Swift 愛好会 なる勉強会に行ってきました love-swift.connpass.com ついでなので、 swift-log について発表してきた swift-log について from Shinya Mochida www.slideshare.net 雑に紹介すると、 swift-log は apple が作っている slf4j み…

pixela-java-client のバージョン 0.3 を maven central repository にリリースしました

なるべく 月1度リリースしようと心がけてはいますが、ちょっと時間が経ってしまいました。 ということで、 pixela-java-client のバージョン0.3 を maven central repository にリリースしました。 https://search.maven.org/search?q=pixela github.com ↑ C…

クリーンアーキテクチャーの読書メモ(10)

第四部 コンポーネントの原則 SOLID 原則 = レンガを組み合わせて部屋を作る コンポーネントの原則 = 部屋を組み合わせて建物を作る §12 コンポーネント コンポーネント = デプロイの単位 Java : jar Ruby : gem .NET : DLL コンポーネントの歴史 アプリケー…

Spring WebFlux + r2dbc + Kotlin でデータベーストランザクション

前回 ReactiveCrudRepository を使ったアプリケーションの話をしたが、残念なことに今の所トランザクションを指定できないので、アプリケーションを終了したら、データはなくなるし、複数のテーブルへの操作をアトミックな操作として指定できないことをメモ…

クリーンアーキテクチャーの読書メモ(9)

§10 ISP: インターフェース分離の原則 必要としない機能をもつモジュールに依存しない どうしても必要な場合はインターフェースを間に挟む §11 DIP: 依存関係逆転の原則 ソースコードの依存関係が具象ではなく抽象を参照しているのが最も柔軟 安定した抽象に…

Spring WebFlux + r2dbc + Kotlin で簡単なアプリケーションをつくる

5日間休みなので、おさらいも兼ねて、久々に Spring をさわることにしている。なお、 Kotlin にしているのもおさらいを兼ねている。また Kotlin coroutine を使っていないのは r2dbc-postgres と組み合わせたときに、 ByteBuf の readableBytes がレスポンス…

クリーンアーキテクチャーの読書メモ(8)

§9 LSP: リスコフの置換原則 1988年 Barbara Liskov S 型のオブジェクト o1 の各々に、対応する T 型のオブジェクト o2 が 1 つ存在し、 T を使って定義されたプログラム P に対して o2 の代わりに o1 を使っても P の振る舞いが変わらない場合、 S は T の…

クリーンアーキテクチャーの読書メモ(7)

§8 OCP: オープン・クローズドの原則 1988年 Bertrand Meyer ソフトウェアの構成要素は拡張に対しては開いていて、修正に対しては閉じていなければならない(『アジャイルソフトウェア開発の奥義』) = ソフトウェアの振る舞いは既存の成果物を変更せずに拡張…

Hello r2dbc with Kotlin

リアクティブな感じで RDB に接続できるやつ。内容的にはバファさんのブログの下位互換未満。 bufferings.hatenablog.com 準備1 使ったデータベースは postgres で、docker で用意した。とりあえず、こんな感じのテーブルを作っておく。 create table users(…

pixela-java-client の CI(circle-ci) を1日1回まわすための lambda 作った

以前書いたとおり、CI でライブラリーのアップデートをslack に送るようにしてみました。 mike-neck.hatenadiary.com しかし、特に開発することがなくなったりすると依存ライブラリーのアップデートにも気づけなくなるので、1日1回 CI (circle-ci) をまわす…

クリーンアーキテクチャーの読書メモ(6)

第三部 設計の原則 クリーンなコードを書くための原則「SOLID 原則」 変更に強い中間レベルのソフトウェア構造 理解しやすい中間レベルのソフトウェア構造 コンポーネントの基盤として、多くのソフトウェアシステムで利用できる中間レベルのソフトウェア構造…

クリーンアーキテクチャーの読書メモ(5)

§6 関数型プログラミング プログラミング以前から存在する(1930年代の Alonzo Church のラムダ計算) 関数型言語の変数は変化しない 並行処理の問題は可変変数がなければ発生しない 変数が変更するコンポーネントと不変のコンポーネントを分離して、可変コン…

クリーンアーキテクチャーの読書メモ(4)

§5 オブジェクト指向プログラミング オブジェクト指向設計とは何でないか 関数とデータの組み合わせ o.f() vs f(o) - オブジェクト指向が生まれる前からやってる 現実の世界をモデル化 - 何を言っているんだお前は カプセル化 境界線の外からはデータが見え…

クリーンアーキテクチャーの読書メモ(3)

第二部 プログラミングパラダイム パラダイム ≒ プログラミングの方法 3つのプログラミングパラダイム §3 パラダイムの概要 3つのプログラミングパラダイム 構造化プログラミング オブジェクト指向プログラミング 関数型プログラミング パラダイムのやってい…

swift-nio-ssl に出したサンプルコードのPRがマージされました

すごい時間かかりましたが、Apple の swift-nio-ssl に出したサンプルコードのPRがマージされました。 github.com 時間かかったのは、僕がどうやら指摘されてた修正をすっかり忘れていたからっぽいです… 現場からは以上です。

クリーンアーキテクチャーの読書メモ(2)

表題の通り §2 2つの価値 プログラマーがステークホルダーに提供する2つの価値 振る舞い 構造 振る舞い 多くのプログラマーが価値だと思いこんでいるもの 機能仕様書とか要求文書とか 構造 = アーキテクチャー 振る舞い = ソフトウェアを簡単に変更できる手…

クリーンアーキテクチャーの読書メモ(1)

以前からちょっとずつ読んでいたけど、そのまとめメモ このメモもちょっとずつ更新予定 Clean Architecture 第一部 イントロダクション 正しいソフトウェア 少ない人数でソフトウェアを動かせる 少ない人数で保守・開発できる §1 設計とアーキテクチャ 設計…

Swift の Result 型メモ

わけあって、 swift-nio-ssl を急遽触っているが、その際に Swift5 の Result 型をさわったので、そのメモ。

Swift Package Manager 5.0 のDevelop バージョンを利用する

swift-nio-ssl に PR を出して早7ヶ月、もはや Swift を忘れた頃に、「ごめんごめん、完全に忘れてた。最新の状態にあわせてくれれば取り込むよ」と言われて、準備をしようとしたところ、 swift-nio-ssl が使っている Swift Package Manager のバージョンが …