kvs

Erlang の Record を更新する

gen_server::handle_call の State を構造体で表現しているとして -record(state, {key, value, left, right}). value だけ更新して、reply したい場合がある。今までは {state, State#state.key, myValue2, State#state.left, State#state.right} としてた…

Erlang のエラーメッセージは分かりづらい

kvs

みんな同じ感想を持っているようだが、とにかく分かりづらい。 内部実装がパターンマッチを多用しているからだろうか?

supervisor:start_node で子プロセスをいくつも動的に追加する

kvs

色々勘違いしていたので整理。 supervisor:start_node で子プロセスが起動しなかったのは mio_node:supervisor で gen_server:start_link({local, ?SERVER}, ?MODULE, Args, []). していたから ?SERVER が key で register されてしまうので次の起動時に alr…

Erlang でエラー行表示 smart_exceptions

kvs

Erlangで行番号付きでエラーを出力する方法: みかログ を参考にしつつ最新の Erlang で動くように。 devel at 3a91498669996e05a2199bb42df938343b2abec0 from thomasl's smart_exceptions - GitHubから、最新版 Erlang 対応の smart_exceptions を持ってく…

Erlang handle_call 周り

kvs

gen_server:handle_call で State を持ち回る事での状態を保持する事ができる。 handle_call(get, From, State) -> {reply, {State#state.key, State#state.value}, {state, State#state.key, myValue2, State#state.left, State#state.right}}; gen_server:…

Erlang のアプリケーション構築開始

kvs

やったこと ドキュメントを読んでディレクトリを作った。ebin/src/log/test 。 supervisor, gen_server, application それぞれの behaviour のひなたがを作った Common Test を導入して簡単なテストを書いた Makefile を整備 make make check 未解決 supervi…

Erlang の application

kvs

Applications を読み ディレクトリ構成 start.sh アプリ名.erl などを整備。 とりあえず空で動かすようにしたければ start/2 が {ok, Pid} を返さないといけない。 pid をねつ造しようと思ったが方法が分からないので何もしない spawn で対処。

Multi-key Skip Graph の仕組みを学ぶ

kvs

「単一ピアに複数キーを保持可能とするSkip Graph拡張の提案」という論文で提案されている Multi-key Skip Graph を学ぶ。 大変苦労して読み解いたので、以下にまとめた事は間違っている可能性が高いので注意。 誤りがありましたらぜひご指摘ください。 背景…

続 単純な場合の Skip Graphs アルゴリズムを実装してみた 4

kvs

ToDo に挙げていたリファクタリング項目を全てクリア。漸く見られるコードになってきたかな。 実装の面白さの肝は 隣接ノードに、再帰的に問い合わせていく部分 レベルを上下する事で検索パスを短くできる事 結果を返すべきノードを持ち回る部分(若干 CPS …

続 単純な場合の Skip Graphs アルゴリズムを実装してみた 3

kvs

動作の主体が明確になるように search-op, insert-op, buddy-op, link-op を書き直した。 buddy-op の実装が論文に載っていないので若干苦労したが多分実装できたと思う。論文中の buddy-op の引数と戻り値は微妙な気がした。 まだまだ実装の重複や未実装が…

続 単純な場合の Skip Graphs アルゴリズムを実装してみた 2

kvs

http://gist.github.com/131798 insert の間違いを修正 グローバルなものを削除 node 1つから生成可能 などの改善。指定された key の近接ノードを見つけるメソッドが全てにおいて中心的役割を担う感じ。

続 単純な場合の Skip Graphs アルゴリズムを実装してみた 1

kvs

前回の実装は node の追加方法が間違っていたので修正中。 具体的には検索と同様に任意のピアに対して追加すべきところをグローバルな何かを仮定してたのが間違い。 ToDo が増えてきたので整理。 グローバル要素の完全排除 2段階ではなく n 段階に 動作の主…

単純な場合の Skip Graphs アルゴリズムを実装してみた

kvs

分散などは考えずに、単純な場合の Skip Graphs アルゴリズムを実装してみた。(僕の理解やコードが間違っている可能性があるので注意) Skip graphs by James Aspnes and Gauri Shah という論文に書かれているアルゴリズム。 実装したのは Level 0, Level1 …