覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Java

Javaで外部プロセスを実行する

Java8以上の世の中だと思いますので、外部プロセスを実行する場合はProcessBuilderクラスを使いましょう。 今回は、外部プロセスが出力する標準出力や標準エラー出力の内容は無視して、終了コードだけを取得する例となっています。 Javaで?外部プロセスを実…

Gson で JSONICの簡単なアダプタを作る

JavaでもJSONを扱わなければならなくなった初期の頃に、JSONICというライブラリのお世話になった方も少なく無いのでは無いでしょうか? 今となっては、jackson や Gson 等の他のライブラリを使うのが一般的になっています。 JSONICのページにも以下のように…

Gson - JsonWriterでインデント形式を変えてファイル出力してみる

以前JSON形式のデータをJavaで扱うためのGsonライブラリについて使い方を紹介しました。 今回はGsonライブラリのGsonオブジェクトを使わずにJSONファイルへの出力を行ってみます。 その際にインデントの形式をいくつか変えて出力します。 今回出力するJSONフ…

Java 11リリースに関するメモ

先日、Java 11が正式リリースされました。 ご存知の通りですが、本バージョンからOracle JDKが有償となりました。 その辺についての自分用のメモです。(不正確だったり間違っている内容もあるかもしれません) 概要 Java 11リリースに関連する内容は以下の…

FailSafeによるサーキットブレーカーパターン

クラウド、マイクロサービスなどのアーキテクチャとともにサーキットブレーカーというパターンがよく取り上げられます。 詳細は、上記リンク先などを参照していただくのがよいです。 超大雑把にいうと、クラウドのサービスなどを利用する際に、 クライアント…

Failsafeによるリトライ処理 (3)

前回エントリで、FailSafeによるリトライ方法の制御をいくつか紹介しました。 今回のエントリでは、処理失敗時やリトライ処理実行時のハンドリングなどを紹介します。 基本となるリトライポリシーとリトライ処理を以下とします リトライポリシー RetryPolicy…

Failsafeによるリトライ処理 (2)

前回エントリで FailSafe によるリトライ処理について書きました。 FailSafeは前回書いた内容よりももっと色々制御できるので、それらを紹介する内容のエントリになります。 基本的には上記の前回エントリの内容がベースにあります。 前回エントリでは、基本…

Failsafeによるリトライ処理

業務系プログラムにおいて、リトライ処理は必須だと思いますが、 Javaで単純にリトライ処理を書こうとすると、泥臭い感じのプログラムになってしまいます。 FailSafeというライブラリを利用することで、リトライ処理を整理した形で記述することが可能です。 …

JavaのString#trim

JavaのString#trimメソッドは、文字列の先頭と末尾のスペース(半角スペース)を除外した文字列を返してくれます。 例えば " sample1 " という先頭にも末尾にも半角スペースが入った文字列にtrimを実行すると、 半角スペースが削られた "sample1" という文字…

ASCII文字列の16進数表記を取得する

JavaでASCII文字列の16進数表記の値(Hex Dump)を取得するサンプルです。 以下のようなメソッドを用意します。 import java.util.stream.Collectors; static String asciiHexDump(String ascii, String delimiter) { return ascii.chars() .mapToObj(b -> S…

Nクイーン問題を扱ってみる

8クイーンと呼ばれるパズルが存在しています。 チェスのクイーン(上下左右斜めに何マスでも進める)を、チェスボードの8×8マスに、8つのクイーンを互いに利きに入らないように配置するパズルです。 8×8マスの盤面の中に、縦・横・斜めにクイーンが重複しな…

Java - 配列をシャッフルする

Javaで配列をシャッフルするサンプルです。 Listをシャッフルする Javaで、List内部の要素をシャッフル(ランダムに入れ替え)するには、 Java標準で用意されている Collections.shuffle のAPIを利用すればよいです。 コードサンプル import java.util.Array…

フィボナッチ数を扱う - 再帰呼出し

再帰についてのメモがてらフィボナッチ数(フィボナッチ数列)をJavaでサンプル的に扱ってみました。 フィボナッチ数 (フィボナッチ数列) \( n \)番目のフィボナッチ数を \( F_{n} \) で表すと、 と定義される漸化式です。 この数列はフィボナッチ数列(Fib…

Class#newInstanceは非推奨になるようなので気を付けよう

Javaでリフレクションによるデフォルトコンストラクタ呼び出しでインスタンス生成する方法としてClass#newInstanceが挙げられると思います。 ただし、Class#newInstanceはJava9で非推奨(Deprecated)になるようです。(さらに以降のバージョンでAPI自体が削除…

MavenでOWASP Dependency CheckによるJavaライブラリの脆弱性をチェックする

OWASP Dependency Checkで使用しているJavaライブラリの脆弱性をチェックすることができます。 今回はMavenのpluginを使用します。 設定 pom.xmlに以下を追記します。 <plugins> ・・・ <plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>2.0.0</version> <configuration> <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled> …</configuration></plugin></plugins>

RxJava - RxJavaでHelloWorld

RxJavaを使いながらリアクティブプログラミングを理解していきたい。 とりあえずは、まず何を置いてもHello World! 準備 pom.xmlに以下の依存関係を追加します。Reactive Streamsにも対応しているバージョン2.Xを使います <dependency> <groupId>io.reactivex.rxjava2</groupId> <artifactId>rxjava</artifactId> <version>2.0.8</version></dependency>…

Lombok - @Builderでデフォルト値を指定する

Lombokの@Builderアノテーションは何かと便利なのですが、プロパティへ値をセットするためのBuilderのメソッドを呼ばないと対応するフィールドが初期値(数値なら0, booleanならfalse, オブジェクトならnull)になってしまいます。 このあたりの動きをv1.16.…

普通にコンストラクタ呼び出すのとリフレクション使うのとでどれだけ速度差あるの?

Javaでインスタンス生成する場合は、コンストラクタを実行するのが普通ですが、リフレクションでもやれます。 ただ、一般的にリフレクション使うと遅いというのが懸念点の一つとして上がってきます。 というわけで、普通にコンストラクタ実行するとのリフレ…

Javaでユニットテストを書く時に気を付けたいこと

Javaプログラムに対するユニットテスト(単体テスト)を書く際に気にしておきたいことを書いてみました。 以下、個人的な経験則と本で読んだ内容が混ざっています ユニットテスト作成時の原則 「このクラスはXXXの理由でユニットテストが難しいんです!」と…

Javaでプログラムを書く際に意識しておきたいこと

以下、個人的にJavaでプログラムを書く際に意識しておきたいことです。 ただし、学術的な裏付けなどがある内容でありません。あくまで私の経験に由来する内容となっています。 そもそもコンテキストによってはそぐわない内容もあると思いますので、その辺は…

コード品質特性を悪化させるには

プログラムのより良い設計を支える中心的概念としてコード品質特性があります。これに点数付けした場合に、悪い点をとるためにはどうすればいいかについて書きました。 以下内容のベースはJavaです そもそもコード品質特性とは ここでは、以下をコード品質特…

複雑なプログラムに現れる傾向や特徴

「ソースコードを汚くするには」に記載したようなコードを書いていると、結果的に複雑なプログラムになってしまいます。 ここでは複雑なプログラムに現れやすい傾向や特徴などについて記載しました 基本的にJavaをターゲットにして本エントリを記載していま…

Kotlinの特徴

「Kotlinスタートブック」を読み始めたので、とりあえずKotlinの特徴として押さえておきたい点をメモしておきます。 Kotlinスタートブック -新しいAndroidプログラミング作者: 長澤太郎出版社/メーカー: リックテレコム発売日: 2016/07/13メディア: 単行本(…

日付のフォーマット処理する時にどれだけメモリ消費するの?

業務アプリケーションを作成する上で、日時を取り扱うのは日常茶飯事だと思います。 例えば、生成した日付オブジェクトを特定のフォーマットパターンで文字列化する という処理の流れは大体どんなシステムでも実施されます。 これをJavaで実現する場合、現在…

KotlinでHello World

Kotlin流行ってますし、そろそろ勉強しようかなと思っている今日この頃。とりあえずHello Worldだけやってみました。 IntelliJ IDEAでKotlinのプロジェクトを作成して以下実行しています。 ■サンプルコード Kotlinのファイル(HelloWorld.kt)を新規作成して…

JSUG勉強会 2017年その2 ~ 脱Spring Boot初心者 に行ってきました

JSUG勉強会に参加してきました 以下自分用のメモ 概要 開催場所 : Pivotal Japan 開催日時 : 2017-02-27(月)19:00 - 21:00 Spring for Spring Boot -Spring Bootユーザーが知るべきSpringの基礎知識- 多田 真敏氏 (株式会社カサレアル、Pivotal認定講師)…

MBassador - サブクラスのメッセージ受信時の動き

MBassadorを用いてメッセージのハンドリングを行う場合のメッセージのサブクラスに対する動きを確認します。 本エントリでは、MessageObj とその子クラスの SubMessageObj を定義しました。これらをEventBusにpublishします。 ■メッセージクラスの定義 publi…

MBassador - 異なる型のメッセージを1つのHandlerでハンドリングする

MBassadorを用いてメッセージのハンドリングを行う場合、通常メッセージの型ごとにハンドラを用意することになりますが、@Envelopedアノテーションを使用することで複数の異なる型のメッセージを1つのハンドラでハンドリグすることが可能となります。 以下実…

MBassador - EventBus内で発生した例外をハンドリングする

MBassadorを用いてイベントのハンドリングを行っている場合、デフォルトではハンドラ内部で例外が発生しても何事も無かったようになってしまい、エラーが発生したことすら分からないような状態になってしまいます。 さすがにこれはまずいので、基本的にはエ…

String#joinで文字列連結

Java8で増えたString#joinを使うと配列やListの要素を文字列連結するのが楽です。地味に便利です。 Listをカンマで連結する例で動きの確認をしておきます 複数要素の場合 List<String> twoList = Arrays.asList("A", "B"); List<String> threeList = Arrays.asList("A", "B",</string></string>…