hsimyu's diary

ゲームなどをします。

9/23 ポケモンGO

9/23

昼まで寝て、適当に rust 書いたり散歩したり。

ごはん

朝: オールブラン

昼: カップ麺(マルちゃん正麺 担々麺)

夜: シチューと焼いたパン

みかん

Vivaldi 入れてみた

ツリー型タブ拡張、Chrome にはないのか→Vivaldi いいかも、って流れでとりあえずインストールしてみた。初期設定でタブをどこに配置するかを選ばされるの、「わかってる」感じ。

ブックマークもパスワードも Chrome からシュッとインポートできたので、しばらく使ってみることにする。これで体験良かったら Chromebook 買ったのを少し後悔してしまうかもしれん。

DQXI S

キターーーー Switch 版ってことで、2D 版と 3D 版切り替えられるようにしてください。

名付け方針

そろそろ考えていく。さっき考えた、基本的な方針は以下。

  • 強い意味合いを持つ名前はつけない
    • 名字が「強い意味」を持っている漢字なので、できるだけいじられる可能性を下げたい
    • 名字と関連付けるような意味合いを持つ漢字もできるだけ避ける
  • 漢字一文字の名前は避ける
    • 名字が一文字なため、漢字一文字だとどうしても絶望先生みたいになる
  • 「明るい」「元気」とか、そういう感じの形容詞も避けたい
    • 完全に透明な名前にすることは難しいが、気質を表すような名前はあまり好きではない
  • ⇒ とりあえず音を先に考えてから、適切な漢字を探し出すのが良さそう
    • ただし、音にこだわりすぎるとキラキラネームになるので、そこは気をつける

今日のオクトパストラベラー

オルベリク編をクリアしてエンドロールを観た。BGM 演奏?の人たちがパート毎にリストされてるのめっちゃおもしろいですね。 残るはあと4人?そろそろクリアしてサガスカやりたい。

その他

VSCode のビルドタスクは Ctrl + Shift + B で呼び出せる。

過去のコミットの author とかを一括で書き換える

$ git filter-branch -f --env-filter "GIT_AUTHOR_NAME='hsimyu'; GIT_AUTHOR_EMAIL='hsimyu@example.com'; GIT_COMMITTER_NAME='hsimyu'; GIT_COMMITTER_EMAIL='hsimyu@example.com';" HEAD
  • TODO: filter-branch コマンドの挙動くわしく調べる

www.hayabusa2.jaxa.jp

MINERVA-Ⅱ1は、小惑星表面に降りた世界初のローバ(移動探査ロボット)です。また、小惑星表面で自律的に移動したこと、写真撮影をしたことも世界初です。つまり、MINERVA-Ⅱ1は、「小惑星表面で移動探査をした世界初の人工物」となりました。しかも、2機同時に動作させるという快挙ともなりました。

めでたい。はやぶさはもう8年前かーーーー。

べぴちゃんの打ち上げどうなったん、と思って調べたら 10/18 打ち上げに決定してた。ようやくかー。

面白いレビュー

jp.ign.com

妖怪ウォッチ4』は高級寿司店かっぱ巻きのようなゲームだ。4Kに対応した美麗なトゥーン調グラフィックスにスムーズな操作系のアクションが楽しめる『二ノ国II レヴァナントキングダム』のような極上のウニ軍艦ではないのかもしれない。しかし、使っている有明海苔(福岡は海苔がうまい!)とシャリは変わらないし、同じ職人が握ったのだとすぐにわかる。

Rust 復習

警告の抑制

モジュール全体に適用: #![allow(non_snake_case)]

ある関数に適用: #[allow(non_snake_case)]

構造体へのコンストラクタ定義も impl で書く

new という名前を使うのは単なる慣習

    impl fuga_struct {
        fn new(name: &str) -> fuga_struct {
            fuga_struct {
                name_field: name.to_string(),
            }
        }
    }

self (= C++でいう this) は自動的には関連関数内で変数束縛されない

    impl hoge_struct {
        fn do_something(&self) {
            println!("I'm {}.", self.name);
        }
    }

&str は文字列を参照する型, String は文字列を所有する型

    fn hoge(string_reference: &str) {
        // to_string() で参照からコピーを作れる
        let string_data: String = string_reference.to_string();
    }

String 型のフィールドを持つような構造体のコンストラクタで String を受け取るようにしてしまうと、呼び出し側で let s = hogeStruct::new("hogeName".to_string()); みたいに書かないといけなくなって、だるい。

Arc: Atomic Reference Count

構造体を Arc で囲んで new する ⇒ clone() して参照カウントを増やす (変数束縛破棄時に減る)

    // Arc の生成
    let table = Arc::new(Table {
        Mutex::new(()),
    });
    
    // ...
    
    // Arc を clone して thread を立てる
    let handles: Vec<_> = philosophers.into_iter().map(|p| {
        let table = table.clone();
    
        thread::spawn(move || {
            p.eat(&table);
        })
    }).collect();

vec! のメモリ割り当て

    let v = vec![1, 2, 3];

この時、

変数束縛オブジェクト v はスタックに

実際の Vec の値はヒープに

確保される。(変数束縛を自由に上書きできるのは、この構造のおかげ?)

借用

&受け取り = const&

呼び出し側でも参照を明示する必要がある。(ここ、C++ より好き。参照を渡していることは呼び出し側で明示的に知りたい)

    fn sum(v: &Vec<i32>) -> i32 {
        0
    }
    
    let v = vec![1, 2, 3];
    let answer = sum(&v);

&mut 参照

&mut な参照を借用する ≒ (C++だと) ポインタを取得する

    let mut x = 5;
    {
        let y = &mut x;
        *y += 1; // ポインタのデリファレンスっぽい
    }

「&mut な借用がスコープにある間は、別の借用を作成できない」ルールは、変数束縛を再度行っても回避できない。

    let mut x = 5;
    let y = &mut x;
    *y += 1;
    
    let y = 1; // 変数束縛を消してみる?
    println!("{}", x); // => 借用エラー