1年に1度、その1年の仕事や個人的な出来事を「あれからn年経った」というタイトルで記事にしている。2023年は昨年に引き続き実りの多い年だった。ただ個人的な事では、それ以上に悲しい事もあった1。今年は10年の節目だから10年間の総括もしたいが、それはまた別の記事で行う事として、ここでは2023年の総括をする。
過去分
ソフトウェアの開発
僕は主にソフトウェアの開発を生業としている。今年もこの仕事にしっかり取り組んだ。ただ様々な制約があるため、あまり表に出す事はできない。貢献できた所と、至らなかった所の両方がある。また一緒に働いている人達や、関係者の皆様に支えられてやってこれた。しっかり振り返って、今後の取り組みに生かしていきたい。あと、もっとコミュニケーションを増やしていきたい。
書籍
ここ数年、書籍のお仕事をしている。今年も幾つかの書籍に関わらせて頂いた。このようなお仕事ができるのも、まず読者の皆様があってこそだ。去年も同じような事を書いた記憶があるけれど、大事な事だから今年も書く。ご購入くださった方々をはじめ、あらゆる形での関係者の皆様の支えがあって形に出来た事だ。
本当にありがとうございました。
感謝の言葉を書き出すと、その言葉だらけになるから、感謝の気持ちについては、ここに書くに留める。それでは成果を書いていく。
「Pythonではじめるオープンエンドな進化的アルゴリズム」の執筆(共著)
「オープンエンド」をテーマに機械学習の手法を解説する「Pythonではじめるオープンエンドな進化的アルゴリズム」を共同で執筆した。
僕は著者の一人という形で名前を載せて頂いた。実際には、岡先生と斎藤さん(メインの著者のお二人)が骨組や大部分を執筆及び実装されていたものだ。僕は途中から執筆やその他の作業に参加した。まえがき、2章の一部、各章のコード説明の一部の加筆や修正、Evolution Gym自体の修正、サポートサイト、その他の雑務を担当した。その貢献を認めて頂き、岡先生と斎藤さんのご厚意で名前を載せて頂く事になった。
メインの著者のお二人には、本当にたくさんアドバイスを頂き、作業を進める事ができた。理解できていない(もしくは理解の浅い)僕の質問に対し、お二人は根気良く向き合ってくれた。MITの研究者の方を紹介して頂いたり、その繋りでEvolution Gymのコミット権限も頂き作業を進める事ができた。また編集者の方や、作図を手伝ってくれた方、いろんな人が僕の作業を見て補助線を引いてくれたり、サポートしてくれた。
僕にできる事は少なかったけれど、それでも全力を出したと言える。2023年に一番頑張ったのは間違いなくこれだ。
「SQLではじめるデータ分析」の監訳(共同)
「SQLクックブック」のサポートページを更新した
SQLクックブックは2年前ぐらいに取り組んだ作業だが、読者からの問い合わせがあり、それについての調査とerattaの記述を行った3。宿題として暫く放置してしまったが、きちんと対応できて良かった。
自由ソフトウェアやOSSの活動
僕は自由ソフトウェアやOSSの恩恵を享受してきた。こういう文化が好きだし、そういった文化に対し多少の貢献ができれば良いなと考えている。そして今年も少しだけ貢献できた。
Evolution Gymに色々と貢献した
本の執筆の関係もあり Evolution Gym
というソフトウェアに対して取り組んだ。
リリース作業
Evolution Gym
に修正を加える前に、論文のバージョンを残しておきたいという話が挙がり、リリース作業を担当した。
https://github.com/EvolutionGym/evogym/releases/tag/1.0.0
それに合わせてGithub ActionsでCIも整備した。
プルリクエストをいくつか送った
僕が書籍の作業に参加し始めた頃、 Evolution Gym
は macOS
へのインストールに失敗する状態だった。これにはいくつか理由があったが、当初は全く分からず途方に暮れていた。
暫く問題を放置した後、本腰を入れて調査する事にした。エラーの出力をよく読み、同じ問題が発生する小さなプログラムを書いて再現させ、その解決方法を探るという作業をした。言葉にすると、それほどの作業に思えないかもしれないけれど、実際にはかなり沢山の時間を使った。狙い通り上手くいったのかどうかさえぱっと見では分かない事や、上手くいったと思って作業を進めると前提の所で間違えていたり、など上手くいかない事も多かった。かなり粘り強く取り組んだ。
その甲斐あって、いくつかの問題の原因は分かり、それをプルリクエストにする事ができた。また Evolution Gym
の開発者の方と進め方を相談しながら、結果として3つのプルリクエストをマージする事ができた。良い経験になったし、少しだけ自信が付いた。
Popplerに注釈の返答機能を追加する
書籍の監訳をする時、PDFを扱って作業を行う。PDFはEmacsでも扱えるのだが、その操作性はPDF専用のツールには及ばない。僕にとって生産性を向上するためには、いかにデータやファイルをEmacsで取り扱うかという事になる。そのため、EmacsがどのようにPDFを扱っているかを調べる事にした。PDFを使用するのであれば pdf-tools
というライブラリを使用すると様々な機能が使えるようになる。このライブラリは内部で epdfinfo
というプログラムをCで実装し内部で使用している。この epdfinfo
で使用しているPDFライブラリが Poppler
だ。これをフォークし手を入れた。
https://github.com/TakesxiSximada/poppler-symdom-custom/commit/291337c0b76fdc0c7e2493b8496065165de4e046
この長い旅の記録は以下に著した。
書いたEmacs Lisp
普段、Emacsを使っていると日常的にEmacs Lispを書く事になる。それらをざっとまとめる。これは、どこかへの貢献というよりも個人的な活動なのだけれど、それでもGPLで公開はしているので、(文化への貢献という意味で)「自由ソフトウェアやOSSの活動」に含める事にした。
その他の活動
ソフトウェア開発と書籍以外にも様々な活動をした。
オンラインの配信イベントを主催した
「Pythonではじめるオープンエンドな進化的アルゴリズム」の販促活動の一環として、ゲストを呼んでオンラインのイベントをやろうという話になった。ただ、そういった経験が無かったため、プレイベントとしてオンラインのハンズオンをやる事にした。
ハンズオンの内容は、エージェントがクッキーを探す宝探しゲームを採用した4。これは、自分の勉強用に書いていたコンテンツだ。後に、書籍の付録として掲載させて頂ける事になった。
いざイベントをやろうとすると、予想以上に多くの作業をしないといけなくて大変だった。こういったイベントや人前で話す事には少しだけ苦手意識があったし、相変らず進行やスピーチはヘタクソだったけれど、それでもやってよかった。良い経験になった。
本当は後続の対談イベントにも参加する予定だったのだけれど、僕の精神的な問題で活動きない状態になってしまい、そちらは参加できなかった。connpassのグループのリンクも貼っておく。
ゲームの開発や運用を楽しんだ
暫く前から仲間内でゲームの運用をしている。ここでは、それに関する振り返りをする。
思い出作りをした
ゲームを運営している理由の一つは思い出作りだ。企画を考えて協力しながら、何かを作ったり、探索したりした。一つ一つの出来事は小さくて、忘れてしまうかもしれないけれど、あの時あんな事をしていたという事実は忘れないだろう。また、それらの記録としてライブ配信を約45回、動画を2本作成した。閲覧数を指標として考えると惨憺たるものだったが、実施回数を指標として考えると上出来な結果だと思う。これらも含め良い思い出作りとなった。
拡張の開発
ゲーム自身に手を入れる事はあまりできなかったけれど、拡張の開発はいくつか行った。誕生日にはダイヤモンドを贈るようにしたり、ボール実装にチャレンジしたりした。
自作のEmacs Lispの管理方法を見直した
自作のEmacs Lispの管理方法は人によって異なるだろう。僕自身も様々な方法を試してきた。今は小さいLispに関しては、このサイトに直接Emacs Lispを置いている。 個人的な Emacs Wiki
のようなものだ。自分用はこれでいい。
個人的な事
その他の個人的な事も色々とあった。自分の中で整理できていない事もあるけど、書ける範囲で書く。
これまでの人生で一番稼いだ
本当に仕事を頑張った。金額は流石に伏せるが、その結果過去最高に稼ぐ事が出来た。この事実を褒めてくれたのは税理士さんぐらいだったけれど、過去仕事が無くて困ったり、ワーキングプアだった自分がここまで出来たという事が本当に嬉しかった。これらは僕の至らない部分を、同僚や仕事上の関係者がフォローしてくれたり、目を瞑ってくれたりしたから何とかできた事だという事を忘れないようにしよう。
実家に1ヶ月ほど帰った
11月初旬に心の問題で、自分の力で生活できるような状態ではなくなってしまった。ただ仕事を止める訳にはいかない。滅多に話さない遠方の実家に電話をし、その電話の1時間後には新幹線に乗っていた。その後1ヶ月程、実家の両親に生活を支えてもらいながら仕事をした。両親と直接顔を合わせるのは5年ぶりぐらいだった。
実家に暫く帰った事で、ここ数年苦しんでいた発作は気が付くと起きなくなっていた。誰かと話をするという事がとても大切だという事が分かった。どうやら話(発話)をしないという状態は、とんでもなく不健康な状態らしい。
そのまま地元に引き篭る事も考えたが、僕はまだ頑張りたいと思ったから、12月初旬には実家を出て、元いた場所に戻った。だからまた力を尽くそうと思う。
たくさん学んだ
技術的な事、考え方、ものごとへの取り組み方、自分自身に何ができて、何がどれほど出来ていないか、など様々な事を学んだ。学んだ事はブログ等で文章にしようと考えていて、それはある程度できた。品質はそんなに良いものはないし、中途半端な物も多いけれど、数だけで言えば140記事ある。自分の考えた事を文にするという目的はある程度達成できたと思う。これからも自分自身を見直しながら、良い姿勢で取り組み続けたい。
進化的アルゴリズムの分野で学んだ事
- CMakeとGLEWについて考える
- Gymnasiumを使う
- Evolution Gymの1.0.0のリリース作業を担当した
- GLFWを使う
- Evolution GymのCI対応としてGithub Actionsの導入を担当した
- CMake 26系のリリースアナウンスを収集する
- 人工ニューラルネットワークについておさらいする
- 遺伝的アルゴリズムでナップザック問題を解いてみる
- クッキーを探す
- CPPNを学ぶ
- Evolution Gymステップバイステップ
- k近傍アルゴリズムを書いてみる
- NEAT-Pythonのゲノムの距離を測る
- Evolution GymのCIが失敗している問題を直す
- Evolution Gymの依存パッケージをインストールする時にh5pyのインストールに失敗する
- networkxはGraphvizに依存していない
- DeadsnakeのPython3.8をUbuntuにインストールする
PDFで学んだ事
Emacsで学んだ事
- Emacsのdiredでストリーミング設定のGoogle Driveのファイルを開くとエラーするのはダウンロードを待てていないから
- Emacsの対話セラピー機能doctorをChatGPTに対応させる
- 有効なorgファイルを探索するコマンドを探す
- DockerコンテナにSSHを経由してTrampする
- 文章を読む時に他の文章で気が散るのを何とかするためにfocusを使う
- Emacs、Org-mode、Pandocそしてox-pandoc
- restclientのテンプレートエンジンの仕組みを調べる
- trans.elで言語モードが異なる時にプロセスを再起動する
- doctorを治療する
- タスクを管理する
- ditaaで描画した図のテキストをGraphvizで描画可能なDOT形式に変換する
- MacBookを閉じてもスリープさせない
- QRコードを読み取る
- org-ascii-export-as-asciiの見出しの出力レベルを変更する
- Org-modeについて考えたり思ったりする
- EmacsのX転送
- Emacsの文字とフォント
- Emacsで音声ファイルを再生する
- シングルファイルのEmacs Lispをダウンロードして読み込む
- Emacsで既存のバッファを避けて現時点で新しく使用可能と思われるバッファ名を返す
- Emacsで正規表現にマッチする数を数える
- EmacsのrestclientでWeb APIを呼び出す仕組みをパッと見で分かるようにする
- Emacs Lispで関数を一時的に上書きする
- Emacs Lispのシンボルを眺めつつfsetを調べる
- EmacsとCSVと表
- EmacsからMySQLに接続する
- eieio
- diredの詳細表示を切り替える
- EmacsでのDockerイメージのビルド方法を改善する
その他
- QEMUでGNU/Linuxを動かす
- 小さいPNGを手で作りながらPNGについて考える
- voicevoxの音声合成を試す
- HHKB雪の開封の儀を執り行う
- Github Actionsの環境変数の設定から.envを生成する
- Djangoのマイグレーションファイルを効率良くスカッシュする
- 10年前の自分と合流する
- Google Cloud Storageからファイルをダウンロードする様子を眺める
- Djangoの自動テストを速くする
- ThunderBirdのデータベースを手で操作する
- ECSのタスクロールとタスク実行ロールの違い
- プルリクエストをマージしてもらう事がOSSへの貢献ではないという事について考える
- 誕生日にダイヤモンドを
- ノイズキャンセラを試す
- SQLのSAVEPOINTの動きを確認する
- JSONでフォーマットされた行指向のログを行指向ではない形に変換して出力する
- Git及びGithubでのソフトウェアのリリースフローを整理する
- IntelMacでAppleシリコン用のDockerイメージをビルドする
- KiBを使う理由を図で考えてみる
- GCCのビルドを順を追って確認する
- 定年後の居場所
- Androidを学ぶ
- 文字コードの判定に使用されるchardetはどうやって文字コードを判定しているか
- SQSを使う
- Django3からDjango4へ移行する時にマイグレーションファイルが生成されるかを確認する
- チャットツールは使わない方が良いかもしれない
- macOSで現在の位置情報を取得する
- Djangoでgraphene_djangoを使ってGraphQL API
- タスクのゴールを管理する方法について考える
- asyncioでのthreading.localの扱いを確認する
- MySQLのバイナリログをPythonで読み出す
- GnuPGで鍵の更新をする
- GNOME入りのDockerコンテナからXQuartzに接続する
- SKKについて雑に考えた事を本当に雑に書く
- ソフトウェア開発について雑に考えた
- 再び文章を自動生成する
- Hasuraを使う
- オーバーレイを表示して3秒後に消す
- マークダウン等のマークアップ言語で書いた文章を読み上げ機能でより良く推敲する
- Gitリポジトリの年毎のコミット数を集計する
- LispでTCPエコーサーバーを書く
- scskkdを使う
- 手で作成したAWSのリソースをTerraformerを使ってTerrraformに落し込む
- コメントの記述方法について調べる
- コードハイライトについて考える
- QRコードで自分自身にアクセスさせる
- TLSのハンドシェイクを確認する
- 考えた事を文にする理由について考える
- Pythonのmysqlclientパッケージのインストール時にpkg-configでmysqlclientを探せず失敗する
- 記事の一覧をhugoで取得する
- ファイルを保存する時にブラウザを更新する
- ImageMagicで画像を結合しCloudinaryにアップロードする
- AWS Glueを使う
- xwidget-webkitでJavaScriptの実行結果を取得する
- Pythonのログ出力を自分で行指向のJSON形式にする
- OpenAI APIを使う
- Pythonのsslモジュールを使ってSSL/TLS通信する
- DynamoDBのテーブルのバックアップを今すぐ(1時間以内)に作成を開始する
- Schemeを組み込む
- velorenを使う
- Webの文書にルビを振る
- KeePassXCを使う
- 西暦と和暦と年度
- Elementを使う
- 開発方法の簡素化を考える
- OpenPGPの鍵の用途
- Flutterのチュートリアルを行う
- メール送信のテスト用ダミーサーバーにメールを送信する
- macOSで画面のキャプチャを動画で撮る
- Cassandraを使う
- Debian GNU/Linux上で最新のminetestをaptを用いてインストールする
- Cythonを使う
- Pythonでクラスのインスタンス化の際にargument after ** must be a mapping
- Vagrantでcursesと絵文字を使える日本語な環境を作る
- 配信イベントと日々の所感
- Debian GNU/LinuxのISOファイルのチェックサムとその署名を確認する
- TeXを最初から学ぶ
- 昇順と降順
- Github ActionsのYAMLをactionlintで静的解析する
- あれから10年経った
最後に
2022年に引き続き、2023年もとても実りの多い年だった。至らぬ所はたくさんあったとけれど、全力を出し切ったと言い切れる。やった事のない事にも、踏み込んでいった。特に今年は10年という節目でもあった。全力で走りきれた気がする。ただ、長年心の支えにしていたものを、失った事はさすがにこたえた。生活できなくなる程だった。これからやっていけるのかという不安は今でもあるけれど、しっかりと足元を見て、来年もできる限りの事をしていきたい。ほんのちょっとだけ世の中を良くできるように。
それでは良いお年を。
自分の中でまだ整理しきれていない。この記事でも直接的な事を書く事ができなかった。時間が経って整理ができたら、この酷い話について書こうと思う。
見本誌が届いた時の投稿。https://blog.symdon.info/posts/1674023873/