• 0 Posts
  • 103 Comments
Joined 2 years ago
cake
Cake day: July 31st, 2023

help-circle


  • Hosting your own mail server for example is probably not worth it for most people.

    If the homelab involves using an IP address under a residential internet service, that quickly goes from “not worth it” to “literally impossible”.

    Unless you’re willing to set it up so SMTP and IMAP are tunneled through a VPS that you also pay for, the story becomes:

    Why can’t I receive my test mail?
    Oh, the ISP blocks inbound SMTP connections.

    Why can’t I access my mailbox from outside my home?
    Oh, they also block IMAP and POP.

    Why do my outgoing emails all end up in the spam folder?
    Oh, most email providers insta-spam anything from residential IPs ranges.

    And then, even if it’s not a homelab, DIY email hosting is:

    Oh my god, there’s so much spam.
    I need to set up more aggressive filters.

    Why did this important email get filtered?
    Oh, I need to make the spam filter less aggressive.

    Why are my outbound emails being marked as spam?
    Oh, I need to set up DKIM and SPF.

    Why is it still being marked as spam?
    Wait, some providers require reverse lookup hostname of the mailserver to match the sender name? Fuck.

    Oh, ok, now my server or its IP block got added to a spam list.
    How do I get removed from the spam list?
    Painfully. Very painfully.

    And so on.

    It’s really not worth it.




  • Does Steam Deck not have rpm-ostree (or an arch equivalent since RPM is fedora-specific)?

    Steam Deck has a custom solution involving an A/B partition scheme of immutable btrfs filesystems and overlayfs for layering changes on top of that.

    Also, what about distrobox?

    If there’s a way to install containerization software with Flatpak, maybe. Docker isn’t available out of the box, though.

    I haven’t really tried to do anything package manager-related on my Deck, so I’m going on what I know from Bazzite, but there are several ways to install non-flatpak software on it. In fact, I even installed yay on an Arch distrobox, and I can install things from the AUR (as well as the official repositories).

    You can use pacman, but it’s volatile and requires making intentional changes to restore its functionality.

    The first option is to disable the read-only flag on the root filesystem, then set pacman back up so it can pull packages. Whenever the root filesystem image is updated, you’ll lose the changes, though.

    The second option is to add an overlayfs to persist the changes in a different partition or inside a disk image on the writable storage. There was a tool called “rwfus” that did this, and it worked well enough if you were careful. If you ended up upgrading a package that came installed on the base image, though, it would end up breaking the install when the next update came around.

    With all the caveats, when Valve made /nix available as a persistent overlay a couple of years ago, I just bit the bullet and learned how to use Nix to install packages with nix-env -i.




  • Somehow I feel like mentioning Nix and NixOS is the new ‘I use arch btw’.

    “I use Nix btw”

    Rolls off the tongue in the same way. And, honestly, “I use Arch btw” just isn’t the same hipster know-it-all contrarian meme that it used to be. It has a graphical installer now, and a popular retail device (the Steam Deck) comes with a user-friendly derivative of it installed out of the box.

    Meanwhile, NixOS has a huge learning curve that’s off-putting to most non-technical users and even Linux hobbiests. I mean, really—having to configure everything through a functional programming language masquerading as a configuration file format? That’s just the kind of thing that would attract masochists and pedants!

    I use Nix btw.




  • Look, I’m not saying the wheel is wrong. It rotates, but what if two people try to turn the wheel at the same time, in opposite directions?

    What if—instead of risking misuse of the wheel—we have a my_wheel::Wheel, which only one person can rotate at any given time? The multiverse could enforce this safety at compile time by making it impossible for there to exist a universe where two people both think they own the right to rotate the wheel. In fact, it could even make it impossible for me to lend out the wheel to more than one person at a time.

    And, maybe… we could make the wheel even better. Cars rest on top of wheels, sure. But what if I wanted to make a car that rests on top of other cars? If we rotate the super-car’s wheels, we don’t want to make the sub-cars flap around—we want the sub-car wheels to rotate. It would be more future-proof to make a Wheel trait, then to make RubberTyre implement Wheel. Then, if we ever needed to make cars into wheels, we could have them also implement Wheel—but delegate the responsibility of rotating to their own wheels.

    In fact, we should make it into a whole library. Our other projects could need wheels. Mr. Mittens might need them eventually!


  • It’s the same for a lot of people. Beginners are still learning good practices for maintainable code, and they’re expected to get better over time.

    The reason people are ragging on PirateSoftware/Jason/Thor isn’t because he’s bad at writing code. It’s because he’s bad at writing code, proclaiming to be an experienced game development veteran, and doubling down and making excuses whenever people point out where his code could be better.

    Nobody would have cared if he admitted that he has some areas for improvement, but he seemingly has to flaunt his overstated qualifications and act like the be-all, end-all, know-it-all of video game development. I’m more invested in watching the drama unfold than I should be, but it’s hard not to appreciate the schadenfreude from watching arrogant influencers destroy their reputation.






  • std::string doesn’t have a template type for the allocator. You are stuck using the verbose basic_string type if you need a special allocator.

    But, of course, nobody sane would write that by hand every time. They would use a typedef, like how std::string is just a typedef for std::basic_string<char, std::char_traits<char>, std::allocator<char>>. Regardless, the C++ standard library is insanely verbose when you start dropping down into template types and using features at an intermediate level. SFINAE in older versions of C++ was mindfuck on the best of days, for example.

    Don’t get me wrong, though. I’m not saying Rust is much better. Its saving grace is its type inference in let expressions. Without it, chaining functional operations on iterators would be an unfathomable hellscape of Collect<Skip<Map<vec::Iter<Item = &'a str>>>>