The King's Museum

ソフトウェアエンジニアのブログ。

『三体Ⅱ 黒暗森林』を読んで

『三体Ⅱ 黒暗森林』を読みました。

去年、三体Ⅰを読んでおもしろかったので、二作目も買ってはいたけどその分厚さにびびって積んでた。 でも、どうやら Netflix で三体のドラマをやるらしく読んでおきたいなと思ったので読み始めた。

あらすじはいろんなところで読めるからそちらに譲るとして、感想を書きとめておく(ネタバレあります)

--

三体、どうやら二作目が一番評価が高いらしい。 たしかにおもしろくて、それなりに量はあったけどどんどん読み進められた。 前回の三体世界という設定に引き続いて、出てくる設定がとてもよくできていて感心した。 タイトルにもある「黒暗森林」がどういうものか、ずっと気になりながら読み進めていってが、その謎が明かされた時の納得感はとてもよい。 宇宙の文明モデルが息を潜めた狩人たちのいる暗黒の森林だったとは。

最後の三体艦隊との場面は描写がとてもうまくて、読んでいて脳内にイメージが鮮やかに浮かんできて映画のクライマックスを見ているようだった。 ただ、その前の最後の作戦の説明とかはけっこうあっさりしてると思った。 三体世界は、智子とか水滴だったり、人類とは別格の科学力を持っているのに羅輯の戦略に気づけずなのはちょっと納得感がない。 思考を隠すという能力がない三体人の敗北ということかなのかな。 人類の計画を破るために人間の破壁人をたててたから、三体人自体が彼の戦略を見破るのはやっぱり難しかったのか。

そういえば、他の恒星に逃れていった人類たちの伏線は回収されていないような気がする。 四人の面壁者の作戦のうち、精神印章だけはオチがついてない気がしたけど、ここらへんが三体Ⅲにつながるのだろうか。 三体世界とはある意味決着がついたように見えるから、どういう展開になるのかは気になる。三体Ⅲも今年中くらいには読み終えたいな。

--

最初の方にあった羅輯の考えた脳内の恋人とほぼ同じ人を見つけてきて結婚して子供ができてってくだりがだいぶ長くて、著者はあの部分にどういう意図を込めていたかは気になる。 前半はそこがちょっと退屈ではあった。三体の最初の文革のところみたいな感じで世界観を強く印象づける意図があったのだろうか。

前作の方が世界観とかは好きだったかもしれない。 今回は完全に未来世界の SF でとてもエンターテイメントって感じだけど、前作の方が謎が明らかになっていくミステリーの感覚がよかった。 前作の設定とか一部忘れてたから読む前にあらすじ復習しておけばよかった。 三体世界の観測員とか完全に忘れてたけど、読み終える前に Youtube のあらすじ動画見直しておいてよかったw

--

あと、今回は要所で登場人物のフリガナが振ってあったのがめちゃくちゃ助かった。 とりあえずネットフリックスの三体楽しみだなー。わくわく。

www.netflix.com

よくよく考えたら自分は小説は SF しか読んでないな。

『職業としての官僚』を読んで

『職業としての官僚』を読みました。

いわゆる「官僚」である国家公務員について、平成初期から始まった国家公務員改革を軸にして語られた本。 著者はもともと人事院の審議官まで勤めた中の人で、書いてあることがとても細かく正確で丁寧に官僚の実像について書いている。さすが元官僚。 国家公務員改革の前後で官僚の性質がどのように変化したかが分かりやすく書かれており、現在の実像をよく知ることができ国家公務員を目指すなら読むべき本だろう。 また、海外の官僚制(アメリカ、イギリス、フランス、ドイツ)との比較が語られていてるのは貴重だと思う。

自分の周りに国家公務員の人がいないので官僚という仕事に対する解像度はかなり低かったけど、この本を読んで少し解像度が高くなった。 制度とか表面的な面もそうだし、幹部クラスへのインタビューの結果なども掲載されていて裏側の実態もある程度把握できる。 平成初期と現在では、制度も官僚の風土・文化みたいなところも合わせてかなりいろいろと変わったんだなと思った。

官僚というとどうしても世論から厳しい目で見られがちで、実態をきちんと捉えるのは難しい。 でも、この人が述べていた現在の官僚制度・そこに根付く文化に対する危機感みたいなのはそのとおりだなと感じた。 詳しくはこの本の引用に譲るけど、職業としての官僚の魅力はだいぶ落ちてきてるんじゃないかと思った。

こうした状況下で、公務員の働き方については、全体としては民間との均衡が重視されるようになってきたにもかかわらず、政治的課題を下請けするための野放図な残業や、政治家の絡む不祥事における見せしめ的な官僚更迭などが目立つようになっている。「民主的統制」が、「政治的命令は、労働者としての常識的な働き方の確保よりも優先される」と解釈されている。野中尚人は、一連の改革によって生じた官僚の位置づけについて、社会のリーダーからlackey(家臣・下僕)への変化と表現している。

メディアも学界も、改革の過程では、官僚制に対しどれだけ叩いても崩れない強固な壁、常に優秀な人材が集まってきて無定量で働く集団というイメージを持っていたようにみえる。しかし、実際の官僚一人ひとりは傷付きやすい生身の人間であり、特別な強さなど持ち合わせていない。転職困難な中堅以上の世代は、「家臣化」要求を受け入れる以外の選択肢がなかったが、若い世代には政治から責任転嫁されぬよう一線を劃す立ち位置を探す者が増えている。優秀な学生の間で「官僚は損な職業」という見方が広がる中、近年の採用は、損得勘定抜きの公益志向を持つ稀少な人材だのみという脆弱な状態となっている。政治からの要求は、公益に奉仕する誇りや使命感を持つ個々の官僚の必死の働きによって、かろうじて対応されているに過ぎない。

これは自分もよく感じるところだなぁ。これに関しては官僚だけでなく政治家に対してもあてはまると思う。 結局、主権は自分たち国民にあるわけで、官僚も政治家も自分たちの延長上にある一人の人間であるから、公益のためになんでもやって当り前というのは違うんじゃないかなと思う。 こういう、「あっち側・こっち側」、「ウチとソト」の意識はタテ社会の構造によるものなのだろうかと、昔、読んだ本を思い出したりしたな。


官僚制度もここ30年でいろいろと変化があり、なんかクリーンになったなぁと思ったけど、省庁 OB が会社の人事に当然のように介入したりみたいのは現実にあるわけで、この著書に書かれたような綺麗な世界だけじゃないんだよなーとは思った。東大・京大が減ったみたいなこと書かれてたけど、事務次官クラスは今でもほとんど東大卒の男性だしね。

でも、こういう事件が表に出てきちんと問題になって、退任したりするので自浄作用は働くようになったのかもしれないし、今の若手が事務次官になるころには多様性が高まっているのかもしれない。

www.jiji.com

ジムに行き始めた

タイトルの通りで今月からジムに行き始めた。

24時間ジムが自転車で5分ちょっとのところにあるから、子供が寝た後の夜に週二回くらいで行ってる。 運動して気分転換したいなというのと、いまのうちに運動を習慣化しておきたいなというのが目的。筋肉つけて絞りたいとかはあまり考えてない。 そろそろ健康に気を配って生きていかないと。健康寿命を延ばしたい。

最初はジムじゃなくてテニスとかのスポーツスクールに行くのもありかなぁと思ったけど、やっぱり日中に時間を作るのは難しい。 それにジムみたいに黙々と一人でやるのはやっぱり性に合ってる。

過去、高校、大学、社会人、と何回かはジム通いしてたけどだいたい3ヶ月くらいでやめちゃうので今回は6ヶ月続けるのが目標。 自分の場合、6ヶ月続いたらたぶんそのあとも続く気がする。やっぱり3ヶ月目くらいがヤマ。

今回は過去の続かなかった経験を省みてやり方を少し変えてみた。

作戦1:ハードルを下げる

まずはジムに行くまでのハードルを限りなく下げる。

そもそも家から通いやすい24時間のジムを選んだ。 子供がいるとどうしても夜以外はいろんな理由で行きづらいから、夜でも行けるジムを選んだ。 22時頃だとさすがに空いてるしね。

あと、プライベートロッカーを借りて、運動する服、靴、タオルなど一式を3セットくらい常に常備しておく。 ジムはカードキーで入るので、PASMO と一緒に常に携帯しておく。 これで身体一つでジムに行くことができる。

極端な話、会社帰りに気が向いたらそのまま行くこともできる。ほぼ在宅勤務だけど。 もちろん、子供のお迎えがあるから現実には行けないけど、そういう状態を作っておくとハードルが下がる。

結局、ジムで使った衣類とかは持ちかえらないといけないし、補充は補充でやらなきゃいけないから、トータルの手間は同じ、かむしろやや増えるけど、行くときのハードルを限りになく下げるのを大事にした。

作戦2:ジムアプリに課金する

以前は自己流でトレーニングメニューを考えて携帯に自分で記録してってやってたけど、今回はお金をはらって ジムアプリを使った。

GymBuddy というアプリを使ってるんだけどこれが初心者の自分にはとてもよい。

ai-gymbuddy.com

全自動でメニューを組んでくれるのはもちろんいいのだけど、それでいて各種条件をちゃんと指定できるのがいい。

  • トレーニング時間
  • 運動強度
  • ジムあるマシンの有無
  • 鍛えたい部位

などが設定できて、それに合ったメニューを提案してくれる。 次のトレーニングではちゃんと前回鍛えた部位は除外してくれたり便利だなーと感じている。

トレーニングごとに動画があるのもよくて、それのおかげでやったことなかったバーベル系のトレーニングも取り入れることができる。 実際にやった重さとか回数もその場で変えることができるし、丁寧にインターバルの時間まで出してくれるのがよい。

値段は半年で3,500円なのでそれほど大きな出費ではない。

作戦3:がんばりすぎない

以前は「何曜日に周何回行く」みたいなけっこう計画立ててやってたんだけど、今はやりたくなったら行くことにしている。 大抵、トレーニングから 2, 3 日経つと行っとくかーって気分になるからそれに任せている。

トレーニング自体も有酸素いれて一回に1時間くらいで終わるようにしてる。 前はがっつり2時間くらいトレーニングしてて終わったらくたくたでそれはそれで達成感あったんだけど、どうしても一回一回が重くなって、継続しづらい部分があった気がする。 「あとは有酸素でもう終りかー」くらいの気持ちできるとジムに足が向きやすくなる。

体重とか体脂肪率とかそういうのも特に目標立ててないし、夜いくのも睡眠的にはよくないなーと思いつつ、何も気にせず行ける時間に行くのがいいよなと思ってる。

でも、結局これくらいのほうが継続できて、長期的な成果としてはいいんじゃないかと思ってる。


まとめると、多少のお金で解決できるところはお金を使い、力を入れすぎずにまずは継続することを目標に、といったところかな。 考え方がちょっと大人になったのかもしれないな。

『夏への扉』を読みました

『夏への扉』を読みました。

ロバート A. ハインイランの作品。けっこう有名な本だと思う。名前はよく聞くからセールしてたときに買っておいた本。 ちょっと訳に癖があるかな?と思ったけど、基本的には読みやすくてよかった。どうやら、名訳としてけっこう評価が高い翻訳らしい。

重厚感のあるようなものじゃなくて、どちらかといえばロマンスって感じで SF 的には軽めの部類だと思う。 後半に入って物語が進んでいくまでがちょっと長くて退屈だったかな。 最後に何かどんでん返しがあるのかな?とちょっと期待したけど普通にハッピーエンドでそれも物足りなかったかもしれない。

あと、ネタバレになるけど、最終的にけっこう年の離れた女の子と結ばれるっていうのが「うーん、、、」って思ってしまった。 結婚する時点ではコールドスリープで年齢は近づくけどね。

小さい頃に『第四次元の小説』っていう数学をモチーフにした短編集を読んだことがあって、そこにロバート A. ハインイランの短編が載ってたなー。 『夏への扉』を読みながら、そんな昔のことを思い出したりした。

『すばらしい新世界』を読んで

オルダス・ハクスリーの『すばらしい新世界』を読みました。

オーウェルの『1984』と並んでディストピアで有名な小説。 いつだったか Kindle で買ってあって積んであったけど、講読してるブログで紹介されていたのがきっかけで読んでみた。

『1984』は学生の頃に読んでとても好きになったのでけっこう期待して読んだけどあまり印象には残らなかったな。 描かれている世界はもちろんディストピアなんだろうけど、基本的にみんな幸せそうだったからかな、ディストピアをあまり感じなかった。 「みんなが幸福に生きているのならそれが人工的なものであってもそれはそれでありなんじゃないかな」と思ってしまった。 ガンマ階級の人々も“条件付け”によって不快な労働にはならないようになってるわけだし。 自由意志が〜みたいなことでいえばディストピアなのだろうけど。

ただ、後半の章で語られる世界感的な哲学の部分はそれなりに面白かった。 幸福が常に満たされるようになった結果、小説や芸術は必要なくなったという点とか、そもそも家族という枠組みを廃止したのも興味深い。 最近、考えるのだけど 100 年前の社会制度を「ありえないw」って思うように、100 年後は現代の当然の制度を「ありえないw」と思うのだろうなーと。 現代の家族制度も確かになくなる可能性はあるだろうなと思ったりした。

あと、自分はシェークスピアがまったく分からなくてそれの引用ばっかりなのはつらかった。 というか題名もシェークスピアから来てたんだね。それも読んで初めて知った。 オーウェルがイートンの学生の頃、著者のハクスリーからフランス語を教わっていたというエピソードを知ってそういうつながりもあるんだなーと思った。

Vercel からは SMTP ポート 25 番に接続できない

サイドプロジェクトで Vercel と Next.js で Web サイトを構築している。

その Web サイトからメールを送る必要があり、横着して SendGrid などのメールサービスを介さずに直接 SMTP 25 番で送ろうとした(SMTP auth もなし)。 もちろん、筋のいい方法ではないことが分かっており、スパム扱いされやすかったり、接続拒否される可能性はある程度想定済みだ。

状況

使ったライブラリは node-sendmail。

GitHub - guileen/node-sendmail: send mail without setting up a SMTP server

Qiita だと下記のような記事が出てくるので少し参考にした。

Node.jsにてSMTPサーバなしでメール送信 - Qiita

ローカルから送信

まず、ローカルで npm run dev で立ち上げたサーバーからメールを送信しようとしたが、タイムアウトで SMTP サーバーに接続できなかった。 送信先ドメインの MX レコードに書かれている SMTP サーバーのポート 25 番と connection を確立できず。

これは自宅で契約している ISP の NURO 光が Outbound Port25 Blocking をしているためだ。 下記に説明がある。

Outbound Port25 Blocking (OP25B)のご説明 | 基本メールボックス | NURO 光

Vercel から送信

次に Vercel からは送信できるかと思い、試してみたができなかった。

挙動としてはローカルから接続しようとしたときと同じ。Serverless Function が 60 sec timeout なので、コネクションのタイムアウトより前に 60 秒でメソッドの実行が中断してしまう。 明確に SMTP サーバーから接続が拒否されたような雰囲気ではなかったので、Vercel も Outbound Port25 Blocking なのかなと思いドキュメントを調べたら次のように書いてあった。

While the Vercel platform does not block outgoing SMTP connections, ...

ref: https://vercel.com/guides/serverless-functions-and-smtp

どうやら Vercel としては特に 25 番への接続を block していないらしい。 でも、明らかに block されいるような挙動なのでサポートに問い合わせてみた。

回答は下記のようなものだった。

I think our upstream provider is blocking outbound traffic on port 25 (SMTP) by default

ということで、Vercel としては block してないが、より上位の network provider で block されているのだろう、ということだった。 また、Vercel の Serverless Function は Dynamic IP なので、Yahoo メールなどでは明確に「接続拒否」されるから、接続できても拒否されることは多そうだよ、と説明してくれた。

https://support.yahoo-net.jp/PccMail/s/article/H000007342

結論

Vercel からは 25 番 Port へは接続できない。 外部のメールサービス(SendGrid など)を REST API で使うか、SMTP auth (587, 465) を使うことが必須である。 ドキュメントでは「外部のサービスを使うことを推奨」と書いてあるが、推奨というよりそれが必須であることが分かった。

余談

Vercel のサポートで担当だった人がとてもすばらしく、こちらがそこまで詳細に書いてないにも関わらずかなり明確に説明してくれて、サービスとしての印象がめちゃくちゃよくなった。

Rust の環境構築と Hello World

Rust を始めるので環境構築と Hello World から。

言語の Overview とかも見ようかと思ったけどとりあえず手を動かせる環境を作る。

インストール - The Rust Programming Language 日本語版

インストール

自分のプライベートマシンは Windows なので Windows 版のところ見ようかと思ったけど、WSL 使ってるから普通に Linux のやつで。 (WSL 1 だとこの手は使えないっぽい)

$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

↓ が表示されなくてずっと待ってたけど Enter 押したら表示された。

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation

1 を選んで標準インストール

Rust is installed now. Great!

rustup ツールをインストールされ、コンパイラがインストールされたらしい。

これに加えて、なんらかのリンカが必要になるでしょう。

なるほど。でも普通の WSL2 なら大丈夫だろう。 最近、コンパイルとリンクが必要な言語触ってなかったからなんだか懐かしい。

エディタ

個人的なコーディングは IntelliJ IDEA を使ってるのでそれに Rust プラグインをインストールしてつかう。

IntelliJ Rust: IntelliJベースIDE用のオープンソースRustプラグイン

ある程度、ちゃんとした機能がありそう。 そのうちデバッガとかも使ってみようかな。

Hello World

Hello World を書いて実行する。

Hello, World! - The Rust Programming Language 日本語版

fn main() {
    println!("Hello, World!");
}

関数定義は fn か。 println!! は副作用があることを示したりするのだろうか。

コンパイルして実行。リンカは大丈夫だったみたい。

$ rustc helloworld.rs
$ ./helloworld
Hello, World!

気になったところの備忘録。

main関数は特別です: 常に全ての実行可能なRustプログラムで走る最初のコードになります。

entry point が main 関数。

まず、Rustのスタイルは、タブではなく、4スペースでインデントするということです。

4 space indent。

2番目にprintln!はRustのマクロを呼び出すということです。代わりに関数を呼んでいたら、 println(!なし)と入力されているでしょう。Rustのマクロについて詳しくは、第19章で議論します。 とりあえず、!を使用すると、普通の関数ではなくマクロを呼んでいるのだということを知っておくだけでいいでしょう。

へー。副作用の意味かな、と思ったけどマクロなんだね。 println という関数はあるかと思ったけど関数はないらしい。

error[E0423]: expected function, found macro `println`
 --> helloworld.rs:2:5
  |
2 |     println("Hello, World!");
  |     ^^^^^^^ not a function
  |
help: use `!` to invoke the macro
  |
2 |     println!("Hello, World!");
  |            +

error: aborting due to previous error

For more information about this error, try `rustc --explain E0423`.

とりあえず最初の一歩はこんなところでおしまい。

次回

次はパッケージ管理(?)の Cargo をやってく。

(c) The King's Museum