@maf@szmer.info
@maf@szmer.info avatar

maf

@maf@szmer.info

This profile is from a federated server and may be incomplete. Browse more on the original instance.

I wrote a breeding helper that finds the strongest Pals that can be obtained from a given initial Pal population. (mrogalski.eu)

I’ve been interested in finding the best Pal breeding strategies, which is pretty difficult because of gender limitations, passive skill inheritance & all sorts of special cases in the Pal breeding system. So I wrote this small utility to help me find the strongest Pals that I can breed & plan the optimal breeding....

maf,
@maf@szmer.info avatar

I just looked at github.com/cheahjs/palworld-save-tools and I guess it should be possible :) Palworld uses a format called gvas (part of Unreal Engine) which seems to be a zlib-compressed sequence of key/value pairs. When get some time to play again I’ll probably look into this. Entering this data through a website is pretty annoying! 😅

maf,
@maf@szmer.info avatar

Update: it was a bit of work but should be working now :) Drag the Level.sav file from %LOCALAPPDATA%PalSavedSaveGames onto the page and it should load all of your Pals automatically. Thanks for the tip!

maf,
@maf@szmer.info avatar

Unfortunately not. Somebody also asked me about finding the best fighters elsewhere. Like you say, it would be cool to be able to search for any trait combination. I think that would be more general and also easier to understand. Also requesting specific pals or using some custom scoring functions would be nice.

I’m still thinking how to do this. Maybe the user could write a snippet of JavaScript and the C++ side could call it to score the Pals… It would be pretty flexible but also rather difficult to use… I’m traveling so I can only theorize now. If you have any ideas, let me know. I’ll probably have some time to code tomorrow.

maf,
@maf@szmer.info avatar

You can try the “Advanced Search” below the predefined search presets now. It requires some understanding of JavaScript but should be fairly flexible. Unfortunately I didn’t figure out any JavaScript-free interface :/

maf,
@maf@szmer.info avatar

This restriction is meant to protect high definition content from being ripped by pirates. Open systems don’t offer the same DRM guarantees as the locked ones.

I’ve just released Gatekeeper 1.6.0. It’s a single executable that turns any Linux machine into a home gateway. Now with realtime traffic graphs, LAN autoconfiguration, full cone NAT and better looks. (github.com)

Hi all home network administrators :) Haven’t posted anything here since June, when I told you about Gatekeeper 1.1.0. Back then it was a pretty bare-bones (and maybe slightly buggy) DNS + DHCP server with a web UI with a list of LAN clients. Back at 1.1.0 Gatekeeper didn’t even configure your LAN interface or set up NAT...

maf, (edited )
@maf@szmer.info avatar

In terms of types of users I agree with what you’re saying but I also think that there are some shades of gray in between. There are people who love to tinker and would manually configure every service on their router, compiling everything from scratch, reading manuals, understanding how things work (they’ll probably choose dnsmasq, systemd-networkd, graphana over Gatekeeper). In my experience this approach is pretty exciting for the first couple of years & then gradually becomes more and more troublesome. I think Gatekeeper’s target audience are the people who would like to take ownership of their network (and have some theoretical understanding) but don’t want to fully dive into the rabbit’s hole and configure everything manually.

In terms of problem solved: I agree that Gatekeeper solves a similar problem. I think it’s different from those projects because it tightly integrates all of the home gateway functions. While this goes against the Unix philosophy, I think it creates some advantages:

  1. Possibility of cross-cutting features.
  2. Better performance (lower disk usage, lower RAM usage, lower CPU load).
  3. Seamless integration.

Functions of home routers are conventionally spread out over many components (kernel & a bunch of independently developed userspace tools) which talk to each other. Whenever we want to create a cross-cutting feature (for example live traffic graphs) we must coordinate work between many components. We need to create kernel APIs to notify userspace apps about new traffic, create userspace apps to maintain a record of this traffic & a web interface to display it. It’s difficult organizationally. In a monolith, where all code is in one place, such cross-cutting features can be developed with less friction.

From the performance point the conventional approach is also less efficient. The tools must talk to each other. Quite often through files (logs & databases). It’s wearing down SSDs & causing CPU load that could be otherwise avoided. A tightly integrated monolith needs to write files only periodically (if ever) - because all data can be exchanged through RAM.

From the complexity standpoint the conventional approach is also not great because each of the tools needs to know how to talk with the others. This is usually done by administrator, configuring every service according to its manual. When everything is built together as a monolith, things can “just work” and no configuration is necessary.

Edit: Please don’t be offended by my verbosity. From your question I see that you know this stuff already but I’m also answering to the fresh “selfhosted” audience :)

maf,
@maf@szmer.info avatar

I understand that your goal is to learn something new.

In my opinion ambitious, goal-oriented projects may either backfire or turn you into a legend. There will be many issues along the way and while they are all ultimately solvable, the difficulty may kill your motivation. Alternatively, if you manage to power through, then after some period of learning (potentially years) and keeping the fixation on specific problem you might emerge as a domain expert. Either way it’s a risky bet.

If I might leave some advice for newcomers it would be to learn how to perform some simple tasks & focus on creating projects that you’re confident can be built from things you already know. Over time you’ll increase the repertoire of tasks that you can perform, and therefore be able to build increasingly advanced projects.

maf, (edited )
@maf@szmer.info avatar

So you’re not remapping the source ports to be unique? There’s no mechanism to avoid collisions when multiple clients use the same source port?

Regarding port collisions. In Gatekeeper there are both - a Symmetric NAT & Full Cone NAT. Both are used in tandem. I didn’t mention the former before. Symmetric NAT takes precedence over Full Cone NAT when a connection has already been established (we observed the remote host and have a record of which LAN IP they’re talking to). You’re 100% correct that without Symmetric NAT there would be port collisions and computers in LAN would fight over ports. I actually started out with just the Full Cone NAT only (where collisions can happen) and used it on my network for a couple of weeks. It seemed to work in my home environment but I was a little worried about potential flakiness so I’ve implemented a backup mechanism eventually.

Full Cone NAT implies that you have to remember the mapping (potentially indefinitely—if you ever reassign a given external IP:port combination to a different internal IP or port after it’s been used you’re not implementing Full Cone NAT) (…)

Ah, I also recalled something like that! What you’re saying about NAT assignments being permanent & requiring multiple IPs to avoid collisions. I think there was a course at my university or some Cisco course that taught that… I haven’t been able to find any online sources that would confirm those definitions today but I also remember something along the lines of what you’re describing. I have no idea what happened with those terms. Maybe the “permanent assignments” don’t make much sense in wireless networks WiFi devices can appear and disappear at any time?

Edit: I found it - the proper term for this was “Static NAT” (as opposed to “Dynamic NAT” where the redirections expire).

(…) but not that the internal and external ports need to be identical.

Right. Port preservation is not a strictly necessary part of Full Cone NAT. It’s a nice feature though. I guess the technical classification would be “Full Cone NAT with port preservation”.

(If you do have sufficient external IPs the Linux kernel can do Full Cone NAT by translating only the IP addresses and not the ports, via SNAT/DNAT prefix mapping. The part it lacks, for very practical reasons, is support for attempting to create permanent unique mappings from a larger number of unconstrained internal IP:port combinations to a smaller number of external ones.)

This is very cool indeed. I didn’t knew that. Thanks!

maf,
@maf@szmer.info avatar

Thank you for the feedback! I have to admit I wasn’t aware of how important port forwarding is. Stepping back I guess I’ll need a better way of gauging how important specific features are to people. I’ll have to think about this a little bit more…

Your question about security is something that I think about a lot. I don’t think of LAN & internet as significantly different in terms of security. I also worry about potentially malicious LAN devices attempting to exploit local DNS, DHCP or web UI. I’ve profesionally worked on anti-malware and I’ve seen malware preloaded on new phones by factory workers & resellers, suspiciously exploitable flaws in stock firmware (which I guess was a backdoor with plausible deniability), fake monetization SDKs that are actually botnets (so application developers have been unknowingly attaching bots to their apps). There is also the problem of somebody gaining the physical access to your LAN network (for example by connecting a prepared device to an ethernet port for a couple of seconds). While those things may seem far fetched and commercial routers ignore them, I’d like to do something better here.

In terms of preventing C++ footguns, I’m relying on compilation arguments (-fstack-protector, -D_FORTIFY_SOURCE=2), safe abstractions (for example std::unique_ptr, std::span, std::array…), readability (single-threaded, avoiding advanced primitives or external libraries) & patience (I think that time pressure is the biggest source of bugs).

In terms of protocol level security, so far I’ve been able to secure the update path (so that MITM attackers can’t inject malicious code). The web UI is a big problem for me because to do any privileged operations I’ll have to authenticate the user first. Firstly I’m not exactly sure how to even do that. Password seems like the best option but I’m still trying to think of something better. There is this new WebAuthn thing which I’ll have to look into. Second issue with web UI is that I need to protect the authentication channel. This means that local web UI will need TLS. And this in turn means that I’ll have to somehow obtain a TLS cert somehow. Self-signed certs produce nasty security warnings. Obtaining one from LetsEncrypt seems easy - assuming the router has public IP (which may not always be the case). But even if I obtain a LetsEncrypt cert, any LAN device can do the same thing, so the whole TLS can still be MITM-ed. It would be really great if web browsers could “just establish encrypted channel” and not show any security warnings along the way…

maf,
@maf@szmer.info avatar

Yeah. LetsEncrypt usually verifies whether the client asking for a certificate owns the domain by sending a HTTP-based challenge. Gatekeeper could pass it by intercepting traffic on port 80. But any LAN device could also pass it by asking for port 80 to be temporarily forwarded. This means that LetsEncrypt TLS certificates are not worth much in LAN environment. Malicious IoT device could convince other LAN hosts that it owns the router IP be sending spoofed ARP announcements. Whenever any LAN device would try to visit Gatekeeper web UI, it would actually visit a fake web UI hosted by the malicious IoT device. The IoT device could then sniff the administrator password and perform privileged actions in the real web UI.

maf,
@maf@szmer.info avatar

Oh, yeah that would make sense. I think that would solve the whole security aspect :)

Post ze Szmeru nie pojawia się na zdalnej instancji. O co może grać? (szmer.info) Polish

Hej, wrzuciłem posta przez Szmer, z docelową instancją Selfhosted@lemmy.world: szmer.info/post/1207883. Już kiedyś coś takiego robiłem i zadziałało ok (przykład: szmer.info/post/361728). Tym razem mój post nie pojawia się na docelowej instancji, choć z perspektywy szmer.info, pokazuje się w widoku najnowszych...

maf,
@maf@szmer.info avatar

No nie ma :)

Chodzi o to, że postuję przez szmer.info, jako @maf, ale post skierowany jest do lemmy.world. Więc serwer (“instancja” w lingo lemmiego) szmeru powinna założyć nowy wątek na lemmy.world

maf,
@maf@szmer.info avatar

Problem znaleziony! Lemmy ma limit 200 znaków na tytuł posta. Wersja 0.18.5 (na lemmy.world) zamienia znaki & na &. Wersja 0.18.1 (na szmer.info) tego nie robi. Dlatego post na szmerze wrzucił się bez problemu (tytuł miał 198 znaków), ale lemmy.world odrzuciło go przez zbyt długi tytuł.

github.com/LemmyNet/lemmy/issues/4080

maf,
@maf@szmer.info avatar

I don’t think the OP meant to discount opinions of “anyone that disagrees with him” but rather to discount the opinions based in supernatural.

It also doesn’t seem to me that the OP is really interested in “forced reeducation” but rather reducing influence - probably through ridicule, deplatforming or similar actions.

maf,
@maf@szmer.info avatar

Atheism is more valid though and there is an abundance of proof.

From biology we know there is no life after death which disproves most religions. From experiments we also know that praying doesn’t affect physical world. None of the known miracles couod have been reproduced under controlled conditions which makes it likely they are all made up or hallucinated.

maf,
@maf@szmer.info avatar

There are a few proofs against existence of god. Ineffectiveness of prayer. Impossibility of miracles under controlled conditions. Biological nature of human cognition which precludes life after death.

maf,
@maf@szmer.info avatar

Oh, this the exact use case for a tool that I’m writing right now! It’s a daemon that runs on the gateway and acts as a DNS + DHCP + Firewall to monitor the activity of IoT devices.

github.com/mafik/gatekeeper

In the 1.6 (expected next weekend) I’m adding traffic graphs for each device and remote domain that it talks to.

Giving up on selfhosted email / Any sane email setups?

So I’ve been running self-hosted email using Mailu for a couple of months (after migrating out of Google Workspace). Today it turned that although my server seems to be capable of sending and receiving emails, it also seems to be used by spammers. I’ve stumbled upon this accidentally by looking through logs. This seems to...

maf,
@maf@szmer.info avatar

In programming backslash can sometimes be used to enter special characters. Maybe Lemmy also follows this syntax? If so, typing two consecutive backslashes might help.

Test with one backslash:
Test with two backslashes: \

maf,
@maf@szmer.info avatar

+1 to that. Also the email domain matters. It's relatively easy to set up hundreds of disposable emails on random domains vs ones like Gmail.

Phone number is another solid anti abuse signal. SIM cards are harder to come by in large quantities.

maf,
@maf@szmer.info avatar

Right. I meant is the SMS-based verification of phone numbers - it's not spoofable like the VoIP Caller ID. The downside is the cost imposed by the SMS gateway.

Gatekeeper is a daemon I wrote to see what my IoT hardware is doing in my home network. Still developed, it should already be useful as an alternative to default DHCP & DNS servers in home routers. (github.com)

I'd like to share the project that I've worked on the past couple of weeks. I've started it after finding about how professional routers (specificaly Unifi) are managed and thinking that there should be a simalar open-source software for home networks....

maf,
@maf@szmer.info avatar

Unfortunately not yet - I'll try to look into that though. IIRC the appliance routers are often based on MIPS. It's going to be fun :P

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • tacticalgear
  • DreamBathrooms
  • cisconetworking
  • osvaldo12
  • ngwrru68w68
  • magazineikmin
  • thenastyranch
  • Youngstown
  • ethstaker
  • rosin
  • slotface
  • mdbf
  • kavyap
  • anitta
  • InstantRegret
  • Durango
  • tester
  • everett
  • cubers
  • GTA5RPClips
  • khanakhh
  • provamag3
  • modclub
  • Leos
  • normalnudes
  • megavids
  • lostlight
  • All magazines