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

Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 有限状態マシン(finite state machine: FSM)をクリアしましょ。とにかくクリアしましょ。 関数型パラダイムとFSM はじめてなElixir(7)に書いたことの繰り返しです。「関数型言語でFSMってどうよ」って思ってます。 FSM用のモジュール とわいえ、表現できないことには仕事にならないのでやるっきゃない。そこで @nishiuchikazuma さんに愚痴ると erlang になんかあるとの情報。どれどれ。 gen_fsm モジュール (erlang) ググるとこんなのが出てきました。 Finite State
はじめに この記事の発端は,ピュアElixirとElixir+Rustlerの実行速度がどれくらい違うのか,ベクトル演算を行うコードで比較してみようという感じで書かれています. シリーズとしてはElixirありきでRust(Rustler)を使う人をメインに据えています. 今回は Rust, Rustler の仕様について触れていきます. 開発環境 OTP-21.0.9 Elixir(1.7.3) Rustler(0.18.0) Rust(1.28.0) 事前調査と方針 Rust で行列演算を行うライブラリはすでにいくつかあります. Rusty-machine (rulinalg): Machine Learning library for Rust ndarray : Arrays inspired by numpy. nalgebra : Low dimensional linear
今回はプログラミング環境を整えます。 なんか先週末頑張りすぎたせいか前頭葉が痛いような気がしますし、楽に楽に… なお、繰り返しますが、私自身、初学者です。良い子は真似してはいけません。 これまでの環境 私は 11インチの MacBook Air (MacOS 10.13.6) を使ってます。これ、フライトなんかで前の方がリクライニングをガッツリしてきたときにぶつからない大きさなんで重宝してます。でも、いまは売ってないんですよね… 11インチの MBA は。 さすがにこれだけだと画面小さくて苦しいので、自宅と職場には Cinema Display を置いて、でかい画面で作業してます。「プログラミングElixir」は書籍と Kindle 版と両方購入してまして、kindle 版は移動中にも使えるようにと買ったのですが、kindle で読むと字が小さすぎてつらすぎです。結局 Cinema dis
はじめに ZACKYこと山崎進です。 整数の加減乗算のオーバーフローを検出する方法がわかりましたので,報告します。 「ZEAM開発ログ 目次」はこちら 整数のオーバーフローを検出する方法 __builtin_*_overflow という関数を使います。 符号付き64ビット整数だったら,__builtin_saddl_overflow になります。 ドキュメントはこちら。 Clang Language Extensions — Clang 4 documentation C言語のコードはこんな感じです。 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
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? ようやくそもそもやりたかったIoTに突入します。 先週末の無限リスト遊び はじめてなElixir(6) は脱線しすぎました。 注: 2019.02.16 この記事をベースに Elixir を使うようになった経緯 〜電力システム制御の現場から〜 という記事を書きました。こちらもご参照ください。 背景 次に行く前に自分のやりたいことを整理しておきます。 なぜElixirか 仕事で制御モノを作ったのですが、まあ今どきですから、マシンの観測データをクラウドに打ち上げたり、ネット側で操作したらマシンに伝わってよろしく動いたり止まったりするようにし
ってな表があるとして、これを全部くまなく覆うように旅をすると、こういう列ができたりします。 $\frac{1}{1}$ $\rightarrow$ $\frac{1}{2}$ $\rightarrow$ $\frac{2}{1}$ $\rightarrow$ $\frac{1}{3}$ $\rightarrow$ $\frac{2}{2}$ $\rightarrow$ $\frac{3}{1}$ $\rightarrow$ $\frac{1}{4}$ $\rightarrow$ $\frac{2}{3}$ $\rightarrow$ $\frac{3}{2}$ $\rightarrow$ $\frac{4}{1}$ $\rightarrow\ldots$ 2次元空間だけど1次元空間にマップできます。どんな分数でもこの列のどこかに出てきます(正に限るけど)。 対角ルートをなぞる これを El
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 を使おうとしても、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く