Wednesday, August 12, 2015

Kartesio 1.0: free best fitting for science labs is now stable

I'm finally able to release the first stable version of Kartesio, Kartesio 1.0. There are lots of new features, and I feel the program is now ready for everyday use.

Kartesio is a program I wrote in 2011 for calculating best fit curves from a set of points. Kartesio uses QCustomPlot widget to plot data, and Maxima to solve expressions. The icons used in Kartesio have been designed by KDE Oxygen team. Kartesio also uses ZorbaNeuralNetwork to recognize the best fit curve. ZorbaNeuralNetwork is a library for easy neural networks construction I started writing in 2006, and supports training with both Widrow-Hoff algoritm and genetic algorithm.

Using the neural network you can choose the function prototype from a combo box

Using the regression algorithm you can write your own function prototype (the only rule is that it must be in the form "y=...")

Kartesio is not based on KDElibs anymore. I made this choice basically for two reasons: the main one is that I wanted Kartesio to run easily also on Windows, and KDElibs building is way too much complex for my taste. The second reason is that KDE developers seemed not particularly interested in Kartesio: maybe that's because this program is designed for science laboratories (in high schools and universities, for example) and this is a way too limited set of users for KDE Edu. Obiously, it's still a program meant to be used on KDE when possible (I'm using Oxigen icons to give that wonderful KDE feeling). But if you really want to use it without KDE, it's not a problem anymore.

Now, Kartesio is only based on Qt, and can be built everywhere you can install QtCreator just loading the "" file and pressing the "build" button. That's how easy I wanted it to be. It would be cool to make an Android version of Kartesio, but maybe this is quite too complex. For now, I prepared some binary packages for Windows and Debian/Ubuntu (you can download them from

And here is the source code:
Of course, in this repository you'll find the source code of both Kartesio and ZorbaNN, since this one is just a couple of C++ files. In case you want to use ZorbaNN in a program of yours, just copy the files "neuralnet.ccp" and "neuralnet.h" in your program directory. And you'll find also a working copy of QCustomPlot. To compile Kartesio you will need QtCore, QtGui, and QtScript. On a Ubuntu system you just need to install these two packages: qt-sdk qtscript5-dev. On Windows you just need to install the QtSDK with QtCreator, it's already complete.

I added a feature called "Automatic recognize shape": it uses the neural network to find out which shape fits best the experimental points. The fun part is that the program shows you the neural network in real time: while the automatic recognition is running, a little window appears. This little window represents the structure of the neural network: every I is an input neuron, and the O is the output neuron. Every input is linked to the output neuron via a weight, which is written just under the I character. This way you can understand how a neural network works. For me it's particularly interesting when the neural network runs with only the genetic algorithm, cause you can see how the evolution works.
Watch the neural network structure in real time

I don't have too much time to work on this program (I'm a journalist, not a programmer), and if anybody else wants to contibute to Kartesio or just fork it and play with the code, I'll be very happy. I started writing this program when I was a chemistry student, becaused I needed a best fitting program and I couldn't find one good enough for my taste. Hope this can be useful also for someone else.

I may write a handbook in the next months, if I'll have some spare time. But, again, if someone wants to write a handbook for Kartesio I'll be very happy.

There is a bug I'm already aware of: the program crashes sometimes when the plot is painting. This is not really a bug in Kartesio, but in QCustomPlot, and I did not understand its cause. In fact, this problem presents rarely and in different situations. Should not be a real problem: if you correctly saved your data you can just reopen Kartesio after the crash and then load your table and function.


  1. What about ?

    1. I'm not really sure about what to do with it. Kartesio is not based on KDElibs anymore, but it's still thought as a KDE application, and it's a kind of software that KDE Edu misses. I would like for Kartesio to remain in KDE Git repository. Is it possible to empty this repo and load the new code without merging, since the code has been quite completely rewritten? Anyway, if KDE sysadmins decide that Kartesio is not KDE stuff, it's not a problem for me to close this repo.

    2. You can be a KDE application as long as you follow the manifesto, one important part of that is that everyone has commit access to the code, meaning that either you don't use github or that if you use github it's just as a mirror and you have to make sure releases are made from kde's git repo, that all commits go first to the kde git repo and then github is mirrored from it

    3. Also with GitHub everyone can commit new changes: a programmer just needs to tell me his username, and I'll be happy to grant him write access. Also, everyone is free to fork this repo in his own account, make some changes, and then merge his changes with my main repo. Anyway, I would load the code in KDE git repo, if only I knew how to empty the repo from the code that there is actually in there. I'm looking for something more "elegant", but probably I'll end up deleting every file and then just pushing the new ones. Not elegant at all, but should work (I hope).

    4. About your problem: file a sysadmin ticket (with your identity account):
      Of course, as Albert pointed out, the main repository should either be on or not in at all.

      Anyway, the fact that the project is not in KDE Edu (the module released every 4 months as part of KDE Applications) does not make it less KDE or less interesting for developers. See gcompris in extragear-edu...

      (please note that with Frameworks you can add a limited amount of Frameworks libraries to make your life easier).

    5. "Also with GitHub everyone can commit new changes: a programmer just needs to tell me his username"

      See, that's not everyone already, we depend on you. That's not acceptable if you want to be part of KDE.

  2. This comment has been removed by the author.

  3. As a linux user, I would like to see more apps to be based on Qt libraries alone - that has two important advantages-
    1) broadens the use of the app to environments that only have Qt (blackberry, jolla, unity 8, android with Qt runtime etc)
    2) be independent of KDE release cycles- this has caused many good apps in the past to be lost with each iteration of kde frameworks/libraries.

    I run the KDE desktop but I wish that KDE developers focused on making KDE a lightweight desktop environment, encouraging apps to be independent of DE.

    1. KDE Apps are independent of the DE.

    2. I see your point is correct on a technicality but what I meant is that it should be independent of KDE frameworks etc. Basically, the apps must have a life without KDE ever being mentioned. And same goes for gnome as well.

      dbus and other services were designed so that apps can interact with their environment ( including desktop) without being aware of the implementation. If you need libraries necessary for a particular desktop then you are dependent on that DE, period.

    3. You assume that KDE Frameworks are only needed to interact with the desktop environment. That's not true, please check them:

  4. What makes you think no-one is interested? Didn't we have a KDE scientific group or mailing list? Marcus Hanwell was doing something? It's a niche area to be sure, so maybe not so many coders will contribute, but KDE is more than just coders, the l10n team is worth it alone!

    You don't need to use KF5 to be a KDE app, we do have several apps that don't, and others like Marble that have a Qt-only compile mode. I can understand the frustration with not being properly cross-platform yet, but it's slowly coming and to be honest an app like yours probably doesn't need that many KF5 libs so you may not even have a problem with building your own stand-alone installers anyway. It's people like you dedicated to wanting cross-platform apps that push us forward in that area by finding the problems and helping us solve them.

    As for GitHub, I understand the attraction, I use it for work projects where we've chosen to go where the possible contributors are and for the ease of use by our less skilled devs. I'm really hoping that the phabricator trials works out as I do believe we will continue to lose new developers if we continue to keep the entry barrier high while others keep lowering theirs.