時間のかかる処理を複数実行したいとき、各々の処理にプロセスを起動して並行に実行することがあります。 しかし、同じ 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 が終了時に送信するメッセージを受け取ればよい、と…
動機 AWS のリソースの多くは key-value の組みをタグとして設定できるようになっているのですが。 例えば EC2 インスタンスを取得する aws-sdk のメソッド Aws::EC2::Client#describe_instances のレスポンスは次のようになっています。 resp.reservations[…
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 のアロケータを利用するので、確保したメ…
かつてセルラオートマトンに魅了されていた時期がありまして。 熱を上げていた時期はそれほど長くはなかったのですが、その後も伴奏のように背景でずっと鳴り続けていました。 最近、セルラオートマトンの新しい本を手に入れて、再び熱が上がってきています…
先日、仕事中で。よいプログラマであるために心に留めていることをプロジェクトのメンバに話す機会がありました。 よくあるためにと意識するものは多々ありますが、かつて伺ったこの話がいつもついて回っています。 自己の責任と能力を的確に認識し…個人とし…
動機 表示領域に対して、表示したいテキストが長い場合に、はみ出す分を省略表示するスタイルを指定する方法が CSS にはあります。 こんな感じ。 これを、省略表示されたばあいに、マウスオーバーで全体をポップアップ表示しよう、という試みです。 動機 1. …
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…
要素に適用するコードを再利用する、Alpine.jsで。 初期のリリースでは、HTML の中にデータやコードを埋め込むスタイルだった Alpine.js ですが、v3.0 以降はその分離と再利用のためのしくみが整備されてきているようです。 今月になって新しいしくみが提供…
「元のCSVファイルから特定の条件の行だけを抜き出した新しいCSVファイルを作成する」という仕事中の話題から。 Ruby Rubyでしたら、不都合がない限り標準添付のcsvライブラリを利用すると思います。 docs.ruby-lang.org onliner 「ファイルから読み込んで、…
日ごとの更新件数をEctoで集計したいとき データベースへは時刻(日時)で記録しておき、利用するときに日付単位で集計したいときがあります。 例えば更新の頻度を日付単位で集計したいばあい、次のような SQL になると思います。 select date(updated_at) a…
ファイルをアップロードするときに利用する input タグ <input type="file"> ですが、ファイルを選択した時点でブラウザ上で画像データを取得することできることを利用してプレビュー表示させる方法です。 過去に使ったことがあったんですが、件のコードにしか情報がなかったの…
先の日曜日、2021-09-26 に Phoenix 1.6 がリリースされました! www.phoenixframework.org …が、なぜかブログ記事の日付は August 26th, 2021 。 今回も目玉はいくつかあるのですが、その中でも気になる存在が HEEx 。 新しく追加されたシジル ~H を使って…
記事にするのが遅くなりましたが、6 月に Alpine.js が 3.0 にメジャーバージョンアップしました(ちなみに 2021-08-29 現在の最新は 3.2.4)。 alpinejs.dev 色々と改善されていますが、個人的に一番大きな利点はロジックをグローバルスコープに公開しなく…
仕事で PDF をブラウザのページ中に埋め込んで表示したいことがあり、そのときに PDF.js を利用しました。 のちのち再び使いたくなったときのために、骨格を抜き出してまとめたものです。 サーバには Elixir の Phoenix framework を使っていますが、ほぼ静…
昨年の 10 月に Discord Webhook で Elixir からファイルを POST する方法を記事に書きましたが、その Ruby 版です。 テキストをPOSTする テキストのみの場合、net/http の Net::HTTP.post_form メソッドを使うことで簡単に POST できます。 パラメータとし…
以前購入した 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 で利用す…