LeTerrier Chronosphère¶
- LeTerrier Chronosphère
- La naissance de Chronosphère ou la génération presque spontanée d'un logiciel du Terrier
- Le portage d'une application KDE3 -> Qt4
- Récupérer le code source
- Ouverture du code et copier/coller sauvage de kworldclock
- Après quelques heures de bricolages
- Après une nuit de repos ...
- Je décide de tourner la page
- Ha mais si mais c'est bien sûr
- Je reste concentré sur les villes
- Et ça affiche même la nuit
- Compilation windows
- Le retour des drapeaux
- Compilation MacOS
Index du wiki
- La naissance du projet (ci dessous)
- Les fonctionnalités disponibles en version 1.0
- Les contraintes techniques
C'est tout simplement la renaissance du logiciel kworldclock de KDE !
La naissance de Chronosphère ou la génération presque spontanée d'un logiciel du Terrier¶
Il sera dit que pas un seul logiciel du Terrier n'aura vu le jour de la même manière ... chronosphère est encore un cas particulier. Pas plus tard qu'il y a 24 heures environ je me demandais (cf les mails sur la liste dev@abuledu.org) si le hack rapide de MrPatate qu'on a fait cet été pour les stagiaires graphistes méritait une page dédiée dans la liste des logiciels officiels du Terrier ou s'il devait rester un peu comme un clandestin sur la banquise: un projet sympa et rigolo mais rien de plus.
C'est là qu'on m'a ressortis le fait que MrPatate (ktuberling) avait déjà une page de prête dans les brouillons du site et que finalement en quelques heures c'est devenu un projet officiel
Et au milieu de la liste des logiciels intéressants je suis tombé sur kworldclock que j'ai beaucoup aimé et qui était une des applications les plus sympa au tout début de l'aventure d'AbulÉdu.
Ce logiciel est "mort" lors du passage de KDE3 -> KDE4, ses développeurs l'ont laissé tomber et comme beaucoup de ses utilisateurs on s'est dit "tant pis", "pas cool" mais "tant pis". Ce n'est que quelques années plus tard, en 2011, et ayant fait le choix de développer en Qt/C++ que je retombe dessus ... et maintenant que nous avons quelques compétences dans le domaine et après le "hack" réussi de MrPatate ... je me dis "pourquoi pas tenter de le ressusciter".
Proposition en est faite sur la liste dev, et zouuu. En route pour l'aventure.
Le portage d'une application KDE3 -> Qt4¶
Ce n'est pas une mince affaire mais je m'arme de la référence du portage des applications de Qt3 -> Qt4 et surtout je n'oublie pas qu'il faut aussi au passage supprimer tout lien de KDE3.
Ça n'est pas triste, d'autant plus que les développeurs initiaux ont un "style" de programmation auquel je ne suis pas habitué et je vais donc rajouter ma sauce gabonaise heu bolognese (mais le correcteur orthographique de firefox s'obstine a vouloir me corriger) dans leur plat de spaghetti.
Récupérer le code source¶
Ouf, heureusement que le libre garde des archives, je récupère donc http://ftp.de.debian.org/debian/pool/main/k/kdetoys/kdetoys_3.5.9.orig.tar.gz et en avant.
Ouverture du code et copier/coller sauvage de kworldclock¶
Ce kdetoys embarque plusieurs logiciels, je ne récupère que celui qui m'intéresse.
Ma 1ere obsession c'est de C.O.M.P.I.L.E.R un truc :) alors je fais un gros "qmake" et j'y vais à grand coups de "mise en commentaire du code".
J'admire au passage que c'est codé comme je n'aime pas: pas de fichier .ui, tout dans le code c++, vas-y que je créé un menu par ci et une popup par la ... brrrr j'en tremble, c'était pas forcément une bonne idée et voilà peut être pourquoi ce logiciel n'existe plus dans KDE4.
Autre mauvaise surprise, kworldclock existe sous deux forme, le logiciel autonome que je connais mais aussi en tant qu'applet kde3, un petit machin qui devait se ranger dans la barre des tâches ou un truc du genre, allez hop encore un truc à dégômer au passage.
Dégômer, supprimer, trancher, effacer, j'aime ça ... mais sais aussi que dans le code source il vaut mieux y aller au scalpel de chirurgien qu'avec la pelleteuse de chantier, même si c'est cette dernière qui est la plus drôle à manier.
Après quelques heures de bricolages¶
Ça commence à ne ressembler à rien mais j'aime ça alors je continue. En tout cas c'est "tout vert" alors c'est cool. Si vous ne savez pas, l'éditeur de code source qu'on utilise met en vert tous les commentaires, et comme j'ai tout mis en commentaire ... forcément :)
C'est enfin au milieu de la nuit que je commence à avoir un truc, ça ressemble plus à une émission pour adulte sur canal plus quand on n'a pas le décodeur mais je sens que c'est dans la bonne voie.
Puis quelques heures plus tard, après avoir eu l'idée de jouer avec le redimensionnement de la fenêtre ... victoire, une image que je croyais perdue à jamais ressurgit de ma mémoire presque plus que de l'écran.
C'est bon je peux aller dormir, je sais que je vais arriver à en tirer quelque-chose, ça ne marchera peut-être pas tout de suite mais c'est sûr ça va marcher un jour :)
Après une nuit de repos ...¶
C'est repartis pour un tour, le moral gonflé à bloc "aujourd'hui, je me le fait" fois de hacheur (ou de hacker mais bon je ne me sens pas encore assez bon pour revendiquer ce statut, je préfère donc encore le hacheur de bolognese que le hacker expert en développement) ...
Pris dans l'euphorie du matin, je passe sur une abuleduapplicationv1, je créé une mainwindow, j'intègre le "mapwidget.cpp" de kworldclock dans un environnement que je connais mieux, je commence à faire en sorte que je me sente un peu chez moi ... dans la douillette protection de l'éditeur d'interface de QtCreator.
J'ajoute un menu fichier ... mais que je suis optimiste me dis-je !
Compile un coup pour voir au lieu de faire le fanfaron ...
Et là c'est le drâââââââme, soit je ne suis pas bien réveillé et j'ai inventé les infrarouges ... soit il y a des jours où on ferait mieux de faire autre chose.
J'en bave, je m'acharne, je râle, je hurle, je .... grrrrr ce foutu planisphère m'en fait voir de toutes les couleurs, je t'en foutrais moi de l'infrarouge, je finis même par me demander si ça n'aurait pas été plus simple de tout refaire du début ... mais un petit tour dans le code me laisse imaginer que je suis bien loin de pouvoir produire ce genre de logiciel et que bricoler pour essayer de le faire marcher c'est encore le mieux que je puisse faire.
Philippe où est tu ? ha oui labas à l'autre bout du monde, tu m'a l'air un peu pixelisé mon amis ... en fait j'aurais besoin de toi la maintenant ici à côté pour faire le candide, celui qui dit "tiens y manquerait pas une virgule ici" oué je suis certain que c'est une connerie de ce genre !
Je tire, je pousse, je change la taille de la fenêtre, peut-être qu'elle va finir par comprendre toute seule et se mettre a la bonne place ... rien, nada, niet, que nénéi !!! grrrrr (re)
Je décide de tourner la page¶
Si l'image ne vient pas toute seule hé bien tant pis, je décide de relâcher mes neurones et me concentre sur d'autres sujets, c'est que ce logiciel est quand même gros. Au milieu du plat de nouille qui commence a me rester sur l'estomac j'ai gardé de côté un truc hier soir: la localisation des villes.
Voyons voir s'il est possible d'en faire quelque-chose de ce code qui lit un fichier texte dans lequel se trouvent les principales viles du monde avec leur position (longitude / latitude) ... quelques adaptations de QString et QRegExp plus tard j'arrive enfin a faire un truc et surtout à comprendre ce que je fais.
Généralement ça marque une étape décisive, c'est quand je commence à me sentir assez à l'aise dans le code produit par d'autres, je "vois" où vont les éléments de code, les liens entre les différentes classes.
Yahooooo voici enfin un truc qui marche tiens en plus c'est la ville truk, sans doute un signe du destin.
Me reste à faire en sorte que cette foutue image ne soit plus pixelisée, zoomée, déformée, déplacée ... aucune idée de pourquoi elle est coupée en deux et ce qu'elle fout la.
Ha mais si mais c'est bien sûr¶
Dans ma hâte d'avoir du code qui compile hier soir je me souviens avoir bricolé un appel de fonction qui ne "collait" plus entre qt3 et qt4 ...
p.drawPixmap(gmt_position-greenwich, 0, map, 0, 0, map.width()-gmt_position+greenwich); p.drawPixmap(0,0, map, map.width()-gmt_position+greenwich, 0, gmt_position-greenwich);
J'ai transformé ça un peu n'importe comment, je relis la doc, cherche le prototypage de cette fonction de l'époque de Qt3, pas de bol il existe une tartine de fonctions qui portent le même nom et qui utilisent des arguments dans un ordre différent ou de type différent ... mais c'est certain je me suis planté et puis greenwich ça me dit quelque-chose dans le fond.
Ça serait pas lui l'emmerdeur qui me coupe l'image en deux ?
Un tour sur wikipédia pour me changer les idées et remettre mes idées en place, non ce n'est pas lui qui coupe mon image en deux.
Mais finalement je trouve la bonne "nouvelle" fonction drawPixmap et admirez le résultat, je n'en reviens toujours pas ...
Je reste concentré sur les villes¶
Pour une fois je reste concentré sur mon problème de villes, je n'ai pas encore activé un morceau de code que j'ai mis en commentaire: l'affichage sur la carte des fameuses villes.
Héhé, ça marche de mieux en mieux, à peine quelques dizaines de minutes plus tard ça affiche les villes:
Et ça affiche même la nuit¶
Voilà le résultat que je m'étais fixé, 24h de rush, je n'ai pas trop chronométré mais voilà ça commence à ressembler à ce qu'on veut, il reste à faire le sauvegarder sous, la possibilité de planter un drapeau etc. etc. etc. mais l'essentiel est là, sous vos yeux que j'espère écarquillés.
MERCI aux développeurs de KDE, MERCI au logiciel LIBRE d'être LIBRE, voici encore une fois la preuve de ce qui est possible avec le code source libre, même abandonnée, il suffit d'un mec un jour qui ait envie de redonner vie à un projet et c'est POSSIBLE.
Compilation windows¶
Et c'est la magie de Qt, je n'ai pas résisté, n'ayant pas de windows chez moi, j'ai fait un saut au bureau pour compiler le projet sous windows ... c'est que du bonheur, rien à modifier ça marche tout seul:
Le retour des drapeaux¶
Hop, un petit nettoyage du code source, je dégage ce qui n'est pas utile, je m'imprègne un peu plus du code et je retrouve comment activer les drapeaux.
Compilation MacOS¶
Et "hop hop" voici la version Mac qui compile "tout seul".