Wakanda is an exciting project including a server, a studio, and some useful Web tools. It helps you creating web apps that integrate nicely with a backend and a native REST and JavaScript database.
It makes REST and Entity Model, a very intuitive way to build applications. We'll see a quick but detailed rundown about its architecture: its database engine, SquirrelFish, a data provider, Ajax framework adapters (YUI, ExtJS, jQuery, ...), and a full development environment. I'll expose part of its client and server-side APIs (JSON-RPC, data services), and some innovating features like JavaScript remote debugging, or unit testing on JavaScript and HTTP using Wakanda Studio and Firefox extensions.
Wakanda: a new end-to-end JavaScript platform - JSConf Berlin 2009
1. Wakanda
A project dedicated to creating a
new end-to-end JavaScript platform
lundi 1 février 2010
2. 4D
4D 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
3. We are a "small-large" company based in Paris, with a
presence all over the world.
lundi 1 février 2010
4. 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
8. 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
9. Web Admin
Solution, Applications, Servers, Services
lundi 1 février 2010
10. HTTP & JavaScript
Unit Testing Tool
HTTP test case editor in the Firebug console
lundi 1 février 2010
11. HTTP & JavaScript
Unit Testing Tool
Use the Bespin JavaScript editor to
customize test cases
lundi 1 février 2010
12. HTTP & JavaScript
Unit Testing Tool
Test suite management - YUI test compatibility - JUnit support
lundi 1 février 2010
13. Remote JavaScript Debugging
CrossFire, 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
14. 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
15. JSON-RPC Client & Server
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();
}
lundi 1 février 2010
16. JSON-RPC Client & Server
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" />
lundi 1 février 2010
17. JSON-RPC Client & Server
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");
lundi 1 février 2010
18. JSON-RPC Client & Server
Easy way to call external Web Services
and 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);
lundi 1 février 2010
22. Native REST & JavaScript
NoSQL Data store Engine
lundi 1 février 2010
23. Core data store engine
Entity Model support
64 bits - Unicode - multi-thread - multi-process
Improved database engine
lundi 1 février 2010
24. Core data store engine
Entity Model support
JavaScript API REST HTTP API
Lowest level JavaScript and HTTP binding
lundi 1 février 2010
25. Easy way to design the Business interface
lundi 1 février 2010
26. Core data store engine
Entity Model support
JavaScript API REST HTTP API
var emps = db.employee.all();
function hello(emp) {
return ‘hello ’ + emp.name;
}
hello(emps.first());
Access to the Business interface layer from JavaScript
lundi 1 février 2010
27. Core data store engine
Entity Model support
JavaScript API REST HTTP API
db.employees.find("name = alex").drop();
function getWorkLocation(employee) {
return employee.company.address;
}
lundi 1 février 2010
28. Core data store engine
Entity Model support
JavaScript API REST HTTP API
GET /rest/employee(5)
GET /rest/employee/name?$query=salary < 50000
DELETE /rest/employee("Tom Cat")
* JSON or XML layout
Access to the business interface layer from
HTTP trough a REST API
lundi 1 février 2010
30. XML View of an entity set
lundi 1 février 2010
31. 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
35. 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
36. Get Involved
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
lundi 1 février 2010