Concept
I needed a way of managing the users in my domain. I directly handle the maintenance and support of 10 client machines and 2 servers. This list will only grow as the days keep going along. I use VNC extensively but I don't feel that I always MUST use the mouse and keyboard as if I was on the computer.
I needed something more.
I needed a console based control system that can simply run commands. I need a scheduling subsystem that can handle programming automated and repetitive tasks. These tasks include anything from defragmenting the computer to running a program and awaiting a specific result. I also needed a way to control remote computers that can traverse firewalls. VNC currently relies on me connecting to the computer and knowing the IP address. I won't always know this, nor will I have the ability to call up remote users and ask them.
I also needed this for a more controversial purpose: license reconciliation. I use a program called SalesLogix. It has an ability to use remote users which have a MSDE version of the SQL database. This remote database is a full copy of the host database and changes are synchronized using a program SalesLogix developed specifically for this purpose. There is very little security and a malicious user can completely hose the host database by running simple sql commands on the remote. This user can also make copies of the remote database for later manipulation, editing, or view from say another competitor. I needed a way that I can tell a remote computer to delete the MSDE database and lock the user out of SalesLogix. Since I can recreate remote databases at the drop of a hat, this ability is necessary yet not too harmful if done incorrectly. I'm lucky in that I have no real power users that can manipulate MSDE but anyone can download the specs from the internet and figure it out.
The Core
At the core of this concept is a framework that uses a plug-in based architecture. The framework will drive the basic functionality of the application and subsequent “bundlings” of similarly created programs. I can use this to create functioning programs which are just literally the framework plus a couple of choice plug-ins. I have literally a dozen different applications this would be suited for so it made sense to have a way to facilitate all of them separately if need be. Most likely though everything will be free but there may be an occasion where I can or need money for a specific need or purpose and this would help.
The core is not just there for a business model but it exists purely for the help of the application. It requires a lot of code that is already in the OS but since the Task Scheduler is pretty basic and doesn't do well in the event of failures, a separate program is needed to fill the gaps. Also since Task Scheduler is known, users will go there first to look for things. If they can turn something off, this is bad for me so I needed something that also kept those prying users from messing with my masterpiece.
Common Functionality
Essential to the core is a common functionality that will basically make up the core of the framework. The functionality extends beyond much of what a framework is, but I feel this information is necessary for every plugin or application this is suited for.
- Secure Messaging - We use Vypress Messenger. It's not secure, anyone can send any message. It is pretty cool but we need functionality like Vypress but in an environment where we know no hackers can tamper with us.
- Configuration Management - Each plugin needs a configuration API of sorts, as does the framework itself. This will be essential for any configuration necessary for the life of the application. Since it's uniform, it'll make maintenance severely easy
- Socket Listening - This is a must since we're operating on the internet and using a TCP/IP based network. Listening will mainly be done on the network clients and server but there will be instances where remotes may have to listen for events. Without this, secure messaging won't be possible.
- Plug-in - There is a plugin architecture and there won't really be much to the core. In fact much of the core will simply be a group of plug-ins bundled together into a common framework.
- Process - An API designed to handle processes on the computer. Handling existing processes will be possible but the real power is going to be handling the running of processes in the future.
- Scheduling - Together with the Process this will be the guts behind the framework. These 2 components will make up the “Task Scheduler“ of sorts but will be slightly more robust with an ability to handle errors more efficiently.
- Logging - Each plugin as well as the core will have logging capabilities. You will need to figure out if your plug-ins are working correctly or not and logging will be one of the only methods (other than using your eyes) that will help you determine if things are working properly.
- Data Collection - This will be used to gather data on the system(s) covered by this framework. The data will be geared towards SQL server databases specifically but there will be methods to write to files or other back end systems if the need ever occurs
- Automation Engine - Since this will drive the core, automation will need to be easy and painless. It'll be like cloning a version of me but without all of the baggage I come with (cheaper too). Think of this as the “ghost in the shell“ but this is not like I, Robot in any way. The AI is finite and defined and there will be limited room for expandability simply because it won't be needed. Automation will try to drive maintenance and hopefully will be the mechanism for it.
- Reconciliation of Licenses - This is the main concept of the framework and SalesLogix will be the most important piece of this for now. This will be an API of sorts so that any application developer can add reconciliation to the framework. This is so that an admin can reconcile all licenses from a remote user or computer. Do you really want the remote user using Office until they have to reformat their computer? Activation allows this very thing. Having the ability to remove Office silently over the internet will make sure you keep your licenses while also making sure that a-hole that stole the laptop won't be able to do anything with it.
- UI - There will only be one UI. The plug-ins will each have their own ability to make use of the UI but for the most part it'll be very basic. A plugin's main function is to gather data into a format the UI can process effectively. The plugin will not be able to hijack the UI in any real way to keep the possibility of a “plugin virus“ from possibly controlling and affecting large networks.
Much of this will be bundled into a series of plug-ins. Plug-ins will greatly modularize the code and keep me from having to recompile the whole application to get just one piece working. Since they'll also be plug-ins it'll make sure that the plugin mechanism is working correctly before anything is ever started. This way by the time you get a working version, you should easily be able to modularize the code for yourself and make it work for you.
The Goal
My goal in this project is to help myself in managing our network. There's a lot of repetition I do as well as a lot of tedious “human work” that needs to be done. If I can simplify any of this and save myself 10 seconds out of every minute, my job is done. The more I free up, the more I can do and I'm looking forward to a day where the only work I do is something a computer really can't. Sadly the majority of what I do now, a computer can easily do for me but I haven't the means or the budget for a system that lets that happen. SalesLogix is wonderful but it's lacking and I think this is a great supplement to already existing technologies like Group Policy and Active Directory.
The ability to traverse firewalls is the essential element from this project. I've had numerous occasions where people in the field can't get something to work yet when they bring it into the office I can make it run fine. Having the ability to see the computer as they see it will be a welcome concept and something I desperately need. I also need something very secure to make sure no virus makers can just make a plugin that can easily reverse the very thing I'm trying to do. It'll be difficult to balance the welcome ability to remote control through a firewall while still being secure enough so that only I, the administrator, am the one doing the controlling.
RobOS
RobOS fits into this very nicely. In fact this project is what literally got me started on RobOS. I thought this could be a very good companion to any OS like Windows or Linux. Since it would be built on top of the OS however, much of it would be “reinventing the wheel” of each OS itself. Windows has Task Scheduling, Linux has cron. Why on earth would I want to redo those completely? The only reason would be that they're inadequate in themselves which is very true. Rather than build on top of existing technology I figured it'd do better to incorporate this into it's own Operating System and thus RobOS was born.
This concept won't be specific to RobOS only, even though that will be where the concept flourishes the most. Windows and Linux can't really handle this type of technology well due to the way viruses are openly allowed. I would need to add way too much security make this a usable possibility but this hasn't stopped me. I plan on doing this in .NET because it makes the most sense. I also plan on using .NET because even though I'm more proficient in Delphi than C#, I want a reason to convert. I adore .NET and while I've yet to make my own application (even if it's something I barely use) I grow increasingly impatient every day.