blog.bouzuya.net

2023-03-13 bouzuya/rust-sandbox のこと

2023-03-05 にも書いたのだけど、いま bouzuya/rust-sandbox にパッケージを追加するのを避けようとしている。その理由や rust-sandbox とは何かについて書く。

rust-sandbox というのはぼく (bouzuya) の GitHub に置いているリポジトリのひとつである https://github.com/bouzuya/rust-sandbox のことだ。これはぼくが Rust で書いたいろいろなものの置き場所になっているリポジトリだ。

きっかけは転職活動だ。

転職活動を通じて GitHub リポジトリを見せる機会があった。その際に改めて自身のリポジトリを眺めてみて「見せ方が悪い」と思うところがあった。見せる意図を持っていないのだからそうなってもおかしくないのだけど、ほめられたことではない https://twitter.com/bouzuya/status/1615914474745270272

「見せ方が悪い」と思った点のひとつが「 rust-sandbox って何?」という点。

rust-sandbox を端的に説明すれば「 bouzuya が Rust で書いたいろいろなものの置き場」だ。これがよく分からない。「いろいろつくってるんですね」という印象は与えられるだろうけど、それは GitHub のプロフィールページからリポジトリ数や一覧をざっと見れば十分だ。

「具体的には何があってどれを見れば良いの?」となりそうだ。 README で「たとえば〜がある」みたいな補足説明もできるけど、紹介だけ別に用意して個別のリポジトリへのリンクでも良いはずだ。そも「リポジトリを提出しろ」と言われて「 rust-sandbox を提出する」のは「 GitHub のアカウントを提出する」に戻っているようなものだ。いろいろなものが混在することによるノイズを避けられていない。

rust-sandbox はいろいろなパッケージをまとめている。これは良し悪しだ。

良い点として、雑な名前ではじめられるのはある。リポジトリの名前変更は URL が変わるので (リポジトリ内のファイルを指していれば同じことだし、 GitHub はリダイレクトしてくれるはずだけど、それでも気は引ける) 、なんとなく名前を考えるところからはじめさせられる。そこの手を抜けるのは気持ちが楽だ。

悪い点として、リポジトリが独立していないので permalink を示しづらい。特定階層を指すことはできるけど blog.bouzuya.net では [user/repo] のような形に最適化していたりするし、先の転職活動の例もそうだろう。「 bouzuya/rust-sandbox の its が……」のような遠回りな言及が必要になるとまずいケースもある。

ほかにも star が付いたときに、どれに対して付いているのか不明瞭になるし、単一のリポジトリなら付いたかもしれない star が付かない気もする。

誤算だったのは、最初の想定では「 rust-sandbox で試したあと、良いものは別リポジトリとして正式に書き直す」ような運用をイメージしていたはずなんだけど、そうはならなかったこと。切り出すのは面倒だ。履歴も消えるし、既に動いている CI 設定を直す必要もある。 rust-sandbox に留まる力が働く。小さいものだけのはずが自然と育って大きくなっても延々とそこから切り出さなくなる。

新規につくった感が弱くなるのも良くないように思う。

リポジトリの作成とコミットの作成では前者のほうがより大きい (?) イベントだ。新規のパッケージ追加がコミットの作成に留まってしまう。外から見たときには延々と rust-sandbox を触っている。

たとえば nostr 関連のものをつくっていても GitHub プロフィールページに表示されるリポジトリ名は bouzuya/rust-sandbox だ。仮に nostr に興味のある人がぼくのプロフィールページを見たとき nostr 関連のものへアクセスする可能性は減るだろう。 rust-sandbox にアクセスしないといけないし、そこからノイズとなっている他のパッケージをすり抜けて nostr 関連のディレクトリを見つけてはじめてアクセスできる。ステップが増えるのだからアクセスしづらくなる。

まとめる。だいたい次のような感じ。

  • rust-sandbox は bouzuya が Rust で書いたいろいろなものの置き場となっているリポジトリ
  • 転職活動を通じて rust-sandbox という「見せ方」が悪いと感じた
  • リポジトリを指す場面があり、個別のものが rust-sandbox としてしか見えなくなる
  • 個別のものの名前変更が楽で、気軽にはじめられる
  • star が付いたとき何に対して付いたのか不明瞭になる
  • 個別のものを別リポジトリに切り出すのが面倒になる
  • 個別のものの新規の作成が rust-sandbox の更新になることでつくった感が弱まる

bouzuya/nostr-likes を書いていて思った以上に relay から返ってこないことって多いなと思っている。複数の relay につなぐべきなんだろうな……。

あとはローカルでのキャッシュのために relay をローカルで起動したほうが良いのかもしれないと思っている。


ARC128 : 大和証券プログラミングコンテスト2021(AtCoder Regular Contest 128) の A を解いた。

use proconio::input;

fn main() {
    input! {
        n: usize,
        a: [usize; n],
    };
    let mut ans = vec![0_usize; n];
    for i in 0..n - 1 {
        if a[i] > a[i + 1] {
            ans[i] ^= 1;
            ans[i + 1] ^= 1;
        }
    }
    for a in ans {
        println!("{}", a);
    }
}

今日のコミット。