算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Kotlin Fest 2018 開催のお知らせ #kotlinfest #jkug

f:id:ngsw_taro:20180703135034p:plain

本邦初!Kotlin 1day 技術カンファレンス
Kotlin Fest 2018 を開催します!!

日程
2018年8月25日 土曜日
会場
東京コンファレンスセンター品川 5F
主催
日本Kotlinユーザグループ
コンテンツ
2トラック 10セッション、企業展示ブース(予定)

Kotlin Fest 2018 は「Kotlinを愛でる」をビジョンに、Kotlinに関する知見の共有と、Kotlinファンの交流の場を提供する技術カンファレンスです。 プログラミングをより楽しくしてくれるKotlinへの関心は日々高まっており、それが本イベントの開催へと繋がりました。 Kotlinの技術にフォーカスしたコンテンツを取り揃えることで、参加者の皆様にKotlinをより深く学んでいただき、 そして、よりKotlinを好きになっていただけるイベントにするべく、企画を進めております。

2018年の初めに開催されたAndroid業界のトップエンジニア1000名以上が参加する技術カンファレンス「DroidKaigi 2018」のオープニングで、本イベントの開催をサプライズで告知しましたが、Kotlinの応用分野としてはAndroidだけではなく、サーバーサイドなど幅広い分野での活用が期待されており、本イベントも様々な分野の開発者の参加を想定しています。

f:id:ngsw_taro:20180213141845j:plainf:id:ngsw_taro:20180213142235j:plain
DroidKaigi 2018でのサプライズ予告

今後のスケジュールとしては、近日中のイベントページの公開を目指しております。 そして、参加申込の開始は7月中旬を予定しております。

スピーカーは全員、企画・運営チームによって招待させていただいたエンジニアの方々となります。 一部の時間を使って、ライトニングトーク大会のようなものを計画中で、こちらのスピーカーは公募を行う予定です。 あわせて、当日のボランティアスタッフの募集も行います。 詳細は追ってご案内いたします。

また、本イベントに協賛いただける企業様の募集を行っております。

名称 壇上バックパネルに貴社ロゴ ブース出展 or ノベルティ等の配布 イベントWebサイトに貴社ロゴ 無料参加枠
ことり 5名
ひよこ × × 1名

ありがたいことに「ことり」スポンサーについては、すでにいくつかお申込みをいただいております。 定数に達しましたら「ひよこ」スポンサーをご案内させていただくかもしれませんが、よろしくご検討いただけますと幸いです。

ご好評につき「ことり」スポンサーは申込を締め切りました。「ひよこ」スポンサーは引き続き募集していますので、ご検討をよろしくお願いいたします。

お問い合わせは japan-kotlin-user-group@googlegroups.com までお願いいたします。

日本Kotlinユーザグループとしては、初めての大規模イベントですので、至らぬ点もあることと存じますが、みなさまのご理解とお力添えを賜りますよう、よろしくお願い申し上げます。

Have a nice Kotlin!

Kotlin Developers Meetup #jkug でSpring Fuの紹介LTをしたよ〜

JetBrainsのDeveloper AdvocacyであるHadi HaririさんがGoogle for Mobile I/O RECAP 2018のために来日するということで、 Hadiさんはもとより、Googleさんにもご協力いただき日本Kotlinユーザグループによるイベントを6/27に開催しました。

kotlin.connpass.com

僕自身はあまり運営を手伝えなかったのですが、ライトニングトークをしてきました。 下にあるのがそのスライドです。

Spring Fuという、Springの新しいプロジェクトを使って、GraalVMの上で動かしたいという旨の発表でした。

Spring Fu

Spring Fuは、Kotlin向けのマイクロ・フレームワークで、Sparkや、Spring 5のFunctional Bean Registrationを思わせるAPIが提供されています。 始めるのは簡単です。 公式ドキュメントから、プロジェクトの雛形がダウンロードできます。 入手したzipファイルを展開して、それをIntelliJ IDEAなどのエディタで開けば、開発を始められます。

f:id:ngsw_taro:20180630120430p:plain

初期状態のまま./gradlew bootRunするとHelloWorld Webアプリケーションが起動するので、http://localhost:8080をブラウザで開くと「Hello world!」と表示されます。

公式ドキュメントを参考に、DI機能を試してみます。

package com.example

import org.springframework.fu.application
import org.springframework.fu.module.webflux.netty.netty
import org.springframework.fu.module.webflux.webflux
import org.springframework.fu.ref

class HelloService {
    fun hello(): String = "Hello world!"
}

val app = application {
    // bean登録
    bean<HelloService>()

    webflux {
        server(netty(8080)) {
            routes {
                // beanのインジェクション
                val helloService = ref<HelloService>()

                GET("/") {
                    val body = helloService.hello()
                    ok().syncBody(body)
                }
            }
        }
    }
}

fun main(args: Array<String>) = app.run(await = true)

これ、うまく行きそうなんですが、アプリケーションを起動しようとすると失敗します。 そのときに吐かれる例外メッセージはこんな感じです。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webHandler': Unexpected exception during bean creation; nested exception is kotlin.UninitializedPropertyAccessException: lateinit property context has not been initialized

lateinit付きの遅延初期化されるプロパティcontextが、初期化されていないのにアクセスがあったようです。 丁寧に調査してから、修正してプルリクエストを送りたいところですが、さしあたり、次のコードでこの問題を回避できます。

package com.example

import org.springframework.fu.application
import org.springframework.fu.module.webflux.netty.netty
import org.springframework.fu.module.webflux.webflux
import org.springframework.fu.ref

class HelloService {
    fun hello(): String = "Hello world!"
}

val app = application {
    // bean登録
    bean<HelloService>()

    webflux {
        server(netty(8080)) {
            routes {
                // ↓の1行を追加する
                this.context = this@server.context

                // beanのインジェクション
                val helloService = ref<HelloService>()

                GET("/") {
                    val body = helloService.hello()
                    ok().syncBody(body)
                }
            }
        }
    }
}

fun main(args: Array<String>) = app.run(await = true)

GraalVM

これはオマケなんですが、Spring Fuで作ったWebアプリケーションをGraalVMで動かしてみたいと思いました。 特にAOTコンパイラで、ネイティブの実行バイナリを作って、それを動かせたらすごいなぁと考えていました。

GraalVMには、Community Edition(CE)とEnterprise Edition(EE)の2つのバージョンが提供されていて、今回はCEを使いました。 CEは現在のところ、Linux上でしか動作せず、Macで直接動かすことはできないようです。 そこで、rayyildiz/graalvmというDockerイメージを使いました。 また、GraalVMのAOTコンパイルを行うコマンドnative-imageが依存するパッケージをインストールする必要があります。 gcczlib1g-devです。

結論から言うと、Spring FuアプリケーションをAOTコンパイルすることはできませんでした。 コンパイルに失敗します。 試してから気づいたのですが、Spring Fuのissueとしてすでに登録がありました。

github.com

Hadiさんと食事行ってきました

Hadiさんと山本ユースケさんと食事に行ってきました!

Kotlin Fest 2018

やります!!!詳細は近日発表予定です!!!!

新作が楽しみだから「ミッション:インポッシブル」についてチラ裏

ミッション:インポッシブル」シリーズ(以下M:I)の新作が8月3日に日本で公開される。 今から楽しみにしているので、このワクワク感を共有したく、M:Iについて雑に語ってみる。

M:Iの見所といえば、アクションシーンはもちろんのこと、 どういう分厚いセキュリティが施されていて、それをどう破るか。 どういう作戦を立てて、どう相手を出し抜くか。 ここらへんがとても面白い! セキュリティは時代とともに進化しており、回を追うごとに「インポッシブル」感は増すが、主人公たちが使うガジェットもまた進化している。

こういう大きい観点から、あまり注目されないような小さい観点まで、いろんな切り口で過去のシリーズを振り返ってみたい。 当然ネタバレを含む。 まだM:Iを見ていない人は注意されたい。 あと、何かを主張したいわけではないし、多分に主観が含まれるかもしれない。 同じようにM:Iが好きな人がニヤッとしてくれたら嬉しい。

なお「スパイ大作戦」は観たことがなく言及していないので悪しからず。

続きを読む

Ubie株式会社に6人目の社員としてジョインします!

5月1日付でUbie(ユビー)というAI医療のスタートアップに入社します!

f:id:ngsw_taro:20180423124521j:plain

www.company.dr-ubie.com

Ubieってどんな会社?

Ubieは、医療にコミットする会社です。 その掲げるミッションは「医療と人々の医療情報格差をなくすために誰でも自分にあった医療にアクセスできる世界をITによって実現可能なものにする」です。

f:id:ngsw_taro:20180411153818p:plain

医療に関する情報を持っている人とそうでない人、健康に対して意識の高い人とそうでない人がいて、その差をITの力で埋めたいと考えています。 例えば、症状を自覚していても、きっと大丈夫だろうと放置してしまい、実は重大な病気だった、ということは珍しいケースではないでしょう。 「きっと大丈夫だろう」という思いの裏にあるのはコスト意識で、医師にかかるためのお金であったり、時間がなかったり、単純に面倒に感じているかもしれません。 この経済的、物理的、あるいは心理的なハードルを下げて、人々に自分の健康に向き合うお手伝いをしたいと思っています。

適切な医療にアクセスすることも大切です。 何かあったらすぐに病院に行くのは、安全側に倒しており、間違いがないように思えます。 しかし必ずしもそうだとは言えないのではないかと思っています。 例えば咳や発熱を感じ、病院に行って、数十分間を待合席で過ごし、風邪と診断されて薬をもらい、数千円を支払う。 自分で風邪だとわかれば、ドラッグストアへ行き、同じ薬をより安く入手でき、時間も取られません。 医師や病院側の視点に立つと、もっと他の優先度の高い患者や業務にリソースを割きたいところですし、国の視点では医療費の負担という点で、登場人物全員にとってメリットがなさそうです。 とはいえ、専門家でない一般の人が自分の病名を判断したり、病院に行くべきか行かざるべきかを判断するのは実際問題、難しいです。

このような課題をITで解決するのが、Ubieのミッションです。 現在提供しているサービスは2つあって、1つは「Dr. Ubie」という症状から病名を予測するアプリです。 体調に異変を感じたら「きっと大丈夫だろう」で終わらせずに、気軽にDr. Ubieを使って、どういう病気なのか、どういう薬を飲めばいいのか、安静にすれば十分なのか、病院に行くべきなのかといった提案を受け、次の行動につなげていただきたいと思っています。

f:id:ngsw_taro:20180414110413j:plain:h200
Dr. Ubie

もう1つのサービスは「AI問診Ubie」という紙の問診票を置き換えるサービスです。 医師は実は電子カルテの入力にリソースの大部分を取られているのですが、AI問診Ubieは問診情報を医師の言葉に翻訳し転記しやすい形で提供するので、電子カルテ入力の時間を大幅に減らし、病院の待ち時間が長く、診察時間は短いという問題の解消に寄与します。 また、Dr. Ubieと同様に問診情報から病名を予測するので、医師とAIのダブルチェックにより漏れなく確かなアセスメントが可能です。

f:id:ngsw_taro:20180414110432j:plain:h200
AI問診Ubie

将来的には、世界中から医療情報格差をなくして、何らかの理由で病院に行かない・行けない人たちの手助けをします。 そして、医師などの専門家のリソース効率を最大化し、医療の発展に貢献します。 それがUbie株式会社の使命です。

Ubieに入社した理由

きっかけは、Ubie共同代表取締役の一人である久保(通称「くーぼ」)に誘われたことです。 症状から病名を予測するという、すごくシンプルだけど、誰も実用可能なレベルで実現できていないアイデア。 これが、医療や世界中の人々へ貢献するポテンシャルは計り知れません。 前職のエムスリーで医療に携わっていたこともあり、人々の健康を守る、命を守る、そういうことのためにプログラミングをし続けたかったし、 くーぼやその仲間たちと一緒に未来を創っていきたいと思ったのが決め手です。

f:id:ngsw_taro:20180423124948j:plain
左から阿部、長澤、久保

もちろん夢が大きいだけでは、健康を守ることはできません。 Ubieの病名予測は、くーぼや阿部(もう一人の共同代表取締役)の血の滲むような努力の結晶と言えます。 彼らは学生の頃から論文や書籍を地道に読み漁り、予測に必要なデータを蓄積し、アルゴリズムを調整してきました。

そして、優秀な社員と社外の協力してくれている人たち。 彼ら彼女らのスキルやマインド、経歴、人柄が眩し過ぎて自分が恥ずかしいくらいです。 このチームなら大きな夢の1つや2つは叶いそう!というくらい本気で取り組んでいます。 なんか他力本願な表現っぽくなったからあえて言うけど「この俺が来たおかげだぜ!」と言えるように私も全身全霊を捧げて貢献します。

ところで、私とくーぼの出会いは3年前くらい、2人ともエムスリー社員だった頃。 くーぼは学生時にインターンシップとしてエムスリーでマーケティングの仕事をしており、新卒で同社にエンジニアとして入りました。 バイタリティに溢れており、自ら声をかけて様々な人とランチへ行ったり、飲み会を企画したりして、そういうあれの中で私はくーぼと出会ったのだと思います。 その個性的なキャラクターと、新卒の後輩というステータスがあいまって、なんていうか、かわいい存在()でした。 そんな彼が今は私の雇用主になるとは、予想だにしていませんでした。

Ubieでやること

一応、ポジションはバックエンドエンジニアとしての役割を期待されて入社することになったものの、Ubieはまだまだ小さい会社なので、自分の活躍の幅を狭めるようなことはせず、フルスタックで頑張りたいと思います。 バックエンドエンジニアとして期待されている大きな仕事のひとつとして、病名予測APIのリプレースがあります。 現在Ruby on Railsで開発されているものを、Kotlinで置き換え、早い段階から静的型付け言語の恩恵を受けて、メンテナビリティを維持しながらも爆速開発をしていくことが狙いです*1

しかし当面は、Dr. Ubie すなわちAndroidアプリの改善にリソースを割くことになると思います。 すでにKotlinで実装されているアプリで、この機能追加、UX改善、リファクタリングを持ち前のKotlin力とAndroid力で進めていきます。

将来的には、技術者としてUbieをリードできるような存在になりたいです。

まとめ

やっぱり医療って大事なのでUbieという会社に入って偉大なるジャーニー...
未来へのジャーニー...

One more thing...

We're Hiring ! このジャーニーには仲間が必要だ!

www.wantedly.com

*1:実際には、まだどういう技術を使うかも決まっていません。検討するのも楽しみです。