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

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

京都のKotlin勉強会で発表してきたよ〜 #kotlin_kansai

f:id:ngsw_taro:20160403173624j:plain

昨日、「Kotlin 1.0リリース記念勉強会 in 京都」に参加してきました!

経緯

Kotlin 1.0のリリースを記念して、関西でKotlin勉強会を開催するから登壇してほしいと @backpaper0さんからオファーをいただきました。 Kotlinコミュニティには協力したいし、関西の方々と会いたいし、そもそもKotlin好きだし、二つ返事でお受けしました。

参加者が40人以上という、わりと大きな会で、Kotlinを触ったことのない方も多く参加されると思い、 エバンジェリストの私には、Kotlinの導入部分や全体的な話を期待されているのかと思っていました。 しかし、@backpaper0さんに「初心者向けではなくて、初歩的でもない内容がいい!」と言っていただいたので、 意気揚揚とネタを練りました(発表資料は下に貼ってます)。

旅費の工面

私の所属しているエムスリー株式会社に、交通費・宿泊費を出してもらいました。 弊社でKotlinを開発に使用していることと、ゲストスピーカーとして参加するということで、快諾してくれました。

We're hiringです。 あなたとエムスリー いますぐジョイン

勉強会

会場提供は、株式会社はてな様です。 キレイなオフィス&無料自販機サイコー!

勉強会は大盛況でした。 セッション数は8個で、バラエティに富んだ内容でした。 また、参加者の皆様のノリもよく、登壇者としては非常に話しやすいムードでした。

私は「攻める!ラムダ式禁止おじさん」というタイトルで、 Kotlinでラムダ式を使わずに頑張る方法について発表しました。 スライドはこちらです。

カリー化について(35ページ)、ご指摘をいただいたので、誤解のないように説明します。 この関数invokeは「カリー化を行う関数」ではありません。 スライドにも書いてますが「カリー化してるっぽく見せるための関数」です。 単なる部分適用に他ならないのですが、2引数関数の拡張関数としているのがミソです。 拡張関数ではなかったらinvoke(::minus, 5)のような呼び出しになり、「全然カリー化じゃないよね」となりますが、 拡張関数なので(::minus)(5)と書けて、「カリー化っぽい!」となるわけです(ならない?)。

2引数関数のカリー化を行う関数は、次のように書けます。

fun <A, B, R> ((A, B) -> R).curried(): (A) -> (B) -> R =
        { a: A -> { b: B -> this(a, b) } }

スライドにあるような3.let((::minus)(5))は、3.let((::minus).curried()(5))と書けます。

最後は、Kotlinポーズ(@yusukeさん考案)で締めました。

懇親会(というか飲み会)

関西のエンジニアの憩いの場(?)である、和知さんで懇親会をしました。 @daiksyさんにおすすめビールを教えていただき、@s_kozakeさんとジャンジャン飲みました。 お料理も、いろんな種類のビールも美味しかったです。

乾杯の様子。

京都観光

勉強会の翌日(今日)は、京都を観光しました。 中学の修学旅行以来だったので、すごく楽しかったです。 桜がキレイだった!

清水寺からスタートして、近辺を散策しました。 なんか抹茶をタダで飲めたのラッキーでした。

おわりに

運営スタッフの皆様、会場提供のはてな様、登壇者・参加者の皆様、ありがとうございました! すごく楽しかったです!(関西には良い思い出しかないッ!) 次回もできれば参加したいです!

(Special Thanks: @yusukeさん、@s_kozakeさん、@tan_go238さん。 懇親会やその後に、特にお世話になりました。ありがとうございました!)

Kotlin Birthday Party を開催したよ〜 #jkug

f:id:ngsw_taro:20160226235729j:plain

はい、本日、2月26日に開催しました!

kotlin.doorkeeper.jp

めっちゃくちゃ楽しかったです!!!!!

私が発表したスライドです。 Kotlin1.0のリリースまでの歴史を振り返りました。 やはり、Kotlinは発表当初から"pragmatic"を一貫しているのが素晴らしいと思いました。

KotlinでJUnitするためのライブラリつくったよ〜

作りました。

なぜか?

RobolectricでKotlinしたかったんですが、JUnit(というかhamcrest)が使いづらくて。。

と言っても、1つだけ。

assertThat(actual, `is`(expected))

この`is`、すっごくイケてないw

isってKotlinでは予約語なので、`で括ってやる必要があるのです。

で、作りました。

github.com

その名もknit(ニット)。

かわいいし、字面が Kotlin + JUnit な感じを出しているので気に入っています。

このknitによって、先ほどのコードは次のように記述できます。

actual.should be expected

わぁ、かわいい。

他にもいくつかの便利なAPIを用意しています。

よかったら、コードを読んでみてください。あと☆ください。かわいいアイコンもつくって欲しい。

#DroidKaigi でKotlinの発表してきたよ〜2016

f:id:ngsw_taro:20160219140057j:plain

2月18日、19日に開催されたDroidKaigi 2016に行ってきました。 19日には、50分枠でKotlinについて発表しました! スライドは、最後に載せておきます。 動画は後日公開されるようなので、チェックしてみてください。 運営のみなさま、ありがとうございました〜!!

CFP

講演応募は一番乗りでした。 しかも、かなり気合の入った内容で応募しました。 前回のDroidKaigiでKotlinの導入的な話をしたので、 今回はもっと実践的なもの、かつ私ならではの内容になるように意識しました。

発表

15日のKotlin 1.0リリースが影響してか、参加者のKotlinに対する関心の高さが伺えました。

何回やっても緊張はするものですね。 言葉がすっと出て来ないことが何回かあったし、言い間違えもありましたが、 早口にならず、丁寧にしゃべれたんじゃないかなと思います。

反省点は、少し難しい内容になってしまったかな、というところです。 いや、正確には、対象者や前提知識をもっとアナウンスすべきでした。

再演のご依頼とかあればお気軽にどうぞ!!

懇親会

寿司、おいしかったです。 いろんな人とお話しできました。 三日三晩飲んでました(レセプションパーティー含め)。 かんぞうだいじに!

スライド

英語、あるいは技術的な誤りがあったら、ご指摘いただけると嬉しいです。 今回、英語スライドに挑戦してみましたが、日本語スライドと比べると公開したあとの反響が少ないような印象を受けました。 実際はどうなんだろうか。。