Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

Stream で遊んでみる(ついでに String でも遊んでみる) いやあ、遅延評価は面白い。ということで、はじめてなElixir(2)の続きをやるはずが、ちょっと寄り道して Stream で遊んでみます。備忘録の色彩が強いです。 Haskell: 片っ端から遅延評価 Elixir: 一部が遅延評価 Rust: 全部 Eager Eval ということらしいので、IoT用に時間順序を気にしながら、それでも遅延評価を使いたい向きには… Elixir しかないんじゃないでしょうか?! 無限リストであそぶ @zacky1972 先生のご紹介で [@HirofumiTmamori さんによる「翻訳 Elixirのストリーム」] (https://qiita.com/HirofumiTamori/items/abf9a9478bfc1161000c) を見ながらやってみますね。ただ、これ ver が
static ERL_NIF_TERM asm_1_nif_ii(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { long a, b; if(__builtin_expect((enif_get_int64(env, argv[0], &a) == 0), 0)) { goto error; } if(__builtin_expect((enif_get_int64(env, argv[1], &b) == 0), 0)) { goto error; } if(__builtin_expect((a > LONG_MAX - b), 0)) { return error_atom; } long result = a + b; return enif_make_int64(env, result); error: return
Phoenix で API サーバーを構築すると、基本的に JSON レスポンスに含まれるキーの名前はスネークケースとなります。しかし、JSON レスポンスを扱うクライアント側では言語の都合上キャメルケースを使用したいケースが考えられるでしょう。 これを簡単に実現するのが proper_case です。proper_case は、map のキーをスネークとキャメルの間で相互に変換するライブラリですが、これをPhoenixプロジェクトで使用することで、キャメルとスネークの自動変換を可能とします。 以下の記事では、proper_case を使用した キャメルとスネークに変換方法について説明します。 環境 本記事の内容は、以下の環境で動作確認をしています。 Elixir: 1.7.2 OTP: 21.0.5 API サーバーの用意 説明を簡単にするために、ここでは blogs と comment
Phoenix1.3にはCookieを使ったSession機能が最初から提供されています。ですからPhoenixでマルチユーザのアプリを作るにはSessionを使うのが基本でしょう。前に「Phoenix1.3+Guardian1.0でJWT - Qiita」という記事を書きましたが、順番が逆でした。以下、簡単にマルチユーザシステムのためにSession機能を使って、ユーザ登録やログイン画面を作ってみたいと思います。 1.キャプチャー画面 これから行う設定作業のイメージを明確にするために、出来上がった画面のキャプチャーを貼っておきます。 1-1.User登録画面 パス = /users/new User登録画面です。(yamada userを登録します) 1-2.ログイン画面(未ログイン) パス = /login まだログインしていない状態でログイン画面を表示しています。(yamada us
defmodule Password do def gen(len, l, u, n, s) do if len >= l + u + n + s do base_str() |> Enum.reduce("", & &2<>&1) |> random_stream() |> Stream.reject(&(&1 in ambiguous_chars())) # |> Stream.drop_while(&(&1 in ambiguous_chars())) # 初稿から修正した。こっちではいかんらしい。 |> filter(len, l, u, n, s) |> to_string() else raise ArgumentError, message: "The length must equals to or be greater than the sum of the number
はじめの余談 リアルタイムWebのサーバを構築するために、最初はnode.jsを利用していたのだが、取っつきやすい反面、(一言では言いにくいが)プログラムにどのようなデータがやってくるのかわからない面倒があり、サービスに持ってゆくのに不安があった。そんなこんなで別のものを探った先に Elixir にたどり着いたのだが、これのパターンマッチング最高、自然と想定外のデータが排除されていき、堅牢になるではないか。Erlang だと単一代入の原則で、1回毎に変数名を変えなければならないが、Elixirだと同じ名前でも別の変数だとわかってくれるので、これも最高。関数型プログラミングもこれなら怖くない。 とはいえ、Elixir でのプログラミングにおいて、Hello World 的な簡単な例であれば簡単に情報は得られるが、実際に Web アプリケーションを構築しようとして、Plug を使おうとしても、
はじめに ZACKY こと山崎進です。 前回「ZEAM開発ログ v.0.4.0 型多相かつ型安全なNIFをC言語で書いてみる」から新シリーズということで,型多相で型安全なコード生成について検討しています。今回は生成された LLVM IR のコードを読み解いてみたいと思います。 「ZEAM開発ログ 目次」はこちら LLVM とは LLVM というのは,最近のプログラミング言語処理系のコード生成で広く使われているライブラリです。さまざまな種類のプロセッサのコード生成をすることができます。CPUだけじゃなくて,GPUなんかもできますよ。 LLVM で使われているコードが LLVM IR です。高級言語から LLVM IR に変換するコンパイラを作ってあげれば,LLVM がサポートする様々な種類のプロセッサにコード生成できるようになるので大変ありがたいです。 今回のコードはこちらの GitHub
defmodule Kansuuji do @moduledoc """ Documentation for Kansuuji. """ @units ~w/万 億 兆 京/ @doc """ ## Examples iex> Kansuuji.parse 100 "100" iex> Kansuuji.parse 10000 "1万" iex> Kansuuji.parse 10001 "1万1" iex> Kansuuji.parse 123456789 "1億2345万6789" iex> Kansuuji.parse 100006789 "1億6789" iex> Kansuuji.parse 98765100006789 "98兆7651億6789" iex> Kansuuji.parse 98700100006789 "98兆7001億6789" """ def parse(n
fukuoka.ex代表のpiacereです 今回もご覧いただいて、ありがとうございます ElixirでBDD書けるESpecですが、mix test.watchが効かないため、いちいちコマンド打つのがメンドイのですが、mix test.watchをホンの少しいじれば動くので、deps配下をクイックハックしちゃいます ちなみに、mix test.watchをクイックハックせず、ex_guardを使う方法もあるみたいです お知らせ:Elixirもくもく会(リモート参加OK、入門トラック有)を今月末に開催します 「fukuoka.ex#14:Elixir/Phoenixもくもく会~入門もあるよ」を9/28(金)に開催します 前回は、ゲリラ的に募った「Zoomによるリモート参加」を、今回から正式に受け付けるようになりましたので、福岡以外の都心や地方からでも参加できます(申し込みいただいたら、追っ
(追記)本記事は2022/09/25 に更新しました これまでElixir Ectoについて2本の記事を書いてきましたが、クイックスタート的な記事も書いておきたいと思いました。言葉だけで説明するよりコマンドを打ち込んで説明していきたいと思います。少し離れていると基本的なところを忘れがちなので、自分用の備忘録的な意味合いも強いです。例としてよく使われるであろうコマンドを書きましたが、網羅的な説明はやはり公式サイトを参照するのが良いでしょう。 Ecto.Repo - 公式サイト Ecto.Schema - 公式サイト Ecto.Changeset - 公式サイト Ecto.Query - 公式サイト #0.Ectoの設定 まずはEctoの設定を、実際にプロジェクトを作成しながら行っていきます。mixでpeopleというプロジェクトを作成します。オプションの --sup はこのアプリケーションが
はじめに ZACKY こと山崎進です。今回から micro Elixir / ZEAM の開発に向けて新シリーズです。micro Elixir / ZEAM 構想についてはこちらの資料をご覧ください。 「耐障害性が高くマルチコア性能を最大限発揮できるElixir(エリクサー)を学んでみよう」 「ZEAM開発ログ 目次」はこちら さて本題 今回から新シリーズということで,コード生成について検討してみたいと思います。まず最初は算術演算について型多相で型安全なコードを記述してみたいと思います。 2018/09/11 追記 Dai MIKURUBE さん @dmikurube のツイート 作るもの・作ったものの設計をドキュメント化するときには、「なぜそうするか」「なぜこうはしないか」の理由と問題の背景、それを補助する実験・実測値が一番大事で、設計そのものの詳細を微に入り細に入り記述しておいてもドキ
(追記)本記事は2022/10/23 に更新しました Ecto にはテーブル同士を関連付ける Ecto Association の機能があります。関連付けには以下の3つのタイプが考えられます。 one-to-one one-to-many many-to-many Ecto Association は以下の公式サイトで説明されています。今回はこのガイドを実際に実行し、補足説明を加えていきたいと思います。 Ecto Association Guide 0.Ectoの設定 まずは Ecto の設定を、実際にプロジェクトを作成しながら行っていきます。mix で ecto_assoc というプロジェクトを作成します。オプションの --sup はこのアプリケーションが supervision tree を持っていることを示しています。
defmodule Zundoko do def auto(), do: Stream.repeatedly( fn -> [ "ズン", "ドコ" ] |> Enum.random end ) |> run def run( input ) do match = [ "ズン", "ズン", "ズン", "ズン", "ドコ" ] eol = "キ・ヨ・シ!" input |> Stream.transform( [], fn( item, acc ) -> if List.last( acc ) == eol do { :halt, nil } else if Enum.count( acc ) < Enum.count( match ) do { [ item ], acc ++ [ item ] } else if acc == match, do: { [ eol ], acc ++
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く