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

Mirage 1.3.0をリリースしました

少し前にMirageのヘビーユーザーだというAdrianがコミッタに加わってくれたのですが、彼の会社でカスタマイズした部分をOSS化するなどいろいろやっていきたいとのことだったので、自分があまりメンテできていないこともあり、organizationに移して開発を行っ…

JJUG CCC 2017 Springにプラチサスポンサーとして参加します

5月20日(土)に西新宿で開催されるJJUG CCC 2017 Spring、これまでもスポンサーとしてサポートさせていただいていましたが、今回はプラチナスポンサーとして参加させていただくことになりました。 セッションでは弊社の若者が以下の2つのセッションでお話さ…

JDBCレイヤでDBのシャーディングを行うsharding-jdbcを試してみた

DBのデータ量が増えてきた場合の対策の1つとしてユーザIDなどをキーにデータベースを分割するシャーディングと呼ばれる手法があります。これをJDBCのレイヤで実現してしまうsharding-jdbcというライブラリを見つけました。 github.com sharding-jdbcは中国の…

第十八回 #渋谷java を開催しました

1月28日(土)に弊社オフィスで第十八回 #渋谷javaを開催しました。 おや、なにか様子がおかしいですね…。謎のマークが…。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) ayato_p 「筋肉でテストを救う」 Ikuru K 「サムネイルを作る話…

第十八回 #渋谷java でZipkinとBraveの紹介をしました

最近RestyにBraveを組み込んだり、仕事でもZipkinを触っていたりするのでZipkinとBraveの概要について発表させていただきました。発表資料はこちらです。 Tracing Microservices with Zipkin from takezoe www.slideshare.net ZipkinはTwitter社が開発した分…

pac4jでGitHubのOAuth認証を使ってみる

GitHubアカウントでログインできるWebアプリケーションを作りたいなーと思っていたのですが、Javaだとpac4jというライブラリを使うとGitHubを始め、TwitterやFacebookなど様々なサービスのOAuth認証を扱うことができるようです。 github.com SpringMVCやJAX-…

Apache DrillでExcelを検索するプラグインを作った

ExcelをDBに入っているデータとジョインできたら便利なのでは?ということで作ってみました。 github.com GitHubのリリースページからダウンロードしたjarファイルをDRILL_HOME/jars/3rdpartyにコピーし、ストレージ設定でdfsに以下のフォーマットの設定を追…

第十七回 #渋谷java を開催しました

10月1日(土)に弊社オフィスで第十七回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) ayato_p 「Clojureで状態管理をするためには」 shimamoto 「doobieの紹介」 Shunsuke Tadokoro 「平成生まれの楽しい…

第十六回 #渋谷java を開催しました

7月23日(土)に弊社オフィスで第十六回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) Shunsuke Tadokoro 「JISの歴史から迫る文字コード入門」 ayato_p 「翻訳にまつわるエトセトラ」 通常枠(10分) yy_t…

Netflixのオープンソースソフトウェア

ここのところHystrixについて調べていたのですが、Netflixは他にもGitHub上で様々なOSSを公開しています。 github.com Javaのものが中心ですがPythonやGo、Cで書かれているものもあります。ライブラリ的なものからミドルウェアや運用ツールまで多岐に渡って…

マイクロサービスにレジリエンスをもたらすHystrixを試してみる

github.com HystrixはNetflixが開発しているオープンソースのJavaライブラリで、主として分散システムにおけるサービス間のやり取りをラップして以下のような機能を提供します。 スレッドプールの分離 フォールバック、サーキットブレーカー タイムアウト キ…

Apache DrillでLTSVを検索するためのプラグインを作ってみた

DrillはJSONやCSV、TSVなどはデフォルトでサポートしているのですが残念ながらLTSVはサポートしていません。もちろんLTSVはシンプルなのでJSONなどへの変換も容易なのですが、S3にバックアップしたLTSV形式のログを直接Drillから検索できると便利かなと思っ…

Apache DrillでS3にアクセスする設定をREST APIで行ってみる

Apache Drillを取り上げているブログ記事などを見るとストレージの設定はWebコンソールから行う方法が紹介されていることが多いのですが、環境構築の自動化などを考えると設定などはコマンドラインで済ませたいところです。DrillはREST APIも備えており、こ…

組み込みMySQLを使ったユニットテスト

GitBucketがMySQL、PostgreSQL対応したのでマイグレーションのテストをMySQLやPostgreSQLで実行できるようにしたいなぁと思って方法を考えています。 テスト用のDBを立てたりDockerを使ったりするのが一般的な方法なのではないかと思いますが、Javaで利用可…

Lagomのクラスタリングとデプロイ

Lagomを試してみるシリーズ第13回です。今回はクラスタリングとデプロイについてです。実際に動かしてみるのは面倒なのでここはドキュメントを読むだけに留めておきたいと思います。 クラスタリング LagomはAkka Clusterでクラスタリングが可能なようです。 …

LagomにおけるJSONのシリアライズとマイグレーション

もはや若干やけくそ感もあるLagomを試してみる第12回です。今回はLagomにおけるJSONのシリアライズ/デシリアライスを見ていきたいと思います。 ここまで見てきたようにLagomはHTTPやWebScoketなど外部とのやりとりにはJSONを使用しますが、コマンドやイベン…

LagomでPublish/Subscribeを試してみる

ちょっと間が空いてしまいましたがLagomを試してみるシリーズ第11回です。 今回はPub/Subモデルによるメッセージ送信を試してみようと思いますが、その前にLagomの1.0.0-M2がリリースされ、APIが少し変わっているようです。中でも影響が大きいのはServiceCal…

Lagomの永続化APIで実現するCQRS

Lagomを試してみるシリーズ第10回です。今回はPersistenceの続きでRead-sideについて見ていきたいと思います。 前回も書いたようにLagomのPersistence APIは一般的なDBアクセスのためのものではなく、イベントソーシング+CQRSを実現することを目的としていま…

Lagomの永続化APIで実現するイベントソーシング

Lagomを試してみるシリーズ第9回です。ドキュメントの順番でいくとユニットテストの章なんですが、ひとまず飛ばして永続化周りについて見ていきたいと思います。 Lagomの永続化APIはいわゆるORMのようにRDBMSなどのストレージへのアクセスを単純に抽象化した…

Lagomのサーキットブレーカーを試してみる

Lagomを試してみるシリーズ第8回です。今回はLagomの特徴的な機能の1つであるサーキットブレーカーを試してみました。 マイクロサービスのベストプラクティスのひとつに障害の発生したサービスをシステムから切り離すことでサービス全体を停止せずに運用する…

Lagomのサービスから別のサービスを呼び出してみる

Lagomを試してみるシリーズ第7回です。今回はサービスから別サービスの呼び出しを試してみました。少しずつリアクティブっぽい感じになってきましたね。 別のサービスを呼び出すのは簡単で、以下のようにサービスのインターフェースをDIするだけで呼び出すこ…

第十五回 #渋谷java を開催しました

4月23日(土)に弊社オフィスで第十五回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) gakuzzzz 「制約をロジックではなく型で表現する」 ayato_p 「Clojure テストの話 (Clojure 成分濃いめ)」 making 「C…

LagomでAkka Streamsを使ってWebSocketによるサービスを実装してみる

Lagomを試してみるシリーズ第6回です。今回はAkka Streamsを使ったストリーミングを試してみました。 まずは簡単な例としてレスポンスをストリームで返すサービスを定義してみます。Responseの型にAkka StreamsのSourceを指定している以外は通常のサービスと…

LagomでrestCall以外のサービス定義について調べてみた

Lagomを試してみるシリーズ第5回です。まだまだ基本的なところですが、今回はサービス呼び出しの定義方法について少し調べてみました。 これまでのサンプルではrestCallを使ってサービスを定義してきました。restCallはその名の通りRESTで呼び出すことを想定…

マルチリソース、マルチテナントに対応したDBマイグレーションツール「solidbase」1.0.0をリリースしました

Javaベースのデータベースマイグレーションツールsolidbase 1.0.0をリリースしました。 github.com これは元々GitBucketで使用するために開発したものです。GitBucketではこれまで独自に実装した簡易的なマイグレーションシステムを使用していたのですが、外…

Lagomのサービスの入出力にJSONを使用する

Lagomを試してみるシリーズ第4回です。今回はサービスの入力・出力としてJSONを使う方法を試してみました。 基本的にはサービスのRequestやResponseにJavaクラスを指定しておけば自動的にJacksonでJSONとのデシリアライズ、シリアライズを行ってくれるようで…

Lagomでイミュータブルなデータクラスを作る

Lagomを試してみるシリーズ第三回です。今回はLagomでイミュータブルなデータクラスを作る方法について見ていきたいと思います。Lagomの本質にたどり着くにはまだまだ時間がかかりそうですw Lagomのドキュメントを読んでいると以下のようなアノテーションて…

Lagomでサービス呼び出しのIdを通じてパスから複数のパラメータを受け取る

Lagomを試してみるシリーズの第2回です。前回はLagomを使用したサービスの最も簡単な実装例として、以下のようなサービスを定義しました。 public interface HelloService extends Service { ServiceCall<String, NotUsed, String> hello(); @Override default Descriptor descriptor(</string,>…

リアクティブなマイクロサービスフレームワーク「Lagom」を試してみる

Lagomとは? LagomはLightbend社(旧Typesafe社)がリリースした新しいマイクロサービス向けのフレームワークです。 www.lightbend.com 元々Scalaの開発元であったLightbend社が開発しているだけあり、PlayやAkka、sbtといったScalaベースの技術基盤上に構築…

JavaからLevelDBを使うためのライブラリ

LevelDB JNIというバインディングを使うのがいいみたい。Akka PersistenceやActiveMQ Apolloでもこれが使われています。 github.com もちろんこれはLevelDBがインストールされていないと使えませんが、LevelDBをPure Javaにポーティングしたものもあるみたい…

Apache DrillでRDBにアクセスしてみる

Apache Drillはストレージプラグインで様々なデータソースに対応しているのですが、JDBC用のストレージプラグインも用意されており、これを使用するとDrillからRDBにアクセスすることができます。 もちろん、ただ単に検索するだけならわざわざDrill経由でや…

Apache DrillでネストしたJSONを検索してみる

草薙さんの以下のエントリを参考にやってみました。 nagix.hatenablog.com データソースとなるJSONは以下のような感じだとします。 { "user": { "name": "takezoe", "mail": "takezoe@gmail.com" } } ... ちょっと面倒ですが、以下のような感じでネストした…

Apache DrillにJDBC経由で接続してみる

そこそこの分量のJSONデータを手元で検索するのにDrillを使っています。Elasticsearchなどに入れてもいいのですが、Drillにはファイルの状態で検索できること、SQLで検索できること(それなりに複雑な集計を手軽に書けたり、必要に応じて他のデータとジョイ…

第十四回 #渋谷java でProject Jigsawの話をしました

先日弊社オフィスで開催された第十四回 #渋谷javaですが、自分はProject Jigsawについて発表させていただきました。以前、社内の勉強会でJava9の新機能について紹介したことがあったのですが、その内容からJigsaw部分を抜き出し、内容を充実させたものです。…

第十四回 #渋谷java を開催しました

2月13日(土)に弊社オフィスで第十四回 #渋谷javaを開催しました。 今回は以下の皆さんに発表していただきました。 セッション枠(20分) Naoki Takezoe 「Java9とJigsawについて」 emaggame 「WildFly Swarm の開発状況について」 通常枠(10分) shimamoto…

H2のデータをダンプ・リストアする

SQLでやる方法と、H2に付属しているツールを使用する方法の2通りがあります。 H2付属のコンソールとかJDBCクライアントで接続できる環境が使えるのであればSQLでやるのが楽です。 -- ダンプ SCRIPT TO 'backup.sql' -- リストア RUNSCRIPT FROM 'backup.sql'…

JJUG CCC 2015 Fallをスポンサードさせていただきました

先日開催されたJJUG CCC 2015 Fall、弊社は今回もスポンサーという形でサポートさせていただきました。ハンズオンやハッカソンも含めると6トラック&ブースという大規模なイベントとなったようです。 弊社のスポンサーセッションでは新卒二年目の若手エンジ…

JJUG CCC 2015 Fallで聞いてきたセッションの感想

昨日開催されたJJUG CCC 2015 Fallですが、makingさん、ソラコムさん、不満買取センターさんのセッションを聴講させていただきましたので、それぞれ簡単に感想を書いておきます。 Reactive Webアプリケーション – そしてSpring 5へ Reactive Webアプリケーシ…

@tagomorisさんによるISUCON5裏話

先週の社内勉強会では@tagomorisさんにお越しいただき、ISUCON5で使われたベンチマークツールについてお話しいただきました。 資料も公開していただいています。 Tale of ISUCON and Its Bench Tools from SATOSHI TAGOMORI www.slideshare.net ISUCONで使わ…

Visual Studio CodeでMavenを実行するためのタスク定義

Visual Studio Codeを触っているのですが、タスクの設定をしておくと任意のコマンドを実行して、さらにその出力から警告やエラーを抽出できるようです。デフォルトではtscやgrunt、gulp等の設定がサポートされているようですが、試しにMaven用の設定を作って…

第十三回 #渋谷java でLTをしました

昨日弊社オフィスで開催された第十三回 #渋谷javaで久々にLTをさせていただきました。 markedj: The best of markdown processor on JVM from takezoe タイトルは「ScalaからJavaへ」でしたが、実際の内容はmarkedjの紹介ですw markedjは以前もこのブログで…

marked.jsをJavaに移植してみた

GitBucketではMarkdownの処理にpegdownを使っています。pegdownはJavaで使えるMarkdownプロセッサの中では最もまともなものだと思うのですが、GitHub Flavored Markdownとの互換性という面ではやや微妙なところがあります。 他の言語ではJavaScript用のmarke…

第十二回 #渋谷java を開催しました

8月1日(土)弊社ビズリーチのオフィスにて第十二回 #渋谷javaを開催しました。 創設者であるseri_kさんが東京を離れて北の地に旅立ったのち、弊社のメンバーが後を引き継いで開催してきた#渋谷javaですが、ついに今回からseri_kさんが主催者として復帰されま…

第十一回 #渋谷java を開催しました!

去る5月30日(土)、弊社オフィスにて第十一回 #渋谷javaを開催しました(今回は新たな試みとしておやつを用意してみましたw)。 当日の様子は以下のTogetterまとめをご覧ください。 togetter.com 発表していただいいたLTは以下の通りです。 セッション枠(2…

Gradle徹底入門の綿引さんによるGradle勉強会を開催しました

毎週金曜日に社内で行っている技術共有会ですが、今週は久々に社外のゲストとしてGradle徹底入門の著者であるデライトテクノロジーズの綿引さんをお招きして「MavenユーザのためのGradle入門」というタイトルでお話しいただきました。 (この共有会、以前は…

HiveからElasticsearchに接続してみる

仕事ではElasticsearchを使っているのですが、それ以外にGitやS3に大量のJSONがあり、これをElasticsearchを組み合わせた検索ができないものかと思い、先日1.0がリリースされたばかりのApache Drillを試しています。ただし、Drillは現時点ではElasticsearch…

Elasticsearchへの接続方式

Elasticsearchへのアクセスにはいくつかの方式があり、それぞれにメリット・デメリットがあるようです。Elasticsearchのドキュメントを参考にJavaプログラムからの接続方法とそれぞれの特徴を調べてみました。 Transport Client いわゆる通常のクライアント…

第十回 #渋谷java を開催しました!

ブログを書くまで少し時間が空いてしまいましたが、3月7日(土)弊社オフィスにて第十回 #渋谷javaを開催しました! 当日の様子は以下のTogetterまとめをご覧ください。 togetter.com 今回も@btnrougeさんの「Date and Time APIのTemporalAdjuster活用法」、…

第九回 #渋谷java を開催しました!

12月13日(土)弊社オフィスにて第九回 #渋谷javaを開催しました。 当日の様子は以下のTogetterまとめをご覧ください。 togetter.com 主催者である@seri_kさんがあろうことか盛岡の地に旅立ってしまったため、今回から元同僚である弊社社員で引き継いで開催…

MinHashでElasticsearchの検索結果から重複を分散させる

最近Elasticsearchを使っているのですが、検索結果の多様性という観点から似たようなコンテンツが並ぶのを割けたいという場合があります。こんな場合に便利なのが以下の2つのElasticsearchプラグインです。 elasticsearch-minhash elasticsearch-dynarank ど…