Reposting: Make Your Customers Your Evangelists

Last month one of our customers posted an important blog on their own website, Make Your Customers Your Evangelists. The post was inspired by spending a few days in our dotCloud booth at PyCon 2012. We're sharing it here because it's great content, from a very promising company. We've posted snippets below.It's great advice for companies large and small.

More companies should bring their customers to conferences with them. 

A couple reasons:

1. Customers can often convey your use case better than you can.
  • When someone asks us what we are doing my tongue is often tied. The best parts of my explanation have come from someone else who isn't as engrossed in the problem. I get stuck in all the details. Usually a startup founder has an inordinate amount of experience in their field, which is both a blessing and a curse. They have the insight to invent something truly special, but they also have experiences that 99% of the population can't relate to.
  • A customer could possibly relate to other potential customers better. We are the 99% (no pun intended)
2. It Gives You Legitimacy
  • Any company has been asked by someone at some point, "Who would use this?" When you bring your customers along, you can push them to the front and let them do the talking. You no longer have to theoretically explain why someone would use your product. You prove that you have customers and that they thought it was useful enough to come out and tell other people about it.

I'll admit, we didn't always know the exact differences between Dotcloud and Heroku/CloudFoundry/other competitors. At the point where someone came up to us and asked us an esoteric detail about the Dotcloud implementation, our eyes glossed over and we handed the conversation over to one of the experts. But we knew enough to tell why we had chosen Dotcloud, and why we were happy with them.

Blog

About MozioMozio aggregates Planes, Trains, Buses and Ferries and integrates with local public transit and taxis to give you more accurate price comparisons across different forms of transportation.

About the author: David Litwak is the CEO of Mozio (http://mozio.com) and a Dotcloud customer. Follow them at @letsmozio! 

Filed under  //   Customer   Evangelist   Mozio   Pycon   dotcloud   start-up  

dotCloud April Hackday

Keeping It Fresh

There's nothing worse for productivity than a project that drags on forever. Here at dotCloud, we normally break things up by working in two-week sprints, but for one day each month we dial up the pace even further.

Here's how our Hack Days work: we show up early (yes, 9am is early for some of us!) and each team member pitches a project. For the next eight hours we fend off temptation (there's music! food! beer! It is glorious.) as we race to finish by our 5pm demo deadline.

Dotcloud-hackday-keeps-it-fresh
Sound like fun? Luckily for you we're hiring! Also, each month we invite a select few guests to join us. Tweet us at @dot_cloud with your next hack day idea, and we'll let you know next time we have an opening!

Here are some of the projects we came up with this month:

Prototype of remote context manager for ZeroRPC (FX Bourlet)

One of the problems not solved by RESTful web services is when there needs to be state maintained across multiple request-response cycles for things like user sessions or transactions. FX has tried out a solution to this problem with our super-popular ZeroRPC.

His concept is to allow a client to open a context on a ZeroRPC server which can be used for multiple stateful operations. The system uses ZeroRPC's native heart-beat system under the covers to make sure both client and server can take action if the logical link between them goes down. Our first real use-case is for a transactional system on top of ZeroRPC, but I'm sure you folks can come up with lots of other creative uses.

New dotCloud Help Page (Ken Cochrane)

Getting help from dotCloud is like picking ice cream at Baskin Robins: so many delicious flavours! But which to choose? I'm usually a sucker for mint chocolate chip, but sometimes even I find the options overwhelming.

Ken created a new help page for dotCloud.com that aggregates all of our support options in one place to help you figure out which is best when. You can use this early version to get direct support, check platform status and access our StackOverflow pages.

There are a few more changes that aren't quite ready yet, but should be out the door soon, so stay tuned for more updates!

Heap.io (Yusuf Simonson)

Heap.io is a project that allows for real-time, bi-directional communication between server-side processes and web apps using new concepts inspired by generative communication. By providing dynamic message routing between many autonomous processes along with authentication and authorization, heap.io will provide a flexible platform for creating complex real-world webapps.

Watch for it to be open-sourced soon!

Neo4j on dotCloud (Christophe Boudet)

Neo4j is one of the most popular NoSQL graph databases. Thanks to Christophe, Neo4j 1.7 is supported in alpha on dotCloud. Go get 'yer graph on!

ZDP: Browser Data Sync with ZeroRPC (Solomon Hykes)

ZDP is an extension to ZeroRPC for real-time data synchronization. The server uses ZeroRPC both to push data in real-time, and to expose arbitrary data manipulation methods to the client. This allows complex server-side validation, possibly coupled with authorization and authentication, making it possible to build real applications on ZDP, even when the client is not trusted.

Let us know what you think!

Filed under  //   2012   Heap.io   Neo4j   ZDP   ZeroRPC   alpha   dotcloud   generative communication   hackday   help   python    webapp  

Catch the Replay - Comparing Ember.js and JQuery implementations

For our second presentation at the Ember.js meetup we asked Yusuf, a recent hire to our engineering team, to dive into Ember.js and answer the following questions:

  • How does Ember compare to JQuery in its ability to create sophisticated web apps? What are the tradeoffs inherent to using one over the other?

Follow along with the slides:

Click here to download:
Ember_vs_jQuery_presentation_3.27.12.pdf (964 KB)
(download)

 

Filed under  //   JQuery   ember data   ember.js   meetup  

Catch the Replay - Interfacing Ember.js and racer

A few weeks back we were honored to host nearly 80 Ember.js community members at the dotCloud headquarters. It was only the 2nd Ember.js meetup in SF and we are grateful to have been invited to support the growing community.

We originally blogged about our presentations here. Basically, we asked two new engineers to jump in head first to learn Ember and do something cool with it.

Here's your chance to catch up from Joffrey's presentation:

Interfacing Ember.js and racer

 Hacking and monkey-patching Ember to implement 2-way datamapping

Follow along with the slides below:

Click here to download:
Ember-Racer-alt.pdf (994 KB)
(download)

 

Filed under  //   2012   Racer.js   datamapping   dotcloud   ember.js   meetup   vimeo  

Customer of the Month: MLstate

MLstate introduces Opa - The Cloud Language

Building a Paas on dotCloud is great! We can focus on user functionality while knowing that security and reliability is taken care of - Henri Binztok, Founder MLstate

Next Generation of Web Application Development

5796_mlstate-logo
Web application development today is painful. Countless hours need to be spent on database setup, configuring client-server communication, as well as other features that are not directly relevant to the user.

Opa changes all of that. It’s a completely new and intuitive language that was designed specifically for web development. Opa is a programing language combined with a web server, a database, and a distributed execution engine. This means that developers can write concise and elegant distributed web applications with no need for “glue code.” Additionally the Opa architecture provides unparalleled security, since all of its components are extremely tightly coupled leaving no holes for hackers to exploit.

Developing on dotCloud

Opa is built using the dotCloud services API (currently in Beta). The services API allows developers to create their own stacks be they particular flavors of existing languages such as PHP, or completely new languages such as Opa.

“We were tackling an extremely complex task. On the one hand we needed to build a new kind of web development platform that would make it easier for developers to create apps. On the other hand we needed to provide a platform that would run, scale and manage those apps as well as guarantee security and reliability. Because dotCloud runs anything and security and reliability come as a given, we were able to focus on building the best development platform in the world while leaving it up to dotCloud to power it.”-Henri Binsztok-Founder, MLState (the company behind http://opalang.org)

Click here to download:
MLState_success_story.pdf (285 KB)
(download)

Customer of the Month: Punchtab

Punchtab Lets You Create Loyalty Programs. Instantly.

The Stack: Python, MySQL, MongoDB and RabbitMQ

No one on our team wanted to do sysadmin or operations, so we decided to build on dotCloud

Learn more about Punchtab and read the case study.

Click here to download:
Punchtab_Success_Story_V3.pdf (318 KB)
(download)

Full_screenshot


 

 

Filed under  //   MongoDB   MySQL   Punchtab   RabbitMQ   dotcloud   python   

Now scale vertically (or horizontally) on dotCloud

We're happy to announce that dotCloud now supports both horizontal and vertical scaling for all production apps.

What kind of scaling does dotCloud support?

There are three kinds of scaling that you can achieve on the dotCloud platform.

  • Horizontal Scaling
  • Vertical Scaling
  • Scaling for HA

Each scaling type achieves its own set of performance improvements that you can read about here.

What is vertical scaling?

Vertical scaling improves the performance of a single service, most often a database, within your stack. The dotCloud runtime allocates resources based on scaling units. By default, your dotCloud services' resources are limited to a single scaling unit (containing 300MB of RAM), but additional scaling units can be allocated to provide more RAM, CPU time, disk I/Os and more.

Why scale vertically?

Some common examples of apps that will benefit from vertical scaling:

  • If you have a lot of data that you need quick access to (i.e. in memory as opposed to on disk). This is especially relevant for apps using Redis or MongoDB.
  • Databases containing lots of data or running complex queries
  • Application code that is highly stateful, for example a NodeJS process communicating with your frontend over long-lived websockets connections

How to use it:

To scale your application vertically, simply run the following command:

# Replace MYAPP with the name of your application (eg. ramen)
# Replace SERVICE with the name of your service (eg. db)

dotcloud scale MYAPP SERVICE:memory=1G

Of course, you can still scale your application horizontally as usual:

# scale horizontally to 3 instances
dotcloud scale application service=3

# this is actually a shortcut to the following command:
dotcloud scale application service:instances=3

References: http://en.wikipedia.org/wiki/Scalability

Filed under  //   2012   Database   NodeJS   PaaS   Vertical scaling   dotcloud  

dotCloud now supports MongoDB 2.0

We're huge fans of MongoDB and have admired the new capabilities of MongoDB 2.0 since its debut 6 months ago.

But as a leading PaaS provider, we held off on announcing formal support for the new iteration of MongoDB until reverse-compatibility would be seamless. After months of testing, our database team has given us the green light. So let's go!

Highlights of the new MongoDB 2.0:

  • Concurrency enhancements
  • Index structures are about 25% smaller and faster, meaning that you can fit more in memory
  • Journaling enabled by default and compressed for faster commits to disk
  • Smaller default stack size of 1MB to accomodate more connections
  • Compact command: speedy repair, disk space usage reductions
  • Geo-spatial features

Migration

As of today, any new MongoDB service that you deploy will be automatically be running version 2.0. MongoDB services previously deployed will not be upgraded automatically: you can perform a manual upgrade by creating a new service and migrating your data. This might require a downtime window for your application - if you're a pro or enterprise customer, simply get in touch with support and we'll help you out.

References

http://www.mongodb.org/display/DOCS/2.0+Release+Notes#2.0ReleaseNotes-Upgrading
http://speakerdeck.com/u/bwmcadams/p/whats-new-in-mongodb-20

Filed under  //   Concurrency   Database   Geo-spatial   Journaling   Migration   MogoDB   PaaS   dotcloud  

dotCloud Announces Native Support for WebSockets

We're happy to announce that dotCloud now supports WebSockets natively for all applications.

That's right. All dotCloud applications can now leverage WebSockets for real-time, bi-directional communication between the browser and the backend. With WebSockets, dotCloud developers can now build rich, real-time interaction into their application. This is especially important for building web applications on dotCloud.

It gets better. All your application URLs have already been upgraded to support WebSockets. Just update your client and server code to get started.

What are WebSockets? The WebSocket protocol simplifies bi-directional communications - without compromising security assumptions of the web.

WebSockets are a web technology providing for bi-directional, full-duplex communications channels, over a single Transmission Control Protocol(TCP) socket. The rise of real-time web applications makes them especially useful to the dotCloud community.

Before WebSockets, application developers had to rely on comet channels to achieve bi-directional communication. But comet does this with heavy HTTP header overhead -- making it inefficient for small messages.

How to use it on dotCloud: there is no special setup to begin using WebSockets. Just update your client and server code to get started. If you have an application which already uses WebSockets, it now works on the dotCloud platform.

For example, a nodejs app, which uses socket.io, will now switch automatically to WebSockets instead of using long-polling.

Below you can find several examples of using WebSockets in different languages.

Using WebSockets on the server side

Python, with gevent-websocket:
http://pypi.python.org/pypi/gevent-websocket/

https://github.com/dotcloud/geventwebsocket-on-dotcloud (Implementation example)

Ruby, with EventMachine:
https://github.com/igrigorik/em-websocket

Javascript, with NodeJS and Socket.io:
http://socket.io/

Using WebSockets On the client side

Javascript client API:
https://developer.mozilla.org/en/WebSockets/WebSockets_reference

Or even easier, socket.io in the browser:
http://socket.io/

References

Wikipedia page:
http://en.wikipedia.org/wiki/WebSocket

Comparison of the main WebSockets implementations:
http://en.wikipedia.org/wiki/Comparison_of_WebSocket_implementations

Filed under  //   WebSockets   bi-directional   dotcloud   native support   socket.io  

dotCloud to Host 2nd ever Ember.js Meetup on 3/27

We’re honored to host the SF-based Ember.js community at dotCloud headquarters on Tuesday, March 27th. Space is filling up fast so be sure to register for the event early.

At dotCloud we’re using Ember for several ambitious projects. We believe that developer productivity is a powerful force - and Ember is all about developer productivity. 

In the last month we’ve brought in two new software engineers, Yusuf and Joffrey, and asked them to get their hands dirty by jumping in to Ember.js. 
We wanted to answer the following questions:
  • How does Ember compare to JQuery in its ability to create sophisticated web apps? What are the tradeoffs inherent to using one over the other?
  • What tools can we develop to make Ember more adaptive to real time web apps?
Neither had used Ember in the past, but they’re bright guys and we figured they could handle it. And guess what? They nailed it.
So we asked them to share what they learned with the Ember.js community!
Yusuf Simonson
  • Ember developer since March 1, 2012
  • Presenting: Comparing Ember.js and JQuery across the same web app. 
We created two versions of the webapp: one using ember.js data, and one using vanilla jQuery. This allowed us to compare the versions and see where ember.js data saved us effort, and where it could be improved. In this talk, we'll present our findings.
Joffrey Fuhrer
  • Ember developer since February 22, 2012
  • Presenting: Racer.js as a model store for Ember
Using Ember-specific features, mixins and observers, we are able to make an efficient interface between an Ember Array (or any sort of custom collection implementing the Mutable Enumerable interface) or a single Ember Object and the racer model, with changes propagated two-way.

 

Filed under  //   2012   Ember   JQuery   Racer.js   community   dotcloud   ember array   ember.js   javascript   meetup