Big Data for each one of us

41
Big Data for each one of us

description

 

Transcript of Big Data for each one of us

Page 1: Big Data for each one of us

Big Data for each one of us

Page 2: Big Data for each one of us
Page 3: Big Data for each one of us
Page 4: Big Data for each one of us
Page 5: Big Data for each one of us
Page 6: Big Data for each one of us

Team size = 1

Page 7: Big Data for each one of us
Page 8: Big Data for each one of us
Page 9: Big Data for each one of us

Team size = 4

Page 10: Big Data for each one of us

Can’t work alone anymore

Page 11: Big Data for each one of us
Page 12: Big Data for each one of us

Fall 2011

Page 13: Big Data for each one of us
Page 14: Big Data for each one of us
Page 15: Big Data for each one of us
Page 16: Big Data for each one of us

Team size = ???

Page 17: Big Data for each one of us

Can’t count on web designerAnymore

Page 18: Big Data for each one of us
Page 19: Big Data for each one of us

Extension points

Page 20: Big Data for each one of us

ConnectorsTabs

ApplicationsWidgets

Page 21: Big Data for each one of us
Page 22: Big Data for each one of us

Team size = 10

Page 23: Big Data for each one of us

3 month later…

Page 24: Big Data for each one of us
Page 25: Big Data for each one of us

developer usability

Page 26: Big Data for each one of us

RESTJava

requirejsmustache

Page 27: Big Data for each one of us

{ "tbounds":{"start":1338069600000,"end":1338155999999}, "solarInfo":{"sunrise":333,"sunset":1293,}, "updateNeeded":["google_calendar"], "addresses":{...}, "cities":[...], "inTransit":"UNKNOWN", "travelType":"UNKNOWN", "minTempC":10.0,... "settings":{ "temperatureUnit":"FAHRENHEIT",

... }, "haveDataConnectors":[...], "haveNoDataConnectors":[...], "selectedConnectors":[...], "hourlyWeatherData":[...], "cachedData":{ "bodymedia-burn":[...], "picasa-photo":[...], "google_latitude-location":[...], "fitbit-activity_summary":[...] }}

http://api.fluxtream.com/calendar/all/date/2012-05-27REST

Page 28: Big Data for each one of us

Java

Page 29: Big Data for each one of us

define(["applications/calendar/tabs/Tab", "applications/calendar/App", "applications/calendar/tabs/photos/PhotoUtils"], function(Tab, Calendar, PhotoUtils) {

var maxWidth = 200;// other private variables// ...

function render(dgest, timeUnit, calendarState, cEn) { this.getTemplate("text!applications/calendar/tabs/photos/photos.html", "photos", function() {

... }); }

function setup(digest, cEn){...} function showNoPhotos(){...} function onDataReceived(photos){...} function connectorToggled(connectorName,objectTypeNames,enabled){...} function connectorDisplayable(connector){...}

var photosTab = new Tab("photos", "Justin Loutsenhizer", "icon-camera", true); photosTab.render = render; photosTab.connectorToggled = connectorToggled; photosTab.connectorDisplayable = connectorDisplayable; return photosTab;

});

Requirejs

Page 30: Big Data for each one of us

requirejs

Page 31: Big Data for each one of us

total size of thecompiled code (gziped): 70kb

requirejs

Page 32: Big Data for each one of us

<div id="availableConnectors"> {{^rows}} <div style="margin: 60px 0 75px 0; width: 100%; text-align: center">You have added all available connectors</div> {{/rows}} {{#rows}} <div class="row-fluid"> {{#connectors}} <div class="span4"> <a href="javascript:App.addConnector('{{connectUrl}}')"> <img src="{{image}}" alt="" width=158 Height=89> </a> <p>{{text}}</p> </div> {{/connectors}} </div> {{/rows}}</div>

Mustache / Hogan

Page 33: Big Data for each one of us

Let’s write a widget!

Page 34: Big Data for each one of us

5 files

Page 35: Big Data for each one of us

A Manifest

{ "WidgetDescription" : {"en" : "Average Daily Steps Taken per day,

week or year"}, "WidgetIcon" : "averageSteps.png", "WidgetName" : "averageSteps", "WidgetTitle" : {"en" : "Average Steps"}, "HasSettings" : true, "SupportedLanguages" : "en", "VendorIdentifier" : "Fluxtream.com", "RequiredConnectors":"bodymedia, fitbit"}

Page 36: Big Data for each one of us

An Icon

Page 37: Big Data for each one of us

the widget’s contents template

<div class="flx-widget-typo"> <section class="main-widget-data"> {{#steps}} <div class="big-data-figure" style="color:{{color}}">{{steps}}<span class="data-unit">steps</span></div> {{/steps}} {{#noMeasure}} <div class="big-data-figure"><span class="data-unit">{{noMeasureMsg}}</span></div> {{/noMeasure}} </section></div>

Page 38: Big Data for each one of us

the widget’s settings template

<form class="form-horizontal"> <fieldset> <div class="control-group"> <label class="control-label" for="input01">Steps threshold:</label> <div class="controls"> <input type="text" class="input-xlarge" id="averageStepsHappyDailyThreshold"> <p class="help-block">Number of steps that make you happy.</p> </div> </div> </fieldset></form>

Page 39: Big Data for each one of us

the widget’s controller codedefine(["core/DashboardWidget"], function(DashboardWidget) {

var StepsTaken = new DashboardWidget();

StepsTaken.postLoad = function() {// ...// using this.digest, this.settings, this.manifest

var params = {"manifest" : this.manifest, "settings" : this.settings, "color" : color, "steps" : averageSteps>0?steps:null, "noMeasure" : averageSteps===0, "noMeasureMsg" : StepsTaken.noSteps()}; $("#averageSteps-widget .flx-body").empty(); $("#averageSteps-widget .flx-body").append( this.template.render(params) ); };

StepsTaken.validateSettings = function() {...}; StepsTaken.bindWidgetSettings = function(widgetSettings) {...} StepsTaken.defaultSettings = function(widgetSettings) {...} return StepsTaken;})

Page 40: Big Data for each one of us

Team size = you

Page 41: Big Data for each one of us

Thank You!