Cloud Foundry Blog

About Cloud Foundry


Cloud Application Portability Made Easy – Introducing Cloud Foundry Core

The Cloud Foundry community is happy to announce Cloud Foundry Core  -  a program designed to make cloud application portability easier than ever. Cloud Foundry Core provides a baseline of common capabilities and an open mechanism to instantly validate application portability. Today we announce five Cloud Foundry Core compatible instances. AppFog, Tier 3, Uhuru Software, Micro Cloud Foundry™ and CloudFoundry.com are now Core compatible as part of their commitment to preserving cloud portability.

Test your Cloud Foundry Core provider here.

In the cloud computing world, preserving a choice of clouds is critical. The risks of being locked into a single cloud are substantial. Pricing, reliability, geographic location and compliance can all vary between clouds. Business requirements will evolve over time, necessitating the ability to move between clouds, whether public to private, private to public or between public cloud providers.

Cloud Foundry Core – the Vehicle for Cloud Portability

Cloud Foundry Core provides both a baseline of common capabilities and an open mechanism that allows anyone to instantly validate and confirm those capabilities are present on any Cloud Foundry instance. The components of a PaaS offering that applications depend on (runtimes, application services for data access and messaging) form the baseline of common capabilities. Cloud Foundry Core defines specific versions for each of these capabilities. Cloud Foundry Core introduces a system of current, next, and deprecated versions to provide access to feature innovation, enhanced performance and greater stability as application services and runtimes continue to evolve.

Why Preserving Cloud Portability is Critical

Preserving cloud portability is imperative in the cloud era. Being locked into a single cloud restricts the ability to respond to changing needs now and in the future. Cloud portability allows movement between providers that better suit pricing needs or can offer better quality of service. It provides the flexibility to pick and choose where to deploy applications based on compliance requirements, data protection laws, and latency constraints.  A choice of public or private clouds is key to adding capacity for managing growth as well as dealing with “cloudbursting” scenarios for optimizing spending.

Commitment to Cloud Portability

Cloud Foundry is committed to preserving cloud portability, now and in the future. In this context, it provides an abstraction layer for running applications without the application being aware of where it is executing.  In Cloud Foundry, the components of a PaaS offering that applications depend on (e.g. runtimes, messaging, data access) are built using open development frameworks and technologies (Java, Ruby, Node.js, MongoDB, MySQL, PostgreSQL, RabbitMQ, Redis). Moving applications between Cloud Foundry instances is simple with the vmc command line tool.

Cloud Foundry Core Providers

Today we announce five Cloud Foundry Core compatible instances providing developers a choice of deployment destinations.

Each of the partners below are committed to the Cloud Foundry Core program and preserving cloud application portability now and in the future.

  • AppFog – enables Enterprise and Start-up developers to deploy, manage and scale apps across public, private and hybrid infrastructures
  • CloudFoundry.com – a public instance of Cloud Foundry operated by VMware on vSphere infrastructure
  • Micro Cloud Foundry™ – a complete instance of Cloud Foundry on your own computer
  • Tier 3 – enterprise-grade IaaS and PaaS in one comprehensive platform, with support for global deployments
  • Uhuru Software – the Uhuru AppCloud brings the best of .NET and Open Source together.

Ultimately Cloud Foundry Core is the focal point for a network of compatible Cloud Foundry instances and distributions to take shape and grow, preserving choice for the developers and consumers of applications.

Summary

Cloud Foundry remains as committed as ever to Open PaaS and we appreciate the tremendous support from our ecosystem of partners and strong open source contributions from the developer community. Through Cloud Foundry Core we will continue to deliver on our commitment to preserve cloud application portability.

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Polishing Cloud Foundry’s Ruby Gem Support

The Cloud Foundry team has released new features to improve management of Ruby gems in apps running on CloudFoundry.com. These features include support for using Git URLs in Gemfiles, handling of the BUNDLE_WITHOUT environment variable, and platform specification to control the gem installation process. With these improvements, it is now easier than ever to get your existing Ruby projects up and running on CloudFoundry.com.

History

In 2003, RubyGems was launched as Ruby’s package manager. Six years later, Rubyists began using Bundler–a means for managing and installing gem dependencies in the context of an application. The combination of these two technologies has given developers the ability to run Ruby applications without having to worry about the specific gem version, gem source, or the platform that is available on the server.

In this blog, we will review the changes in the Cloud Foundry code that provide better support for gems. We will discuss using Git URLs as a gem source, how you can use BUNDLE_WITHOUT to manage gem groups, and how Cloud Foundry installs only the platform specific gems that make sense.

Using Git URLs as a Gems Source

Most of the time, developers use default “rubygems” source to fetch gems from the official Ruby Gems repository. Alternatively, Bundler supports Git source URLs in order to associate a gem name and version with a certain Git repository. In this latter scenario, Bundler will automatically clone the latest version of a gem and install it. As of today, CloudFoundry.com fully supports using these Git URLs.

How does it work?

In the same way that Bundler installs gems from a Git source URL, resolving Git branches and references, Cloud Foundry locates Git dependencies in the Gemfile.lock, fetches the source code, and checks out the specified revision. Next, Cloud Foundry will find all of the gemspecs, build the gems and inject them into the application exactly where Bundler expects to see them. When the application gets started via “bundle exec,” Bundler picks up all installed dependencies as usual.

To optimize the staging process, CloudFoundry.com also caches fetched Git sources. For example, if you reference the Rails Git URL, CloudFoundry.com clones the repository and caches it in the local filesystem, so the next request for Rails will use the cache. If a requested revision is missing from the cache, there is no need to clone from scratch because only the missing objects will get downloaded from the original repo.

Example

Let’s take a look at the application padrino shortener-demo. This demo is using the latest version of Padrino (a Sinatra-based web framework). As we can see in application Gemfile, gem padrino is requested to be provided from GitHub:

...
gem 'padrino', :git => 'git://github.com/padrino/padrino-framework.git'
...

The padrino gem Git revision was locked in Gemfile.lock.

...
GIT
remote: git://github.com/padrino/padrino-framework.git
revision: 17c748f8173185e57f9254829f53ee34327fa90d
specs:
padrino (0.10.1)
...

As we push this application, we provide the MongoDB service.

$ vmc push shortener
Would you like to deploy from the current directory? [Yn]:
Detected a Rack Application, is this correct? [Yn]:
Application Deployed URL [shortener.cloudfoundry.com]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [128M]:
How many instances? [1]:
Bind existing services to 'shortener'? [yN]:
Create services to bind to 'shortener'? [yN]: y
1: mongodb
2: mysql
3: postgresql
4: rabbitmq
5: redis
What kind of service?: 1
Specify the name of the service [mongodb-9e641]: mongodb-shortener
Create another? [yN]:
Would you like to save this configuration? [yN]:
Creating Application: OK
Creating Service [mongodb-shortener]: OK
Binding Service [mongodb-shortener]: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (38K): OK
Push Status: OK
Staging Application 'shortener': OK
Starting Application 'shortener': OK

Now, if we check application logs, we can see that padrino was provided to the application among other gems:

$ vmc logs shortener
====> /logs/staging.log 3.2.3 <====
….
Need to fetch mongo-1.3.1.gem from RubyGems
Adding mongo-1.3.1.gem to app...
Need to fetch bson-1.3.1.gem from RubyGems
Adding bson-1.3.1.gem to app...
Need to fetch tzinfo-0.3.29.gem from RubyGems
Adding tzinfo-0.3.29.gem to app...
Need to fetch padrino-0.10.1.gem from Git source
Adding padrino-0.10.1.gem to app...
Need to fetch http_router-0.10.2.gem from RubyGems
Adding http_router-0.10.2.gem to app...
Need to fetch rack-1.3.2.gem from RubyGems
Adding rack-1.3.2.gem to app...
...

And now we can generate a shortened URL and track its visitors.


There may be situations where using the official published gem versions is not enough, such as using the current HEAD of the project, or specific branch, tag or fork. Cloud Foundry supports Git URLs in Gemfile, so it’s easy to point to a Git repo with the exact version of the library you need, and it will be downloaded and packaged as a part of your Cloud Foundry app.

Using BUNDLE_WITHOUT to Manage Gem Groups

Gemfiles support the grouping of gems so that a test server, for example, can get a different group of gems than a production one. The second feature we are announcing is that Cloud Foundry allows developers to take advantage of these groups by using the BUNDLE_WITHOUT environment variable, just as you would locally. Setting BUNDLE_WITHOUT causes Cloud Foundry to skip installation of gems in excluded groups.

Example

BUNDLE_WITHOUT is particularly useful for Rails applications, where there are typically “assets” and “development” gem groups containing gems that are not needed when the app runs in production.

Let’s take a look at an example. Spacely is a Rails 3.2 application that provides image upload via drag and drop. The Gemfile contains several gems in a group called “assets.”

...
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platform => :ruby

  gem 'uglifier', '>= 1.0.3'
end
...

Let’s push the application to CloudFoundry.com without the gems in the “assets” group. We need to run “bundle install” first to generate a Gemfile.lock, which Cloud Foundry requires. Spacely includes a VMC manifest.yml file, so we can easily push the app without the full interaction. Notice that we push the app with the “–no-start” flag, so we can set the BUNDLE_WITHOUT environment variable before starting the application. We will make this step easier in the new version of VMC by enhancing the manifest support.

$ bundle install
$ vmc push --no-start
Would you like to deploy from the current directory? [Yn]: 
Pushing application 'spacely'...
Creating Application: OK
Creating Service [spaceltdb]: OK
Binding Service [spaceltdb]: OK
Uploading Application:
  Checking for available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading (6M): OK   
Push Status: OK

Now let’s set BUNDLE_WITHOUT and start the application:

$ vmc env-add spacely BUNDLE_WITHOUT=assets
Adding Environment Variable [BUNDLE_WITHOUT=assets]: OK
$ vmc start spacely
Staging Application 'spacely’: OK                                               
Starting Application 'spacely': OK

Now, if we check application logs, we can see that gems such as “sass-rails” are not installed.

$ vmc logs spacely
====> /logs/staging.log <====
….
Adding carrierwave-0.6.1.gem to app...
Adding activesupport-3.2.6.gem to app...
Adding i18n-0.6.0.gem to app...
Adding multi_json-1.3.6.gem to app...
Adding activemodel-3.2.6.gem to app...
Adding builder-3.0.0.gem to app...
Adding fog-1.5.0.gem to app...
...

Cloud Foundry also supports the exclusion of multiple groups. For example, if Spacely included a “test” group, we could have excluded gems in both assets and tests with “vmc env-add spacely BUNDLE_WITHOUT=assets:tests”.

Excluding Gems by Platform

Bundler allows developers to use the “platforms” method in Gemfiles to specify that a gem be used on particular platforms. This is the final piece of polish for gems that we are adding today. Cloud Foundry will skip the installation of gems on irrelevant platforms, as it should.

The following Gemfile specifies that the rb-inotify gem should be used in non-Windows environments, while three other gems are for Windows only. When this app is deployed to CloudFoundry.com, only the rb-inotify gem will be installed.

# Unix Rubies (OSX, Linux)
platform :ruby do
  gem 'rb-inotify'
end

# Windows Rubies (RubyInstaller)
platforms :mswin, :mingw do
  gem 'eventmachine-win32'
  gem 'win32-changenotify'
  gem 'win32-event'
end

The “platforms” designation can also be used to selectively install gems based on Ruby versions. For example, certain gems can be excluded when switching between Ruby 1.8 and Ruby 1.9.

Support for Windows Gemfiles

When a Gemfile.lock is generated on a Windows machine, it often contains gems with Windows-specific versions. This results in versions of gems such as mysql2, thin, and pg containing “-x86-mingw32.”

For example, a Gemfile that contains the following:

gem ‘sinatra’
gem ‘mysql2’
gem ‘json’

When you run “bundle install” with the above Gemfile on a Windows machine, it would result in the following Gemfile.lock:

GEM
  remote: http://rubygems.org/
  specs:
    json (1.7.3)
    mysql2 (0.3.11-x86-mingw32)
    rack (1.4.1)
    rack-protection (1.2.0)
      rack
    sinatra (1.3.2)
      rack (~> 1.3, >= 1.3.6)
      rack-protection (~> 1.2)
      tilt (~> 1.3, >= 1.3.3)
    tilt (1.3.3)

PLATFORMS
  x86-mingw32

DEPENDENCIES
  json
  mysql2
  sinatra

Notice the “-x86-mingw32” in mysql2′s version number. Previously this would cause a failure on deployment, as Cloud Foundry would attempt to install the Windows-specific gem. However, now Cloud Foundry will install the Ubuntu-friendly version of these gems without requiring any modification to Gemfile.lock. Developers can seamlessly migrate their app between local Windows machines and CloudFoundry.com.

Conclusion

The ability to use Git URLs as a dependency source and specify which gem groups should be installed depending on the platform provides greater flexibility for Ruby developers. The work we have done to enhance gem and bundler support is part of our commitment to providing a Platform as a Service that meets real needs of Rubyists building and deploying applications in the cloud. Follow us on Twitter at @cloudfoundry and let us know how these new features are working for you!

- Jennifer Hickey and Maria Shaldibina
The Cloud Foundry Team

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Students Compete Building Apps on Cloud Foundry for Social Good

On July 13, VMware Foundation kicked off #ContributingCode, a two-week long event in Palo Alto, California, to encourage local students to build applications focused on a social and community benefit. With over 100 local students and VMware interns participating, we encouraged the students to develop in teams. Their projects were judged on their potential social impact, alignment with the sponsored app challenges, and competent software engineering.

Using Cloud Foundry as their platform, the teams could choose to develop their applications among several frameworks, including Spring, Node.js and Ruby on Rails. They could also use a variety of application services. In our experience, such events have produced great ideas and apps, but there is precious little follow though after the competition. Since social good was the theme of the event, we also required the teams to open source their code, so others could leverage and continue the good work.

We were delighted by the level of interest and creativity shown by the participants. In keeping with the larger development trends, a majority of the apps submitted were mobile apps and apps that integrate with social platforms like Facebook and Twitter. Use of multimedia and geo location features was popular and several teams chose to work with Node.js, Spring and MongoDB.

Here are the top three apps.

Grand Prize Winners

First place:

Team Dotly built a mobile app named Civicly for Android using Node.js and received the top score. Civicly enables community residents report and track local issues. The app serves to warn others of malfunctioning civic resources and helps keep municipal authorities more accountable. The Parse API is used to store the user data and the issues posted from the Android app. The Node.js app running on CloudFoundry.com receives notifications of the issues in real time and updates the web application via web sockets.

Second place:

Team Buddy built the Charity Match Facebook app which helps Facebook users find charities by mining the interests identified in their Facebook account and suggests charities to donate to. The app was built using the Spring MVC web application framework, Facebook and the Charity Navigator APIs. As shown in the architecture diagram provided by the team below, the Login view and its corresponding controller communicates with Facebook security APIs to authenticate users and authorize the app to collect user information. The Home view and its corresponding controller fetch and analyze the user’s information to derive the charity search keywords that are then fed into Charity Navigator search. The results are then parsed and displayed so the user can select and donate to a list of charities that are most aligned to his or her interests.

Third place:

Team RedThread placed third. RedThread is an app to help you post and view photos of places of interest in real time. This way you are always up to date with information on suspicious or unsafe activity and helps you to know the most relevant information in the location you want to visit. This app is written using Node.js.

To see a complete list of winners, click here.

Conclusion:

A big thanks to all the participants and our partners Code for AmericaSocialCoding4Good and GitHub! It was surprising how much was accomplished in just two weeks. We look forward to doing more of these in other locations as well.

Follow #ContributingCode on Facebook.

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Redis in Action with Cloud Foundry

Redis is a popular open source, advanced key-value store project sponsored by VMware. It has been a Cloud Foundry core service from day one and is widely adopted by developers who love its performance and flexibility. In the following guest post we introduce Dr. Josiah L. Carlson who discusses his upcoming book Redis in Action and  describes how Redis is continuing to change the lives of developers.

Guest blog by Dr. Josiah L. Carlson, a well-known contributor on the Redis mailing list

Over the last several years, a wide variety of non-relational databases have been created to offer varying balances of performance, reliability, and non-relational data models. In late March of 2009, Redis arrived in the open source world and has since been adopted by developers at an increasing rate, driven by a combination of performance, flexibility and a data model that programmers are already familiar with: standard data structures.

To support the growing need for operational simplicity, VMware introduced Cloud Foundry as a way to reduce the effort and overhead required to install and configure a carefully chosen variety of services, languages and frameworks. Not surprisingly (at least to those of us in the community), Redis made the cut at launch, and Cloud Foundry has made a previously easy setup procedure even easier. Assuming you already have the open source vmc tools installed and already have an app set up and configured, installing Redis for use in Cloud Foundry is as easy as:

$ vmc create-service redis --bind <app>

Once you have Redis installed, using it from one of the supported Cloud Foundry languages is only slightly different than if you were hosting your own infrastructure, primarily due to configuration. There are a few articles that discuss the configuration and use of Redis with Cloud Foundry with Ruby, Java/Spring, and Node.js.

Why Redis?

Whenever I talk to an engineer who isn’t familiar with Redis, the first question I am asked is “why Redis?” On the one hand, the answer is very simple: It makes our jobs as engineers easier by addressing problems we need to solve better, in many cases, than relational databases, document databases, or plain key-value databases. By combining five different and familiar data structures stored 100 percent in memory (but also written to disk in one of two ways), Redis offers performance and data access features that are top-notch. An increasing number of engineers, myself included, owe their success in no small part to the use of Redis as a production service.

My history with Redis

I got my start using Redis from a friend and manager who assigned a bug tracker ticket to me, mentioning that I might want to take a look at Redis to handle an internal search over some client data. Nothing too extraordinary, and it was something that Lucene could easily handle out of the box. But there was something about Redis that caught my attention. Because it was only my second task since joining the company, it was reasonable to take a little time to explore a new technology. Around two weeks later, we deployed a new internal search engine that was built using Redis hashes to store sortable data and Redis sets to store search terms. A series of set intersections followed by a sort call actually executed the search, which filtered and sorted over some 60,000 records in 50 milliseconds, or around 200 times faster than what our previous system managed. (I have previously written about a more web-page specific type of search on my blog.)

After arriving at such easy and quick success developing and deploying applications with Redis, I joined the mailing list with a few feature requests. Ultimately, only one of my requested features made it in, but in the Redis community I found a wide variety of problems posted by other developers, and I couldn’t resist offering advice on possible solutions. The breadth of problems posted to the list, along with my own experiences developing over a dozen Redis-backed tools and systems for my now past and current employers, combine to fill the pages of Redis in Action with real problems and their solutions. These are solutions that you can use today on a variety of problems with some of the most popular programming languages.

While Redis in Action is not yet complete, you can find four chapters available today through Manning’s Early Access Program, with at least one additional chapter to be released in June, and one to two chapters every month until it is done. Python source code is included in the book but translations to Ruby, Java and Node.js will be available before the printed edition is available.

Use the code 12ria39 for a 39 percent discount when you pre-order Redis in Action at: http://www.manning.com/carlson.

Dr. Josiah L. Carlson is well known as an active and helpful contributor on the Redis mailing list. He has given talks about real-world uses of Redis, including building a self-service ad network, prioritizing task queues, web spiders, a Twitter analytics platform, real-time search engines and more.

The Cloud Foundry Team
Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Cloudfuji Accelerates Delivery of Its Open Source Application Store with Cloud Foundry

Unlike most Platform as a Service offerings today, the open and extensible nature of Cloud Foundry means developers will not be locked into a single cloud or remain beholden to the feature set delivered based on a vendor’s timeline. This month, in our series of guest blogs by application developers, we are featuring the story of Cloudfuji, a modern business application store that uses Cloud Foundry to keep itself nimble and focused on getting to market quickly.

Guest blog by Sean Grove, co-founder of Cloudfuji:

We built Cloudfuji, our modern business application store, on the principle that amazing apps should be 1) easy to make, 2) easy to find, and 3) seamlessly work together. We all have had the experience of data getting stuck in the silos of our individual departmental support systems. Lacking integration, we have been forced to manually copy and paste data from one app to another or using one-off API integrations between the apps. In that scenario, the process of simply finding, trying, provisioning and maintaining the best application can be a nightmare.

With Cloudfuji’s application store, end users can find and instantly launch high-quality open source business applications for bug tracking, agile projects, or CRM, to name a few, that are loosely coupled in a publish-subscribe model with a standardized event schema. This allows them to work not only with each other, but also with the outside world and proprietary legacy applications. This also brings enterprise-wide visibility into events such as real-time notifications on product, sales and marketing activities, regardless of which specific apps are being used. The app development pattern becomes one of small, focused tools that excel at their specific function, and allow other apps to handle anything else. This is the future of the application ecosystem.

The future has demanding technical requirements

 
Figure 1: Cloud Foundry and Cloudfoundry.com used in Stateless Binary Execution Engine
Figure 1: Cloud Foundry and CloudFoundry.com used in Stateless Binary Execution Engine

We use the Rails framework for our front end, which allows us to model our problem domain and iterate extremely quickly. Ruby is mainly used as a light layer for accessing more powerful services underneath such as Mailgun, Redis, RabbitMQ, and AWS S3. Once a user launches an app, we deploy it to the Binary Execution Environment (BEE).

Initially, we had built out our own LXC-based infrastructure, which was a Sisyphean and wasted effort in hindsight. We were continually reinvening a wheel called PaaS that was readily available in amazing forms right off the shelf. We tried a popular Ruby PaaS provider but faced challenges working with their closed platform as we had no influence over their release schedule.

When the open source Cloud Foundry project became available, we quickly got it running within two days without needing any support and had a provisioning system written for it within the week! Since then, we have scaled out our Cloud Foundry instance, built custom end-points to handle any deeper integration or visibility we need into the system and added CloudFoundry.com. The BEE is designed to be completely stateless and the data is decoupled from it. Because the BEE is not associated with data that an app relies on, we can replace it with a new one if the need arises, such as an outage in underlying infrastructure, and temporarily migrate the apps.

Why Cloud Foundry works for us

  • Time-to-market: Although our experience with other PaaS layers led us on a convoluted path, we were able to immediately piggyback on the great work already done on Cloud Foundry. This meant we could stop focusing effort into the lower layers of PaaS–custom kernels, LXC-based para-virtualization, resource management, node health, routing systems, system-level library compatibility and consistency. Time is the biggest killer for startups, and we could easily have stalled in the quagmire of rolling out our own systems. We consider it a bullet dodged.
  • Momentum: Having an open platform where the community can chip in means continuous improvement of the platform in faster cycles. When an open source project has the momentum of a whole community behind it, other projects simply cannot keep up. We’ve already benefited tremendously from work that wasn’t done by us, but by other extremely capable individuals. And in turn, when Cloudfuji needs a new feature, we have the choice of putting it out to the mailing list/community or rolling up our sleeves and writing it ourselves. And for all our respect for other platforms out there, none of them offer anything like this.
  • Target API-identical clouds with a single config setting: Getting a Cloud Foundry system for development in the cloud is a very simple exercise. Although we’re currently also running our own instance of Cloud Foundry, ultimately we expect to be able to offload more to the CloudFoundry.com service when it comes out of beta and can match our demanding needs. We expect that transition to happen almost seamlessly because of the design of both our system and of the Cloud Foundry project.
  • Flexibility to address changes to our business model: Finally, the ability to seamlessly run applications on multiple Cloud Foundry clouds, i.e., move from a public cloud to a private cloud, or vice versa, enables us to plan for a future offering where we can run a Cloudfuji appliance behind the firewall for parties that can’t use public clouds (for example, to meet local compliance needs or because of geographical location).

Taking the next steps

Applications should be easy to create and use. IT services should focus on their strengths and get end users the resources they need, when they need them. We live in a world where we get to take PaaS for granted and leverage great technology that is readily available. We all stand on the shoulders of giants, and we build more amazing products faster than ever before because of it. It’s a cycle we all need to embrace and increasingly reap the benefits from. Choose the open platforms that have strong leadership and excellent communities, and get behind them. It is amazing that we at Cloudfuji are building something of such scale and internal complexity, while staying lean and moving fast with the help of various communities. We couldn’t do all of that without Cloud Foundry.

-Sean Grove

Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Cloud Foundry Powers Data Sets for Mumbai

This is the third post of a series of guest blogs by application developers. We are featuring a use case by Romin Irani, an individual developer who built APIs for valuable data sets in the City of Mumbai as a public service and hosted them on Cloud Foundry.

Guest blog by Romin Irani, Mind Storm Software

Access to world-class infrastructure coupled with the pay-per-use model has been a dream come true for start-ups and individual developers. For an individual developer and entrepreneur like me, the way I develop and make my applications available for others to use or evaluate has been permanently transformed.

Mumbai Public Data APIs

It has always been difficult for me to get various data sets for the city that I live in, i.e., Mumbai, India. Mumbai has a population of about 20 million people living in 233 square miles (603 sq. km.). Like many urban centers in developing countries, the city is growing faster than its government is able to provide services and infrastructure for its citizens.

If provided some of the city’s public data sets with APIs for those data, developers can come up with a variety of applications to harness that information and build applications to benefit the city residents. So I took the small step of building out a few data sets, such as:

  1. Help lines - Essential services like hospital phone numbers with locations and police emergency numbers. Mumbai has no central emergency telephone number like 9-1-1, so essential service numbers are helpful to have in one place.
  2. Blood banks - Nearly 60 city blood banks with phone numbers which can be looked up by their location, although much of the stocking and inventory-keeping is still done manually.
  3. Taxi and auto rates – Taxi/auto rate card fares as published by the Mumbai Administration for residents and visitors to correctly determine their meter charges and fares.

City of Mumbai Public Data Sets on Cloud Foundry

This type of scenario works very well with MongoDB.  The application is written in Node.js, interacts with the Cloud Foundry MongoDB service and provides JSON data for the various Mumbai data sets. Over time, I hope to keep introducing new data sets. To develop their own web, desktop or mobile clients, developers can simply invoke the REST Endpoints for each data set.

The data set is exposed via a REST API that is hosted on CloudFoundry.com:  http://mumbaidata.cloudfoundry.com

Why is Cloud Foundry is my preferred PaaS?

The impetus to learn more about Cloud Foundry came via CloudSpokes, a community-driven marketplace where developers take up programming challenges and get paid for that work. I have submitted code for more than six challenges now including some winning entries–all on Cloud Foundry.

These include a Node.js stock ticker, a salesforce.com Login Component, a Web page PDF-to-Box bookmarklet, and a salesforce.com data exporter that generated Word files from salesforce.com data–all of which are hosted and running great on Cloud Foundry. Top reasons why Cloud Foundry is my preferred PaaS:

  • Cloud Foundry provides a non-intrusive model for my Java applications. When I want to run a Java Web application that uses my home-grown MVC framework or use the Spring framework, it is all supported. I am no longer looking for workarounds.
  • It is easy to use, especially with the STS plug-in for Eclipse which makes developing and deploying with Cloud Foundry a breeze. The fact that you can be in a single environment to develop and deploy to the cloud is very nice! That coupled with being able to start and stop the applications, inspect the logs and even deploy to the Micro Cloud Foundry definitely boosts productivity. This is in sharp contrast to moving in and out of multiple environments for each stage of developing, testing and deploying your applications.
  • Also, I have access to services like MongoDB, RabbitMQ and many others that I can quickly integrate into my applications, as well as use the programming stack that is appropriate for the job.

What’s next?

One of my goals over the last year has been to develop a hands-on cloud computing course and I have struggled with the choice of a PaaS platform that would allow programmers with different language skills to all come under one roof and go through the course. With its polyglot nature, I hope to build that course out soon with Cloud Foundry as the engine running all the samples. The fact that I can even run locally via Micro Cloud Foundry is a huge plus.

I truly believe that the polyglot programmer has arrived and an open PaaS like Cloud Foundry is a great enabler to making that a reality.

Signup for Cloud Foundry today, and start building your own cool app!

Romin is a published author of several books and articles, and contributes regularly to ProgrammableWeb, where he focuses on API news. He currently runs a startup, Mind Storm Software, which is focused on quality hands-on training on cloud computing platforms and mobile development.

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

More than 2,000 Developers Attend Cloud Foundry China Open Tour

The first two stops of Cloud Foundry Open Tour at Beijing and Shanghai were huge successes! We had about 1000+ developers show up at each city for this one day event. 10 speakers from across the world delivered 15 high quality and deeply technical sessions to attendees.

Open Tour is not only a developers’ grand gathering to learn about Cloud Foundry, it’s also for partner executives and university professors to share their success story on Cloud Foundry, and online media to live broadcast the event and interview speakers.

Developers in China are extremely passionate about Cloud Foundry: attendees showed up at the venue before 7AM (for a conference that starts at 9AM); people were lining up for registration at 7:30AM. This phenomenon has only happened before at the Apple Store. There were developers flying to Beijing and Shanghai from south and west side of China just for this event, and every single session at the conference was standing room only.

Big THANKS to our team of speakers: Charlotte Yarkoni, Mark Lucovsky, Patrick Chanezon, Chris Richardson, Alan Ren, Victor Jieh, Stephen Hu, Bill Sun, Figo Feng and Long Wang from the Cloud Foundry global and China team! Our great appreciation and many thanks to all partner speakers: Lei Cong from Sina App Enginee, Tuoc Luong from SNDA Grand Cloud, and Guoxiong Dai from InGeek Cloud.


Staying ‘Till the End’

No developer left the conference before it was over. We had two keynotes delivered by Mark Lucovsky and Chris Richardson in the morning – Cloud Foundry Technical Overview and Bootcamp. Then the ballroom separated to 3 different breakout sessions for topics about languages and frameworks, cloud databases, and solution partners. The Open Tour is a purely developer conference. All sessions include our partners and are deep dives into the code level (which are developers’ favorite, right?). Our elite speakers and well-designed content are the keys to the success.

The keynotes were full of vision, mission and decorated slides, but most importantly they start from code! Mark’s keynote “Developer Perspective” clearly re-emphasized that the Open Tour is a developer conference. After a quick Cloud Foundry introduction, Mark switched to coding mode, he went through a complicated sample app which leveraged many of the key features of Cloud Foundry. He then shared his thoughts on the producer/consumer pattern, node.JS server, tunneling (“caldecott”), redis, and much more. Chris’ “Cloud Foundry Bootcamp” session led people deeper into Cloud Foundry. Chris used 100+ slides to give a very detailed introduction and demo to help developers with different backgrounds to get started with Cloud Foundry.

In the afternoon, Patrick Chanezon and Chris Richardson hosted the track for programing languages and frameworks. This was the most popular track. “Node.JS Introduction”, “Spring into the Cloud” and “Using Ruby in Cloud Foundry” gave developers a more clear understanding of the power of multi-framework support in Cloud Foundry. Chris, Victor and Long Wang contributed 4 very interesting sessions in the Cloud database track. “SQL, NoSQL, NewSQL? What’s a developer to do?”, “Using MongoDB in Cloud Foundry”, “Data Director” and “GemFire/SQLFire, the RAM DB in Cloud Foundry” gained a lot of attention.

Partner Showtime

Enabling partners and making them successful is an important pillar for Cloud Foundry. It is our great honor to invite three famous public cloud service providers, Sina App Engine, Shanda Grand Cloud & InGeek Cloud, to join the events and announce their partnership with VMware to promote adoption of Cloud Foundry. SINA App Engine (SAE), the largest Open Platform in China with 200,000 developers and 100,000 apps, launched its first Cloud Foundry based Ruby PaaS engine. InGeek, by leveraging the vSphere based IaaS cloud, launched a PaaS cloud with Cloud Foundry and vFabric Data Director integrated via Service Gateway. Three tier-1 universities in China, Tsinghua University, Fudan University & Shanghai Jiaotong University, also joined the event. They have formed partnership with VMware China R&D on university innovation programs to drive Cloud Foundry adoption via course ware, joint lab & EDU-PaaS private cloud.

Interesting Sidelights

A developer conference is about fun, we have some interesting sidelights to share:

Weibo: For some reason, there is no Twitter access in China, but we have SINA Weibo, the China version of Twitter with about 300+ million users. With the help of Google Translate, Mark, Patrick and Chris interacted with their Chinese fans at Weibo. They even registered their own Weibo account to start tweeting and win a lot of followers! Here are the links to their account: @大牛马克 for Mark, @快乐的法国极客 for Patrick and @温文尔雅的程序员大爷 Chris. Patrick’s name means “most joyous French geek”, and Chris’ name means “gentle programmer’s uncle”. Mark’s name means “Big Bull Mark”, the story is at below. These accounts were all getting developers feedback to their sessions.

From Chairman to Big Bull: Mark was famous for his chair story. He didn’t bring his chair for the China trip, but he won a lot of new fans in Beijing and Shanghai. He was surrounded by developers after he finished the keynotes, and  people even tried to ask him technical questions in the men’s room! In the Chinese developer community, the “Big Bull” is a kind of respectful title for a distinguished technician or developer, so we made a stone stamp logo (the red one) for Mark and named his Weibo account @大牛马克 (the Big Bull Mark). You will probably soon see this logo in Mark’s email signature.

Li Bai and Cloud: Patrick is a big lover of Chinese ancient poems. He started his node.JS session by quote Li Bai and Wang Wei, the two major Chinese poets of the Tang dynasty. These two sages use poems to describe beautiful clouds over 1200 years ago, but they probably couldn’t imagine that we will quote the poems in today’s Cloud computing era to make the perfect combination of art and technology.

Weibo Feedback

Developers kept track of their feedback to the Could Foundry Open Tour on Weibo, the following are some interesting quotes:

  • Look forward to see the 100% open source of Cloud Foundry, this will provide strong foundation for enterprise to build private cloud; this is the Linux in the Cloud. P.S., love to use MacOS for cloud development, recommend to all UNIX developers. From @乔布斯胡
  • Join the VMware Cloud Foundry event today, get a USB stick, T-shirt and a substantial buffet lunch. The event is good in general, the key advantage of Cloud Foundry is developers can use their familiar programming language and framework to build app, easy to use and config, love it. From @ArKiarX
  • The Cloud Foundry Open Tour is very gelivable, depth technical sessions, great speakers, and a good buffet lunch. From @忘了游泳的鱼ooO
  • The SINA guest speaker mentioned about eco-system, the open source based Cloud Foundry is building and developing the cloud eco-system. From @中国董永乐
  • Learnt quite a lot in Cloud Foundry Open Tour, feel more and more exciting about Cloud! From @奔跑的大兵
  • Patrick is the most joyous speaker of the day, he even trying to access Twitter. From雪中

The Open Tour is continuing across the world

Cloud Foundry Open Tour 2012 is a global series of one day developer events, Beijing and Shanghai are the first two stops. The team is heading to Kiev, Moscow and London. Come join us and feel the power of Cloud Foundry!

-The Cloud Foundry China Team

Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Cloud Foundry’s First Birthday: More Clouds, Code, Community and Partners

Today we celebrated Cloud Foundry’s first anniversary with additional multi-cloud deployment choices, new tools for operating large scale Cloud Foundry services, a new system for managing open source contributions and new partnerships.

More Clouds

In a recent post, we’ve explained why preserving multi-cloud choice and flexibility is so important in the cloud era. As an open platform as a service, Cloud Foundry is designed to run on a wide variety of clouds and cloud infrastructures.

In a live demo today we demonstrated how Cloud Foundry is making multi-cloud a reality with the deployment of an application to four different Cloud Foundry-based clouds within minutes without any code or configuration changes.

More Code

Today we introduced and open sourced Cloud Foundry BOSH, an open source tool chain for release engineering, deployment and lifecycle management of large scale distributed services.

Designed to enable the systematic and prescriptive evolution of services, BOSH facilitates the operation of production instances of Cloud Foundry. BOSH automates a variety of cloud infrastructure and allows targeted service updates with consistent results and minimal to no down time.

Proven in the course of operating CloudFoundry.com, BOSH is available under an Apache license from CloudFoundry.org and currently includes support for VMware vSphere as well as early support for Amazon Web Services.

Additional technical details on BOSH are available on GitHub.

More Community

Cloud Foundry has been an open source project from the day it was released. The project is active on GitHub and has seen broad and meaningful contributions from the developer community, including support for dozens of major developer frameworks and application services.

Today we unveiled the new CloudFoundry.org,  a new source code management system for Cloud Foundry. The new system converges Cloud Foundry source code to a single set of public code repositories on GitHub integrated with Gerrit for code reviews and Jenkins for continuous integration.  The new system enables developers to submit day-to-day change requests directly to the public repository. It simplifies community code contributions, improves code quality and offers greater visibility into code changes as they happen.

Additional details on how to contribute and participate are on the Cloud Foundry open source blog.

More Partners

There are a broad range of companies investing in and around Cloud Foundry, including development and deployment tools, public cloud operators, private cloud distributions, application service developers and ISVs.

Today five additional companies announced they are joining the Cloud Foundry ecosystem:

  • Cloud9’s browser-based integrated development environment now supports deployment to CloudFoundry.com.
  • Collabnet is making Cloud Foundry a core deployment platform for their suite of agile enterprise development tools.   
  • ServiceMesh has added policy-driven deployment and governance of Cloud Foundry to their enterprise Agility PlatformTM.
  • SOASTA’s CloudTest Lite® rapid test creation and real-time analytics now offers support for Cloud Foundry deployment targets.
  • X.commerce, eBay’s open, end-to-end commerce technology platform, is building upon Cloud Foundry.

We are in the midst of the Cloud Foundry Open Tour – a series of developer days across the globe attended so far by thousands of developers.

Upcoming dates include:

We are looking forward for an exciting second year with more code, more community, more partners and more clouds.

-The Cloud Foundry Team

Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Introduction to Cloud Foundry Integration for Eclipse 1.0

Cloud Foundry Integration for Eclipse allows users to deploy applications to Cloud Foundry targets from either Eclipse IDE JEE Indigo or STS (SpringSource Tool Suite) 2.9.0 or higher.

Cloud Foundry Integration for Eclipse 1.0 is the first version of the integration to be open sourced under the Eclipse Public License  (EPL), and cannot be upgraded from earlier versions of Cloud Foundry Integration for Eclipse. Users wishing to install it must first uninstall any prior version of Cloud Foundry Integration for Eclipse.

Detailed steps on how to install the Cloud Foundry Integration for Eclipse can be found at:

http://start.cloudfoundry.com/tools/STS/configuring-STS.html

After installing the Cloud Foundry Integration for Eclipse, a Cloud Foundry target must first be created through the Eclipse New Server wizard, and URL and account information for either the public cloud (i.e., CloudFoundry.com) or your local cloud target needs to be specified. Create an account on CloudFoundry.com to deploy applications by going to:

https://my.cloudfoundry.com/signup

For debugging support, users are encouraged to obtain Micro Cloud Foundry from:

https://my.cloudfoundry.com/micro

Once a Cloud Foundry target is created, it appears in the Eclipse Servers view, and users can deploy applications simply by dragging and dropping them from the Project Explorer into the Cloud Foundry target.

During the drag and drop deployment, a wizard allows a user to set application details  like  memory limit,  mapped application URL, and optionally, also bind Cloud Foundry services  like MySQL and vFabric Postgres databases, or RabbitMQ messaging to the application. In addition, users can select whether to automatically start the application after deployment, or even debug it if deploying it to Micro Cloud Foundry that supports debugging.

After deployment, users can continue to edit application deployment details in the Applications tab of the Cloud Foundry server editor, which can be opened by double-clicking a Cloud Foundry target in the Servers view.

Additional services can be created and bound to the application. Services available in the Cloud Foundry target are listed under the Services pane, and can be dragged and dropped onto the Application Services pane to bind them to a specific application deployed in that target. Furthermore, applications can be stopped, and updated and restarted through editor controls. Update and Restart allows users to incrementally publish local changes in an application without having to manually stop or redeploy the application.

Java debugging can be enabled via the editor for Micro Cloud Foundry, which provides support for debugging. Users can restart applications in either debug or run mode, as well as connect applications already running in debug mode to the Eclipse debugger, if the application wasn’t already connected to the debugger.

Cloud Foundry Integration for Eclipse is fully integrated into Eclipse debugging functionality, and applications deployed to Micro Cloud Foundry with debug support can be debugged the same way as if they were debugged locally. Users can set break points, step through code, and suspend applications through the Eclipse Debug perspective.

Users can also view deployed Cloud Foundry resources through a Remote Systems View, including configuration and log files.

We welcome any questions or comments at:

http://support.cloudfoundry.com/

For developers, Cloud Foundry Integration for Eclipse is available at github:

https://github.com/SpringSource/eclipse-integration-cloudfoundry

In addition, we encourage users to raise any issues or suggest enhancements at:

https://issuetracker.springsource.com/browse/STS

Issues can be raised under the “Cloud Foundry” component in the STS project.

-The Cloud Foundry Team

Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email

Cloud Foundry Further Improves Support for Ruby Applications

We have recently made many improvements to Cloud Foundry to increase Ruby developer productivity and expand support for Ruby application frameworks.  Cloud Foundry was built to run multiple languages and frameworks, and we have had support for Ruby from day one.

It is well known that VMware developers are the stewards of the incredibly popular Java Spring framework.  Therefore, Cloud Foundry’s support for running Java applications in a platform as a service environment has always been excellent.  However, many CloudFoundry.com users may not realize that most of Cloud Foundry’s system components are built using the Ruby programming language, and providing great support for Ruby applications is also very important to us.

In the past few months, we have been quietly adding features and improving support for running Ruby, Rails, Sinatra, Rack, and even JRuby applications on CloudFoundry.com.  Jennifer Hickey, a developer on the Cloud Foundry team, recently hosted a webinar on deploying Ruby applications to Cloud Foundry and covered the following topics:

  • Rails 3.1 and 3.2 applications are now well-supported on CloudFoundry.com.  The development team resolved a number of issues that had previously required workarounds.
  • JRuby applications can run on CloudFoundry.com with some simple tweaks.  Look for a blog post soon that will document the steps to deploy a JRuby application to Cloud Foundry.
  • Auto-reconfiguration for Ruby are now supported for Rails and Sinatra applications using Cloud Foundry services.  The auto-reconfiguration capability will automatically locate the initialization for Postgres, MySQL, Redis, Mongo, or RabbitMQ anywhere in your code and dynamically update them to the service(s) bound to your application.  This allows you to simply deploy your Ruby applications to CloudFoundry.com without changing any code or configuration.  We have fully detailed this feature and its technical details in a blog post: Part 1 – Auto-reconfiguration.  We also give to the option of having more control and explicitly configure your application to run on Cloud Foundry. This is documented in another blog post: Part 2 – Run-time Support for Ruby Applications.
  • Rails console, a popular tool for Rails developers to interact with their Rails application, is now available through the VMC command line client.  A blog post, Cloud Foundry Now Supports the Rails Console, was published to explain how to use this feature to connect to Rails applications.  Using the Rails console, you can easily view and modify your data, inspect state, or interact with application methods.  You can even run Rake tasks inside the Rails console to perform administrative tasks on your applications.
  • Rack applications, a modular Ruby web server interface, are now supported.  Cloud Foundry’s VMC will automatically recognize a config.ru Rackup file and use it to run your web application.  The auto-reconfiguration feature is also supported for rack applications.

If you develop Ruby applications, you will want to view Jennifer’s webinar recording and see how fast and easy it is to deploy Ruby applications on CloudFoundry.com.

We strive to provide the best PaaS support for running Ruby applications.  If you have any feedback for us on how to improve Cloud Foundry’s Ruby support, we welcome you to drop us a note at our support site.

-The Cloud Foundry Team

Don’t have a Cloud Foundry account yet?  Sign up for free today

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Email