Hi, i’m into programming, sexual transmutation and psychedelics!

  • 41 Posts
  • 127 Comments
Joined 2 years ago
cake
Cake day: June 13th, 2023

help-circle



  • dontblinkOPtoSelfhosted@lemmy.worldHDD randomly unmounting
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    30 days ago

    Thank you so much for taking the time to answer!

    I’m not sure how to get the N from session history, nor how to check my session history…

    but this might be some relevant output I’ve found with journalctl -k -b

    Nov 21 16:08:18 rpi kernel: usb 2-2.1-port2: cannot reset (err = -110)
    Nov 21 16:08:19 rpi kernel: usb 2-2.1-port2: cannot reset (err = -110)
    Nov 21 16:08:19 rpi kernel: usb 2-2.1-port2: Cannot enable. Maybe the USB cable is bad?
    
    Nov 21 16:41:57 rpi kernel: I/O error, dev sdb, sector 2466347032 op 0x0:(READ) flags 0x3000 phys_seg 1 prio class 2
    Nov 21 16:41:57 rpi kernel: EXT4-fs warning (device sdb1): ext4_dx_find_entry:1796: inode #75497968: lblock 42: comm apache2: error -5 reading directory block
    Nov 21 16:41:57 rpi kernel: EXT4-fs error (device sdb1): ext4_journal_check_start:83: comm apache2: Detected aborted journal
    Nov 21 16:41:57 rpi kernel: Buffer I/O error on dev sdb1, logical block 0, lost sync page write
    Nov 21 16:41:57 rpi kernel: EXT4-fs (sdb1): I/O error while writing superblock
    Nov 21 16:41:57 rpi kernel: EXT4-fs (sdb1): Remounting filesystem read-only
    
    

    The output is from yesterday, when the device stopped working correctly.

    I’m not familiar with linux kernel, but I can see there is definitely something wrong…

    The HDD (old) is attached to a USB hub (new), I tried switching port of the hub but the same issue happened again, if I try to mount it with sudo mount /mnt/2tb, it says it is already mounted:

    mount: /mnt/2tb: /dev/sdb1 already mounted on /mnt/2tb.
           dmesg(1) may have more information after failed mount system call.
    
    

    sudo dmesg | grep sdb gives back:

    [147776.801028] I/O error, dev sdb, sector 77904 op 0x0:(READ) flags 0x3000 phys_seg 1 prio class 2
    [147776.815452] EXT4-fs warning (device sdb1): htree_dirblock_to_tree:1083: inode #2: lblock 0: comm ls: error -5 reading directory block
    [147796.731734] sdb1: Can't mount, would change RO state
    



  • Thank you so much, You are taking a lot of effort to answer my doubts and I really appreciate!

    So essentially match can return different types, but of course I have to specify it in the function signature, wheter using an enum or other ways, this makes sense! This was a missing piece in my puzzle, I didn’t consider the fact that the match return here was the function return type as well, and i had encoded -> String as return type.


  • Hi! First of all thank you so much for the detailed explanation!

    What I’m trying to do is scraping some content.

    Yes I’m trying to return all links (maybe in a vector), I have a list of elements (Select, which actually is scraper::html::Select<'_, '_>) which contain essentially html nodes selections, and I would like to grab each of them, extract the actual link value (&str), convert it into an actual String and push it firstly into a vector containing all the links and then in an istance of a struct which will contain several datas about the scraped page later.

    I was trying to use a for loop because that was the first structure that came to my mind, I’m finding it hard to wrap my head around ownership and error handling with rust, using the if let construct can be a good idea, and I didn’t consider the use of break!

    I also managed to build the “match version” of what I was trying to achieve:

    fn get_links(link_nodes: scraper::html::Select<'_, '_>) -> Vec<String> {
            let mut links = vec![];
    
            for node in link_nodes {
                match node.value().attr("href") {
                    Some(link) => {
                        links.push(link.to_string());
                    }
                    None => (),
                }
            }
    
            dbg!(&links);
            links
        }
    

    I didn’t understand that I had to return the same type for each of the Option match arms, I thought enum variants could have different types, so if the Some match arm returns (), also None has to do the same…

    If I try with a simpler example I still cannot understand why I cannot do something like:

    enum OperativeSystem {
                Linux,
                Windows,
                Mac,
                Unrecognised,
            }
    
            let absent_os = OperativeSystem::Unrecognised;
            find_os(absent_os);
    
            fn find_os(os: OperativeSystem) -> String {
                match os {
                    debian => {
                        let answer = "This pc uses Linux";
                        answer.to_string()
                    }
                    windows10home => {
                        let answer = "This pc uses Windows, unlucky you!";
                        answer.to_string()
                    }
                    ios15 => {
                        let answer = "This pc uses Mac, I'm really sorry!";
                        answer.to_string()
                    }
                    _ => {
                        let is_unrecognised = true;
                        is_unrecognised
                    }
                }
            }
    

    match is much more intuitive for a beginner, there’s a lot of stuff which go under the hood with ?








  • Molto figo, io ho un raspberry pi 4 con sopra Nextcloud, Calibre Web, Pihole e altro, però ahimé con la connessione terribile che mi ritrovo posso usarlo praticamente solo in casa escludendo Calibre, inoltre ho una paura terribile di esporre il mio server ad attacchi.

    Non sono ancora riuscito a settare un reverse proxy per cui uso delle porte su Apache e ho fatto port forwarding per quanto riguarda Calibre, con un dynamic dns sul router collegato ad un nome di dominio.














  • I mean theoretically if you are hosting your own chat server, for example on Matrix, you can easily make all the chats unaccessible from the clients by issuing a command to shutdown your server or simply the chat server service if there’s no content cached locally.

    I think you can do this pretty easily with a raspberry pi by connecting via ssh…

    Just use a shell script that changes the static ip to something else after the command to shutdown the service/wipe out the data (depending on what your goal is) has been issued, or use a vpn or something like that if possible, because anyone issuing the command would need to know your server ip.

    And issuing a command by ssh to a remote server both from smartphone or pc should be as easy that you can actually build a very small app for that, or use some app that creates shortcuts that directly connects and issue custom commands.

    That way you are forced to give people your new ip every time chats become unaccessible/deleted and someone can’t connect back even if wanting to without talking to you, unless you decide you can use the older ip for whatever reason.

    Of course not using your real ip but using some service like a vpn or proxy (or tor?) would be much better here, but i don’t really know how.

    That can give you full power on the chat history and create the said “panic button” for every client involved.