Présentation Page Speed au GDG de Nantes

Voici les supports de la présentation du user group Duchess France et l’outil d’audit de performance Web Page Speed.

Présentation de Page Speed

Présentation de Duchess France

 

Publicités

Hyperlapse

Avez vous déjà rêvé de partager un superbe point de vue entrevue au détour d’une route ? Et bien maintenant c’est possible.

Hyperlapse

Hyperlapse est une application de time lapse basée sur Google Street View. Le montage permet de voir la route comme si vous étiez dans une voiture.

La sociéité Teehan+Lax Labs présente quelques démos et cette vidéo montée. C’est du WebGL, il faut donc un navigateur assez récent et le chargement est prend souvent quelques minutes.

Le site utilise une version dont le frame rate est volontairement assez bas. Les sources en Javascript sont disponible sur GitHub. Hyperlapse.js et Three.js la librairie 3D pour ceux qui veulent faire d’autres applications.

Vos propres parcours

Le site Hyperlapse met aussi à disposition une IHM qui permet de créer ses propres parcours en choisissant une route d’un point A à un point B sur Google Map, et le point de vue à regarder (la croix).

La configuration nécessite une bonne connaissance de la carte et de la région du parcours pour trouver les points de vue intéressants et éviter que les vues zappent dans tous les sens. Les espaces doivent être assez dégagés et il faut aussi des trajets assez courts et droits car le nombre d’images est limité. Et il faut aussi qu’il y ait des routes disponibles, c’est bête à dire, mais au fin fond de la Camargue ou des Cévennes les routes n’ont pas forcément été relevées. Au final c’est quand même très bluffant.

Voici quelques essais sur des paysages français. Vous pouvez modifier dynamiquement le point de vue avec la main qui apparaît sur la vidéo, utile à savoir si à un moment donné la caméra pointe invariablement le ciel :o)

Le viaduc de Millau – Le pont du Gard – Bord de mer à Antibes – Bord de mer vers Toulon – Route de camargue vers les Saintes Maries de la mer – La corniche des Cévennes – Route des Cévennes vers l’Aigoual (et oui ils sont même allés jusque là avec une Google Car) –

D’autres time lapses

Il existe une application similaire qui est une publicité pour une marque de véhicules français. Le trajet est limité à 20 Km et on ne peut pas fixer le point de vue qui est sur la route. Il faut aussi connaître les adresses. En contrepartie le frame rate est plus élevé et on s’y croirait vraiment car les images sont très raccord. En revanche, elles sont de qualité assez médiocre.
Un exemple dans les Cévennes, pour la précision c’est entre entre Valleraugue et Notre Dame de la Rouvière dans le Gard, vous noterez qu’on n’est pas embêté par les voitures dans ce coin là.

Devoxx d’un point de vue très … objectif

Devoxx pour la plupart des gens c’est une avalanche de technologies. Pour moi cette édition de Devoxx a été consacrée à une seule technologie, celle des appareils photos.

Je sais maintenant à peu près à quoi servent la moitié des boutons et molettes de mon appareil. Les photos ne sont pas trop mal, probablement pas aussi propres qu’elles auraient dû être. Je ferai mieux la prochaine fois 😉

infographie-devoxx-2013

Tests de performance au YaJUG

J’ai uploadé les slides de la présentation sur les tests de performance que j’ai faite au YaJUG fin Octobre.

Les présentations, la mienne, celle de Stéphane Landelle sur Gatling, et celle d’Antonio Gomes Rodrigues sur JMeter ont été filmées par le YaJUG et seront disponibles sur Parleys dans l’espace du YaJUG http://www.yajug.org/confluence/display/Public/Past+Events+2012.

A cette occasion je me suis rendue compte qu’on connait des petits trucs que les autres n’utilisent pas forcément.

Mon truc c’est d’utiliser les profils Firefox pour éviter la reconfiguration du proxy.

JMeter, comme la plupart des outils de test de charge, utilise un proxy HTTP pour enregister une séquence d’actions  que vous jouez dans votre navigateur et générer un squelette de scénario de test. Pour que cela fonctionne, il faut configurer un HTTP Proxy Server dans JMeter, puis aller dans la configuration du navigateur pour indiquer  le port du proxy et enregistrer le scénario. Si vous ne l’avez jamais fait, la procédure complète se trouve là http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

Première chose, le HTTP Proxy Server n’est pas toujours sur un port pratique. Il est par défaut sur le port 8080, ce qui est ennuyeux si vous avez aussi un Tomcat sur la même machine. Le navigateur trouvera bien quelque chose sur le port 8080, mais ça n’est pas votre proxy.

Une fois le port changé et les options de filtrage configurées, je sauve cet élément en utilisant « Save Selection As … ». Ceci permet de le réimporter plus tard en utilisant la fonction « Merge » dans le menu. Donc voilà, mon port est 4567.

 

Ensuite, il faut créer un profil dans Firefox qui passera toujours par Proxy sur le port 4567.

Il faut activer le Profile Manager car il n’est pas actif par défaut. La procédure varie selon les OS. Pour MacOSX, la procédure se trouve ici, pour Windows il faut ajouter -ProfieManager à la fin de  la ligne de commande du raccourci.

Au prochain démarrage, Firefox vous proposera de choisir un des profils existants et vous pourrez créer un profil JMeter.

Il y a un autre intérêt à passer par un profil spécifique. Vous laisserez ce profil vierge de tout add-on et vous éviterez ainsi de devoir configurer des filtres au niveau du proxy pour ignorer les requêtes émises en continu par ces extensions.

La prochaine fois, il n’y a plus rien à faire. Vous importez l’élément HTTP Proxy Server sauvegardé, vous le démarrez, vous lancez Firefox avec le profil JMeter et tout marche.

L’Open World Forum 2012

logo open world forum 2012L’Open World Forum 2012 s’est tenu le week end dernier à Paris.

Certains blocs de sessions étaient pris en charge par l’OSDC, le FUDCon (Fedora), le PAUG, Ruby.rb et divers groupes FOSS. De la diversité mais un planning assez opaque et quand à trouver la bonne salle parmi 9 salles sur 3 étages plus un auditorium …

Même si on retrouve toujours un peu les mêmes, la communauté Java était peu représentée et c’était l’occasion de croiser d’autres communautés de langages ou de pratiques.

Les gros événements étaient les présentations Google TV et le PAUG Conf Day. Beaucoup de monde et j’étais en retard pour d’autres contraintes donc au final j’ai beaucoup picoré dans les sessions de l’OSDC qui avait fourni un planning détaillé et j’ai gardé deux des sessions pour faire ce post. Les sessions ont été filmées par le PAUG et l’OSDC et seront disponibles bientôt.

L’Open World Forum c’était aussi la présence d’artistes et de sessions d’initiation à l’informatique pour les enfants. J’en parlerai dans un autre post sur le site de Duchess France.

Mais revenons en aux sessions techniques.

Choisir entre la corde et le poison

NoSql, cloud et montée en chargePierre Couzyosdc

Row of network servers in data centerPierre Couzy travaille chez Microsoft. Il est venu partager son expérience et les leçons qu’il a apprises sur le jeu Atlantis Fantasy. C’est un jeu Flash dont le back end est hébergé sur le cloud Azure qui utilise MongoDB en plus d’une base SqlServer classique.

Je n’aurais jamais cru écrire deux des mots de la phrase précédente sur ce site, mais en définitive les leçons qu’il a partagé sont valables sur beaucoup d’environnements Cloud.

Les jeux en ligne Facebook ont un cycle de vie en loi de Poisson avec un démarrage assez brutal lors de la propagation sur les réseaux sociaux, un plateau plus ou moins court selon l’attrait du jeu et un déclin en longue traîne au fur et à mesure que les joueurs se lassent. Les périodes critiques économiquement sont la croissance très rapide avant le plateau et le début du déclin. Dans les deux cas, la capacité doit s’adapter rapidement pour satisfaire les utilisateurs ou pour éviter des coûts disproportionnés. Le cloud est alors bien adapté pour gérer les phases de croissance et de maturité et ces jeux migrent souvent sur un hébergement classique moins couteux pour gérer le déclin. L’autre souci à gérer est qu’un jeu en ligne peut difficilement tolérer des arrêts pour maintenance et a très peu d’inactivité. Il marque seulement un creux dans la nuit. D’un autre coté des arrêts très brefs sont peu perçus par les joueurs car le client Flash les masque.

communication and internet network server roomLe premier constat est que sur un cloud toute opération disque devient une opération réseau car le stockage disque est fourni sous forme de service réseau de type EBS chez Amazon ou Azure Drives. Or la performance des bases de données dépend pour beaucoup des performances du stockage. Des défauts qui passent inaperçus sur des disques rapides locaux ressortent ici et sont difficiles à diagnostiquer car on raisonne toujours en volume d’écriture en mesurant la vitesse de transfert en bytes per second. Or c’est la latence du réseau qui bride le système pas le débit binaire du disque. C’est donc le nombre d’opérations, les IOPS qu’il faut surveiller. Elles plafonnent en général autour de 1000.

VenomLa deuxième recommandation est de diviser pour mieux régner. Les données sensibles comme les transactions financières sont restées sur un serveur SQL classique car il est impossible de garantir leur intégrité sur MongoDB. MongoDB est utilisé là où la souplesse du modèle est utile. Pour les données stockées dans MongoDB, Pierre Couzy recommande de partager les données entre plusieurs bases en fonction de leur cycle de vie pour pouvoir faire des optimisations plus agressives. Dans le cas du jeu, les données sont classées en trois catégories, l’état du jeu relativement stable, les données sociales assez volatiles, et des verrous logiques dont la durée de vie est très courte. Une des raisons de ce découpage est qu’il n’est pas utile de stocker physiquement des données à durée de vie très courte, l’autre est que les ralentissements sur les verrous doivent être absolument évités car ils ralentissent tout le reste du jeu.

Un troisième constat est que le multi-instance n’est pas la panacée. Lorsque l’instance MongoDB atteint sa limite de capacité, la première idée est de répartir la charge sur plusieurs instances. Mais une instance unique est plus efficace qu’une des instances du cluster. La réplication avec chacune des  autres instances mobilise une partie des ressources, à peu près autant que les écritures primaires dans ce cas. Elle entraîne aussi des risques d’incohérence qui demandent des mécanismes de contrôles eux-aussi coûteux. La réplication sur les 3 instances pendant que le jeu est à pleine charge prend des jours et peut pénaliser les temps de réponse du jeu. Les journaux de réplication dépassaient leur taille limite ce qui créait d’autres problèmes. A contrario, une instance unique peut se limiter au strict nécessaire sans Oplog et sans journalisation le temps de gérer l’installation en multi-instance. Risqué mais ça tient la charge. Mais attention, ces optimisations très agressives rendent le passage du cap vers le muti-instance encore plus difficile.

Infinity clock. Vector illustrationLe sharding nécessite aussi un peu de réflexion. Par défaut, la shard key est l’id généré par MongoDB. Cet id est monotone et les données nouvelles partaient sur la même partition. La bonne clé dépend du cycle de vie des données. Si ces données sont répliquées par la suite le problème n’est que transitoire. La solution retenue a été de transformer l’id et déplacer des caractères de la fin vers le début pour forcer la clé à changer rapidement d’ordre de grandeur.

funambuleLe réglage a été un processus incrémental. Viser un objectif pas trop haut, trouver la bonne configuration, puis augmenter la charge. Les tests de performance se sont avérés quasiment impossibles car ils ne reproduisaient pas la réalité correctement. Sur du cloud il n’est pas nécessaire de prévoir la capacité totale du système, elle peut être augmentée avec un peu d’anticipation. Pour cela, les logs, le monitoring et des représentations visuelles de l’usage des ressources sont indispensables.

Pierre Couzy recommande aussi de choisir la taille de machine en fonction du facteur limitant que l’on préfère subir. Les petites configurations sont limitées par la mémoire, les moyennes par la CPU, les grandes par le réseau. Il préfère la limitation par la CPU car elle est simple à monitorer et qu’elle cause moins d’effets de bord que la mémoire et le réseau. Toutefois, même dans ce cas la limite de capacité créera des timeouts et des effets de cascade car les clients recommencent faute de réponse rapide. La durée des timeouts tend à mettre le système en résonance ce qui est identifiable par des courbes en zigzag.

Nous voilà parés pour le backend. Et côté client quoi de neuf ?

Les nettoyeurs de code Android

Pierre-Yves Ricau et Alexandre Thomas  – Android Annotations 

logo AndroidAnnotationsPierre-Yves et Alexandre nous ont présenté Android Annotations, qui comme son nom l’indique permet de remplacer de la plomberie un peu systématique dans la programmation Android par des annotations.

Cette session est essentiellement basée sur une démo de code donc je ne rentrerai pas dans le détail, il faudra aller la voir 😉

Une partie des annotations remplace les déclaration et les initialisations des extras, des vues, des ressources via de l’injection de dépendance. D’autres annotations permettent de remplacer les AsyncTasks en déclarant simplement par une annotation si la méthode tourne sur l’UI Thread ou en background. Enfin les annotations qui ont éliminées le plus de code sont celles qui remplacent les classes anonymes des event handlers. A l’arrivée un code plus court, plus lisible et qui marche toujours (si si on a vérifié).

Le surpoids est assez faible car le framework sépare la librairie embarquée sur le device de la librairie qui gère la génération des classes supplémentaires pour le code généré. Au final, le framework rajoute une classe pour chaque classe annotée et un peu de code.

logo AndroidKickStartrAlexandre Thomas nous a aussi rapidement présenté Android KickstartR qui regroupe tout un tas de librairies couramment utilisées dans un même bundle et permet d’initier rapidement un projet Android.

Présentation Incanter à l’Open World Forum2012

L’Open World Forum commence aujourd’hui et se tiendra jusqu’à demain. C’est une conférence Open Source gratuite qui s’adresse à tous.

Vous pouvez trouver des informations plus détaillées sur le track Code sur le site de l’OSDC.

Je ferai une présentation sur l’analyse de données avec Incanter samedi après midi. Les slides et le repository de code sont accessibles

Présentation Clojure au JUG Summer Camp

J’ai le plaisir de faire une présentation Incanter / Clojure au JUG Summer Camp. Le but est de couvrir quelques librairies utiles pour faire des analyses et des rapport sur de grosses masses de données.

Le code des exemples se trouve sous Github https://github.com/cfalguiere/ClojureBigDataJugSummerCamp2012

Les slides de la présentation en pdf sont sur SlideShare