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

すごいErlangゆかいに学ぼう! Erlang の勉強のため写経したりメモ書きしたものです。 とても分かりやすく良い本なので、Erlangに興味ある人は購入されることをオススメします。 第1章 アトム アトムはアトム表で参照されていてガベージコレクションの対象にならない。4byte(32bit sys) or 8byte(64bit sys) のメモリを消費するので、動的にアトムを生成するのはメモリ枯渇の原因になるので、やらないこと。また、アトムの最大個数は 1048577個、これは設定で変更可能。 Erlang では なんでも比較できる 言語設計思想。 true , false は単にそういうアトムであるだけだが、言語実装と深く結びついてるのでOK true < 1 は false , なぜなら、上述の通りなんでも比較可能だから。 タプル 最初の要素がアトムなタプルを タグ付きタプル
この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
gproc のはなしをします。 背景 Erlang ではプロセスを作りプロセスに名前を与えることにより、プロセスIDを引き回すことなくそのプロセスとやりとりする、といったパターンがよくあります。Erlang はそういったパターンのために erlang:register(Name, Pid) という関数を用意しており、これを用いてプロセスに名前をつけることができます。しかしこの公式に用意されている "process registry" にはかなり制限があります。 Name にはアトムしか使えない。 プロセスはただ一つの名前しか持てないし、ある名前はただ一つのプロセスにしかつけることができない。 ローカルとグローバルのAPI、セマンティクスが異なる。 など。 これには色々問題があって、例えば、 ユーザのセッションごとにプロセスを生成するようなネットワークアプリケーションで、あるユーザの現在の状
「Erlang でシダを描画する」をしました。 ですが、Erlang でのグラフィクス処理がよくわからず、プロットは Ruby(RMagick)で行いました。 Ruby 側からコマンドとして Erlang 側を呼び出しています。受け渡しデータ形式は YAML にしました。 実行は Linux で行いました。 (プログラムで描画した 'shida.png') Erlang のプログラムです。 Erlang は全然分かりません。これだけ書くだけでも、四苦八苦しました。 (Erlang っぽい書き方をもっと知りたいです...) -module(shida). -export([fern/0]). main(_) -> fern(). % Warning がでる. w1x(X, Y) -> 0.836 * X + 0.044 * Y. w1y(X, Y) -> -0.044 * X + 0.836
読み込み(検索)処理の方が圧倒的に多いと予想されるようなKVS的なプロセスを、Erlang/OTPでどうやって効率的に(スケールアップするように)実装するか。 少し前にlocalという、名前のスコープを限定可能なプロセス名管理用ライブラリを実装した時に採用した方法のメモ。 結論 結論を先に書いてしまうと名前付きのETSを使うのが良い。 ETSを名前付き(and access=protected)にしておくことで、テーブルの所有プロセスを経由せずに読み込み処理を行うことが可能となる。 そのため、複数クライアントプロセスから同時に要求が来た場合でも、それらが(メッセージパッシングを通して)直列化されることなく、並列的に処理されることが期待できる。 実際に、今回測定した範囲では、ETSを使うことで読み込み処理はコア数に対してほぼ線形にスケールしていた。 実装例と性能比較 以降は、実際にETSを使
この場を借りて、以下の条件に合致する自作ライブラリ群の紹介をさせて貰います。 Erlangで記述されている 一年以内に更新があった ある程度汎用性が高い ある程度(最低限)ステーブル rebarの構成に準拠 ※ 諸事情で準備時間があまりとれなかったため、今回は本当に軽い紹介だけで、あまり有益な情報はないです... hash_ring https://github.com/sile/hash_ring コンシテントハッシュ法の実装ライブラリ 現状備えている機能 ノードの追加・削除 特定のキーに対するプライマリノードの検索や優先順位に基づくノードの畳み込み 各ノードの重み付け ハッシュアルゴリズムや仮想ノード数の指定 実装上の特徴 Pure-Erlang and No-ETS 副作用なし 仮想ノード群を保持するためにタプルを使っている ノード数が100で、個々の仮想ノード数が256なら、約2.
ErlangでHaskell風の Maybeモナド と do記法 を使う方法。エラーチェックなどを繰り返し行うコードが簡潔に記述できる。RabbitMQの開発者が公開した [erlando] (https://github.com/rabbitmq/erlando) で実現する。 erlandoにはListモナドやStateモナドなども含まれており、もちろん自分で新たにモナドを書くこともできる。また一部のモナドではMonadPlus型も実装されており guard/2 関数などが使える。さらに、関数の部分適用を読みやすく記述できる「cut」や、関数のインポート時に関数名を変更することで名前の衝突を避ける「import as」という機能もある。 maybe(A) 型 Erlang/OTPでは処理が失敗するかもしれない関数は、失敗したことを「例外」ではなく、「戻り値」で表現する。例えば list
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 参加したイベントのメモです。 イベント概要 【CTO meetup】Rust,Go,Elixir,Kotlin次世代言語の魅力をCTOが語る 2018/04/12(木) 19:00 〜 23:00 https://flexy.connpass.com/event/82063/ 言語選定について Elixir サーバーが2種類あった。 使う言語を統一していこう→トップダウンでElixirに決まる。 1200台のサーバーを4人で運用。自動化しないと無理。 →GOで自動化(現場発信) Elixir使いたいとは思っていたが、ずっと使えずに居た。
When 2017/04/01 At Elixir Conf Japan 2017 LT Self Introduction ちきさん (Tomohiro Noguchi) Twitter/GitHub/Qiita: @ovrmrw I've started to learn Elixir 1 month ago. What I talk about Reading a JSON file and doing MapReduce. (JSONファイルを読み込んでMapReduceしたい。) Differences between Eager, Lazy and Flow(Concurrent). (Eager, Lazy, Flow(Concurrent)の違いについて。) Flow & GenStage is extremely fast. (Flowめちゃくちゃ速い。) === Git
Phoenix 1.3のrc-2が先月リリースされそろそろPhoenix 1.3にアプデも考えだしてきた今日この頃、まだアップデートはしないけど1.3正式版がリリースされることに備えてディレクトリ構造とか学んでおきたい ということでざっと慣れるためにPhoenix 1.3を触ってみます What's changed in Phoenix 1.3 Phoenix 1.3での主な変更点は以下です webディレクトリがlib/<project>/web以下になった デフォルトのジェネレータにContextという概念が追加されアプリケーション境界を分割出来るようになった Fallback Action Plugが追加された Controllerの構成がシンプルに出来るようになった ディレクトリ構造 まず大きく変わった点としてデフォルトのディレクトリ構造が変わったということもあるので、phoenix
この数ヶ月間は、社内で利用するための Elixir の Webフレームワークを作るのに注力していて、今も開発を続けています。 その開発で、Elixir の開発環境やルールをどうしているのかについて書きます。 開発環境は、各人でバージョン揃えるのが大変という問題があります。 例えば以下のアプリケーションのバージョンを考慮する必要があります。 Erlang のバージョン Elixir のバージョン NodeJS のバージョン MySQL のバージョン Redis のバージョン これらを、新しい人が入る度に指定したバージョンでインストールしてもらうのも大変だし、全員でバージョンを揃えるのも大変です。 また、開発中も統一してバージョンを上げていきたいし、そのバージョンは出来る限り最新にしたいところです。 ローカル環境でこれをやり続けるのはかなり大変なので、Docker と Docker Compo
Plug について説明します。 Plug とは Elixir の HTTP サーバの実装の1つです。 内部では Erlang の信頼できる HTTP サーバ Cowboy を利用してますが、アダプターを切り替えることで他のライブラリにもできます。1 2017年12月19日現在、Cowboy 2 に対応した 1.5.0-rc.0 が出ています。 が、rc.0 なので、ちゃんとした 1.5.0 がリリースされるまでは 1.4.3 を使っておくのが無難でしょう。 Phoenix との違い Phoenix は Plug を利用して作っています。 Phoenix に渡ってくる conn は Plug.Conn なので、Phoenix を弄るには Plug の知識が必要になってきます。 また、Phoenix はプラグのインターフェースである init/1 と call/2 をうまく扱えるようにしている
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 は スキーマからマイグレーションファイルを自動的に出力します。 具体的には、以下の様にスキー
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く