

{"id":3574,"date":"2015-08-02T17:20:02","date_gmt":"2015-08-02T22:20:02","guid":{"rendered":"http:\/\/rud.is\/b\/?p=3574"},"modified":"2018-03-10T07:54:36","modified_gmt":"2018-03-10T12:54:36","slug":"two-new-r-packages-qrencoder-passwordrandom","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/","title":{"rendered":"Two New R Packages &#8211; qrencoder &#038; passwordrandom"},"content":{"rendered":"<p>Believe it or not, there are two [<a href=\"https:\/\/stackoverflow.com\/questions\/9332487\/qr-code-can-be-generated-with-r\">1<\/a>] [<a href=\"https:\/\/stackoverflow.com\/questions\/9332487\/qr-code-can-be-generated-with-r\">2<\/a>] questions on @StackOverflowR about how to make QR codes in R. I personally think QR codes are kinda hokey, but who am I to argue with pressing needs of the <code>#rstats<\/code> community? I found <a href=\"https:\/\/github.com\/fukuchi\/libqrencode\">libqrencode<\/a> and it&#8217;s highly <code>brew<\/code>-able and <code>apt<\/code>-able (probably <code>yum<\/code>-able, too, if you lean that way), so it was super-easy to crank out an <a href=\"https:\/\/github.com\/hrbrmstr\/qrencoder\">Rcpp-based package<\/a> for it.<\/p>\n<p>There are a few functions in the package, but the following would be my guess as to how most folks would use it (well, <em>two<\/em> folks, anyway):<\/p>\n<pre lang=\"rsplus\">library(qrencoder)\nlibrary(raster)\n\npar(mar=c(0,0,0,0))\nimage(qrencode_raster(\"http:\/\/rud.is\/b\"), \n      asp=1, col=c(\"white\", \"black\"), axes=FALSE, \n      xlab=\"\", ylab=\"\")<\/pre>\n<p><a href=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3575\" data-permalink=\"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/readme-qr-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?fit=336%2C240&amp;ssl=1\" data-orig-size=\"336,240\" 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=\"README-qr-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?fit=336%2C240&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?resize=336%2C240&#038;ssl=1\" alt=\"README-qr-1\" width=\"336\" height=\"240\" class=\"aligncenter size-full wp-image-3575\" \/><\/a><\/p>\n<p><center><\/p>\n<p><iframe loading=\"lazy\" width=\"640\" height=\"390\" src=\"https:\/\/www.youtube.com\/embed\/bh2tUipUnaI\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p><\/center><\/p>\n<p>Since @quominus threw down yet-another gauntlet (in our own &#8220;battle of the hoRnbuRg&#8221;) after my <code>qrencoder<\/code> announcement:<\/p>\n<blockquote class=\"twitter-tweet\" lang=\"en\">\n<p lang=\"en\" dir=\"ltr\"><a href=\"https:\/\/mobile.twitter.com\/hrbrmstr\">@hrbrmstr<\/a> my latest package will be done in 20 minutes. FORE.<\/p>\n<p>&mdash; Oliver Keyes (@quominus) <span class=\"removed_link\" title=\"https:\/\/mobile.twitter.com\/kopshtik\/status\/627944587278069760\">August 2, 2015<\/span><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>I had no choice but to also crank out <a href=\"https:\/\/github.com\/hrbrmstr\/passwordrandom\">another package<\/a> that interfaces with the <a href=\"http:\/\/www.passwordrandom.com\/\">PasswordRandom<\/a> API. There&#8217;s at least some fairly obvious real utility to this one:<\/p>\n<pre lang=\"rsplus\">library(passwordrandom)\n\n# current verison\npackageVersion(\"passwordrandom\")\n#> [1] '0.0.0.9000'\n\nrandom_chars()\n#>  [1] \"m\" \"M\" \"Z\" \"p\" \"G\" \"B\" \"E\" \"m\" \"B\" \"v\"\n\nrandom_doubles()\n#>  [1] 82.6272 89.6146  1.2591 77.9003 62.5740 68.8216 61.9789 37.9001 20.6352  4.6343\n\nrandom_guids()\n#>  [1] \"fdf5d58e-ebe9-4db3-b429-303e8a5e1fdf\" \"20ad94f9-a232-4fa8-91c6-ba21e9925b96\"\n#>  [3] \"d44c1c4b-0117-43c3-b77c-89bc33caf59f\" \"500ce633-1197-4c92-aff4-1eac94fd2d8d\"\n#>  [5] \"13b1a1a0-f7fa-40b6-a9da-9e445ac26d2b\" \"06362286-8d5b-4dfc-9283-df564291120d\"\n#>  [7] \"36dbb258-ede0-4a8a-b416-5609f11c8be1\" \"9b27dcca-26d7-4467-9a54-3862ccbd06cf\"\n#>  [9] \"4f53fe11-d4f0-4c01-a2fc-97e35983d567\" \"b1f0df88-e790-4d48-8683-ebe68db9f0ca\"\n\nrandom_ints()\n#>  [1] 82 17 97 20 87 91 57 42 22 62\n\nrandom_passwords()\n#>  [1] \"RoeXO2{75bh\"  \"RiuFE6'10hj\"  \"TauTY1)92pj\"  \"XooHO8%87rv\"  \"MooJA1^40np\"  \"KyaDU3\\\\35tr\" \"KiaQY0>91nr\" \n#>  [8] \"XoeGO1%68nt\"  \"KeoFI0>33cc\"  \"VeaDI2$51jc\"<\/pre>\n<p>If you&#8217;re so inclined, kick the tyres of either\/both and drop a note here or issue\/feature request on either repo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Believe it or not, there are two [1] [2] questions on @StackOverflowR about how to make QR codes in R. I personally think QR codes are kinda hokey, but who am I to argue with pressing needs of the #rstats community? I found libqrencode and it&#8217;s highly brew-able and apt-able (probably yum-able, too, if you [&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":true,"_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":[810],"class_list":["post-3574","post","type-post","status-publish","format-standard","hentry","category-r","tag-post"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Two New R Packages - qrencoder &amp; passwordrandom - 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\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Two New R Packages - qrencoder &amp; passwordrandom - rud.is\" \/>\n<meta property=\"og:description\" content=\"Believe it or not, there are two [1] [2] questions on @StackOverflowR about how to make QR codes in R. I personally think QR codes are kinda hokey, but who am I to argue with pressing needs of the #rstats community? I found libqrencode and it&#8217;s highly brew-able and apt-able (probably yum-able, too, if you [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2015-08-02T22:20:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-10T12:54:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.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=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Two New R Packages &#8211; qrencoder &#038; passwordrandom\",\"datePublished\":\"2015-08-02T22:20:02+00:00\",\"dateModified\":\"2018-03-10T12:54:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/\"},\"wordCount\":185,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2015\\\/08\\\/README-qr-1.png\",\"keywords\":[\"post\"],\"articleSection\":[\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/\",\"name\":\"Two New R Packages - qrencoder & passwordrandom - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2015\\\/08\\\/README-qr-1.png\",\"datePublished\":\"2015-08-02T22:20:02+00:00\",\"dateModified\":\"2018-03-10T12:54:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2015\\\/08\\\/README-qr-1.png?fit=336%2C240&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/rud.is\\\/b\\\/wp-content\\\/uploads\\\/2015\\\/08\\\/README-qr-1.png?fit=336%2C240&ssl=1\",\"width\":336,\"height\":240},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/02\\\/two-new-r-packages-qrencoder-passwordrandom\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Two New R Packages &#8211; qrencoder &#038; passwordrandom\"}]},{\"@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 R Packages - qrencoder & passwordrandom - 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\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/","og_locale":"en_US","og_type":"article","og_title":"Two New R Packages - qrencoder & passwordrandom - rud.is","og_description":"Believe it or not, there are two [1] [2] questions on @StackOverflowR about how to make QR codes in R. I personally think QR codes are kinda hokey, but who am I to argue with pressing needs of the #rstats community? I found libqrencode and it&#8217;s highly brew-able and apt-able (probably yum-able, too, if you [&hellip;]","og_url":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/","og_site_name":"rud.is","article_published_time":"2015-08-02T22:20:02+00:00","article_modified_time":"2018-03-10T12:54:36+00:00","og_image":[{"url":"https:\/\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png","type":"","width":"","height":""}],"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\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Two New R Packages &#8211; qrencoder &#038; passwordrandom","datePublished":"2015-08-02T22:20:02+00:00","dateModified":"2018-03-10T12:54:36+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/"},"wordCount":185,"commentCount":4,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"image":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png","keywords":["post"],"articleSection":["R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/","url":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/","name":"Two New R Packages - qrencoder & passwordrandom - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"primaryImageOfPage":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#primaryimage"},"image":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#primaryimage"},"thumbnailUrl":"https:\/\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png","datePublished":"2015-08-02T22:20:02+00:00","dateModified":"2018-03-10T12:54:36+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#primaryimage","url":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?fit=336%2C240&ssl=1","contentUrl":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2015\/08\/README-qr-1.png?fit=336%2C240&ssl=1","width":336,"height":240},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2015\/08\/02\/two-new-r-packages-qrencoder-passwordrandom\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Two New R Packages &#8211; qrencoder &#038; passwordrandom"}]},{"@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-VE","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":4217,"url":"https:\/\/rud.is\/b\/2016\/03\/29\/easier-composite-u-s-choropleths-with-albersusa\/","url_meta":{"origin":3574,"position":0},"title":"Easier Composite U.S. Choropleths with albersusa","author":"hrbrmstr","date":"2016-03-29","format":false,"excerpt":"Folks who've been tracking this blog on R-bloggers probably remember [this post](https:\/\/rud.is\/b\/2014\/11\/16\/moving-the-earth-well-alaska-hawaii-with-r\/) where I showed how to create a composite U.S. map with an Albers projection (which is commonly referred to as AlbersUSA these days thanks to D3). I'm not sure why I didn't think of this earlier, but you\u2026","rel":"","context":"In &quot;cartography&quot;","block_context":{"text":"cartography","link":"https:\/\/rud.is\/b\/category\/cartography\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/Fullscreen_3_29_16__9_06_AM.png?fit=1200%2C747&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/Fullscreen_3_29_16__9_06_AM.png?fit=1200%2C747&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/Fullscreen_3_29_16__9_06_AM.png?fit=1200%2C747&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/Fullscreen_3_29_16__9_06_AM.png?fit=1200%2C747&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/03\/Fullscreen_3_29_16__9_06_AM.png?fit=1200%2C747&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":7579,"url":"https:\/\/rud.is\/b\/2017\/12\/17\/mqtt-development-log-on-dsls-rcpp-modules-and-custom-formula-functions\/","url_meta":{"origin":3574,"position":1},"title":"mqtt Development Log : On DSLs, Rcpp Modules and Custom Formula Functions","author":"hrbrmstr","date":"2017-12-17","format":false,"excerpt":"I know some folks had a bit of fun with the previous post since it exposed the fact that I left out unique MQTT client id generation from the initial 0.1.0 release of the in-development package (client ids need to be unique). There have been some serious improvements since said\u2026","rel":"","context":"In &quot;mqtt&quot;","block_context":{"text":"mqtt","link":"https:\/\/rud.is\/b\/category\/mqtt\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3298,"url":"https:\/\/rud.is\/b\/2015\/03\/09\/new-r-package-ipapi-ipdomain-geolocation\/","url_meta":{"origin":3574,"position":2},"title":"New R Package &#8211; ipapi (IP\/Domain Geolocation)","author":"hrbrmstr","date":"2015-03-09","format":false,"excerpt":"I noticed that the @rOpenSci folks had an interface to [ip-api.com](http:\/\/ip-api.com\/) on their [ToDo](https:\/\/github.com\/ropensci\/webservices\/wiki\/ToDo) list so I whipped up a small R package to fill said gap. Their IP Geolocation API will take an IPv4, IPv6 or FQDN and kick back a ASN, lat\/lon, address and more. The [ipapi package](https:\/\/github.com\/hrbrmstr\/ipapi)\u2026","rel":"","context":"In &quot;cartography&quot;","block_context":{"text":"cartography","link":"https:\/\/rud.is\/b\/category\/cartography\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6164,"url":"https:\/\/rud.is\/b\/2017\/08\/22\/caching-httr-requests-this-means-warc\/","url_meta":{"origin":3574,"position":3},"title":"Caching httr Requests? This means WAR[C]!","author":"hrbrmstr","date":"2017-08-22","format":false,"excerpt":"I've blathered about my crawl_delay project before and am just waiting for a rainy weekend to be able to crank out a follow-up post on it. Working on that project involved sifting through thousands of Web Archive (WARC) files. While I have a nascent package on github to work with\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":146,"url":"https:\/\/rud.is\/b\/2011\/02\/19\/securing-su-with-google-authenticator\/","url_meta":{"origin":3574,"position":4},"title":"Securing &#8216;su&#8217; with Google Authenticator","author":"hrbrmstr","date":"2011-02-19","format":false,"excerpt":"Google's new do-it-yourself two-factor authentication (Google Authenticator) enables you to setup stronger logins on your linux system. Nick Wilkens (@nwilkens) has a good\/quick tutorial up on his company's blog for acquiring, compiling and setting up Google Authenticator for ssh sessions. NOTE: On the Ubuntu VPS I was doing testing on,\u2026","rel":"","context":"In &quot;Authentication&quot;","block_context":{"text":"Authentication","link":"https:\/\/rud.is\/b\/category\/authentication\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3898,"url":"https:\/\/rud.is\/b\/2016\/01\/13\/cobble-xpath-interactively-with-the-xmlview-package\/","url_meta":{"origin":3574,"position":5},"title":"Cobble XPath Interactively with the xmlview Package","author":"hrbrmstr","date":"2016-01-13","format":false,"excerpt":"(If you don't know what XML is, you should probably [read a primer](https:\/\/en.wikipedia.org\/wiki\/XML) before reading this post,) When working with data, one inevitably comes across things encoded in XML. I'm in the \"anti-XML\" camp, but deal with my fair share of XML in \"cyber\" and help out enough people who\u2026","rel":"","context":"In &quot;data wrangling&quot;","block_context":{"text":"data wrangling","link":"https:\/\/rud.is\/b\/category\/data-wrangling\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/RStudioScreenSnapz003.png?fit=865%2C523&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/RStudioScreenSnapz003.png?fit=865%2C523&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/RStudioScreenSnapz003.png?fit=865%2C523&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/RStudioScreenSnapz003.png?fit=865%2C523&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/3574","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=3574"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/3574\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=3574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=3574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=3574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}