done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

「三体」を読んだ

あるゲームで、「宗教と科学を分けるのは『新奇の予言』である」という台詞がある。科学とは、これまでの経験から帰納的にこの世の法則を導き出すものだ。これまでの「経験上」、物体は上から下に落ちる。日はまた登る。これは昨日もそうだったし、今日もそうだ。きっと明日もそう だろう

この成功体験は、我々の脳裏に深く刻まれている。我々は無意識に、あるいは後天的な学習により、この世にはある種の規則があると 信じている 。だからこそ我々はここまで発展してきた。

ある日突然、その前提が覆されたら?

我々の経験は、ただ単純にたまたまだったとしたら?

「三体」は、その題名にある通り古典力学から問題の題材にされていた三体問題を題材とした中国の作家劉慈欣のSF小説である。この小説はいろいろなところですでに高い評価を受けているが、ここでは割愛する。

中国のSFと聞いて、「なんか共産党のプロパカンダ凄そう・・・」と思う人も多いのではないだろうか。私もその一人だった。なので、何となく敬遠していたのだが、やはり気になって読んでみた。これが面白い。

SF小説というから多少身構えていたが、とても読みやすいエンタメ小説。出だしは文化大革命の凄惨な粛清から始まり、科学者の謎の死、不思議な現象、突然出てくるVRゲームとその奥深さ・・・そのどれもが興味深いし、それらが連鎖的に繋がっていくところが爽快な小説だ。読んだ個人的な感想としてはサスペンスっぽい。どちらかというと、SF小説っぽい科学的な薀蓄は、割と抑えめな印象。

キャラクターの一人である、警察官の史強が私のお気に入りだ。SF小説らしく、様々に知的な登場人物が出てくる中で、史強はどちらかというと粗暴な振る舞いをする。しかし、乱暴ながらも本質をついた意見を言ったり、他の登場人物を鼓舞したりする。

以下は、史強の台詞だ。

「不可思議な出来事にはかならず裏がある」

(中略)

「つまり、科学で説明がつかないように見える出来事の背後には、かならずだれか黒幕がいるってことだ」

これこそが、人を疑うことが仕事である彼の、史強の究極の 法則 である。これを、中国の作家が著したということで穿った見方を見てしまうのは、私だけだろうか。

ネタバレせずに紹介するのは難しい小説だが、単純にエンタメとして面白いので、ぜひ未読の方は読んでほしい。

StayHome時代の筋トレの最適解とは

男性の背中 Łukasz DyłkaによるPixabayからの画像

筋トレがストレス解消だった

ちょっと前のブログにも書いたんですが、私はジムに行くのがそれなりに好きでして、コロナの前は週3-4回ペースくらいで行っていました。 dibtp.hateblo.jp

ガチ勢というほどでもないんですが、フリーウェイトを中心に、一回30分~1時間程度を目安に筋トレしてストレス発散できていたんですよね。

普段は24時間ジムに通っているのですが、たまにゴールドジムとか友達と行っていろんな器具を試すのとか好きでした。

コロナのご時世になって

皆さんご承知おきの通り、今はコロナのために、基本的にジムが開いていない状態なんですよね。

誰を責めるわけでもないのですが、辛い。。

www.sponichi.co.jp

4月はじめ辺りにこんな記事が出たのも記憶に新しい。私はグッとこらえて行きませんでしたが・・・正直、気持ちはわかります。

今どうしているか

基本的には家 + 近所の公園で自重トレーニングという感じです。近所の公園には懸垂バーがあって大助かり。やっぱ懸垂は最高ですね!

家は1Kなので、器具の類が一切ないのですが、、YouTuberの動画を見ながら、腕立て伏せとかバーピージャンプとかをしている感じです。

www.youtube.com

でもなあ、やっぱり腕立て伏せでは限界ありますね。何より、やはり下半身が衰えているのが目に見えてわかります・・・。

下半身は片足スクワットとかで何とかやっているのですが、やはり負荷が弱い。

これからどうするか

非常事態宣言が長引きそうな今日このごろ、ジムの閉鎖も長引くだろうなーとは思っていて、どうしようか本当に悩んでします。

自宅が狭いので、ラックなんて当然置くところがないです。以下のようなダンベルでも買おうかなとも思うのですが、下半身に効かせるにはこれでも軽いんですよねー。


いっそ、Bodybossとかもいいかなぁと思って今見ているところですが、皆考えることは同じなのか、売り切れ・・・。手に入れられたら試してみたい。

www.bodybossportablegym.jp

調べるたびに忘れるので、オレオレ証明書についてまとめたい。あるいは、CとかOとかOUとかCNって何?という話

注意: 以下は筆者の理解を書きますが、筆者はセキュリティなどに関して素人同然なので、記事内容の真正性について保証しません。自己責任でご参照くださるか、参照に示したJPNICのサイトでも見てください。

動機

最近Kubernetesを勉強しているのですが、ひょいひょいクライアント認証とかでこのあたりの技術が出てくるので調べてみました。

調べてわかったことは、オレオレ証明書とは


グレンラガンだということです。

お前を信じるお前を信じろ!

PKIとはなにか

Public-Key Infrastructure のこと。公開鍵暗号を使った認証基盤を指す。あるAさんが、Bさんのことを信頼できるか検証する際、Aさんがすでに信頼している第三者がBさんのことを保証してくれるかどうかで確認する仕組み。

コレ自体は証明書の実装について示したものではなさそう。

公開鍵暗号は、よくSSHとかで使うやつ(雑すぎる理解)

WebのSSL/TLSに使われているものと思えば良さそう。というか、題名に書いたCとかOとかもそれ関連の話によく出てくる印象。

X.509とかRFC3280とかもこれ。

CAとはなにか

PKIで用いられる証明書はCA: Certified Authority から発行される。CAというのが、信頼できる第三者Windowsとかには確かこれがすでに入っている。Firefoxとかは独自のCAリストを持っていたような。 ユーザは、自分が信頼しているCAが発行した証明書は信じる(ここ重要)

PKIは、TLSもそうだけど、S/MIMEというプロトコルで電子メールでも使える。電子メールの署名の正しさをこれで検証できる。

ユーザはCAに証明書を発行してもらい、それをアプリケーションで利用する。CAは同様に証明書とそれに対応する暗号化鍵を持っている。 ユーザはCAの証明書を参照することで、検証したい証明書の発行に使われた暗号化鍵が確かにそのCAのものであることを確認できる。

公開鍵暗号方式では、ある暗号化鍵で暗号化したものを、公開鍵で開けることができる、という特性を利用していると思われる。

上記のような理解をしていたが、どうやらちがうっぽい?このあたりは押さえておきたい。が、今は割愛。 qiita.com

ユーザはルートCAか、もしくはいずれかのCAを信頼し、そのCAが発行する証明書は正しいという前提で証明書を検証する。ルートCAが信頼しているCA "X" も、 CA "X" が信頼している CA "Y" も信頼する。

ユーザが信頼しているCAはトラストポイント(信頼点)と呼ばれる。

で、CとかOとかOUとかCNってなによ

X.509で使われる証明書の中に記載される名称。DN (Distinguish Name) 、識別名とも呼ばれる。

  • C: Country そのまま国の名前
  • O: Organization 組織名
  • OU: Organizational Unit 部門名
  • CN: Common Name 一般名

これはSubjectやIssuerに書かれるものである。つまり、Issuer (証明書を発行したCA)や証明されている人間(Subject) に付与された識別名。

証明書の検証手順

  • Issuerの値(発行体の名称)をもとに、CA証明書を入手
  • CA証明書のIssuerの値をもとに、そのCA証明書を発行しtあCAの証明書を入手
  • CA証明書入手を繰り返し、トラストポイントまでたどり着いたら検査完了

次に、証明内容を検査

  • CAに含まれる公開鍵で、認証対象の証明書の電子署名を検証
  • 名称、有効期限、鍵の用途が受け入れられるかを検証
  • 証明書が執行していないかを検証 (CRLに入っていないかどうかを確認)

で、オレオレ証明書とは

俺がトラストポイントになることだ・・・っ!

ということで、自身の証明書を自分の秘密鍵で署名して、さらに用意した自前の認証局の公開鍵をインストールすることでトラストポイントにもなることだと理解した。

参照

coreos.com www.nic.ad.jp

そろそろいい年なので、健康に気を使っていきたい、という話

筋トレしている男性の写真 StockSnapによるPixabayからの画像

三十路に差し掛かって

今年30歳になる。この年になると、太りやすくなって困る・・・という実感は正直ないです。なぜなら、中高生時代から太っていたから。

高校3年生~大学入学当初

全盛期でした。身長は170cmなのに、体重は80kgオーバー・・・。当然筋肉などではなく、どう考えても太り過ぎ。でもこの頃は大した自覚がなかった。

実は当時の動画があるのですが、直視できないくらいにデブっている。

大学生~大学院生

大学生になって、ここで運動する習慣を身につけられなければ一生運動する機会はないな、と一念発起。結構ガチで運動する系サークルに入り、大学4年生まで続けました。

これで結構痩せた。サークルでの運動自体もそうですが、食事に気をつけたり、ジムに行くような習慣も身につけられたのがデカい。

はっきり言って、ダイエットは食事が9割です。運動は二の次。

体重は65kgくらいまで痩せ、そこから就活終わるくらいまではキープし続けました。

就活が終わると、修士論文に翻弄される毎日が続き、そこで結局また70kg台まで行ってしまう・・・

社会人生活始まってからこれまで。

体重の増減がめっちゃ激しい。健康診断の前からダイエットを始め、終わったらストレスからのバグ食い。年間通して10kg-15kg程度の体重の増減は当たり前な生活を続けていました。

流石にこれじゃいかんだろ、っていうことで、今年はずっと体重をキープし続け、かつジムで筋トレを続けることを目標としています。コロナの影響でジムはいけなくなってしまっていますが、体重はなんとかキープし続けられています。

今の体重は64kg前後です。

現在の生活

直近のコロナのせいで基本リモートワークなせいもあって、ずっと同じような食生活を続けていますが、体の調子はすこぶるいいです。

基本的には、以下みたいな食生活をしています。

  • 朝: オートミール、鯖の水煮、お茶漬け
  • 昼: 惣菜パンとか適当に買った揚げ物とか
    • これくらいは好きなもの食わないと心が死ぬ
  • 夕: プロテイン

あとは大量にコーヒーとか飲んでます。

オートミールは先入観からあまり食べていなかったんですが、お茶漬けで食べると普通に美味しいです。 最近鯖の水煮を大量に買ったんですが、それと合わせると飽きずに食べられるのでおすすめ。見た目は悪いけど。

以下の鯖の水煮、まじでおすすめです。一袋あたりの栄養が以下。

  • 139kcal
  • タンパク質: 25.9g
  • 脂質: 4.0g
  • 炭水化物: 0.1g
  • 食塩相当量: 1.4g
  • DHA: 660mg
  • EPA: 192mg

完璧な筋肉食ですね。ちょっと食塩は多い気もしますが、他で気をつければ大丈夫でしょう。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

【ふるさと納税】さばの水煮 CA-09017
価格:12000円(税込、送料無料) (2020/4/29時点)


オートミール業務スーパーで買ったやつですが、こちらもそこそこ美味しいし、なにより安い(500gで200円もしなかったような)

プロテインは安定のマイプロテインです。今はナチュラルストロベリーを飲んでいますが、普通に美味しいです。ダマになるけど。 そういえば、マイプロテインはGWセール中ですね。5/1からが本番みたいなので、なにか買いたい。

やっぱりアウトプットはしたほうがよい、という話

どこかの高い山のきれいな画像 Aaqib JavedによるPixabayからの画像

200万すった

正直、これまでの人生適当にやりすぎていた感がすごい。なんだかんだ自分が他の人より優秀だという自覚だけしていた。 中高大、そして大学院と、そこそこのところに行っていたし、それなりの成績を収めてきた。 就職もそこそこの会社に務められたし、特に激務というわけでもなくそれなりのお賃金がいただける環境。 そんなにお金を使う趣味もないので、投資に回してアーリーリタイアや!とか思っていた。

コロナのせいで200万はふっとばした。

正直あんまり実感はないけど、Webで確認できる数字は明らかに減っている。現実味がなさすぎて、辛いのかどうか自分の考えが整理つかない。

とりあえず明日食べるものに困ることはないが、これまで築き上げてきたものが全く無意味だったのでないか、という思いだけが最近脳裏をよぎる。

自分を振り返って

私にはなにもない。それがはっきりした。結局、その人間が何者か、というのは、他者に評価されて初めて意味を持つ。 私には、表に出せるものがなにもない。他の人に評価してもらえるものがなにもない。お金を表す数値だけが頼りだったのに。

今できること

自分をみつめなおして、何ができるのか、何をやりたいのか、そのためには何をするべきなのか、ということを整理して行きたい。 ただ、何をやるにしても、表に出る形にしたい。自分の脳内だけにあるのは、なにもないのと同じことなのだろう。

ということで、ブログの更新頻度を上げたいと思います。(n年ぶりm回目)

AvroのUnionに大量のtypeを入れないほうがいいという話

tl;dr;

(正直理解が怪しいところもあるので、詳しい方誰か教えて下さい。) Unionに大量の型を入れないほうが良い。どうしても入れたければ AVRO-2274 が入った Avro version 1.9以降を使いましょう。


自分用の備忘録なので細かい説明は省きます。

Apache Avro というシリアライゼーションフォーマットがあります。Apache Kafkaのメッセージのフォーマットだとかに使われることがあります。もともとはApache Hadoopに格納する際のデータフォーマットとして作られたっぽい?

Apache Avroには、いろいろな型があります。 int とか float みたいな primitive な型だったり、もう少し複雑な型もあります。

複雑な型の中に、 Union と呼ばれる型がある。これは C言語でいう union と似たようなもので、ある値に複数の型を定義できます。

avro.apache.org

Union型は、 nullable な値を示す際によく使われます。 例えば、 ["null", "string"] みたいな書き方をして、 null もしくは string が入った値であることを明示できます。

基本的には上記のような使われ方しかしないため、 union に入る型は多くて2つとかです。このようなときには大きな問題にはなりません。


Avroは、ユーザが型をrecord型で定義できます。このとき、ユーザが自前で定義した大量の型のどれか一つであることを示すためにunionを使った場合のことを考えます。

["myType1", "myType2", ... "myTypeN"]

なんでそんなことするの、ということは聞かないでください。

WriterでもReaderでも同じSchemaを使っていると想定した場合、上記のUnionが出てきたときに、Avro 1.8までは以下のようなresolutionをします。

for wbranch in writerunion:
    for rbranch in readerunion:
        if (wbranchとrbranchがマッチするか):
            resultを作る(branchを作る)
        memorize[(wbranch, rbranch)]  = branch

writerのunionの要素1つずつに対して、readerのunionの要素すべてをチェックし、マッチする要素を探し、結果を返す、ということをします。 更に、その結果をキャッシュ的にメモリに残します。

素数が多くなると、爆発的に計算量が多くなることはわかると思います。加えて、そもそもwriter unionの要素とreader unionの要素からbranchを作る処理が重いのですが、それにもまして 要素ごとの計算結果をキャッシュする(Weakなdictですらなく、普通のhashmapにもつ)ので、めっちゃメモリを使います。

なぜこんなことをするのかというと、Avroのspec的に、readerはwriterの書いた型と最初にマッチする型でresolutionすることが決まっているからです。

avro.apache.org

まあでも、見れば分かる通り、ReaderとWriterが同じunionのsubschemaを持っていることさえわかれば、そんなことしなくても直接対応する型でbranch作ればいいよね、っていうのが AVRO-2274 です。

実際、これでも同じ型かどうかのチェックは O2 かかるのですが、それ自体はそこまで遅くなく、キャッシュ量も大したことなくなります。よって、上記のように、大量にunionに型が入っているような場合は爆速になります。


このあたり読めばもう少し理解できるかな、と思うのですが、途中で挫折した。。 parsing tableとか懐かしすぎワロタ

avro.apache.org

WSL2上のDockerとVSCodeを組み合わせて使う方法

追記

普通にできました。下記ブログ参照してください。

stuartleeks.com

tl;dr; まだ開発中っぽいです。

github.com

やりたいこと

WSL2がWindowsにやってきた。Docker DesktopもWSL2をバックエンドに動くらしい!おや、VSCodeのRemote-Containerという機能を使えばDocker Container内で開発ができるらしいな。

よし、 Docker Desktop w/ WSL2 を使って、VSCodeナウい感じに開発だ!・・・と思い、以下のページを見る。

code.visualstudio.com code.visualstudio.com

さっそく、 WSL2(ディストロはUbuntu18.04)で、 code . とたたき、 Ctrl-P からの Remote-Container を探す。ない。

は?

そもそもドキュメントと違い、左下ではすでにWSLにVScodeがいることになっている。

仕方ない。WSL2のディレクトリをWindowsExplorerから開く。 Remote-Containerがあったので、それを使って .devcontainer を作成しコンテナーをビルドしてみる

謎のエラー。(スクショ忘れた)

\(^o^)/オワタ

ググる。絶対同じことやりたい人いるだろ。

github.com

なるほど。いっかいWSL2のコンソールでContainerを開始してからvscodeでそれにアタッチすればいいんだな!

。。。

できた。けど、なぜかプラグインがダウンロードできなかったりコレジャナイ感やばい。

Insiderとかだと↓が使えるのかな。よくわからんけど。

github.com