

{"id":9299,"date":"2018-03-23T13:06:39","date_gmt":"2018-03-23T18:06:39","guid":{"rendered":"https:\/\/rud.is\/b\/?p=9299"},"modified":"2018-03-23T13:06:39","modified_gmt":"2018-03-23T18:06:39","slug":"on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/","title":{"rendered":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week)"},"content":{"rendered":"<p>A quick Friday post to let folks know about three in-development R packages that you&#8217;re encouraged to poke the tyres o[fn] and also jump in and file issues or PRs for.<\/p>\n<h3>Alleviating aversion to versions<\/h3>\n<p>I introduced a &#8220;version chart&#8221; in a <a href=\"https:\/\/rud.is\/b\/2018\/03\/07\/handling-semantic-version-string-like-a-boss-with-the-semver-package\/\">recent post<\/a> and one key element of tagging years (which are <em>really<\/em> helpful to get a feel for scope of exposure + technical\/cyber-debt) is knowing the dates of product version releases. You can pay for such a database but it&#8217;s also possible to cobble one together, and that activity will be much easier as time goes on with the <a href=\"https:\/\/github.com\/hrbrmstr\/vershist\"><code>vershist<\/code>?<\/a> package.<\/p>\n<p>Here&#8217;s a sample:<\/p>\n<pre id=\"20180323roundup01\"><code class=\"language-r\">apache_httpd_version_history()\r\n## # A tibble: 29 x 8\r\n##    vers   rls_date   rls_year major minor patch prerelease build\r\n##    &lt;fct&gt;  &lt;date&gt;        &lt;dbl&gt; &lt;int&gt; &lt;int&gt; &lt;int&gt; &lt;chr&gt;      &lt;chr&gt;\r\n##  1 1.3.0  1998-06-05     1998     1     3     0 &quot;&quot;         &quot;&quot;   \r\n##  2 1.3.1  1998-07-22     1998     1     3     1 &quot;&quot;         &quot;&quot;   \r\n##  3 1.3.2  1998-09-21     1998     1     3     2 &quot;&quot;         &quot;&quot;   \r\n##  4 1.3.3  1998-10-09     1998     1     3     3 &quot;&quot;         &quot;&quot;   \r\n##  5 1.3.4  1999-01-10     1999     1     3     4 &quot;&quot;         &quot;&quot;   \r\n##  6 1.3.6  1999-03-23     1999     1     3     6 &quot;&quot;         &quot;&quot;   \r\n##  7 1.3.9  1999-08-19     1999     1     3     9 &quot;&quot;         &quot;&quot;   \r\n##  8 1.3.11 2000-01-22     2000     1     3    11 &quot;&quot;         &quot;&quot;   \r\n##  9 1.3.12 2000-02-25     2000     1     3    12 &quot;&quot;         &quot;&quot;   \r\n## 10 1.3.14 2000-10-10     2000     1     3    14 &quot;&quot;         &quot;&quot;   \r\n## # ... with 19 more rows<\/code><\/pre>\n<p>Not all vendored-software uses semantic versioning and many have terrible schemes that make it really hard to create an ordered factor, but when that is possible, you get a nice data frame with an ordered factor you can use for all sorts of fun and useful things.<\/p>\n<p>It has current support for:<\/p>\n<ul>\n<li>Apache httpd<\/li>\n<li>Apple iOS<\/li>\n<li>Google Chrome<\/li>\n<li>lighttpd<\/li>\n<li>memcached<\/li>\n<li>MongoDB<\/li>\n<li>MySQL<\/li>\n<li>nginx<\/li>\n<li>openresty<\/li>\n<li>openssh<\/li>\n<li>sendmail<\/li>\n<li>SQLite<\/li>\n<\/ul>\n<p>and I&#8217;ll add more over time.<\/p>\n<p>Thanks to @bikesRdata there will be a <code>\u2026_latest()<\/code> function for each vendor and I&#8217;ll likely add some helper functions so you only need to call one function with a parameter vs individual ones for each version and will also likely add a caching layer so you don&#8217;t have to scrape\/clone\/munge every time you need versions (seriously: look at the code to see what you have to do to collect some of this data).<\/p>\n<h3>And, they all it a MIME&hellip;a <em>MIME<\/em>!<\/h3>\n<p>I&#8217;ve had the <a href=\"https:\/\/github.com\/hrbrmstr\/wand\"><code>wand<\/code>?<\/a> package out for a while but have never been truly happy with it. It uses <code>libmagic<\/code> on unix-ish systems but requires Rtools on Windows and relies on a system call to <code>file.exe<\/code> on that platform. Plus the &#8220;magic&#8221; database is too big to embed in the package and due to the (very, very, very good and necessary) privacy\/safety practices of CRAN, writing the boilerplate code to deal with compilation or downloading of the magic database is not something I have time for (and it really needs regular updates for consistent output on all platforms).<\/p>\n<p>A very helpful chap, @VincentGuyader, was lamenting some of the Windows issues which spawned a quick release of <a href=\"https:\/\/github.com\/hrbrmstr\/simplemagic\"><code>simplemagic<\/code>?<\/a>. The goal of this package is to be a zero-dependency install with no reliance on external databases. It has built-in support for basing MIME-type &#8220;guesses&#8221; off of a handful of the more common types folks might want to use this package for and a built-in &#8220;database&#8221; of over 1,500 file type-to-MIME mappings for guessing based solely on extension.<\/p>\n<pre id=\"20180323roundup02\"><code class=\"language-r\">list.files(system.file(&quot;extdat&quot;, package=&quot;simplemagic&quot;), full.names=TRUE) %&gt;% \r\n  purrr::map_df(~{\r\n    dplyr::data_frame(\r\n      fil = basename(.x),\r\n      mime = list(simplemagic::get_content_type(.x))\r\n    )\r\n  }) %&gt;% \r\n  tidyr::unnest()\r\n## # A tibble: 85 x 2\r\n##    fil                        mime                                                                     \r\n##    &lt;chr&gt;                      &lt;chr&gt;                                                                    \r\n##  1 actions.csv                application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet        \r\n##  2 actions.txt                application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet        \r\n##  3 actions.xlsx               application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet        \r\n##  4 test_1.2.class             application\/java-vm                                                      \r\n##  5 test_1.3.class             application\/java-vm                                                      \r\n##  6 test_1.4.class             application\/java-vm                                                      \r\n##  7 test_1.5.class             application\/java-vm                                                      \r\n##  8 test_128_44_jstereo.mp3    audio\/mp3                                                                \r\n##  9 test_excel_2000.xls        application\/msword                                                       \r\n## 10 test_excel_spreadsheet.xml application\/xml      \r\n## ...<\/code><\/pre>\n<p>File issues or PRs if you need more header-magic introspected guesses.<\/p>\n<p>NOTE: The <a href=\"https:\/\/github.com\/ropensci\/rtika\"><code>rtika<\/code>?<\/a> package could theoretically do a more comprehensive job since Apache Tika has an amazing assortment of file-type introspect-ors. Also, an interesting academic exercise might be to collect a sufficient corpus of varying files, pull the first 512-4096 bytes of each, do some feature generation and write an ML-based classifier for files with a confidence level + MIME-type output.<\/p>\n<h3>Site promiscuity detection<\/h3>\n<p><a href=\"https:\/\/urlscan.io\/\">urlscan<\/a> is a fun site since it frees you from the tedium (and expense\/privacy-concerns) of using a javascript-enabled scraping setup to pry into the makeup of a target URL and find out all sorts of details about it, including how many sites it lets track you. You can do the same with my <a href=\"https:\/\/github.com\/hrbrmstr\/splashr\"><code>splashr<\/code>?<\/a> package, but you have the benefit of a third-party making the connection with urlscan.io vs requests coming from your IP space.<\/p>\n<p>I&#8217;m waiting on an API key so I can write the &#8220;submit a scan request programmatically&#8221; function, but&#8212;until then&#8212;you can retrieve existing sites in their database or manually enter one for later retrieval.<\/p>\n<p>The package is a WIP but has enough bits to be useful now to, say, see just how promiscuous <code>cnn.com<\/code> makes you:<\/p>\n<pre id=\"20180323roundup03\"><code class=\"language-r\">cnn_db &lt;- urlscan::urlscan_search(&quot;domain:cnn.com&quot;)\r\n\r\nlatest_scan_results &lt;- urlscan::urlscan_result(cnn_db$results$`_id`[1], TRUE, TRUE)\r\n\r\nlatest_scan_results$scan_result$lists$ips\r\n##  [1] &quot;151.101.65.67&quot;   &quot;151.101.113.67&quot;  &quot;2.19.34.83&quot;     \r\n##  [4] &quot;2.20.22.7&quot;       &quot;2.16.186.112&quot;    &quot;54.192.197.56&quot;  \r\n##  [7] &quot;151.101.114.202&quot; &quot;83.136.250.242&quot;  &quot;157.166.238.142&quot;\r\n## [10] &quot;13.32.217.114&quot;   &quot;23.67.129.200&quot;   &quot;2.18.234.21&quot;    \r\n## [13] &quot;13.32.145.105&quot;   &quot;151.101.112.175&quot; &quot;172.217.21.194&quot; \r\n## [16] &quot;52.73.250.52&quot;    &quot;172.217.18.162&quot;  &quot;216.58.210.2&quot;   \r\n## [19] &quot;172.217.23.130&quot;  &quot;34.238.24.243&quot;   &quot;13.107.21.200&quot;  \r\n## [22] &quot;13.32.159.194&quot;   &quot;2.18.234.190&quot;    &quot;104.244.43.16&quot;  \r\n## [25] &quot;54.192.199.124&quot;  &quot;95.172.94.57&quot;    &quot;138.108.6.20&quot;   \r\n## [28] &quot;63.140.33.27&quot;    &quot;2.19.43.224&quot;     &quot;151.101.114.2&quot;  \r\n## [31] &quot;74.201.198.92&quot;   &quot;54.76.62.59&quot;     &quot;151.101.113.194&quot;\r\n## [34] &quot;2.18.233.186&quot;    &quot;216.58.207.70&quot;   &quot;95.172.94.20&quot;   \r\n## [37] &quot;104.244.42.5&quot;    &quot;2.18.234.36&quot;     &quot;52.94.218.7&quot;    \r\n## [40] &quot;62.67.193.96&quot;    &quot;62.67.193.41&quot;    &quot;69.172.216.55&quot;  \r\n## [43] &quot;13.32.145.124&quot;   &quot;50.31.185.52&quot;    &quot;54.210.114.183&quot; \r\n## [46] &quot;74.120.149.167&quot;  &quot;64.202.112.28&quot;   &quot;185.60.216.19&quot;  \r\n## [49] &quot;54.192.197.119&quot;  &quot;185.60.216.35&quot;   &quot;46.137.176.25&quot;  \r\n## [52] &quot;52.73.56.77&quot;     &quot;178.250.2.67&quot;    &quot;54.229.189.67&quot;  \r\n## [55] &quot;185.33.223.197&quot;  &quot;104.244.42.3&quot;    &quot;50.16.188.173&quot;  \r\n## [58] &quot;50.16.238.189&quot;   &quot;52.59.88.2&quot;      &quot;52.38.152.125&quot;  \r\n## [61] &quot;185.33.223.80&quot;   &quot;216.58.207.65&quot;   &quot;2.18.235.40&quot;    \r\n## [64] &quot;69.172.216.58&quot;   &quot;107.23.150.218&quot;  &quot;34.192.246.235&quot; \r\n## [67] &quot;107.23.209.129&quot;  &quot;13.32.145.107&quot;   &quot;35.157.255.181&quot; \r\n## [70] &quot;34.228.72.179&quot;   &quot;69.172.216.111&quot;  &quot;34.205.202.95&quot;\r\n\r\nlatest_scan_results$scan_result$lists$countries\r\n## [1] &quot;US&quot; &quot;EU&quot; &quot;GB&quot; &quot;NL&quot; &quot;IE&quot; &quot;FR&quot; &quot;DE&quot;\r\n\r\nlatest_scan_results$scan_result$lists$domains\r\n##  [1] &quot;cdn.cnn.com&quot;                    &quot;edition.i.cdn.cnn.com&quot;         \r\n##  [3] &quot;edition.cnn.com&quot;                &quot;dt.adsafeprotected.com&quot;        \r\n##  [5] &quot;pixel.adsafeprotected.com&quot;      &quot;securepubads.g.doubleclick.net&quot;\r\n##  [7] &quot;tpc.googlesyndication.com&quot;      &quot;z.moatads.com&quot;                 \r\n##  [9] &quot;mabping.chartbeat.net&quot;          &quot;fastlane.rubiconproject.com&quot;   \r\n## [11] &quot;b.sharethrough.com&quot;             &quot;geo.moatads.com&quot;               \r\n## [13] &quot;static.adsafeprotected.com&quot;     &quot;beacon.krxd.net&quot;               \r\n## [15] &quot;revee.outbrain.com&quot;             &quot;smetrics.cnn.com&quot;              \r\n## [17] &quot;pagead2.googlesyndication.com&quot;  &quot;secure.adnxs.com&quot;              \r\n## [19] &quot;0914.global.ssl.fastly.net&quot;     &quot;cdn.livefyre.com&quot;              \r\n## [21] &quot;logx.optimizely.com&quot;            &quot;cdn.krxd.net&quot;                  \r\n## [23] &quot;s0.2mdn.net&quot;                    &quot;as-sec.casalemedia.com&quot;        \r\n## [25] &quot;errors.client.optimizely.com&quot;   &quot;social-login.cnn.com&quot;          \r\n## [27] &quot;invocation.combotag.com&quot;        &quot;sb.scorecardresearch.com&quot;      \r\n## [29] &quot;secure-us.imrworldwide.com&quot;     &quot;bat.bing.com&quot;                  \r\n## [31] &quot;jadserve.postrelease.com&quot;       &quot;ssl.cdn.turner.com&quot;            \r\n## [33] &quot;cnn.sdk.beemray.com&quot;            &quot;static.chartbeat.com&quot;          \r\n## [35] &quot;native.sharethrough.com&quot;        &quot;www.cnn.com&quot;                   \r\n## [37] &quot;btlr.sharethrough.com&quot;          &quot;platform-cdn.sharethrough.com&quot; \r\n## [39] &quot;pixel.moatads.com&quot;              &quot;www.summerhamster.com&quot;         \r\n## [41] &quot;mms.cnn.com&quot;                    &quot;ping.chartbeat.net&quot;            \r\n## [43] &quot;analytics.twitter.com&quot;          &quot;sharethrough.adnxs.com&quot;        \r\n## [45] &quot;match.adsrvr.org&quot;               &quot;gum.criteo.com&quot;                \r\n## [47] &quot;www.facebook.com&quot;               &quot;d3qdfnco3bamip.cloudfront.net&quot; \r\n## [49] &quot;connect.facebook.net&quot;           &quot;log.outbrain.com&quot;              \r\n## [51] &quot;serve2.combotag.com&quot;            &quot;rva.outbrain.com&quot;              \r\n## [53] &quot;odb.outbrain.com&quot;               &quot;dynaimage.cdn.cnn.com&quot;         \r\n## [55] &quot;data.api.cnn.io&quot;                &quot;aax.amazon-adsystem.com&quot;       \r\n## [57] &quot;cdns.gigya.com&quot;                 &quot;t.co&quot;                          \r\n## [59] &quot;pixel.quantserve.com&quot;           &quot;ad.doubleclick.net&quot;            \r\n## [61] &quot;cdn3.optimizely.com&quot;            &quot;w.usabilla.com&quot;                \r\n## [63] &quot;amplifypixel.outbrain.com&quot;      &quot;tr.outbrain.com&quot;               \r\n## [65] &quot;mab.chartbeat.com&quot;              &quot;data.cnn.com&quot;                  \r\n## [67] &quot;widgets.outbrain.com&quot;           &quot;secure.quantserve.com&quot;         \r\n## [69] &quot;static.ads-twitter.com&quot;         &quot;amplify.outbrain.com&quot;          \r\n## [71] &quot;tag.bounceexchange.com&quot;         &quot;adservice.google.com&quot;          \r\n## [73] &quot;adservice.google.com.ua&quot;        &quot;www.googletagservices.com&quot;     \r\n## [75] &quot;cdn.adsafeprotected.com&quot;        &quot;js-sec.indexww.com&quot;            \r\n## [77] &quot;ads.rubiconproject.com&quot;         &quot;c.amazon-adsystem.com&quot;         \r\n## [79] &quot;www.ugdturner.com&quot;              &quot;a.postrelease.com&quot;             \r\n## [81] &quot;cdn.optimizely.com&quot;             &quot;cnn.com&quot;<\/code><\/pre>\n<p>O_o<\/p>\n<h3>FIN<\/h3>\n<p>Again, kick the tyres, file issues\/PRs and drop a note if you&#8217;ve found something interesting as a result of any (or all!) of the packages.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A quick Friday post to let folks know about three in-development R packages that you&#8217;re encouraged to poke the tyres o[fn] and also jump in and file issues or PRs for. Alleviating aversion to versions I introduced a &#8220;version chart&#8221; in a recent post and one key element of tagging years (which are really helpful [&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-9299","post","type-post","status-publish","format-standard","hentry","category-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - 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\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - rud.is\" \/>\n<meta property=\"og:description\" content=\"A quick Friday post to let folks know about three in-development R packages that you&#8217;re encouraged to poke the tyres o[fn] and also jump in and file issues or PRs for. Alleviating aversion to versions I introduced a &#8220;version chart&#8221; in a recent post and one key element of tagging years (which are really helpful [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-23T18:06:39+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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week)\",\"datePublished\":\"2018-03-23T18:06:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\"},\"wordCount\":708,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886\"},\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\",\"url\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\",\"name\":\"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - rud.is\",\"isPartOf\":{\"@id\":\"https:\/\/rud.is\/b\/#website\"},\"datePublished\":\"2018-03-23T18:06:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/rud.is\/b\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week)\"}]},{\"@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":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - 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\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/","og_locale":"en_US","og_type":"article","og_title":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - rud.is","og_description":"A quick Friday post to let folks know about three in-development R packages that you&#8217;re encouraged to poke the tyres o[fn] and also jump in and file issues or PRs for. Alleviating aversion to versions I introduced a &#8220;version chart&#8221; in a recent post and one key element of tagging years (which are really helpful [&hellip;]","og_url":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/","og_site_name":"rud.is","article_published_time":"2018-03-23T18:06:39+00:00","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\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week)","datePublished":"2018-03-23T18:06:39+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/"},"wordCount":708,"commentCount":2,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/","url":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/","name":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week) - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2018-03-23T18:06:39+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2018\/03\/23\/on-mimes-software-versions-and-web-site-promiscuity-a-k-a-three-new-packages-to-round-out-the-week\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"On MIMEs, software versions and web site promiscuity (a.k.a. three new packages to round out the week)"}]},{"@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-2pZ","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":8416,"url":"https:\/\/rud.is\/b\/2018\/03\/07\/handling-semantic-version-string-like-a-boss-with-the-semver-package\/","url_meta":{"origin":9299,"position":0},"title":"Handling Semantic Version Strings Like a Boss with the semver Package","author":"hrbrmstr","date":"2018-03-07","format":false,"excerpt":"I work with internet-scale data and do my fair share of macro-analyses on vulnerabilities. I use the R semver package for most of my work and wanted to blather on a bit about it since it's super-helpful for this work and doesn't get the attention it deserves. semver makes it\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\/03\/unnamed-chunk-6-1.png?fit=1200%2C480&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/03\/unnamed-chunk-6-1.png?fit=1200%2C480&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/03\/unnamed-chunk-6-1.png?fit=1200%2C480&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/03\/unnamed-chunk-6-1.png?fit=1200%2C480&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2018\/03\/unnamed-chunk-6-1.png?fit=1200%2C480&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":12586,"url":"https:\/\/rud.is\/b\/2020\/01\/01\/writing-frictionless-r-package-wrappers-introduction\/","url_meta":{"origin":9299,"position":1},"title":"Writing Frictionless R Package Wrappers \u2014 Introduction","author":"hrbrmstr","date":"2020-01-01","format":false,"excerpt":"The R language and RStudio IDE are a powerful combination for \"getting stuff done\", and one aspect of R itself that makes it especially useful is the ability to use it with other programming languages via a robust foreign language interface capability1. The term \"foreign language\" refers to another programming\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":12841,"url":"https:\/\/rud.is\/b\/2020\/11\/18\/apple-silicon-big-sur-rstudio-r-field-report\/","url_meta":{"origin":9299,"position":2},"title":"Apple Silicon + Big Sur + RStudio + R Field Report","author":"hrbrmstr","date":"2020-11-18","format":false,"excerpt":"It's been a while since I've posted anything R-related and, while this one will be brief, it may be of use to some R folks who have taken the leap into Big Sur and\/or Apple Silicon. Stay to the end for an early Christmas ?! Big Sur Report As #rstats\u2026","rel":"","context":"In &quot;macOS&quot;","block_context":{"text":"macOS","link":"https:\/\/rud.is\/b\/category\/macos\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":12004,"url":"https:\/\/rud.is\/b\/2019\/02\/28\/drat-all-the-%f0%9f%93%a6-enabling-easier-package-discovery-and-installation-with-your-own-cran-like-repo-for-your-packages\/","url_meta":{"origin":9299,"position":3},"title":"drat All The ?! : Enabling Easier Package Discovery and Installation with Your Own CRAN-like Repo for Your Packages","author":"hrbrmstr","date":"2019-02-28","format":false,"excerpt":"I've got a work-in-progress drat-ified CRAN-like repo for (eventually) all my packages over at CINC? (\"CINC is not CRAN\" and it also sounds like \"sync\"). This is in parallel with a co-location\/migration of all my packages to SourceHut (just waiting for the sr.ht alpha API to be baked) and 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":4515,"url":"https:\/\/rud.is\/b\/2016\/07\/10\/cran-packages-on-github-and-some-cran-description-observations\/","url_meta":{"origin":9299,"position":4},"title":"CRAN Packages on GitHub (and some CRAN DESCRIPTION observations)","author":"hrbrmstr","date":"2016-07-10","format":false,"excerpt":"Just about a week ago @thosjleeper posited something on twitter w\/r\/t how many CRAN packages had associations with GitHub (i.e. how many used GitHub for development). The `DESCRIPTION` file (that comes with all R packages) has some fields that can house this information and most folks who do use GitHub\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":6071,"url":"https:\/\/rud.is\/b\/2017\/06\/10\/engaging-the-tidyverse-clean-slate-protocol\/","url_meta":{"origin":9299,"position":5},"title":"Engaging the tidyverse Clean Slate Protocol","author":"hrbrmstr","date":"2017-06-10","format":false,"excerpt":"I caught the 0.7.0 release of dplyr on my home CRAN server early Friday morning and immediately set out to install it since I'm eager to finish up my sergeant package and get it on CRAN. \"Tidyverse\" upgrades aren't trivial for me as I tinker quite a bit with the\u2026","rel":"","context":"In &quot;dplyr&quot;","block_context":{"text":"dplyr","link":"https:\/\/rud.is\/b\/category\/dplyr\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/06\/CSP.png?fit=1000%2C416&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/06\/CSP.png?fit=1000%2C416&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/06\/CSP.png?fit=1000%2C416&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/06\/CSP.png?fit=1000%2C416&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/9299","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=9299"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/9299\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=9299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=9299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=9299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}