daemontools で dt-run を利用した監視サービスの追加方法

Google で検索しても、あまり解説を見かけなかったので、さらっとメモを残します。 前提条件 このあたりを、RPM でインストール済みであると仮定。(daemontools、functions、runlevelconf、dt-run がインストール済みで、svscan が /service 配下を監視中と…

私が Erlang で Package を使わない、ただ一つの理由

結論 Common Test と相性が悪いから。 補足 kai の tcp_server をファイル分割しようと思い、試しに Package を使ってみたのですが、Common Test で下記のようなエラーが出てしまいました。 === ERROR! init_per_testcase crashed! Line: {kai_tcp_server_SU…

Key-Value Store (Strage) 勉強会にお邪魔してきました

kvs

id:Voluntas さんのコネで潜り込んできました。当初の目当ては、id:teahut さんによる Kai の発表と、首藤さんによる Overlay Weaver の発表だったのですが、面白い発表が目白押しで非常に濃い 5 時間を過ごす事ができました。 感想 素晴らしいまとめが ここ…

quickfix で Template::Toolkit によるテンプレートファイルのシンタックスチェックを行う

flymakeでTemplate::Toolkitによるテンプレートファイルのシンタックスチェックを行う - antipop を見て良いなーと思ったので vim でやってみました。ありがたやー。 Source は、gist: 66796 - GitHub にあります。

gen_server のコールバックモジュール内で badarith が発生すると supervisor ごと落とされる

検証コード -module(test_sup). -author('cooldaemon@gmail.com'). -behaviour(supervisor). -export([start_link/0]). -export([init/1]). start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). init(_Args) -> Flags = {one_for_one, 1…

守破離

自戒も込めて記す。守を疎かにして仕事を創造すると、本来得たい成果から逸れた方向に突き進む事になる。 今朝、娘が、まだ濡れている洗濯物を取り込んでいる姿を見て思いついた。 妻に言われる前に動いた事は偉いけれど、それは、誰にも望まれない行為だよ。…

SpiderMonkey + JSLint + Vim

二年前に SpiderMonkey 使って perl で簡単な Syntax チェック用の Script を書いてみた 改訂版 と言う記事を書いたのですが、部下に JS を教える為に環境構築していたら、Perl Module の JavaScript と JavaScript::JSLint のテストが通らずイラっとしたの…

常駐している Erlang プロセスのコードを入れ替える事ができる条件

常駐している Erlang プロセスのコードを無停止で動的に入れ替えるには、設計の段階で、入れ替えが発生すると思われる箇所を、プロセスとは異なる別モジュールに切り離しておく必要がある。 常駐している Erlang プロセスのコードの入れ替えに失敗する例 ま…

kai_tcp_server: a simple module for implementing concurrent TCP servers

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 m…

Selenium のテストケースに一定の待ち時間を入れる

Perl で Test::WWW::Selenium を使う際には関係のない話ではあるのですが...、HTML と JavaScript (Selenium IDE 上)だけで sleep を実現したいという要望を頂いたので下記を提案してみました。 <tr> <td>waitForCondition</td> <td>var et = (new Date()).getTime() + 3000; </td></tr>…

第二回 Erlang 分散システム勉強会の感想

感想 Process Design and Polymorphism: Lessons Learnt from Development of Kai 並列性を確保する為、何をプロセス化し、何をプロセス化しないのか?の指標を提示されていたのが、一番興味深かったです。 質疑応答の中で、設定値を保持する箇所をプロセス…

久しぶりに どう書く?.org に投稿

疑似並行処理 どう書く?org どう見ても Erlang 向けのお題だったので解いてみました。 どう書く?org 8013 cooldaemon: Erlang のプレーンな例は、他の方が...(疑似並行処理) - 投稿の詳細 lists を多用しているので、下記のように import した方がスッキリ…

第2回 Erlang 分散システム勉強会が開催されます

詳細は・・・ たけまる / 第2回 Erlang 分散システム勉強会 上限30名の所に、既に10名ほど予約が入っているので、参加希望の方は早めに参加予約した方が良いと思います。 ちなみに、スピーカーも募集中です。個人的には erlang の話だけではなく、p2p、DHT …

erlang + autoconf

autoconf を、生まれて初めて書いた。 gist: 20329 ― GitHub 識者の突っ込みを募集中です m(_ _)mautomake は、また今度お勉強する。何故か FreeBSD 6.3 + autoconf 2.62 の環境で作った configure が Erlang ライブラリの検出に失敗する。 OSX 環境で作った…

quickrun.vim + erlang

ちょっと強引かもしれないけれど・・・これを ~/bin/erle に保存して、quickrun.vim の augroup plugin-quickrun の中に下記を含める。 autocmd Filetype erlang call s:set_quickrun_command('~/bin/erle') ちなみに、ただの file:eval/1 のラッパーコマン…

Webistrano で Catalyst で作ったアプリをデプロイする

とある Subversion をリポジトリとするプロジェクトで、デプロイツールとして Capistrano を使用しようと思ったのですが、私と同僚の開発環境が異なる事を理由に、前から目を付けていた Webistrano を試してみました。 動作環境 apache 2.2.9 mysql 5.0.67 r…

yecc/leex で簡易的な電卓を作ってみた

reia の Source を追ってる途中、気が向いたので yecc と leex を使い yacc/lex で言うところの "Hello World." 的な儀式である電卓を作りに挑戦してみました。gist: 13773 - GitHub reia の Source に付属する escript で書かれた yecc と leex へのラッパ…

Re:Kademliaについて細かい話

Kademliaについて細かい話 - NO!と言えるようになりたい コードを読んでもらえて、しかも、返信を頂けると、とても嬉しいです。 ありがとうございます! タイムアウトしたノード情報を保持し続ける為、churn 下でパフォーマンスが落ちる件 タイムアウトした…

Erlang で分散ハッシュテーブル(kademlia)を使った Key-Value Store 作ってみたよ

Kai に kademlia の組み込みを提案する為、試しに作っていたのですが、README に書いた How to Use の項目が動くようになったので晒してみます。 cooldaemon's ermlia at master ― GitHub 設置方法なんかも README に書いてあるので、ご興味のある方は、そち…

テスト時に smerl.erl を使って依存しているモジュールをモックに置き換える

DI しとけって話なんだろうけど(w; % ..snip.. -module(mock_foo). % ..snip.. -export([setup/0, cleanup/0]). % ..snip.. -define(REAL_MODULE, foo). % ..snip.. setup() -> {ok, Mock} = smerl:for_module(?MODULE), smerl:compile(smerl:set_module(M…

Danga::Socket を使って Echo Server と Client を書いてみた

erlang perl 間を TCP/IP で接続しようと思い立ち、そーいや Danga::Socket ってのがあったなーと思い出したので、試しに Echo Server と、その Client を作ってみた。 こんな感じで良いのだろうか? とりあえず、動いてる。 参考 URI Danga::Socket::Callba…

先日、git の alias を見直してみた

git

「alias g='git'」を設定して、.gitconfig をこんな感じにしてみた。 「g st」で「git status」となるのでタイプ数がかなり減った気がする。

vim + ManPageView で erl -man を使う

今まで、 MANPATH に /opt/local/lib/erlang/man を追加してたのですが、そもそも erlang の man は、vim 起動中にしか見ないよね?という事で、ManPageView に手を加えてみた。 78a79,82 > if !exists("g:manpageview_pgm_erl") > let g:manpageview_pgm_er…

Oreilly から 新しい Erlang 本が出るっぽい

http://www.amazon.co.jp/gp/product/0596518188 楽しみだなぁ・・・。とりあえず、目次情報求む。

split/2 を再発明して、split_map/3 と split_foldl/4 を作った

ので、list_utils.erl に追加しました。 lists:split/2 は「lists:split(2, [1]).」とかやるとエラーになる為、ループで使い難いんですよね・・・。 list_utils:split/2 を利用した例として、list_utils:split_map/3 と list_utils:split_foldl/4 も list_ut…

rpc:parallel_eval/1 を使わない single node で動く pmap を作ってみた

kademlia 絡みで UDP 通信を並列で行ないたくなったので作ってみました。 送信元の IP アドレスやポート番号が異なると困るので、rpc:parallel_eval/1 は不使用です。 処理全体のタイムアウト処理と、ワーカーのタイムアウト処理を個別に指定可能です。 list…

lists モジュール、自前の関数、リスト内包表記の速度比較

検証コード gist: 6312 ― GitHub 感想 foreach 末尾再帰できなくても自前の関数の方が早い・・・コードの書き方が悪いのかな? lists:foreach/2 を使ったからといって、可読性が劇的に上がるわけでもないので、lists:foreach/2 は使うの止めよう。foreach に…

gen_X 系モジュールの code_change を appup とは関係なく呼ぶ

gen_server や gen_fsm 等が保持する State を、サーバ停止せずに(正確には suspend するけど)入れ替える方法のメモ。 OTP から逸脱している感があるけれど、Release Handling は無視の方向で(w; ちなみに、下記の内容を試す際は、こちら をどうぞ。まずは…

Erlang の関数を繰り返し実行するジョブ・スケジューラらしきものを作ってみた

udp_server に次ぐ、erlang による kademlia 実装の副産物その2。 定期的に関数を実行したかっただけなんですが、ファイル数が増えたので別プロジェクトにしてみました。 ジョブは起動時に supervisor 配下に置かれるので、落ちても再起動されます。 また、…

野良 port の erlang(disable hipe) を R12B-3 にした

gist: 2768 ― GitHub hipe を有効にした。それに伴い、Portfile 内の name を erlang にした。