概要 「五十音順の名簿であ行の名字多すぎない?」という疑問は一般的なもののようであり、実際 Twitter で「あ行 名字 多い」で調べると同様の感想が大量にヒットする。 Mar 27, 2020 この大学では人数を均等にするためにあ行を「あ・い」「う・え・お」に分割しているようである。確かに私も「い」から始まる姓の持主ではあるのだが、出席番号順では 40 人クラスで 8 番目な...
特定の YouTube チャンネル内の動画をキーワード検索できるサービスを作った
最近になって定期更新される YouTube チャンネルを観る習慣がついた。特定の発言がどの動画で出てきたかを探すために、キーワード検索を行うサービスを作成した。使用したコードは こちら、完成したものは こちら。 概要 データの取得は YouTube API v3 を用いて行った。一つの動画について、データをまとめたファイルとサムネイル画像をローカルへ保存するようにした。 サイト...
自宅ネットワークを Grafana でモニタリング (3)
前稿までで実装は大体終わったので、解析結果でいろいろ遊んでみることにする。もともとはTwitter、YouTube、Amazon Prime Video のトラフィックを監視したいという動機であったので、まずはそれが達成できているか検証してみよう。 監視対象サービスのトラフィックを眺める Twitter 寝る前 (AM 1 時) に寝床で TL を眺め、AM 6 時に起床した瞬間に...
自宅ネットワークを Grafana でモニタリング (2)
概要 前回のネットワーク構築を経て、自宅ネットワークすべての機器におけるトラフィックがRaspberry Pi へ流入するように設定することができた。本記事では Raspberry Pi にてパケットキャプチャを行い、Grafana での可視化を行う。最終的に、どの時間帯にどのウェブサービスへ接続していたかを知るのが目標である。 全体の構成は以下の通り。 tcpdump を用いて...
自宅ネットワークを Grafana でモニタリング (1)
動機 いわゆるコロナ禍が始まってはや 2 年、必然的に自宅にいる時間が長くなったものの、その時間を最大限勉強など活用できているかと言われると非常に怪しい。業務後には YouTube をだらだら自動再生しながら作業をし、何か一区切り発生するたびに気付けば Tweetdeck をぼーっと眺め、休日には Amazon Prime Video にあるアニメを一気見してしまう。こんな生産性のない毎日...
コンピュータシステムの理論と実装 (11)
前章で構文解析まで終了しているので、今回はシンボルテーブルの管理とコード生成の部分を完成させていく。 11 章 コンパイラ#2: コード生成 シンボルテーブルの実装 まずは変数の管理から。本文に記載されている通り、 サブルーチンスコープ argument: サブルーチンの入力を指定する仮引数 (パラメータ変数) ...
コンピュータシステムの理論と実装 (10)
前章までで中間コードをアセンブリに変換する部分は完成したので、本章からは後半部分である Jack 言語から中間コードへのコンパイラを書いていく。 10 章 コンパイラ#1: 構文解析 tokenizer を書く コードを token ごとに区切り、xml として出力するコードを書けばよい。こんなん半角スペースで分割してそれぞれの要素が何であるかを判定していけばいいだけやんとか思っていたが、...
コンピュータシステムの理論と実装 (9)
9 章: 高水準言語 高水準言語 Jack から VM 言語への変換を行うにあたって、ここで Jack 言語 (Java の簡易版みたいなもの) の仕様を一通りみておく。 変数の種類とスコープ 変数には以下の 3 つのほか、サブルーチン宣言のときのパラメータリストなどがある。 スタティック変数: あるクラスのすべてのオブジェクトで共有される変数。static で宣言。 フィール...
コンピュータシステムの理論と実装 (8)
前章で作成した VM translator に追加して、本章ではプログラム制御 (サブルーチンの呼び出しやメモリ割り当てなど) を実装していく。 8 章 バーチャルマシン #2: プログラム制御 プログラムフローコマンド まず面倒なのが if go-to コマンドのコンパイルである。これはスタックトップの値を pop して (これは前章までの内容でいける) 0 でなければ (TRUE であ...
コンピュータシステムの理論と実装 (7)
前章でアセンブリ言語からバイナリへの変換ができるようになったため、次は一段階上がってコンパイラを書いていく。本書では Jack という簡易版 Java みたいな高水準言語の処理系を実装していくことになるのだが、これはまず中間コード (VM コード) を経てアセンブリ言語に変換される形式を採っている。7 章および 8 章では、VM コードをアセンブリ言語に変換する VM translator ...