今日の記録 2020/5/30

やった

本を書こうとしている。自分が今やっている並行読書に関して、ベースとしている技術の紹介や、自分なりに考えた手法などを文章にしたい。これについては別な note にそのうち書く。


読んだ

GEB P174~180

あるメッセージが持つ意味というものについて。過去にバッハの曲が入ったレコードを宇宙に打ち上げうというプロジェクトがあったらしい。この中の曲というのが持つ意味(ここでは地球人からすればその曲から得る情緒のようなものだとしている)というものが保存されうるだろうか、というような話。
 宇宙にこういったものを打ち上げるという話を聞いた場合、私はその曲が再生しうるか、というところまでが疑問に浮かんでいたが、その曲から地球人が受けるのと同じような情緒を地球外生命が感じるか、という点にまで想像したことは無かった。地球人もある一つの音楽から受けとるイメージ(あえてここではメッセージと言うのもよいかもしれない)というものはそれぞれであるが、曲というものを聞いた地球外生命は、まず音というものに対して何の反応も示さないという可能性がある。そうなると、そのレコードの意味というのはその地球外生命と私達地球人の間で共有されない、という話になってしまう。地球外生命の元にそのレコードが辿りつく、そしてそれを再生できる、この二つの時点で可能性というものが限りなく小さい上に、更にもうひとつ意味の共有という点では壁があった。なんて高い壁だろう。
 ロゼッタストーンが出てくるが、これは過去の地球人から私達現代の地球人に対するレコードということになる。
 フレームメッセージ・外部メッセージ・内部メッセージの三つについて。最初読んだ時はイマイチ分からなかったので例で考えてみる。μηλον この文字列を見た人が、何かの言語で何かが書かれている、と感じればフレームメッセージを受け取ったことになる。そして、これがどうやらギリシャ語で書かれているらしいということをなんらかの手段で知ることができれば、それで外部メッセージを受け取ったことになる、という意味のはず。そして最後に、これが意味しているのは、日本語でいるリンゴであり、内部メッセージとなるのはあの赤い果物そのものだ。


安全な Web アプリケーションの作り方 - P204~208

セッションを利用した攻撃(セッションハイジャック・セッション固定化攻撃)について。



プログラミング Erlang - P153~155

IRC プログラムを書くための準備。プロセスの構造とメッセージシーケンス図について。今回のコードも多いが、これはダウンロードせずに一度写経したいので明日に。



システムの科学 - P105~109

ある分野の初心者などが長い時間をかけて導き出す答えを、専門家は即座に答えを出すことができるということについて。この、専門家が普通の人にはできない早さで答えを長期記憶領域から取り出すことを指して、直感という名前を与えている。これまでの話から、人が短かい時間に処理可能な情報というのは8チャンク程度ということであったが、初心者と比べると上級者というのはその8チャンクの制限を越えているように見える。しかし、これについては以前書いたように、沢山の駒同士の関係というものをひとつのチャンクと見ているので矛盾はしない。つまり、専門家になるということは、たくさんの情報を人が一瞬で処理可能なサイズに圧縮できるようになる、ということになる。
 専門家が必要とするチャンクの数として、5万チャンクという数字が出てくるが、これは大学教育(多分これは単に大学生という意味ではなく、博士を取得したような人を指す気がする)を受けた人が文章を読むさいに使える単語の数と近いらしい。ある分野に関して5万チャンクの情報を獲得し長期記憶に保存するのに必要な歳月は10年と書かれている。この10年というのに見覚えがあるなと思ったが、今日の範囲で書かれていることは10000時間理論とほぼ同じような話だった。もしかしたら巷で10000時間理論について話題に上がった理由の論文などを、この本も引用しているのかもしれない。


みんなのデータ構造 - P119~123

ツリーのための find(), add(), delete() を Erlang で実装した。確認のために eunit を使ってテストもした。実装はうまく言っているが、終了条件としてのパターンマッチに余分な部分がある気がしている。

% Tree の中に含まれる値 V の内、X であるか、または X より大きいものの中で最小の値を返す
t_find(Node, X) -> in_t_find(Node, X, nil).

in_t_find({node, X, _, _}, X, _) ->
   X;
in_t_find({node, V, nil, _}, X, Mem) when X < V ->
   Mem;
in_t_find({node, V, Left, _}, X, _) when X < V ->
   in_t_find(Left, X, V);
in_t_find({node, V, _, nil}, X, Mem) when X > V ->
   Mem;
in_t_find({node, V, _, Right}, X, Mem) when X > V ->
   in_t_find(Right, X, Mem).

t_find_test() ->
   Tree = {node, 7, 
           {node, 3, 
               {node, 1, nil, nil},
               {node, 5, 
                   {node, 4, nil, nil},
                   {node, 6, nil, nil}
               }
           },
           {node, 11, 
               {node, 9, 
                   {node, 8, nil, nil},
                   nil
               },
               {node, 13, 
                   {node, 12, nil, nil}, 
                   {node, 14, nil, nil}
               }
           }
       },
   7 = t_find(Tree, 7),
   3 = t_find(Tree, 3),
   11 = t_find(Tree, 11),
   6 = t_find(Tree, 6),
   11 = t_find(Tree, 10), % 10より大きい値の中で最も小さい値は 11
   nil = t_find(Tree, 15). % より大きい値が無い時は nil

t_add({node, X, _, _} = Node, X) ->
   Node;
t_add({node, V, nil, Right}, X) when X < V ->
   {node, V, {node, X, nil, nil}, Right};
t_add({node, V, Left, Right}, X) when X < V ->
   {node, V, t_add(Left, X), Right};
t_add({node, V, Left, nil}, X) when X > V ->
   {node, V, Left, {node, X, nil, nil}};
t_add({node, V, Left, Right}, X) when X > V ->
   {node, V, Left, t_add(Right, X)}.

t_add_test() ->
   Tree = {node, 7, 
           {node, 3, 
               {node, 1, nil, nil},
               {node, 5, 
                   {node, 4, nil, nil},
                   {node, 6, nil, nil}
               }
           },
           {node, 11, 
               {node, 9, 
                   {node, 8, nil, nil},
                   nil
               },
               {node, 13, 
                   {node, 12, nil, nil}, 
                   {node, 14, nil, nil}
               }
           }
       },
   AddedTree = {node, 7, 
                   {node, 3, 
                       {node, 1, nil, nil},
                       {node, 5, 
                           {node, 4, nil, nil},
                           {node, 6, nil, nil}
                       }
                   },
                   {node, 11, 
                       {node, 9, 
                           {node, 8, nil, 
                               {node, 8.5, nil, nil}}, % 追加
                           nil
                       },
                       {node, 13, 
                           {node, 12, nil, nil}, 
                           {node, 14, nil, nil}
                       }
                   }
               },
   AddedTree = t_add(Tree, 8.5).

t_find_min({node, X, nil, _}) -> X;
t_find_min({node, _, Left, _}) ->
   t_find_min(Left).

t_delete({node, X, Left, nil}, X) ->
   Left;
t_delete({node, X, nil, Right}, X) ->
   Right;
t_delete({node, X, Left, Right}, X) ->
   Min = t_find_min(Right),    
   {node, Min, Left, t_delete(Right, Min)};
t_delete({node, V, Left, Right}, X) when X < V ->
   {node, V, t_delete(Left, X), Right};
t_delete({node, V, Left, Right}, X) when X > V ->
   {node, V, Left, t_delete(Right, X)}.

t_delete_test() ->
   Tree = {node, 7, 
               {node, 3, 
                   {node, 1, nil, nil},
                   {node, 5, 
                       {node, 4, nil, nil},
                       {node, 6, nil, nil}
                   }
               },
               {node, 11, 
                   {node, 9, 
                       {node, 8, nil, nil},
                       nil
                   },
                   {node, 13, 
                       {node, 12, nil, nil}, 
                       {node, 14, nil, nil}
                   }
               }
           },
   DeletedTree1 = {node, 7, 
                       {node, 3, 
                           {node, 1, nil, nil},
                           {node, 5, 
                               {node, 4, nil, nil},
                               nil % 削除
                           }
                       },
                       {node, 11, 
                           {node, 9, 
                               {node, 8, nil, nil},
                               nil
                           },
                           {node, 13, 
                               {node, 12, nil, nil}, 
                               {node, 14, nil, nil}
                           }
                       }
                   },
   DeletedTree2 = {node, 7, 
                       {node, 3, 
                           {node, 1, nil, nil},
                           {node, 5, 
                               {node, 4, nil, nil},
                               {node, 6, nil, nil}
                           }
                       },
                       {node, 11, 
                           % 9を削除
                           {node, 8, nil, nil},
                           {node, 13, 
                               {node, 12, nil, nil}, 
                               {node, 14, nil, nil}
                           }
                       }
                   },
   DeletedTree3 = {node, 7, 
                       {node, 3, 
                           {node, 1, nil, nil},
                           {node, 5, 
                               {node, 4, nil, nil},
                               {node, 6, nil, nil}
                           }
                       },
                       {node, 12, % 11を削除して 12 がここに移動する
                           {node, 9, 
                               {node, 8, nil, nil},
                               nil
                           },
                           {node, 13, 
                               nil,
                               {node, 14, nil, nil}
                           }
                       }
                   },
   DeletedTree1 = t_delete(Tree, 6),
   DeletedTree2 = t_delete(Tree, 9),
   1 = t_find_min(Tree),
   12 = t_find_min({node, 13, 
                       {node, 12, nil, nil}, 
                       {node, 14, nil, nil}
                   }),
   DeletedTree3 = t_delete(Tree, 11).


英語

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

ここから先は

0字

¥ 100

期間限定 PayPay支払いすると抽選でお得に!

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