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

第十七回 #渋谷java でScalaのマクロの紹介をしました

最近Scalaのライブラリを作っていて自分でマクロを書く機会があったのでScalaのマクロを簡単に紹介をしてみました。発表資料はこちらです。 Macro in Scala from takezoe www.slideshare.net Lispはプログラム=データ構造なのでデータを操作する感覚でマク…

GitBucket 4.5をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.5をリリースしました。 https://github.com/takezoe/gitbucket/releases/tag/4.5 テキストエリアにもファイルのドロップが可能に イシューやWikiにファイルを添付する際、これまではテキストエリア…

Akka Typedを試してみる

MEAPが開始してから丸4年、Akka in Actionがようやく完成したそうです。 Received my first copies today, #akka in action is finally finished and rolling of the press! pic.twitter.com/nx1UmBRUwl— Ray (@RayRoestenburg) September 18, 2016 完成版の…

Scalaでコンパイル時にSQLをバリデーションするマクロを作ってみた

以前からscala-jdbcというScala用のシンプルなJDBCラッパーを作っています。 github.com このscala-jdbcにコンパイル時にSQLのバリデーションを行うためのマクロを追加してみました。 たとえば以下のように少し間違ったSQL(カラム名の後ろに余計なカンマが…

Scala関西 Summit 2016に参加します

来る10月8日(土)に大阪で開催されるScala関西 Summit 2016ですが、弊社もスポンサーとしてサポートさせていただいています。 summit.scala-kansai.org スポンサーセッションでは「Play2+SlickだけじゃないScalaのWeb/DBフレームワーク事情」という発表をさ…

OracleのDavid BuckさんによるBytecode Verification

毎週金曜日に開催している社内勉強会ですが、今週は久々の外部ゲストとしてOracleのDavid Buckさんにお越しいただきBytecode Verificationについてお話しいただきました。 Buckさんは今年もサンフランシスコで開催されるJavaOne 2016で3本のセッションに登壇…

Twitter製の大規模ソフトウェア向けビルドツール「Pants」を試してみる

PantsはTwitter社が開発した大規模ソフトウェア向けのビルドツールです。今年の5月に1.0がリリースされました。 github.com 主にPythonで書かれているようですが、Java、Scala、Python、Golangのビルドに対応しており、Thriftのコード生成やMarkdownからのド…

GitBucket 4.4をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.4をリリースしました。 https://github.com/takezoe/gitbucket/releases/tag/4.4 SQLダンプファイルのインポート これまでデータベースのダンプはXMLとSQLで行うことができましたが、インポートはX…

ThinkPad USBキーボードをちょっとだけ使いやすくする方法

PC

ThinkPad USBキーボードの現行モデルはThinkPad本体と同じくアイソレーションキーボードでパームレストがない分サイズもコンパクトです。Bluetoothモデルもあるのでタブレットと組み合わせて使うのもよいかもしれません。 レノボ・ジャパン ThinkPad トラッ…

ThinkPadキーボード(の前モデル)こそ至高のキーボード

PC

結構前に会社の人にThinkPadキーボードの前モデル(55Y9024)を譲ってもらって職場のMacBookで使っているのですが、このキーボードが非常に使いやすいです。 レノボ・ジャパン ThinkPad USB トラックポイントキーボード(日本語) 55Y9024出版社/メーカー: Len…

blocking−slickで大体Slick2と同じメソッドが使えるようになりました

先日からblocking-slickというSlick3にSlick2風のブロッキングAPIを追加するライブラリを作っています。 github.com 基本的にはQueryオブジェクトにimplicit conversionで同期実行用のメソッドを生やすという方式で実装していたのですが、更新系のメソッドが…

Slick3用のブロッキングAPIを作ってみました

github.com なぜ作ったのか? 事の発端はSlickのこのイシューです。 github.com GitBucketはServletベースということもあり、Slick3のDBIOは非同期実行のメリットが得られないのに複雑さだけが劇的に向上してしまうこと、プラグイン開発者にもモナディックな…

GitBucketプラグインを作ってみよう

GitBucketはプラグインシステムを備えており、プラグインで様々な機能を拡張することができます。このエントリではプラグイン開発の最初の一歩について説明します。内容的には以前GitBucket Newsで書いた以下の英語のエントリと同じものです。 gitbucket.git…

GitBucket 4.3をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.3をリリースしました。 https://github.com/takezoe/gitbucket/releases/tag/4.3 絵文字のサポート GitBucket 4.3と同時にgitbucket-emoji-pluginがリリースされました。このプラグインは以下の機…

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

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

Akka HTTPでJacksonを使ってJSON変換をする

Akka HTTPではspray-jsonを使用するモジュールが提供されており、これを使用することでJSONで受け取ったリクエストをオブジェクトに変換したり、戻り値として返却したオブジェクトをJSONとしてレスポンスすることができます。 takezoe.hatenablog.com が、sp…

Jekyllで未来の日付のエントリも表示する

Jekyllは以下のようにエントリの先頭にYAMLでメタデータを記述することができます。 --- layout: post title: "GitBucket 4.3 released!" date: 2016-07-30 00:00:00 image: /images/gitbucket-4.2/adminlte.png categories: gitbucket --- dateで公開日を指…

GitBucketをPostgreSQLやMySQLで動かす

GitBucketは標準では内蔵のH2という組み込みデータベースで動作しますが、4.0からはH2の代わりに外部データベースとしてPostgreSQLやMySQLを使うことができるようになっています。H2はデータの保全性に問題がありますので業務等の重要な用途にGitBucketを使…

JekyllでTwitterカード用のタグを出力する

前回紹介したjekyll-seo-tagプラグインはogp用のタグは出力してくれるのですが、twitterカード用のタグを出力するにはTwitterのユーザ名を設定しないといけないようです。 GitBucketは自分のTwitterアカウントで情報を流していますが、プロジェクトとしての…

GitHub PagesのJekyllでogpタグを出力する

GitHub Pagesのドキュメントによるとjekyll-seo-tagというプラグインが使えるみたいです。 github.com まず_config.ymlに以下の記述を追加します。 gems: - jekyll-seo-tag それから_layouts/_default.htmlなどタグを出力したい位置に{% seo %}という記述を…

GitBucket 4.2をリリースしました

GitBucketを3.x系から4.0にアップデートしていた場合に4.2にアップデートできないというバグがあることが発覚したためこれを修正した4.2.1をリリース済みです。この条件に該当する方は4.2ではなく4.2.1を使用するようにしてください(ただし、新規にGitBucke…

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

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

HystrixをScala / Playアプリケーションから使ってみる

前回はHystrixの簡単な紹介を書きました。 takezoe.hatenablog.com HystrixはJavaライブラリなのでもちろんScalaからも使うことができるのですが、そのままだと若干Scalaからは使いにくい部分もあります。今回はScala(主にPlay Framework)でHystrixを使う…

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

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

ScalaCheckでケースクラスを生成するジェネレータの作り方

先日社内勉強会でJavaでのプロパティベーステストライブラリとしてjunit-quickcheckが取り上げられていました。 今週の社内勉強会は「やる夫と学ぶプロパティベーステスト」だった。junit-quickcheckが紹介されてたんだけど確かに日本語情報少ない。ScalaChe…

Happy Hacking Keyboard Professional2を買ってみた

PC

ずっとThinkPad USBキーボードを使っていたのですが、職場の若者たち(オッサンもですが…)が皆HHKBやRealforceなどの高級キーボードを使っていて羨ましくなってきたので買ってみました。*1 PFU Happy Hacking Keyboard Professional2 墨 英語配列 静電容量…

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

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

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

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

JekyllにDisqusのコメントフォームをつけてみる

GitHub PagesのJekyllにDisqusを使ったコメントフォームがついてるブログを見かけていいなーと思ったのでGitBucket Newsにもつけてみました。 disqus.com 使い方は簡単でDisqusにユーザ登録後コメントフォームをつけたいサイトを登録し、各種ブログプラット…

GitBucket 4.1をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 4.1をリリースしました。 https://github.com/takezoe/gitbucket/releases/tag/4.1 今回はUIの崩れなど細かい部分の修正がメインですが、大きめの変更として以下の3点があります。 SSHの接続をgitユ…

Akka HTTPでJSONを使ってみる

Akka HTTPの入門についてはセプテーニさんのこちらの記事がわかりやすいです。 labs.septeni.co.jp APIサーバにAkka HTTPを使ってみようかなぁと思っているので試しにリクエスト、レスポンスにJSONを使うのをやってみました。spray-jsonを使うモジュールが用…

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

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

IntelliJのScaladocのインデントの設定

以前書いたIntelliJのScaladocのインデント設定ですが… takezoe.hatenablog.com IntelliJとScalaプラグインをバージョンアップしたら場所が変わっていました。以前の設定も引き継いでくれないみたいです。 「ScalaDoc」タブの「Use scaladoc indent for lead…

Scala用のシンプルなJDBCラッパーを作ってみた

以前からちょっとしたものを作るときに便利なIO関連のユーティリティをまとめたScalaライブラリを作っていたのですが、最近ScalaのIOライブラリはbetter-filesがよさげなのでこちらに乗り換えるのがいいかなと思ったところ、自作ライブラリにあるJDBC周りの…

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…

Scala Days 2016 NewYork 3日目

Scala Days3日目です。体力の限界を感じておりまさに瀕死です。今日こそはサイバーエージェントさんより先にブログを公開するんだと頑張って書こうと思っていたのですが意識を失ってしまいました。 Spark 2.0 今日のキーノートはDatabricks社のCTOであるMate…

Scala Days 2016 NewYork 2日目

ニューヨーク寒いです。今日もサイバーエージェントさんに負けずに参加したセッションを紹介したいと思います。 Introducing the Scala Center 今日はHeatherさんのキーノートから始まりました。 Scala CenterはScalaの教育コンテンツの開発とオープンソース…

Scala Days 2016 NewYork 1日目

ニューヨークへの12時間のフライトに耐えてScala Days 2016にやって来ました! 昨年のサンフランシスコはのどかな雰囲気でしたが、ニューヨークの都会感がすごいです。 初日は昨年と同じく夕方からOdersky先生のキーノートで開始しました。Scalaの今後の展望…

Scalaのコンパクトな便利ライブラリ「Hamsters」を調べてみた

最近HamstersっていうScalaライブラリを発見しました。関数型っぽいコンテナや機能を提供するものなのですが、非常にコンパクトでなおかつ関数型プログラミングに慣れていなくても簡単に使えるというものです。 github.com 使い方はREADMEを見ればだいたいわ…

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

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

サーキットブレーカー付きの非同期RESTクライアントを作ってみた

Lagomを触っていて、サーキットブレーカー付きのHTTPクライアントがあるといろんなフレームワークと組み合わせて使えて便利かも、と思ったのでScala用のものを作ってみました。 github.com RESTクライアントとしての基本的な使い方はこんな感じ。 import res…

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

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

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

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

SHURE SE215購入(二台目)

イヤホンはずっとSHUREのSE215という機種を何度かイヤーチップを交換しつつかれこれ4~5年愛用していたのですが、先日どこかで落としてしまったようなので新しいイヤホンを買いに行ってきました。久々の買い替えなので新しいものにしようかなぁとも思ったの…

GitBucket 3.14と4.0をリリースしました

Scalaで実装されたオープンソースのGitサーバ、GitBucket 3.14および4.0をリリースしました。 https://github.com/takezoe/gitbucket/releases/tag/3.14 https://github.com/takezoe/gitbucket/releases/tag/4.0 GitBucket 3.14は外部データベースのサポート…

Programming in Scala: A Comprehensive Step-by-Step Guide, Third Edition (English Edition)

日本ではいわゆる「コップ本」として有名なScalaのバイブル「Programming in Scala」の第三版が発売されました。 Programming in Scala: A Comprehensive Step-by-Step Guide, Third Edition (English Edition)作者: Martin Odersky,Lex Spoon,Bill Venners…

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

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

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

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