Elixir
時間のかかる処理を複数実行したいとき、各々の処理にプロセスを起動して並行に実行することがあります。 しかし、同じ GenServer プロセスに対して GenServer.call/3 で呼び出してしまうと、GenServer.handle_call/3 で処理が順番待ちになってしまい並行し…
ウェブアプリケーションを作っていると、表示する画像を動的に生成したいケースに遭遇します。 探してみると画像ファイルを生成するツールやライブラリは見つかるのですが、ウェブアプリケーションでは画像データを HTTP のレスポンスとして送信できればよい…
Elixir Logger に Erlang/OTP logger がやってきた およそ半年前、1 月にこのような記事を書きました。 blog.emattsan.org ログローテーションなどを装備したファイル出力を可能にするハンドラが OTP 21.0 で装備されていて、それを Elixir から利用しようと…
ちょっとした Web サーバが欲しくなったときに使えるコードの覚え書きです。 基本の形は Plug のドキュメントに書かれている通りです。 hexdocs.pm 任意の Content-Type のレスポンスを返せるように :mimerl を使って Content-Type を設定するようにしたのが…
背景という名の釈明 アイテムを一覧表示する、まずは手動で lib/my_app_web/live/item_live.ex lib/my_app/item.ex lib/my_app_web/router.ex 実行 アイテムを一覧表示する、今度は自動で assets/js/app.js lib/my_app_web/live/item_live.ex 実行 実は弱点…
Elixir の Web フレームワークである Phoenix Framework に、待望の 1.7 がやってきました。 phoenixframework.org やはり今回のバージョンの最大のポイントは、Controller を用いた静的な View と LiveView のテンプレートが、コンポーネントという形で統合…
数年前に、Elixir の Logger モジュールのカスタムバックエンドを書く、という記事を書きました。 blog.emattsan.org ごく最近になって。 Elixir Forum で Logger の設定の記事を読み、OTP が標準で用意しているハンドラを使えば、バックエンドを書かなくて…
LiveViewでTaskの結果はhandle_infoで受ければよいという話 ElixirWeekly の何号だったか失念してしまったのですが。 LiveView のプロセスで、非同期処理を Task.async/1 で実行したならば、Task.async/1 が終了時に送信するメッセージを受け取ればよい、と…
Phoenix LiveView 0.18 の構文をいじっています。 具体的にはこれ。 hexdocs.pm :if and :for It is a syntax sugar for <%= if .. do %> and <%= for .. do %> that can be used in regular HTML, function components, and slots. For example in an HTML …
Webアプリケーションを開発しているとき、携帯端末での表示を確認したくなるときがあります。 ブラウザのレスポンシブ・デザイン・モードを利用すれば、デスクトップでも見た目の確認はできますが、やはり手のひらの中でどのように表示されるかを知るには、…
ドキュメントを生成した時に、defguard で定義するガードをグルーピングするときの設定について、いつも忘れてしまい自分の以前のリポジトリを見返すことがたびたびなので、こちらの覚書として記録しておきます。 ガードと関数をモジュールに記述した場合、 …
先日のブログに書いた通り、いつ以来かのセルラオートマトンに手を出しています。 そのときの記事の実装では、更新処理に Rust を利用してはいるものの、世代ごとにimmutableなバイト列を生成していました。 Erlang のアロケータを利用するので、確保したメ…
かつてセルラオートマトンに魅了されていた時期がありまして。 熱を上げていた時期はそれほど長くはなかったのですが、その後も伴奏のように背景でずっと鳴り続けていました。 最近、セルラオートマトンの新しい本を手に入れて、再び熱が上がってきています…
ETS とは Ex2ms ETS を Ex2ms で使う いつか読むはずっと読まない:先入観 ETS とは Erlang/OTP には ETS というストレージライブラリが標準で用意されています。 当然 Elixir でも利用できます。 www.erlang.org elixirschool.com ただ、ETS の問い合わせに…
change matcher とは 普段、しごとでは Ruby on Rails を使い、テストには RSpec を利用しています。 RSpec は matcher が充実していて、単純な一致や不一致だけでなく、いろいろなパタンの検証をすることができ重宝しています。 Elixir に標準装備の ExUnit…
日ごとの更新件数をEctoで集計したいとき データベースへは時刻(日時)で記録しておき、利用するときに日付単位で集計したいときがあります。 例えば更新の頻度を日付単位で集計したいばあい、次のような SQL になると思います。 select date(updated_at) a…
先の日曜日、2021-09-26 に Phoenix 1.6 がリリースされました! www.phoenixframework.org …が、なぜかブログ記事の日付は August 26th, 2021 。 今回も目玉はいくつかあるのですが、その中でも気になる存在が HEEx 。 新しく追加されたシジル ~H を使って…
仕事で PDF をブラウザのページ中に埋め込んで表示したいことがあり、そのときに PDF.js を利用しました。 のちのち再び使いたくなったときのために、骨格を抜き出してまとめたものです。 サーバには Elixir の Phoenix framework を使っていますが、ほぼ静…
以前購入した Raspberry Pi 用のタッチスクリーンを Elixir から利用する方法をまとめましたので、ご報告がてらの記事です。 Quimat 3.5インチタッチスクリーン Raspberry Pi ディスプレイ TFT LCD モニタ HDMI GPIO端子 保護ケースキット Raspberry Pi 3 2 …
Elixir でビット操作を行うコードを書いたんですが、使うべき関数やガードで混乱しそうになったので、明日の自分のためにまとめてみました。 ガード パタンマッチング 長さとサイズ 型 やりたかったこと いつか読むはずっと読まない: ≥ 1.6 ガード is_binary…
defmodule PNG do @moduledoc """ PNG イメージを作成します cf. https://en.wikipedia.org/wiki/Portable_Network_Graphics """ @magic_number [0x89, "PNG", 0x0D, 0x0A, 0x1A, 0x0A] @width 32 @height 8 @depth 8 @color_type 3 # indexed @compression_…
Erlang には、 ASN.1 で記述されたデータ構造のコンパイルと、エンコード/レコードをおこなうライブラリが標準で用意されています。 erlang.org ja.wikipedia.org かつて通信機器の開発が仕事だったころにあつかっていたことを思い出しつつ、Elixir で利用す…
結論: Vec<Term<'a>> 型にデコードするとよい 実例 Rustler を導入する NIF の雛形を生成する Rust のコードを編集する NIF をマウントする Elixir のモジュールを作成する コンパイラとパッケージを指定する 実行 いつか読むはずっと読まない:ラスト・モンスターに</term<'a>…
temporary_assigns を設定したときの削除問題 実装のアイディア Ecto.Schema の状態を調べる DOM にスキーマの状態を持たせる JavaScript のフックで削除された状態の DOM を削除する Hotwire のことを少し いつか読むはずっと読まない:YOUはSHOCK 動作確認…
C++ のライブラリを Elixir から利用したくなりました。 NIF を使った単純な関数の呼び出しは実装したことがあるのですが、オブジェクトを利用するようなケースは試したことがなかったので、今回調べてみました。 NIF環境の用意 elixir_make counter_nif Mak…
人と直接会う機会がめっきり減り、代わってテキスト、音声、動画を問わずチャットを利用する日々が続いています。 そんなチャット環境を少しでも便利にしようと、Discord の Webhook を Elixir から利用する方法を調べていました。 Discord の Webhook の情…
先日書いた phx_gen_auth とおなじく認証のしくみを Phoenix に組みこむためパッケージ。 phx_gen_auth が認証のしくみを実現するコードを生成するライブラリなのに対し(なので phx_gen_auth 自体はアプリケーション内で利用されない)、Pow はアプリケーシ…
hex.pm 結論 LiveView モジュールの mount/3 関数の第二引数に "user_token" が設定されているので、phx_gen_auth が生成するモジュールに含まれる関数 get_user_by_session_token/1 を利用してユーザデータを取得する。 実例 アプリケーションを用意する $ …
Phoenix LiveView を使って、textarea に入力した Markdown のテキストを逐次プレビューするサンプルです。 Phoenix 1.5 になって簡単に LiveView を利用できるようになり、動的なページを作るのが本当に簡単になりました。 もちろん万能ではないですし弱点…
檄を飛ばす 檄を方々に急いで出し,決起を促す。 「スーパー大辞林」より Phoenx.PubSub は Phoenix の名前空間にありますが Phoenix のプロジェクト以外でも利用できます。 バージョンが 2 になってシンプルに扱いやすくなったということで素振りをしてみま…