Java8で開発しながら、Java9で非推奨になった構文が使われているかチェックする

背景

OpenAPI Generatorは現在 Java8 での動作 が基本になっているが、一方で下記のPR/issueのようにJDK9以降のサポートを進めていく流れがある。

自分もこの辺に絡んでいきたい気持ちになってきたので、Java8で開発しながら、Java9(またはそれ以降のバージョン)で非推奨になった構文が手元のソースコードで使われているかチェックする方法が知りたくなった。

more »

OpenAPI Generator - community drivenで成長するコードジェネレータ

2018-05-12、OpenAPI Generator が公開されました。

https://github.com/OpenAPITools/openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec

これは Swagger Codegen v2.4をフォークしたプロジェクトで、OpenAPIドキュメントから様々なプログラミング言語のAPIクライアントやスタブサーバーなどのソースコードを生成するツールです。まだベータ版のような状態で、“v3.0.0”として初回リリースすることを予定しています

私は “元” Swagger Codegen のコアメンバーであり、現在 OpenAPI Generator のコアメンバー/創立メンバーで少し中の事情に詳しいので、なぜフォークするに至ったのかといった経緯やOpenAPI Generatorについて書いていきたいと思います。
なお、個人のブログに書いていることですので主観が入っている部分があるかもしれませんが大目に見ていただけますと幸いです。

more »

Travis CIでPHP5.3から最新までのバージョンでCIをまわす

なんだか辛さが滲み出るようなタイトルだ。どうしても古いPHPのサポートを継続しておきたいライブラリがあって、PHP5.3から最新までのバージョンでCIをまわすときに少しハマりどころ(といったら大げさだが)があったのでメモしておく。

more »

on #php,

Swagger Codegen + Circuit Breaker in #PHP

( English version is coming soon! )

以前 Swagger Codegen + CircuitBreaker(Ganesha) でSwagger Codegenと拙作のGanesha (Circuit BreakerのPHP実装)を組み合わせる方法を書いた。
その後、Swagger CodegenとGaneshaの双方ともバージョンアップし親和性が高まり、よりシンプルな方法で組み込めるようになったので、改めてSwagger CodegenやCircuit Breakerの概要も含めてご紹介したい。

more »

TimeWindowの種類

TimeWindowとは

ググってみた感じだと(ソフトウェア開発以外も含めた)文脈によっていくつか微妙に異なる意味がありそうなのだが、当記事では “ある測定の対象となる時間枠” の意味で扱う。例えば、システムで発生したイベントを集めて加工を行うようなストリーム処理において、どこからどこまでのイベントを対象とするかを決定するのがTimeWindowである。

more »

CopyOnWriteArrayList でリストを安全に更新する

デザインパターン入門 マルチスレッド編 に、マルチスレッドプログラムの評価基準として 安全性 生存性 再利用性 が挙げられている。安全性とはオブジェクトのフィールドが意図した値を保っていることで、安全性が保たれているクラスをスレッドセーフなクラスという。
マルチスレッドプログラミングにおいてオブジェクトを安全に更新するには、操作が競合しないように synchronized などを使った排他制御の工夫が必要。

more »

synchronized メソッドの挙動を JVM のスレッドダンプを見ながら確かめる

最近、趣味で Java 製プロダクトをいじっていたり、デザインパターン入門マルチスレッド編を読んでいることもあって Java のコードを書くようになった。
これまでほぼ PHP しかやってこなかったので java.util.concurrent パッケージ の充実っぷりに衝撃をうけた。これらのクラスを使って分散アルゴリズムの実装に挑戦してみたい。

more »

NTTデータ テクノロジーカンファレンス2017

最近仕事で Apache Kafka を使おうと思っていたり、分散処理が面白くて勉強している。そんな中いままさに知りたいことがセッション一覧に連なってたので参加してきた。
以下、聴講したセッションの概要、気になったところや質問させていただいたことのメモ。

more »

Java/Kafka 初心者が Kafka Connector を実装するための環境づくり

Kafka Connect は ver0.9 で実装された、Kafka の入出力を行うためのプラグイン機構のようなもので、 Source ConnectorSink Connector がある。多くの Connector が実装されていて、もちろん独自の Connector を実装して利用することもできる。

当記事では、Java/Kafka 初心者(いまの私です)が Connector を実装するための準備として行った環境づくりについて紹介します。

more »

memory_limit を超えないように HTTP リクエストのレスポンスを受取る

サーバー set_time_limit(0); echo str_repeat('.', 1024 * 1024 * 256); file_get_contents :ng: echo 'memory_limit: ' . ini_get('memory_limit') . "\n"; file_get_contents($url); register_shutdown_function(function () { echo sprintf("\nmemory_get_peak_usage: %dMB\n", memory_get_peak_usage() / 1024 / 1024); }); // memory_limit: 128M // PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 130023456 bytes) in /Users/akihito1/hoge.php on line 7 ストリームを使う :ok: echo 'memory_limit: ' . ini_get('memory_limit') . "\n"; $ch = curl_init($url); $stream = fopen('php://temp', 'w+'); curl_setopt_array($ch, [ CURLOPT_FILE => $stream, ]); curl_exec($ch); curl_close($ch); rewind($stream); while (! more »

on #php,

fluent-plugin-http_shadow で会員向けコンテンツをテストする

Fluentd を使って ShadowProxy できるプラグイン。フロントに手を入れずに簡単・安全にできるのが魅力。現状、リクエストボディが送信できない(※)が、 GET アクセスが大部分を占めるようなロールであれば充分かなと。

more »