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…?
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.
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.
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.
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.