今日の記録 2020/7/6

仕事

AWS(s3)を使って静的ホスティングのやり方を調べて、実際にページを公開するようにした。基本的に以下の公式のドキュメントに沿ってやればよくとても簡単だった。

ただ、最後の公開用の URL は、http://bucket-name.s3-website-Region.amazonaws.com をベースにするのだが、 Region の部分がちょっとだけ分かりづらかった。まず Region のコード(URLでどう表記するか)の表は以下にある。コンソールで Region を確認すると、アジアパシフィックというように表示されているので、それと対応するコードを上記 URL の Region の部分をそれに置き変えればよい。

または、以下の URL をクリックするとコンソールの画面に行くのだが、そこで URL を確認すると、自分のバケットが保存されている Region が `region=ap-northeast-1` というようにクエリ文字列として表示される。


勉強した

みんなのデータ構造 - P125 問6.8

上記の note で考えたノード間の接続を表現するデータ構造を用いて、 nextPre 等の関数の実装をしてみる。

Erlang に標準である List は要素番号を指定したような取り方はできず、ヘッド以外を取ろうとすると、ノードの接続を表現したデータを取り出すだけで O(n) になってしまうので array を使ってみる。ずるいかもしれないが、上の note で考えたデータ構造(List)から Array のデータを作るまでは、準備の段階として計算量に含まないことにする。
 上記の List から Array を構築するためにまず以下のようにやっていた。

arrConFromListCon(List) ->
  Length = length(List),
  Arr = array:new(Length),
  arrConFromListCon1(Arr, List, 0).

arrConFromListCon1(Arr, [H|[]], N) ->
  array:set(N,H,Arr);
arrConFromListCon1(Arr, [H|R], N) ->
  arrConFromListCon1(array:set(N,H,Arr),R,N+1).

これを使うと以下のような結果になる。

> arrConFromListCon([{id0, id1, id2, nil}, {id1, id2, id3, id0}, {id2, nil, nil, id1}, {id3, nil, nil, id1}, {id4, id5, id6, id0}, {id5, nil, nil, id4}, {id6, nil, nil, id4}]).
{array,7,0,undefined,
      {{id0,id1,id2,nil},
       {id1,id2,id3,id0},
       {id2,nil,nil,id1},
       {id3,nil,nil,id1},
       {id4,id5,id6,id0},
       {id5,nil,nil,id4},
       {id6,nil,nil,id4},
       undefined,undefined,undefined}}

array:new(N) の N が 9 以下の場合、array は 10 要素の配列を返すようになっている。最初この undefined を見てエラーなのかと思ったが、正常な結果だった。

そして、わざわざこれを時間をかけて実装したのだが、同様のことが array ライブラリの from_list という関数でできた。

> array:from_list([{id0, id1, id2, nil}, {id1, id2, id3, id0}, {id2, nil, nil, id1}, {id3, nil, nil, id1}, {id4, id5, id6, id0}, {id5, nil, nil, id4}, {id6, nil, nil, id4}]).       
{array,7,10,undefined,
      {{id0,id1,id2,nil},
       {id1,id2,id3,id0},
       {id2,nil,nil,id1},
       {id3,nil,nil,id1},
       {id4,id5,id6,id0},
       {id5,nil,nil,id4},
       {id6,nil,nil,id4},
       undefined,undefined,undefined}}

時間かかったのでここまで。次回はこれを使って nextPreOrder などを実装する。

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