ユユユユユ

webエンジニアです

放送大学に出願した

 どうも生活にメリハリが感じられない。運動と食事のルーティンは守れているので、客観的には健康的なほうにおもうのだが、主観的にはくすぶりを感じる。

 いったいなにが僕を満ち足りない気持ちにさせるのか? それがわからない。政治と社会のムードに抑圧的な影響を受けているのかもわからないが、世の中をののしってもどうにもならないという疎外感のほうが大きい。結局のところ、個人的な問題として処理しなければならない。

 だから、というのは論理の飛躍になるが、放送大学に出願した。新しいことを始めるぞ! という晴れやかな気分にいくらかでもなることができればとおもっている。

 もともと大型連休のころに 放送大学に入学してみようという記事を書いていた。思いたったタイミングがちょうど新学期であったので、妙なレイテンシが発生してしまった。とはいえ、やってみたいという気持ちは減衰しなかった。閉塞感やくすぶりを抱えているなかで、こうして前向きに「やりたい!」とおもえる対象が持てるのは幸せなことである。

 1年間有効な学生ライセンスに出願した。そして申し込んだ講義はこの5つ。

  • 1160028:初歩からの数学(’18)
  • 1559257:西洋音楽史(’21)
  • 1760041:入門微分積分(’16)
  • 1760106:初歩からの化学(’18)
  • 1760114:入門線型代数(’19)

 ここで欲張って、「仕事に活かせそうなものを学ぼう」と公私混同をするとあとがつらくなるような気がした。徹底的に仕事とは関係のない題目を選択した。

 数学科目は、次学期に応用的な科目を履修するための準備である。いきなり上位の科目に挑んでもよかったのだが、その前に入門科目を履修済みであることが望ましいとシラバスに丁寧な助言がされていたので、厳粛に従うことにした。

「初歩からの化学」は好奇心から。物理とか生物とか、他にも「初歩からの」シリーズがあってずいぶん悩ませられたが、欲張りすぎて散漫になることを嫌った。化学出身の知人を持たないので、未知の学問領域という感覚が強くある。高校までの知識しか持たないけれど、そもそも新大学生というのはみなそういうものだろうから、大丈夫だろう。

 西洋音楽史という文系科目も選んでいる。講義題目からして、おおかたバッハ以降の歴史を扱うのだろうと見当をつけてシラバスをみた。それより遥かに遡って、古代ギリシア音楽理論から扱うものらしいことに衝撃を感じて、おもわず選択した。いったいどんな話を聞けるのか見当がつかない。なにが出てくるかわからない楽しみという意味では随一のメンバーである。

 こうして書くにつけても、始まるのが楽しみで仕方がない。なにかを目指して勉強をするのは素敵なことであるが、勉強そのものを目的に意味もなく勉強することこそ究極の贅沢である。それをやろうとおもえる心の余裕をいま持てていることは幸福であるが、これができなくなったそのときには、人生の優先順位がおかしくなっていないか自分に問い直したまえ。この警句を3ヶ月後、新学期を迎えた自分自身に向けたい。

コンテスト参加をしばらくおやすみしようとおもう

 4月にレーティングが緑色になった。その後の数回のコンテストでも悪くはない成績を出すことができた。いちどや二度は茶色に陥落するものとおもったが、ひとまず洗礼は通り抜けたというところである。

 もともと過度な自尊心や上昇志向は持たないように注意深くモチベーションをコントロールしていた。少なくとも参加することだけは続けたい、とごく低い目標を掲げていた。経験上、これくらいであれば継続できていたはずなのだが、これすらどうにも難しいことがわかってきた。

 やりたいというぼんやりした気持ちはあるのだが、やるぞ! という情熱がどこかにいってしまった。天候の変化とか、身内の事情とか、複合的な要因で集中力が高まらない。そんな日々にあって、緊張感なり競争心といった気概をもって打ち込むことができなくなってしまった。

 もとより遊びのつもりではあっても、やるなら本気でやりたいという気持ちもあったらしい。予習復習を欠いてだらだらと参加することに意味はあるだろうか? という考えがどうしても拭えない。真面目すぎるような気がするのだが、本能に根ざしたものなのでどうしようもない。

 今週末もまた参加を見送って、不参加を選択した自分自身にガッカリしてしまっている。とはいえ、こんなことにガッカリしてもどうしようもないことはわかっている。できないことをできなかったと悔いることが健康によいとは思わない。

 メリハリのためにもいったん休むことを決意した。もういちど熱意が燃え上がるまでは、キッパリとおやすみにする。そうすれば、週末ごとに思い悩むこともないし、気持ちを落ち込ませる要因をひとつ自分の生活から追い出すことができる。

 いうまでもなく、これは僕自身の問題である。いずれまたやりたくなるときがくるだろうし、そんなときにいつでもまたやり直せるというのがアマチュアなりの喜びである。

6年ぶりにメガネを新調した

6年ぶりにメガネを新調した。

f:id:jnsato:20210704140135j:plain
縁を縛るようにゴールドがさしてあるのが気に入っている

もともと使っていたものはたしか JINS で買った。変哲のないウェリントンタイプのものだった。インターンをやっていたころ、卒業論文を書いていたころ、プログラマとして働きはじめたころ、ドイツにいったころ、ずっとかけていたことになる。安いわりにずっとかけていただけあって、昨年くらいからツルの塗装がはげおちはじめて、ちょっとだらしなくなりはじめてしまっていた。

f:id:jnsato:20210704140342j:plain
黒縁が剥がれて透明なフレームが露出している

これでもよくみない限りは気づかれない。というか、出かけるときにはコンタクトレンズをつけることが多いし、そもそも出かけることが禁止される風潮なので困りもしていなかった。

思いたって以来となると実に1年近くもなってようやく替えたことになる。コンタクトレンズが切れたので眼科に処方箋をとりにいくついでに、メガネの処方箋も切ってもらった。十分吟味してから決めるだろうかとおもっていたところ、映画をみにいったついでにみつけたメガネやさんでほとんど即決のようにして選んだ。

立川のルミネにはいっている TLIP というお店に世話になった。子供のころからメガネをつけているからといって、メガネに詳しいというわけではないことがよくわかった。イシイさんという店員さんが、豊富な知識で最高のアシストをしてくれた。なにも知らないこちらにその道のプロとしてよき選択肢をわかりやすい言葉で示してくれて、心底ありがたかった。

ctran/annotate_models に PR を送った

 これまで従事したいくつかのプロジェクトにおいて高い採用率(個人の感想)を観測している ctran/annotate_models にプルリクエストを送った。

get_loaded_model_by_path is supposed to be nil-safe by sato11 · Pull Request #883 · ctran/annotate_models

 たまたま開発中のバージョンで動かしてみて振る舞いの変更=バグに気づくことができたが、そうでなければパッチアップデートで破壊的変更がリリースされるところだった。まあ、まだマージされていないわけで、安心できたとは言えないのだが...。

 エンバグしたパッチとそのレビューをみていて、いちおうそこそこ名の通ったライブラリであっても、わりと杜撰なやり方で開発がおこなわれているのだなと驚いた。というか、ソースコード全体がなかなかにはちゃめちゃなことになっていて、わりとやばいなって感じだった。

 とはいえ、平均的な OSS のパッチの精度は恐ろしく低いというようなことを a_matsuda さんが述べていたことも去来して、「まあそんなものか」ともおもった。なにはともあれ、そこそこ名の知れたライブラリにパッチを送るというのが僕にとっては珍しいことなので、生活の記録として残しておこうとおもう。マージされるといいなあ。

算術右シフトを正しく丸めるためにバイアスを加算する

 マシンがどのように乗算・除算を最適化するについて。二の累乗による乗算は左シフト演算を用いて行うことができる。同じように、二の累乗による除算は右シフト演算を用いで行うことができる。符号なし数であれば論理右シフトを用いるし、二の補数(符号あり数)であれば算術右シフトを使う。

 非負整数に対する算術右シフトは、とりもなおさず論理右シフトを意味するので深く考える必要はない。例えば x = 12340 とおくと、下図のように、結果は切り下げられる。

k x>>k (binary) x>>k (decimal) x/2k
0 0011000000110100 12340 12340.0
1 0001100000011010 6170 6170.0
4 0000001100000011 771 771.25
8 0000000000110000 48 48.203125

 同じように、 x = -12340 とおいて、負数について算術右シフトを適用すると、こちらも同じく切り下げられる。

k x>>k (binary) x>>k (decimal) x/2k
0 1100111111001100 -12340 -12340.0
1 1110011111100110 -6170 -6170.0
4 1111110011111100 -772 -771.25
8 1111111111001111 -49 -48.203125

 しかしこれは求められる動作ではない。というのは、整数の除算は常に0に丸めたいからである。つまり、正数であれば切り下げ、負数であれば切り上げる。いずれも0の方向に丸める。

 無策に算術右シフトを実施すると、一様に切り下げが実施される。これは0方向に丸める要件を満たさないので、戦略が必要である。

 とはいえ、なんのことはない。算術右シフトの計算対象が負数のときは、除算に先立って 除数 - 1 をバイアスとしてあらかじめ加算すればよいだけの話である。ここでいうと (2^k) - 1 をあらかじめ加算してから、割る。整数一般について、除算の結果を切り上げるテクニックと変わらない。

k bias x + bias (x+bias)>>k (binary) (x+bias)>>k (decimal) x/2k
0 0 1100111111001100 1100111111001100 -12340 -12340.0
1 1 1100111111001101 1110011111100110 -6170 -6170.0
4 15 1100111111011011 1111110011111101 -771 -771.25
8 255 1101000011001011 1111111111010000 -48 -48.203125

gcc-9 を使うようにした

 昨晩の ABC-202 への参加中に、コンパイラが動かないという自体に直面した。先週のコンテストまでは普通に動いていたコンパイルタスクがこういうログを吐いて停止してしまう。

command not found: x86_64-apple-darwin19-gcc-10

 コンテスト中は AtCoder のコードテスターを代理の実行環境として使ってことなきをえたが、いったいなんだったのかを一晩明けて考えた。

 わかったのはこういうことだった。この記事で設定したやり方がうまくなかった。brew install gcc でインストールしたのが当時は gcc-10 だったものが、なんとなく brew upgrade したときにそうと気づかず gcc-11 になってしまっていた様子。

 要するに、特定バージョンへの依存に無頓着だったというだけのことであった。というかそもそも gcc-10 を使っていたことにも意味はなかった。 AtCoderコンパイラgcc-9.2.1 と書いてあるので(執筆時時点)、今後はこれを使うことにした。

 こうやって直してみた。まずは dotfiles で gcc-9 のインストールとエイリアスの設定をおこなう。それから atcoder の実行環境でもビルドタスクのコマンドを書き換える

 dotfiles で定義した alias g++='g++-9'.vscode/tasks.json のなかで使おうと思ったのだが、どうしてかうまく読み込まれずに xcode の clang が呼び出されてしまうので、タスク定義では相変わらず g++-9 と不格好にバージョンを指定してしまっている。まあ、インストール側でバージョン固定をしているわけだし、これくらいならいいかとズボラになっている。

Yet Another Scheme Tutorial をやった

 大型連休にやっていたことで、大型連休の総括に書かなかったことがひとつある。それは Lisp への挑戦である。

 Yet Another Scheme Tutorial というマテリアルを利用した。そしてきょう、それをひとまず一周走り終えた。

 どうしていまこれを学ぼうと思ったか? ハッカーたちが口を揃えて勧めるものだから、たしかに何かがあるに違いないと思ったのである。いうなれば直感である。なかでも大きく影響を与えられたエッセイをふたつあげると、それはこれらである。

 まずは Steve Yegge の「バベル案内」。お気に入りのパッセージを引用する。

Lispを学ぶのは簡単ではない。大きな飛躍がいるのだ。CみたいなプログラムをLispで書けるというのでは十分でない。そんなのは無意味だ。CとLispはスペクトルの反対の端に位置している。他方が上手く扱えない領域で大きな力を発揮するのだ。

 それから Paul Graham の「普通のやつらの上を行け」。同じように引用するがこちらは短く凝縮されたパンチラインだ。

Lispの力は、ライバルがそれを理解できないということによって増幅されるんだ。

 こんな熱いアジテーションをされておいて、「やらいでか!?」という熱狂を与えられずにいられようか?

 どちらのエントリにしても、 Lisp を学ぶのは容易ならざる道だというのは一致している。しかし、「みんながやっているから」という理由だけで、あの言語つぎはこのフレームワークそれから機械学習チュートリアル...と節操ない消費主義で踊らせてわれわれプログラマを消耗させようとする技術市場にヘキエキしていた僕にとって(このことは年初に今年の意気込みとして書いた)、この揺るがない古典の風格を帯びた言語は救済の光にみえたのである。

 これからいっそうこの小さな言語に勤しむことにするか? いや、いまは CS:APP を読み進めることの方を優先したい。このままインテンシブLisp の独習コースを催すことはしない。

 とはいえ、機をみてとりくみたいマテリアルははっきりしている。ひとつは L-99Lisp 向けの問題集である。いわゆる kata というものと思っている。もうひとつは SICP 、いわゆるウィザード本である。こちらの方が正統かつ王道のおもむきがある。

 今回使ったチュートリアルは、後者のウィザード本を読めるようになることをゴールにしているのだという。つまりそれを終えたいまであれば読めるはず。teachyourselfcs.com でも推奨されているので、遅かれ早かれ挑戦することになるだろう。あるいはなんと全文が HTML で公開されているので、いつでもはじめられる。

 慌てることはしたくないが、胸は高鳴っている。プログラミングが楽しいと心から思える機会を新しく与え直されていることに感激している。