Skip to main content

On This Page

Solved: PSA: Rippling and Wishpond, Companies with Negative Reviews Seem to Be Attacking the Sub

3 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

Symptoms of Digital Reputation Attacks

Recent reports suggest companies facing negative online reviews, such as Rippling and Wishpond, may be coordinating efforts to manipulate online sentiment, particularly on platforms like Reddit. These tactics aim to artificially inflate positive perceptions and suppress criticism.

Why This Matters

Ideal models assume rational actors and transparent online interactions, but in reality, companies may resort to manipulative tactics to protect their image. The scale of potential damage from a compromised online reputation can be substantial, costing businesses significant revenue and eroding customer trust. Ignoring these attacks can lead to a distorted perception of product quality and service, potentially impacting millions of users and billions in market capitalization.

Key Insights

  • Unusual Voting Patterns: Sudden swings in upvotes/downvotes can indicate manipulation.
  • Sagas over ACID: Coordinating microservices requires eventual consistency patterns like Sagas, as strict ACID transactions become impractical.
  • Prometheus/Grafana: Widely used open-source monitoring and alerting toolkit for time-series data.

Working Example

import praw
import datetime
import json
import time
# --- Configuration ---
REDDIT_CLIENT_ID = "YOUR_CLIENT_ID"
REDDIT_CLIENT_SECRET = "YOUR_CLIENT_SECRET"
REDDIT_USER_AGENT = "your_app_name_by_your_username"
TARGET_SUBREDDIT = "your_subreddit_name" # e.g., "devops"
# Initialize Reddit instance
reddit = praw.Reddit(client_id=REDDIT_CLIENT_ID,
client_secret=REDDIT_CLIENT_SECRET,
user_agent=REDDIT_USER_AGENT)
def fetch_recent_activity(subreddit_name, limit=100):
"""Fetches recent comments and submissions from a subreddit."""
subreddit = reddit.subreddit(subreddit_name)
activity_data = []
print(f"Fetching {limit} recent comments...")
for comment in subreddit.comments(limit=limit):
activity_data.append({
"type": "comment",
"id": comment.id,
"author": str(comment.author),
"created_utc": comment.created_utc,
"score": comment.score,
"text": comment.body[:200], # store first 200 chars
"link_id": comment.link_id,
"permalink": comment.permalink
})
print(f"Fetching {limit} recent submissions...")
for submission in subreddit.new(limit=limit):
activity_data.append({
"type": "submission",
"id": submission.id,
"author": str(submission.author),
"created_utc": submission.created_utc,
"score": submission.score,
"title": submission.title,
"url": submission.url,
"permalink": submission.permalink
})
return activity_data
def analyze_activity_for_anomalies(data):
"""Basic anomaly detection: Look for new accounts, unusual scores, and content patterns."""
current_time = time.time()
anomalies = []
author_activity = {}
for item in data:
author = item['author']
if author == 'None': # Deleted or anonymous user
continue
if author not in author_activity:
author_activity[author] = {
"first_seen": item['created_utc'],
"last_seen": item['created_utc'],
"item_count": 0,
"total_score": 0,
"comments": [],
"submissions": []
}
author_activity[author]["last_seen"] = max(author_activity[author]["last_seen"], item['created_utc'])
author_activity[author]["item_count"] += 1
author_activity[author]["total_score"] += item['score']
if item['type'] == 'comment':
author_activity[author]["comments"].append(item['text'])
else:
author_activity[author]["submissions"].append(item['title'])
for author, stats in author_activity.items():
# Heuristic 1: Very new account with high activity
account_age_hours = (current_time - stats["first_seen"]) / 3600
if account_age_hours < 8:
anomalies.append(f"Suspicious: New account '{author}' ({account_age_hours:.1f}h old) with high activity ({stats['item_count']} items).")
# Heuristic 2: Unusually high or low scores for a new account (subjective)
if account_age_hours < 24 and stats["total_score"] > 50:
anomalies.append(f"Suspicious: New account '{author}' with unusually high score ({stats['total_score']}).")
return anomalies
if __name__ == "__main__":
recent_activity = fetch_recent_activity(TARGET_SUBREDDIT)
detected_anomalies = analyze_activity_for_anomalies(recent_activity)
if detected_anomalies:
print("\n--- Detected Anomalies ---")
for anomaly in detected_anomalies:
print(anomaly)
else:
print("\nNo significant anomalies detected by basic heuristics.")

Practical Applications

  • Stripe/Coinbase: Use Temporal to manage complex, distributed transactions and mitigate failures in financial systems.
  • Pitfall: Ignoring rate limiting can lead to IP bans and service disruptions.

References:

Continue reading

Next article

Solved: We have 5 subscriptions of the same software because nobody talks to each other

Related Content