関数呼び出しの実引数にリテラルをコメント無しで使った場合に警告するLinterを書いてみた #go

以下のリンク先にuberのgoのコーディングスタイルのガイドがあるのですが そこにあるルールに基づいたエラーを吐くLinterを書いてみました。 github.com よく見ると元のルールとは微妙に違うような気がします。 "foo"という文字列を渡してるけど、Goodではそ…

そーだい本、「失敗から学ぶRDBの正しい歩き方」を読みました

「そーだい本」こと、曽根壮大さんが書かれた「失敗から学ぶRDBの正しい歩き方」を読みました。 読み終えたので感想を書いてみます。 gihyo.jp 感想 感想を書く前に、まずは書籍紹介を引用してみます。 「データベースがよく落ちる」「前任者が残したテーブ…

無職になりました

9月末で無職になりました。 正社員として地方からフルリモートで働ける・雇っていただける会社を探しています。 直近のお仕事では、Java/Spring Bootを使ったAWS ECS上で動くアプリケーションの開発や TerraformやAnsibleを使った運用に関わってきました。ま…

運用とログ

アラート起因で調べるベースの運用とログの話を書いておく。 状況確認 状況確認は大事。ひとまず初動で原因が分かると嬉しいので ざっくり状況確認。 ログを読む エラーログを読む なにも出てなかったらWARNを読む メトリクスを見る 5xxエラーを見る どのサ…

Amazon Linux 2にBCCを入れて、Pythonのメソッド実行のトレースをしてみる

今回はBCC(BPF Compiler Collection)のツールを使って Pythonのメソッド実行のトレースをやってみます。 今回の記事の流れは以下のとおりです。 Amazon Linux 2を立ててBCCのインストールをする 検証のためのコードを準備する 実際にメソッドの呼び出しを…

AWS CDKを使ってAWS LambdaにAPI Gateway経由で呼び出す口を用意する

Lambdaを使ってAPIをホストしたい時、何使いますか? AWS CDK、おすすめです。 実際のコード Lambda Functionを中心として、Lambda Functionに関連付けを紐付けるだけで API Gatewayなりのリソースが作成される。 #!/usr/bin/env node import 'source-map-su…

Goの型付きnilで死んだ話

これはどういう結果になるか、分かりますか? package main import ( "fmt" "bytes" ) func Buffer() *bytes.Buffer { return nil } func main() { b := Buffer() fmt.Printf("%T %v", b, b) } こうなります。 型無しnilになって欲しい気持ちだった。 結局、…

DNSの送受信をtcpdumpで見る

apt update && apt install -y tcpdump dnsutils tcpdump -X -n -vv dst port 53 or src port 53 & # dig すればなんか出るはず dig yahoo.co.jp tcpdumpで真面目に見たのは初めてなので ↓を見ながら調べた。 tcpdumpチートシート - Qoosky 28バイトはヘッダ…

2019/07/26 KCL v2周りの話

KCLv2の話 移行はこの辺読んで。Kinesis Client Library 1.x から 2.x への移行 - Amazon Kinesis Data Streams localstackではKinesis Client Library v2はテスト出来ない 内部で使っているkinesaliteでは、新しいAPIがサポートされていない Kinesis Client…

Armeriaで始めるDNSのSRV Recordを使った クライアントサイドロードバランシング

今回は、Armeriaを使って、DNSのSRV Recordを使ったクライアントサイドロードバランシングをやってみました。 ソースコードはこのリポジトリにおいています。 クライアントサイドロードバランシングの必要性については以下の記事を読むと良いかもしれません…

JUnit 5 でどこが変わったのか

JUnit5 でどこが変わったのか、今いるチームの開発メンバや、JUnit5ざっくり知りたい人向けに書いておきます。 この記事では以下の内容について書いていきます。 なぜ移行するか どこが変わったか まとめ なぜ移行するのか なぜ移行するかを簡単に説明してお…

内部で使っているライブラリを JUnit 5 (jupiter) に 移行した

この記事では、JUnit5への移行を行うと共に どういう書き換えをしたかを書いておきます。 以下の内容で書いていきます。 今回移行したプロジェクトの前提 どういう方法で移行するか PMDのアップデート junit 4系の依存を完全に外す junit-jupiterの依存とテ…

Checkstyle 8.13からClassFanOutComplexityでカウントされる対象が増えて死んだ話

以下のリリースノートにこんな記述がありました。 checkstyle.org ClassFanOutComplexity: count complexity base annotations/extends/implements/methods params. Author: kazachka #4092 annotation, extends, implementsで使われているクラスもClassFanO…

ThreadPoolExecutorを拡張してスレッドプールを使いつつもMDCを引き回すようなExecutorを作ってみる

今、Java並行処理プログラミング読んでいて ThreadPoolExecutorというかAbstractExecutorServiceのnewTaskForというメソッドを知ったので 使ってみます。 今回の記事では、ThreadPoolExecutorを拡張して MDC、Mapped Diagnostic Contextを引き渡しながら、タ…

Gatlingを使った負荷試験を継続的に回すためのビルドやセットアップ周りの話

負荷試験は大事なのは皆さんご存知だと思いますが すぐにセットアップ出来る負荷試験ツールもあると良いですね。 この記事では、自分がやっている負荷試験の方法を紹介しておきます。 負荷試験にはGatlingを使っています。 この記事は以下の流れで説明してい…

GradleのプロジェクトでIntellij IDEAで使われるコンパイラの引数をbuild.gradleに設定したい

その要求に答えてくれるのがこの JetBrainsが出している、gradle-idea-ext-pluginです。 idea { project { settings { compiler { javac { javacAdditionalOptions "-Amapstruct.defaultComponentModel=spring -Amapstruct.unmappedTargetPolicy=ERROR" } } …

Spring Boot 2.1からFlyway 3.x, 4.x系で起動できない。Flywayのアップデートをしてください。

起動できません。Flyway 5.1以降にアップデートしましょう。理由としては、spring boot 2.1.x系から以下のflywayのissueによって導入されたクラスに spring-boot-autoconfigureが依存するようになったからです。 Introduce fluent configuration · Issue #19…

Spring WebFluxでSpring Security OAuth2で作った認証サーバを使って認証するライブラリを書いた

Spring Security 5.2.0に、OAuth 2.0 Token Introspectionで認証が可能なモジュールが実装されています。 Provide support for OAuth 2.0 Token Introspection · Issue #5200 · spring-projects/spring-security · GitHub また、このReactive版も提供されて…

Concurrency-LimitsとOkHttpのIntegrationを書いてみた

Netflix/concurrency-limits とOkHttp3のIntegrationを書いた。 このライブラリの強みはNetflixの人が書いた、mediumの記事やリポジトリのREADMEを読んでほしい。 GrpcのClientのInterceptor周りを参考に書いた。 以下コード。 public class OkHttpClientLim…

Release Itの魅力を伝える

この記事では「Release It」という本を紹介する。 エンジニアリングに携わり、ソフトウェアの開発・運用をしている人に この「Release It」の魅力を伝えたい。 1年以上かけて作ったソフトウェアのリリースの日がやってきたあなたは、全機能が完成し、単体テ…

Gradleでローカルにjarをpublish/installしたいあなたへ

maven-publish プラグインを使っているあなたは `publishToMavenLocal`maven プラグインを使っているあなたは `install`です。確認環境: Gradle 5.0

`github.com/prometheus/client_golang` を使って 99.9 percentileでのHTTPハンドラのメトリクスを取ってみる

github.com/prometheus/client_golang でメトリクスを取る この記事はGoアドベントカレンダー向けの記事です。 この記事では github.com/prometheus/client_golang を使って 基本的なメトリクスを取ると同時に、HTTPハンドラのメトリクスを追加してみます。 …

Spring 5.0/Spring Boot 2.0にしたらMockMvcを使ったテストが406 Not Acceptableを返してくる話

Content-Type周りの挙動で死んでしまった回 使っているSpringは5.1.0、Spring Bootは2.0.6です。 元はこんなコード。 @Before public void setUp() { this.mockMvc = MockMvcBuilders.standaloneSetup(controller) .setMessageConverters(httpMessageConvert…

Spring Boot 1.5.x を使っているプロジェクトでSpring Bootを2系にしたら @Scheduledが動かないことがある

Spring Boot 1.5.xでは動いていた @Scheduledをつけた定期処理が Spring Boot 2.xでは動かないことがあります。 EnableSchedulingを自分のアプリケーションのConfigurationクラスにつけてください。 どこにもつけてないんだと思います。 ちょっとハマったよ…

Jackson 2.9からupdateValue/readerForUpdatingでデータのマージがされる

こんにちは。紅葉の季節ですね。 最近寒くて辛い。Spring Bootのアップデートもうまくいってなくて辛い。 今日も今日とて、アップデートでハマったメモを書きます。 ObjectMapper#readerForUpdatingを使っているあなた。気をつけましょう。 あるキーに対して…

Caffeineでキャッシュのエントリのキャッシュ有効時間に揺らぎを入れる方法

こんにちは。今日はCaffeineでキャッシュのエントリに対して キャッシュ有効時間に対してランダムな揺らぎを導入する方法をここに書いておきます。 キャッシュに対してランダムな揺らぎを入れる必要性に関してはこちらの記事を読むと一部書いてあると思いま…

reactor-logbackを試した。+ LMAX Disruptorの Technical Paperを読んだメモ

以下のモジュールを試した。 reactor-addons/reactor-logback at master · reactor/reactor-addons · GitHub Reactor LogbackはLMAX Disruptorの上に作られたReactorのアドオンだ。 このモジュールはアプリケーションのための高速で非同期なロギングの機能を…

SpringfoxはComponentScanを利用しているので spring-context-indexerでComponentのindexをすることは出来ない

出来ない。 理由はタイトルに書いた通り、springfox (現在最新 2.9.2) ではComponentScanを利用している。 なぜか spring-context-indexerを有効にする際は、ComponentScanを利用しているjarが全て対応していないといけない。 じゃあどうするか。 indexerでi…

MySQLのReplicationDriverとHikariCPは組み合わせて使えない

Tomcat DBCPを使いましょう、ということらしいです。(他のDBCPはどうなんだろう。) Can I use hikariCP with ReplicationDriver? · Issue #1123 · brettwooldridge/HikariCP · GitHub Problems with MySQL master/slave allowMasterDownConnections · Issu…

Spring Boot2系からStringをRestControllerで返している場合にデフォルトのContent-Typeが変わってしまった話

変わってしまった。 これは特殊な条件下によって起きる。 どのようなコードだったか @RestController public class MyController { @GetMapping public ResponseEntity<String> get() { return ResponseEntity.ok("Hello World"); } } どうなったか 手元のSpring Boo</string>…