Finsemble: More On Motivations

More on Finsemble Motivations


Why desktop applications?

Many applications have moved off the desktop, going mobile or into the cloud; however, the desktop environment remains the best fit for a substantial set of power applications.

  • Multiple windows across multi-monitors. Break out of the single page paradigm and give your users the power they desire.
  • Stop browsing for daily functions. Your email is up all day, so why run it in a browser tab? Apps should be available on the desktop, navigable from the system dock/tray, and not shut down just because the browser was stopped.
  • More UI. No need for URL bars or browser tabs in a desktop app. Reclaim that space through the use of floating toolbars, full sized dialogs, and other UI controls that improve the user experience.
  • Interact with the desktop. Integrate with the system tray. Run background tasks. Notify the user. Communicate with other desktop applications.

Why HTML5 on the desktop?

The advantages of HTML5 on the web are now available on the desktop.

  • Create a UI for your application, instead of cramming your app into the same UI as every other app (menus and toolbars).
  • Web deployment. Get away from delivering and deploying fat applications. Load assets from the network.
  • Leverage the ecosystem. Use modern frameworks, open source tools, cloud service providers, and virtualized hardware.
  • Improve efficiency. Modern tools, modular components, dynamic loading, and binding. Unify web, desktop and mobile development efforts.

Why Finsemble for HTML5 desktop application?

Finsemble is designed to help developers build seamless HTML5 desktop applications. It excels at pulling together end-user solutions that require an extensive UI, collaboration, and multi-tasking.

What Finsemble ultimately does is save development time. Not just the time to create a multi-window desktop application, but also the time it takes to iterate within a solution space, gaining enough experience to deliver state-of-the-art solutions. Finsemble is second generation, built on what we have learned from previous multi-window HTML5 products at ChartIQ. Finsemble embodies what we believe creates elite products in a desktop environment in a cost-effective manner.


How is a Finsemble application different?

Finsemble development is in many ways like web development: Finsemble windows are composed of HTML5 web pages and JavaScript, running in their own sandbox container within a Chromium browser. It is these cooperating Finsemble windows (from a handful up, to a couple of hundred) that make up a Finsemble desktop application. However, it is also from all these cooperating windows that distinct requirements and challenges arise.

Each Finsemble window is essentially an independently-threaded "applet" coordinating with other Finsemble "applets" to deliver a single unified application. It is for this reason that Finsemble fits squarely into the realm of distributed-system solutions.

Below, partly in outline form, is a variety of thoughts and motivations for Finsemble that we have accumulated over time.


Where does Finsemble fit?

HTML5’s last frontier is building desktop applications. The advent of applications such as Spotify and Slack, built using Electron, represent the first wave of HTML5 desktop applications. With the release of OpenFin’s secure operating layer, financial firms are now also migrating their desktop development to HTML5. Finsemble bridges the gap between what existing HTML5 frameworks provide and what is necessary to build uncompromising multi-window desktop applications.

Here is the related high-level relationships:

  1. Chromium - An application that runs on the operating system which can generate a Chrome browser window without the location bar. Puts HTML5 on the desktop. Developers work in Chromium API, in C++. Starting point for developers (imagine a desktop with nothing on it)

  2. Electron - An API that combines Chromium and Node.js into a single application container running on the desktop. Developers work in JavaScript, making JS calls to open windows and load them with URL locations. Starting point for developers (imagine a single window on a desktop)

  3. OpenFin - An API that runs on top of Electron. Allows developers to easily build ready-to-run .exe files. Tightens up security and performance while addressing deployment issues not tackled by Electron. Adds the ability to communicate with other processes on the desktop. Developers work in JavaScript. Starting point for developers (imagine a desktop icon that can be clicked and a blank window)

  4. Finsemble - A SDK that runs on top of OpenFin. It helps developers build multi-window workspaces, implements specific types of UI (toolbars, dialogs, docking windows), provides methods for coordinating activity between windows, provides connectors to HTML5 components (charts, chat, grid), services (market data, authentication, trading) and provides standard themes, icons and UI componentry for building desktop applications. Developers work in JavaScript. Starting point for developers (imagine multiple windows on the desktop. Some windows are blank and some have charts, grid or chat).


Why Use Finsemble?

  • Get an “empty multi-window terminal” out of the box. Focus on filling it with application logic rather than building infrastructure.
  • No restrictions on components. These can be anything (web pages, web, angular, or react components).
  • Leverage off-the-shelf components and services. ChartIQ charts, Hypergrid from OpenFin, Symphony chat.
  • Make multi-window programming easy and natural for developers. Use a proven “event” driven paradigm (similar to Angular events)

What Can be Built with Finsemble?

Developers can build their own Finsemble components, use our prebuilt components, or a combine our components with ones that they build to make a complete Finsemble application. A Finsemble component is an OpenFin window combined with the Finsemble Library (FSBL.js); the library is simply a composite of our client APIs that interface with Finsemble microservices; the microservices provide the common functionality that enables all the pieces to work together as a whole. The Finsemble components, Finsemble Library, and Finsemble microservices combine to form a single Finsemble application.


Why not build directly on Chromium/Electron/OpenFin?

The effort to build applications from scratch on new, “green field” technology is enormous. Feature building and data integration rightly dominate developer resources, leaving minimal resources for developing fundamental architecture. This dynamic results in applications that deliver only rudimentary UX. For instance, it is easy for a developer to “spawn” a new window but extremely complicated to maintain the position and internal state of that window between sessions. The “multi-window” requirement is checked but user experience has not really improved over single-window browser apps.


Who needs Finsemble?

Any application that is built in HTML5 and can benefit from multiple windows, and particularly across multiple monitors:

  • Trading systems
  • Wealth management platforms
  • CRM systems
  • Market data terminals
  • Analytics terminals

Performance vs. Native desktop apps

Finsemble runs on Chromium which is the fastest, most advanced, and most reliable browser. Chromium uses the V8 JavaScript engine which uses a just in time (JIT) compiler to generate native code on the fly. This operates similarly to a Java VM where performance is comparable to compiled code.


Build vs. Buy

Finsemble is built from real-world experience. ChartIQ uses Finsemble to build its own applications. Through those efforts, we recognized that building HTML5 desktop applications requires a new programming paradigm. A new paradigm is required because each HTML5 window runs in its own distinct virtual context. Spawning windows is easy, but it is very difficult to maintain and coordinate connectivity between them. To address this, Finsemble has implemented an event based architecture and borrows algorithms from other disciplines, such as distributed systems and peer-to-peer networking.

APIs that are deeper in the stack provide access only to raw primitives. Special use windows such as dialogs and toolbars are fundamental to writing desktop applications, yet they do not exist in Chromium, Electron, or OpenFin. As an example, consider the simple modal dialog. When working under a windowing paradigm, dialogs are not DOM objects - they are windows. These windows are ephemeral: they materialize and disappear through indirect programmatic actions. For a dialog to act, it must communicate with other windows. Intra-process communication therefore is a prerequisite to supporting dialogs. None of this exists, either in HTML5 itself or the rest of the desktop stack. Desktop development with HTML5 can be powerful, but to realize that power it is necessary to have a developer-friendly layer.

Developers who begin projects without Finsemble are likely to compromise on functionality and not realize the HTML5 desktop’s full potential. Users will be left unsatisfied; perceiving the experience as inferior to traditional desktop apps (much as they did with the first generation of interactive web and mobile applications). Existing HTML5 tools, such as Angular, React, and jQuery are designed inherently to run on a single window and cannot solve these problems without Finsemble.


How hard is it to get started?

Developers gain most of the benefits from Finsemble utilizing the seed project and boilerplate code. Workspace management, saved to local storage, is available out of the box. Developers do not need to write any code to make a component fit into a Finsemble workspace. They simply set a URL or template in a JSON config. The look and feel of the application is completely up to the developer and done through HTML and CSS using whatever tools they are most comfortable with.

Developers can generally work with high level abstractions such as creating a launcher, spawning a dialog, or persisting data with a workspace. Advanced developers have access to the full API which will foster their creativity.


Is there a migration path?

It is often infeasible to replace legacy desktop applications in their entirety. There are several interim paths. One path is to replace parts of an existing application with new HTML5 components running within a WebView. This is possible for both Java and .NET applications. When a significant portion of the application has been converted, these components can be swapped into a Finsemble container.

Another potential path is to build UI functionality using Finsemble while using OpenFin’s inter-application bus (IAB) for data and calculations from a core legacy application. This essentially turns a legacy desktop application into a back-end for an HTML5 based UI.


Other Questions?

Please feel free to contact us at finsemble@chartiq.com with any questions! :)