2021年01月14日
朝散歩はできないのに夜散歩はできる。一体なぜなんだ…。
今日もお休みだった。けっこうだらだらしてすごした。いや、かなりだらだらしてすごした。なんとか本は一冊読み終わったのでギリギリセーフ。
Elixirについて1ミクロンだけ学んだ。
https://qiita.com/Tsuyoshi84/items/0782c4a288cdb5d55f6a
+
や-
みたいな算術演算子や==
みたいな論理演算子はKernel
に定義されてるので、それを明示的に書けばパイプラインの中で呼び出せる。
iex(1)> 5 |> Kernel.+(10) |> Kernel.-(4) |> IO.puts()
11
:ok
iex(2)> 5 |> Kernel.==(5) |> IO.puts()
true
:ok
iex(3)> 5 |> Kernel.==(4) |> IO.puts()
false
:ok
iex(4)> 5 |> Kernel.>(4) |> IO.puts()
true
:ok
iex(5)> 5 |> Kernel.<(4) |> IO.puts()
false
:ok
あとパイプランでは匿名関数も使える。
iex(12)> 5 |> (fn x -> x * 3 end).() |> IO.puts()
15
:ok
iex(13)> 5 |> (&(&1 * 3)).() |> IO.puts()
15
:ok
こういうこともできる。ある範囲内かどうかをさっとチェックしたいときとか。でもここまでやると匿名関数の利点がなくなってかえってわかりづらい。
iex(14)> 5 |> (&(&1 >= &2 && &1 <= &3)).(1, 10) |> IO.puts()
true
:ok
iex(15)> -1 |> (&(&1 >= &2 && &1 <= &3)).(1, 10) |> IO.puts()
false
:ok
iex(16)> 11 |> (&(&1 >= &2 && &1 <= &3)).(1, 10) |> IO.puts()
false
:ok
今日少し気になったことがある。1つの対象を複数のデバイスでセンシングするとき、各デバイスからの計測データをどうやってうまい具合にマージするんだろう。 例えば1人の人間の体温を10デバイスで測ってるとき、デバイスAは36.5℃といってるけどデバイスBは36.1℃といっていて、デバイスCは…、みたいに、ある程度ブレたりする(対象までの距離だったりの要因とかで)だろうけど、それらのデータが送られてきた中央は最終的に対象の体温をどうやって決定するんだろう。単純化して体温を例に出したけど別に他の何かでも同じ。近い将来もっとたくさんのデバイスが身の回りを取り囲むようになって、何かについて計測されたデータが複数ある時にそれらの最終的な統合ってどうするんだろう。なんか単純に平均とるのかもしれないし別に統合しないのかもしれない。気にはなったけど特に調べてはいない。あとなんかこういうことって既に同じ構造になってるものがありそうで「あーあれもこういう感じだよね、そっかああやってた」となりそうなんだけどパッとは思いつかなかった。