<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: ThinkR</title>
    <description>The latest articles on Forem by ThinkR (@thinkr).</description>
    <link>https://forem.com/thinkr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F1595%2Ff458828e-b315-4a47-aabe-4ab0a31568d2.png</url>
      <title>Forem: ThinkR</title>
      <link>https://forem.com/thinkr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/thinkr"/>
    <language>en</language>
    <item>
      <title>What's a "successful" Shiny Application?</title>
      <dc:creator>Colin Fay</dc:creator>
      <pubDate>Wed, 10 Jun 2020 19:12:12 +0000</pubDate>
      <link>https://forem.com/thinkr/what-s-a-successful-shiny-application-1aa4</link>
      <guid>https://forem.com/thinkr/what-s-a-successful-shiny-application-1aa4</guid>
      <description>&lt;p&gt;One of the things that we keep promoting in the ThinkR team are &lt;strong&gt;good practices for production software engineering in R&lt;/strong&gt;. Of course, that implies Shiny Applications—and even more if we introduce the &lt;code&gt;{golem}&lt;/code&gt; package, which promotes good practices for "production-grade" Shiny application.&lt;/p&gt;

&lt;p&gt;But let's take a step back and &lt;strong&gt;think about what makes a successful/production-grade Shiny Application&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;It Exists&lt;/h2&gt;

&lt;p&gt;That seems like an obvious concept, but of course a Shiny application is successful and ready for production if &lt;strong&gt;the dev team was able to move from the idea to the actual implementation to the delivery of the app.&lt;/strong&gt; It's a very 'engineer-oriented' definition of success, but that's a pragmatic one: a project that doesn't exist can't be labelled as a successful one.&lt;/p&gt;

&lt;p&gt;And when it comes to a Shiny Application (or to any web application), the fact that an application exists means that the team has been able to organise itself in an efficient manner, so that&lt;strong&gt; they could work together on making this application a success&lt;/strong&gt;. Anybody that has already worked on a code base as a team knows it is not an easy task.&lt;/p&gt;

&lt;p&gt;Working in a framework like &lt;code&gt;{golem}&lt;/code&gt; does help you reaching this goal: working inside a formalised structure will help you keep track of what is happening, and allows to grasp more easily what is contained in a given project. For example, if I today open a &lt;code&gt;{golem}&lt;/code&gt; project I have never seen before, I will immediately be able to understand how the codebase is organised.&lt;/p&gt;

&lt;h2&gt;It's Accurate&lt;/h2&gt;

&lt;p&gt;Once the application exists, the other parameter that defines a production-grade application is that it is accurate. In other words, &lt;strong&gt;the visualisation are correct, the algorithms return the answer they are supposed to, the information are the needed one, etc&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And yes, it happens that you deliver an application that works differently from the way it is expected to work. How do we prevent from that? First of all, by applying the "separation of concern":&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;
&lt;strong&gt;Business logic should be strictly separated from the application logic&lt;/strong&gt;: build the back end and the non interactive functions separately from the interactive elements, work on them, validate them, and only once everything is thoroughly tested you can start integrating both together.&lt;/li&gt;
    &lt;li&gt;
&lt;strong&gt;Build a strong and reliable testing suite&lt;/strong&gt;, so that you can catch any bug that will come along your project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use &lt;code&gt;{golem}&lt;/code&gt; and the general philosophy that comes with it, that is something you will be applying from the very beginning: separate everything, build the business logic and the UI, organise everything in files, and of course, as you'll be using the package structure, &lt;strong&gt;use widely used testing frameworks&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;It's Usable&lt;/h2&gt;

&lt;p&gt;Your application exists, it's accurate, but now you should get sure it's usable—in other words,&lt;strong&gt; your audience should visit the app and find it user-friendly&lt;/strong&gt;. And if these people cannot use the application because it is too hard to use, too hard to understand, because it is too slow or there is no inherent logic in how the user experience is designed, then it is inappropriate to call the app a success.&lt;/p&gt;

&lt;h2&gt;It's Immortal&lt;/h2&gt;

&lt;p&gt;Of course nobody expect your app to live forever, but that's what you should reach for: robustness along the years.&lt;/p&gt;

&lt;p&gt;Planning for the future is a very important component of a successful Shiny App project. Once the app is out,&lt;strong&gt; it is successful if it can exist in the long run, with all the hazards that this implies&lt;/strong&gt;: new package versions that could potentially break the code base, sudden call for the implementation of new features in the global interface, changing key features of the UI or the back-end, and not to mention passing the code base along to someone who has not worked on the first version, and who is now in charge of developing the next version . And this, again, is hard to do without effective planning and efficient engineering.&lt;/p&gt;

&lt;h2&gt;Learn to Build a Production-Grade Shiny App&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frtask.thinkr.fr%2Fwp-content%2Fuploads%2FPhotoFunia-1589987182-300x215.jpg" alt="" width="300" height="215"&gt;&lt;/a&gt;If you're interested in &lt;strong&gt;getting trained on building production-grade Shiny applications&lt;/strong&gt;, we will be giving a remote training session in July.&lt;/p&gt;

&lt;p&gt;It will be a 10 half-day session, fully remote, on our online e-learning platform!&lt;/p&gt;

&lt;p&gt;And good news, you can get certified "Shiny Developer" at this end of this session.&lt;/p&gt;

&lt;p&gt;Registration and more information are available &lt;a href="https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;



&lt;br&gt;

</description>
      <category>rstats</category>
      <category>shiny</category>
      <category>rinprod</category>
    </item>
    <item>
      <title>Learning Shiny for Production – Remote session</title>
      <dc:creator>Colin Fay</dc:creator>
      <pubDate>Wed, 20 May 2020 19:18:53 +0000</pubDate>
      <link>https://forem.com/thinkr/learning-shiny-for-production-remote-session-3gdp</link>
      <guid>https://forem.com/thinkr/learning-shiny-for-production-remote-session-3gdp</guid>
      <description>&lt;h2 id="learning-shiny-for-production"&gt;Learning Shiny for Production&lt;/h2&gt;

&lt;p&gt;Hello world!&lt;/p&gt;

&lt;p&gt;We're very happy to announce that we will be &lt;strong&gt;giving a remote training session on building Shiny Application for production in July&lt;/strong&gt;. Be quick, we only have 10 spots available!&lt;/p&gt;

&lt;h2 id="shiny-for-production"&gt;Shiny for Production&lt;/h2&gt;

&lt;h3 id="program"&gt;Program&lt;/h3&gt;

&lt;h4 id="introduction-to-golem-"&gt;Introduction to &lt;code&gt;{golem}&lt;/code&gt;
&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;Introduction&lt;/li&gt;
    &lt;li&gt;The &lt;code&gt;{golem}&lt;/code&gt; framework
&lt;ul&gt;
    &lt;li&gt;Presentation&lt;/li&gt;
    &lt;li&gt;General philosophy&lt;/li&gt;
    &lt;li&gt;Understanding a &lt;code&gt;{golem}&lt;/code&gt; application structure&lt;/li&gt;
    &lt;li&gt;Starting and configuring a &lt;code&gt;{golem}&lt;/code&gt; application&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Package development in the context of &lt;code&gt;{golem}&lt;/code&gt;

&lt;ul&gt;
    &lt;li&gt;Using dependencies&lt;/li&gt;
    &lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Project: Starting and configuring a &lt;code&gt;{golem}&lt;/code&gt; application. Adding a basic UI/server logic.&lt;/li&gt;


&lt;/ul&gt;

&lt;h4 id="prototyping-an-application"&gt;Prototyping an application&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;UX/UI best practices&lt;/li&gt;
    &lt;li&gt;Prototyping a Shiny Application
&lt;ul&gt;
    &lt;li&gt;The &lt;code&gt;{shinipsum}&lt;/code&gt; package&lt;/li&gt;
    &lt;li&gt;Introduction to &lt;code&gt;{fakir}&lt;/code&gt;
&lt;/li&gt;
    &lt;li&gt;Defining the business logic in Rmd&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Project: Building a prototyped application with &lt;code&gt;{shinipsum}&lt;/code&gt; and &lt;code&gt;{golem}&lt;/code&gt;
&lt;/li&gt;


&lt;/ul&gt;

&lt;h4 id="shiny-modules"&gt;Shiny Modules&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;Shiny modules
&lt;ul&gt;
    &lt;li&gt;Why shiny modules?&lt;/li&gt;
    &lt;li&gt;Building modules&lt;/li&gt;
    &lt;li&gt;Sharing data accross modules&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Project: Building an application with Shiny Modules&lt;/li&gt;


&lt;/ul&gt;

&lt;h4 id="reactivity"&gt;Reactivity&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;Reactivity best pratices
&lt;ul&gt;
    &lt;li&gt;Refresher on Shiny Reactivity&lt;/li&gt;
    &lt;li&gt;Reactivity: the good, the bad, the ugly&lt;/li&gt;
    &lt;li&gt;Safely manage reactivity in a Shiny application&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


&lt;/ul&gt;

&lt;h4 id="introduction-to-javascript-for-shiny"&gt;Introduction to JavaScript for Shiny&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;JavaScript for Shiny
&lt;ul&gt;
    &lt;li&gt;What is JavaScript&lt;/li&gt;
    &lt;li&gt;Using &lt;code&gt;{golem}&lt;/code&gt; JavaScript functions&lt;/li&gt;
    &lt;li&gt;Introduction to custom JavaScript&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Project: Integrating basic JavaScript in the application&lt;/li&gt;


&lt;/ul&gt;

&lt;h4 id="deployment"&gt;Deployment&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;Where to deploy
&lt;ul&gt;
    &lt;li&gt;Overview of available deployment methodologies&lt;/li&gt;
    &lt;li&gt;Strength and weakness of each method&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Preparing the app for deployment

&lt;ul&gt;
    &lt;li&gt;Overview of Shiny testing&lt;/li&gt;
    &lt;li&gt;Introduction to CI/CD&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


    &lt;li&gt;Project: Add content to the Shiny Application and prepare it for deployment.&lt;/li&gt;


    &lt;li&gt;Project: Deploy your application&lt;/li&gt;


&lt;/ul&gt;

&lt;blockquote&gt;Note: All the modules will be coupled with exercises. Attendees will be building an application all along the training, and will deploy it on the last day.&lt;/blockquote&gt;

&lt;h3 id="exam"&gt;Exam&lt;/h3&gt;

&lt;p&gt;This workshop can be validated with an exam. If you pass this exam, we will send you a Shiny Developer certification.&lt;/p&gt;

&lt;p&gt;How to apply? Once the workshop is finished, you will have one month to build a Shiny application that follows all the practices from this training. You'll then put this application online (at least available to us), and share the source code. We will then set up a 30 minutes call for you to present us your application.&lt;/p&gt;

&lt;h3 id="who-is-this-training-for-"&gt;Who is this training for?&lt;/h3&gt;

&lt;p&gt;We expect the attendees to be at least familiar with &lt;code&gt;{shiny}&lt;/code&gt;, &lt;em&gt;i.e&lt;/em&gt;. to either have built one or more application(s) or to have collaborated on one or more &lt;code&gt;{shiny}&lt;/code&gt; application(s). Attendees should also know the basics of package development, even if we will briefly cover packages on the first day.&lt;/p&gt;

&lt;p&gt;Requirements:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;General knowledge of shiny basics&lt;/li&gt;
    &lt;li&gt;How to create functions&lt;/li&gt;
    &lt;li&gt;Basic &lt;a href="https://rtask.thinkr.fr/when-development-starts-with-documentation/" rel="noopener noreferrer"&gt;knowledge of package development&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two extra tickets will be dedicated for attendees from under-represented groups and/or with financial difficulties. If you consider you are eligible, do not hesitate to specify it in the form below. We will get back to you with more information about the application process.&lt;/p&gt;

&lt;h3 id="logistics"&gt;Logistics&lt;/h3&gt;

&lt;ul&gt;
    &lt;li&gt;🗺 Where? Online!&lt;/li&gt;
    &lt;li&gt;💻 How? ThinkR provides a pre-configured web platform specifically designed for remote trainings in R&lt;/li&gt;
    &lt;li&gt;🤒 Which conditions ? Tutorial is provided for a small group to provide the best possible experience. See "&lt;a href="https://rtask.thinkr.fr/remote-trainings-and-certification/" rel="noopener noreferrer"&gt;Our vision of remote trainings and certification&lt;/a&gt;".&lt;/li&gt;
    &lt;li&gt;👨‍💻 Who? &lt;a href="https://rtask.thinkr.fr/consultants-r-experts/colin-fay" rel="noopener noreferrer"&gt;Colin Fay&lt;/a&gt; (&lt;a href="https://twitter.com/_ColinFay" rel="noopener noreferrer"&gt;@_ColinFay&lt;/a&gt;). Teaching assistants: &lt;a href="https://rtask.thinkr.fr/consultants-r-experts/sebastien-rochette" rel="noopener noreferrer"&gt;Sébastien Rochette&lt;/a&gt;, &lt;a href="https://rtask.thinkr.fr/consultants-r-experts/vincent-guyader" rel="noopener noreferrer"&gt;Vincent Guyader&lt;/a&gt;, &lt;a href="https://rtask.thinkr.fr/consultants-r-experts/cervan-girard" rel="noopener noreferrer"&gt;Cervan Girard&lt;/a&gt;, &lt;a href="https://rtask.thinkr.fr/consultants-r-experts/margot-brard" rel="noopener noreferrer"&gt;Margot Brard&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;💻 What do I need? The training will be given online. We'll send you the details about how and where to log a few days before it starts.&lt;/li&gt;
    &lt;li&gt;💵 How much? The full training is $4000 (3600€) for the 5 days.&lt;/li&gt;
    &lt;li&gt;⏳ When? The workshop is divided in 10 sessions of 3,5 hours. They will happen on the following days:
&lt;ul&gt;
    &lt;li&gt;2020-07-01&lt;/li&gt;
    &lt;li&gt;2020-07-02&lt;/li&gt;
    &lt;li&gt;2020-07-03&lt;/li&gt;
    &lt;li&gt;2020-07-08&lt;/li&gt;
    &lt;li&gt;2020-07-09&lt;/li&gt;
    &lt;li&gt;2020-07-10&lt;/li&gt;
    &lt;li&gt;2020-07-15&lt;/li&gt;
    &lt;li&gt;2020-07-16&lt;/li&gt;
    &lt;li&gt;2020-07-17&lt;/li&gt;
    &lt;li&gt;2020-07-20&lt;/li&gt;
&lt;/ul&gt;




&lt;/li&gt;


&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;
Each session is scheduled on the following time slot:

&lt;ul&gt;
    &lt;li&gt;02.00PM - 05.30PM Paris time : &lt;code&gt;lubridate::ymd_hm("2020-07-01 14:00", tz = "Europe/Paris")&lt;/code&gt;
&lt;/li&gt;
    &lt;li&gt;9.00 AM - 12.30PM New York time : &lt;code&gt;lubridate::ymd_hm("2020-07-01 09:00", tz = "America/New_York")&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="goodies"&gt;Goodies&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frtask.thinkr.fr%2Fwp-content%2Fuploads%2Fthinkr-hex-golem2-887x1024.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frtask.thinkr.fr%2Fwp-content%2Fuploads%2Fthinkr-hex-golem2-887x1024.png" alt="A orange golem drawn in the middle of a hexagon" width="800" height="923"&gt;&lt;/a&gt;Each attendee will receive:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;
&lt;code&gt;{golem}&lt;/code&gt; stickers&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://thinkr.fr/golem_cheatsheet_v0.1.pdf" rel="noopener noreferrer"&gt;&lt;code&gt;{golem}&lt;/code&gt; cheatcheets&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;A paper copy of the "&lt;a href="http://engineering-shiny.org/" rel="noopener noreferrer"&gt;Engineering Production-Grade Shiny Apps&lt;/a&gt;" book (once available in print)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="register"&gt;Register&lt;/h3&gt;

&lt;p&gt;Please go to &lt;a href="https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/" rel="noopener noreferrer"&gt;https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/&lt;/a&gt; to register&lt;/p&gt;




&lt;h2 id="shiny-for-production-advanced"&gt;Shiny for Production - Advanced&lt;/h2&gt;

&lt;p&gt;We're also planning on doing an advanced Shiny for Production online training, but we haven't decided on a date yet. This session will cover the following topics:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Best practices for production&lt;/li&gt;
    &lt;li&gt;Testing Shiny front-end, back-end, and load capacity&lt;/li&gt;
    &lt;li&gt;Parallelization &amp;amp; Asynchronicity&lt;/li&gt;
    &lt;li&gt;Optimization&lt;/li&gt;
    &lt;li&gt;Advanced deployment&lt;/li&gt;
    &lt;li&gt;Advanced JavaScript for Shiny&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We haven't chosen a date yet, enter your mail below if you want to be the first to be informed!&lt;/p&gt;

&lt;p&gt;Please go to &lt;a href="https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/" rel="noopener noreferrer"&gt;https://rtask.thinkr.fr/remote-trainings-and-certification/learning-shiny-online-july/&lt;/a&gt; to register&lt;/p&gt;

</description>
      <category>rstats</category>
      <category>shiny</category>
    </item>
  </channel>
</rss>
