Hash Code, fnf-detect et HTML Truncator
13/Mar 2015
Hash Code 2015
Google France organise un concours nommé Hash Code. J’ai participé avec 2 colllègues d’af83 à l’édition 2015. Les qualifications pour la finale avait lieu hier soir. Les règles sont assez simples : il faut disposer des serveurs dans un datacenter de la meilleure façon possible pour résister aux pannes d’électricité.
Notre code est disponible sur github.com/AF83/hashcode-2015. Il fonctionne de la façon suivante :
Lire les données du problème
Placer les serveurs dans le datacenter
- Trier les serveurs par efficacité décroissante (le rapport entre la capacité et la place qu’il prend)
- Pour chaque serveur, parcourir les lignes de la moins remplie à la plus remplie, et regarder s’il y a un emplacement pour le mettre
- S’il y a un emplacement, mettre le serveur dans cet emplacement
- Passer au serveur suivant
Puis, on assigne les serveurs à des groupes
- Trier les serveurs par capacité décroissante
- Pour chaque serveur, trouver le groupe avec la capacité garantie la plus faible et qui ne soit pas déjà très présent sur la ligne du serveur
- Assigner le serveur à ce groupe
Écrire notre solution
Avec ce fonctionnement et quelques ajustements, nous avons obtenu le score très honorable de 379. Nous avons ensuite essayé d’ajouter une phase d’optimisation entre les étapes 3 et 4, en échangeant des serveurs entre 2 groupes. Mais cela a été un échec : nous avons obtenu de moins bons résultats que précédement.
Bref, ce fût une soirée bien fun et j’espère que nous serons qualifiés pour la finale.
Mise à jour : oui, nous sommes bien qualifiés pour la finale !
fnf-detect
J’ai joué un peu avec des bibliothèques de Computer Vision la semaine dernière. Je me suis servi d’OpenCV et de ccv pour détecter des visages sur les photos. Cela permet ensuite de retailler les photos en gardant les visages dessus, même quand ces visages sont sur les bords.
Le fruit de ces expérimentations est visible sur le dépôt fnf-detect. La version avec OpenCV donne des résultats corrects et est rapide. La version avec ccv est un peu plus lente, mais améliore grandement les résultats. Au final, nous allons utiliser cette seconde version pour un client, car cela donne un aspect mieux fini à leur produit.
HTML Truncator
HTML Truncator, ma bibliothèque Ruby pour tronquer des textes présents sous forme d’HTML, semble être de plus en plus utilisée. J’ai des retours via les issues de github. Certains sont des questions, mais j’ai également eu un rapport de bug sur les entités HTML récemment. J’ai donc corrigé le bug et sorti une nouvelle version.