2. What we'll look at today
What's Balsamiq and what do we do
myBalsamiq a different beast in our product line
Let's do a demo
So how does myBalsamiq work ?
Towards myBalsamiq 2.0
Some community contributions
3.
4. myBalsamiq - A different beast
Always on
Support thousands of users
New technology
New deployment model
New people
New business model
6. Some cool facts
First commit Jan 2009 (mvn archetype !)
Some 4000+ commits now
DB changelog has 615 commits
Started on grails version 1.1, now on 1.3.7
Started on flexsdk 3.1.0.2710, now on custom 3.5.0.12683
Currently in gamma (invitation only, some 50 customers)
Runs on Amazon EC2, RDS, moving to clustered tomcat
Launch if everything's ready in June on Balsamiq's third
birthday
9. Main Plugins
feeds
jdbc-pool
liquibase
mail
pretty-size
pretty-time
quartz
sanitizer
shiro
spreedly
ui-performance
wordpress
10. How did Grails make a difference ?
Provides the flexibility we need so we can focus on our first
priority : user experience
Liquibase provides essential database refactoring capability
Provides the right tools for integration with third party
services (plugins, services, taglibs, commands)
Groovy language close to javascript, action script
11. Towards myBalsamiq 2.0
Third party API clients
Virtual private myBalsamiq instances
Private databases
Mockups Desktop Pro interoperability
Improved collaborative features
Alternative datastores / caches
13. Spreedly Plugin
Let spreedly deal with subscriptions for your service
SpreedlyService maps to Spreedly REST API ()
createSubscriber
findAllSubscriptionPlans
giveComplementarySubscription
...
SpreedlyTagLib provides important links
Allow your users to choose a plan for your service
Allow your users to update their credit card info
Spreedly API Guide : http://www.spreedly.
com/info/integration
14. Beaconpush Plugin
Provides a js event push model on top of beaconpush.com's
real-time push service
Works on SSL
BeaconpushService
PostToChannel
PostToUser
Mockup, Project and Site events
Created
Deleted
Renamed
Saved
...
15. Beaconpush Example
Mockup is renamed:
def beaconpushService
beaconpushService.mockupRenamed(mockup, user)
On the client:
$(document).bind('Renamed.Mockup', function(event) {
$('mockup-name').html(event.name);
}
16. Wordpress Plugin
Use wordpress as a backend web content editor
Caches content in in-memory HSQLdb instance
Refreshes periodically
Provides domain model
Category
Comment
Page
Post
Tag
User
Provides Service and Tag Lib
17. Wordpress Plugin Example
Displaying content from a wordpress page:
def wordpressService
def page = {
[page: wordpressService.getPage(params.long('id'))]
}
18. To go further
Balsamiq Web Site
http://www.balsamiq.com
Spreedly Integration Guide
http://www.spreedly.com/info/integration
Beaconpush Developer's Guide
http://beaconpush.com/guide
Sendgrid API Documentation
http://sendgrid.com/documentation/api
Amazon Web Services
http://aws.amazon.com/