5
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
this post was submitted on 05 Apr 2024
5 points (100.0% liked)
FreeAssembly
75 readers
1 users here now
this is FreeAssembly, a non-toxic design, programming, and art collective. post your share-alike (CC SA, GPL, BSD, or similar) projects here! collaboration is welcome, and mutual education is too.
in brief, this community is the awful.systems answer to Hacker News. read this article for a solid summary of why having a less toxic collaborative community is important from a technical standpoint in addition to a social one.
some posting guidelines apply in addition to the typical awful.systems stuff:
- all types of passion projects and contributions are welcome, including and especially those that aren't programming or engineering in nature
- this is an explicitly noncommercial, share-alike space
- don't force yourself to do work you don't enjoy, or demand it of others
(logo credit, with modifications by @dgerard@awful.systems)
founded 7 months ago
MODERATORS
I know rust and react/typescript, so I might be able to help out with this (time permitting).
Is the intention to stay fairly close to the upstream, or make the code less horrible? Also, I haven't looked at it yet, what makes the lemmy code so bad? Not the first time I've heard this complaint.
thank you! definitely let me know if you’d like a pointer to where something is in the code, or a summary of how anything is architected.
so the problem with Lemmy on the frontend is that it violates a bunch of web dev best practices. a lot of them are pretty easy to spot for someone who’s worked in react before (an example off the top of my head is, the frontend will just throw an exception and show a misleading error page if it can’t parse your JWT. this has broken us in production before). I figure we can clean these up relatively casually, unless we catch something that looks like a security risk (and Lemmy has a long history of those too).
the problems on the backend are a lot more structural — it’s a weird assemblage of sub-crates arranged and typed in a way that makes a lot of types of changes way harder than they really should be. it feels like the kind of rust code someone would write if their main experience was in “enterprise” typescript and they were very new to rust.
as a whole, the Lemmy codebase feels like an excuse to play with technology the authors liked but weren’t particularly knowledgeable in. this is proven out by the fact that they’ve actually deprecated the react/typescript UI and are intent on replacing it with a Rust version using the Leptos framework — a stupendously unpopular choice that seems to be driven purely by the desire to write more rust and use more experimental technology, regardless of the consequences to the project.
there’s also just a ton of systemic weirdness to look out for. for example, Lemmy really doesn’t like running outside of the preconfigured docker container it pulls some of its metadata from (including its version, even though cargo.toml and package.json are right there — this data being missing will silently break
cache-control
in a very destructive way). I’ve fixed some of that weirdness already just to get a Nix flake version of the software working, but I’d like to fix these breakages in a more cross-platform way too.Yes, it feels a lot like some of my personal projects where I play with new tech in some of its structure. But it also has stupid decisions.
lemmy was the first example i can remember using of a React based site that is actually zippy and not slow as shit cos it isn't serving 100 ad trackers
Hmm the first sign may be that it doesn't build. I think it's expecting translations that don't exist.
Edit: Cargo build fails, nix build succeeds. Edit2: Oops, submodules.
oh god, they put all the structs in the same file and all the impl's in different ones. Why?
you know, @self has been mentioning things about the awfulness of the codebase and I hadn't yet gotten to look, but .... wow. that's certainly a Choice.
it’s entirely possible they assumed C++’s compilation model applies to Rust