samedi 7 décembre 2013

Mesurer les performances de vos pages Web ASP NET MVC 4 avec Glimpse

Un collègue m'a fait découvrir un outil (open source) assez sympa qui permet de mesurer les perfs de votre application web .NET : il s'agit de GLIMPSE.



Pour ma part je l'ai testé sur un projet Asp net mvc4; il fonctionne également pour d'autres types de projet tels que ASP.NET, etc

Pour les codeurs VISUAL STUDIO, Il suffit de télécharger la package Nuget correspondant dans votre Visual Studio:



Un fois le package installé, il suffit de lancer votre site, d'ouvrir un autre onglet dans votre navigateur ou vous copierez l'url de votre adresse suivi de /glimpse.axd (par exemple http://localhost:62s23/glimpse.axd), et vous pourrez ainsi activez la console d'analyse Glimpse comme l'indique l'image ci-dessous :


Vous devriez arrêter l'analyse via cette même page en cliquant sur "turn Glimps Off". Une fois Glimpse activé sur cette page, il suffit de rafraîchir votre page, et vous verrez apparaître la console d'analyse Glimpse au niveau de votre debugger du navigateur (en bas de navigateur).


Sur l'onglet ci-dessus, vous avez par exemple le temps d'exécution de chaque méthode appelé lors du chargement de votre page. Un certain nombre d'informations supplémentaires peuvent être consultées sur les autres onglets, notamment le temps d'exécution des requêtes LINK que j'ai trouvé super sympa.

Je découvre l'outil pour l'instant mais je le trouve assez sympa, simple d'utilisation et il semble regorger de pleins de fonctionnalités utiles que je ne manquerez pas de partager.

vendredi 6 décembre 2013

Error javascript Uncaught TypeError: Cannot use 'in' operator to search for...

J'ai récemment rencontré cette erreur javascript lors d'appels AJAX avec Jquery sur une application ASP.NET MVC 4. Je me rendu compte que la plupart du temps, cette erreur était dû au fomat du "data" retournée par le serveur, notamment la confusion entre le type "string" et "json".

Ci-dessous le code serveur qui me retourne la liste d'éléments :
public JsonResult ListItems()
{
      var response = itemService.ListItems(new ItemRequest());
      return Json(response.Items, JsonRequestBehavior.AllowGet);
}

voici mon code javascript qui plantait au départ :
var maList = new Array();
  $.ajax({
            url: '/Home/ListItems',
            type: 'GET',
            cache: false,
            success: function (data) {
              AlarmsList = data;
              ...

En changeant l'affectation directe de ma liste json en retour, puis en précisant le type de retour en plus, le problème a été résolu.

var AlarmsList = new Array();
  $.ajax({
            url: '/Home/ListItems',
            type: 'GET',
            cache: false,
            dataType: 'json',
            success: function (data) {
              $.each(data, function(i, alarm){
                AlarmsList.push(alarm);
              ...
 });

Ce ticket jquery suivant mentionne cette erreur 'type'; Mais ce message d'erreur Javascipt est assez générique et peut apparaître dans d'autres contextes que celui de mon exemple d'appel ajax. Cependant, Il fera très souvent référence à un problème de manipulation/parcours d'éléments dans un tableau Javascript.

jeudi 14 novembre 2013

Les transactions sous SQL Server 2012

J'ai démarré une série d'articles sur les transactions SQL sous SQL Server 2012 que vous trouverez ici. Dans ce premier volet, j'aborde notamment la définition ACID de la transaction.

samedi 2 novembre 2013

SCRUM, méthode ou façon de faire ?

Ahhhh, les méthodes agiles... un sujet qui fait fureur en ce moment dans la plus part des entreprises en France, dans les écoles informatiques d'ailleurs. C'est carrément un débat car il suffit d'en parler autour du café ou avec un collègue développeur (ou autre) pour se rendre compte que tout le monde sait ou pense savoir des choses dessus... D'ailleurs, je me rends compte que les gens savent beaucoup de chose dessus et pourtant, plus de la moitié d'entre eux ne l'ont jamais pratiqué sur le terrain... En tout cas, quasiment très peu ont réussi à le mettre en place de la façon dont ils comprennent la méthode : Moi en premier. 

D'où cette question que je me pose : est ce que SCRUM est une méthode ? on dit bien couramment "la méthode SCRUM " => et pourtant je me rappelle qu'il y a à peine 3 ou 4 ans, Ceux qui en parlait le plus (les scrumMasters que j'avais rencontré) disait que ce n'était pas une méthode mais plutôt un ensemble de bonnes pratiques qui pouvaient s'appliquer afin de palier aux problèmes récurrents qu'on rencontre souvent dans les projets informatiques. 
Aujourd'hui, où SCRUM est encore bien plus ancrée en entreprise, on pourrait se poser les questions suivantes : 
- Fait-on du SCRUM si on ne fait pas de dailyScrum ? 
- Fait-on du SCRUM si on ne fait pas de rétrospective à la fin de chaque Sprint ? 
- Le simple fait de réussir à impliquer le Product Owner suffit-il dire qu'on fait du SCRUM ? 
- La documentation doit-elle vraiment baisser (voir disparaître) de priorité dans un projet en SCRUM ?
- Au final, fait-on tous du SCRUMBUT ?
Il est clair d'après moi qu'il faut impérativement mettre en évidence les zones d'ombres ainsi que les points positives constatés à la fin d'un Sprint, tout comme le dailyScrum  qui est fortement conseillé. Je pense que la "méthode" ou la "façon de faire" SCRUM met beaucoup de choses en évidence dans un projet informatique et propose un ensemble de bonnes pratiques qui sont bien adaptées aux besoins changeants et récurrents des clients. Cependant, SCRUM proposes une approche qui ne semble pas emballer beaucoup de personnes qui ont du mal à adhérer au "dynamisme" de la méthode, à abandonner leur façon habituelle de travailler (surtout chez les clients finaux) ou  à s'impliquer lors des projets comme le propose SCRUM qui font foirer ces projets : en exemple, je citerai un PO qui ne s'implique pas, des développeurs qui jugent le Daily inutile, le chef de projet qui se prend pour le ScrumMaster et qui force à suivre à la lettre des pratiques qu'il a lu dans le manifeste Agile ou à une formation Scrum d'un jour tout en mettant la pression au développeurs, le ScrumMaster qui ne comprend pas que son rôle c'est juste de s'assurer de la mise en pratique de la méthode et non de donner des ordres...

Au final, ce que je constate le plus c'est qu'on est de plus en plus nombreux à adhérer à SCRUM et à reconnaître ses avantages (surtout en France), même si en retour d'expérience, certains ScrumMaster remontent tout de même des problèmes d'adhésion à la méthodologie ou au non respect de règles de bases que propose SCRUM (ce qui tend à disparaître et c'est plutôt bon signe)...

Est-ce là le véritable problème de SCRUM ? l’interprétation des "règles" de la méthodologie si différentes selon l'équipe ? Ne pourrait-on pas y voir un avantage justement ? une méthode qui nous fourni un cadre auquel on peut adjoindre nos contraintes projets de façon  souple ?
A méditer...

vendredi 25 octobre 2013

Changer la position du contrôle de zoom sur une map avec LEAFLET

LeafLet est une librairie Javascript vous permettant de manipuler les APIs de cartographie telles que google map, bing map, open street map, etc. Elle offre beaucoup d'avantages sur celles-ci tels que :
  • L'abstraction sur les API de carto elles mêmes (vous pouvez intervertir les cartes, sans changer votre couche d’événements/métiers) 
  • Elle est axé responsive UI et présente donc une bonne compatibilité sur les tablettes par exemple (attention aux modules annexes tout de même (tel que LeafLet-Draw) qui ne le sont pas tous). 
  • Sa richesse de fonctionnalités repondant à la majorité des besoins de carto.
Je ferai bientôt un post plus global su cette librairie que j'ai récemment exploitée en profondeur.

Ce post juste pour noter une petite astuce qui peut servir, notamment si le controle de zoom se retrouve empiéter sur d'autre éléments du DOM de votre application par exemple. 

A l'instanciation de votre map, désactivez en premier le controle de zoom en le passant à 'false' :

// Init map
var map = new L.Map('map', { center: new L.LatLng(48.836094, 2.232412), zoom: 15, zoomControl : false }); 

Puis rajouter le controle de zoom, cette fois-ci en spécifiant sa position :

map.addControl(L.control.zoom({ position: 'bottomleft' }));

Les diffentes valeurs possibles de la propriété 'position' sont :
bottomright, bottomleft, topleft, topright.

On se retrouve avec un affichage comme celui-ci :




lundi 26 août 2013

Développeurs

Développeurs !
Je n'ai pas pu résister à cette vidéo ! Je la partage donc ! amis développeurs ==> spéciale dédicace !!