無題の備忘録

IT技術について調べたことや学んだこと、試したこと記録するブログです。Erlang、ネットワーク、 セキュリティ、Linux関係のものが多いです。

2019-10-01から1ヶ月間の記事一覧

Erlang/OTP の設計原則を学ぶ - 監視ツリーとビヘイビア

監視ツリー (Supervision Trees) Erlang/OTPの基本概念は、下記の図に示す監視ツリーです。これはワーカーとスーパーバイザーのアイデアに基づいたプロセス構造です。 ワーカーは、計算を実行するプロセスで、実際の作業をします。 スーパーバイザーはワーカ…

Erlang の queue モジュールを一通り試す - Okasaki API

cons/2 関数 cons(Item, Q1 :: queue(Item)) -> Q2 :: queue(Item) キューQ1の先頭にアイテムを挿入した結果であるキューQ2を返す。 > L = [b,c]. [b,c] > Q1 = queue:from_list(L). {[c],[b]} > Q2 = queue:cons(a, Q1). {[c],[a,b]} > queue:get(Q2). a da…

Erlang の queue モジュールを一通り試す - 拡張API

drop/1 関数 drop(Q1 :: queue(Item)) -> Q2 :: queue(Item) Q1から前方のアイテムを削除した結果であるキューQ2を返す。 Q1が空の場合、理由はemptyで失敗する。 > L1 = [a,b,c,d,e]. [a,b,c,d,e] > Q1 = queue:from_list(L1). {[e,d],[a,b,c]} > Q2 = queu…

Docker で byobu を起動しようとしたら locale で怒られた

Docker 内でいろいろいじって遊んでいると複数のターミナルウィンドウが欲しくなりますが、ターミナルウィンドウを得るために docker exec を実行するのは面倒なので byobu をインストールしました。 # apt update && apt install -y byobu byobu をインスト…

Erlang の queue モジュールを一通り試す - オリジナルAPI

new/0 関数 new() -> queue() 空のキューを返す。 > queue:new(). {[],[]} in/2 関数 in(Item, Q1 :: queue(Item)) -> Q2 :: queue(Item) キューQ1の後ろにアイテムを挿入した結果のキューQ2を返す。 > Q = queue:new(). {[],[]} > queue:in(a, Q). {[a],[]}…

Erlang の queue モジュールを一通り試す - 準備

キューを扱いたかったので queue モジュールを学ぶ。 引数が間違った型の場合、たとえば、キュー引数がキューではなく、インデックスが整数ではなく、リスト引数がリストではない場合、すべての関数はbadargで失敗する。 不適切なリストは内部クラッシュを引…

Erlang の maps モジュールを一通り試す - その4

OTP 17.0 から maps モジュールが追加された。一通り試す。 公式URL:http://erlang.org/doc/man/maps.html update/3 関数 update(Key, Value, Map1) -> Map2 Types Map1 = #{Key := term(), term() => term()} Map2 = #{Key := Value, term() => term()} Ma…

Erlang の maps モジュールを一通り試す - その3

OTP 17.0 から maps モジュールが追加された。一通り試す。 公式URL:http://erlang.org/doc/man/maps.html next/1 関数 next(Iterator) -> {Key, Value, NextIterator} | none Types Iterator = NextIterator = iterator(Key, Value) イテレータの次のキー…

Erlang の maps モジュールを一通り試す - その2

OTP 17.0 から maps モジュールが追加された。一通り試す。 公式URL:http://erlang.org/doc/man/maps.html is_key/2 関数 is_key(Key, Map) -> boolean() Types Key = term() Map = map() マップMapにキーKeyが含まれている場合はtrueを返し、キーが含まれ…

Erlang の maps モジュールを一通り試す - その1

OTP 17.0 から maps モジュールが追加された。一通り試す。 公式URL:http://erlang.org/doc/man/maps.html filter/2 関数 filter(Pred, MapOrIter) -> Map Types Pred = fun((Key, Value) -> boolean()) MapOrIter = #{Key => Value} | iterator(Key, Value…

Erlang の maps モジュールを一通り試す - 準備

OTP 17.0 から maps モジュールが追加された。一通り試す。 今回は、その準備として、公式ドキュメントバージョン10.5 : http://erlang.org/documentation/doc-10.5/doc/reference_manual/expressions.html#map-expressions のマップの式について学ぶ。 マッ…

Erlang の string モジュールの古い非推奨の関数から代わりの関数へ移行する - 後編

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。 string モジュールのおさらいをしたい人は下記の記事へ stacktrace.hatenablog.jp 下記のリストに記載した関数は古いAPIで非推奨になっている。それぞれ代わりになる新し…

Erlang の string モジュールの古い非推奨の関数から代わりの関数へ移行する - 前編

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。 string モジュールのおさらいをしたい人は下記の記事へ stacktrace.hatenablog.jp 下記のリストに記載した関数は古いAPIで非推奨になっている。それぞれ代わりになる新し…

Erlang の string モジュールを一通り試す - その3

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。 string モジュールのおさらいをしたい人は下記の記事へ stacktrace.hatenablog.jp split/2, split/3 関数 split(String, SearchPattern) -> [unicode…

Erlang の string モジュールを一通り試す - その2

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。 string モジュールのおさらいをしたい人は下記の記事へ stacktrace.hatenablog.jp next_codepoint/1 関数 next_codepoint(String :: unicode:chardat…

Erlang の string モジュールを一通り試す - その1

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。 string モジュールのおさらいをしたい人は下記の記事へ stacktrace.hatenablog.jp casefold/1 関数 casefold(String :: unicode:chardata()) -> unic…

Erlang の string モジュールを一通り試す - 準備

OTP 20.0 で string モジュールに多くの関数が追加されていたのに、最近気がついた。一通り試そうと思う。 その前に、string モジュールの基本をおさらいする。すべて、公式ドキュメントに記載されている内容だ。 string モジュールは、文字列処理用の関数を…

Erlang の lists モジュールを一通り試す - その7

最近、Erlang のコードを読んでいて、lists:any という関数が出てきたのだが、知らなかったので調べた。ついでに、他の関数も一通り眺めておく。 公式URL: http://erlang.org/doc/man/lists.html ukeymerge/3 関数 ukeymerge(N, TupleList1, TupleList2) -> …

Erlang の lists モジュールを一通り試す - その6

最近、Erlang のコードを読んでいて、lists:any という関数が出てきたのだが、知らなかったので調べた。ついでに、他の関数も一通り眺めておく。 公式URL: http://erlang.org/doc/man/lists.html sort/1 関数 sort(List1) -> List2 Types List1 = List2 = [T…