読者です 読者をやめる 読者になる 読者になる

覚えたら書く

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

meetup app tokyo@2 に行ってきた

meetup app tokyo@2に参加してきました。 以下自分用のメモ 概要 テーマ: Deep Learning 開催日: 2016/12/16 18:30 〜 場所: 株式会社gloops 5Fハングアウトフィールド 参加費: 300円 DIGITS : DIGITSでディープラーニングを始めよう! NVIDA 村上真奈 氏 …

Javaslang を試してみた

Java Advent Calendar 2016の16日目の記事です。 Javaで関数型プログラミングを行うためのライブラリとしてJavaslangが存在しています。 Javaslangは、Scalaの長所をJava言語にできる限り導入することを目的としています。 関数型プログラミング用のデータ構…

MedNight Tokyo #1 ~医療系サービスにおけるエンジニア運用裏話~

MedNight Tokyo #1 に参加してきました。 以下、自分用のメモです 概要 開催日時 2016/12/14 19:30 ~ 登壇企業 エムスリー株式会社 株式会社メドレー 内容 医療ヘルスケア分野のエムスリー・メドレーのエンジニアが、医療業界におけるサービス運用に関する…

Quartz - Javaで定期処理を行いたい

Javaで定期処理を書くのは、Java標準のAPIを使ってできるのはできますが、 ジョブスケジューラライブラリのQuartzというものが存在しています これを使ったほうがもっとシンプルに書けて、(たぶん)高機能なこともできます。 とりあえずまずは使ってみまし…

IntelliJ IDEA - import文をアスタリスクでまとめないようにする

IntelliJ IDEAでJavaのコードを書いている場合、デフォルトで同一パッケージのimportが5つ以上になると自動的に、*(アスタリスク)でまとめられてしまいます。 import文はそんなに目立つ必要もないので、これはこれでいい気がするのですが、規約などで *(…

java.util.Optionalに対する理解

JavaのOptional(java.util.Optional)がどういうものであるかについて自分なり理解したので、それについてメモしておきます。 自分なりの理解ということで、細かい部分で正しくないところもあるかもしれません。 Optionalの役割 Optionalは、値があるかもし…

IntelliJ IDEA - マウスオーバーでjavadocをポップアップ表示する

Eclipseでは、デフォルトでソース内のメソッド等にマウスオーバーすると自動的にjavadocがポップアップ表示されます。 これに対して、IntelliJ IDEAはデフォルトではそのような自動表示はされないようになっています。 Eclipseのようにマウスオーバーで自動…

Mavenでfat jarを生成する

Mavenプロジェクトで開発している場合にfat jar(jarの中に依存するライブラリのjarもまとめた1つのjarファイル)を生成するためには、 pom.xmlに以下の内容を追記することで可能です <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-d…</descriptorref></descriptorrefs></configuration></plugin></plugins></build>

IntelliJ IDEA - ソースコードに自動的にCopyrightを挿入する

ソースコードの先頭にCopyright(著作権)の表示をしておきたいということが多々あります。新規クラス生成するたびに、コードの先頭に決まったCopyrightの内容を記述するの面倒なので、自動的に挿入されるようにしておきましょう。 以下手順です。 File > Se…

「レガシーソフトウェア改善ガイド」 第3部

「レガシーソフトウェア改善ガイド」の第3部 リファクタリングの先へ - プロジェクトのワークフローと基盤を改善する で気になったところの抜粋。 レガシーソフトウェア改善ガイド (Object Oriented Selection)作者: クリス・バーチャル,吉川邦夫出版社/メー…

「レガシーソフトウェア改善ガイド」 第2部

「レガシーソフトウェア改善ガイド」の第2部 コードベース改良のためのリファクタリング で気になったところの抜粋。 レガシーソフトウェア改善ガイド (Object Oriented Selection)作者: クリス・バーチャル,吉川邦夫出版社/メーカー: 翔泳社発売日: 2016/1…

「レガシーソフトウェア改善ガイド」 第1部

「レガシーソフトウェア改善ガイド」の第1部で気になったところの抜粋。 レガシーソフトウェア改善ガイド (Object Oriented Selection)作者: クリス・バーチャル,吉川邦夫出版社/メーカー: 翔泳社発売日: 2016/11/11メディア: 単行本(ソフトカバー)この商…

IntelliJ IDEA - ショートカット集

IntelliJ IDEAのショートカット集(IntelliJ IDEAを使い始めたばかりなので自分用のメモです) ちなみに自分の環境がWindowsなので以下全てWindows用のショートカットを記載しています。 便利なショートカット 使用頻度が特に高いショートカット 内容 ショー…

Spring Boot - アクセス元のIPアドレスをIPv4形式で取得したい

Spring BootでWebアプリを構築する際に、 仮に以下のようなコードがあった場合、WebAuthenticationDetails#getRemoteAddressでアクセス元のIPアドレスを取得することができます。 import lombok.extern.slf4j.Slf4j; import org.springframework.beans.facto…

JJUG CCC 2016 Fall 行ってきた #jjug_ccc

JJUG CCC 2016 Fallに参加してきました。 以下自分用のメモです。 概要 JJUG CCCは、春と秋に開催される日本最大のJavaコミュニティイベント。Java関連の技術や事例に関するセッションが行われる。 主催: 日本Javaユーザーグループ 日程: 2016/12/3(土) 10…

Groovy - Java上で定義した文字列をGroovyのScriptとして実行する

Java上で定義した文字列をGroovyのScriptとして実行するサンプルです 以下サンプルでは、Scriptで受け取った文字列をコンソールに出力して、"end"という文字列をreturnします。 ■pom.xml Mavenで取り合うことを前提として、pom.xmlには以下を追記します <dependency> <groupId>org</groupid></dependency>…

IntelliJ IDEA - 1行だけのメソッドを自動で折り畳まないようにする

IntelliJ IDEAではデフォルトでは、One-line(1行だけの)メソッドを自動的に折り畳み表示するようになっています。(以下のような感じです) これはこれでいいとは思うんですが、これが見慣れない人もいると思います。その場合は自動で折りたたむ機能をオ…

Spring Boot - Actuatorの機能用のEndpointのコンテキストパスを指定する

Spring BootのActuator機能のEndpointに関しては通常の機能とはコンテキストパスを別にしたい場合があります。 その場合はapplication.ymlで、以下のようにmanagement.contextPathにコンテキストパスを指定することで実現可能です。 以下では、management.po…

Spring Boot - Controllerで認証済みのユーザ情報を受け取る

Spring Bootを利用したアプリケーションを構築する際、 Spring Securityで認証を行ったあと、認証済みのユーザ情報を各Controllerで簡単に受け取ることができます。 WebSecurityConfigurerAdapterを継承したクラスに@EnableWebSecurityアノテーションを付与…

Spring Boot - 非同期処理を簡単に書く

Spring Bootでアプリケーション構築をする際に、@Async(org.springframework.scheduling.annotation.Async)アノテーションを利用することで簡単に非同期処理を記述することができます。 以下サンプルです 監査ログを書き込むためのAuditLoggerを定義して、…

Spring Boot - pom.xmlで設定したversion情報とかを取得したい

Spring Bootでアプリケーション構築した際に、pom.xmlで定義したバージョン情報等をアプリ側でも利用したい場合があります。 その際の利用方法は以下の通り。 以下は、pom.xmlの<project><artifactId>と<project><version>を利用する例です 今回利用するpom.xmlは以下のような内容になっているものと</version></project></artifactid></project>…

Spring Boot - コンテキストパスを設定する

Spring BootでWebアプリケーションを構築する際にコンテキストパスを指定するには、 application.yml で「server.contextPath」に値を設定します。 ■指定例 server: contextPath: /sample 仮にコンテキストパス指定なしの場合のアクセス先が以下の通りの場合…

Gson

JavaのJSONライブラリの一つであるGsonを用いたJSONデータの取り扱いサンプルです。 Java BeansとJSON文字列の変換 Java BeansとJSON文字列の変換を行う例です。 Javaオブジェクト ⇒ JSON文字列の変換にはGson#toJsonを使用し、JSON文字列 ⇒ Javaオブジェク…

MavenプロジェクトでOracleのJDBCドライバを使いたい

Mavenプロジェクトで開発している場合にOracleのJDBCドライバを使いたい場合もあると思います。 OracleのJDBCドライバのjarはMaven Central Repositoryに登録されていないので単純にpom.xmlへ依存関係を記述するだけでの利用はできません。 以下手順に従って…

IntelliJ IDEAでmainメソッドを定義する

IntelliJ IDEAでJavaのコードを書いている際に、mainメソッドを定義する手順は以下の通りです。 (Eclipseで main と入力してmainメソッドを定義するのに対応する手順です) まずクラスを作成します public class SampleLauncher { } ↓ psvmと入力します。 p…

RustのLT会! Rust入門者の集い に行ってきた

RustのLT会! Rust入門者の集いに参加してきました。 以下、自分用のメモ 概要 場所: レバレジーズ株式会社(渋谷ヒカリエ17F) 日程: 2016/11/21 玄人枠 自然数を定義してみよう @chikoski Rustの特徴 Rust and the FUture of Systems Programing 自然数を…

GroovyでHello World

GroovyでHello Worldやってみましょう。 pom.xmlに以下のGroovyに関する依存関係を追記 <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency> ■サンプルコード Groovyのファイル(HelloWorld.groovy)を新規作成して以下を記述。 (Javaに比べてかなりシンプルなコードに…

Lombok - IntelliJ IDEAのLombok Pluginによる操作

以前のエントリでIntelliJ IDEAへLombok Pluginをインストール手順を記載しました。 このPluginを利用することでIntelliJ IDEA上で、Lombokの操作を一部補助してくれます。 Lombokのアノテーションの貼り付け メニューからの選択操作でコード上にLombokのア…

Spring Day 2016 に行ってきた

Spring Day 2016に参加してきました。 以下自分用のメモ 概要 日程: 2016年11月18日 場所: グラントウキョウサウスタワー41F Spring Framework 5.0 Themes & Trends Stephane Nicoll 氏 (Pivotal) Last 4.x feature release 4.3 2016 June Release JDK6, 7, …

stubby4j - Basic認証

stubby4jを、Basic認証を行うサーバとして振る舞わせることができます。 stubby4jの実行方法等は、はじめてのstubby4jを参照ください。 本エントリでは、リクエストの送信結果を確認するためにDHCを使用しています Basic認証用の設定方法 ■定義 YAMLファイル…

stubby4j - リクエスト順に応じたレスポンスを返す

stubby4jでは特定のurlにアクセスされた際に、アクセスされる毎に異なるレスポンスを返すようにすることも可能です。 以下ではアクセスごとに異なるレスポンスを返すサンプルを記載しています。 stubby4jの実行方法等は、はじめてのstubby4jを参照ください。…

stubby4j - POSTのリクエストをハンドリングする

これまでstubby4jの利用サンプルではGETのHTTPリクエストのみを対象としてきましたが、stubby4jは、その他のメソッドにも対応しています。 本エントリではPOSTメソッドのリクエストのハンドリングのサンプルを記載します。 stubby4jの実行方法等は、はじめて…

Lombok - delombok

Lombokを利用すると各種アノテーションを付与するだけでJavaのお決まりのコード(ボイラープレートコード)を削減することができます。 Lombokを使用している場合に、実際に生成されるコードを確認したい場合などがあります。 そのような際にはdelombokの機…

Lombokを開発環境にインストールする(IntelliJ IDEA)

以前のエントリでLombokを、Eclipseへインストールして利用する手順を紹介しました。 本エントリでは、IntelliJ IDEAでLombokを利用するための設定手順を説明します。 設定はすべてIntelliJ IDEAで行います。IntelliJ IDEAを起動した上で実施してください。 …

com.google.common.primitives.Longs

Guavaのcom.google.common.primitives.Longsの利用サンプルです。 Longsクラスはlong型の値に対するユーティリティメソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 long配列 ⇒ List<Long> の変換 ■API Longs#asList ■サンプル long[] </long>…

com.google.common.math.IntMath(LongMath)

Guavaのcom.google.common.math.IntMath, com.google.common.math.LongMathの利用サンプルです。 数値計算に関する機能を提供するクラスです。 例えば、以下のAPIなどを利用することでオーバーフローをチェックしながら足し算や掛け算などの算術を行うことが…

streamsupportはStream操作以外にも色々提供してくれる

streamsupportは基本的にJavaのStream APIを代替する機能を提供してくれますが、それに留まらずStream API以外のJava8の機能やJava9で追加される機能もバックポートしています。 それら機能について以下紹介していきます。 以下内容については、Mavenを利用…

streamsupport - Stream APIのバックポートライブラリ

Java8のStream APIと同等の機能を提供するライブラリとして、Lightweight-Stream-APIの紹介エントリを書きましたが、 これ以外にもStream APIと同等の機能を提供するライブラリとしてstreamsupportというものも存在しています。 Lightweight-Stream-APIと立…

Lightweight-Stream-API - 色々なStream操作

Lightweight-Stream-APIを使うことでJava6やJava7でもStream APIを利用可能となります。 が、Lightweight-Stream-APIは単純にStream APIを代替するだけでなく、Java標準では提供されていないStream操作も提供してくれています。 本エントリでは、Java標準で…

Lightweight-Stream-API - Java6・7でもStream APIを使いたい

Java8から提供されているStream APIをJava6やJava7でも利用可能にしてくれるライブラリとしてLightweight-Stream-APIが存在しています。 このライブラリを使うことでJava8と同等かそれ以上の操作を利用することが可能となります。 Lightweight-Stream-APIの…

Java Casual #2に行ってきたよ

Java Casual #2に参加してきました。 以下自分用のメモ 概要 日時: 2016/11/07(月) 19:30~ 会場: LINE株式会社 27F カフェ jcmd便利 @sugarlife jcmd #javacasual from Yuji Kubota JDK9からの診断ツール jcmdとjhsdbを使う jinfo, ihat, jmap ⇒ Experime…

Retrolambda - Java6・7でもラムダ式を使いたい

Java8がリリースされて結構な期間が過ぎました。実行環境が全てJava8ならいいのですが、世の中色々な制約がありますのでJava7やJava6が実行環境になっている場合も多々あります。 その実行環境で動作するJavaアプリケーションを開発する側は当然のようにJava…

com.google.common.primitives.Primitives

Guavaのcom.google.common.primitives.Primitivesの利用サンプルです。 Primitivesクラスはプリミティブ型とプリミティブラッパークラスのClassの変換(ラップ・アンラップ)メソッドなどを提供しています。 サンプルコードで試したのは以下の通りです。 全…

JMHでJavaのマイクロベンチマークを取得する

JMHは、Java用のマイクロベンチマーク取得ツールです。 基本的な使い方 計測時の初期化処理や終了処理を行いたい場合 計測の実行条件の指定 JMHを用いた計測サンプル

JMH - 計測結果のレポートをファイルに出力

JMHを使用した計測を行った場合、通常は計測結果はコンソールに出力されますが、 オプションの指定で計測結果をファイルに出力することができます。 また、出力する形式(CSV, JSON, ...)を指定することも可能です。 ファイル名指定で計測結果のレポートを…

JMH - fork数の指定

JMHでは、fork数というものを指定することができます。 fork数は、Benchmarkの取得(ウォームアップ開始から計測終了までの)処理の実行回数に対応します。 fork数が1であれば、1回だけベンチマークの取得を行い、fork数が2であればベンチマークの取得を2回…

JMH - 複数スレッドで実行した場合のベンチマーク

JMHでは、デフォルトではベンチマークの対象の処理を1スレッドで実行して計測を行いますが、 オプションでスレッド数を指定することができます。そうすることで複数スレッドで実行した場合のベンチ―マークを取得することができます。 スレッド数はコード上…

DHC REST Client - RESTのAPIを実行するならこのツール

昨今、アプリ間の連携のためにRESTでのAPIを公開することも多いと思います。 そのようなREST(やWebの)APIを開発する場合に、動作確認のためには、そのRESTのAPIを実行するためのクライアントが必要になります。 もちろん自前で作ることもできますが正直大…

JMH - 実行条件をアノテーションで記述する

本ブログ内で、JMHを使ってベンチマークの取得をいくつか実施してきましたが、実行条件は(mainメソッドの中で)OptionsBuilderのメソッドを実行して指定してきました。 JMHには、実行条件の指定をするためのアノテーションも用意されています。 それらアノテ…

fuse-jna - Javaで作る仮想ファイルシステム

fuse-jnaとは FUSEを用いたファイルシステムをJavaで実装可能とするためのライブラリがいくつか存在していますが、その中の一つにfuse-jnaが存在しています "fuse-jna"というライブラリのその名の通りですが、JNAと組み合わせて利用します fuse-jnaを使用し…