DOWNVOTES DONT MEAN SHIT! SO SHUT UP ABOUT DOWNVOTES AND GET OVER IT!
“MEDIA ECOLOGY DON’T MEAN SHIT I"M JUST HERE FOR AMUSING US ALL TO DEATH WITH DUMB MEMES”
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
DOWNVOTES DONT MEAN SHIT! SO SHUT UP ABOUT DOWNVOTES AND GET OVER IT!
“MEDIA ECOLOGY DON’T MEAN SHIT I"M JUST HERE FOR AMUSING US ALL TO DEATH WITH DUMB MEMES”
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.
Interesting observation…
yes, reading code to people, basic interpretation. It’s a pattern that I think comes post Cambridge Analytica media tactics.
yes, interpretation of various things, not just reading normal prose.
Both lemmy.ml and lemmy.world down over 30 minutes now
lemmy.ml and lemmy.world are both down right now
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)
}
}
This pull serves as a code example of how to add a new setting?
https://github.com/LemmyNet/lemmy/pull/3468/commits/cf1c4dd7b598e81e366c3822f2cbb5ace194004c
People are attacking you, ganging up on you, one of the favorite things on Reddit like media platforms is to be hard core conformity enforcers and silence attempts at understanding mob mentality.