InTask as an application shell

We planned InTask to be an application shell for all our products. The state of the art ribbon menu, plug-ins mechanism, data handling, document management, users management, permission system and automatic application updates makes this infrastructure very atractive for composing new products. InTask does a good job when it comes to task based applications which is almost all the information technologies products we know. Whether its a scheduling system, project management, customer suppoprt or even a graphic script management like our SceneMax, InTask makes a good choice for being your application shell.
Our first implementation of InTask as a shell for other application was with our SceneMax project. We needed a script editor with syntax coloring and a way to run ans share these scripts among different users.
With InTask shell it was very easy to implement. All the project and task management where ready out of the box as well as multi-user task sharing, persistence and permissions. We only needed to write a simple plug-in for script editor and a “Run script” button.
This is what we did:
1. Wrote the SceneMax plug-in
2. We used InTask data handling module to extend InTask database. we added a table to store our scripts
3. Using InTask extensibility we added a new “Run script” button and a new “SceneMax script” tab
4. We observed InTask system events to synchronize the UI look and save the scripts to the database
5. For the syntax highlighting we used the open source ICSharpCode.TextEditor.dll

Thats it! after installing the plug-in in the right folder, we could write SceneMax scripts, save them to database, share with other users and enjoy all the other features of InTask like document management etc.
To finish making SceneMax as an independent project, we made a professional installation package using InstallAware product which bundled InTask with the SceneMax plug-in, 3D models, 2d bitmaps and other utilities as one product - Scenemax.

SceneMax is currently a freeware product for education purpose. You can download the product from: www.scenemax.com

InTask shell can be used by many applications. There is no reason to write all the toolbars, data handling, persisting, document management, user management and permission mechanism every time you write a new application. Like Eclipse, Microsoft VS Shell, Sharp develop and others, InTask is a great candidate for writing your next product.

Cheers!

The need for plugins mechanism

Every serious software must have some kind of plugins mechanism. Why??
1. The core application remains stable - new features which are installed using a plugin migh have bugs but only in the plugin not the whole application.
2. Easy to extend the application - small size plugins downloaded from the internet and not huge installations.
3. The community can extend your application allowing it to increase its market share.
4. Different sets of plugins makes different editions of your application. Pro edition will have more features (plugins) the community/express edition.
5. Plugins SDK which is published to the public hides all the ugly code & design in the core application. Users can see and use only your state of the art facade.
6. Good plugins makes opportunity to earn more money.

So, what plugins mechanism to use? there are ready to use plugins mechanisms like MEF (Microsoft Exendability Framework) and Sharp develop’s Doozers. Both very good and Sharp Develop is even very easy to use.
In InTask i built my own mechanism (again…). what can i do? I love re-inventing the weel so much…
I love my creation - its so elegant and working like charm! version 1.5 of InTask will have the first 2 plugins: Excel importer and Email notifications.
I’ll write about my plugins architecture in detail in the next post but here are the main requirements:
1. Plugin must be loaded automaticaly by just beeing installed in the right folder.
2. Plugin can request to be hooked to application events.
3. Plugin can ask the system to supply any existing commands.
4. Plugin can be an application resource itself allowing other plugins to query it for commands and hook to its events.
5. Plugin can extend the UI in many ways (toolbars, icons, panels etc)

More details in the next post.

Cheers!

Adi Barda

 ?

InTask Document Management

I thought a lot about how to implement InTask’s document management. InTask provides the end user a way to attach any type of documents to a task. This is very useful for a lot of users which needs a way to relate design documents, email messages, excel sheets etc to their tasks to document the whole process.
Simply attaching a document is not enough - we need a way to save all document’s versions and to allow multiple users to work on the same document while maintaining synchronization.
Obviously we needed some kind of source code control mechanism for saving versions and synchronize users work. After checking a few free options like CVSNT (which is a great product) i decided to write such a mechanism myself and why is that? - because using another product will make InTask installation much harder and we could not afford it especially for the personal edition.
So - what do we need for a simple reliable source code control mechanism?
1. Zip compression library
2. Access to shared folder
3. Database table for controlling the document’s synchronization between users

We support the very basic source code control operations:
1. Check out - getting the latest version of a document from the file server and working on it. at this time no other users can modify it
2. Check in - update the file server with the currently checked-out document - now everyone can see the changes and check out the document for editing?
3. View - view the latest checked in document
4. Label- put a label (some description) on a specific checked in version of the document
5. Rollback - rollback the document to an earlier version.

Every time the user check in a document - the file is compressed and saved in the file server and a new record is added to the file’s history. No matter what - the files saved in the file server are never deleted so even if the user made a mistake and rollback to a wrong version there is a way to get it back.

To link or not to link this is the question
************************************
In the first versions of InTask we allowed 2 way of attaching tasks documents:
1. Linked - the user point to an existing location of a file and every time he wants to work on it the original file is opened for viewing/editing
2. Embedded- the user point to an existing file and we copy it to InTask’s own repository (shared folder) so from that point the user works only on the copied document and not on the original file.
After few years we realized that the linked option is very dangerous because the original file can be modified without any checking and we cannot apply the source code control mechanism because you cannot compress a public available file. Therefor we decided to omit the linked option and go only with the embedded.

Thats it folks!
Cheers,

p.s: I want to send my comforts to all italian people for the losts they had in the earth quack. Italy is my favorite country - i’ve been there for more than 8 times in the past 15 years. I was very sorry to hear about the 289 killed people. God be with them.

Adi Barda

InTask Architecture

Mainly, InTask is a thick client-server application. We have winforms clients running against one central database. In the background we have a web service managing the trial versions, licensing, automatic updates and accounting issues.
Why client-server? simply because it gives the end user the best performance and best experience with the application. Today, personal computers are so strong so why put all the computing efforts on just one server? let each client do its own computing and then just synchronize with the database.
InTask works offline. we don’t hold connection to database. When the user/InTask decides to save its work we temporary open a connection, save and disconnect.
As of today we only support MS Sql Server as the main database but we plan to support all other known systems like MySql and Oracle. the main problem with integrating new databases is the huge amount of quality (regression) tests we have to do and additions to the installation program. Our web service however is working against MySql server.
For version 2 we plan to add support for plug-ins. This is important for any system to be able to be modular and extendibile. We want third party companies and users to be able to write InTask plug-ins and extend the system to their needs.
Another aspect of the system architecture is the built-in document management system. I’ll write about it in the next post.

Cheers!
Adi Barda
?

InTask Development

Hi Guys,
These days we are working on the first commercial release of our InTask system. InTask is not just another task management system. It was designed to be the ‘Elite’ system of its kind. In this blog i’ll focus on the technical details of the system, architecture, programming issues etc.

InTask History
===========
InTask was born in late 2004. Its initial name was “MiZi” after my red cat! a year later i contributed MiZi to a big project i was involved in and i looked for a log-in picture of a cat. Surprisingly i didn’t find any cat picture i like but i did found a very nice picture of a Koala bear. I decided to change the system name from Mizi to Koala. Koala was a huge success. everyone liked it especially because of its speed. It didn’t interfere with your wok - it really helped you!

Personally i don’t like web based systems. They are slow and limited. No wonder that all Microsoft office applications are windows forms applications. Good user experience is always by using windows forms application. However keeping an enterprise windows forms application synced to the latest version is not as easy as doing it with web-based system. So one of my initial decisions was to develop a synchronization mechanism which will manage & download the components needed to keep the window station up to date. Today we have a very nice mechanism which works against our web service, query for the latest components which are not installed in the specified station, download & install them as well as performing sql queries against InTask database so you’re always up to date. The web service also knows if the station is still in the support period and deserve to get free upgrades.
We are using a special installtion script to update the station with easy to use commands like download and sql.

In the next post i’ll talk about the general architecture of InTask.
See ya.