Blog

Grunt, Gulp, quel outil pour automatiser vos tâches front-end ? (2/3)

Gulp

Tout comme Grunt, Gulp est un outil d’automatisation JS (javascript task runner) basé sur la plateforme NodeJS qui va nous permettre d’améliorer notre workflow et d’optimiser nos applications web. Qui dit automatisation dit plus de temps pour se concentrer sur d’autres choses plus importantes comme produire du code de qualité ! Grâce à cet outil, nous allons pouvoir automatiser des tâches telles que la compression d’images, les tests unitaires ou encore la minification.

Depuis sa sortie, Gulp a suscité un grand intérêt auprès de la communauté des developpeurs front-end du fait de la simplicité de sa mise en place et de sa configuration qui lui permette d’être très facilement lisible et maintenable.

Installation

Puisque Gulp est basé sur NodeJS, ce dernier doit être installé sur votre poste avant d’installer Gulp.

Vous pourrez installer NodeJS sur votre machine sans trop de difficulté en vous rendant ici.

Une fois NodeJS installé, vous pourrez installer facilement Gulp en utilisant npm (Node Packet Manager).
Il faut lancer la commande suivante :

$ npm install -g gulp

Cette commande aura pour effet d’aller récupérer Gulp depuis le registre npm et de l’installer globalement dans votre système.
Pour installer gulp uniquement au niveau de votre projet, il ne faut pas mettre l’option -g dans la ligne de commande.

Configuration

À ce niveau, Gulp est installé sur votre système et est prêt à être utiliser dans nos projets.

Tout comme nous l’avions vu dans notre précédent article, il faut avoir mis à la racine de notre projet un fichier package.json dans lequel on va renseigner toutes nos dépendances de développement .

À présent, il faut installer Gulp en tant que dépendance du projet, ce qui permettra aux autres membres de la team, de partir du bon pied lorsqu’ils feront un « npm install » !
La commande à exécuter est la suivante :

$ npm install --save-dev gulp gulp-util

L’option « –save-dev » dans la ligne de commandes va permettre de mettre à jour les dépendances de développement dans le fichier package.json en ajoutant une référence à gulp et gulp util. Si vous omettez cette option, le fichier package.json ne sera pas mis à jour avec la dépendance en question et vous serez obligé de la rajouter manuellement.

Maintenant nous allons pouvoir installer tous les plugins qu’il nous faut pour automatiser l’éxécution des tâches !
Étant donné que les plugins de Gulp sont des modules de node, nous allons utiliser npm pour les installer.

$ npm install --save-dev gulp-less gulp-watch

La ligne de commande ci-dessus va installer le plugin pour compiler nos fichier LESS et va nous permettre de surveiller les fichiers que l’on modifie dans le but d’y associer un traitement particulier. De plus, une entrée sera automatiquement ajoutée au niveau de devDependencies dans le fichier package.json

{
  "devDependencies": {
    "gulp": "^3.7.0"
    "gulp-less": "^1.2.3",
    "gulp-watch": "^0.6.5"
  }
}

À l’heure actuelle, Gulp dispose d’un peu plus de 600 plugins. Certains feront sûrement votre bonheur, tels que :

Gulpfile.js

De la même façon que Grunt, toute la configuration de Gulp réside dans le fichier gulpfile.js situé à la racine du projet.
Nous allons donc commencer par dire à Gulp de quels plugins nous avons besoin pour executer les tâches :

var gulp  = require('gulp'),
    util  = require('gulp-util'),
    less  = require('gulp-less'),
    watch = require('gulp-watch');

Par la suite nous allons specifier quelles tâches nous allons exécuter. Dans notre cas nous allons faire 2 choses :

  • Une tâche « less » qui va compiler les fichiers LESS et placer le résultat à un endroit donné
  • Une tâche « default » qui va exécuter la tâche « less » puis surveiller toutes modifications des fichiers de type .less, si une modification survient la tâche « less » sera rejouée

Pour définir une tâche Gulp, on utilise la méthode task() suivante :

gulp.task('less', function () {
  gulp.src('app/styles/**/*.less')
    .pipe(less())
    .pipe(gulp.dest('build/styles'));
});

La méthode task() prend en entrée un nom sémantique « less » qui définit le nom de la tâche et ensuite une fonction anonyme qui contient le traitement en question.

Nous allons décomposer cette méthode ligne par ligne :

gulp.src('app/styles/**/*.less')

La méthode src() va nous permettre de spécifier le chemin vers les fichiers avec l’extension LESS et va les transformer en un stream qui sera diffusé aux plugins pour effectuer les traitements.

.pipe(less())

La méthode pipe() va utiliser le stream provenant de src() et le passer aux plugins référencés. Ici en l’occurrence, le plugin less recevra le stream de fichier pour les traiter.

.pipe(gulp.dest('build/styles'))

La méthode dest() va nous permettre de spécifier l’emplacement où l’on souhaite écrire le résultat du traitement. Les fichiers LESS compilés seront donc placés dans le dossier styles du build.

Pour exécuter cette tâche, il suffira de se placer à la racine du projet et de lancer la commande :

$ gulp less

Si nous ne spécifions pas de tâche dans la ligne de commande, la tâche « default » sera lancée.

gulp.task('default', function() {
  gulp.run('less');
  gulp.watch('app/styles/**/*.less', function() {
    gulp.run('less');
  });
});

La tâche « default » ci-dessus a pour but de lancer la tâche « less » (compilation de LESS pour avoir en sortie une feuille de style CSS) puis surveiller toutes modifications des fichiers LESS. Si une modification survient, la tâche « less » sera re-éxecutée. De cette façon, on n’a plus à se soucier de compiler les fichiers LESS à chaque fois qu’on les modifie !

Là est toute la puissance de Gulp, une syntaxe très séduisante, claire et facilement lisible et un gain de performance grâce à un système de stream qui évite d’écrire dans un dossier temporaire.
Il n’y a pas autant de plugins disponibles pour Gulp que pour Grunt, c’est un fait, mais la communauté n’en est pas moins active et grandissante, il ne serait pas étonnant que Gulp s’impose comme le prochain standard de l’automatisation JS des tâches, mais d’ici là quel outil choisir ?

La suite, dans notre prochain article consacré au match Grunt / Gulp.

Grunt, Gulp, quel outil pour automatiser vos tâches front-end ? (1/3)

Introduction

En tant que développeurs front-end, nous sommes amenés à réaliser nos projets web en ayant à l’esprit un certain nombre de bonnes pratiques telles que :

  •  La compression des feuilles de styles CSS et la minification des scripts Javascript pour qu’ils soient le plus léger possible en production
  •  L’optimisation des images en réduisant leur poids sans altérer leur qualité
  • Auto-générer des sprites d’images
  •  S’assurer que les scripts Javascript ne contiennent pas d’erreurs de syntaxe
  •  Retirer les alertes/console log en production
  •  etc …

Si  nous voulons avoir une webapp optimisée, nous devons réaliser absolument toutes ces tâches. Des tâches répétitives, quelque soit le projet, et fastidieuses car elles ne se limitent pas seulement aux 4 citées en exemple plus haut.

Automatiser ce genre de tâches est donc devenu quasi-vital dans le but, d’une part, de gagner un temps considérable à ne plus tout faire manuellement et d’autre part, d’être sûr de l’optimisation du code livré en production (minification, obfusquation etc…). Tout cela en moins de temps qu’il ne faut pour préparer votre café préféré !

Si votre quotidien est synonyme de tâches à répétition et que vous avez cherché à un moment donné à les automatiser, vous avez forcément entendu parler de Grunt ou encore de Gulp qui s’imposent comme des références en la matière d’outils d’automatisation Javascript.

Outils Javascript d’automatisation

Les outils js d’automatisation des tâches s’appuient sur Node.js, une plateforme software écrite en Javascript orientée serveur qui fut créé il y a quelques années. Elle utilise le moteur V8 de Google Chrome qui va analyser/exécuter ultra-rapidement du code js et qui fonctionne suivant un modèle non bloquant (programmation asynchrone). Node.js a ouvert la voie, entre autres, à de nouveaux outils d’automatisation tel que Grunt et c’est une vraie chance pour nous autres développeurs front-end que d’avoir à notre disposition ce genre d’outils pour :

  • déployer rapidement un serveur de développement
  • rafraîchir sa page lorsque l’on modifie un fichier
  • compiler les templates
  • bouchonner les données renvoyées par un web service,
  • supprimer tous les commentaires dans le code
  • minifier les feuilles de styles
  • obfusquer les scripts JS
  • etc…

Il n’y a pratiquement pas de limites à ce que l’on peut faire !

Grunt

Grunt est un outil basé sur des tâches exécutées en ligne de commande qui va grandement accélérer nos workflows classiques de développement en réduisant notre effort lors de la préparation des sources pour les mises en production.

Dans la plupart des cas, sachez que lorsque vous effectuez manuellement une tâche, son équivalent automatique existe sous forme de plugin Grunt comme par exemple la minification et la concaténation de scripts.

Grunt est également capable de gérer des tâches qui ne sont pas forcément liées à Javascript comme la compilation CSS depuis SASS ou LESS.

Enfin sachez qu’il dispose d’une incroyable communauté de développeurs et d’une énorme base de plugins mise à jour très régulièrement. Vous n’êtes donc pas seul à vous lancer dans l’aventure !

Installation

Comme évoqué précédemment, Grunt est basé sur Node.js. De ce fait il doit être installé sur votre machine pour que Grunt puisse fonctionner. L’installation de Grunt se fait via le npm (Node Packet Manager), il suffit d’ouvrir votre invité de commandes et d’exécuter cette instruction pour installer Grunt :

$ npm install -g grunt-cli

Package.json

Package.json est un fichier à créer à la racine de votre projet, il va vous permettre de tracker et d’installer toutes les dépendances liées au développement. Ainsi, tous les membres de votre team disposeront des toutes dernières versions des dépendances. Ce qui en fin de compte permet de garder un environnement de développement constamment synchronisé.

{
  "name": "Example",
  "description": "Un package de test",
  "version": "0.0.1",
  "private": "true",
  "author": "Prenom Nom ",
  "devDependencies": {
    "grunt": "^0.4.5"
  }
}
$ npm install

La commande ci-dessus va dire à npm d’aller récupérer toutes les dépendances qui sont listées dans devDependencies puis de les installer dans le dossier node_modules.
 Dans cet exemple, si la commande réussie, Grunt version 0.4.5 ou supérieure sera installée localement dans le projet.

Gruntfile.js

Comme le fichier package.json, le fichier Gruntfile.js doit être placé à la racine du projet. Il contient toute la configuration des tâches automatiques à exécuter lorsque l’on exécute grunt depuis l’invité de commandes.

module.exports = function(grunt) {

    /* 1. Toute la configuration. 
     * L'ordre n'a pas d'importance.
     */
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

   /* 2. La configuration du plugin cssmin pour la minification de css.
    * Une sous tâche build qui va minifier index.css dans style.css
    */
        cssmin: {
                   build: {
                             src: 'app/css/index.css',
                             dest:'build/css/style.css'
                          } 
                }
    });
    
    /* Chargement du plugin
     * 3. On dit à Grunt que l'on compte utiliser le plugin grunt-contrib-cssmin.
     */
    grunt.loadNpmTasks('grunt-contrib-cssmin');

    /* Déclaration des tâches
     * On dit à grunt ce qu'il faut faire lorsque l'on execute "grunt" dans l'invité de commandes.
     */
    grunt.registerTask('default', ['cssmin']);

};

À partir de maintenant il n’y a plus qu’à exécuter la ligne de commande suivante dans notre invité de commandes pour minifier notre feuille de style :

$ grunt

Et voila ! Notre feuille de style a été minifiée en une fraction de seconde. grunt-command-line
Imaginez maintenant toutes les tâches que l’on peut automatiser exactement avec la même simplicité! 
Pour vous en rendre compte, je vous invite à jeter un œil à l’impressionnant listing de plugins disponible pour Grunt. Pas moins de 3000 plugins pour faciliter notre quotidien.

Grunt est donc un outil très simple d’usage, qui consiste en un fichier de configuration js facilement lisible, dans lequel on paramètre les plugins que l’on souhaite utiliser pour automatiser nos tâches.
Sachez qu’il n’est pas le seul sur le marché… 
La suite, dans la deuxième partie de ce dossier qui sera consacrée au petit nouveau, Gulp !

UX sketching

Comment imaginer la meilleure UX pour vos utilisateurs ? C’est ce qu’Alvin Berthelot a enseigné lors d’un elaboratoire de SudWeb 2014 auquel j’ai participé le week end dernier. Pas besoin de logiciels aux licences inabordables ou de connaissances techniques approfondies. Du papier, des crayons et des gens ! Ce sont les ingrédients nécessaires pour réaliser un sketch d’interface graphique avant de réaliser des spécifications ou des users stories.

Un sujet

Commençons par définir le sujet. La problématique doit être claire et concise. Toutes les contraintes obligatoires doivent être définies. Lors de l’atelier, Alvin nous a proposé de nous mettre à la place du service IT d’une entreprise chargé de réaliser une application mobile destinée aux commerciaux qui perdent trop de temps à déclarer leurs notes de frais auprès de la comptabilité. Ils veulent une application leur permettant de prendre leurs factures en photo en temps réel, d’enregistrer le type de note de frais, la date, le montant et de suivre l’état des notes précédemment enregistrées.

Des gens

Nous allons maintenant rassembler des personnes pour constituer un groupe hétérogène. Ne prenez pas que vos collègues développeurs, demandez la participation de tous les corps de métiers possibles : commerciaux, graphistes, comptables… vous serez surpris de voir comment chacun à sa propre idée bien particulière de l’ergonomie. Choisissez entre quatre et six personnes. N’hésitez pas à choisir des personnes généralement timides qui pourront profiter de l’occasion pour s’exprimer.

Ça y est, tout le monde est autour d’une table, un calepin et des crayons, feutres à dispositions ? Alors c’est parti pour la première étape :

La réflexion individuelle

Une fois que tout le monde a bien lu et compris le sujet, nous lançons le chrono pour cinq minutes. Le timeboxing est primordial lors de cet exercice afin de se concentrer sur l’essentiel et aussi ne pas faire perdre trop de temps à toutes ces personnes qui ont d’autres tâches à faire dans leur emploi du temps. Cinq minutes durant lesquelles chacun va dessiner sur son calepin une interface graphique qui correspondrait à la demande. Des dessins très schématiques, des traits, des rectangles, des triangles, quelques annotations, il faut aller vite !

Les cinq minutes sont écoulées, c’est le moment d’expliquer son point de vue aux autres. Tour de table, on montre ses dessins, on explique ses choix, mais surtout, on n’interrompt pas ! On discutera lors de l’étape suivante :

Le dessin collaboratif

C’est maintenant que les choses deviennent amusantes. On remplace les calepins par une grande feuille de papier qu’on place au centre de la table. Tout le monde doit pouvoir y accéder car il n’y a pas de dessinateur attitré. Celui qui veut prend le crayon et dessine. C’est le moment où les critiques peuvent fuser. Il faut savoir dire qu’on n’est pas d’accord avec son collègue et savoir écouter les critiques. Le résultat ne sera que meilleur s’il est constitué d’un maximum d’idées.

C’est un exercice vraiment très intéressant. On peut avoir l’impression d’avoir la meilleure UX lors de la première étape individuelle puis se rendre compte que certains détails n’auraient finalement pas marché car on a interprété le sujet différemment des autres ou parce qu’on est conditionné par les outils qu’on utilise au quotidien. Au final, on agrège des idées qu’une seule personne, même techniquement spécialiste en UX n’aurait peut être pas trouvées toute seule. Dans notre exercice par exemple, nous avions choisi d’activer le mode photo en tant que première étape lors de l’enregistrement d’une note alors que d’autres avaient placé un petit bouton à l’intérieur d’un formulaire complexe. Dans l’autre sens, nous n’avions pas pensé à la possibilité d’afficher des notifications pour indiquer qu’une note de frais étaient passée au statut invalide.

Cette phase a duré dix minutes puis 15 minutes lors de l’atelier, selon les projets, à vous de choisir la timebox adéquate. Choisir une durée assez courte permet de pousser les participants à ne pas s’attarder sur les détails, quitte à relancer une ou deux itérations. L’important est de bien respecter la durée imposée au départ. Pour une UX un peu plus complexe on pourrait par exemple viser quatre itérations de quinze minutes.

Le pitch

L’étape finale consiste à mettre tout ça au propre, repasser les crayonnés au feutre, rajouter une ou deux couleurs, et si vous le pouvez, faire votre pitch auprès de votre client. Si le client est content, ce sketch pourra servir de base aux graphistes pour l’élaboration de maquettes graphiques et fonctionnelles ou au product owner pour l’écriture des users stories.

Voici le résultat pour mon groupe :

Sketch UX

Sketch UX

L’UX n’est pas une science exacte et est très subjective. Profitez de vos collègues et votre entourage pour rendre votre produit le plus adapté à ses utilisateurs.

Bien démarrer ses projets web avec Yeoman

yeoman

Introduction

Avec autant d’outils disponibles pour les développeurs web aujourd’hui, il peut parfois être difficile de comprendre comment tout cela s’assemble et fonctionne.

Construire la structure de son projet « from scratch » et organiser son code et ses dépendances n’est pas toujours évident. Yeoman va nous aider à résoudre ce problème, et vous lancer sur de bons rails en générant la structure de base de votre projet (scripts, librairies, tests, …). Le code généré par yeoman est le fruit de l’aggrégation des meilleurs pratiques du web qui ont évoluées au sein de l’industrie.

Dans cet article, vous allez apprendre comment exploiter Yeoman afin de pouvoir de créer des applications web solides.

Qu’est-ce que Yeoman ?

Yeoman est une collection de trois outils : Yo, Grunt, et Bower. Combinés ensemble, ces outils fournissent tout ce qu’un développeur a besoin pour démarrer son projet.

Yo – CLI tool for scaffolding out Yeoman projects

Yo est un outil qui est utilisé pour échafauder une nouvelle application. Il permet de créer la structure du projet, l’organisation des feuilles de style, des scripts, des ressources.

Grunt – The javascript task runner

Grunt est un outil basé sur nodejs qui vous permet d’exécuter des tâches écrites en javascript. Par exemple, avec grunt vous pouvez automatiser les builds, les tests, et le développement. Grunt s’appuie sur un grand nombre de plugins parmi lesquels on peut trouver.

Bower – A package manager for the web

Bower est un outil qui va vous permettre de gérer vos dépendances et librairies, les installer automatiquement et surtout les garder à jour, de sorte que vous n’avez pas à les télécharger manuellement.

Installation

Prérequis

Un guide complet est accessible directement ici, pour ceux qui voudrait rapidement l’essayer assurez vous d’avoir installé Nodejs , Git et optionnellement Ruby et Compass (si vous voulez utiliser scss)

Ensuite, en ligne de commande, installer yo

npm install -g yo

Comme yo dépend de grunt et bower, ces derniers seront installés automatiquement !

Maintenant, il faut installer un générateur de projet :

npm install -g generator-webapp

Certains générateurs embarquent yo, grunt et bower, et les installeront si nécessaire automatiquement. La liste des générateurs se trouve sur npm

Utilisation

Une génération de projet avec yeoman se déroule ainsi :

mkdir MyWebApp	&& cd $_       # Crée un dossier nommé MyWebApp et se place dedans
yo webapp                      # Génère une structure de base
bower install underscore       # Installe les dépendances et librairies
grunt                          # Pour builder le projet	
grunt test                     # Lance les tests
grunt serve                    # Lance un serveur

Générateurs

Plusieurs générateurs sont disponibles via npm. Parmi les frameworks les plus utilisés, on trouve facilement les générateurs associés :

Backbone

npm install generator-backbone

yo backbone 			# Génère la structure
yo backbone:model article	# Génère un modèle
yo backbone:collection article  # Génère une collection
yo backbone:router article      # Génère une route
yo backbone:view article	# Génère une vue
grunt serve 			# Lance votre projet dans un serveur local

AngularJS

npm install generator-angular
yo angular 					# Génère la structure
bower install 					# Installe les dépendances
grunt serve 					# Lance votre projet dans un serveur local

Emberjs

npm install generator-ember 	
yo ember 					# Génère la structure
bower install 					# Installe les dépendances
grunt serve 					# Lance votre projet dans un serveur local

Et si cela ne vous suffit pas, vous pouvez aussi écrire votre propre générateur et ainsi optimiser d’avantage votre productivité, ou contribuer à la communauté en soumettant votre générateur sur npm. Pour les plus courageux suivre le guide ici

Plugins grunt

Une multitude de plugins va vous permettre d’augmenter votre productivité et automatiser vos tâches : validation du code, minification et obfuscation du code source, zip des sources, live reload, lancer des commandes shell, déployer sur un serveur … Voir ici pour tous les plugins disponibles.

Pour installer un plugin grunt, éditer le fichier package.json à la racine du projet pour ajouter le plugin. Exemple :

{
	"name": "MaWebApp",
	"version": "1.0.2",
	"dependencies": {},
	"devDependencies": {
		"grunt": "~0.4.1",
		"grunt-contrib-copy": "~0.4.0",
		"grunt-contrib-clean": "~0.5.0",
		"grunt-contrib-compress": "~0.7.0",
		"time-grunt": "~0.2.1"  ## Ajoutez vos dépendances après cette ligne
	},
	"engines": {
		"node": ">=0.8.0"
	}
}

Ensuite, dans votre terminal :

npm install

Cela va installer automatiquement les nouvelles dépendances que vous avez ajoutées.

Conclusion

Ceci n’était qu’un aperçu des possibilités qu’offre Yeoman. En utilisant les générateurs de base et en inspectant le code généré, vous comprendrez mieux comment tout ces composants fonctionnent ensemble, et vous ouvrira surtout de nouvelles perspectives dans vos workflows.

Retour sur notre présence au Techno Day Aerospace Valley le 3 avril à Agen

Je vous fais un petit retour sur notre présence au Techno Day, le 3 avril dernier à Agen, organisé par le pôle de compétitivité Aerospace Valley.

Pour cette première édition, l’objectif étant de donner plus de visibilité aux enjeux et technologies du pôle et à valoriser le potentiel de ses membres.

Durant cette journée, plusieurs conférences étaient organisées sur les thèmes de l’aéronautique, des systèmes embarqués et des drones et leurs usages.

En tant qu’exposant, nous avons pu montrer notre solution innovante DocDokuPLM en proposant aux visiteurs des démonstrations de l’ensemble des fonctionnalités telles que la visualisation 3D dans un navigateur internet ou les aspects collaboratifs intégrés comme la visioconférence ou le chat.

IMG_0038

Notre agrément CIR renouvelé jusqu’en 2016

AgrementCIR-DocDoku

Le Ministère de l’Enseignement Supérieur et de la Recherche nous a octroyé à nouveau l’agrément Crédit d’Impôt Recherche (CIR) pour une durée de trois ans (2014, 2015, 2016) comme il l’avait fait pour 2011, 2012 et 2013.

Cela signifie que DocDoku est reconnu comme organisme ayant la capacité à mener des travaux de Recherche et Développement (R&D) et que toutes les dépenses de réalisation d’opérations de R&D confiées à DocDoku ouvrent droit au Crédit d’Impôt en faveur de la Recherche, dans les mêmes conditions que pour des investissements internes.

Pour rappel, le CIR est un dispositif d’incitation fiscale en faveur de la recherche et de l’innovation. Il permet aux entreprises de bénéficier d’un crédit d’impôt correspondant à un pourcentage du montant des dépenses investies dans l’année en recherche et développement. Cet avantage fiscal varie entre 30% et 50% de Crédit d’Impôt sur les dépenses engagées pour les projets éligibles (voir conditions sur le site du Ministère).

Vous n’avez donc plus aucune excuse valable pour ne pas vous lancer dans de nouveaux projets R&D puisque ces derniers peuvent faire l’objet d’une prise en charge substantielle par l’Etat au travers du Crédit d’Impôt Recherche lorsque vous passez par notre intermédiaire.

Pour toutes questions sur vos projets innovants, n’hésitez pas à nous contacter.

Quel éditeur JavaScript ?

JavaScript est devenu, qu’on le veuille ou non, un langage incontournable. Indispensable sur le poste client et plus précisément sur le navigateur, il prend sa place, peu à peu, sur le serveur avec notamment nodejs.

Bon nombre de développeurs sont donc amenés à écrire de plus en plus de JavaScript, pour cela il convient de s’équiper et de choisir un IDE adapté. Essayons de balayer les choix possibles.

Les IDE Java vétérans que sont Eclipse ou Netbeans supportent plus ou moins bien le JavaScript. On peut attribuer sur ce terrain un avantage à Netbeans qui s’en sort mieux que son rival de toujours. Dans la catégorie des environnements de développement généralistes, IntelliJ IDEA demeure un poids lourd. Il sait tout faire : du JEE, Android, Spring, Grails…et donc forcément aussi du JavaScript. JetBrains, l’éditeur, propose d’ailleurs une déclinaison de son logiciel phare, dénommé WebStorm, uniquement centré sur le JS, HTML et CSS. C’est un choix intéressant car moins onéreux qu’IDEA Ultimate Edition.

Au delà des outils historiques du développeur Java, d’autres éditeurs « pure player » ont fait leur apparition. Parmi ceux-ci Sublime Text tient le haut du pavé. Léger, performant, multiplateforme Sublime Text présente de nombreux avantages. Toutefois il pourrait dérouter les aficionados d’IDE traditionnels ; pour tirer la pleine puissance de Sublime il faut faire l’effort d’apprendre ses raccourcis clavier, de se plonger dans ses options de configuration et de parcourir la liste des plugins disponibles. Enfin, il faut savoir que si une version gratuite est disponible Sublime reste un logiciel propriétaire dont la licence coûte $70.

Pour ceux ne pouvant concevoir utiliser autre chose que des logiciels open source, je recommanderais d’essayer Brackets.

brackets

Il est proposé par Adobe et est développé lui même en JavaScript (il tourne sur WebKit). Assez jeune, il est néanmoins prometteur, il semble s’inspirer de Sublime avec sa barre latérale très ressemblante et son architecture modulaire visant à promouvoir un riche écosystème de plugins. L’édition de CSS avec une prévisualisation intégrée est particulièrement réussie. Une fonctionnalité intéressante de Brackets est son « Aperçu en direct » qui permet d’héberger les ressources du projet (fichiers JS, HTML, CSS…) sur un serveur embarqué (nodejs). Chaque modification est alors automatiquement prise en compte par le navigateur web sans devoir rafraîchir la page. En plus du gain de productivité que cela procure, servir les scripts JavaScript par HTTP évite les erreurs que l’on peut rencontrer en utilisant des URLs de type fichier.

Enfin, comment terminer notre petite liste d’outils sans parler des Chrome dev Tools. Connus de tous les développeurs web et disponible directement depuis le navigateur de Google, les dev Tools servent à examiner l’arbre DOM, le trafic réseau, positionner des points d’arrêt dans le code JavaScript…Bref, on ne présente plus ces fonctionnalités, essentielles à l’implémentation de clients HTML. Néanmoins depuis récemment Chrome s’est enrichi d’une nouvelle option le rapprochant encore un peu plus d’un éditeur de code. Effet depuis l’onglet « Sources », un simple clic droit permet de relier les ressources délivrer par le serveur à une arborescence locale de fichiers.

add-folder-to-workspace

select-folder

Une fois ce mapping établi, tout changement fait dans un source JavaScript ou CSS se persiste durablement par un rapide « Ctrl-s ». Plus besoin de copier/coller les modifications opérées dans Chrome pour les reporter dans le code.

Android 4.4 KitKat

Alors que l’on attendait une version 5 d’Android, Google a surpris tout le monde en annonçant une version 4.4, qualifiée donc de « version mineure ». Mineure car elle apporte peu de changement « visible » pour le grand public et est donc plus difficile à « marketer ». Pourtant sous le capot, on constate un grand nombre d’évolutions importantes que je vais tenter de vous résumer dans cet article.

NFC : Host Card Emulation

Jusqu’à la version 4.3, le support NFC sur les téléphones Android est limité à une fonction de lecture de tags NFC. Ceci permet par exemple de déclencher des actions sur le téléphone en l’approchant d’un tag NFC.

Nous avons d’ailleurs réalisé plusieurs POC à ce sujet avec un grand groupe pharmaceutique français qui étudie actuellement la mise en place de tags NFC dans ses emballages.

Avec KitKat, il sera désormais possible d’émuler un tag NFC avec son téléphone. Cette nouvelle capacité va permettre de dématérialiser un grand nombre de cartes que nous possédons tous : carte de fidélité, carte de transport, et pourquoi pas à terme carte de paiement… Il suffira alors de rapprocher son téléphone NFC d’un lecteur, au lieu de fouiller dans son portefeuille.

Quand on voit le succès rencontré par Passbook qui permet de regrouper des cartes, des tickets, des bons de réduction avec une technologie de code barres ou qrcode, on peut imaginer ce que sera demain l’engouement du « sans-contact ».

Low-power Sensors

Android KitKat introduit un nouveau mode de gestion des capteurs du téléphone (accéléromètre, détecteur de positions, de pression, température etc..) : les événements peuvent désormais être traités par lots, on parle de « sensor batching ». En fonction des besoins, les applications peuvent être notifiées à un intervalle choisi avec un ensemble de données provenant des capteurs. Jusqu’à présent, chaque événement devait être traité par les applications d’une manière unitaire.

Cerise sur le gâteau, cette optimisation est faite au niveau hardware. Concrètement cela veut dire que les applications pourront continuer à « tracker » les événements des différents capteurs même lorsque le téléphone est éteint ou en veille, ce qui a pour effet de réduire drastiquement la consommation de batterie. (ex : une application de randonnée qui enregistre le trajet n’a plus besoin d’être active pendant la randonnée, il suffira de traiter à posteriori les données de position à la fin du parcours.)

Cette fonctionnalité, combinée à de nouvelles puces permettant de détecter les pas, vient se placer en concurrence directe des dispositifs embarqués (ex: les podomètres dans les chaussures.)

Évolution de la WebView

La WebView bénéficie enfin du même moteur que Chrome Android : Chromium ! Une bonne nouvelle qui devrait sans conteste améliorer les performances des applications dites « hybrides » qui embarquent une WebView pour gérer la partie vue.

Ce changement amène un meilleur support des standard HTML5, CSS3 et Javascript avec notamment le support attendu des websockets et des web workers.

Enfin, une nouveauté et non des moindres, est que l’on peut debugger une WebView directement dans Chrome sur le poste du développeur via les Chrome Developer Tools.

Un “vrai” plein écran : Immersive mode

Depuis KitKat les applications peuvent profiter du moindre pixel disponible avec un vrai mode plein écran. Il est désormais possible de cacher entièrement et de façon permanente la « status bar » et la « navigation bar ». Précédemment, cacher la navigation bar n’était possible que jusqu’à ce que l’utilisateur touche l’écran. (utilisé notamment dans les players video).

Dans ce nouveau mode, les applications peuvent capturer les événements de « touch » n’importe où sur l’écran, y compris sur les emplacements habituels des barres. Pour faire réapparaître les barres (qui sont en partie transparentes dans ce mode) par dessus le contenu, un nouveau geste a été introduit :  un swipe de haut en bas en partant de l’extérieur du téléphone.

Préparer l’avenir

Les ingénieurs Google prépare l’avenir en proposant une preview de ce que pourrait être la nouvelle machine virtuelle qui sera amenée à remplacer Dalvik : ART (Android Runtime)
Alors qu’aujourd’hui le bytecode des applications est transformé en instructions natives à chacune de leurs exécutions (via un compilateur Just-In-Time), avec ART il est pré-compilé une bonne fois pour toute à l’installation (on parle de compilation Ahed-Of-Time).

Au prix d’un temps d’installation plus long, et d’un poids des applications de 10 à 20% plus lourd, il est donc possible d’améliorer les performances à l’exécution tout en économisant de la batterie.

Il est d’ors et déjà possible d’activer ART dans les “Options pour les développeurs” et les retours sont dans l’ensemble assez prometteurs.

Google travaillerait en secret sur ce projet depuis plus de 2 ans, certains avancent même que les poursuites d’Oracle à propos de brevets portant sur la machine virtuelle Dalvik pourraient avoir menées à l’émergence de ce projet.

Un seul mot d’ordre : performance

Un gros travail d’optimisation a eu lieu pour réduire l’utilisation de la mémoire et permettre à des devices peu puissants (512MB de RAM) de faire tourner KitKat. De nouvelles APIs sont désormais disponibles pour détecter ce genre de device (ActivityManager.isLowRamDevice).

Les composants majeurs ont été réécris, le système est plus agressif envers les applications qui consomment le plus, les services sont lancés en petit groupe et en série si le besoin s’en fait sentir.

On peut donc espérer de la part des constructeurs de téléphone, ou à défaut de la communauté, un déploiement de KitKat sur un plus large panel de device que les versions précédentes.

Pour le développeur, cela veut dire qu’il est de plus en plus primordial de s’orienter vers une approche « responsive » des applications, non seulement au niveau de l’affichage (tablette vs téléphone) mais surtout aussi au niveau de leurs fonctionnements et de leurs possibilités.
Ceci afin de tendre vers le but suprême : proposer des applications responsives, fluides et adaptées quelque soit le matériel sur lequel elle sont déployées.

DocDoku fait peau neuve

DocDoku s’est refait une petite beauté avec un nouveau logo et un nouveau site web en responsive design.

Atelier Web Marketing – Les nouvelles stratégies Web Marketing

J’ai participé à la conférence Email Marketing & Référencement, organisée conjointement par Dolist, spécialiste de l’e-mail marketing, et CyberCité, expert du référencement. Cet événement s’est déroulé le 9 juillet à la Cantine. (Toulouse)

visuel-dolist

J’ai pu voir l’importance de l’e-mail marketing pour les techniques d’acquisition, de conversion et de fidélisation des contacts dans une organisation.

Voici un aperçu des pratiques à succès de l’e-mail marketing et des tendances pour 2013 selon Jean Paul Lieux (Directeur associé de Dolist) :

  • Profitez de votre audience en ligne (Site web, blogs, réseaux sociaux) pour transformer un maximum de visiteurs en contacts adressables
  • Préoccupez-vous avant tout de la qualité de votre base de données, en intégrant des dispositifs de vérification : double saisie, captcha…
  • Optimisez la consultation de vos messages sur tous les supports mobiles, car aujourd’hui 47% des internautes lisent leurs mails depuis un terminal mobile.
  • Surveillez les désabonnements et les plaintes de vos abonnés pour éviter que vos messages arrivent en boîte indésirable ou secondaire.

L’e-mail marketing a fortement évolué : nous sommes désormais au début d’une communication ultra ciblée, personnalisée et de plus en plus automatisée.

Web 3D 2013

Cette année nous étions invités par Christophe Mouton, expert PLM chez EDF, à participer à la fameuse conférence web 3D. Après Las Vegas en 2012, l’édition 2013 se déroulait en Espagne à San Sebastian au Miramar Palace. Le cadre était donc vraiment très agréable, seul le temps, comme en témoigne la photo ci-dessous, n’était pas au beau fixe.

image

En plus de la rédaction d’un poster, j’ai pu présenter pendant près de 40mn un cas d’usage de notre solution DocDokuPLM. « Web 3D » oblige j’ai concentré mon discours sur la partie visualisation 3D de la maquette numérique. J’ai notamment expliqué les nombreuses optimisations que nous avons faites pour s’affranchir des limites intrinsèques des moteurs JavaScript des navigateurs.

Par exemple Chrome ne pouvant allouer plus de 1,4 Go de mémoire, nous devons enlever de la scène les objets non visibles dans le champ de la caméra. Nous avons également implémenté un système de type LOD (Level Of Detail) où chaque pièce d’un assemblage existe en différentes qualités de représentation, plus l’objet étant proche de la caméra meilleur sera son affichage.

Par ailleurs, j’ai moi même assisté à quelques belles sessions, notamment une sur le format XML3D concurrent du X3DOM qui par son héritage de X3D et VRML traine les lacunes inévitables de toutes technologies legacy. XML3D, conçu lui à partir de la feuille blanche, entend devenir le standard pour la 3D déclarative du web. Enfin, j’ai bien apprécié la démonstration de réalité augmentée s’appuyant sur WebRTC, domaine très prometteur que nous explorons déjà !

Solutions Linux 2013

Le salon Solutions Linux 2013 vient tout juste de s’achever, j’en profite donc pour faire un retour à chaud de cet évènement majeur de la communauté open source française.
Cette année, la superficie allouée au salon a quelque peu réduit et la manifestation ne s’étale plus que sur 2 jours au lieu des 3 jadis. Toutefois, c’est finalement un mal pour un bien car du coup les rencontres de qualité s’enchainent à un rythme soutenu.
PHP - Drupal

Si la dénomination est restée la même depuis les toutes premières éditions, le lien avec linux n’est pas exclusif. Aujourd’hui les exposants présentent majoritairement, comme nous, des solutions métier. Cela va de la business intelligence à l’ERP en passant par les CMS et bien sûr le PLM !

A côté des stands des entreprises, comme d’habitude, se trouvait le village associatif. Ce genre de salon est l’occasion d’entrer en contact avec de futurs prospects, de rencontrer des clients (j’ai longuement conversé avec un responsable de l’afpa), des partenaires et confrères ; j’ai notamment discuté avec Gaël d’Obeo et l’équipe de BlueMind.

Côté échange, j’ai eu le plaisir de participer à la série de présentations d’OW2 et à une interview Plateau TV orchestrée par Philippe Scoffoni. En parlant d’OW2 d’ailleurs, la traditionnelle Wine & Cheese Party est toujours aussi réussie, félicitation à Catherine pour son organisation.

Enfin, comment ne pas finir ma rétrospective avec un moment assez cocasse où un concurrent que j’avais démasqué (éditeur propriétaire faisant plus de cent millions d’euros de chiffre d’affaire) est venu s’enquérir de notre logiciel, indubitablement impressionné par les performances et la richesse fonctionnelle. L’open source est un concept étrange pour la plupart des éditeurs PLM qui sont extrêmement fermés et verrouillent au maximum, au détriment de l’intérêt de leurs clients, les données de leurs logiciels.

Nous, au contraire, nous travaillons dans la transparence, notre seule obsession est la qualité de nos logiciels sans aucune stratégie de lock-in. Tout le monde a accès au code source, y compris ce concurrent, et peut l’utiliser librement en respectant le copyright et la licence AGPL.

 

Formation développement d’applications Android professionnelles – session du 24 au 27 juin 2013 – PROMO

Bénéficiez d’une remise exceptionnelle de – 20% pour l’inscription d’au  moins deux personnes à notre formation en inter-entreprises intitulée « Développement d’applications Android professionnelles » session du 24 au 27 juin 2013.

Programme de la formation :

http://www.docdoku.com/formation/developper-des-applications-android-professionnelles/

 

 

Salon Solutions Linux, Paris les 28 et 29 mai 2013 : découvrez notre solution innovante DocDokuPLM

Linux_03

Nous serons présents au salon Solution Linux & Open Source les 28 et 29 mai 2013 au CNIT – Paris La Défense.

Venez donc nombreux sur notre stand (D12) découvrir notre solution innovante DocDokuPLM qui vous permet, entre autres, depuis un simple navigateur (sans auncun plugin ou installation) et depuis n’importe quelle plateforme (PC, Mac, Tablette, Smartphone) de :

– Visualiser vos modèles 3D.

– Collaborer par chat et visio-conférence.

Cliquez ici pour obtenir votre badge d’accès gratuit.

Charte pour l’emploi

Charte libre emploi job and floss

Nous sommes signataires de la charte pour l’emploi. Cette initiative vise à promouvoir l’apprentissage et favoriser la diffusion des connaissances du logiciel libre.

C’est une belle démarche, qui plus est contribue à fortifier le dynamisme de la France en la matière. N’hésitez donc pas à rejoindre le mouvement.

 

Les micro services peuvent-ils remplacer les serveurs d’applications ?

Un concept en fin de vie ?

Durant ces dix dernières années, particulièrement dans l’écosystème Java, le serveur d’applications fut le roi. Tout bout de code « server side » finissait fatalement déployé sur cet élément hautement important du système d’information. Comme nous l’enseignons nous-mêmes en formation son rôle est de fournir les services techniques aux applications (connexions aux bases de données, gestion du cycle de vie des composants, module d’authentification, supervision des transactions…) déchargeant ainsi les développeurs de l’implémentation de cette tuyauterie ; tâche critique et souvent difficile.

Cette séparation des responsabilités est au cœur de la philosophie Java EE, la spécification de la plateforme distingue en permanence les activités incombant aux développeurs d’applications de celles prises en charge par les administrateurs gérant l’infrastructure ou encore justement les fonctionnalités devant être assurées par le serveur d’applications.

Si on peut comprendre cette logique, pensée pour les environnements complexes des grandes organisations où le SI est géré de manière centralisée, cette approche souffre néanmoins d’une rigidité et d’une lourdeur certaine, chaque application nécessite avant d’être déployée que l’on paramètre son environnement technique sur son conteneur.

Les micro services

Les micro services s’inscrivent dans une démarche opposée : la notion de serveur d’applications (conteneur) gouvernant l’exécution des composants d’application déployés en son sein n’existe plus. Chaque micro service est une application « standalone » tournant dans son propre processus. Ces applications communiquent entre elles au travers de web services de type REST sans l’intermédiation d’un middleware devenu encombrant, à la manière des commandes Unix qui s’agrègent avec un simple pipe. Leur périmètre est généralement réduit, elles font une chose et s’attachent à bien le faire, ainsi on pourra les réécrire si nécessaire complètement en limitant les coûts.

REST a montré qu’il était néfaste de chercher à s’abstraire coûte que coûte du protocole HTTP, les micro services nous enseignent qu’il n’est sans doute pas optimal de chercher à effacer le système d’exploitation comme les serveurs d’applications Java se sont évertués à le faire, en voulant recréer un OS dans l’OS.

Les frameworks

Qui dit nouveaux paradigmes dit nouveaux frameworks. Toujours dans l’univers Java, il y a bien sûr le presque déjà vieux Playframework qui adopte une stratégie résolument de rupture en proposant une pile logicielle avant-gardiste et encourageant fortement l’usage du langage Scala, même si Java est également supporté. Un autre framework, bien que moins audacieux, mérite tout autant que l’on s’y intéresse, il s’agit de Dropwizard. Ce framework possède l’avantage de capitaliser sur des technologies matures, bien connues des développeurs Java EE comme Jersey, Jackson, Jetty ou encore Hibernate validator. La courbe d’apprentissage sera donc douce.

Allez bonne année et RDV en 2013 pour mettre tout ceci en pratique !

Retour sur le salon SIANE 2012 avec DocDokuPLM

Exposant pour la première année sur le salon SIANE (Salon des Partenaires de l’Industrie du Grand-Sud) qui avait lieu du 23 au 25 octobre 2012 au Parc des Expositions de Toulouse, je vous propose ici notre REX sur ce salon.

Stand SIANE-DocDokuPLM

Notre première participation était pour nous l’occasion de continuer de promouvoir au sein du tissu industriel régional, national et international notre solution innovante DocDokuPLM et donc également de capter sur le terrain les besoins des industriels en matière de PLM.

Nous avons ainsi rencontré un grand nombre d’industriels et de partenaires sur ce salon, ce qui nous a réellement permis de confronter les besoins concrets des entreprises avec notre solution innovante de PLM. Il est en effet toujours indispensable de garder à l’esprit que la technologie n’a de réelle valeur que si elle est au service des usages.

En résumé donc, je retiendrais que les industriels sont très captifs au fort ROI que propose notre solution Open Source.

En effet, nous avons noté que trois éléments technico-économiques ont retenu l’attention de tous nos visiteurs lors de ce salon :

– la possibilité de visualiseur tous types de modèles  3D  (Catia, Inventor, AutoCAD, NX…) sur tous types de terminaux (PC/Mac/Tablettes/Smartphones) directement dans le navigateur internet sans aucune installation ou plugin,
– notre modèle de coût non proportionnel au nombre de postes déployés puisque aucun déploiement nécessaire (donc pas de coût de licence, modèle Open Source), ceci permettant de ne pas limiter les usagers et les usages pour encore plus de ROI,
– la facilité d’intégration de notre solution moderne et résolument orientée web et cloud-ready avec l’existant (CAO, autre PLM, ERP, applications métiers…).

Mais nous avons surtout constaté que les avantages technico-écoonomiques de notre solution procurent une réelle valeur ajoutée métier au sein des industries puisque capables de susciter des nouveaux usages :

– pour le partage des données autour des modèles 3D dans un contexte d’entreprise encore plus étendue (entre clients, fournisseurs et partenaires) grâce au cloud,
– pour une meilleure information produit en situation de mobilité lors des phases d’assemblage et de maintenance,
– pour les managers souhaitant visualiser simplement l’avancement du produit, le montrer et communiquer atour de ce dernier,
– pour le marketing et les commerciaux pouvant enfin disposer simplement depuis n’importe où de la dernière version produit en clientèle !

Enfin, nous avons également relevé une fonctionnalité qui nous a été demandée à plusieurs reprises et qui sera donc prochainement incluse dans notre roadmap  : la possibilité d’effectuer des relevés ou mesures 3D des produits directement sur le modèle 3D, très utile pour les opérationnels mais également pour les utilisateurs devant réaliser des devis et tarifer selon les dimensions des solides.

Bilan extrêmement positif et enrichissant donc pour ce salon SIANE 2012 avec quelques contacts très intéressants à approfondir !

Pour information, le prochain salon où nous serons présent avec DocDokuPLM est un salon international plus orienté grands comptes de l’aéronautique et du spatial,du 4 au 6 décembre 2012 à Toulouse : Aeromart 2012.

Android – Apprenez à développer efficacement pour le leader des OS mobiles (3ème édition)

Voici la troisième édition du livre intitulé Android – Apprenez à développer efficacement pour le leader des OS mobiles, et écrit par notre Directeur technique Florent Garin, aux éditions Dunod.

9782100585106-G

 

Cet ouvrage s’adresse à tous ceux qui désirent se lancer ou se perfectionner dans le développement d’applications sous Android.

Il a pour but d’être le guide concret et indispensable pour développer une application, depuis le téléchargement du SDK (Software Development Kit) jusqu’au déploiement de l’application soit en entreprises, soit sur l’Android Market.

Il fournit l’essentiel de ce qu’il faut connaître de l’architecture logicielle d’une application Android avant de passer à la pratique du développement. Cette édition repose sur la version 4.1 d’Android.

La construction d’une interface graphique adaptée aux terminaux tactiles à taille réduite est expliquée en détail. Les quatre composants Activity, Service, BroadcastReceiver et ContentProvider qui sont les piliers d’Android sont décrits et mis en oeuvre avec des exemples. Un chapitre est consacré à la persistance des données et un autre aux communications réseau.Les derniers chapitres portent sur les écrans tactiles, les GPS, APN, NFC (Near Field Communication) et autres accéléromètres «embarqués» dans les smartphones.

Cette troisième édition s’enrichit de compléments et de mises à jour sur le développement d’applications pour les tablettes tactiles, sur l’usage du pattern MVC, et sur les problèmes posés par la disparité des OS mobiles.

Chaque chapitre traite d’un aspect spécifique d’Android et est accompagné d’exemples de code concrets qui sont téléchargeables gratuitement sur www.dunod.com.