タグ

erlangに関するteahutのブックマーク (69)

  • 「実践 Erlang」講義用資料 まとめ - Twisted Mind

    たけまるさんにご推薦いただき、とあるところで Erlang の講師をやることになったので資料を作るメモ 講義について # 明日にでもまとめます 以下での補助事業の一部で「実践 Erlang」の講師を担当させていただくことになりました。 コミュニティから広島に Erlang を広めたいという話を伺い、 少しでもお役に立てればと言うことで快諾させていただきました。 平成21年度「地域経済情報化基盤整備補助事業」 ビジネスベースひろしま−3ESC−コンソーシアム(中国) http://www.meti.go.jp/information/data/c90810dj.html 地域製造業に求められる「エレクトロニクス 化」を促進するために、高機能や新しいサービス を実現するソフトウェア開発を担う地域の中小 IT ベンダおよび係わる人材を育成する。また、 高度化・高付加価値のソフトウェアを提供する体

    「実践 Erlang」講義用資料 まとめ - Twisted Mind
    teahut
    teahut 2009/10/12
    もっとも充実した日本語の講義資料ができあがるかも?
  • Erlang で Comet

    みかログさんでErlangでCometが書かれていますが、同様に Erlang で Comet です。こちらの方が随分長いソースになっていますが。 クライアント(ブラウザ、セッション)毎に受信プロセスを常駐させます。 送信されたメッセージは全ての受信プロセスに送信され、受信プロセスはクライアントが受信待ちの場合、クライアントへメッセージを返します。 受信プロセスにはタイムアウト管理プロセスがリンクしてあり、一定時間クライアントへの送信を行わない場合、受信プロセスは exit します。 クライアント1つにつき、受信プロセスとタイムアウト管理プロセス(あとおそらく、Yaws のリクエスト処理プロセス)が常駐します。プロセス大盤振る舞いです。 ファイルの構成は次のようになっています。 chat.erl プログラム体。Yaws の起動も行ないます。 www/index.yaws チャットのページ

    Erlang で Comet
    teahut
    teahut 2009/07/12
    >epollを使うようerlのオプションに+K true
  • R13A 以降に追加された関数を今使わないのでメモすることで忘れる。 - Twisted Mind

    erlang:make_tuple(Arity, Default, InitList) -> tuple() R13B で追加 BIF > erlang:make_tuple(4, aa, [{2,bb}, {4, cc}]). {aa,bb,aa,cc} > erlang:make_tuple(4, aa, [{2,bb}, {4, cc}, {2, dd}]). {aa,dd,aa,cc} atom_to_binary(Atom, Encoding) -> binary() R13A で追加 binary_to_existing_atom(Binary, Encoding) -> atom() も追加されました BIF > erlang:atom_to_binary('Erlang', utf8). <<"Erlang">> > erlang:atom_to_binary('Erlan

    R13A 以降に追加された関数を今使わないのでメモすることで忘れる。 - Twisted Mind
    teahut
    teahut 2009/05/07
    >erlang:make_tuple, atom_to_binary, erlang:binary_to_atom, erlang:min, erlang:max, lists:keyfind
  • 恥をかこう - Twisted Mind

    どうも gen_tcp + gen_server が上手い形にならない。 cooldaemon さんやたけまるさんの実装を参考にさせていただいて勉強している。 個人的には RabbitMQ が以下のような実装になっており、これがスマートなのかなと思っていたりする。 実際にはまだまだ勉強中。 +--------+---------+ | tcp_listener_sup | +--------+---------+ | (one_for_all) +----------------+---------+ | | +-------+------+ +-------+----------+ | tcp_listener | + tcp_acceptor_sup | +--------------+ +-------+----------+ | (simple_one_for_one) +----

    恥をかこう - Twisted Mind
    teahut
    teahut 2009/05/06
    RabbitMQ の TCP サーバ構成について.one_for_one で listener と acceptor を起動し,acceptor 配下に simple_one_for_one の子プロセスを起動している.
  • Supervisor 配下のプロセスが停止した際に State を Dump し、再起動した際に State を Restore するには? - cooldaemonの備忘録

    サンプルコードを書きました。gist: 91309 - GitHub つい最近、kai_tcp_server に、現在の接続クライアント数を記録する為の Monitor プロセスを追加したのですが、現在の仕様では、何かの拍子に Monitor が落ちると接続数がリセットされてしまいます。(そのまま運用し続ければ、いつか正しい値に戻りますが・・・) これは Supervisor が、その配下のプロセスを再起動する際に、クラッシュ直前の State を引き継ぐような仕組みを持たない為です。 簡単に思いつく回避策としては・・・ Supervisor に少し手を加えた新しいモジュールを作る Callback:terminate/2 で State を、ファイルに保存するか他のプロセスに預ける などでしょうか? そんな事を悩んでいた所、Erlang の ML にタイミング良く同じ悩みを持った方が現れ

    Supervisor 配下のプロセスが停止した際に State を Dump し、再起動した際に State を Restore するには? - cooldaemonの備忘録
    teahut
    teahut 2009/04/01
    期待,期待 >Supervisor 起動時に State 保存用の ets(or Mnesia) を起動しておけば、配下のプロセスは State を ets に保存しておけるよ
  • Erlang For Concurrent Programming – Communications of the ACM

    Designed for concurrency from the ground up, the Erlang language can be a valuable tool to help solve concurrent problems. Erlang is a language developed to let mere mortals write, test, deploy, and debug fault-tolerant concurrent software.a Developed at the Swedish telecom company Ericsson in the late 1980s, it started as a platform for developing soft real-time software for managing phone switch

    teahut
    teahut 2009/03/25
    Erlang の解説記事.著者の Larson さんは SimpleDB 開発者で,いまは Google にいるらしい.
  • 私が Erlang で Package を使わない、ただ一つの理由 - cooldaemonの備忘録

    結論 Common Test と相性が悪いから。 補足 kai の tcp_server をファイル分割しようと思い、試しに Package を使ってみたのですが、Common Test で下記のようなエラーが出てしまいました。 === ERROR! init_per_testcase crashed! Line: {kai_tcp_server_SUITE,init_per_testcase,27} Reason: {undef, [{'kai_tcp_server.ets',update_counter, [cover_internal_data_table, {bump,'kai_tcp_server.sup',start_link,4,1,28}, 1]}, {'kai_tcp_server.sup',start_link,4}, {kai_tcp_server_SUITE,ini

    私が Erlang で Package を使わない、ただ一つの理由 - cooldaemonの備忘録
    teahut
    teahut 2009/03/05
    >Common Test と相性が悪いから
  • The Top Ten Erlang News Stories of 2008 – Erlang Inside

    It goes without saying that 2008 was a difficult year for many with 2009 looking to be more of the same. But for the Erlang community, it was probably the best year since Joe Armstrong released Programming Erlang. OK, that was 2007… still, it’s a great time to use Erlang. Here are the top ten Erlang related ‘events’ of 2008, from ’smallest’ to ‘biggest’. This is my subjective ranking with a focus

    teahut
    teahut 2009/01/14
    1. Facebookが70Mユーザにchatを提供, 2. CouchDB, 3. Nitrogen Web Framework, 4. RabbitMQ, 5. Reia (script lang.), 6. screencasts, 7. SimpleDB, 8. erlanginside.com, 9. C#/VBなどより話題に, 10. UKではErlangの仕事が4倍に増加
  • Introducing merle : an Erlang memcached client.

    The last couple days I have been putting together a memcached client for Erlang called merle. At the moment it supports the gambit of memcached commands (minus the noreply option). While it is very much a work in progress and under heavy development it is fairly usable. The latest code is available on github. Here’s an example of its usage: [user@host ebin]$ erl Erlang (BEAM) emulator version 5.6

    teahut
    teahut 2009/01/14
    Erlangで書かれた memecache クライアント.
  • 常駐している Erlang プロセスのコードを入れ替える事ができる条件 - cooldaemonの備忘録

    常駐している Erlang プロセスのコードを無停止で動的に入れ替えるには、設計の段階で、入れ替えが発生すると思われる箇所を、プロセスとは異なる別モジュールに切り離しておく必要がある。 常駐している Erlang プロセスのコードの入れ替えに失敗する例 まず、下記のようなモジュールを用意する。 -module(test). -export([start/0, talk/1]). -export([loop/0]). start() -> spawn_link(fun loop/0). talk(Pid) -> Pid ! hello, ok. loop() -> receive ReceiveMessage -> ok end, io:fwrite("~p~n", [get_message(ReceiveMessage)]), loop(). get_message(hello) -> h

    常駐している Erlang プロセスのコードを入れ替える事ができる条件 - cooldaemonの備忘録
    teahut
    teahut 2008/12/19
    >常駐している Erlang プロセスのコードは入れ替え出来ない (詳しい条件はコメント参照)... OTP に従っていれば「プロセス」は共通モジュール (gen_serverなど) となり、入れ替え対象となる部分が自然と独自モジュールになる
  • kai_tcp_server: a simple module for implementing concurrent TCP servers - cooldaemonの備忘録

    Last July, Kai developer team made a simple module named "kai_tcp_server", which has the following features: Makes it easy to implement concurrent TCP servers, Provides typical TCP server behaviours, listen, accept, and so forth, Handles multiple requests concurrently by maintaining process pool, Supports active as well as passive mode of gen_tcp, Based on OTP principles. How to Use The following

    kai_tcp_server: a simple module for implementing concurrent TCP servers - cooldaemonの備忘録
    teahut
    teahut 2008/12/05
    プロセスプールを持ったTCPサーバを簡単に書くためのモジュール
  • hypotheticalabs.com - このウェブサイトは販売用です! - hypotheticalabs リソースおよび情報

    This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.

    teahut
    teahut 2008/11/18
    pool モジュールを使って,ノード間で負荷分散する例
  • Comet on MochiWeb (and MochiKit) - Twisted Mind

    2008/11/20 に行われる 第2回 Erlang 分散システム勉強会で Comet on MochiWeb について話します。 Comet 実装は基的なもので XHR を使ってイベントが起きるまでクライアントを待機させ、 イベントが起きたら再度 XHR を送ってきてクライアントを待機状態にするというものです。 プレゼンの時はソースコードを見せる事も無いと思いますので、事前に公開しておきます。 MochiKit(JS) 部分は id:jbking に依頼。 デザイン(HTML/CSS/HTML) は id:nullpobug に依頼。 コードは両方とも修正BSDライセンスです。 JS 部分はわがまま言ってタイムアウト機能まで付けて貰いました。 その割に Erlang 側は特に何もしてないというヒドイ状況。 スクリーンキャスト取ってみました。貼り付けたかったのですがとりあえず URL

    Comet on MochiWeb (and MochiKit) - Twisted Mind
    teahut
    teahut 2008/11/15
    おぉ,ちゃんと動いてますねぇ.HTTP レスポンス待ちの様子までわかるのが素晴らしいです.
  • steps to phantasien(2008-11-02) : 最近みた TechTalks

    同僚が iPhone 買ったというので, それまで使っていた iPod touch を譲りうけた. (決してふんだくったわけではない.) 動画再生専用機として使っている. 驚くことに, PC の画面でみるよりずっと良い. 画面を動かせいのが制約だったとは, 思いもよらなかった. 手に持てるのは良いなー. そんなわけで, すっかりご無沙汰だった TechTalks を (ジャンクフードを喰いながら|ふとんの中で)鑑賞した. せっかくだから Google Techtalks だけでなく, 友達の勧めに従い Channel9 や InfoQ のビデオも見てみた. Channel9 の良いところは, 最初から iPod で再生できる mp4 ファイルをダウンロード用に用意してくれていること. 雑談メインのせいか, 密度の低めなものが多いけれど, MSDN には現れない開発者の声を聞けるのは楽しい.

    teahut
    teahut 2008/11/03
    >Kilim: ErlangみたいなActorをJava でも... 言語標準にないチェック機構を注釈で実現するのはJavaの将来として有望な路線, MonetDB: column storeの話... column storeになった時点でRDBが置いている前提がことごとく覆っていくのは面白い
  • Erlang, Delicious, and Yahoo! Life after reading Startup

    僕はあまりErlangの事を正確には理解していないのであるが、友人からの情報では分散処理に適したすぐれた言語であると聞いている。 最近自分のブックマーク・サービスを自分で作っているので使わなくなってしまったが、Del.icio.usは多分世界で一番ユーザー数が多いソーシャル・ブックマークサービスである。ちょうど数ヶ月前に新しいバージョンをリリースしたばかりだ。数年前にYahoo!に買収され、現在ではYahoo!のサービスの一つとして運営されている。 Erlang is Delicious, CUFP slides Developing Erlang At Yahoo (PDF) 上記のパブリックに公開された資料を読むまで知らなかったのであるが、新しいDel.icio.usにはErlangを使用しているようだ。Erlangはすぐれた言語であるが、利用者数という意味で比較的マイナーな言語である

    Erlang, Delicious, and Yahoo! Life after reading Startup
    teahut
    teahut 2008/10/05
    >新しいDel.icio.usにはErlangを使用しているようだ。
  • Re:Kademliaについて細かい話 - cooldaemonの備忘録

    Kademliaについて細かい話 - NO!と言えるようになりたい コードを読んでもらえて、しかも、返信を頂けると、とても嬉しいです。 ありがとうございます! タイムアウトしたノード情報を保持し続ける為、churn 下でパフォーマンスが落ちる件 タイムアウトしたノードの情報を保持しておき、クエリの結果から省く方式を組み込んでみようかと思います。 同一の IP アドレス・ポート番号だったとしても、ID が異なる場合は "復帰した、もしくは、別ノード" と見なしたいので、ID をキーにしたハッシュテーブルで保持してみようかな? Expire は、ルーティング・テーブルが更新される頻度を考慮しながら変更できると良さそうなので、起動時に設定できると良いかもしれない。デフォルト値は、1分にしておこう。 対応しました。ただし、Expire を起動時のパラメータで指定する事は出来ません。 タイムアウトの

    Re:Kademliaについて細かい話 - cooldaemonの備忘録
    teahut
    teahut 2008/09/28
    (反応が後手で申し訳ないですが) 分散システムでのデータ削除は面倒な問題.dormant death certificate http://tinyurl.com/3opdua とかもあるけど,Kademlia でうまく機能するか? 基本機能が落ち着いたらじっくり取り組みましょう.
  • Erlang で分散ハッシュテーブル(kademlia)を使った Key-Value Store 作ってみたよ - cooldaemonの備忘録

    Kai に kademlia の組み込みを提案する為、試しに作っていたのですが、README に書いた How to Use の項目が動くようになったので晒してみます。 cooldaemon's ermlia at master ― GitHub 設置方法なんかも README に書いてあるので、ご興味のある方は、そちらをご参考に。 まだ、いくつかの機能が未実装(定期的にデータを publish していない)だったり、不具合(Key のバージョン管理がされていない)があるけれど、そこそこに動きます。 おまえは kademlia を勘違いしている!等、突っ込み大歓迎。 参考 URI Erlangで分散ハッシュテーブルを実装してみた - NO!と言えるようになりたい id:ytakano 氏に多謝! Amazon.co.jp: P2P教科書 (インプレス標準教科書シリーズ): 江崎 浩:

    Erlang で分散ハッシュテーブル(kademlia)を使った Key-Value Store 作ってみたよ - cooldaemonの備忘録
    teahut
    teahut 2008/09/22
    あとで使ってみよう
  • Erlang実験室:コマンドラインから使うerl - 檜山正幸のキマイラ飼育記 (はてなBlog)

    通常、erl(またはwerl)コマンドは対話的なシェル(EShell)を起動するために使いますが、非対話的に何らかの作業をさせるために使うこともできます。HelloWorldプログラムをコマンドラインから実行するには次のようにします。 $ erl -boot start_clean -noshell \ > -eval 'io:fwrite("Hello, world.~n")' -s init stop Hello, world. $ この程度だと、OSシェルのechoコマンドでもできるので、Erlangの得意な整数計算をさせてみれば: $ erl -boot start_clean -noshell \ > -eval 'io:fwrite("~p~n",[12345*12345*12345])' -s init stop 1881365963625 $ 巨大な整数計算に使えますよ。

    Erlang実験室:コマンドラインから使うerl - 檜山正幸のキマイラ飼育記 (はてなBlog)
    teahut
    teahut 2008/09/15
    >-noshell, -noinput ... -eval Expr ... -run Mod [Func [Arg1, Arg2, ...]] Arg1, Arg2, はどれも文字列データ... -s Mod [Func [Arg1, Arg2, ...]] Arg1, Arg2, はどれもアトムデータ
  • ソースリーディング - Twisted Mind

    YXA Erlang の SIP サーバ実装である YXA の LDAP 実装の部分のソースを読んでいます。 ふとこれはいいなと思ったコードがあったので。 -define(IS_ALPHA(X) , X>=$a,X=<$z;X>=$A,X=<$Z ). -define(IS_DIGIT(X) , X>=$0,X=<$9 ). spam([H|T]) when ?IS_ALPHA(H) -> ... シンプルでこれは便利。

    ソースリーディング - Twisted Mind
    teahut
    teahut 2008/09/15
    >Erlang の SIP サーバ実装である YXA... -define(IS_ALPHA(X) , X>=$a,X=<$z;X>=$A,X=<$Z ). -define(IS_DIGIT(X) , X>=$0,X=<$9 ). spam([H|T]) when ?IS_ALPHA(H) ->
  • lists モジュール、自前の関数、リスト内包表記の速度比較 - cooldaemonの備忘録

    検証コード gist: 6312 ― GitHub 感想 foreach 末尾再帰できなくても自前の関数の方が早い・・・コードの書き方が悪いのかな? lists:foreach/2 を使ったからといって、可読性が劇的に上がるわけでもないので、lists:foreach/2 は使うの止めよう。 foreach に関しては、lists:foreach、 関数渡し - いたわさににほんしゅ こちらを参考に。 reverse 検証コードを繰り返し実行した所、lists:reverse/1 の方が、自前の関数より早い事の方が多かった。 今後、lists:reverse/1 は積極的に使って行く。 map 関数呼び出しが存在しないなら、リスト内包表記が、速度と可読性のバランスが取れていると思う。 これみたいに関数を使うなら、素直に lists:map/2 を使った方が良い。 ただ、lists:reve

    lists モジュール、自前の関数、リスト内包表記の速度比較 - cooldaemonの備忘録
    teahut
    teahut 2008/08/20
    へぇ,lists:foreach って再帰呼び出しより遅いのかぁ