「出来事」カテゴリーアーカイブ

RUST勉強中、4/23の積み上げ

前回の続き。

逆ポーランド記法の計算処理を実装します。

use clap::Parser;
use std::fs::File;
use std::io::{stdin, BufRead, BufReader};

#[derive(Parser, Debug)]
#[clap(
    name = "My RPM program",
    version = "1.0.0",
    author = "Your name",
    about = "Super awesome sample RPM calculator"
)]
struct Opts {
    #[clap(short, long)]
    verbose: bool,

    #[clap(name = "FILE")]
    formula_file: Option<String>,
}

struct RpnCalculator(bool);

impl RpnCalculator {
    pub fn new(verbose: bool) -> Self {
        Self(verbose)
    }

    pub fn eval(&self, formula: &str) -> i32 {
        let mut tokens = formula.split_whitespace().rev().collect::<Vec<_>>();
        self.eval_inner(&mut tokens)
    }

    fn eval_inner(&self, tokens: &mut Vec<&str>) -> i32 {
        let mut stack = Vec::new();

        while let Some(token) = tokens.pop() {
            if let Ok(x) = token.parse::<i32>() {
                stack.push(x);
            } else {
                let y = stack.pop().expect("invalid syntax");
                let x = stack.pop().expect("invalid syntax");
                let res = match token {
                    "+" => x + y,
                    "-" => x - y,
                    "*" => x * y,
                    "/" => x / y,
                    "%" => x % y,
                    _ => panic!("invalid token"),
                };
                stack.push(res);
            }

            if self.0 {
                println!("{:?} {:?}", tokens, stack);
            }
        }

        if stack.len() == 1 {
            stack[0]
        } else {
            panic!("invalid syntax")
        }
    }
}

fn main() {
    let opts = Opts::parse();

    if let Some(path) = opts.formula_file {
        // ファイルから読み出す
        let f = File::open(path).unwrap();
        let reader = BufReader::new(f);
        run(reader, opts.verbose);
    } else {
        // 標準入力から読み出す
        let stdin = stdin();
        let reader = stdin.lock();
        run(reader, opts.verbose);
    }
}

fn run<R: BufRead>(reader: R, verbose: bool) {
    let calc = RpnCalculator::new(verbose);

    for line in reader.lines() {
        let line = line.unwrap();
        let answer = calc.eval(&line);
        println!("{}", answer);
    }
}
$ cargo run -- -v
   Compiling samplecli v0.1.0 (/home/taki/rust/samplecli)
    Finished dev [unoptimized + debuginfo] target(s) in 0.76s
     Running `target/debug/samplecli -v`
1 1 1 + +
["+", "+", "1", "1"] [1]
["+", "+", "1"] [1, 1]
["+", "+"] [1, 1, 1]
["+"] [1, 2]
[] [3]
3

電動歯ブラシ、導入。

ついに我が家にも電動歯ブラシを導入しました。

歯ブラシの部分を歯と歯茎の間に当ててスイッチオンで、

振動で歯を磨いてくれます。

あとは、なでるようにブラシを移動させていくだけ。

手動だと、腕が疲れたり、力が入りすぎて歯を痛めたりするので、

力の加減もしやすい、というメリットもあります。

それが6000円程度の投資でできるとは。

ほー。

もっと早く使い始めても良かったな。

このPCは相当ヤバイ物だったのか?

こちらの記事で紹介した、

楽天市場で購入した中古のノートPC。

吉田製作所のチャンネルがこんな動画を出していたんですが、

たぶん、今回購入したのも、この手のヤツです。

ただ、オイラの場合は、メモリ増設のSSD換装したものなので、

動画の中でも、パーツを交換すればある程度は快適に動くとのことでした。

そもそも、このショップの出品物は価格帯によってスペックが違いますからね。

吉田さんの購入したのは最低ランクのものなのでしょう。

オイラのは13800円のものがベースですからね。

CPUも第四世代のCore i3ですからね。

だいたいこのあたりの世代のものは、まだまだ職場でも現役だったりするので。

そこら辺も見込んだ上で、オイラは購入しました。

もちろん後悔していません。

あ、いや、楽天カードが限度額に達した・・・

どうせ歩くならポイントを貯めよう。

ダイエットのために、週末はできるだけ歩こう、としているのですが、

どうせ歩くなら、歩いた分だけポイントになる、というアプリもありまして、

こういうのは積極的に活用した方が良いです。

運動のモチベーション維持にもなりますしね。

トリマ

移動した距離と歩いた歩数がタンクに貯められ、ポイントに交換することができます。

広告を見ればさらにポイントが。

貯めたポイントは電子マネーなどに交換できます。

実際オイラもこのポイントでGoogle Playギフトに交換してゲームに使ったりしています。

招待コードあります。招待コード【0TbwTN8Ct】

dヘルスケア

こちらはドコモ提供のヘルスケアアプリです。

このアプリはデイリーミッションが用意されていまして、

そのミッションをクリアすると、dポイントが貰えます。

オイラは有料版を使用しているのですが、有料版の方がポイントが貯まりやすいらしい。

獲得したポイントはそのままお買い物に使用することができるので、かなりお得です。

【KEYKEEPA】購入しました。

こちらの記事で紹介したカッコイイキーホルダー

買いました。

一番安いヤツです。

デフォルトで栓抜きも付いています。

オプションでUSBメモリやナイフも装着できるみたい。

こんな感じで鍵を取り付けます。

デフォの状態でも沢山の鍵を取り付けられそうです。

一番安いクラシックモデルでしたが、かなりしっかりできていて、しかもジャラジャラしません。

これだよ、欲しかったのは。

言い買い物した!

サブPC、購入

サブ機が欲しいと思ったのは、

メインPCをアップグレードさせようとして、自作PCのパーツを購入したものの、

見事に失敗し、メインPCも使えなくなってしまった時。

メインPC(Windows)はお仕事でも週末に使用するので、

(会社に週報とか提出するのにExcelが必要)

Windows PCが無いとお仕事に支障が出てしまうのです。

で、そのときは運良くLinux PCがあったので、

急遽そちらのPCでインターネットに接続し、

Windows PCを発注することができたのですが、

それでも少しの空白期間ができてしまうので、

そうならないように、サブ機を用意するべし、と思ったわけです。

とりあえずWindowsやOfficeが使えればいいやーでもそれなりにサクサク動くスペックが欲しいなぁ

と思って、探してみたところ、

楽天市場でこんなのを見つけました。


機種はお任せですが、ある程度のスペックもカスタマイズできる中古PCを購入することができます。

ここで、メモリを8GB、ストレージをSSD256GBに換装してもらう形で発注しました。

届いたのは富士通のPCでした。

Lenovoじゃなくて良かった。

初期状態ですぐに使用できる状態になっていたので、

アカウント連携してセットアップ。

当然ながらWindows11の要件を満たしていません。

🤔Windows10のサポートが切れたら、会社のPCもスペックアップしてくれるのだろうか

少し画面が窮屈だと思ってたら、解像度がフルHDより少し小さかったです。

でも、Officeもサクサク動くので、サブPCには十分です。

あくまでもサブ機なので、使用する機会は少ないかもしれませんが、

ノートPCなので、外で作業するのにも使えると思います。

良い買い物をしたと思います。

【デリバリー】薩摩地鶏と地酒のお店 地鶏亭仁

ネタが無くなってきたので、デリバリーの写真を上げます。

ちなみに、オイラのデリバリーのエリアは札幌市白石区、南郷通付近です。

こちらは地鶏のたたき(たまり醤油)

少しレアです。

一般的に鶏肉の生食は危険なのですが、どこかで免疫力の弱い方は避けてくださいって書いてあった気がする。

スーパーの鶏肉では絶対真似するなよ。

オイラは特に腹痛とかなかったので、セーフです。

もも焼き(塩)です。

全体的に鶏皮の部分がコリコリして、自分はあまり好きでは無かった・・・。

まぁ、こういう日もあるさ。

【悲報】新人君が現場を去ります。

まだ現場に入ってきて間もないのですが、

本人のスキルが不十分と判断され、現場を去ることになりました。

言いたいところは沢山あるのですが、

大きく分けて2つかな。

プログラミング初心者だった

自分が聞いた話では、

開発未経験ではあるものの

スクールでJavaのコーディングを学んでいたという話だったんですが、

実際蓋を開けてみると、プログラミングも勉強中で、

しかもテキストだけ読んで、実際に組んだことがない、とのこと。

実際現場でもコードが組めず、現場を困惑させていました。

学ぶ姿勢が見られない

まず最初にシステムや開発環境についての説明を行うのですが、

それらを全く理解していない。

一生懸命メモを取っているのだけれども、

そのメモを生かせていない。

そして、自ら調べようともせず、指示が無ければ何もしていない、という始末。

何が分からないのかも分からないという状況なのだろうか。

とにかく、この状況が続くので、教える側の現場の負担も大きくなってきたという状況。

やっぱり、最低限のことはできて欲しい

まず、プログラミングは、コードぐらいは書けて欲しいし、

現場のシステムのこともきちんと理解してほしい。

まぁ、正直なところ、この状態では開発の現場に入ったとしても何もできないということ。

使い物になるためには、社内での教育が必要だろう。

ただ、そのためのコストをかけることができるかどうか、というのが、小さい会社の問題ではある。

そして、こんなド素人を現場に送り込むのは止めて欲しい。

という愚痴でした。

「20万本のAVを見放題にしてなおかつお小遣いを稼ぐ方法」を読んでみた。

Kindle Unlimitedの対象だったので、読んでみた。

やり方をまとめると、こう。

  • FANZAの「見放題ch デラックス」に登録する
  • DMMアフィリエイトに登録する
  • FANZAでAVを見る
  • ブログにAVのレビュー記事を書いて、アフィリエエイトリンクを設置する

かなりざっくり書きましたが、

この本の中ではレビュー記事の書き方のコツとかも書いてありました。

ただし、見放題ch デラックスには月額9000円かかりますので、

やるかやらないかは各自の判断になります。

まぁ、何をするにしても、ある程度投資は必要なのね。

【日記】精神的に疲れた日は

やっぱり焼肉とお酒でしょう。

行きつけのお店です。

そして、この近所にロールケーキの自販機があるんですよ。

焼肉を食べて、スイーツを購入して食べるという導線ができました。

しかし、お昼にお酒飲むと、一日損した気持ちになるのはなぜだろう。

もう年なのか・・・?