Mukai Systems

2021年振り返り

折角ブログというものをやっているので、一年を振り返ってみる。

昨年は、おかげ様でお仕事をいただく事ができ、何不自由なく暮らすことができた。いつ仕事がなくなっても案件がとれるように自己研鑽しなければならないと思う日々である。

Paren

昨年は目立った変更はなかった。言語の中核の機能はだんだん枯れてきたと思う。

マニュアルシステムの構築

Unixライクなマニュアルシステムを構築した。

$ paren man | head
man(1)

# NAME
man - Paren reference manuals.

# SYNOPSIS

    man PAGE(SECTION)
    man [[SECTION] PAGE ...]

wahtisコマンドもある。

$ paren whatis -s3 lis
->list(3)            - make a list.
dolist(3), ...       - iterates over the elements of a collection.
list(3)              - create a list.
list?(3)             - determines whether argument is a list.

後はページを充実させていくだけなのだが、それが一番大変だったりする。

GitHub Actionsによる単体テストの自動化

各マニュアルページにはEXAMPLESという使用例が簡潔に示されるセクションがある。

$ paren man list
list(3)

# NAME
list - create a list.

# SYNOPSIS

    (list [OBJECT] ...)

# DESCRIPTION
The function `list` creates a list.

# RETURN VALUE
Returns a list containing the supplied `OBJECT`s.

# EXAMPLES

    ) (list)
    nil
    ) (list :a :b :c)
    (:a :b :c)

# SEE ALSO
- car(3)
- cdr(3)
- list(3)
- cons(7)

--
man3/list.md

このセクションは、プログラムの修正によらず正しくあるべきだから、GitHubにPUSHしたときに自動で検証するようにした。

) (list)
nil
) (list :a :b :c)
(:a :b :c)

例えば、上のマニュアルは単体テスト生成器によって以下のような式に変換され検証される。

(begin
    (assert (= (list) nil))
    (assert (= (list :a :b :c) (:a :b :c))))

検証に失敗した場合は、不具合が紛れ込んでいるか、APIの修正によるマニュアルの修正漏れとなる。

例年は、「技術書が大半」という事が少なくなかったが、昨年はいろいろな分野の本を読んだ。

プログラマ向けの読み物はあまり読まなかったが、読んだ本はほとんど面白かった。もし、あなたがプログラマであるなら以下の本は楽しんでいただけると思う。

以前読んだワインバーグの「ライトついてますか」も非常に面白かったが、「コンサルタントの秘密」と「コンサルタントの道具箱」も期待を裏切らなかった。

サイモン・シンははじめてだったが、「暗号解読」も「フェルマーの最終定理」も専門知識がなくとも読みやすく大変面白かった。

ローマ人の物語は以下の印象的な書き出しから始まる。

知力ではギリシア人に劣り、
体力ではケルト(ガリア)やゲルマンの人々に劣り、
技術力ではエトルリア人に劣り、
経済力ではカルタゴ人に劣るのが、
自分たちローマ人であると、少なくない資料が示すように、ローマ人自らが認めていた。
それなのに、なぜローマ人だけが、あれほどの大を成すことができたのか。
一大文明圏を築きあげ、それを長期にわたって維持することができたのか。

ローマ人の物語 (1) ― ローマは一日にして成らず(上)
-- 塩野七生

本を読んでいくうちに、「ローマは成るべくして大国になったのだろうな。」と納得できる。今年は残りの巻も少しづつ読めればと思う。

ダン・アリエリーの「予想通りに不合理」が非常に面白かったので、行動経済学の本を数冊読んだ。行動経済学が示す「市場規範」と「社会規範」の説明は特に興味深かった。他にも「予想どおり」な「不合理な行動」が多数紹介されているので是非一読されたい。

登山

友人に誘われて登山に行くようになった。

私は「なぜ山に登るのか」と聞かれたら、こう答えるだろう。

「友達に誘われるから」

誘っている友達もこんな調子だから、なんで山に登っているかわからない。

「展望台寄っていく?」

「Google Earthでみれるからいいや。」

ゲーム

昨年は例年に比べて様々なゲームをした。少なくないインディゲームから「アイデアがあれば、一人でも面白いゲームが作れそう」という希望をもらった。

印象的だったゲームを簡単に紹介したい。

大傑作カードゲーム。「ローグライクデッキ構築」というジャンルを作った草分け的存在。何がゲームを面白いと思わせるのか、考えさせられるゲーム。

「Slay the Spire」に「物語」を追加したようなゲーム。

昨年一番楽しかったパズルゲーム。難易度は高め。

SFコロニーシミュレーション。Steam内で印象的なレビューがある。

この時間泥棒が存在しなければ、人類の文明はもう少し発展していたかも知れない。

ローマ人の物語を読んで触発されて買った。ローマは直接関係ないが、「アテナイ」と「スパルタ」が繰り広げる「ペロポネソス戦争」が主題となっている。

無理やり感がぬぐえないが、有名人も多数登場する。ちなみに、何人かはローマ人の物語でも言及がある。

ちなみに、ゲームそのものは「戦闘が単調になりがち」、「レベルの差があると暗殺ができない」などの理由で個人的にはまったく面白くなかった。古代ギリシアに興味がなければ勧めしない。

古代エジプトに興味があるなら「Assassin's Creed Origins」もお勧めである。

ギザの大ピラミッドを見たときはあまりの精巧さに感動した。「Assassin's Creed Odyssey」と同じ理由で、ゲーム自体はあまりお勧めしない。

いずれのゲームも、「ディスカバリーツアー」という機能が収録されている。これは、ゲーム内のマップを使用して当時の人々の暮らしや政治などがどういったものなのか体験できる機能である。