

{"id":49107,"date":"2026-07-02T11:56:15","date_gmt":"2026-07-02T16:56:15","guid":{"rendered":"https:\/\/rud.is\/b\/?p=49107"},"modified":"2026-07-02T11:58:55","modified_gmt":"2026-07-02T16:58:55","slug":"unjamming-the-chrome-releases-blog","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/","title":{"rendered":"Unjamming the Chrome Releases Blog"},"content":{"rendered":"<p>For the second time in a row, a post by cr0w on Mastodon regarding the Chrome release blog appearing to not render anything resulted in me firing up <code>lynx<\/code> to show a sub-second load and render, then finally doing something a bit more tangible about the situation.<\/p>\n<h3>The 81-Second Wall<\/h3>\n<p>The Google Blogger pages load an ancient copy of jQuery (1.11.3, from 2015) synchronously in the <code>&lt;head&gt;<\/code>, alongside a 53KB <code>widgets.js<\/code> Blogger framework. Then, posts like this one \u2014 <a href=\"https:\/\/chromereleases.googleblog.com\/2026\/06\/stable-channel-update-for-desktop_0175352312.html\">https:\/\/chromereleases.googleblog.com\/2026\/06\/stable-channel-update-for-desktop_0175352312.html<\/a> \u2014 stuff 433 CVE entries into the DOM \u2014 670KB of HTML, 5,045 nodes. The Blogger <code>WidgetManager<\/code> processes all of that against the DOM using jQuery&#8217;s notoriously slow selector engine, and the main thread stays locked for 81 seconds. Nothing else runs. Not even the HTTP request for the DoubleClick tracking pixel queued behind it (because ofc there&#8217;s a DoubleClick tracking pixel).<\/p>\n<p>The Safari Navigation Timing API numbers make it embarrassingly concrete:<\/p>\n<ul>\n<li><code>responseEnd<\/code>: 143ms<\/li>\n<li><code>domInteractive<\/code>: 231ms<\/li>\n<li><code>domContentLoaded<\/code>: 81,280ms<\/li>\n<\/ul>\n<p>That&#8217;s 81 seconds between &#8220;DOM is ready&#8221; and &#8220;page is loaded.&#8221; All burning prescious CPU cycles with zero network activity during that window.<\/p>\n<h3>Why This Matters (Again)<\/h3>\n<p>This is the second time I&#8217;ve felt compelled to dig into this particular mess. The Chrome Releases page is a real\/tangible operational resource \u2014 security teams, vulnerability managers, and researchers (somewhat, at least) depend on it for CVE data. When it&#8217;s broken, it creates a bottleneck for people who have real jobs to do.<\/p>\n<p>The 433 CVE entries choking the page are exactly what people came to read. But they&#8217;re baked into the HTML as rendered text, not exposed as structured data anywhere. So even when the page eventually loads, you&#8217;re still scraping HTML to get at anything useful.<\/p>\n<h3>unjam<\/h3>\n<p><code>unjam<\/code> solves that problem. It&#8217;s a small CLI that connects to a Blogger page and extracts structured data \u2014 both the widget configuration from the <code>_WidgetManager._SetDataContext<\/code> inline script and the CVE entries from Chrome Release posts \u2014 without touching a browser at all.<\/p>\n<p>It&#8217;s a single Deno binary for macOS, Linux, and Windows. No dependencies, no configuration overhead, just download and run:<\/p>\n<pre><code class=\"language-bash\">unjam --cve https:\/\/chromereleases.googleblog.com\/2026\/06\/stable-channel-update-for-desktop_0175352312.html\n<\/code><\/pre>\n<pre><code class=\"language-json\">[\n  {\n    \"issueId\": \"506558270\",\n    \"issueUrl\": \"https:\/\/issues.chromium.org\/issues\/506558270\",\n    \"severity\": \"Critical\",\n    \"cveId\": \"CVE-2026-13774\",\n    \"description\": \"Use after free in Extensions.\",\n    \"reporter\": \"Google\",\n    \"reportedOn\": \"2026-04-26\"\n  },\n  {\n    \"issueId\": \"511766407\",\n    \"issueUrl\": \"https:\/\/issues.chromium.org\/issues\/511766407\",\n    \"severity\": \"Critical\",\n    \"cveId\": \"CVE-2026-13775\",\n    \"description\": \"Use after free in GPU.\",\n    \"reporter\": \"Google\",\n    \"reportedOn\": \"2026-05-10\"\n  },\n  \u2026\n]\n<\/code><\/pre>\n<p>Getting CVE data from one of these posts used to mean waiting 81 seconds for a browser tab to finish wrestling with jQuery, then hand-scraping HTML. Now it takes about a second and returns clean JSON. The <code>--cve<\/code> flag parses each entry into structured fields \u2014 CVE ID, severity, description, issue tracker URL, reporter, and date reported \u2014 ready to pipe into <code>jq<\/code>, load into a database, or feed into whatever vulnerability management pipeline you&#8217;re running.<\/p>\n<p>The tool also handles the general case: any Blogger page carrying the <code>_WidgetManager._SetDataContext<\/code> inline script can be unwedged with the default mode, which converts the JavaScript object literal into proper JSON. That turned out to be useful enough to bake in as default functionality.<\/p>\n<p>The project&#8217;s at <strong><a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/unjam\">https:\/\/git.sr.ht\/~hrbrmstr\/unjam<\/a><\/strong> and has pre-built binaries for popular platforms.<\/p>\n<p>I don&#8217;t expect this page to stay broken forever\u2026I mean, <em>someone<\/em> at Google will eventually update the template (right, Anakin? right? Anakin?), and may even quietly drop the DoubleClick pixel (LOL) \u2014 but until then, <code>unjam<\/code> fills the gap cleanly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the second time in a row, a post by cr0w on Mastodon regarding the Chrome release blog appearing to not render anything resulted in me firing up lynx to show a sub-second load and render, then finally doing something a bit more tangible about the situation. The 81-Second Wall The Google Blogger pages load [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":49110,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":"","jetpack_post_was_ever_published":false},"categories":[681,764,3],"tags":[],"class_list":["post-49107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurity","category-data-wrangling","category-information-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Unjamming the Chrome Releases Blog - rud.is<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unjamming the Chrome Releases Blog - rud.is\" \/>\n<meta property=\"og:description\" content=\"For the second time in a row, a post by cr0w on Mastodon regarding the Chrome release blog appearing to not render anything resulted in me firing up lynx to show a sub-second load and render, then finally doing something a bit more tangible about the situation. The 81-Second Wall The Google Blogger pages load [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-02T16:56:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-02T16:58:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"hrbrmstr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hrbrmstr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Unjamming the Chrome Releases Blog\",\"datePublished\":\"2026-07-02T16:56:15+00:00\",\"dateModified\":\"2026-07-02T16:58:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/\"},\"wordCount\":518,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1\",\"articleSection\":[\"Cybersecurity\",\"data wrangling\",\"Information Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/\",\"name\":\"Unjamming the Chrome Releases Blog - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1\",\"datePublished\":\"2026-07-02T16:56:15+00:00\",\"dateModified\":\"2026-07-02T16:58:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1\",\"width\":800,\"height\":550},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2026\\\/07\\\/02\\\/unjamming-the-chrome-releases-blog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unjamming the Chrome Releases Blog\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/\",\"name\":\"rud.is\",\"description\":\"&quot;In God we trust. All others must bring data&quot;\",\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rud.is\\\/b\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\",\"name\":\"hrbrmstr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\",\"width\":460,\"height\":460,\"caption\":\"hrbrmstr\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/ukr-shield.png?fit=460%2C460&ssl=1\"},\"description\":\"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7\",\"sameAs\":[\"http:\\\/\\\/rud.is\"],\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/author\\\/hrbrmstr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unjamming the Chrome Releases Blog - rud.is","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/","og_locale":"en_US","og_type":"article","og_title":"Unjamming the Chrome Releases Blog - rud.is","og_description":"For the second time in a row, a post by cr0w on Mastodon regarding the Chrome release blog appearing to not render anything resulted in me firing up lynx to show a sub-second load and render, then finally doing something a bit more tangible about the situation. The 81-Second Wall The Google Blogger pages load [&hellip;]","og_url":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/","og_site_name":"rud.is","article_published_time":"2026-07-02T16:56:15+00:00","article_modified_time":"2026-07-02T16:58:55+00:00","og_image":[{"width":800,"height":550,"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg","type":"image\/jpeg"}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Unjamming the Chrome Releases Blog","datePublished":"2026-07-02T16:56:15+00:00","dateModified":"2026-07-02T16:58:55+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/"},"wordCount":518,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1","articleSection":["Cybersecurity","data wrangling","Information Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/","url":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/","name":"Unjamming the Chrome Releases Blog - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1","datePublished":"2026-07-02T16:56:15+00:00","dateModified":"2026-07-02T16:58:55+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1","width":800,"height":550},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2026\/07\/02\/unjamming-the-chrome-releases-blog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Unjamming the Chrome Releases Blog"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2026\/07\/how-to-unjam-a-paper-shredder.jpg?fit=800%2C550&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p23idr-cM3","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":13860,"url":"https:\/\/rud.is\/b\/2023\/03\/25\/linking-lits-lightweight-web-components-and-webr-for-vanilla-js-reactivity\/","url_meta":{"origin":49107,"position":0},"title":"Linking Lit&#8217;s Lightweight Web Components And WebR For Vanilla JS Reactivity","author":"hrbrmstr","date":"2023-03-25","format":false,"excerpt":"See it live before reading! This is a Lit + WebR reproduction of the OG Shiny Demo App Lit is a javascript library that makes it a bit easier to work with Web Components, and is especially well-suited in reactive environments. My recent hack-y WebR experiments have been using Reef\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"some descriptive text you can read at the linked url in the post. there's also a popup menu and a barplot.","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/lit-webr-phones.png?fit=1200%2C972&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/lit-webr-phones.png?fit=1200%2C972&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/lit-webr-phones.png?fit=1200%2C972&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/lit-webr-phones.png?fit=1200%2C972&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/lit-webr-phones.png?fit=1200%2C972&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":13554,"url":"https:\/\/rud.is\/b\/2022\/08\/22\/new-chrome-extension-to-turn-observable-notebooks-into-quarto-projects\/","url_meta":{"origin":49107,"position":1},"title":"New Chrome Extension To Turn Observable Notebooks Into Quarto Projects","author":"hrbrmstr","date":"2022-08-22","format":false,"excerpt":"My previous post announced a Rust-based command line tool for generating Quarto projects from Observable Notebooks. Some folks may not want to use yet-another command line tool, and it dawned on me that it'd be more convenient to just do the conversion in-browser when one is already on a Notebook\u2026","rel":"","context":"In &quot;Chrome&quot;","block_context":{"text":"Chrome","link":"https:\/\/rud.is\/b\/category\/chrome\/"},"img":{"alt_text":"screen capture of observable notebook showing how to press the quartize button","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/08\/quartize-button-530x479.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/08\/quartize-button-530x479.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2022\/08\/quartize-button-530x479.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":679,"url":"https:\/\/rud.is\/b\/2011\/12\/17\/still-not-a-fan-of-paywalls\/","url_meta":{"origin":49107,"position":2},"title":"Still Not A Fan Of Paywalls","author":"hrbrmstr","date":"2011-12-17","format":false,"excerpt":"As you can probably tell from a previous post, I'm not a fan of paywalls\u2014especially poorly implemented ones. Clicking on a link in an RSS feed post and having it land on a page, only to have it smothered in an HTML layer or \u2014 in the following case \u2014\u2026","rel":"","context":"In &quot;Browsers&quot;","block_context":{"text":"Browsers","link":"https:\/\/rud.is\/b\/category\/browsers\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2011\/12\/about_config-300x57.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":11416,"url":"https:\/\/rud.is\/b\/2018\/08\/23\/introducing-gepetto-a-splash-like-rest-api-to-headless-chrome\/","url_meta":{"origin":49107,"position":3},"title":"Introducing &#8216;gepetto&#8217; \u2014 a Splash-like REST API to Headless Chrome","author":"hrbrmstr","date":"2018-08-23","format":false,"excerpt":"It's been over a year since Headless Chrome was introduced and it has matured greatly over that time and has acquired a pretty large user base. The TLDR on it is that you can now use Chrome as you would any command-line interface (CLI) program and generate PDFs, images or\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/08\/nyt.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":13824,"url":"https:\/\/rud.is\/b\/2023\/03\/18\/webr-wasm-r-package-load-library-benchmarking-rabbit-hole\/","url_meta":{"origin":49107,"position":4},"title":"WebR WASM R Package Load\/Library Benchmarking Rabbit Hole","author":"hrbrmstr","date":"2023-03-18","format":false,"excerpt":"I have a post coming on using base and {ggplot2} plots in VanillaJS WebR, but after posting some bits on social media regarding how slow {ggplot2} is to deal with, I had some \"performance\"-related inquiries, which led me down a rabbit hole that I'm, now, dragging y'all down into as\u2026","rel":"","context":"In &quot;Javascript&quot;","block_context":{"text":"Javascript","link":"https:\/\/rud.is\/b\/category\/javascript\/"},"img":{"alt_text":"Histogram of WASM R package load times. Most load in well under 1s","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/pkgload.png?fit=1200%2C869&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/pkgload.png?fit=1200%2C869&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/pkgload.png?fit=1200%2C869&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/pkgload.png?fit=1200%2C869&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/03\/pkgload.png?fit=1200%2C869&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":13011,"url":"https:\/\/rud.is\/b\/2021\/04\/12\/check-developer-tools-first-to-avoid-heavy-ish-dependencies\/","url_meta":{"origin":49107,"position":5},"title":"Check &#8216;Developer Tools&#8217; First To Avoid Heavy-ish Dependencies","author":"hrbrmstr","date":"2021-04-12","format":false,"excerpt":"Guillaume Pressiat (@GuillaumePressiat) did a solid post & video on using Selenium to scrape a paginated table from understat[.]com\/league\/EPL\/2020 (I just cannot bring myself to provide an active link to any SportsBall site). He does a great job walking folks through acquiring & orchestrating the heavy dependency that is Selenium.\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"sportsball DOM node with JSON","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/04\/sportsball-dom-01.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/04\/sportsball-dom-01.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/04\/sportsball-dom-01.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/04\/sportsball-dom-01.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2021\/04\/sportsball-dom-01.png?resize=1050%2C600&ssl=1 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/49107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/comments?post=49107"}],"version-history":[{"count":3,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/49107\/revisions"}],"predecessor-version":[{"id":49116,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/49107\/revisions\/49116"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media\/49110"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=49107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=49107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=49107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}