覚えたら書く

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

Kotlinの特徴

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

HR Tech x 機械学習 x AWS(Machine Learning)活用事例紹介に行ってきた

HR Tech x 機械学習 x AWS(Machine Learning)活用事例紹介 に参加してきました。 以下自分用のメモです。 概要 AWS Machine Learningを使用した機械学習を中心としたAIの導入事例を紹介 日時: 2017/03/13(木)19:30〜 場所: 株式会社ビズリーチ HRMOSでのAI…

PostgreSQL - DBのデータをCSVに出力したい

DBのデータをCSV出力したいという場面は多々あると思います。 PostgreSQLにpsqlで接続して特定のコマンドを実行すればCSVファイルへの出力ができます。 テーブルの全データをCSVに出力する 単純に特定のテーブルの全データをCSV出力する場合は以下のコマンド…

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

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

Linuxでよくお世話になるスペシャルファイルに関するメモ

開発やテストの際などによくお世話になるLinuxのスペシャルファイル(の中の疑似デバイス)に関するメモです /dev/null 書かれたデータは捨てられる。 null スペシャルファイルを読むと常に end of file が返される。 /dev/zero 書かれたデータは捨てられる…

KotlinでHello World

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

「Deep Learning×画像解析」ライトニングトークイベント

「Deep Learning×画像解析」ライトニングトークイベント by LP-tech に参加してきました。 以下自分用のメモです。 概要 画像解析技術に特化した情報を発信している専門サイトLP-techが主催する、Deep Learning×画像解析に関するLTイベント。 日時: 2017/02…

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つのハンドラでハンドリグすることが可能となります。 以下実…

TensorFlow User Group #3 行ってきたよ

TensorFlow User Group #3に行ってきました。 今回は開催回数が奇数回だったので、TensorFlowの利用事例の発表がメインでした。 以下自分用のメモです 概要 場所: Google ジャパン 日時: 2017/2/22 19:00~ Retty流 「2200万ユーザさんを支える機械学習基…

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>…

アプリ実行中に条件に合ったクラスを抽出する

前回のエントリでFastClasspathScannerを利用して特定のアノテーションが付与されたクラスを抽出するサンプルを実行しました。 FastClasspathScannerでは、他にも色々な条件でクラス等を抽出できます。いくつかサンプルを試してみます インターフェースクラ…

特定のアノテーションが付与されたクラスを実行時に抽出したい

Javaアプリケーションの処理内で、特定のパッケージ配下にあるクラスの中で、指定の条件を満たすものを抽出したい場合があります。 例えば、アプリ実行中に特定のアノテーションが付与されたクラスを探したい 等がこれに該当します。 このような場合、FastCl…

Guice - Listに名前を付けて@NamedでInjectionしたい

Guiceを使っている場合に@NamedでListに名前を付けて依存関係を解決するサンプルです。 今回のサンプルではList<String>の値に sample.list という名前を付けてInjection出来るようにします。 依存関係を記述 ■ListがInjectionされるクラス コンストラクタで@Named </string>…

GitHubでJavaの流行ってそうなライブラリを探す

私が、Javaの有用そうだったり流行ってそうなライブラリをGitHubで探す時の手順です。 (完全に個人的なやり方です) ■Trendingを確認する Trending Java repositories を確認します。 ページにアクセスすると、以下のような内容が表示されます。ここに新し…

size=1のListのメモリサイズってどの程度

先日、Arrays#asListで生成されるArrayListについてのエントリを書きました。 そのエントリ書いた後に、ふとメモリサイズの違いもあるかなと思ってJOLで測定してみました。 対象 生成するList 今回は条件を単純化して、生成するListを以下内容にしています。…

Gitでタグ付けたり消したり

コマンドラインでGitのタグを付けたり削除したりする方法 タグを付ける ローカルでタグを付けて、その変更をリモートにpushするという流れになります git {TAGNAME} git push origin {TAGNAME} リモートのタグを削除する ローカルでタグを削除して、その変更…

Arrays#asListで生成されるList

JavaでListをリテラルに記述して生成する方法が基本的にないので、文字列List等を作る際には基本的にArrays#asListを利用することが多いです。 ただし、Arrays#asListによってに生成されるクラスはArrayListという名前ですが、 いわゆるjava.util.ArrayList…

日時オブジェクトのサイズをJOLで確認してみる

以前、JMHで現在日時取得のベンチマークを取得してみました。 今回は色々な日時オブジェクトのメモリサイズをJOLで確認してみます 対象 今回の測定対象とするクラスは以下です java.util.Date java.util.Calendar java.time.LocalDateTime java.time.LocalDa…

Guava 21.0 がリリースされてた

Guavaの21.0がいつの間にかリリースされてました。 Release21 · google/guava Wiki · GitHub 今回からJava8必須になったようです。 色々変更があったようなので簡単に(ごく一部を)試してみます。 準備 pom.xmlに以下を追記します <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version></version></dependency>…

ND4J - Scalaで行列の演算

前回のエントリでND4Jを利用して、Javaプログラムでの行列の演算を試しました 今回は行列の演算をScalaから実行してみます。 準備 開発はsbtを用います。 build.sbtに以下を追記します libraryDependencies ++= Seq( "org.nd4j" % "nd4j-native-platform" % …

PostgreSQLでSQLの実行時間を計測する

psqlで以下コマンドを実行することで各SQLの実行時間を計測できます \timing 実行すると Timing is on. と出力されます SAMPLEDB=> \timing Timing is on. コマンドを実行した後、SQLを発行すると以下のように実行時間が出力されます SAMPLEDB=> select coun…

「<インターネット>の次に来るもの 未来を決める12の法則」

「<インターネット>の次に来るもの 未来を決める12の法則」の気になった部分の抜粋です。 すごく面白い本です。正直言ってこのブログエントリ見ても何のこっちゃでしかないので、実際に書籍を読まれることをお勧めします。 〈インターネット〉の次に来るもの…

PostgreSQLでindex作ったり削除したり

PostgreSQLでのindexの作成方法や削除方法など indexの作成 以下の構文でできます CREATE INDEX {index名} ON {Table名} ({Column名}); これにより作成されるindexの種類はbtreeになります。 ■実行例 SAMPLEDB=> CREATE INDEX sampletbl1_column1_idx ON sam…

Linux - bashワンライナーループ

bashのワンライナーループは何だかんだでよく使うので、ここからコピペする目的のためメモです。 基本的に以下で実行できる for i in {1..<end>} ; do <something command> ; done 10回コマンドを実行するなら以下 for i in {1..10} ; do <something command> ; done 例えば10個のディレクトリ(dir1~di</something></something></end>…

ND4J - 行列の演算

前回のエントリでND4Jを利用して、ベクトルの演算を試しました 今回は行列の演算を試してみます。 各種演算 行列の和 行列と行列の足し算です。 ■サンプルコード import org.nd4j.linalg.api.ndarray.INDArray; import org.nd4j.linalg.factory.Nd4j; INDArr…

ND4J - ベクトルの演算

前回のエントリでND4Jの利用準備をして、ベクトルと行列の定義だけしてみました 今回はベクトルの演算を試してみます。 各種演算 ベクトルの和 ベクトルとベクトルの足し算です。 ■サンプルコード import org.nd4j.linalg.api.ndarray.INDArray; import org.…

ND4J - Javaでベクトルとか行列を定義する

Javaでディープラーニングを試そうと思った場合に、名前があがっているライブラリはDeeplearning4J一択な気がします、現状は。 そのDeeplearning4Jの内部で使用されているのが、ND4J(N-Dimensional Arrays for Java)です。 ND4Jは、行列等のN次元配列を簡単…

Javaで仮想ファイルシステムを作る時に考慮すべき点

以前のエントリで仮想ファイルシステムを構築するためのfuseと、fuseからJavaにブリッジするためのfuse-jnaについて紹介しました。 実際にfuseとJavaを使って仮想ファイルシステムを構築する際に気にすべきポイントや懸念点があります。 それについてメモし…

Scala - IntelliJ IDEA上でsbtを用いて実行可能jarの生成

前回のエントリでIntelliJ IDEAでsbtを利用したScalaの開発を行う環境を整えました。 その際には、sbtのpackageを実行してjarの生成を行いました。ただし、生成されるjarはFat Jarではありません(依存する各種jarは含んでいない)。 本エントリでは、sbt-as…

1.01の法則

今年1年、それなりに努力したつもりですが、まだまだ努力しないといけないなと感じており 2017年はさらに努力を積み重ねていきます。 とか考えていた時に、ふと頭に浮かんだのが 1.01と0.99の法則 です。 1.01と0.99の法則とは 1.01と0.99の法則とは、継続…

Scala - IntelliJ IDEAでsbtによる開発を行う

IntelliJ IDEA上で、sbtによる開発を行うための手順です。 sbtはSimple Build Toolnの略で、Scalaで開発を行う際の標準的なビルドツールのようです(Mavenに近い存在なんですかね) IntelliJ IDEA起動後に以下の手順で操作を行います。 SBT Pluginのインスト…

Scala - IntelliJ IDEAでHello World

前回、ScalaのSDKをインストールしてREPLでHello Worldをやりました。 今回はIntelliJ IDEAでHello Worldを実行してみます。 IntelliJ IDEAを起動してから以下実施します。(Java(JDK)に関する設定についての説明は割愛しています) Scalaのプロジェクト作成…

Scala - SDKをインストールしてREPLでHello World

Windows環境下でScala開発(の勉強)をしたいので、とりあえず、まずはSDKをインストールしてみます。 その後、REPLでHello Worldやってみます。 インストール Javaのインストール ScalaはJVM上で動作するわけなので、Javaをとりあえずインストールしましょ…

MBassador - Handlerの優先順位を制御する

MBassadorで同じ型の引数を受け取るHandlerを複数定義した場合、発行したメッセージはすべてのハンドラに到着します。 その際に、メッセージがHandlerに到着する順序は不定です。 が、Handlerにおいてpriorityを指定することで、メッセージの到着順序を制御…

MBassador - メッセージをフィルタリングする

先日のエントリで、MBassadorでメッセージの型によって反応するハンドラが変わるサンプルを示しました。 MBassadorでは、同じ型のメッセージでもメッセージ内容をフィルタリングして受け取るハンドラを切り替えることができます。 概要 フィルタリングは大ま…

MBassador - Handlerの引数の型に合わせてメッセージが届く

以前のエントリでJava用の軽量なEventBusとして、MBassadorを紹介しました。 その際にはメッセージを受け取るハンドラを一つだけ定義しましたが、今回のサンプルでは複数のハンドラを定義してみます ■Handlerの定義 ハンドラとなるメソッドを3つ用意しまし…

HealthTech サービス リンク集

医療関連のITサービスやシステム,プロダクトを提供しているヘルステック分野の会社で個人的に気になったものをメモしておくためのリンク集です。(日々増減します) エムスリー株式会社 企業HP: https://corporate.m3.com/ m3.com 医療従事者専用サイト リー…

人工知能エンジニアMeetUp! #4 ~AI医療画像診断支援&RSNA報告会~

人工知能エンジニアMeetUp! #4 に参加してきました。 以下自分用のメモ 概要 主催: エルピクセル株式会社 場所: 東京大学伊藤国際学術研究センターギャラリー1 開催日: 2016/12/22 今回の参加者 医師 放射線技師 PACS関連エンジニア Web系エンジニア その…

IntelliJ IDEA - Tool Buttonを常に表示しておく

IntelliJ IDEAのツールボタン(以下画面の赤枠で囲んだところのボタン)を常に表示しておきたい時があります。 その場合は、「View」を選択し、その中の「Tool Buttons」をクリックしてチェックが入った状態にします。 これで常に表示された状態となります。…

MBassador - 軽量なhigh-performance Event Bus

JavaでPublish/Subscribe Patternをベースにした軽量なEventBusのライブラリとしてMBassadorというものが存在しています。 今回のサンプルではとりあえずHelloWorld的なことをやります。 準備 pom.xmlに以下の依存関係を追加します。本エントリではversionに…

Quartz - スレッド数の制御

Quartzで定期処理を行う場合、デフォルトでは10スレッドがpoolされて、そのスレッドを使って処理されます。 場合によっては、10スレッドもプールされている必要ないよ。という場合もあると思います。 その場合は以下の設定でスレッド数を変更することができ…

Quartz - DIを使ってJobにInjectionする

QuartzでJobの定義を行うことで簡単に定期処理を記述することができますが、 デフォルトではJobにメンバ(インスタンス変数)を持たせて、それを外側からセットするのは単純にはできません。 しかし以下のようにすることで外部から必要なインスタンスをDIコ…

Quartz - Jobを重複して実行しないようにする

Javaで簡単に定期処理を行うためのライブラリであるQuartzの紹介エントリを書きました。 その際に、100ミリ秒間隔で処理を行う例を書きましたが、実は対象のジョブが実行開始して100ミリ秒以内に処理をおえられない場合は、同一のジョブがさらに実行される状…

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日目の記事です。 ※追記: Javaslangは、名称がVavrに変更になりました Javaで関数型プログラミングを行うためのライブラリとしてJavaslangが存在しています。 Javaslangは、Scalaの長所をJava言語にできる限り導入することを…

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

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

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

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