mike-neckのブログ

JavaかJavaFXかJavaEE(なんかJava8が多め)

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 のバージョンが …

JJUG ナイトセミナー 「JVM言語を作ろう! GraalVMで遊ぼう!」に参加してきた #jjug

表題の通りの勉強会に参加してきた。 jjug.doorkeeper.jp 今回も参加したときにはキャンセル待ちで、参加申し込みの段階で 50人待ちオーバー、2日前の時点で 45 人待ち、前日 26人待ちの状態でしたが、当日に参加できるようになりました。キャンセルしてくだ…

Reactor-Netty の http クライアントを Kotlin Coroutine とともにいじってみる

Reactor-Netty と Kotlin coroutine を同時にいじっているブログ記事を見かけなかったので、勉強がてらブログを書いてみることにしました。

JSUG勉強会 - 「Spring Boot ベースの DDD サンプル徹底解説」に行ってきた話

JSUG 勉強会 Spring Boot ベースの DDD サンプル徹底解説 に行ってきました。 jsug.doorkeeper.jp DDD については、考え方的にはわかっているところもあるのですが、実際のコードを見てがっかりしたり、コードの例が理想的すぎて現実味がないといったことか…

複数の goroutine で処理をした結果を集計するようなタイプの goroutine pipeline 改

この前書いた記事のコードを改善する。 改善のヒントは『Go 言語による並行処理』p.77〜78 の部分。チャネルの所有権を割り振ることで、デッドロック、 panic 、不適合なデータの書き込みを防げるようになる。 チャネルの所有者は… チャネルを初期化 書き込…

pixela-java-client の version 0.2 を maven repository にリリースしました

version 0.1 のアップロードについてブログを書くのを忘れていましたが、ブログを書かないうちに version 0.2 をリリースしました。

複数の goroutine で処理をした結果を集計するようなタイプの goroutine pipeline

chan と sync.WaitGroup と close(channel) を駆使して組み立てる package main import ( "fmt" "time" "sync" ) var items = []string { "foo", "bar", "baz", "qux", "quux", } func main() { producer := make(chan string) consumer := make(chan string…

Pixela の Java クライアントを書いてみた

くさ 先月に合同勉強会 in 大都会岡山に行った時に、草を生やす Pixela というサービスが面白そうだったので、 Java のクライアントがないか探してみたところ、なさそうだったので作ってみました。 github.com

try-with-resources に複数のリソースを指定した場合の close の実行順

年末年始に書いていたコードで気になったことがあったので調べた。 結論だけ先に書くと、 try-with-resources に選択したリソースの順番の逆順になる。 Java9 以降で使えるようになった effevtively-final variables in try-with-resources の実行順がどうな…

合同勉強会 in 大都会岡山 にて 『Vim 入門』というタイトルで LT してきました #gbdaitokai

Vim 入門 2018/12/22 開催された 合同勉強会 in 大都会岡山 にて『Vim 入門』というタイトルで LT をしてきました。 gbdaitokai.connpass.com どうやら評判がよかったのか、 LT 枠での表彰は当初予定になかったようでしたが、審査員特別賞なるものをいただき…

Swift 用の正規表現ライブラリー

これは Qiita のアドベントカレンダー2018 の19日目のエントリーです。 qiita.com Swift の勉強を始めたのが今年の5月末からで、約半年程度 Swift をやってきました。ただ、僕は仕事では一切 Swift を書いていないので、知見に溢れた他の方のエントリーを楽…

JJUG CCC 2018 (Winterでなく)Fall に参加してきた

表記の通り、 JJUG CCC 2018 (もう 12 月だけど) Fall に参加してきた www.java-users.jp で、恒例のそのメモ Pivotal認定講師によるSpring Framework 5.1ハンズオン! 日本で唯一の Pivotal 認定講師カサレアルの 多田さん とカサレアルのスタッフによる Sp…

Vim でも AWS lambda 関数

普段 vim は h/j/k/l/d/x/0/$/:wq くらいしか使わないのですが、ひょんなことから Vim で Web サーバーがたてられると聞いたので、サーバーが建てられるなら、 http クライアントも動くのだろうと考えて、 ラムダで動くかどうか試してみることにしました。 …

JEP-330 Single-FIle Source-Code Programs って何? Java ファイルが java コマンドで実行できるってホント?! shebang でどう指定するの?調べてみた!

Java11 で取り込まれている JEP-330 すでにきしださんがブログにしている古い機能ですが、自分用のメモ。 (『古い機能』という表現はその手の界隈に人達への忖度表現) TL;DR ってなんだ??? Java 11 にとりこまれた JEP-330 は 1つの java ファイルを java…

AWS Lambda のカスタムランタイムにて Java のカスタムランタイムで関数を動かす

これは Java Advent Calendar 2018 の 7 日目のエントリーです。 Java をラムダで動かす Lambda SDK を使って、チュートリアルどおりに作成します。以上。 そうではないですね。 今回やりたいのは AWS Lambda のカスタムランタイムで Java のカスタムランタ…

Swift Package Manager プロジェクト にて CPP(C++) の関数を Swift から呼び出す

一つ前のエントリーの続き。 C++ で作られた関数を Swift から呼び出す方法。 巷には C++ の関数を Swift から呼び出す方法に関する記事が溢れているが、 XCode 前提で Swift Package Manager プロジェクトについて触れてない SPM 使っててもちょっと古い Br…

CPP(C++) の関数を C 言語から呼び出す方法

C 言語を業務でやったことがほとんどない + CPP は完全に触ったことがないので、いろいろググりつつやってみた。 最終的に Swift から C++ で定義されているオブジェクトの関数を呼び出すところまでが目標。 まず、次のような C++ の関数が定義されているも…