What is ULID?

ULID (Universally Unique Lexicographically Sortable Identifier) is a case-insensitive 26-character string consisting of 48-bit timestamp (10 characters) and 80-bit randomness (16 characters):

 01AN4Z07BY      79KA1307SR9X4MV3|----------|    |----------------|
Timestamp Randomness
48bits 80bits

ULID was born to overcome several…


Photo by Aaron Burden on Unsplash

Airframe Log, a modern logging library for Scala, now supports Scala 3.0.0-M2 (Dotty) since version 20.12.1, released on December 2020.

The usage is quite simple: Add LogSupport trait to your class and use error/warn/info/debug/trace methods for showing logs of your applications:


Airframe RPC is an open-source framework for building RPC services, using Scala as a unified RPC interface between servers and clients.

Why Airframe RPC?

Airframe RPC enables calling Scala methods at remote servers. You don’t need to worry about how to encode your data into JSON, nor how to define HTTP REST endpoints. Airframe RPC abstracts away these details; the framework generates code for serializing your data objects into JSON or MessagePack and calls appropriate HTTP endpoints on your behalf.

While gRPC has been a popular approach for building RPC services, it’s built around Protobuf technology for defining data structures and RPC methods…


2019年に追加されたAirframeの新機能とユースケースについて紹介

AirframeはScalaで高度なアプリケーションを手軽に作成するためのライブラリ集です。

AirframeユーザーのためのAirframe Meetup #3を2019年10月23日に東京で開催しました。当日は季節の変わり目ということもあり、風邪によるキャンセルが多かったのですが(お大事に)、今回は新しい試みとして、AirframeをSpark、Scala.jsなどと一緒に使っていただいている方々によるlightning talkを設けたことで、新しい発見も多く、実りのあるイベントになりました。

嬉しいことに、参加してくれた方によるレポートもあります。

まずは、2019年におけるAirframeのアップデートについて紹介 …


Photo by Gustavo Espíndola on Unsplash

If you are a maintainer of Scala OSS projects and have never tried sbt-sonatype 3.6 (or higher), your release process can be much faster by using the bundle upload feature of sbt-sonatype:

The bundle upload enables uploading multiple artifact files of your project with a single HTTP request to Sonatype, a central repository for JVM-based OSS projects. With the bundle upload, for example, more than 2000+ files of Airframe project can be uploaded in a minute, even though it has 20+ modules and cross-built binaries for Scala 2.11, 2.12, 2.13, and Scala.js.

Traditionally, Scala developers have been using publishSigned task…


AirSpec is a new testing framework for Scala and Scala.js.

AirSpec uses plain Scala functions for writing test cases. This style requires no extra learning cost if you already know Scala. For advanced users, dependency injection to test cases and property-based testing are supported optionally.

AirSpec has nice properties for writing tests in Scala:

  • Simple usage: import wvlet.airspec._, then extends AirSpec trait.
  • Using plain Scala classes and methods to define tests. Public methods in a class extending AirSpec trait will be your test cases.
  • No annotation (like ones in JUnit5) aris necessary.
  • Testing with simple assertions: assert(cond) , x shouldBe…


MacのGoogle Chromeではタブを開く(⌘+T)、タブを閉じる(⌘+W)などのショートカットキーをよく使うのですが、左手だけで操作するには、親指を深く折り曲げて⌘キーを押す必要があり、どうにも窮屈でした。

少し調べたところ、⌘キーの代わりに、Ctrlキーなどをショートカットキーの起点に変更することができました。方法は簡単で、Keyboard Shortcutsの設定から、以下にあるようにChromeの各コマンドに対応するショートカットキーを設定するだけ:


データ指向アプリケーションデザイン ― 信頼性、拡張性、保守性の高い分散システム設計の原理

分散システム入門の決定書ともいうべきこの一冊をようやく日本に届けることができました。本日(2019年7月18日)発売です。おそらく分散システムのあらゆる側面について、このように網羅的に学べる書籍はここ10年ほどなかったと思われます。

手軽に扱えるデータの量や種類が増える一方、CPUの性能はムーアの法則通りには成長しなくなり、大規模データ処理では、多数のマシンを活用する分散処理が欠かせなくなってきました。クラウドの普及とともに多数のマシンを自ら調達せずとも分散システムを構築できるようにもなっています。

しかし驚くべきことに、今までこの分野に入門するための定番の書籍がありませんでした。分散処理にデータ処理が加わる融合分野である上、オープンソースプロジェクトの進化も速く、専門家同士でも共通の理解を構築するのが非常に難しかった分野です。この本を上手に使うと、既存のOSSプロジェクトの位置付けや、バッチ処理とストリーム処理の違い、データをどう分割し、更新ログをどう活用すれば良いかなど、データを扱う上での基本的な概念が効率的に学習できます。

個別の教科書としては、10年以上も前からあるTanenbaumの“Distributed Systems”、並列計算なら“The Art of Multiprocessor Programming”、トランザクション管理では“Transactional Information Systems”などが理論の学習に適しています。しかし学習を進めていくと、トランザクションのserializabilityとは何か?、分散システムにおけるlinearizabilityとの違いは?、実システムではどうこれらの問題に対処しているのか?など、各々の分野の教科書を読むだけでは答えられないような疑問がたくさん出てきます。最新の論文を読み込み、実装における落とし所まで知ってようやく腑に落ちるといった具合です。

このように最新の知識を追い続けるのは、それ自体を仕事とする研究者でもない限り難しいことです。本書でも紹介されているPaxosという複数ノード間での合意を取るプロトコルの論文がありますが、理論を理解するまでには何度も論文を読みなおす必要があるでしょう。しかし、技術そのものを使うだけなら、同じ状態が複数のノードから見える、という当たり前(であるべき)保証でしかなく、さらに後続の研究により実用的な改良が加えられ、Raftなどエンジニア寄りに書かれて普及した同等の技術も登場しています。「点」の知識だけではなく、「線」として知識の変遷を追う必要があるため独学するのが大変な分野なのです。

過去にCAP定理という言葉が流行り、あたかもこれが分散システム設計の前提という風潮になったこともありましたが、この本ではCAP定理を(その対象となるシステムの狭さから)実用上有益ではないと言い切り明確に終止符を打っています。過去の文献を読むだけでは、このように忘れ去るべき知識についての情報は得られないので、知識をリフレッシュする意味でも本書は役に立つでしょう。実際、CAP定理が話題になると、この本を紹介するだけで話が終わるようになり便利になりました。

本書を読み進めていくうちに、100% 常に動くシステムを作ることの難しさを知り、99.99%の稼働率でも期待した動作をするシステムを作るための考え方が養われていくと思います。特に冪等性(idempotency)は、私が勤めるArm Treasure Dataのエンジニアなら真っ先に検討する項目で、同じAPIリクエストが2回以上繰り返されても、データに不整合が生じないようシステムやプロトコルを設計する必要があります。APIにリクエストを送信するクライアント側も、当然のようにネットワークやマシンの障害を想定してリトライする仕組みを導入するのが社内の常識になっています。

本書の翻訳は玉川さんの甚大な努力によって行われたものですが、監訳にあたっては、英語でパラグラフを読んだイメージ(意味空間とでも言いましょうか)と、日本語の翻訳から得られるイメージが極力近くなるように心がけました。まだ日本語として定着していない用語も多く、無理に過去の訳語を当てはめたり造語を作るよりは、英語をそのまま併記して、後々自分で文献や技術を追う際の助けとなるように配慮しました。分野の常識や、アメリカ文化に馴染みがないと訳しにくい箇所も多く、そういう意味では良いところで貢献できた気がしています。

対象とする読者は、エンジニアや研究者はもちろん、データを扱って仕事をするデータサイエンティストや、Webサービスを構築してビジネスを起こす人なども含まれます。データがシステムの裏側でどのように処理されるかを知っていることはデータに基づいた決断への自信にもつながります。生物学でもシーケシング技術の急速な発展により、ゲノム情報という大規模データを突然手にしたため、エンジニア以外でも使えるデータ処理の基盤を整えることが急務になっています。

本書をガイドとすることで、何百本も論文を読むのに必要だった時間が節約できるだけでなく、今まで膨大な情報に埋もれて理解が進まなかった分野についても効率よく学習できることでしょう。興味を持ったテーマに関しては、ぜひ関連文献にある記事や論文にまで手を伸ばして読み進めてみてください。長らく本書が現れなかったように、次の10年もこのような良い知識の集大成の本が出てくるとは限りません。データ処理には未解決の問題が山積みで、本書から先に進むには自ら知識やデータを集めて、それをもとに考えていく習慣が必要になるはずです。

この本を手に取った皆様が、データを上手に活用し、新しい世界への道を切り開いていけるようになることを願います。

(本書の前書きより、一部編集して抜粋)


アメリカ人は車の中で1日1時間ほど過ごすようです。2016年の統計だと年に290時間とのこと。日本の首都圏の平均通勤時間と変わらないくらいかもしれません。特にベイエリアは景気が良く労働者が集まってくるため、年々車による通勤者が増え、渋滞が激しくなってきています。

そのため車での生活をいかに快適にするかがアメリカでの日常の課題となります。車の運転中、基本聴覚は空いているため、本を音声として聴けるAudibleのようなサービスは、情報をたくさん取り入れたい層にとって、運転中の暇な時間をストレスなく有効活用できる手段になります。


Airframe Meetup #1: Scala開発に役立つ5つのデザインパターンを紹介

先日、初のAirframe Meetup #1を開催し、盛況のうちに終了しました。日本への帰国のタイミングに合わせて数週間前に企画したにも関わらず、コアなScalaエンジニアが多く集まる会になり、楽しい時間を過ごすことができました。企画、会場準備を快く手伝ってくれた@takezoenさんに感謝。

Airframe10月17日のTD Tech Talkでも紹介しましたが、Scalaのための軽量ライブラリ集で、ここではScalaエンジニア以外の方にも楽しんでいただけるよう、Airframeの各種モジュールやコンセプトの紹介を中心に行いました。

今回のAirframe Meetupでは、Scalaエンジニアにフォーカスすることで、コード例を多く交えながらAirframeのDependency Injec …

Taro L. Saito

Ph.D., researcher and software engineer, pursuing database technologies for everyone http://xerial.org/leo

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store