{"$schema":"https://ejfox.com/schema/page-twin@1.json","kind":"tag","url":"https://ejfox.com/tag/journalism","json_url":"https://ejfox.com/tag/journalism.json","generator":"ejfox.com/json-twin@1","data":{"tag":"journalism","posts":[{"slug":"2013/the-magazine-experience-on-the-web","title":"The Magazine Experience on the Web","date":"2013-01-25T10:00:00.000Z","type":"words","dek":"In which the author muses about 2013-era web design aesthetics","modified":"2026-01-04T01:37:32.000Z","tags":["journalism","webdesign","photography"],"toc":[{"text":"A hint of what's to come","slug":"a-hint-of-whats-to-come","level":"h3","children":[]},{"text":"Full Bleed Photos","slug":"full-bleed-photos","level":"h3","children":[]},{"text":"Collecting stories differently","slug":"collecting-stories-differently","level":"h3","children":[]},{"text":"Seamlessly importing more mediums","slug":"seamlessly-importing-more-mediums","level":"h3","children":[]},{"text":"Great presentation requires great stories","slug":"great-presentation-requires-great-stories","level":"h3","children":[]},{"text":"Everything should be naturally responsive","slug":"everything-should-be-naturally-responsive","level":"h3","children":[]},{"text":"Finding the path","slug":"finding-the-path","level":"h3","children":[]}],"metadata":{"dek":"In which the author muses about 2013-era web design aesthetics","type":"words","date":"2013-01-25T10:00:00.000Z","modified":"2026-01-04T01:37:32.000Z","tags":["journalism","webdesign","photography"],"words":1537,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":32,"codeBlocks":0,"headers":{"h3":7},"toc":[{"text":"A hint of what's to come","slug":"a-hint-of-whats-to-come","level":"h3","children":[]},{"text":"Full Bleed Photos","slug":"full-bleed-photos","level":"h3","children":[]},{"text":"Collecting stories differently","slug":"collecting-stories-differently","level":"h3","children":[]},{"text":"Seamlessly importing more mediums","slug":"seamlessly-importing-more-mediums","level":"h3","children":[]},{"text":"Great presentation requires great stories","slug":"great-presentation-requires-great-stories","level":"h3","children":[]},{"text":"Everything should be naturally responsive","slug":"everything-should-be-naturally-responsive","level":"h3","children":[]},{"text":"Finding the path","slug":"finding-the-path","level":"h3","children":[]}],"slug":"2013/the-magazine-experience-on-the-web"}},{"slug":"2020/online-brigades-gaming-twitter","title":"Online Nazis Have Figured Out How To Game Twitter","date":"2020-02-14T21:19:39-04:00","type":"words","dek":"The newest weapon in the arsenal of internet nazis is mass-brigading Twitter reports, and it’s working","tags":["activism","journalism","twitter","security"],"toc":[],"metadata":{"dek":"The newest weapon in the arsenal of internet nazis is mass-brigading Twitter reports, and it’s working","type":"words","date":"2020-02-14T21:19:39-04:00","tags":["activism","journalism","twitter","security"],"words":445,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":7,"codeBlocks":0,"headers":{},"toc":[],"slug":"2020/online-brigades-gaming-twitter"}},{"slug":"2020/things-ive-learned-about-elections","title":"Things I've learned about elections","date":"2020-02-09T03:19:38.000Z","type":"words","dek":"In which we explore the knotted beauty of American democracy","modified":"2024-09-23T16:13:21.000Z","tags":["elections","politics","data","journalism","media","research"],"toc":[{"text":"Edge cases","slug":"edge-cases","level":"h3","children":[]},{"text":"Races","slug":"races","level":"h3","children":[]},{"text":"Voting","slug":"voting","level":"h3","children":[]},{"text":"Reporting units","slug":"reporting-units","level":"h3","children":[]},{"text":"Election data","slug":"election-data","level":"h3","children":[]},{"text":"Primary elections","slug":"primary-elections","level":"h3","children":[]},{"text":"Voting machines","slug":"voting-machines","level":"h3","children":[]},{"text":"Coverage of elections","slug":"coverage-of-elections","level":"h3","children":[]},{"text":"Why do we have elections on Tuesdays?","slug":"why-do-we-have-elections-on-tuesdays","level":"h3","children":[]},{"text":"Resources","slug":"resources","level":"h3","children":[]}],"metadata":{"dek":"In which we explore the knotted beauty of American democracy","type":"words","date":"2020-02-09T03:19:38.000Z","modified":"2024-09-23T16:13:21.000Z","tags":["elections","politics","data","journalism","media","research"],"words":2376,"images":1,"imageDetails":{"total":1,"cloudinary":0,"withDimensions":0},"links":72,"codeBlocks":0,"headers":{"h3":10},"toc":[{"text":"Edge cases","slug":"edge-cases","level":"h3","children":[]},{"text":"Races","slug":"races","level":"h3","children":[]},{"text":"Voting","slug":"voting","level":"h3","children":[]},{"text":"Reporting units","slug":"reporting-units","level":"h3","children":[]},{"text":"Election data","slug":"election-data","level":"h3","children":[]},{"text":"Primary elections","slug":"primary-elections","level":"h3","children":[]},{"text":"Voting machines","slug":"voting-machines","level":"h3","children":[]},{"text":"Coverage of elections","slug":"coverage-of-elections","level":"h3","children":[]},{"text":"Why do we have elections on Tuesdays?","slug":"why-do-we-have-elections-on-tuesdays","level":"h3","children":[]},{"text":"Resources","slug":"resources","level":"h3","children":[]}],"slug":"2020/things-ive-learned-about-elections"}},{"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":724,"images":6,"imageDetails":{"total":6,"cloudinary":6,"withDimensions":0},"links":15,"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/ccrb-clusters","title":"Clusters of NYPD Misconduct","date":"2021-06-15T04:00:00.000Z","type":"post","modified":"2025-08-26T19:52:56.000Z","tags":["data","nypd","journalism","database"],"toc":[],"metadata":{"title":"Clusters of NYPD Misconduct","date":"2021-06-15T04:00:00.000Z","category":"Journalism","modified":"2025-08-26T19:52:56.000Z","url":"https://gothamist.com/news/mapping-clusters-nypd-officers-repeatedly-accused-misconduct","tech":["Neo4j","SQLite","Gephi","Network Analysis","Cypher"],"featured":true,"state":"deployed","ai-involvement":"human-only","context":"client","tags":["data","nypd","journalism","database"],"words":394,"images":3,"imageDetails":{"total":3,"cloudinary":3,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/ccrb-clusters"}},{"slug":"projects/dataproofer","title":"Dataproofer","date":"2015-11-03T05:00:00.000Z","type":"post","modified":"2025-08-26T19:53:33.000Z","tags":["data","javascript","tool","journalism"],"toc":[],"metadata":{"title":"Dataproofer","date":"2015-11-03T05:00:00.000Z","category":"Journalism","modified":"2025-08-26T19:53:33.000Z","url":"https://github.com/dataproofer/Dataproofer","tech":["JavaScript","Electron","Data Quality","CSV"],"featured":false,"state":"deployed","ai-involvement":"human-only","context":"collaborative","tags":["data","javascript","tool","journalism"],"words":171,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":2,"codeBlocks":1,"headers":{},"toc":[],"type":"post","slug":"projects/dataproofer"}},{"slug":"projects/long-lead","title":"Long Lead","date":"2021-11-18T05:00:00.000Z","type":"post","draft":false,"tags":["data","dataviz","journalism","investigations"],"toc":[{"text":"The Depths She'll Reach","slug":"the-depths-shell-reach","level":"h2","children":[]},{"text":"Querdenken: COVID Misinformation or Freedom Movement?","slug":"querdenken-covid-misinformation-or-freedom-movement","level":"h2","children":[]}],"metadata":{"title":"Long Lead","date":"2021-11-18T05:00:00.000Z","category":"Journalism","featured":false,"draft":false,"client":"Long Lead","tech":["Scrollytelling","Data Visualization","Network Analysis"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["data","dataviz","journalism","investigations"],"words":149,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":3,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"The Depths She'll Reach","slug":"the-depths-shell-reach","level":"h2","children":[]},{"text":"Querdenken: COVID Misinformation or Freedom Movement?","slug":"querdenken-covid-misinformation-or-freedom-movement","level":"h2","children":[]}],"type":"post","slug":"projects/long-lead"}},{"slug":"projects/margin-maps","title":"The Margin","date":"2022-09-21T04:00:00.000Z","type":"post","draft":false,"tags":["maps","dataviz","journalism","interactive"],"toc":[{"text":"We Glow in the Dark","slug":"we-glow-in-the-dark","level":"h2","children":[]},{"text":"Opening the Gateway","slug":"opening-the-gateway","level":"h2","children":[]}],"metadata":{"title":"The Margin","date":"2022-09-21T04:00:00.000Z","category":"Journalism","featured":false,"draft":false,"client":"The Margin","tech":["Mapping","Satellite Imagery","Scrollytelling","Data Visualization"],"state":"deployed","ai-involvement":"human-only","context":"client","tags":["maps","dataviz","journalism","interactive"],"words":143,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":4,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"We Glow in the Dark","slug":"we-glow-in-the-dark","level":"h2","children":[]},{"text":"Opening the Gateway","slug":"opening-the-gateway","level":"h2","children":[]}],"type":"post","slug":"projects/margin-maps"}},{"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":[{"text":"Journey of a Bullet (2017)","slug":"journey-of-a-bullet-2017","level":"h2","children":[]},{"text":"Post Bail (2017)","slug":"post-bail-2017","level":"h2","children":[]},{"text":"Does America Need Another Prison? (2018)","slug":"does-america-need-another-prison-2018","level":"h2","children":[]},{"text":"How Trump Won (2016)","slug":"how-trump-won-2016","level":"h2","children":[]},{"text":"And more","slug":"and-more","level":"h2","children":[]}],"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":255,"images":4,"imageDetails":{"total":4,"cloudinary":4,"withDimensions":0},"links":7,"codeBlocks":0,"headers":{"h2":5},"toc":[{"text":"Journey of a Bullet (2017)","slug":"journey-of-a-bullet-2017","level":"h2","children":[]},{"text":"Post Bail (2017)","slug":"post-bail-2017","level":"h2","children":[]},{"text":"Does America Need Another Prison? (2018)","slug":"does-america-need-another-prison-2018","level":"h2","children":[]},{"text":"How Trump Won (2016)","slug":"how-trump-won-2016","level":"h2","children":[]},{"text":"And more","slug":"and-more","level":"h2","children":[]}],"type":"post","slug":"projects/nbcnews-specials"}},{"slug":"projects/newswell","title":"Newswell Studio","date":"2025-10-01T00:00:00.000Z","type":"post","draft":false,"tags":["tools","journalism","dataviz"],"toc":[],"metadata":{"title":"Newswell Studio","date":"2025-10-01T00:00:00.000Z","category":"Tools","featured":false,"draft":false,"tech":["Nuxt 4","Vue","WordPress","PHP","GPT-4"],"state":"deployed","ai-involvement":"ai-assisted","tags":["tools","journalism","dataviz"],"words":130,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":0,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/newswell"}},{"slug":"projects/paramilitary-leaks","title":"Paramilitary Leaks","date":"2025-09-01T04:00:00.000Z","type":"post","tags":["journalism","data","osint","tools"],"toc":[],"metadata":{"title":"Paramilitary Leaks","date":"2025-09-01T04:00:00.000Z","category":"Journalism","featured":true,"tech":["Nuxt","Vue","Search","Data Visualization"],"state":"deployed","ai-involvement":"ai-assisted","context":"collaborative","tags":["journalism","data","osint","tools"],"words":178,"images":2,"imageDetails":{"total":2,"cloudinary":2,"withDimensions":0},"links":6,"codeBlocks":0,"headers":{},"toc":[],"type":"post","slug":"projects/paramilitary-leaks"}},{"slug":"reading/Hastings-The Last Magazine","title":"The Last Magazine","type":"post","tags":["book","journalism","writing"],"toc":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}],"metadata":{"tags":["book","journalism","writing"],"words":303,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}],"type":"post","slug":"reading/Hastings-The Last Magazine"}},{"slug":"reading/Kramer-Call-Telling True Stories","title":"Telling True Stories","type":"post","tags":["book","journalism","writing"],"toc":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}],"metadata":{"tags":["book","journalism","writing"],"words":290,"images":0,"imageDetails":{"total":0,"cloudinary":0,"withDimensions":0},"links":1,"codeBlocks":0,"headers":{"h2":2},"toc":[{"text":"Highlights","slug":"highlights","level":"h2","children":[]},{"text":"Metadata","slug":"metadata","level":"h2","children":[]}],"type":"post","slug":"reading/Kramer-Call-Telling True Stories"}}],"scraps":[{"title":"Beach and Bay Press: May 8, 2026","url":"https://timesofsandiego.com/print-editions/2026/05/08/beach-and-bay-press-may-8-2026/","tags":["localnews","journalism","media"],"hostname":"timesofsandiego.com","created_at":"2026-07-14T14:57:29+00:00"},{"title":"The Killing Of Hind Rajab","url":"https://forensic-architecture.org/investigation/the-killing-of-hind-rajab","tags":["journalism","politics","news","military"],"hostname":"forensic-architecture.org","created_at":"2024-06-23T16:52:20+00:00"},{"title":"Explore Explain S5 E3: Natalie Erdem - Data Viz Excellence, Everywhere","url":"https://visualisingdata.com/2024/06/explore-explain-s5-e3-natalie-erdem/","tags":["data","design","journalism","politics"],"hostname":"visualisingdata.com","created_at":"2024-06-19T04:41:04+00:00"},{"title":"\"One of the things I miss most about journalism is finishing anything, ever","url":"https://mastodon.social/@ejfox/112607955706765100","tags":["journalism"],"hostname":"mastodon.social","created_at":"2024-06-13T06:44:02.889+00:00"},{"title":"Hochul Raised Big Bucks From Real Estate Moguls Before Housing Deal","url":"https://readsludge.com/2024/04/25/hochul-raised-big-bucks-from-real-estate-moguls-before-housing-deal/","tags":["article","book","cms","data","elections","journalism","news","ny","politics"],"hostname":"readsludge.com","created_at":"2024-04-26T21:24:11+00:00"},{"title":"The conspiracy-loving Epoch Times is thinking about opening…a journalism school?","url":"https://www.niemanlab.org/2024/04/the-conspiracy-loving-epoch-times-is-thinking-about-opening-a-journalism-school/","tags":["journalism","news","politics"],"hostname":"niemanlab.org","created_at":"2024-04-08T21:20:00+00:00"},{"title":"A troubled cop moved from department to department, leaving scandal in his wake","url":"https://www.wxyz.com/news/local-news/investigations/how-a-troubled-michigan-cop-moved-from-department-to-department-leaving-scandal-in-his-wake","tags":["article","journalism","news","police","politics"],"hostname":"wxyz.com","created_at":"2024-03-29T02:29:46+00:00"},{"title":"What Happens When a Buffett Buys Your Town? - Tablet Magazine","url":"https://www.tabletmag.com/sections/news/articles/buffett-kingston-sean-cooper","tags":["journalism","localnews","media"],"hostname":"tabletmag.com","created_at":"2024-03-18T02:51:10+00:00"}]},"_links":{"self":"https://ejfox.com/tag/journalism.json","html":"https://ejfox.com/tag/journalism","blog_tag":"/blog/tag/journalism.json"}}