RoundSparrow @ .ee

Stephen Alfred Gutknecht

Professional in social media since 1985, created / sold social media server apps at age 15. Traveled the world to study media ecology.

“Finnegans Wake is the greatest guidebook to media study ever fashioned by man.” - Marshall McLuhan, Newsweek Magazine

www.WakeIndra.com

  • 2 Posts
  • 19 Comments
Joined 1 year ago
cake
Cake day: June 29th, 2023

help-circle
  • Linux community arrogance is to deny the device driver issues and think Apple is fine, when the reason Apple thrives is because they don’t have open hardware like Linux, BSD, Windows…

    Hardware companies are rarely held account for their absent support of Linux - some campaigns have come and gone, but in the end Linux users tend to arrogantly say it’s trivial to switch and embrace dishonesty. I guess they figure Microsoft is dishonest, so they normalize it.




  • RoundSparrow @ .ee@lemm.eetoFediverse@lemmy.world*Permanently Deleted*
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    10 months ago

    Being open source won’t prevent this, sadly. 4 years is still young, but if a critical mass shifts back to Reddit then Lemmy will be considered a failure.

    you express very limited understanding of open source and how competition works. Just because Microsoft kept selling Windows and “Linux on the Desktop” never came to displace Windows by 2005, it doesn’t mean Linux on end-user machines was a failure. Android Linux came along and is the biggest Linux distro ever, defeating Windows CE / Windows Mobile.

    if a critical mass shifts back to Reddit then Lemmy will be considered a failure.

    Again, that is like saying “people looked at Linux on desktop in 2003 and went back to Windows, so Linux was a failure”. Trying to displace entrenched players is often not how it works, it is when people leverage the source code and some parts of the system in different ways - like Android did with Linux - that things often change.

    Regarding Reddit specifically, the Reddit code was open source for a very long time, nobody wanted to leave Reddit for different owner/operators… that changed in 2023 when every alternate to Reddit has seen a surge in developer interest (even non-federated apps like Tildes). That’s not really happened in the decades Reddit has been around before that specifically large groups of people and app developers have specifically expressed interest in moving away from Reddit in mass (Voat was the only prior big movement, but API apps were not really a focus in that movement).

    By “MySpaced” I mean “become irrelevant”.

    8-bit video games stopped selling in the 1990’s, but then in 2023 there is a huge “Retro gaming” and “retro computing” movement. Same with vinyl music records going out of style then coming back in as retro. Right now TikTok and video dominate Reddit front page - which Lemmy hasn’t even been taking on with video clips that reach Reddit’s technology level, let alone TikTok. There are trends of changes that are more than just one platform owners vs. another. Some of those may be in favor like federation/networked servers that Reddit does not have - that even drew the attention of Facebook.



  • How is the Fediverse privacy focused?

    Not only have there been major bugs with delete of comments not working on other servers, the whole idea of federation is that it gets sent out to any instance that wants a copy - with not even a ‘terms of service’ that is standard on Lemmy.

    For such a communist focus that the Lemmy developers have, I’ts so odd that they don’t emphasize that content is public and have it like Wikipedia content contributions. They use GPL license to force people to share their work of the code, but then they turn around and promise privacy that they fail to deliver on given that they don’t even warn newcomers how federation works.



  • If I tried to make reasonable points about anything, or god forbid, shared my experiences - I was downvoted into oblivion

    Introducing quotes from authors that were related to the subject would really show how people were locked in the context of media immediacy, the environment. Links to outside citations would almost always generate replies from people who obviously did not study the citation and just wanted to respond back.

    It used to be something people said ‘out loud’ about people not reading links and just commenting… then it just became normalized.





  • They store more data now in Memcachedb than Postgres. It’s like memcache but stores to disk. Very fast.

    And that was 7.5 million active users with 2010 hard drive technology. Hardware in 2023 is way faster. Lemmy is incredibly unique in it’s stance of not using Redis, Memcached, dragonfly… something. And all the CPU cores … and still crashing.

    For 4.5 year old code, I think the crashing speaks for itself. But this is the days of Elon Musk and Reddit changing their API with 1 month notice… the social aspect of social media seems to be making choices that just seem … odd. And it isn’t just Twitter, it isn’t just Reddit…

    I mean, May 2023 people flocking to the Lemmy door, your servers can’t keep up with the poor-performing SQL… add scaling tools like like Redis, Memcached, dragonfly to the platform. There was a 40-day countdown to the Reddit API change.

    I don’t understand what has happened here on Lemmy since May any more than what Elon Musk is doing to Twitter to X. It’s bewildering. Redis, Memcached, dragonfly are easily integrated…

    “Redis has been a staple of the web ecosystem for years. It’s often used for caching, as a message broker, or simply as a database. In this guide, we’ll demonstrate how to use Redis inside a Rust web application.”… and the same exists for Rust and memcached, and Rust and dragonfly… Lemmy was in active development for 4 years, it’s impossible to accept that nobody knows of tools like dragonfly and Redis… its some kind of social choice at play, one that I find bewildering and frankly, has put me into tears as people seem to think the server crashes can’t be addressed!

    the crashing servers speaks for itself, but I guess I spoke for it too. It’s been a sad journey since May :( I don’t understand what is gong on in social media audiences that Elon Musk and Reddit and Lemmy are making such choices.


  • There is some kind of social construct with Lemmy’s 4.5 year development that foundational tools like Redis, Memcached, dragonfly were avoided when in May 2023 people were beating a path to the door of Lemmy. And lemmy servers crashed, one after the other, and I don’t think there will be any statistics about all the times the pages didn’t load and the 4 year old Lemmy app’s SQL statements couldn’t cope with the comments/post growth for even 20,000 users.

    Sure, people will leave Reddit and Twitter/X and Threads and whatever again later in 2023 and in 2024. But it’s still some pretty odd social situation that May 2023 came along and performance problems were holding the project back… and Redis, Memcached, dragonfly were not put on the table as routine tools of the trade.

    MONDAY, MAY 17, 2010 Reddit spelled out all the performance and scaling problems they had, they gave an open presentation. The source code was open since June 18, 2008… long before this May 17 presentation.

    If anything Reddit should have turned itself into a non-profit organization and kept selling reddit awards after ChatGPT came on the scene. The 2 month move to “charging for the API” was the wrong direction.

    Twitter and Elon Musk with X, it just seems popular to turn things bad. Crashing servers, broken features, wild changes.

    Clickbait news and anti-science popularity still seem to keep growing. Reddit or Lemmy users could replace headlines with sincere and earnest descriptions of news and information… but it seems Reddit and Elon Musk are in some kind of agreement that audiences don’t really want that. In APRIL 2017, Wikipedia Founder Jimmy Wales tried to take on clickbait and fake news, but few have cared and clickbait headlines are still all over Reddit and Lemmy in 2023.. I don’t get the appeal and attraction of junk clickbait all the time. But it’s hard to ignore the upvotes it gets on Reddit and Lemmy both… you can watch it every day.

    Leemy seems determined it doesn’t want to optimize SQL statements and add scaling tools like Redis, Memcached, dragonfly to the platform. The crashes have been all over multiple sites since May, but the SQL problems and caching need is still ongoing in August.

    The trend of Reddit, Twitter the ongoing favoring of clickbait seems intertwined.



  • Imagine being in Taiwan and having full access to information about China and the west and still shilling for China. Those types of people should be looking for a dominatrix, not a political philosophy…

    That’s kind of the history of humanity regarding religion. To some degree when the religious prophets were alive it make sense, but hundreds of years later it’s a story book (or oral tradition) and people still strive for the authority.

    We haven’t really had that many teachers like Carl Sagan who describe the history and our favoring of authority - inability to question them. It’s pretty weird, as they often aren’t attractive or good speakers, but you see people just accept almost anything they say. I mean in the USA I witnessed so many people who would trust Rush Limbaugh and Alex Jones kind of blindly, and there is some mechanism at play that humanity in total seems to keep engaging.




  • Spent some hours tracing the code, inserting logging that I watched based on a UPVOTE being federated.

    diff --git a/crates/api/src/comment/like.rs b/crates/api/src/comment/like.rs
    index 6c4bdebc7..063249a7e 100644
    --- a/crates/api/src/comment/like.rs
    +++ b/crates/api/src/comment/like.rs
    @@ -17,6 +17,7 @@ use lemmy_db_schema::{
     };
     use lemmy_db_views::structs::{CommentView, LocalUserView};
     use lemmy_utils::error::LemmyError;
    +use tracing::warn;
     
     #[async_trait::async_trait(?Send)]
     impl Perform for CreateCommentLike {
    @@ -25,6 +26,7 @@ impl Perform for CreateCommentLike {
       #[tracing::instrument(skip(context))]
       async fn perform(&self, context: &Data<LemmyContext>) -> Result<CommentResponse, LemmyError> {
         let data: &CreateCommentLike = self;
    +    // Here we are with that database read on every single like for site data.
         let local_site = LocalSite::read(context.pool()).await?;
         let local_user_view = local_user_view_from_jwt(&data.auth, context).await?;
     
    @@ -62,16 +64,20 @@ impl Perform for CreateCommentLike {
         // Remove any likes first
         let person_id = local_user_view.person.id;
     
    +    // does database transaction, despite next one doing update condition?
         CommentLike::remove(context.pool(), person_id, comment_id).await?;
     
         // Only add the like if the score isnt 0
         let do_add = like_form.score != 0 && (like_form.score == 1 || like_form.score == -1);
         if do_add {
    +      // this does database transaction. it await for result
           CommentLike::like(context.pool(), &like_form)
             .await
             .map_err(|e| LemmyError::from_error_message(e, "couldnt_like_comment"))?;
         }
     
    +    warn!("zebratrace100 vote do_add {:?}", do_add);
    +
         build_comment_response(
           context,
           comment_id,
    diff --git a/crates/apub/src/activities/community/announce.rs b/crates/apub/src/activities/community/announce.rs
    index 116b02726..62af17a1a 100644
    --- a/crates/apub/src/activities/community/announce.rs
    +++ b/crates/apub/src/activities/community/announce.rs
    @@ -24,6 +24,7 @@ use lemmy_api_common::context::LemmyContext;
     use lemmy_utils::error::LemmyError;
     use serde_json::Value;
     use url::Url;
    +use tracing::warn;
     
     #[async_trait::async_trait]
     impl ActivityHandler for RawAnnouncableActivities {
    @@ -93,6 +94,11 @@ impl AnnounceActivity {
       ) -> Result<(), LemmyError> {
         let announce = AnnounceActivity::new(object.clone(), community, context)?;
         let inboxes = community.get_follower_inboxes(context).await?;
    +
    +    // example, local community with remote subscribers generates this: zebratrace500 like activity inboxes [Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("lemmy.ml")), port: None, path: "/inbox", query: None, fragment: None }, Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("lemmy.management")), port: None, path: "/inbox", query: None, fragment: None }, Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("lemmy.austinite.online")), port: None, path: "/inbox", query: None, fragment: None }, Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("lemmywinks.xyz")), port: None, path: "/inbox", query: None, fragment: None }, Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("lemmy.asc6.org")), port: None, path: "/inbox", query: None, fragment: None }]
    +    // example, local community with no remote subscribers, generates this: zebratrace500 like activity inboxes []
    +    warn!("zebratrace500 like activity inboxes {:?}", inboxes);
    +
         send_lemmy_activity(context, announce, community, inboxes.clone(), false).await?;
     
         // Pleroma and Mastodon can't handle activities like Announce/Create/Page. So for
    diff --git a/crates/apub/src/activities/community/mod.rs b/crates/apub/src/activities/community/mod.rs
    index 010bad4f4..58ae1b732 100644
    --- a/crates/apub/src/activities/community/mod.rs
    +++ b/crates/apub/src/activities/community/mod.rs
    @@ -9,6 +9,7 @@ use lemmy_api_common::context::LemmyContext;
     use lemmy_db_schema::source::person::PersonFollower;
     use lemmy_utils::error::LemmyError;
     use url::Url;
    +use tracing::warn;
     
     pub mod announce;
     pub mod collection_add;
    @@ -51,6 +52,8 @@ pub(crate) async fn send_activity_in_community(
         );
       }
     
    +  warn!("zebratrace300 send_activity_in_community vote local? {:?}", community.local);
    +
       if community.local {
         // send directly to community followers
         AnnounceActivity::send(activity.clone().try_into()?, community, context).await?;
    @@ -59,6 +62,14 @@ pub(crate) async fn send_activity_in_community(
         inboxes.push(community.shared_inbox_or_inbox());
       }
     
    +  // example output, remote homed community: zebratrace301 send_activity_in_community vote inboxes [Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("beehaw.org")), port: None, path: "/inbox", query: None, fragment: None }]
    +  // example output, local homed community with no remote followers: zebratrace301 send_activity_in_community vote inboxes []
    +  // same output even when local community has a remote follower: zebratrace301 send_activity_in_community vote inboxes []
    +  warn!("zebratrace301 send_activity_in_community vote inboxes {:?}", inboxes);
    +
       send_lemmy_activity(context, activity.clone(), actor, inboxes, false).await?;
    +
    +  warn!("zebratrace302 send_activity_in_community after");
    +
       Ok(())
     }
    diff --git a/crates/apub/src/activities/voting/mod.rs b/crates/apub/src/activities/voting/mod.rs
    index 8bae05577..17d89557f 100644
    --- a/crates/apub/src/activities/voting/mod.rs
    +++ b/crates/apub/src/activities/voting/mod.rs
    @@ -31,6 +31,7 @@ use lemmy_utils::error::LemmyError;
     
     pub mod undo_vote;
     pub mod vote;
    +use tracing::warn;
     
     #[async_trait::async_trait]
     impl SendActivity for CreatePostLike {
    @@ -76,6 +77,7 @@ impl SendActivity for CreateCommentLike {
       }
     }
     
    +// this send_activity is for votes, look at the score parameter
     async fn send_activity(
       object_id: ObjectId<PostOrComment>,
       community_id: CommunityId,
    @@ -89,6 +91,10 @@ async fn send_activity(
         .await?
         .into();
     
    +  // production testing reveals that this code is hit with a user doing a vote on local or federated comment.
    +  // production testing reveals that when a local user votes, even in a community with zero remote subscribers, this has a hefty &actor data payload. which is just the user who did the vote... lots of overhead to vote on a comment?
    +  warn!("zebratrace200 send_activity vote {:?}", &actor);
    +
       // score of 1 means upvote, -1 downvote, 0 undo a previous vote
       if score != 0 {
         let vote = Vote::new(object_id, &actor, &community, score.try_into()?, context)?;
    diff --git a/crates/apub/src/activities/voting/undo_vote.rs b/crates/apub/src/activities/voting/undo_vote.rs
    index bcb8ee406..44da390f3 100644
    --- a/crates/apub/src/activities/voting/undo_vote.rs
    +++ b/crates/apub/src/activities/voting/undo_vote.rs
    @@ -12,6 +12,7 @@ use crate::{
       },
       PostOrComment,
     };
    +// Ok, federation is involved here in this class somehow
     use activitypub_federation::{
       config::Data,
       kinds::activity::UndoType,
    diff --git a/crates/apub/src/activities/voting/vote.rs b/crates/apub/src/activities/voting/vote.rs
    index 7f36ed471..ee72563ed 100644
    --- a/crates/apub/src/activities/voting/vote.rs
    +++ b/crates/apub/src/activities/voting/vote.rs
    @@ -12,6 +12,7 @@ use crate::{
       },
       PostOrComment,
     };
    +// Ok, federation is involved somehow here
     use activitypub_federation::{
       config::Data,
       fetch::object_id::ObjectId,
    @@ -22,6 +23,7 @@ use lemmy_api_common::context::LemmyContext;
     use lemmy_db_schema::source::local_site::LocalSite;
     use lemmy_utils::error::LemmyError;
     use url::Url;
    +use tracing::warn;
     
     impl Vote {
       pub(in crate::activities::voting) fn new(
    @@ -57,6 +59,7 @@ impl ActivityHandler for Vote {
       #[tracing::instrument(skip_all)]
       async fn verify(&self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
         let community = self.community(context).await?;
    +    warn!("zebratrace000 vote verify {:?}", &self.actor);
         verify_person_in_community(&self.actor, &community, context).await?;
         let enable_downvotes = LocalSite::read(context.pool())
           .await
    @@ -70,6 +73,8 @@ impl ActivityHandler for Vote {
     
       #[tracing::instrument(skip_all)]
       async fn receive(self, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
    +    // based on testing with a client locally, this code path is only used for federatio incoming votes?
    +    warn!("zebratrace000 vote receive {:?}", &self.id);
         insert_activity(&self.id, &self, false, true, context).await?;
         let actor = self.actor.dereference(context).await?;
         let object = self.object.dereference(context).await?;
    diff --git a/crates/apub/src/objects/community.rs b/crates/apub/src/objects/community.rs
    index 17476e9f8..e437c61ad 100644
    --- a/crates/apub/src/objects/community.rs
    +++ b/crates/apub/src/objects/community.rs
    @@ -33,6 +33,7 @@ use lemmy_utils::{
     };
     use std::ops::Deref;
     use tracing::debug;
    +use tracing::warn;
     use url::Url;
     
     #[derive(Clone, Debug)]
    @@ -207,6 +208,8 @@ impl ApubCommunity {
           })
           .collect();
     
    +    warn!("zebratrace600 is every single federated outbound Like hitting this poiint?");
    +
         Ok(inboxes)
       }
     }