気付けば第70回とキリのいい回数を重ねてきてますね。今回はITビジネスプラザ武蔵のサロンスペースCRITで開催されました。
プログラミングElixir 16章
前回は14章を読んでいたんですが、家で15章を読んだのでこの日は16章の「OTP: サーバ」を進めました。
GenServer
ビヘイビアを使ってサーバを作る- 必要な関数が定義されているので、必要であれば関数をoverride(?)すれば良い
handle_call
とかhandle_cast
とか
- iex からこのサーバーに値を渡して、サーバーの状態を更新することができた
GenServer
にはstateという概念があるっぽい
receive
などを自分で記述しなくて良いので楽
- 作者: Dave Thomas,笹田耕一,鳥井雪
- 出版社/メーカー: オーム社
- 発売日: 2016/08/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
Ruby 2.6.0-preview2 について
先日RubyKaigiがあって参加はできなかったもののTwitterのタイムラインを見ていたところ2.6.0のpreview2がリリースされたと話題になっていたので、ほんの少し見てみてendless rangeについて気になってまとめたものを発表しました。以下発表で使った資料です(markdownで作ってVSCodeのプレビューで見せる簡易なものにした)
https://www.ruby-lang.org/ja/news/2018/05/31/ruby-2-6-0-preview2-released/
2.6.0ではJITコンパイラの導入を含むいくつかの新機能がある。その中で endless range が気になったので触ってみた。
(1..10) # finite range (1..) # endless range
実行環境
2.6.0-preview2
をインストールする。
$ brew upgrade ruby-build $ rbenv install 2.6.0-preview2 $ cd hoge $ rbenv local 2.6.0-preview2
use case 1
arr = ["a", "b", "c", "d"] # => ["a", "b", "c", "d"] arr[1..] # => ["b", "c", "d"] # 配列の特定のインデックスから最後の要素までを取得する新しいやり方 # VS arr[1..-1]
use case 2
(1..).each {|index| ...} # infinite loop from index 1 # VS n = 1; loop { ...; n += 1} 1.upto(Float::INFINITY) {|n| ... } 1.step {|n| ...}
use case 3
["a", "b", "c", "d"].zip(1..) # => [["a", 1], ["b", 2], ["c", 3], ["d", 4]] ["a", "b", "c", "d"].zip(0..) # => [["a", 0], ["b", 1], ["c", 2], ["d", 3]]
and more
(1..).class # => Range (1..).size # => nil # 期待される値については https://bugs.ruby-lang.org/issues/14699 で議論されている模様 (1..).take(10) # => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (1..).step(2).take(10) # => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] (1..).map {|n| n * n }.take(10) # compute infinitely... # Enumerator::Lazy と組み合わせると遅延評価できる (1..).lazy.map {|n| n * n }.take(10).force # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] (1..).lazy.select {|n| n % 3 == 0 }.take(10).force # => [3, 6, 9, 12, 15, 18, 21, 24, 27, 30] (1..).lazy.select {|n| n % 3 == 0 }.select {|n| n > 100 }.take(10).force # => [102, 105, 108, 111, 114, 117, 120, 123, 126, 129]
最後の方は遅延評価の話になってしまったけど、Enumerator::Lazyモジュールの存在を知らなかったので勉強になりました。(発表ではEnumerableと紹介してしまったのでここで訂正します)
その他
- AWS summit / Civic Tech Forumの参加報告
- Civic techによって解決してる事例は結構あるけど、その情報があまりない(検索しづらい?)のでカタログ的なサイトがあればいいのではという話
- Promiseおよびasync/awaitのハマりポイント
- どこで非同期処理を待つ(await)のか、同期処理との共存あたりの話だった
- 以前Promiseのmapやシーケンス化についてcoというライブラリを使ってたけど、async/awaitが出てきてもう役割は終えたのかな
It is a stepping stone towards the async/await proposal.
懇親会
こちらの中華料理屋で飲み食べ放題だった。中華料理の食べ放題って凄い。そういえば横浜中華街でも食べ放題コースあった気がするので中華料理屋業界では一般的なのかな?
食べるのに夢中になってしまい写真はこれだけ...w 店内でワールドカップ中継が流れてたので話に集中できませんでした。餃子は美味しかったけど黒酢があればもっと良かったなあ。