Archives mensuelles : novembre 2013

Outils CSS3 – HTML5 – JavaScript : Episode 7

L’épisode 7 des outils liés aux technologies du web …

JavaScript

  • Une liste de plugins essentiels JQuery
  • jsdb.io : Un site qui répertorie les librairies JavaScript regroupés par thèmes avec recherche.
  • SnapSvg : une librairie pour gérer du SVG. Créée par Adobe (qui s’y connaît en vectoriel) en open-source, un des principaux développeurs est le concepteur de la librairie Raphael.js, une autre librairie qui permet de gérer du SVG.
  • Un article concernant la détection et l’avertissement lors d’une déconnexion d’un utilisateur
  • Normes de codage JS de airbnb (le site de réservation d’appartement entre particuliers)

CSS

  • Topcoat : une librairie CSS par adobe
  • Create CSS3 : Un générateur de règles CSS (assez complet, support des préfixes)
  • Koala : Une interface pour générer du CSS à partir de  LESS/SASS/Compass et du JavaScript à partir de CoffeeScript. Compatible Windows, Linux et Mac

HTML

  • Un très bon article sur sitepoint.com concernant la géolocalisation.
  • Real favicon generator : générateur de favicon (image représentant un site. Permet de générer également des icons pour Win 8, tablettes (iOS, Android, Windows Phone).
  • Ionicons : la police d’icône du framework ionic, pour créer des applications mobile en HTML5.
  • Runnable.com : permet de rechercher du code et de le tester (compatible avec pas mal de technos web (PHP, .NET, Ruby, NodeJs, …)
  • Une très bonne présentation (en anglais) sur l’automatisation de la partie front d’un projet
  • Un très bon article sur le Responsible Web design avec une boite à outils

NodeJs : Creer un serveur web avec Express

J’ai suivi récemment un formation HTML5 dans le cadre de mon travail. Lors de celle-ci, nous avons utilisé node.js pour la partie serveur.

Node.js est une plateforme basée sur le moteur JavaScript de Chrome qui permet de développer des applications en JavaScript. L’écosystème autour de nodejs est riche, outillé et très actif. Il est réputé pour ses performances (lié à son mode événementiel) et sa scalabilité.

Il existe notamment npm, node package manager, qui permet de gérer des modules et leurs dépendances. Il existe un très grand nombre de modules (+ de 48 000 actuellement) qui vous permettront de faire à peu tout ce que vous souhaitez (accès à une base de données, accès aux système de fichiers, …)

Dans notre cas, nous allons créer un serveur web avec node.js. Nous allons utiliser express, un module qui facilite la création d’un serveur web.

Installation d’Express

Nous allons donc installer Express via npm via la commande suivante en vous étant au préalable placer dans le dossier de votre future application (Pré-requis : NodeJs doit être installé.) :

npm install express

Cette commande va télécharger express et toutes ses dépendances dans le dossier node_modules (ce dossier contiendra tous les modules que vous installerez).

NB : Il est possible de définir un fichier package.json qui va définir votre projet dont ses références (guide interactif des propriétés du fichier package.json).

{
   "name": "demo",
   "description":"Mon serveur express",
   "version": "0.0.1",
   "dependencies": {
      "express": "3.x"
   }
}

Il suffit alors de lancer la commande pour que les dépendances du projet soit téléchargées :

npm install

Configuration du serveur

Node.js exécutant du JavaScript, notre serveur sera définit dans un fichier .js.
Voici l’exemple d’un fichier server.js qui permet de rapidement avoir un serveur http avec express.

//définition des dépendances et création d'un serveur express
var express = require('express'),
    app = express();

//configuration d'express
app.configure(function() {
  //__dirname est le chemin du dossier parent du fichier serveur
  //permet de renvoyer les fichiers à partir de la racine du fichier
  app.use(express.static(__dirname));
  //permet d'afficher la liste des fichiers d'un dossier
  app.use(express.directory(__dirname));
  //permet de gérer les erreurs
  app.use(express.errorHandler());
});

//on lance le serveur sur le port 8081
app.listen(8081);
//On affiche dans la console que le serveur tourne
console.log('Serveur lancé sur le port 8081');

il suffit de lancer dans la console de commande / terminal :

node server.js

Vous pouvez lancer votre navigateur à l’url http://localhost:8081 pour voir le résultat.

Voici par exemple l’affichage de la racine de mon serveur local pour le développement de mes exemples pour le blog.

Server web avec Express

Il affiche les dossiers et permet également de faire une recherche.

Le serveur ne renvoie que des fichiers statiques (html, css, js , images, …) mais il est tout à fait possible de renvoyer du contenu dynamique.

Références

Quelques liens pour bien débuter avec node.js

A noter, pour ceux qui font du .NET comme moi,  que viens de sortir une extension pour Visual Studio pour Node JS qui a l’air très bien

ASP.NET MVC3 : Mise en place du bundling et minification

La minification est une technique permettant de minifier (allégement du poids d’un fichier) et le Bundling, de regrouper des fichiers CSS et JavaScript afin d’optimiser les performances d’un site Web en limitant les appels aux serveurs.

Il faut savoir que votre navigateur va effectuer un appel au serveur pour chaque fichier de votre page. Plus le nombre sera élevé, plus le chargement de votre page sera long. Qui plus est, un navigateur possède une limite concernant le nombre de téléchargement de fichiers simultanés pour un même domaine. Ainsi, une fois cette limite attente, les fichiers suivant devront attendre la fin du chargement des fichiers précédents. Cette limite est actuellement à 6 pour la majorité des navigateurs.

La minification et le bundling vont permettre d’améliorer le temps de chargement de vos pages. MVC4 inclut la bibliothèque permettant de mettre en place ces techniques. Voyons comment l’installer sur un projet MVC3.

Installation de la librairie de Bundling

Il faut installer le package Microsoft ASP.NET Web Optimization Framework via le gestionnaire de paquet NuGet, qui se chargera d’installer les dépendances du package.

Il est posssible de l’installer via la console Nuget soit via le gestionnaire graphique de NuGet.

Via la console

Ouvrir la console Nuget

Lancer la commande :

Install-Package Microsoft.AspNet.Web.Optimization -Pre

Via le gestionnaire graphique

Il faut lancer le gestionnaire graphique en faisant un clic droit sur le projet ASP.NET et cliquer sur Gérer les packages NuGet ….

Lancement du gestionnaire NuGet

NuGetPackager-MVCOptimization

Le paquet étant actuellement en version alpha, il faut sélectionner « Inclure les versions préliminaires » et effectuer une recherche avec le terme Optimization. Il faut ensuite installer le paquet Microsoft ASP.NET Web Optimization Framework.

Utilisation

Il est possible de définir nos bundles via des bundles static. (Il existait auparavant une méthode permettant de créer des bundles de manières automatique via des conventions qui a été à priori supprimée).

On peut ainsi définir un bundle en ajoutant les fichiers 1 par 1 ou par dossier :

Création d’un bundle pour un fichier

ScriptBundle jQueryBundle = new ScriptBundle("~/bundles/jquery");
jQueryBundle.Include("~/Scripts/jquery-1.8.3.js");
bundles.Add(jQueryBundle);

Création d’un bundle pour un dossier avec un pattern sur les fichiers à sélectionner

StyleBundle cssBundle = new StyleBundle("~/Content/css");
cssBundle.IncludeDirectory("~/Content/", "*.css", false);
bundles.Add(cssBundle);

Les bundles doivent être ajoutés dans BundleTable.Bundles

Le plus simple est de définir une classe BundleConfig dans le dossier AppStart qui permet de gérer les bundles comme cela est fait par défaut dans MVC4, ce qui facilitera une migration. Voici le corps de la classe

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;

namespace MonApplication.MVCApplication.App_Start
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
            ScriptBundle jQueryBundle = new ScriptBundle("~/bundles/jquery");
            jQueryBundle.Include("~/Scripts/jquery-1.8.3.js");
            bundles.Add(jQueryBundle);

            // ....
        }
    }
}

Il faut ensuite rajouter dans la méthode Application_Start du fichier Global.asax.cs l’appel à la méthode d’enregistrement des bundles via le code suivant

BundleConfig.RegisterBundles(BundleTable.Bundles);

Déclaration dans le HTML

Il faut ajouter le using suivant (en razor)

@using System.Web.Optimization

Il faut ensuite utiliser les helpers mis à disposition

@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")

Il faut savoir que par défaut, l’optimisation n’est pas activée par défaut en debug (mais en release oui). Vous pouvez l’activer via :

BundleTable.EnableOptimizations = true;

Enfin, si vous avez déjà des fichiers minifiés (.min) dans votre projet, il faut déclarer les versions non minifiées dans le bundle, l’optimiseur chargera de lui même les fichiers .min de façon transparente en fonction si l’optimisation est activée ou non.

Allez plus loin

Vous pouvez créer votre propre transformation en implémentant l’interface IBundleTransform. Sachez qu’il existe déjà des implémentations pour LESS, SASS, CoffeeScript, TypeScript, … disponible sous forme de package NuGet. Il est également possible d’inclure des librairies JavaScript via des CDN avec support local. Pour en savoir plus, je vous invite à lire cet article sur le site officiel de asp.net qui présente cette fonctionnalité pour MVC4 mais qui est valable après installation du package pour les projet MVC3.

Brackets

Brackets est un IDE pour le web nouvelle génération. En effet, il est écrit en JavaScript, HTML et CSS !! (Il utilise nodejs notamment sous le capot).

Brackets est open source mais est issu d’Adobe et sert de base pour leur éditeur Edge Code. Il est compatible Windows, Mac et Linux (à télécharger ici).

Il est développé en mode agile via des sprint (une version toutes les 2 semaines et demi environ) et il est possible de suivre l’avancement et de proposer des idées via Trello (Un tableau agile).

Brackets

Fonctionnalités

Il offre des fonctionnalité de base très intéressante :

Editeur CSS

Intégration d’un sélecteur de couleur dans l’éditeur CSS (via Ctrl-E ou clic-droit > Edition Rapide)
Brackets - Sélecteur de couleur

Intégration d’un documentation dans l’éditeur CSS (via Ctrl-K ou clic-droit > Documentation Rapide)
Brackets - Documentation Rapide

Editeur HTML

Possibilité d’éditer ou de créer les règles CSS d’un élément directement depuis le HTML (via Ctrl-E)
Brackets Edition CSS dans Editeur HTML

Pré-visualiseur d’image au survol d’un élément image
Brackets - Prévisualisation Image

Editeur JavaScript

Intégration native de JSLint
Brackets - JSLint

Extension

Il est également extensible via un système d’extensions. La gestion se fait directement dans Brackets en cliquant sur l’icône en forme de lego en haut à droite.
Brackets - Extensions

Vous pouvez trouvez sur le blog de brackets une présentation des extensions. La liste complète est disponible ici.

Voici quelques extensions que j’utilise :

  • brackets-code-folding : permet de pouvoir afficher / masquer du code
  • Autoprefixer : permet d’ajouter automatiquement les préfixes CSS
  • Theseus for Brackets : debuger JavaScript pour Chrome
  • Emmet : génere du code HTML à partir d’une syntaxe CSS
  • CanIUse : les informations de CanIUse.com directement dans Brackets
  • Indent Guides : afficher les lignes d’indentation

Live Reload

Brackets inclus par défaut la fonctionnalité de Live Reload (en cliquant sur l’éclair en haut à droite). Cela permet de recharger la page dans Chrome (version incluse dans Brackets) automatiquement à la sauvegarde d’un fichier.

Liens

Conclusion

Brackets est éditeur encore jeune mais très prometteur. Je vous invite à le tester d’autant que le développement en mode agile permet d’apporter régulièrement de nouvelles fonctionnalités.

Glimpse : Debugger votre application ASP.NET

Je vais présenter aujourd’hui Glimpse, un outil qui va vous permettre de debugger votre application ASP.NET (MVC ou WebForms) plus facilement.

Installation

Glimpse s’installe facilement via NuGet. Pour cela, faire clic droit sur votre projet ASP.NET et cliquer sur Gérer les packages NuGet … . Sélectionner En Ligne et rechercher Glimpse. Il existe une version de Glimpse pour chaque version de MVC et pour WebForms.

Glimpse - Installation

Installez la version en fonction de votre application web.

Utilisation

Lors de l’ajout de Glimpse via NuGet, Glimpse rajoute automatiquement une section permettant de configurer Glimpse dans votre web.config.

Par défaut, glimpse est activé coté serveur seulement en local via la ligne suivante rajoutée dans le web.config :

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">

Vous pouvez désactiver complétement Glimpse en passant defaultRuntimePolicy à Off. Il est également possible de configurer plus finement Glimpse. Pour cela, je vous renvoie vers la documentation concernant la configuration.

Par défaut, Glimpse n’est pas activé coté client. Lancer votre application web et aller à l’adresse racine de votre application et ajouter Glimpse.axd (http://localhost:portname/Glimpse.axd).

Cette page permet de configurer Glimpse et de l’activer. L’activation se fait via les boutons Turn Glimpse On et Turn Glimpse Off (ces boutons sont des bookmarklets qui vous pouvez glisser / déposer dans votre barre d’adresse pour une activation/désactivation rapide). Cette page permet également de gérer les onglets qui seront affichés dans Glimpse.

Glimpse - Configuration

(en vert dans la barre d’addresse, les bookmarklets permettant l’activation/désactivation rapide).

Vous pouvez maintenant retourner sur votre application. Une fois activée, vous verrez en bas à droite de votre écran la barre Glimpse.Cette barre affiche les informations relative à la page courante :

  • HTTP : temps de réponse, …
  • Host : Information Serveur (Controller/Action, Vue, …)
  • Ajax : le nombre de requêtes AJAX.

Glimpse - Mode Reduit
Au survol d’une zone, on affiche un volet afin plus d’information :

Glimpse - Information Http
Au clic sur le g (en bas à droite), on passe en mode avancé avec un système d’onglet comme on peut l’avoir avec une barre d’outils comme Firebug.

Voici quelques onglets présent dans cette vue avancée :

L’onglet Configuration permet de consulter la configuration (web.config) de l’application :

Glimpse - Configuration

L’onglet Timeline présente l’exécution de la requête dans le temps

Glimpse - Onglet TimeLine

L’onglet Request présente les informations de la requête :

Glimpse - Onglet Requete

L’onglet Route présente la résolution de la route :

Glimpse - Onglet Route

L’onglet Trace permet d’afficher les messages écrit via System.Diagnostics.Trace et Debug

public ActionResult Index()
{
    System.Diagnostics.Trace.Write("Je suis une trace");
    System.Diagnostics.Debug.Write("Je suis un debug");
    return View();
}

Glimpse - Trace

Plugins

Glimpse supporte des extensions, à installer via NuGet, qui permettent de rajouter un onglet contenant les informations relatives à l’extension. Il existe notamment :

  • une extension pour Entity Framework (comme pour ASP.NET veillez à installer le package lié à la version d’EF que vous utilisez), qui permet d’afficher les requêtes effectuées ainsi que leur temps d’exécution.
  • une extension pour Log4Net qui permet de voir les entrées de Log4Net

Liens

ASP.NET MVC : Adaptez vos vues selon le device

On parle de plus en plus de Responsive Web Design (RWD) afin d’adapter l’affichage d’un site en fonction du périphérique de l’utilisateur. Il existe également le Web Design Adaptatif qui permet notamment de renvoyer un contenu adapté au terminal. En effet, le poids de la page a une importance lorsque l’on a un terminal avec une connectivité limitée (un téléphone par exemple). Il se peut également que les fonctionnalités d’une version mobile soient différentes d’une version classique par exemple.

ASP.NET MVC apporte avec la version 4 la possibilité d’avoir des Display Modes adaptés en fonction du périphériques. Ainsi, vous pouvez avoir plusieurs vues (1 pour la version mobile et 1 pour la version normale par exemple) sans modifier toute votre application.

Par défaut, 2 modes sont gérés : classique et mobile. ASP.NET MVC étant très configurable et extensible, il est possible de définir ses propres modes. Le tutorial sur le site officiel sur les fonctionnalités pour le mobiles, montre comment ajouter ces modes.

WURFL / 51Degrees

Wurfl et 51Degrees sont 2 librairies qui permettent une plus grande flexibilité dans la détection des devices mobiles (en proposant une base de données permettant d’identifier les navigateurs mobiles de façon plus précise et plus sûre) et donc une gestion des définitions des modes plus précis.

Quelques liens sur l’utilisation de ces librairies avec ASP.NET MVC :

WURFL

51Degrees

/!\ Si vous utilisez T4MVC, il faut utiliser  Views.ViewNames.Index (qui renvoie le nom de la vue Index dans notre exemple) et non pas Views.Index (qui renvoi le chemin vers le fichier de la vue ex : ~/Home/Index.cshtml). En effet, le moteur renverra,  dans ce cas, tout le temps vers la vue spécifiée par le chemin et non pas la vue correspondant à votre device.

MVC3

Comme précisé précédemment, cette fonctionnalité n’a été apportée qu’avec la  version 4 de MVC. J’ai eu à mettre en place ce type de gestion avec un site en MVC 3. Il existe une extension NuGet, MobileViewEngine, qui permet le support basique de cette fonctionnalité (L’article de présentation du package sur le blog de l’auteur Scott Hanselman, membre de la Web Platform Team chez Microsoft). En effet, Il n’est pas possible d’ajouter des modes et la détection se fait via Browser.IsMobileDevice d’ASP.NET (dont la base de données n’est pas la plus à jour). Cette gestion n’étant pas adaptée dans mon cas, je suis donc parti du code source de ce package afin de le modifier et l’adapter à mon besoin en utilisant WURFL.

ASP.NET MVC : Supprimer les moteurs de vues inutilisés

En ASP.NET MVC, il y a 2 moteurs de vues (View Engine) configurés par défaut (Vous pouvez créer vos propres moteurs de vue ou en utiliser d’autres moteurs existants) :

  • WebFormsViewEngine pour les vues en .aspx (et .acsx)
  • RazorViewEngine pour les pages en Razor .cshtml.

Dans la plupart des cas, une application n’utilisera qu’un seul moteur de vue (ma préférence va à Razor que je trouve plus lisible). Cela sera d’autant intéressant dans le cas du moteur Razor car celui-ci est enregistré en second. En effet, le moteur de vue WebFormsViewEngine sera appelé en premier. Celui-ci va rechercher un fichier aspx ou ascx correspondant à la vue à afficher. Ne le trouvant pas, le moteur de vue WebFormsViewEngine pour générer la vue en cshtml.

Voyons comment supprimer le moteur de vue pour WebForms dans le cas où on code les vues en Razor :

// On supprime tous les moteurs de vue enregistré
ViewEngines.Engines.Clear();
// On rajoute le moteur pour les vues en Razor
ViewEngines.Engines.Add(new RazorViewEngine());

Pour finir, voici un lien avec un comparatif des différents moteurs de vue pour MVC.