

{"id":12749,"date":"2020-05-16T08:38:49","date_gmt":"2020-05-16T13:38:49","guid":{"rendered":"https:\/\/rud.is\/b\/?p=12749"},"modified":"2020-05-17T09:27:31","modified_gmt":"2020-05-17T14:27:31","slug":"attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/","title":{"rendered":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets!"},"content":{"rendered":"<p>I caught <a href=\"https:\/\/twitter.com\/edent\/status\/1260843046553387009\">this tweet<\/a> by Terence Eden about using Twitter image alt-text to &#8220;PGP sign&#8221; tweet and my mind immediately went to &#8220;how can I abuse this for covert communications, malicious command-and-control, and embedding R code in tweets?&#8221;.<\/p>\n<p>When you paste or upload an image to tweet (web interface, at least) you have an opportunity to add &#8220;alt&#8221; text which is \u2014 in theory \u2014\u00a0supposed to help communicate the content of the image to folks using assistive technology. Terence figured out the alt-text limit on Twitter is large (~1K) which is <em>plenty<\/em> of room for useful R code.<\/p>\n<p>I poked around for something to use as an example and settled on using data from <a href=\"https:\/\/covidstimuluswatch.org\/\">COVID Stimulus Watch<\/a>. The following makes the chart in this tweet \u2014 https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520.<\/p>\n<p>I&#8217;m not posting the chart here b\/c it&#8217;s nothing special, but the code for it is below.<\/p>\n<pre><code class=\"language-r\">library(hrbrthemes);\n\nx &lt;- read.csv(\"https:\/\/data.covidstimuluswatch.org\/prog.php?&amp;detail=export_csv\")[,3:5];\n\nx[,3] &lt;- as.numeric(gsub(\"[$,]\",\"\",x[,3]));\nx &lt;- x[(x[,1]&gt;20200400)&amp;x[,3]&gt;0,];\nx[,1] &lt;- as.Date(as.character(x[,1]),\"%Y%m%d\");\n\nggplot(x, aes(Award.Date, Grant.Amount, fill=Award.Type)) +\n  geom_col() +\n  scale_y_comma(\n    labels = c(\"$0\", \"$5bn\", \"$10bn\", \"$15bn\")\n  ) +\n  labs(\n    title = \"COVID Stimulus Watch: Grants\",\n    caption = \"Source: https:\/\/data.covidstimuluswatch.org\/prog.php?detail=opening\"\n  ) +\n  theme_ipsum_es(grid=\"XY\")\n<\/code><\/pre>\n<p>Semicolons are necessary b\/c newlines are going to get stripped when we paste that code block into the alt-text entry box.<\/p>\n<p>We can read that code back into R with some help from <code>read_html()<\/code> &amp; {styler}:<\/p>\n<pre><code class=\"language-r\">library(rtweet)\nlibrary(rvest)\nlibrary(stringi)\nlibrary(magrittr)\n\npg &lt;- read_html(\"https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520\")\n\nhtml_nodes(pg, \"img\") %&gt;% \n  html_attr(\"alt\") %&gt;% \n  keep(stri_detect_fixed, \"library\") %&gt;% \n  styler::style_text()\n<\/code><\/pre>\n<pre><code class=\"language-r\">library(hrbrthemes)\nx &lt;- read.csv(\"https:\/\/data.covidstimuluswatch.org\/prog.php?&amp;detail=export_csv\")[, 3:5]\nx[, 3] &lt;- as.numeric(gsub(\"[$,]\", \"\", x[, 3]))\nx &lt;- x[(x[, 1] &gt; 20200400) &amp; x[, 3] &gt; 0, ]\nx[, 1] &lt;- as.Date(as.character(x[, 1]), \"%Y%m%d\")\nggplot(x, aes(Award.Date, Grant.Amount, fill = Award.Type)) +\n  geom_col() +\n  scale_y_comma(\n    labels = c(\"$0\", \"$5bn\", \"$10bn\", \"$15bn\")\n  ) +\n  labs(\n    title = \"COVID Stimulus Watch: Grants\",\n    caption = \"Source: https:\/\/data.covidstimuluswatch.org\/prog.php?detail=opening\"\n  ) +\n  theme_ipsum_es(grid = \"XY\")\n<\/code><\/pre>\n<p>Twitter&#8217;s API does not seem to return alt-text: (see UPDATE)<\/p>\n<pre><code class=\"language-r\">rtweet::lookup_statuses(\"1261641887603179520\") %&gt;% \n  jsonlite::toJSON(pretty=TRUE)\n## [\n##   {\n##     \"user_id\": \"5685812\",\n##     \"status_id\": \"1261641887603179520\",\n##     \"created_at\": \"2020-05-16 12:57:20\",\n##     \"screen_name\": \"hrbrmstr\",\n##     \"text\": \"Twitter's img alt-text limit is YUGE! So, we can abuse it for semi-covert comms channels, C2, or for \\\"embedding\\\" the code ## that makes this chart!\\n\\nUse `read_html()` on URL of this tweet; find 'img' nodes w\/html_nodes(); extract 'alt' attr text w\/## html_attr(). #rstats \\n\\nh\/t @edent https:\/\/t.co\/v5Ut8TzlRO\",\n##     \"source\": \"Twitter Web App\",\n##     \"display_text_width\": 278,\n##     \"is_quote\": false,\n##     \"is_retweet\": false,\n##     \"favorite_count\": 8,\n##     \"retweet_count\": 2,\n##     \"hashtags\": [\"rstats\"],\n##     \"symbols\": [null],\n##     \"urls_url\": [null],\n##     \"urls_t.co\": [null],\n##     \"urls_expanded_url\": [null],\n##     \"media_url\": [\"http:\/\/pbs.twimg.com\/media\/EYI_W-xWsAAZFeP.png\"],\n##     \"media_t.co\": [\"https:\/\/t.co\/v5Ut8TzlRO\"],\n##     \"media_expanded_url\": [\"https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520\/photo\/1\"],\n##     \"media_type\": [\"photo\"],\n##     \"ext_media_url\": [\"http:\/\/pbs.twimg.com\/media\/EYI_W-xWsAAZFeP.png\"],\n##     \"ext_media_t.co\": [\"https:\/\/t.co\/v5Ut8TzlRO\"],\n##     \"ext_media_expanded_url\": [\"https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520\/photo\/1\"],\n##     \"mentions_user_id\": [\"14054507\"],\n##     \"mentions_screen_name\": [\"edent\"],\n##     \"lang\": \"en\",\n##     \"geo_coords\": [\"NA\", \"NA\"],\n##     \"coords_coords\": [\"NA\", \"NA\"],\n##     \"bbox_coords\": [\"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\", \"NA\"],\n##     \"status_url\": \"https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520\",\n##     \"name\": \"boB \u2022 Everywhere is Baltimore \u2022 Rudis\",\n##     \"location\": \"Doors &amp; Corners\",\n##     \"description\": \"Don't look at me\u2026I do what he does\u2014just slower. ? #rstats avuncular \u2022 pampa \u2022 #tired \u2022 ?\u200d? \u2022 \u271d\ufe0f \u2022 Pr\u00ecomh ## Neach-saidheans D\u00e0ta @ @rapid7\",\n##     \"url\": \"https:\/\/t.co\/RgY1wHjoqM\",\n##     \"protected\": false,\n##     \"followers_count\": 11886,\n##     \"friends_count\": 458,\n##     \"listed_count\": 667,\n##     \"statuses_count\": 84655,\n##     \"favourites_count\": 15140,\n##     \"account_created_at\": \"2007-05-01 14:04:24\",\n##     \"verified\": true,\n##     \"profile_url\": \"https:\/\/t.co\/RgY1wHjoqM\",\n##     \"profile_expanded_url\": \"https:\/\/rud.is\/b\",\n##     \"profile_banner_url\": \"https:\/\/pbs.twimg.com\/profile_banners\/5685812\/1398248552\",\n##     \"profile_background_url\": \"http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png\",\n##     \"profile_image_url\": \"http:\/\/pbs.twimg.com\/profile_images\/824974380803334144\/Vpmh_s3x_normal.jpg\"\n##   }\n## ]\n<\/code><\/pre>\n<p>but I still need to poke over at the API docs to figure out if there is a way to get it more programmatically. (see UPDATE)<\/p>\n<p>If we want to be incredibly irresponsible and daft (like a recently semi-shuttered R package installation service) we can throw caution to the wind and just plot it outright:<\/p>\n<pre><code class=\"language-r\">library(rtweet)\nlibrary(rvest)\nlibrary(stringi)\nlibrary(magrittr)\n\npg &lt;- read_html(\"https:\/\/twitter.com\/hrbrmstr\/status\/1261641887603179520\")\n\nhtml_nodes(pg, \"img\") %&gt;% \n  html_attr(\"alt\") %&gt;% \n  keep(stri_detect_fixed, \"library\") %&gt;% \n  textConnection() %&gt;% \n  source() %&gt;% # THIS IS DANGEROUS DO NOT TRY THIS AT HOME\n  print()\n<\/code><\/pre>\n<p>Seriously, though, don&#8217;t do that. Lots of bad things can happen when you <code>source()<\/code> from the internet.<\/p>\n<h3>UPDATE (2020-05-17)<\/h3>\n<p>You can use:<\/p>\n<pre><code class=\"language-r\">paste(as.character(parse(text = \"...\")), collapse = \"; \")\n<\/code><\/pre>\n<p>to &#8220;minify&#8221; R code for the alt-text.<\/p>\n<p>And, you can use <a href=\"https:\/\/github.com\/hrbrmstr\/rtweet\">https:\/\/github.com\/hrbrmstr\/rtweet<\/a> until it is PR&#8217;d back into {rtweet} proper to send tweets with image alt-text. The &#8220;status&#8221; functions also return any alt-text in a new <code>ext_alt_text<\/code> column.<\/p>\n<h3>FIN<\/h3>\n<p>Now, you can make your Twitter charts reproducible on-platform (until Twitter does something to thwart this new communication and file-sharing channel).<\/p>\n<p>Since twitter status URLs are just GET requests, orgs should consider running the content of those URLs through alt-text extractors <em>just in case<\/em> there&#8217;s some funny business going on across user endpoints.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I caught this tweet by Terence Eden about using Twitter image alt-text to &#8220;PGP sign&#8221; tweet and my mind immediately went to &#8220;how can I abuse this for covert communications, malicious command-and-control, and embedding R code in tweets?&#8221;. When you paste or upload an image to tweet (web interface, at least) you have an opportunity [&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,655],"tags":[],"class_list":["post-12749","post","type-post","status-publish","format-standard","hentry","category-r","category-twitter-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - 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\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - rud.is\" \/>\n<meta property=\"og:description\" content=\"I caught this tweet by Terence Eden about using Twitter image alt-text to &#8220;PGP sign&#8221; tweet and my mind immediately went to &#8220;how can I abuse this for covert communications, malicious command-and-control, and embedding R code in tweets?&#8221;. When you paste or upload an image to tweet (web interface, at least) you have an opportunity [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-16T13:38:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-17T14:27:31+00:00\" \/>\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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Attach Your R Code To Charts You Tweet For Reproducible R Tweets!\",\"datePublished\":\"2020-05-16T13:38:49+00:00\",\"dateModified\":\"2020-05-17T14:27:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\"},\"wordCount\":383,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"R\",\"twitter\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\",\"url\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\",\"name\":\"Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - rud.is\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/#website\"},\"datePublished\":\"2020-05-16T13:38:49+00:00\",\"dateModified\":\"2020-05-17T14:27:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/rud.is\/b\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Attach Your R Code To Charts You Tweet For Reproducible R Tweets!\"}]},{\"@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":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - 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\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/","og_locale":"en_US","og_type":"article","og_title":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - rud.is","og_description":"I caught this tweet by Terence Eden about using Twitter image alt-text to &#8220;PGP sign&#8221; tweet and my mind immediately went to &#8220;how can I abuse this for covert communications, malicious command-and-control, and embedding R code in tweets?&#8221;. When you paste or upload an image to tweet (web interface, at least) you have an opportunity [&hellip;]","og_url":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/","og_site_name":"rud.is","article_published_time":"2020-05-16T13:38:49+00:00","article_modified_time":"2020-05-17T14:27:31+00:00","author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets!","datePublished":"2020-05-16T13:38:49+00:00","dateModified":"2020-05-17T14:27:31+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/"},"wordCount":383,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["R","twitter"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/","url":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/","name":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets! - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2020-05-16T13:38:49+00:00","dateModified":"2020-05-17T14:27:31+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2020\/05\/16\/attach-your-r-code-to-charts-you-tweet-for-reproducible-r-tweets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Attach Your R Code To Charts You Tweet For Reproducible R Tweets!"}]},{"@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-3jD","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":7803,"url":"https:\/\/rud.is\/b\/2018\/01\/15\/cant-stop-at-21-twitter-recipe-22-tying-up-loose-threads\/","url_meta":{"origin":12749,"position":0},"title":"Can&#8217;t Stop at 21: Twitter Recipe #22 \u2014 Tying Up Loose Threads","author":"hrbrmstr","date":"2018-01-15","format":false,"excerpt":"NOTE: The likelihood of this recipe being added to the recent practice bookdown book is slim, but I'll try to keep the same format for the blog post. Problem You want to collect all the tweets in a Twitter tweet thread Solution Use a few key functions in rtweet to\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\/01\/Screen-Shot-2018-01-15-at-3.01.13-PM.png?fit=962%2C1200&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-15-at-3.01.13-PM.png?fit=962%2C1200&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-15-at-3.01.13-PM.png?fit=962%2C1200&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/01\/Screen-Shot-2018-01-15-at-3.01.13-PM.png?fit=962%2C1200&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":7733,"url":"https:\/\/rud.is\/b\/2017\/12\/30\/r%e2%81%b6-capture-tweets-with-tweet_shot\/","url_meta":{"origin":12749,"position":1},"title":"R\u2076 \u2014 Capture Tweets with tweet_shot()","author":"hrbrmstr","date":"2017-12-30","format":false,"excerpt":"(You can find all R\u2076 posts here) UPDATE 2018-01-01 --- this has been added to rtweet (GH version). A Twitter discussion: I'm going to keep my eyes out for this one! Would love to have an easy way to embed tweets in Rmd talks!\u2014 Jeff Hollister (@jhollist) December 30, 2017\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\/12\/preview.png?fit=517%2C899&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":7108,"url":"https:\/\/rud.is\/b\/2017\/11\/13\/twitter-outer-limits-seeing-how-far-have-folks-fallen-down-the-slippery-slope-to-280-with-rtweet\/","url_meta":{"origin":12749,"position":2},"title":"Twitter Outer Limits : Seeing How Far Have Folks Fallen Down The Slippery Slope to &#8220;280&#8221; with rtweet","author":"hrbrmstr","date":"2017-11-13","format":false,"excerpt":"By now, virtually every major media outlet has covered the \"280 Apocalypse\"\u2122. For those still not \"in the know\", Twitter recently moved the tweet character cap to 280 after a \"successful\" beta test (some of us have different ideas of what \"success\" looks like). I had been on a hiatus\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\/11\/plot_zoom_png-2.png?fit=1200%2C1061&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png-2.png?fit=1200%2C1061&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png-2.png?fit=1200%2C1061&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png-2.png?fit=1200%2C1061&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/11\/plot_zoom_png-2.png?fit=1200%2C1061&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":6917,"url":"https:\/\/rud.is\/b\/2017\/10\/30\/gg_tweeting-power-outages\/","url_meta":{"origin":12749,"position":3},"title":"gg_tweet&#8217;ing Power Outages","author":"hrbrmstr","date":"2017-10-30","format":false,"excerpt":"As many folks know, I live in semi-rural Maine and we were hit pretty hard with a wind+rain storm Sunday to Monday. The hrbrmstr compound had no power (besides a generator) and no stable\/high-bandwidth internet (Verizon LTE was heavily congested) since 0500 Monday and still does not as I write\u2026","rel":"","context":"In &quot;ggplot&quot;","block_context":{"text":"ggplot","link":"https:\/\/rud.is\/b\/category\/ggplot\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6788,"url":"https:\/\/rud.is\/b\/2017\/10\/22\/a-call-to-tweets-blog-posts\/","url_meta":{"origin":12749,"position":4},"title":"A Call to Tweets (&#038; Blog Posts)!","author":"hrbrmstr","date":"2017-10-22","format":false,"excerpt":"Way back in July of 2009, the first version of the twitteR package was published by Geoff Jentry in CRAN. Since then it has seen 28 updates, finally breaking the 0.x.y barrier into 1.x.y territory in March of 2013 and receiving it's last update in July of 2015. For a\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":11082,"url":"https:\/\/rud.is\/b\/2018\/07\/22\/new-apache-drill-udf-for-processing-twitter-tweet-text\/","url_meta":{"origin":12749,"position":5},"title":"New Apache Drill UDF for Processing Twitter Tweet Text","author":"hrbrmstr","date":"2018-07-22","format":false,"excerpt":"There are many ways to gather Twitter data for analysis and many R and Python (et al) libraries make full use of the Twitter API when building a corpus to extract useful metadata for each tweet along with the text of each tweet. However, many corpus archives are minimal and\u2026","rel":"","context":"In &quot;Apache Drill&quot;","block_context":{"text":"Apache Drill","link":"https:\/\/rud.is\/b\/category\/apache-drill\/"},"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\/12749","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=12749"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/12749\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=12749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=12749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=12749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}