Scala

TransmogrifAIを使ってPredictionIO用のAutoMLテンプレートを作ってみた

Apache PredictionIOは、SalesforceによってApache Software Foundationに寄贈されたオープンソースの機械学習プラットフォームです。 PredictionIOは機械学習ワークフローの全プロセスをカバーし、エンジンテンプレートという雛形をベースにすることで機械…

Databricks社がOSS化したSpark用ストレージレイヤ「Delta Lake」について

先日開催されたSpark + AI Summit 2019にあわせてDatabricks社からSpark用のストレージレイヤ「Delta Lake」のOSS化が発表されました。 databricks.com GitHubリポジトリはこちら。 github.com Delta LakeはSparkのライブラリとして実装されており、分散スト…

Scala用のLanguage Server「Metals」をAtomで使ってみる

MetalsはScalametaのサブプロジェクトとして開発されているScala用のLanguage Serverで、Visual Studio CodeやAtom、Vim、EmacsなどのテキストエディタでScalaプログラミングを行う際にIDEのような機能を利用できるようにするものです。 scalameta.org コー…

Treasure Data hosted Tokyo Scala Developers Meetup!

2月28日(木)に大手町のGlobal Business Hub Tokyoで開催されたTokyo Scala Developersコミュニティのミートアップをトレジャーデータでホストさせていただきました。 www.meetup.com Tokyo Scala Developersは主に東京在住の外国人Scalaプログラマのコミュ…

Scala用のRisonパーサを作ってみた

RisonというのはJSONライクかつURLに埋め込みやすいようURLエンコーディングが最小限になるよう設計されたデータフォーマットだそうで、Kibanaなどで使われているそうです。日本語だと以下の記事が詳しいです(自分もこの記事を見てRisonを知りました)。 qi…

Java/Scala用機械学習ライブラリ「Smile」を使ってみる

手軽に使える機械学習ライブラリというとPythonのscikit-learnが有名ですが、Java/ScalaでもSmileというライブラリがあったので軽く試してみました。 github.com まずはリリースページからzipファイルをダウンロードして適当な場所に展開します。bin/smileで…

Scalaのテストケース内でDockerコンテナを使う

GitBucketではもともとデータベースを使ったテストに組み込みMySQLやPostgreSQLの機能を提供するライブラリを使っていたのですが、これらのライブラリのメンテナンスが怪しくなかなか新しいバージョンに対応したテストを行うことができないという問題があり…

Akka Streamsで簡単にリトライするFlowを作る

akka-http-contribというリポジトリにRetryというユーティリティがあり、リトライ処理が簡単に書けるようだったので試しに見てみました。 github.com テストケースによると使い方はこんな感じです。 def flow[T] = Flow.fromFunction[(Int, T), (Try[Int], T…

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

11月10日(土)、11日(日)の2日間に渡り大阪で開催されたScala関西Summit 2018に参加してきました。 GitBucket sponsors Scala Kansai Summit 2018! #scala_ks #gitbucket pic.twitter.com/0Kk3gIeeHT— Naoki Takezoe (@takezoen) 2018年11月10日 上記のツイー…

Scalafixで未使用のインポート文を削除する

Scalaで未使用のインポート文を自動で消せないかという話があり、Scalafixだとできそうだったのでやってみました。 github.com ドキュメントに書かれている通りでいけるのですが、手順をまとめておきます。 まずはproject/plugins.sbtにsbtプラグインを追加…

実践Scala入門

「実践Scala入門」を技術評論社さんからお送りいただきました。Scalaの入門書というとコップ本を思い浮かべる方が多いと思いますが、下のツイートでも書いている通りこの本はかなりコンパクトです。 技評さんから実践Scala入門をお送りいただきました。あり…

sbtサーバとRustで書かれたsbtクライアント

Scalaのビルドツールsbtには1.xからLanguage Server Protocol 3.0に対応したサーバモードが実装されており、常駐させたサーバに別プロセスから接続してコマンドを実行することができます。サーバモードはIDEやエディタプラグインのために実装されたものだと…

SalesforceのScala製AutoMLライブラリ「TransmogrifAI」を触ってみた

AutoMLはこれまで専門のエンジニアを必要としていたような機械学習の処理を自動化し、誰でも機械学習を利用できるようにするという分野です。PythonだとTPOTなどのライブラリが存在しますが、先日Salefsforce社からScala + SparkベースのAutoMLライブラリが…

AirframeのFinagleサポートを試してみる

AirframeはScala向けのDIコンテナを中心とした様々な便利機能を提供するプロジェクトなのですが、最近airframe-httpとairframe-http-finagleというモジュールが追加され、Finagleを使ったWebアプリケーションを簡単に作れるようになったので感じを掴むために…

Scaladocを実行時に読み取れるようにするコンパイラプラグイン

ScalaベースのフレームワークでクラスのメタデータからSwaggerなどを生成できるものがあるのですが、専用のアノテーションやオブジェクトを使って情報を記述しておく必要があり、特にパラメータの説明などはScaladocに書いたものをそのまま使えればいいのに…

SlickでStackOverflowErrorが発生する場合の対処法

GitBucketに以前からGitBucketのバッシュレポートでStackOverflowErrorが発生するというバグレポートが上がっていたのですが、最近直接の知り合いからも言われたので重い腰を上げて修正にトライしてみることにしました。 github.com 原因は以下のようなコー…

Scalaをはじめよう! ─マルチパラダイム言語への招待─

技術書典で販売されていた同人誌がインプレスR&Dさんから電子書籍&オンデマンドで発売されたものとのことで、Scala初心者向けの入門用書籍にどうだろうと思い、Kindle版を購入して読んでみました。 Scalaをはじめよう! ─マルチパラダイム言語への招待─ (技…

Akka StreamsのElasticsearchコネクタでupdateやdeleteもできるようにした

AlpakkaにはElasticsearch用のコネクタも含まれていて、これは元々自分がコントリビュートしたものなのですが、これまではFlow/Sinkによるバルク書き込みはindexとupsertにしか対応していませんでした。また、1つのストリームでindexとupsertを混ぜることも…

Akka Streamsで巨大なXMLをストリーム処理する

Akka Streams用のコネクタを提供するAlpakkaにはXMLサポートも含まれており、XMLの読み込み・書き込みを行うためのFlowやSinkを利用することができます。 しかし読み込みはXMLのパースイベントをストリームするだけなので、実際には下流の処理で状態を管理し…

AWS Kinesisからの読み込みをAkka Streamsで行う

Akka Streams用の様々なコネクタを提供するAlpakkaですが、もちろんAWS Kinesis用のコネクタも含まれています。 しかし、書き込むためのFlow/Sinkは普通に使える感じのものなのですが、読み込むためのSourceはライセンスの問題からKCLを使ったコネクタを取り…

GraphQLスキーマからCRUDを自動生成できるPrismaについて

Prismaは、様々なデータベースをバックエンドにGraphQLのスキーマからCRUDを行うためのエンドポイントを提供するプロキシとして動作するミドルウェアです。最近$4.5Mの資金調達をしてちょっとだけ話題になりました。 www.prisma.io Prismaが提供するソフトウ…

PlayのRedisプラグインあれこれ

PlayのCache APIのバックエンドにRedisを使えるようにするプラグインがあり、以前はTypesafe社によってメンテされていたのですが、現在はメンテナンスが停止してしまっています。 github.com このプラグインはバックエンドにJedisとJedisのScalaラッパーであ…

Apache PredictionIOとApache Zeppelinを組み合わせてみる

Apache PredictionIOとApache ZeppelinはどちらもApache Software Foundationのプロジェクトです。PredictionIOはSparkML / MLlibベースの機械学習アプリケーションを開発・運用するためのプラットフォームを提供するもので、ZeppelinはSpark / SparkSQLを使…

Twilio社がOSS化したScala用SwaggerコードジェネレータGuardrailを試してみる

先日のScalaMatsuri 2018でTwilioの方が発表されていた、SwaggerからAkka HTTP用(http4sにも対応している)のコードを生成するコードジェネレータがGitHubで公開されていました。 github.com 発表を聞いていて良さげな感じだったのでちょっと試してみました…

ScalaDays 2018 NewYorkの気になるセッション

ScalaDays 2018 NewYorkのタイムテーブルが公開されていましたので、完全に個人的な趣味で気になるセッションを列挙してみたいと思います na.scaladays.org Type-driven Development (Workshop) カンファレンスの前日と前々日行われるワークショップでは「Ty…

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やソースコードなどからどのようなものかは大体掴めるので簡単にまとめておきます。興味のある方は是非試してみて欲し…