Skip to main content

Transforming Domino into a Social Collaboration Platform Part 2A - Experimentation

http://dominointerface.blogspot.com/2014/05/transforming-domino-into-social.html

In my last blog, I described our desire to a create a community-based social collaboration platform designed to meet the needs of small and medium-sized organization.  This post is the geeky part of this series. Only being naïve would one have taken on this journey. So the great experimentation began.

So we wanted to transform Domino into a social collaboration platform.  But what did that mean in the technical sense. Since data is fluid and mostly unstructured, we needed the entire infrastructure to be fluid and that was the challenge.  The challenges create many forks in the road of which many were dead ends.

There was four areas of technical challenges that we had to overcome.
  • Web Interface Generation
  • Database Infrastructure
  • Application Structure
  • Business Process and Workflow Management

Web Page and Interface
Though XPages technically separates the data from the form, it is intimately tied together and requires you to use the same infrastructure used in Notes client development.  This is fine if you want to continue working in that environment.  This locked structure does not allow for a fluid development environment. It required you to create views upon views for the front-end which we did not want to do.  Instead, we want a loosely coupled structure so that the interface was totally independent of the back-end. A true MVC approach.  If we decided at one point to replace Domino, we would not have to redo the entire front-end.

However, we needed a way to generate the Web pages and take advantage of the capabilities of XPages.  We were experimenting with a development environment that we created called UXPages a number of years ago.  It had the fluidity, but it was used primary for static web pages. Through the UXPages compiler, it took XML like code and converted it to HTML all written in LotusScript might I add.  It was modeled after Adobe Flex.  

http://dominointerface.blogspot.com/2009/07/introducing-ux-pages-and-dlex-project.html

We decided to expand on the UXPages compiler which eventually became the iPhora Application Designer to handle serious web application development. Rather than an application being a number of XPages and databases, our approach uses a single XPage as a Web container from which all web pages are generated.

Since we did not want the interface to be intimately tied to the back-end structure we decided that we would use JSON Restful services to pull/push the data from/to the server and generate the web pages using JavaScript.  The advantages is that we can use any type of toolset to generate the JSON Restful services, we could use SSJS, Java, LotusScript, or and anything else. 

A number of different JavaScript frameworks were consider including jQuery.  Dojo won out because it incorporated a structured methodology that is especially important for creating widgets. The JSON data that comes from the server had to automatically bind and generate the information on the Web page.  So we had to create our own data binding approach with the Dojo widgets similar to Angular.js and Backbone.js which created an entire development fork in itself.

Since we wanted the interface to be responsive, so naively started creating our own responsive CSS framework.  However, after hearing about Bootstrap from a blog by Jake Howlett, we decided that Bootstrap was the way to go.  We did consider Foundations, but there was so much open source stuff for Bootstrap. 

We started creating the web interface using standard Dojo widgets, but discovered Dojo widgets to be slow and bloated and really does not work in the new responsive design paradigm. We experimented with different approaches, but after many tries we decided to build our own Dojo Bootstrap widgets.  This gave us the simplicity of Bootstrap widgets while allowing us to have the automatic data binding.  But one problem, almost 100% of the stuff was written in jQuery!!! So that started another venture of learning how to create Bootstrap widgets using Dojo.

After many, many attempts, we eventually were able to create an entire framework and toolset to create the desired development environment.  Now that we had a fluid front end we needed a fluid back-end.


Database Infrastructure
NoSQL databases are now a big buzz in the IT world.  However, Domino is one of the first NoSQL database system. Many newer databases like CouchDB are modeled after Notes and Domino.  One difference between the newer NoSQL database and Domino NSF is the integrate of form and data in an NSF database which is unnecessary in the Web paradigm.

From our previous work with Integrated Business Framework (IBF), we knew that the Domino concept of a Notes form would not cut it.  The main problem was that for every application you built you needed many forms and many views even if you are using XPages.  So the more applications, the more views. And what slows down a Domino server, view indexes. So if we have 10 applications each with many forms and many views, you do the math. So one of the biggest challenges for us was how to create a database structure that would minimize the number views and forms.  We struggled with many different designs and approaches until we finally developed a database structure that had only one form which served as the database container and a fixed number of views no matter how many applications were running.  The form was a mixture of fields and MIME objects that stored everything as JSON allowing us to handle very large records similar to other NoSQL databases like CouchDB. 

One important note.  The newer NoSQL databases are fast and cool, but they lack one critical feature, security, especially when it comes to record access.  As a domino developer we have one critical tool that no one else has, reader fields.  If you are not taking advantage of readers fields to control access, then you need to learn how to effectively use them. With reader fields in place, records in the our database had the added security that we needed.

So now that we had a fluid web interface and a database infrastructure, we needed a controller to manage the security and data.  That for next time.  The blog is getting too long.

Transforming Domino into a Social Collaboration Platform Part 2B - Experimentation.


Comments

Popular posts from this blog

Creating Twitter Bootstrap Widgets - Part II - Let's Assemble

Creating Twitter Bootstrap Widgets - Part I - Anatomy of a Widget Creating Twitter Bootstrap Widgets - Part II - Let's Assemble Creating Twitter Bootstrap Widgets - Part IIIA - Using Dojo To Bring It Together This is two part of my five part series "Creating Twitter Bootstrap Widgets".   As I mentioned in part one of this series, Twitter Bootstrap widgets are built from a collection standard HTML elements, styled, and programmed to function as a single unit. The goal of this series is to teach you how to create a Bootstrap widget that utilizes the Bootstrap CSS and Dojo. The use of Dojo with Bootstrap is very limited with the exception of Kevin Armstrong who did an incredible job with his Dojo Bootstrap, http://dojobootstrap.com. Our example is a combo box that we are building to replace the standard Bootstrap combo box. In part one, we built a widget that looks like a combo box but did not have a drop down menu associated with it to allow the user to make a select

The iPhora Journey - Part 8 - Flow-based Programming

After my last post in this series -- way back in September 2022, several things happened that prevented any further installments. First came CollabSphere 2022 and then CollabSphere 2023, and organizing international conferences can easily consume all of one's spare time. Throughout this same time period, our product development efforts continued at full speed and are just now coming to fruition, which means it is finally time to continue our blog series. So let's get started... As developers, most of us create applications through the conscious act of programming, either procedural, as many of us old-timers grew up with, or object-oriented, which we grudgingly had to admit was better. This is true whether we are using Java, LotusScript, C++ or Rust on Domino. (By the way, does anyone remember Pascal? When I was in school, I remember being told it was the language of the future, but for some reason it didn't seem to survive past the MTV era).  But in the last decade, there a

The iPhora Journey - Part 4 - JSON is King - The How

  The iPhora Journey - Part 1 - Reimagining Domino The iPhora Journey - Part 2 - Domino, the Little Engine that Could The iPhora Journey - Part 3 - Creating an Integrated UI Framework The iPhora Journey - Part 4 - JSON is King - The Why The iPhora Journey - Part 4 - JSON is King - The How As we mentioned yesterday, in reimagining Domino, we wanted Domino to be a modern web application server, one that utilized a JSON-based NoSQL database and be more secure compared to other JSON-based NoSQL platforms. A Domino document existing within a Domino database is the foundational data record used in iPhora, just as it is with traditional Domino applications. But instead of just storing data into individual fields, we wanted to store and process the JSON in a Domino document.  However, text fields (AKA summary fields) in Domino documents are limited to only 64 KBytes, and that is a serious limitation. 64 KBytes of JSON data does not even touch what the real world typically transfers back and fo