タグ

ブックマーク / cooldaemon.hatenadiary.org (21)

  • Scala Advent Calendar JP 2010 Day 22: Scala Actor + NIO - cooldaemonの備忘録

    この記事は Scala Advent Calendar JP 2010 22 日目(12/28)です。 Scala Actor + NIO で Echo server を書いてみました。 毎度の事ですが、突っ込み添削大歓迎です。 Source 解る方用の説明をさらっと行うと、Actor は Thread Pool として利用しており、NIO 単体で利用するより高速に動作します。当然、接続毎に Thread を消費するよりも高速です。コードは、Supervisor と FSM という考え方を使って整理しています。 詳細な説明は、コード全文の後に行います。 不要な var が二カ所ありましたので削除しました。*1 import scala.actors.{Actor, TIMEOUT, Exit} import scala.actors.Actor.State.{New, Terminated

    Scala Advent Calendar JP 2010 Day 22: Scala Actor + NIO - cooldaemonの備忘録
  • エラーログ管理(sasl、error_logger、rb) - cooldaemonの備忘録

    erlang でエラーログを管理する方法を調べたのでメモ。 まず、sasl の設定ファイルを作成。適当に elog.config として保存する。 [{sasl, [ {sasl_error_logger, false}, {errlog_type, error}, {error_logger_mf_dir, "/path/to/logs"}, {error_logger_mf_maxbytes, 10485760}, %% 10MB {error_logger_mf_maxfiles, 10} ]}]. Programming Erlang まんまですが・・・これで、error のみ /path/to/logs 配下のファイルに保存し、ファイルのローテーションも行ってくれる。(上記設定で、1 ファイル最大 10MB で 10 ファイルまで保持する) 次に、下記のように erl を実行する

    エラーログ管理(sasl、error_logger、rb) - cooldaemonの備忘録
  • git-svn で branch を扱う - cooldaemonの備忘録

    一応、メモ。 branch ごと clone する SourceForge から kai を取得する例。 $ git svn clone https://kai.svn.sourceforge.net/svnroot/kai -T trunk -b branches -t tags branch が増えた場合 git svn rebase は、現在の作業 branch を更新するだけなので、下記のようにする。 $ git svn fetch svn これで、増えた branch を取得できる。末尾の "svn" オプションは、.git/config を参照の事。 branch の操作 まずは、リモート branch の確認 $ git branch -r cooldaemon_embed_tcp_server takemaru_config_get_list_of_keys trunk ロ

    git-svn で branch を扱う - cooldaemonの備忘録
    kuenishi
    kuenishi 2010/03/05
  • 第四回 Erlang 分散処理勉強会 まとめ - cooldaemonの備忘録

    第四回 Erlang 分散処理勉強会は、皆様のご協力のもと、無事に終了する事ができました。 発表者の皆様、運営にご協力頂いた皆様、会場をご提供頂いたオラクルの皆様、当にありがとうございました。 運営について 会場 今回、日オラクル様に会場をご提供頂きました。 座席数70、ディスプレイ(後部座席用含む)、マイク、無線 LAN、電源、飲料などが調っており、最高の環境を準備して頂き、感謝の言葉もありません。 入場時間の制限 雨や JR の事故が重なり、遅れる方が多数いらっしゃいました。 時間厳守で遅れた方には入場をお断りする旨、事前にオラクル様側と約束しておりましたが、オラクル社員様のご好意に甘えさせて頂き、オラクル社員様に会場(13F)と施錠された入り口(2F)を何度か往復して頂きました。 オラクル社員様も勉強会の参加者として会場で聴講していらっしゃいましたので、大変に申し訳ない事をお願い

    第四回 Erlang 分散処理勉強会 まとめ - cooldaemonの備忘録
  • Common Test - cooldaemonの備忘録

    まだ、解らない事だらけだが、使い始める所まで辿り着いたのでメモを残す。 run_test コマンドの準備 run_test とは、名前の通り、テストを実行してくれるコマンドで、実際は、erl コマンドを実行するシェルスクリプト。 作業は、Common Test がインストールされているディレクトリに移動して install.sh を実行するだけ。 % cd /path/to/common_test-X.X.X % sudo ./install.sh local上記を実行すると、/path/to/common_test-X.X.X/priv/bin 配下に run_test が作成される。 手元の環境では、下記のパスに Common Test がインストールされていた。 OS erlang R12B をインストールする際に使ったパッケージ Common Test のインストール先 FreeB

    Common Test - cooldaemonの備忘録
    kuenishi
    kuenishi 2009/05/16
    ユニットテストなどについて
  • erl_interface メモ - cooldaemonの備忘録

    C と Erlang ノード上のプロセスの間で、直接メッセージを送受信できる便利なライブラリ erl_interface を試したみた。 以下、メモと言うより code snippets。 pingpong.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "erl_interface.h" #include "ei.h" extern const char *erl_thisnodename(void); extern short erl_thiscreation(void); #define SELF(fd) erl_mk_pid(erl_thisnoden

    erl_interface メモ - cooldaemonの備忘録
    kuenishi
    kuenishi 2009/05/11
    eiはdriverとはちょと違うことを学んだ
  • gen_event - cooldaemonの備忘録

    イベント発生時の処理を管理する為のモジュール。 管理プロセスに、予め処理を 0〜複数個 登録しておくと、イベント発生時に実行してくれる。 管理プロセスの起動 1> gen_event:start_link({local, event_hoge}). {ok,<0.33.0>} これで、event_hoge という名前の管理プロセスが立ち上がる。 管理プロセスの停止 2> gen_event:stop(event_hoge). ok 管理プロセスにイベントハンドラを登録 まず、イベントハンドラを作る。 -module(event_hoge_handler1). -author('cooldaemon@gmail.com'). -export([ init/1, handle_event/2, handle_call/2, handle_info/2, terminate/2 ]). init

    gen_event - cooldaemonの備忘録
  • Key-Value Store (Strage) 勉強会にお邪魔してきました - cooldaemonの備忘録

    id:Voluntas さんのコネで潜り込んできました。 当初の目当ては、id:teahut さんによる Kai の発表と、首藤さんによる Overlay Weaver の発表だったのですが、面白い発表が目白押しで非常に濃い 5 時間を過ごす事ができました。 感想 素晴らしいまとめが ここ と ここ にある為、後々の自分の為に印象に残ったプレゼンの感想だけ適当に残しておく事にしました。 Groonga (Senna の後継) ペアプレゼンを始めて目の当たりにした。 メインの話者が言い忘れた補足をサブの話者が行う為、非常に解り易いプレゼンになっていたし、3割ほど漫才の要素が入っていたので目が離せなかった(w; groonga.org のトップ絵は id:tasukuchan さんの飼いだとの事。 初期で用意する QL に Scheme を選んだのは、Parser を書くのが楽だったからな?

    Key-Value Store (Strage) 勉強会にお邪魔してきました - cooldaemonの備忘録
    kuenishi
    kuenishi 2009/02/23
  • erlang + autoconf - cooldaemonの備忘録

    autoconf を、生まれて初めて書いた。 gist: 20329 ― GitHub 識者の突っ込みを募集中です m(_ _)m automake は、また今度お勉強する。 何故か FreeBSD 6.3 + autoconf 2.62 の環境で作った configure が Erlang ライブラリの検出に失敗する。 OSX 環境で作った configure であれば FreeBSD 上で動くので深追いしてないけど、conftest.erl が実行されてないような? 参考 scalaris の configure.ac Erlang Compiler and Interpreter - Autoconf Erlang Libraries - Autoconf

    erlang + autoconf - cooldaemonの備忘録
  • Mnesia のレプリケーションを試す - cooldaemonの備忘録

    Mnesia のレプリケーションをいろいろ試してみたのでメモ。 まずは、下記を mnesia_test.erl というファイル名で保存して、コンパイルする。 -module(mnesia_test). -include_lib("stdlib/include/qlc.hrl"). -record(store, {key, value}). -export([start/0, start/1, restart/1, set/2, get/1]). start() -> mnesia:start(), mnesia:create_schema([node()]), mnesia:create_table(store, [{attributes, record_info(fields, store)}]). start(Nodes) -> mnesia:start(), mnesia:chang

    Mnesia のレプリケーションを試す - cooldaemonの備忘録
  • gen_server - cooldaemonの備忘録

    前に作った echo server を gen_server 化しようと思ったのですが、幾つか疑問点が出てきたので、まずは、自分が理解した事をまとめてみようと思います。 カウンタを保持するサーバの例 内部で一つの数値を保持している 初期値/最小値 0 最大値 100 開始 gen_server_test.counter:start() 終了 gen_server_test.counter:stop() 現在値を取得 gen_server_test.counter:get() インクリメント gen_server_test.counter:increment() デクリメント gen_server_test.counter:decrement() -module(gen_server_test.counter). -behaviour(gen_server). -import(gen_ser

    gen_server - cooldaemonの備忘録
    kuenishi
    kuenishi 2008/08/24
    サーバーぷろぐらみんぐ
  • Erlang の関数を繰り返し実行するジョブ・スケジューラらしきものを作ってみた - cooldaemonの備忘録

    udp_server に次ぐ、erlang による kademlia 実装の副産物その2。 定期的に関数を実行したかっただけなんですが、ファイル数が増えたので別プロジェクトにしてみました。 ジョブは起動時に supervisor 配下に置かれるので、落ちても再起動されます。 また、ジョブの状態を管理しているプロセスが、ジョブ体と分離しているので、ジョブ実行中であっても状態の変更を受け付けます。(反映は、実行後だけど) 使い方 ここの download か、下記のコマンドで Source を取得。 git clone git://github.com/cooldaemon/erljob.gitダウンロードしたディレクトリで make コマンドを使ってコンパイルを行う。 $ cd /path/to/erljob $ make後は、下記のような感じで使えます。 $ erl -pa /path/

    Erlang の関数を繰り返し実行するジョブ・スケジューラらしきものを作ってみた - cooldaemonの備忘録
  • KLab勉強会 #3 「Erlang による高可用システムの構築」の感想 - cooldaemonの備忘録

    まずは、有意義な時間を過ごせた事に感謝! 会社としての取り組み 既に社内で利用し始めているようで、とても羨ましい。現在、根回しに労力を割いている私とはエライ違いだ orz もし、erlang ネタで次回があれば、プロダクション環境で運用する為のノウハウを聞いてみたいと思いました。 あー、懇談会に出席できたら良かったのに!! net_kernel:get_net_ticktime/0 こんな関数がある事を始めて知りました。 調べてみると、net_kernel:set_net_ticktime/1 以外に kernel の configuration でも設定できるっぽい。 ブロックする処理 質疑応答で、ブロックする処理の扱いは?という質問が出た。回答としては、ノード上のプロセスがブロックされても問題ない…だったような?(ちょっと記憶が曖昧) 確かに、ノード上のプロセスがブロックされても、他の

    KLab勉強会 #3 「Erlang による高可用システムの構築」の感想 - cooldaemonの備忘録
  • Process Dictionary、dict、ets、gb_trees の速度比較 - cooldaemonの備忘録

    それぞれの用途が異なるので、速度比較に意味があるのか疑問だけれど・・・単純なキー・値のペアを保持する場合の速度比較を行なってみた。 何度か試した結果、保存・取得共に process dictionary、ets、dict、gb_trees の順に早い。 gb_trees 比べて dict の速度が優秀で意外だった。 検証コードは下記の通り。 -module(benchmark). -author('cooldaemon@gmail.com'). -export([run/1]). run(Count) -> Keys = lists:seq(1, Count), lists:foreach( fun ({F, TargetName}) -> {[SetRunTime, SetWallClock], [GetRunTime, GetWallClock]} = F(Keys), io:fwri

    Process Dictionary、dict、ets、gb_trees の速度比較 - cooldaemonの備忘録
  • erlang の OO もどきの仕様(これっていつから?) - cooldaemonの備忘録

    下記のコードのように、-module の二つ目の引数にリストを渡すと・・・ -module(new_test, [Test1, Test2, Test3]). -author('cooldaemon@gmail.com'). -export([get/1]). get(test1) -> Test1; get(test2) -> Test2; get(test3) -> Test3. new/3 が定義され、get/1 の引数が一つ増えて、get/2 となる。 $ erl 1> new_test:module_info(). [{exports,[{new,3},{get,2},{module_info,0},{module_info,1}]}, {imports,[]}, {attributes,[{vsn,[82552267300809369358202831582896571762]

    erlang の OO もどきの仕様(これっていつから?) - cooldaemonの備忘録
    kuenishi
    kuenishi 2008/07/15
    erlangでオブジェクト指向、Object Oriented...Perlっぽい実装。
  • Erlang で Apache worker MPM っぽいことを OTP っぽく実装してみた - cooldaemonの備忘録

    たけまる / Erlang で Apache worker MPM っぽいこと accept 待ちのプロセスを supervisor 配下に置いてみました。 tcp_server.hrl -author('cooldaemon@gmail.com'). -define(MAX_TIME, 60). -define(SHUTDOWN_WAITING_TIME, 2000). -define(MAX_ACCEPT, 100). tcp_server_sup.erl -module(tcp_server_sup). -author('cooldaemon@gmail.com'). -behaviour(supervisor). -include("tcp_server.hrl"). % External API -export([start_link/3, stop/0]). % Callbac

    Erlang で Apache worker MPM っぽいことを OTP っぽく実装してみた - cooldaemonの備忘録
  • 開発中は reloader を使うべし - cooldaemonの備忘録

    mochiweb に付属の reloader を使うと、更新のあった module を再読み込みしてくれるので、デバックの手間が少し減る。 source の中身 gen_server として常駐する。 timer:send_interval/2 を使って自分自身に一秒間隔でメッセージ doit を送る。 doit を受信すると、code:all_loaded/0 でロード済みモジュールの一覧を取得し、更新があるモジュールは、code:purge/1 して code:load_file/1 している。 更新の判定は、file:read_file_info/1 で beam ファイルの情報を取得して、前回のチェック日時より新しければ更新ありと判定している。 使い方 単純な gen_server なので、reloader.beam がカレントディレクトリに存在するなら下記の通り。 % erl -

    開発中は reloader を使うべし - cooldaemonの備忘録
  • MVC の実現の仕方(私の場合) - cooldaemonの備忘録

    以下のエントリを拝見させて頂いて、思った事のメモ。 MVCのモデルはDBじゃなくてもいいんだよ - D-6 相変わらず根無し 個人差があるかとは思いますが、Catalyst を使っていると、 C のテストを書く行為を、私は、そんなに苦に感じない。ただ、C は URI リソースと M を繋ぐラッパと割り切り、複雑なビジネスロジックは M に押し付ける方が、コードがスッキリするし、M 自体を汎用的にできそう。 MVCのモデルはDBじゃなくてもいいんだよ - D-6 相変わらず根無し じゃあ元々のブクマコメントのModel::DBICはどうすんだよ、いらないのかよ、みたいなところに行き着くかと思うのだが、そこはそれ、モデルに「格納先」を指定するのにDBを抽象化したModel::DBICを使ってやる、っていう手もある my $c = shift; # Catalyst的なcontextがあると仮定

    MVC の実現の仕方(私の場合) - cooldaemonの備忘録
  • Mnesia で作った memcached もどきにレプリケーション機能とディスク保存機能を追加した - cooldaemonの備忘録

    まだ中途半端だが、晒してみる。 突っ込み大歓迎。 source http://labs.miu.vc/svn/cooldaemon/erl/yamd/trunk/ インストール % cd /path/to % svn co http://labs.miu.vc/svn/cooldaemon/erl/yamd/trunk/ yamd % cd yamd % makeFreeBSD なら make のかわりに gmake を実行。 使い方 scripts ディレクトリ配下の yamd を実行する事で操作を行う。 起動 % yamd start -n yamd1@`hostname` -p 11211 -t ram -n 起動する erlang ノード名を指定する。(-sname ではなく、-name を使っているので注意) -p ポート番号 -t ram もしくは disc。disc にすると

    Mnesia で作った memcached もどきにレプリケーション機能とディスク保存機能を追加した - cooldaemonの備忘録
  • config ファイルの楽な読み込み方(application を使う場合、限定) - cooldaemonの備忘録

    erlang 付属の httpd や yaws 等は、設定ファイルを自力で開き、読み込み、値を確認して…とやっている。 何か楽をできる良い方法は無いものか?と思い調べたらあったのでメモを残す。 erl コマンドには便利な -config オプションがある。 % erl -config testと実行すると、./test.config という名前の設定ファイルを読み込んでくれる。 ただし、読み込んだ値は application から値を参照する必要がある。 以前、id:cooldaemon:20070826:1188094671 で作った application を利用して試す。 % cat test.config [{test, [ {key1, value1}, {key2, value2} ]}]. % erl -config test 1> application:start(tes

    config ファイルの楽な読み込み方(application を使う場合、限定) - cooldaemonの備忘録
    kuenishi
    kuenishi 2007/10/14
    設定ファイル