かまたま日記3

プログラミングメイン、たまに日常

Java

embulk-executor-remoteserver 0.4.0 リリース

github.com このバージョンより、Embulk clientとserver間でTLSでの接続ができるようになりました。 設定方法 (クライアント) まず、use_tls オプションをtrueに設定してください。サーバ側が(クライアントにとって)既知のCA証明書でサインされた証明書を使…

embulk-executor-remoteserverを作った #Embulk

Embulkのexecutor pluginの仕組みとネットワークプログラミングを学びたかったので、勉強がてらこのようなプラグインを作ってみました。 github.com できること Embulkのタスクの実行を別に立てた専用のサーバ(以下Embulkサーバと呼びます)上で実行できる 複…

Lambdaオブジェクトの型パラメータを取るのは難しい

TL;DR ラムダオブジェクトの型パラメータを取得するスマートな方法は今の所見つかっていない もし基盤プログラムでそういうことをしたい場合は、ラムダを禁止して、匿名クラスを使う いい方法があったら教えてください 本文 Javaで基盤プログラム的なのを作…

JUnit 5 入門

そろそろ使ってみるかということで入門してみました。 JUnit Jupiter こちらにも書かれてますが、JUnit 5は複数のサブプロジェクトからなり、JUnit 5でテストを書いたり拡張機能を書くためのクラスはJUnit Jupiterというプロジェクトにあります。なので、テ…

JavaでRubyのeach_sliceがしたい

each_sliceというのは配列を指定した要素数の配列に分ける処理です。リストの中身をn件ごとに処理するときに便利です。 Javaには同様の処理が(たぶん)標準APIには無いので、こんな感じで行けそうです。 import java.util.Arrays; import java.util.List; imp…

Parallel Streamの並列数を調整する

Streamの parallel メソッドを呼ぶとストリームの処理を並列に実行できますが、これは内部的には前回紹介したForkJoinPoolが使われています。ForkJoinPoolは内部でcommon poolと呼ばれる共通プールを持っており、明示的にPoolを指定しない ForkJoinTask#invo…

ForkJoinPoolについて

ForkJoinPoolはJava 7から導入された新しいExecutorのフレームワークです。 旧来のExecutorと違うのは、タスクのスケジュールのアルゴリズムとして、work-stealingを採用していることです。これは再帰処理やタスクの中で更に細かな子タスクが生成されるよう…

JJUG ナイトセミナーKotlin勉強会に参加してきた

jjug.doorkeeper.jp EmbulkのプラグインをKotlinで書き直したり最近自分の中で激アツ言語のKotlinの勉強会が開かれると言うので早速参加してきました。サイバーエージェントのサーバサイドの事例だったりSpringのKotlin対応だったりKotlinの波が来ているのを…

EmbulkのプラグインをKotlinで書く

embulk-input-remoteをKotlinで書き直したv0.3.0をリリースしました。 GitHub 最初に書き直した時のPR RubyGems Kotlinは4年ほど前に会社のレポートでちょっと調べたままで知識が止まってましたが、最近はAndroidやサーバサイドの事例も多く出てきたので勉強…

JJUG ナイトセミナー 「GS Collections 道場」に行って来た

Goldman Sachsの作成したJavaのコレクションライブラリのGS Collectionsのハンズオンに参加して来ました。 【東京】JJUG ナイトセミナー 「GS Collections 道場」jjug.doorkeeper.jp Java8でStreamが追加されて導入する理由も少なくなったかなと思ってました…

JJUG CCC 2015 Springに参加した

お久しぶりです。最近は技術TipsはQiitaに書く事が多いので、ブログはご無沙汰でした。 最近社外勉強会参加してないなーと思い、ちょうど朝にTwitterで開催されていることを知りw、久しぶり*1に参加てみました。 結果めちゃくちゃ刺激受けました。やっぱりこ…

SpringAOP(JDK Dynamic Proxy)のDI仕様にハマった

SpringAOPのプロキシ化の仕組みには JDK dynamic proxyとCGLIBという二つの仕組みがあるんですが(デフォルトはJDK dynamic proxy) JDK dynamic proxyでProxy化されたbeanのインスタンスを直接実装クラス指定でAutowired出来ない仕様らしいです。※この辺が参…

JMeterメモ

絶賛負荷試験で使っているので、分かったことをメモ スレッドグループについて 「Rapm-up期間(s)」の間に「スレッド数」分のスレッドを作って各スレッドが「ループ回数」分ループする 例えばRamp-up期間600、スレッド数60、ループ回数10だとすると、10分の間…

Javaの数値は8進数のリテラルで書ける

「0x1234」的に16進数で書けるのは知ってたのですが「0」だけを頭につけると8進数になるのは知らなかったので。 public class OctalInteger { public static void main(String[] args) { System.out.println(0001); // 1 System.out.println(0010); // 8 Sys…

SpringAOPが適用されたbeanを使ったメタプログラミングでハマった件

※注意 以下の話はSpringAOP3.1.1で確認しています。SpringAOPで処理が挟み込まれたbeanは実体がProxyクラスなので、beanを使ってメタプログラミングをしたい場合、ちょっと困ることがありました。 困ること例 例えばCommandパターンを利用した以下のようなCo…

Intellij IDEAで依存関係のあるモジュールがあるプロジェクトをリンクさせる

開発中に例えばcoreロジックのモジュールとwebモジュールを分けて開発しているときに webモジュールが依存しているcoreモジュールをローカルのプロジェクトに向けたいときがあるかと思います。そんなときの方法をメモっておきます。 (もっと簡単な方法があ…

コンシステント・ハッシュ法を学びつつ分散キャッシュを実装してみる

知らないなんて言えないNoSQLまとめ(1):KVS系NoSQLのまとめ(Hibari、Dynamo、Voldemort、Riak編) (2/4) - @IT上記の記事を読んでいて「コンシステント・ハッシング」なる初見の単語を見て、調べてみました。 コンシステントハッシュ法 - Wikipedia Con…

ArrayListとLinkedListのパフォーマンスチェック

Listの2大実装であるArrayListとLinkedList。 その昔どのような用途で使うのがいいかを調べましたが、実際のパフォーマンスはどうなのかを調べてみました。 調査方法 二つのListに対して以下の順番で処理をしていきます。 順番 処理名 処理内容 1 addSequenc…

副作用が発生しないクラスを作る

Javaでは基本データ型とString以外のオブジェクトはすべて参照渡しされるため、あるオブジェクトのインスタンスが複数のオブジェクトで参照されている場合、予想しないところで参照オブジェクトの書き換わりが発生し、バグが発生する可能性があります。Clone…

(続)Setの展開はどれが一番早い?

Setの展開はどれが一番早い? - かまたま日記2前に出した結論は普通にiteratorかforeachだったのですが、本日ご指摘を受けまして調べなおしてみました。 嘘こきました、普通にめっちゃ遅かったです。。 RT @kamatama_41: 拡張forループって前調べたとき普通…

コンストラクタでメソッドを呼び出す場合の注意

レガシーコード改善ガイドを読んでいて知ったのですが、C++はコンストラクタ内のメソッドのオーバーライドが禁止されているようです。レガシーコード改善ガイド (Object Oriented SELECTION)作者: マイケル・C・フェザーズ,ウルシステムズ株式会社,平澤章,越…

Enumメモ

enumのvalueOfって存在しない文字列が来ると例外が発生するんですね。 nullが返ってくるのかと思ってました。 入力値のチェックが必要ってことか。。。*1 *1:当たり前

Class#getInterfaces() の罠

Class#getInterfaces()は自分のクラスが実装している インターフェースしか検出してくれません。スーパークラスまで遡って調べたい場合はjakarta commonsのClassUtils#getAllInterfaces、もしくはspringframeworkを使っている方はcommonsのClassUtilsを拡張…

Setの展開はどれが一番早い?

追記 (続)Setの展開はどれが一番早い? - かまたま日記2 再調査をしたところ結果が変わっています。 - ってことで調査してみました。 toArray()で配列に変換してから展開 for-eachで展開 iteratorを使って展開 Listに変換してから展開 import java.util.A…

ArrayListとLinkedListの違い

今まではArrayListしか使ってこなかったのですが、 用途によって使い分けられるようになれなければ、と思いました。 ArrayList 要素を配列で保持している 配列がメモリ上でインデックス化されている インデックスの修正、コピーに対するコストが要素数に比例…

Google App Engine for Javaでアプリケーションを作ろう その2

時間が空いてしまいましたが、本日は3章のクラウド俳句部を作成しました。やったことは GoolgeAppEngineのXMPPを利用したBOTの作成 です。 http://cloudhaiku-by-kamatama.appspot.com/このアプリの改良ポイント 使える単語が増えるようにする インターネッ…

Google App Engine for Javaでアプリケーションを作ろう その1

Webアプリケーションを作ることを思い立ったので、本を買って作ってみました。作ればわかる!Google App Engine for Javaプログラミング作者: 中垣健志出版社/メーカー: 翔泳社発売日: 2011/04/23メディア: 大型本購入: 3人 クリック: 104回この商品を含むブ…

JMockでテストをする

現在業務でJMockを使ったテストを行おうとしているため、JMockの勉強中です。最初は以下のページ jMockを使ってみる を参考にテストコードを書いていたのですが 拡張していくうちにエラーが出てきてしまい嵌ってしまったためその点をメモ 引数の比較 JMockで…

天気情報を読み込む その3

天気情報を読み込む - かまたま日記2 天気情報を読み込む その2 - かまたま日記2前回の追記でWeatherFormatterがエラーになった件ですが、やはりライブラリーが無かっただけのようでした。 結局サンプルソースを動かすのに必要だったライブラリーは以下に…

天気情報を読み込む その2

前回の続きです。 天気情報を読み込む - かまたま日記2いろいろ調べているうちに英語ですが、自分のやりたいことをやっているサンプルサイトを発見したため、そちらでYahoo! Weatherのデータを取得する処理を使ってみました。 Maven by Example - 4.6. Simp…