OE_uia Tech Blog

ScalaMatsuri / Scala / Android / Bioinfomatics

ローカルカンファレンスを無理なく国際化する方法 - ScalaMatsuri 2016を振り返って

| Comments

2016年1月30日及び31日に、アジア最大のScalaカンファレンス「ScalaMatsuri 2016」を開催しました。

550名ほどの来場者と、16万人を超えるニコ生来場者を迎え、大盛況のうちに幕を閉じることが出来ました。

ご参加いただいた皆さん、ご協賛いただいたスポンサーの皆さん、そして準備に尽力してくださったスタッフの皆さん、本当にありがとうございました。

スライド類はだいたい出揃ってきました。また動画は納品後に順次アップロードします。問い合わせの多い翻訳の提供については、現時点で確約はできないですが何らかの形で提供できないか調整しています。

ScalaMatsuri 2016 プログラム

さて、今回は振り返りをするにあたって、「ローカルカンファレンスを無理なく国際化する方法」というタイトルにしました。

なぜか。理由は2つあります。

1つは、そもそもScalaMatsuriの前身となる第一回目のScala Conference in Japan発起の理由として、日本と海外のコミュニティの交流をうたって開催されたからです。

ScalaMatsuriの存在意義はもはやこれだけではありませんが、1つの大きな柱ではあります

もう1つは、今回のScalaMatsuri 2016では、ようやく無理のない国際化の第一歩が踏み出せたからです。

海外のカンファレンスのスピンオフではないローカルな独自カンファレンスで、知名度0からのスタートだったので、当初は招待講演者4名+関係者のみ海外参加者と、今思えばとてもローカルなものでした。ここから改善して今にいたっています。

フィードバックについてはまだ集計中ですが、Twitterハッシュタグを確認する限りにおいて、マジョリティの日本人参加者と、海外からの一般参加者、どちらに寄り過ぎることもなく、楽しんでもらうことができたと感じています。

そのことが、個人的にはちょっとした節目のように感じており、なぜ国際化をしたいのか、無理なく国際化をする上で何をしたのかについて、整理するいい機会なのでしたいと思います。

そこまで怖くないAndroid BLE

| Comments

これはBLE Advent Calendar 2015 7日目の記事です。

AndroidのBluetooth Low Energy(BLE)について、どんなイメージをお持ちでしょうか?

安定してない?わかりにくい?

色々と怖いイメージをもたれがちと思います。確かに怖いところも色々とありますが、今ちょうどAndroid BLEをフルに使ったプロダクトBONX -Wearable Walkie-Talkie-を開発しているので、そこで溜まった知見を共有できればと思います。

Scala標準のPromiseがAndroidで便利だという話

| Comments

この記事は、Scala Advent Calendar 13日目です。

今日はscala.concurrent.Promiseの話をします。

Promise - Scala Standard Library 2.11.7 - scala.concurrent.Promise

そもそもPromiseって使いどころがわかりにくいですよね。他人のコードで使ってるの、ほとんど見たことがありません。

公式ドキュメントではProducer-Consumerパターンでの使い方を解説していますが、現実にこの使い方が必要になるケースってあまり遭遇せず、たいていの場合はFuture同士のflatMapによる合成で事足りてしまうと思います。

Future と Promise - Scala Documentation

ところが、実はAndroidアプリ開発では頻繁に遭遇するあのパターンが、Promiseを使うと非常に取り回しが良くなりますので、紹介したいと思います。

Implicitには型注釈をつけましょう

| Comments

Scalaには(とても今更ですが) Implicit/暗黙 というキーワードがあります。Implicitキーワードを宣言する場所をざっくり分けると、以下の4つ。

1) implicit class …

2) implicit parameter (e.g. (implicit a:A) )

3) implicit def …

4) implicit (var | val) …

この中で1,2は(明示的に)型を書かざるを得ませんが、3のdefの戻り値、及び4については、型注釈を明示的に書かずに型推論を働かせることが(少なくとも最新の2.11.7でも)可能です。

しかし型注釈を書かなかった場合、以下のような(一見理由の分かりにくい)コンパイルエラーに遭遇する可能性が有ることはご存知でしょうか?

ScalaのREPLを拡張するには

| Comments

こちらはScala AdventCalendar 2014の7日目の記事です。 今日はScalaのカスタムREPLの作り方についての話。なお今回は(Scala REPL同様)StandaloneなREPLアプリの作成を目的としているので、:powerモードは主眼ではありません。

モチベーション

ScalaのREPLは手元のローカルマシンでAPIを試してみたいときや、ちょっとした計算をしたいときにはとても便利なのですが、やや凝ったことをしたいときなど、そのまま使うには不便さを感じることがあります。

具体的にはAndroidのAPIをScalaのREPLから叩けるようにしたかったのですが、Android環境をJVMでエミュレートするためにはカスタムClassLoaderを使ってAndroid APIのClassを書き換える必要があって。。。という感じ。

これはちょっと特殊なモチベーションかもしれませんが、クラスター上などの特定の環境で実行させたいとき(e.g.spark-shell)、自作ライブラリのsandbox環境を提供するにあたって特定の場面でよく使うコマンドを追加したい、など思われる方はいるかもしれません。

そんなとき、意外とScala REPLを拡張する記事を書いている人が少なかったので、今回はScalaのソースコードを読みながらカスタムClassLoaderを使用する方法、コマンドを追加する方法について書くことにしました。

参考:Create your custom Scala REPL … 数少ないREPL拡張方法に関する記事。

成果物

taisukeoe/MyCLRepl

MyCLRepl DEMO
1
2
3
4
5
6
7
8
9
10
11
scala> val hello = "hello"

MyClassLoader loads classOf <root>.$line3
<<中略>>
MyClassLoader loads classOf scala.collection.mutable.StringBuilder
MyClassLoader loads classOf scala.runtime.ScalaRunTime$
hello: String = hello

scala> :myCommand hello

This is a custom command example. You can do something from value:"hello" with custom Scala interpreter.

ClassLoaderの差し替え(Classのロード時にクラス名をprint)と、myCommandというコマンドの追加をしています。

ScalaMatsuri 行動規範を掲げた経緯

| Comments

今年から、行動規範をScalaMatsuriとして掲げ始めた。 その目的は「みんな仲良く」。噛み砕いて言えば、性別、国籍などに起因するような少数派が居心地の悪い思い、不快な思いをしないことを目指している。

この行動規範について、突然Webサイトに追加されたので驚かれた方も多いかもしれない。この行動規範は、現実に発生しそうになった問題から、必要要件を考え、準備委員内で長期間に渡り議論を重ねた上で公開したものだ。

既にその目的については@eed3si9n_jaさんがカンファレンスでのユニバーサル・アクセスへ向けてという記事でまとめてくださっているが、来年から本格的に運用するにあたり、この行動規範を掲げた経緯も含めて紹介することが、ご理解とご協力をいただく上では重要ではないかと考えているため、この記事を書くに至った。

ScalaMatsuri 2014 OMOTE/表

| Comments

9/6,7の2日間、ScalaMatsuri 2014という日本最大(おそらくAsiaでも最大?)のScalaのカンファンレンスを開催し、総来場者数が400人強、ニコ生視聴者14万人超、昨年に引き続き#ScalaMatsuriがTwitterトレンド入りと、盛会のうちに幕を閉じました。 ご来場者、スポンサー企業、ニコ生視聴者、スタッフの皆様、本当にありがとうございました。

今回は、主にOMOTE / 表側の紹介です。写真なども後日この記事に追加予定。裏側紹介はアンケートデータの整理などが終わり次第、また書きます。