生涯未熟

生涯未熟

プログラミングをちょこちょこと。

Elmハンズオンに行ってきた

最近ある方がElmを猛プッシュしているので、Elmハンズオンに行ってきました。

elm-jp.connpass.com

f:id:syossan:20180923143335j:plain

togetter.com

Elm is 何?

Elmはウェブブラウザベースのグラフィカルユーザインタフェースを宣言的に作成するためのドメイン固有プログラミング言語である。Elmは純粋関数型言語であり、ユーザビリティ・パフォーマンス・堅牢性を重視して開発されている。静的かつ強力な型検査によって「事実上一切の実行時例外が起こらない」ことを売りにしている。 - wikipediaより引用

ってなわけで、WebアプリケーションにおけるUIを担う純粋関数型言語ですね。

The Elm Architecture

ElmにはThe Elm Architectureというアーキテクチャで動いています。

f:id:syossan:20180923142523p:plain

ハンズオンではこれをカウンタアプリケーションだとこう動くよって感じで示してくれました。

f:id:syossan:20180923142939p:plain

UpdateでModelの状態を変更し、変更されたModelを基にViewでHTMLを表示する、って感じですね。

ちなみにこのアーキテクチャを参考にReduxとかも作られたらしいです、しゅごい。

純粋関数型言語

Elmは純粋関数型言語のため、副作用を生むことなくアプリケーションを作成することが出来ます。
初めて純粋関数型言語を触ったんですが、変数を使わず関数のみで書くのはなかなか不思議な体験でした。

例えば、ハンズオン中でも説明があったのですが、 |> という要素も関数というので驚きでした。

ハンズオンの感想

というわけで、ハンズオンですが物凄く丁寧な説明と複数人のメンターの方がいて、初心者の私でもElmが理解できるくらい手厚いハンズオンでした。
資料自体もかなりわかりやすく、これだけ読んでもアプリケーションを作れるくらいに仕上がっています。

gitpitch.com

今回のハンズオンではインクリメンタルサーチを作ってみたのですが、少し悩みながら1h30ほどで動くものが作れました。
早い人では15分ほどで完成しており、元々関数型言語に造形の深い方はスッと慣れることが出来る言語なんじゃないかと。

あと、このハンズオンだけでElmのほとんどの基礎を網羅しており、残りはif文くらいの要素を学べば「Elm完全に理解した」と言えるくらいの学習コストの低さにも驚かされました。

最後に有識者のLTがあったのですが、Elmを使ってこんなのが作れるんだー!という気持ちになれたので最高でした。
飛び入りのLTもあったのですが、まさかの海外Elm勢で更にsoundcloudのエンジニアさんで、しかも物理演算を使ったプログラムを紹介していて3重に驚きでした・・・しゅごい。
その方の発表の中でPrometheusでElmが使われているということを知り、もっと有名なソフトウェアでElmが使われれば流行ってくるのかな?というお気持ちになりました。

github.com

というわけで、めちゃくちゃ勉強になったハンズオンでした!
運営の方々、ありがとうございました!!

Ergo42を買った

最近、非常に肩こりが酷くなって「そろそろ分割キーボードってものに手を出すか」って感じになったのでErgo42を買ってみました。

Ergo42とは?

Biacco42さんが作製された分割キーボードで、こちらにどういうキーボードなのかの詳細が書かれております。

biacco42.hatenablog.com

キットを買って自作するタイプが多い中、組み立て済みのものが買えるようだったので「試しに買ってみるか」というノリで買ってみることに。
購入は以下から出来ます。

tanoshii-life.booth.pm

使ってみて気付いたこと

数日ガッツリ使ってみたのですが、確かに肩こりは楽になった気がします。
もっと使い込んだら正確に分かると思うのですが、数日レベルだとまだ気がするレベルです。

あと、実際に使ってみて分かったことと言えば腕を広げて使うことによって、自然と姿勢が良くなるってことですね。
結構気付くと猫背気味になる人間だったのですが、肩幅くらいまで広げて使っていると猫背だと逆に使い心地が悪くなるんですよね。
猫背気味になってしまう方にはオススメかも。

やっぱり慣れるまでは大変

初めての分割キーボード&格子配列なのですが、やはり慣れるまでは結構大変・・・という印象です。
特に今まで手癖のように打っていたログインパスワードなどが全く打てなくなって現在進行系で困っていたりします・・・

あとは我流でキータイプを覚えていたのですが、今までbを右手で打っていたのが間違っていることに気付けました。
なので、こちらも相まって慣れるまでが大変だなぁ・・・と。

けどやっぱり便利

ただ、やっぱり便利だなーと思う場面は多いです。
やはりキーマップを好きにいじれるというのは偉大ですね。

現在、親指にEnterを配置しているのですがこれが凄い快適です。
今までは小指で力強く打っていたのですが、親指で打てることによって小指の負荷がだいぶ減りました。

個人的におもしれーと思っているのがマクロですね。
Cでサクッとコード書くことによって設定した好きなマクロを動かせます。
僕はGopherなのでタイプすることの多い if err != nil {} をキー1つで入力出来るようにマクロを設定しています。

まだまだカスタマイズの余地がある

キーマップもそうですが、まだキーキャップの選定などやらないといけないなーっていうカスタマイズ項目があってワクワクしています。
こういう本当に自分にフィットしたものを作れる、っていうところに惹かれて自作キーボード沼にハマっていくんだろうなぁと朧気ながらに感じております。

あまり沼にハマらないよう、適切な距離を保ってこれから自作キーボードと触れ合っていきたいと思います。

備考:キーマップの変更について

キーマップ変更の際に少しハマったところをメモ。

キーマップ変更に使うavr-gccですが、最初に osx-cross/avr にあるavr-gccを使って試したら以下のエラーが発生しました。

avrdude: ERROR: address 0x8001f8 out of range at line 1058 of .build/ergo42_rev1_default.hex

そこで色々調べたら以下の記事が。

www.reddit.com

どうやら、 leico/avr をtapしてからv8.1のものをインスコして使うといいよ、ということらしく試してみると無事成功しました。

別の情報でv8.2だとまだうまく動かないというのを見かけましたので、困られている方はその辺を調べてみてください。

buildersconに初参加してきたぞ!

というわけで、以前から気になっていたbuildersconに行ってきました。

どんなイベント?

builderscon.io

buildersconではトークに関して技術的な制約はありません。
特定のプログラミング言語や技術スタックによるくくりも設けません。
必要なのは技術者達に刺激を与えワクワクさせてくれるアイデアのみです。

という、何でもありの技術イベントですね。
開催前にCFPが募集され、運営様によって厳正に審査された選りすぐりの技術セッションが楽しめます!

会場は日吉にある慶應義塾大学です。
何気に今回初めて日吉に行きました・・・

こちらメインホール2Fからの素晴らしい眺め👀

f:id:syossan:20180907141651j:plain:w600

どうだったか?

詳しいセッションの感想などは社のブログに書くとして、builderscon全体のザクッとした感想をつらつら書いていきます。

運営様の素晴らしさ

どのカンファレンスも素晴らしい運営様によって支えられていますが、ご多分に漏れずbuildersconの運営様も素晴らしかったです!
今回の初参加にあたってチケット周りとか「あれ?これどうしたらいいんだろ?」って困ることが特に無かったくらい、運営様からのお知らせが公式Twitterアカウント等でされていました。
また、一点分からなかったところがあったのでTwitterで聞いてみたところ即レスポンスが返ってきたのは本当にありがたかったです!

また、途中腕時計を落としたのですがすぐにTwitterでアナウンスされており、それを見て取りに行くという一コマもありました。
ありがたやありがたや・・・🙇

天然のうまい棒

行った人は分かると思うのですが、参加者にはjollyjoesterさんからの天然のうまい棒が振る舞われました。

戦利品の天然のうまい棒(サラダ味・たこ焼き味)

f:id:syossan:20180908001331j:plain:w300

そしてjollyjoesterさんの後継者がいたので、お写真撮らせて頂きました。

f:id:syossan:20180907160426j:plain:w300

大学近くのお食事処

慶應義塾大学があるということで、近くにはお昼ご飯を食べるところが盛り沢山にあります。
最初はランチセッションを狙っていたのですが、人大杉状態でランチが売り切れてしまい泣く泣くお昼を求めに行きました。

近くに「普通部通り」というところがあり、ここには松屋などの有名チェーン店から多種多様な個人店がありました。
どこに行くか迷っていたのですが、「エンジニアなら寿司だろ!」というわけで幸甚寿司さんでお昼を食べることに。

関連ランキング:寿司 | 日吉駅

f:id:syossan:20180907115607j:plain:w300

あと、ご飯食べてると有名エンジニアたちが続々と集まってきて、皆さんビールを頼んでたのが印象的でした・・・🍺

満員スピード

ちょっと残念だったなー、と思ったのが各セッションで満員になるスピードがめちゃくちゃ早かったところですね。
セッション聞き終わって「次のセッション行くかー」と向かったら既に満員になってたり・・・
これはさすがに仕方ないな、とは思うのですが来年はもっと広い会場で開催されることを祈っております!

まとめ

そんなこんなで、色々あったのですが控えめに言って最高でした
懇親会やアフターパーティーに参加できなかったのは残念ですが、来年こそは参加するぞ!
というわけで、2日目も全力で楽しみます!

kafka2.0にした時にShopify/saramaでCRCエラーが出る件

皆さん、Goでkafkaやっとりますか?僕はバリバリ伝説な感じでバリバリやっとります。
というわけで、最近kafka2.0がリリースされましたね。
うちでも使うかと2.0にアップグレードしたんですが、見事にsaramaを使ったGo製のProducer/Consumerが死にました、南無。

突然の死

メッセージ受け取った瞬間、こんな感じで死にました。

2999-19-05T10:39:05.798+0900    error    Failed receive message    {"error": "kafka: error while consuming hoge/0: kafka: error decoding packet: CRC didn't match expected 0x0 got 0xe38a6876"}

あじゃぱ〜。
こりゃ2.0の速にsaramaがついていっておらんなとISSUEを掘りにいきました。

イッシュー

github.com

そうそうこれこれ。
wladhさんが見てくれて解説してくれてますね。

で、問題解決PRがこれ。

github.com

斜め読みするとkafka2.0から導入されたメッセージチャンクのダウンコンバートのせいでオフセットがズレてデコードエラーになったっぽいですね、知らんけど。

メッセージチャンクについてはこの辺の記事が関連。

KIP-283: Efficient Memory Usage for Down-Conversion - Apache Kafka - Apache Software Foundation

解決

なので、とりあえずこのPRを適応すれば動くようになります。
今の所、最新のmaster branchには突っ込まれているので適宜追従しておきましょう。

「Docker/Kubernetes 実践コンテナ開発入門」はコンテナ初心者に最高の本だった

今回ありがたくも初心者枠として「Docker/Kubernetes 実践コンテナ開発入門」のレビューをさせて頂きました!
著者のstormcat24さん、このような素晴らしい書籍に関わらせて頂きありがとうございます🙇

というわけで、本書をご恵贈頂きましたので初心者目線での感想を・・・

どんな本なの?

端的に言うと「知識0から本番環境でコンテナ運用出来るレベルまで引っ張ってくれる」という初心者にとっては神のような本です。

Dockerの歴史などの基礎知識から始まり、Dockerコンテナの操作の仕方、Docker Composeでの複数コンテナの協調動作。
Docker Swarmを使ったアプリケーションの構築、そして皆大好きKubernetesへ・・・ etc...
といった、なかなかボリューミーな構成なのですが、読者のwhyに関してとても丁寧な説明がされており、ボリュームを感じさせないほどスラスラと読むことが出来ました。

あと、とても多くの筆者のコラムが載っており、これがまた非常に良かったです。
初心者の方は是非全て読んで、本筋の知識+αを身に着けるといいかも。
個人的には「Dockerフレンドリなプロダクトばかりじゃない」のコラムをオススメしたいです。
このコラムの内容は是非、君の目で確かめてくれ!

嬉しかったところ

1つ目は、実際にサンプルアプリケーションをコンテナで構築していくスタイルだった、というところです。
文章のみの説明だと「りろんはしってる」状態になって、現場での活かし方があまり分からないという状況になってしまいがちですが、実践的な例をガンガン手を動かして構築していく進行なので、覚えたことを実戦投入しやすく感じました。

2つ目は、会社でコンテナ化を推進しているところなのですがオンプレミスということもあり、「EKSやGKEのようにポイッとk8s対応するのは難しいかなー」と思っていました。
しかし、本書でkubesprayを使ったオンプレミスでのk8sクラスタの構築方法も解説されていて「あっ、オンプレミスでも全然イケるんだ」と気付きになりました。この辺はあまりインターネット上に出てこないような情報だったので、とてもありがたかったです。

コンテナやっていこうな

コンテナ界隈は進化のスピードが早く、この本の内容ももしかしたら1年後には殆どの内容が陳腐化する、という状況も起こるかもしれません。
しかし今読むことで「現在における最新のコンテナ知識」を手に入れ、今後のコンテナ界隈を追従出来るという"楔"を打ち込むことが出来ます。
なので、「DockerとかKubernetsとかよく分からんから勉強するのは後でいいや」とか「インターネット上で色んな情報がアウトプットされていてどう学べばいいか分からない・・・」という人は是非本書で一歩ずつ正しいコンテナ知識を身に着けてみましょう!!

皆、コンテナやっていこうな!

さいごに

著者のstormcat24さんが「本書の裏テーマは、「この本を読めばAbemaTVや筆者の担当するFRESH LIVEやでやっていけるようになる」です。」と仰っていたように、実際の現場で使える知識が満載の本で、控えめに言っても最高でした!
「この本を片手に会社のコンテナ化をどんどん進めていくぞ!」という気持ちにもなれました。

あと、同じくレビューをやっていらっしゃったmponさんの感想が物凄く詳細に書かれていて凄いので、ここまで読んでくださった方は是非読んでみてください!

www.mpon.me