From Web App Model Design
to production with Wakanda
Alexandre Morgaut - 4D @amorgaut@wakandasoft
PresentationW3C AC member
Web Architect
JS Expert
REST Lover
NoSQL Fanboy
@amorgaut
http://about.me/amorgaut
Agenda
Wakanda Architecture
How a Project start!
Model vs Mockup
Test-Driven Development
Team Work & Source Control
Debugging
Deployment & Administration
Evolutions & Refactoring
wakanda
Open Source Cross-platform development and deployment system
for model-driven web-based applications
wakanda.org
@wakandasoft
JSeverywhere.org
@JSeverywhere
Wakanda
Wakanda Server(aka WakandaDB)
Wakanda Application Framework
Wakanda Studio
DataStore Model Editor
Code Editor
GUI Designer
Debugger
Users & Groups
AdministrationExtensions
REST/JSON
JSON-RPC
WakandaDB
Wakanda Server(aka WakandaDB)
Your Development ToolsVisual Studio, XCode, NetBeans, Eclipse,
Maqueta, Codio, Cloud9, Orion, Sencha Architect+
Chrome Web Inspector
Your Server FrameworkJava, .NET, node.js PHP, Python, Ruby...
REST/JSON
Webkit debugger protocol 1.0& Firebug Crossfire protocol
Your Web app Client FrameworkExtJS, Sencha Touch, Kendo UI, Backbone.js...
Your native app Client FrameworkiOS, Androïd, .NET...
REST/JSON, Git
Standard BasedW3C
- XMLHttpRequest, WindowTimer,
- Web Storage, Web Worker, File, FileSystem, Blob, ...
CommonJS
- Modules, Package, Unit Test
Other
- Console, JSON, JSON-RPC, REST
(+ some node.js support)
Webkit JavaScriptCore
Open Source, multi-threaded, preemptive, thread-safe, 64bits
Fast (2 JIT), strict mode (ES5), well structured & documented
aka SquirrelFish Extreme & Nitro Extremehttp://trac.webkit.org/wiki/JavaScriptCore
Wakanda Circle of Friends
How a project starts
“Expression of a requirement”
“Birth of an innovative idea”
“First usage of an innovative technology”
Model vs Mockup
Mockup
Fast representation of a “vision”
Human friendly shared idea
Model-driven
GUI is too platform specific
Removes distraction from GUI
Focus on requirements
Test-Driven Development
Test Service
var testCase = {
name: "testCaseName", testFails: function() { Y.Assert.isFalse(true); }, testPasses: function() { Y.Assert.isFalse(false); } };
http://doc.wakanda.org/Technical-Notes/Advanced/Writing-Unit-Tests-in-Wakanda.300-959974.en.html
YUI Test
Client or Server JS tests
CommonJS Unit Testvar! assert,! accountSvc;
assert = require('assert');TwilioScript = require('wakanda-twilio/core/twiml').TwilioScript;
exports['test response'] = function Twilio_Test_Twiml_response() { var script = new TwilioScript();
var twiml = '<?xml version="1.0" encoding="UTF-8"?>\n'; twiml += '<Response>\n'; twiml += '</Response>' assert.strictEqual(script.toString(), twiml, 'simple response ok');};};
exports['test hangup()'] = function Twilio_Test_Twiml_hangup() { var script = new TwilioScript(); script.hangup();
var twiml = '<?xml version="1.0" encoding="UTF-8"?>\n'; twiml += '<Response>\n'; twiml += '<Hangup />\n'; twiml += '</Response>' assert.strictEqual(script.toString(), twiml, 'hangup response ok');};
http://wiki.commonjs.org/wiki/Unit_Testing/1.0
Team Work& Source Control
Team WorkServer
- Model split in SSJS modules
- Service & RPC modules, Shared Workers
Client
- Web pages & Web Components
- Custom Widgets
- Themes, application.css
Tool
- Studio Extensions
Source Control
Commit
Log / History
Pull / Push on Github
Pull / Push on Server
Debugging
Wakanda Internal Debugger
Web Inspector
Deployment & Administration
Server Administration
Data Browser
Experimental Tool
Deployment
Gandi VPS
Evolutions& Refactoring
Application Evolutions
Sandboxed Modules (libs, RPC, Services)
Sandboxed Web Components
Updatable DataModel
- auto type conversion
- Extended Models
- openRemoteCatalog()
Wakanda Evolutions
Short releases cycle
More and more Standard support
Open Source & Enterprise Editions
Q & A
San Francisco, CA - Oct. 25th
http://jseverywhere.org
Wakanda
http://wakanda.org
@jseverywhere
@wakandasoft
Client and Server JavaScript APIs Community Group
http://www.w3.org/community/jseverywhere/