Category Archives: planetkde-fr

Elf-dissector

Lorsque l’on linke des programmes on s’appuie sur des librairies statiques.

Le problème c’est que l’on peut en ajouter plein lors de la compilation et même si aucun symbole n’est utilisé on va charger cette lib au démarrage de l’application.

Cela va ralentir le démarrage de l’application.

On a plusieurs méthode pour réduire cela:

  1. Retirer chaque lib de la liste des librairies à utiliser et voir si ça linke (long et fastidieux)
  2. Utiliser une application dédiée pour cela => elf-dissector

Elf-dissector est une application développé par Volker Krause (kdepim dev + Qt Dev + KDAB dev + …. 🙂 ) donc pas un inconnu 🙂

Ou trouver Elf-dissector ?

Dans le git de KDE :

“git clone git://anongit.kde.org/elf-dissector”

Compilation:

Il nécessite libelf-devel/binutils/libdwarf-devel/gnuplot

Une fois cela installé il y a plus qu’à faire mkdir build && cd build && cmake -D<….> ../ && make install

C’est vraiment tout simple.

Utilisation:

exemple: elf-dissector /opt/kde5/lib64/libKF5MailCommon.so.5

C’est une application qui va vous permettre de voir quelles libs sont utilisées et ainsi voir si elles sont nécessaires ou non.

Il y a  6 onglets:

  • Elf structure: nous fournit la structure de la librairie (on peut voir le point d’entrée etc.
  • Size Tree Map permet de voir l’organization dans la librairie
  • Dependancy c’est vraiment l’onglet le plus utile il permet de voir les différentes librairies utilisées et voir le nombre de symboles utilisés dans chaque lib. On peut voir cette qui sont chargées mais qui ne sont pas utile. Si l’on clique sur un item on peut voir les symboles utilisées et donc ceux qu’on doit supprimer si l’on veut plus avoir une dépendance sur telle ou telle lib.
  • Issue permet de voir les erreurs dans la librairie ça prend énormément de ressources donc à manier avec parcimonie

Après vous avez plus qu’à réduire le nombre de bibliothèques utilisées pour votre application.

Attention les dépendances peuvent aussi venir de dépendances indirectes donc difficile des fois à faire les ménages.

Mais cette application nous a permis de réduire le temps de chargement de KMail de 1.3 secondes à 0.6 seconde donc vraiment utile.

Scan-build (clang static analyser)

Clang fournit dans sa suite divers plugins et aussi un analyser statique de code.

Il va simplement analyser le code compilé par clang et il va en faire un rapport en sortie.

Donc tout code non compilé par Clang ne sera pas analysé forcément. Genre il ne va pas aller chercher du code

ou il y a un  #ifdef OPTION par exemple si on n’a pas définit OPTION lors de la compilation.

Comment l’utiliser?

Très simple:

Pour un programme compilé genre kdepim:

mkdir build && cd build && CXX=clang++ CC=clang scan-build -k cmake -DCMAKE_BUILD_TYPE=Debug ../
scan-build -k -o results make

Vous laissez builder et vous aurez le résultat dans le répertoire results sous forme de fichier html.

Attention il peut générer des faux positifs on ne peut pas corriger sans se poser des questions mais ça donne de très bonnes informations sur les erreurs possibles dans le code.

Je vous laisse lire les autres options sur le site officiel http://clang-analyzer.llvm.org/scan-build.html

Clazy

Les développeurs KDE ne sont pas en reste pour ce qui est des outils pour aider à améliorer la qualité du code.

Sérgio Martins a développé “Clazy” un outils qui utilise Clang pour rechercher et avertir de certaines améliorations à faire dans votre code. Certains de ces plugins peuvent directement modifier le code source.

Comment le builder ?

Déjà récupérer le code source git clone git://anongit.kde.org/clazy

Il faut clang-devel >= 3.6

Ensuite il faut le builder et cela contre clang.

mkdir build && cd build && cmake  -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_INSTALL_PREFIX=<path> …/ && make install

Maintenant il faut s’assurer que <path>/lib64/ est dans votre LD_LIBRARY_PATH sinon ça ne marchera pas.

Dès que tout cela est fait vous pouvez l’essayer sur un projet.

Comment l’utiliser ?

Il faut export la variable CXX

export CXX=”clazy”

Ensuite il faut dire ce que vous voulez évaluer.

Si vous voulez avoir tous les warning reportés par clazy, il suffit d’exporter une deuxième variable:

export CLAZY_CHECKS=all_checks

Après il faut reconfigurer le build sur votre projet

cmake -DCMAKE_INSTALL_PREFIX=<path> ../

et là vous aller pouvoir voir tous les variables et les infos résultant.

Les divers plugins:

  • bogus-dynamic-cast
  • foreacher
  • global-const-char-pointer
  • inefficient-qlist
  • qstring-uneeded-heap-allocations
  • qstring-arg
  • qstring-ref
  • function-args-by-ref
  • qmap-with-key-pointer
  • non-pod-global-static
  • reserve-candidates
  • variant-sanitizer
  • virtual-call-ctor
  • missing-typeinfo
  • implicit-casts
  • old-style-connect
  • detaching-temporary
  • assert-with-side-effects
  • qgetenv

Comment faire les fixes directement dans le code?

C’est très simple 🙂 Il suffit de le dire à Clazy en exportant la variable CLAZY_FIXIT

Par exemple:

export CLAZY_FIXIT=”fix-missing-qstringref”

Il y a que quelques plugins qui permettent la modification directe.

export CLAZY_FIXIT=”fix-old-style-connects” (change le style de connexion signal/slots (la nouvelle API qui est arrivée avec Qt5)
export CLAZY_FIXIT=”fix-missing-qstringref” (ça adapte le code pour utiliser const + ref lorsque c’est possible)
export CLAZY_FIXIT=”fix-fromCharPtrAllocations” (les 3 autres c’est pour réduire l’allocation lors de l’utilisation des QString)
export CLAZY_FIXIT=”fix-qlatin1string-allocations”
export CLAZY_FIXIT=”fix-fromLatin1_fromUtf8-allocations”

CLAZY_FIXIT ne permet pas de faire tout ensemble c’est un plugin par compilation ce qui est un peu logique car changer un fichier en court de route et remodifier encore derrière serait très risqué)

Mais pour fixer kde j’ai créé un script. Vous pouvez l’utiliser clazy-compile

il suffit de le renommer en .sh et le l’exécuter il fait tout pour vous.

Le futur ?

Ben il y a toujours des vérifications de code à faire et des optimisations donc ça va continuer. Mais j’en sais pas plus 🙂

Full KF5

Depuis la semaine dernière j’utilise aucune application kde4.

ça veut dire que j’utilise kdepim kf5.

Oui j’ai tenté mais je l’ai pas fait n’importe comment. Déjà j’ai mis en place une vraie migration. (les folders n’étant pas migré ça posait quelques problèmes). De plus j’avais déjà fait un maximum de test à coté.

Mais bien sur ça vaut pas le test en live 🙂 Et là ben… comment dire… des bugs à profusion. Genre kaddressbook ne pouvait pas stocker les nouveaux contacts.

Donc j’ai passé du temps à rendre kdepim utilisable.

Mais maintenant c’est parti pour une longue chasse aux bugs 🙂

L’objectif c’est 15.08.

Est ce que je crois que ça sera opérationnel ? Heu… bien sur 🙂 Enfin si on est plus que 2 à bosser dessus. Dan est en train d’améliorer Akonadi, et moi je fixe le reste.

Donc forcément ça prend du temps.

Faut en même temps avoir des gens qui testent kf5 🙂

Est ce que je vais laisser tomber kde 4.14 ?

Bien sur que non je vais continuer à le fixer sans problème surtout que je suis pas sur que kdepim kf5 sorte vraiment pour la 15.08.

Là aussi j’ai besoin de bugs reports.

Voilà 🙂

Comment avoir le systray sous plasma5

Pendant qq semaines j’ai pas compris pourquoi j’avais pas de systray.

C’était ennuyeux pour konversation ou KMail.

Eike Hein m’a donné la solution: libdbusmenu-qt5 et bien sur qt5.4 et sni-qt4 🙂

Oui ça fait beaucoup mais sans cela ça marche pas et c’était très ennuyeux.

Voilà pour ceux qui cherchaient au cas ou.

Plasma5 et juste kmail kde4

Depuis quelques semaines j’ai fait la migration à Plasma5.

La seule application que je peux pas migrer encore est kmail (et applications associées).

Alors je pourrais utiliser les versions fournies par ma distro mais bon je suis dev donc j’ai besoin de la version ‘master’ 🙂

Donc c’est possible de faire cohabiter les 2 environnements dans le même répertoire, mais ça demande quelques changements.

Alors ma méthode:

-> builder tout kf5 sauf kdepim/akonadi (kdesrcbuild peut faire cela tout seul)

-> builder tout kde4 donc kdelibs/akonadi/kdepim* (bien sur pas le reste de kde4 qui servirait à rien et conflicterait).

Et ça marche bien 🙂

Alors comment je fais:

j’ai créé un répertoire:

“/kde5/source/kde5-4” (le nom importe peu 🙂 )

dedans j’ai mis un   kdesrc-buildrc ça a la configuration standard. (à adapter pour votre machine bien sur)

mais dans “extragear/utils/kdesrc-build/kf5-qt5-build-include”  j’ai commenté le build de  kdepim “#include kf5-kdepim-build-include”

une fois cela buildé on peut builder kde4

j’ai créé un sous répertoire “/kde5/source/kde5-4/kde4”

et là de même un kdesrc-buildrc-kde4 qui construit que ce qu’il faut

Et après un ptit bout de temps vous pouvez avoir un plasma5 et un kmail4

Et tout marche nickel:)

Une fois que vous avez cela pour mettre à jour il y a quelques petites choses à faire.

Le rebuild de plasma5 va pas marcher car il trouve les includes de kde4

Donc avant chaque build je fais:

“cd /opt/kde4-5” (on répertoire ou se trouve le build)

mv include/*.h  /include/old/
mv kactivites/ kactivites-old
mv kio/ kio-old
mv plasma plasma-old

je build plasma5

et après je vais l’inverse:

mv include/old/*.h  /include/
mv kactivites-old/ kactivites
mv kio-old/ kio
mv plasma-old plasma

et je rebuild kde4

voilà et tout marche sur des roulettes 🙂

J’espère que ça aidera ceux qui veulent faire comme moi

Bon WE.

Bonne année 2015

Alors bonne année à tout le monde!!!

Je souhaite que KDE soit de plus en plus utilisé sur le bureau 🙂

Bon cette année devrait être l’année KF5, de plus en plus d’applications sont portées.

Donc je pense que d’ici 6 mois les distros l’utiliseront par défaut.

2015 devrait être une bonne année!

Des nouvelles :)

Je viens de m’apercevoir que ça fait très longtemps que j’ai pas donné de nouvelles.

Cela est dû a beaucoup de choses:

  • Mon boulot 🙂 oui ça prend du temps aussi
  • Mon travail sur KDE/KDEPIM aussi bien en kde 4.14 que kf5
  • Ma vie perso (ça compte énormément)
  • La fainéantise d’écrire 🙂 oui ça aussi ça influence 🙂

Alors qu’est ce que j’ai fait ces derniers mois dans KDE:

  • Je suis toujours sur ma lancé pour porter kdepim* à kf5 alors le problème c’est que l’équipe est quasi constitué de moi donc ça pose des problèmes de vitesse c’est sûr mais je continue à avancer dessus en portant au maximum le code. Et ça avance bien de plus j’essaye de faire passer des widgets de kdepim dans kf5 directement (genre KSplitterCollapserButton). Pour ce qui est des applications kdepim, ça avance je peux les lancer les utiliser mais il reste beaucoup de chemin avant une vraie release. De plus des parties de code doivent être réécrite genre le support de texttospeech j’ai remis cela en place en me basant sur QtSpeech mais ce module Qt n’est pas encore releasé. Mais je suis content ça avance bien.
  • Je continue a maintenir la branche kde 4.14 de kdepim. Je peux pas me permettre de laisser tomber tant qu’on a pas une version utilisable en kf5. Je ferai pas l’erreur qu’on a fait pendant le portage akonadi ou pendant le portage kde4 ou rien n’a bougé pendant des mois et aucun fixe n’était appliqué dans la branche encore utilisé. Donc doucement je fixe des bugs que l’on me reporte. Et surtout j’écris des tests unitaires pour permettre de valider mon portage à kf5 ça aide grandement. Ah oui aussi j’ai fini la fonctionnalité “FollowupinreminderAgent” en fait un agent qui signale quant une personne a répondu au mail envoyé et signale si ça n’a pas été fait à une date donnée. Beaucoup de boulot a été nécessaire mais ça fonctionne bien.
  • J’ai le portage des applications à KF5, ça aussi c’est un travail un peu répétitif mais nécessaire car sinon on aura jamais de kf5 complet. Donc j’ai beaucoup aidé à porté les applis d’éducation, les applis de kde-baseapps, etc. J’aimerai vraiment que pour la prochaine version après la version 14.12 on ait vraiment un maximum d’application porté à kf5
  • Et je suis retourné à Toulouse ce WE pour Capitole du libre pour faire de la promotion de KDE et faire une présentation. Toujours cool de revoir les potes 🙂 et de discuter avec les vrais gens qui utilisent kde 🙂 On s’est bien amusé 🙂

Voilà pourquoi j’ai pas trop blogué c’est dernier temps.

Je vais essayer de refaire des blogs plus souvent.

Mais bon si vous savez pas si je continue à bosser sur kde il suffit de regarder les commits kde 🙂

Semaine 27-28-29

J’ai été bien occupé ces derniers temps:

  • KDE 4.13.3: oui c’était la dernière release 4.13 j’ai essayé de mettre le maximum de corrections.
  • KDE 4.14: pas encore sorti mais faut bien finir les fonctionnalités
  • KDE KF5: beaucoup de portage à faire.

Les bugs corrigés entre temps:

  • Bug 336883 – Setting the result of a filter to adding a tag always makes you reselect the tag (4.13.3)
  • Bug 337291 – Auto detect server settings feature doesn’t use selected port when creating an SMTP account (4.13.3)
  • Bug 337435 – kmail vcard import pgp key (4.14)
  • Bug 337505 – Address-completion: Allow hiding of “contacts found in your files” (4.14)
  • Bug 337542 – Cursor and scroll position jump back to top when modified note loses focus (4.14)

Comme il a été décidé qu’il y aurait pas de KDE 4.15 je commence à me focaliser complètement sur KF5, il y aura peut être des release de 4.14 mais sans nouvelles fonctionnalités, donc je fixerai un maximum de bugs j’activerai surement des fonctionnalités que j’ai pas eu le temps de finir pour 4.14 mais rien de nouveau. Donc mieux vaut mettre le maximum de force dans KF5 surtout qu’on est pas nombreux.

De plus durant mon portage je crée des scripts pour aider au portage, donc ça va aider les gens à migrer plus rapidement.

J’espère que ça va aider pendant le meeting à Randa ou l’objectif est le portage à KF5.

Pas encore les vacances donc je peux avancer sur kde*

Faut que je trouve le temps de lancer Plasma 5.0 aussi.

Semaine 24-25-26

Encore un rapport avec quelques semaines de retard.

Bon ça vient du fait que j’ai déménagé donc j’ai préféré me concentrer sur kdepim* et mon déménagement que sur le rapport. Désolé des priorités 🙂

En même temps ça permet d’avoir plus d’informations à mettre 🙂

Les bugs fixés:

  • Fix Bug 336507 – ShowUserAgent option repeats mail header names (4.13.3)
  • Fix bug Bug 336603 – Custom headers and adblock list cannot be loaded when using Kontact (4.13.3)
  • Bug 333897 – download of the new list failed (4.14)
  • Bug 331156 – Display of HTML-Message extremely slow (4.13.3)
  • Bug 331543 – New event dialog has “Calendar:” misplaced in tab order (4.13.3)
  • Bug 320821 – kabc/plugins/ldapkio/ uses old Kolab LDAP option, also Kolab 3 options are missing (4.14)

On s’approche de plus en plus de la version 4.14 donc je me concentre à fixer et finir mes nouvelles fonctionnalités.

Je continue à bosser sur le merge de contact j’espère le releaser avec 4.14.

Le nouvel agent “FollowUpReminder” est sur la bonne voie 🙂 Je bosse dur dessus. C’est une bonne fonctionnalité.

Comme ils décident de réduire tout le temps le temps de développement ça devient tendu.

De plus il y aura pas de 4.15… Donc en gros ce qui est fini là c’est bon sinon on attend la version KF5… Ok on pourra dans la version 4.14 ajouté quelques petites nouveautés mais pas plus que cela. À mon gout  c’est pas forcément une bonne idée de bloquer cela maintenant au vue que KF5 n’est pas encore sorti. On fera avec comme d’hab 🙂

Donc je bosse aussi en parallèle sur KF5, et de plus en plus de code compile sous kdepim-runtime. J’ai quasiment toutes les ressources qui compilent. Il me reste kolab et facebook qui sont pas buildable pour le moment.

Pour kdepimlibs je supprime doucement le support “KDELibs4Support” c’est un pré-requis pour que ça aille dans KF5 et pour la release de kdepimlibs (enfin les modules splittés).

Pour kdepim je continue de fixer la migration. Ça prend du temps mais après 4.14 comme pas de 4.15 je vais me concentrer que sur KF5 donc ça devrait aller plus vite.

Donc oui encore beaucoup de boulot mais ça avance 🙂