7/30

 進捗報告

チェッカのコーディングを進めた ( 2 sessions ) 

 チェッカーのコーディング,特にテストについてのコーディングを進めることができた.これによって,Operatorはあらかた期待通りに動いていること言うことを確認することができた.テストケースを各作業にも少しづつ慣れてきて,テストを書くのも楽しくなってきた.ボトムアップで少しずつ足場を固めていっている感じがとても良い.

 チェッカーをこれ以上進めるためにはVariablesを適切に取ってくる必要があるのだが,これをするためにはProxyのbufferの状態をとってこないとテストケースが作れない.しかし,放置している間にproxyがどうやら動かなくなってしまっているので,この問題を修正する.proxyの動作を保証するテストケースも現状では全く存在していないので,テストケースを書いてregressionも防止していく.テストケースについてはcurlで作れそうな予感がする.

Linux講義課題を提出した ( 30 mins )

 Linuxの講義の課題スライドを修正して提出することができた.発表が3週前のことなので,危うく提出し忘れるところだったが,学校で言われて思い出したので,作業にとり書かれた.修正内容はexecvpの図示の部分だけだが,その部分については先日読み終えたLinuxのしくみにほとんど答えがそのまま書いてあったので,その通りに描いた.

HTTPトラフィックデータを作成した ( 2 sessions ) 

 curlを使うことでHTTPのトラフィックデータを作成することができた.今回はHTTP通信を対象としているので,HTTPでの通信を確認する必要があったが,幸いにもnginx.orgがhttpでの接続を許可していて,これの内容をダンプすることで,サンプルができた.サンプルが取れたので,このデータを元にテストケースを新たに作成して,http parserの動きを確認するなどした.status lineに関しては適切に動作しているのを確認したが,http headerに関してはsegumentation faultが発生しているらしく,どうも,これが接続不良の原因の一つになっている気がする.次のセッションではこの問題を修正したい.


TA勤務確認表を提出した

 C言語のTAについての勤務確認表を提出することができた.事務の人がなかなか捕まらなくて何ラウンドが行き来することになったが,最終的に提出できたので結果オーライ.事務の人と夏休みの過ごし方について話すなどした.

生活面

10時半起床.おおよそ6時間睡眠.十分な覚醒度を得た.

昼は生協で牛丼を買って食べるなどした.牛肉のほか玉子焼きも乗っていて味付けも良かったように思う.割とあっさり食べれた.

夕方にキャンパス内を散歩した.かなりの晴天で散歩日和だった.アップダウンのあるルートを選択したので,十分な運動量を稼ぐことができた.


7/28

進捗報告

ルールチェッカの開発を進めた ( 2 session + 50 mins ) 

 ルールのチェックをするためのコードを書き進めることができた.パターンマッチングなどの道具立ては完成しているので,これをオペレータとして呼び出して,アクション群を実行するかどうか判断するというところまでとりあえず進めたいところ.

 また,テストケースについてもCUnitを使った初めてのユニットテストを動作させることができた.Makefileとだいぶ長らく格闘したのだが,2時間の戦いの末勝利した.これによって,コードの一部分を切り出してテストをするということが簡単になったので,統合テスト前のチェッカーの動作の確認などにも役立てたいと思う.

C言語TAに従事した ( 1 session ) 

 本日もC言語のTA業務に従事することができた.そろそろ期末シーズンということもあり,受講者の関心ごともC言語からそのほかの科目の期末テストに移ってきていて,その話が多めだった.C言語から外れてOSやファイルシステムなどについても言及することができた.


生活面

朝9時起床.大体6時間睡眠.十分な覚醒度を得た.

7/27

 進捗報告

TGでBTの動作を確認した ( 1 session ) 

 TGにBTのコードが適切に動作していることを確認することができた.コードを持ってきて,さらにはキャラクタを動かすようなアクションのコードを作成し,これを持ってきたBTで引っ掛けて呼び出す.最終的にビルドして動かしてみるとアクション通りの動きをしているように見える.この実装をするためにはBT Managerみたいなオブジェクトが必要かと思っていたのだが,名前空間を定義してこれを使って別ファイルから読み込み,ローカルでオブジェクトを使い捨てるようにしたらそんなことをする必要はなかった.名前空間はこれまでこのプロジェクトであまり有効に使いきれていなかった.これを使うことにより削減できるオブジェクトがいくつかありそうだと感じる.兎にも角にも,今回の作業によってTGのUnityのコード上でも任意のNPCを作成可能になった.

SF小説を読み進めた ( 1 session + 45 mins )

 たったひとつの冴えたやり方を読み進めた.今は多分三部目の作品を読んでいる. 

単体テストを始めた ( 1 session + 45 mins ) 

 CUnitというテストフレームワークを使って単体テストを書く方法を勉強することができた.まだ,パーサのテストが完成していないのだが,関数群の使い方は分かったので,makeが通るように書き換えていき,毎回これをビルドするたびにこれが実行されるように書き換えていきたいところ.

生活面

13時起床.おおよそ8時間睡眠.十分な覚醒度を得た.中途半端に寝て起きるよりはきっちりと休んだほうがスピードが出るので,気をつけていきたい.

夜間に1時間ほど散歩をして,これによって十分な運動量を得た.

7/26

 進捗報告

ブログを書き進めた ( 1session + 20 mins)

 技術ブログの方を久しぶりに更新することができた.Linuxの本のブックレビューと,普段使いのツールのエラー修正方法の紹介とで2件の更新になった.ブックレビューは書き方がいまだに安定しない部分があるが,大体は下書きの構成通りに書いた.1日置いてから読み直したらあんまり的を得ていない批判をしている部分があったので反省して描き直した.ツールのエラー修正については,修正すべきコード例をきちんと示しながら修正していて,コマンド操作も省略せずに書いているので,pedaのエラーにぶつかった多くの人にとって有用なものになったと思う.あとは,関連しそうなワードで調べたときに上位に出てきてくれるかどうかだが,これは祈るしかない.

 次のブログセッションでは,宅内LAN環境について久しぶりに書きたい.Linuxの開発マシンが追加されたので,図表にそれを反映したい.

bashの本を読み進めた ( 1 session ) 

 入門bashを読み進めて,2章のコマンドライン編集のところまで来ることができた.コマンドライン畳でのヒストリーの行き来が覚えられないということをいつも言っていたのだが,これはデフォルトではemacsのバインドになっているらしくて,これをviのバインドに変更することができるらしい.これはかなりよいものかもしれない.

統計学の勉強を進めた ( 1 session ) 

 第2章の練習問題を突破して,第3章の確率の話に辿り着くことができた.今は理論確率のところなので,まだそこまで難しくはないので,一気に次のセッションで行けるところまで行きたい.相変わらず統計らしい話にはまだ行き着けていないので,ペラペラと後の方のページを定期的にめくってはモチベーションを維持している.

TGに対してBTのコードを移動した ( 2 session ) 

 TGに対してBTのコードを移動してきて,ひとまずはtick()が動いていることがか確認できた.ここからはいくつかのleaf nodeを実装していき,それをrootに接続して動作を確認していきたい.

7/24

 進捗報告

ブログを書き進めた ( 1 session ) 

 久しぶりに技術ブログのほうの記事を書き進めることができた.今回は無難にブックレビューとなる予定で,Linuxのしくみを読み終えたのでその感想をまとめている.他にも書こうと思っていたが,まだ書いていないというのが結構あって,それらのネタについても順次消化していきたいところ.とりあえず記事の構成を考えてしまえば,あとは早いという印象を受けているので,白紙に構成を書き出してみるというところからスタートしたい.

単体テストの本を読み進めた ( 2 sessions )

 単体テストの考え方/使い方を3章の後半まで読み進めることができた.ここまでの内容で単体テストの基本パターンであるAAAパターンについて学び,また,AAAの各要素の記載に際してどのようなことをに気を付ければよいかを学んだ.また,単体テストの命名に際しては,テストが検証するアプリケーションのふるまいに対してストレートな命名をすべきであるということを学んだ.次のセッションでは3章を読み切り,続く第二2部に進み,テストケース作成のより具体的な話題について学んでいきたい.

DDoSツールについて調べた ( 40mins )

 クラスメートと一緒にDDoSツールについて調べることができた.Github上でスターの多いDDoSツールを探し,そのコードを見た.ほとんどのツールが驚くほど単純なコードで動作しており,python製のものについては,ipとportを指定してrandom byteをwhile true内のsendto()でひたすら送るだけ,という構造で動いているものが多かった.こんなのなら素人でもすぐに作れそうだ,という印象.DDoS自体がコンセプトは単純なのではあるが,防御側がエントロピーをはじめとしたいろいろな概念を使って防御を試みているのに対して,攻撃側が何も考えずに5行くらいのスクリプトを回しているだけ,という非対称性がなんとも面白いところではある.

研究テーマについて議論した ( 1 session ) 

 クラスメートの研究テーマについて議論をすすめた.5人くらいで楽しくお話をした.技術的にどういうことをやっているのかということはそこまで難しくないのだが,やはりこの手の問題は,課題からきちんと出発しないと,途中で議論の流れがおかしくなってしまうな.常に課題から出発する意識を持つということが重要である.

ルールのパーサのコードをリファクタリングした ( 2 sessions ) 

 ルールのパーサのコードを全体的にリファクタリングすることができた.しかし,このコードは結構な量のメモリリークを起こしているらしい.クリティカルな原因は把握できていないのだが,どうも,メモリの割当量をリサイズしている部分がよくないみたい.多分新調する方向でのリサイズは割合安全とできるのだが,逆方向は結構鬼門なのだろう.なかなかうまくデバッグできない.

生活面

昼はゼリー類を食べたりした.時間がなかったけども,栄養量的にはそこそこ良かったのではないかと思う.

夕方にクラスメート一緒にキャンパス内を散歩したりして,これによって十分な運動量を稼ぐことができた.

夜は帰り際に買ってきたトルコライスを食べるなどした.ボリューミーではあったが割合あっさりと食べれた.

7/23

 進捗報告

AC法によるパターンマッチングを実装した ( 1 session + 20 mins )

 AC法のコードを引き続き書き進めて,とりあえずきちんと動作することを確認することができた.コード自体は400行弱で,可読性にもかなり配慮して書いたのでメンテ性もそこそこにある.これによってパターンマッチングに必要な2つのアルゴリズムの実装が完了したのが大きい.あとは,これを大枠を書いたコードのほうに当て込んでいって,ガンガンルールチェック用のコードを完成に持っていくだけだ.

Linux課題をクリアした ( 40mins )

 Linuxのカーネルモジュール作成の課題のレポートを作成して,提出することができた.プログラム自体は完成していたので,その結果を取り直して,レポートにまとめるだけであり,作業はそこまでかからなかった.これで,今週分のプログラムも提出できて安心できた.

統計学の教科書を読み進めた ( 2 session )

 はじめての統計学の2章を読み進めることができた.大体2章の内容を終えて,現在は最後の後の練習問題に取り組んでいる途中である.第2章までの内容で,平均値や中央値,最頻値といったcentral tendencyに関する値と,分散や標準偏差,変動係数といった散らばりに関する基本的な値の計算の練習をした.生データからこれらを計算する値と度数分布表からこれらを計算する練習をした.もうしばらくは基礎的な内容が続きそう.先をちらっと見たところ検定に入るのは7章からみたいなのでだいぶ先だ.

生活面

12時起床.おおよそ10時間睡眠.十分な覚醒度を得た.

昼過ぎにキャンパス内を散歩した.今回はグラウンドを目的地として設定し,グラウンド内を1周歩くことができ,これによって十分な運動量を稼ぐことができた.

7/22

 進捗報告

チェッカーのコーディングを進めた ( 2 session )

 ルールのチェッカーのコーディングを進めることができた.ルールの順次適用のための関数を作成して,その中でオペレータに応じた操作と,点数の加算をする予定である.まだ,必要な関数が色々と間に合っていないので,動く物は作れないのだが,大枠がなんとなくつかめたのは重要なことだ.引き続き実装を進めていきたい.

ACの実装を進めた ( 2 session ) 

 ACの実装を進めて,この結果,なんとかfailure functionsの実装の方法の検討をつけることができた.とりあえず各ノードで,前ノードを参照して,前ノードのfailure functionsのトランジション先をとってきて,ここから,そのノードが持っている値によってトランジションができるかどうかを確認することによって,failure functions用のテーブルを作成することができる.現在はテーブルの作成と初期化まではできるようになったが,値のうち替えの部分があんまりうまくいっていないようである.これをいい感じにデバッグしていきたい.

進捗報告書を作成した ( 70mins )  

 今週分の進捗報告書を作成することができた.今は実装段階にあるので,実装上のさまざまなアルゴリズムについての説明が主体になっている.


生活面

5時40分起床.おおよそ8時間睡眠.十分な覚醒度を得た.



7/21

 進捗報告

ACの実装を進めた ( 2 sessions ) 

 ACの実装を進めて,とりあえず分岐がきちんと作れるようになった.これによって,テスト用のファイルを読み込ませてみて,きちんと文字列全体がprefix treeとして保持できるようになった.これはACの上ではgoto functionを実装することと同義だが,各ノードの遷移用の情報を2次元配列から,ポインタの探索に変えたことで,メモリ使用量は抑えられているはず.次はそれぞれのノードがtransitionに失敗したい時のfailure functionとしてどのノードを持つべきかを計算する関数を実装していく必要があるが,これについてはアルゴリズムがどういうものだったか忘れたので,論文を読み直してから実装方策を考える.

採点業務を進めた ( 1 session ) 

 採点業務を進めて,後半から数えて3つ分の課題に対して言おうすることができた.一つの課題の回答がキャッシングされたら,素早く回答を返せるようになるので,短時間で一気にやってしまうことが重要だ.採点に関しては,若干甘めにつけないとこれは0点ばっかりになってしまうので,気をつけよう.

TA事前学習をした ( 1 session ) 

 C言語のTA業務に備えて,本日扱う内容のプログラムを読み込むなどした.今回は単にコードを実装するというよりは速度を測定するという部分に重きが置かれていて,ある程度サイズがある文字列ファイルを色々なソートアルゴリズムでソートして,その時間を計測する意という内容になっている.ソートアルゴリズム中の操作についても,二分探索など,探索アルゴリズムを適用することで高速化が可能になるということであった.

C言語のTAに従事した ( 1 session ) 

 本日もC言語のTA業務に従事することができた.今日はいろいろなソートのアルゴリズムの動作検証であり,動作時間を図ることでソートアルゴリズム間の性能差を見ることができた.今日の入力データにおいては,データの配置がごちゃ混ぜになっていたので,挿入ソートが異常に遅かった.

生活面

1時起床.大体4時間睡眠.とはいえ,昨日はほとんど寝て過ごしたので,睡眠負債はほとんどなし.

床の清掃をした.これで埃を一掃した.また,可燃ごみを廃棄した.この時期はごみを溜めないことが重要である.

昼には生協で買ってきた麻婆豆腐をたべた.スパイスが効いていて,かなりすんなりと食べれた.

昼過ぎに山のふもとのローソンまで歩いた.アップダウンのある道を40分ほど歩き,これによって十分な運動量を稼ぐことができた.

7/20

 進捗報告

Arch Linux導入 ( 4 sessions )

 新しく購入したBMAXの1万円のマシンに,Arch Linuxを導入することができた.Arch LinuxはLinuxディストリビューションの一つで,とにかく無駄な機能のないシンプルな使い心地が人気のディストリビューションである.Ubuntuをはじめとして他の奥のOSには複数のバージョンが存在していて,それが結構数字を刻んでいくわけだが,Arch Linuxにはひとつしかバージョンがなくて,それをひたすらアップデートして使い続けることができるため(ローリングリリースという),いちいちバージョンごとに乗り換える手間が省けてとてもいい感じ.

 ISOについてはたったの1.3GBしかなくて,インストールメディアは他ディストリビューションと比べると圧倒的に小さい.これは,インターネット接続を前提としていて,必要最小限のパッケージすらがISOに含まれていないからというのも理由の一つだが,最も大きい理由はインストーラが存在しないことである.他ディストリのISOにはインストーラが入っていて,それに従うことでOSをPC本体にインストールできるが,Archにはそれがない.そのため,ISOが非常に小さい.

 インストールはそこそこに手間がかかる.手順としては,まず,ディスク上のパーティションを切るところから始める.OSをまともに動かすためには,EFIを動かすための領域と,Swap領域,それからOSとユーザデータを入れる領域の3つを切る.今回はそれぞれ512MiB,512MiB,残りの全領域とした.このマシンはSSDが128GBあるから,116GiBくらいユーザが好き勝手使える.領域が切れたらそれぞれをフォーマットする.EFI SystemsはFAT32,SWAPはswapfs,残りの領域はext4でフォーマットした.フォーマットしたらディレクトリをマウントする.swapfsに関してはswaponで,swapに割り当て,EFI Systemsは/mnt/boot (/boot),残りの領域は/mnt/ (/)にマウントする.そこまでできたら/に対してArchの最小構成をインストールしていく.そこまでできたら,ようやくSSD側のArchにログインできるようになるから,ログインして,GRUBの導入と,諸々の設定(ネットワーク設定,ユーザ名の設定など)を済ませる.ここまできたら,ようやくSS側のシステムが利用可能になるので,リブートをかけて,ログインする.

 SSD側のシステムが立ち上がるようになったら,普段使っているソフトを入れて,SSHDを立ち上げて普段使いのmacからログインできるようにする.これで導入作業が完了.GUIなんてものはないので,全てCUI上で実施する.特にパーティションを切ったりという作業は普段あまりやらないので,とても勉強になった.


7/19

進捗報告

小説を読み進めた ( 1 session ) 

 長らく積読していたSF小説を読み進めることができた.読んでいるのはたったひとつの冴えたやり方(原題は The Starry Liftらしい)というもので,短編集なのだが,現在は3つ目の話を読んでいるというところ.SFとミステリーに関してはネタバレについは,かなり風当たりが強いので詳細について言及することは避けるが,まぁ面白いな.

TGのコードをリファクタリングした ( 4 session ) 

 TGのコードにBTのコードを移しつつもリファクタリングを進めることができた.BTのコードをProcessing用に書いて,これは文法的にはJavaのスタイルをとっているので,C#をもとに作られたUnityスクリプトにも容易に移行することができた.また,それに伴った周辺のコードもかなり書き直して(コードによっては100%書き換え),可読性がかなり高めることができた.今読み直しているコードは昨年のこのくらいに書かれたコードが主なのだが,忙しかったということや,可読性への意識がそこまで高くなかったということもあり,かなりコードの品質が低い.それを全面的に書き直していくと,当時と今のコーディングスキルの差が感じられて,これは体験としてはそこそこ良いものだ.

 また,最近はAIコーディングの流れが結構あるので,試しにgithub copilotを導入してみた.github copilotをVSコードに導入すると,コメントなどをコード中に書いておくと,その途中をAIが書いてくれるという感じ.また,インラインチャットで,書いて欲しいコードとか,修正したい理由とかを書くと,それに沿ってコードを書き換えてくれる.ただ,書いてくれるコードの品質はお世辞にも高いとは言えない状況があって,また,頼んでなくても続きのコードの提案をひたすらしてきて,それが全く的を得ていないことがほとんどなので,コーディングに全く集中できない.ということで,AIコーディングの本格導入に関しては,もう少し先延ばしにすることになった.オープンソースの人たちがAIによるコミットをウザがっている理由が少しわかった気がする.

生活面

16時起床.12時間睡眠.かなり高い覚醒度を得た.

夕方はグラタンを買ってきて食べた.結構美味しく食べれた.

夜に学校に忘れ物をとりにいき,それによって40分ほどの散歩が発生したので,十分な運動量を稼ぐことができた.


7/18

 進捗報告

neko.cを改良した ( 1 session ) 

 クラスメートの作成したneko.cというプログラムを改良することができた.端末の幅を実行時に取得して,それをもとに文章の表示のセンタリングをする.また,オプション類についても綺麗に整理することができた.

 このプログラムは普通にすごく便利で,日常的にすでにかなり使っている.湾曲のワイドディスプレイを使っているとマニュアルとかドキュメント類が左端に寄ってしまってかなり読みにくいのだが,このプログラムを使うと画面の真ん中にそれらを持ってくることができ,とても読みやすくなる.なぜなのか,この手のオプションはlessとかの中には含まれていなくて,端末側でもそれをささっとやるいい感じのコマンドがないので,困るのだが,今回これが解決されたということで非常に嬉しい限り.

regexのテストをした ( 2 sessions + 40mins ) 

 Regexのマッチングを適用するために,PCRE2を導入し,これをテストすることができた.PCRE2の使い方自体はpcre2demoというマニュアルページがあり,これを見ながらコードを書いていくことでマッチングを実施することができた.手順としては準備をしてから,regex patternをコンパイルし,コンパイル済みのマシンを使って,subjectにマッチングをかけるという形になっている.

 インタフェースをととのえて,mainの側ではpatternを投げ込んで,マシンを準備する関数を呼び,評価用関数にsubjectを投げ込めばbooleanで評価結果が返ってくるという形にした.この評価関数を実行して,trueだった場合に値を加算していくようにすればregexの検査は実施できるようになるはずだ.

Linuxの本を読み終えた ( 1 session + 45mins )

 Linuxのしくみを読み終えることができた.全体として図表が多めで,実験も多かったので,言っていることは理解しやすかった.概略を掴むというところに関して非常に良い本で,また,カーネルに関しては,こういった概略を掴むための入門書が不足していたという部分もあるので,非常に貴重だったと思う.学校の講義がちょうどこの本に連動してカリキュラムが組まれていたというのもあって,半期の間少しずつ勉強しながら読めたというところも恵まれた点だった.実装については,結局それぞれについてもっと勉強して,最終的には実装を追っていくということをしないと理解できないと思うので,ステップアップは必要だし,それが前提の記述だと思う.

TGのコードを整理した ( 1 session ) 

 TGのコードを書き足す前にコードを整理することができた.TGではこれまで,オブジェクトごとにディレクトリを分けてきたのだが,これによって,コードがかなり散財していて,管理がかなり面倒になっていた.この手の業務はそれぞれの業務ごとに作業が切り分けられるのがデフォなので,なんだかんだでファイルの種別ごとにディレクトリが切り分けられているのが正義だと思う.

生活面

12時起床.10時間睡眠.十分な覚醒度を得た.昨日は睡眠不足で一日中よくわからないことを口走っていたので,元に戻ってよかった.


7/16

 進捗報告

Linuxの本を読み進めた ( 2 sessions )

 試して理解Linuxのしくみを早朝から読み進めることができた.今日のところで,7章と9章を読み終えた.7章はファイルシステム,9章はブロックデバイス,主としてHDDについての内容であって,関連があったので読みやすかった.ファイルシステムにはext4とかのほかにもtmpfs,procfs,sysfsなどが用途ごとに使われている.それからネットワーク越しで使うものではnfsとかcephfsがある.ブロックデバイスに関しては,アクセス順序でスピードが落ちたりするので,順序を効率化するI/Oスケジューラが存在していて,また,空間的参照局所生を活かすためにreadaheadという機能がある.I/Oスケジューラに関してはブロックデバイスが十分に高速な場合(NVMe SSDなど)には,むしろボトルネックになるケースがあるが,readaheadについては,どちらの場合においても良好な結果を示した.

市内でショッピングした ( 2 sessions )

 単体テストの本が欲しかったので,市内の本屋に出かけた.目的の本を無事入手することができた(単体テストの考え方/使い方).東急ハンズにも行って,切れていたインクを補充したりできた.その後にミスドに行って,コーヒー片手に本を読み進めたりした.帰り際にドラックイレブンに行って,生活用品を補充したりできた.トータルで3時間くらいのショッピングで満足できた.

Linux講義レポートを作成した ( 1 session ) 

 明日提出のLinux講義レポートを提出することができた.コマンドのソースコードを読み直して,挙動を説明した.この講義のrepositoryがかなりごちゃごちゃしていたので,きれいに整理して,見通しが良くなった.来週の部分についてはまだできていないが,ソース自体は完成しているので,あとはレポートに実行結果を記載するだけという状況にはなっている.

Regexライブラリをテストした (  + 30 mins ) 

 Regexのライブラリをテストしかけた.PCREは使い方自体はシンプルな感じであった.

Unitテスト本を読み進めた ( 1 session + 50mins ) 

 単体テストの考え方/使い方を2章の中盤くらいまで読み進めることができた.これによってテストの考え方が大まかには古典学派とロンドン学派の二つの学派に分かれていることが分かった.古典学派はa unit of behaviorを単体の単位として,ロンドン学派はa unit of codeとして,1クラスを単体の単位とする.テスト対象が依存している他のオブジェクトについてはモックで置き換えることになるが,古典学派では共有依存しているオブジェクトのみを置き換えて,ロンドン学派では共有依存と可変依存をモックで置き換える.

生活面

4時半起床.だいたい6時間睡眠.昼頃に仮眠するかも.案の定10時くらいに4時間くらい仮眠して,これによってようやく十分な覚醒度を得た.睡眠負債も返済できた.

朝から床の清掃をした.これによって床の埃が目につかなくなった.

洗濯を1ラウンド回して,月曜日の突然の雨の分をやり直すことができた.干すところまで行ったので,あとは待つだけ.

昼はミスドでドーナツを食べた.チュロスとポンデリングを頼んだ.チュロスを食べたところで電車の時間が来てしまったので,残りは持ち帰った.コーヒーを併せて飲んで,覚醒度が高まった.

市内を歩き回ったので,本日はそれによって十分な運動量を稼げた.

7/15

 進捗報告

ルールパーサを拡張した ( 10min )

 phase5のルールに対応できるようにルールパーサを拡張することができた.作業内容としてはこれまで作ってきたパーサの実装と全く同じコードをつくって数字を5に打ちかえるだけの簡単なものであり,10分で実行結果を確認するところまで辿り着けた.

進捗報告書を作成した ( 60min ) 

 1時間くらいかけて進捗報告書を作成することができた.先週はライブラリ選定に時間を使っていたというのは言い訳で,インタプリタをめちゃくちゃ書いていたので,あまり研究上のコードは書かなかった.今週はライブラリを使いながら点数を足し上げる処理を書くのと,AC事態を実装するのが重要なタスクになる.

ACアルゴリズム実装 (  2 session + 60min  ) 

 新しくブランチを切ってACの実装を始めることができた.とりあえずノードの構造体を書き始めて,再帰的にinsertとdumpの関数を作り,freeする関数まで作って幸先の良いスタートを切ったのだが,どうもブランチを追加する処理でセグメンテーションフォールが出力される.これのデバッグをする必要がある.

Python画像処理のTA ( 1 session ) 

 Pythonの画像処理の研修でTAを担当することができた.今回の講義では,システム上のトラブルも色々とあって大変だったが,なんだかんだで楽しくやることができた.

生活面

 10時起床.おおよそ7時間睡眠.十分な覚醒度を得た.

 昼はからあげ丼を食べた.なかなかボリュームがあったが,食べれた.

 夕方に40分ほど散歩した.図書館で本探しをして,楽しく過ごせた.十分な運動量が稼げた.

7/14

進捗報告
GNU Coding Standardを読み進めた ( 2 sessions ) 
 GNUのCoding Starndardを2session分読み進めて,Chapter1,2,3とchapter5の半分を読むことができた.研究用のコードはGNUのコーディングフォーマットに寄せている形でコードを書いていて,この形式に近づけるとなんだかんだで,かなり綺麗に書けるということが経験的にわかっているので,最終的にはこのフォーマットを準拠する形に変えていきたいと思っている.ブロックのインデントが割合特徴的で,関数の{が関数処理の最初の行の一列目に現れる.ifやwhileに関しても{は改行するが,関数とのみ間違えを防ぐために2space分下げる.
int 
main (void) 
{
    if (condition)
      {
        process;
      }
    return 0;
}
という感じ.

TAの準備をした  ( 15min )
 5限のTAで使うプログラムを15分くらいかけて読んで,動作を理解することができた.これで質問されてもなんとかなると思う.コードの品質については先週のサンプルプログラムと比較するとかなりマシになっていると思う.

Regexのライブラリを探した ( 1 session )
 Regexのライブラリを色々と探してよさげなライブラリを選定することができた.組込み向けとか,軽量化のために様々なslreや,tiny-regex-cをはじめとしたさまざまなライブラリが開発されていることが分かった.しかし,処理したいマッチング用の文字列がperlの方言で書いてあるので,この記法への互換性は残さないといけない,ということでpcre2に落ち着いた.
 pcre2のソースを手に入れることができたので,実際にbuildしてみた.

C言語のTA業務に従事した ( 1 session ) 
 今日もC言語のTA業務に従事することができた.今日は二分探索だったのだが,問題そのものは二分探索と関係のない部分だったのでアルゴリズムで悩んでいる人はいなかった.そろそろ様々な期末テストが実施されているということで,化学とか数学とかの問題を解いている人もいる.ここらへんも学び直したいけど,今は勉強は基本PBLでやることにしているので,作りたいものがないと勉強を始めるということにならない.特に作りたいものが思い浮かばないからなぁ.

Proxyのリファクタリングを進めた ( 1sessions + 40 mins )
 Proxyのコードをリファクタリングすることができた.サーバ側のプロキシが,かなり色々なコードが入り混じっていてごちゃごちゃとしていたので,これを切り分けたりして,また,うまく動作していない関数についても全面的に書き換えて,整理することができた.これにより,今後のデバッグが楽になったと思う.次のセッションでは,それぞれのサーバコンポーネントについてのテストケースも記述していきたい.
 
ACの論文読みをした ( 1session ) 
 ACのコードを書くために,ACの論文を読むなどした.これによって,gotoテーブルの作り方とfailure functionの作り方を知ることができた.ツリーのたどり方についての基本的な考えも理解できた.アルゴリズムとしてはそこまで複雑ではないので,数百行で書けそうではある.明日時間をみて実装を進めていきたい.

生活面
11時起床.おおよそ10時間睡眠.十分な覚醒度を得た.
昼は生協で,コロッケ丼を食べた.白身魚も入っていて,割合食べやすかった.
夕方4時にクラスメートと一緒にキャンパス内を35分ほど散歩した.雨上がりということもあり,割合涼しかったので快適に散歩できた.十分な運動量を稼げた.
夜は米,春雨スープ,鮭の3点セットでバランスよく食べれた.
深夜にも1時間ほど運動して,これによって気分が上向いた.

7/12

 進捗報告

コードのリファクタイングを進めた ( 2 session + 60min )

 昨日にクラスメート一緒に描いたbook-meterのコードを時間をかけてリファクタリングすることができた.今回はmainのファイルから主要な機能に関係のないヘルパー関数的なものを全て,本構造のデータを処理するためのファイル群に映して,また,誤解を招くようなインタフェースになっていた部分についても修正することができた.

 shell_modokiのコードについても多少リファクタリングを進めていって,とりあえず良い感じになったので,公開することにした.これでShellModokiのタスクは本当に終了.全体を通して,結構楽しくプログラミングができたという印象.

ゲーム開発会議をした  ( 1 session ) 

 ゲームの開発会議を実施することができた.今週は特に進捗についての話はなかった.シナリオとまではいかなかくても,そもそもどういうストーリーのスタイルに落とし込むかが決まらないと,コーディングが進んでいかない.よくわかっていないものをコードに起こすことは不可能だ.

生活面

12時起床.だいたい9時間睡眠.十分な覚醒度を得た.

夕方にエアコンの清掃をした.フィルターを水洗いして,フィンを洗浄スプレーで洗浄していった.今回はちょっと高価な洗浄スプレーを使ったので,効果を期待したい.無香料のものを買ったのだが,こっちのほうが前回よりいい感じだった.

夜は米,春雨スープ,世田谷食品の魚のあんかけみたいなもの.美味しく食べれた.

7/11

進捗報告
採点業務を進めた ( 2 session )
 C言語講義の採点業務を進めることができた.これ以上課題が増えることはないので,ひたすら再提出を打ち返し続けるフェーズになっている.とはいえ,もうすでに3ラウンド目くらいに到達していて,すでにまともなレポート群は通過済みなので,題意を満たしてくれない人々にひたすらお願いしてなんとか題意を満たしてもらうという,そんな様相.

水平ワークショップ ( 1 session )
 水平ワークショップでここ数年の特にマルウェアなどの脅威の調査状況について聞くことができた.どの話も非常に面白くはあった.研究にも役立てそうなので,新しく知った情報を元にリンク集を組み直すなどしたい.

Book-Meter推進 ( 2 session )
 我らのブックメータプロジェクトに新しいメンバを加えることができた.彼はC言語を研究で使うらしいので,このプロジェクトはその練習台として非常に良いものになると思う.今回は,実際に目の前にコードの説明をしながら一つの機能を追加していって,コードの全容を把握してもらった.


生活面
朝9時半起床.おおよそ11時間睡眠.十分な覚醒度を得た.
昼は生協で弁当を買って食べた.割合あっさり食べれた.野菜が歯に引っかかった.


7/10

 進捗報告

Shell Modokiの実装を完了させた ( 6 session ) 

 Shell Modokiのコードをひたすらに書き足して,elif elseにも対応して,fizzbuzzが実行可能になるまで持っていくことができた.加えて,このコードについて説明する簡単なプレゼン資料も作成することができた.後半はかなりデバッグが大変だったが,漫然とlldbを叩き続けることにより,問題の原因を特定して,解決することができた.とにかくデバッガを振り回す力を身につけることが,効率的なソフトウェア開発においては重要である.

Shell ModokiのREADMEを書いた ( + 40min )

 Shell ModokiのコードについてのREADMEを書くことができた.スライド資料にリンクを掲載したのだが,飛び先でソースファイルについての説明が一切ないのはさすがに不親切かなと思ったので,動作方法と実装された機能,ソースファイルの解説などを入れた.READMEを書くと突然しっかりとしたプロジェクトのような見た目になるのが不思議である.


7/8

 進捗報告

進捗報告書を作成した ( 1 session )

 進捗報告書を作成することができた.今回も下書きをして,それをもとに文章を起こしていった.先週までで何を実装していけばよいか,という詳細を考えることができた.全体の見通しを確保できたことが大きい.実装の手が軽くなった.今週は,この結果を用いてどんどんコーディングを進めていきたい.

PythonのTA に従事した( 1 session )

 PythonのクラスのTAに従事することができた.今回はDXの色々な関係者とたくさん雑談できて,割合楽しい時間を過ごせた.Pythonを教えるということが一番重要な業務ではあるのだが,講義で課されている課題が非常に簡単なので,この部分で教えるべき部分は特になさそうだ.

Shell_Modokiのコードを書き足した( 2 session ) 

 Shell_Modokiのコードをさらに書き足して,if, whileのなかのcondition上で算術演算を実施できるようになった.-というトークンを別トークンとして切り出したことで,condition上の処理では思わぬ副作用が発生したが,これまでのコードを書き直し,ことなきを得た.今はこのconditionの中で変数を扱えるように変更を加えている途中であり,これがうまくいけば,ifやwhileが変数に駆動して動くようになるはずだ.そこまでできれば,fizzbuzzはできたも当然である!

色々読んだ ( 1 session ) 

 SFとか,マルウェアのレポートとか,Unityのコーディングフォーマットとか,そういうものを特に集中するわけでもなかったけど,ダラダラと読んで,忙しさをリセットできた.

生活面

12時起床.だいたい8時間睡眠.十分な覚醒度を得た.

空き缶を廃棄することができた.缶・瓶のターンは1か月の中でも希少なので,このタイミングを逃さずにキャッチできてよかった.

夕方にキャンパスを少し長めに散歩して,十分な運動量を得た.

夜は帰り際に買ったトルコライスを食べた.なかなかボリューミーだったが,昼を欠食していたので,さらっと食べれた.

7/7

 進捗報告

論文読みをすすめた( 1 session + 30min ) 

 パターンマッチングの論文を読み進めることができた.ちょうどAC法というマッチングの方法を勉強しようとしていて,YARAをこれ使って効率化しようという内容だった.AC法自体は,1975年くらいからある,かなり歴史のあるアルゴリズムで,ツリー構造を辿ってマッチングをするアルゴリズムなのだが,それぞれがfailure nodeというようなものを持っていて,移動する先がなくなった時にそこに移る.AC法は移動先の設計が秀逸で,ちょうど,rootノードからその直前文字列を読み込んだ先にあるノードに対して移動する.なので,1回の読み込みで,オーバラップも発見できるという触れ込み.

セキュリティ機構のリファクタリングをした ( 1 session )

 セキュリティ機構のプロキシ部分を少し整理することができた.サーバ側のproxyのhttp parserの動きが不安定な部分があって,それは,自前実装の関数が複雑すぎることが原因でデバッグが難しいので,これを綺麗にしようとして,処理を切り出したりとかをしている.明日は,ここにセキュリティ検査機構を組み込む処理を足していこうと思っていて,今日のコードも引き続いて改善していきたい.Unitiyのコーディングにもあったが,良いコードは1日にしてならず.新しいコードを書き足していくとともに,作業時間の固定の割合を既存のコードのリファクタリングに回して,何度も同じコードを読み直しながら書き換えていく.この繰り返しによって,ようやくまともなコードというのが出来上がっていくというわけ.

CRSの調査を進めた ( 1 session + 30min )

 今日もCRSの調査を進めて,922-multipart-attackと994-application-session-fixationを読み切ることができた.ここまでで,だいたい半数以上のルールを検査したわけで,どういうルールの構造があるかということが,理解できた.残りのルールに関しては,もう明日まででは調査が終わりそうにないので,ここまでで分かったことで,コーディングの指針を定めて,残りのルールの読解は,それと並走する形で進めていくことにする.おそらく毎日3時間くらいをこれに当てれば,一週間で読み切れると思う.XSS,SQLI,RCEがラスボス級で,2000行くらいルールがあったりするので,これが時間を食いそうだ.

C言語TA( 1 session + 30 min )

 今日もC言語のTAに従事することができた.本日はハッシュテーブルの実装についての話だった.コードの品質が不足していて,かなりわかりにくいコードになっていたので,TAに行く前に自前で書き直して,これによってよく理解できたので,説明も淀みなくできた.次回は二分探索で,ツリーの構築とか,少し複雑な処理が入ってくるので,頑張っていきたい.

生活面

12時起床.おおよそ9時間睡眠.十分な覚醒度を得た.

外が晴れていたので,洗濯物を処理することができた.洗濯機を回して,干すところまで進めたので,あとは待つだけである.

夜は,米,シャケ,春雨スープの3点セットで,バランスよく食べれた.

7/6

進捗報告

shell_modokiの算術演算の実装を進めた

 8時間くらいコーディングをして,与えらた算術式を計算して,その答えを返すという処理を実装することができた.オペレータの優先度を見ながら算術式をツリー構造に変換して,そのツリー構造をもとに再起的に計算を進めて,最終的な答えを得るというプログラム.この機能はshell_modokiの算術式のオペランドを開くための機能に過ぎないのではあるが,算術式をパースするということ自体が,なんだかんだで一つの処理系であって,コーディングは結構大変だった.ただ,これによって算術式は暑かるようになったので,あとはこれをcondtionノードの実装に組み込んで,ifやwhileの中で使えるかを確認していく.

githubの自己紹介文を書き換えた

 githubの自己紹介文を更新することができた.前の自己紹介文は,ずいぶんと前に書いていたもので,自分の現状とはマッチしなくなってしまっていたので,更新できてよかった.自己紹介文を書くときはCS学科の学生ということで,端的に書きすぎているきらいがいつもあるのだが,github上ではアマチュアプログラマを名乗るという方針にして,以下のようにした.

I'm an amateur programmer living in Japan. Security is my major. On Github, I'd like to contribute to projects in GameDev, CLI utilities and Secuity Mechanisms!

 字数制限が結構厳しくて,これでちょうど最大字数という感じ.

CRSの読解を進めた

 今日も3時間くらいCRSのルールを読み進めて,response953-data-leakages-php,request930-aplication-attack-lfi,request931-application-rfi, response-952-data-leakages-javaを読むことができた.これで細かいルールを片付けたという感じ.これで, ようやく残り10個ファイルくらい.かなりルールも読み慣れてきた.正規表現も読み慣れてきた.明日1日使って,全部読み切ってしまって,実装の方針を決めたい.

 生活面

12時起床.6時間睡眠.そこまで睡眠負債がなかったので,十分な覚醒度を得た.

昼は紅茶スコーンとエピを細かくしたようなものを食べた.結構量があったけど食べれた.

昼間に学校に出かけて行って,その行き帰りで十分な運動量を稼ぐことができた.

夜は,米,春雨スープ,世田谷食品の宅食の3点セットで,バランスよく食べれた.


7/3

 進捗報告

Unityコーディングフォーマット読み

 Unityのコーディングフォーマットをきちんと設定して,TGでは,このフォーマットに準拠していこうと考えていて,そのためにUnityコーディングフォーマットを読み始めた.今のところ3章の半ばくらい.基本的にはMSのコーディング標準をベースにしていて,Sunのコーディングフォーマットと,そこまで大差ない感じ.割合簡単に導入できそう.TGでは,単純にコーディングフォーマットが不揃いというところだけでなく,可視性の設定が雑なところがあるので,そのあたりも併せて整備していきたい.

Linux講義出席

 1限のLinuxの講義に出席することができた.今回はLinuxカーネルモジュールを実際に作ってみるというような内容だった.きわめて単純なLKMはコードもわいあい簡素.これを発展させてドライバとか自作してみたら面白いと思う.アイデアはあるが,これが走り出すかは不明.他のタスクの進捗次第.

if文実装

 講義後に2時間ほど作業を進めて,昨日の続きを書いて,if文を実装することができた.ifの実装ができたら,whileは似たようなものなので,昨日のコードを見ながら実装していけば,何とかなりそう.あとはconditionの中で,算術演算とか,変数の展開とかができるようになったら,fizzbuzzに手が届くと思う.

while文実装

 if文の実装から,さらに1時間ほど作業を進めて,while文を実装することもできた.ifのコピーかと思ったけど,想像以上にあちこちにコードを書き加える必要があった.あとは,conditionの中の算術演算ができるようになったら良いと思う.もう一息だ.

本読み

 家に帰って,読みかけだった本を2冊読むことができた.1つはクロスバイク図解マニュアル,2つ目は風の谷のナウシカ第7巻.これで.ナウシカについてはシリーズを通して全部読んだことになる.感想は後ほど整理したい.

生活面

 朝7時起床.だいたい5時間くらい睡眠.十分な覚醒度を得た.

 昼は生協のそぼろ三食丼を食べた.あっさりとしていて,非常に食べやすかった.

 夕方にt_h_氏とともにキャンパスを一周分散歩した.セミが活発に活動しているみたいなので,木に接近して様子を観察するなどした.これによって十分な運動量を稼ぐことができた.

7/2

進捗報告

shell modokiプログラミング

 6時間くらいかけてshell modokiをさらに拡張して,if文をparseできるようになった.conditionの解釈にかなり手間取ったのだが,時間をかけてデバッグして何とかなった.

生活面

12時半起床.おおよそ9時間睡眠.十分な覚醒度を得た.


7/1

 進捗報告 

CRSルール読解

 3時間ほどかけて,さらにルールを読み進めることができた.今日はresponse999,request949, response 980が読み終わった.901がもう少しで読み終わる.ファイル数で数えるとだいたい1/3以上が読めた形.ルールの進行にも段々と慣れてきたので,明日はもっと早くルールが読めると思う.

進捗報告書作成

 だいたい1時間ほどで,進捗報告書を作成することができた.ブログ的なフォーマットについても段々と書き慣れてきて,下書きさえきちんと書けば,ものの30分くらいで文章を空らしく起こすことができる.

資格説明会聴講

 クラスメートが資格取得の体験について説明しているのを聞くことができた.もう3回もやっているということで,かなり話慣れた感じではあった.モチベーションとか,そのあたりに焦点を置いて話をしていたのが良かったと思う.

旅行話

 ゼミの後に,研究室にいたたくさんの人と,旅行話でかなり盛り上がった.あちこちに行った話とか,各地のスポットの話とか,資格取得の話とか,バイトでの面白話とか,そういうのを色々聞けて非常に楽しかった.

ShellModoki実装進め

 ShellModokiの実装をさらに進めて,今日はconditionを扱うためのコードをtokenizerに追加して,これによって,conditionと,その中で使う算術演算の演算子$(())をトーカない図できるようになった.また,conditionを持っておくための構造体を追加して,これにデータを読み込むためのparserの関数も追加した.まだテストしていないので,早急にifを追加してテストしたい.

生活面

朝9時半起床.だいたい6時間睡眠.十分な覚醒度を得た.

昼は生協のもやし唐揚げ丼.あっさりと食べられたには食べられたのだが,あまり美味しくはなかった.

夕方に散歩に出掛けて図書館横の塔を制覇することができた.これでキャンパス内の建物はほぼ全て網羅できたと思う.十分な運動量を得た.

夜は米,鮭,春雨スープの3点セットでバランスよく食べることができた.