Persistate

From the Author

Hide Navigation Pane

From the Author

Previous topic Next topic No directory for this topic  

From the Author

Previous topic Next topic Topic directory requires JavaScript JavaScript is required for the print function Mail us feedback on this topic!  

The Author

First, a very brief CV.  My name is Stuart Fairful, and I have been working in software development for over 30 years in various industry sectors - defence, health, scientific, oil, finance, networking, utilities.  During that time I have performed various roles - systems programmer, real-time programmer, applications programmer, database designer, protocol designer, technical director, development director.  I have used too many programming languages and development environments to list them all, ranging from various machine assemblers up to Java and C#.  I am currently based in Glasgow, UK.

A Brief History

Persistate has been an on-and-off project of mine for decades.  It started in the 1980's, believe it or not, when I was part of a team developing and commissioning software on an oil rig in the middle east.  It began life as a purely theoretical "system implementation language" - no doubt one of myriads dreamt up by programmers at the time that mostly remained purely theoretical.  This one was given legs by the fact that, once our major commissioning effort was over, I had a lot of free time on the rig, and very little to do with it.

Since then Persistate has been through many changes, has been renamed twice, has been abandoned for years at a time and reincarnated, and has transmogrified from a language, through various stages, to the current application generator and framework.  When the C# language and the .Net run-time first appeared, I immediately saw the potential for implementing Persistate on this platform, and I have been working on it since then, interspersed with paid work forced on me when I ran out of cash!

This latest .Net version of Persistate has evolved in that time, outside of any commercial requirements, and without any need for backwards compatibility.  I think that this free, agile evolution has contributed largely to the quality of the product today.  One important facet which evolved very early is that the Persistate framework is itself a fully fledged Persistate application - it partially generates its own code.  This means that it is a great testbed for itself, and it also reduces its complexity.  I wrote Persistate using Persistate since, well, it was the easiest way to do it!

The currently downloadable version 0.6 contains what I think is a workable feature set.  It is of course a beta version, but it is reasonably stable, and suitable for demonstration or non mission-critical applications.  I have listed the additional features I think are needed to make a first commercial version in Version 1.  Beyond that, The Vision sets out my ideas for how Persistate will evolve, and what it can eventually become.  If you like what you see, then please, Get involved!

Version 1

This is a list of the additional features that I think will be required for a first commercial release of Persistate.  This list is of course not set in stone, and in fact it is really driven more by what I think is missing than anything else.

Future Enhancement

This list contains only major features - there are other items needing done, and you may come across some of these in the Persistate documentation in notes like this one with the icon shown on the left.

Browser based user interface.  For the moment, Persistate includes only a Windows Forms based Desktop user interface module.  You may wonder why this is, with the current mania for all things browser.  It was mainly due to indecision about the particular technology to use - HTML4/5/Javascript?  Flash?  XAML/Silverlight?  Persistate forces a formal separation of the user interface from the controller, so there is no reason not to have several browser based UIs using different technologies.  The current desktop user interface can be seen as a "reference" UI.
User interface formats.  There is currently just a basic set of user interface formats available (such as text box, checkbox, grid, etc.), and no way for the developer to add new ones.  Version 1 will have a plug-in system allowing the developer to supply format classes, and the standard set will be much enlarged.
Database support.  Currently, Persistate supports only SQL Server and MySQL.  Version 1 should support a range of other DBMSes, including at least one in-process 'compact' system.
Full security.  Persistate does have a basic security model in the current version which permits particular users to run particular packages.  However, I have designed a fully featured security model for version 1 which provides more granular targeting.

The Vision

The vision I have of what Persistate can eventually become stems from decades of repeatedly solving the type of problem that Persistate targets, from countless occasions of thinking "Wouldn't it be great if you could just...", from having to solve the same problems over and over again, and from too many instances of my life being made needlessly difficult because of some badly written tool.  I am sure that any developer reading this will know exactly what I mean!

When I started out with Persistate, it was not anything like the system which is available today.  However, the underlying basic objective that I had in mind right from the start was the same one that I still have today.  It was, and is, entirely self-serving, and it is simply to make my life as a developer as easy as possible!  Happily, this objective is also to the advantage of all developers, and Persistate is an expression of that objective that all developers can use.

There are two ways to target this basic goal, given a particular problem for which you need a solution.  Firstly, you can reduce the scope of the problem, and secondly, you can use the most appropriate tools to solve whatever remains.  Persistate does both.  It allows you to concentrate on line of business concepts only, and generates an application for you, where you can fill in the blanks using a language you already know well.

So here is my wee list of ideas to take Persistate as far as I can see along the path to the objective.  Some of the ideas in the following list are technical, solving a particular problem.  Some are more general and to do with the way Persistate is presented or used.  They are listed in no particular order.

New collection types.  The persistent collections available currently in Persistate are essentially the kinds of sets delivered by SQL, projected onto an object oriented model.  But Persistate does strive to allow you to use persistent data like normal .Net object graphs.  So there will be new types of persistent collection, reflecting this aspect.
oCollections of primitive types,
oFixed size collections indexed by integers,
oFixed size collections indexed by multi-value types.
oSpecialised persistent collections corresponding to specialised .Net collections
oFollower collections (for want of a better term).  These will be automatically maintained collections with one element for every element in another target collection.  They will be indexed by the target collection elements.
oMulti-dimensional collections, with each dimension being of any of the other types.
Mobile user interface.  Touch enabled user interfaces for Windows Phone, Android and iOS devices.
Visual Basic support.  C# is the only language supported for now.  Persistate does abstract the language in code generation, so support for VB.Net and other languages should be relatively easy to add.
Foreign domains.  For now, a persistent object reference can address any object within one domain.  That object can be in any one of a large number of databases.  This addition will allow a reference to address a single object in any Persistate domain.  This effectively means that there will be a single world-wide persistent tree with the singleton Internet object at its root, and an addressing scheme which can physically address any object in this tree.
Linux implementation.  This may be problematic or may not, but I would very much like to get Persistate working in Linux, using the Mono framework.  Persistate is written in pure managed code, so theoretically it should not be too difficult.  This would also involve writing an add-in for an IDE such as MonoDevelop, and possibly new user interfaces for Gtk# and/or Moonlight.
Virtual databases.  There is a Persistate class called Database which represents, for now, a single physical database.  A virtual database will be represented by a single Database object, and therefore appear to your code as one database, but will be implemented by two or more physical databases.  Persistate applications will read from any of the physical databases (though this will be invisible to the developer), and there will be two ways of performing updates.
oThe hot standby, where all physical databases in the virtual database are always updated identically in the same transaction.
oThe replication set, where one physical database is updated first, and that update is later replicated to all others in the set.
Full versioning.   Currently, Persistate does not keep previous versions of objects after the end of the current operation.  This would allow previous versions to be kept, for certain categories of object.  It would also tie in with named releases of object subtrees.  Full versioning for all objects in an application would allow arbitrary rollback of transactions to any point, even through previous sessions.
Hosting, with Wizards.  The idea here is to move Persistate from the arcane realm of the software developer into the less specialised territory of the entrepreneur or power user.  This would be a service running in the cloud which would allow anyone to develop a bespoke line of business application.  Instead of writing a definition file, the user would use a wizard based interface to pick and choose pre-written components.  These would include operations linked to pre-written code, so components would be fully functional.

Given the ease with which Persistate packages can be implemented, it would be straightforward to write a large library of components for this purpose, covering a large set of common business practices.  Of course, the user would be able to customise the pre-written components as desired and Persistate would simply regenerate the necessary model and user interface.  There would also be a means of visually adjusting the layout, look and feel of the forms, grids and whatnot of the generated user interface.

The only things that a non-developer might have trouble with is coding any bespoke operations, or developing any custom UI, so for this they could be offered a consulting service, or even a crowd-sourced developer.  The output of the wizard and customisation process would be a normal Persistate package, which would of course be hosted in the cloud, and be available for immediate use.  Users would also be able to transfer the package to their own servers if they so desired, either immediately or at any time thereafter.

I think this way of presenting Persistate could be a killer app!  It would give start-up companies an extremely agile means of getting necessary bespoke IT up and running very quickly without involving external developers.  This doesn't just save money - using Persistate means that the people with all the domain knowledge now have a way to translate that knowledge into an IT framework themselves.  There is no longer any requirement to transfer domain knowledge to a specialist - always a fraught endeavour!

Workflow.  This could be seen as one of the pre-written components mentioned in Hosting with Wizards above, but I think it is more fundamental than that.  Workflow is an architectural element of business practice, and deserves to be mentioned separately.  Not only that, the Wizards themselves would be workflows.  This extends the idea of a wizard from something which is a sequence of steps performed by one person in one session, to a more extended directed graph of steps performed by any number of people, and which persists over many sessions.

Get Involved!

When I started work on the most recent .Net incarnation of Persistate, I decided that in order to persuade anyone that it was worthwhile to get involved with it, then I had to offer something other than vapourware.  I set my sights on a minimum working feature set that I would implement myself before going public.  That process has taken far longer than I originally anticipated.  (No surprise there then!)  Now that process is finally complete, and I am actively looking for collaborators.  Here are some ways in which you could get involved.

If you want to support the future development of Persistate, you can donate to the cause!  There are various incentives on offer.
If you are a top developer, and want to work on Persistate, then I want to hear from you.  Be aware though, that this will for the moment, of necessity, involve a contribution by you in return for a share of Persistate.  Your contribution could be money, or your time, or a mixture of both.  I am looking for the best only - highly experienced people at the top of their profession.
If you have other skills you think I will need - management, design, or whatever, then I could be interested.  The deal will be similar to the above - a contribution by you in return for a share of Persistate.
If you work in an ISV or bespoke software house, and want to use Persistate to develop applications, then I think there are ways to make that work.  Persistate is not yet ready for commercial shrink wrapped distribution, but is certainly viable in a situation which includes active collaboration. See Potential Investors Please Read!.
If you work in a large concern with substantial resources, you see a future in Persistate, and want to buy a large part of it, then absolutely I want to hear from you!   See Potential Investors Please Read!.

I do not want to rule anything out here.  The above list contains suggestions only - if you have any other ideas, please don't hesitate to get in touch.  Of course I realise that I am completely biased, but I am also immensely excited about Persistate and what can be achieved with it.  With the right investment of time and money by the right people, it could get massive.  If you think you are good enough, and want to be one of those people, then contact me!

 

Stuart Fairful,   February 2012