

{"id":11859,"date":"2019-02-03T06:48:55","date_gmt":"2019-02-03T11:48:55","guid":{"rendered":"https:\/\/rud.is\/b\/?p=11859"},"modified":"2019-02-04T17:27:28","modified_gmt":"2019-02-04T22:27:28","slug":"r-package-update-urlscan","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/","title":{"rendered":"R Package Update: urlscan"},"content":{"rendered":"<p>The <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/urlscan\"><code>urlscan<\/code>?<\/a> package (an interface to the <a href=\"https:\/\/urlscan.io\/\">urlscan.io<\/a> API) is now at version 0.2.0 and supports urlscan.io&#8217;s authentication requirement when submitting a link for analysis. The service is handy if you want to learn about the details &mdash; all the gory technical details &mdash; for a website.<\/p>\n<p>For instance, say you wanted to check on <code>r-project.org<\/code>. You could manually go to the site, enter that into the request bar and wait for the <a href=\"https:\/\/urlscan.io\/result\/42fe8168-93f5-484b-89e2-1abbd1007b73\/loading\">result<\/a>:<\/p>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/urlscan-result\/\" rel=\"attachment wp-att-11860\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11860\" data-permalink=\"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/urlscan-result\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png?fit=1192%2C1000&amp;ssl=1\" data-orig-size=\"1192,1000\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"urlscan-result\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png?fit=510%2C428&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png?resize=510%2C428&#038;ssl=1\" alt=\"\" width=\"510\" height=\"428\" class=\"aligncenter size-full wp-image-11860\" \/><\/a><\/p>\n<p>Or, you can use R!. First pick your preferred social coding site, read through the source (this is going to be new advice for every post starting with this one. Don&#8217;t blindly trust code from any social coding site) an then install the <code>urlscan<\/code> package:<\/p>\n<pre><code class=\"language-r\">devtools::install_git(\"https:\/\/git.sr.ht\/~hrbrmstr\/urlscan\")\n# or\ndevtools::install_gitlab(\"hrbrmstr\/urlscan\")\n# or\ndevtools::install_github(\"hrbrmstr\/urlscan\")\n<\/code><\/pre>\n<p>Next, head on over back to urlscan.io and grab <a href=\"https:\/\/urlscan.io\/about-api\/\">an API key<\/a> (it&#8217;s free). Stick that in your <code>~\/.Renviron<\/code> under <code>URLSCAN_API_KEY<\/code> and then <code>readRenviron(\"~\/.Renviron\")<\/code> in your R console.<\/p>\n<p>Now, let&#8217;s check out <code>r-project.org<\/code>.<\/p>\n<pre><code class=\"language-r\">library(urlscan)\nlibrary(tidyverse)\n\nrproj &lt;- urlscan_search(\"r-project.org\")\n\nrproj\n##   URL Submitted: https:\/\/r-project.org\/\n##   Submission ID: eb2a5da1-dc0d-43e9-8236-dbc340b53772\n## Submission Type: public\n## Submission Note: Submission successful\n<\/code><\/pre>\n<p>There is more data in that <code>rproj<\/code> object but we have enough to get more detailed results back. Note that site will return an error when you use <code>urlscan_result()<\/code> if it hasn&#8217;t finished the analysis yet.<\/p>\n<pre><code class=\"language-r\">rproj_res &lt;- urlscan_result(\"eb2a5da1-dc0d-43e9-8236-dbc340b53772\", include_shot = TRUE)\n\nrproj_res\n##             URL: https:\/\/www.r-project.org\/\n##         Scan ID: eb2a5da1-dc0d-43e9-8236-dbc340b53772\n##       Malicious: FALSE\n##      Ad Blocked: FALSE\n##     Total Links: 8\n## Secure Requests: 19\n##    Secure Req %: 100%\n<\/code><\/pre>\n<p>That <code>rproj_res<\/code> holds quite a bit of data and makes no assumptions about how you want to use it so you will need to do some wrangling with it to find out. The <code>rproj_res$scan_result<\/code> entry contains entries with the following information:<\/p>\n<ul>\n<li><code>task<\/code>: Information about the submission: Time, method, options, links to screenshot\/DOM<\/li>\n<li><code>page<\/code>: High-level information about the page: Geolocation, IP, PTR<\/li>\n<li><code>lists<\/code>: Lists of domains, IPs, URLs, ASNs, servers, hashes<\/li>\n<li><code>data<\/code>: All of the requests\/responses, links, cookies, messages<\/li>\n<li><code>meta<\/code>: Processor output: ASN, GeoIP, AdBlock, Google Safe Browsing<\/li>\n<li><code>stats<\/code>: Computed stats (by type, protocol, IP, etc.) <\/li>\n<\/ul>\n<p>Let&#8217;s see how many domains the R Core folks are allowing to track you (if you&#8217;re not on legacy Windows OS you can find <code>curlparse<\/code> at <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/curlparse\">https:\/\/git.sr.ht\/~hrbrmstr\/curlparse<\/a> or <code>git[la|hu]b\/hrbrmstr\/curlparse<\/code>:<\/p>\n<pre><code class=\"language-r\">curlparse::domain(rproj_res$scan_result$lists$urls) %&gt;% # you can use urltools::domain() instead of curlparse\n  table(dnn = \"domain\") %&gt;% \n  broom::tidy() %&gt;% \n  arrange(desc(n))\n## # A tibble: 7 x 2\n##   domain                        n\n##   &lt;chr&gt;                     &lt;int&gt;\n## 1 platform.twitter.com          7\n## 2 www.r-project.org             5\n## 3 pbs.twimg.com                 3\n## 4 syndication.twitter.com       2\n## 5 ajax.googleapis.com           1\n## 6 cdn.syndication.twimg.com     1\n## 7 r-project.org                 1\n<\/code><\/pre>\n<p>Ironically, this is also how I learned that they allow Twitter to insecurely (no subresource integrity nor any content security policy) execute javascript in your browser (twitter javascript is blocked via multiple means at the hrbrmstr compound so I couldn&#8217;t see the widget).<\/p>\n<p>Since I added the <code>include_shot = TRUE<\/code> option, we also get a page screenshot back (as a <code>magick<\/code> object):<\/p>\n<pre><code class=\"language-r\">rproj_res$screenshot\n<\/code><\/pre>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/urlscan-shot\/\" rel=\"attachment wp-att-11861\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11861\" data-permalink=\"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/urlscan-shot\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-shot.png?fit=1600%2C1200&amp;ssl=1\" data-orig-size=\"1600,1200\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"urlscan-shot\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-shot.png?fit=510%2C383&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-shot.png?resize=510%2C383&#038;ssl=1\" alt=\"\" width=\"510\" height=\"383\" class=\"aligncenter size-full wp-image-11861\" \/><\/a><\/p>\n<h3>FIN<\/h3>\n<p>There&#8217;s tons of metadata to explore about web sites by using this package so jump in, kick the tyres, have fun! and file issues\/PRs as needed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The urlscan? package (an interface to the urlscan.io API) is now at version 0.2.0 and supports urlscan.io&#8217;s authentication requirement when submitting a link for analysis. The service is handy if you want to learn about the details &mdash; all the gory technical details &mdash; for a website. For instance, say you wanted to check on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[91],"tags":[],"class_list":["post-11859","post","type-post","status-publish","format-standard","hentry","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>R Package Update: urlscan - 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\/2019\/02\/03\/r-package-update-urlscan\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"R Package Update: urlscan - rud.is\" \/>\n<meta property=\"og:description\" content=\"The urlscan? package (an interface to the urlscan.io API) is now at version 0.2.0 and supports urlscan.io&#8217;s authentication requirement when submitting a link for analysis. The service is handy if you want to learn about the details &mdash; all the gory technical details &mdash; for a website. For instance, say you wanted to check on [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-03T11:48:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-02-04T22:27:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png\" \/>\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\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"R Package Update: urlscan\",\"datePublished\":\"2019-02-03T11:48:55+00:00\",\"dateModified\":\"2019-02-04T22:27:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/\"},\"wordCount\":401,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/urlscan-result.png\",\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/\",\"name\":\"R Package Update: urlscan - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/urlscan-result.png\",\"datePublished\":\"2019-02-03T11:48:55+00:00\",\"dateModified\":\"2019-02-04T22:27:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/urlscan-result.png?fit=1192%2C1000&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/urlscan-result.png?fit=1192%2C1000&ssl=1\",\"width\":1192,\"height\":1000},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/02\\\/03\\\/r-package-update-urlscan\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"R Package Update: urlscan\"}]},{\"@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":"R Package Update: urlscan - 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\/2019\/02\/03\/r-package-update-urlscan\/","og_locale":"en_US","og_type":"article","og_title":"R Package Update: urlscan - rud.is","og_description":"The urlscan? package (an interface to the urlscan.io API) is now at version 0.2.0 and supports urlscan.io&#8217;s authentication requirement when submitting a link for analysis. The service is handy if you want to learn about the details &mdash; all the gory technical details &mdash; for a website. For instance, say you wanted to check on [&hellip;]","og_url":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/","og_site_name":"rud.is","article_published_time":"2019-02-03T11:48:55+00:00","article_modified_time":"2019-02-04T22:27:28+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png","type":"","width":"","height":""}],"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\/2019\/02\/03\/r-package-update-urlscan\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"R Package Update: urlscan","datePublished":"2019-02-03T11:48:55+00:00","dateModified":"2019-02-04T22:27:28+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/"},"wordCount":401,"commentCount":5,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png","articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/","url":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/","name":"R Package Update: urlscan - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png","datePublished":"2019-02-03T11:48:55+00:00","dateModified":"2019-02-04T22:27:28+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png?fit=1192%2C1000&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/02\/urlscan-result.png?fit=1192%2C1000&ssl=1","width":1192,"height":1000},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2019\/02\/03\/r-package-update-urlscan\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"R Package Update: urlscan"}]},{"@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":"","jetpack_shortlink":"https:\/\/wp.me\/p23idr-35h","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":8230,"url":"https:\/\/rud.is\/b\/2018\/02\/16\/pym-js-library-vulnerability-in-widgetframe-package\/","url_meta":{"origin":11859,"position":0},"title":"Pym.js Library Vulnerability in widgetframe Package","author":"hrbrmstr","date":"2018-02-16","format":false,"excerpt":"What's Up? The NPR Visuals Team created and maintains a javascript library that makes it super easy to embed iframes on web pages and have said documents still be responsive. The widgetframe R htmlwidget uses pym.js to bring this (much needed) functionality into widgets and (eventually) shiny apps. NPR reported\u2026","rel":"","context":"In &quot;Cybersecurity&quot;","block_context":{"text":"Cybersecurity","link":"https:\/\/rud.is\/b\/category\/cybersecurity\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":13894,"url":"https:\/\/rud.is\/b\/2023\/03\/29\/using-webr-pyodide-to-fill-in-the-temporary-package-gaps\/","url_meta":{"origin":11859,"position":1},"title":"Using WebR + Pyodide To Fill In The (Temporary) Package Gaps","author":"hrbrmstr","date":"2023-03-29","format":false,"excerpt":"I won't wax long and poetic here since I've already posted the experiment that has all the details. TL;DR: there are still only ~90-ish ? in the WebR WASM \"CRAN\", but more are absolutely on the way, including the capability to build your own CRAN and dev packages via Docker\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"https:\/\/rud.is\/b\/category\/python-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6558,"url":"https:\/\/rud.is\/b\/2017\/10\/01\/retrieve-process-tv-news-chyrons-with-newsflash\/","url_meta":{"origin":11859,"position":2},"title":"Retrieve &#038; process TV News chyrons with newsflash","author":"hrbrmstr","date":"2017-10-01","format":false,"excerpt":"The Internet Archive recently announced a new service they've dubbed 'Third Eye'. This service scrapes the chyrons that annoyingly scroll across the bottom-third of TV news broadcasts. IA has a vast historical archive of TV news that they'll eventually process, but --- for now --- the more recent broadcasts from\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\/2017\/10\/chy01.png?fit=1200%2C594&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/10\/chy01.png?fit=1200%2C594&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/10\/chy01.png?fit=1200%2C594&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/10\/chy01.png?fit=1200%2C594&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/10\/chy01.png?fit=1200%2C594&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3194,"url":"https:\/\/rud.is\/b\/2015\/01\/08\/new-r-package-metricsgraphics\/","url_meta":{"origin":11859,"position":3},"title":"New R Package: metricsgraphics","author":"hrbrmstr","date":"2015-01-08","format":false,"excerpt":"Mozilla released the [MetricsGraphics.js library](http:\/\/metricsgraphicsjs.org\/) back in November of 2014 ([gh repo](https:\/\/github.com\/mozilla\/metrics-graphics)) and was greeted with great fanfare. It's primary focus is on crisp, clean layouts for interactive time-series data, but they have support for other chart types as well (though said support is far from comprehensive). I had been\u2026","rel":"","context":"In &quot;Charts &amp; Graphs&quot;","block_context":{"text":"Charts &amp; Graphs","link":"https:\/\/rud.is\/b\/category\/charts-graphs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12103,"url":"https:\/\/rud.is\/b\/2019\/03\/19\/assumptions-matter-more-than-dependencies\/","url_meta":{"origin":11859,"position":4},"title":"Assumptions Matter More Than Dependencies","author":"hrbrmstr","date":"2019-03-19","format":false,"excerpt":"There's been alot of talk about \"dependencies\" in the R universe of late. This is not really a post about that but more of a \"really, don't do this\" if you decide you want to poke the dependency bear by trying to build a deeply flawed model off of CRAN\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12609,"url":"https:\/\/rud.is\/b\/2020\/01\/03\/writing-frictionless-r-package-wrappers-building-a-basic-r-package\/","url_meta":{"origin":11859,"position":5},"title":"Writing Frictionless R Package Wrappers \u2014 Building A Basic R Package","author":"hrbrmstr","date":"2020-01-03","format":false,"excerpt":"Before we start wrapping foreign language code we need to make sure that basic R packages can be created. If you've followed along from the previous post you have everything you need to get started here. Just to make sure, you should be able to fire up a new RStudio\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11859","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=11859"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11859\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=11859"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=11859"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=11859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}