2022振り返り

普段、こういったブログはあまり書かないが、いい機会だし、書き残してあると、のちのち見返すのに便利かなと思い、今年やったことを書き出してみる。ほとんど趣味の話です。

電子工作

去年、コンピュータシステムの理論と実装という本をすこし読んでハードウェアというか電子回路方面に興味が湧き、年末にブレッドボードやら抵抗やらを買い揃えて、LED光らせて遊んだりしていた。

そこからLTSpiceを勉強したりして、シュミットトリガ回路と、それを使ったオンオフ回路を組めるようになった。

それから、いくつかの基本的な論理回路をディスクリートのMOSFETだけを使って実装するというのにチャレンジした。最終的にはNOT, NAND, NOR, XOR, XNOR、Dフリップフロップ、マルチプレクサ、半加算器・全加算器あたりまではMOSFETだけで実装できることを確認した。

あとは並行してCPUの創り方という書籍を読んで、簡易的なものではあるが、CPUの構成要素が細部に渡って理解できたのはよかった。

この本に登場するTD4というシンプルな4bit CPUをディスクリート部品だけで実装するというのをやってみたかったが、時間とお金がかかりすぎるというのもあって断念(中断)してしまった。それに必要なコンポーネントは一通り実装できたので、できそうというのがわかったところで満足してしまっている状態。

CPUの創りかた|Tech Book Zone Manatee
コンピュータ関連の電子書籍が揃う専門ストア『Tech Book Zone Manatee』(テックブックゾーン マナティ)

関連書籍で読んだものだと、コンピュータシステムの理論と実装という本もあるが、こちらはシミュレータを前提にしているので、少し趣が異なる。

コンピュータシステムの理論と実装
コンピュータを理解するための最善の方法はゼロからコンピュータを作ることです。コンピュータの構成要素は、ハードウェア、ソフトウェア、コンパイラ、OSに大別できます。本書では、これらコンピュータの構成要素をひとつずつ組み立てます。具体的には、NANDという電子素子からスタートし、論理ゲート、加算器、CPUを設計します。そして、オペレーティングシステム、コンパイラ、バーチャルマシンなどを実装しコンピュータを完成させて、最後にその上でアプリケーション(テトリスなど)を動作させます。実行環境はJava(Mac、Windows、Linuxで動作)。 ● 本書のサポートサイト● 本書で使用するツール「N…

Raspberry Pi Pico も買ったので来年はマイコンも触ってみたい。

競技プログラミング

4月ごろ、最近コード書いてないぞということに気づき、ずっと気になっていたAtCoderを始めてみた。

AtCoderにはまずはこれをやってみましょうという入門用の問題が用意されている。 「精選10問」と呼ばれていて、ABS (AtCoder Beginners Selection) という名前でAtCoder上にコンテストとして公開されており、いつでも自由に解いてコードを提出して実行結果を確認する、というプロセスを体験できるようになっている。

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 好きなアルゴリズムは最小カットやマッチングですが、会社ではなぜか「DP が好きな人」と呼ばれています。今回は、最近注目度が急上昇している AtCo...
AtCoder Beginners Selection - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

精選10問を解いた後、5月末くらいにかけて、いくつかのコンテストの初心者向け問題を解いた。

典型90問はその名の通り、競プロの典型的な問題からなる問題集で、様々な難易度の問題が含まれており、自分の実力に合わせて楽しめるような構成になっている。

競プロ典型 90 問 - AtCoder
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

他には、ABC (AtCoder Beginner Contest)と呼ばれる初心者〜中級者向けのカテゴリがあり、それもいくつか解いてみた(ちなみにAtCoderには、ABCよりも難しいARC (AtCoder Regular Contest)、AGC (AtCoder Grand Contest)、最適化問題などを扱うAHC (AtCoder Heuristic Contest)などの様々なカテゴリがある)。

提出の結果はAtCoder Problemsというサイトで確認できる。自分の提出結果は以下のような感じ。

AtCoder Problems
Manage your AtCoder problems.

週末にちょこちょこと進めたけど、散歩したりちょっとしたスキマ時間に解法を考えるのが思いのほか楽しかったので、来年また再開したいなと思う。

AtCoderちゃんと始めるにあたって、Python用のテンプレートとちょっとしたスクリプトを作って、コマンドをいくつか叩くだけでコンテスト用の環境を作れるようにしたので、興味のある方は覗いてみてください。

GitHub - takuyaa/atcoder: AtCoder solutions.
AtCoder solutions. Contribute to takuyaa/atcoder development by creating an account on GitHub.

自宅サーバー

去年まではただの暖房だったサーバを、ちゃんと構築しはじめた。

仮想化基盤としてProxmoxを物理マシンにインストールするところからスタートした。ProxmoxはKVMに管理画面や便利APIなどがついたもので、vCPUなどの制限なしにフリーで使えるので近年自宅サーバー界隈で流行している様子。

Proxmox - Powerful open-source server solutions
Proxmox develops the open-source virtualization platform Proxmox VE, the backup solution Proxmox Backup Server, and the Proxmox Mail Gateway, an open-source email security solution to protect your mail server.

KubernetesのディストリビューションとしてRancherが作っているRKE2を検証していて、いまのところ大きな障害もなく安定して動いている。

Introduction | RKE 2
RKE2, also known as RKE Government, is Rancher’s next-generation Kubernetes distribution.

各種VM(RKE2のノードを含む)はTerraformを通してProxmox上に構築した。ネットワーク面では、KubernetesのLoadBalancer typeの実装としてMetalLBを入れた。ルータとBGPピアを張ってBGPモードで動いている。MetalLBによってKubernetesの外から見えるIPが振られるので、それをリバースプロキシやルータから参照する。ストレージはRKE2と同じくRancherが作っているLonghornを採用。

最初は仲間内で遊ぶためのゲームサーバーを動かしてみたりしていて、そのうちドメインを取ったり、Cloudflare CDNの設定やらなんやらをして、最終的にKubernetes上で動いているWebサーバがインターネットから見えるところまでできた。

いまは以下のサーバが自宅Kubernetesクラスタで動いている。

ゲーム

Webサービス

その他

他にも、VMのバックアップのためにTrueNASをiSCSI targetとして動かしている。あとはPCルータとしてOpenWRTを検証中。たまにルータがおかしくなってインターネット接続が壊れてしまうことが何回かあったので、OpenWRTでWANを冗長化したいと考えている。

来年はリモート接続環境を整えたり、複数人でクラスタを運用できるようになると楽しいかなとか妄想している。いろいろ知見も溜まってきたので、Kubernetesのマニフェストを問題ない範囲で公開したり、ブログかなんかにまとめたいと思う。

パソコン

引き続き5年前に買った自作PCを使い続けている。CPUクーラーを静音のものに買い替えたくらい。CPUファンの音がほとんど聞こえないくらい静かにはなったが、近くにあるサーバーがうるさすぎて意味はなかった。

NF-A12x25 PWM
The NF-A12x25 is a highly optimised next-generation 120mm fan that integrates Noctua’s latest innovations in aerodynamic engineering in order to achieve an unprecedented level of quiet cooling performance. It takes state-of-the-art technologies such as the AAO (Advanced Acoustic Optimisation) frame…

PCの用途は主にゲームと、趣味のプログラミングとかサーバーの設定作業とか。ゲーム以外では基本的にWSL2の中のUbuntuで作業している。エディタはVSCodeを使っていて、WSLだから困ったということは起きていない。中でとくに難しいことはしていないので、通常のLinuxでの開発と同等の体験が得られている。

ゲーム

今年はMagic: The Gatheringがマイブームで、デジタル・アナログ問わずけっこう遊んだ。デジタルのほうは、数年前からMTG Arenaを構築メインでやっていたけど、今年はリミテッド、特にドラフトも遊ぶようになった(マジックは遊び方がめちゃくちゃいっぱい存在する!)。

Play the CCG Free on PC, iOS and Android | Magic: The Gathering Arena
Magic: The Gathering Arena puts the original CCG at your fingertips. Build a deck to play with friends or challenge the AI to master your strategy!

アナログ(紙)は、去年の秋ごろから、エキスパンションが出るたびにそれを1ボックス買って、4人で集まってリミテッドというフォーマットで遊ぶ、というのをやっている。ボックスには1パック15枚入りのブースターパックが36パック入っているので、ドラフト1回で12パック、残りの24パックでシールドを1回やる、というルーチンになっている。そのうち8人のドラフトもやってみたい。

なぜか紙のデッキ構築にも興味が出てきて、パイオニアチャレンジャーデッキという構築済みデッキをベースにデッキを組み始めた。少しずつカードを買い集めてデッキを組んでいくのはデジタルとは違った体験で、とても尊い。せっかくデッキを組んだので、来年は店舗で開催されている大会に参加してみたいと思っている。

あとは、統率者というフォーマットに誘われたので、手持ちのカードをベースにデッキを組んでみている。これはこれでデッキのセオリーが全然違うので楽しい。

登山

夏に大平山にハイキングに行ったのが今年唯一の登山活動。真夏だったのでめちゃくちゃ暑かったけど楽しかった。雄大な風景のアルプスもいいけど、低山の楽しさもまたある。

勝上山・鷲峰山・大平山・天園 / takuyaさんの鎌倉アルプス(大平山・天台山)の活動データ | YAMAP / ヤマップ
No.1登山アプリYAMAP。オフラインの山中でも現在地を確認できる。最新のルート状況をはじめ、全国各地の登山情報を網羅。YAMAPであなたの登山はもっと楽しく、安全に。

来年には槍ヶ岳に誘われているので、山にももっと行きたい。

1年くらい前に奮発してLOWAの登山靴を買ったのだけど、足に合ってないっぽくて毎回足が痛くなっているので、買い換えようかと思っている。山に行けてない理由の大きな理由のひとつになっているので、シュッと買ったらよさそう。

チェベダーレ EVO GT Ws・L220052(アルパイン) LOWAローバー公式サイト|イワタニ・プリムス株式会社
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年にしていきたいですね。ではでは。