2022振り返り
普段、こういったブログはあまり書かないが、いい機会だし、書き残してあると、のちのち見返すのに便利かなと思い、今年やったことを書き出してみる。ほとんど趣味の話です。
電子工作
去年、コンピュータシステムの理論と実装という本をすこし読んでハードウェアというか電子回路方面に興味が湧き、年末にブレッドボードやら抵抗やらを買い揃えて、LED光らせて遊んだりしていた。
そこからLTSpiceを勉強したりして、シュミットトリガ回路と、それを使ったオンオフ回路を組めるようになった。
それから、いくつかの基本的な論理回路をディスクリートのMOSFETだけを使って実装するというのにチャレンジした。最終的にはNOT, NAND, NOR, XOR, XNOR、Dフリップフロップ、マルチプレクサ、半加算器・全加算器あたりまではMOSFETだけで実装できることを確認した。
あとは並行してCPUの創り方という書籍を読んで、簡易的なものではあるが、CPUの構成要素が細部に渡って理解できたのはよかった。
この本に登場するTD4というシンプルな4bit CPUをディスクリート部品だけで実装するというのをやってみたかったが、時間とお金がかかりすぎるというのもあって断念(中断)してしまった。それに必要なコンポーネントは一通り実装できたので、できそうというのがわかったところで満足してしまっている状態。
関連書籍で読んだものだと、コンピュータシステムの理論と実装という本もあるが、こちらはシミュレータを前提にしているので、少し趣が異なる。
Raspberry Pi Pico も買ったので来年はマイコンも触ってみたい。
競技プログラミング
4月ごろ、最近コード書いてないぞということに気づき、ずっと気になっていたAtCoderを始めてみた。
AtCoderにはまずはこれをやってみましょうという入門用の問題が用意されている。 「精選10問」と呼ばれていて、ABS (AtCoder Beginners Selection) という名前でAtCoder上にコンテストとして公開されており、いつでも自由に解いてコードを提出して実行結果を確認する、というプロセスを体験できるようになっている。
精選10問を解いた後、5月末くらいにかけて、いくつかのコンテストの初心者向け問題を解いた。
典型90問はその名の通り、競プロの典型的な問題からなる問題集で、様々な難易度の問題が含まれており、自分の実力に合わせて楽しめるような構成になっている。
他には、ABC (AtCoder Beginner Contest)と呼ばれる初心者〜中級者向けのカテゴリがあり、それもいくつか解いてみた(ちなみにAtCoderには、ABCよりも難しいARC (AtCoder Regular Contest)、AGC (AtCoder Grand Contest)、最適化問題などを扱うAHC (AtCoder Heuristic Contest)などの様々なカテゴリがある)。
提出の結果はAtCoder Problemsというサイトで確認できる。自分の提出結果は以下のような感じ。
週末にちょこちょこと進めたけど、散歩したりちょっとしたスキマ時間に解法を考えるのが思いのほか楽しかったので、来年また再開したいなと思う。
AtCoderちゃんと始めるにあたって、Python用のテンプレートとちょっとしたスクリプトを作って、コマンドをいくつか叩くだけでコンテスト用の環境を作れるようにしたので、興味のある方は覗いてみてください。
自宅サーバー
去年まではただの暖房だったサーバを、ちゃんと構築しはじめた。
仮想化基盤としてProxmoxを物理マシンにインストールするところからスタートした。ProxmoxはKVMに管理画面や便利APIなどがついたもので、vCPUなどの制限なしにフリーで使えるので近年自宅サーバー界隈で流行している様子。
KubernetesのディストリビューションとしてRancherが作っているRKE2を検証していて、いまのところ大きな障害もなく安定して動いている。
各種VM(RKE2のノードを含む)はTerraformを通してProxmox上に構築した。ネットワーク面では、KubernetesのLoadBalancer typeの実装としてMetalLBを入れた。ルータとBGPピアを張ってBGPモードで動いている。MetalLBによってKubernetesの外から見えるIPが振られるので、それをリバースプロキシやルータから参照する。ストレージはRKE2と同じくRancherが作っているLonghornを採用。
最初は仲間内で遊ぶためのゲームサーバーを動かしてみたりしていて、そのうちドメインを取ったり、Cloudflare CDNの設定やらなんやらをして、最終的にKubernetes上で動いているWebサーバがインターネットから見えるところまでできた。
いまは以下のサーバが自宅Kubernetesクラスタで動いている。
ゲーム
Webサービス
- Ghost(ブログエンジン。このブログ https://takuya-a.net/blog/ はGhostで動いている)
- Littlelink(プロフィールページ: https://takuya-a.net/)
- Mastodon(分散型SNS: https://mstdn.takuya-a.net/about)
その他
- Inadyn (Dynamic DNS)
- Traefik (リバースプロキシ)
- Prometheus & Grafana(サーバのモニタリング)
他にも、VMのバックアップのためにTrueNASをiSCSI targetとして動かしている。あとはPCルータとしてOpenWRTを検証中。たまにルータがおかしくなってインターネット接続が壊れてしまうことが何回かあったので、OpenWRTでWANを冗長化したいと考えている。
来年はリモート接続環境を整えたり、複数人でクラスタを運用できるようになると楽しいかなとか妄想している。いろいろ知見も溜まってきたので、Kubernetesのマニフェストを問題ない範囲で公開したり、ブログかなんかにまとめたいと思う。
パソコン
引き続き5年前に買った自作PCを使い続けている。CPUクーラーを静音のものに買い替えたくらい。CPUファンの音がほとんど聞こえないくらい静かにはなったが、近くにあるサーバーがうるさすぎて意味はなかった。
PCの用途は主にゲームと、趣味のプログラミングとかサーバーの設定作業とか。ゲーム以外では基本的にWSL2の中のUbuntuで作業している。エディタはVSCodeを使っていて、WSLだから困ったということは起きていない。中でとくに難しいことはしていないので、通常のLinuxでの開発と同等の体験が得られている。
ゲーム
今年はMagic: The Gatheringがマイブームで、デジタル・アナログ問わずけっこう遊んだ。デジタルのほうは、数年前からMTG Arenaを構築メインでやっていたけど、今年はリミテッド、特にドラフトも遊ぶようになった(マジックは遊び方がめちゃくちゃいっぱい存在する!)。
アナログ(紙)は、去年の秋ごろから、エキスパンションが出るたびにそれを1ボックス買って、4人で集まってリミテッドというフォーマットで遊ぶ、というのをやっている。ボックスには1パック15枚入りのブースターパックが36パック入っているので、ドラフト1回で12パック、残りの24パックでシールドを1回やる、というルーチンになっている。そのうち8人のドラフトもやってみたい。
なぜか紙のデッキ構築にも興味が出てきて、パイオニアチャレンジャーデッキという構築済みデッキをベースにデッキを組み始めた。少しずつカードを買い集めてデッキを組んでいくのはデジタルとは違った体験で、とても尊い。せっかくデッキを組んだので、来年は店舗で開催されている大会に参加してみたいと思っている。
あとは、統率者というフォーマットに誘われたので、手持ちのカードをベースにデッキを組んでみている。これはこれでデッキのセオリーが全然違うので楽しい。
登山
夏に大平山にハイキングに行ったのが今年唯一の登山活動。真夏だったのでめちゃくちゃ暑かったけど楽しかった。雄大な風景のアルプスもいいけど、低山の楽しさもまたある。
来年には槍ヶ岳に誘われているので、山にももっと行きたい。
1年くらい前に奮発してLOWAの登山靴を買ったのだけど、足に合ってないっぽくて毎回足が痛くなっているので、買い換えようかと思っている。山に行けてない理由の大きな理由のひとつになっているので、シュッと買ったらよさそう。
コーヒー
去年の春にセミコマーシャルのエスプレッソマシンを買ったけど、2022年もほぼ毎日使った。タンパーを買い替えたり、いくつか周辺機器をアップデートした。
ラテアートはそんなに上達してなくて、まだハートが描ける程度。しかも、たまに失敗する。来年はリーフとか描けるようになりたい。
論文読み
秋に、1年ぶりにIR Readingで論文紹介した。ANN(近似近傍探索)のインデックスを、対照学習の枠組みで最適化するといったような内容で、なかなか面白かった。
インデックスといえば、2021 年の夏はLuceneインデックスのバイナリを解析していた(完成してなくてまだ下書き状態・・・)。来年、Lucene 9ベースでまたちゃんと解析してブログも書き上げたい。
https://stop-the-world.hatenablog.com/draft/entry/NXbtOo1V1X261E94FKRPr5eNXmM
今年は、転置インデックスの圧縮技法に関する論文をサーベイしてメモを書いた。
代表的なアルゴリズムについては、そのうちRustあたりで再実装してベンチマークを取ってみたい。
仕事
年明けの1月31日付で現職を退職することになった。盛大な送別会も開いていただいて、立派な色紙まで頂いて感激してしまった。本当にありがとうございました。いろんな方に感謝の言葉をいただけたので、チームに多少は貢献できたのかなと嬉しい気持ちになりました。
来年2月1日からはLegalOn Technologiesという会社で働きます。ひきつづき検索・推薦に関わることになるので、界隈の皆さんはまたよろしくお願いします。
おわりに
来年も楽しい1年にしていきたいですね。ではでは。