done is better than perfect

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

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

筋トレしている男性の写真 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

今更ながら「嫌われる勇気」を読んだ

本屋でこういう自己啓発系の本が置いてあるセクションに行くと、必ずと言っていいほどこれ置いてあるじゃないですか。ええい、認めましょう。ずーっと気になっていました。ということで読んでみました。

アドラー心理学なるものに関する本で、ある哲学者が悩める青年を徹底的に論破していくお話です。ふふ、困った人だ。(嘘です)

覚えておきたいこととしては、以下。

  • 他者の課題と自分の課題は別物だから混同するな
  • 過去にあった事象に意味づけするのは自分
  • 「貢献感」を大事にするべき
  • 自分がどう生きるかを選ぶのは自分
  • 変えられないものを何とかするのではなく、変えられるものに目を向けるべき
  • 今ここの人生を生きるべき

ともすると、頭がもっと良ければなーとか、もっとお金があればなーとか思ってしまう「ないものねだり」は時間の無駄なので、もっと今の時間を精一杯生きようと思いました。

WindowsのターミナルエミュレータはMobaXtermがいい、という話

mobaxterm
mobaxterm

皆さんはWindowsでのターミナルエミュレータは何を使っていますか?minttyとかconemuとか、最近だとMicrosoft謹製のWindows Terminal とか使っている人も多いのではないでしょうか。 www.microsoft.com

私は最近MobaXtermを使っています。以下のような要件があるからです。

  • WSLを使いたい
  • Shift + Insertでペーストしたい
  • 画面分割したい

これらの要件を満たせていたのが https://mobaxterm.mobatek.net/:MobaXterm でした。特にX serverが内蔵されているってのが良くて、別途VcXsrvとか入れなくていいんです!

X Serverいらなくていいなら、正直Windows Terminalが成熟すればそちらでもいいかなーという気分ではあります。Visual Studio Codeに期待。特にCode Hierarchy機能がほしい・・・