Tuesday, April 23, 2013

Cloud Based Development Environments


[Updated 5/1/2014] In some ways, developers have done themselves a disservice in the tool department, like the shoemaker’s children going without shoes.  As a cloud user for some years now, I’ve always felt it was kind of strange that I have to setup a complex integrated development environment (IDE) on my workstation in order to develop for the cloud.  In addition, tools to push my code to the cloud platform for testing my cloud apps were missing. As a Google Docs user, I expect to have the same collaboration capabilities in my IDE.


This may be changing with the advent of cloud IDEs.    Mark Downey, a Product Manager at Codenvy, posted a comment to Infoworld saying that “they believe editing the code close to where it is meant to be executed provides countless advantages that have yet to be explored.... it’s just a matter of time before desktop IDEs are completely obsolete.”

It’s about time we have some decent cloud based IDEs.  If the future platform is cloud, then the IDE needs to move to the cloud as well.  There are several advantage to developer teams, like having  consistent tools, collaboration, and hopefully better productivity since developers don’t need to setup and maintain multiple tools on their local workstations.  Maintaining a set of development tools can be a major time sink in itself.  Regarding time to setup, Codenvy published a post on their BLOG stating the following.

It took an expert Java developer hours to setup Eclipse, maven, and Cloud Foundry on a blank Ubuntu machine.  It took 2 minutes with Codenvy.

Sure, there’s some marketing here, but even if I tweak the numbers, there’s real value here.  I expect that having a cloud IDE may be the next battlefront for cloud PaaS providers like AWS, Rackspace, Heroku and others.  As the market continues to mature, I can easily see a company like AWS purchasing a cloud IDE company or implementing the open source Cloud9 IDE and making it part of AWS solution set.   I decided to test a couple of the cloud based IDEs, Codenvy, and Cloud9, and play with some Python and PHP code.  It was free and painless to setup accounts with both vendors.  

Being able to use a source control platform, like github, reduces one of the risks to using these IDEs since your code is pushed out to a common source control system allowing the use of any IDE.


Executive Summary

As of this writing, the cloud based solutions that I tested seemed just out of beta.  Although we are moving to the “post-PC world”, I couldn’t use my iPad with either environment, mainly because both tools required double-click.  I’m guessing I’d have to wait for an app for this.  If I have to code in the cloud, I use Textastic for my iPad.

The cloud IDEs that I tested both had many of the features that you would expect to find in a development IDE.
  • Editors built for application development like color coding elements of the code, auto-indentation (a must for python), command completion, etc.
  • Debugging environment which depended on the language
  • Ability to collaboration with other developers.
  • Integration with source repositories (like github)
  • Application deployment integration to platform as a service (PaaS) vendors (like Heroku and AWS Elastic Beanstalk).

It’s been awhile since I’ve done any development, so I stumbled around Codenvy’s test environments as well as trying to figure out why Codenvy wouldn’t push my PHP application to AWS Elastic Beanstalk (like you can to AppFog and OpenShift).  I hope Codenvy will support that in the future.  You can deploy directly to AWS if you develop with Java in Codenvy but if you want to deploy PHP, you’ll need to bridge through github since AWS supports github deployments.  I’d prefer a single push button approach though which would improve development team testing cycles.  Codenvy supports more PaaS vendors than Cloud9, and because of this, and better documentation, their platform  seemed more mature than Cloud9.  Although I liked Codenvy’s tight integration with github, it would clone but not push code back to github giving me an error in the process.   I ran into numerous bugs and wasn’t able to invite other developers to collaborate in Codenvy due to an error 500.  I was very interested in testing real-time collaboration in Codenvy (it works like google docs) but it wasn’t functioning the day I tested. [Update: Some of these issues were fixed. See the release notes.]

Looking at the Codenvy BLOG, it looks like they release new features monthly.  One of the advantages of software as a service (SaaS) is that there’s nothing for users to do to receive updates since there’s nothing to install.  The marketing is slick and the interface seems a tad more polished than Cloud9

I found Cloud9 easier to use, faster and less bug prone.  Cloud9’s IDE would catch undeclared variables and other bugs in the code.  It had continuous saving as well as having better command completion features than Codenvy.  I also liked Cloud9’s test environment for PHP, it was quick to fire up and reliable.  Although you are forced to use the terminal window for some github commands, it was easy and the more I tested in the two environments, the more I liked Cloud9.  

I wasn’t able to try application deployment on either app since they supported PaaS systems that I’m not signed up for at this time.  Neither product tested would support the same PaaS vendors so this would have been very time consuming portion of the review.

I didn’t have a complete project that I was developing so a deep evaluation is out of reach at this time.  I would have liked to push my PHP app to AWS EBS but Codenvy doesn’t support it and Cloud9 only pushes java apps to AWS.  I’ll be interested in following where these products mature and grow.  I expect Google, AWS and or others to offer an IDE to achieve tighter integration for their platforms and improve the development and code life cycle management.

Codenvy

Codenvy IDE is supposed to be more familiar to users of eclipse.  Codenvy doesn’t have auto-save like Cloud9 (requires you to <ctrl>-s).  It’s IDE acts more like a local editor showing you that the file has changed by displaying an asterisk on the tab for the changed content and warns you if you try to close a tab that hasn’t been saved.  The advantage is that it may produce less network chatter.  

While I tried using Codenvy with php and python, it indented and color coded my code.  It also tried to un-indent the code in PHP when it saw the matching “}”.  Another feature is that it turned a brace red if it didn’t have a matching brace or parentheses.  

The “Run” in Codenvy menu command is used to test applications is not available when editing a PHP application.  I had limited success starting a Python application (if there are any errors in the code it won’t start at all).

[Update: PHP run is supported and some of these issues were fixed. See the release notes.]

I wasn’t able to try collaboration as I received error 500 page when inviting others to collaborate.  I was looking forward to trying the collaboration feature that is similar to Google Docs.

[Update: Some of these issues were fixed. See the release notes.]

It wasn’t obvious how to setup github but a quick look at the documentation and it was pretty painless.  I like how github is integrated into the UI for various file based actions.  I was able to clone a project from the main dashboard and and then edit the source.  My commits back to the repository didn’t work however and this was a major point of frustration.  Adding files to my github also failed.

Depending on the language, Codenvy allows you to deploy to the following PaaS providers directly from the tool.
  • AWS Elastic Beanstalk
  • AppFog
  • Cloud Foundry
  • CloudBees
  • Google App Engine
  • Heroku
  • OpenShift

Cloud9

From the Cloud9 (C9) documentation:
Cloud 9 IDE is, at its core, an online code editor. Specifically, it's an IDE for Javascript that uses Node.js as a backend. Cloud 9 IDE supports the ability to import projects from github, Bitbucket, and FTP, as well as an offline mode, collaborative development, and syntax highlight for a variety of languages. It's simple, fast, and extremely powerful, with tabbed file browsing, autocompletion of methods and properties, searching across project files, and many other features you'd expect from a terrific editor.
Since Cloud 9 IDE runs on Javascript, you can build, debug, and run Node.js applications within your browser. You can run npm and import packages developed by the Node.js community. Cloud9 IDE can also instantaneously deploy your projects to production servers hosted by Heroku and Nodester in order to take your awesome ideas to a wider audience.
The Cloud9 IDE is based on the open source version with the same name but with some additional code on-top to run the management console, authentication and the business operations side.  The editor tries to auto-save as you type which I think is mandatory for cloud based applications since you could lose your connection at any time.  It was much more like using Google Docs in this regard.

When using parentheses in PHP the editor added the ending paren and was smart enough to not put a second one if you put the ending paren on.   When using a curly brace, it added the ending brace to the next line below so it was easy to duplicate by accident.  The editor highlights the matching parenthesis or brace when placing cursor to the right of one of them, which is very helpful.  For Python code, the editor placed a faint line to show indention (Python uses indentation rather than terminators or keywords to indicate when a conditional or looping statement ends (my nemesis)).  Seeing how the code lines up is really helpful.

I tried collaboration.  It’s supposed to work similar to Google Docs from what I’ve read, but that wasn’t the case when I tried it.  There were some very recent bugs submitted on this feature during my review.  I’ll be interested to see how this is resolved.

For source control, Cloud9 supports github and mercurial.  The integration makes it easy to clone a repository or add a file that’s in your git repository.  Committing changes back requires you to use command lines in the terminal window.  I expect this to be better integrated in the future.

Cloud9 supports the following PaaS vendors for direct deployment:
  • Windows Azure
  • Cloud Foundry
  • heroku

The Cloud9 BLOG is moderately active and indicates that updates come out every 1 to 2 months with a clear indication that they plan to add more PaaS vendors.

Reference

-- Chris Claborne

No comments:

Post a Comment