Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
Why? Instrumentation is about collecting metrics for your application. You can collect database query time, response time, basically anything you want. If you have a particular thing to measure, prometheus elixir package makes it really easy to collect metrics for your phoenix app. Even if there isn't anything in particular you want to measure, some prometheus adapters provide you with more granul
eコマースでクレジットカード情報を扱うのは少々大変である。オンライン決済サービスを使えばクレジットカード情報に触れずに決済ができる。 オンライン決済サービスを提供しているサービスはいくつかあるが、中でも Omise はエンジニアには嬉しいREST API を提供していて、かつ様々な言語のクライアントライブラリを用意している。この記事では Omise の Elixir クライアントを使ってAPIの使い方を紹介する。 決済代行サービスを使うと以下のような形で顧客と取引できるようになる。 決済サービスは顧客の口座からマーチャントの口座にお金を送金するには顧客のクレジットカード情報が必要である。従って、事前にクレジットカード情報を渡さないといけないが、セキュリティの観点からマーチャントはクレジットカード情報の非保持化が要求されているのでOmise では以下のような仕組みで顧客のクレジットカードを登
def application do [ mod: {PdfSample.Application, []}, extra_applications: [:logger, :runtime_tools, :pdf_generator] #<- :pdf_generator追加 ] end defp deps do [ {:phoenix, "~> 1.3.2"}, {:phoenix_pubsub, "~> 1.0"}, {:phoenix_html, "~> 2.10"}, {:phoenix_live_reload, "~> 1.0", only: :dev}, {:gettext, "~> 0.11"}, {:cowboy, "~> 1.0"}, {:pdf_generator, ">=0.3.7" }, #<- 追加 ] end iex(1)> source_html = "<htm
はじめに Ectoのchangesetでのバリデーションについては、すでに投稿されている記事がいくつかありますが、 実際のプロダクト開発でよく使うケースを中心に実装のハンズオンを作成しました。 実装の概要は以下です。 Phoenix標準のEEXでユーザー登録を行うWebアプリを実装する。 DBはデフォルトのPostgreSQLを選択する。 Ecto.Changesetで入力チェックを行う。 必須項目チェックの内容をカスタマイズする パスワードの桁範囲、許容文字チェックを行う(パスワードのハッシュ化については別の記事が参考になるので割愛) 電話番号が全角入力されたら自動的に半角変換する emailアドレスが正しい書式かフォーマットをチェックする コード値項目は事前に定義したメンバーと一致するか妥当性チェックを行う。 メールアドレスを業務的なユニークキーとして、重複チェックを行う。 実装の前提
はじめに 本稿は、文系出身の自分が関数型言語をやるにあたり、「この関数の使い方わかりにくいな!」と思った内容を文系にもなんとなくわかる(理論とか内部のアルゴリズムは気にしない)Tipsとして残すことを目的としています。 誤用、説明不備に関する指摘大歓迎です。 情報工学的にはこう説明すべき!みたいな高尚な話はスルーします。 今回はElixirでListのsortが必要になりEnum.sort()の公式ドキュメントを読んだがよくわからなかったので色々試してみました。 結論 結論としては Enum.sort(list, fn(x, y) -> 条件式 end) と書いた場合、 「条件式の結果がfalseの場合に前後(xとyの要素)を入れ替える」 と理解すれば使い方としてはOKかと 色々やった結果 サンプルmapリストの準備 iex(81)> map1 = %{name: "map1", key1
はじめに はじめてElixirを(3ヵ月だけ)触った時の勉強メモを書いています。初心者向けの内容です。 普段は主にPythonを使っているのでPythonと比較したりします。 Elixirとは Elixirは関数型言語に分類されるプログラミング言語で、Erlangの仮想マシン(BEAM)上で動作します。 Wikipedia 基本データ型 Elixirでは値が不変(immutable)ですが、変数は不変ではありません。 真理値 真理値として小文字で始まるtrueとfalseがあります。 falseとnil以外は真とみなされるので、Pythonと違って0の場合はtrueになります。 アトム(atom) 名前が自身の値を表わしている定数です。書き方は3つあります。 書き方① 例: Hoge, Hoge123, HogeFuga ルール アルファベットの大文字で始まる 2文字目以降はアルファベット
fukuoka.ex代表のpiacereです 今回もご覧いただいて、ありがとうございます 今回は、地味にあるあるなケースで、任意のWeb入力をJavaScriptで表示すると、JavaScriptがエラーを起こし、実行不全を起こすのを、Elixir側で回避するための技をご紹介します お知らせ:LINE Fukuokaで、Elixir MeetUpを8/24に開催します 「fukuoka.ex#13:夏のfukuoka.ex祭=技術のパラダイムシフト」をLINE Fukuokaで、8/24(金)開催です fukuoka.exの1年の活動・実績を総括し、今後の方向性を示す重要なMeetUpでもあるので、どうぞライブでこの場にお立ち会いください https://fukuokaex.connpass.com/event/89472/ 今回のセッションでは、LINEから初のElixir登壇参戦で、ミ
プログラミングは文学である。1つのアルゴリズムにいろんな表現の仕方があり、そこに芸術性を見出すことが出来る。 しかし芸術とはゴミを作ることでもあるのだ。 なにこれ アルケミストの遊びです。ここでは敢えていろんなゴミを錬金してみましょう。 基本的に真似しちゃダメですが、「こんな書き方もできるのか」とか思って調べてみるきっかけになればと思います。 1. if の濫用 defmodule FizzBuzz do def say(n) do if Integer.mod(n, 15) == 0 do "FizzBuzz" else if Integer.mod(n, 3) == 0 do "Fizz" else if Integer.mod(n, 5) == 0 do "Buzz" else n end end end end end for n <- 1..30 do IO.puts FizzB
defmodule Ex do def flatten([]), do: [] def flatten([h|t]), do: flatten(h) ++ flatten(t) def flatten(x), do: [x] end IO.inspect Ex.flatten [] # => [] IO.inspect Ex.flatten [1, 2, 3] # => [1, 2, 3] IO.inspect Ex.flatten [1, [2, [3], 4], 5] # => [1, 2, 3, 4, 5] 恥ずかしながら、なぜこの定義で良いのかずっと理解できなかったのです。 理解できないよりも先行して、なんか気持ち悪いのです。 この気持ち悪さを解消するため、 少し遠回りしながら初心に返り、flatten に歩み寄っていこうと思います。 再帰的に考える 関数型言語には普通、再代入可能
defmodule Acc do def reverse(list), do: _reverse(list, []) defp _reverse([], acc), do: acc defp _reverse([h|t], acc), do: _reverse(t, [h|acc]) def map(list, fun), do: _map(list, fun, []) defp _map([], _fun, acc), do: reverse(acc) defp _map([h|t], fun, acc), do: _map(t, fun, [fun.(h)|acc]) def filter(list, pred), do: _filter(list, pred, []) defp _filter([], _pred, acc), do: reverse(acc) defp _filte
GenServerからping-pongを送る3つの方法 プログラムが外部と接続し続けているとき,ping-pongやheartbeatなどと呼ばれる,外部との接続が正常に行えていることを確認するための通信を一定時間毎に行うことがある. これをGenServerで行うためのイディオムを以下の3つ考えた タイマーを利用して一定時間毎にpingを送る タイマーを利用して通信してから一定時間毎にpingを送る OTPのタイムアウトを利用して通信してから一定時間後にpingを送る まず全てのコードを示し,続いてそれぞれのメリットデメリットを述べる.どれにもメリットデメリットがあり,どれを選ぶといいかは場合によりそうだ. この記事はヽ(´・肉・`)ノログから転載した. 1. タイマーを利用して一定時間毎にpingを送る GenServerドキュメントのReceiving “regular” mess
情報通信の講義の中で出てきたアーランの損失式をプログラムとして作成したくなった時に、友人から「Erlangで作ったら?」と言われたので、Erlangで作りました。 Erlangとは 自分も今回初めてErlangに触れたのですが、ざっくり紹介してみます。 Erlangは通信会社機器メーカーのエリクソンが開発した、並行処理指向の関数型言語です。 他の言語との違いとしては、変数への代入は一度きりで、その変数の先頭は大文字でなければならないという決まりがあります。(小文字だとatomというものになるらしい) また、for文やwhile文が存在しないため、繰り返しの処理は再帰を用いらなければなりません。 アーランの損失式とは アーランの損失式は、下の式で表します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く