2007-01-01から1年間の記事一覧

ports の erlang が R12B-0 になった

うれしい。

gen_event

イベント発生時の処理を管理する為のモジュール。 管理プロセスに、予め処理を 0〜複数個 登録しておくと、イベント発生時に実行してくれる。 管理プロセスの起動 1> gen_event:start_link({local, event_hoge}). {ok,<0.33.0>} これで、event_hoge という名…

autocomplpop.vim による自動補完が便利すぎる

vim

fuzzyfinder.vim と作者様が一緒。詳細は、こちら→('q') ns9tks's wiki - autocomplpop.vim 私は .vimrc に下記を加えて使ってます。 autocmd FileType * let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i' autocmd FileType perl let g:AutoComplPop_Comp…

Mnesia で作った memcached もどきにレプリケーション機能とディスク保存機能を追加した

まだ中途半端だが、晒してみる。 突っ込み大歓迎。 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 のかわり…

KLab勉強会 #3 「Erlang による高可用システムの構築」の感想

まずは、有意義な時間を過ごせた事に感謝! 会社としての取り組み 既に社内で利用し始めているようで、とても羨ましい。現在、根回しに労力を割いている私とはエライ違いだ orz もし、erlang ネタで次回があれば、プロダクション環境で運用する為のノウハウ…

erlang 用の辞書ファイルと snippets ファイル

こそこそ使ってたのを commit したので公開。 辞書 snippets(snippetsEmu.vim が必要) それは使い難いから、こーした方が良いとか、突っ込み大歓迎。

lists:map/2 のかわりにリスト内包表記を使う

これと・・・ 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…

supervisor の simple_one_for_one を使って echoserver を書き直した

gen_tcp の練習で書いた id:cooldaemon:20070614:1181827975 を gen_server 化しようと考えたが、gen_tcp モジュールの accept や recv は処理をブロックするので、gen_server 化を諦めて id:cooldaemon:20070717:1184676090 のように proc_lib を使ってお茶…

Dynamic Code Loading

某所で apache に負荷をかける為に erlang を使おうとして、知らずに http module を上書きしててハマったという書き込みをみて、Programming Erlang の APPENDIX E. Dynamic Code Loading の内容を思い出したので紹介。まず、下記の source code を準備。 -…

config ファイルの楽な読み込み方 その2

id:cooldaemon:20071013:1192285916 で application を使った場合にのみ使える限定的な方法を書いたが、もっと簡単な方法を見つけたので紹介。 % cat ./test.config {test1, foo, bar}. [test2, {foo, 1}, {bar, 2}]. test3. % erl 1> file:consult("./test.…

Mnesia を起動した後、schema を local node の ram に配置するなら mnesia:create_schema/1 は不要だった

今まで(id:cooldaemon:20070919:1190169198 とか)、下記の source のように Mnesia を起動した後に mnesia:create_schema/1 を実行していたのですが… start() -> mnesia:start(), mnesia:create_schema([node()]), mnesia:create_table(store, [{attributes,…

erl コマンドにユーザ定義のオプションを渡す

id:cooldaemon:20071013:1192285916 を書く際、 man erl を読んでいたら、erl コマンドにユーザ定義のオプションを渡す方法が書かれていたのでメモを残す。(これ常識なんだろうなぁ) % erl -flag1 value1 -flag2 value2 value3 1> init:get_arguments(). […

config ファイルの楽な読み込み方(application を使う場合、限定)

erlang 付属の httpd や yaws 等は、設定ファイルを自力で開き、読み込み、値を確認して…とやっている。 何か楽をできる良い方法は無いものか?と思い調べたらあったのでメモを残す。erl コマンドには便利な -config オプションがある。 % erl -config test…

Mnesia で永続化したテーブルに関数を入れ、全ノード停止後に再起動し、別ノードで実行したら動いた(まー、動いて当たり前ですけど)

id:cooldaemon:20071011:1192094209 で Mnesia 上のテーブルをディスクに保存しましたが、そのテーブルに関数を入れて遊んでみました。前回作ったノード a を再起動し、io:fwrite/2 を保存する。 % erlang -sname a (a@imac)1> mnesia_test:restart(). ok (a…

Mnesia に保存されたデータを永続化する(後からノードを追加しても大丈夫)

id:cooldaemon:20070919 で書いた Mnesia のレプリケーションの記事で、id:Hamano 氏からコメントで 便利ですよねー、mnesia のレプリケーション。 でも最近悩んでいるのが ram_copies ram_copies と disc_copies ram_copies は2つ目を後から起動しても上手…

ある module に含まれた _test が関数名末尾に付く関数の一覧を取得する

メソッド名一覧の表示 どう書く?org リフレクション系のお題の続編です。「ある与えられたオブジェクトtargetのメソッドのうち、 "test_"で始まるものをすべて呼びだす」というコードを書いてください。引数に関しては都合のいいように仮定して構いません(…

mnesia:select と qlc:q の lock はテーブル丸ごと

ロック状態がどうなっているか気になったので、いろいろコード書いて試したところ、テーブル単位でロックが掛かっていた…。 レコード毎にロックできないもんだろうか? ちなみに、トランザクション内で qlc:q を使って QueryHandle を作ると read lock にな…

Mnesia のレプリケーションを試す

Mnesia のレプリケーションをいろいろ試してみたのでメモ。まずは、下記を mnesia_test.erl というファイル名で保存して、コンパイルする。 -module(mnesia_test). -include_lib("stdlib/include/qlc.hrl"). -record(store, {key, value}). -export([start/0…

エラーログ管理(sasl、error_logger、rb)

erlang でエラーログを管理する方法を調べたのでメモ。まず、sasl の設定ファイルを作成。適当に elog.config として保存する。 [{sasl, [ {sasl_error_logger, false}, {errlog_type, error}, {error_logger_mf_dir, "/path/to/logs"}, {error_logger_mf_ma…

erlang でテストファースト

先日、erlang でテストを書くモジュールは無いのか?(id:cooldaemon:20070910:1189392523)と書いたところ、jijixi's diary - ユニットテストフレームワーク , 契約プログラミング , ほにほにネタ数点で eunit を教えて頂いたので、早速使ってみた。 インスト…

erlang でテストの自動化ってどうやるのだろうか?

memcached の代替えを作った際、Mnesia の I/F と TCP の I/F を分けて作ったので、割とテストは楽なのだが・・・手動では、やってらんないなーと思った。 そこで、yaws ではどうやっているのだろうかと思ったら、そんな事はやってなかった orz (勘違いだと…

Erlang(Mnesia) で memcached (互換なし)を作ってみました

DSAS開発者の部屋:Erlang で memcached を作ってみました。 触発されました。で、家族サービスを一日サボって作りました。嫁と子供達に感謝!http://labs.miu.vc/svn/cooldaemon/erl/yamd/trunk/ memcached との違い プロトコル(w; validation が抜けまく…

rails + lighttpd + fastcgi の環境で、fastcgi の起動・停止・再起動を capistrano に任せる

rails + lighttpd + fastcgi の環境で、fastcgi の起動・停止・再起動を capistrano に任せる作業に、少しハマったので作業メモを残す。deploy.rb の内容や、他の詳しい解説は他のウェブ上資料に譲る。 app_name/script/spin ./script/process/spawner fcgi …

/libexec/ld-elf.so.1: Shared object "libintl.so.6" not found, required by "gmake"

お手伝いで FreeBSD に rails と senna を入れようと思って作業していた時の話です。 rails で gettext 使うとの事だったので、何となーく ports で gettext を新しいものに入れ替えました。 その後、senna を入れる為に make を実行すると、タイトルのエラ…

QuickSilver の Firefox Plugin でエラーが出ていたので対応

console.log を眺めていたら、下記のようなエラーが出ていた。 mork.pl: /Users/cooldaemon/Library/Application Support/Firefox/Profiles/xxxxx.default/history.dat: top level: Cannot parsemork.pl を /Users/cooldaemon/Library/Application Support/Q…

erlang shell を background で実行(erlang で書いたサーバを常駐させる)

id:cooldaemon:20070717:1184676090 で作った echoserver を常駐させる方法を調べた。 erl -sname echoserver3 -s echoserver3 start_link -detachedコマンドで上記を実行するだけ。 -sname オプションで名前を付けているので、停止する場合は、これを使う。…

application

id:cooldaemon:20070717 で作った supervisor を application から操作できるようにしてみる。 .app ファイルを準備 test と言う名前の application にするので、test.app を作成する。 内容は下記の通り。 {application, test, [{description, "test applic…

vim の erlang 用辞書ファイルを Web::Scraper で作る

やっつけだけど動く。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…

ファイルタイプ毎に辞書を分ける

vim

こんな感じでどうだろう。 autocmd FileType * set complete=.,w,b,u,t,i autocmd FileType perl set complete-=i | set complete+=k~/.vim/dict/perl.dict autocmd FileType ruby set complete+=k~/.vim/dict/ruby.dict autocmd FileType javascript set co…

インサートモード時の が use しているファイルの中を検索するからウザイ

CPAN モジュールをわんさかインストールしているので、 が非常に重い。 インストールされいてる CPAN モジュールから辞書ファイルを自動生成しているので、辞書ファイルからだけ補完されれば良い。help cpt を見ると・・・ *'complete'* *'cpt'* *E535* 'com…