エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Pow で認証したユーザを LiveView で参照するときの覚書

先日書いた phx_gen_auth とおなじく認証のしくみを Phoenix に組みこむためパッケージ。 phx_gen_auth が認証のしくみを実現するコードを生成するライブラリなのに対し(なので phx_gen_auth 自体はアプリケーション内で利用されない)、Pow はアプリケーシ…

phx_gen_auth で認証したユーザを LiveView で参照するときの覚書

hex.pm 結論 LiveView モジュールの mount/3 関数の第二引数に "user_token" が設定されているので、phx_gen_auth が生成するモジュールに含まれる関数 get_user_by_session_token/1 を利用してユーザデータを取得する。 実例 アプリケーションを用意する $ …

Action Cable でサーバと通信し、Alpine.js で表示を更新する

Alpine.js です。 軽量で、宣言的で、リアクティブなふるまいを記述できるということで注目されている、ようです。 github.com 既存のフレームワークの Vue.js や React と比べてシンプルで軽量というところが注目点のようなのですが、わたしとしては HTML …

Phoenix LiveView で Markdwon Preview

Phoenix LiveView を使って、textarea に入力した Markdown のテキストを逐次プレビューするサンプルです。 Phoenix 1.5 になって簡単に LiveView を利用できるようになり、動的なページを作るのが本当に簡単になりました。 もちろん万能ではないですし弱点…

Phoenix.PubSub を Phoenix 以外で利用するための素振り

檄を飛ばす 檄を方々に急いで出し,決起を促す。 「スーパー大辞林」より Phoenx.PubSub は Phoenix の名前空間にありますが Phoenix のプロジェクト以外でも利用できます。 バージョンが 2 になってシンプルに扱いやすくなったということで素振りをしてみま…

file_system パッケージを使ってファイルの更新を監視する Phoenix app についての覚書

いまさらなのですが。 Phoenix app の開発時に、コードを更新したときに自動的に再読み込みをおこなうしくみを file_system というパッケージが担っているということを知りました。 file_system | Hex ということなので。 file_system を使ってファイルの更…

Ruby の Enumerable モジュールの使い方の覚書

Enumerable モジュールを使って Fibonacci number を実装する例です。 module Enumerable Fibonacci number - Wikipedia # fibonacci.rb class Fibonacci include Enumerable def each if block_given? n1, n2 = 1, 1 loop do yield n1 n1, n2 = n2, n1 + n2…

AWS SNS で SMS 送信したときの料金を調べる覚書

AWS を使って SMS を送信する機会があったので、送信にかかった利用金を CloudWatch Metrics で取得するコードを Ruby で書きました。その覚書。 Amazon SNS を使用した CloudWatch トピックのモニタリング - Amazon Simple Notification Service Class: Aws…

Railsでサーバサイドで動的にHTMLを更新したいための覚書

動機 Rails で動的に要素を更新するページを作りたい 反 JavaScript 勢としては、JavaScript のコードをできるだけ書かずにすませたい 今回の解決策のメリット サーバサイドでレンダリングするので、View のテンプレートを利用できる 今回の解決策のデメリッ…

Elixir で escript からサーバにリクエストを送る覚書

事の起こり NIF (Native Implemented Functions) を含むパッケージを escript で利用しようとしたのですが。 ビルドした実行ファイルを実行しても NIF のライブラリファイルを読み込めないとエラーになり。 検索してみたらこのとおり。 Unfortunately that's…

Elixir 1.10 のアサーションの改善が、派手さはないけれどありがたい

このあいだ 1.9 がリリースされたと思っていたのに、もう 1.10 がリリースされました。 Elixir v1.10 released - Elixir 1.9 では、Elixir 単体でリリースを構築できるようになったり、config を一新したりと大きな変化がありましたが、それとくらべると今回…

C++ による NIF ことはじめ

使い慣れている言語が C++ なので、ここでは C++ で説明しますが基本的に C 言語でも同じように記述できるはずです。 というか、世の中の NIF の説明は圧倒的に C 言語が多い。 詳細の解説は置いておいて。コードを書いてから呼び出せるところまでを順にたど…

Phoenixの認証をGuardianに護らせる

Phoenix で作成したアプリケーションに、権利のあるユーザにのみアクセスを許可したいばあいに Guardian という Elixir のパッケージを利用して実現する方法の覚書です。 基盤にしている JWT などの技術に今のところ明るくないこともあり、ここでは手順だけ…

黒魔術で Elixir に Ruby を召喚する

まず始めに。 ネタ記事です。 ひさびさのネタ記事です。 ネタプログラミングです。 とはいえ。 黒魔術を使うことはなくても、このようなしくみを知っていると、その知識が役に立つときが来るかもしれません(来ないかもしれません)。 Level 1, Medium: Port…

Phoenixが入ったDocker containerをHerokuに配備する

de・ploy | dɪplɔ́ɪ | 他動詞 1 〘軍〙 〈部隊など〉を展開させる, 〈兵器など〉を配置[配備]する. ウィズダム英和辞典 いまさらなのですが。 Phoenix のドキュメントに Docker container を利用したリリースの手順が追加されていることに気がつきました。 今…

Elixirのreleases.exsの使いどころ

リリースするアプリケーションでは、実行環境に依存する情報をコード内に抱え込まないように、環境変数から設定を取得することが多いと思います。 Elixir では設定情報を config/config.exs に書くことが多いのですが、このファイルはビルド時に読み込まれる…

Phoenix.LiveView 事始め(subscribeとbroadcast)

前回の続きです。 前回、「バージョン 0.1 が公開され…」と書いたばかりなのに、今回の記事を書くまでの十日足らずの間にバージョン 0.2 が公開されてしまいました。 それはそれとして。 今回は Phoenix.LiveView の app で subscribe と broadcast を使って…

Phoenix.LiveView 事始め

先月末にバージョン 0.1 が公開され、Hex からインストールできるようになりました。 これを機に Phoenix.LiveView に挑戦です。 Phoenix.LiveView この記事では、app 作成から LiveView で表示を動かすまでの作業を、ただ淡々と書いてゆきます。 準備 適当…

Elixir でビット列を展開する覚書

例えば右のように 11001010(2) = CA(16) を 1111000011001100(2) = F0CC(16) に Elixir で展開するための覚書です。 Elixir の内包表記は for Elixir にも内包表記があります。他の関数型言語とくらべて内包表記っぽくない表記と感じましたが、意味するとろ…

Timex.format のフォーマットの書式覚書

Elixir で日時を便利に操作する定番のパッケージ timex 。 timex | Hex そこで定義されている Timex.format/2 をいつも忘れてしまいます。 ~N[2019-08-09 01:02:03.456789] |> Timex.to_datetime("Asia/Tokyo") |> Timex.format("{YYYY}/{0M}/{0D} {h24}:{m}…

ローマ数字を Elixir でパースする

Erlang/Elixir はバイナリのパースが得意ということで。 ローマ数字で書かれた数をパースする関数を書いてみました。 defmodule RomanNumerals do @moduledoc """ Documentation for RomanNumerals. """ def parse(roman) when is_binary(roman), do: parse(…

Elixirのプロセスの起動順について

Elixir で GenServer, Supervisor, mix deps.get で取得したパッケージの Application の起動順について調べたのでそのまとめ。 GenServer GenServer.start_link/3 のドキュメントに次のように記述されています。 To ensure a synchronized start-up procedu…

Elm で mouse のイベントを取得する覚書

Elm のイベント用の関数は onClick など主だったものはライブラリで用意されていますが、それ以外のイベントは on 関数を利用して自分で合成する必要があります。 on - Html.Events - html 1.0.0 以下、合成方法の覚書です。 mousemove イベントをハンドリン…

外部で生成したデータをActive Storageでattachしたいとき

つまりこうゆうことです。 探した範囲でははっきりとした情報が見つからなかったので、めも。 このようなモデルがあるばあい、 class Article < ApplicationRecord has_one_attached :image end たとえばこのようにすることで storage にデータを格納できま…

CSSでモーダルを表示する覚え書き

CSS

CSS の :chekced 擬似クラスを利用して表示を制御する方法です。 :checked - CSS: カスケーディングスタイルシート | MDN 参考にさせていただいたサイトです。 ドロワーやモーダルをCSSだけで実現する方法 | HPcode 上記のサイトでは要素を id で指定してい…

Elm の JSON のパースの覚え書き

Elm に手を出しました。 mousemove のイベントハンドラを使うのに MouseEvent の JSON をパースする必要があって四苦八苦したので、明日の自分のために JSON のパースの仕方をメモっておきます。 後日イベントハンドラについても書く予定。 パーサを書く Som…

ActionCable のクライアントも Ruby で書きたい(前篇)〜Opal覚え書き

Action Cable を使いたいときがあります。 Ruby on Rails の app を書いているのですから、サーバもクライアントも Ruby で書くのが自然です。 というわけで。Opal を導入してみました。 Rails app を用意する rails new コマンドで適当な Rails app を作成…

Apex + AWS Lambda + Ruby 覚書

Ruby で書いた AWS Lambda の関数を Apex を使ってデプロイできたので、その時の覚書です。 誤りや認識間違いが混ざっているかもしれません。ご指摘いただけたら幸いです。 Apex – Serverless Infrastructure 仕事ではずっと Serverless + nodejs を使ってい…

Prolog でメモをしながらフィボナッチ数を計算する

いつものように処理系は GNU Prolog です。 コード fib.prolog を次のように用意します。 :- dynamic(fib/2). fib(1, 1) :- !. fib(2, 1) :- !. fib(N, F) :- N1 is N - 1, N2 is N - 2, fib(N1, F1), fib(N2, F2), F is F1 + F2, asserta((fib(N, F) :- !))…

Ectoを使ってデータベースを操作する (v2.2)

最初に。 昨年 2018 年 6 月に Ecto の使い方について書いていたのですが、書きかけのまま放置しているうちにメジャーバージョンが上がってしまい、最新の 3.0 ではここに書いてある内容が当てはまらなくなるという事態になりました。なにより sqlite_ecto2 …