The Foundation Chapter will describe the foundation of the Cloudburo App Platform. It will introduce the major elements (principles, concepts, frameworks, libraries, tools …) of the platform in order to bootstrap a cloud based service delivery business which includes
It’s the nucleus for building up the platform.
The architecture of the Cloudburo Platform is heavily influenced by Reacive Manifesto, which are nicely summarized by the following
New requirements demand new technologies. Previous solutions have emphasized managed servers and containers. Scaling was achieved through buying larger servers and concurrent processing via multi-threading. Additional servers were added through complex, inefficient and expensive proprietary solutions.
But now a new architecture has evolved to let developers conceptualize and build applications that satisfy today’s demands. We call these Reactive Applications. This architecture allows developers to build systems that are event-driven, scalable, resilient and responsive: delivering highly responsive user experiences with a real-time feel, backed by a scalable and resilient application stack, ready to be deployed on multicore and cloud computing architectures. The Reactive Manifesto describes these critical traits which are needed for going reactive.
Complemented by the principles of:
We use a Domain Driven Design (DDD) approach to shape out the technical foundation of the platform. DDD is is an approach to the design of software, based on the two premises:
This is described in the Business Model chapter.
A Cloudburo Platform application is a mix of JavaScript that runs inside a client web browser, as well as JavaScript that runs on the nodejs server inside a Node.js container, which is serving all the supporting HTML fragments, CSS rules, and static assets.
The application is based on the Single Page Application design principles, which seperates the functional layer as an API and the presentation layer in form of a HTML5 App. Details about this approach and further links can be found in my blog entry Single Page Application Driven by Javascript
JavaScript is the main asset on client as well as on the server. Concerning the server asset, the Cloudburo App Platform will gather all the Javascript files used by client into one Application file which will be executed within the browser.
HTML GUI Elements (View Panes, Forms, Menu Tabs etc.) are served by the nodjs server as underscore templates, which will attached to the to HTML DOM element and cached during a user session. After arriving of new data in the browser, the relevant tempate will be fetched, compiled with the data set and rendered to the end-user.
The Cloudburo code generator facility is based on the Papyrus UML Modeller in combination with the Acceleo Code Generator.
Rather a powerful toolset which is provided in a fully open source version.
A twin programming language approach consisting of Javascript
and Java
was chosen.
Main development language for the Enduser Application (Frontend and Backend) is JavaScript
. I prefer to use CoffeeScript
which is a little language that compiles down to JavaScript. The syntax is inspired by Ruby and Python and implements many features from those two languages.
Underneath all those awkward braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.
CoffeeScript is very succinct, and takes white space into consideration, this reduces code by third to a half of the original pure JavaScript and increases readability. In addition CoffeeScript has some neat features, such as array comprehensions, prototype aliases, and classes.
The compiler converts CoffeeScript code into its counterpart JavaScript, there’s no interpretation at runtime.
Having a Java developer background going back to version 1.0 which was released in 1995, it was clear for me to use Java as a second programming language for writing code generators and any kind of utility programs required for the platform. Java provides a lot of powerful libraries for any kind of utility tasks and it’s strong object-oriented language backed by an excellent IDE’s (e.g. Eclipse) is an ideal complementing piece to JavaScript, as the main development language.
A cornerstone for a robust and fast development process is a state of the art integrated development environment which bundles and coordinates the various activities.
Currently I’m using two flavours of IDE’s
Eclipse IDE is by far one of the most adavanced IDE for any kind of development actitivities. It provides a vast array of plugins for any kind of software lifecycle activities. Especially it provides strong support for a Model Driven Development approach which is one of the principle of the Cloudburo development work. Currenlty I use the following Eclipes setup for my work:
A drawback of Eclipse is its quite resource hungry and can consume considerable memory space. Therefore I introduced Textmate as my main development editor, which is far more agile and integrates very nicely in various programming languages and tools.
Textmate as advertised as the the missing editor for the Mac is a very powerful Editor with a huge bundle repository which allows to integrate almost any development language or activity. The philosophy of textmate is following the one of Unix tasks.
I use it as a main IDE for doing javascript, coffee-script, HTML, CSS3, template, scripting work.
As a version control system I use the de facto standard for open source application GIT, which is complemented by Bitbucket which is a web-based hosting service for projects that use either the Mercurial or Git revision control systems. This allows me to manage a remote copy of my code which I don’t make (yet) available via my GIT open source account.
Overall build and deploy is managed by Maven. Details can be found here
Homebrew is the so-called missing package manager for OS X. Homebrew complements OS X and is based on git and ruby.
NPM is the node.js based package manager and is required for my node deployment platform as well as a package manager for certain utitilities, e.g Bower
.
As Package Manager for keeping my frontend and node deployment platform under control, I use the Bower package manager.
Bower is a package manager for the web. It offers a generic, unopinionated solution to the problem of front-end package management, while exposing the package dependency model via an API that can be consumed by a more opinionated build stack. There are no system wide dependencies, no dependencies are shared between different apps, and the dependency tree is flat.
I replaced my earlier Codekit build tool with the awesome Brunch ultra-fast HTML5 build tool. It’s very handy in order to build my Single Page Application Bundle (javascripts, underscore templates, less compiles, static assets etc) which will be integrated into the Google App Engine
Invaluable documentation reference help is Dash. Dash is an API Documentation Browser and Code Snippet Manager. Dash stores snippets of code and instantly searches offline documentation sets for 130+ APIs.
SourceTree is my most preferred GUI for managing my GIT repositories on a Mac. It’s provided as open source application by Atlassian.
Underscore is a utility-belt library for JavaScript that provides a lot of the functional programming support that you would expect in Prototype.js (or Ruby), but without extending any of the built-in JavaScript objects. It’s the tie to go along with jQuery’s tux, and Backbone.js’s suspenders.
JQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.
This the MVC framework used for Cloudburo Apps. Backbone.js gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface.
The most popular front-end framework for developing responsive, mobile first projects on the web.
This powerful library allows you to create editable elements on your page. It can be used with any engine (bootstrap, jquery-ui, jquery only) and includes both popup and inline modes.
Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results and is integrated into XEdtiable.
DataTables is a plug-in for the jQuery Javascript library. It is a highly flexible tool, based upon the foundations of progressive enhancement, and will add advanced interaction controls to any HTML table.
A javascript date library for parsing, validating, manipulating, and formatting dates.
These libraries are used for the Node.js implementation.
Express is a minimal and flexible node.js web application framework, providing a robust set of features for building single and multi-page, and hybrid web applications.
List of all countries with names and ISO 3166-1 codes in all languages and all data formats were provided by link by using CLDR - Unicode Common Locale Data Repository. (Licence)