StudyCS.log

ただの日記

低レイヤ学習のモチベを保つ方法を教えてもらったかも

2021年3月13日

 僕は学部時代の学習を目標を「基礎的なセキュリティ技術の習得」としているが、セキュリティ分野の内外を問わず、様々な分野の技術習得に興味がある。(しかし本格的に取り組む意欲と覚悟があるわけではない。)当然低レイヤの種々の技術は魅惑的な輝きを放っており、これは多くの人にとってそう見えるものだと思う。

 しかし大きな障壁は 

    (i)何から始めたら良いのかわからない問題;

    (ii)一人でモチベを保つのが辛い問題;(僕の場合はこれが深刻)

 の2つの問題だと思う。これについて先日youtubeで動画を漁っているとき(もちろん休憩時間中に!)に、これらの問題ととても上手に付き合っている素晴らしい実例を見つけた。

 

 このLT大会の一発目の発表、「思い立ちからCPUを完成させるには」に大変感銘を受けた。

 吉川さんはCPU自作本をもとに実際のCPUを自作したようだ。演習系の本を読み、実際に演習を行うことで、その成果物を得ることがとても大きなモチベーションになるのだということが伺い知れる。本を読んで購入リストをやや力任せに決めるという点も、是非取り入れたいと思った。いわゆる「エイヤ」で決める、という要素が個人の学習でも必要なのだろうなぁ。

 この発表会と同時期に行われた「低レイヤ相談室」( 低レイヤ相談室 2020-6-27 F-4 - YouTube )において、内田先生は、低レイヤは広大な分野であるから浅く掘って興味分野を探るのが良い、とコメントしており、いろいろな分野の演習に手を出してみることの大切さを再認識した。

 そして、学生である今は時間のかかる演習にとりくむ最大のチャンスである。コンパイラ、OS、Linux等いろいろなことに手を出していきたいと思った。

学習記録

 ・今日も「コンピュータアーキテクチャの基礎」の8章を読んだ。直接制御、間接制御、メモリマップドIOなどについての理解を更新できた。しかし、それにしても8章は特にわかりにくいような気がする。例えば、バーストモードなどについて、「データのかたまり(ブロック)のすべてのデータ転送が完了するまで結合関係を解かない。高速かつ大量のデータ転送向きであり、”ブロック転送方式”、”連続転送方式”といもいう。」と書かれている。たしかにその通りではあるのだが、なぜブロック単位でデータを転送することが高速で大量の送信に向いているのかが書かれていない。バーストモードは最初の送信でブロックのアドレスを指定することで、以降のアドレス指定を省略できるので、データを高速に送信できるのだ。そう書いてほしい。

 ・メイン機のvimvim-plugを導入した。僕はプラグインはほとんど入れていないので、プラグイン管理用のプラグインは要らないといえば要らないのだが、今後プラグインを増やすことを考えれば早めに導入しておくことは有益だろう。ただしvim-plugはvim-plug自身を更新することはないので、そこは自分で注意しておこう。

 ・EssentialGrammerInUse Unit65を完了した。a,anを忘れずにつけられるようになった。

 

 

 

 

 

 

 

coreutilsのソースってこんなに長かったのか、、、、

2020年3月11日

 大学のプログラミングの講義ではC言語を使って勉強を進めている。Cを使ってプログラミングを教えることは世間的には賛否の分かれるところらしいが、僕自身はあまり気にならない。確かに文字列の扱いなどが面倒だったりはするが、アルゴリズムなどを学ぶときにはやはりポインタの恩恵を受けるところが多いし、興味があればシステムにも手を出せる点は素晴らしい。

 特にシステムプログラミングの関することなのだが、先日「UNIXという考え方」という本を読み、Unixの設計思想に感銘を受けた。そして、Unix/Linuxのコマンド類がどのようなコードで構成されているかに興味を持った。調べてみるとLinuxで中核をなしているようなコマンド類は'Coreutils'というパッケージにまとめられているようだ。

 パッケージ自体は次のような流れて簡単に取得できる。僕はUbuntuユーザなので例にもれずaptツールを使って落とした。

    $which cat
    $dpkg --search /bin/cat
    $sudo apt source coreutils

 コマンドのソースを見て最初に持った感想は、「長いな、、、」だった。 

 機能だけ見ればこんなに単純なのに、裏ではわりと複雑な処理をしているようだ。せいぜい100行くらいのソースだろうと想像していた僕に、cat->約700行、wc->約900行、ls -> 約5000行というのはかなり衝撃だった。

 とはいえ、立ち止まっていても仕方がないからとりあえずcatから読み始めた(なんとなく簡単そうだと思った)のだが、画面を埋め尽くすのは見たこともない関数、マクロ、システムコールの数々である。僕の知っているCのコードとあまりにも違うではないか。

 これがシステムの世界なのか!!!

 しかし打ちのめされるというよりはむしろテンションが上がった。ここにあるコードをすべて理解して掌握してみたいと思った。コードの意味は理解できなかったが(まだ読み終えてない)、Linuxへの学習意欲は上がりましたとさ。めでたし、めでたし。

今日の学習記録

 ・マスタリングVimを読み返した。プラグインなどの追加はしばらくしない感じだし、ウィンドウもそこそこ使いこなしている感じで良いのだが、バッファがあまり活用できていないことに気がづいた。今後は少し注意を払って積極的に使っていこう。

 ・コンピュータアーキテクチャの基礎を頑張って読みすすめている。結構な期間がすでにかかっているのだが、もう少しで読み終わりそうだ。

 ・Essential Grammar in UseのUnit55を終えた。行き先、期間、目的という示しているものに合わせて、go to/go on/go for/go -ing を使い分けられるようになった。

 ・暗号技術のchapter4を読み進めた。AESの雰囲気が何となくつかめた。

 ・今年の頭に設定した、今年分のReadingChallengeのリストに若干の修正を加えた。

 ・Catコマンドのソースを読むために、いろいろ関数を調べた。

春休みの怠惰さと料理したい欲の高まり

2021年3月8日

 ちょうど今は大学の春休み期間中であり、生活リズムが大きく乱れていることが僕の中では大きな問題である。今日も昼に起床してしまい、一日を通して調子が上がってこなかったから、大いに反省している。

 肯定的な、というかポジティブな要素があるとすれば散歩がある。今年度の後期にクラスメートに付き合ってもらって習慣づけした甲斐もあって、散歩は完全に習慣化した。1日にだいたい45分から1時間くらいの幅で運動している。

 それはそうと、最近突然料理に興味を持ち始めた。大学に入ってからというもの「〜の素」に適当に切った食材をぶちこんで食べるという「なんちゃって自炊」でここまで食いつないできたが、Twitterの #うちのごはん とはしかみさん(@Chiken_Cooker )の投稿により僕の価値基準が崩壊した気がする。早速Amazonで自炊用の本を衝動買いし、僕のモチベは過去最高の高まりを見せている。どうか今後の自炊ライフがより良くなりますように。ただ、ただ心から祈りたい。

学習記録

 ・ラダーシリーズのローマの休日を読了した。映画を見たおかげで非常にスムーズに読み進めることができたと思う。level2はこれで2冊目になるのだが、level1と比較しても字面だけでは想像しにくいようなコロケーションが増えたように感じる。しかし、Level2の中では別の本でも同じような表現が使い回されているので、巻末の辞書で勉強しつつもう少しLevel2にとどまりたい感はある。Level2の言い回しはLevel2を読んでいるうちに習得したい。

 ・LinuxのCore Uitilitesのソースコードを取得した。これについてはいろいろ発見があったのでまた改めて記録を書きたいと思っているが、ひとまずはソースが手に入ったということで、時間を見つけて読んでおきたいと思う。

 ・Mastering the American AccentのChapter3を読んだ。子音の発音を扱っていて、フォニックスと若干説明の異なる点が散見された。また、発音だけでなく音のつながりにも言及されている。例えばkeep talking とかを言うときに、keepのpは読む必要がない。

パッと聞く感じ、kee talking みたいな感じになる。非常に興味深いが、ここらへんの詳しい内容はChapter8までお預けのようなので、そこにたどり着くまではまず子音の一つ一つをきれいに発音できるように努力したい。

天井付近から水漏れが、、、、そして騒音問題。

2021年3月7日

 どうも玄関付近の天井からの水漏れがある。玄関付近にはガスコンロを置くために1段下がったシンクがあり、水は一旦そこに落ちる。そして、台の上で抱えきれないほどの水量になったら水は玄関の方に流れていき、玄関が水浸しになる。この問題は1月の終わり頃に発覚して、それからちょくちょく起こっていたのだが、発生頻度が増えてきたこと、そして今日の水量が特に多かったこと、に耐えかねて管理会社に再度電話を入れた。管理会社は僕の電話に早急に対応してくれて、日曜日にもかかわらず1時間ほどで水道屋さんがやってきた。(今日来訪した水道屋は、経験豊かでかつ非常に誠実な人だった。)

 水道屋曰く、この水漏れは天井の換気扇付近の真上、つまるところ上の階の住人のキッチンの管に原因がある(可能性が高い)とのこと。上の階のキッチンを点検して、修理をすれば僕の部屋の水漏れも直る可能性が高いとのことだ。しかし、

(i)上の階の住人が非協力的で、(この手の問題で一番厄介なテクニックの)居留守を使うということ

(ii)貼り紙をするなどのメッセージ性の強い対処は管理会社から止められている

の2点によって現状手出しができない状態である。幸いにして(?)、水量は玄関を水浸しにする程度の量なので、僕の生活基盤を破壊するには至っていないが、こと、この問題に限って言えば解決の見込みは当分なさそうだ。

 追加になるが、上の住人に関して言えば、入居当初から騒音の問題があった。夜中に人を集めて飲み会をしたり、複数人で楽器の演奏をしたり、契約違反も甚だしい。このことを水道屋に伝えたところ、これも報告書に記載してくれるとのこと。水問題こそ解決しなかったが、管理会社に現状が伝わったという点で大きな一歩だと思う。

学習記録(日報)

 最近読書記録などを書いて、ブログがどんどん多目的がしているので思い切って一日にやったことをもここに書き付けたいと思う。

 今日の起床は昼。昨日の夜が遅かった。春休みも中盤に差し掛かっているので、そろそろ生活時間を矯正していきたいと思う。

 ・ニトリのデスクライトを買った。これで手元を明るく照らすことができる。コンパクトなのにとても明るい。すごい。

 ・「コンピュータアーキテクチャの基礎」の第7章を読み終えた。内容としてはメモリアーキテクチャで、メインメモリの構成から入って、仮想メモリキャッシュメモリと話が進んでいく。「空間的参照局所性」と「時間的参照局所性」が極めて大切であることと、仮想メモリキャッシュメモリに使われるページ置換、ライン置換などを押さえておけばメモリ技術への入門・足がかりとしては十分だと思う。

 ・Essensial Grammer in UseのUnit42,85を仕上げた。eitherやtooをつかって相手に同意したり、形容詞と名詞をセットで使えるようになった。

 ・ラダーシリーズの「ローマの休日」を読んでいる。この作品に関しては、先日映画の方を先んじて見ておいたので、非常に内容が頭に入ってきやすい。内容理解のリソースが省かれると、文章の言い回しや文法、使っている単語にも目が行くので、これはこれでありだと思っている。

今日はこのくらい。水漏れ問題が一刻も早く解決することを祈る。

「少女週末旅行」をよんだ

f:id:HoriK:20210306211511j:plain


注意:この読書記録はネタバレを多分に含むので

    未読の場合は注意されたし。

作品の世界について

 二人の少女が崩壊した世界を旅する話。主人公たちのおじいさんの助言に従って都市の最上層を目指しているが、なぜ最上層を目指すように言ったのか、また世界がなぜ荒廃してしまったのかも謎。第5巻においておじいさんが、過去のことを忘れないために知識の積み重ねがあるというのに繰り返してしまうのか、とぼやいていることから過去の起こった何かしらが繰り返されて都市の崩壊に至ったと考えられる。さらに、おじいさんは任務で出向いた先々で本を回収していた、というのでこの「繰り返された何か」が起こる以前からすでに世界は崩壊に向かっていたのかも。

登場人物について

 主人公たちは旅の先々で様々な登場人物に遭遇する。各人物が極めて人間的な特徴を持っている。例えば地図をつくりながら 街を歩き回るカナザワは人間の探究心・冒険心の象徴のように思えるし、対岸の大陸に飛ぶための飛行機を作っているイシイは創造性を象徴しているように思える。どのように考えるかは読者の自由なので、他の人物についてもぜひ自分で考察してみてほしいが、僕は自立機械ー>共感、基幹塔管理用人工知能ー>社会性といったような感じで対応しているように思えた。(今後変わるかもしれない。そしてヌコの役割が正直自分の中であまり整理できていない)

生命をもつことについて

 「生命とは何か」というのはこの作品の中でも重要なテーマとなっている。そして外部からの干渉の少ない荒廃した都市は、こういったことを考えるのに最適なセットだと思う。

 「食べるー>移動するー>寝るー>食べるー>移動するー>寝るー>・・・・」というループが一体なにを生み出すのか、行き着く先に何があるのかという問を主人公たちは度々考える。結果として、問の答えはあまりにささやかではあったが、主人公たちは生きるためのループを回していたことに満足できたようである。

 旅の途中で主人公たちは生命について「生命=終わりがあること」と定義する。物語終盤では旅で得たものを失っていき、まさしく終わりに近づいていき、都市と一体になったような感覚を味わうことになる。何を意味しているのだろうか。主人公たちが生命を持っていたことは確かだが、それと同じように都市も生命を持っていたのかもしれない。

 参考資料

「つくみず:著 『少女週末旅行』 新潮社 2018/03/15」

「UNIXという考え方」を読んだ

f:id:HoriK:20210227112358j:plain

 大学に入ってからというもののしばしばLinuxを利用しているが(というか普段使いしているのだが)、どこかLinux(またはUnix)由来のシステムやコマンド類に違和感を感じているところがあった。例えばLinux(またはUnix)には多くの小さなコマンド類が存在しているが、そのほとんどが単一の小さな仕事しかこなさず、もっと言えば一見して使い道のなさそうなものも用意されている。実を言えば今まで、これらを効果的に利用する場面なんて本当に存在するのか、小さな機能を統合してしまって大きく強力なコマンドに差し替えたほうが良いのではないか、と思っていた。

 この本はこのような違和感とLinux(またはUnix)の思想を解さない上述のような見当違いな発想を払拭してくれた。

 そもそもコマンド類は組み合わせて利用することで初めて真価を発揮するものだ。その際、コマンドの一つ一つを単機能の小さなものにすることで、シェルは高い柔軟性を獲得することができるし、コマンド自身のプログラムも保守されやすくなる。

 ユーザとの対話を避けている部分にも納得がいった。ユーザに見せるために書かれる、ある意味無駄な(システムには影響しないような)出力ストリームを削ることで、コマンド同士をスムーズに連結させることができるようになっている。考えてみればとても合理的だ。

 そして、コマンド類だけでなく、小さく作って組み合わせるという思想はLinux(またはUnix)のシステム全体、ひいてはコミュニティ全体に及んでいる。多くのプログラムをこの哲学に沿って設計することにより、ソフトウェアの柔軟性と再利用性、移植性が高まり、結果的に開発効率が良くなる。

 Unix哲学に従ったソフトウェアがどうしてここまで発展を続けてこれたか、Linuxディストリビューションを始めとするソフトウェアの盛衰がどのようなサイクルで回っていくのか、これらの理解に結びつく良書であった。

参考文献

 「Mike Gancarz: 著 芝尾桂: 監訳 『UNIXという考え方』2001/02/23 オーム社

「この一冊で全部わかるセキュリティの基本」を読んだ

f:id:HoriK:20210226144703j:plain

 内容としては、セキュリティポリシーの基本的な考え方(3要素とかセキュリティそのものの重要性とか)や、基本用語の解説、代表的な脅威、マルウェア解析やセキュリティ構築の流れ、関わってくる法令など。

 セキュリティ、主にはネットワーク・セキュリティにどのような世界が広がっているか、どのような要素が考慮されるべきか等を大まかに学べる本。解説はいづれもそれらの概要にとどまっていて、具体的な技術要項にはあまり触れられていないから、技術にあまり明るくなくてもスラスラと読めると思う。

 反面、技術者がこの本をよんでも学ぶことはあまりないかと思われる。セキュリティの学習に取り組むのであれば「基本」と呼ぶべきは、暗号論や解析技術への理解、プログラミングスキルの方であるはずなので、その関連の専門書を漁ったほうが良いだろう。

 適切な対象読者は、セキュリティについて学びたいが専門書を読む前にワンクッション置きたい一般人か、突発的にセキュリティ関連の決定を要請された経営者等だろうと思う。