27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

カフェでプログラミングしてる風(でも何もやってない)Rust(クソ)コード

Posted at

はじめに

私はキラキラ✨エンジニア✨!
うふふ!今日はどんなアートを作ろうかしら!

みたいなノリになりたいときってあるかと思います.

この記事は上の記事のパクオマージュです.

今日は、カフェでMacを使っている時に周りから
「お,この人Macで何かやってるな.何か難しそうな事をしているからエンジニアなんだな.素敵だな.」
と思わせる素敵な(Kuso)プログラムを用意しました.

ぜひ,おしゃれカフェで使ってみてください.

Dependencies

rand = "0.8.3"
indicatif = "0.15.0"

ターミナルで実行すればカッコイイRustコード

use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
use rand::{rngs::StdRng, Rng, SeedableRng};
use std::{
    sync::{Arc, Mutex},
    thread,
    time::Duration,
};

const FAKE_PROGRAMS: [&str; 16] = [
    "cargo make",
    "nginx daemon",
    "tsc -",
    "stack run",
    "nohup python main.py",
    "cURL fetching",
    "g++ -O3 -std=c++11",
    "nvidia-smi",
    "openssl --rand",
    "rustup",
    "cryptocurrency",
    "awesome dungs",
    "owo",
    "docker-compose",
    "npx create-next-app",
    "pipenv install",
];

fn main() {
    let style = ProgressStyle::default_bar()
        .template("[{elapsed_precise} {bar:60.green/blue}] {pos:5}/{len:5} {msg}")
        .progress_chars("##>-");

    let rng = Arc::new(Mutex::new(StdRng::from_seed([42; 32])));

    let bars = MultiProgress::new();

    for _ in 0..16 {
        let pb = bars.add(ProgressBar::new(10000));
        pb.set_style(style.clone());

        let rng = Arc::clone(&rng);
        let _ = thread::spawn(move || {
            let mut ctr = 0;
            while ctr < 10000 {
                let diff = rng.lock().unwrap().gen_range(10..100);
                ctr += diff;
                pb.inc(diff);
                thread::sleep(Duration::from_millis(rng.lock().unwrap().gen_range(5..10)));
                let msg = FAKE_PROGRAMS[rng.lock().unwrap().gen_range(0..16)];
                pb.set_message(msg);
            }
            pb.finish_with_message("Done!");
        });
    }
    bars.join().unwrap();
}

indicatifはRustでプログレスバーを作成するときに重宝するクレートです.これを使うことで,それっぽいプログレスバーを表示することができちゃいます!

公式の例でもYarnっぽいなんもしてないプログレスバーを表示する例があります.

つまりこれは何もしてないカッコイイエンジニアへの特急券ともいえるクレートでしょう!使うに越したことはない!!

そしてせっかくのRustなわけですし,多スレッドで動かしてみたいわけじゃないですか.同時に処理しているプログレスバーが$m$本ある際,プログレスバーのそれっぽさは$m^2$に比例するという関係がある気がします.

このプログラムでは16本のプログレスバーが同時に動きますのでそれっぽさ256倍です.嬉しいですね!

更には,画面右側にはなんかそれっぽい名前のプログラムが表示されています.こりゃきっとなんかしているにきまってます!!

さて肝心の実際に動かした例ですが以下のようになります.

7.gif

こりゃ間違いなくなんかしてるに決まってます!
自己肯定感爆上げですわ!!

おわりに

僕はおうちにこもってWindowsのデスクトップでシラフでこの記事を書きました.

イケイケ度が足りない環境で執筆してしまったことをここにお詫びいたします.

さいごに

全く同名で先を越されていた!!

27
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?