Developer's Diary

Hi there,
Writing Changelogs is not fun, and posting on Twitter is too restricted, so I propose to write here some short news about the development of G’MIC.
Most of the things presented here will probably be of minor interest, but at least it will allow me to give a progress report on the work done on a day-to-day basis.

So, here we go!


2019/09/03 :

It’s been a while since I’ve reported anything.
I went to a conference in Lille at the end of August, and I had the opportunity to work on G’MIC again between two talks. Mainly, I worked on improving the patch matching algorithm, with slight but nevertheless visible consequences on the quality of the results obtained by the style transfer algorithm in G’MIC.
So yesterday, I released a new minor version of G’MIC, namely the 2.7.1, with these small improvements.
We also had the pleasant surprise to learn that Gilles Caulier, the main developer of Digikam, has started to integrate the G’MIC-Qt plug-in directly into Digikam! That’s some good news!

The conference being over, I went back to the lab and I will have to take a break from the development of G’MIC, to take care of the research team for which I am responsible.

Maybe more news soon!


2019/08/14

In the last few days, I’ve been focusing on cleaning the code, improving the release script, and the last various tests to be performed before I can release the new version of G’MIC today (numbered 2.7.0). It’s the kind of thing that’s not very exciting and time-consuming. But now it’s done!
So in bulk:

  1. I was able to make G’MIC compile with the latest version of Visual Studio 2019 on Windows, and also with Clang++8. I don’t use them, but it’s always good to test different compilers to recover and fix new small errors or warnings. There has clearly been some effort on these compilers, because they can now compile G’MIC with the optimizations enabled without eating 20 giga of RAM, and without taking 1 hour:) On the other hand, I am quite disappointed with the performance obtained with the gmic binary compiled with Clang++8, which is clearly below what g++ produces.

  2. I installed the latest version of Debian (Debian 10 Buster) on a virtual machine (I use VirtualBox), and made my release script work on it. It was a little complicated because the Shared Folders feature didn’t work on it, so it took a while to make it work! But hey, G’MIC now offers a .deb package for Debian 10 that is functional (with the plug-in for GIMP 2.10).

Now that v.2.7.0 is out, I guess I should settle down a little and think about something else.
But I’d still like to write a little article about it (like I did for the release of v.2.3.6 almost a year ago). I think it’s time for me to summarize the new features added over the past year (and there are a lot of them), because after that, I don’t know if I’d have the courage to get into it!

Work in perspective until next week! :hot_face:


2019/08/11

It’s Sunday, I’m not supposed to work today :slight_smile:

So what I did is just working a bit on the release script and the download page, so that files downloaded by users for stable versions are now unique and contains the version number.
I also have written a script that automatically updates the version numbers on the download page when a new release is available.
Not a very exciting day in terms of new G’MIC features, but I warned you in my first post. Project management also include quite boring tasks :slight_smile:


2019/08/09:

Today, some minor advances on G’MIC:

  1. Update on commands text and image:

I’ve finally decided to change the syntax for the commands image and text when given position arguments correspond to centering rather than absolute position. Rather than writing ~0.5 or ~50%, I now only support 0.5~ (the tilde takes then the place of the percentage).
So now, an alignment parameter has always a natural value in [0,1]. This is coherent with the other commands that already take alignments as arguments (e.g. resize or append).
This redesign made me also realized I had introduced some minor bugs in the G’MIC code, when introducing the previous feature. And the bugs were occurring only on Windows (where I don’t have valgrind and fsanitize=address is not working…). So, I had a little bit of a headache with printf() to debug all this, until unreasonable hours of the night yesterday :slight_smile:

  1. Having releases on FOSSHUB:

I have been in contact with @FossHub . He offered me the possibility to host my release files, which I find quite interesting because the web hosting service I’m using right now for the G’MIC website has been primarily designed for “personal pages”, and thus I have a limit on the allowed bandwidth. I think that if I exceed the bandwidth limit allowed, I’ll have to subscribe to a more expensive hosting service. So having the release files hosted on FOSSHUB is clearly a helper for me (not to mention that the download speed is faster on this platform). So, @FossHub created a “partner account” for the G’MIC project on FOSSHUB, and I had to familiarize myself with the way it works. Took some time, but I’m now prepared to use it for the next release 2.7.0 :slight_smile:
Also note that the packages are still available on the G’MIC website, so from my point of view, FOSSHUB serves as a mirror to reduce bandwidth usage on the main site, which is really nice.

  1. Updates on the G’MIC download page:

A last task done today was to integrate Paypal buttons allowing small donations to the G’MIC project, directly on the download page of the website (thanks to @Jehan for his precious help).

The idea is to offer visitors (who want to download the G’MIC-Qt plug-in, for example) a simple one-click way to donate a small amount of money to the project. I think It remains quite discreet, and it makes the possibility of encouraging us more visible and easier to use.

You may have notice that recently, I have been working hard to make G’MIC donations more visible. To be perfectly honest, getting the right to request donations for the G’MIC software has been a very long and tedious process (due to administrative bottlenecks and the fact that it is not something we are used to in research labs).
To be more precise, I had been trying to make this possible for more than 2 years!

So now that this donation system has been validated and is operational (since March, with the help of the LILA association), I can only hope it works, to show the administrators that all these efforts were worth it!

The first year of operation will be crucial in determining whether it is worthwhile to continue investing efforts in the development of G’MIC. I keep my fingers crossed, but as they say: “At least we tried!” I’m still optimistic:)

that’s all for today.
This weekend it will be gardening if the weather is fine.


2019/08/08:

Today, I worked on two different things:

  1. Making donations more visible:

This is something I started two days ago, when Jehan (from the LILA association, which collects donations for G’MIC) sent me a CSV file summarizing the donations received for the project since March 2019 (Thanks again to all the donors!).

This gave me the idea to make these figures public, without having to reveal all the details (including the names of the donors!). So I programmed a small G’MIC script that analyzes this CSV file, and generates a small image summarizing the donations received for the last 4 months.
It renders this:

gmic_donations

This thumbnail image now appears on the main page of the G’MIC project (https://gmic.eu),
as well as when selecting the filter About / Support Us in the G’MIC-Qt plug-in for GIMP/Krita/Paint.NET.

The donations received so far do not represent a very large amount of money, but should already make it possible to extend the hosting service for the project’s website.
I don’t really know what to expect for a project like G’MIC, to be honest. We’re moving a little blind. We give ourselves at least a year to see how it goes!

  1. Improvement of the text and image commands:

I have often been bothered with these commands when I had to use them to get something “centered”.
Indeed, the coordinates given as parameters correspond to a location in the image, and even if parameters like 50% are allowed, this was not enough, because it corresponds to the position of the lower left corner of the text or sprite to draw in the image.
For example, writing

$ gmic 200,200,1,1,3,255 text "FooBar",50%,50%,32

displays the text FooBar with its lower left corner located exactly at the center of the image:
foobar1

But if we wanted the whole text FooBar centered in the image, it became more complicated, because we had to know the size of the text a priori. So you had to render the text first, then display this rendering on the image afterwards.
This means, with current stable version of G’MIC (2.6.7), writing something like:

$ gmic 200,200,1,3,255 0 text. FooBar,50%,50%,32,1,255 negate. to_rgb. j.. .,"{[w#0-w,h#0-h]/2}" rm.

foobar2

and here, without any particular transparency, and with a uniform white background!

So I found and implemented a simple solution in upcoming version 2.7.0, which allows to call the text and image commands directly with a centering parameter (indicated by the postfix ~ instead than %), rather than a position in the image.
So we will be able to write:

$ gmic 200,200,1,3,255 text. FooBar,0.5~,0.5~,32

to obtain an image equivalent to the one above.
It’s better, isn’t it? :slight_smile:

Well, that’s all for now. I will try to add comments to this post as small (or large) advances are made on the G’MIC project. I’ll post new pre-release binaries this afternoon, with these changes included!

1 Like

Hello David,

Could you please let me know what the approximate hosting cost per year is?

Thank you!
Sam - FossHub

If I remember well, it’s a bit less than 100 eur / year.
So at this point, we should already have a few years guaranteed :slight_smile:

Hello David,

Well, please check your donations. Hopefully, we added a few extra years.

Thank you!
Sam - FossHub

3 Likes

Thank you very much!

By the way, I can’t check the donations now, because they are collected by the LILA association, and they are the ones who have access to the account and who give me the summary from time to time :slight_smile:
I think we’re going to find a way in the future to access it more frequently, but it hasn’t been done yet. Thanks again, anyway!

2 Likes

Nice upgrade. Good to see that you have more time to relax. :stuck_out_tongue: The default forum background is white: adding a border might help. :slight_smile:

1 Like

2019/08/09:

Today, some minor advances on G’MIC:

  1. Update on commands text and image:

I’ve finally decided to change the syntax for the commands image and text when given position arguments correspond to centering rather than absolute position. Rather than writing ~0.5 or ~50%, I now only support 0.5~ (the tilde takes then the place of the percentage).
So now, an alignment parameter has always a natural value in [0,1]. This is coherent with the other commands that already take alignments as arguments (e.g. resize or append).
This redesign made me also realized I had introduced some minor bugs in the G’MIC code, when introducing the previous feature. And the bugs were occurring only on Windows (where I don’t have valgrind and fsanitize=address is not working…). So, I had a little bit of a headache with printf() to debug all this, until unreasonable hours of the night yesterday :slight_smile:

  1. Having releases on FOSSHUB:

I have been in contact with @FossHub . He offered me the possibility to host my release files, which I find quite interesting because the web hosting service I’m using right now for the G’MIC website has been primarily designed for “personal pages”, and thus I have a limit on the allowed bandwidth. I think that if I exceed the bandwidth limit allowed, I’ll have to subscribe to a more expensive hosting service. So having the release files hosted on FOSSHUB is clearly a helper for me (not to mention that the download speed is faster on this platform). So, @FossHub created a “partner account” for the G’MIC project on FOSSHUB, and I had to familiarize myself with the way it works. Took some time, but I’m now prepared to use it for the next release 2.7.0 :slight_smile:
Also note that the packages are still available on the G’MIC website, so from my point of view, FOSSHUB serves as a mirror to reduce bandwidth usage on the main site, which is really nice.

  1. Updates on the G’MIC download page:

A last task done today was to integrate Paypal buttons allowing small donations to the G’MIC project, directly on the download page of the website (thanks to @Jehan for his precious help).

The idea is to offer visitors (who want to download the G’MIC-Qt plug-in, for example) a simple one-click way to donate a small amount of money to the project. I think It remains quite discreet, and it makes the possibility of encouraging us more visible and easier to use.

You may have notice that recently, I have been working hard to make G’MIC donations more visible. To be perfectly honest, getting the right to request donations for the G’MIC software has been a very long and tedious process (due to administrative bottlenecks and the fact that it is not something we are used to in research labs).
To be more precise, I had been trying to make this possible for more than 2 years!

So now that this donation system has been validated and is operational (since March, with the help of the LILA association), I can only hope it works, to show the administrators that all these efforts were worth it!

The first year of operation will be crucial in determining whether it is worthwhile to continue investing efforts in the development of G’MIC. I keep my fingers crossed, but as they say: “At least we tried!” I’m still optimistic:)

that’s all for today.
This weekend it will be gardening if the weather is fine.

1 Like

2019/08/11

It’s Sunday, I’m not supposed to work today :slight_smile:
So what I did is just working a bit on the release script and the download page, so that files downloaded by users for stable versions are now unique and contains the version number.
I also have written a script that automatically updates the version numbers on the download page when a new release is available.
Not a very exciting day in terms of new G’MIC features, but I warned you in my first post. Project management also include quite boring tasks :slight_smile:

1 Like

2019/09/14

In the last few days, I’ve been focusing on cleaning the code, improving the release script, and the last various tests to be performed before I can release the new version of G’MIC today (numbered 2.7.0). It’s the kind of thing that’s not very exciting and time-consuming. But now it’s done!
So in bulk:

  1. I was able to make G’MIC compile with the latest version of Visual Studio 2019 on Windows, and also with Clang++8. I don’t use them, but it’s always good to test different compilers to recover and fix new small errors or warnings. There has clearly been some effort on these compilers, because they can now compile G’MIC with the optimizations enabled without eating 20 giga of RAM, and without taking 1 hour:) On the other hand, I am quite disappointed with the performance obtained with the gmic binary compiled with Clang++8, which is clearly below what g++ produces.

  2. I installed the latest version of Debian (Debian 10 Buster) on a virtual machine (I use VirtualBox), and made my release script work on it. It was a little complicated because the Shared Folders feature didn’t work on it, so it took a while to make it work! But hey, G’MIC now offers a .deb package for Debian 10 that is functional (with the plug-in for GIMP 2.10).

Now that v.2.7.0 is out, I guess I should settle down a little and think about something else.
But I’d still like to write a little article about it (like I did for the release of v.2.3.6 almost a year ago). I think it’s time for me to summarize the new features added over the past year (and there are a lot of them), because after that, I don’t know if I’d have the courage to get into it!

Work in perspective until next week! :hot_face:

2 Likes

Of topic but for VB Debian 10 there are no linux-headers installed by default. You have to install them for the VB guest additions to build various things.
screenshot https://i.imgur.com/nSJjWKI.jpg
Then of course add yourself to the vboxsf group for access to the shared folders.

Even with the correct linux-headers installed, it didn’t work. It did compile the kernel module correctly, but it was not able to load/enable it, for some mysterious reasons.
The solution was actually simple: I’ve found that the development version of the Guest Additions solve this problem (but unfortunately, I’ve tried dozens of things that do not work before :slight_smile: ).
It seems that the linux kernel used in Debian 10 is not compatible with the compiled modules from the Guest Additions I had (I use Virtualbox 5).

I appreciate this diary more than the change log: the adventures of David and G’MIC. :+1: Glad you found the solution. I don’t touch these problems anymore; I let others figure it out. :sweat_smile:

What I realize when I write this journal is how much time I spend doing things that are invisible to users, rather than adding real impressive features! It’s a little frustrating, but I guess it’s the same for all projects.

1 Like

2019/09/03 :

It’s been a while since I’ve reported anything.
I went to a conference in Lille at the end of August, and I had the opportunity to work on G’MIC again between two talks. Mainly, I worked on improving the patch matching algorithm, with slight but nevertheless visible consequences on the quality of the results obtained by the style transfer algorithm in G’MIC.
So yesterday, I released a new minor version of G’MIC, namely the 2.7.1, with these small improvements.
We also had the pleasant surprise to learn that Gilles Caulier, the main developer of Digikam, has started to integrate the G’MIC-Qt plug-in directly into Digikam! That’s some good news!

The conference being over, I went back to the lab and I will have to take a break from the development of G’MIC, to take care of the research team for which I am responsible.

Maybe more news soon!

I have a question about G’MIC. Is it possible for G’MIC to support vector layers. The reason I ask this question is that I would someday like to make a faster, and extended version of @samj filter scintillement colores contour. The idea I had in mind is to use vector layer, and then rasterize that. That way, you would not need to copy so many images to get the result achieved by that. I was also thinking of supporting radial gradients within each vector.

G’MIC works only with bitmap images. If you want it to work on vector layers, then you have first to rasterize your layer. If you want the Krita plug-in to do it automatically, then @Boudewijn_Rempt is probably the only one who can tell if this is possible or not.

That answers the question. I was more thinking of using vectors as a workaround to reduce number of data to process the end result. Like that scintillement colores contour filter could be so much more faster with vector as a backend to raster result. Vector layer support would be great (Imagine G’MIC for Inkscape, but for vectors), but I know both of these ideas are a long way off.