wakanda: a new end-to-end javascript platform - jsconf berlin 2009
TRANSCRIPT
4D4D has been publishing business application
development tools for many years, with a focus on simplicity, compatibility and integration, across
desktop, client-server and Web.
lundi 1 février 2010
We are a "small-large" company based in Paris, with a presence all over the world.
lundi 1 février 2010
Inner magic
It's what Wakanda means in the Sioux language.
We intend to bring our style of ease and simplicity in development to your complex
business Internet applications.
lundi 1 février 2010
Why is JavaScript the best choice for Wakanda today?
http://tr.im/javascript_rocks
lundi 1 février 2010
Studio
- users & groups management
- database / entity models design & administration
- WYSIWYG editing
- JSDoc / ScriptDoc (type-ahead, outline, publication)
- source control
- validators (JSLint, W3C, ...), ATAG conformance !?!
- unit testing (TDD, TDR), client & server debugger
- minifier, caching properties
lundi 1 février 2010
HTTP & JavaScript Unit Testing Tool
HTTP test case editor in the Firebug console
lundi 1 février 2010
Use the Bespin JavaScript editor tocustomize test cases
HTTP & JavaScript Unit Testing Tool
lundi 1 février 2010
HTTP & JavaScript Unit Testing Tool
Test suite management - YUI test compatibility - JUnit support
lundi 1 février 2010
Remote JavaScript DebuggingCrossFire, v8 protocol compatibility !?!
- debug the client from the studio - debug the server from web clients
breakpoint, step by step, callstack, JavaScript expression evaluation
lundi 1 février 2010
JSON-RPC Client & Server
A simple protocol
Request by position--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}<-- {"jsonrpc": "2.0", "result": 19, "id": 1}
Request by params--> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}<-- {"jsonrpc": "2.0", "result": 19, "id": 3}
lundi 1 février 2010
Simple function declaration, request validity control from JSDoc or JSON-Schema
Server-Side
/** * get the number of connexions on an application server * * @param {String} appName application name * @return {Number} **/
function countConnections(appName) { return applications[appName].servers.http.connections();}
JSON-RPC Client & Server
lundi 1 février 2010
Simple client binding declaration,
Client-Side
<meta name="WAF.config.rpc.namespace" content="customAdmin" /><meta name="WAF.config.rpc.methods" content="countConnections" />
or
<link rel="WAF.config" href="/wafConfig.json" type="application/json" />
JSON-RPC Client & Server
lundi 1 février 2010
Simple and advanced method calls, request sent only if parameters are valid
Client-Side
customAdmin. countConnections("killingApp");customAdmin. countConnectionsAsync(showResult, "killingApp");
var infosHandlers = { onsuccess: function (result) { /* ... */}, onerror: function (error) { /* ... */}};
customAdmin. countConnectionsAsync(infosHandlers, "killingApp");
JSON-RPC Client & Server
lundi 1 février 2010
Easy way to call external Web Servicesand to had client validity checking
Client-Side
WAF.rpc.call("otherMethod", paramA, paramB);
WAF.rpc.callAsync(methodHandlers, "otherMethod", paramA, paramB);
or
WAF.rpc.call(otherServerConfig, "otherMethod", paramA, paramB);
or
var rpcOut = new WAF.classes.Rpc(otherServerConfig);
rpcOut.callAsync(methodHandlers, "otherMethod", paramA, paramB);
rpcOut.getInterface("otherMethod", "rpcOut");
rpcOut.otherMethodAsync(methodHandlers, paramA, paramB);
JSON-RPC Client & Server
lundi 1 février 2010
End-to-End JavaScript
SquirrelFish Extreme (Nitro)
64 bits - multi-thread - lightweight - extensible - the fastest ?
lundi 1 février 2010
CommonJS
Modules/1.0
«4D is implementing this in Wakanda»
http://wiki.commonjs.org/wiki/Modules/1.0
lundi 1 février 2010
HTTP Incoming Request JS APIs
JSGI (0.2)Jack
PersevereJaxerv8cgi
EJscriptnode.js
Wakanda * http://wiki.commonjs.org/wiki/JSGIhttp://tr.im/http_ssjs_api
lundi 1 février 2010
Core data store engine
Entity Model support
64 bits - Unicode - multi-thread - multi-process
Improved database engine
lundi 1 février 2010
Core data store engine
Entity Model support
JavaScript API
Lowest level JavaScript and HTTP binding
REST HTTP API
lundi 1 février 2010
var emps = db.employee.all();function hello(emp) { return ‘hello ’ + emp.name;}hello(emps.first());
Access to the Business interface layer from JavaScript
Core data store engine
Entity Model support
JavaScript API REST HTTP API
lundi 1 février 2010
db.employees.find("name = alex").drop();
function getWorkLocation(employee) { return employee.company.address;}
Core data store engine
Entity Model support
JavaScript API REST HTTP API
lundi 1 février 2010
GET /rest/employee(5)GET /rest/employee/name?$query=salary < 50000DELETE /rest/employee("Tom Cat")
* JSON or XML layout
Access to the business interface layer from HTTP trough a REST API
Core data store engine
Entity Model support
REST HTTP APIJavaScript API
lundi 1 février 2010
Direct HTML interface
• Unlimited number of entities in the datatable• Automatic Forms with unlimited property hierarchy• Very responsive filters, server side ordering• Possibility to add, remove, and update the entities
lundi 1 février 2010
Summary
- Powerful Server Side JavaScript engine
- Native Business Logic abstraction
- No SQL generation
- direct JavaScript interface
- direct REST interface
- Open Platform
- Streamlined development process
lundi 1 février 2010
Developer preview: 1st quarter 2010
http://www.wakandasoftware.com@wakandasoftware
@amorgaut@amorgaut/wakanda
@amorgaut/javascript-gurus@amorgaut/accessibility
http://wiki.commonjs.com http://tr.im/wtframework
Get Involved
lundi 1 février 2010