ia: Benvenite! In mi blog io scribe in interlingua, italiano e anglese.

it: Benvenuti! Nel mio blog scrivo in interlingua, italiano e inglese.

en: Welcome! In my blog I write in Interlingua, Italian and English.

First AppImage for Imaginario

As a follow-up to my previous post, I've finally succeeded in building Imaginario as an AppImage package.

I've smoke tested the package in Ubuntu Xenial and Trusty, and while it appears to be working, I'd be happy if someone else could also download and test it in their machines and let me know how it goes. Just please keep in mind that this a very beta release and, while I'm not aware of any major bugs that could corrupt your photos, I wouldn't recommend you to import your photo archive into it, unless you backup it first.
Also, the application needs quite some more polishing before being ready to be publicly advertised to non developers (I'm also considering finding a new icon for it), so the next step after getting a nicely working AppImage will be cleaning up the user interface and make sure that all the (few) features work as advertised. And making a Windows version. And a MacOS one. Oh, I'd better stop thinking about it, or I'll start crying.

A Docker image for building portable Qt applications

I've uploaded to the Docker hub an image that I will be using for building my Qt applications and packaging them into an AppImage file. To which you might be asking: why bother?

The point is that this is a slightly special image: as its Docker tag (trusty-qt512) says, this image ships Qt 5.12 on top of Ubuntu Trusty (yes, that's 14.04!). The reason why I'm using such an obsolete distribution is that I'm striving to get my AppImage package to be as portable as possible: in fact, my early builds of PhotoTeleport were run on a more recent Ubuntu 16.04, but some users complained that they couldn't run it in their own distributions (IIRC, these were Arch Linux and, indeed, Ubuntu 14.04). The problem is that while packages in the AppImage format bundle their own dependencies in the package, some libraries are generally excluded, as bundling them can cause a variety of issues. But that means that if you are building your application in a system which ships newer versions of these libraries than those installed in your users' machines, there's a high risk that your application will be using some newer symbols not present in the older versions — and therefore your application won't run in those machines.

To solve this problem, the recommended approach is to build on the oldest system that you wish to support; and given that I'm mostly familiar with Ubuntu, I chose Trusty as my target. Luckily, the Qt binary installer shipped at qt.io also happens to support Trusty, so I'm all settled. Indeed, Trusty does not ship recent versions of the C++ compiler, but that can be easily solved thanks to a wonderful PPA which ships up to g++-8.
I've also added the latest version of cmake, as it's unlikely that one can live with the very old version that's shipped in Trusty.

The Docker image can be pulled and used in your own machine or set as a baseline in your .gitlab-ci.yml recipe, if you happen to use Gitlab and are interested to generate the AppImage file from there. That's what I'm trying to do for another project of mine, and while I'm not there yet, the goal is getting closer and closer. Those interested in seeing exactly what is going into my Docker image can have a look at its Dockerfile. There are a few issues with this approach, though, and I feel that I should highlight them in order not to raise your expectations too much:

  • You must B.Y.O.D. (Bring Your Own Dependencies)! It's likely that at least some of the libraries used by your project won't exist in Trusty, or will be an older version unsuitable for your needs. That means that your .gitlab-ci.yml will have to be modified to retrieve a newer version of the library and build it prior to building your application. There are good and bad sides to this: the good one is that this encourages you to use the very latest version of the dependency, which otherwise you might not have used by preferring your distro's version; the bad side is that this is extra work for you (and for the Gitlab CI), and that you risk missing some critical security updates if you don't closely follow the upstream development of your dependencies — something that your distribution's maintainers are likely to do for you. Anyway, here's an example of how I've changed Imaginario's CI recipe to build and fetch exiv2 from its upstream site, with caching of the build artifacts.
  • Gitlab CI becomes slower! Compared to my previous builds, each job has become one or two minutes slower. This is mostly due to not using ubuntu:16.04 as a baseline: the standard Ubuntu images are widely popular, so Gitlab is playing smart and caching them. On the other hand, it seems that my custom image is being pulled every time from the Docker hub. :-(

Of course, if you know of a better way to build a portable binary while not renouncing to the benefits of using a newer Linux distributions, you are very welcome to let me know in the comments. :-)

Santa brings PhotoTeleport 0.9 with two more upload plugins

A few days ago I've released PhotoTeleport 0.9, whose main improvements from the previous version are the added support for Imgur and SmugMug.

PhotoTeleport is an open source, multi platform photo uploader, written in Qt + QtQuick.Controls 1 which supports uploading your photos, along with title, description and tags, to many different sites at the same time. Those interested in the detailed list of changes can read the full announcement here.

Buon Natale!

Nell'augurare ai miei due lettori un felice Natale, colgo l'occasione per ripubblicare qui un bel messaggio di auguri che ho trovato sul blog di Naman Tarcha, giornalista siriano nato ad Aleppo e residente in Italia già da molti anni:

Il periodo natalizio per me da piccolo è sempre stato il più bello dell’anno, non solo per gli addobbi, le luci, ed i regali, che non sempre arrivavano, non perché non si andasse a scuola e non si facessero i compiti, ma per tutti i riti e gli appuntamenti che la stagione prevedeva. La mia agenda era sempre piena, avevo tanto da fare: uscite, feste, volontariato, parenti e amici da incontrare, cose da organizzare, e tanta, tanta, attesa. Attesa di una gioia che scaturisce da una nuova vita. Tutto coincide con l’esame personale di fine anno: tirare le somme di ciò che è stato, sperando che ciò che verrà sia migliore. Quello che invece non riuscivo a capire davvero erano le preghiere per la Pace, durante tutte le celebrazioni. Ero uno dei capi dei chierichetti e durante le lunghe messe, a volte troppo lunghe, avevo tanto tempo per distrarmi e riflettere. Insomma, Pace dove? Da noi non c’erano conflitti, e pensavo con tenerezza e compassione ai paesi in guerra, quelli lontani e sconosciuti, io che non ero mai uscito dal Paese, e solidarizzavo con loro. Le cose sono cambiate da quando ero bambino, e uomini cattivi hanno devastato il mio bel Paese, calpestando la Pace per interessi, ideologie e denaro. E negli ultimi sette anni ho visto la sofferenza del mio Paese, che non avrei mai voluto vedere. Non c’è una famiglia tra quelle di parenti e amici, in cui qualcuno non abbia perso la vita in un attentato o sotto le bombe dell’odio, o abbia abbandonato tutto e sia fuggito lontano, perché non aveva più nulla. Ho amici ormai in ogni luogo della Terra. In questi anni, ho imparato ad essere cinico: quando affronti il dolore e guardi la morte in faccia, afferri più fortemente la vita, e non ti fa più paura perdere tutto. Tante persone, amici e sconosciuti con storie straordinarie, mi hanno dato tanto. Mi hanno trasmesso forza, coraggio e grinta, per poter andare avanti. L’assurdo è che a trasmettermi la speranza, erano loro, sotto l’assedio e le bombe dei terroristi. Mi ricordo ancora, qualche anno fa, quando a Natale sono riuscito a parlare al telefono con mia madre; mi diceva: “come stai, stai bene? Sono preoccupata per te!”. Rispondevo : “Mamma sei tu che sei ad Aleppo, in mezzo ai terroristi!”. ”Stai tranquillo, abbiamo superato due guerre, supereremo anche questa!”, mi disse. Oggi cade il secondo anniversario dalla liberazione della mia città, Aleppo, grazie al sacrificio di tanti uomini e donne che con loro resistenza e pazienza, sono riusciti a sconfiggere il male, e a riprendersi la propria città, che sta tornando in vita più forte di prima. Questo ritorno alla normalità, anche se non piace ai nemici dei Siriani, è il vero miracolo. Tante persone sono incredule, e vedendo le immagini della città addobbata e pronta per festeggiare, insieme al santo Natale l’anniversario della sua rinascita. Quest’anno, quando pregherete per la Pace, dedicate un pensiero ad Aleppo e ai suoi abitanti, ma dedicatelo anche a voi, ai vostri figli, e che la Pace sia davvero sulla terra. La Pace è un lungo percorso, ha bisogno di essere costruita, protetta e difesa. Sopratutto, ha bisogno di Buona Volontà. La Pace è un duro lavoro interiore e l’essere umano, nei momenti più difficili, tira fuori a volte un coraggio senza paragoni: il segreto é non arrendersi, rialzarsi, perché il male non trionferà. È proprio vero che, proprio dal profondo del dolore, rinasce la speranza, che non muore mai.

Buona Pace a tutti!