

{"id":3622,"date":"2015-08-21T04:32:50","date_gmt":"2015-08-21T09:32:50","guid":{"rendered":"http:\/\/rud.is\/b\/?p=3622"},"modified":"2018-03-07T16:43:28","modified_gmt":"2018-03-07T21:43:28","slug":"doh-i-could-have-had-just-used-v8","status":"publish","type":"post","link":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/","title":{"rendered":"Doh! I Could Have Had Just Used V8!"},"content":{"rendered":"<p>An R user recently had the need to split a &#8220;full, human name&#8221; into component parts to retrieve first &#038; last names. The full names could be anything from something simple like _&#8221;David Regan&#8221;_ to more complex &#038; diverse such as _&#8221;John Smith Jr.&#8221;_, _&#8221;Izaque Iuzuru Nagata&#8221;_ or _&#8221;Christian Schmit de la Breli&#8221;_. Despite the face that I&#8217;m _pretty good_ at searching GitHub &#038; CRAN for R stuff, my quest came up empty (though a teensy part of me swears I saw this type of thing in a package somewhere). I _did_ manage to find Python &#038; node.js modules that carved up human names but really didn&#8217;t have the time to re-implement their functionality from scratch in R (or, preferably, Rcpp). <\/p>\n<p>Rather than rely on the Python bridge to R (yuck) I decided to use @opencpu&#8217;s [V8 package](https:\/\/cran.rstudio.com\/web\/packages\/V8\/index.html) to wrap a part of the node.js [humanparser](https:\/\/github.com\/chovy\/humanparser) module. If you&#8217;re not familiar with V8, it provides the ability to run JavaScript code within R and makes it possible to pass variables into JavaScript functions and get data back in return. All the magic happens via a JSON data passing &#038; Rcpp wrappers (and, of course, the super-awesome code Jeroen writes).<\/p>\n<p>Working with JavaScript in R is as simple as creating an instance of the JavaScript V8 interpreter, loading up the JavaScript code that makes the functions work:<\/p>\n<pre lang=\"rsplus\">library(V8)\r\n\r\nct <- new_context()\r\nct$source(system.file(\"js\/underscore.js\", package=\"V8\"))\r\nct$call(\"_.filter\", mtcars, JS(\"function(x){return x.mpg < 15}\"))\r\n\r\n#>                      mpg cyl disp  hp drat    wt  qsec vs am gear carb\r\n#> Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4\r\n#> Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4\r\n#> Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4\r\n#> Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4\r\n#> Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4<\/pre>\n<p>There are many more examples in the [V8 vignette](https:\/\/cran.rstudio.com\/web\/packages\/V8\/vignettes\/v8_intro.html).<\/p>\n<p>For `humanparser` I needed to use Underscore.js (it comes with V8) and a [function](https:\/\/github.com\/chovy\/humanparser\/blob\/master\/index.js#L5-L74) from `humanparser` that I carved out to work the way I wanted it to. You can look at the innards of the package [on github](https:\/\/github.com\/hrbrmstr\/humanparser)&mdash;specifically, [this file](https:\/\/github.com\/hrbrmstr\/humanparser\/blob\/master\/R\/humanparser.r) (it&#8217;s _really_ small)&mdash; and, to use the two new functions the package exposes it&#8217;s as simple as doing:<\/p>\n<pre lang=\"rsplus\">devtools::install_github(\"hrbrmstr\/humanparser\")\r\n\r\nlibrary(humanparser)\r\n\r\nparse_name(\"John Smith Jr.\")\r\n\r\n#> $firstName\r\n#> [1] \"John\"\r\n#> \r\n#> $suffix\r\n#> [1] \"Jr.\"\r\n#> \r\n#> $lastName\r\n#> [1] \"Smith\"\r\n#> \r\n#> $fullName\r\n#> [1] \"John Smith Jr.\"<\/pre>\n<p>or the following to convert a bunch of &#8217;em:<\/p>\n<pre lang=\"rsplus\">full_names <- c(\"David Regan\", \"Izaque Iuzuru Nagata\", \r\n                \"Christian Schmit de la Breli\", \"Peter Doyle\", \"Hans R.Bruetsch\", \r\n                \"Marcus Reichel\", \"Per-Axel Koch\", \"Louis Van der Walt\", \r\n                \"Mario Adamek\", \"Ugur Tozsekerli\", \"Judit Ludvai\" )\r\n\r\nparse_names(full_names)\r\n\r\n#> Source: local data frame [11 x 4]\r\n#> \r\n#>    firstName     lastName                     fullName middleName\r\n#> 1      David        Regan                  David Regan         NA\r\n#> 2     Izaque       Nagata         Izaque Iuzuru Nagata     Iuzuru\r\n#> 3  Christian  de la Breli Christian Schmit de la Breli     Schmit\r\n#> 4      Peter        Doyle                  Peter Doyle         NA\r\n#> 5       Hans   R.Bruetsch              Hans R.Bruetsch         NA\r\n#> 6     Marcus      Reichel               Marcus Reichel         NA\r\n#> 7   Per-Axel         Koch                Per-Axel Koch         NA\r\n#> 8      Louis Van der Walt           Louis Van der Walt         NA\r\n#> 9      Mario       Adamek                 Mario Adamek         NA\r\n#> 10      Ugur   Tozsekerli              Ugur Tozsekerli         NA\r\n#> 11     Judit       Ludvai                 Judit Ludvai         NA<\/pre>\n<p>Now, the functions in this package won&#8217;t win any land-speed records since we&#8217;re going from R to C[++] to JavaScript and back, passing JSON-converted data back &#038; forth, so I pwnd @quominus into making a full Rcpp-based human, full-name parser. And, he&#8217;s nearly done! So, keep an eye on [humaniformat](https:\/\/github.com\/Ironholds\/humaniformat) since it will no doubt be in CRAN soon.<\/p>\n<p>The real point of this post is that there are _tons_ of JavaScript modules that will work well with the V8 package and let you get immediate functionality for something that might not be in R yet. You can prototype quickly (it took almost no time to make that package and you don&#8217;t even need to go that far), then optimize later. So, next time&mdash;if you can&#8217;t find some functionality directly in R&mdash;see if you can get by with a JavaScript shim, then convert to full R\/Rcpp when\/if you need to go into production.<\/p>\n<p>If you&#8217;ve done any creative V8 hacks, drop a note in the comments!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An R user recently had the need to split a &#8220;full, human name&#8221; into component parts to retrieve first &#038; last names. The full names could be anything from something simple like _&#8221;David Regan&#8221;_ to more complex &#038; diverse such as _&#8221;John Smith Jr.&#8221;_, _&#8221;Izaque Iuzuru Nagata&#8221;_ or _&#8221;Christian Schmit de la Breli&#8221;_. Despite the [&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":[15,91],"tags":[810],"class_list":["post-3622","post","type-post","status-publish","format-standard","hentry","category-javascript","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>Doh! I Could Have Had Just Used V8! - 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\/21\/doh-i-could-have-had-just-used-v8\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Doh! I Could Have Had Just Used V8! - rud.is\" \/>\n<meta property=\"og:description\" content=\"An R user recently had the need to split a &#8220;full, human name&#8221; into component parts to retrieve first &#038; last names. The full names could be anything from something simple like _&#8221;David Regan&#8221;_ to more complex &#038; diverse such as _&#8221;John Smith Jr.&#8221;_, _&#8221;Izaque Iuzuru Nagata&#8221;_ or _&#8221;Christian Schmit de la Breli&#8221;_. Despite the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/\" \/>\n<meta property=\"og:site_name\" content=\"rud.is\" \/>\n<meta property=\"article:published_time\" content=\"2015-08-21T09:32:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-03-07T21:43:28+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\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/\"},\"author\":{\"name\":\"hrbrmstr\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"headline\":\"Doh! I Could Have Had Just Used V8!\",\"datePublished\":\"2015-08-21T09:32:50+00:00\",\"dateModified\":\"2018-03-07T21:43:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/\"},\"wordCount\":551,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#\\\/schema\\\/person\\\/d7cb7487ab0527447f7fda5c423ff886\"},\"keywords\":[\"post\"],\"articleSection\":[\"Javascript\",\"R\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/\",\"url\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/\",\"name\":\"Doh! I Could Have Had Just Used V8! - rud.is\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/#website\"},\"datePublished\":\"2015-08-21T09:32:50+00:00\",\"dateModified\":\"2018-03-07T21:43:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rud.is\\\/b\\\/2015\\\/08\\\/21\\\/doh-i-could-have-had-just-used-v8\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rud.is\\\/b\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Doh! I Could Have Had Just Used V8!\"}]},{\"@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":"Doh! I Could Have Had Just Used V8! - 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\/21\/doh-i-could-have-had-just-used-v8\/","og_locale":"en_US","og_type":"article","og_title":"Doh! I Could Have Had Just Used V8! - rud.is","og_description":"An R user recently had the need to split a &#8220;full, human name&#8221; into component parts to retrieve first &#038; last names. The full names could be anything from something simple like _&#8221;David Regan&#8221;_ to more complex &#038; diverse such as _&#8221;John Smith Jr.&#8221;_, _&#8221;Izaque Iuzuru Nagata&#8221;_ or _&#8221;Christian Schmit de la Breli&#8221;_. Despite the [&hellip;]","og_url":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/","og_site_name":"rud.is","article_published_time":"2015-08-21T09:32:50+00:00","article_modified_time":"2018-03-07T21:43:28+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\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/#article","isPartOf":{"@id":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/"},"author":{"name":"hrbrmstr","@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"headline":"Doh! I Could Have Had Just Used V8!","datePublished":"2015-08-21T09:32:50+00:00","dateModified":"2018-03-07T21:43:28+00:00","mainEntityOfPage":{"@id":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/"},"wordCount":551,"commentCount":3,"publisher":{"@id":"https:\/\/rud.is\/b\/#\/schema\/person\/d7cb7487ab0527447f7fda5c423ff886"},"keywords":["post"],"articleSection":["Javascript","R"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/","url":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/","name":"Doh! I Could Have Had Just Used V8! - rud.is","isPartOf":{"@id":"https:\/\/rud.is\/b\/#website"},"datePublished":"2015-08-21T09:32:50+00:00","dateModified":"2018-03-07T21:43:28+00:00","breadcrumb":{"@id":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rud.is\/b\/2015\/08\/21\/doh-i-could-have-had-just-used-v8\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rud.is\/b\/"},{"@type":"ListItem","position":2,"name":"Doh! I Could Have Had Just Used V8!"}]},{"@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-Wq","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":12718,"url":"https:\/\/rud.is\/b\/2020\/04\/01\/uaparserjs-updated-on-cran-using-webpack-to-make-v8-application-bundles\/","url_meta":{"origin":3622,"position":0},"title":"{uaparserjs} Updated on CRAN &#038; Using webpack to Make {V8}  Application Bundles","author":"hrbrmstr","date":"2020-04-01","format":false,"excerpt":"Just a quick note that thanks to a gentle nudge an updated version of {uaparser} --- a package that processes User Agent strings web clients send to servers --- is making its way to all the CRAN mirrors and is also available on CINC. The most significant change is 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":3841,"url":"https:\/\/rud.is\/b\/2016\/01\/03\/zellingenach-a-visual-exploration-of-the-spatial-patterns-in-the-endings-of-german-town-and-village-names-in-r\/","url_meta":{"origin":3622,"position":1},"title":"Zellingenach: A visual exploration of the spatial patterns in the endings of German town and village names in R","author":"hrbrmstr","date":"2016-01-03","format":false,"excerpt":"Moritz Stefaner started off 2016 with a [very spiffy post](http:\/\/truth-and-beauty.net\/experiments\/ach-ingen-zell\/) on _\"a visual exploration of the spatial patterns in the endings of German town and village names\"_. Moritz was [exploring some new data processing & visualization tools](https:\/\/github.com\/moritzstefaner\/ach-ingen-zell) for the post, but when I saw what he was doing I wondered\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\/01\/rud_is_zellingenach_html.png?fit=597%2C798&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/rud_is_zellingenach_html.png?fit=597%2C798&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2016\/01\/rud_is_zellingenach_html.png?fit=597%2C798&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":12447,"url":"https:\/\/rud.is\/b\/2019\/08\/23\/polyglot-fizzbuzz-in-r-plus-why-cant-johnny-code\/","url_meta":{"origin":3622,"position":2},"title":"Polyglot FizzBuzz in R (Plus: &#8220;Why Can&#8217;t Johnny Code?&#8221;)","author":"hrbrmstr","date":"2019-08-23","format":false,"excerpt":"I caught this post on the The Surprising Number Of Programmers Who Can\u2019t Program from the Hacker News RSS feed. Said post links to another, classic post on the same subject and you should read both before continuing. Back? Great! Let's dig in. Why does hrbrmstr care about this? Offspring\u2026","rel":"","context":"In &quot;C++&quot;","block_context":{"text":"C++","link":"https:\/\/rud.is\/b\/category\/c\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6255,"url":"https:\/\/rud.is\/b\/2017\/09\/15\/its-a-fake-%f0%9f%93%a6-revisiting-trust-in-foss-ecosystems\/","url_meta":{"origin":3622,"position":3},"title":"It&#8217;s a FAKE (?)! Revisiting Trust In FOSS Ecosystems","author":"hrbrmstr","date":"2017-09-15","format":false,"excerpt":"I've blathered about trust before 1 2, but said blatherings were in a \"what if\" context. Unfortunately, the if has turned into a when, which begged for further blathering on a recent FOSS ecosystem cybersecurity incident. The gg_spiffy @thomasp85 linked to a post by the SK-CSIRT detailing the discovery and\u2026","rel":"","context":"In &quot;R&quot;","block_context":{"text":"R","link":"https:\/\/rud.is\/b\/category\/r\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/09\/download_counts_per_day-1.png?fit=1200%2C818&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/09\/download_counts_per_day-1.png?fit=1200%2C818&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/09\/download_counts_per_day-1.png?fit=1200%2C818&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/09\/download_counts_per_day-1.png?fit=1200%2C818&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/rud.is\/b\/wp-content\/uploads\/2017\/09\/download_counts_per_day-1.png?fit=1200%2C818&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":13894,"url":"https:\/\/rud.is\/b\/2023\/03\/29\/using-webr-pyodide-to-fill-in-the-temporary-package-gaps\/","url_meta":{"origin":3622,"position":4},"title":"Using WebR + Pyodide To Fill In The (Temporary) Package Gaps","author":"hrbrmstr","date":"2023-03-29","format":false,"excerpt":"I won't wax long and poetic here since I've already posted the experiment that has all the details. TL;DR: there are still only ~90-ish ? in the WebR WASM \"CRAN\", but more are absolutely on the way, including the capability to build your own CRAN and dev packages via Docker\u2026","rel":"","context":"In &quot;Python&quot;","block_context":{"text":"Python","link":"https:\/\/rud.is\/b\/category\/python-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6146,"url":"https:\/\/rud.is\/b\/2017\/08\/01\/r%e2%81%b6-reticulating-parquet-files\/","url_meta":{"origin":3622,"position":5},"title":"R\u2076 \u2014 Reticulating Parquet Files","author":"hrbrmstr","date":"2017-08-01","format":false,"excerpt":"The reticulate package provides a very clean & concise interface bridge between R and Python which makes it handy to work with modules that have yet to be ported to R (going native is always better when you can do it). This post shows how to use reticulate to create\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":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/3622","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=3622"}],"version-history":[{"count":0,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/posts\/3622\/revisions"}],"wp:attachment":[{"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/media?parent=3622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/categories?post=3622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rud.is\/b\/wp-json\/wp\/v2\/tags?post=3622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}