[Kommander-devel] Kommander 2 (KDE4) planning

Eric Laffoon eric at kdewebdev.org
Sun Mar 16 17:31:40 EDT 2008


Hi all,
I was taking a minute to look though some docs. Sebastian Sauer had mentioned 
using Qt Plugins and I was reading up on them as well as the new Qt Designer. 
Refernces...
http://doc.trolltech.com/4.2/plugins-howto.html
http://doc.trolltech.com/qq/qq16-designer.html
http://doc.trolltech.com/4.2/qtdesigner.html

One thing I have found with C++ and Qt/KDE is that it fits the definition 
of "like peeling an onion". It's amazing how much a few lines of code can  do 
and exceedingly difficul to comprehend everything going on without building 
it and seeing what it did. Not bing a guru in this department I thought I'd 
put out my current thoughts and observations and get some feedback, ideas and 
clarification.

As I see it one chief advantage offered in KDE4 is that Kommander could exist 
less as Kommander and more as a set of plugins. Issues, like Widgets. While 
we started out subclassing widgets it appears Qt pugins offer more than just 
a method of shared access for DBUS enabled languages. It looks like we can 
create a plugin from a widget and merely add Kommander distinct functions. 
Instead of having to write functions to set and get properties it looks like 
we could just write a standard inteface module to retain consistent Kommander 
syntax, and other scripting languages could do the same.

Effectively this has the potential to turn the application development process 
on it's head. While there could be standard widgets shipped as there are now, 
it would also be possible to release individual widget updates separately as 
ever widget would be a pugin, whether packaged or not. This brings up 
something Michal and I discussed... How to validate what version is requred 
for a program developed with Kommander. I have an idea for this, as well as 
security, but first, the executor and editor. For the executor, again it 
looks like a program similar to what we have now, but loading the plugins 
being called. 

For the editor, I am not sure the full considerations with using Qt Designer, 
but from what I can see the only real issue is how much work we want to make 
for ourselves. First of all I think Desiger is built around the concept that 
you will be mostly doing GUI design there and editing elsewhere. That concept 
is worth looking at. Possibly a KDevelop platform integration would make 
sense. My preference is to have some form of tabbed editing, and what Andras 
did making it possible to view a second instance read only is very handy. I 
tend to think the dialog should float and the editors should be in the MDI, 
but I'm finding the improvements in Kommander 1.3 very agreeable. So possibly 
just using Designer with new modules might be acceptable. While I want to 
extend the power of Kommander I also want to avoid intimidating novice users.

The big question in using Designer seems to be how do we get it to block non 
Kommander widgets, or do we even want it to. For instance let's look at the 
simple LineEdit. If we used a KDE widget that was not a Kommander widget, and 
we have access to all it's properties as well as signals and slots... Do we 
even need to have it be a Kommander widget? I think maybe for legacy usage. 
So this potentially simplifies (or maybe complicates) things more. I am still 
considering how this affects our dealing with types as Kommander attempts to 
be typless by default. I would like to retain the simple while making less 
simple things possible.

At the heart of everything it appears we can mix and match Designer parts as 
well as create our own. My inclination is as always to achieve as great a 
result as possible with as little effort as possible. This appears possible 
as it looks for the first time like we would not have any sane reason to fork 
Designer like we did before. After the basic setup to integrate Kommander 
functionality my objective is to expose an interface to develop Kommander 
extentions with Kommander. In fact I'd like as much as possible of the next 
Kommander Editor to be developed with Kommander. Those would include project 
management and custom tools.

Kommander requirements validation - this is what I propose. Any part plugged 
into Kommander should have version information included. We should have an 
automated method of listing functions and parameters on release of any 
package or plugin. We then offer an analysis tool. You take your application 
and expose it to the tool, which is aware of the latest version of everything 
you developed. It then scans calls against the database and indicates the 
version required to run it. This is then put in a requirements file. If you 
download an application packaged with this file a program can run it and 
compare to your installed information database and tell you what plugins you 
need to install or upgrade to run it. What would really be cool is to offer 
to download and install these.

Developer support - I think we should begin planning the next level of 
application developer support to organize an army of "everyman developers". 
For starters they register on the user/developer web page and get an account. 
Then they fill out a form to create a template based web page describing 
their development efforts. When they release a package they post it on out 
site with Kommander tools that validate their user ID. If they have 
additional resources they can upload them. When a user is notified or checks 
for updates they can see the latest updates and download and install them. 
Users will also have a KStuff like repository to share, but unlike KStuff it 
will incorporate user accounts and digital keys. 

Here is my next gen security proposal. The executable bit is lame for 
security. I mean I could distribute a dialog that created a cron job to set 
the bit on every Kommander file it found every 5 minutes. We should keep it 
to have it, but we shoudl do something elegant that works. Here's my 
proposal.

People distributing apps through our web site will have an advantage... When 
the program is run for the first time if the bit is not set it will look for 
an embedded developer key. This key would be obtained when you signed up and 
when you develop it would embed automatically. It would basically be a short 
unique string identifying the developer. Here is how it works:
1) a non executable script is called which contains a developer key beginning 
the enhanced security process
2) the Kommander executor checks for internet access and then either asks the 
user to authorize the recommended security check or to connect
3) once connected to the account indicated by the key the executor gets the 
dialog internal name and runs a crc check, both of which are sent to the 
server
4) the server compares that specific window ID and crc with what is on file
5) if the program has multiple dialogs listed with it a list is sent back and 
the user is asked to authorize tests for a list of included parts
6) if all tests are clean the executable bits are set
7) if something doesn't validate it is logged on the server and the user is 
instructed the dialog has been altered and is advised to contact the 
developer before running it

If a pattern is detected the developer is notified. I think we can generate 
these crc files online. Ultimate security could be obtained by having the 
developer place a private key in the database and distribute dialogs with the 
public key embedded. The point is this distributes packages with 
accountablity. If a user reports a valid package damages their system we can 
suspend authoriation for that user/developer and investigate the suspect 
file.

To my mind this offers excellence.
1) real secutiry
2) stops scaring users
3) bands developers to a portal with support

We can then offer application and author approval ratings and reviews. We can 
probably rally this to greater financial support, if nothing else offer a 2 
Euro a month subscription to a developer advanced monthly publication or 
something.
-- 
Eric Laffoon
Project Lead - kdewebdev module


More information about the Kommander-devel mailing list