{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"blog_tag","url":"https://ejfox.com/blog/tag/dataviz","json_url":"https://ejfox.com/blog/tag/dataviz.json","generator":"ejfox.com/json-twin@1","data":{"tag":"dataviz","count":14,"posts":[{"slug":"2019/how-i-prototype-apps-and-dataviz-quickly-in-2019","title":"How I prototype apps and dataviz quickly","date":"2019-03-20T01:25:22.000Z","type":"words","modified":"2024-09-23T16:13:36.000Z","tags":["vue","dataviz","d3","javascript","webdesign"],"toc":[{"text":"How I prototype apps and dataviz quickly","slug":"how-i-prototype-apps-and-dataviz-quickly","level":"h2","children":[{"text":"Pulling in data","slug":"pulling-in-data","level":"h3","children":[]},{"text":"Combining Vue and D3 for dataviz","slug":"combining-vue-and-d3-for-dataviz","level":"h3","children":[]},{"text":"Database and user authentication","slug":"database-and-user-authentication","level":"h3","children":[]},{"text":"Deploying","slug":"deploying","level":"h3","children":[]}]}],"metadata":{"type":"words","date":"2019-03-20T01:25:22.000Z","modified":"2024-09-23T16:13:36.000Z","tags":["vue","dataviz","d3","javascript","webdesign"],"words":932,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":15,"codeBlocks":3,"headers":{"h2":1},"toc":[{"text":"How I prototype apps and dataviz quickly","slug":"how-i-prototype-apps-and-dataviz-quickly","level":"h2","children":[{"text":"Pulling in data","slug":"pulling-in-data","level":"h3","children":[]},{"text":"Combining Vue and D3 for dataviz","slug":"combining-vue-and-d3-for-dataviz","level":"h3","children":[]},{"text":"Database and user authentication","slug":"database-and-user-authentication","level":"h3","children":[]},{"text":"Deploying","slug":"deploying","level":"h3","children":[]}]}],"slug":"2019/how-i-prototype-apps-and-dataviz-quickly-in-2019"}},{"slug":"2020/coding-livestreams","title":"A summer of live streamed coding","date":"2020-10-08T08:00:52.000Z","type":"words","dek":"In which the skill of broadcasting yourself writing code to the entire internet is explored","modified":"2024-09-23T16:12:59.000Z","tags":["livestream","coding","dataviz","inspiration","education","visualization"],"toc":[{"text":"A summer of live streamed coding","slug":"a-summer-of-live-streamed-coding","level":"h2","children":[{"text":"The cooking show metaphor","slug":"the-cooking-show-metaphor","level":"h3","children":[]},{"text":"Working in the open","slug":"working-in-the-open","level":"h3","children":[]},{"text":"Livestream experiments","slug":"livestream-experiments","level":"h3","children":[]},{"text":"Building the habit","slug":"building-the-habit","level":"h3","children":[]},{"text":"Surprisingly productive","slug":"surprisingly-productive","level":"h3","children":[]}]}],"metadata":{"date":"2020-10-08T08:00:52.000Z","type":"words","dek":"In which the skill of broadcasting yourself writing code to the entire internet is explored","tags":["livestream","coding","dataviz","inspiration","education","visualization"],"modified":"2024-09-23T16:12:59.000Z","words":1232,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":11,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"A summer of live streamed coding","slug":"a-summer-of-live-streamed-coding","level":"h2","children":[{"text":"The cooking show metaphor","slug":"the-cooking-show-metaphor","level":"h3","children":[]},{"text":"Working in the open","slug":"working-in-the-open","level":"h3","children":[]},{"text":"Livestream experiments","slug":"livestream-experiments","level":"h3","children":[]},{"text":"Building the habit","slug":"building-the-habit","level":"h3","children":[]},{"text":"Surprisingly productive","slug":"surprisingly-productive","level":"h3","children":[]}]}],"slug":"2020/coding-livestreams"}},{"slug":"2021/lack-of-data","title":"The Lack of Data","date":"2021-05-17T08:00:10.000Z","type":"words","dek":"An exploration of what we choose to track, and what we don't – and what that means if we want to make the world a better place","modified":"2024-09-27T17:44:44.000Z","tags":["data","datajournalism","dataviz","lackofdata","police","america"],"toc":[{"text":"The Lack of Data","slug":"the-lack-of-data","level":"h2","children":[]}],"metadata":{"date":"2021-05-17T08:00:10.000Z","type":"words","dek":"An exploration of what we choose to track, and what we don't – and what that means if we want to make the world a better place","modified":"2024-09-27T17:44:44.000Z","tags":["data","datajournalism","dataviz","lackofdata","police","america"],"words":602,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":2,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"The Lack of Data","slug":"the-lack-of-data","level":"h2","children":[]}],"slug":"2021/lack-of-data"}},{"slug":"2023/livestreaming","title":"Livestreaming","date":"2023-01-03T18:21:22.000Z","type":"post","dek":"In which we make a list of the times I have livestreamed","modified":"2024-09-20T04:23:53.000Z","tags":["livestream","dataviz","vue","coding","climatechange","youtube"],"toc":[{"text":"Livestreaming","slug":"livestreaming","level":"h2","children":[{"text":"Past Livestreams","slug":"past-livestreams","level":"h3","children":[]}]}],"metadata":{"dek":"In which we make a list of the times I have livestreamed","date":"2023-01-03T18:21:22.000Z","modified":"2024-09-20T04:23:53.000Z","tags":["livestream","dataviz","vue","coding","climatechange","youtube"],"words":238,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":13,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Livestreaming","slug":"livestreaming","level":"h2","children":[{"text":"Past Livestreams","slug":"past-livestreams","level":"h3","children":[]}]}],"type":"post","slug":"2023/livestreaming"}},{"slug":"2024/my-modern-scrapbook","title":"Building myself a scrapbook","date":"2024-09-20T04:22:35.000Z","type":"post","dek":"In which we attempt to craft some treasure from the debris of a life lived on the internet","modified":"2024-11-05T16:50:13.000Z","tags":["inspiration","dataviz","design","howto","politics"],"toc":[{"text":"Building myself a scrapbook","slug":"building-myself-a-scrapbook","level":"h2","children":[]},{"text":"The groundwork for customized interfaces","slug":"the-groundwork-for-customized-interfaces","level":"h2","children":[]},{"text":"Retrieving my data","slug":"retrieving-my-data","level":"h2","children":[]},{"text":"Enhancing my data","slug":"enhancing-my-data","level":"h2","children":[]},{"text":"Exploring my data","slug":"exploring-my-data","level":"h2","children":[]},{"text":"Quickly recalling my research","slug":"quickly-recalling-my-research","level":"h2","children":[]},{"text":"Sharing with others","slug":"sharing-with-others","level":"h2","children":[{"text":"Public bibliography","slug":"public-bibliography","level":"h3","children":[]}]},{"text":"Take control of your own data, make your own systems","slug":"take-control-of-your-own-data-make-your-own-systems","level":"h2","children":[]}],"metadata":{"dek":"In which we attempt to craft some treasure from the debris of a life lived on the internet","date":"2024-09-20T04:22:35.000Z","modified":"2024-11-05T16:50:13.000Z","tags":["inspiration","dataviz","design","howto","politics"],"words":2131,"images":12,"imageDetails":{"total":12,"cloudinary":12,"withDimensions":0},"links":44,"codeBlocks":1,"headers":{"h2":8},"toc":[{"text":"Building myself a scrapbook","slug":"building-myself-a-scrapbook","level":"h2","children":[]},{"text":"The groundwork for customized interfaces","slug":"the-groundwork-for-customized-interfaces","level":"h2","children":[]},{"text":"Retrieving my data","slug":"retrieving-my-data","level":"h2","children":[]},{"text":"Enhancing my data","slug":"enhancing-my-data","level":"h2","children":[]},{"text":"Exploring my data","slug":"exploring-my-data","level":"h2","children":[]},{"text":"Quickly recalling my research","slug":"quickly-recalling-my-research","level":"h2","children":[]},{"text":"Sharing with others","slug":"sharing-with-others","level":"h2","children":[{"text":"Public bibliography","slug":"public-bibliography","level":"h3","children":[]}]},{"text":"Take control of your own data, make your own systems","slug":"take-control-of-your-own-data-make-your-own-systems","level":"h2","children":[]}],"type":"post","slug":"2024/my-modern-scrapbook"}},{"slug":"2025/mcp-meta-mapping","title":"Mapping Novel Territories: Untangling MCP Servers","date":"2025-03-25T04:12:41.000Z","type":"post","dek":"In which we the author gets his bearings by doing one of the things he knows best; making a map","modified":"2025-03-27T20:12:50.000Z","tags":["embeddings","cartography","dataviz"],"toc":[{"text":"Mapping Novel Territories: Untangling MCP Servers","slug":"mapping-novel-territories-untangling-mcp-servers","level":"h2","children":[]}],"metadata":{"dek":"In which we the author gets his bearings by doing one of the things he knows best; making a map","tags":["embeddings","cartography","dataviz"],"date":"2025-03-25T04:12:41.000Z","modified":"2025-03-27T20:12:50.000Z","words":763,"images":8,"imageDetails":{"total":8,"cloudinary":8,"withDimensions":0},"links":8,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"Mapping Novel Territories: Untangling MCP Servers","slug":"mapping-novel-territories-untangling-mcp-servers","level":"h2","children":[]}],"type":"post","slug":"2025/mcp-meta-mapping"}},{"slug":"2025/paramilitary-telegram-leaks-001","title":"Processing Telegram Leaks for Fast Web Visualization","date":"2025-03-09T17:49:01.000Z","type":"post","dek":"In which I describe my workflow for transforming a Telegram database dump into a web-friendly format for analysis and visualization","modified":"2025-03-16T01:25:05.000Z","tags":["data","dataviz","journalism","politics"],"toc":[{"text":"Paramilitary Telegram Leaks: From Dump To Data","slug":"paramilitary-telegram-leaks-from-dump-to-data","level":"h2","children":[]},{"text":"From SQLite to Parquet: Processing Telegram Leaks for Fast Web Visualization","slug":"from-sqlite-to-parquet-processing-telegram-leaks-for-fast-web-visualization","level":"h2","children":[{"text":"The Challenge","slug":"the-challenge","level":"h3","children":[]},{"text":"The Workflow","slug":"the-workflow","level":"h3","children":[]},{"text":"The Frontend","slug":"the-frontend","level":"h3","children":[]},{"text":"Data Exploration Examples","slug":"data-exploration-examples","level":"h3","children":[]},{"text":"Building Custom Visualizations","slug":"building-custom-visualizations","level":"h3","children":[]}]}],"metadata":{"date":"2025-03-09T17:49:01.000Z","modified":"2025-03-16T01:25:05.000Z","title":"Processing Telegram Leaks for Fast Web Visualization","dek":"In which I describe my workflow for transforming a Telegram database dump into a web-friendly format for analysis and visualization","tags":["data","dataviz","journalism","politics"],"words":725,"images":6,"imageDetails":{"total":6,"cloudinary":6,"withDimensions":0},"links":21,"codeBlocks":5,"headers":{"h2":2},"toc":[{"text":"Paramilitary Telegram Leaks: From Dump To Data","slug":"paramilitary-telegram-leaks-from-dump-to-data","level":"h2","children":[]},{"text":"From SQLite to Parquet: Processing Telegram Leaks for Fast Web Visualization","slug":"from-sqlite-to-parquet-processing-telegram-leaks-for-fast-web-visualization","level":"h2","children":[{"text":"The Challenge","slug":"the-challenge","level":"h3","children":[]},{"text":"The Workflow","slug":"the-workflow","level":"h3","children":[]},{"text":"The Frontend","slug":"the-frontend","level":"h3","children":[]},{"text":"Data Exploration Examples","slug":"data-exploration-examples","level":"h3","children":[]},{"text":"Building Custom Visualizations","slug":"building-custom-visualizations","level":"h3","children":[]}]}],"type":"post","slug":"2025/paramilitary-telegram-leaks-001"}},{"slug":"projects/connectology","title":"Connectology","date":"2026-03-01T00:00:00.000Z","type":"post","tags":["dataviz","network","web"],"toc":[],"metadata":{"title":"Connectology","date":"2026-03-01T00:00:00.000Z","category":"Dataviz","featured":true,"url":"https://connectology.room302.studio/","tech":["Nuxt 3","Vue 3","D3","graphology","SQLite","Clerk"],"state":"deployed","ai-involvement":"ai-assisted","context":"collaborative","tags":["dataviz","network","web"],"about":"[[project-notes/connectology]]","words":336,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":4,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/connectology"}},{"slug":"projects/covidcast","title":"COVIDcast","date":"2020-04-24T04:00:00.000Z","type":"post","modified":"2025-08-26T19:53:05.000Z","tags":["covid","dataviz","javascript","health"],"toc":[],"metadata":{"title":"COVIDcast","date":"2020-04-24T04:00:00.000Z","category":"Journalism","featured":false,"modified":"2025-08-26T19:53:05.000Z","url":"https://campustechnology.com/articles/2020/04/24/carnegie-mellon-maps-offer-more-data-for-covid-19-forecasting.aspx","tech":["Data Visualization","JavaScript","COVID-19 Data","Public Health"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["covid","dataviz","javascript","health"],"words":87,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":4,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/covidcast"}},{"slug":"projects/nbc-big-board","title":"NBC News Big Board","date":"2016-11-08T05:00:00.000Z","type":"post","modified":"2025-08-13T16:24:29.000Z","tags":["d3","dataviz","javascript","elections"],"toc":[],"metadata":{"title":"NBC News Big Board","date":"2016-11-08T05:00:00.000Z","client":"NBC News","category":"Journalism","modified":"2025-08-13T16:24:29.000Z","tech":["D3.js","JavaScript","Touch Interface","Election Data"],"featured":true,"state":"deployed","ai-involvement":"human-only","context":"client","tags":["d3","dataviz","javascript","elections"],"words":395,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":7,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/nbc-big-board"}},{"slug":"projects/nbcnews-specials","title":"NBC News Specials","date":"2016-12-14T20:01:50.000Z","type":"post","modified":"2025-08-13T16:01:12.000Z","tags":["dataviz","journalism","webdesign","elections"],"toc":[],"metadata":{"title":"NBC News Specials","date":"2016-12-14T20:01:50.000Z","client":"NBC News","category":"Journalism","featured":false,"modified":"2025-08-13T16:01:12.000Z","url":"https://nbcnews.com/specials","state":"deployed","ai-involvement":"human-only","tech":["JavaScript","D3","Longform Design"],"context":"client","tags":["dataviz","journalism","webdesign","elections"],"words":124,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":11,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/nbcnews-specials"}},{"slug":"projects/pixel-canvas","title":"Pixel Canvas","date":"2026-05-27T04:00:00.000Z","type":"post","draft":false,"tags":["hardware","device","dataviz","quantified-self"],"toc":[{"text":"How it works","slug":"how-it-works","level":"h2","children":[]}],"metadata":{"title":"Pixel Canvas","date":"2026-05-27T04:00:00.000Z","category":"Hardware","featured":true,"draft":false,"tech":["ESP32-S3","Arduino","LovyanGFX","Bash","REST API"],"state":"doing","ai-involvement":"ai-assisted","tags":["hardware","device","dataviz","quantified-self"],"words":532,"images":13,"imageDetails":{"total":13,"cloudinary":13,"withDimensions":0},"links":13,"codeBlocks":0,"headers":{"h2":1},"toc":[{"text":"How it works","slug":"how-it-works","level":"h2","children":[]}],"type":"post","slug":"projects/pixel-canvas"}},{"slug":"projects/subway-builder","title":"Subway Builder","date":"2026-05-01T04:00:00.000Z","type":"post","tags":["games","simulation","transit","dataviz"],"toc":[],"metadata":{"title":"Subway Builder","date":"2026-05-01T04:00:00.000Z","category":"Art","featured":false,"url":"https://github.com/ejfox/subway-builder-mods","tech":["JavaScript","Simulation","Transit","Game Modding"],"state":"evolved","ai-involvement":"ai-assisted","tags":["games","simulation","transit","dataviz"],"words":263,"images":10,"imageDetails":{"total":10,"cloudinary":10,"withDimensions":0},"links":11,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/subway-builder"}},{"slug":"reading/Yau-Visualize This","title":"Visualize This","type":"post","tags":["dataviz","data"],"toc":[{"text":"Visualize This","slug":"visualize-this","level":"h1","children":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}]}],"metadata":{"tags":["dataviz","data"],"kindle-sync":{"bookId":"431","title":"Visualize This: The FlowingData Guide to Design, Visualization, and Statistics","author":"Nathan Yau","asin":"B005CCT19M","lastAnnotatedDate":"2011-07-24","bookImageUrl":"https://m.media-amazon.com/images/I/511lwSnx7IL._SY160.jpg","highlightsCount":2},"words":123,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{"h1":1},"toc":[{"text":"Visualize This","slug":"visualize-this","level":"h1","children":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}]}],"type":"post","slug":"reading/Yau-Visualize This"}}]},"_links":{"self":"https://ejfox.com/blog/tag/dataviz.json","html":"https://ejfox.com/blog/tag/dataviz","tag_page":"/tag/dataviz.json"}}