Proposal: Uniform Handling of User Data



Hello Gnome contributors,

 

Few months ago I came up with an idea, relevant to developers of any application software. I mentioned it somewhere here on the lists, got feedback, made changes and started coding it.

 

Now I have a closer-to-final view of the project, and I'd like to suggest it here and hear what you think about it. It may be somewhat revolutionary, I hope not too much :-) I didn't find other good places to submit ideas and get feedback, so I decided to do it here. Busy people ignore long messages, so I'll try to make it short and simple (for more info contact me).

 

THE PROBLEM:

Many desktop apps need to work with data. Unlike helper utilities used by the application, the tools which control data are associated with real-world persistent information, and the information exists outside of the application.

And yet, it is treated almost just like application utilities: Normal programming language classes are used for both coding utilities (e.g. I/O streams) and for the actual data (e.g. a Task class in a Todo app). When saving and loading the data, the developer needs to choose a format and work with libraries (e.g. XML, JSON, INI).

 

In fact, programming languages are a too, of programming, not a tool for arranging data: Classes, functions, objects, etc. are suited for programming a flow of instructions which do useful work. Data is totally different in nature, and so data serialization formats and utilities were created, such as XML and RDF.

 

The problem is that XML and RDF and other tools are not easy enough to use, and either they're not adopted, or adoption means a lot of extra programming work (e.g. many Gnome modules write complex procedures for working with XML). RDF requires a higher learning curve, and very few apps have Semantic Desktop integration, even though this area has been around for years.

 

THE PROPOSAL:

I suggest a uniform system which allows developers to work with user data easily. It's fast, simple, very easy to learn. The backend can be easily be replaced, e.g. save to file, save to semantic datastore, save to remove service. Semantic Desktop and translation-to-RDF can be made without changing application code. The data models can be written separately from application code. Thus data model design becomes very flexible and separate from code, allowing it to be done by non-programmers.

 

How it works? There is a data-modeling language. Some kind of mix between Turtle and Python syntax, but the point is that it's extremely simple. Non-programmers can easily start using it. The language allows defining data types using primitive builtin ones (e.g. define ID type to be a 9-digit string), properties, classes and objects. I wrote a full tutorial already, but for people familiar with RDF, the concepts are related (but not exactly the same).

 

A well-planned API exists, which allows developers to work with the data models. Instead of defining programming-language classes, the developer can use the model directly from code, or write thin convenience wrappers which delegate the work to the model management utility.

 

Writing these models doesn't require any special skills. It's very easy using a text editor, but I plan to create a GUI too, so that complex professional models can be made easily. As a bonus, users can easily customize the models and make applications behave like they want them to, in a manner never seen before. Your TODO app doesn't implement certain Task properties? No problem, you can add them.

 

Using special very-dynamic GUI widgets, it's possible for apps to respond to changes in the model, and allow some kind of "data programming" to be done by users and developers without changing application code. Translation of models to RDF and storage in databases can be made by the backend easily.

 

This new way of handling data is very easy, and I expect applications can start using it much earlier than Semantic Desktop spreads, so apps will already be ready for full desktop integration, and enjoy the dynamic data models.

 

 

 

There's a Gitorious repo containing a tutorial and more info about the language and proposal:

http://gitorious.org/peer-review

I'm writing the software in C++ (could port/move to C/GObject) and later I hope to add API bindings for higher-level app programming languages, Python being in high priority. But that's small detail, right now I'd like to hear comments, suggestions, ideas, etc. regarding the proposal.

 

Thanks and regards,

fr33domlover

 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]