Posts taggés Open Source

Pourquoi intégrer TypeScript à ses équipes web?

0

Aujourd’hui, le JavaScript est partout, aussi bien sur les sites Web (JQuery, AngularJS), sur les serveurs Web (NodeJS) que dans les applications mobiles (WinJS ou Apache Cordova). Microsoft a longtemps cherché à fournir aux développeurs .NET des alternatives, comme les controles sous ASP.NET WebForms pour leurs faciliter la vie. Mais cet âge sombre est révolu et le géant de Redmond se fait pardonner en nous offrant un langage qui permet de faire le pont entre C# et JavaScript, j’ai nommé TypeScript. 

Avoir des développeurs .NET séniors c’est super, surtout quand on a besoin de faire des applications .NET : ils sont compétents et efficaces. Mais parce qu’il est probable qu’ils aient débuté avec ASP.NET WebForms, ou avec technologies de clients lourds comme Winforms ou WPF, ils ont naturellement tendance à favoriser les contrôles serveurs sur le JavaScript client.

Les développeurs juniors sont mieux armés car JavaScript est définitivement à la mode, mais le manque d’expérience sur un langage objet par prototype ne pardonne pas. Il n’est pas rare de voir de très grandes disparités de qualité de production entre deux personnes avec à priori la même expérience.

Bref le JavaScript, sauf à partir du moment où il travaille essentiellement avec ASP.NET MVC, proche du web moderne et du JavaScript, n’est pas vraiment critique pour un développeur exclusivement .NET. Et c’est un problème dans un monde où les applications sont de plus en plus hybrides. Le développeur .NET possède les outils cognitifs et l’expérience pour exploiter au maximum le paradigme objet de classe comme on le trouve en C#, en Visual Basic ou en Java. En revanche maîtriser le paradigme objet de prototype qu’on trouve en JavaScript est un effort. C’est une sortie de la zone de confort et la montée en compétence peut parfois être très lente. C’est précisément pour palier à ce type de situation, avec des compétences en programmation orientée objet mais un déficit en JavaScript, que les équipes de Microsoft ont conçu TypeScript.

Le langage TypeScript est utilisé en interne par Microsoft pour la grande partie des travaux JavaScript récent, tel Babylon.js leur moteur 3D pour le Web par exemple. Il possède 2 grandes forces que je vais expliquer à mesure que je vais présenter son fonctionnement : la barrière d’apprentissage quasi-nulle et le fait que l’intégrer représente une prise de risque réellement nulle pour vos projets aussi bien à court terme qu’à long terme.

Comparons les spécifications du C#, du JavaScript et du TypeScript :

C# JS TS
Paradigme objet Classe Prototype Classe
Typage  Statique et dynamique Dynamique Statique et dynamique
Gestion des libraires Simple Simple Simple
Debug Visual Studio Navigateur Visual Studio

On observe donc que le TypeScript a effectivement été développé depuis sa conception initiale pour pouvoir s’intégrer aux travaux en NET. On remarque d’ailleurs que le père du TypeScript est Anders Hejlsberg, également architecte du C#, du Delphi et du Turbo Pascal.

Tout d’abord, il faut savoir que TypeScript est un langage qui va être compilé en JavaScript, que le compilateur de TypeScript a été conçu en TypeScript et que, par conséquence, il est possible de le compiler via Visual Studio 2013.2+ et 2015 (logique pour une technologie Microsoft) mais aussi via Node.JS (logique pour un programme en JavaScript). Autre conséquence directe, puisque le compilateur est un outil autonome, on peut développer en TypeScript avec une myriade d’IDE : Visual Studio 2013.2+ donc, WebStorm, Eclipse, Sublime Text, VI, Emacs et Atom (au moment de la rédaction de ce billet), pour seulement ensuite le compiler en JavaScript.

Revenons sur le langage en lui-même. TypeScript est open source, il est d’ailleurs disponible sur GitHub, et vise à intégrer les spécifications de ECMAScript 6, l’avenir de JavaScript.

En pratique, pourquoi est-ce que le TypeScript est un outil naturellement accessible ? Parce que c’est du JavaScript. Du JavaScript où nous allons pouvoir optionnellement décrire le type des variables de manière statique.

La présence de typage statique offre la possibilité à Intellisense de signaler quand le développeur commet une erreur de type sans que celui-ci ne soit contraint d’engager une démarche fastidieuse pour trouver l’origine de ces erreurs,  ce qui va se traduire en gain de temps substantiel.

 

typescript1

 

Ainsi si vous compilez du code JavaScript en JavaScript via le compilateur TypeScript, il n’y aura aucune différence entre le code d’entrée et le code de sortie. Autrement dit, tout code JavaScript est du code TypeScript.

Le compilateur va uniquement transformer un certain nombre de structures et de syntaxes en JavaScript. Cela tombe bien, car ces structures sont celles, à quelques détails près, du C#.

 

typescript2

typescript3

 

Et cela même dans les fonctionnalités complexes comme les lambdas, les génériques et les inférences de type. Les classes seront transformées en fonctions de prototypage. Il existe même la possibilité d’utiliser des spécificateurs d’accès mais uniquement dans du code TypeScript à typage statique (public, protected et private, en leurs absences la valeur par défaut est public et non protected comme en C#, dans un souci d’harmonie avec le JavaScript). Les interfaces peuvent être implémentées de manière implicite, ce qui facilite l’utilisation à certaines librairies.

L’héritage est également présent, avec son lot de notions à garder en tête par rapport au JavaScript.

 

typescript4

typescript5

typescript6

typescript7

 

Grâce à IntelliSense et au compilateur, nous instaurons un certain cadre de développement, afin de toujours garder une cohérence entre les structures que nous définissons et ce que l’on peut écrire, même quand le JavaScript n’est pas aussi strict. Une notion important en TypeScript est le comportement du mot-clé « this » : en TypeScript, « this » fait toujours référence à l’objet qui appelle la méthode. Le type de « this » dépends donc de sa position.

Donc si on récapitule, les développeurs vont écrire du simili-C# en JavaScript. C’est un coup à prendre mais un coût en temps humain bien inférieur à l’adoption de CoffeeScript, Dart ou d’un autre langage qui propose d’accélérer le travail des développeurs en JavaScript. Non seulement l’adoption est rapide mais elle tellement rapide que quelques heures suffisent pour permettre à un développeur d’augmenter son efficacité.

Si on revient sur le processus d’utilisation du TypeScript, on a vu que l’on  génére du code JavaScript. Donc si pour une raison quelconque, vous ne souhaitez plus utiliser TypeScript, il vous suffit de générer une dernière fois vos fichiers .js et de supprimer vos fichiers .ts. Voilà, votre migration est faîtes. Vous trouverez des exemples de codes ainsi que les spécifications détaillées sur le site http://www.typescriptlang.org/.

Il existe des outils très pratiques, comme TypeLite par exemple, qui va permettre de transformer des interfaces en C# .NET vers du TypeScript.

Finalement, TypeScript est un langage à mi-chemin entre JavaScript et C#. Il convient donc d’avoir à l’esprit les particularités du JavaScript et du C# lors de son utilisation. Malgré tout, l’intégration dans Visual Studio et la disponibilité d’outils en ligne gratuit offre un gain d’efficacité qui permettra à une équipe peu performante dans ses clients légers de produire des applications web évoluées ainsi que d’amener des perspectives différentes comme la découverte de Node.JS.

 

Akeneo : PIM open source

0

Nous allons vous présenter aujourd’hui une solution de PIM open-source pleine d’avenir, Akeneo. L’outil a déjà été présenté à travers l’histoire de Julia. Pour resituer le contexte, Julia travaille au sein du service marketing d’un détaillant international d’articles de mode et se charge de la mise en place du site e-commerce du groupe. Utilisant un ERP (Enterprise Resource Planning),  le groupe prévoit de l’utiliser directement afin d’alimenter la base produit du nouveau site. C’est à partir de cet instant que les ennuis commencent :

  • Il ne contient aucun média (photos, vidéos) attaché aux produits
  • Les descriptions produit sont trop pauvres ou non adaptées à une diffusion publique ou marketing
  • Le nom du produit est souvent un simple SKU (identifiant produit unique)

Julia commence alors à enrichir les fiches produit grâce au tableur Excel afin de constituer une base produit pouvant alimenter convenablement le site de vente en ligne. Il lui faut alors gérer de nombreux documents Excel, chaque type de produits ayant ses attributs propres. Cette tâche devient rapidement hasardeuse au fur et à mesure que le nombre de fichiers augmente et qu’il faut les maintenir à jour. Vient ensuite le coup de grâce lorsqu’il faut bientôt gérer le même catalogue produit mais avec des informations potentiellement différentes pour chaque canaux (papier/mobile/etc..) et/ou langues. L’outil, ici Excel, n’est clairement pas adapté. C’est donc à ce moment là que le PIM rentre en jeu.

Qu’est-ce qu’un PIM ?

PIM signifie « Product Info Management ».

schema-pim-2

Le PIM est l’outil destiné à centraliser l’ensemble des informations concernant les produits. Il va permettre, via des connecteurs, de récupérer l’information disponible dans diverses sources existantes (comme un ERP) et de la rendre accessible grâce à une interface dédiée  à des utilisateurs chargés de l’enrichir (standardisation, ajout d’informations non disponibles sur les sources externes, traduction). Enfin, il permettra de classer cette information, d’établir des liens entre plusieurs produits puis enfin de la diffuser sous une forme adaptée sur d’autres canaux, comme un site d’e-commerce ou encore un catalogue papier.

 


 

Un socle technique solide

Techniquement la solution d’Akeneo se base sur la plateforme OroPlatform.
Cette plateforme open source qui repose sur le framework Symfony2 permet d’accélérer certains développements en proposant un ensemble de fonctionnalités natives comme une interface d’administration, un système d’ACL (Access Control List) avancé ou encore un système de workflow. Côté stockage des données, la solution s’appuie sur l’ORM Doctrine2 lui permettant ainsi de s’adapter à de nombreux SGBD (Système de Gestion de Base de Données). La partie cliente est quant à elle, confiée à Backbone.js et au classique couple jQuery et jQuery UI. Des choix techniques open-source qui apparaissent sûrs au vu de leur notoriété et qui profitent d’une large communauté ainsi que d’un savoir-faire.

Fonctionnalités natives

L’interface d’Akeneo est multilingue. L’outil est déjà traduit en français, allemand, hollandais et japonais dans sa version 1.0. Seulement quelques minutes sont nécessaires pour se l’’approprier, la navigation étant simple et claire.

La solution propose nativement de nombreuses fonctionnalités, dont voici un aperçu :

  • Gestion de familles de produits : chaque famille de produit possède des attributs spécifiques configurables via l’interface
  • Multi-catalogue : possibilité de configurer plusieurs catalogues possédant chacun une arborescence de catégories propre, un produit pouvant être rattaché ensuite à un ou plusieurs catalogues.
  • Multi canal : plusieurs canaux de diffusion (un site d’e-commerce et un catalogue papier par exemple) peuvent être configurés . Chaque canal possède alors ses langues et devises gérées et les attributs d’une fiche produit peuvent être configurés afin de posséder des valeurs différentes en fonction du canal.
  • Suivi du remplissage des informations produit : chaque produit propose des indicateurs de complétion permettant de visualiser rapidement si toutes les informations ont été saisies pour une langue ou un vecteur de diffusion donné
  • Multilinguisme : chaque attribut d’une fiche produit peut être configuré pour être localisable (c’est-à-dire posséder une valeur différente en fonction du pays cible)
  • Multidevise : possibilité d’activer la gestion de certaines devises via l’interface, le prix des produits et d’autres attributs financiers devenant alors localisables
  • Associations : possibilité de créer des relations entre produits, permettant ainsi de gérer des packs de produits, des ventes liées, etc.
  • Variantes : gestion des variantes de produits (taille, couleur, etc.)
  • Gestion des droits : création de profils de droits, des groupes et de gérer plusieurs utilisateurs. Les autorisations peuvent être assez fines permettant à un utilisateur d’accéder à certaines fonctionnalités de la solution ou de gérer seulement certaines langues. Bien qu’il soit impossible pour le moment de restreindre l’accès à certains types de produits ou certaines familles d’attributs, une gestion plus fine des droits est déjà prévue sur la feuille de route.

 

Une des fonctionnalités au cœur de la solution étant l’échange d’informations (en import comme en export), un système de connecteurs a été imaginé permettant de développer facilement une passerelle vers des systèmes existants. L’éditeur propose déjà un connecteur d’import/export au format CSV ainsi qu’un connecteur vers la plateforme Magento. On peut également miser sur le fait que la communauté autour de l’outil proposera rapidement d’autres connecteurs vers les principales solutions d’e-commerce et d’ERP du marché.

Personnalisation de la solution

Bien que la solution soit déjà complète, il faudra souvent qu’elle réponde également aux besoins spécifiques de la structure dans laquelle elle est implémentée. Akeneo a donc été imaginée de manière à être extensible. En effet, grâce au framework Symfony2, la solution peut être étendue au moyen du développement de « bundles » qui pourront s’intégrer au sein de l’interface existante. Le site de la solution propose d’ailleurs déjà un cookbook détaillant la marche à suivre pour réaliser certaines opérations comme l’ajout de règles de validations personnalisées ou encore l’ajout d’un nouvel onglet au formulaire d’une fiche produit.

Conclusion

Les +

  • Qualité du socle technique
  • Eventail des fonctionnalités déjà présentes
  • Possibilités de personnalisation
  • Projet open source français
  • L’outil est multilingue
Les –

  • Communauté encore peu nombreuse

 

Akeneo semble donc une solution très prometteuse.
Pilotée par une équipe de 4 anciens stratèges et développeurs du e-commerce, la start-up nantaise éditrice a levé 350 000 € en Octobre dernier soutenue, en autre, par le fond d’investissement de Xavier Niel (Kima Ventures).

Il est à parier qu’Akeneo s’enrichira de nouvelles fonctionnalités rapidement, épaulée par la communauté qui se construit chaque jour autour d’elle. La roadmap de l’éditeur promet d’ailleurs déjà l’amélioration du moteur de droits de l’application et de la gestion des médias associés aux produits. Du côté des nouveautés, seront au programme : la possibilité d’ajouter des workflows de validation, de revenir à une version antérieure d’une fiche produit ou encore d’automatiser certaines actions comme l’association de produit ou le calcul de certains champs.

Si cette introduction vous a donné envie d’en savoir plus, testez la solution par vous-même grâce à la démo sur le site de l’éditeur : www.akeneo.com/demo