3/10 病院行った & 『2035年の世界地図』読んだ

5時半起床。今日は通院なので遅めの起床。充分早いが。血液検査があるのでエレンタールは飲めない。なので朝活はなし。ただでさえお腹空くのに無駄にカロリー消費させる必要もなし。体脂肪率は未だに5%をキープしているのは伊達じゃない。退院してから体重増える様子もあまりない。やはりそれだけ食事が大事なんだろうなと思う

 

病院行った

病院とかいう場所、いつ行ってもみんな具合悪そうだし、年寄りしかいない。採決したけど先月と同じ人だった。1日何人採血するんだろうね、めっちゃ上手くなりそう。そういえば健康診断で採血あるけど、新人っぽい看護師かおばちゃんだったら、みんなおばちゃんの方に並ぶよね。採血のときのおばちゃんの頼もしさは異常。

 

血液検査の結果はまあ現状維持。先月よりもところどころ基準値以上のところあったけど、ステロイドのせいだね、で終わった。めっちゃ普通にご飯食べてますとかじゃないからね。ちゃんと言われたとおりに退院後も絶食状態(味噌汁は飲む)継続しているし。俺マジで偉い。

f:id:polygonal_line:20230310211130j:image

薬をいっぱい貰った。一か月分の食事です。エレンタールあるから1ヶ月は外でなくても普通に生活できるんだよな。突然ゾンビになるウィルスが流行したとしても2ヶ月くらい引きこもって周りが全滅するまで生き残ることができるぞ!そう考えるとエレンタールってすごいのでは?

 

本読んだ

2020年代、全世界を襲った「地殻変動」。
大きく書き換わる世界地図の中に、私たちの居場所はあるのか?


私たちが見ていた「グローバル化」の夢は、脆くも崩れ去った。
地球に住む私たちが共有したのは、
パンデミックと、歴史の針を戻したような戦争だった。
ここから世界地図は大きく塗り替わる――。

世界、日本、そして「私たち」は、いったいどこに向かっているのか。
世界最高の知性が、激動の近未来を大胆に予測する。

積立NISAで商品選択する上で今後世界どうなんのということで購入。10冊購入する際に新書でちょうど評判良さげだったからが9割。面白かった、でもタイトル変えた方がいいと思うよ。2035年というキーワード出てきたの冒頭だけじゃねえか。

世界最高の知性を持つ4人(俺もそう言われてみたい)と記者の英語での対話をを和訳して文章化したもの。なので、日本語として「ん?」となったり、書籍としてしっかり構造化されていないから、浅く広いし説明も段階化されていないから難しい。

扱う話題もすごくマクロな話なので実感がない、読んでるときの俺の頭の4割は空腹で3割花粉で、残りがその他だったし。民主主義、グローバリズム、リベラル、パンデミック、分断、SNSウクライナ侵攻、脱炭素化、発展途上国まあ色んな話題、論点が出たり消えたり。あっちへいったりこっちいったり。面白かったけど、浅く薄く知識と呼べないような点を得た感じ。というのか自分のスタンスが定まっていないからなんだろうな。まあ無理に定めるものでもないけど。少量の情報で0か100に振り切れるのが一番よくないからね。

3/9 花粉症手当とか出ないかな

4時すぎ起床。ロボット掃除機に起こされることなかった。タイマーがぶっ壊れているのか知らんけどマジでなんなんだ。そろそろ買い替えの時期なのか。朝活はラジオ体操+ステッパー30分。なんか色々やろうと思っていたけど、ボーとしていたら時間が過ぎていた。花粉がいけないんだよな。

 

明日は通院で休みなので、仕事やりきるかと思ってちょい残業してたら仕事が降ってきた。はよ帰れば良かったと思うものの、月曜日に降りかかる仕事が増えるだけなので先始末できただけ良かったかもしれない。特許出願案2件完成させるくらいには暇だったけど、来週忙しそうで困る。というか花粉がやばすぎて困る。薬いっぱい飲んでいるのに。花粉症の集中力低下だったり作業効率の悪化だったり、割とシャレにならないと思う。マジでテレワークしたい。それかみんな花粉症になれ。

 

残業もあったので、ここで終わり。応天の門の最新刊が出たので読んだ。面白いけど、どこまでやるんだろうと思う。タイトル通り応天門の変がメインなんだろうけど。年次的にもうそろそろだけど、ずっと連載してほしさはある。

 

3/8 USJのバタービールってあんまりだよな

5時すぎ起床。またロボット掃除機が夜中動いていた。動作時間見直したはずなのに。そのおかげで途中目覚めたせいか、いつもより起床時間が遅い。朝活はステッパー除外。ステッパーやらないとホグワーツやる機会が減るんだよね。

 

ホグワーツ面白い。面白いので日記が薄くなる。いまの進捗度合い的にメインストーリーはもうすぐ終盤にはいると思うけど、サブクエストあたりを消化しようとするとまあ当分時間がかかりそうな予感がする。ちまちまやってけばいいか。オクトパストラベラー2もやってみたさあるんだけど。のんびり消化してけばいいか。

3/7 いい椅子が欲しいけど試してみないと分からない

4:45起床。ロボット掃除機が0時くらいに動いて起きてしまったので、微妙に怠い。朝活はステッパー排除。

 

いい椅子が欲しい

昨日ストレートネックで右肩が痛かったけど、明らかに姿勢が悪いのが原因。ちゃんとした椅子を買いたい。いま使っている椅子はゲーミングチェア。

たぶんコレ。こんな高かったか?180度リクライニングとかどう考えてもいらん。寝るならベッドで寝ろ。そもそも前傾姿勢になりがちなので、ゲーミングチェアにあまり適していない。前傾機能があるワークチェアが欲しい。けど、まあまあの値段するし、捨てるのも面倒なので、買う前に試座したい。東京行ったときにタイミングが合えば行こうかなと思う。花粉が飛んでいる時期に外出したくないけど。

 

ちょことRUSTをやった。ボタンを押すとLEDが光るぞ。次はUARTで分量ありそうなので、明日すね。色々やりつつとなると全て少しずつ進めることになる。一気にガっとやってしまいたいものだけどね。

3/6 特許侵害ってバレるのかな

4時半起床。なんか右肩痛い。昨日適当に肩回しすぎたか?位置的に胸鎖乳突筋なのでストレートネックですね。朝活はきんに君のやつ除外パターン。

今日は朝だけ雨らしい。一番いやなパターン、雨のときだけ自転車通勤が嫌になる。雨降っているときだけ花粉が飛ばないからマシに思えるけど、雨の後にまとめて飛ぶだけだからあんまり変わらない。ちゃんと花粉症の薬飲んでて、ちゃんと辛いのしんどいな。ステロイド薬内服しているから、花粉症楽になるはずなんだけど何故。

雨そんなに降ってなかったので雨具着ずにウィンドブレーカー着たらなんとかなった。通勤途中に俺と同じワークマンの雨具を着ている人がいて、雨具着なくて良かったと心から思った。

 

特許をノルマにするのやめろ

やることあるんだけど、インプットないと何もできないから暇な一日だった。暇なので特許考えていた。うちの会社は1年に特許出願何件とかグループごとにノルマがある。所属している部署が新規開発寄りの部署だから特許出しやすいだろということで、他のグループよりもノルマ件数が多い。うちのグループの現在の特許出願件数みる感じ、半分くらいしか出てないけど。どうせグループ編成変わるからノルマ未達でもいいんじゃないかなと思う。個人としては今期特許出願2件出したから、もう求められることはないと思いたい。来期用に出願するやつを考えて、来期になったらさっさと出しちゃってノルマ達成したい。

普段の業務の合間にやるにしては、特許まあまあ面倒。なにより特許の文章が読みづらすぎるのが辛いし眠くなる。ビューワーで前記を一括削除する機能とかないんすかね。ChatGPTに放り込んだら要約してくれたりしないかな。ついでに特許のアイディア出すから先行特許も調べて欲しい。

3/5 モダンな言語は歴史的経緯がなくて良い

6時起床。4時に起きたけど「起きるの嫌だなあ」と思ったら二度寝してた。なんか中学受験してた夢見た、問一が難しすぎて時間の8割使ったけど、それ以降の問題見たら明らかに簡単で全体見てから時間配分決める奴だったーと思ったら起きた。なんの夢だよ。

 

本が大量に届いた。Amazonで10冊以上注文すると10%ポイントが付く。本屋じゃ有り得ないサービス。ポイント上限が1500ポイントなので10冊で15000円くらいが理想。なのでさっさと読める新書が多い。小説でもいいんだけど積読になりやすい上に既に積読がちょいちょいあるから新書にした。

f:id:polygonal_line:20230305210823j:image

RUSTの本が届いたので、早速取り掛かる。以下学習メモ。俺による俺のためのなので読んでいる人にはマジで意味ない。でも日記ってそもそもそういうもんだから。

 

基礎から学ぶ 組込みRust

基礎から学ぶ 組込みRust

Amazon

RUST学習メモ

  • println!()ってlnはlineなのは分かるけど、!ってなんなんだよと思ったらマクロの意味らしい。そもそも関数じゃなかった。たしかにpanic!()とか!ついてたから納得。
  • 変数のletって何の略称なのと思ったら、調べたら単なる英単語の「let」みたい。JS由来っぽい。個人的にはautoのほうが型推論強いんだからピッタリじゃないと思うけど、まあ慣れるか。
  • const,staticは変わらないみたい。C/C++みたいに修飾子の位置で意味合いが変わらないことを祈る。
  • データ型にint型がないのが良い。処理系でintのサイズは16ビットと32ビットで変わるから、ものすごくたまに問題になる。この前後輩がintを32ビットと思っていたら、実は16ビットで値がオーバーフローしていて意図しない挙動をしていたなんてことあった。そんなことはないほうが良いに決まっているし、そもそもintの次がlongだし、longより大きい型がlong longってバカみたいだよな。その点、RUSTはi8,i16,i32,i64と分かりやすくて短いので良い。
  • 整数リテラルは任意の場所に‗を入れられる。0x1357_9753、0b0000_1010_0011_1111とか。レジスタみやすくなるかも。
  • bool型はbool型、TRUE=1だったりしない。
  • 文字列リテラルの先頭にbをつけるとバイト配列として扱える。
  • if文は条件式に()をつけない。個人的には()を付けたほうが慣れ親しんでいるので、付けたらワーニングで不要な括弧を外せと怒られた。
    #[allow(unused_parens)]
    を付けたらワーニングが出なくなった。RUSTの流儀に従うほうが正しいのは分かるんだけど、C/C++を書くときに混同しちゃうと面倒なので統一できるところは統一したい。
  • true/falseの条件式しか書けないので、x == 1 の代わりに、 x = 1と書いてもコンパイルエラーで怒られる。
  • for文はイテレータで繰り返し処理するので、範囲外参照しない
  • RUSTでは関数内の最後の式が戻り値となる。式なのでセミコロンはつけない。セミコロンをつけると文になるのでreturnが必要。そういえばreturn文っていうもんな。RUSTではreturnを用いないスタイルが好まれる。明示的にreturnを用いるのは早期リターンしたいときなど。
  • structは、struct 構造体名{フィールド名:フィールド型,...}で定義。アクセスにはドットで呼び出し。「構造体名.フィールド名」
  • impl(implementation:実装)で構造体のメソッドと関連関数を定義できる。impl 構造体名{fn 関数名(引数, ...)->戻り値型{関数本体} ...} という形式
  • メソッドは、構造体に紐づく関数。なので、第一引数に構造体オブジェクト(self)が必要。
  • 関連関数は、引数にselfを受け取らない関数。オブジェクトを生成するコンストラクタとしてよく使われるらしい。デフォルト値で生成したいとき、いちいちパラメータ打つの面倒だから、コンストラクタにしちゃう感じ?
  • RUSTの列挙型は、C/C++の列挙型と違いパワフル。各ヴァリアントが異なるデータ型を持つことができる、match文で便利。列挙型にもimplでメソッドと関連関数を定義可能。列挙型にメソッドが必要なのか?と思うけど役立つんだろうきっとなにかに。
  • Option型は、値が格納されているかどうかが不明なことを表現する型。値が格納されていればSome(T)、されていないとNoneがかえってくる。Option型の値は、中身の値を扱うときにOption型から取り出す、広げる(unwrap)必要がある。具体的にはunwrap()メソッドを用いるのが手軽。
  • unwrap関数は正常な場合はその値を返し、エラーだった場合はプログラムを強制終了する(panic!)という関数。強制終了させるのがいいのかは疑問なので、unwrap の類似メソッドで panic の代わりに任意のデフォルト値を指定することができる unwrap_or と panic の代わりにクロージャを実行した値を返す unwrap_or_else があるらしい。詳しくは以下。ちゃんとエラーハンドリングしたいときに読む。

    qiita.com 

  • Result型は、値かエラーかどちらかが格納されていることを表現する型。Option型と同様。なんでこんなことをするのかというと、Rustが例外もnullも持たないから。null値からメソッド呼び出しを行って意図しないNullPointerExceptionが発生したり、例外のcatchが漏れてプログラムが落ちてしまったりしないように、Rustはこのような不具合をコンパイル時に防止するため、Result型やOption型を用意してエラーハンドリングを強制している、とのこと。(以下より引用)

    qiita.com

    ありがたい話ですね。エラーも言わずに無言で死ぬのが一番怖いし面倒。
  • 所有権システムが解決したい課題の1つは、メモリの安全性をコンパイル時に確保すること。これによりダングリングポインタを作らずに済む。また、メモリ解放忘れがなくなりメモリリークがなくなる。
  •  所有権システムは、所有権、借用、ライフタイムの3つで成り立っている。
  •  所有権は、値にアクセスする権利。借用は、所有権を一時的に貸し出して参照を作る仕組み。ライフタイムは、所有権を貸し出す期間。
  •  所有権は、コピーするかムーブするかで振る舞いが変わる。Copyトレイトを実装している整数型、bool型、浮動小数点型は値をコピーするため、所有権は移動しない。所有権と値をコピーするイメージ。コピーされた側は継続して使用可能。コピーコストが低いものはCopyトレイトを実装する。値のコピーコストが高いものは、値をコピーせずに所有権をムーブしている。ムーブされた側は継続して使用できない。
  • 借用は、関数に所有権をムーブさせるときにいちいち明示的に渡して返してもらうのは面倒なので、引数に&をつけて参照する。スマートポインタすね。可変参照のときは&mut。
  • ライフタイムは、値の所有者が貸した参照より長く生存することを保証する仕組み。参照の有効な期間をチェックする機能をボロ―チェッカーという。
  • ライフタイムパラメータがいまいち必要性が分からないけど、コンパイラがライフタイムわからなくなるときがあるから明示的に書いてあげるときに必要なんすかね
  • ジェネリクスとトレイトは、RUSTでポリモーフィズムを実現する手段。
  • ジェネリクスは、具体的なデータ型に直接依存しない、抽象的なプログラムを記述するための方法。テンプレート(T)すね。
  • トレイトは、異なる構造体同士が持つ共通の機能を定義する。抽象基底クラスすね。
  • 型変換は厳しめ。Into,Fromトレイトで変換できるけど、TryInto,TryFromトレイトは明示的にインポートしないとだし、戻り値はresult型だからエラーハンドリング考えないとだし。安全だけど面倒だね。どうにか楽にやる方法を検討しないと。
  • パッケージ=ソリューション、クレート=プロジェクトor外部ライブラリ、モジュール=ソース、ヘッダーファイル
  • Cargo.tomlはパッケージのメタ情報が記述されている
  • は、OSを用いる機能(ファイルシステム、スレッド)などを提供するstdクレートを使用しないという宣言。stdクレートのほかに、プラットフォームに依存しない基本機能のcoreクレート、ヒープメモリを使用するallocクレートがある
  • #![no_main]は、Rust標準のmain()関数インターフェースを使用しないことをコンパイラに指示する。Rust標準だとmain()関数の前処理にstdクレートを使用するため、組込み向けには#![no_main]を入れておく。
  • パニックハンドラはstdクレートで定義されているので、#![no_std]を用いるとパニックハンドラが未定義となる。そのため、パニックハンドラのクレートを用いて定義する必要がある。色々種類があるみたい。
  • #[entry]アトリビュートを関数前につけることで、アプリケーションのエントリーポイントであることを示す。
  • 関数の戻り値が!となっている関数は、発散する関数であり、その関数から戻らないことを意味する。#[entry]アトリビュートを付与する関数では戻ることのないようにする。組込みだからね。

チャプター5まで読み終わって、Wio-TerminalでLチカ完了。

 

キリが良いし、委員長のホグワーツ配信が始まったので配信観ながらホグワーツやる。インペリオ(服従呪文)を覚えた。便利そうだけど普通に火力高い魔法ぶつけたほうが早いな。

ホグワーツの世界というか主人公が割とヤバいやつだけど他のキャラもたまに???ってなることがあるので、主人公がヤバいのかそれとも魔法使いの世界がヤバいのか分からん。

3/4 RUSTに触れてみる & 『よくわかる組込みシステム開発入門』

5時半起床。ずいぶん寝れた。朝活完了。モチベが下がっているので以前と比べて取り掛かるまでに時間がかかる。積読で運動関連の本あったからそれ読もうかな。

 

RUSTやってみる

C99/C++11とかのレガシーなプログラミング言語しか触っていないのでモダンなプログラミング言語を身につけてみたいと思っていたところ、RUSTが良さげなので触れてみる。C/C++をもっと勉強しろよっていう感じだけどね。CはまだしもC++とか奥が深すぎて嫌になっちゃうからね。

tourofrust.com

とりあえず翻訳されていることをざっくりやる。変数は標準で不変なのが安全性を気にするRUSTっぽい。未翻訳部分はスマートポインタとライブラリ使用方法なのでまあ大丈夫でしょ。所有権はなんとなくわかったけどライフタイムが微妙。トレイト周りは実際に自分で実装してみないと分からん。まあ読んでサンプルコードを実行しただけだと分からんよね。公式リファレンスもざっと眺める。

doc.rust-jp.rs

案の定長いので6章まで舐める。実装しているときに必要になったらちゃんと見るほうが身につくし。

変数のシャドーイング挙動が面白い。シャドーイングのおかげで、似た変数に対して異なる名前を思いつく必要がなくなるのが嬉しいらしい。

fn main() {
    let x = 5;

    let x = x + 1;

    println!("The value of x is: {}", x);  // x=6

    {
        let x = x * 2;
        println!("The value of x is: {}", x);  // x=12
    }

    println!("The value of x is: {}", x);  // x=6
}

コンパイラは、関数がどこで定義されているかは気にしなくていいのもモダンぽくて楽。ヘッダーファイルとか面倒だもんな。全体像把握するのに役立つときあるけど、巨大ファイルだとヘッダーファイルも巨大で全体像把握どころじゃないとき多いし。

 

本読んだ

組込み系のはずなのに組込み系の開発に全く触れていないので、軽く勉強がてら購入。この手の本って入門が入門じゃないことがざらなんだけど、本当に入門だった。浅く広く全体像を記載してある、基本情報技術者の教科書から抜粋した感じだ。なので、ほとんど既知の知識だったし、すぐに読み終わった。新入社員にはちょうどいいレベルだと思う。新入社員のメンターになったら渡してみようかな。