Hybrid web-applications have been popping up all over the place. We’ve seen massive strides in the progression of the philosophies that sparked creative minds to innovate upon the existing technologies within the wave of “Web 2.0″ and the next generation of the web. These strides have resulted in the creation of aggregating applications such as Google Reader, and Wikis such as QEDWiki and Deki Wiki. The approach taken by these two Wiki applications are embodiments of yet another popular buzz word: Mashups. Both QEDWiki and Deki Wiki allow the User to pull information from multiple sources onto a single page. While this may be fantastic in its own right, the members of RevNet began to feel that it was slightly restrictive. Allow me to elaborate. Rex and I began critiquing both of these applications. After some time, we asked ourselves: “should information be able to be retrieved from multiple sources?” Yes, we strongly believed that this is an important ability for Users of any application to have. This is when we realized what was missing. There was nothing wrong with enabling this within a Wiki application but we believed that this should be enabled for any application anywhere - not just in the context of a single wiki page. Moreover, these were only available in PHP. This is what fueled the start of our very own .NET-based Mashup Framework.
The First Iteration
We began sketching out details in a brainstorming discussion:
Meet the Widgets
I am envisioning the ability to utilize the mashup concept in all areas of the collaboration suite. If a formal syntax is standardized, then it can be used all across the application. This would allow a widget-based approach for all features.
Consider the following syntax snippet* as an example:
In {{ popupUserProfileSummary("joshua.arnold@rev-net.com", "Joshua Arnold's") }} latest {{ popupBlogPostSummary("1", "blog post") }}
This would appear as:
In Joshua Arnold’s latest blog post, he mentions that…
with “Joshua Arnold” and “blog post” having dynamic popups appear on a mouseover event displaying a Profile summary and Blog Post summary, respectively. This could appear in a forum post, blog entry, calendar event, or ANYWHERE. Moreover, we should allow for other services as well - windows live, google, flickr, etc…
* Syntax snippet is just a pseudo syntax example and is not meant to reflect the actual standard.
Automating the Widgets
Eventually applications will be able to associate the text, “Joshua Arnold” to a specific user, and be able to automatically convert the text “Joshua Arnold” to the appropriate widget syntax, in this case being: {{ popupUserProfileSummary("joshua.arnold@rev-net.com", "Joshua Arnold") }} It would also be able keep the original text and not convert it to a widget each time it occurs.
Controlling formatting
Definitions: A “library” is a set of functions that are used to format information from internal/external sources The “Core” library will be written abstractly and have a default implementation. This will provide the standard formatting techniques for everything. It will be written abstractly to allow other implementations to be written and used to facilitate layout maintenance.
As with any new idea, we felt that the first step should be to create a simple prototype. I began working on a very rough preliminary architecture - attempting to plan for the ability to have libraries dynamically defined and loaded. We began with some rough Custom attributes to decorate classes and methods to be pulled through reflection and map correctly to function calls. Essentially, we would register a “prefix” (or alias) with a library class and any function calls made from that prefix would be invoked from that class - requiring that the function names matched their respective method names. The architecture had potential but the first implementation was slightly painful. Nevertheless, we pushed forward to begin working on the syntax parser. Rex wrote the parser to allow for function nestings as well: {{ myLibrary.FunctionName(myLibrary.FunctionName()) }}. We hosted it in a simple console application to test the invocation of the functions and it worked rather well, to our surprise. I started noticing the restrictions already: only the native .NET types (e.g. string, int) could be handled. If you wanted to return “Hello World,” it would work just fine. However, any html to be rendered would have to be created with the use of a StringBuilder or another similar approach. Obviously, this just wasn’t an option.
Share This
Recent Comments