<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
  <title>Jon Calder</title>
  <link>https://www.joncalder.co.za/</link>
  <description>Recent content 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/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>The spark of statistics</title>
  <link>https://www.joncalder.co.za/2017-07-26-the-spark-of-statistics/</link>
  <pubDate>Wed, 26 Jul 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-07-26-the-spark-of-statistics/</guid>
  <description>&lt;p&gt;I&amp;rsquo;ve enjoyed maths for pretty much as long as I can remember. I&amp;rsquo;m aware that it is rare to make such a statement. Probably straight up weird to some. But that just shows how much I have to be grateful for. I am indebted to my parents, extended family and friends and a number of great teachers over the years who made sacrifices in order to give me solid learning opportunities and a supportive environment.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/iris_sepalwidth.png&#34; alt=&#34;Density Plot&#34; title=&#34;Density Plot&#34; /&gt;&lt;/p&gt;

&lt;p&gt;I mention my affinity for maths because it is pretty hard to enjoy statistics without first enjoying maths. A few weeks ago I watched a cool Ted Talk entitled &amp;ldquo;Why you should love statistics&amp;rdquo;. It got me thinking about how I came to love statistics, and for me it most definitely began with a love for maths.&lt;/p&gt;

&lt;p&gt;I tutored a lot of undergraduate statistics during my university days and most of the students who struggled had little appreciation for statistics because they were constantly caught up in the underlying mathematical mechanics. My recollection is that often their maths deficiency was not due to a lack of ability, but could instead be attributed to a foundational gap of some sort. Whether it was moving schools, a change of teacher, prolonged sickness or some other catalyst for falling behind, I was left with the impression that somewhere along the way seeds of doubt had been sown for these students, and proved a force to be reckoned with further on down the road.&lt;/p&gt;

&lt;p&gt;Alan Smith begins his Ted Talk by highlighting the low levels of numeracy in a number of &lt;a href=&#34;http://www.oecd.org/&#34;&gt;OECD countries&lt;/a&gt; but is quick to warn us against what he considers a false dichotomy: the idea that some of us can &amp;ldquo;do numbers&amp;rdquo; and some of us can&amp;rsquo;t. I&amp;rsquo;m inclined to agree with him. Sure, some aspects of numeracy and mathematical ability are probably innate, but I think that as with many other skillsets, the driving factors for success are (1) a conducive learning environment; (2) a good support structure; (3) a positive mindset; and (4) practice. The problem is, boxes (1) and (2) aren&amp;rsquo;t ticked for many young students (especially in less developed countries like mine which are plagued by poverty and related hardships), and even if they are, it&amp;rsquo;s hard to have a positive mindset (3) and to invest in practice (4) if you&amp;rsquo;re given the impression that you simply &lt;em&gt;can&amp;rsquo;t do numbers&lt;/em&gt; after getting off to a rocky start, or after hitting a few speedbumps along the way.&lt;/p&gt;

&lt;p&gt;Two recent cases came to mind which re-inforce this idea for me. The first was a powerful personal story shared as part of a message at church. Given that I&amp;rsquo;m referencing the story outside of the context in which it was originally shared, I&amp;rsquo;ve paraphrased the story below and avoided any direct reference to the speaker himself.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In Standard 5 I discovered that I was stupid. In the process of switching schools, I had moved from Standard 3 straight to Standard 5. So in addition to the language barrier I now had to overcome at the new school, I also had to catch up on Standard 4. Catching up on the maths content I had missed proved particularly difficult. I recall fractions were a problem. My teacher said to me: &amp;ldquo;As soon as you have an opportunity to choose subjects, you should choose history, because you will never be able to do maths.&amp;rdquo; At the end of that year I got 32% for maths. I remember thinking, where did I get all these marks?&lt;/p&gt;

&lt;p&gt;After getting to Standard 6 the following year, I found out that I could only change subjects in Standard 7. So that meant I had to endure another year of maths. I had a new teacher and after our first maths test, she called me in (no surprise there). She said: &amp;ldquo;I&amp;rsquo;m not gonna mark your paper because this is not who you are. Not only do you have the potential to get good grades, but you are actually the best maths student we have in this school.&amp;rdquo; What a strange thing to say&amp;hellip;   &amp;hellip;she didn&amp;rsquo;t know me at all. At the time I thought she was really, really crazy (and I think she was a little bit). In the next test, I got 62%. I hadn&amp;rsquo;t studied harder. I didn&amp;rsquo;t change anything. And then she called me in again and said: &amp;ldquo;This is not who you are. You are the best maths student in this school.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;The following test, I &lt;strong&gt;became that&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/believe_in_yourself.jpg&#34; alt=&#34;Believe In Yourself&#34; title=&#34;Believe In Yourself&#34; /&gt;&lt;/p&gt;

&lt;p&gt;The second example came in the form of a &lt;a href=&#34;http://www.news24.com/SouthAfrica/Local/Peoples-Post/maths-star-goes-international-20170612&#34;&gt;local news article&lt;/a&gt; about Tim Schlesinger, who was recently selected by the South African Mathematics Foundation to represent the country at the International Mathematics Olympiad and Pan African Mathematics Olympiad competitions overseas. The extract below is taken directly from the article:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;He also gave words of advice to other learners who would like to do better in maths, saying they should focus on enjoying maths.&lt;/p&gt;

&lt;p&gt;“From there, everything else follows easily. Many think that you are either born able to do maths or not, but you really can learn both theory and problem solving. It has been encouraging to see how much time and effort others are willing to invest in young mathematicians.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So having (hopefully) convinced you that many people who think they can&amp;rsquo;t do maths probably could if they would just stick it out long enough to overcome their doubts - let&amp;rsquo;s now get back to my story!&lt;/p&gt;

&lt;p&gt;One of my earliest recollections of enjoying maths was during grade 3, when we were first introduced to &amp;ldquo;word problems&amp;rdquo;. The irony of that statement is not lost on me, because by matric I had discovered that English would actually be my most challenging subject at school. Spelling and grammar were fine. Sure, there often seemed to be more exceptions than there were rules (especially in the case of English), but at least there were &lt;strong&gt;SOME&lt;/strong&gt; rules to follow. However when it came to the required &amp;lsquo;creative&amp;rsquo; interpretations of poetry and literature I often found myself at a loss.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://explosm.net/comics/1695/&#34;&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/drinking_problem.png&#34; alt=&#34;Cyanide and Happiness&#34; title=&#34;Cyanide and Happiness&#34; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyway, word problems introduced me to the elegance of thinking about and communicating a concept or problem mathematically, by contrast to the wordy version which often seemed (to me at least) a lot more complex. Happily, this enjoyment of maths continued for me right through both primary and secondary school, and my family still laughs at the recollection that sometimes when I got home from school in the afternoons my mom had to ask me to go and play outside with my younger sister &lt;strong&gt;before&lt;/strong&gt; diving into my maths homework.&lt;/p&gt;

&lt;p&gt;Admittedly by my 2nd year of university I thought some of the &amp;lsquo;pure math&amp;rsquo; started getting a little weird though. Eventually I grew to appreciate the more abstract notions of mathematical rigor that were introduced to us in our Real Analysis module as we looked at the construction of the real number system, limits and convergence, continuity etc but it did require a more concerted effort. It was around this time that statistics started to take precedence for me.&lt;/p&gt;

&lt;p&gt;I recall our first encounter with double integrals surfacing early on in a 2nd year statistics course, long before it was actually introduced in the concurrent and pre-requisite maths (calculus) course. We were given a quick run through and just had to roll with it until our maths syllabus caught up. Once these theory gaps had been filled in we had a much better appreciation of the applied nature of what we were learning in the statistical domain. This was a picture of things to come, since as I moved into the latter part of my degree and transitioned into post-grad, maths became subservient to my pursuit of statistics.&lt;/p&gt;

&lt;p&gt;The interesting thing though is that I barely even knew statistics existed during most of my time at school. So how did I come to be interested in statistics at university? I believe a key catalyst was something which took place back in my grade 11 biology class. While covering the human reproductive system, we began a brief foray into the field of genetics, looking at chromosomes, DNA and RNA, proteins and all that life-shaping magic. Somewhere in the midst of all that, one day my teacher entered into a discussion about red-green colour blindness, highlighting that it is much more common in men. And so we were introduced to the concept of X-linked recessive inheritance.&lt;/p&gt;

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

&lt;p&gt;I&amp;rsquo;m pretty sure he simplified things significantly in order to shield us from some of the complexities involved, so I will do the same here (with apologies to any geneticists who might be reading this). Here are the key pieces of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the family of mutations that are commonly responsible for certain types of (red-green) color blindness can only occur on the X chromosome&lt;/li&gt;
&lt;li&gt;men have one X and one Y chromosome whereas women have two X chromosomes&lt;/li&gt;
&lt;li&gt;in women, the mutation needs to be present on both X chromosomes to cause color blindness, so some women can be &amp;lsquo;carriers&amp;rsquo; while remaining unaffected&lt;/li&gt;
&lt;li&gt;since men have a single X chromosome, they will be color blind if this chromosome has the mutation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resulting inheritance pattern, known as X-linked recessive inheritance, is nicely illustrated in the below diagram.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/x_linked_recessive.png&#34; alt=&#34;X-linked recessive inheritance&#34; title=&#34;X-linked recessive inheritance&#34; /&gt;&lt;/p&gt;

&lt;p&gt;(diagram sourced from &lt;a href=&#34;https://en.wikipedia.org/wiki/X-linked_recessive_inheritance&#34;&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The diagram shows that a woman who carries an X-linked recessive disorder has a 50 percent chance (with each pregnancy) of having a son who is affected and a 50 percent chance of having a daughter who carries one copy of the mutated gene. In the interest of being more thorough/clear: there is an equal 25 percent chance of having an unaffected boy, affected boy, non-carrier girl, or carrier girl.&lt;/p&gt;

&lt;p&gt;Of course there are other scenarios and combinations to consider too; for example the sons of a man with an X-linked recessive disorder will not be affected (since boys always receive the Y chromosome of their father), and his daughters will carry one copy of the mutated gene (since girls always receive the X chromosome of their father). Similarly, one can enumerate the possibilities for offspring of an affected mother and unaffected father, affected father and carrier mother, or affected father and affected mother. Things then get a little more interesting when starting to look at the propogation of such a disorder across a few generations with different combinations of these scenarios in effect in each generation.&lt;/p&gt;

&lt;p&gt;And it was some combination of the above mentioned scenarios that my teacher threw out as a suggestion for further investigation (homework) that day which sparked my first meaningful exploration into the world of independent and conditional events, and the law of total probability. I&amp;rsquo;m pretty sure I didn&amp;rsquo;t know anything about conditional or marginal probabilities at the time, but as I sat down that evening to work through a few scenarios I recall that it came quite naturally to me to work out the underlying probabilities by stringing together the basic principles.&lt;/p&gt;

&lt;p&gt;The next day I returned to school armed with a half-page of scribbled workings and the moment the question was asked my arm went up. As it turned out, no-one else had really taken the teachers suggestion from the previous day seriously and my raised hand was not met with any competition. So I proudly described the results of my probabilistic investigation to the teacher and the rest of class. He was suitably impressed and immediately affirmed my aptitude and efforts, whilst also encouraging me to pursue statistics further after leaving school. In hindsight it&amp;rsquo;s clear to me that this was good advice.&lt;/p&gt;

&lt;p&gt;So Mr Moore, wherever you are now, thank you for all the things you taught me, and thank you for your words of affirmation which have stayed with me ever since that day in biology class.&lt;/p&gt;

&lt;p&gt;Another thing Alan Smith highlights in his talk which I was not previously aware of is the etymology of the word &lt;em&gt;statistics&lt;/em&gt;. It is &amp;lsquo;&lt;em&gt;the science of dealing with data about the condition of a state or community&lt;/em&gt;&amp;rsquo;. He describes it simply as &amp;lsquo;&lt;strong&gt;the science of us&lt;/strong&gt;&amp;rsquo;. So to me there is something quite poetic in the way my introduction to statistics came via biology and genetics - a different variant of &lt;em&gt;the science of us&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I love statistics, so obviously I&amp;rsquo;m biased, but I think the Ted Talk (shown below) is well worth a watch, whatever your perspective on the matter. I hope that it encourages you to become more fascinated by numbers.&lt;/p&gt;

&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/ogeGJS0GEF4&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&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>Here&#39;s To The Ones Who Dream</title>
  <link>https://www.joncalder.co.za/2017-02-08-heres-to-the-ones-who-dream/</link>
  <pubDate>Wed, 08 Feb 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-02-08-heres-to-the-ones-who-dream/</guid>
  <description>&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/La-La-Land.jpg&#34; alt=&#34;La La Land&#34; title=&#34;La La Land Poster&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Last night I finally went to go and see La La Land. I&amp;rsquo;m happy to say it lived up to my expectations.&lt;/p&gt;

&lt;p&gt;Over the past few years I&amp;rsquo;ve made a habit of listening to podcasts while driving to work in the morning. I find it&amp;rsquo;s a great way to redeem that time, since it allows me to connect with a wide range of different of things I&amp;rsquo;m interested in: news, tech, software, design, psychology, science, and the arts.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://songexploder.net&#34;&gt;SongExploder&lt;/a&gt; falls pretty squarely into that last (arts) category. Produced and edited by host and creator Hrishikesh Hirway, it&amp;rsquo;s &amp;ldquo;a podcast where musicians take apart their songs, and piece by piece, tell the story of how they were made.&amp;rdquo; And it really is quite masterfully done. Don&amp;rsquo;t believe me? Vulture described it as &amp;ldquo;probably the best use of the podcast format ever”, and over the last two years it&amp;rsquo;s won awards for best podcast from &lt;a href=&#34;https://qz.com/580076/the-casties-quartzs-awards-for-the-best-podcasts-of-2015/&#34;&gt;Quartz&lt;/a&gt;, &lt;a href=&#34;http://www.vulture.com/2015/12/10-best-podcasts-2015.html&#34;&gt;Vulture&lt;/a&gt; and &lt;a href=&#34;https://www.instagram.com/p/BHlAvkzBhwZ/&#34;&gt;The Academy of Podcasters&lt;/a&gt; among others. Seriously, you should check it out.&lt;/p&gt;

&lt;p&gt;So it came to be that on the Thursday of my first week back at work for 2017, I fired up &lt;a href=&#34;http://songexploder.net/la-la-land&#34;&gt;Episode 92 of Song Exploder&lt;/a&gt; during my morning commute. A tranquil piano theme can be heard in the background as Hirway narrates the introduction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;The film La La Land tells the story of Mia, an aspiring actress played by Emma Stone, and Sebastian, a jazz pianist played by Ryan Gosling, both of them struggling artists in Los Angeles. The musical was written and directed by Damien Chazelle in collaboration with composer Justin Hurwitz. It’s the third film they’ve made together, and the follow-up to the Oscar-winning film Whiplash. In this episode, Justin Hurwitz breaks down a song from the film sung by Emma Stone; it’s called Audition (The Fools Who Dream).&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Less than 2 minutes in and I was already hooked. I absolutely loved Whiplash! It&amp;rsquo;s one of very few film dvds I actually own, so that probably says quite a lot. I like to think my appreciation for movies is pretty broad (probably like many people) and I love to listen to different soundtracks, but I suppose as a musician myself there is just something particularly magical to me about movies that make music their substance, as opposed to a flavourant. The conventional production order of picture and then music often has to be reversed (at least in parts), which makes for something unique. Anyway, Whiplash made a big impression. So a new film following in it&amp;rsquo;s wake was sure to be something I&amp;rsquo;d be interested in. And the fact that it also involved a jazz pianist was a serious bonus for someone like me.&lt;/p&gt;

&lt;iframe frameborder=&#34;0&#34; height=&#34;200&#34; scrolling=&#34;no&#34; src=&#34;https://play.prx.org/e?uf=https:%2F%2Ff.prxu.org%2Fsong-exploder%2Ffeed-rss.xml&amp;ge=846cfbac70ae516ebc094dc2c38d055e&#34; width=&#34;100%&#34;&gt;&lt;/iframe&gt;

&lt;p&gt;Listening to Justin Hurwitz talk about the movie and the work that went into this song in particular gave me a good sense of the central theme of the film. It&amp;rsquo;s all about the struggle of chasing your dream(s). For Chazelle and Hurwitz, getting this movie made was a dream they had to chase. At times they had to put it aside, but it really was a passion project, and I think that shows in the final product. Justin speaks of producing &amp;ldquo;a little over 1900 piano demos for this movie&amp;rdquo;. That sounds like a lot of hard work and dedication to me. And Chazelle has &lt;a href=&#34;http://deadline.com/2016/12/emma-stone-la-la-land-damien-chazelle-justin-hurwitz-oscars-interview-1201866006/&#34;&gt;spoken in interviews&lt;/a&gt; of how there &amp;ldquo;wasn’t a lot of excitement in the room when we initially pitched La La Land around town&amp;rdquo;. &lt;a href=&#34;http://www.lionsgate.com/&#34;&gt;LionsGate&lt;/a&gt; were the only ones (eventually) brave enough to take it on.&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s plenty of praise and plenty of criticism floating around online regarding the movie and it&amp;rsquo;s ending in particular, but in the interest of avoiding any direct spoilers I&amp;rsquo;m not going to dig into those details. I get that it&amp;rsquo;s probably not everyones cup of tea but I really thought it was a great movie and thoroughly enjoyed it. The contrast of traditional vs modern ideas and the push towards compromise and trade-offs is thoughtfully interwoven into many of the movie&amp;rsquo;s themes: the development of romance vs relationship, career growth vs dreams &amp;amp; ambitions, music then and now, and especially into the style of the movie-making itself. When you take a few steps back I think it&amp;rsquo;s all really quite brilliant.&lt;/p&gt;

&lt;p&gt;The movie left me with much to think about and reflect on (and that alone is usually a sign of a good movie), but overall it resonated with and inspired me. A few years ago I remember chatting with my brother after he had done the Myers Briggs personality test, and having got a fair bit out of it in terms of understanding how he was wired to see things and work with different people he encouraged me to do it too. It turns out we balance each other out quite well in some respects, one example being that by comparison to him I&amp;rsquo;m quite the realist. But movies like La La Land remind me of the dreamer that lives inside of me. At the end of the day we all have dreams and ambitions. Though we may need to compromise at times, holding onto and pursuing our dreams is what will drive us to do something great. As composer Justin Hurwitz says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;If I stop feeling like a dreamer then I don&amp;rsquo;t think my music is going to be very good&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
  </item>
  
<item>
  <title>Halite</title>
  <link>https://www.joncalder.co.za/2017-02-02-halite/</link>
  <pubDate>Thu, 02 Feb 2017 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2017-02-02-halite/</guid>
  <description>&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/halite_logo.png&#34; alt=&#34;Halite logo&#34; title=&#34;Halite Logo&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://halite.io&#34;&gt;Halite&lt;/a&gt; is an artificial intelligence programming challenge. Players control a bot using the programming language of their choice. Bots fight for control of a 2D grid and the bot with the most territory at the end wins.&lt;/p&gt;

&lt;p&gt;The company behind Halite is &lt;a href=&#34;https://www.twosigma.com/&#34;&gt;Two Sigma&lt;/a&gt;, a New York City-based hedge fund that uses a variety of technological methods, including artificial intelligence, machine learning, and distributed computing, for its trading strategies. According to the company&amp;rsquo;s website:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Each year we like to challenge ourselves with a hard, but fun, engineering problem. It always involves programming artificial intelligence systems to battle in a head-to-head competition. In previous years we’ve built AIs to play computer games, card games, and shuffleboard against our employees and each other. 2016’s epic battle saw humans and AIs squaring off across an air hockey table.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isn&amp;rsquo;t that cool? Check out the video below for a recap of the &amp;ldquo;Human vs Machine&amp;rdquo; event from last year.&lt;/p&gt;

&lt;p&gt;&lt;center&gt;&lt;iframe width=&#34;560&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/oxAPXN5UKa8&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;/p&gt;

&lt;p&gt;Anyway, back to Halite. The game was originally conceived and developed by Benjamin Spector and Michael Truell, during a summmer internship at Two Sigma in 2016. They then assisted with further development of the game leading up to the companies annual programming competition. After a very successful 3-week tournament in August, comprising about thirty-five players, the company decided to launch the competition publically for a limited time.&lt;/p&gt;

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

&lt;p&gt;The public version of the competition was launched in November 2016, and is being run with the help of &lt;a href=&#34;https://tech.cornell.edu/&#34;&gt;Cornell Tech&lt;/a&gt;. It was initially scheduled to finish today (2nd February), but has been extended to the 12th February. There are currently just over 1500 players on the leaderboard, with plenty of competition for the top few spots and new versions of these bots being submitted on a daily basis.&lt;/p&gt;

&lt;p&gt;I stumbled across the competition sometime in mid-December, and was immediately hooked after looking into it and submitting my first bot. The friends and colleagues I have shared it with seem to have had the same experience, so kudos to the team at Two Sigma/Cornell Tech for making it so easy to get up and running.&lt;/p&gt;

&lt;p&gt;Halite is suitable for a wide range of programming enthusiasts, regardless of background or level of experience. The simplest Halite bot requires just 10 lines of code, but obviously you can expect your bot to evolve into something much more complex as you iterate on your ideas.&lt;/p&gt;

&lt;p&gt;If you think you might be interested, simply head over to the &lt;a href=&#34;https://halite.io/basics_quickstart.php&#34;&gt;Getting Started&lt;/a&gt; page and follow the instructions. The basics of the game are very simple to grasp, but as they say, the devil is in the details, and there is surprising scope for depth of strategy and innovation due to the mechanics involved in expansion and combat.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/halite_game_rules.png&#34; alt=&#34;Halite game rules&#34; title=&#34;Halite game rules&#34; /&gt;&lt;/p&gt;

&lt;p&gt;For this reason, after you have worked your way through the rest of the &amp;ldquo;Basics&amp;rdquo; section on the website (&lt;a href=&#34;https://halite.io/basics_intro_halite.php&#34;&gt;Introducing Halite&lt;/a&gt; and &lt;a href=&#34;https://halite.io/basics_improve_random.php&#34;&gt;Improving the Random Bot&lt;/a&gt;), I&amp;rsquo;d strongly advise you to read through the &lt;a href=&#34;https://halite.io/rules_game.php&#34;&gt;Game Rules&lt;/a&gt; page very carefully and make sure you understand what&amp;rsquo;s communicated on it. From there, the best way to fast-track your learnings and start getting competitive on the leaderboard is to read through &lt;a href=&#34;https://nmalaguti.github.io/&#34;&gt;Nick Malaguti&amp;rsquo;s&lt;/a&gt; excellent forum post - &lt;a href=&#34;http://forums.halite.io/t/so-youve-improved-the-random-bot-now-what/482&#34;&gt;So you’ve Improved the Random Bot. Now what?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Getting through all of that should give you a good idea of most of the important things to consider. From there it&amp;rsquo;s up to you - iterate from that point and/or experiment with different ideas from scratch. Browse the forums and you&amp;rsquo;ll find some great discussions and further ideas to explore. As you begin to do this, you&amp;rsquo;ll want to compare the strategies you come up with by testing different versions of your bots against each other locally. To do this, I&amp;rsquo;d recommend using this &lt;a href=&#34;https://github.com/smiley1983/halite-match-manager&#34;&gt;Halite Match Manager&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Good luck! May the best bot win!&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>
  
<item>
  <title>Introducing hugo!</title>
  <link>https://www.joncalder.co.za/2016-12-12-introducing-hugo/</link>
  <pubDate>Mon, 12 Dec 2016 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2016-12-12-introducing-hugo/</guid>
  <description>

&lt;p&gt;Roughly two months ago, I embarked on a short mission: to setup an instance of &lt;a href=&#34;https://hubot.github.com/&#34;&gt;hubot&lt;/a&gt; for integration with Slack. Despite being armed with only a very limited working knowledge of Javascript (hubot runs on &lt;code&gt;node.js&lt;/code&gt; and scripts are written in &lt;code&gt;CoffeeScript&lt;/code&gt;), the tutorials seemed pretty thorough and made the setup process look do-able, so I decided to have a crack at it.&lt;/p&gt;

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

&lt;p&gt;I&amp;rsquo;ll begin with my inspiration for doing this, and then provide an overview of the setup process (which I suggest you skip over if you&amp;rsquo;re not interested in the details), followed by some examples of the few things I implemented with my instance of hubot at the outset. In case you haven&amp;rsquo;t yet deduced it from the title of this post, his name is Hugo.&lt;/p&gt;

&lt;h3 id=&#34;motivation&#34;&gt;Motivation&lt;/h3&gt;

&lt;p&gt;As I mentioned in my &lt;a href=&#34;https://www.joncalder.co.za/2016-12-08-breaking-the-silence&#34;&gt;previous post&lt;/a&gt;, Lorenz and I have been collaborating on some &lt;code&gt;#rstats&lt;/code&gt; projects over the past few months and very early on we started making use of &lt;a href=&#34;https://slack.com/&#34;&gt;Slack&lt;/a&gt;, also using it&amp;rsquo;s Github &amp;amp; Trello integrations which both involve bots.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sidenote: If you are involved in any form of regular collaboration and haven&amp;rsquo;t already had a look at Slack I highly recommend you do. We&amp;rsquo;ve found it to be hugely valuable for facilitating communication, and also a lot of fun to use, especially due to the broad possible range of integrations with other tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bots are a hot topic at the moment, and the Slack team seem to be heavily invested in their support for a wide range of different bot integrations. Based on their list - which is ranked according to popularity by default - Hubot is the most popular. It was originally developed at Github to automate their company chat room and was later rewritten and made open source.&lt;/p&gt;

&lt;p&gt;My decision to explore Hubot further was motivated by a combination of curiosity, a desire to learn, and the hope of adding further to the enjoyment I was already getting from using Slack. Hubot was immediately appealing to me since it is completely scriptable, and it&amp;rsquo;s popularity and solid documentation provided further affirmation that it was worth giving a try.&lt;/p&gt;

&lt;h3 id=&#34;setup-process&#34;&gt;Setup process&lt;/h3&gt;

&lt;p&gt;As I alluded to above, the team at Github have provided a detailed set of instructions on the &lt;a href=&#34;https://hubot.github.com/docs/&#34;&gt;docs page for hubot&lt;/a&gt;, so that&amp;rsquo;s where you want to begin if you&amp;rsquo;re looking to give this a try yourself. Here are the essential steps:&lt;/p&gt;

&lt;h4 id=&#34;install-node-js-and-npm-if-you-don-t-already-have-these&#34;&gt;Install &lt;code&gt;node.js&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; (if you don&amp;rsquo;t already have these)&lt;/h4&gt;

&lt;p&gt;&lt;a href=&#34;https://docs.npmjs.com/getting-started/installing-node&#34;&gt;Installation instructions for OS X/Windows/Linux&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&#34;install-the-hubot-generator-using-npm&#34;&gt;Install the hubot generator using &lt;code&gt;npm&lt;/code&gt;&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;npm install -g yo generator-hubot&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&#34;create-a-new-instance-of-hubot&#34;&gt;Create a new instance of hubot&lt;/h4&gt;

&lt;p&gt;From a new directory e.g. myhubot, run:&lt;br /&gt;
&lt;code&gt;yo hubot --adapter=slack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This script will prompt you to describe the bot you are going to build, and create a file that NPM can use to help manage your project.&lt;/p&gt;

&lt;h4 id=&#34;setup-a-custom-bot-on-your-slack-team&#34;&gt;Setup a Custom Bot on your Slack team&lt;/h4&gt;

&lt;p&gt;Navigate to &lt;a href=&#34;https://my.slack.com/apps/A0F7YS25R-bots&#34;&gt;the Custom Bot creation page&lt;/a&gt; and click on Add Configuration. Then follow the prompts in order to register your bot and create a token. This token can then be used to allow your instance of hubot to log into your Slack team as a bot.&lt;/p&gt;

&lt;h4 id=&#34;run-hubot&#34;&gt;Run hubot&lt;/h4&gt;

&lt;p&gt;You can then run your instance of hubot locally using the run script below (note that you&amp;rsquo;ll need to copy-and-paste your token in from the previous step):&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE ./bin/hubot --adapter slack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By default, hubot should then join your &lt;code&gt;#general&lt;/code&gt; channel within Slack, where you can test it out e.g. with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;bot_name&amp;gt; pug me&lt;/code&gt;&lt;/p&gt;

&lt;h4 id=&#34;deploy-your-bot&#34;&gt;Deploy your bot&lt;/h4&gt;

&lt;p&gt;Once you’ve verified that hubot is working locally, it is a good idea to deploy your bot somewhere e.g. &lt;a href=&#34;https://www.heroku.com/&#34;&gt;Heroku&lt;/a&gt; (otherwise you&amp;rsquo;ll need to have hubot running permanently on your local machine which probably isn&amp;rsquo;t practical).&lt;/p&gt;

&lt;p&gt;Again, the Github docs are great and provide setup instructions for deploying hubot on Heroku &lt;a href=&#34;https://hubot.github.com/docs/deploying/heroku/&#34;&gt;here&lt;/a&gt;. They also have instructions for deploying on Azure, along with more general instructions for deploying on Unix or Windows (e.g. via another cloud computing service such as &lt;a href=&#34;https://www.digitalocean.com/&#34;&gt;Digital Ocean&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;If you go with Heroku and are making use of their free usage tier, note that free dynos sleep after 30 minutes of inactivity. Since interaction is done through chat, hubot has to be online and in the room to respond to messages. To get around this, you can use the &lt;a href=&#34;https://github.com/hubot-scripts/hubot-heroku-keepalive&#34;&gt;hubot-heroku-keepalive script&lt;/a&gt;, which can be configured to keep your free dyno alive (given the limitations on the free plan, more than 18 hours/day will require an upgrade).&lt;/p&gt;

&lt;h4 id=&#34;add-your-own-custom-scripts&#34;&gt;Add your own custom scripts&lt;/h4&gt;

&lt;p&gt;So hopefully by this stage you have got your instance of hubot configured and deployed, so all that&amp;rsquo;s left to do is to make the bot your own! For a start, have a look through the scripting overview provided &lt;a href=&#34;https://hubot.github.com/docs/scripting/&#34;&gt;here&lt;/a&gt;, and then get going adding your own custom scripts to your bot to give it new functionality, personality etc.&lt;/p&gt;

&lt;h3 id=&#34;hugo-in-action&#34;&gt;Hugo in action&lt;/h3&gt;

&lt;p&gt;So below are some examples of Hugo in action based on a few simple scripts I added after going through the above setup process.&lt;/p&gt;

&lt;p&gt;Hugo taunts us whenever we mention &lt;a href=&#34;http://hadley.nz/&#34;&gt;Hadley Wickham&lt;/a&gt; (which is fairly often given that we&amp;rsquo;re mostly working on #Rstats related stuff - such is the man&amp;rsquo;s influence on the R community)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_taunt.PNG&#34; alt=&#34;Hugo taunt&#34; title=&#34;Example taunt from Hugo in response to a mention of Hadley&#34; /&gt;&lt;/p&gt;

&lt;p&gt;He makes use of lolcats for many of his responses (because I really like lolcats)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_lolcats.PNG&#34; alt=&#34;Hugo lolcats&#34; title=&#34;Hugo responds/interjects with lolcats sometimes&#34; /&gt;&lt;/p&gt;

&lt;p&gt;He celebrates when we get successful build notifications from Travis&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_build_passed.PNG&#34; alt=&#34;Build Passed - lolcat&#34; title=&#34;An example of Hugo responding to a successful build notification from Travis within the Slack app&#34; /&gt;&lt;/p&gt;

&lt;p&gt;And occasionally the celebrations don&amp;rsquo;t involve lolcats&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_build_passed.gif&#34; alt=&#34;Build Passed - batman&#34; title=&#34;Another example of Hugo responding to a successful build notification from Travis within the Slack app&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Strangely enough I couldn&amp;rsquo;t spot any failure notifications within our Slack channel but when there is one, Hugo will chime in with an appropriately themed image - which again usually has a high chance of being a lolcat like one of those shown below.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_build_failed_1.jpg#floatright&#34; alt=&#34;Build Failed - Kitten&#34; title=&#34;Build failed - Kitten&#34; /&gt;
&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_build_failed_2.jpg#floatleft&#34; alt=&#34;Build Failed - Shocked cat&#34; title=&#34;Build failed - Shocked cat&#34; /&gt;
&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/hugo_build_failed_3.jpg#floatright&#34; alt=&#34;Build Failed - Grumpy cat&#34; title=&#34;Build failed - Grumpy cat&#34; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;further-thoughts&#34;&gt;Further Thoughts&lt;/h3&gt;

&lt;p&gt;All of the above examples were straightforward to script as they just rely on rudimentary regular expressions, but I was somewhat surprised at the entertainment value we got out of these simple eavesdrop and respond behaviours from a chat bot. Hopefully I&amp;rsquo;ll be able to revisit this over time and explore some more advanced interactions. There are also loads of hubot scripts all over Github which I am yet to explore (e.g. &lt;a href=&#34;https://github.com/hubot-scripts&#34;&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;If you have any ideas or suggestions for Hugo please feel free to comment below or take a look at &lt;a href=&#34;https://github.com/jonmcalder/hugobot&#34;&gt;the repo&lt;/a&gt; and submit a pull request - given the limited amount of time I&amp;rsquo;ve invested so far and the fact that I&amp;rsquo;m just winging it I&amp;rsquo;d love to learn from someone who actually knows what they&amp;rsquo;re doing!&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>Breaking the Silence</title>
  <link>https://www.joncalder.co.za/2016-12-08-breaking-the-silence/</link>
  <pubDate>Thu, 08 Dec 2016 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/2016-12-08-breaking-the-silence/</guid>
  <description>&lt;p&gt;In April of 2016, I made a new friend. His name is &lt;a href=&#34;https://lorenzwalthert.github.io/&#34;&gt;Lorenz&lt;/a&gt; and he is from Switzerland. We met one evening when I arrived to pick him up for a small church group meeting, and he ambled up to the driver side door only to be reminded - by my presence in the drivers seat - that South Africa is not part of the two thirds of the world&amp;rsquo;s population that drive on the right hand side of the road. Anyway, I believe it was while chatting on our way home later that evening that he first mentioned R and that immediately took our budding friendship to the next level :-)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/Lorenz.jpg#floatright&#34; alt=&#34;Lorenz Walthert - the legend himself!&#34; title=&#34;Lorenz Walthert - the legend himself!&#34; /&gt;&lt;/p&gt;

&lt;p&gt;He had made his way over here to South Africa to undergo a 3 month internship, partnering with the &lt;a href=&#34;http://sasdialliance.org.za/about/corc/&#34;&gt;Community Organisation Resource Centre (CORC)&lt;/a&gt; and &lt;a href=&#34;http://knowyourcity.info/who-is-sdi/about-us/&#34;&gt;Shack / Slum Dwellers International (SDI)&lt;/a&gt; to collect and analyse data on informal settlements in the Cape Flats. During the course of his stay in Cape Town, we squeezed in occassional chats about &lt;code&gt;#rstats&lt;/code&gt; in addition to the odd email back and forth. We also ventured out to the local &lt;a href=&#34;https://caperuser.wordpress.com/&#34;&gt;R User Group&lt;/a&gt; meetup on one occassion to hear from the legendary &lt;a href=&#34;http://dirk.eddelbuettel.com/&#34;&gt;Dirk Eddelbuettel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mutually encouraged by our passion for R and statistics, our friendship blossomed quickly and we exchanged thoughts on various topics, but never really progressed beyond just talking about things, and the time soon came when Lorenz was due to move on to Kenya to continue with another internship there. So we said our goodbyes with the hope of being able to reconnect (somewhere) one day, and that was that.&lt;/p&gt;

&lt;p&gt;And then one day towards the end of August, completely out of the blue, Lorenz shared this meme with me via e-mail:&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/Austin_Powers.jpg&#34; alt=&#34;Austin Powers Meme&#34; title=&#34;Austin Powers Meme - committing directly to master...&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Ironically, at that point in time my 3 year old GitHub account was effectively lying dormant, with a history of 1, 9, and 4 contributions in 2013, 2014 and 2015 respectively, and a majestic 0 contributions for 2016. Anyway, we quickly struck up a conversation over email to catch up, and before long, he directed my attention towards a Github repo he had created, which amongst other things outlined some early ideas for an R package. He invited me to collaborate, and somehow just 3 days later I found myself active on Github.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/2016_Github_Contributions.PNG&#34; alt=&#34;My 2016 Github contributions&#34; title=&#34;My 2016 Github Contributions&#34; /&gt;&lt;/p&gt;

&lt;p&gt;Over the 3 month period since then, I have notched up 275 Github contributions, ranging from early progress on collaborative projects with Lorenz, to a few personal projects, branching out to a number of issues and pull requests on R packages and books from other authors, and ultimately to this blog itself. It has been really rewarding to start getting a little more active in the R community and of course to learn and grow in doing so. I was first introduced to R at university in 2005 - so in hindsight it really shouldn&amp;rsquo;t have taken me so long to get to this stage. Clearly Lorenz was the catalyst I needed to get me going, so I am really grateful to him for that.&lt;/p&gt;

&lt;p&gt;So when did Lorenz start using R? Almost 2 years ago now, he tells me. Take a bow son!&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>About Me</title>
  <link>https://www.joncalder.co.za/aboutme/</link>
  <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/aboutme/</guid>
  <description>

&lt;p&gt;Hi, I&amp;rsquo;m Jon.&lt;/p&gt;

&lt;p&gt;I’m a data scientist, R enthusiast, hobbyist musician, hopeful runner and
lifelong learner. I work as an automation engineer at
&lt;a href=&#34;http://libryo.com/&#34;&gt;Libryo&lt;/a&gt;, where I am engaged in the use of computation to
assist with content ingestion, analysis, and anything else it might be able to
help us with. I live in the beautiful city of Cape Town and I am proudly South
African.&lt;/p&gt;

&lt;p&gt;Please feel free to connect with me! Either send me a direct message using the
form available on the &lt;a href=&#34;https://www.joncalder.co.za/contact/&#34;&gt;Contact&lt;/a&gt; page, or
have a look at the footer for my social media, Github and other links.&lt;/p&gt;

&lt;p&gt;For a more lengthy bio, keep on reading below!&lt;/p&gt;

&lt;h2 id=&#34;bio&#34;&gt;Bio&lt;/h2&gt;

&lt;p&gt;I grew up in the heart of Kwa-Zulu Natal, South Africa, in a small
city called Pietermaritzburg - aka &amp;lsquo;the sleepy hollow&amp;rsquo;. Located about 90km away
from the heart of Durban, PMB is probably best known for being the (joint) home
of the world&amp;rsquo;s largest and oldest ultramarathon - the Comrades Marathon - which
is run between these two cities.&lt;/p&gt;


&lt;link rel=&#34;stylesheet&#34; href=&#34;https://www.joncalder.co.za/css/hugo-easy-gallery.css&#34; /&gt;
&lt;div class=&#34;box&#34; &gt;
  &lt;figure  itemprop=&#34;associatedMedia&#34; itemscope itemtype=&#34;http://schema.org/ImageObject&#34;&gt;
    &lt;div class=&#34;img&#34;&gt;
      &lt;img itemprop=&#34;thumbnail&#34; src=&#34;https://www.joncalder.co.za/img/small-imgs/Jon_and_Rob.jpg&#34; alt=&#34;My dad and I after Cape Town 12 (2016)&#34;/&gt;
    &lt;/div&gt;
      &lt;figcaption&gt;
          &lt;p&gt;My dad and I after Cape Town 12 (2016)&lt;/p&gt;
      &lt;/figcaption&gt;
    &lt;a href=&#34;https://www.joncalder.co.za/img/small-imgs/Jon_and_Rob.jpg&#34; itemprop=&#34;contentUrl&#34;&gt;&lt;/a&gt;
  &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Running is probably the simplest sport there is, but certainly not the easiest,
and a race of this distance presents a substantial challenge - both physically
and mentally. I grew up watching the race on tv, out alongside the road and
sometimes even looking over the wall from the garden (when the race went past
our house). To this day, I remain in awe of the thousands of people who complete
this journey each year. One of those people is my father, who has 13 Comrades
medals to his name. I remember him once saying of the race, &amp;ldquo;you will learn
things about yourself you wouldn&amp;rsquo;t discover another way&amp;rdquo;. I think I&amp;rsquo;d like to
complete the Comrades Marathon one day.&lt;/p&gt;

&lt;p&gt;But don&amp;rsquo;t let that give you the wrong impression - most of the stuff that I&amp;rsquo;m
drawn to generally falls much more towards the mental end of the physically vs
mentally demanding spectrum&amp;hellip;&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve always been something of an academic. I thrived in the structured learning
environment that school, and later university provided me. Learning is something
that I really enjoy and I hope to be someone who never stops learning, both
intellectually and otherwise.&lt;/p&gt;

&lt;p&gt;I left PMB in 2005 to study at the University of Cape Town - tackling three
years of actuarial science before switching streams to graduate with a BSc in
Mathematical Statistics. During my honours the following year I discovered
the world of Operations Research and Decision Science in particular which really
piqued my interest. So after completing my BSc Honours in Statistics, I
ended up undertaking an MSc in Operations Research, sparked by stakeholders from
the Stormers rugby franchise in the Western Cape.&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/Pool_in_Bruges.jpg#floatleft&#34; alt=&#34;Playing pool in Bruge&#34; title=&#34;Playing pool in Bruges&#34; /&gt;&lt;/p&gt;

&lt;p&gt;This resulted in a research project which combined aspects of sports science,
decision theory, and a whole lot of modelling and simulation in
&lt;a href=&#34;https://www.r-project.org/about.html&#34;&gt;R&lt;/a&gt;. Although I was first introduced to R
at the outset of my undergraduate years at UCT, it was here where I began to
develop my enthusiasm for R as a programming language.&lt;/p&gt;

&lt;p&gt;During the latter part of my MSc, in 2011, I started working in the software
industry as a data analyst for RightShift - a tech startup developing online
games. The company experienced rapid growth in it&amp;rsquo;s player base, which gave me
good exposure to some of the challenges of managing and manipulating large
amounts of data. Our core tooling included MySQL, SQL Server, and much of the
Microsoft Business Intelligence stack - SSAS, SSIS and SSRS - along with a good
deal of Excel. Over and above that I also did a few projects which leveraged R
to embed dynamic reports and visualizations on the company wiki, and for some
&lt;a href=&#34;http://shiny.rstudio.com/&#34;&gt;Shiny apps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I completed my MSc in 2013, and produced two publications
&lt;a href=&#34;https://www.joncalder.co.za/cv/&#34;&gt;(see here)&lt;/a&gt; shortly thereafter with the help
of my supervisor
&lt;a href=&#34;http://www.stats.uct.ac.za/stats/people/academic/durbach&#34;&gt;Dr Ian Durbach&lt;/a&gt;.
RightShift was acquired by &lt;a href=&#34;https://derivco.com/&#34;&gt;Derivco&lt;/a&gt; in &lt;sup&gt;2015&lt;/sup&gt;&amp;frasl;&lt;sub&gt;2016&lt;/sub&gt;, which
saw me transition into more of a product design role, but with a particular
focus on modeling all math related aspects of game design. Then in 2017, I
joined one of the data science teams at Derivco, which allowed me to be more
involved facilitating product analysis on an ongoing basis.&lt;/p&gt;

&lt;p&gt;At the beginning of 2018 I joined &lt;a href=&#34;http://libryo.com/&#34;&gt;Libryo&lt;/a&gt; - a legal-tech
start-up founded in London by three South African entrepeneurs. Libryo is an
organisation on a mission to make it easier for companies to know the law, and
keep it. We&amp;rsquo;re on an exciting journey, and my part in it is only just beginning!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://www.joncalder.co.za/img/small-imgs/RCB.jpg&#34; alt=&#34;The Ryan Calder Band&#34; title=&#34;The Ryan Calder Band&#34; /&gt;&lt;/p&gt;

&lt;p&gt;In my spare time, I enjoy running, a myriad of different forms of moving images
(sport, e-sport, movies, tv series etc), listening to music, and - when we can
find time - making music with my brother and other friends (for more info
see &lt;a href=&#34;http://www.ryancalder.co.za&#34;&gt;ryancalder.co.za&lt;/a&gt;). I am also a keen sound
engineer with a casual interest in various aspects of both studio and live
production. Along with all of this I am also trying to be more involved in
&lt;a href=&#34;http://github.com/jonmcalder&#34;&gt;R and other open-source development&lt;/a&gt;, and hope to
continue growing my technical skillset in pursuit of becoming a more rounded
data scientist.&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>Contact Me</title>
  <link>https://www.joncalder.co.za/contact/</link>
  <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/contact/</guid>
  <description>&lt;p&gt;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://www.joncalder.co.za/css/contact.css&#34; /&gt;
&lt;form action=&#34;https://formspree.io/jonmcalder@gmail.com&#34; method=&#34;POST&#34; class=&#34;form&#34; id=&#34;contact-form&#34;&gt;
  &lt;p&gt;If you&amp;rsquo;d like to get in touch, please send me a message using the form
  below. Alternatively, you can make use of the links included in the footer to
  interact with me via social media.&lt;/p&gt;
  &lt;div class=&#34;row&#34;&gt;
    &lt;div class=&#34;col-xs-6&#34;&gt;
      &lt;input type=&#34;text&#34; name=&#34;name&#34; class=&#34;form-control input-lg&#34; placeholder=&#34;Name&#34; title=&#34;Name&#34;&gt;
    &lt;/div&gt;
    &lt;div class=&#34;col-xs-6&#34;&gt;
      &lt;input type=&#34;email&#34; name=&#34;_replyto&#34; class=&#34;form-control input-lg&#34; placeholder=&#34;Email&#34; title=&#34;Email&#34;&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;input type=&#34;hidden&#34; name=&#34;_subject&#34; value=&#34;New message from &#34;&gt;
  &lt;textarea type=&#34;text&#34; name=&#34;content&#34; class=&#34;form-control input-lg&#34; placeholder=&#34;Message&#34; title=&#34;Message&#34; required=&#34;required&#34; rows=&#34;3&#34;&gt;&lt;/textarea&gt;
  &lt;input type=&#34;text&#34; name=&#34;_gotcha&#34; style=&#34;display:none&#34;&gt;
  &lt;input type=&#34;hidden&#34; name=&#34;_next&#34; value=&#34;//jonmcalder.github.io/thanks&#34; /&gt;
  &lt;button type=&#34;submit&#34; class=&#34;btn btn-lg btn-primary&#34;&gt;Send&lt;/button&gt;
&lt;/form&gt;&lt;/p&gt;
</description>
  </item>
  
<item>
  <title>Curriculum Vitae</title>
  <link>https://www.joncalder.co.za/cv/</link>
  <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/cv/</guid>
  <description>

&lt;h1 id=&#34;jon-calder&#34;&gt;Jon Calder&lt;/h1&gt;

&lt;hr /&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;No man should escape our universities without knowing how little he knows.&amp;rdquo; &amp;ndash; J. Robert Oppenheimer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;experience&#34;&gt;Experience&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;February 2018 - Present&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Automation Engineer&lt;/strong&gt;; &lt;a href=&#34;https://libryo.com/&#34;&gt;Libryo&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Research and development on how to best automate &amp;amp; augment processes on
the Libryo Platform&lt;/li&gt;
&lt;li&gt;Database management, maintenance and support&lt;/li&gt;
&lt;li&gt;Data analysis, dashboarding and reporting&lt;/li&gt;
&lt;li&gt;Software development and maintenance of development, staging
and production environments&lt;/li&gt;
&lt;li&gt;Strategic support and consultation around technology decisions&lt;/li&gt;
&lt;li&gt;Assist with the management and implementation of strategic objectives&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;September 2017 - Present&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Guest Lecturer&lt;/strong&gt;; &lt;a href=&#34;http://www.uct.ac.za/&#34;&gt;University of Cape Town&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/iandurbach/datasci-fi&#34;&gt;Data Science for Industry&lt;/a&gt; is a 24-lecture, 12 credit module in the MSc in Data Science program at the University of Cape Town&lt;/li&gt;
&lt;li&gt;Teaching material for the development of (1) R packages and (2) Shiny apps which comprise the communication section of the course&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;September 2016 - January 2018&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Data Scientist&lt;/strong&gt;; &lt;a href=&#34;https://derivco.co.za/locations/south-africa/cape-town/&#34;&gt;Derivco - Cape Town&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;work with product and design teams to inform and assist with product and feature design&lt;/li&gt;
&lt;li&gt;assist with both functional and technical product documentation&lt;/li&gt;
&lt;li&gt;conduct ongoing industry and competitor research to inform the design of product features&lt;/li&gt;
&lt;li&gt;determine product data requirements and support delivery of data, monitoring and analysis to operators&lt;/li&gt;
&lt;li&gt;expand on underling game maths and service maths requirements for product features as they are designed, developed &amp;amp; iterated upon&lt;/li&gt;
&lt;li&gt;develop tools to model and simulate the impact of changes to product configuration&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;October 2011 - August 2016&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Data Analyst&lt;/strong&gt;; RightShift&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;design, build and maintain ETL process to update database environments as well as deploy and manage SSAS cubes, and optimizing these processes in order to allow for rapid scaling}&lt;/li&gt;
&lt;li&gt;create, manage and maintain reports to service the daily, weekly and monthly requirements of the business in various respects; as well as reporting directly to high level management&lt;/li&gt;
&lt;li&gt;measure application data in order to identify trends in player behaviour, virality, revenue and associated key metrics&lt;/li&gt;
&lt;li&gt;track and monitor general application performance across multiple platforms and identify potential bugs and problems&lt;/li&gt;
&lt;li&gt;assist marketing and customer support teams with additional tailored reporting and analysis to provide specific insight into various interventions and offers&lt;/li&gt;
&lt;li&gt;perform ongoing analysis in order to inform decision making on game and meta-game development and configuration utilizing A-B testing
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;2008 - 2011&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Student Tutor&lt;/strong&gt;; &lt;a href=&#34;http://www.stats.uct.ac.za/&#34;&gt;University of Cape Town, Department of Statistics&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tutored undergraduate statistics courses from 1st year through to 3rd year&lt;/li&gt;
&lt;li&gt;Responsibilities involved:

&lt;ul&gt;
&lt;li&gt;facilitating weekly class tutorials&lt;/li&gt;
&lt;li&gt;invigilating &amp;amp; marking of tests and exams&lt;/li&gt;
&lt;li&gt;ad-hoc one-on-one hot-seat tutoring&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;2008 - 2011&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Senior Tutor&lt;/strong&gt;; Axiom Tutoring&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tutoring of mathematics and statistics from high school through to undergraduate university level&lt;/li&gt;
&lt;li&gt;e-mail administration &amp;amp; allocation of tutors to students&lt;/li&gt;
&lt;li&gt;one-on-one &amp;amp; small group tutoring&lt;/li&gt;
&lt;li&gt;preparation &amp;amp; typesetting of notes and worksheets
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;2007 Summer&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Student Internship&lt;/strong&gt;; Momentum Collective Benefits&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;worked as part of a group recording, capturing and compiling historical data for later use by the actuarial team to re-evaluate exposure to risk&lt;/li&gt;
&lt;li&gt;gained insight into the insurance/group life industry, and experience in the commercial use of Microsoft Excel and VBA macros to automate data compilation and processing tasks&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&#34;publications&#34;&gt;Publications&lt;/h2&gt;

&lt;h4 id=&#34;modelling-uncertainty-in-stochastic-multicriteria-acceptability-analysis&#34;&gt;&lt;em&gt;Modelling uncertainty in stochastic multicriteria acceptability analysis&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Ian N. Durbach, Jon M. Calder&lt;br /&gt;
Omega (October 2015)&lt;br /&gt;
Available at: &lt;a href=&#34;http://dx.doi.org/10.1016/j.omega.2015.10.015&#34;&gt;http://dx.doi.org/10.1016/j.omega.2015.10.015&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&#34;decision-support-for-evaluating-player-performance-in-rugby-union&#34;&gt;&lt;em&gt;Decision Support for Evaluating Player Performance in Rugby Union&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Jon M Calder, Ian N. Durbach&lt;br /&gt;
International Journal of Sports Science &amp;amp; Coaching (February 2015)&lt;br /&gt;
Available at: &lt;a href=&#34;http://dx.doi.org/10.1260/1747-9541.10.1.21&#34;&gt;http://dx.doi.org/10.&lt;sup&gt;1260&lt;/sup&gt;&amp;frasl;&lt;sub&gt;1747&lt;/sub&gt;-9541.10.1.21&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;technical-experience&#34;&gt;Technical Experience&lt;/h2&gt;

&lt;h3 id=&#34;software-programming-languages&#34;&gt;Software &amp;amp; Programming Languages&lt;/h3&gt;

&lt;h4 id=&#34;r-c-java-python&#34;&gt;&lt;em&gt;R, C++, Java &amp;amp; Python&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Proficient with R, some experience with C++, Java, Scala &amp;amp; Python&lt;/p&gt;

&lt;h4 id=&#34;databases-scripting&#34;&gt;&lt;em&gt;Databases &amp;amp; Scripting&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;MySQL, T-SQL, Excel, VBA, SSAS, SSMS, SSRS + limited experience with MDX&lt;/p&gt;

&lt;h4 id=&#34;document-preparation&#34;&gt;&lt;em&gt;Document Preparation&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Word, Powerpoint, Markdown, LaTeX&lt;/p&gt;

&lt;h4 id=&#34;statistical-packages&#34;&gt;&lt;em&gt;Statistical Packages&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Some experience with Statistica, SPSS, EViews &amp;amp; Genstat&lt;/p&gt;

&lt;h4 id=&#34;web-development&#34;&gt;&lt;em&gt;Web Development&lt;/em&gt;&lt;/h4&gt;

&lt;p&gt;Some experience with HTML &amp;amp; CSS, PHP, Javascript, Wordpress&lt;/p&gt;

&lt;h2 id=&#34;education&#34;&gt;Education&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;2009 - 2013&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;MSc in Operations Research (with distinction)&lt;/strong&gt;; University of Cape Town, Department of Statistics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decision modeling, decision support, logical fallacies &amp;amp; reasoning, performance analysis in sport.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4 id=&#34;player-performance-evaluation-in-rugby-using-stochastic-multi-criteria-acceptability-analysis-with-simplified-uncertainty-formats&#34;&gt;&lt;em&gt;Player performance evaluation in rugby using Stochastic Multi-Criteria Acceptability Analysis with simplified uncertainty formats&lt;/em&gt;&lt;/h4&gt;

&lt;h5 id=&#34;masters-dissertation&#34;&gt;Masters dissertation&lt;/h5&gt;

&lt;h6 id=&#34;supervisor-dr-ian-durbach&#34;&gt;Supervisor: Dr Ian Durbach&lt;/h6&gt;

&lt;p&gt;Description: This study investigates the use of SMAA as a decision support tool for rugby coaches by making use of game data to inform possible rankings of players within positional profiles based on preference criteria.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;2008&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;BSc (Honours) in Statistics&lt;/strong&gt;; University of Cape Town, Department of Statistics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operations Research, Decision Modelling, Theory of Statistics, Multivariate Analysis, Econometrics, Portfolio Management.&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4 id=&#34;application-of-rasch-analysis-to-the-assessment-of-grade-6-literacy-and-numeracy-in-the-western-cape&#34;&gt;&lt;em&gt;Application of Rasch Analysis to the Assessment of Grade 6 Literacy and Numeracy In The Western Cape&lt;/em&gt;&lt;/h4&gt;

&lt;h5 id=&#34;honours-dissertation&#34;&gt;Honours dissertation&lt;/h5&gt;

&lt;h6 id=&#34;supervisors-prof-tim-dunne-kutlwano-ramaboa&#34;&gt;Supervisors: Prof Tim Dunne, Kutlwano Ramaboa&lt;/h6&gt;

&lt;p&gt;Description: Rasch analysis is utilized to assess the validity of a numeracy and literacy test administered to grade six learners from over 1000 schools in the Western Cape in 2007. Rasch analysis is introduced in the context of a background to modern test theory, and the data are then examined with respect to invariance across the latent trait, targeting and reliability, item characteristics and differential item function.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;2005 - 2007&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;BSc in Statistics&lt;/strong&gt;; University of Cape Town, Department of Statistics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Undergraduate courses included Statistics, Mathematics, Computer Science, Economics, Accounting, Finance and Actuarial Science&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;dt&gt;2000 - 2004&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;&lt;strong&gt;Carter High School&lt;/strong&gt;; Pietermaritzburg, South Africa&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finished fourth in the Vulindlela/Pietermaritzburg district and third in the Midlands Area (awarded by the Kwa-Zulu Natal Department of Education)&lt;/li&gt;
&lt;li&gt;Awarded the dux prize for top scholar in Grade 12, with distinctions for English, Afrikaans, Mathematics, Biology, Physical Science and Geography&lt;/li&gt;
&lt;li&gt;Awarded Academic Colours in Grade 10 and Academic Honours in Grades 11 and 12.&lt;/li&gt;
&lt;li&gt;Awarded Effort Certificates from Grade 8-12&lt;/li&gt;
&lt;/ul&gt;&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2 id=&#34;human-languages&#34;&gt;Human Languages&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;English (home language)&lt;/li&gt;
&lt;li&gt;Afrikaans (2nd language)&lt;/li&gt;
&lt;li&gt;French (beginner)
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;achievements-and-extra-murals&#34;&gt;Achievements and Extra Murals&lt;/h2&gt;

&lt;h4 id=&#34;music&#34;&gt;Music&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Studied classical piano - theory and practical - at the Music School in Pietermaritzburg (1998-2003)&lt;/li&gt;
&lt;li&gt;Was graded at various Eistedfords during this period and performed at additional concerts&lt;/li&gt;
&lt;li&gt;Achieved a grade 6 performance level&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&#34;sport&#34;&gt;Sport&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;1st Team Outdoor hockey (Captain) and 1st Team Indoor hockey at Carter High School&lt;/li&gt;
&lt;li&gt;Awarded half colours&lt;/li&gt;
&lt;li&gt;Other sports played (mostly club/social) while at school and university include: soccer (indoor and outdoor), action cricket, cricket, squash, touch rugby and ultimate frisbee&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&#34;community-service&#34;&gt;Community Service&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Since 2017: Member of &lt;a href=&#34;https://rweekly.org/about&#34;&gt;RWeekly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Since 2017: Co-organiser of &lt;a href=&#34;https://satrdays.org/&#34;&gt;satRdays&lt;/a&gt; in South Africa (e.g. see &lt;a href=&#34;https://capetown2018.satrdays.org&#34;&gt;satRday CT 2018&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Since 2017: Mentor and maintainer of the R track on &lt;a href=&#34;http://exercism.io&#34;&gt;exercism.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2007: 1st Year mentor, Smuts Hall (UCT Residence)&lt;/li&gt;
&lt;li&gt;2004: Grade 8 mentor, Carter High School&lt;/li&gt;
&lt;li&gt;2003: Member of Matric Dance Committee, Carter High School&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;interests-hobbies&#34;&gt;Interests &amp;amp; Hobbies&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Piano/Keyboard&lt;/li&gt;
&lt;li&gt;Sound engineering&lt;/li&gt;
&lt;li&gt;Running&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
</description>
  </item>
  
<item>
  <title>Projects</title>
  <link>https://www.joncalder.co.za/projects/</link>
  <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
  
<guid>https://www.joncalder.co.za/projects/</guid>
  <description>

&lt;h2 id=&#34;open-source-projects&#34;&gt;Open Source Projects&lt;/h2&gt;

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

&lt;h3 id=&#34;rweekly-org-https-rweekly-org&#34;&gt;&lt;a href=&#34;https://rweekly.org/&#34;&gt;rweekly.org&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Weekly Updates from the Entire R Community&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am an active contributor and part of the core team&lt;/p&gt;
&lt;/blockquote&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; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;exercism-io-http-exercism-io&#34;&gt;&lt;a href=&#34;http://exercism.io&#34;&gt;exercism.io&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Download and solve practice problems in over 30 different languages&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am currently a maintainer of the &lt;a href=&#34;https://github.com/exercism/r&#34;&gt;R track&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;r-packages-i-ve-collaborated-on&#34;&gt;R packages I&amp;rsquo;ve collaborated on&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/r-lib/styler&#34;&gt;styler&lt;/a&gt;: Non-invasive pretty printing of R code&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lockedata/pRojects&#34;&gt;pRojects&lt;/a&gt;: A tool for setting up R projects and related infrastructure&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/refactor/&#34;&gt;refactor&lt;/a&gt;: Better factor handling for R&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/exercism&#34;&gt;exercism&lt;/a&gt;: An R package for interacting with the exercism.io API&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lorenzwalthert/precommit&#34;&gt;precommit&lt;/a&gt;: pre-commit hooks for R projects&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lorenzwalthert/strcode&#34;&gt;strcode&lt;/a&gt;: Structure your code better&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lorenzwalthert/gitsum&#34;&gt;gitsum&lt;/a&gt;: Summarise the history of any git repository&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;other-personal-projects&#34;&gt;Other personal projects&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/exercism-config-viz&#34;&gt;exercism track config&lt;/a&gt;: Shiny app for visualizing track config on exercism.io&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/regular_expressions&#34;&gt;regular expressions&lt;/a&gt;: Swirl course on regular expressions in R&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/diagrammer&#34;&gt;diagrammer&lt;/a&gt;: Swirl course for the DiagrammeR package&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jonmcalder/hugobot&#34;&gt;hugobot&lt;/a&gt;: A chat bot built on the Hubot framework&lt;/li&gt;
&lt;/ul&gt;
</description>
  </item>
  
</channel>
  </rss>