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
kernel void logisticsmap( global int *mu, global int *p, global int *input, global int *output) { int x, m, pp; size_t i = get_global_id(0); x = input[i]; m = mu[i]; pp = p[i]; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x + 1) % pp; x = m * x * (x
(この記事は、「Elixir or Phoenix Advent Calendar 2017」の9日目です) fukuoka.exのメンバーにより連載されています。 昨日は、@piacere さんの「ExcelでElixirマスター2回目:「列の抽出」と「Web表示」でした 今日は、実際のプロダクト開発のお話2回目です。 はじめに Elixirで実際にプロダクト開発した経験からサンプルコードを交えて解説する本連載 基本となるデータベース排他制御の後編は、 Webサービスなどでより一般的な楽観的ロックです。 悲観的ロックと楽観的ロックに関する一般的な解説は例によってこちらの記事をお勧めします。 -> 排他制御(楽観ロック・悲観ロック)の基礎 本連載の前回記事はこちら |> ElixirでSI開発入門 #1 Ectoで悲観的ロック Ecto.Changeset.optimistic_lock(
(この記事は、「Elixir or Phoenix Advent Calendar 2017」の10日目です) 前日は@tuchiroさんのElixirでSI開発入門 #2 Ectoで楽観的ロック でした。 本掲載はElixirのGenStageに入門する#1の続きです。 前回は:producer, :producer_consumer, :consumer の三段階のステージで整数カウンターのストリーム処理を行いました。 バックプレッシャー (1背圧) さて、前回:producerのところで、handle_demandというコールバックが登場したのを覚えてらっしゃいますでしょうか? 生産者なのに需要がトリガーとなっています。 つまり、GenStageは需要トリガーを元にストリームイベントを処理するライブラリなのです。需要トリガーで供給を引っ張ることを、ストリーム界隈(?)ではバックプレッ
この記事は、「Elixir or Phoenix Advent Calendar 2017」の5日目です。 昨日は @tuchiro さんの「ElixirでSI開発入門 #1 Ectoで悲観的ロック」でした。 fukuoka.ex twinbeeことenぺだーしと申します。 福岡でfukuoka.exという活動をやっております。 先日こちらサイトでfukuoka.exのコアメンバーとして取材を受けました。福岡でのElixirのコミュニティー活動に興味がある方は是非ご覧ください。 FlowとGenStage ElixirにはFlowという並列ストリームを直観的に使えるライブラリがありますが、本格的に使おうとすると、GenStageの知識が必用になってきます。名前の通りStageがどういうものかも直観的に理解ができます。 Flowの簡潔さに比べて、GenStageのコードは一見わかりにくいので
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使いたいとは思っていたが、ずっと使えずに居た。
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 をうまく扱えるようにしている
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く