On Nov 5, 2012, at 1:55 PM, Geert Janssens <janssens-ge...@telenet.be> wrote:
> On 04-11-12 23:05, Christian Stimming wrote: >> Am Donnerstag, 1. November 2012, 09:43:30 schrieb John Ralls: >>> On Nov 1, 2012, at 9:32 AM, Geert Janssens <janssens-ge...@telenet.be> >> wrote: >>>> On 01-11-12 17:13, Derek Atkins wrote: >>>>>> Also, what is the policy of GnuCash towards manipulating the XML. >>>>>> >>>>>> Is modifying the XML also actively discouraged? >>>>> Yes. All data 'writes' should only happen through the GnuCash API. >>>> Which means there are currently 3 supported ways to modify the data: >>>> - using the GnuCash application's gui >>>> - you can write a guile/scheme script that uses the GnuCash API >>>> - if python bindings are enabled on your platform you can also write a >>>> python script that uses the GnuCash API. >>> There's a fourth: You can write a program in any language which can load a C >>> library. >> We used to be somewhat proud of this statement - being able to offer a C >> library that can handle the data store correctly. However, I think the times >> have changed. By they way, the gnucash API isn't only a C library, but >> instead, it's a C library requiring glib - any new platform would first have >> a >> glib being ported to it. >> >> Today, we have all those new mobile devices. They might even allow C >> libraries, but if they do, it would be a C library for specific architectures >> with significantly smaller target audience than the whole mobile platform in >> mind. Or in other words, one would have to cross-compile a whole set of >> different C libraries to cover all the mobile devices using a particular >> platform. And for the gnucash API this all wouldn't even work as long as >> there >> isn't a glib on that platform! >> >> Because of this new situation today, I think it would be quite useful to be >> able to modify our original point of view concerning access to the datastore. >> I think it would be quite useful to find some sort of datastore access layer >> that is *not* forced to be a C library. In fact, it shouldn't be tied to any >> specific programming language. If it were possible to postulate the structure >> of the datastore in such a language-independent way, it would enable other >> languages and platforms without C libraries to offer gnucash data display and >> manipulation. Such as Ngewi's Android app, directly accessing a SQL database >> with gnucash data. Or any app on any of those other well-known mobile >> platforms. They all have in common that it is impossible to use the gnucash C >> library. They all have in common that it's a huge improvement for users to be >> able to do their bookkeeping also from those devices. >> >> So IMHO the logical next step is to find some new formulation of the gnucash >> datastore where the data manipulation is no longer solely tied to a C >> library. >> I know this step isn't particularly easy, but I think the time has come to no >> longer outright refuse such a step. >> >> Regards, >> >> Christian >> > I agree with your point of view that there is a whole new breed of devices > flooding the market for which GnuCash as we know it is not really well > suited, both from a technology point of view (how portable is our code ?) or > in flexibility to adapt to new form factors. > > I'm a curious to learn what our options are to realistically improve this. > Below is a lot of thinking out loud about the situation we are in now. > > Reading the above, my first urge tends to be "rewrite the whole thing from > scratch, except cleaner and more perfect in a platform independent way". > Which I immediately reclassify as not very realistic considering the limited > time the current team of volunteers has to spend on the project. > > We could also try to "clean up the current Augean stable" as John nicely puts > it. I thought this was more or less what we decided to do the previous time > we did some introspection in the state of the gnucash code base. An important > first step was to write a good set of unit tests covering all critical engine > code. From there on qof could gradually be replaced with the more standard > gobject framework. The unit tests should prevent most of the regressions. But > I'm under the impression the unit test work has stalled mostly. And if at > some point in time Android will be considered an important primary platform > to run GnuCash on, we could wonder if this work is still worthwhile ? From > John's mail I understand that ios and WindowsRT would not be an issue if we > continue to work in C. > > An important factor to help evaluate this in my opinion is to look really > close at the way the new form factors work. GnuCash has always been and still > is a desktop application, and firmly relies on that desktop paradigm. I mean, > it is a tool meant to be used by one user at the time and intended for local > data stores. Yes you can use a remote database as a data dump. There's no > intelligence in the database layer at all though. And yes, you can access a > datafile on a network share. But those are all part of a desktop experience. > Tablets (and smartphones) on the other hand are heavily vested in a cloud > metaphor. Like it or not. Very few apps will let you choose where on the > tablet you want to store your data. Most of them are backed by a web service > which conveniently "take all the complexity of file management out of your > hands". People used to the desktop metaphor tend to find that ridiculous, > but my observation of less computer literate people around me confirm this > works. Such people really like the idea of just tapping an app, passing a > one-time setup consisting of entering an e-mail address and choosing a > password and go on happily using the app. They are not interested where their > data is stored and that it's most likely not on the tablet itself. > > So far the general idea. Where I want to get at is what Colin suggested: if > you want to do something in the tablet world, you have to think the tablet > way, which means "cloud". For clarity, when I say "cloud" I mean your tablet > app itself should be light-weight and be backed by a powerful online service. > This service can run either hosted on some public cloud provider, or on your > own server at your office. That's irrelevant here. So I'm not against the > idea of a web frontend for GnuCash. > > So that is one way to see GnuCash on tablets: a web service with an > associated client app on the tablets. This would allow us to reuse much of > the existing code base (the engine). Ideally, that would be split into a > separate library with a well defined api. This api could then equally be used > for the current GnuCash desktop application, a web frontend, perhaps even a > full featured GnuCash for tablets application on tablets that run C natively, > and so on. As far as I'm concerned I would even love to see our collegues > (like KMyMoney, Skrooge,...) use our own library to import/export from/to > gnucash. The same api could also be exposed via scheme and python (which are > there now already, but can then be cleared up as well), ... > > As for the work involved. It is still huge. I wouldn't know what is required > to create a web interface on top of GnuCash. But there are at least some > challenges I can think of: > * basic web protocols such as http are stateless, how does the server know > which client wants to access which data file ? Cookies ? Perhaps. > * Web clients generally don't inform the server they have finished. Each > server interaction is more or less atomic on it's own. So how will the server > know a data file can be closed, has to be saved, ... All desktop metaphors > that are clumsy in a web interface world. Xml is useless as a backend in this > context. > * The database backends go partly in the right direction, but still aren't > adapted to be used as web server backends. The current sql backends still > load the whole dataset in the beginning because the GnuCash engine was never > written with a database as backend in mind. This would have to be fixed. > * Simultaneous multi-user access is definitely a basic requirement. Even if > there's only one real user, he/she will most certainly want to access the > financial data from both the tablet and the desktop without having to > remember to log out on the one first before logging in on the other. > And so on... > > Anyway, that's the option I see currently. I'd love to hear other ideas > though. OK. Engine unit testing has gotten set aside this summer by my realization that we're running into the 2038 date issue rather sooner than we expected, because it's breaking long-term SXes. Dealing with that turns out to be a lot of work, but I hope to wrap it up by the end of the year and get back to testing Engine and QOF. That aside, there are two ways to approach cloud storage: A web service, where all of the heavy-duty thinking happens on a server somewhere, is one, but just storing on a server somewhere is another. Both Apple and Microsoft include direct support for this in their latest offerings, but we'd need to write QofBackends to make use of it. There's probably a way to get there from Android as well, but they don't make it easy. Having a true web-app would indeed finesse that problem. The normal way to implement that is AJAX, and it can be state-ful. The state exists on the server side, where a database transaction is begun and either committed or rolled back, perhaps after a time out. All standard stuff. Requires getting to a true transactional database program, though. Simultaneous users comes for free with that. That's my long-term plan… Regards, John Ralls _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel