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

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

30歳になりました!

f:id:ngsw_taro:20180704112944j:plain

本日、30歳の誕生日を迎えました 🎉

やはり、ひとつの区切り感はありますね。 せっかくなので、僕のこれまでのプログラマー人生について話します。

完全にチラ裏の自分語りです。 ドラマチックな展開もなければ、知見も教訓もありません。 ただ、昔のこと、プログラミングを始めた頃のことを思い出して整理してみたら、自分が初心に返るための便利アイテムになるじゃないかなと思い、 記憶があるうちに書いておきます。

簡単にまとめると

  • コンピュータとその面白さを知った
  • Javaは最高のおもちゃだった
  • 勉強会やコミュニティに参加するようになった
  • マイナーなプログラミング言語と出会った
  • 毎日楽しくお仕事してる

これまでの人生を振り返って、一言で表すと「運がよかった」ですね。 夢中になれるもの、仕事としてやっていきたいものが見つかったのは、とてもありがたいことですが、運とか偶然と言うほかありません。 そして、これも運命の巡り合わせとして、いろんな人と出会いました。 それが自分の人生にものすごくプラスになっていて、感謝しかありません。

では本編を。以降、常体で。

続きを読む

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が好きな人がニヤッとしてくれたら嬉しい。

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

続きを読む