Devblog - Greg

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, juillet 2 2010

Duff's Device

En lisant vite fait un topic sur playeradvance.org je suis tombé sur une remarque de Nesgba (que je salue au passage ^^) : "tu peux utiliser le fameux duff-device en version asm pour accélérer le traitement. "

Bon, alors le fameux duff-device, je ne connaissais pas... Un petit tour sur Wikipedia plus tard, je vois qu'en fait, si, je connaissais, mais pas son nom. Il faut rendre à César ce qui est à César... C'est donc Tom Duff qui a pondu ça en 1983 :-)

Même si la plupart doivent connaitre, je me dis que c'est une belle astuce, et que donc ça peut être intéressant de la présenter ici...

Lire la suite...

samedi, juin 19 2010

Taiwanais : jamais 2 sans 3

Bon, on s'en doutait, le Tawainais allait encore faire des siennes ^^ En regardant toujours une partie du code, je suis tombé sur une façon que je trouve assez originale pour écrire un fichier XML... Ca se décompose en 2 parties :

1. Tout en haut du fichier de sources, on trouve la déclaration des chaines de caractères. Pour des questions évidentes je mets n'importe quoi dans les balises, ce n'est pas important ^^

char line1[] = "<balise1 val=\"%i\">\n";
char line2[] = "    <balise2.....>\n";
char line3[] = "        plein de blabla\n";
char line4[] = "    </balise2.....>a\n";
...
...
char line12[]  = "</balise1>\n";

Donc ça c'est pour l'ouverture des festivités. Bon, il aurait pu faire un vrai tableau plutôt que de numéroter les variables, mais pourquoi pas ^^

2. Le code d'écriture à proprement parler. Là il a fait une chose que je trouve particulièrement intéressante... A noter que pour une fois je n'ai pas renommé les variables puisque de toute façon on ne peut pas savoir à quoi elles correspondent ^^

void writeXML(...)
{
	char buffer[256];
	FILE *f;
	
	un peu de code d'init, ouverture du fichier, etc... 
	ça met des variables à certaines valeurs
	
	
	// Write XML file
	memset(buffer, 0, 256);
	sprintf(buffer, line1, val1);
	fwrite(buffer, 1, strlen(buffer), f);
	
	memset(buffer, 0, 256);
	sprintf(buffer, line2, val2);
	fwrite(buffer, 1, strlen(buffer), f);
    
	memset(buffer, 0, 256);
	sprintf(buffer, line3, val3a, val3b);
	fwrite(buffer, 1, strlen(buffer), f);
    
	...
	...
	
	memset(buffer, 0, 256);
	sprintf(buffer, line12, val12);
	fwrite(buffer, 1, strlen(buffer), f);
}

Pour des questions de lisibilité je n'ai pas mis tout le code, bien entendu, mais on comprend bien le principe ^^ Je ne vous ferez pas l'affront de signaler ce que je trouve choquant (et il y a plusieurs choses "originales" ^^).

mercredi, juin 16 2010

Le retour du Taiwanais...

Je viens de me rappeler d'un autre bout de code "mystique" aperçu dans les sources ^^ Cette fois-ci ce n'était pas gênant car c'était dans une partie du code qu'on n'utilise pas, mais bon...

En gros, vous avez une classe tableau (ou liste ou je sais pas ce que c'était, mais bon, en gros des données quoi ^^). Avec une belle fonction pour ajouter des choses dedans (à la suite). Jusque là, rien de spécial me direz-vous... Sauf qu'à la fin de la fonction d'ajout, on trouve ça :

void MyClass::add(...) {
    ... // Add to array
    size++;

    // Seems to slow down and bug when there's to much data
   if (size > 230)
        size = 230;
}

On n'a jamais compris pourquoi la limite est à 230, mais bon ^^

Code au rabais ?

Un taiwanais, ça coute pas cher. Mais est-ce que c'est bon ?

Je ne vais pas faire de généralités, mais j'ai trouvé un truc pas mal dans le code tout à l'heure (copié/collé d'un truc "pro" fait à Taiwan...). En fait c'était un bout de code pour convertir un double en 2 ints (un pour la partie entière, un pour la partie décimale). Donc en gros, on obtient le code suivant :

int p, d;
double val = XXX;
p = (int)val;
val = val - p;
while(val < 1) val *= 10;
d = val;

Bizarrement de temps en temps ça bloque le programme... (on notera que la récupération de la partie décimale est aussi super bien pensée... genre 1.01 renvoie 1, tout comme 1.1 et 1.0001 (entre autres...) ^^)

lundi, juin 14 2010

Commentaires douteux

J'ai commencé mon stage aujourd'hui, et en farfouillant dans les sources d'une grande boite (dont je tairais le nom ^^), je suis tombé sur des commentaires pour le moins étrange. Ces commentaires concernaient 2 fonctions, déclarées de la sorte :

void XXXXX(void)
{
    // Doesn't matter
}

void YYYYY(void)
{
    // You should never get here
}

Et histoire de parfaire le tout, un peu plus loin j'ai trouvé un petit bout de code en commentaire avec un TODO associé :

// XXXX->ZZZZ();
// TODO : delete this

Ca fait plaisir de voir qu'on fait du code foireux même chez les grands :p Le moins que l'on puisse dire, c'est que des commentaires comme ça, c'est de la daube ^^ ;)