やかんです。
macOSのsonomaは壁紙がいい感じでテンション上がります。
画質は落ちますが。で、134枚こういう壁紙が用意されていて、12時間でローテーションするというお楽しみ。なんか、楽しいです。
集中力。
今日はなかなか集中できない時間が多かった。なんでだ?なんか最近、面白いのに面白くないなあ。うまく言語化できないけど。
今日やったことについて
オペレーティングシステム(自学)
- 条件変数とメモリの話どっちからやろうかな。
- メモリからやるか。
- OSはセキュリティのために、変数のアドレスの配置を非決定にしているらしい。
だから、ある変数のアドレスというのはコンパイルごとに変わってくる。- ↑うそ。プログラム実行ごとに変わってくる。
- コンパイル段階では、変数の領域を確保するだけなのかな。実際にそのメモリに変数の値が格納され、変数にアドレスが付与されるのはプログラム実行時。
- OSに、変数のアドレスを毎回のプログラム実行時で統一してくれ、と指示を出すことも可能だ。
- OSの内容、全部終えていると思っていたけど結構抜けがあるんだな。タイミング見て全部ちゃんと取り組みたい。
- プログラム上で宣言する変数名というのはそこまで大事じゃないのではないだろうか。OS的な視点で見ると。全て、異なる宣言がされた変数はその名前にかかわらず違うアドレスにその値が格納される。
- 異なる宣言がされた、という点が大事だ。
- スタックは、スレッドごとに割り当てられるんだっけ?
- スタックについては、確保と解放が自動で行われる。だから、ガベージコレクションは不要ということだ。
- 帯域変数、局所変数。
- ダングリングポインタ。
- これ面白いな。思わず、「え?」となった。関数が終わったら、そのポインタを返り値に指定していたとしても、そのローカル変数は寿命を終えているんだ。
- mallocについて。メモリ領域の確保。
- これは配列を具体例に考えるとわかりやすい。配列は、アドレスの連番として表現されているが、mallocで確保されるメモリ領域も連番のメモリ。つまり、mallocで確保した領域が残っている限り、配列として要素を格納していくことが可能。
- mallocで巨大なメモリを要求しても、メモリ確保が高速で成功する。これは、物理メモリの量を超えたメモリでも同様。200GBのマシンで300GB要求しても、高速で成功する。
- OSはメモリを要求された時、物理メモリを割り当ててはいないということ。これが、仮想メモリ。
- mallocは、OSに対して「メモリちょうだい」と指示しているイメージ。実際にメモリを配分するのはOSの仕事。
以下、仮想メモリの話。論理アドレス空間の話でもある。
- OSは、メモリを要求されたときに仮想メモリを割り当てる。で、そのメモリを用いた処理をCPUが実行するとき、割り当てられた仮想メモリから物理メモリへの変換が行われる。
- 論理アドレス空間から、物理アドレス空間への写像。
- CPUがメモリ関連の処理をするときには、必ずMMU(memory management unit:メモリ管理ユニット)を経由する。
- メモリ管理ユニットは、当該仮想メモリ(論理アドレス)について、アクセス権を確認し、対応する物理アドレスが存在しているか確認し、存在していればその物理アドレスにアクセスを行う。
- この仕組みがあることで、OSはメモリ割り当ての際に空いているメモリ領域を確認する必要がない。よって、メモリの割り当てが高速になる。
数理手法1(授業)
- 主成分分析も記述統計に含まれるんだ。
- 不偏分散
- これ1年の時意味わからなかった記憶があるな。
- n-1で割る理由は次回の授業で説明があるらしい。
- 教授のzoom落ちた、、
- R使うと、あるデータセットについて要約計算量を一撃で算出できる。
- 変動係数ってなんだっけ?いつもこの辺忘れる。
- 標準偏差をスケールに準ずるもの(平均 )で割ったもの。
- オッズ比。
- スタージェスの公式。
- これは、一般的にデータセットをヒストグラムで考える際の階級を与えてくれるアルゴリズム。
- 詳細は知らんが。
- Rを使えばクロス集計表も一発で出せるんだ。。
- 標準誤差。
- サンプル平均とかの考え方がまだ慣れてないんだよな。平均の平均。これだけならわかるが、式にして計算しようとするともうごちゃごちゃになる。
- 標準誤差の数式を理解するには、統計的推測の基礎が必要なので、それを抑えるまでは「まあそんなものか」程度に思っておくのが良いだろう。
エンジニア業務
- app engineをいじる。
- せっかくだから色々使ってみるか。
- docker使おう。dev contaierにしようかな?
- まずはM2 macにdockerをインストールする。
- brewを使う。–caskオプションをつけることで、CLIだけじゃなくてdocker desktopもインストールしてくれる。
- ↑こちらのサイトがわかりやすかったです。
- dev containerの環境を作ってみるか。
- そもそもコンテナの仕組みってどうなってんだろうなー。。今まで何度も理解しようとしてわけわからんかったもの。今なら分かったりするのか?
- dec container使うと、あたかもローカルマシン上で作業しているようにコンテナの中で作業できる。
- やばいこれめっちゃ面白い。
- 仮想マシンはOSごとインストールしているんだ。つまり、本当に一つのデバイスに複数のカーネル(OS)が同居するんだ。
- コンテナはOSレベルの分離をしない!!!
- これじゃね?理解できそうじゃね?
- でも、メモリ空間の分離は普通にプロセス間で担保されている。にもかかわらずコンテナをわざわざ使う理由とは?
- コンテナは、プロセスよりも抽象的なレベルで分離を行う。
- つまりコンテナはOSレベルより具体的だが、プロセスよりは抽象的な分離を行なっている。
- ↑きました。納得感。OSの授業のおかげです。教授、素晴らしい授業をありがとうございます。
- 「プロセスよりも抽象的な分離」という点についてもっと詳しく知りたい。
- 独立したファイルシステム
- リソース制御
- ネットワキングの分離
- 環境変数などのカプセル化
- ↑ネットワーキングの分離というのはまあわかりやすい。異なるコンテナに同一のポートが論理的に存在するということだよね。
- これも多分、OSの論理アドレス空間とかの授業を受けたから概念がスッと入ってくるんだろうな。
- ファイルシステムが独立しているとはどういうこと?
- まあよくわからん。
- devcontainerでやろうとするとちょっとよくわからないところが多いなー、やっぱり難しい。gitコマンドをどのように使えるようにするのか、マウントとは何か、volumeとは何か。
- まずは普通にローカルマシンで実装しよう。で、デプロイまで持っていって、最後に仕上げる余裕があったらdevcontainerについて、mountとかvolumeとか学びながら実装しよう。
統計学(自学)
- 統計的推測に入った。
- 統計学、本当に自分が思いもよらないレベルで広がりがある。果てしないです。飽きなんて来るわけがないと思われる。
- 推定について。今までいまいちわからない気がしていたのは、場合分けをしないで「想像で」「感覚で」「思い込みで」取り組んでいたからではないだろうか。
- というのは、母集団について「母平均がわかっているorいない」「母分散がわかっているorいない」でしっかり場合分けをする。これをしないと、必要以上に難解に見えてしまう。
筋トレをした。
久々の筋トレ。ちょっと自分のひょろさに驚愕しました。別にマッチョになりたいとかじゃないですが、自分の身体に対して「うわ、ほそっ」というリアクションをするのはなんか嫌なので、それなりに頑張って鍛えようと思います。
ということで、今日の日記終了。最後までお読みいただき、ありがとうございます。