<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
  <title>R on Jon Calder</title>
  <link>https://www.joncalder.co.za/tags/r/</link>
  <description>Recent content in R on Jon Calder</description>
  <generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Mon, 04 Dec 2017 00:00:00 +0000</lastBuildDate>

<atom:link href="https://www.joncalder.co.za/tags/r/index.xml" rel="self" type="application/rss+xml" />


<item>
  <title>Naming things is hard</title>
  <link>https://www.joncalder.co.za/2017-12-04-naming-things-is-hard/</link>
  <pubDate>Mon, 04 Dec 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-12-04-naming-things-is-hard/</guid>
  <description>

&lt;blockquote&gt;
&lt;p&gt;‘There are only two hard things in Computer Science: cache invalidation and naming things.’&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The above quip by Phil Karlton is fairly well known and often quoted, sometimes with amusing extensions:&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.&lt;/p&gt;&amp;mdash; Jeff Atwood (@codinghorror) &lt;a href=&#34;https://twitter.com/codinghorror/status/506010907021828096?ref_src=twsrc%5Etfw&#34;&gt;August 31, 2014&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;There are only 2 hard things in computer science:&lt;br&gt;0. Cache invalidation&lt;br&gt;1. Naming things&lt;br&gt;7. Asynchronous callbacks&lt;br&gt;2. Off-by-one errors&lt;/p&gt;&amp;mdash; Paweł Zajączkowski (@gvaireth) &lt;a href=&#34;https://twitter.com/gvaireth/status/909805115707727873?ref_src=twsrc%5Etfw&#34;&gt;September 18, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;These are funny, but they do also convey some truth: in the midst of all the technicalities and abstractions we can find ourselves caught up with in the world of programming, it&amp;rsquo;s surprising how often seemingly &amp;lsquo;simple&amp;rsquo; things like naming things trip us up.&lt;/p&gt;

&lt;p&gt;I was recently reminded of this when a difference of opinions about function names sparked some healthy debate in a pull request I was reviewing for one of my personal projects.&lt;/p&gt;

&lt;p&gt;So the question I want to raise is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;When (if ever) is it a good idea to adopt a prefixing convention for the names of exported functions in an R package?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;disclaimers&#34;&gt;Disclaimers&lt;/h2&gt;

&lt;p&gt;Before I dive into the details I feel it is important to state a few things upfront.&lt;/p&gt;

&lt;p&gt;Firstly, I want to thank my friends and collaborators Katrin and Lorenz who are strong proponents of open source software and for whom I have a lot of respect. On this occasion they both seem to disagree with me, but that is not a bad thing - discussion and debate is valuable, and that&amp;rsquo;s not gonna happen when everyone agrees with each other all the time. I did also ask for their permission before publishing this post.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://imgs.xkcd.com/comics/survivorship_bias.png#floatright&#34; alt=&#34;xkcd: Survivorship Bias&#34; title=&#34;xkcd: Survivorship Bias&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Secondly, my purpose in writing about this is less about trying to determine who is right, and more about attempting to convert this experience into insight. Often we learn more from our failures than from our successes, but it&amp;rsquo;s harder to share our mistakes than it is to share our triumphs. So this post is my way of being vulnerable about something that is a work in progress and the process of trying to improve on it. As an aside, if you haven&amp;rsquo;t encountered survivorship bias before, I highly recommend you &lt;a href=&#34;https://youarenotsosmart.com/2013/05/23/survivorship-bias/&#34;&gt;read this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thirdly, I was wrong. This is especially important in light of the previous point. I was wrong to raise the issue of function names (for the package as a whole) in a pull request which was focused on something else. This is a valuable lesson. One should always aim to keep pull requests (and issues) narrow in scope because attempting to tackle multiple problems in one place (unless they are inherently linked or dependent on each other) is messy and complicates matters unnecessarily.&lt;/p&gt;

&lt;p&gt;Lastly, what I share will be my own opinion, but it is just an opinion and I&amp;rsquo;m always open to learning from others with different views. My hope is that collectively we can share some worthwhile perspectives from both sides and possibly encourage more thinking and conversation around this or related issues.&lt;/p&gt;

&lt;h2 id=&#34;background-context&#34;&gt;Background Context&lt;/h2&gt;

&lt;p&gt;Ok, so having made those upfront disclaimers, I&amp;rsquo;ll begin by summarizing the back-story and context in which the discussion arose. If you&amp;rsquo;d like to refer to the pull request itself - it can be found &lt;a href=&#34;https://github.com/jonmcalder/exercism/pull/9#pullrequestreview-66774136&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/exercism_R_logo.png#floatleft&#34; alt=&#34;R track on Exercism&#34; title=&#34;R track on exercism&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://exercism.io/&#34;&gt;excercism.io&lt;/a&gt; is a learning platform that aims to provide code practice and mentorship for everyone. I got involved in developing the R track on Exercism and wrote about it &lt;a href=&#34;http://joncalder.co.za/2017-04-05-r-track-on-exercism/&#34;&gt;earlier this year&lt;/a&gt;. Unlike most online learning platforms, with Exercism, all the coding happens on your machine in an environment you&amp;rsquo;re familiar with. So Exercism provides a command line tool which leverages an API in order to facilitate the process of fetching and submitting exercises.&lt;/p&gt;

&lt;p&gt;A few months ago, I had an idea to write an R package which wraps this API. The thinking was that the user experience (for R users) might be improved upon by facilitating interaction with &lt;code&gt;exercism.io&lt;/code&gt; directly from R itself. This removes the need for switching repeatedly between R and a shell when fetching, iterating on and submitting exercises - although now the addition of terminal tabs in RStudio 1.1 has already reduced this friction to a degree. In any case, there are additional opportunities for Exercism helper functions in the package which can be context aware and integrate with the RStudio if it is being used. An example this could be functions (or addins) which make use of the &lt;code&gt;rstudioapi&lt;/code&gt; to detect which problem was last worked on when submitting so that it doesn&amp;rsquo;t need to be specified manually.&lt;/p&gt;

&lt;p&gt;Katrin, who is a co-maintainer for the R track on exercism.io, has also been collaborating on this R package with me and has had some great ideas like leveraging &lt;a href=&#34;http://testthat.r-lib.org/&#34;&gt;testthat&amp;rsquo;s&lt;/a&gt; &lt;code&gt;auto_test()&lt;/code&gt; to facilitate and encourage test driven development, as this is one of the implicit goals of Exercism. In the PR introducing this feature, the potential for function name confusion was soon evident when this new Exercism specific version of &lt;code&gt;testthat::auto_test()&lt;/code&gt; was (initially) given the name &lt;code&gt;autotest()&lt;/code&gt;. This reminded me that I&amp;rsquo;d in fact been thinking for a while about renaming all the exported functions to adopt the prefixing convention &lt;code&gt;ex_*&lt;/code&gt; (for a few different reasons which I&amp;rsquo;ll get to later). So I figured this &amp;ldquo;name clash&amp;rdquo; was as good a catalyst as any, and made the suggestion to start adopting the new naming convention in the PR. Once again it&amp;rsquo;s worth noting that this was a mistake - I should have instead opened a separate issue to discuss my proposed change in naming conventions.&lt;/p&gt;

&lt;h2 id=&#34;discussion-follow-up&#34;&gt;Discussion &amp;amp; follow-up&lt;/h2&gt;

&lt;p&gt;The suggestion was met with some resistance, and after some further discussion it became clear to me that it was a thoughtfully considered resistance. So I asked my friend Lorenz to weigh in on the discussion too, given that he knows Katrin and I but is not involved in the project and thus has the benefit of a more neutral perspective. To my surprise, he did not agree with me either!&lt;/p&gt;

&lt;p&gt;But I did still seem to have &lt;a href=&#34;https://github.com/jonmcalder/exercism/pull/9#issuecomment-334316542&#34;&gt;Jenny Bryan on my side&lt;/a&gt; (thanks Jenny!), and I figured &lt;a href=&#34;https://twitter.com/hadleywickham&#34;&gt;Hadley&lt;/a&gt; had to have thought it was a good idea at some point given the &lt;code&gt;str_&lt;/code&gt; prefix for &lt;a href=&#34;http://stringr.tidyverse.org/&#34;&gt;stringr&lt;/a&gt; and &lt;code&gt;fct_&lt;/code&gt; prefix for &lt;a href=&#34;http://forcats.tidyverse.org/&#34;&gt;forcats&lt;/a&gt; among others. So after thinking on the problem for a while, out of curiousity I eventually tweeted out a poll to see if I could get any sense of where the &lt;code&gt;#rstats&lt;/code&gt; community falls on this issue.&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;What is your take on prefixing conventions for &lt;a href=&#34;https://twitter.com/hashtag/rstats?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#rstats&lt;/a&gt; function names? (e.g. stringr/stringi, forcats, googlesheets)&lt;/p&gt;&amp;mdash; Jon Calder (@jonmcalder) &lt;a href=&#34;https://twitter.com/jonmcalder/status/921470775294681089?ref_src=twsrc%5Etfw&#34;&gt;October 20, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;At a glance it looks like a reasonable proportion are actually in favour of prefixing conventions for function names (or at least not against the idea), but of course there are a number of disclaimers to make here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character limits (at the time of the poll) made it hard to communicate the question clearly or to include any additional context for the question, so that probably leaves a lot of room for interpretation&lt;/li&gt;
&lt;li&gt;I don&amp;rsquo;t have much reach on Twitter, so there weren&amp;rsquo;t many responses (81 votes is not much to go on)&lt;/li&gt;
&lt;li&gt;Even if there had been a good number of responses, Twitter polls need to be looked at skeptically given the potential for sampling bias&lt;/li&gt;
&lt;li&gt;Speaking of sampling bias, most of the votes came in after Hadley tweeted a reply to the poll so it makes sense that the results would be skewed towards his legions of followers (I&amp;rsquo;m one of them and the degree of influence is clear because his packages are what got me considering prefixing conventions in the first place, among others like &lt;a href=&#34;https://github.com/jennybc/googlesheets&#34;&gt;googlesheets&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;https://twitter.com/maelle&#34;&gt;Maëlle&lt;/a&gt; had two helpful follow-ups for me. Firstly, she encouraged me to blog about this (and I don&amp;rsquo;t think I would have done so otherwise so thanks Maëlle!). Secondly, she directed me to the ROpenSci review process for her package &lt;a href=&#34;http://ropensci.github.io/ropenaq/&#34;&gt;ropenaq&lt;/a&gt;, which provides access to air quality data via the OpenAQ API. In his &lt;a href=&#34;https://github.com/ropensci/onboarding/issues/24#issuecomment-177408867&#34;&gt;review of the package&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/polesasunder&#34;&gt;Andrew MacDonald&lt;/a&gt; suggested the following:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I was thinking that the names of functions might be a bit similar to functions in other packages that also use geography. What do you think of prefixing every function with a package-specific string? Perhaps something like aq_ before all the user-facing functions (i.e. countries() becomes aq&lt;em&gt;countries()). This is similar to another rOpenSci package, geonames, which uses GN (as in GNcities()). This has the added benefit of playing very nicely with Rstudio, which will show all the package functions as completions when users type aq&lt;/em&gt; and hit tab.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Interestingly, this suggestion (although the original inspiration may have come from elsewhere) was later incorporated into &lt;a href=&#34;https://github.com/ropensci/onboarding/blob/master/packaging_guide.md#funvar&#34;&gt;ROpenSci&amp;rsquo;s packaging guide&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/ropensci_logo.png#floatright&#34; alt=&#34;ROpenSci logo&#34; title=&#34;ROpenSci logo&#34; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Consider an object_verb() naming scheme for functions in your package that take a common data type or interact with a common API. object refers to the data/API and verb the primary action. This scheme helps avoid namespace conflicts with packages that may have similar verbs, and makes code readable and easy to auto-complete. For instance, in &lt;code&gt;stringi&lt;/code&gt;, functions starting with &lt;code&gt;stri_&lt;/code&gt; manipulate strings (&lt;code&gt;stri_join()&lt;/code&gt;, &lt;code&gt;stri_sort()&lt;/code&gt;, and in &lt;code&gt;googlesheets&lt;/code&gt; functions starting with &lt;code&gt;gs_&lt;/code&gt; are calls to the Google Sheets API (&lt;code&gt;gs_auth()&lt;/code&gt;, &lt;code&gt;gs_user()&lt;/code&gt;, &lt;code&gt;gs_download()&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Though I hadn&amp;rsquo;t seen this recommendation from ROpenSci at the time, it aligns very strongly with my initial reasoning for wanting to change the function names in the &lt;code&gt;exercism&lt;/code&gt; package. It is primarily an API package, and all functions either interact with the exercism.io API or act on some (local) Exercism data/code (exercises). A potential objection could be that in some cases the &lt;code&gt;ex_*&lt;/code&gt; prefix may be interpreted either as &lt;code&gt;exercism_*&lt;/code&gt; or as &lt;code&gt;exercise_*&lt;/code&gt;, but I don&amp;rsquo;t think that&amp;rsquo;s a problem since either way the context is common and shared implicitly.&lt;/p&gt;

&lt;p&gt;Having said that, I&amp;rsquo;m also aware that a prefixing convention is not suitable in the majority of cases and there are reasons to avoid it, otherwise it would already be far more common. I&amp;rsquo;ve not tried to summarize the arguments for and against it here since this post is already quite lengthy, but I believe Katrin and Lorenz both raised a number of good points over in the &lt;a href=&#34;https://github.com/jonmcalder/exercism/pull/9#issuecomment-334929991&#34;&gt;original PR thread&lt;/a&gt;, so I would encourage you to read through that to get some more insight into the potential pros and cons.&lt;/p&gt;

&lt;p&gt;Below is an overview of the currently exported functions for &lt;code&gt;exercism&lt;/code&gt;, along with a brief
description of what they do and potential new names for each should we adopt a prefixing convention:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;Current Function&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;Description&lt;/th&gt;
&lt;th align=&#34;left&#34;&gt;New Name?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;set_api_key()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Set an environment variable for the provided exercism.io API key, and store in .Renviron so that it can persist for future sessions.&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_set_key()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;set_exercism_path()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Set an environment variable for the provided exercism path, and store in .Renviron so that it can persist for future sessions.&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_set_path()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;track_status()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Fetches current track status from exercism.io&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_status()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;check_next_problem()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Returns the next problem for a language track&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_check()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;fetch_problem()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Fetches the files for a problem via the Exercism API and writes them into a new problem folder in the Exercism directory&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_fetch()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;fetch_next()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Checks for the next problem via the Exercism API, and writes the files into the folder in the Exercism directory&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;*special case of &lt;code&gt;ex_fetch()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;open_exercise()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Open files for an exercism.io problem&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_open()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;start_testing()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Exercism- and R-specific wrapper for &lt;code&gt;testthat::auto_test()&lt;/code&gt; that starts testing your solution against the problem&amp;rsquo;s test cases.&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_auto_test()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;submit()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Submits the specified solution to exercism.io&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_submit()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;skip_problem()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Marks a problem as &amp;lsquo;skipped&amp;rsquo; via the Exercism API&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_skip()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;browse_exercise()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Navigate to an exercise description on exercism.io&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;ex_browse()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;&lt;code&gt;browse_solution()&lt;/code&gt;&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;Navigate to an exercise solution on exercism.io&lt;/td&gt;
&lt;td align=&#34;left&#34;&gt;*special case of &lt;code&gt;ex_browse()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;So looking at the above, do you think this a good use case for an &lt;code&gt;object_verb()&lt;/code&gt; naming convention? How should one determine this? Please feel free to comment with your thoughts and suggestions either in the comments section below, on &lt;a href=&#34;https://twitter.com/jonmcalder&#34;&gt;Twitter&lt;/a&gt;, or in &lt;a href=&#34;https://community.rstudio.com/t/function-naming-conventions-and-best-practice/3381&#34;&gt;this RStudio Community discussion thread&lt;/a&gt;.&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>Data Science Podcasts</title>
  <link>https://www.joncalder.co.za/2017-05-31-data-science-podcasts/</link>
  <pubDate>Wed, 31 May 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-05-31-data-science-podcasts/</guid>
  <description>

&lt;p&gt;Podcasts are awesome. Especially when you&amp;rsquo;re stuck in traffic on the way to work.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/mr_incredible_stuck_in_traffic.jpg&#34; alt=&#34;Mr Incredible stuck in traffic&#34; title=&#34;Mr Incredible stuck in traffic&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Below are some podcasts I listen to that relate to data science and statistics. Each of them has something slightly different to offer, so if this is an area of interest to you then I recommend you give these a try!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/nssd.png#floatleft&#34; alt=&#34;NSSD logo&#34; title=&#34;NSSD logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;not-so-standard-deviations-https-soundcloud-com-nssd-podcast&#34;&gt;&lt;a href=&#34;https://soundcloud.com/nssd-podcast&#34;&gt;Not So Standard Deviations&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Roger Peng and Hilary Parker talk about the latest in data science and data analysis in academia and industry.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/data_skeptic.png#floatright&#34; alt=&#34;Data Skeptic logo&#34; title=&#34;Data Skeptic logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;data-skeptic-https-dataskeptic-com&#34;&gt;&lt;a href=&#34;https://dataskeptic.com/&#34;&gt;Data Skeptic&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Data Skeptic is your source for a perspective of scientific skepticism on topics in statistics, machine learning, big data, artificial intelligence, and data science.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/more_or_less_behind_the_stats.png#floatleft&#34; alt=&#34;More or Less: Behind the Stats logo&#34; title=&#34;More or Less: Behind the Stats logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;more-or-less-behind-the-stats-http-www-bbc-co-uk-programmes-p02nrss1&#34;&gt;&lt;a href=&#34;http://www.bbc.co.uk/programmes/p02nrss1&#34;&gt;More or Less: Behind the Stats&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Tim Harford and the More or Less team from BBC Radio 4 try to make sense of the statistics that surround us.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/the_r_podcast.png#floatright&#34; alt=&#34;The R Podcast logo&#34; title=&#34;The R Podcast logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;the-r-podcast-https-r-podcast-org&#34;&gt;&lt;a href=&#34;https://r-podcast.org/&#34;&gt;The R-Podcast&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Giving practical advice on how to use R for powerful and innovative data analyses. The host of the R-Podcast is Eric Nantz, a statistician working in the life sciences industry who has been using R since 2004.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/partially_derivative.png#floatleft&#34; alt=&#34;Partially Derivative logo&#34; title=&#34;Partially Derivative logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;partially-derivative-http-partiallyderivative-com&#34;&gt;&lt;a href=&#34;http://partiallyderivative.com&#34;&gt;Partially Derivative&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Hosted by Jonathon, Vidya, and Chris, Partially Derivative is a podcast about data science in the world around us. Episodes are a mix of explorations into the techniques used in data science and discussions with the field&amp;rsquo;s leading experts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/linear_digressions.png#floatright&#34; alt=&#34;Linear Digressions logo&#34; title=&#34;Linear Digressions logo&#34; /&gt;&lt;/p&gt;

&lt;h4 id=&#34;linear-digressions-http-lineardigressions-com&#34;&gt;&lt;a href=&#34;http://lineardigressions.com/&#34;&gt;Linear Digressions&lt;/a&gt;&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Hosts Katie Malone and Ben Jaffe explore machine learning and data science through interesting (and often very unusual) applications.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Are there other data science podcasts missing from this list that you can recommend? Feel free to comment below and let me know!&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>R track on exercism.io</title>
  <link>https://www.joncalder.co.za/2017-04-05-r-track-on-exercism.io/</link>
  <pubDate>Wed, 05 Apr 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-04-05-r-track-on-exercism.io/</guid>
  <description>&lt;p&gt;&lt;a href=&#34;https://www.joncalder.co.za/2017-01-09-why-swirl/&#34;&gt;As I&amp;rsquo;ve said before&lt;/a&gt;, when it comes to programming I&amp;rsquo;m a firm believer in the &amp;ldquo;learn by doing&amp;rdquo; approach. &lt;a href=&#34;http://exercism.io/&#34;&gt;&lt;code&gt;exercism.io&lt;/code&gt;&lt;/a&gt; is a project which exemplifies this.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/exercism_logo.png#floatright&#34; alt=&#34;exercism logo&#34; title=&#34;exercism logo&#34; /&gt;&lt;/p&gt;

&lt;p&gt;I came across &lt;a href=&#34;http://exercism.io/&#34;&gt;&lt;code&gt;exercism.io&lt;/code&gt;&lt;/a&gt; earlier this year while exploring GitHub looking for an open source project to contribute to. The premise is fairly simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pick a language that you&amp;rsquo;d like to learn or improve on&lt;/li&gt;
&lt;li&gt;fetch an exercise via the Command Line Interface (CLI)&lt;/li&gt;
&lt;li&gt;code up and submit a solution for the exercise&lt;/li&gt;
&lt;li&gt;return to the site to get feedback on your solution and/or to compare it to the solutions others have come up with&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problems are very simple to begin with, (usually starting out with the traditional &amp;ldquo;Hello, World!&amp;rdquo;), progressing to more difficult problems further on. It&amp;rsquo;s aimed at both newbies and experienced developers, with the philosophy being that for newer programmers the exercises are achievable but &amp;ldquo;with enough complexity to uncover bite-sized knowledge gaps&amp;rdquo;, whereas for more experienced developers, the problems &amp;ldquo;provide a balance of constraints and freedom and encourage you to explore trade-offs and best-practices&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/lolcat_code_reviews.jpg#floatleft&#34; alt=&#34;lolcat code reviews&#34; title=&#34;lolcat code reviews&#34; /&gt;&lt;/p&gt;

&lt;p&gt;More experienced developers are also encouraged to get involved reviewing the solutions of others and/or to contribute to the project which is all completely open source, whether it is the website itself, API&amp;rsquo;s, the CLI, documentation or track content. The site is also well suited to those with experience in one or more languages who are wanting to ramp up in a new language, or to get a sense of the how the idiomatic approach to a problem might differ from language to language.&lt;/p&gt;

&lt;p&gt;There are currently 35 active language tracks, with another 20+ language tracks planned or upcoming (essentially in an incubation stage). One of those which is hopefully soon-to-be-launched is the &lt;a href=&#34;http://exercism.io/languages/r/launch&#34;&gt;R language track&lt;/a&gt;, which I&amp;rsquo;ve been contributing to over the past two months and am pretty excited about.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/exercism_R_logo.png#floatright&#34; alt=&#34;exercism R logo&#34; title=&#34;exercism R logo&#34; /&gt;&lt;/p&gt;

&lt;p&gt;If you&amp;rsquo;re interested, there are a number of ways you can get involved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Firstly, give the &lt;a href=&#34;http://exercism.io/languages/r/launch&#34;&gt;R language track&lt;/a&gt; a try! (you&amp;rsquo;ll need to login on &lt;code&gt;exercism.io&lt;/code&gt; using your GitHub account)&lt;/li&gt;
&lt;li&gt;Once you&amp;rsquo;ve submitted a solution to a problem, you&amp;rsquo;ll be able to see other peoples submissions and are encouraged to comment on these and get discussions going around style and best practice, pros and cons of different approaches etc.&lt;/li&gt;
&lt;li&gt;If you encounter any problems along the way (e.g. setup/install instructions, fetching or submitting exercises, running tests etc) then raise it via the &lt;a href=&#34;https://gitter.im/exercism/support&#34;&gt;online chat support&lt;/a&gt; in order to get help and/or bring it to someone&amp;rsquo;s attention if something needs to be fixed&lt;/li&gt;
&lt;li&gt;With regard to the above, if you encounter an issue which applies specifically to the R track, then please open an issue on the &lt;a href=&#34;https://github.com/exercism/xr/issues&#34;&gt;R track repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Consider becoming a mentor for the R track (if you&amp;rsquo;re interested, please reach out to me on &lt;a href=&#34;https://twitter.com/jonmcalder&#34;&gt;Twitter&lt;/a&gt; or via my &lt;a href=&#34;https://www.joncalder.co.za/contact/&#34;&gt;contact page&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Checkout the list of &lt;a href=&#34;http://exercism.io/languages/r/todo&#34;&gt;unimplemented exercises&lt;/a&gt; for the R track and follow the instructions there to submit a pull request&lt;/li&gt;
&lt;li&gt;Lastly, look through &lt;code&gt;exercism.io&#39;s&lt;/code&gt; &lt;a href=&#34;https://github.com/exercism/exercism.io/blob/master/CONTRIBUTING.md&#34;&gt;contributing doc&lt;/a&gt;, which outlines a number of other ways you can get involved (either with a specific language track, or across other areas of the project as well)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on my involvement so far the &lt;code&gt;exercism.io&lt;/code&gt; community seems very friendly and open, and I think its a great open source initiative, so there&amp;rsquo;s no reason why the &lt;code&gt;#rstats&lt;/code&gt; community shouldn&amp;rsquo;t be well represented there.&lt;/p&gt;

&lt;p&gt;On that note, a big thank you to exercism&amp;rsquo;s contributors, and especially to &lt;a href=&#34;http://jonboiser.com/&#34;&gt;Jonathan Boiser&lt;/a&gt; and &lt;a href=&#34;http://www.kytrinyx.com/&#34;&gt;Katrina Owen&lt;/a&gt; for being friendly, helpful and supportive of my involvement in the project thus far. You guys are excellent role models for the greater open source community.&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>satRday Cape Town</title>
  <link>https://www.joncalder.co.za/2017-03-13-satrday-cape-town/</link>
  <pubDate>Mon, 13 Mar 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-03-13-satrday-cape-town/</guid>
  <description>&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/satRday-logo.png#floatright&#34; alt=&#34;satRday Logo&#34; title=&#34;satRday Logo&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Almost a full month has passed since satRday Cape Town. Time races on (as always) bringing plenty of challenges and opportunities with each new day, but part of me wants to go back and re-live the experience, just to have some more time to take it all in again.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s an event which I hope will remain firmly ensconced in my memory for many years to come. I met many amazing individuals and made a whole lot of new friends. It was a fantastic time. As a result, I figured it would be a good idea to thank some of the people who made it possible.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/satRday-keynote.jpg&#34; alt=&#34;satRday Keynote&#34; title=&#34;satRday Keynote&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Right at the outset, I think it&amp;rsquo;s only right to give a big shoutout to &lt;a href=&#34;https://twitter.com/datawookie&#34;&gt;Andrew&lt;/a&gt;: without whom, satRday would not have come to South Africa. To give you some context, I believe he first got the process started around May 2016 with a proposal to host satRday in Cape Town. Over the following nine months as things started to come together, he worked tirelessly in order to nail down all the conference details ahead of time, and also planned and executed brilliantly during the week of the conference itself. If asked, he&amp;rsquo;ll probably say the execution was mostly down to his ability to delegate but the truth is he put in most of the hours. We all owe him a debt of gratitude.&lt;/p&gt;

&lt;p&gt;&lt;blockquote class=&#34;twitter-tweet&#34; data-lang=&#34;en&#34; width=&#34;300&#34; align=&#39;right&#39;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;R-ladies at Boulders Beach to see some penguins &lt;a href=&#34;https://twitter.com/JennyBryan&#34;&gt;@JennyBryan&lt;/a&gt; &lt;a href=&#34;https://twitter.com/SteffLocke&#34;&gt;@SteffLocke&lt;/a&gt; &lt;a href=&#34;https://t.co/fe8StAIPJh&#34;&gt;pic.twitter.com/fe8StAIPJh&lt;/a&gt;&lt;/p&gt;&amp;mdash; Julia Silge (@juliasilge) &lt;a href=&#34;https://twitter.com/juliasilge/status/833280753798615045&#34;&gt;February 19, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async src=&#34;//platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;To &lt;a href=&#34;https://twitter.com/rlnel&#34;&gt;Ryan&lt;/a&gt; and &lt;a href=&#34;https://za.linkedin.com/in/etiennekoen&#34;&gt;Etienne&lt;/a&gt;, who helped out with a myriad of things including web design, planning and chairing sessions, manning the registration table, recording talks, and sorting out catering - thank you for all your hard work.&lt;/p&gt;

&lt;p&gt;Also a special thanks to &lt;a href=&#34;https://za.linkedin.com/in/katie-lennard-136a475&#34;&gt;Katie Lennard&lt;/a&gt; who helped out as a teaching assistant for both days of workshops prior to speaking on Saturday.&lt;/p&gt;

&lt;p&gt;To our wonderful keynote speakers - &lt;a href=&#34;https://twitter.com/juliasilge&#34;&gt;Julia Silge&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/jennybryan&#34;&gt;Jenny Bryan&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/SteffLocke&#34;&gt;Steph Locke&lt;/a&gt; - who all travelled a long way in order to be with us: we really appreciate you and are so grateful that you were able to be there to play your part in making the conference such a success. We really value all the effort you put into your workshops and talks, and also your willingness to invest time in conversation with many of us in the midst of it all. I hope you enjoyed your time in South Africa!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/satRday-tutorials.jpg&#34; alt=&#34;satRday Tutorials&#34; title=&#34;satRday Tutorials&#34; /&gt;&lt;/p&gt;

&lt;p&gt;To all of the speakers and to those who led tutorials - especially those of you who travelled from elsewhere in SA or even further afield in order to be here - thank you for the time and effort spent in preparation to present at satRday Cape Town. Thank you also for being flexible in dealing with the time constraints due to the packed programme!&lt;/p&gt;

&lt;p&gt;I hope that you all got a lot out of the experience as we did. It was a treat to have such a diverse group spanning many disciplines within both industry and academia, and I think the breadth and depth of topics covered reflect a vibrant and rapidly growing R community in South Africa.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/satRday-workshop17.jpg&#34; alt=&#34;satRday Venue&#34; title=&#34;satRday Venue&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Then to the management and staff of Workshop17 for making your magnificent facility available for this conference and for looking after us while we were there - thank you!&lt;/p&gt;

&lt;p&gt;My final thanks go to all of our sponsors for Cape Town satRday, and especially to Vantage Data for sponsoring the Data Visualisation Challenge along with post-conference drinks. This extended the opportunity for networking and was a great way to wrap things up after a jam-packed day.&lt;/p&gt;

&lt;div&gt;
&lt;div style=&#34;display:inline-block;margin:1em&#34;&gt;
&lt;a href=&#34;http://www.r-consortium.org/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/r_consortium.png&#34; alt=&#34;R-Consortium&#34; width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://www.derivco.com/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/derivco.png&#34; alt=&#34;Derivco&#34; width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div style=&#34;display:inline-block;margin:1em&#34;&gt;
&lt;a href=&#34;http://www.publichealth.uct.ac.za/phfm_epidemiology-and-biostatistics&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/uct.jpg&#34; alt=&#34;UCT School of Public Health&#34; width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://ixperience.co.za/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/ixperience.png&#34; alt=&#34;iExperience&#34;  width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div style=&#34;display:inline-block;margin:1em&#34;&gt;
&lt;a href=&#34;https://www.microsoft.com/en-za/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/microsoft.jpg&#34; alt=&#34;Microsoft&#34; width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://www.vantagedata.co.za/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/vantage-data.png&#34; alt=&#34;Vantage Data&#34; width=&#34;200px&#34;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;There were over 200 people in attendance, with tickets sold out for both the workshops and the conference day itself. Thank you to all of you for being part of the event. I hope that like me you were rewarded by the experience, in the form of both new knowledge and fresh inspiration.&lt;/p&gt;

&lt;p&gt;For those who weren&amp;rsquo;t able to make it, note that the workshop resources, as well as slides and videos from the talks are available via the &lt;a href=&#34;http://capetown2017.satrdays.org/#programme&#34;&gt;conference website&lt;/a&gt;.&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>Welcome to R-bloggers!</title>
  <link>https://www.joncalder.co.za/2017-01-23-welcome-to-r-bloggers/</link>
  <pubDate>Mon, 23 Jan 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-01-23-welcome-to-r-bloggers/</guid>
  <description>&lt;p&gt;Hooray! I am now part of the &lt;a href=&#34;https://www.r-bloggers.com/&#34;&gt;R-bloggers&lt;/a&gt; community!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/r-bloggers.png#floatright&#34; alt=&#34;R-bloggers logo&#34; title=&#34;R-bloggers Logo&#34; /&gt;&lt;/p&gt;

&lt;p&gt;R-bloggers is a blog aggregator for content created by the &lt;code&gt;Rstats&lt;/code&gt; community. It was founded by &lt;a href=&#34;https://www.r-statistics.com/&#34;&gt;Tal Galili&lt;/a&gt; towards the &lt;a href=&#34;https://www.r-statistics.com/2009/12/announcing-r-bloggers-com-a-new-r-news-site-for-bloggers-by-bloggers/&#34;&gt;end of 2009&lt;/a&gt;, in order to help connect R bloggers with R users (and each other).&lt;/p&gt;

&lt;p&gt;I came across R-bloggers relatively soon after it got going and have benefitted so greatly from it over the years. It has been quite something to see how it has grown and flourished in this time. Just take a look at Tal&amp;rsquo;s annual retrospectives between 2010 and 2012 which highlight the early growth of R-bloggers and you&amp;rsquo;ll see what I mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&#34;https://www.r-statistics.com/2009/12/announcing-r-bloggers-com-a-new-r-news-site-for-bloggers-by-bloggers/&#34;&gt;2009&lt;/a&gt;: R-bloggers gets up and running, 17 contributing blogs&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;a href=&#34;https://www.r-statistics.com/2011/01/r-bloggers-in-2010-top-14-r-posts-site-statistics-and-invitation-for-sponsors/&#34;&gt;2010&lt;/a&gt;: 143 contributing blogs, 3000 posts, 600 000 visits from over 200 countries&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;a href=&#34;https://www.r-statistics.com/2012/01/top-20-r-posts-of-2011-and-some-r-bloggers-statistics/&#34;&gt;2011&lt;/a&gt;: almost 300 contributing blogs, over 1.4 million visits&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;a href=&#34;https://www.r-statistics.com/2013/01/100-most-read-r-posts-for-2012-stats-from-r-bloggers-big-data-visualization-data-manipulation-and-other-languages/&#34;&gt;2012&lt;/a&gt;: over 400 contributing blogs, 2.7 million visits by over 1.1 million people&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These days R-bloggers continues to serve a large global audience with over 600 contributing bloggers. It is the go-to place for R news and tutorials and one of the core spokes of the R community.&lt;/p&gt;

&lt;p&gt;Tal, I&amp;rsquo;m sure I speak for many in the R community when I say thank you for continuing to invest in and develop this resource which we all benefit from on a daily basis. Having appreciated content from R-bloggers for so many years I now look forward to being able to contribute some of my own and hope that I will be able to add value for others in the process.&lt;/p&gt;

&lt;p&gt;Eduardo from Data Science LA did a really nice &lt;a href=&#34;http://datascience.la/a-conversation-with-tal-galili-at-user-2014/&#34;&gt;interview with Tal&lt;/a&gt; at the &lt;a href=&#34;http://user2014.stat.ucla.edu/&#34;&gt;useR conference&lt;/a&gt; back in 2014. They discussed how he came to start R-bloggers, his thoughts on and involvement with R and the community, as well as another of his projects, &lt;a href=&#34;https://www.r-users.com/&#34;&gt;R-Users&lt;/a&gt;: &amp;ldquo;A job board for people and companies looking to hire R users&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;Listening to it again now, two years later, I was struck by how much of their discussion is still so relevant, and Tal has some great insight and advice to
share (e.g. don&amp;rsquo;t get too caught up with newer tech developments before they&amp;rsquo;re ready, unless they really solve a problem that you have).&lt;/p&gt;

&lt;p&gt;Two of the things he mentions in particular I would like to highlight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;learn to create R packages as soon as possible&lt;/li&gt;
&lt;li&gt;supplement your R and stats knowledge with some C++ (i.e. learn to use Rcpp)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are two areas which have been really pivotal for me in terms of improving my knowledge and understanding of R, and empowering myself to dig deeper and do more with it. If you&amp;rsquo;re looking for good learning resources in either of these areas, I highly recommend Hadley Wickham&amp;rsquo;s books &lt;a href=&#34;http://r-pkgs.had.co.nz/&#34;&gt;R packages&lt;/a&gt; and &lt;a href=&#34;http://adv-r.had.co.nz/&#34;&gt;Advanced R&lt;/a&gt; (which has a great &lt;a href=&#34;http://adv-r.had.co.nz/Rcpp.html&#34;&gt;chapter on Rcpp&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;When asked what his advice would be to an R user back in 2007, I had to chuckle at Tal&amp;rsquo;s remark not to invest in &lt;a href=&#34;http://nbcgib.uesc.br/lec/software/editores/tinn-r/en&#34;&gt;Tinn-R&lt;/a&gt; because it won&amp;rsquo;t be around much longer :-)&lt;/p&gt;

&lt;p&gt;But jokes aside, whether you are a new or long time R user, it&amp;rsquo;s a great interview that is worth a listen.&lt;/p&gt;

&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/S2kIM08QBtI&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;
</description>
  </item>
  
<item>
  <title>Why swirl?</title>
  <link>https://www.joncalder.co.za/2017-01-09-why-swirl/</link>
  <pubDate>Mon, 09 Jan 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-01-09-why-swirl/</guid>
  <description>

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/swirl-logo.PNG&#34; alt=&#34;swirl logo&#34; title=&#34;swirl logo&#34; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;swirl is a software package for the R programming language that turns the R console into an interactive learning environment. Users receive immediate feedback as they are guided through self-paced lessons in data science and R programming.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think I first came across &lt;a href=&#34;http://swirlstats.com&#34;&gt;swirl&lt;/a&gt; in mid-2014, while working through the early stages of the
&lt;a href=&#34;https://www.coursera.org/specializations/jhu-data-science&#34;&gt;Data Science Specialization&lt;/a&gt; on Coursera, put together by Johns Hopkins University professors &lt;a href=&#34;https://twitter.com/rdpeng&#34;&gt;Roger Peng&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/bcaffo&#34;&gt;Brian Caffo&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/jtleek&#34;&gt;Jeff Leek&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The courses in this specialization make extensive use of swirl to introduce and explore various topics in the form of interactive programming assignments in R (e.g. &lt;a href=&#34;http://swirlstats.com/scn/rprog.html&#34;&gt;R programming&lt;/a&gt;). This is probably largely due to the fact that these three professors were involved in the early development of swirl with it&amp;rsquo;s creator &lt;a href=&#34;http://nickcarchedi.com/&#34;&gt;Nick Carchedi&lt;/a&gt; who is a graduate of Johns Hopkins Biostatistics. For those who may be new to R or data science - these Coursera courses are an excellent resource which I can highly recommend.&lt;/p&gt;

&lt;p&gt;Of course there are many, many great resources for getting started (and later improving) with R programming: try the &lt;a href=&#34;https://www.rstudio.com/online-learning/&#34;&gt;online learning suggestions from RStudio&lt;/a&gt;, or take a look through some of these &lt;a href=&#34;https://www.quora.com/What-are-some-good-resources-for-learning-R-1&#34;&gt;Quora answers&lt;/a&gt; and you will find a wealth of R resources: online courses, books, tutorials and more. If that&amp;rsquo;s not enough for you - Google is your friend. There is so much out there!&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;d like to focus on swirl in this post however, since I feel it doesn&amp;rsquo;t really get as much attention as it should. There are three key ways in which I think swirl has got it right as a learning platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it directly facilitates learning by doing&lt;/li&gt;
&lt;li&gt;it runs from within R&lt;/li&gt;
&lt;li&gt;it is free and open source&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;learn-by-doing&#34;&gt;Learn by Doing&lt;/h3&gt;

&lt;p&gt;First is the &amp;ldquo;learn by doing&amp;rdquo; component, which is almost as crucial to learning to program as it is to learning to ride a bike, or to drive a car.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/code-cat.jpg#floatright&#34; alt=&#34;code cat&#34; title=&#34;code cat&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Sure, programming is mostly cognitive, but in my experience you only begin to internalize and understand concepts, syntax etc properly when you start to apply them. The primary learning you do when learning to ride a bike or drive a car happens when getting onto a bike or into a car for the first time and (usually) having someone walk you through the interface, controls etc as you experience them for yourself.&lt;/p&gt;

&lt;p&gt;The need to learn by doing might seem obvious, but if you stop and think about it for a moment, you might find that given the wealth of great R programming books, videos, courses etc its entirely plausible that you could begin your learning path there and after being pulled in different directions end up spending very little (or no) time in R. A few days ago I was chatting to one of my cousins who has been learning R on and off for a while now and when I asked him how it was going he said he thinks his learning process so far has lacked sufficient &amp;ldquo;hands on&amp;rdquo; practice with R.&lt;/p&gt;

&lt;p&gt;swirl is great because it forces you to learn by doing, whether that means copying code/syntax from an instruction, interrogating R&amp;rsquo;s help documentation in order to work out how to make use of a particular function, or experimenting with different options by trial and error.&lt;/p&gt;

&lt;h3 id=&#34;learn-r-in-r&#34;&gt;Learn R, in R&lt;/h3&gt;

&lt;p&gt;Second is the &amp;ldquo;learn R, in R&amp;rdquo; component, which is what makes swirl pretty unique. There are a few other learning platforms which embed or reproduce the R console within their own web environments to produce a similar outcome, but at the end of the day, in some or other (possibly quite small) respects none can be equivalent to the reality of working in a local R environment on your own computer, whether that be RStudio (recommended!), some other IDE of your choosing, or even just running R from the terminal.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/swirl-example.PNG&#34; alt=&#34;swirl in action&#34; title=&#34;swirl in action&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Since swirl runs within R itself, when you learn with swirl, you can work with the exact same local R environment you will later use to program in R. By way of a poor analogy, this is somewhat like the difference between taking your driving lessons in someone elses car and taking them in the car that you plan to use once you have obtained your license. If you have the option of the latter, there are certainly benefits to doing so.&lt;/p&gt;

&lt;p&gt;At the same time I do acknowledge that there can also be some downsides to this when considered from certain perspectives (e.g. the swirl approach of embedding the learning environment within R is not as flexible as the reverse and does constrain the learning environment to some extent). However as mentioned above I think what swirl has to offer is unique in this respect and it is worth highlighting that the advantages are significant.&lt;/p&gt;

&lt;p&gt;I am certainly not averse to other R learning platforms and realize that some have other advantages over swirl. For example, it is worth noting that the creator of swirl is now working at &lt;a href=&#34;https://www.datacamp.com/&#34;&gt;DataCamp&lt;/a&gt;, which is an excellent learning platform that offers a host of courses in both Python and R, some of which in fact still make use of swirl.&lt;/p&gt;

&lt;h3 id=&#34;free-and-open-source&#34;&gt;Free and Open Source&lt;/h3&gt;

&lt;p&gt;Third is the fact that swirl is completely free and open source. This means that students, instructors and other R developers can dig into both swirl itself and swirl lesson content, learn from it, and then suggest and/or contribute towards corrections and improvements over time. Being able to look behind the curtain opens up a world of learning opportunities.&lt;/p&gt;

&lt;p&gt;For example, my &lt;a href=&#34;https://github.com/swirldev/swirl_courses/pull/75&#34;&gt;first ever pull request on GitHub&lt;/a&gt;, was in the swirl courses repository. It was only a simple spelling correction for lesson content from one of the aforementioned Coursera swirl courses, but you&amp;rsquo;ve got to start somewhere. It&amp;rsquo;s open source projects like swirl that offer these opportunities for &amp;ldquo;getting started&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;In a little over two years since that first pull request, and I have been able to contribute in a number of different ways to various swirl projects and courses, learning as I go. A few months ago, I also decided to get started on two of my own swirl courses, which I&amp;rsquo;m continuing to work on iteratively as and when I can make time. I&amp;rsquo;ve still got a long way to go, but I&amp;rsquo;ve already learnt so much through the process, and will definitely discuss these further in later posts.&lt;/p&gt;

&lt;p&gt;My recommendation is that you checkout swirl if you haven&amp;rsquo;t already done so, because it is worth using. The easiest starting point is the &lt;a href=&#34;http://swirlstats.com/students.html&#34;&gt;students page&lt;/a&gt; on the swirl website, which provides all the steps you&amp;rsquo;ll need (especially if you are completely new to R).&lt;/p&gt;

&lt;p&gt;And if you&amp;rsquo;re a more advanced R user, why not consider contributing a course? The documentation for swirl is excellent, and it is very easy to get started creating a course. All the information you&amp;rsquo;ll need to do so is provided on the &lt;a href=&#34;http://swirlstats.com/instructors.html&#34;&gt;instructors page&lt;/a&gt; on the swirl website. Also note that the developers of swirl have created a swirl course network (SCN) in an effort to &amp;ldquo;list and organize all publicly available swirl courses&amp;rdquo;. If you have created a swirl course or are considering doing so, please &lt;a href=&#34;http://swirlstats.com/swirlify/sharing.html#sharing_your_course_on_the_swirl_course_network&#34;&gt;take a look at this&lt;/a&gt; to find out how to share your course.&lt;/p&gt;

&lt;p&gt;If you need help or would like to collaborate on a swirl course please &lt;a href=&#34;https://www.joncalder.co.za/contact/&#34;&gt;get in touch with me&lt;/a&gt;. I&amp;rsquo;ll be happy to assist where and when I am able to do so.&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>satRday in Cape Town</title>
  <link>https://www.joncalder.co.za/2016-12-17-satrday-in-cape-town/</link>
  <pubDate>Sat, 17 Dec 2016 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2016-12-17-satrday-in-cape-town/</guid>
  <description>&lt;p&gt;In just two months time, the &lt;a href=&#34;http://capetown2017.satrdays.org&#34;&gt;second satRday&lt;/a&gt; will be taking place right on my doorstep, in Cape Town, South Africa. I keep telling people I am looking forward to it, but to be honest that&amp;rsquo;s really quite an understatement. I am super excited!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/satRday-logo.png#floatright&#34; alt=&#34;satRday Logo&#34; title=&#34;satRday logo&#34; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;satRdays are SQLSaturday-inspired, community-led, one-day, regional and affordable conferences around the world to support collaboration, networking and innovation within the R community.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you don&amp;rsquo;t know what &lt;a href=&#34;http://satrdays.org/&#34;&gt;satRdays&lt;/a&gt; are about, here is the back story&amp;hellip;&lt;/p&gt;

&lt;p&gt;In early-mid 2015, &lt;a href=&#34;https://twitter.com/SteffLocke&#34;&gt;Steph Locke&lt;/a&gt; got conversation going around the possibility of a &lt;a href=&#34;http://itsalocke.com/sqlsaturdays-but-for-r&#34;&gt;SQLSaturday-inspired R conference&lt;/a&gt; after raising the idea at &lt;a href=&#34;https://earlconf.com/boston/&#34;&gt;EARL 2015 Boston&lt;/a&gt;. With fantastic support from the &lt;code&gt;#rstats&lt;/code&gt; community, &lt;a href=&#34;https://github.com/stephlocke/RSaturday-proposal&#34;&gt;a proposal&lt;/a&gt; was developed and later submitted to the &lt;a href=&#34;https://www.r-consortium.org&#34;&gt;R Consortium&lt;/a&gt; in January 2016.&lt;/p&gt;

&lt;p&gt;In March 2016, the R Consortium &lt;a href=&#34;https://www.r-consortium.org/announcement/2016/03/23/r-consortium-funds-technical-initiatives-community-events-and-training-to-support-r-user-community&#34;&gt;announced their support for satRdays&lt;/a&gt;, with three events to be hosted initially, and plans for additional meet-ups as the R user base grows. Multiple locations were suggested for the first three satRdays and the agreed upon strategy was to host one in Eastern Europe, one in North America, and one on another continent elsewhere in the world.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/cape-town-waterfront.jpg#floatright&#34; alt=&#34;V&amp;amp;A Waterfront - location for Cape Town satRday&#34; title=&#34;V&amp;amp;A Waterfront - location for Cape Town satRday&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Having been involved with the project early on, &lt;a href=&#34;https://about.me/daroczig&#34;&gt;Gergely Daróczi&lt;/a&gt; agreed to organise the first satRday in Budapest. More than 2000 people from the online community &lt;a href=&#34;https://app.doopoll.co/poll/ZznsEGPnmbFafim2c/live-results&#34;&gt;voted on where the next two satRday events should take place&lt;/a&gt;, and Puerto Rico and Cape Town claimed the most votes for North America and the rest of the world.&lt;/p&gt;

&lt;p&gt;The first satRday took place in Budapest on the 3rd September 2016 and was &lt;a href=&#34;https://www.r-consortium.org/blog/2016/09/07/the-start-of-satrdays&#34;&gt;a big success&lt;/a&gt;, with almost 200 people from 19 countries registering for the event. The conference delegates comprised of a good mix of R enthusiasts from both industry and academia, who were treated to high quality workshops as well as invited and contributed talks from 25 local and international speakers.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/workshop17.jpg#floatleft&#34; alt=&#34;Workshop 17 - venue for Cape Town satRday&#34; title=&#34;Workshop 17 - venue for Cape Town satRday&#34; /&gt;&lt;/p&gt;

&lt;p&gt;So that brings us to the present, with preparations for &lt;a href=&#34;http://capetown2017.satrdays.org&#34;&gt;Cape Town satRday&lt;/a&gt; already well under way. The conference will take place on the 18th February 2017, and the venue is &lt;a href=&#34;http://workshop17.co.za/&#34;&gt;Workshop 17&lt;/a&gt;, located in the heart of Cape Town&amp;rsquo;s beautiful V&amp;amp;A Waterfront.&lt;/p&gt;

&lt;p&gt;Keynote speakers &lt;a href=&#34;https://twitter.com/SteffLocke&#34;&gt;Steph Locke&lt;/a&gt;, &lt;a href=&#34;https://twitter.com/JennyBryan&#34;&gt;Jenny Bryan&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/juliasilge&#34;&gt;Julia Silge&lt;/a&gt; will be conducting workshops on the 16th &amp;amp; 17th February, covering the building and validation of logistic regression models, the intersection of R, Git &amp;amp; Github, and the development of reactive web apps with Shiny &lt;a href=&#34;http://capetown2017.satrdays.org/#workshops&#34;&gt;(you can find further workshop details here)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/cape-town-satrday-keynote-speakers.jpg#floatright&#34; alt=&#34;Keynote Speakers for Cape Town satRday&#34; title=&#34;Keynote Speakers for Cape Town satRday&#34; /&gt;&lt;/p&gt;

&lt;p&gt;A number of other speakers have already been confirmed, with sessions planned around topics such as &lt;strong&gt;R in the Sciences&lt;/strong&gt;, &lt;strong&gt;R and Big Data&lt;/strong&gt;, and &lt;strong&gt;Applications of R in Industry&lt;/strong&gt;. Presentations may take the form of a workshop (90min), standard talk (20min), lighting talk (5min) or poster, and &lt;a href=&#34;https://datawookie.typeform.com/to/AvZ3NK&#34;&gt;proposals can be submitted here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that early-bird registration closes less than a week from now, and presentation proposals will be accepted up until 20th January 2017. Below is a summary of all the key dates relating to the conference:&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Early-Bird Registration Deadline&lt;/td&gt;
&lt;td&gt;2016-12-23&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Workshop Submission Deadline&lt;/td&gt;
&lt;td&gt;2017-01-20&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Talk Submission Deadline&lt;/td&gt;
&lt;td&gt;2017-01-20&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Notification of Acceptance&lt;/td&gt;
&lt;td&gt;2017-01-25&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Registration Deadline&lt;/td&gt;
&lt;td&gt;2017-02-15&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Workshops&lt;/td&gt;
&lt;td&gt;2017-02-16 / 2017-02-17&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Conference&lt;/td&gt;
&lt;td&gt;2017-02-18&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;All this information - and more - can be found &lt;a href=&#34;http://capetown2017.satrdays.org&#34;&gt;on the website&lt;/a&gt;. I look forward to seeing many of you at the conference!&lt;/p&gt;
</description>
  </item>
  
</channel>
  </rss>