• 2 Posts
  • 112 Comments
Joined 2 years ago
cake
Cake day: June 12th, 2023

help-circle

  • .for_each(|((_, _, t), (_, _, b))| { ... }
    

    This is actually fairly similar to what C# has.

    This is a closure syntax:

    | arguments | { calls }
    

    In C#, the closest is lambda expressions, declared like this:

    ( arguments ) => { calls }
    

    Parentheses are tuple deconstructors. In C# you have exactly the same thing. Imagine you have a method that returns a two element tuple. If you do this:

    var (one, two) = MethodThatReturnsATuple();
    

    You’ll get your tuple broken down automatically and variables one and two declared for you.

    First of all, I’m using .zip() to pair the rows of the picture by two, that returns a tuple, so, I have to deconstruct that. That’s what the outer parentheses are for. The pixel enumeration stuff I’m using returns a tuple (u32, u32, &Rgba<u8>) first two values are x and y of the pixel, the third one is a reference to a structure with color data. I deconstruct those and just discard the position of the pixel, you do that with an underscore, same as C#.

    I’m not that far into learning myself, but I’m not a textbook learner at all. Poking around opensource projects and wrestling with the compiler prooved to educate me a lot more.



  • I gladly present you this jank.

    You might need these to compile:

    cargo add image
    cargo add clap --features derive
    

    And the jank itself:

    Some Rust code
    use std::path::PathBuf;
    
    use clap::Parser;
    use image::{ imageops::{self, FilterType}, ImageReader };
    
    #[derive(Parser)]
    struct Cli {
        path: PathBuf,
        #[arg(short = 'H', long, default_value_t = 30)]
        height: u32,
        #[arg(short, long, default_value_t = 0.4)]
        ratio: f32,
        #[arg(short, long, default_value_t, value_enum)]
        filter: Filter,
    }
    
    #[derive(clap::ValueEnum, Clone, Default)]
    enum Filter {
        Nearest,
        Triangle,
        Gaussian,
        CatmullRom,
        #[default]
        Lanczos3,
    }
    
    fn main() -> Result<(), Box<dyn std::error::Error>> {
        let args = Cli::parse();
        let filter = match args.filter {
            Filter::Nearest    => { FilterType::Nearest },
            Filter::Triangle   => { FilterType::Triangle },
            Filter::CatmullRom => { FilterType::CatmullRom },
            Filter::Gaussian   => { FilterType::Gaussian },
            Filter::Lanczos3   => { FilterType::Lanczos3 },
        };
        let img = ImageReader::open(args.path)?.decode()?;
        let original_ratio = img.width() as f32 / img.height() as f32;
        let width = ( args.height as f32 / args.ratio ) * original_ratio;
        let out = imageops::resize(&img, width as u32, args.height * 2, filter);
        let mut iter = out.enumerate_rows();
        while let Some((_, top)) = iter.next() {
            let (_, bottom) = iter.next().unwrap();
            top.zip(bottom)
                .for_each(|((_, _, t), (_, _, b))| {
                    print!("\x1B[38;2;{};{};{};48;2;{};{};{}m\u{2584}", b[0], b[1], b[2], t[0], t[1], t[2])
                });
            println!("\x1B[0m");
        }
        Ok(())
    }
    


  • How did we arrive at networking? I feel like we are on two completely different pages.

    I was talking about your regular end user machines, what we usually call “desktop computers”. They are connected to the internet, but I don’t have any way to remotely login into those. And I have a single person per computer. There is no need to disable root passwords on these, seeing that Larry executed a command as root won’t provide any insight, I know that Larry is the only person who uses the machine. And it can complicate things in a sense that if Larry fatfingers his password three times and gets locked out, I’ll have to get into his filesystem somehow and remove tallies manually instead of just logging in as root and doing faillock --reset.


  • So, we are clearly talking about different environments here. Of course I would not have a password for root in an enterprize setting where you have a lot of different people managing one machine. But for your regular desktop computer with one user, it just complicates things needlessly without providing any benefits.


  • Maybe I’m a bit ignorant, but would it make much of a difference? Whether I authenticate with my own account to get root permissions or directly with root, I still have a string of characters which I use to get root priveleges on my machine. For a single (physical) user machine, that allows me to use a separate password for root. Should be better than using the same one twice, right?







  • I wouldn’t recommend vanilla Arch only because of the installation process. CachyOS that simplifies it is an extremely good pick for a person who already knows what a computer is, but wants to try a proper OS.

    Arch mostly got it’s reputation in the early days. Today some things are a lot easier to do on Arch than on other distros, especially because AUR exists. Also, it built one of the best wikis over all that time.