Scala

GitBucketに見る長期的なメンテナンスの必要なScalaアプリケーションにおいてScalaのバージョンアップのために留意しておくべきこと

Scalaのバージョンアップはなぜ大変なのか? GitBucketはもうかれこれ5年近く開発を継続しており、Scalaのメジャーバージョンアップも何度か経験してきました。ScalaのバージョンアップはJavaと比べるとかなり苦労することが多いのですが、それはScalaのバー…

akka-http-sessionによるセッション管理

Akka HTTPはプリミティブなHTTPツールキットであり、標準ではセッション管理の機能を持っていません。Akka HTTPにセッション管理機能を追加するためのライブラリとしてSoftwareMill社が開発しているakka-http-sessionというものがあります。 github.com この…

GitBucketで使っているSlick用のちょっとした便利機能

GitBucketではずっとSlickを使っているのですが、クエリを簡単に記述するためにちょっとした便利機能を追加しています。 1つめはこんな感じのエクストラクタ。以前吉田さんにTwitterかなにかで教えてもらったもの。 object ~ { def unapply[A, B](t: (A, B))…

スケーラブルで冗長性のあるGitサーバをどう作るか?

GitBucketでの長年の課題の1つがGitリポジトリのスケールアウトと冗長化でした。Gitリポジトリを格納するストレージに分散ファイルシステムを使うというのは1つの解決策になりますが、分散ファイルシステムの運用はなかなか大変です。もっと手軽に使い始めて…

Scala向けの高速ビルドツールBloopについて

少し前にScala CenterからBloopというビルドツールがアナウンスされました。 github.com 実際に動かしてみたわけではないのですが、READMEやソースコードなどからどのようなものかは大体掴めるので簡単にまとめておきます。興味のある方は是非試してみて欲し…

教養としてのScala勉強会に参加しました

会社の若者たちがScalaの勉強会を開催していたので私もお呼ばれして参加してきました。 d-cube.connpass.com 私は「頑張りすぎないScala」という発表をさせていただきました。 頑張りすぎないScala from takezoe www.slideshare.net これはScala関西で発表…

Scalaで型クラスをメタプログラミングできるライブラリMagnoliaを使ってみる

MagnoliaはScala界隈ではおなじみのJon Prettyさん作のライブラリで、簡単に言うとケースクラスに対する型クラスのインスタンスを生成するためのマクロを簡単に実装できるライブラリです。Play-JSONのReads、Writes、Formatなどのマクロなどを簡単に作れるも…

Scala eXchange 2017に参加してきました

ロンドンで開催されたScala eXchange 2017でGitBucketのLTをさせていただきました。スライドは以下になります(口頭で話した部分を付け足すなどちょっと修正してあります)。今回もいろいろ反省が多く、修行しなくては…という感じでした。 GitBucket: Git Ce…

Apache PredictionIOのインストール方法(バイナリディストリビューション版)

Apache PredictionIOのハウツーについては以前以下の記事でインストール方法からテンプレートを使ったレコメンドAPIのデプロイまでを紹介しました。 takezoe.hatenablog.com 当時のPredictionIOはインストールするにはソースからビルドするべしというかなり…

GitHubのスター数で見るScalaのDBアクセスライブラリ

吉田さんがこういう記事を書いていたので真似してデータベースアクセスライブラリ版を書いてみました。 xuwei-k.hatenablog.com 2009年からのグラフですが、トップ5のスター数の推移はこんな感じ。 slick/slick ★1930 github.com 相変わらずの一番人気。この…

ScalaのシンプルなテスティングライブラリMinitestを使ってみる

Twitterで以下の記事を見てMonixの開発用に作られたというMinitestというテスティングライブラリの存在を知りました。 alexn.org GitHubのリポジトリはこちらです。 github.com ScalaのテスティングライブラリというとScalaTestとSpecs2が双璧ですが、Minite…

Scalatra 2.6.0をリリースしました

Scala用のSinatraライクなWebフレームワークScalatraの最新バージョン2.6.0をリリースしました。 github.com 今回は新しいバリデーションフレームワークとしてscalatra-formsが追加されました。これは元々GitBucketで使用していたものをScalatra本体の1モジ…

次期Scalatraのバックエンドとしてのhttp4s

Scalatraの次期バックエンドをhttp4sにしようという計画は数年前からありつつ中々進んでいなかったのですが(ブランチに途中まで試みたと思われる残骸があるのですが、そもそもScalatraの開発自体が停滞しており絶賛放置されていました)、そろそろやってみ…

ScalaIO 2017に参加してきました

11月2日、3日にフランスのリヨンで開催されたScalaIO 2017にスピーカーとして参加してきました。このエントリでは参加したセッションの中から印象に残ったものを紹介したいと思います。 Compiling like a boss! Scalaで分散コンパイルによるコンパイル速度の…

Akka HTTPでWebJarsとTwirlを使う

仕事でちょっとしたツール(Webアプリ)を作るのに試しにAkka HTTPを使ってみています。Akka HTTPでJSONを使う方法については以前このブログでも紹介しましたが、 takezoe.hatenablog.com 今回はいわゆるHTMLを返すシンプルな作りの管理ツールなのでJavaScri…

PredictionIOがApache Software Foundationのトップレベルプロジェクトになりました!

弊社のメンバーもコミッタとして開発に参加しているApache PredictionIOですが、このたびめでたくIncubatorプロジェクトを卒業してトップレベルプロジェクトに昇格することができました。ASFからのリリースには弊社のチーフサイエンティストである@shinsuke_…

第二十回 #渋谷java でElasticsearch + Akka Streamsの話をしました

shibuya-java.connpass.com 渋谷javaもいつの間にか二十回、今回は久しぶりに蓮沼さんや小宮さんにも発表していただきました。 当日の様子は以下のTogetterまとめをご覧ください。 togetter.com emegさんが紹介されていたActiveMQ Artemisは、後でお話を聞い…

Akka Streams用のElasticsearchコネクタがAlpakkaにマージされました

以前から作っていたAkka Streams用のElasticsearchコネクタですが、Alpakkaにもプルリクエストを出していたのですがレビュー途中でずっと放置されてしまっていました。 takezoe.hatenablog.com 最近になって書き込みのリトライ機能などを追加したのでAlpakka…

Scala関西Summit 2017に参加しました

9月9日(土)大阪で開催されたScala関西Summit 2017に参加しました。GitBucketもブロンズスポンサーとしてサポートさせていただきました。 また、個人でも朝一のセッションで「Non-Functional Programming in Scala」というお話しをさせていただきました。日…

Scala関西Summit 2017で「Non-Functional Programming in Scala」という話をします

今週土曜日に大阪で開催されるScala関西Summit 2017、GitBucketがスポンサーをさせていただいているのですが、スピーカーとしても「Non-Functional Programming in Scala」というタイトルでお話しさせていただきます。 前職から足かけ8年ほどScalaに取り組ん…

Scala用のタイプセーフなSQLビルダtranquil 0.0.3をリリースしました

github.com 以前から少しずつ進めていたtranquilですが、APIもそれなりに落ち着いてきたので久しぶりにバージョンアップしてみました。ちなみに以前のものはこんな感じでした。 takezoe.hatenablog.com テーブル定義は以下のような感じで随分シンプルに定義…

sbtとpecoでテンプレートを選択してプロジェクトを作成する

sbtではsbt new playframework/play-scala-seed.g8などのようにしてgiter8テンプレートを指定してプロジェクトを作成することができます。 しかし、プロジェクトを作るたびにテンプレートのリポジトリ名を調べるのも面倒です。そこで、giter8のWikiにまとめ…

Scala福岡 2017でApache PredictionIOの紹介をしました

7月29日(土)に福岡のヌーラボさんオフィスで開催されたScala福岡2017に参加しました。 scala.connpass.com セッションではApache PredictionIOの紹介と、PredictionIOやelasticsearch-hadoopなどのOSSでScala警察として活動してきた中で見かけたScala的にい…

MarkdownベースのドキュメンテーションツールParadoxを使ってみた

最近AkkaやAlpakkaなどのドキュメントで使われているLightbend製のParadoxというドキュメンテーションツールを試してみました。 *1 github.com 使い方はドキュメントを見ればわかると思いますが、要点だけまとめておきます。 はじめの一歩 Paradoxはsbtプラ…

PredictionIO Meetup #2 に参加してきました

先日弊社のオフィスでPredictionIO Meetup #2が開催されるとのことだったので見物に行ってきました。 d-cube.connpass.com コミッタの菅谷さんの発表資料が公開されていたので貼っておきます。 PythonはPySparkとPy4Jがとにかくつらいという話でした。今検討…

Play 2.6の新機能

Play 2.6のドキュメントにある「What’s new in Play 2.6」からScalaに関する部分をざっと日本語にしてみました。 https://www.playframework.com/documentation/2.6.x/Highlights26 細かい部分はマイグレーションガイドも見ないとダメそうですね。こちらはか…

Akka Streams用のElasticsearchコネクタを作ってみた

github.com 元々はAlpakkaにプルリクしていたのですが、取り込んでもらうのに時間がかかりそう or 取り込んでもらえるかわからない感じなので自分で使う用に別リポジトリで単独のライブラリとして公開しました。Maven Centralにもpublishしてあります。 Elas…

Scalatra 2.5.1をリリースしました

Scala用のSinatraライクなWebフレームワークScalatraの最新バージョン2.5.1をリリースしました。 github.com 今回は主に2.5.0で入ったSwagger 2.0サポートの改善やバグ修正がメインとなっています。特に@jb08氏には多くのフィードバックをいただきました。あ…

Scala福岡 2017に参加します

7月29日(土)に福岡のヌーラボさん本社オフィスで開催されるScala福岡 2017に参加させていただくことになりました。 scala.connpass.com セッションでは最近コミッタになったApache PredictionIOについてお話しさせていただきたいと思います。概要は以下の通…

PredictionIOで使用するSpark等のバージョンを変更する

PredictionIOはデフォルトでは以下のバージョンを使用します。 Scala 2.10.6 Spark 1.6.3 Hadoop 2.6.5 Elasticsearch 1.7.6 Scalaのバージョンはともかく、Spark(ストレージにElasticsearchを使用する場合はElasticsearchも)のバージョンがかなり古いのが…