2006-05-31

Quelques lectures au fil de la toile

C'est le jour des lectures vu le temps qu'il fait dehors. Il a neigé ce matin, je vois les cîmes enneigés des sapins à la fenêtre.

2006-05-30

Utiliser Sysprof pour optimiser un logiciel

Après avoir lu un article sur l'utilisation du logiciel Sysprof à des fins d'optimisation, j'ai voulu tester ce logiciel par moi même.

Sysprof est un outil linux qui donne des informations assez précises sur la consommation en ressources de l'ensemble du système. Pour tester un logiciel, il suffit de lancer l'analyse Sysprof, commander une tâche lourde au logiciel puis d'étudier les résultats de l'analyse à la recherche de problèmes de performances.

J'ai utilisé un logiciel de Data Mining nommé KnowkedgeDiscovery. Le logiciel est codé en C++ avec le toolkit Qt. Il a été conçu dans le but de travailler sur de grande quantité de données et d'être efficace. C'est donc un bon candidat pour une session d'optimisation.

Les informations que fourni Sysprof sont éloquentes : Le logiciel passe la plupart de son temps dans 3 fonctions qui sont en fait des getters :

On peut voir dans le tableau de gauche que les getters getValue, getClassValue, getClassCol prennent respectivement 30, 17, et 18 pourcents de l'utilisation des ressources du système.

Cela veut dire qu'une grande partie du temps processeur est utilisé pour accéder aux informations via ces getters. J'ai trouvé deux moyens simple de les améliorer :

  1. Mettre les fonctions getters inline (l'appel de la fonction est remplacé par le code de la fonction, on économise le coût de l'appel mais on fait grossir le code) ;
  2. Simplifier au maximum les getters.

En temps normal les petites fonctions comme les getters sont automatiquement mises inline au moment de la compilation mais en ce qui concerne mon logiciel il semble que GCC décide de ne pas le faire.

Pour indiquer explicitement au compilateur qu'une fonction doit être mise inline il faut déplacer l'implémentation de la fonction dans le même fichier que la définition de la classe et ajouter le mot clé inline devant la définition de la fonction.

Par exemple en travaillant sur la fonction getValue(...) dans KdTableData.cpp :

float KdTableData::getValue(int row, int col)
{
	if( col==classCol )
		qWarning("getValue called with col==classCol");
	return table[row]->col[col];
}

Est devenu dans le fichier KdTableData.h :

inline float KdTableData::getValue(int row, int col)
{
	return table[row]->col[col];
}

En effectuant ces deux modifications simples avec les trois fonctions nommées précédemment j'ai multiplié les performances d'analyse de mon logiciel par un facteur clairement supérieur à 3.

Ce petit travail montre une chose importante : Même si l'on se croit capable de deviner à l'avance quelles seront les goulets d'étranglement du logiciel, il est plus efficace d'écrire rapidemment et proprement le code. Les optimisations se font à la fin, en utilisant sur des outils des tests.

Sysprof, un "profiler" puissant pour Linux.

2006-05-27

Ajout d'un flux RSS

Fonctionnalité indispensable à tout blog : le flux RSS.

2006-05-26

Résulats de SwissEurobot 2006

C'est avec joie que j'annonce que le robot de l'HE-ARC a obtenu un excellent résulat à la coupe robotique Suisse.

Le robot était de loin le plus rapide et le plus sophistiqué de tous. Malheureusement la 4ème place obtenue ne suffit pas pour participer à la coupe Européenne. Mais c'est tout de même un excellent résultat pour une première participation de l'école.

J'espère que l'expérience sera renouvellée en 2007 avec autant de succès et peut être une qualificiation.

En attendant des vidéos détaillées, voici le tableau des résultats :

Table des résulats de Swissrobot 2006
1stPure-Mechatronics
2ndMegatronicSquirrels
3rdCVRA
4thHaute Ecole ARC Ingénierie
5thMegatronics RaTS
6thOrtoBot
7the-robot team 1: Aspiroule
8thWigger Toods
9thCeptium
10thCyclops
11thDark18
12thRob-R Team
13thBanana Shot Team
14thEurobot EPFL
15thHTI Challenger Team
16thCPLN-EST 1
17thTiti-Swing
18thmiroBot
19thCPLN-EST 2
20the-robot team 2: Pacman
2006-05-26

Entretien chez Y

J'ai passé un entretien à Genève pour une boîte qui cherchait un expert PHP. Le boulot a l'air intéressant et les possibilitées d'évolution du poste pourrait se diriger plus tard vers de l'enseignement.

En passant, je signale deux articles intéressants sur XSL-FO et XSLT publiés récemment par Yoan sur doSimple.ch :

2006-05-23

Entretien chez X

J'avais rendez-vous hier après midi pour un entretien d'embauche plutôt orienté test psychologique. À ma grande surprise, à la fin de l'entretien, il m'a été demandé de coder une petite application afin d'évaluer mes capacités.

Je trouve que c'est une méthode plutôt interessante pour évaluer les capacités d'une personne. Elle ne permet pas vraiment de se cacher derrière ses diplômes. Je me suis donc mis à la tâche le soir même pour réaliser une application de création de carte postale en ligne.

Cahier des charges

  • Choisir le format (paysage, portrait) ;
  • Choisir le motif ;
  • Choisir le texte et sa couleur ;
  • Générer un PDF avec la carte postale.
  • Les cartes doivent être "design".

Ce fut terminé dans la soirée. Après quelques réglages pour que ça marche sur Internet Explorer, Firefox et Konqueror, j'ai envoyé le prototype :

Voir la démo du générateur de cartes postales.

Le lendemain, j'ai encore un petit peu modifié l'application pour mieux coller à ce que désirait mon commanditaire :

Voir la démo du second générateur.

2006-05-21

Reprise d'un ancien travail en XSLT

À la suite d'une éventuelle embauche par une entreprise genevoise, j'ai rafraîchi mes connaissances en XSLT en reprenant un travail ayant servi à générer mes rapports durant mes études.

Cette feuille XSLT transforme du xHTML en XSL-FO, le langage de description de document.

XSL-FO est un langage d'une haute technicité qui s'adresse principalement aux typographes afin de fournir avec les outils de gestion de documents, un outil typographique du niveau attendu par les publications imprimées.

Wikipedia

Grâce à FOP (Formating Object Processor) on obtient des fichiers PDF propres. XSL-FO convient bien pour la génération automatisée de rapports et de documents dont la qualité de mise en page est importante.

J'ai enrichi les fonctionnalités déjà présentes dans une ancienne version avec la gestion des liens internes, externes, et des bookmarks pour les fichiers PDF.

Le problème avec le langage xHTML c'est qu'il est plutôt délicat à manipuler avec XSLT. Il m'a fallu pas mal de travail pour pouvoir numéroter correctement les titres par exemple.

xHTML est certe plus difficile à traiter que DocBook, le format de prédilection pour générer du XSL-FO, mais c'est également un langage bien reconnu. Il est facile de convaincre ses collègues de travail d'écrire un rapport commun avec xHTML.

Le fichier xHTML doit tout de même suivre un formalisme particulier. C'est nécessaire car le langage est trop faible sémantiquement pour pouvoir exprimer une bilbiographie ou une page de titre. Ces sections spéciales sont identifiées par des éléments div avec une classe particulière.

Liste des fonctionnalités de cette feuille de transformation

  • Gestion de la plupart des balises xHTML courantes (titres, paragraphes, liens, tableaux, listes, images, gras, italiques ...)
  • Gestion de balises moins courantes (citations, listes de descriptions, ...)
  • Génération automatique de la table des matières, de la table des illustrations.
  • Numérotation automatique des pages et des titres sur 3 niveaux.
  • Page de titre, bibliographie format ISO, indication de la section courante dans l'en-tête, ...
  • Liens internes, externes, et bookmarks PDF.

Télécharger les fichiers

2006-05-21

Mon premier billet !

Depuis que j'ai fini mes études en mars 2006 j'ai plus de temps pour moi alors j'ai décidé que j'allais ouvrir un blog afin de d'expliquer ce que je fait de mes journées. J'ai donc codé une petite application en PHP qui me permet de facilement mettre en ligne des billets tout les mois. Elle fait actuellement 30 lignes de code.