Elixir を触って1年程度の若輩者が、学んだことを可能な限りアウトプットする Advent Calendar です。 去年は Erlang 一人 Advent Calendar をやりました。

Elixir を触って1年程度の若輩者が、学んだことを可能な限りアウトプットする Advent Calendar です。 去年は Erlang 一人 Advent Calendar をやりました。
useの使い方がすんなり頭に入ってきます。レガシー!と言われるPerlなのに新しい言語で同じような記法を見つけるとなんだか嬉しいやら感慨深いやら不思議な気持ちになりました。 話はこれだけなのですが、小ネタすぎるのでuseに絡めて、import/exportネタでも。 (以下完全にElixirネタ) importディレクティブ Elixirにはimportディレクティブというのがありまして、指定モジュールのpublic関数にアクセスできるようになります。 importは名前どおり、Perl定番のExporterとは真逆のものです。 Exporterはライブラリ側が何をexportするのかを指定していましたが、importはライブラリを読み込む側が使うものになります。
Ecto はデータベースを扱うとても便利なライブラリです。 ただ、自分達が使う上でいくつか使い勝手の悪い部分があったので、Yacto というライブラリを作りました。1 Yacto とは Yacto は、Ecto で使いにくかった部分をサポートするためのライブラリです。 大まかに以下の機能があります。 マイグレーションファイルの自動生成 別アプリケーションからのマイグレーションの利用 水平分割したデータベースへのマイグレーション 複数データベースを跨るトランザクション(XA トランザクション) それぞれ説明していきます。 マイグレーションファイルの自動生成 Yacto は、特にマイグレーション周りが Ecto と異なります。 Ecto はスキーマとマイグレーションを別で定義していましたが、Yacto は スキーマからマイグレーションファイルを自動的に出力します。 具体的には、以下の様にスキー
defmodule SupRestartLimit.Worker do use GenServer require Logger @counter_limit 5 def start_link(interval) do GenServer.start_link(__MODULE__, [interval]) end @impl GenServer def init([interval]) do state = %{counter: 0, interval: interval} Process.send_after(self(), :countup, interval) {:ok, state} end @impl GenServer def handle_info(:countup, %{counter: counter, interval: interval}=state) do Log
意外と複雑だったので、可能な限り情報を纏めてみました。 例外の種類 Elixir の例外には throw と error と exit という3種類があります。 どの例外も、投げた直後に処理を抜けて catch や rescue に飛ぶ(あるいはそれが無ければプロセスが終了する)という点では同じです。 throw throw はフロー制御のための例外です。 Elixir は、関数の途中で return したり、ループで条件を満たしたら break するというのが出来ません。 そういう時、処理の流れ(フロー)を変えるために throw を利用します。 throw を使うことで、例えば Enum.find/2 のような関数は以下のように書けます。 def find(enumerable, default \\ nil, fun) do try do for v <- enumerable do
defmodule Hobot.Plugin.Handler.Echo do @moduledoc """ Echoes input. """ use GenServer def init({context, topics} = args) do for topic <- topics, do: apply(context.subscribe, [topic]) {:ok, args} end def handle_cast({:broadcast, _topic, ref, data}, {context, _topics} = state) do apply(context.reply, [ref, data]) {:noreply, state} end def terminate(reason, {context, topics}) do for topic <- topics,
Heroku では昔ながらの git リポジトリ push でのデプロイの他に,Docker を利用した Container Registry でデプロイが行える. また, Heroku では HTTP リクエストを受けてレスポンスを返す Web dyno の他に,バックグラウンドで動く Worker Dyno を作ることができる. 今回, Elixir のアプリケーションを Docker コンテナに乗せて Heroku の worker として動かせるようにデプロイした. Dockerfile は以下のとおり.気をつけるべきところにはコメントを入れた. FROM elixir MAINTAINER niku # MIX_HOME は required .こうしないと heroku に Deploy した後起動するときに,mix deps.get したはずのライブラリを見つけられない #
はじめに open_portの全仕様が書かれた日本語のドキュメントが見つからなかったため、自分で書くことにした。 (勉強も兼ねて。) 以下のドキュメントを素にしている。 公式ドキュメント(もちろん英語) http://erlang.org/doc/man/erlang.html#open_port-2 Spec -spec open_port(PortName, PortSettings) -> port() when PortName :: {spawn, Command :: string() | binary()} | {spawn_driver, Command :: string() | binary()} | {spawn_executable, FileName :: file:name()} | {fd, In :: integer() >= 0, Out :: integ
ここ1年ほど,Erlang で開発しています. 普段は IntelliJ Idea で開発しているのですが,Erlang は IDE の恩恵が少な目なので,もう少し軽い Sublime Text を試してみました.Windows に Emacs や Vim を入れたら負けかなと思っています(普通にLinux上ではvimで開発してますが). Windows上でErlangを使っている人がどれくらいいるのかわからない上に,さらに日本語が読めてSublime Text 3ユーザである人が世界にどれくらいいるのかは考えないことにします. Erlangの実行環境の用意 Windows上に Erlang をセットアップするところから始めます.なるべく初めてErlangで開発をする人も手順通りにやれば試せるように書いていきますが,基本的なErlangの使い方は分かっていることが必要です. おすすめ入門書
これは、Erlang Advent Calendar 2015 の14日目の記事です。 はじめに 私は仕事では主にフロントエンドの開発をしているのですが、時には株価やニュースなどリアルタイム性の高い機能の実装が必要になる事もあります。 先日、WebSocketを使ったリアルタイム性の高いWebアプリを作りたい、と思い調べていたところ、N2Oというフレームワークがあることを知りました。 もともとは別のErlang製WebフレームワークであるChicagoBossを調査していたのですが、プロジェクトのページにComparison of Erlang Web Frameworksという比較表があり、機能が高く速そうだったことから興味を持ちました。 N2Oについて N2O(H2Oじゃないよ)はウクライナのSynrc Research Centerという会社で開発されたWebアプリケーションフレーム
Erlangは数年前にほんの少し書いたことがあるだけなのですが、会社では同じフロアにErlangをガリガリ書く部隊1がいます。彼らにちょっと教わりつつ久しぶりに書いてみました。 はじめに 最近のマイブームは映像や音声の配信でおなじみRTMPなので、この記事ではErlangでRTMPを取り扱ってみようかと思います。本当はデータの中身をちゃんと取り扱う所までを書きたかったのですが作業時間があまりなく、対象をハンドシェイクと呼ばれるプロトコル初期のフェーズまでに限定します。 RTMPとは Adobe社が制定したReal Time Messaging Protocolのことです。その成り立ちからFlashと相性がよく、音声や動画の配信によく用いられる2プロトコルです。 RTMPは仕様が公開されているので、誰でもプロトコルを理解・解析することができます。 http://wwwimages.adobe
supervisorとapplicationが停止する条件 ドキュメントをちゃんと読んでいれば, 当然知っているであろうことなのですが, 「セグフォも吐いてないのに何か死んでる!!」と焦ったことがあるので, 自分への戒めとして投稿します. supervisorの終了条件 To prevent a supervisor from getting into an infinite loop of child process terminations and restarts, a maximum restart intensity is defined using two integer values specified with the intensity and period keys in the above map. Assuming the values MaxR for inten
こんにちは、kojingharang です。仕事でErlangを使い始めてそろそろ2年になります。 家でPCをいじっているときはだいたい 馬場タクシー3D や 他のアプリ を作っていますが、最近区切りが良くてちょっと暇になったので、アドベントカレンダーに乗っかって Erlang の記事を書いてみます。 対象読者 Erlang の軽量プロセスやクラスタサポートは気に入っているが、その他のいろいろについて、もやっとした不満がある方 要約 こんな流れです。ここだけ見て「もう分かったよ」という方は、続きは見なくても大丈夫です。 足し算するモジュールを書こう それを gen_server 化しよう 冗長な記述をしなきゃいけなくて面倒だしバグがでそうだ そこで、面倒な記述を parse_transform で自動生成する fun_injector というのを作ったよ 冗長な記述が減ってハッピー! 考察
Erlangといえば、まずが思い出したのはなんだろう?OTPとか、アクターモデルとか、パターンマッチとか、Erlangerにとってどちらも日々仕事の中で当たり前の概念になりましたよね。でもその中にはなんとかひとつ神秘な場所が存在するじゃない?暗くて危ない、都市伝説のような、それはホットコードローディングである。 Erlang地獄、そして最下層? 有名な Erlang 教科書『Learn you some Erlang for great good』の中で、ホットコードローディングについてこう書かれています これからOTPの中で最も複雑で、理解しがたく、正しく動作させることが難しく、時間もかかる部分の内の1つについて話そうとしています。 事実、すべての手順(以下relupと呼びます)を避け、単純にVMを再起動し新しいアプリケーションを起動することで更新ができるなら、そちらを選ぶことをおすすめ
common_test で spec を使う 誰でも一度は作るというMySQLクライアントですが、いざ作ってみると困るのがテストです。本家のオプションを網羅する気はもちろんないですが、バージョン毎の分岐はやらないわけにはいきません。とりあえず 5.[5-7] で、それぞれ機能単位のテストを、一度に済ます、を目標としました、が、 さて、どうしたものかと。 ここは "多機能で大抵できる"、"覚えたら便利" という噂のcommon_testを使うトコ、ですよね? まぁ、きっかけはともかく、状況としてはよくある話でしょうし、覚えているうちに書き留めておこうと思います。 ※ ただし erlang-17.4 では動きません。orz 流れとしては、まず前提として appで変数の初期値を設定し、 configでそれらを上書く ようアプリを作ります。その上で テスト毎にct_configを作り、 それをsp
José Valimさん1の2016年1月12日付のブログ記事"Comparing Elixir and Erlang variables"の翻訳です。 時々Erlangのプログラマは「Elixirの変数は隠れたバグの温床になるのでは」と心配するようです。この記事ではそういう心配についてと、Erlangでの変数も「隠れたバグ」を生み出しかねず、一方でElixirはそれらのうちのいくつかを除去するということについて議論します。 話を始める前に短い放棄声明を…: Elixirは可変(mutable)な変数を持っていません。あるのは再バインドです。可変性はよくストレージと関連付けられます。Elixirでは保存された値を変更することはできません(Erlangと同じです)。可変な変数の例としてF#を見てみましょう。F#では明示的にmutableキーワード(例えばlet mutable x = 5)に
このAdvent Calendarで度々話題になって(して)いる、Riak Source Code Reading。 Erlang/OTPを全く知らない人にとっては、Erlangの文法はもちろん、ファイルやディレクトリ構成など未知のことだらけだと思う。 「Erlang/OTP何それ美味しいの」状態から脱却し、Riakのコードを楽しく読むために必要な知識を書いていこう。 用語について RiakはErlang/OTPで作成されている。 Erlangとは、エリクソン社が開発したプログラミング言語。 OTPとは、システムを作るフレームワークみたいなものだ。 RubyとRuby on Railsの関係を想像する人もいるかもしれないが、Erlang/OTPはそれより相互が依存している。 故に、正式にはErlang/OTPみたいに”ひとつ”として呼ばれることが多い。 そのOTPとは何なのか。 正式にはO
並列分散処理を得意とするerlangという関数型言語に興味のある方は多いではないでしょうか? 自分は身近にerlang識者がいたため、興味を持つ事になりました。 今回は、そんなerlangの入門として 「erlang + rebar3 + cowboy」 でHTTPサーバを構築したいと思います。 erlangについて 並列分散処理に強い関数型言語。 OTP(Open Telecom Platform)フレームワークがすばらしい。 参考書の受け売りなので、ニュアンスが間違っているかもですが、大体こんな感じで書いてました。 rebar3について Erlangアプリケーションのコンパイル等一括で行ってくれる便利なツール。 また、erlangモジュール等のdependencies(依存関係)を一括管理してくれたりもしています。 rebar3より以前にrebarが存在しましたが2016年6月現在は非
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く