

{"id":11746,"date":"2019-01-10T08:56:02","date_gmt":"2019-01-10T13:56:02","guid":{"rendered":"https:\/\/rud.is\/b\/?p=11746"},"modified":"2019-01-10T14:17:16","modified_gmt":"2019-01-10T19:17:16","slug":"waffle-geoms-other-miscellaneous-in-development-package-updates","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/","title":{"rendered":"Waffle Geoms &#038; Other Miscellaneous In-Development Package Updates"},"content":{"rendered":"<p>More than just <code>sergeant<\/code> has been hacked on recently, so here&#8217;s a run-down of various ? updates:<\/p>\n<h3>waffle<\/h3>\n<p>The square pie chart generating <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/waffle\"><code>waffle<\/code>?<\/a> package now contains a nascent <code>geom_waffle()<\/code> so you can do things like this:<\/p>\n<pre><code class=\"language-r\">library(hrbrthemes)\nlibrary(waffle)\nlibrary(tidyverse)\n\ntibble(\n  parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]),\n  values = c(10, 20, 30, 6, 14, 40, 30, 20, 10),\n  fct = c(rep(\"Thing 1\", 3), rep(\"Thing 2\", 3), rep(\"Thing 3\", 3))\n) -&gt; xdf\n\nggplot(xdf, aes(fill=parts, values=values)) +\n  geom_waffle(color = \"white\", size=1.125, n_rows = 6) +\n  facet_wrap(~fct, ncol=1) +\n  scale_x_discrete(expand=c(0,0)) +\n  scale_y_discrete(expand=c(0,0)) +\n  ggthemes::scale_fill_tableau(name=NULL) +\n  coord_equal() +\n  labs(\n    title = \"Faceted Waffle Geoms\"\n  ) +\n  theme_ipsum_rc(grid=\"\") +\n  theme_enhance_waffle()\n<\/code><\/pre>\n<p>and get:<\/p>\n<p><a href=\"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/fwg\/\" rel=\"attachment wp-att-11747\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"11747\" data-permalink=\"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/fwg\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&amp;ssl=1\" data-orig-size=\"1204,1606\" 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=\"fwg\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=510%2C680&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?resize=510%2C680&#038;ssl=1\" alt=\"\" width=\"510\" height=\"680\" class=\"aligncenter size-full wp-image-11747\" \/><\/a><\/p>\n<p>It&#8217;s super brand new so pls file issues (wherev you like besides blog comments as they&#8217;re not conducive to package triaging) if anything breaks or you need more aesthetic configuration options. NOTE: You need to use the <code>1.0.0<\/code> branch as noted in the <code>master<\/code> branch README.<\/p>\n<h3>markdowntemplates<\/h3>\n<p>I had to take a quick peek at <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/markdowntemplates\"><code>markdowntemplates<\/code>?<\/a> due to a question from a blog reader about the <a href=\"https:\/\/rud.is\/b\/2017\/01\/10\/knit-directly-to-jupyter-notebooks-from-rstudio\/\">Jupyter notebook generation<\/a> functionality. While I was in the code I added two new bits to the <code>knit: markdowntemplates::to_jupyter<\/code> code. First is the option to specify a <code>run:<\/code> parameter in the YAML header so you can just knit the document to a Jupyter notebook without executing the chunks:<\/p>\n<pre><code class=\"language-plain\">---\ntitle: \"ggplot2 example\"\nknit: markdowntemplates::to_jupyter\nrun: false\n--- \n<\/code><\/pre>\n<p>If <code>run<\/code> is not present it defaults to <code>true<\/code>.<\/p>\n<p>The other add is a bit of intelligence to whether it should include <code>%load_ext rpy2.ipython<\/code> (the Jupyter &#8220;magic&#8221; that lets it execute R chunks). If no R code chunks are present, <code>rpy2.ipython<\/code> will not be loaded.<\/p>\n<h3>securitytrails<\/h3>\n<p><a href=\"https:\/\/securitytrails.com\/\">SecurityTrails<\/a> is a service for cybersecurity researchers &amp; defenders that provides tools and an API to aid in querying for all sorts of current and historical information on domains and IP addresses. It now (finally) has a mostly-complete R package <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/securitytrails\"><code>securitytrails<\/code>?<\/a>. They&#8217;re research partners of $DAYJOB and their API is ?? so give it a spin if you are looking to broaden your threat-y API collection.<\/p>\n<h3>astools<\/h3>\n<p>Keeping the cyber theme going for a bit, next up is <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/astools\"><code>astools)<\/code>?<\/a> which are &#8220;Tools to Work With Autonomous System (\u2018AS\u2019) Network and Organization Data&#8221;. Autonomous Systems (AS) are at the core of the internet (we all live in one) and this package provides tools to fetch AS data\/metadata from various sources and work with it in R. For instance, we can grab the latest RouteViews data:<\/p>\n<pre><code class=\"language-r\">(rv_df &lt;- routeviews_latest())\n## # A tibble: 786,035 x 6\n##    cidr         asn   minimum_ip maximum_ip  min_numeric max_numeric\n##    &lt;chr&gt;        &lt;chr&gt; &lt;chr&gt;      &lt;chr&gt;             &lt;dbl&gt;       &lt;dbl&gt;\n##  1 1.0.0.0\/24   13335 1.0.0.0    1.0.0.255      16777216    16777471\n##  2 1.0.4.0\/22   56203 1.0.4.0    1.0.7.255      16778240    16779263\n##  3 1.0.4.0\/24   56203 1.0.4.0    1.0.4.255      16778240    16778495\n##  4 1.0.5.0\/24   56203 1.0.5.0    1.0.5.255      16778496    16778751\n##  5 1.0.6.0\/24   56203 1.0.6.0    1.0.6.255      16778752    16779007\n##  6 1.0.7.0\/24   56203 1.0.7.0    1.0.7.255      16779008    16779263\n##  7 1.0.16.0\/24  2519  1.0.16.0   1.0.16.255     16781312    16781567\n##  8 1.0.64.0\/18  18144 1.0.64.0   1.0.127.255    16793600    16809983\n##  9 1.0.128.0\/17 23969 1.0.128.0  1.0.255.255    16809984    16842751\n## 10 1.0.128.0\/18 23969 1.0.128.0  1.0.191.255    16809984    16826367\n## # ... with 786,025 more rows\n<\/code><\/pre>\n<p>That, in turn, can work with <code>iptools::ip_to_asn()<\/code> so we can figure out which AS an IP address lives in:<\/p>\n<pre><code class=\"language-r\">rv_trie &lt;- as_asntrie(rv_df)\n\niptools::ip_to_asn(rv_trie, \"174.62.167.97\")\n## [1] \"7922\"\n<\/code><\/pre>\n<p>It can also fetch AS name info:<\/p>\n<pre><code class=\"language-r\">asnames_current()\n## # A tibble: 63,453 x 4\n##    asn   handle       asinfo                                                iso2c\n##    &lt;chr&gt; &lt;chr&gt;        &lt;chr&gt;                                                 &lt;chr&gt;\n##  1 1     LVLT-1       Level 3 Parent, LLC                                   US   \n##  2 2     UDEL-DCN     University of Delaware                                US   \n##  3 3     MIT-GATEWAYS Massachusetts Institute of Technology                 US   \n##  4 4     ISI-AS       University of Southern California                     US   \n##  5 5     SYMBOLICS    Symbolics, Inc.                                       US   \n##  6 6     BULL-HN      Bull HN Information Systems Inc.                      US   \n##  7 7     DSTL         DSTL                                                  GB   \n##  8 8     RICE-AS      Rice University                                       US   \n##  9 9     CMU-ROUTER   Carnegie Mellon University                            US   \n## 10 10    CSNET-EXT-AS CSNET Coordination and Information Center (CSNET-CIC) US   \n## # ... with 63,443 more rows\n<\/code><\/pre>\n<p>which we can use for further enrichment:<\/p>\n<pre><code class=\"language-r\">routeviews_latest() %&gt;% \n  left_join(asnames_current())\n## Joining, by = \"asn\"\n\n## # A tibble: 786,035 x 9\n##    cidr         asn   minimum_ip maximum_ip  min_numeric max_numeric handle            asinfo                     iso2c\n##    &lt;chr&gt;        &lt;chr&gt; &lt;chr&gt;      &lt;chr&gt;             &lt;dbl&gt;       &lt;dbl&gt; &lt;chr&gt;             &lt;chr&gt;                      &lt;chr&gt;\n##  1 1.0.0.0\/24   13335 1.0.0.0    1.0.0.255      16777216    16777471 CLOUDFLARENET     Cloudflare, Inc.           US   \n##  2 1.0.4.0\/22   56203 1.0.4.0    1.0.7.255      16778240    16779263 GTELECOM-AUSTRAL\u2026 Gtelecom-AUSTRALIA         AU   \n##  3 1.0.4.0\/24   56203 1.0.4.0    1.0.4.255      16778240    16778495 GTELECOM-AUSTRAL\u2026 Gtelecom-AUSTRALIA         AU   \n##  4 1.0.5.0\/24   56203 1.0.5.0    1.0.5.255      16778496    16778751 GTELECOM-AUSTRAL\u2026 Gtelecom-AUSTRALIA         AU   \n##  5 1.0.6.0\/24   56203 1.0.6.0    1.0.6.255      16778752    16779007 GTELECOM-AUSTRAL\u2026 Gtelecom-AUSTRALIA         AU   \n##  6 1.0.7.0\/24   56203 1.0.7.0    1.0.7.255      16779008    16779263 GTELECOM-AUSTRAL\u2026 Gtelecom-AUSTRALIA         AU   \n##  7 1.0.16.0\/24  2519  1.0.16.0   1.0.16.255     16781312    16781567 VECTANT           ARTERIA Networks Corporat\u2026 JP   \n##  8 1.0.64.0\/18  18144 1.0.64.0   1.0.127.255    16793600    16809983 AS-ENECOM         Energia Communications,In\u2026 JP   \n##  9 1.0.128.0\/17 23969 1.0.128.0  1.0.255.255    16809984    16842751 TOT-NET           TOT Public Company Limited TH   \n## 10 1.0.128.0\/18 23969 1.0.128.0  1.0.191.255    16809984    16826367 TOT-NET           TOT Public Company Limited TH   \n## # ... with 786,025 more rows\n<\/code><\/pre>\n<p>Note that <code>routeviews_latest()<\/code> and <code>asnames_current()<\/code> cache the data so there is no re-downloading unless you clear the local cache.<\/p>\n<h3>docxtractr<\/h3>\n<p>The <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/docxtractr\"><code>docxtractr<\/code>?<\/a> package recently got a CRAN push due to some changes in the <code>tibble<\/code> ? but it also include a new feature that lets you accept or reject &#8220;tracked changes&#8221; before trying to extract tables\/comments from a document without harming\/changing the original document.<\/p>\n<h3>ednstest<\/h3>\n<p><a href=\"https:\/\/dnsflagday.net\/\">DNS Flag Day<\/a> is fast approaching. What is &#8220;DNS Flag Day&#8221;? It&#8217;s a day when yet-another cabal of large-scale DNS providers and tech heavy hitters decided that they know what&#8217;s best for the internet and are mandating compliance with <a href=\"https:\/\/tools.ietf.org\/html\/rfc6891\">RFC 6891<\/a> (EDNS). Honestly, there&#8217;s no good reason to run crappy DNS servers and no good reason not to support EDNS.<\/p>\n<p>You <em>could<\/em> just go to the flag day site and test your provider (by entering your domain name, if you have one). But, you can also load the package, and run it locally (it still calls their API since it&#8217;s open and provides a very detailed results page if your DNS server isn&#8217;t compliant). You can just run it to get compact output and an auto-load of the report page in your browser <em>or<\/em> save off the returned object and inspect it to see what tests failed.<\/p>\n<p>I ran it on a few domains that are likely familiar to readers and this is what it showed:<\/p>\n<pre><code class=\"language-r\">edns_test(\"rud.is\")\n## EDNS compliance test for [rud.is] has \u2714 PASSED!\n## Report URL: https:\/\/ednscomp.isc.org\/ednscomp\/60049cb032\n\nedns_test(\"rstudio.com\")\n## EDNS compliance test for [rstudio.com] has \u2716 FAILED\n## Report URL: https:\/\/ednscomp.isc.org\/ednscomp\/54e2057229\n\nedns_test(\"r-project.org\")\n## EDNS compliance test for [r-project.org] has \u2714 PASSED!\n## Report URL: https:\/\/ednscomp.isc.org\/ednscomp\/839ee9c9af\n<\/code><\/pre>\n<p>The <code>print()<\/code> function in the package also has some minimal <code>cli<\/code>? and <code>crayon<\/code>? usage in it if you&#8217;re looking to jazz up your R console output.<\/p>\n<h3>ulid<\/h3>\n<p>Finally, there&#8217;s <a href=\"https:\/\/git.sr.ht\/~hrbrmstr\/ulid\"><code>ulid<\/code>?<\/a> which is a package to make &#8220;Universally Unique Lexicographically Sortable Identifiers in R&#8221;. These ULIDs have the following features:<\/p>\n<ul>\n<li>128-bit compatibility with UUID<\/li>\n<li>1.21e+24 unique ULIDs per millisecond<\/li>\n<li><em>Lexicographically sortable!<\/em><\/li>\n<li>Canonically encoded as a 26 character string, as opposed to the 36 character UUID<\/li>\n<li>Uses Crockford&#8217;s base32 for better efficiency and readability (5 bits per character)<\/li>\n<li>Case insensitive<\/li>\n<li>No special characters (URL safe)<\/li>\n<li>Monotonic sort order (correctly detects and handles the same millisecond)<\/li>\n<\/ul>\n<p>They&#8217;re made up of<\/p>\n<pre><code class=\"language-plain\"> 01AN4Z07BY      79KA1307SR9X4MV3\n\n|----------|    |----------------|\n Timestamp          Randomness\n   48bits             80bits\n<\/code><\/pre>\n<p>The <em>timestamp<\/em> is a 48 bit integer representing UNIX-time in milliseconds and the <em>randomness<\/em> is an 80 bit cryptographically secure source of randomness (where possible). <a href=\"https:\/\/github.com\/ulid\/spec\/\">Read more in the full specification<\/a>.<\/p>\n<p>You can get one ULID easily:<\/p>\n<pre><code class=\"language-r\">ulid::ULIDgenerate()\n## [1] \"0001E2ERKHVPKZJ6FA6ZWHH1KS\"\n<\/code><\/pre>\n<p>Generate a whole bunch of &#8217;em:<\/p>\n<pre><code class=\"language-r\">(u &lt;- ulid::ULIDgenerate(20))\n##  [1] \"0001E2ERKHVX5QF5D59SX2E65T\" \"0001E2ERKHKD6MHKYB1G8JHN5X\" \"0001E2ERKHTK0XEHVV2G5877K9\" \"0001E2ERKHKFGG5NPN24PC1N0W\"\n##  [5] \"0001E2ERKH3F48CAKJCVMSCBKS\" \"0001E2ERKHF3N0B94VK05GTXCW\" \"0001E2ERKH24GCJ2CT3Z5WM1FD\" \"0001E2ERKH381RJ232KK7SMWQW\"\n##  [9] \"0001E2ERKH7NAZ1T4HR4ZRQRND\" \"0001E2ERKHSATC17G2QAPYXE0C\" \"0001E2ERKH76R83NFST3MZNW84\" \"0001E2ERKHFKS52SD8WJ8FHXMV\"\n## [13] \"0001E2ERKHQM6VBM5JB235JJ1W\" \"0001E2ERKHXG2KNYWHHFS8X69Z\" \"0001E2ERKHQW821KPRM4GQFANJ\" \"0001E2ERKHD5KWTM5S345A3RP4\"\n## [17] \"0001E2ERKH0D901W6KX66B1BHE\" \"0001E2ERKHKPHZBFSC16FC7FFC\" \"0001E2ERKHQQH7315GMY8HRYXV\" \"0001E2ERKH016YBAJAB7K9777T\"\n<\/code><\/pre>\n<p>and &#8220;unmarshal&#8221; them (which gets you the timestamp back):<\/p>\n<pre><code class=\"language-r\">unmarshal(u)\n##                     ts              rnd\n## 1  2018-12-29 07:02:57 VX5QF5D59SX2E65T\n## 2  2018-12-29 07:02:57 KD6MHKYB1G8JHN5X\n## 3  2018-12-29 07:02:57 TK0XEHVV2G5877K9\n## 4  2018-12-29 07:02:57 KFGG5NPN24PC1N0W\n## 5  2018-12-29 07:02:57 3F48CAKJCVMSCBKS\n## 6  2018-12-29 07:02:57 F3N0B94VK05GTXCW\n## 7  2018-12-29 07:02:57 24GCJ2CT3Z5WM1FD\n## 8  2018-12-29 07:02:57 381RJ232KK7SMWQW\n## 9  2018-12-29 07:02:57 7NAZ1T4HR4ZRQRND\n## 10 2018-12-29 07:02:57 SATC17G2QAPYXE0C\n## 11 2018-12-29 07:02:57 76R83NFST3MZNW84\n## 12 2018-12-29 07:02:57 FKS52SD8WJ8FHXMV\n## 13 2018-12-29 07:02:57 QM6VBM5JB235JJ1W\n## 14 2018-12-29 07:02:57 XG2KNYWHHFS8X69Z\n## 15 2018-12-29 07:02:57 QW821KPRM4GQFANJ\n## 16 2018-12-29 07:02:57 D5KWTM5S345A3RP4\n## 17 2018-12-29 07:02:57 0D901W6KX66B1BHE\n## 18 2018-12-29 07:02:57 KPHZBFSC16FC7FFC\n## 19 2018-12-29 07:02:57 QQH7315GMY8HRYXV\n## 20 2018-12-29 07:02:57 016YBAJAB7K9777T\n<\/code><\/pre>\n<p>and can even supply your own timestamp:<\/p>\n<pre><code class=\"language-r\">(ut &lt;- ts_generate(as.POSIXct(\"2017-11-01 15:00:00\", origin=\"1970-01-01\")))\n## [1] \"0001CZM6DGE66RJEY4N05F5R95\"\n\nunmarshal(ut)\n##                    ts              rnd\n## 1 2017-11-01 15:00:00 E66RJEY4N05F5R95\n<\/code><\/pre>\n<h3>FIN<\/h3>\n<p>Kick the tyres &amp; file issues\/PRs as needed and definitely give <a href=\"https:\/\/meta.sr.ht\/\">sr.ht<\/a> a spin for your code-hosting needs. It&#8217;s 100% free and open source software made up of mini-services that let you use only what you need. Zero javacript on site and no tracking\/adverts. Plus, no evil giant megacorps doing heaven knows what with your browser, repos, habits and intellectual property.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>More than just sergeant has been hacked on recently, so here&#8217;s a run-down of various ? updates: waffle The square pie chart generating waffle? package now contains a nascent geom_waffle() so you can do things like this: library(hrbrthemes) library(waffle) library(tidyverse) tibble( parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]), values = c(10, 20, 30, 6, 14, 40, 30, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":11747,"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-11746","post","type-post","status-publish","format-standard","has-post-thumbnail","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>Waffle Geoms &amp; Other Miscellaneous In-Development Package Updates - 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\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Waffle Geoms &amp; Other Miscellaneous In-Development Package Updates - rud.is\" \/>\n<meta property=\"og:description\" content=\"More than just sergeant has been hacked on recently, so here&#8217;s a run-down of various ? updates: waffle The square pie chart generating waffle? package now contains a nascent geom_waffle() so you can do things like this: library(hrbrthemes) library(waffle) library(tidyverse) tibble( parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]), values = c(10, 20, 30, 6, 14, 40, 30, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-10T13:56:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-10T19:17:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1204\" \/>\n\t<meta property=\"og:image:height\" content=\"1606\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Waffle Geoms &#038; Other Miscellaneous In-Development Package Updates\",\"datePublished\":\"2019-01-10T13:56:02+00:00\",\"dateModified\":\"2019-01-10T19:17:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/\"},\"wordCount\":817,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/fwg.png?fit=1204%2C1606&ssl=1\",\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/\",\"name\":\"Waffle Geoms & Other Miscellaneous In-Development Package Updates - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/fwg.png?fit=1204%2C1606&ssl=1\",\"datePublished\":\"2019-01-10T13:56:02+00:00\",\"dateModified\":\"2019-01-10T19:17:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/fwg.png?fit=1204%2C1606&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2019\\\/01\\\/fwg.png?fit=1204%2C1606&ssl=1\",\"width\":1204,\"height\":1606},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2019\\\/01\\\/10\\\/waffle-geoms-other-miscellaneous-in-development-package-updates\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Waffle Geoms &#038; Other Miscellaneous In-Development Package Updates\"}]},{\"@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":"Waffle Geoms & Other Miscellaneous In-Development Package Updates - 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\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/","og_locale":"en_US","og_type":"article","og_title":"Waffle Geoms & Other Miscellaneous In-Development Package Updates - rud.is","og_description":"More than just sergeant has been hacked on recently, so here&#8217;s a run-down of various ? updates: waffle The square pie chart generating waffle? package now contains a nascent geom_waffle() so you can do things like this: library(hrbrthemes) library(waffle) library(tidyverse) tibble( parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]), values = c(10, 20, 30, 6, 14, 40, 30, [&hellip;]","og_url":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/","og_site_name":"rud.is","article_published_time":"2019-01-10T13:56:02+00:00","article_modified_time":"2019-01-10T19:17:16+00:00","og_image":[{"width":1204,"height":1606,"url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","type":"image\/png"}],"author":"hrbrmstr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hrbrmstr","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Waffle Geoms &#038; Other Miscellaneous In-Development Package Updates","datePublished":"2019-01-10T13:56:02+00:00","dateModified":"2019-01-10T19:17:16+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/"},"wordCount":817,"commentCount":0,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/","url":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/","name":"Waffle Geoms & Other Miscellaneous In-Development Package Updates - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","datePublished":"2019-01-10T13:56:02+00:00","dateModified":"2019-01-10T19:17:16+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","width":1204,"height":1606},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2019\/01\/10\/waffle-geoms-other-miscellaneous-in-development-package-updates\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Waffle Geoms &#038; Other Miscellaneous In-Development Package Updates"}]},{"@type":"WebSite","@id":"https:\/\/rud.is\/b\/#website","url":"https:\/\/rud.is\/b\/","name":"rud.is","description":"&quot;In God we trust. All others must bring data&quot;","publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rud.is\/b\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886","name":"hrbrmstr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1","width":460,"height":460,"caption":"hrbrmstr"},"logo":{"@id":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2023\/10\/ukr-shield.png?fit=460%2C460&ssl=1"},"description":"Don't look at me\u2026I do what he does \u2014 just slower. #rstats avuncular \u2022 ?Resistance Fighter \u2022 Cook \u2022 Christian \u2022 [Master] Chef des Donn\u00e9es de S\u00e9curit\u00e9 @ @rapid7","sameAs":["http:\/\/rud.is"],"url":"https:\/\/rud.is\/b\/author\/hrbrmstr\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/01\/fwg.png?fit=1204%2C1606&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p23idr-33s","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":12576,"url":"https:\/\/rud.is\/b\/2019\/12\/27\/short-attention-span-theatre-reproducing-axios-1-big-thing-google-trends-2019-news-in-review-with-ggplot2\/","url_meta":{"origin":11746,"position":0},"title":"Short Attention Span Theatre: Reproducing Axios&#8217; &#8220;1 Big Thing&#8221; Google Trends 2019 News In Review with {ggplot2}","author":"hrbrmstr","date":"2019-12-27","format":false,"excerpt":"I woke up to Axios' \"1 Big Thing\" ridgeline chart showing the crazy that was the 2019 news cycle: and, I decided to reproduce it in {ggplot2}. Getting The Data First, I had to find the data. The Axios chart is interactive, so I assumed the visualization was built on-load.\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":12403,"url":"https:\/\/rud.is\/b\/2019\/07\/12\/quick-hit-waffle-1-0-font-awesome-5-pictograms-and-more\/","url_meta":{"origin":11746,"position":1},"title":"Quick Hit: {waffle} 1.0 Font Awesome 5 Pictograms and More","author":"hrbrmstr","date":"2019-07-12","format":false,"excerpt":"The {waffle} package got some ? this week and now has a substantially improved geom_waffle() along with a brand new sibling function geom_pictogram() which has all the powerful new features of geom_waffle() but lets you use Font Awesome 5 brand and solid glyphs to make isotype pictograms. A major new\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"Isotype pictogram of food","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/07\/noms.png?fit=624%2C495&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/07\/noms.png?fit=624%2C495&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/07\/noms.png?fit=624%2C495&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3325,"url":"https:\/\/rud.is\/b\/2015\/03\/18\/making-waffle-charts-in-r-with-the-new-waffle-package\/","url_meta":{"origin":11746,"position":2},"title":"Making waffle charts in R (with the new &#8216;waffle&#8217; package)","author":"hrbrmstr","date":"2015-03-18","format":false,"excerpt":"NOTE: The waffle package (sans JavaScript-y goodness) is up on CRAN so you can do an install.packages(\"waffle\") and library(waffle) vs the devtools dance. My disdain for pie charts is fairly well-known, but I do concede that there are times one needs to communicate parts of a whole graphically verses using\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":12282,"url":"https:\/\/rud.is\/b\/2019\/06\/06\/make-multi-point-dumbbell-plots-in-ggplot2\/","url_meta":{"origin":11746,"position":3},"title":"Make Multi-point &#8220;dumbbell&#8221; Plots in ggplot2","author":"hrbrmstr","date":"2019-06-06","format":false,"excerpt":"A user of the {ggalt} package recently posted a question about how to add points to a geom_dumbbell() plot. For now, this is not something you can do with geom_dumbbell() but with a bit of data wrangling you can do this in a pretty straightforward manner with just your data\u2026","rel":"","context":"In &quot;ggplot&quot;","block_context":{"text":"ggplot","link":"https:\/\/rud.is\/b\/category\/ggplot\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/06\/there-are-three-points-2.png?fit=1200%2C560&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/06\/there-are-three-points-2.png?fit=1200%2C560&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/06\/there-are-three-points-2.png?fit=1200%2C560&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/06\/there-are-three-points-2.png?fit=1200%2C560&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2019\/06\/there-are-three-points-2.png?fit=1200%2C560&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3352,"url":"https:\/\/rud.is\/b\/2015\/03\/26\/pre-cran-waffle-update-isotype-pictograms\/","url_meta":{"origin":11746,"position":4},"title":"Pre-CRAN waffle update &#8211; isotype pictograms","author":"hrbrmstr","date":"2015-03-26","format":false,"excerpt":"It seems Ruben C. Arslan had the waffle idea about the same time I did. Apart from some extra spiffy XKCD-like styling, one other thing his waffling routines allowed for was using FontAwesome icons. When you use an icon vs a block, you are really making a basic version of\u2026","rel":"","context":"In &quot;Data Visualization&quot;","block_context":{"text":"Data Visualization","link":"https:\/\/rud.is\/b\/category\/data-visualization\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4852,"url":"https:\/\/rud.is\/b\/2017\/01\/08\/2017-01-authored-package-updates\/","url_meta":{"origin":11746,"position":5},"title":"2017-01 Authored Package Updates","author":"hrbrmstr","date":"2017-01-08","format":false,"excerpt":"The rest of the month is going to be super-hectic and it's unlikely I'll be able to do any more to help the push to CRAN 10K, so here's a breakdown of CRAN and GitHub new packages & package updates that I felt were worth raising awareness on: epidata I\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\/01\/epi2.png?fit=982%2C1200&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/01\/epi2.png?fit=982%2C1200&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/01\/epi2.png?fit=982%2C1200&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/01\/epi2.png?fit=982%2C1200&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11746","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=11746"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/11746\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media\/11747"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=11746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=11746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=11746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}