dimanche 26 février 2012

Dear Esther

Et un autre ovni vidéo-ludique qui débarque sur nos plateformes. Attiré par la pub sur Steam et par les commentaires énigmatiques sur de nombreux sites de jeux, je me suis offert la chose.

Il s'agit donc d'une histoire à la première personne où le joueur se ballade de manière complètement linéaire dans une île, divers endroits déclenchant un petit commentaire du narrateur, faisant progresser l'histoire.

En terme de gameplay, c'est très limité: il n'y a aucune interaction avec le décor, aucun obstacle, rien de caché, il suffit en gros de suivre le chemin. L'on peut explorer à droite à gauche, et découvrir de fabuleux paysages, mais l'on est rapidement stoppé par des rochers, une barrière, ou la mer. Au pas de course, le jeu se complète en 40 minutes. En prenant son temps, l'on peut aller jusqu'à 2 heures.

En terme d'atmosphère, par contre, c'est autre chose: l'on découvre petit à petit l'histoire, au milieu de paysages sauvages tout à fait remarquables. Le chapitre se passant dans une grotte est particulièrement beau, la musique est magnifique, et le sujet parfois poignant.

Certains trouverons le prix (environ 8€, ou 7£) trop cher pour une bonne heure de ballade, d'autres s'extasieront sur le concept novateur. J'ai essayé, et je suis satisfait.

vendredi 24 février 2012

C'était trivial...

Et Médoc utilise maintenant Tesseract 3.

Il faudra peut-être penser à paralléliser tout ça, parce que pour l'instant, le moins que l'on puisse dire est que l'analyse n'est pas particulièrement fulgurante. Mais les résultats sont là.

Tesseract 3.02 dans les bacs!

Yay, enfin, Tesseract 3 est disponible dans Wheezy!

Comme prévu, c'est le jour et la nuit en comparaison avec l'interface précédente. En plus des points exposés dans le précédent post sur le sujet, il est bon de rappeler également que Tesseract 3 renvoie un résultat en UTF8. J'ai bien l'intention de faire quelques tests avec le mode Mandarin et le mode équations, que je me ferai un plaisir de partager ici.

jeudi 16 février 2012

Danse et algorithmique

Un quick-sort par des danseurs hongrois. C'est bien plus clair comme cela, non?

mardi 14 février 2012

Tesseract 3.02 se rapproche de Wheezy

Voilà un paquet que j'attends avec impatience. Tesseract 3.0 a atterri dans Sid il y a 8 jours, et si tout va bien, devrait débarquer dans Wheezy très bientôt.

Au menu:
- Une API plus propre, et thread safe, ce qui permettra l'analyse des pages en parallèle (à 30 secondes par page, c'est plutôt utile!)
- Et surtout, une meilleure gestion des erreurs, qui permettra de renvoyer un joli message plutôt que de crasher et laisser le développeur découvrir où il s'est trompé. De plus, certains crashs "incompréhensibles" devraient être résolus.

J'ai hâte d'intégrer tout cela à Médoc.

dimanche 12 février 2012

Debug

Je viens de passer une semaine à débugger. Dans une codebase de 1.5 millions de lignes, un serveur qui corrompt les données, au bout d'un moment, lorsque deux clients y sont connectés et font suffisamment de requêtes.

Ce cas de figure est le pire qui se présente: mes tests unitaires passent, mes tests simples passent, mais mes tests pour stresser le système foirent en beauté, mais de manière suffisamment aléatoire pour que je ne puisse pas arrêter le débuggeur au moment où le problème surgit. Je ne peux qu'ajouter de plus en plus de lignes de logs au moment où le problème survient, en espérant enfin comprendre pourquoi.

De jour en jour, j'ai réussi à cerner le problème: en détectant la corruption de plus en plus près de sa cause, j'ai réussi à m'approcher suffisamment pour voir exactement le cheminement de l'exécution, et trouver le coupable.

Comme beaucoup de bugs de ce genre, c'était tout bête, planqué dans une vieille partie de code.

En voici le pseudocode:


template<typename T>
size_t hash(T input)
{
static int buffer[4];
calculate_hash((char *)&input, sizeof(input), buffer);
return *((size_t *)buffer);
}

L'on créé un buffer de travail, l'on appelle la fonction calculate_hash en lui passant l'entrée et le buffer de travail, et l'on retourne le début du buffer.

Dans le principe, cela marche très bien. Sauf que regardez d'un peu plus près le mot-clé "static". Le développeur était un peu endormi ce jour là, et l'a mis par erreur. Dans un programme non concurrent, comme par exemple un test unitaire, ça n'a pas beaucoup de conséquences. Peut-être rend-il le code un peu moins efficace, puisque sinon l'on travaillerait sur la pile, laquelle a de fortes chances d'être dans les caches du processeur. Par contre, dans un programme concurrent, c'est la catastrophe: si deux threads appellent la fonction au même moment, le buffer sera partagé, et les résultats imprédictibles. En l’occurrence, mes tables de hachage se retrouvaient à me renvoyer, une fois de temps en temps, une valeur incorrecte, quand le programme était très occupé.

Mot-clé retiré. Tout fonctionne.

dimanche 5 février 2012

Emacs - Changer la fonte

À chaque semaine et à chaque mise à jour Debian, son lot d'aventures. Aujourd'hui, c'est Emacs qui change sa fonte sans prévenir. C'est l'opportunité d'en reprendre une lisible et belle. Après quelques tentatives à coups de "Options" => "Set Default Font", mon choix se porte sur DejaVu Sans Mono, très lisible, monospace (impératif pour écrire du code), et avec un zéro bien différentié du o majuscule.

Un petit

(set-default-font "DejaVu Sans Mono 10")
dans mon .emacs plus tard, et tout est réparé.

Skyrim toujours pas en promo

J'ai raté les promos du début de l'année sur Steam, et j'en suis fort marri. Je suis dans les starting blocks dès que les prix diminuent.