Devblog - Greg

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

jeudi, juillet 8 2010

Algorithmes majeures

Un groupe de programmeurs a décidé, pour le fun, de faire une compilation des algos les plus importants selon eux. C'est assez subjectif pour certains, et très vrai pour d'autres. J'ai trouvé la liste assez intéressante, et comme je ne connais pas tout, je prendrai le temps de me documenter dessus :)

Et si jamais je trouve la motivation, chacun de ces algos pour donner naissance à un petit billet ;)  

Je vous file donc le lien vers la source : http://www.risc.jku.at/people/ckoutsch/stuff/e_algorithms.html

J'ai aussi démarré un topic sur dev-fr.org pour faire une liste bien à nous ! http://www.dev-fr.org/index.php/topic,4729.msg46847/topicseen.html

Et sinon vous cliquer sur le lien ci-dessous pour lire un beau copié/collé de tout ça (attention, anglophobes s'abstenir !)

Lire la suite...

Pixel plot alpha optimisé

Bon, je n'ai pas eu le temps de faire un billet hier, j'espère me rattraper aujourd'hui avec une astuce que j'avais trouvée assez géniale pour écrire en 15bit des pixels avec niveaux d'alpha de façon super rapide. Je l'avais utilisé il y a quelques années sur PocketPC et les performances étaient hallucinantes. 

Lire la suite...

mardi, juillet 6 2010

C++0x : l'avenir du C++ ?

Hier je suis tombé un peu par hasard (ou pas d'ailleurs) sur les specs du C++0x (qui devrait maintenant s'appeler C++1x), norme qui devrait remplacer à terme le C++ tel qu'on le connait aujourd'hui...

J'étais assez sceptique car dernièrement je trouve que le C/C++ n'avance pas trop (par rapport à ce qui se fait partout ailleurs), mais je dois admettre que j'ai eu quelques bonnes surprises (et quelques mauvaises, dommage ^^). Voici quelques points que j'ai trouvé intéressants à signaler. 

Lire la suite...

lundi, juillet 5 2010

Char - Signed or Unsigned ?

Enigme du jour: le jeu codé marche sur PC, sur iPhone, sur le simulateur Bada, mais plante lamentablement (et sans infos de debug) sur téléphone Bada. Pourquoi ?

Lire la suite...

dimanche, juillet 4 2010

Java : fuites mémoires ??

Java, c'est bien, on ne peut pas avoir de fuites mémoires, puisqu'on a un Garbage Collector (GC)... En êtes-vous sûrs ?

Je pose cette question toute conne parce qu'au boulot, dans l'appli Java, on plante au bout d'un moment par manque de mémoire ^^ Alors ça peut paraitre bizarre dit comme ça, mais j'ai commencé à me documenter un peu sur le pourquoi du comment, et je trouve ça assez intéressant.

Lire la suite...

samedi, juillet 3 2010

iPhone 4 : Apple a de l'humour...

Jérôme disait sur son blog que l'audience augmente quand il parle d'Apple ou de l'iPhone, donc je me suis dit que j'allais tenter le coup ;-) Bon, en vrai je voulais faire un beau petit troll pour réagir à la dernière lettre ouverte d'Apple concernant son bel iPhone 4.

Pour situer l'histoire, l'iPhone 4 dipose d'une révolution technologique : l'armature métallique tout autour du téléphone fait aussi office d'antenne. Bien que les premiers retours aient été très positifs sur ce choix, avec des tests montrant que la réception était dans l'ensemble bien meilleure, assez rapidement les gens ont commencé à se plaindre de pertes de signal importantes en fonction de comment ils tenaient leur téléphone...

La première réaction d'Apple (et/ou de Steve Jobs) a été de dire qu'il suffit d'utiliser une coque (ou toute autre protection) pour que le problème disparaisse (ce qui est a priori vrai). Mais hier on a eu droit à une jolie lettre ouverte : les utilisateurs sont sauvés, c'est un problème logiciel qui sera corrigé dans quelques semaines... Bon, en lisant ça j'étais un peu sceptique, donc ça vaut le coup de lire l'explication : l'algorithme calculant le nombre de barres à afficher pour la réception est foireux... et donc en fait, quand on pense perdre du signal car on le tient mal, c'est juste qu'on avait très peu de signal à la base.

Je reste assez sceptique, et je suis bien content d'avoir mon Nexus One ^^ (même si j'ai d'autres merdes avec lui :p). Mais si les utilisateurs gobbent cette explication, ça montera bien l'effet du champ de distorsion de la réalité dans toute sa splendeur.

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...

jeudi, juillet 1 2010

Trop de générique tue le générique

J'ai eu un collègue (pour ne pas dire supérieur) dont le maitre mot était "il faut que tout soit le plus générique possible". Ce n'est pas faux... Mais ce n'est pas forcément toujours vrai non plus, car ça suppose bien souvent qu'on accepte de perde au niveau des performances... Je vais vous donner un exemple de code d'affichage utilisé un peu partout au boulot et qui finalement a bien perdu à être générique...

Lire la suite...

mercredi, juin 30 2010

Champ de distorsion de la réalité

Voici un de mes articles de Wikipedia préféré... L'article sur le Champ de distorsion de la réalité !

http://fr.wikipedia.org/wiki/Champ_de_distorsion_de_la_r%C3%A9alit%C3%A9

En fait ce que je trouve génial c'est que c'est très vrai et très original à la fois. Bon, on va dire que je peste toujours contre Steve Jobs et Apple, mais là pour le coup l'article est très juste. Et ce n'est pas péjoratif ni rien, au contraire, ça démontre tout le savoir-faire d'Apple au niveau marketing :)

lundi, juin 28 2010

Regexp : quick intro

Pour ceux qui ne connaissent pas, Regexp signifie "regular expressions" (ou "expressions régulières", en français...). Elles sont très utiles car elles permettent de grandement améliorer la souplesse d'une recherche dans un texte. Histoire d'illustrer de façon basique comment cela fonctionne, je vais donner un cas concret d'utilisation que j'ai eu la semaine dernière...

Lire la suite...

samedi, juin 26 2010

Dithering : méthode de Sierra

Un livre électronique a un gros défaut : son écran monochrome, qui ne présente que peu de niveaux de gris. Hier je bossais donc sur améliorer le rendu (en terme de vitesse et de qualité), sachant que le résultat final n'est codé que sur 3bits (8 niveaux de gris).

Je vais donc vous présenter la méthode de dithering qu'on a utiliser pour avoir un meilleur rendu : celle de Sierra. Petit schéma pour illustrer le but du jeu :

Image d'origine
Dithering_-_Originale.png

Méthode de Sierra
Dithering_-_Sierra.png

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" ^^).

ICFP 2010

Pour ceux qui ne suivent pas l'actualité, l'ICFP 2010 a commencé il y a bientôt 24h... Bon, la team Jussieu est sur le coup, et pour l'instant le moins que l'on puisse dire c'est qu'on prend cher ^^ En gros on n'a que très peu avancé, ça s'annonce plutôt mal :p

Si vous avez envie de voir à quoi ça ressemble, c'est par là : http://icfpcontest.org/2010/task/

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 ^^ ;)

dimanche, juin 13 2010

Cours d'informatique en ligne

Un petit billet rapide pour vous parler d'un site peu connu mais vraiment génial : Academic Earth. Le principe est simple : des profs de grandes universités américaines acceptent de se faire filmer et de mettre leurs cours en ligne. Un moyen efficace de s'instruire à moindre frais (pour peu qu'on comprenne suffisamment l'anglais).

Seul regret ? La plupart des cours sont d'un niveau 1ère-2ème année, donc pas forcément intéressant quand on a un peu d'expérience ^^ Mais on sait jamais, ça peut toujours servir à quelqu'un (et peut-être qu'un jour ils y mettront des cours de niveau plus avancé).

Je vous file le lien pour aller voir direct dans la partie "Computer Science", mais toutes les disciplines universitaires y sont disponibles...

Academic Earth

Edit : juste quand je poste on me signale un autre lien, merci Pitt ! Cours du MIT