<?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>DEV Community: Stephen Taylor Witte</title>
    <description>The latest articles on DEV Community by Stephen Taylor Witte (@stevetwitte).</description>
    <link>https://dev.to/stevetwitte</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%2Fuser%2Fprofile_image%2F95304%2Fd9570c74-9e27-4976-afda-951ee3413c82.png</url>
      <title>DEV Community: Stephen Taylor Witte</title>
      <link>https://dev.to/stevetwitte</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stevetwitte"/>
    <language>en</language>
    <item>
      <title>An Overview of Coder Public Alpha</title>
      <dc:creator>Stephen Taylor Witte</dc:creator>
      <pubDate>Sat, 01 Sep 2018 18:27:52 +0000</pubDate>
      <link>https://dev.to/stevetwitte/an-overview-of-coder-public-alpha-2h9l</link>
      <guid>https://dev.to/stevetwitte/an-overview-of-coder-public-alpha-2h9l</guid>
      <description>&lt;p&gt;Coder is a web-based IDE with the standout feature of giving you a scalable container, with full root access, to run your code.  The cloud IDE has entered public alpha, and I was curious to see how well it performed and what, if any, were its shortcomings.  This article is by no means a comprehensive review just an overview of my time with the Coder public alpha.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7xl7mkzl7hjwra9p8vz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F7xl7mkzl7hjwra9p8vz8.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights from the Homepage
&lt;/h2&gt;

&lt;p&gt;Scrolling through Coder's homepage describes a cloud IDE with full support for 15 languages including C, C++, Java, HTML, Javascript, Typescript, PHP, Ruby, and more.  They also list 9 partially supported languages but there is no mention of what that means, but it's safe to assume those are still in development as this is alpha code.&lt;/p&gt;

&lt;p&gt;The homepage also mentions the ability to create shared workspaces, real-time collaboration, a feature called Fast Time that will be covered later, the ability to work on any device and their "supreme security."  It's easy to see why a lot of people would be interested in something like this, so let's see what it's like to work in a cloud IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spinning up a Project
&lt;/h2&gt;

&lt;p&gt;After signing up with either email or a GitHub account, we are taken to the Dashboard.  Here you have access to all your projects and containers, more on those later, and to the left, you can switch to your control panel, view documentation and redeem a fast time code.&lt;/p&gt;

&lt;p&gt;After creating a project, you can open the IDE.  Doing this brings your container online and loads the IDE/editor with a base directory at /coder/mnt/your-user-name/project-name, and here you are pretty much left to do whatever you want.&lt;/p&gt;

&lt;p&gt;You are presented with an IDE that has project-wide search, autocomplete, and a full terminal with root access.  I develop mostly in Ruby on Rails and React, and they both have pretty self-contained installers/setups so I figured I would see if I could spin up a new Rails app and if I could run create-react-app successfully.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9a5eltko81vbyjvajbf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F9a5eltko81vbyjvajbf0.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Are the Rails on?
&lt;/h2&gt;

&lt;p&gt;Switching over to the terminal view brings up a bash prompt at the project root, where you can see that you are logged in as the root user.  I tried checking the Ruby version on the machine, it wasn't installed, so a quick check on the documentation showed that once you create a ".rb" file, Ruby would install.  &lt;/p&gt;

&lt;p&gt;All right we have Ruby installed and now on to Rails.  Gem install rails gave me a couple of errors.  It looks like I need to install some dependencies first.  Running "apt-get update &amp;amp;&amp;amp; apt-get install -y build-essential locales nodejs" seemed to get me closer and I was able to install Rails, but when running rails new AppName I got an error installing the SQLite gem.&lt;/p&gt;

&lt;p&gt;Upon closer inspection, it seems to be an issue with the GCC compiler.  I was about to start debugging this issue when I decided to leave it alone.  I am not interested in developing with SQLite in the real world, so I decided to call it.  I was able to run a file through the ruby command line and get output so my conclusion here is that Ruby works but something with as many dependencies as Rails may or may not work and probably will require some particular config.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a React App?
&lt;/h2&gt;

&lt;p&gt;I created a new project, ran "npm install -g create-react-app," and it installed with no issues.  Running "create-react-app test-app" was successful as well, with no errors or warnings in site.&lt;/p&gt;

&lt;p&gt;Starting the development server was the usual "npm start," but to see the result, you use their method for connecting from another browser window to your server.  This window works with live-reload and even includes https for an experience much like a paid NGROK account.  I was surprised that everything here works as expected with no significant differences to the way I would start a new React project locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F52jqdjotfe87fcrsedbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F52jqdjotfe87fcrsedbp.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it feel?
&lt;/h2&gt;

&lt;p&gt;The overall feel of typing into Coder was very similar to what you would expect when SSH'ing onto a remote server.  My internet connect is 100mbps down, and I experienced a small amount of lag, I could certainly tell I was not working on my local machine, but nothing that would keep me from getting things done.&lt;/p&gt;

&lt;p&gt;The IDE feels and looks a lot like Visual Studio Code does out of the box.  I wouldn't put it on par with what we would call an IDE in the desktop world.  It's very capable but seems more like an editor with the usual plugins installed.  For example, I would expect an IDE to know if I was using a class without importing it, this didn't recognize the error.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Fast Time?
&lt;/h2&gt;

&lt;p&gt;Fast Time is a paid upgrade billed at an hourly rate and "dynamically scales your container up to 96 cores."  They don't go into any more detail other than how to purchase Fast Time, but since I got 5 hours of it for free, I activated it during the Rails install.  Activating this brought my CPU usage down considerable and I am sure sped things up but more in-depth testing is needed to confirm what exactly is going on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;I have only scratched the surface of the languages available, and more are coming soon, as this is Alpha, but overall I think that the team at Coder is onto some really cool stuff.  I am very impressed with all that you can do at this early stage and am looking forward to the future of this company and the whole concept in general.  We have already moved so much of what we do to the cloud it makes sense that we would start editing there as well.&lt;/p&gt;

</description>
      <category>web</category>
      <category>tooling</category>
      <category>development</category>
      <category>cloud</category>
    </item>
    <item>
      <title>The Story of a Rails MVP</title>
      <dc:creator>Stephen Taylor Witte</dc:creator>
      <pubDate>Sat, 25 Aug 2018 16:12:54 +0000</pubDate>
      <link>https://dev.to/stevetwitte/the-story-of-a-rails-mvp-5d00</link>
      <guid>https://dev.to/stevetwitte/the-story-of-a-rails-mvp-5d00</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--exBw3D8D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/i4vj5bjpdp4iuopwkift.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--exBw3D8D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/i4vj5bjpdp4iuopwkift.jpg" alt="alt text" title="The Story of a Rails MVP"&gt;&lt;/a&gt;&lt;br&gt;
I recently had a great experience ditching the hassle of an API/Client app situation in favor of a standard Rails web app.  Here is the story of finding the path of least resistance with MyInvestmentTime.com.&lt;/p&gt;

&lt;p&gt;Some time ago I was sitting at my desk on a Friday, I had finished my sprint and was looking at a full day of investment time but had no idea what to tackle.  The thought popped into my head that there might be a website or forum where I could get some inspiration.  I thought there would have already been a site where people talked about investment time.  It turns out that site does not exist, at least as far as I can tell, and so I decided to create MyInvestmentTime.com.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;p&gt;The idea was to give users a Twitter-like feed to check on what the community was doing in their investment time.  I soon thought of my team and wanted to add a way to track teams and to update the status of the task or project.  I have tried to be careful in not creating a replacement for typical project management tools.  I don't want to replace GitHub or Trello.  So instead think of MyInvestmentTime.com as a standup for your investment time and a way to share that among teams and the broader community.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Path
&lt;/h2&gt;

&lt;p&gt;I started as a Ruby on Rails developer, and at my company, we generally go with a Rails API back-end and Angular front-end.  That seemed like a logical starting point for my app as well, but I already knew Angular and because this was a fun side project I decided to go with something new.&lt;/p&gt;

&lt;p&gt;Around this time Create React App had just been released.  It seemed like a perfect time to learn React, so I decided to go with a Rails API back-end and a React front-end.  I worked on this for a few months, on the weekends with a friend who was also learning React and had a very basic working app.&lt;/p&gt;

&lt;p&gt;It allowed you to create an Investment and it allowed you to view a feed of other's Investments.  You could log in, sign up and the like but nothing else.  Moreover, as many projects do, this one fell by the wayside when work picked up for me.  So the Heroku app sat there, and the repos didn't get any commits, and my URL still pointed to nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quicker Path
&lt;/h2&gt;

&lt;p&gt;A month ago I was sitting in my kitchen, checking on my RSS feeds, I had a little more free time and thought that it might be nice to check out the long-lost app and get some work done.  A lot had changed in my personal views on delivering code and working from idea to MVP and after seeing the code, and what it was doing I realized that a lot was going on and achieving very little.&lt;/p&gt;

&lt;p&gt;There didn't seem to be any reason this app shouldn't just be server-side rendered, at least for most of the time.  Rails 5.1 was released since I started, which opened up the possibility of adding React components were they needed for real-time functionality, or maybe at this point, I would go with Vue.js, but it seemed silly to have a client and API setup for something as simple as this.&lt;/p&gt;

&lt;p&gt;I decided that I would start with a base Rails app and I would use every tool out there to make development more comfortable and quicker.  It turns out that with a few gems I was able to get the first full MVP done in four days at around 5 hours a day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure
&lt;/h2&gt;

&lt;p&gt;I started with a "rails new" on version 5.2 and began creating.  The structure of the app is straightforward, and there is a link to the repo at the bottom of the article if you want to check it out.  Here are some highlights.&lt;/p&gt;

&lt;p&gt;I used Clearance &lt;a href="https://github.com/thoughtbot/clearance"&gt;&lt;/a&gt;(&lt;a href="https://github.com/thoughtbot/clearance"&gt;https://github.com/thoughtbot/clearance&lt;/a&gt;) for authentication which gave me a real headstart.  The gem is not as famous or prominent as Devise, but I prefer it's customization and it still gives you everything you need out of the box.  I used it's generators to give me a user model and all my basic views.  I then sub-classed their controllers for a simple change to add a username to signup and defined my routes.  The only thing left was styling.&lt;/p&gt;

&lt;p&gt;CanCanCan &lt;a href="https://github.com/CanCanCommunity/cancancan"&gt;&lt;/a&gt;(&lt;a href="https://github.com/CanCanCommunity/cancancan"&gt;https://github.com/CanCanCommunity/cancancan&lt;/a&gt;)  was another great addition and helped to clean up my controllers and simplify them a great deal.  It is an authorization and resource loading library that works of the concept of abilities.  You define a set of abilities for your user, separated by model, type, role.  Then in your controller, you can authorize and load that resource automatically with one before action.  My explanation is an extreme oversimplification of what the gem can do, and I encourage you to read one of the many excellent tutorials or just the wiki for CanCanCan, which is also very informative.&lt;/p&gt;

&lt;p&gt;I am not a designer, and while the site is functional, I don't think it is going to win any awards just yet.  TailwindCSS &lt;a href="https://github.com/tailwindcss/tailwindcss"&gt;(&lt;/a&gt;&lt;a href="https://github.com/tailwindcss/tailwindcss"&gt;https://github.com/tailwindcss/tailwindcss&lt;/a&gt;) did give me the ability to design in the browser with much more flexibility and speed then I am usually accustomed too.  It allows you to focus on the structure of your site with no opinion on how it should look.  I like it, and it has the tools you need to extract those HTML elements into classes.  It uses PostCSS and Javascript, so I integrated it using web pack in Rails.&lt;/p&gt;

&lt;p&gt;These tools along with the Rails framework, in general, allowed me to deliver a very clean code base with a minimum number of dependencies and a very polished experience.  Testing with RSpec for everything from Unit to View was a breeze.  Model validations carry over to forms automatically and so much more.  A lot of which I would have had to build from scratch or download a library for in the API/SPA world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There are many times where this project setup does not make sense.   One of the big reasons we go with an API/Client design is because there are multiple clients that all need access to the same data.  I could see a need for more real-time functionality in many apps or the situation where a client needs to talk to many microservices directly.&lt;/p&gt;

&lt;p&gt;There are many other reasons to not go with a monolith Rails app but none of them applied to my project, and I bet a lot of them don't apply to your project either.  I was extremely impressed by how little code I had to write apart from the HTML.  It boiled down to config and setup more than anything else.&lt;/p&gt;

&lt;p&gt;So next time you are starting a new project avoid the temptation to reach for the new shiny thing and look at some of the tried and true options.  You may be impressed by what years of development and support can do to a framework or library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://myinvestmenttime.com"&gt;&lt;/a&gt;&lt;a href="https://myinvestmenttime.com"&gt;https://myinvestmenttime.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/stevetwitte/my-investment-time"&gt;&lt;/a&gt;&lt;a href="https://github.com/stevetwitte/my-investment-time"&gt;https://github.com/stevetwitte/my-investment-time&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>web</category>
      <category>mvp</category>
    </item>
  </channel>
</rss>
