

{"id":12225,"date":"2019-05-26T14:30:32","date_gmt":"2019-05-26T19:30:32","guid":{"rendered":"https:\/\/rud.is\/b\/?p=12225"},"modified":"2019-05-27T08:18:08","modified_gmt":"2019-05-27T13:18:08","slug":"two-new-ways-to-make-dns-over-https-queries-in-r","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/","title":{"rendered":"Two New Ways to Make DNS over HTTPS Queries in R"},"content":{"rendered":"<p>A fair bit of time ago the <code>{gdns}<\/code> package made its <a href=\"https:\/\/cran.rstudio.org\/web\/packages\/gdns\/\">way to CRAN<\/a> to give R users the ability to use Google&#8217;s (at that time) nascent support for <a href=\"https:\/\/en.wikipedia.org\/wiki\/DNS_over_HTTPS\">DNS over HTTPS<\/a> (DoH). A bit later on Cloudflare also provided a global DoH endpoint and that begat the (not-on-CRAN) <code>{dnsflare}<\/code> <a href=\"https:\/\/rud.is\/b\/2018\/04\/01\/more-options-for-querying-dns-from-r-with-1-1-1-1\/\">package<\/a>.<\/p>\n<p>There are actually two ways to make these <a href=\"https:\/\/tools.ietf.org\/id\/draft-ietf-doh-dns-over-https-05.html\">DoH queries<\/a>: one via an HTTPS <code>GET<\/code> REST API and the other via HTTPS <code>POST<\/code> queries that use <a href=\"https:\/\/www.icann.org\/en\/system\/files\/files\/presentation-dns-wireformat-protocols-13jul18-en.pdf\">DNS wireformat<\/a> queries and replies. While the <code>POST<\/code> side of DoH is pretty standardized\/uniform the <code>GET<\/code>\/REST API side is kind of the Wild West. I wanted a way to have support for both wireformat and REST idioms but also not have to write a gazillion packages to support the eventual plethora of diverse DoH <code>GET<\/code>\/REST API services.<\/p>\n<p>I &#8220;solved&#8221; this by first augmenting my (not-on-CRAN) <code>{clandnstine}<\/code> <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/clandnstine\">package<\/a> to support the <code>POST<\/code> wireformat DoH queries (since the underlying <a href=\"https:\/\/getdnsapi.net\"><code>{getdns}<\/code> library<\/a> supports decoding wireformat responses) and creating a very small <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/playdoh\"><code>{playdoh}<\/code> package<\/a> which provided generic support for (hopefully) any DoH <code>GET<\/code>\/REST endpoint.<\/p>\n<h3>DoH vs DoT<\/h3>\n<p>I made the <code>{clandnstine}<\/code> package primarily to support making <a href=\"https:\/\/en.wikipedia.org\/wiki\/DNS_over_TLS\">DNS over TLS<\/a> (DoT) queries but it makes sense to combine both DoH and DoT functionality into that package. The problem is that the legacy platform most of y&#8217;all R users are on (i.e. Windows) makes using that package problematic. Therefore, by separating out the DoH <code>GET<\/code> functionality into a standalone package I don&#8217;t have to write a DNS wireformat pure R response handler.<\/p>\n<p>There are performance and other differences between DoH and DoT. I suspect most DNS providers and also most open source DNS server will eventually support both DoH and DoT so which one you use will be up to your clients and use cases.<\/p>\n<h3>A Tale of Two (or More) Queries<\/h3>\n<p>We&#8217;ll issue a few queries over DoH and DoT to a few servers to ensure we&#8217;re getting the same results.<\/p>\n<pre><code class=\"language-r\">library(clandnstine) # both of these are on sourcehut (~hrbrmstr\/pkgname), \nlibrary(playdoh)     # or gitlab\/gitugh (hrbrmstr\/pkgname)\n\n# DoT\nx &lt;- gdns_context()\ngdns_query(x, \"example.com\", rr_type = \"a\")$just_address_answers$address_data\n## [1] \"93.184.216.34\"\n\n# DoH POST (wireformat)\ndoh_post(\"example.com\", \"a\", server_path = doh_servers$quad9$url)$answer$rdata$ipv4_address\n## [1] \"93.184.216.34\"\n\n# DoH GET (rest)\ndoh_get(\"example.com\", \"a\", service_path = doh_servers$securedns_eu$url)$data[1]\n## [1] \"93.184.216.34\"\n<\/code><\/pre>\n<p>To support the, er, <em>diversity<\/em> of requirements across various <code>GET<\/code>\/REST endpoints the <code>playdoh::doh_get()<\/code> function has an <code>extra_params<\/code> parameter which lets you specify any required extra REST query params. Both packages have an exposed global variable <code>doh_servers<\/code> which has both the URL and any required extra parameters.<\/p>\n<h3>FIN<\/h3>\n<p>As usual, kick the tyres, file issues and PRs where you like and if you do end up using either package drop a note in the comments.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A fair bit of time ago the {gdns} package made its way to CRAN to give R users the ability to use Google&#8217;s (at that time) nascent support for DNS over HTTPS (DoH). A bit later on Cloudflare also provided a global DoH endpoint and that begat the (not-on-CRAN) {dnsflare} package. There are actually two [&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":[74,91],"tags":[],"class_list":["post-12225","post","type-post","status-publish","format-standard","hentry","category-dns","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Two New Ways to Make DNS over HTTPS Queries in R - 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\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Two New Ways to Make DNS over HTTPS Queries in R - rud.is\" \/>\n<meta property=\"og:description\" content=\"A fair bit of time ago the {gdns} package made its way to CRAN to give R users the ability to use Google&#8217;s (at that time) nascent support for DNS over HTTPS (DoH). A bit later on Cloudflare also provided a global DoH endpoint and that begat the (not-on-CRAN) {dnsflare} package. There are actually two [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-26T19:30:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-27T13:18:08+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=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Two New Ways to Make DNS over HTTPS Queries in R\",\"datePublished\":\"2019-05-26T19:30:32+00:00\",\"dateModified\":\"2019-05-27T13:18:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/\"},\"wordCount\":401,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"DNS\",\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/\",\"name\":\"Two New Ways to Make DNS over HTTPS Queries in R - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"datePublished\":\"2019-05-26T19:30:32+00:00\",\"dateModified\":\"2019-05-27T13:18:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/05\\\/26\\\/two-new-ways-to-make-dns-over-https-queries-in-r\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Two New Ways to Make DNS over HTTPS Queries in R\"}]},{\"@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":"Two New Ways to Make DNS over HTTPS Queries in R - 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\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/","og_locale":"en_US","og_type":"article","og_title":"Two New Ways to Make DNS over HTTPS Queries in R - rud.is","og_description":"A fair bit of time ago the {gdns} package made its way to CRAN to give R users the ability to use Google&#8217;s (at that time) nascent support for DNS over HTTPS (DoH). A bit later on Cloudflare also provided a global DoH endpoint and that begat the (not-on-CRAN) {dnsflare} package. There are actually two [&hellip;]","og_url":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/","og_site_name":"rud.is","article_published_time":"2019-05-26T19:30:32+00:00","article_modified_time":"2019-05-27T13:18:08+00:00","author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Two New Ways to Make DNS over HTTPS Queries in R","datePublished":"2019-05-26T19:30:32+00:00","dateModified":"2019-05-27T13:18:08+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/"},"wordCount":401,"commentCount":3,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["DNS","R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/","url":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/","name":"Two New Ways to Make DNS over HTTPS Queries in R - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2019-05-26T19:30:32+00:00","dateModified":"2019-05-27T13:18:08+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2019\/05\/26\/two-new-ways-to-make-dns-over-https-queries-in-r\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Two New Ways to Make DNS over HTTPS Queries in R"}]},{"@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-3bb","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":4547,"url":"https:\/\/rud.is\/b\/2016\/07\/24\/mid-year-r-packages-update-summary\/","url_meta":{"origin":12225,"position":0},"title":"Mid-year R Packages Update Summary","author":"hrbrmstr","date":"2016-07-24","format":false,"excerpt":"I been updating some existing packages and github-releasing new ones (before a CRAN push). Most are \"cyber\"-related, but there are some general purpose ones. Here's a quick overview: docxtractr (CRAN, now, v0.2.0) was initially designed to make it easy to get data tables out of MS Word (docx) documents. The\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":4267,"url":"https:\/\/rud.is\/b\/2016\/04\/11\/clandestine-dns-lookups-with-gdns\/","url_meta":{"origin":12225,"position":1},"title":"Clandestine DNS lookups with gdns","author":"hrbrmstr","date":"2016-04-11","format":false,"excerpt":"Google recently [announced](https:\/\/developers.google.com\/speed\/public-dns\/docs\/dns-over-https) their DNS-over-HTTPS API, which _\"enhances privacy and security between a client and a recursive resolver, and complements DNSSEC to provide end-to-end authenticated DNS lookups\"_. The REST API they provided was pretty simple to [wrap into a package](https:\/\/github.com\/hrbrmstr\/gdns) and I tossed in some [SPF](http:\/\/www.openspf.org\/SPF_Record_Syntax) functions that I had\u2026","rel":"","context":"In &quot;APIs&quot;","block_context":{"text":"APIs","link":"https:\/\/rud.is\/b\/category\/apis\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/04\/Fullscreen_4_11_16__1_10_AM.png?fit=1173%2C1013&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/04\/Fullscreen_4_11_16__1_10_AM.png?fit=1173%2C1013&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/04\/Fullscreen_4_11_16__1_10_AM.png?fit=1173%2C1013&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/04\/Fullscreen_4_11_16__1_10_AM.png?fit=1173%2C1013&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/04\/Fullscreen_4_11_16__1_10_AM.png?fit=1173%2C1013&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3622,"url":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/","url_meta":{"origin":12225,"position":2},"title":"Doh! I Could Have Had Just Used V8!","author":"hrbrmstr","date":"2015-08-21","format":false,"excerpt":"An R user recently had the need to split a \"full, human name\" into component parts to retrieve first & last names. The full names could be anything from something simple like _\"David Regan\"_ to more complex & diverse such as _\"John Smith Jr.\"_, _\"Izaque Iuzuru Nagata\"_ or _\"Christian Schmit\u2026","rel":"","context":"In &quot;Javascript&quot;","block_context":{"text":"Javascript","link":"https:\/\/rud.is\/b\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9386,"url":"https:\/\/rud.is\/b\/2018\/04\/01\/more-options-for-querying-dns-from-r-with-1-1-1-1\/","url_meta":{"origin":12225,"position":3},"title":"More Options For Querying DNS From R with 1.1.1.1","author":"hrbrmstr","date":"2018-04-01","format":false,"excerpt":"You have to have been living under a rock to not know about Cloudflare's new 1.1.1.1 DNS offering. I won't go into \"privacy\", \"security\" or \"speed\" concepts in this post since that's a pretty huge topic to distill for folks given the, now, plethora of confusing (and pretty technical) options\u2026","rel":"","context":"In &quot;DNS&quot;","block_context":{"text":"DNS","link":"https:\/\/rud.is\/b\/category\/dns\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12383,"url":"https:\/\/rud.is\/b\/2019\/06\/28\/quick-hit-dig-ging-into-dns-records-with-processx\/","url_meta":{"origin":12225,"position":4},"title":"Quick hit: &#8216;dig&#8217;-ging Into r-project.org DNS Records with {processx}","author":"hrbrmstr","date":"2019-06-28","format":false,"excerpt":"The r-project.org domain had some temporary technical difficulties this week (2019-29) that made reaching R-related resources problematic for a bunch of folks for a period of time. Incidents like this underscore the need for regional and network diversity when it comes to ensuring the availability of DNS services. That is,\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":4968,"url":"https:\/\/rud.is\/b\/2017\/02\/01\/exploring-news-coverage-with-newsflash\/","url_meta":{"origin":12225,"position":5},"title":"Exploring News Coverage With newsflash","author":"hrbrmstr","date":"2017-02-01","format":false,"excerpt":"I was enthused to see a mention of this on the GDELT blog since I've been working on an R package dubbed newsflash to work with the API that the form front-ends. Given the current climate, I feel compelled to note that I'm neither a Clinton supporter\/defender\/advocate nor a ?\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\/02\/clinton_plot-1-1.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/02\/clinton_plot-1-1.png?fit=1200%2C600&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/02\/clinton_plot-1-1.png?fit=1200%2C600&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/02\/clinton_plot-1-1.png?fit=1200%2C600&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/02\/clinton_plot-1-1.png?fit=1200%2C600&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/12225","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=12225"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/12225\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=12225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=12225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=12225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}