Perfs : factoriser les if() au runtime grâce aux templates

Une petite bidouille que j'ai été amené à faire et qui je pense vaut le coup d'être partagée : je me suis retrouvé à devoir effectuer un même traitement sur un nombre important d'éléments (ex : on parcourt tous les pixels d'une image pour changer la luminosité...), mais je voulais pouvoir effectuer certaines parties de mon traitement de manière optionnelle, suivant certaines options de configuration. En gros, j'avais quelque chose sous la forme :

for e in elements
   if bOption1
      traitement 1
   if bOption2
      traitement 2

Ce qui est plutôt mauvais d'un point de vue performances (on fait des tests pour rien, et les sauts conditionnels c'est pas ce qu'il y a de mieux non plus).
Idéalement, je voudrais que la résolution des conditions bOption1 et bOption2 soit faite en dehors de la boucle, et que la boucle n'effectue que les traitements qui m'intéressent.

Read the rest of this entry »

, , ,

No Comments

Utilisation de l'API Stax de libXML2

Pour charger un fichier XML, il y a traditionnellement deux API : Sax et DOM

* Sax oblige a écrire plein de callbacks. Ca fait tout ce dont on peut avoir besoin, mais c'est assez lourd à coder.
* DOM chargeant tout en mémoire, ce n'est pas adapté pour les gros fichiers.
Read the rest of this entry »

1 406 Comments

Interfacage Assembleur / C++

Un autre vieux tuto : comment accéder à vos structures C++ à partir de l'assembleur.
Read the rest of this entry »

1 391 Comments

Tuto OpenGL : les FBO

Ceci est du réchauffage micro-ondes d'un vieux tuto qui avait sauté lors du passage à WordPress.
Read the rest of this entry »

1 084 Comments

Tutoriel Boost Graph Library

Boost, c'est le bien, et la BGL ne fait pas exception à la règle. BGL permet d'utiliser des algorithmes de graphes précodés en l'adaptant à nos besoins via les templates, et économise beaucoup de temps de développement et de debug.
C'est bien beau, mais encore faut-il que les puissants concepts utilisés pour faire fonctionner la librairie soient bien documentés. Or, la documentation de la BGL est tout simplement ignoble :
Read the rest of this entry »

, , ,

3 Comments

(Petit) Clône de client telnet en Haskell

Bonjour,

L'autre nuit, muni de café, j'ai souhaité m'amuser avec Haskell. J'ai alors consulté le chapitre sur le réseau en Haskell de Real World Haskell et... j'ai écrit un (très petit) clône de client telnet... qui fait 41 lignes. Le seul soucis étant que dans toute application de ce genre, on doit partager habilement la lecture des entrées de l'utilisateur, et l'affichage de ce que l'on nous envoie. Ceci mis à part, tout cela fonctionne très bien !

Haskell

Read the rest of this entry »

, ,

3 006 Comments

CipherSaber - Chiffrement en kit

Sabre laser de chiffrement

Au détour d'une naviguation web fortuite mais bienheureuse, je suis tombé sur CipherSaber. Vous savez, c'est ce genre de moment où on tombe sur une initiative sympa, facile à suivre et qui fait sens. Bref, j'ai accroché tout de suite, alors j'ai laissé tomber ce que j'étais en train de faire et y ai consacré mes heures suivantes.
CipherSaber, c'est la reprise du concept selon lequel il faut en savoir faire un minimum, tout seul, comme un grand. A l'instar des Jedis dans l'univers Star Wars qui vont réaliser eux-même leur sabre laser (vous comprenez maintenant le nom du projet), on nous propose de réaliser nous-même notre petit logiciel de chiffrement. Read the rest of this entry »

, , , , ,

3 854 Comments

Haskell Platform, ou comment se mettre à Haskell sans soucis !

Bonjour à tous,

Cela fait quelques temps maintenant que la communauté Haskell a sorti Haskell Platform. Il s'agit d'un "paquet" qui regroupe :
- le compilateur haskell GHC, un debugger, un profiler, etc
- les bibliothèques les plus populaires et les plus utilisées, fournies d'office
- tout un tas d'outils auxiliaires, comme haddock, qui permet de générer de la documentation depuis les commentaires du code source.

Il existe des paquets pour déjà quelques distributions Linux, sachant que ce sera bientôt prêt pour Debian et Ubuntu également. Les installeurs Windows et Mac sont très simples également.

Bref, plus aucune raison de ne pas essayer Haskell :)

,

3 127 Comments

Préprocesseur et énumérations : la suite.

Cet article fait suite à mon premier article intitulé "Faire un peu joujou avec le préprocesseur"
(disponible ici : http://www.coder-studio.com/blog/preproc/ ).

Pour rappel, nous en sommes restés à un système de macro qui permettait d'automatiser la création
d'un opérateur "< <" pour iostream, capable d'afficher le nom d'une énumération.

Read the rest of this entry »

, , ,

2 710 Comments

Faire un peu joujou avec le préprocesseur...

Ça faisait un bail que je n'écrivais pas sur Coder-Studio...
Chose réparée :)

Du 17 au 19 avril 2009, a eu lieu la finale de Cod'INSA, un concours de programmation inter-INSA,
qui s'est déroulée à l'INSA de Toulouse (plus d'infos sur http://codinsa.insa-lyon.fr pour les intéressés).
Faisant partie des organisateurs, j'ai eu à faire l'interfaçage C++/Java (oui parce qu'il y en a qui veulent
participer en Java...allez comprendre :p [/troll]). J'y ai découvert les joies de GCJ et de CNI, ce qui
pourra peut-être être l'objet d'un autre article, selon ma motivation...

Bref, tout ça pour dire qu'il m'a fallu interfacer une librairie écrite en C avec du Java, et qu'il a fallu
automatiser un peu le boulot pour la partie concernant les énumérations.

Dans cet article, je vais illustrer une méthode pour faciliter l'affichage des valeurs des énumérations.
En gros, le but, c'est que si l'on a :

MonEnumeration e = E_VAL_1;
std::cout < < e << std::endl;

il s'affiche alors à l'écran "E_VAL_1".

Read the rest of this entry »

, ,

9 Comments