OE_uia Tech Blog

ScalaMatsuri / Scala / Android / Bioinfomatics

Scala関西サミットに向けて色々仕込んでいた話

| Comments

9/9に大阪で開催されたScala関西サミットに参加してきました。いつもながら非常に楽しかったです。主催のきの子(@aa7th)さん、スタッフの皆さんお疲れ様でした!

今回のScala関西サミットは、自分にとって3つのミッションがありました。

  • 自分のセッションの発表
  • エフ・コード社の準備のお手伝い
  • 発表資料レビューのお手伝い

それぞれ別種の忙しさがありましたが、なんとか乗り切ることができたので、ようやく肩の荷がちょっと降りた気持ちです。

最近僕がどんな仕事をしているか見えにくいと思いますので、良い機会ですし今回の記事では上記3つそれぞれについて、ご紹介しようと思います。

自分のセッションの発表

今回Androidネタは封印して、Dottyネタで喋ってきました。

ScalaMatsuriの初社員採用プロジェクト これまでの運営の失敗と成功の歴史 ~ScalaMatsuri 2017を振り返って~

| Comments

ScalaMatsuriにご参加いただいた皆さん、ありがとうございました。

ScalaMatsuri座長の麻植(@OE_uia)です。

2017年2月25日、26日に開催されたScalaMatsuri 2017では、一般販売のチケット販売+スポンサー招待枠+関係者もろもろを合わせまして、 総勢600名程度 の方にご参加いただきました(実数はまだ集計中です)。 参加、登壇、協賛、そしてスタッフとして、皆さんがScalaMatsuriという神輿を担いでくださったお陰で、今年も盛況のうちに幕を閉じることが出来ました。

国際化の進むScalaMatsuri

昨年の振り返りブログでは言及したScalaMatsuriの国際化はさらに進み、フィリピンのパーペチュアル・ヘルプ大学から30人ほどの団体参加者と、Scala Taiwanの団体参加者、そしてその他の国からの参加者も増えました。

また、それ以上に参加者全体の意識の変化も見て取れました。去年はまだまだ日本ローカルの参加者と、海外からの参加者が別れて交流しがちだったのですが、2日目夜の有志による寿司ディナーでは入り混じり、国際カンファレンスらしい交流がそこかしこで繰り広げられるようになりました。

とまあ、国際化は引き続き順調に進んでいるので敢えて言うほどのこともないですし、今回の振り返りブログはScalaMatsuri運営の内情と、今年度の構造改革の中身についてお話します。

なお、お気づきの方も多いかと思いますが、タイトルはかとじゅんさんの今回のScalaMatsuriセッションタイトルのパロディです。

三行 / TL;DR

  • ScalaMatsuriはボランティア運営のコミュニティカンファレンスだが、大きくなるにつれスタッフの負担が重くなり継続の危機に陥っていた
  • ScalaMatsuriは今年度、初めて社員を雇うなどの構造改革を行った
  • 結果、スタッフの事務負担を大きく緩和し、持続可能な運営体制と、より重要な企画に集中的に時間を使える仕組みを作ることができた。

Scala関西サミットでAndroid Akkaについて喋ってきた話

| Comments

さて、2016年Scalaアドベントカレンダー@Qiita 3日目です。

何を書こうかと考えていたら、そもそも10/8に開催されたScala関西サミットの話をブログに書いてないことに気づきました。

なので今回はそのことを紹介しつつ、色々補足できたらと思っています。

その前に。

Scala関西サミットの感想

時期を逸した感じがしますが(きの子さんすいません…)、去年にも増して楽しかったです!

(結果的に)タイムテーブルの組み方が非常によくできていて、特にB会場のトラックがActorモデルの解説から、Akka-Stream、と続いていき、最後にAkka Clusterの闇の話が入る、という最高の流れでした。

そして日本各地からだけでなく、台湾からの参加者もいらっしゃるなど、多様性という意味でも大きくグレードアップしていました。

これが無料イベントって… 運営のことが非常に心配になりますので、お金払いますから今後もぜひ続けて下さい、という気持ちです。


ScalaMatsuriも負けてられません!

というわけで、ただいまセッション投票の集計&選考&タイムテーブル準備などの真っ最中でございます。

近々、遅くとも年内にはまとまった情報を出せると思いますので、しばしお待ちくださいませ。

僕の主観ですが、今までにも増して豪華で面白いトークの集まる、素晴らしい2日間になると思います。

さて、本題。

Scala関西サミットのスライド

このトークではActorモデルの解説と、ActorモデルがなぜBONXというVoIPアプリにフィットしたのか、という話をさせていただきました。

ただ、あまりAkkaのカスタマイズ性がVoIPのチューニングにどう役立つのか、という話は出来ずじまいでした。 今回はそこにフォーカスをあてます。

非機能要件の改善

VoIPアプリの場合、機能要件の実装・テストより、非機能要件の改善に時間を使います。 具体的には音質と遅延の改善です。

音質の改善

Actorモデルで設計されたVoIPモジュールにおいて何が一番音質の劣化原因になるかといえば、フレーム間で発生した遅延や、フレームの欠落です。

あるフレームが再生されてから、次のフレームが再生されるまでに間に大きく遅延すると、そこで波形が途切れること(非線形)になりますので聴感上ブツッというノイズに感じます。

同様にして、フレームの欠落が起きると、やはり前後のフレームが非連続になりますのでノイズに感じます。

大雑把に言えば、遅延の改善が音質の改善に繋がります。

遅延の改善

では、遅延をどのように改善したら良いでしょう。

安定している条件では、Akkaというより、個々の計算量を減らすなどモジュールごとのチューニングが必要となることが多いです。

しかし音声ストリーム処理の、しかもグループ通話など負荷が時間とともに変わりうる場合だと、Actorシステムにボトルネックが生じることが往々にしてあります。

まず測定・監視して詰まりやすいhotspotになる場所を探し出し、その後で負荷を分散・解消する方策を考え試行錯誤する必要があります。

解決策は十分にdispatcherの並列度を上げる必要があるときもあれば、局所的にActorを並列化するべきなケース、throughtputなどのパラメーターが重要になるケースなど様々です。

Akkaではこういた実行モデルのチューニングの大部分を、confファイルで簡便に変更出来る点で優れています。

また、Mailboxのサイズを適切に設定することも重要です。

小さすぎて溢れるとフレームの欠落になりますし、かといって大きすぎると遅延の解消に時間がかかります。

音声ストリーム処理の改善、とても難しいけど、チューニングがユーザー体験に直結するのはなかなかレアなので面白いです。

そんなAkkaのチューニングをやりたい方、今Androidエンジニアを絶賛募集中ですので、よかったらこちらからどうぞ。

それでは。

ローカルカンファレンスを無理なく国際化する方法 - 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でも)可能です。

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