Fork me on GitHub

Thursday, March 15, 2007

Wish List and "My Research Project" Unveiled

WARNING: This post is extra extra long (even for me), the top portion consists of recent wishes, and the bottom is a very detailed account of what I've been most interested in the past few years.

As of late I've been encountering more and more tools I wish I had and less and less time to make them myself :p.

As some people may have noticed, I've been interested in GForge a bit lately, and I thought it was kinda cool that they have a SOAP web services API, and there's obvious usefulness when you see that they have a Visual Studio plugin, but I've been thinking:

These guys are an open source group with an extensible project management, tracking and collaboration system that is familiar to many developers (based on SourceForge) and pretty easy to use. It includes things like Bug Tracking, CVS/SVN support, Status tracking, Wiki, Mail lists. All of these features are really neat and usable, but I think that open source developers should be supporting the project more because there's a lot of potential, but (as SourceForge found when it stopped supporting it's open source license model) not so many people are using it's developer oriented nature to their advantage. Here are some things I would really like to see for GForge's sake:
  • SharpDevelop, MonoDevelop, NetBeans IDE, and Eclipse integration.
    • Can integrate SVN systems already present with bugtracker and project status id's/links.
    • Support for associating projects with their forge space to allow internal IDE support for searching the project wiki, checking statuses, sending messages to project members, bug reporting.
    • All of these platforms can benefit greatly from a true collaboration suite; Visual Studio 2005 Team System is great for companies that can afford to do that, but the open source and free software developers need access to these powerful tools as well.
  • Even easier installation, currently the apt packages are pretty good and the dependency checking and such is ok, but you still have to have a lot of knowledge about how you're trying to use the system even before you've played with it. I went through several install attempts and even had some minor problems with the VM images.
  • It would be pretty cool to see some sort of hybrid of Joomla/Mambo and GForge to provide standard CMS options for project websites. This would be a really nice quick-start solution for any project and if it were coupled with some nice blogging software with tag feed support on a per-user basis it could even come pre-configured to aggregate all blog entries from all users working on the project based on a unique tag for that project I think that would be just about everything a development team needs :).
Other than GForge, I'm sure people are aware of my interest in the Mono project. Mono is developed and maintained by a bunch of great and bright people (who's blogs I strongly recommend reading :p) and they've been making great progress. Why mention them in my wish list? Because as great as everything is going, I'd love to see even more support. The project really has the potential to put out a great cross-platform implementation of the .NET Framework but their project is not realizing it's full potential because the people working on it already have their hands full. Plenty of people are out there are playing with mono, which is great, but lets see some mobile developers get their hands a little dirtier and start making more packages for mobile platforms. What about running Mono on Windows CE or more supported packages for ARM/MIPS/SHx flavors of linux? Why use .NET CF if your embedded device has more memory and more storage space when you can benefit from the full blown features of Mono? Not to say these things aren't being looked at, and not to say the people looking at them aren't capable of doing them, but why not give some of these guys a break so they can get even more of their official projects done (Goooo WinForms! :p).

Enough with the wishes, how about the results of my actions?!

I've yet to disclose a lot of details about my personal research project. This is mostly because many of the people who read this already know what they want to and because it's somewhat complicated to explain and I haven't had the time. Well fear not those who really want to know :p, here is the information you thirst for (I presume I'm speaking to myself here, lol):

The Project: I aim to design a multi-language pervasive distributed extensibility platform for generic extensibility using dynamic methods of communication and a strong service oriented architecture.

The Research: It is my opinion that mankind has been repeating their actions in a cycle where we strive to solve inconveniences. After we solve so many of them we realize that it's too complicated now and our latest inconvenience is the number of inconvenience fixes we apply, so we then work to integrate those pieces with one another so we can use less concrete items or actions to scratch those itches. After that we find new inconveniences and start over. I would like to see if it is feasible (and if so if it is reasonable) to create a standardized system that will provide applications with standard lines of communication and service registration, recognition and consumption that can be used either standalone or as a transparent distributed system. Ideally using this system should allow us to integrate already existing technologies with new technologies without having to change either so that we can stop reinventing the wheel (which we do in way more than one way).

The Reason: As technology has been evolving the rate at which new technologies comes out is speeding up tremendously. The ultimate goal with this is to make it so that any technology can, without any prior knowledge, access the data and features of any other technology (within the system) as though the features provided were natively available in the first place. All that should need to be done to add new devices and concepts is to define new known service types, implement new service consumers on various platforms and then make the new technology compatible by exposing it's resources via a service provider. This sounds like a lot, but really it's basically what we already do. Operating systems use drivers all the time, but if this is done right we can use all of these exposed features in a distributed system.

The Method: Plenty of madness, followed by using the extensibility platform (the research project) to design and implement a personal and household device integration and automation system. The goal is to make it so that you can change the temperature of the house or turn of your kids TV while you're driving in the car touching your dash mounted screen that's communicating using the network access exposed by the bluetooth connection your car has established with your phone while getting roadside directions from the GPS location server in your phone and playing music from your wife's laptop using WiFi in the kitchen. I know this seems like a lot, but when it's broken down into small pieces it's very easy to see how everything fits together.

The Pieces: Since there are really two projects here, the pieces will be categorized as either being part of the platform or the implementation.

Platform:
  • Extensibility Layer
    • Allows dynamic loading of extensions in a type-safe manner with an Extension Manager that can be configured with pluggable loaders, management, and security zones to allow isolation of trusted and untrusted or critical and non-critical extensibility. This is the core of the platform.
  • Communication Layer
    • Facilitates the transport of messages (commands, requests, updates, etc) using a pluggable architecture to allow communication through dynamically defined channels in an abstract manner to allow new communication channels to be added at any time and to allow all pieces of the system to communicate using these channels without any knowledge of how they work. The communication layer should be the only section of the application that is aware of any process instances and application boundaries and it should be responsible for the detection and usage of the most optimal means of communication between providers and consumers.
  • Distribution Layer
    • Automatically provides communication for Extension Manager/Extension Manager and Extension Manager/Extension Loader across application domain boundaries using the communication layer. This should be transparent; service registration, consumption and communication should occur using a static reference to the platform host which will either be a real platform host (Extension Manager) or a virtual host (a secured proxy loaded in a sandboxed application domain).
  • Configuration Layer
    • Establishes a secure standard model for configuration. This should support pluggable persistence mediums, atomic synchronization through the communication layer, and configurable zones that allow various portions of the application and it's extensions to be isolated and persisted where most applicable without requiring the extensions to be aware of the location of their configuration. The configuration layer is likely to maintain a hierarchical form in which application zones are responsible for managing configuration of their children including nested application zones. Utilization of existing configuration persistence mediums is encouraged.
    • It will be very important for there to be a rich, easy to use UI for configuration of the system as a whole, since it may actually be somewhat complicated to have various security zones communicating with one another on different machines. Also, pretty much every portion of the platform can be dynamically modified so any part of the platform must be completely configurable.
  • Secure Design
    • While this isn't actually an individual piece so much as a common theme it is important that all pieces of the system can be configured to be as secure or open as desired and continue all of their allowed functionality under those situations.
Each piece of the Platform will have to be implemented for each programming platform to be supported (ie: Java, .NET/Mono/.NET CF) but integration of some platforms may benefit more from initiatives to make languages compatible with common language structures similar to JRuby, Phalanger, IKVM, etc. SOAP, JSON and other service oriented platforms are the obvious choices for integrating the various language platforms, but I thought it would also be nice to facilitate native lines within virtual compatibility hosts (ie: host an IKVM in a .NET domain with a virtual host and then use IKVM-.NET stubs in conjunction with the native Java extensibility platform to facilitate faster translation to native communication methods using IKVM to proxy). One very important thing to make note of is that any extension can utilize the same underlying extensibility and communication frameworks to be just as extensible and distributed as the main application.

Implementation:
  • Currently Planned Host Applications:
    • Shell/Desktop Management Environment
      • pluggable environment defining many:
        • Environment providers (Windows, Linux, Mac, Windows CE, etc)
        • Input providers (keyboard, joystick, remote, voice command, etc)
      • Support for pluggable "Desktop Managers" to facilitate different styles of user front-end usage. A media desktop might simply expose available media, show visualizations and load semi-transparent widgets whereas somebody running the system on a touchscreen on their fridge may want something a little more home automation oriented. Either way, the fridge should technically be able to stream music while the media center turns your lights off, but the end user experience is more consistent with what they expect.
    • Service Daemon
      • A passive background application designed for desktop computers and servers that will load and run services in the background and allow individual platform compatible applications to serve and consume without capturing the entire environment.
    • HTTP Access Platform
      • Facilitates end-user service consumption through a web browser using pluggable widget/webpart style service consumers.
  • Media Distribution Services/Consumers
    • Generic service providers for exposing and streaming shared media resources (files, TV Capture output, proxied multi-cast streams, etc.).
    • Generic service consumers for accessing and playing back media
  • Common Device Services/Consumers
    • Service providers and consumers for such things as GPS/other bluetooth devices, Printers, Scanners, IR Ports, Cameras, Microphones, etc.
  • Automation Services/Consumers
    • Provides support for registering, recognizing and exposing non-computer devices that can be controlled or polled remotely (ie X-10 household automation, RF controllable vacuums/robots).
The implementation is very incomplete in it's definition because much of the engineering thus far has been focused on the platform, but the implementation definitely needs to be solid because it is what will be used as a reference to see the capabilities of the platform. Currently I've got some good work started on the extensibility and communication layers and I've been playing with the configuration layer a bit lately too, though only on the high-level side, not so much on dynamic persistence and whatnot yet. Also, I've got a precursor to the Environment/Desktop Management Application that demonstrates a windows environment provider and a desktop provider configuration dialog with multi-head support (using display devices exposed by the environment provider) as well as simple input provider demonstration. Next is loading desktop providers and associating them with individual/multiple contiguous displays.

Anyway, this post is even longer than my average of really really long, and I'm just about out of time, but I thought I'd also draw attention to the new location of this blog :) - I'll try to let everyone know what my intentions are with it soon enough :p.

-TheXenocide

No comments: