Digital bits, one zero
I’ll say one thing about Lemmy as a platform from May 2023 to September 2023. Hate in the HiveMind, hate for Reddit/Spez, Hate for Elon Musk, Hate for Threads and Facebook.
Beehaw is a shining light compared to the waves I experienced. Maybe it will settle down…?

  • 0 Posts
  • 15 Comments
Joined 2Y ago
cake
Cake day: Jun 02, 2023

help-circle
rss

We have way more complex queries

It isn’t the complexity that is the problem. It is the open-ended nature. It lacks any WHERE clause that specifies which posts to get. It just kicks off join after join without restricting what it is looking for. It relies on the “LIMIT 50” that Lemmy restricts post listings too. Which worked OK in March 2023 when Lemmy was over 4 years old and still had very tiny amounts of data in all these tables that it joins, but once even a modest amount of data got point in the open-ended nature of the WHERE clause kept making it slower and slower as more and more content.


serous problems with scalability, it works fine if there is little data in the system.


Just because it’s written in Rust doesn’t make your app safe, or performant.

Lemmy 0.18.4 listing posts, frequently via ORM Diesel:

            SELECT "post"."id", "post"."name", "post"."url", "post"."body", "post"."creator_id", "post"."community_id", "post"."removed",
              "post"."locked", "post"."published", "post"."updated", "post"."deleted", "post"."nsfw", "post"."embed_title", "post"."embed_description",
              "post"."thumbnail_url", "post"."ap_id", "post"."local", "post"."embed_video_url", "post"."language_id", "post"."featured_community",
              "post"."featured_local",
              "person"."id", "person"."name", "person"."display_name", "person"."avatar", "person"."banned", "person"."published", "person"."updated",
              "person"."actor_id", "person"."bio", "person"."local", "person"."private_key", "person"."public_key", "person"."last_refreshed_at",
              "person"."banner", "person"."deleted", "person"."inbox_url", "person"."shared_inbox_url", "person"."matrix_user_id",
              "person"."admin",
              "person"."bot_account", "person"."ban_expires", "person"."instance_id",
              "community"."id", "community"."name", "community"."title", "community"."description", "community"."removed", "community"."published",
              "community"."updated", "community"."deleted", "community"."nsfw", "community"."actor_id", "community"."local", "community"."private_key",
              "community"."public_key", "community"."last_refreshed_at", "community"."icon", "community"."banner", "community"."followers_url",
              "community"."inbox_url", "community"."shared_inbox_url", "community"."hidden", "community"."posting_restricted_to_mods",
              "community"."instance_id", "community"."moderators_url", "community"."featured_url",
              ("community_person_ban"."id" IS NOT NULL),
              "post_aggregates"."id", "post_aggregates"."post_id", "post_aggregates"."comments", "post_aggregates"."score", "post_aggregates"."upvotes",
              "post_aggregates"."downvotes", "post_aggregates"."published", "post_aggregates"."newest_comment_time_necro",
              "post_aggregates"."newest_comment_time", "post_aggregates"."featured_community", "post_aggregates"."featured_local",
              "post_aggregates"."hot_rank", "post_aggregates"."hot_rank_active", "post_aggregates"."community_id", "post_aggregates"."creator_id",
              "post_aggregates"."controversy_rank", "community_follower"."pending",
              ("post_saved"."id" IS NOT NULL),
              ("post_read"."id" IS NOT NULL),
              ("person_block"."id" IS NOT NULL),
              "post_like"."score",
              coalesce(("post_aggregates"."comments" - "person_post_aggregates"."read_comments"),
              "post_aggregates"."comments")
             
              FROM ((((((((((((
                ("post_aggregates"
                   INNER JOIN "person" ON ("post_aggregates"."creator_id" = "person"."id"))
                INNER JOIN "community" ON ("post_aggregates"."community_id" = "community"."id"))
                LEFT OUTER JOIN "community_person_ban" ON (("post_aggregates"."community_id" = "community_person_ban"."community_id") AND ("community_person_ban"."person_id" = "post_aggregates"."creator_id"))
                )
                INNER JOIN "post" ON ("post_aggregates"."post_id" = "post"."id")
                )
                LEFT OUTER JOIN "community_follower" ON (("post_aggregates"."community_id" = "community_follower"."community_id") AND ("community_follower"."person_id" = $1))
                )
                LEFT OUTER JOIN "community_moderator" ON (("post"."community_id" = "community_moderator"."community_id") AND ("community_moderator"."person_id" = $1))
                )
                LEFT OUTER JOIN "post_saved" ON (("post_aggregates"."post_id" = "post_saved"."post_id") AND ("post_saved"."person_id" = $1))
                )
                LEFT OUTER JOIN "post_read" ON (("post_aggregates"."post_id" = "post_read"."post_id") AND ("post_read"."person_id" = $1))
                )
                LEFT OUTER JOIN "person_block" ON (("post_aggregates"."creator_id" = "person_block"."target_id") AND ("person_block"."person_id" = $1))
                )
                LEFT OUTER JOIN "post_like" ON (("post_aggregates"."post_id" = "post_like"."post_id") AND ("post_like"."person_id" = $1))
                )
                LEFT OUTER JOIN "person_post_aggregates" ON (("post_aggregates"."post_id" = "person_post_aggregates"."post_id") AND ("person_post_aggregates"."person_id" = $1))
                )
                LEFT OUTER JOIN "community_block" ON (("post_aggregates"."community_id" = "community_block"."community_id") AND ("community_block"."person_id" = $1))
                )
                LEFT OUTER JOIN "local_user_language" ON (("post"."language_id" = "local_user_language"."language_id") AND ("local_user_language"."local_user_id" = $2))
                )
                
                WHERE
                (((
                    (((
                    (
                    ("community"."removed" = $3) AND ("post"."removed" = $4))
                    AND ("community_follower"."pending" IS NOT NULL)
                    )
                    AND ("post"."nsfw" = $5)
                    )
                    AND ("community"."nsfw" = $6)
                    )
                    AND ("local_user_language"."language_id" IS NOT NULL)
                    )
                    AND ("community_block"."person_id" IS NULL)
                    )
                    AND ("person_block"."person_id" IS NULL)
                    )
                    
                ORDER BY "post_aggregates"."featured_local" DESC , "post_aggregates"."hot_rank_active" DESC , "post_aggregates"."published" DESC
                    
                LIMIT $7
                OFFSET $8
			;`

That is with hand-optimized person_id = $1, which the Rust code does not do.



What a non-story.

Lemmy project set wild unrealistic expectations on GItHub project: 1) "high performance’, maybe the Rust code but PostgreSQL logic is the ORM madness. 2) “full erase” while sending all your public comments and posts to ActivePub without agreement on concept of delete.


ok… that’s about as exciting of a cause as … plain oatmeal.


it sounds like he was listing to sell the actual game, not just 45 minutes of footage of the game…



Essentially, they’re saying you can bake up a sample of this stuff, pop it out of the oven, and just sitting there on your lab bench it will conduct electricity without any resistance.

From what I have heard, it’s not supposed to be that expensive or even difficult to make. They should have sent actual samples of the material to a dozen different universities from a batch they share their own data measurements about. Save everyone a lot of time about doubts that it’s manufactured correctly.


I think this is bullshit.

I think it is exactly how people are behaving. And I can even recall witnessing many people first hand who flip a newspaper to the sports section. Never learning anything about science news, medical news, unless it’s some kind of social column about a diet.

People wanting to cut out and block things they don’t want to read in a newspaper is what I consider the “default behavior” of most of humanity. No surprise they do not care about the news their friends share. An intelligent computer system that filters out (based on topic/content study) what they don’t want to see before-hand is always going to be popular with such people.

“One of the effects of living with electric information is that we live habitually in a state of information overload. There’s always more than you can cope with.” — Marshall McLuhan.


Do you think I’m opening a bug about Beehaw or something?

This is a technology topic. People discuss when Facebook and Reddit and Twitter have major outages.


While yes, we should be able to delete our content if we want, but it’s a bit naive to think there could be true privacy in any decentralised social media platform.

Especially an email or “reddit” threaded conversation systems where quoting of messages is routine. Here I am, quoting you.

You are putting a billboard up in public, on a bulletin board in the center of the Internet, the assumption should be that anyone can photograph it.


Given the beta status of Lemmy, I don’t even think it’s a great idea to give the appearance of privacy. I think the core purpose of a webapp like Lemmy is public messages.

I think it’s a can of worms for server operators to get into the business of thinking they can safely hold private messages between users/strangers. None of the Lemmy instances I’ve joined have had a “terms of service” or anything like that on SIgn Up, I really think the message should be sent far and wide that Lemmy is about posting IN PUBLIC and that messages are being FEDERATED to peers, even people that you don’t know could be collecting the data for a search engine.

With small-time server operators opening up hundreds of Lemmy instances, without giving away their experience or human identity, how can you have any confidence that someone is properly securing a server they only have part-time job to update and operate? Major corporations are having their database stolen, Valve, Sony, Nintendo, health care companies, mobile network companies (AT&T)… you think a low-budget shoestring server by a hobbyist running Lemmy should be held to the same standards as a corporation who has an entire team and services to defend their data?


Obviously there are plenty of bugs and QoL features that could dramatically improve the usage of Lemmy

Federation is not reliably delivering comments and other Lemmy content between servers. People need to be looking for such problems, so far there isn’t any tool to observe or track this problem.

https://github.com/LemmyNet/lemmy/issues/3101


That’s probably a big part. Web browsers can do ad blocking. Within the official Reddit app that’s way more difficult.