Archives mensuelles : décembre 2013

Chrome : Bien débuger avec la barre d’outils # 2

Cet article fait suite à l’article Chrome : Bien débuger avec la barre d’outils.

Ajouter une Watch Expression

Lors de debug JavaScript, vous devez regarder dans vos objets pour surveiller l’évolution des valeurs de vos variables. Chrome permet de rajouter des expressions afin de plus facilement surveiller ces valeurs. Ces expressions sont gardées au rafraîchissement de la page.

Les Watch Expressions sont gérés dans l’onglet Sources, dans la partie droite, dans l’accordéon du même nom. L’ajout se fait en cliquant sur le +. Il suffit ensuite d’entrer l’expression dans la textbox qui propose l’auto-complétion. Les valeurs sont automatiquement mis en jour en debug et il est possible de les rafraîchir via l’icône de rechargement.

WatchExpression

Emuler les événements de touch

Aujourd’hui les tablettes et smartphones sont de plus en plus répandu et beaucoup les utilisent pour naviguer sur Internet. Sur ces appareils sans souris, ce sont des événements « touch » (avec les doigts) qui sont émis. Chrome permet d’émuler ces événements touch. Pour cela il faut aller dans la barre de développement de Chrome, aller dans les préférences (icône en bas à droite en forme d’engrenage), et aller dans Overrides et cocher la case Emulate touch events. Bien entendu, vous ne pourrez pas simuler plusieurs doigts mais c’est déjà ça !!

Emuler les événement touch

Emuler un User Agent et la résolution d’un appareil

Chaque navigateur peut être identifié par ce que l’on appelle un User Agent. Cette information est envoyée à chaque requête au serveur et contient notamment des informations concernant le nom de l’application, la version, le système d’exploitation, la langue, etc…

Il est ainsi possible de modifier la réponse en fonction des informations de l’User-Agent comme renvoyé une page spécifique pour les appareils mobile par exemple.

Chrome permet de modifier cet User-Agent. Pour cela, il faut ouvrir la barre de développement de Chrome, aller dans les préférences (icône en bas à droite en forme d’engrenage), et aller dans Overrides et cocher User Agent. Une liste des principaux navigateur et appareils sont pré-configurés (Firefox, IE, IPhone, IPad, Android, …)

Il est également possible de simuler une résolution (j’avais expliqué dans un post précédent comment le faire avec Firefox) encochant l’option Device metrics. On peut choisir une résolution de manière manuelle et définir le facteur de zoom (Font scale factor). Dans le cas d’un appareil mobile, la sélection d’un user agent met à jour automatiquement la configuration avec celle de l’appareil choisi. Super Pratique !!!!

Voici en exemple mon CV configuré pour un téléphone Android Nexus S.

Emuler un User-Agent et une résolution

Simuler une géolocalisation

Aujourd’hui, de plus en plus d’application utilise la géolocalisation pour offrir des résultats adaptés à notre localisation (ex : pages jaunes). Chrome permet de simuler une géolocalisation et une position non disponible.

Emuler une géolocalisation

Emuler un média CSS

CSS permet d’adapter le rendu suivant le média sur lequel est affiché le site (écrans, projecteurs, imprimante, tv, Synthèses vocales, …). Chrome permet d’émuler un média. Cela se fait toujours dans les préférences de Chrome, Overrides, cocher Emulate CSS media et sélectionner le média à cibler. Cela s’avère très pratique notamment dans le cas de l’impression (j’avais évoquer la gestion des liens lors de l’impression dans un précédent article). Ci dessous, l’exemple de mon CV via l’émulateur avec le média print :

Emuler le média print

Console.Table

Vous utilisez surement abusivement de console.log pour débuguer vos scripts. Console.table est une méthode qui permet d’afficher le résultat sous la forme d’un tableau. Cela est pratique pour visualiser les objets de types Arrays mais également les objets.

Console.Table

A noter, que console.table() est également disponible sous Firebug.

Voici un article complet de présentation de console.table().

Liens

Présentation de Grunt

Le développement nécessite d’avoir de bons outils afin de gagner en productivité. L’automatisation des taches est un bon moyen de gagner du temps.

Grunt est un lanceur de taches. Il est basé sur NodeJS. Grunt permet de facilement automatiser vos taches liés au développement web. L’écosystème autour de nodeJs étant très dynamique, il existe une pléthore de taches grunt existantes

Je n’aborderai pas dans cet article l’installation et la configuration de grunt, vous trouverez dans la partie liens de très bons articles traitant ce sujet.

Voici une liste de quelques plugins utiles :

  • Less : Permet de compiler du des fichier LESS en CSS (il existe bien évidemment des plugins pour les autres préprocesseurs comme SASS ou Stylus
  • Cssmin : Permet de minifier vos CSS
  • Jshint : Permet de valider via JsHint votre code JavaScript
  • Concat : Permet la concaténation de fichier afin d’améliorer les performance de chargement de votre site
  • Uglify : Permet de minifier vos fichier js (permet également la concaténation avec possibilité d’utiliser Source map afin de debugger facilement vos scripts)
  • imageoptim / responsive-images : Permet d’optimiser et de générer des images adaptées à différentes résolution (responsive web design)
  • Watch : Permet de surveiller vos fichier et de lancer d’autres taches à chaque modification
  • HTMLHint : Validation de votre code HTML
  • jsdoc : Permet de générer la documentation de votre code js

Liens

Alternatives

Utilisez-vous Grunt ? Si oui, quelles taches utilisez-vous ?

.NET : Partager un numéro de version entre plusieurs projets

Lors de la création d’une application .net, il est commun de la séparer en plusieurs projets au sein d’une même solution (IHM, Service, DataAccess, Model, …). Il existe plusieurs stratégie concernant le versionning de chaque composant. Voyons comment associer un numéro de version commun à un ensemble de dll. (Je remercie mon collègue Ludovic qui a mis en place ce mécanisme sur les projets sur lesquels je travaille)

Pour mon exemple, J’ai créé une solution contenant 2 projets :

  • Un projet de type Class Library
  • Un projet de type Console Application.

L’application console a une référence vers le projet MyClassLibrary.

ShareVersion_Projects

Le numéro de version est définit par les attributs AssemblyVersion et AssemblyFileVersion présent dans le fichier AssemblyInfo.cs (dans le dossier Properties du projet).

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ConsoleApplication")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ConsoleApplication")]
[assembly: AssemblyCopyright("Copyright ©  2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("b9380bae-102a-4a41-b981-bfecfa948bcc")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Chaque projet contient le fichier AssemblyInfo.cs et la mise à jour de chaque fichier est nécessaire pour mettre à jour les versions de chaque projet. Cela peut définir vite fastidieux dans le cas d’un grand nombre de projet (à partir de 2, en fait … 🙂 ).
Voyons comment avoir des dlls ayant un numéro de version partagé.
Dans un premier temps, nous allons créer un dossier Common à la racine du projet qui contiendra un fichier SharedAssemblyVersion.cs

ShareVersion_SharedAssemblyInfo

Supprimez le contenu et coller la partie du fichier AssemblyInfo.cs concernant la gestion des versions.

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Pour chaque Projet pour lesquels vous souhaitez avoir un numéro de version commun, ouvrez le fichier AssemblyInfo.cs et supprimez la partie concernant la gestion de version.
Puis pour chaque Projet, ajouter en tant que lien le fichier SharedAssemblyVersion.cs. Pour cela, faites un clic-droit sur le projet, puis Add > Existing Item … .

ShareVersion_AddExistingItem

Sélectionnez le fichier SharedAssembly et ajoutez le en tant que lien (Cliquer sur la flèche du bouton Add et sélectionner Add as Link)

ShareVersion_AddAsLink

L’ajout en tant que lien est très important car sinon le fichier est copié et les modifications apportés au fichier commun ne seront pas prises en compte pour les fichiers non ajoutés en tant que lien.
Le fichier étant ajouté à la racine, déplacez-le dans le dossier Properties du Projet.

ShareVersion_SharedFileLinked

L’icône du fichier contient une flèche bleue indiquant que ce fichier est un lien vers un fichier existant.
La modification du numéro de version du fichier commun mettra à jour la version de tous les projets. (ici mise à jour vers un numéro de version 1.1.2.0)

Version des dlls