lundi 30 septembre 2013

Auto

Enfin, mon premier accrochage sur le mot-clé auto! Je sentais bien venir le truc qu'on allait me reprocher mon enthousiasme à l'utiliser.

Ma première utilisation n'avait gêné personne:

auto it = _collection.begin();
auto end = _collection.end();
for(; it != end; ++it)
{
   ...
}

Ne pas avoir à écrire des types à ralonge genre std::map<int, std::shared_ptr<Item> >::const_iterator est vraiment pratique, et rend l'utilisation d'itérateurs presque agréable (pas autant qu'un bon range-based for...).

Ma deuxième utilisation était à peine plus contestable:

auto item = std::make_shared<Item>();

Là, le type est extrêmement clair puisqu'il est indiqué à droite de l'expression. Ce serait plutôt écrire std::shared_ptr<Item> item = std::make_shared<Item>() qui serait redondant!

Par contre, ma troisième utilisation concernait le type de retour un peu compliqué d'une fonction.

auto items = getItemCollection();

Là, ça bloquait... Je trouve bien plus pratique de coller un type auto ici. Mon type est complexe et peut changer. Si je me contente d'itérer sur mes items, je peux changer mon type de retour d'un vecteur à une liste ou un set sans avoir à changer le code appelant. Mais manifestement, c'était pousser le bouchon un peu loin!

J'en appelais à de plus hautes autorités, et envoyais le lien vers le Almost Always Auto d'Herb Sutter. Je crois avoir gagné la première manche, mais ce n'est que partie remise.

samedi 21 septembre 2013

Un réveil

Rien de bien compliqué dans ce réveil. Il y avait probablement moyen d'automatiser complètement la génération des marques sur le cadran, mais je ne me suis pas foulé et ai tout fait à la mimine.

Et une autre upgrade de Postgresql sur Debian

Une fois de plus, la mise à jour de Postgres sur Debian se fait avec une facilité déconcertante.

pg_dropcluster --stop 9.3 main
pg_upgradecluster 9.1 main
pg_dropcluster 9.1 main

pgAdmin se plaint que la version de Postgresql est trop récente, mais semble fonctionner quand même.

jeudi 19 septembre 2013

Un carnet

Une nouvelle icône, représentant un carnet. Rien de bien compliqué: quelques tores pour les anneaux, deux blocs pour le papier et le fond cartonné.

Cependant, les trous pour les anneaux m'ont laissé perplexe pendant un petit moment. J'ai commencé par essayer de les modéliser en subdivisant un côté de mon cube, et en extrudant les "bons bouts", mais reconnecter l'ensemble de l'autre côté semblait un peu complexe. Finalement, l'utilisation des fonctions booléennes a donné de meilleurs résultats: j'ai simplement créé un cube traversant le carnet au niveau de l'anneau, et utilisé le modificateur booléen "différence". Les vertex du carnet deviennent un peu n'importe quoi, mais cela ne gène pas le rendu. L'essayer c'est l'adopter!

jeudi 12 septembre 2013

Going Native 2013 - Bjarne et les ramasse-miettes

Les vidéos de la conférence "Going Native 2013", grosse conférence sur le C++ réunissant, entre autres, Bjarne Stroustrup (inventeur du C++), Herb Sutter (gourou C++ devant l'éternel, bossant ces temps ci chez Microsoft, et auteur d'un excellent blog sur le C++), Andrei Alexandrescu (le roi des templates, son bouquin "Modern C++ Design" est une perle) et Scott Meyers (De la série "Effective C++", "Effective STL", "More effective C++"...), sont maintenant en ligne. Les interventions ne sont pas aussi denses que je l'aurais souhaité, mais cela m'allait très bien puisque je me les suis gardées en tâche de fond, casque sur les oreilles, pendant que je codais autre chose, revenant parfois à l'image pour regarder une diapositive.

Un point qui m'a particulièrement interpellé dans l'intervention de Bjarne Stroustrup est son avis sur les ramasse-miettes (garbage collectors ou GC en anglais). Pour autant qu'il n'en nie pas l'utilité dans certains cas, en l'occurence des bases de code vieilles, complexes, et où les responsabilités ne sont pas bien définies, il demeure cependant convaincu de la supériorité des approches RAII, pour leur déterminisme d'une part, mais aussi pour leur capacité à gérer d'autres ressources que la seule mémoire d'autre part, comme les fichiers ou les verrous sur sections critiques.

De mon côté, autant j'apprécie la présence du GC dans du Java ou dans de l'OCaml, autant ce n'est absolument pas le paradigme C++ (Bjarne indique également qu'il déteste de mot "paradigme"...), et je suis fort satisfait des pointeurs intelligents fournis par le nouveau standard (ou par Boost pour ceux qui utilisent encore le même compilo que le roi Hérode).

jeudi 5 septembre 2013

Dwarf Fortress

Je suis en train de regarder la série sur Dwarf Fortress de VanguardOfValor sur Youtube, et je suis très impressionné par le jeu.

Pour ceux qui ne connaissent pas, il s'agit d'un jeu indépendant développé par deux frangins dans lequel le joueur dirige un groupe de nains dans la construction de leur forteresse souterraine. Au fur et à mesure de son expansion, la forteresse attirera de plus en plus de colons, mais également de plus en plus de convoitises. De plus, creuser trop profond peut faire surgir des hordes de créatures démoniaques...

La complexité est tout à fait remarquable, les nains ont des dizaines et des dizaines de compétences à développer, il y a des dizaines de types de chambres et de bâtiments, et le jeu devient de plus en plus difficile au fur et à mesure que vos nains sont de plus en plus exigeants et les ennemis de plus en plus nombreux.

Chaque créature du jeu a son histoire, ses préférences, son équipement... Et il y a toujours quelque chose à faire dans sa forteresse, comme de chasser les vampires qui se sont introduits parmi les colons, répondre aux demandes des nains "nobles", permettre aux nains qui sont pris d'une obsession de construire ce qu'ils veulent, sinon ils deviennent fous ou se laissent mourir...

Graphiquement, c'est particulièrement moche, et encore, des groupes de passionnés fournissent des outils supplémentaires et des jeux de sprites pour améliorer les graphismes en ascii art. Mais qu'est-ce que ça a l'air prenant! C'est d'ailleurs la raison pour laquelle je ne me lance surtout pas à y jouer moi même :)