erlang
yaws 調査の為、試しに RESTfull な I/F を持つストレージを作ってみたので晒してみる。 インストール % svn co http://labs.miu.vc/svn/cooldaemon/erl/ssd/trunk/ ssd % cd ssd % makemake を実行する前に、Makefile 内の yaws のインストール先を編集する…
Yaws を embedded モードで動かす為のメモ(適当) appmods で使う為のモジュール 適当に、arg を出力するモジュールを準備する。 -module(put_arg). -author('cooldaemon@gmail.com'). -include("/path/to/yaws/include/yaws_api.hrl"). -export([out/1]). ou…
yaws で遊んでいたのですが、GET で a=b&a=c みたいな引数を渡すと yaws_api:parse_query(Arg) を実行した際の戻り値が [{"a","b"}, {"a","c"}] となるので、リスト内のタプルのキーが重複する場合は、どうやったら素早くタプルを取り出せるのかなぁと思い、…
まだ、解らない事だらけだが、使い始める所まで辿り着いたのでメモを残す。 run_test コマンドの準備 run_test とは、名前の通り、テストを実行してくれるコマンドで、実際は、erl コマンドを実行するシェルスクリプト。 作業は、Common Test がインストール…
うれしい。
イベント発生時の処理を管理する為のモジュール。 管理プロセスに、予め処理を 0〜複数個 登録しておくと、イベント発生時に実行してくれる。 管理プロセスの起動 1> gen_event:start_link({local, event_hoge}). {ok,<0.33.0>} これで、event_hoge という名…
まだ中途半端だが、晒してみる。 突っ込み大歓迎。 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 のかわり…
こそこそ使ってたのを commit したので公開。 辞書 snippets(snippetsEmu.vim が必要) それは使い難いから、こーした方が良いとか、突っ込み大歓迎。
これと・・・ lists:map(fun (X) -> X*2 end, lists:seq(1, 10)). これは・・・ [fun (X) -> X*2 end(X) || X <- lists:seq(1, 10)]. 同じ結果になる。下記のような適当な実行時間を計測する module を作って・・・ -module(bench). -export([mark/1]). mark…
gen_tcp の練習で書いた id:cooldaemon:20070614:1181827975 を gen_server 化しようと考えたが、gen_tcp モジュールの accept や recv は処理をブロックするので、gen_server 化を諦めて id:cooldaemon:20070717:1184676090 のように proc_lib を使ってお茶…
某所で apache に負荷をかける為に erlang を使おうとして、知らずに http module を上書きしててハマったという書き込みをみて、Programming Erlang の APPENDIX E. Dynamic Code Loading の内容を思い出したので紹介。まず、下記の source code を準備。 -…
id:cooldaemon:20071013:1192285916 で application を使った場合にのみ使える限定的な方法を書いたが、もっと簡単な方法を見つけたので紹介。 % cat ./test.config {test1, foo, bar}. [test2, {foo, 1}, {bar, 2}]. test3. % erl 1> file:consult("./test.…
今まで(id:cooldaemon:20070919:1190169198 とか)、下記の source のように Mnesia を起動した後に mnesia:create_schema/1 を実行していたのですが… start() -> mnesia:start(), mnesia:create_schema([node()]), mnesia:create_table(store, [{attributes,…
id:cooldaemon:20071013:1192285916 を書く際、 man erl を読んでいたら、erl コマンドにユーザ定義のオプションを渡す方法が書かれていたのでメモを残す。(これ常識なんだろうなぁ) % erl -flag1 value1 -flag2 value2 value3 1> init:get_arguments(). […
erlang 付属の httpd や yaws 等は、設定ファイルを自力で開き、読み込み、値を確認して…とやっている。 何か楽をできる良い方法は無いものか?と思い調べたらあったのでメモを残す。erl コマンドには便利な -config オプションがある。 % erl -config test…
id:cooldaemon:20071011:1192094209 で Mnesia 上のテーブルをディスクに保存しましたが、そのテーブルに関数を入れて遊んでみました。前回作ったノード a を再起動し、io:fwrite/2 を保存する。 % erlang -sname a (a@imac)1> mnesia_test:restart(). ok (a…
id:cooldaemon:20070919 で書いた Mnesia のレプリケーションの記事で、id:Hamano 氏からコメントで 便利ですよねー、mnesia のレプリケーション。 でも最近悩んでいるのが ram_copies ram_copies と disc_copies ram_copies は2つ目を後から起動しても上手…
メソッド名一覧の表示 どう書く?org リフレクション系のお題の続編です。「ある与えられたオブジェクトtargetのメソッドのうち、 "test_"で始まるものをすべて呼びだす」というコードを書いてください。引数に関しては都合のいいように仮定して構いません(…
ロック状態がどうなっているか気になったので、いろいろコード書いて試したところ、テーブル単位でロックが掛かっていた…。 レコード毎にロックできないもんだろうか? ちなみに、トランザクション内で qlc:q を使って QueryHandle を作ると read lock にな…
Mnesia のレプリケーションをいろいろ試してみたのでメモ。まずは、下記を mnesia_test.erl というファイル名で保存して、コンパイルする。 -module(mnesia_test). -include_lib("stdlib/include/qlc.hrl"). -record(store, {key, value}). -export([start/0…
erlang でエラーログを管理する方法を調べたのでメモ。まず、sasl の設定ファイルを作成。適当に elog.config として保存する。 [{sasl, [ {sasl_error_logger, false}, {errlog_type, error}, {error_logger_mf_dir, "/path/to/logs"}, {error_logger_mf_ma…
先日、erlang でテストを書くモジュールは無いのか?(id:cooldaemon:20070910:1189392523)と書いたところ、jijixi's diary - ユニットテストフレームワーク , 契約プログラミング , ほにほにネタ数点で eunit を教えて頂いたので、早速使ってみた。 インスト…
memcached の代替えを作った際、Mnesia の I/F と TCP の I/F を分けて作ったので、割とテストは楽なのだが・・・手動では、やってらんないなーと思った。 そこで、yaws ではどうやっているのだろうかと思ったら、そんな事はやってなかった orz (勘違いだと…
DSAS開発者の部屋:Erlang で memcached を作ってみました。 触発されました。で、家族サービスを一日サボって作りました。嫁と子供達に感謝!http://labs.miu.vc/svn/cooldaemon/erl/yamd/trunk/ memcached との違い プロトコル(w; validation が抜けまく…
id:cooldaemon:20070717:1184676090 で作った echoserver を常駐させる方法を調べた。 erl -sname echoserver3 -s echoserver3 start_link -detachedコマンドで上記を実行するだけ。 -sname オプションで名前を付けているので、停止する場合は、これを使う。…
id:cooldaemon:20070717 で作った supervisor を application から操作できるようにしてみる。 .app ファイルを準備 test と言う名前の application にするので、test.app を作成する。 内容は下記の通り。 {application, test, [{description, "test applic…
やっつけだけど動く。Web::Scraper 便利すぎ! #!/usr/bin/env perl use strict; use warnings; use List::MoreUtils qw(uniq); use URI; use Web::Scraper; my $scraper = scraper { process '//html/body/p/table/tr/td[3]/a', 'functions[]' => 'text'; r…
gen_server、supervisor、proc_lib の三つを押さえれば、httpd.erl の起動と停止の動作を理解する事が可能。 って事で、以前 みかログ: Erlang で echo server こちらで添削して頂いた id:cooldaemon:20070614 を proc_lib で書き直してみた。 -module(echos…
仕事が落ち着いたので、erlang 勉強再開。 id:cooldaemon:20070625 と id:cooldaemon:20070630 で作った server を supervisor tree に入れてみた。 -module(sup). -behaviour(supervisor). -export([start_link/1, stop/0]). -export([init/1, worker_spec/…
httpd の source を見てたら Supervisor Behaviour を使っていて…Supervisor Behaviour を読んでいたら、supervision tree の考え方と実装方法を理解しなきゃ駄目っぽい気がしたので、OTP Design Principles の Overview に目を通してみた。で、以前、gen_se…