無題の備忘録

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

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

Erlang の監視ツリーで gen_server を停止する

Erlang -- gen_server Behaviour にある監視ツリーに含まれている gen_server の停止を試してみたいと思います。 スーパーバイザーとそれによって監視されるワーカーのサンプルコードは、前回の記事( Erlang の supervisor ビヘイビアを学ぶ - 無題の備忘録 …

Erlang の supervisor ビヘイビアを学ぶ

Erlang/OTP の supervisor ビヘイビアについて学びたいと思います。 スーパーバイザーの原則 スーパーバイザーは、子プロセスの起動、停止、子プロセスの監視に対して責任を持ちます。スーパーバイザーの基本的な考え方は、必要に応じて子プロセスを再起動す…

Erlang のスタンドアローンの gen_server を停止する

Erlang -- gen_server Behaviour にあるスタンドアローンでの gen_server の停止を試してみたいと思います。 gen_server のサンプルコードとして sample_queue.erl というファイル名で下記のコードを作成します。 このコードは、gen_server のビヘイビアを使…

Erlang の gen_server ビヘイビアを学ぶ

Erlang/OTP の gen_server ビヘイビアについて学びたいと思います。 クライアント・サーバの原則 クライアントサーバーモデルは、複数の異なるクライアントで共有するリソース管理に使用されます。サーバーは、このリソースの管理を担当します。 図の実線はQ…

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…

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

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

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

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

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

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

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

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

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

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

Ubuntu 18.04 LTS で Logicool マーブルマウス TM-150r をスクロールできるようにする

Logicool マーブルマウス TM-150r は、左右対称のデザインで、右手でも左手でも、どちらでも使えるトラックボールとして比較的安価で、重宝している。 唯一の弱点と言われているのが、スクロールができないことであるが、Ubuntu 18.04 LTS を使っているなら…

「実践Vim」を読んで学んだこと - 第5章 コマンドラインモード

Vimの歴史と語源 人に歴史ありというが、Vimにも歴史ありだ。Vim の起源は vi に遡ることができるが、その vi で、モードを持った編集というパラダイムが生み出された。素晴らしい。 そして、vi はさらに ex と呼ばれるラインエディタへと遡ることができると…