このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

Erlang

タグ付き直積とタグ付き直和

ここでタグというのは、目印、マーカーのこと。タグ付き直積の例は、JSONオブジェクト、プロパティ名(キー)がタグになっている。Erlangのプロパティリストもタグ付き直積の表現と考えていい、ただし、リストはどうしても可変長になるから、その点ではタプ…

メッセージのジャンクション

2本のパイプをマージするようなヤツ 入ってきたのをテケトー(予測不可能)に振り分けるヤツ 2本のパイプからタプルを作る、zipのようなヤツ コピーするヤツ 列αとβのインターリーブをα§β と書くと: α, β → γ γ∈α§β α → β, γ α∈β§γ α, β → γ γ = zip(α, β) …

ミーリー/メイヤー・モデル

僕はメイヤー先生のファン http://d.hatena.ne.jp/m-hiyama/20060403/1144025475 http://d.hatena.ne.jp/m-hiyama/20060313/1142209318 それはいいとして、メイヤー流のクエリー/コマンド・スタイルでプログラムを書いても何も不便はない。クエリーでもコマ…

無限大を含む算術(x_arith)

Int = Z = {..., -1, 0, 1, 2, 3, ...}、XInt = Int + {∞, -∞} とする。他に全体集合T(total, universal, あるいはterm)を考えて、すべての領域はTの部分集合だとする。圏論で定式化したいなら、Tを固定して、モノ射 X→T だけを考えたスラント圏(ほぼsubo…

モジュール名の命名規則

App.erl アプリケーションのインターフェースモジュール App_app.erl applicationコールバックモジュール App_server.erl gen_serverコールバックモジュール App_X_srv.erl サーバーが複数の場合の、gen_serverコールバックモジュール App_sup.erl トップス…

アプリケーション概念

アプリケーションの意味を4つくらいに分けて考えるといい。 単にモジュールの集合 .appファイル(メタデータ)を持つモジュールの集合 OTP監視ツリー構造を持つモジュール集合 アプリケーションコントローラが認識できるアプリケーション ライブラリアプリケ…

ignoreって

gen_server:startとかがignoreを返すのってなに? と思っていたが、例えば、既に同じ機能をサービスするサーバーが上がっているから自分は不要だ、とかいうとき使えるかも。エラーではないが起動する必要はない、って事情。

文化と伝統

バージョンをvsnと表記する(いまだに馴染めない^^;)。 「アプリケーション」が独特な意味を持つ(いまだに馴染めない^^;)。 libはアプリケーション群を意味する(馴染んだ)。 シェルとmakeをヘビーに使う(もう大変だよ)。 全体に古風(年寄り向きとも…

rpc.erl

%% This code used to reside in net.erl, but has now been moved to%% a searate module. s/searate/separate/

アプリケーションのメカニズムと作り方

悔やまれた件、もう一度調べた。基本的には、「OTP設計原理」を読めばよいのだ。次の概念を理解しよう。 アプリケーション OTP-ST(監視ツリー) OTP-STアプリケーション トップスーパーバイザ アプリケーションコントローラ・プロセス アプリケーションマス…

EDoc関係

edoc:read_source/{1, 2} -- これは便利だ! 他にも意外に便利な関数があるかもよ。@headerfile を読む検索パスは、{includes, Path} where Path = [string()] オプションで指定される。includesはEPPの処理のときも共通に使われる。{doc_path, Path} where …

undefだとわかるまで

動的呼び出し Mod:func(Arg) がundefで失敗するまでに、とんでもない時間がかかる。

コードリーディング

stdlib/proc_lib.erlを読むといいかも。

erl_callとEPMD幽霊

erl_call -s -sname test とかして、testノードが起動してないと、erl_callがERTSを起動しようとする(-s (startかな)オプションによる)。これが失敗した場合、どうもクリーンナップができてないようで、testというノードのエントリーがEPMDに残るようだ…

-nameオプションのロングネーム

ついでに書いておかなかった件。曖昧な記憶によると: -name node1@localhost -- ドメイン名にドットがないと、どっかで構文エラー。 -name node1@128.0.0.1 -- 忘れた。 -name node1@192.160.0.33 (ホントのIPアドレス) -- 忘れた。ダメだったかな。 -nam…

ERL_WINDOW_TITLE けっこう便利

> werl -env ERL_WINDOW_TITLE "Test and Debug"

ERL_LIBS

ERL_LIBSが実在しないディレクトリを指すとwerlがクラッシュ。

format_error

stdlib/src/shell.erlに次のような行がある。 io:fwrite("** ~w: ~s **\n", [Line,apply(Mod,format_error,[What])]),Whatがエラーreasonで、対応するモジュールModのformat_error/1 を呼び出して 人間可読エラーメッセージを生成している。同じ手法は: ker…

deep lists, io data

io_libのman: Type:chars() = [char() | chars()]Function:char_list(Term) -> bool() Returns true if Term is a flat list of characters, otherwise it returns false.deep_char_list(Term) -> bool() Returns true if Term is a, possibly deep, list o…

EDoc、どうもダメ

%% @doc シリアライズ・ドライバ. %% %% @docfile "serialize.edoc"これはクラッシュしてしまう。日本語のせいではなくて、@docと@docfileは共存させられないようだ。

コマンドライン引数

werl hi -myapp foo bar baz -myapp hoge -- fuga 1> init:get_plain_arguments(). ["fuga"] 2> init:get_arguments(). [{root,["C:\\INSTAL~1\\ERL56~1.4"]}, {progname,["erl"]}, {home,["C:\\Documents and Settings\\Hiyama\\Work","hi"]}, {myapp,["foo…

EDocエラクナイ

@typeによる型定義に長い説明を付けたいのだが、それができない。@docは、どこに書いても次の関数にかかってしまう。

-type属性

kernel/include/file.hrl で使われている。型に、pos_integer(), non_neg_integer() なんてのも使われている。

ライブラリモジュールの名前

file_libじゃなくて、filelib。まー、そういうこともあるよね。ところで、libはツマンネー。あれはなんだ?

見つかった!

stdlib/erl_posix_msg.erl : message(e2big) -> "argument list too long"; message(eacces) -> "permission denied"; message(eaddrinuse) -> "address already in use"; message(eaddrnotavail) -> "can't assign requested address"; message(eadv) -> "a…

EDocエライ

behaviour定義があると、勝手にメッセージを生成してくれる。 This module defines the serialize_json behaviour. Required callback functions: special_value/3, integer_value/3, real_value/3, string_value/3, start_array/2, end_array/2, start_obje…

ErlangとJSONとJavaScript

\ Erlang JSON JavaScript リストの成分 メンバー 要素 要素 マップの成分 要素 メンバー プロパティ

EDocのtype定義

@type の左辺は関数呼び出し形式、総称の型パラメータを入れてよい。 @type pair(X, Y) = {X, Y}別名や一部束縛は次のようにする。 @type tuple_2(X, Y) = pair(X, Y) @type tuple_2_atom(Y) = tuple_2(atom(), Y)レコード型の型定義は次のようにする。 @typ…

それと、アプリケーションに関して

アプリケーション・マスターって概念もあったな。グループリーダーってのはプロセスの概念だが、関係あったっけ?

Cygwin環境下でYAWSをインストール

ネタもと: http://yaws.hyber.org/wiki/showPage.yaws?node=YawsAndCygwin src/Makefile内の yaws_generated.erl に注目。 同、regenターゲットにも注目。 ん? EBIN_FILES=$(MODULES:%=../ebin/%.$(EMULATOR)) ../ebin/yaws.app このパーセントの使い方は?…