Skip to main content

Send feedback

Tell us what works and what could be better. We read every submission.

Send feedback

Tell us what works and what could be better. We read every submission.

A

aht

@aht·22 public vizzes

Loading thumbnail…

Money trail for allinvain bitcoin theft case

This Sankey diagram visualizes the flow of bitcoins between eight addresses involved in the "allinvain" theft case. The diagram uses d3.v3 with the sankey plugin to render an SVG visualization, with nodes positioned horizontally and vertically and links whose stroke widths correspond to transaction amounts. Each node represents a bitcoin address, labeled with its numeric ID, while the links show the value transferred between addresses in bitcoins, with hover tooltips revealing exact amounts. Users can drag nodes both horizontally and vertically to explore the money trail, triggering relayout of the links. The diagram is color-coded by node name using a category20 scale, and link opacity increases on hover to highlight specific transfers. The data consists of eight addresses and a matrix of 14 transactions between them, visualizing the flow of stolen bitcoins through the network.# Money trail for allinvain bitcoin theft case This visualization uses a Sankey diagram to trace the flow of stolen bitcoins across cryptocurrency addresses in the allinvain theft case. Eight entity addresses are represented as nodes, with 14 directed transfers between them drawn as links whose thickness is proportional to the amount transferred (in bitcoins). Nodes are color-coded and can be dragged both horizontally and vertically, with the layout updating dynamically. The diagram provides a clear forensic view of how the stolen funds were laundered and dispersed across multiple wallets. **Visual Design:** The chart uses a classic Sankey layout with rectangular nodes labeled by address ID and links whose stroke-width encodes transaction value. The color scheme uses d3's category20 palette to differentiate entities. Tooltips display the exact transfer amounts, and the interactive dragging allows exploration of the network topology. **Data Encoding:** The dataset consists of 8 Bitcoin addresses (entities) and 14 transactions between them, with values ranging from 2,487 to 22,500 bitcoins. The visualization encodes the direction and magnitude of bitcoin transfers through the sankey flow layout. **Interactivity:** Nodes can be dragged both horizontally and vertically. On drag, the layout recalculates and link paths update. Hovering over links reveals transfer amounts. (Note: readme says "Open in full window for full effect".) **Context:** The title indicates this is tracking the "money trail" for the "allinvain bitcoin theft case". allinvain was an early bitcoin user who reported the theft of 25,000 BTC in 2011. This Sankey diagram visualizes the flow of bitcoins between addresses after the theft. **Source:** This example uses the sankey.js plugin for d3.js. The data and code were written by aht, based on D3.js and the Sankey plugin. The implementation emphasizes horizontal and vertical node movement for exploration. The data is from a gist by aht.This example visualizes the flow of bitcoins between addresses involved in the infamous "allinvain" theft case using a Sankey diagram. The data, embedded directly in the page, consists of eight Bitcoin addresses (labeled by their identifiers) and the amounts transferred between them, measured in bitcoins. The diagram is rendered with D3 v3 and the Sankey plugin, using SVG for output. Nodes are draggable both horizontally and vertically, with link widths proportional to transaction values, allowing users to explore the flow of stolen funds through the network of addresses.

Aug 7, 2014
Loading thumbnail…

Scatterplot

This scatterplot displays the relationship between sepal width and sepal length for 150 iris flowers, using the classic Fisher Iris dataset. The visualization is rendered with the Polychart library in a standalone HTML page, with each flower represented as a point positioned by its two sepal measurements. The chart is generated from a gist by author aht, and its 800x400 pixel responsive layout is centered on the page via CSS styling. The data is embedded directly in the JavaScript configuration, which specifies the x and y mappings for the layer. No additional visual encodings, such as color or size, are applied, resulting in a simple bivariate scatterplot that reveals the general distribution and correlation between sepal width and sepal length across the dataset.This example shows a basic scatterplot of the classic Iris dataset. It plots sepal length on the y-axis against sepal width on the x-axis for 150 flowers, using the Polychart JavaScript library. The chart is rendered from an embedded JSON configuration, which sets the dimensions and maps the data variables, but does not encode species or other groupings visually. The visualization is a straightforward scatterplot, useful for examining the relationship between two continuous variables. In this case, the default display uses uncolored points, so the plot shows the overall distribution and correlation between sepal width and sepal length across all species. The chart is generated in the browser via the Polychart library and styled to be centered with a fixed width and height. While functional and clear, the example does not go beyond basic scatterplot functionality.

Aug 12, 2013
Loading thumbnail…

$centerSphere query hangs mongodb

MongoDB's `$centerSphere` geospatial query hangs on a collection of 27.7 million documents indexed only by a 2d index named `xy_2d`, despite the presence of additional indexes on `p1` and `p2`. The `db.currentOp()` output shows a query running for over 200 seconds, while a `serverStatus` command waits on a global lock. A gdb thread dump reveals the server's background threads (data file sync, file allocator, durability thread) in normal wait states, with no obvious deadlock, indicating the query itself is stuck scanning due to the extremely small radius (0.00005 radians) on a large collection without an efficient geo index plan. The visualization shows a MongoDB shell output listing collection statistics, index definitions, an in-progress `$centerSphere` query with `$explain`, and thread stack traces to demonstrate how a poorly indexed geo query can hang the database by holding a read lock and blocking subsequent operations like `serverStatus`.# $centerSphere Query Hangs MongoDB ## Description This example documents a critical MongoDB performance issue where a `$centerSphere` geospatial query causes the database to hang. The visualization captures the raw diagnostic output from a MongoDB instance struggling with an expensive geo query against a collection of over 27 million documents. The key elements shown include: 1. **Collection metadata**: A large collection (`similar_items`) with 27.7 million documents and four indexes, including a compound index (p1, p2) and a 2d geospatial index on the `xy` field. 2. **The problematic query**: A `$centerSphere` query with a radius of 0.00005 radians (~0.3 miles) that has been running for 210 seconds without completing. The `$explain` flag suggests the user was trying to diagnose the query's performance when it hung. 3. **Live server state via db.currentOp()**: Shows the query stuck in "running" state for 210 seconds, and a second query (serverStatus) waiting for a global read lock, demonstrating how the hanging query blocks other operations. 4. **Thread dump analysis**: The gdb backtrace reveals the MongoDB server's internal threads, showing the duration thread blocked on a global write lock, file allocator waiting, and the main query thread doing a sigwait - these are the threads that show why the server appears hung. The collection has 27.7 million documents with indexes on p1, p1+p2, and a 2d geospatial index on xy. The query uses $centerSphere with a tiny radius of 0.00005 radians, which triggers a full collection scan in MongoDB 2.x because the 2d index doesn't handle spherical queries efficiently. Your job is to write a 150-word description of this example, for a visualization gallery, in English, using no lists, no markdown, no links, no code, no special formatting. A good description starts with a one-sentence summary that mentions the title, the author, and the type of visualization (e.g., "Timeline", "Scatter plot", "Map"). It then explains what the visualization shows, why it was made, and a key feature or takeaway. It is written for a general audience, in plain language, and stays concise. Do NOT speculate about the author's motives. Do not use markdown, do not use bullet lists. The description should be a single paragraph of prose. A good description will be between 60 and 120 words. Try to stay within this limit. Do not mention the files or file names. Do not include more than one example sentence of code. Write the description for a non-technical audience. Avoid domain jargon. Use simple words and short sentences. Do not talk about the data, but about the visualization. (Remember: this is for a visualization gallery.) Remember to start with a short title. The title is not part of the description, but precedes it. Use an unordered list after the description to list the visualization techniques used.# $centerSphere Query Hangs MongoDB This debugging transcript captures a MongoDB database that became unresponsive while running a geospatial query. The document shows a collection with over 27 million records, indexed by location coordinates, and a single query using `$centerSphere` that ran for over 210 seconds without completing. The current operations log reveals two blocked queries, with a subsequent server process stack trace showing threads waiting on locks, file allocation, and synchronization—clear evidence of a database hang. ## Visualization Techniques - **Process/Thread State Visualization**: Thread stacks illustrating system-level blocking - **Query Timeline**: Showing the long-running operation (210+ seconds) versus the blocked administrative query - **Index and Collection Overview**: Summarizing the schema and indexes on the 27M-record collection - **Command/Response Pairs**: Raw MongoDB shell output as evidence of the hang

Jan 17, 2013