タグ

elixirに関するdai_yamashitaのブックマーク (906)

  • Phoenixガイドラインを読んでみた(7) - Template - - Qiita

    はじめに 前回はViewを見てきました。 今回はテンプレートです。 次回は、Channelになります。 鋳型 PhoenixのTemplateはpre-compiledなので速いです。 PhoenixのデフォルトのテンプレートシステムはEExです。EExでは、RouterやViewのようなファイル生成も行います。 テンプレートは、標準ではweb/templatesディレクトリの下に、Viewの先頭部分と同じ名前のディレクトリを作り、そこに格納されます。 リスト表示 テンプレートで、文字列や数字を記述する例はいままで出てきましたが、リストの値を表示したい場合にはどうすればよいでしょうか。 答えは、Elixirの内包表現(Comprehension)を使うことです。 connに含まれるリストの全キーを表示する例を書いてみます。まずViewです。 defmodule HelloPhoenix.P

    Phoenixガイドラインを読んでみた(7) - Template - - Qiita
  • Phoenixガイドラインを読んでみた(6) - View - - Qiita

    はじめに 前回は、Controllerを見てきました。 今回はViewです。 次回は、ガイドラインのTemplateです。 視界 PhoenixのViewの主な仕事は二つです。重要な方の仕事は、Template(およびLayout)をレンダリングすること。これを行うのは、Phoenix.Viewに定義されたrender/3関数です。もう一つの仕事は、データを取得したりテンプレートにデータを加工する関数を提供することです。 Phoenixは、Controller、View、テンプレートとの間には絶対的な命名規則があり、PageControllerに対してはPageViewが必要であり、Templateはweb/templates/pageディレクトリにある必要があります。 ただし、もし必要であれば、Templateのルートディレクトリは変更することができます。web/web.exに定義されて

    Phoenixガイドラインを読んでみた(6) - View - - Qiita
  • Elixir: AgentとNodeを組み合わせて使う - Qiita

    例えばHTTPのセッション情報のように, 複数の処理にまたいで, 結果を保存しておいて 次の処理の際に引き続き使いたいというような要件は, いくらでもあると思われます. DBを使ってこれらの値を保存しておくこともできるのですが, Elixirにはもっと手軽に使えるAgentというモジュールが用意されています. 使い方は, start関数で初期化し iex(4)> {:ok, count} = Agent.start(fn -> 0 end) {:ok, count} = Agent.start(fn -> 0 end) {:ok, #PID<0.82.0>}

    Elixir: AgentとNodeを組み合わせて使う - Qiita
  • Phoenixガイドラインを読んでみた(4) - Plug - - Qiita

    はじめに 前回は、Routingについてまとめてみました。 今回は、公式ドキュメントのPlugです。 なお、次回は、ガイドラインのControllerです。 消火栓 Plugは、HTTPレイヤー間のさまざまな局面で接続を行うことができる仕様です。 おおまかに関数型Plugとモジュール型Plugの二つの書き方ができます。 関数型Plug Plugとして動作するためには、接続データ(%Plug.Conn{})とパラメータ引数を受け取り、接続データを返す必要があります。 例えば、以下のようなControllerを作成します(関連箇所のみ抜粋)。 defmodule HelloPhoenix.MessegeController do use HelloPhoenix.Web, :controller plug :put_headers, %{content_encoding: "gzip", ca

    Phoenixガイドラインを読んでみた(4) - Plug - - Qiita
  • Phoenixガイドラインを読んでみた(3) - Routing - - Qiita

    はじめに 前回、簡単なアクションを追加してみました。 今回も、Phoenix公式ドキュメントに沿って見ていきます。 なお、次回は、ガイドラインのPlugです。 航路を決めている router.ex Routerは、HTTPリクエストとActionとのマッチング、Channelの制御、Pipelineの定義、RouteへのPipelineセットなどを行います。 Phoenixが生成する初期状態のweb/router.exは、以下の通りです。 defmodule HelloPhoenix.Router do use HelloPhoenix.Web, :router pipeline :browser do plug :accepts, ["html"] plug :fetch_session plug :fetch_flash plug :protect_from_forgery plug

    Phoenixガイドラインを読んでみた(3) - Routing - - Qiita
  • Phoenixガイドラインを読んでみた(1) - Up And Running - - Qiita

    はじめに 前回、Ubuntu16.04にPhoenixをセットアップしてみました。 今回は、Phoenixの公式ガイドラインを見ながら、構成などを確認していきます。 次回はガイドラインAdding Pagesです。 上、および、走ること PhoenixフレームワークのUp And Runningの内容を確認していきます。 確認すると言っても、前回セットアップが終わってますので、以下の手順で最初のページ(localhost:4000)が表示されるようになるはずです。 なお、一部Adding Pagesの内容も先取りしてます。 $ mix phoenix.new hello_phoenix $ cd hello_phoenix $ mix ecto.create $ mix phoenix.server 概念 Endpoint リクエストを処理するための入り口。Plugの管理や、Routerへ

    Phoenixガイドラインを読んでみた(1) - Up And Running - - Qiita
  • 【Elixir】forやEnum.eachの外で作ったList変数に中で要素追加できなくてハマる - Qiita

    forやEnum.eachの中で要素追加してもダメだよって話です。 こんな感じの処理。javaとかphpとかよくやります。 lst = [0, 1, 2] hoge = [] for data <- lst do hoge = [data] ++ hoge end IO.puts List.first(hoge) <> "***" IO.puts List.last(hoge) <> "***"

    【Elixir】forやEnum.eachの外で作ったList変数に中で要素追加できなくてハマる - Qiita
  • Elixir: GenServerという機能 - Qiita

    GenServerとは プログラムを書いていると, 毎回とは言わないものの頻繁に出てくる設計のパターンに出くわすことが良くあります. いわゆるデザインパターンというやつですね. Elixirでは, 様々パターンを実装する上で, 全部開発者が1から実装するのではなく, そのパターンを半分だけ実装した状態のフレームワークを提供し, 開発者は対応するBehaviourを実装したモジュールを用意するだけで, パターンに基づいた実装を完成させることができる仕組みが用意されています. (手前味噌ですが, Behaviourについての解説はこちらを御覧ください) GenServerも, そういったElixirによって用意されたフレームワークの一つです. では, どんな設計パターンを, フレームワーク化しているのでしょうか? それは クライアントプロセスから何らか形式のメッセージを受け取り, メッセージと

    Elixir: GenServerという機能 - Qiita
  • Elixir/Phoenixで並行処理を使って大量のメッセージに対応するBOTサーバーを構築する方法を調査してみました。 - Qiita

    Elixir/Phoenixで並行処理を使って大量のメッセージに対応するBOTサーバーを構築する方法を調査してみました。ElixirbotPhoenix Facebook Messenger PlatformLINE BOTが話題になっていますが、下記の記事でも言及されているように、BOTサーバーとして大量メッセージに対応するには「並行処理」がキモになってきます。 大量メッセージが来ても安心なLINE BOTサーバのアーキテクチャ そしてElixirといえばやっぱり「並行処理」なわけです。ということで「BOTサーバーを効率よく開発するにはElixir/Phoenixってとても良い選択なのでは?」という仮定のもと、色々と検証してみました。 並行処理のコード Elixirでプロセスを起動・管理する方法はいくつも用意されていますが、BOTサーバーの要件的に「状態」を管理する必要はありませんし、

    Elixir/Phoenixで並行処理を使って大量のメッセージに対応するBOTサーバーを構築する方法を調査してみました。 - Qiita
  • Elixir: プロセス間でのメッセージのやり取りの基本的なやり方 - Qiita

    実行結果を見てもよくわからないと思いますが, このIO.putsは別プロセスで実行されているのです. (なお最後の#PID<0.88.0>はspawn関数の返り値で, 生成されたプロセスのIDです) このままでは生成されたプロセスが勝手に処理を実行して終わるだけで呼び出し元のプロセスとのメッセージのやりとりは行えていません. Elixirでは, メッセージを送る方はsend, 受け取る方はrecieveを使うことで, プロセス間のメッセージのやり取りを記述します. 上記のサンプルを, メッセージのやり取りを行うように変えたものが下のコードになります. defmodule GreetServer do def greet do receive do {sender, name} -> send sender, {:ok, "Hello #{name}"} end end end defmod

    Elixir: プロセス間でのメッセージのやり取りの基本的なやり方 - Qiita
  • Phoenix フレームワークと Ember.js を使用した Todo アプリケーションの作成 - Qiita

    https://resolve.digital/blog/posts/creating-a-todo-application-using-the-phoenix-framework-and-ember-js/ を翻訳しました。 翻訳の誤りなどあればご指摘お待ちしております。 我々は常にクライアントに関連する技術に目を光らせています。日は Phoenix と呼ばれるWebアプリケーション・フレームワークを見ていきます。 Phoenix は Elixir (あなたが Ruby を書いていたならば、いくつかの点でお馴染みと感じる、燃えるような早い関数型プログラミング言語)の上に構築されています。 このチュートリアルでは、サーバ上で Phoenix と Elixir を使用して、単純なクライアント-サーバ Web アプリケーションを作成していきます。データストアとして PostgreSQL を使

    Phoenix フレームワークと Ember.js を使用した Todo アプリケーションの作成 - Qiita
  • Erlang and Elixir

    Elixir Meetup #1 in DrecomにてElixirの動作についてIExを例にして話した資料です。

    Erlang and Elixir
  • PhoenixでRedisを使わないPubSubでスケール その2 - Qiita

    その1 前回に続き、今回はPhoenixアプリを使ってPG2でのPubSubを試します。 アプリを用意 自分で用意するのも面倒なので、公式のexampleを使います。 git clone https://github.com/chrismccord/phoenix_chat_example cd phoenix_chat_example mix deps.get npm install

    PhoenixでRedisを使わないPubSubでスケール その2 - Qiita
  • PhoenixでRedisを使わないPubSubでスケール その1 - Qiita

    PhoenixでRedisを使用してPubSubを行う、記事はいくつかありますが、 PhoenixはRedisを使用せずとも標準でPG2を使用したPubSubの機構があります。 今回はそれを使用し、PubSubを試します。 PG2の説明とかいいから早くPhoenix見せろよという方はこちら Phoenixとは Elixir製のWAF. そこそこ速い。 Rails5で導入されるActionCableのような、websocketの機能がある。 PubSubとは websocketで接続しているクライアントに対して、pushを送る機能のこと。 Phoenixで言うと、 channelにjoin(subscribe)しているクライアントに対して、 push(publish)を行う機能。 PG2モジュールとは ProcessGroup2の略。 PGは非推奨。 名前の通り、プロセスのグループを生成して

    PhoenixでRedisを使わないPubSubでスケール その1 - Qiita
  • Elixir: コマンドラインツールを作成する - Qiita

    手順 プロジェクトを作成する エントリポイントとなるモジュールを作成する mix.exsを編集する ビルドを実行する 動作確認をする プロジェクトを作成する エントリポイントとなるモジュールを作成する エントリポイントとなるモジュールは, main/1という関数を含んでいること以外に 特に制約はないようです. 今回は, ネタ元にしたがって, lib/my_cli/cli.exに作ることにします. defmodule MyCli.CLI do @moduledoc """ this is my command line tool module """ def main(argv) do IO.puts "this is my command line tool" IO.inspect argv end end mix.exsを編集する mix.exsを編集し, escriptから先ほど作成し

    Elixir: コマンドラインツールを作成する - Qiita
  • Combining an Ecto Model with an Arc Uploader in Elixir

  • [Elixir]Guardianでログインを固める on Phoenix

    ちょっとしたWebサイトを作ろうとして、Elixirを最近触っていることもあってElixir x Phoenixで構築し始めている最近です。 その中で簡単なログイン機能を追加しようとしたところ、awesome-elixirにてGuardianなる開発途中の認証ライブラリを見つけました。開発者はRack Authenticationのwardenの開発者でもあるのですね。ほー。 試したのは、v0.5.0 Readmeを見ながら作業かなーと思っていたのですが、サンプル実装を公開していることを知り、まずはそこから動かしてみることにしました。 ただ、動かしてみるとPhoenixが0.13.1ベース。 私が今使っているのは0.15.0ベース。 …. ということで、サンプルをPhoenix 0.13.1ベースから0.15.0ベースに書き換えました。開発者の方へPRも投げたので、もしかするとマージされる

    [Elixir]Guardianでログインを固める on Phoenix
  • [翻訳] Elixir ─ 状態はどこにある? - Qiita

    Markus Krogemannさん2016年4月6日付けのブログ記事、Elixir - Where is your state? 1の翻訳です。 関数型言語はよく「状態を持たないのでプログラムの見通しがよくなる」と言われますが、サンプルアプリ以上のことをしようとすると何らかの方法で状態を保持しておかないといけなくなります。Haskellだとこういうときモナドを使うんでしたっけ?ではElixirではどうするか?という件について説明しています。 この投稿では、アクターベースの関数型プログラミング環境で状態を管理する方法として提供されているElixirのAgent抽象化を見ていきます。更にErlang/OTPで実装されているその基礎的要素についても見ていきます。その過程においてTicTacToe(三目並べ)の実装をわかりやすい実例として挙げます。 さて、状態についての問題とは何でしょうか?この

    [翻訳] Elixir ─ 状態はどこにある? - Qiita
  • Addictを使ってPhoenixでお手軽ユーザー認証 - Qiita

    概要 Phoenixにユーザー登録と認証を提供してくれるAddictを使ってお手軽にユーザー認証機能を実装します。 trenpixster/addict: User management lib for Phoenix Framework Addictはユーザー登録、ログイン、ログアウト、パスワードリセット、パスワードリカバリといった機能を提供しており、Railsで言うところのdeviseみたいなものだという認識でいいかと思います。 また、mixコマンドによるジェネレータにより、認証周りのviewテンプレートも生成できるため、お手軽に認証画面を作ることができます。 下準備 まず、phoenixのプロジェクトから作成していきます

    Addictを使ってPhoenixでお手軽ユーザー認証 - Qiita
  • Elixir: Behaviorとはどのような機能なのか? - Qiita

    簡単なロガーを作ってみる 話の枕として、受け取った文字列をちょっと加工して標準出力に出力するロガーというものを考えてみます. コードは至って簡単で, 以下のとおり. defmodule MyLogger do def debug(message) do IO.inspect "[debug] " <> message :ok end end

    Elixir: Behaviorとはどのような機能なのか? - Qiita