今日の記録 2020/5/23

やった

・八本脚の蝶をゆっくり読む - 6 を書いた

読んだ

・GEB - P147 ~ 156
再帰の話の続き。G図と、その符号化であるところの関数Gとの関係がよくわからなかったのでプログラムとして実行してみると、G(21) = 13, G(18) = G(17) = 11 というように、 P150の第30図での各接点に記されている値を関数Gに与えるとその下の接点の値を得ることができる、というものだった。G図を反転したものについては、1時間くらい考えてみたのだが分からなかった……。
 INT図関数からなる図も、いわゆるフラクタル図形のひとつになるのだろう。よくみる複雑なフラクタル図形とは毛色が異なっているが、INT(INT(x)) = x になるという。本の中では - に - を掛けると + になるのと同じような関係ということを言っていた。

・みんなのデータ構造
昨日読んだ部分を Erlang を使って実装しようとした。だが、まず Erlang でツリーをポインタで表現しようとした場合は、1つのプロセスで1つのノードを表現するような変なことになりそうだったので、以下のようにタプルの再帰構造でツリーを表現した。そうなると、最初の depth 同じようには実装できないので飛ばして size と height のみ実装した。

% ツリーは次のようなタプルの再帰構造で表現する。 {node, Val:Int, Right:tree, Left:tree}: tree
% Tree = {node, 1, {node, 2, {node, 4, nil, nil}, nil}, {node, 4, nil, {node, 8, nil, nil}}}

% ツリーが持つノードの数
t_size({node, _, nil, nil}) -> 
   1;
t_size({node, _, Left, nil}) ->
   1 + t_size(Left);
t_size({node, _, nil, Right}) ->
   1 + t_size(Right);
t_size({node, _, Left, Right}) ->
   1 + t_size(Left) + t_size(Right).
% t_size(Tree).
%=> 5


% ツリーの高さ (ルートとそこから最も遠いノードとの距離)
t_height({node, _, nil, nil}) -> 
   1;
t_height({node, _, Left, nil}) -> 
   1 + t_height(Left);
t_height({node, _, nil, Right}) -> 
   1 + t_height(Right);
t_height({node, _,Left, Right}) -> 
   1 + max(t_height(Left), t_height(Right)).
% t_height(Tree).
%=> 3

そして深さ優先探索と幅優先探索については、例と同じようにスタックなどを使わない形で実装するのは、変数の変更ができない Erlang でやろうとするとかなり特殊な形で書くことになりそうだと判断して飛ばした。

・安全な Web アプリケーションの作り方 - P166 ~ 171
SQLインジェクションに対する保険的対策方法について。

・プログラミング Erlang - P130 ~ 136
終了を補足するようなプログラムの書き方について。上級向けというところは実際に読んでもよくわからなかった。何か通常の方法では実現できないような終了時の処理方法が存在して、それが必要になったらここを思い出して確認するようにしたい。Erlang を使うにあたって、今のところ、複数のプロセスからなる異常を検知したりすることの実現がしやすいプログラミング言語であるという認識なので、将来的にそういった対障害性が求められるようなものを作る必要ができた時に利用することを考えるべきものなのかもしれない。とりあえずこの本は興味本位で読み進めてみる。

・Goならわかるシステムプログラミング - P341 ~ 最後まで
scp とキーチェーン、参考文献とあとがき
 ひとまず一通り読み終えた。読み終えただけでコードを書いて実際に動かしてみたりはしていないのと、Go言語自体は全く触ったことがなかったので、本当にとりあえず読んだという形になってしまった。
 タイトルにはシステムプログラミングとあるが、その名前の通りかなり広い分野の話題を扱っている。その様々の分野においてGo言語はそれをどう扱うかという知識が得られる。つまり、OSがどのような仕組みで様々な機能を実現しているかを理解しつつ、Go言語を既に使っているのでそれをGoで扱えるようになりたい、という人にはとてもおすすめできる本でした。
 Goを全く知らなかった自分でも、システムの広い範囲に目を向けるきっかけになった。例えばファイルディスクリプタについて・CPUの動作モード・GraphQL・TCPとUDP・並列処理・メモリ管理・コンテナなど。各分野の話は深く踏み込んだはなしではなかったと思うので、ここで得た知識を元に更に専門的な本を読んだり、何か実装してみたりする、というのが良い流れかと感じた。

・システムの科学 - P79 ~ 82
継続して、何かを記憶するにあたって重要である時間についてと、チャンクと呼ばれるあるかたまりの単位について。パラメータという言葉がよく使われるのだが、機械学習などで使われるパラメータという認識で読んでいるのだがあっているのだろうか。つまり、何かある学習などにおいて、その結果が依存する要因のひとつであって、これが多いほど複雑な環境と言える、という理解で読んでいる。また、チャンクとアイテムという言葉についても怪しい。多分だが、あるひとかたまり、例えば dog, car, train, hand, cat というような5単語があった場合、数としては5個あるが、 dog と cat は動物というひとつのチャンク、 car と train は乗り物というひとつのチャンク、というように、ひとつ以上上の次元でそれらを扱うような意味があると捉えている。この理解である程度は問題ないように思うのだが、ところどころ噛み合わない部分もあり、間違っているかもしれない(例えば、「被験者は3ないし4文字のチャンクを選好する」という文章。これが 3~4文字のアイテムからなるひとつのチャンクを選ぶ、という意味であればいいのだが、チャンク自体が文字数を持つとなると自分の理解とは食い違う)。

・英語 - 一億人の英文法とDuo 4ページずつ

この記事が気に入ったらサポートをしてみませんか?