On Anonymity and threat models

Spider-Man, Pikachu, and the Joker lead a protest against the regime as Batman stands in solidarity in Ankara, 1986 (Colorized) : r/fakehistoryporn

Posting actual images is risky for me, I was also in the protests and if i spread actual images it can drag me to jail. A photographer friend of mine already detained for sharing pictures on twitter.

yeah that's also true. you should probably create an account with the tor browser, it uses a fuck ton of vpns, really great for privacy.

When your threat model includes your literal government, what steps can you take to protect yourself?

In that reddit thread, OP posted an AI generated image of an actual protest that happened in Turkey (hence the subreddit name). Supposedly the risk of disseminating real photos is so high that they could be jailed for doing so. Others chime in with suggestions to protect themselves like using tor (which does not, in fact, use a fuckton of vpns), or deleting the metadata off the real images before sharing them. So how can one go about doing this stuff and more to protect their identity? I'll start with the first two pieces of advice given on the thread. Even if this was totally fabricated (because everyone lies on the internet ).

Tor

Use Tor

Download Tor

desktop (Windows/Mac/Linux) and Android

Tor Project | Anonymity Online

iOS

Onion Browser
Orbot

iOS forces all browsers to use WebKit framework, limiting full Tor protection

Learn how Onion Routing protects you

sequenceDiagram
    participant Client
    participant Entry as Entry Node
    participant Middle as Middle Node
    participant Exit as Exit Node
    participant Web as Website
    
    Note over Client,Web: Encryption Process
    Client->>Entry: Triple-Encrypted Message
    Entry->>Middle: Double-Encrypted Message
    Middle->>Exit: Single-Encrypted Message
    Exit->>Web: Decrypted Message
    
    Note over Client,Web: Return Path
    Web->>Exit: Response
    Exit->>Middle: Single-Encrypted Response
    Middle->>Entry: Double-Encrypted Response
    Entry->>Client: Triple-Encrypted Response
    
    Note over Client,Web: Security Benefits
    Note over Entry: Knows sender,
not destination Note over Middle: Knows neither
sender nor destination Note over Exit: Knows destination,
not sender

Initial Setup

Launch Tor Browser and you'll hit the connection screen. Choose "Connect" unless you're dealing with censorship or proxy issues. If you're behind a restrictive network, click "Configure" to set up bridges.

If you're dealing with heavy censorship

Verification

Make sure it's working:

  1. Hit check.torproject.org to verify your connection
  2. Run a DNS leak test
  3. Check your circuit info by clicking the lock icon

Change your exif data on your images

The metadata contained in images could be used to track you down. It includes things like the make and model of your phone, when the picture was taken, or even GPS coordinates. On Windows you can right click a photo and check its properties for the metadata or view it in the Photos app and select info.

exif.png

dog.jpg

It's kinda nuts. Imagine casually taking a selfie in your own home, uploading it on social media and now anyone could find out your address.

Edit or Remove your metadata

In windows I can change or remove the values in the properties menu outright. But that's tedious. This inspired me to create a proof of concept Python-based image metadata randomizer . It basically creates a modified copy of your image with randomized meta data, and even changes up the dimensions a little bit so viewers can't even narrow it down using that information. It's a little less obvious than outright removing your Exif data, but the GPS coordinates would probably give it away since it's completely randomized. Any valid set of coordinates could be generated, so your image could be 'taken' in the middle of the Atlantic Ocean for example.

This reddit thread led me down a privacy rabbit-hole and inspired me to spend an afternoon making a little python program. All in all, not a bad way to pass the time. sure beats doom scrolling.

There's actually a lot more one could do to protect themselves online but I'll come back to this eventually as I continue importing my notes.

Graph Generation Fixes

Today I fixed issues with the graph generation in the digital garden:

  1. Module Loading Issues: Fixed problems with React and D3.js modules not loading properly by:

    • Removed React dependency completely and switched to vanilla JavaScript
    • Added D3.js from a CDN instead of trying to load from node_modules
    • Created direct DOM manipulation instead of using React components
  2. CSS Issues: Created an empty backlinks.css file to resolve 404 errors

  3. Data Structure: Added a graph.js file in the _data directory to ensure graph data is being correctly generated and passed to templates

  4. Error Handling: Improved error handling throughout the graph generation code to provide better diagnostics

  5. Graph Rendering Enhancements:

    • Added proper node-link relationship handling to ensure correct connections
    • Implemented hover effects to highlight connected nodes and links
    • Added zoom and pan capability for better navigation
    • Set proper dimensions for graph containers
    • Fixed edge rendering to correctly display connections
    • Added bounds to keep nodes within the visible area
    • Added fallback for empty or error states
  6. Performance Improvements:

    • Optimized force simulation parameters for faster convergence
    • Added collision detection to prevent node overlap
    • Improved visual styles for better readability
  7. Connection Fixes:

    • Fixed node ID mapping to ensure edges properly connect to their nodes
    • Enhanced the graph link processing to correctly handle numeric IDs
    • Added detailed logging for edge creation to aid in debugging
    • Implemented proper node lookup by ID for reliable connections
  8. Visual Improvements:

    • Increased the canvas size to provide more space for nodes
    • Enhanced node spacing with stronger repulsion forces
    • Improved text contrast with light text on dark background
    • Added tooltips showing additional node information
    • Implemented more attractive color scheme with light blue nodes
    • Added visual feedback on node hover (size increase, color change)
    • Improved edge visibility with thicker lines on hover
  9. Advanced Visual Styling:

    • Implemented the Catppuccin Mocha color theme for a more polished, modern appearance
    • Added color-coding for nodes based on their group/category
    • Improved tooltip styling with shadows and better formatting
    • Enhanced the container with rounded corners and subtle borders
    • Refined text styling with better fonts and readability
  10. Depth Control Functionality:

    • Fixed the depth slider to properly filter connections by depth
    • Implemented a depth-based graph filtering system using breadth-first search
    • Added click handling on nodes to set them as the central point for depth filtering
    • Store original graph data to allow filtering without requiring a reload
    • Enhanced the slider appearance and controls for better usability

These changes should make the graph visualization more reliable, performant, and user-friendly going forward.

Graph Visualization Enhancements

Today I made significant improvements to the graph visualization:

  1. Graph Rendering Optimization:

    • Reduced edge length for more compact graph layout
    • Adjusted force simulation parameters for better node spacing
    • Improved node and edge rendering performance
  2. Depth Control Improvements:

    • Fixed depth slider functionality to correctly filter graph connections
    • Added event listeners to dynamically update graph based on depth
    • Implemented breadth-first search for accurate depth filtering
    • Enhanced user interaction with depth control
  3. Node Navigation:

    • Added click-to-navigate functionality for nodes
    • Implemented visual focus indicator for selected nodes
    • Smooth transitions and highlighting of connected nodes
    • Tooltips with node information on hover
  4. Error Handling and Logging:

    • Added comprehensive error logging for graph rendering
    • Improved fallback mechanisms for graph data loading
    • Enhanced console logging for debugging
  5. Visual Styling:

    • Refined Catppuccin Mocha color theme implementation
    • Added subtle animations for node interactions
    • Improved responsiveness of graph visualization

These changes make the graph more interactive, informative, and visually appealing while addressing previous rendering and navigation issues.

Graph Depth Slider Complete Rewrite

Today I completely rewrote the graph depth slider functionality to fix persistent issues:

  1. Full Rewrite of Depth Handling:

    • Implemented a completely new approach to depth filtering
    • Created a dedicated rendering pipeline for filtered graphs
    • Added direct global storage of original graph data for consistent reference
    • Improved the breadth-first search algorithm for more accurate depth filtering
  2. Alpine.js Conflict Resolution:

    • Removed conflicting Alpine.js bindings that were interfering with native event listeners
    • Created a clean event handling system with isolated scope
    • Added proper DOM manipulation without framework dependencies
    • Ensured consistent slider state between framework and vanilla JavaScript
  3. Visual Improvements:

    • Added a numeric depth indicator showing the current depth value
    • Improved slider visual feedback when changing depth
    • Enhanced the graph transition animations when filtering
    • Added better error and edge case handling
  4. Architecture Improvements:

    • Implemented a centralized graph state management approach
    • Separated rendering logic from filtering logic for better maintainability
    • Improved the node click handler to work with the new filtering system
    • Added extensive logging for easier debugging and troubleshooting

This complete rewrite resolves the issues with the depth slider not properly regenerating the graph when changing depth values, ensuring consistent behavior regardless of interaction patterns.

Emergency Graph Rendering Fix

Today I fixed a critical issue with the graph visualization not generating at all:

  1. Root Cause Analysis:

    • Identified issues with previous depth slider changes causing graph rendering to fail completely
    • Discovered problems with source and target node handling in link processing
    • Found issues with global state management and D3.js initialization
  2. Critical Fixes:

    • Added robust error handling throughout the graph generation pipeline
    • Improved handling of different node and link data formats
    • Enhanced initialization code with better fallbacks when data is missing
    • Added visual error states to provide feedback when rendering fails
  3. Resilience Improvements:

    • Implemented multiple fallback mechanisms to ensure graph displays even with partial data
    • Added debug logging to help trace rendering issues in production
    • Improved error message display when components fail to load
    • Enhanced data conversion for better compatibility with different formats
  4. User Experience During Failures:

    • Added clear error messages when D3 library fails to load
    • Implemented fallback rendering when node relationships can't be established
    • Improved visual feedback when expected data is not available
    • Enhanced error states to provide actionable information

These emergency fixes restore the graph visualization functionality while maintaining the depth slider improvements, ensuring users can continue to explore their knowledge graph connections.

Graph Node Positioning Updates

Today I made the following changes to the graph visualization:

  1. Node Spawning Logic: Implemented a new approach to node generation:

    • All nodes now spawn from the center of the graph
    • Nodes are grouped by their depth level (1, 2, 3)
    • Each depth group appears with a 500ms delay between groups
  2. Depth-Based Staggering: Created a visual hierarchy in the node appearance:

    • Depth 1 nodes appear first
    • After a slight pause, depth 2 nodes appear
    • Finally, after another pause, depth 3 nodes appear
  3. Improved Visual Effect: Enhanced the animation sequence:

    • Reduced the random offset amount for a more controlled effect
    • Added logging to help diagnose any issues with depth processing
    • Nodes are initially positioned exactly at center before adding offsets
  4. Sorted Depth Processing: Ensured depth groups are processed in numerical order:

    • Added sorting to ensure depth 1 is always processed before depth 2, etc.
    • This creates a consistent, predictable animation pattern

These changes enhance the visual appeal of the graph by creating a more organized and intentional animation sequence, making it clearer how nodes relate to the central node.

Graph Animation Improvements

Today I implemented a more dynamic node animation system for the graph visualization:

  1. Rapid Node Population: Dramatically improved the animation style for nodes:

    • Nodes now "pop" into place with a more energetic, impactful appearance
    • Each depth level's nodes rapidly populate one after another (20ms between nodes)
    • Increased the random offset to create a more dynamic spread pattern
    • Added a more forceful simulation restart for each node
  2. Improved Depth Transitions: Enhanced the timing between depth levels:

    • Extended the pause between depth groups to 800ms for clearer visual separation
    • Depth 1 nodes rapidly populate, followed by a clear pause
    • Then depth 2 nodes rapidly populate, followed by another pause
    • Finally depth 3 nodes rapidly populate
  3. Technical Improvements:

    • Implemented nested setTimeout functions for precise timing control
    • Adjusted simulation alpha values for more energetic movement
    • Increased offset distances for a more dramatic spread effect
    • Maintained depth-based visual hierarchy while improving dynamics

These animation improvements make the graph feel more responsive and exciting while maintaining the organized structure of depth-based node groupings.

Mar 28 Mar 30