めも
ネット上の CSV データを、Req パッケージを使ってダウンロードし、NimbleCSV でデコードしようとしていたのですが。 hex.pm hex.pm 二つのパッケージをインストールして、Req のレスポンスのボディを NimbleCSV でデコードしたら失敗し、ボディがテキストデ…
Elixir には演算子を再定義できる機能が備わっています。 https://hexdocs.pm/elixir/operators.html#custom-and-overridden-operators defmodule Foo do def lhs + rhs do String.to_integer(Integer.to_string(lhs) <> Integer.to_string(rhs)) end end 普…
ちょっとした Web サーバが欲しくなったときに使えるコードの覚え書きです。 基本の形は Plug のドキュメントに書かれている通りです。 hexdocs.pm 任意の Content-Type のレスポンスを返せるように :mimerl を使って Content-Type を設定するようにしたのが…
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 …
ファイルをアップロードするときに利用する input タグ <input type="file"> ですが、ファイルを選択した時点でブラウザ上で画像データを取得することできることを利用してプレビュー表示させる方法です。 過去に使ったことがあったんですが、件のコードにしか情報がなかったの…
仕事で PDF をブラウザのページ中に埋め込んで表示したいことがあり、そのときに PDF.js を利用しました。 のちのち再び使いたくなったときのために、骨格を抜き出してまとめたものです。 サーバには Elixir の Phoenix framework を使っていますが、ほぼ静…
#ifndef __JOIN_H__ #define __JOIN_H__ #include <sstream> #include <iterator> template<class Iterator> std::string join(Iterator begin, Iterator end) { std::ostringstream io; for(Iterator i = begin; i != end; ++i) { io << *i; } return io.str(); } template<class Iterator, class Sep> std::string join(I…</class></class></iterator></sstream>
いまさらなのですが。 Phoenix app の開発時に、コードを更新したときに自動的に再読み込みをおこなうしくみを file_system というパッケージが担っているということを知りました。 file_system | Hex ということなので。 file_system を使ってファイルの更…
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 を使って SMS を送信する機会があったので、送信にかかった利用金を CloudWatch Metrics で取得するコードを Ruby で書きました。その覚書。 Amazon SNS を使用した CloudWatch トピックのモニタリング - Amazon Simple Notification Service Class: Aws…
動機 Rails で動的に要素を更新するページを作りたい 反 JavaScript 勢としては、JavaScript のコードをできるだけ書かずにすませたい 今回の解決策のメリット サーバサイドでレンダリングするので、View のテンプレートを利用できる 今回の解決策のデメリッ…
事の起こり NIF (Native Implemented Functions) を含むパッケージを escript で利用しようとしたのですが。 ビルドした実行ファイルを実行しても NIF のライブラリファイルを読み込めないとエラーになり。 検索してみたらこのとおり。 Unfortunately that's…
リリースするアプリケーションでは、実行環境に依存する情報をコード内に抱え込まないように、環境変数から設定を取得することが多いと思います。 Elixir では設定情報を config/config.exs に書くことが多いのですが、このファイルはビルド時に読み込まれる…
前回の続きです。 前回、「バージョン 0.1 が公開され…」と書いたばかりなのに、今回の記事を書くまでの十日足らずの間にバージョン 0.2 が公開されてしまいました。 それはそれとして。 今回は Phoenix.LiveView の app で subscribe と broadcast を使って…
先月末にバージョン 0.1 が公開され、Hex からインストールできるようになりました。 これを機に Phoenix.LiveView に挑戦です。 Phoenix.LiveView この記事では、app 作成から LiveView で表示を動かすまでの作業を、ただ淡々と書いてゆきます。 準備 適当…
例えば右のように 11001010(2) = CA(16) を 1111000011001100(2) = F0CC(16) に Elixir で展開するための覚書です。 Elixir の内包表記は for Elixir にも内包表記があります。他の関数型言語とくらべて内包表記っぽくない表記と感じましたが、意味するとろ…
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}…
Erlang/Elixir はバイナリのパースが得意ということで。 ローマ数字で書かれた数をパースする関数を書いてみました。 defmodule RomanNumerals do @moduledoc """ Documentation for RomanNumerals. """ def parse(roman) when is_binary(roman), do: parse(…
Elixir で GenServer, Supervisor, mix deps.get で取得したパッケージの Application の起動順について調べたのでそのまとめ。 GenServer GenServer.start_link/3 のドキュメントに次のように記述されています。 To ensure a synchronized start-up procedu…
Elm のイベント用の関数は onClick など主だったものはライブラリで用意されていますが、それ以外のイベントは on 関数を利用して自分で合成する必要があります。 on - Html.Events - html 1.0.0 以下、合成方法の覚書です。 mousemove イベントをハンドリン…
つまりこうゆうことです。 探した範囲でははっきりとした情報が見つからなかったので、めも。 このようなモデルがあるばあい、 class Article < ApplicationRecord has_one_attached :image end たとえばこのようにすることで storage にデータを格納できま…
Elm に手を出しました。 mousemove のイベントハンドラを使うのに MouseEvent の JSON をパースする必要があって四苦八苦したので、明日の自分のために JSON のパースの仕方をメモっておきます。 後日イベントハンドラについても書く予定。 パーサを書く Som…
最初に。 昨年 2018 年 6 月に Ecto の使い方について書いていたのですが、書きかけのまま放置しているうちにメジャーバージョンが上がってしまい、最新の 3.0 ではここに書いてある内容が当てはまらなくなるという事態になりました。なにより sqlite_ecto2 …
Logger の backend を書いたときに利用した gen_event について調べたので、その覚書。 Elixir の Logger の custom backend を書く gen_event とは Erlang が標準で提供しているモジュールです。 イベントをハンドリングする仕組みを提供してくれます。 Erl…
もうちょっと簡単に書けるんじゃないかという気がするのですが、とりあえず忘れないうちに。 defmodule Combinatorics do def permutation(list), do: permutation(list, Enum.count(list)) def permutation(_, 0), do: [[]] def permutation(list, n) do li…
Elixir の Plug を使って HTTP サーバのモックを作る覚書です。 ドキュメントに詳しく書かれていますので、詳しい話はこちらを参照してください。 Plug – Plug v1.6.2 プロジェクトを用意する 新しいプロジェクトを作ります。 起動時に自動で Plug のアプリ…
複数のデータに対して、同じ処理を適用する場合、Task.Supervisor.async_stream を利用すると、個々の処理を並列で実行してくれます。CPU を存分に酷使してくれます。 Task.Supervisor.async_stream/4 Task.Supervisor.async_stream/6 defmodule Sample do r…
Q Elixir でキューを利用したいときは? A Erlang に queue モジュールが用意されているので、それが使えます。 1..10 |> Enum.reduce( :queue.new(), # 初期値として空のキューを用意 fn i, q -> :queue.in(i, q) end) # キューに値を追加する |> Stream.un…
Elixir でコードを書いていて、Ruby の Enumerable#each_cons に相当する関数が欲しかったのですが、ライブラリに見当たらなかったので自前で書いて見ました。 結論として、Elixir の Stream モジュールに展開関数 Stream.unfold/2 が用意されていたので、そ…
出力中のログを grep するときは --line-buffered オプションを使う。 $ tail -f foo.log | grep --line-buffered error man コマンドによる説明: $ man grep --line-buffered Force output to be line buffered. By default, output is line buffered when…