It's always a joyful moment writing a post announcing the development of a new pgModeler version, especially when it comes to the most important release ever. After all the complications I had in my personal life in the past two years, this post is even more valuable. Due to the pandemic restrictions and all the physical and mental problems it brought, I suffered from painful episodes in my spine, hands, and head which, unfortunately, culminated in hand surgery due to carpal tunnel syndrome. Thankfully, I'm feeling a lot better right now but this medical procedure (just one of many I had in the past) made me see that I was too accelerated, ignoring the signals of my body and abusing in the work... It was time to slow down, and that is what I'm doing since then, for the sake of my health.
Being ahead of this project all these years brought me a lot of experience as well as disappointments. It's not easy to run a project this size all alone, there are too many challenges that almost made me give up several times, but with the help of a bunch of kind people, I could recover my energies and keep working on this software that I consider my life's work from the perspective of an IT professional. With this post, I'm starting a new cycle, more confident, more cautious with my health, and more excited to bring you worthy enhancements.
So, let's talk about what comes next! :D
Some background story...
Back in the 2000's years, still in college, I had the desire to create something that could involve three areas of Computer Science that always fascinated me: compilers, databases, and computer graphics. When I had my first contact with the opensource world I met Linux, MySQL, PHP, Apache, and many other projects that just made me even more decided to create something useful as my humble contribution to the community. So, in 2004, I met a strangely named "guy" called PostgreSQL... I was amazed by the power that that RDBMS could deliver, it was a passion at first sight! I just ditched the other database systems that I used at that time and stuck with the blue elephant.
When I left college in 2005 with my Computer Scientist degree on my hands, I started to work as a programmer for the local government. That's when my real challenges had begun. I had to code and document the systems I was working on and at that time there was no software that could offer what I was looking for: a reliable and free (or cheap) modeling tool. All the ones I tested back then were too clunky to use, unstable, or not compatible with PostgreSQL.
So I took the decision to start my own tool just to supply my personal needs, in the first moment. That was the opportunity to put into practice my college dream. Since I had previous C++ knowledge I decided to stick with it and use some UI framework to make things easier. My options at that time were Gnome GTK, Trolltech Qt, and the now-dead Borland Kylix. Since I was using Linux and KDE I decided to pick Qt since the process to develop a GUI application on that framework seemed a bit less complicated and the look and feel of Qt-based apps were more appealing than the others. Well, the rest of the story is well-known but if you want to know more, just check here.
Another codebase upgrade is needed
Like any other tool that is built over a framework, from time to time, it will inevitably need to be refactored. In case you don't know, pgModeler (or pgsqlDBM in its early days) was refactored two times. This is something pretty common and necessary if you want to take advantage of bug fixes and enhancements introduced by the framework's major versions. This project was once ported from Qt 3 to 4 right before being available to the public, and from Qt 4 to 5 when Qt 4 gone deprecated. Now, that Qt 6 is out and pretty stable, it's time to make pgModeler's codebase compatible with it.
Unfortunately, despite all the facilities that Qt offers, porting a big codebase like pgModeler's is not a magic trick! A lot of work has to be put into it, and still, I expect that many things will break or need to be rewritten. Additionally, once ported the code to Qt 6 it's almost certain that pgModeler 1.0 will not be backward compatible with Qt 5 due to some important differences between these framework's releases. Thus, I'm pretty sure that this part of pgModeler 1.0 development will consume a lot of my time, and, while this stage is not finished and well tested I can't move on to the other improvement tasks. So, this is the first and most important step in the development process.
Say goodbye to PostgreSQL 9.x support
pgModeler came out to the public supporting only PostgreSQL 8.x, but a few years later, after some patches, PostgreSQL 9.x was fully supported while the ability to generate code for PostgreSQL 8.x was completely dropped since that RDBMS series was approaching to its end of life.
The dynamic code generation in pgModeler is one of the features that I'm really proud of. First, because it involves a bit of compilers theory (one of the areas that amaze me). Second, because it is powerful enough to let the tool generate the code for you taking care of the nuances between PostgreSQL versions. This feature allows you to model your database once and export it to different PostgreSQL versions provided that they are supported by pgModeler. This convenient feature has a lot of complexity under the hood and to support versions of the RDBMS that are deprecated just makes things unnecessarily hard to maintain.
Now that pgModeler 1.0 is about to be booted up, it's time to think of dropping PostgreSQL 9.x support, since the last version of the series, 9.6, is set to be discontinued next month. Additionally to that fact, it's always a big challenge to keep supporting different major versions. For example, there's a lot of important differences in syntax and internal details between PostgreSQL 9.x and 10.x but not between 10.x and the newer major versions, this fact per se affects directly how pgModeler needs to generate code and perform other tasks that depend on the database system, e.g., reverse engineering and database comparison. So, it's more valuable to drop the support to 9.x and focus on improving the code generation and other features for the rest of the releases than trying to embrace the world and keep trying to support all PostgreSQL versions knowing that some of them are close to an end.
So, if you still need to use PostgreSQL 9.6 and below (this is not recommended!), pgModeler 0.9.4 will be at your disposal until you move to a newer release of the database system and then to pgModeler 1.0.
UI/UX enhancements, please!
Yeah, I know... and how I know! After all those years of gathering tons of suggestions and criticisms, I'm trying my best to attend to all the users' needs. I have strong experience in back-end development, not in front-end, and this fact, unfortunately, reflects on pgModeler. I know that the tool suffers from UI/UX problems and I'm really decided to fix everything that is possible to minimize the users' annoyance with certain aspects of the tool.
I already have some critical points to start working on immediately. One of the planned enhancements is to allow more keyboard operations since for now pgModeler usage is strongly tied to mouse clicks. In fact, a lot of users prefer keyboard shortcuts over mouse moves and clicks, so, in order to make pgModeler more user-friendly, especially for those users' profiles, there's the need to make as many as possible operations doable via keyboard and not only through the mouse. This is something that will certainly affect the entire user's interface.
I also plan the do a complete redesign on the majority of forms and widgets, bringing a cleaner interface, with new icons, better support to high DPI screens, and much more. Since this is another time-consuming task that I have in mind from UI/UX perspective, my plan is to introduce widget redesigns little by little so I can take users' feedbacks into account before performing another round of modifications.
Here come the standard and advanced editions
When I started to work on pgModeler 15 years ago, I never imagined that it could go so far. The engagement of the community around it, either in the project's social networks or at the GitHub repository gave an enormous contribution and made it a solid and reliable product. Anyway, it was the financial support from the paying users that kept the project really alive.
It's no secret that pgModeler, like many other opensource projects out there, has a monetization model that involves pre-compiled packages. Technically, there's no difference between the self-compiled versions and the ones available under a payment at the project's website. What a paying user receives is the facility of a ready-to-use application, avoiding the waste of time trying compiling the software, in a process that, not uncommonly, takes too long to complete and can be a pain for the less experienced ones.
During all these years, I always wanted to give a bonus as an acknowledgment to everyone that believed in pgModeler's potential and supported it with money. In this aspect, I'm planning to create two different versions of the project: standard and advanced. These aren't official version designations and may change during the development. Anyway, the standard edition will be a base version of the project, where critical patches and selected new features will be integrated. The advanced edition, based on the standard one, will receive exclusive features that will be restricted to the paying audience. I sincerely believe that this is a fair approach since the standard edition still attends the majority of people looking for a free and reliable product while the advanced one will attend to the specific needs of a public that seeks a full-featured tool.
Okay, that's it! All I have for now is a lot of ideas that I'm really excited to put into practice. Anyway, before I dive into the development of pgModeler 1.0 I have to finish the 0.9.4 which has two releases scheduled until the end of 2021. My initial plan is to start working on 1.0 at the beginning of the next year and I'll do my best to launch the first preview as quickly as possible and, of course, always respecting my time and condition without abusing my health because I don't want to go into another surgery. :)
If you have some new feature you would like to see in pgModeler or want to give some suggestions about the ones already available, please, leave your thoughts in the comments section below or send us a ticket at GitHub. Thanks in advance!
Take care of your mind and body! :D
Until next time!