lundi 28 mai 2007

Get 3D Captures from your video card

Hi everyone,

Just a new and interresting tool from one of my customers.

This customer provides for free a tool to capture directly 3D informations from your video card (just with the F10 key you can perform a 3D capture).

The obtained format is the 3DXML(tm). You can discover the xml format, it's only encrypted in a zip file.

This tool provides captures from DirectX or Opengl.



Here is a sample, i got this file from a 3D space game (a ship) :




















Download the player 3DXML and the 3D PrintScreen, after launch a 3D software and capture 3D models ^^
If you want to see your model in the player, selects 3D objets and right-click mouse and 'reframe on'.

Have fun

mardi 22 mai 2007

Chercher les fuites mémoire sous Windows (Memory leaks)

Un des soucis majeurs des développeurs C/C++ est de détecter les fuites mémoires ou 'memory leaks'.

La meilleure solution reste sans doute de s'équiper d'un programme tel 'Rational Purify' chargé de détecter et de localiser les fuites mémoires.

Pour ceux qui ne disposent pas d'un tel outil voici un truc avec Visual C++ pour :
- Détecter l'adresse des blocs sur le tas qui fuient
- Connaître la taille des blocs fuyants.

Ces informations sont assez primaires, l'outil également, mais il s'agit d'un outil disponible avec Visual C++ sans débourser un centime.

Soit le petit programme suivant rédigé en C++ avec Visual Studio 2003 (de Microsoft(tm)):
#include "iostream"
#include "crtdbg.h" // ici librairie à intégrer

int main() {

 int f = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
 // Passe en mode ckheck des fuites mémoire
 f = _CRTDBG_LEAK_CHECK_DF;
 // Passe en off le mode CRT check
 f &= ~_CRTDBG_CHECK_CRT_DF;
 // Permet au code debug de trouver les fuites !
 _CrtSetDbgFlag( f );

 char * c = new char[4096];
 c[0] = '\0';

 // ici fuite directe
 c = NULL;

 // Sortie dans la console de la fuite mémoire ! ::_CrtDumpMemoryLeaks();

 return 1;
}

Remarque : Il semble que ce code ne détecte plus les fuites si vous utilisez Visual Studio 2005, dans ce dernier cas il faut retirer les premières de code qui flag le code avec _CrtSetDbgFlag.
Exemple avec Visual Studio 2005 :
#include "iostream"
#include "crtdbg.h" // ici librairie à intégrer

int main() {
 {
  char * c = new char[4096];
  c[0] = '\0';

  // ici fuite directe
  c = NULL;
 }

 // Sortie dans la console de la fuite mémoire ! ::_CrtDumpMemoryLeaks();

 return 1;
}


On compilera le programme ci-dessus en mode DEBUG et on exécutera en mode DEBUG (F5).

On remarquera sans peine ci-dessus la fuite mémoire provoquée ici volontairement (c = NULL).

Les APIs "_CrtSetDbgFlag( f )" et "::_CrtDumpMemoryLeaks()" sont utilisés respectivement pour : provoquer dans le code la détection des fuites et écrire dans la console celles-ci.


Voici le résultat constaté dans la console :

'MemoryLeaks.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', Exports loaded.
Detected memory leaks!
Dumping objects ->
{49} normal block at 0x003207B0, 4096 bytes long.
Data: < > 00 CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
Detected memory leaks!
Dumping objects ->
{49} normal block at 0x003207B0, 4096 bytes long.
Data: < > 00 CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
The program '[4372] MemoryLeaks.exe: Native' has exited with code 1 (0x1).



On remarquera que Visual trouve le début de la zone mémoire coupable '0x003207B0' et la taille du bloc mémoire incriminé. Il vous restera en mode debug à retrouver quel pointeur dans le source pointait ce bloc (peut-être plusieurs pointeurs).
Dans la sortie ci-dessus le dump est imprimé 2 fois : sur l'appel de la méthode ::_CrtDumpMemoryLeaks() et par le déboggueur à la fin main.

Cette petite astuce vous permettra de :
- constater qu'il existe des fuites mémoires
- vous donnera des informations élémentaires de debug

Bon courage.

vendredi 4 mai 2007

Détection des 'Memory Leaks' ou fuites mémoires (en C++)

Bonjour,

Ce message s'adresse à ceux qui ont suivis mon cours 'C++ Perfectionnement' : Nous avions évoqué en C++ la nécessité de suivre toutes les erreurs relatives à la gestion mémoire (à l'issue de la compilation).

Il existe bien évidemment l'outil IBM(tm) 'Purify'(tm) permettant le suivi de ces warnings ou erreurs. Cet outil est relativement cher et chacun ne dispose pas de cet outil.

Je vous propose de découvrir l'outil 'VALGRIND' disponible notamment sous linux et gratuit, permettant de découvrir notamment :
- les "memory leaks" (fuites mémoires)
- les accès en lecture ou écriture aux zones mémoires non initialisées

L'outil est disponible : soit dans vos paquets linux, soit sur le site : http://valgrind.org/

L'outil se lance en 'ligne de commande' avec une syntaxe du type :

$ valgrind -v ./a.out (ici l'exécutable compilé et lié se nomme "a.out")

L'outil vous sort à l'issue de cette exécution son rapport en mode texte, il est vrai que le rapport est quelque peu 'verbeux'.

Un extrait de rapport de l'outil ci-dessous nous permet de distinguer une fuite mémoire sur le tas de 400 octets :
==12377== LEAK SUMMARY:
==12377== definitely lost: 400 bytes in 1 blocks.
==12377== possibly lost: 0 bytes in 0 blocks.
==12377== still reachable: 0 bytes in 0 blocks.
==12377== suppressed: 0 bytes in 0 blocks.
==12377== Use --leak-check=full to see details of leaked memory.



A très bientôt

jeudi 3 mai 2007

Google Web Toolkit (GWT)

Vous souhaitez développer des applications WEB en java bénéficiant d'interfaces graphiques puissantes et ce, sans connaitre le langage HTML ?

Utilisez Ajax (Asynchronous JavaScript and XML) !

Avec Javax vous pourrez découvrir le développement d'application Java en client et serveur où le serveur crée dynamiquement l'interface Web grâce à du Javascript côté client.

Google propose une API Open Source qui vous permettra de découvrir et d'utiliser la puissance d'ajax :

http://code.google.com/webtoolkit/

Essayez donc les démos en ligne fournit par Google (suivez le lien ci-dessus) pour estimer les interfaces graphiques que vous pourrez fournir.

Voici une démo en ligne démontrant la puissance des applications AJAX : ici.

Il est à noter qu'Ajax favorise les transferts sur le réseau puisque que le client navigateur dialogue avec le serveur grâce à des requêtes XML : de ce fait le serveur ne retourne plus au client, à chaque requête, l'intégralité des pages HTML.