Skip Navigation

Posts
6
Comments
380
Joined
3 yr. ago

  • they discover RegEx and try to use it for email input validation

    It actually can be done: Mail::RFC822::Address: regexp-based address validation

    It's really simple:

     
        
    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
    \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
    ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
    \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
    31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
    ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
    (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
    (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
    |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
    ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
    r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
     \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
    ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
    )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
     \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
    )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
    *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
    |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
    \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
    \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
    ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
    ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
    ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
    :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
    :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
    :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
    [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
    \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
    @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
    (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
    )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
    :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
    \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
    \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
    ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
    :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
    ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
    .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
    ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
    [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
    r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
    |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
    00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
    .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
    ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
    :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
    (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
    \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
    ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
    ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
    ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
    ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
    \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
    ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
    ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
    :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
    \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
    [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
    ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
    ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
    ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
    ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
    @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
     \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
    ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
    )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
    (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
    \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
    \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
    "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
    *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
    +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
    .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
    |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
    ?:\r\n)?[ \t])*))*)?;\s*)
    
      
  • Would spamming low effort comments to fill a quota then fall under the spam bit, not necessarily self promotion bit?

    Possibly, but there's equally gray area that what counts as low effort spamming and what actually contributes to the conversation. For example I've replied to comments "I'm using X to do Y" with "I'm using X too and I'm happy with it" to give an opinion to possible solutions. That kind of comments are easy enough to throw out and, if the "10% rule" is interpreted strictly, it isn't really obvious if they should be considered as "improving your ratio" or as a part of actual conversation.

  • I disagree that it would be the same than no rule at all, in my opinion that gives a pretty clear position on what's allowed and what's not without setting any strict limits so there's some room for interpretation for community/mods to act.

    Maybe rephrasing a bit helps: "This community is not an advertising platform. Self promotion is allowed only from active members of this community. Excessive promotion will result on post removals and/or ban from the community."

    What I'm afraid is that if there's a strict rule then someone will argue that "only 9,87% of my posts are promotion, I don't deserve a ban" even the rest of their content has little to no value for the conversation. And, since it'll be a rule for the community, I personally think it should apply as it's written, so it should have some kind of option to weed out smartasses trying to game the system in place.

    But I'm not likely to promote anything around here, so for me it doesn't really matter, just trowing out my thoughts about the matter.

  • I worry a bit that its getting unwieldy, so feel free to suggest options to clean up the language a bit.

    I would just keep it simple: "Self promotion for your product is allowed, but this is not an advertising platform. Be sensible and participate to community. Abuse will result in post removal."

    I don't think it really helps to place any arbitary limit as it might just result on spamming low-effort comments so that your "quota" stays under the 10% rule and also posting about your fantastic FOSS project daily could be equally annoying. That 10% rule could be useful when deciding if something should be removed and obviously free projects should have more relaxed "limits", but in general what counts as abuse can be decided by community feedback.

  • I just checked this today too. A year ago in June I bought two WD Blue 2,5" SSDs for ~165€, shipping included. Today the very same drive is 213€/each at the same store, before shipping.

  • Move existing messages from gmail account to new one, set up a forwarding rule from gmail to your new address for everything, change accounts as they show up. Maybe a bit longer route, but far easier to swallow since you don't need to go trough all the things in one go nor worry if you've missed something.

  • Funnily enough, there's pretty much the same mindset in our team, but towards USA models (and tech in general). There's a non-zero risk that either EU decides that USA products aren't trustworthy or that the orange man decides to cut off European companies from the services (which kinda already happened with Anthropic). And, as we're in Europe, there's very similar threat models for Chinese services.

  • Many also do not care, unfortunately.

    Meh. It's a work thing and corporate bobbleheads say I need to use it. Then they'll pay for me to wait for their mandated things to start/connect/work/do whatever. It's mostly usable enough to get my shit done, it randomly shows whatever status on my account which I couldn't care less. And the moment I log off I don't care if the place is literally on fire.

    It's after all just work and nothing more. There are way more important things in life.

  • Finland too. Government just sends a letter (digital today, used to be an actual letter) which says 'here's our info about your income and other shit, go to our website if you need to correct anything, if all is good you'll receive invoice/returns for X euro"

  • Find two more selfhosters and they will criticize both of us!

    Absolutely. However I'd argue that some BSD variant is at the other end, not Gentoo, so there's at least some critics to you ;).

    I'm running proxmox and (mostly) Debian on top of that, and I'm sure that there's someone thinking I'm doing things the wrong way.

    With Windows Servers I think the bigger problem is that there's way less people running things on top of it, so there's less knowledge about problems and solving them. However, many of us are on corporate IT jobs too and thus have to work with Windows, so that might somewhat cancel out the difference in popularity.

  • Nintendo has been doing this for the last 30 years (at least, likely way longer), I doubt they're stopping now.

  • You need a suitable welder for that with pulse feed so that it kinda-sorta acts like square wave AC. With your average hobbyist garage welder it's going to be a real pain in the ass.

  • welding aluminum requires TIG. It’s harder and more specialized.

    You can weld aluminium with MIG just fine. It is indeed way more difficult than normal steel and not every car shop has skills nor equipment for it.

  • In here practically all banks use their own app for MFA. They have options to work without one, but that would be way more inconvenient than allowing google on my phone. Also, moving mortage from one bank to another is pretty expensive task. Also the loan terms would be worse now than what I got when we bought the house.

  • Digital euro should/could/might be in wide use by 2029. But as with anything involving European burecraucy, who knows.

  • Also there's like 7 places you can actually use that. I'd get rid of my cards too immediately if there was an actual, viable, european alternative. I pretty much have to use Google on my phone anyways so that my current banking apps and other stuff work reliably, so at least for me it's smaller and better known evil than Visa.

  • In the grand scheme of things the only thing on my server stack that's really worth anything is immich. The rest will have very little value to anyone once I'm gone. Plan is to create printed books from the photos and those should stay accessible for the future generations, our archive just needs a ton of work on creating those photos and possibly adding descriptions on who's on the pictures and when they're taken.

    I don't really plan for ww3 nor solar flare frying half of the planet, but one thing that's a real problem is that if something happens to myself. My wife or kids don't know how to manage/access a majority of the stuff there is even if their everyday digital life is using network and services in it I've built. They'll be just fine without pihole or jellyfin, but data in immich/nextcloud is valuable and bus factor for the digital environment is pretty low.

    I should at least verify that all server passwords are on my bitwarden vault and set up dead mans switch on that. Then they can at least get someone to pull the data out of the systems or even hire someone to maintain them. Best option would be if one of the kids would learn the ropes, but so far it doesn't seem like they're interested on anything like that.

  • Oh, no. They didn't scrap the code. It's there, waiting to be deployed again with an obscured name once the dust settles a bit.

  • Obviously there's a ton in successful email hosting since it's not just configuring few services. Proper DNS-records and privilege controls are mandatory, you need to occasionally clear up your domain/IP from spamlists (specially at the start) and single mistake can ruin your DNS reputation quite quickly which then takes time to build back.

    But it's still perfectly doable and, when you have proper knowledge on how the whole circus actually runs, not too difficult either. Only problem is that there's no longer money on just email hosting since cloud hosting offers much more than just emails for the price a small gamer can't just compete with. At least around here.