やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

Erlang

【Elixir】無名関数で気軽に再帰的にメッセージの送受信を実装する

Elixirでの並行処理 Elixirでは並行処理を行うためにアクターモデルに従ってプロセス間同士でメッセージを送受(メッセージパッシング)し合います。 アクターモデルとは並行処理を効率よく実装するための手法の一つです。Elixirにおいては、アクター(軽量プロ…

【実装コード有り】銀行家のアルゴリズムの実装と検証

今更作った理由 たまたまgoogle scholarで並行処理に関する資料を眺めていたらダイクストラ法で有名なエドガー・ダイクストラさんの名前を見かけた。自分の中では数学者という認識をしていたが、実は分散コンピューティングの分野で、どのようにシステムの信…

【Elixir/supervisor入門】通常のモジュールに対してsupervisorを定義する

なぜ書いたのか Elixirにおいてプロセスの死活管理に用いるsupervisorについて学習を進めていたが、どれもGenServer、すなわちElixirのbehaviorを用いたサンプルばかりだった。また、そのプロジェクトはmix new --sup project_nameとして生成されるもので、…

【並行処理vs逐次処理】プロセスを事前に立ち上げることによって高速化されるのか【めちゃ速】

前回の話 「並行コンピューティング技法」を読み進める中で「並行和」の実装をElixirを用いて行なった。何とか実装が完了した並行和の処理を複数プロセスを立ち上げてチャンクを分割して実行する並行処理(parallel)と、チャンクを分割せずにメインの1つのプ…

【第17回清流elixir勉強会】Elixirを用いた並行和アルゴリズムの実装

トピック あけましておめでとうございます。1月2月は色々と忙しくて、全く清流elixirにて勉強会を開催できず... 2ヶ月ぶりの開催となりましたが常連の方、新規の方、リモートでの接続、多くの方に参加して頂けました。ありがとうございました。ハッピーター…

【並行コンピューティング技法】第3章のまとめ

前回までのあらすじ 実際に並行処理を記述する際にどのように手法を決めて実装していくのかという話が第2章のメインであった。 並行処理の方針を決める手法は以下の2通りで、第2章ではそれぞれの特徴やマナー、サンプルに触れながら内容が進んでいく。 タス…

【並行コンピューティング技法】第2章のまとめ

前回までのあらすじ 以前から気になっていた「並行コンピューティング技法」を衝動買い。全体の構造を読み解き、どんな知識がこの本から得られるかを考察した。合わせて、第1章を読み、内容を簡潔にまとめた。第1章は大きく以下のような内容を扱っている 並…

【並行コンピューティング技法】全体の構成と得られる知識 & 第1章のまとめ

今回の購入物 前から買おうとは思っていたが、読む時間ないなぁと手を出さずにいた「並行コンピューティング技法」をたまたま立ち寄った本屋にて発見し、思い切って購入。最近、学習に対するモチベーションが下がっているので気持ち新たにスタートするために…

ElixirのString.contains?で第1引数にbinaryを第2引数に日本語ひらがなを与えるとfalseになる理由についての調査報告

事の発端 たまたまElixirでhttp responseのbinary情報に対して、特定の日本語が含まれているかという判定式を記述していたところで、この現象に遭遇した。 iex> body = <<201, 202, 197, ...>> iex> String.contains?(body, "いちご") false 間違いなくbinar…

【第16回清流elixir勉強会】今年のElixirに関する学習を振り返る会

トピック elixir-sr.connpass.com 早いもので今年ももう終わろうとしています。今年度より清流elixirというコミュニティを立ち上げて勉強会を行い今回を含めて合計16回の勉強会を開催することが出来た。幅広い方に参加して頂き、多くの方と知り合うことが出…

【書評】Elixirの歴史を辿るうちに「電話はなぜつながるのか」をふと読んでいた

なぜ読んだのか 【新品】【本】電話はなぜつながるのか 知っておきたいNTT電話、IP電話、携帯電話の基礎知識 米田正明/著posted with カエレバ楽天市場Amazon7net 個人的な興味があって、以前よりElixirというプログラミング言語を学んでいる。このElixirの…

【プログラミングErlang7章より】並行処理とアクターモデルの概念について

並行処理について 人間なら誰でも並行処理を理解している。 この世界は並列だ。 Erlangのプログラミングは人間の思考と対話をモデル化している。 人間はそれぞれメッセージを送ることによって通信し合う独立した存在として動く。 誰かが死ねば、他の誰かが気…

【第15回清流elixir+fukuoka.exもくもく勉強会】Elixirでチャットサーバーを作りながらNode間通信を試す

トピック elixir-sr.connpass.com Qiitaのアドベントカレンダーの執筆したり、業務が忙しすぎたり、PIDの闇にハマっていたりで、少し間が空いてしまいましたが第15回のレポートをまとめました 今回も前回同様に、kogaさんにお声がけ頂きましてfukuoka.exさん…

Elixrのプロセスとは一体何なのか。探索の旅に出てた

今更だけど Node間通信のチャットサーバーを作っている時にふとなぜか、「Elixirでspawnとかした後に返ってくるPIDって一体何なんだ?」と思い立った なぜsend(target_pid, message)とするだけで対象のプロセスにdataを送ることが可能なのだろか。Node間通信…

【メタプログラミング入門】Elixirのマクロに非黒魔術士が挑む

マクロは黒魔術 以前からメタプログラミングという単語を耳にしたことはあり、存在は認知していた。マクロはメタプログラミングを行うための機能、言語という意味で捉えれば良い(マクロ in メタプログラミングという階層になっている) 要するに言語拡張のた…

Elixirでプロセスをspawnで生成してErlangの:random.uniformを呼び出すと全て同じ値になる

何が起こったのか これの実行結果が全て同じ数値になるのなぜ...???https://t.co/DoUBNy6BoJ(1..10, fn _ -> spawn(fn -> num = :random.uniform() IO.puts(num) end) end)— OKB (@sing_mascle69) 2019年10月22日 まず、プロセスを複数立ち上げて並行で処理…