22 juin 2015

MSBuild depuis une usine logicielle (Visual Studio 2013)

msbuildPierre angulaire du développement agile, l’usine logicielle est devenue l’un des outils incontournables sur (presque) tous mes projets. Et Jenkins est ma favorite.

Pour un client, je viens de migrer Jenkins d’une machine à une autre, en passant de Visual Studio 2010 à Visual Studio 2013. Mais j’obtenais des erreurs du style:

GenerateTargetFrameworkMonikerAttribute: La cible est ignorée "GenerateTargetFrameworkMonikerAttribute", car tous les fichiers de sortie sont à jour par rapport aux fichiers d'entrée.

Il se trouve qu’en fait MSBuild a changé de place. L’ancien chemin fonctionne encore (pour une application WPF par exemple), mais pas toujours. La solution? Utiliser ces chemins

C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe (32 bits)
C:\Program Files (x86)\MSBuild\12.0\Bin\amd64\msbuild.exe (64 bits)

au lieu de ceux-ci:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe

19 février 2015

Silverlight sur Linux, iOS, Android, Windows Phone, alias XAML cross-platform. Enfin!

Silverlight n’était pas cross-platform, mais son modèle de développement en XAML est un vrai régal par rapport à HTML/CSS. Surtout si on ajoute Expression Blend. Difficile de quitter le XAML une fois qu’on y a gouté.

Seulement voilà, pour faire du XAML il fallait tourner sur une plateforme Microsoft (ou à la rigueur Mac): WPF, Silverlight, Windows Store (Windows 10 et 8). Exit le cross-platform donc.

C’est là qu’arrive Fayde. Cet incroyable projet permet de réaliser votre interface en XAML et votre code en JavaScript (en TypeScript pour être précis).

Oui, vous avez accès au Binding, aux Templates, aux VisualStates, au MVVM. En JavaScript. Cross-platform (je l’ai déjà dit?). Et pour en faire une application de bureau au lieu de tourner dans le navigateur, il suffit d’utiliser NW.js.

Voici par exemple leur application de démo, avec le XAML tel qu’il a été récupéré par mon navigateur:

fayde

Si le tout est très tentant, reste que le coût en termes de performances peut être élevé. Fayde est donc une bonne option pour le portage d’applications Silverlight ou autres applications XAML. Et pour la réutilisation immédiate des compétences d’une équipe formée au XAML. Mais pour un nouveau projet dans lequel Expression Blend n’est même pas utilisé? Voire…

10 février 2015

Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet Web SPA – TechDays 2015

Par Maxime Luce

Introduction

Les projets Web étaient simples, mais dans les projets modernes on trouve énormément de JavaScript et de librairies. Tâches récurrentes:

  • Gestion des dépendances: récupération et mise à jour
  • Compilation (LESS, TypeScript, CoffeeScript), minification, tests, linting
  • Développement

Pour l’automatisation, on utilise Node.JS, avec son NPM pour la gestion des packages. On ajoute en plus Bower, Grunt (concurrent: Gulp), et Yeoman.

Bower

“A package manager for the Web”. Créé par Twitter. C’est l’équivalent de NPM pour les librairies Web. Utilisé pour installer et mettre à jour les librairies, et assurer l’intégrité des versions.

Il y a un registre de librairies JS/CSS, les versions sont enregistrées dans un fichier bower.json. L’arbre des dépendances est à plat, du coup Bower demande notre avis quand plusieurs bibliothèques ont besoin d’une version différente de la même bibliothèque.

Grunt

“The JavaScript task runner”. Gestionnaire de tâches Node.JS: il automatise les tâches récurrentes. Il y a énormément de tâches disponibles dans NPM, et on peut créer les siennes en JS.

Les tâches sont configurées dans un fichier Grunfile.js.

Yeoman

Gestionnaire de template de projets: pour la création de projets et d’éléments. Comme les modèles Yeoman mettent en oeuvre les bonnes pratiques, il nous force à utiliser ces bonnes pratiques.

Comme pour Grunt, les générateurs sont dans NPM. Il utilise Bower pour la gestion des dépendances et Grunt pour les tâches de compilation.

Docker – TechDays 2015

Session animée par JP Guigoux et G. Collic

.NET / Linux / Docker / Cluster CoreOS / Azure

Dans des machines virtuelles les applications sont isolées verticalement. Dans un conteneur c’est le cas mais on peut partager du code:

On a un empilement de couches qui font directement des appels au noyau, malgré l’isolation. Autrement dit, on gère l’étanchéité au niveau que l’on veut.

WP_20150210_015_processed(2)

Les surcouches sont basées sur un noyau Linux. Dans Azure on peut avoir une machine Linux:

WP_20150210_016_processed(1)

En fait, demain on aura directement des conteneurs Windows.

Dans un dépôt (public ou privé) Docker, on pousse une image, et les images associées sont poussées si nécessaire. On peut créer sa propre image que l’on pousse dans le dépôt afin qu’elle soit récupérable par l’opérationnel.

ASP.NET vNext

Conseil: pour tester VS2015: démarrer une machine virtuelle Azure avec VS. La démonstration crée un service avec WebAPI: Les dépendances sont dans project.json. On ajoute une dépendance sur MVC. On ajoute un Controller.

Dans project.json, ajout de deux commandes: “web” (serveur Web) et “kestrel” (serveur light qui expose CoreCLR et fonctionne sous Linux). On va ensuite dans les propriétés du projet et on sélectionne Kestrel au lieu de IIS Express.

L’astuce pur avoir un environnement Linux comme en prod est d’utiliser un répertoire partagé:

WP_20150210_017_processed

Bluetooth Low Energy dans les applications Windows

Par Stéphane Sibué.

Les objets connectés

Enormément d’objets sont connectés depuis longtemps: DAB, stations météo, … Mais on en parle beaucoup plus depuis qu’il sont devenus plus “intimes” grâce à la miniaturisation.

Il faut des: humains, objets, écrans pour les intéractions, de la connectivité et le cloud pour le stockage et l’intelligence.

Le Bluetooth Low Energy

Technique inventée par Nokia en tant que standard ouvert, basé sur le Bluetooth “classique”. C’est le Bluetooth 4. Débit faible: 1Mb/s mais consomme 10 fois moins que le Bluetooth classique, et la latence de connexion et de transfert ont été réduites. Le scénario classique est: on se connecte, on échange, on se déconnecte.

Le Bluetooth classique possède des profils normalisés mais qui varient selon l’implémentation, résultat l’interopérabilité n’était pas parfaite. Alors qu’avec le BLE c’est bien mieux normalisé. Les services sont listés ici: https://developer.bluetooth.org.

Chaque service possède des caractéristiques (une variable par caractéristique): des UUID (qui sont des Guid). Les caractéristiques possèdent des descripteurs.

WP_20150210_013_processed

Dialoguer en Bluetooth LE avec un device

Pour les démonstrations, c’est un Bluetooth Sensor Tag qui est utilisé, et il va relever température, humidité et pression. Une application universelle est réalisée pour fonctionner sur Windows Phone 8.1 et Windows 8.1.

Il faut déclarer dans les capabilities le BLE: “bluetooth.genericAttributeProfile”. Contrairement à Android et iOS il faut s’appairer à l’appareil avant de dialoguer avec lui.

On indique quel service on souhaite récupérer, on obtient la liste des devices qui le portent, et on a un GattDeviceService qui est le point d’entrée. On récupère alors la caractéristiques par son UUID, qui nous retourne un GattCharacteristic sur lequel on peut lire ou écrire.

09 février 2015

Demain, les TechDays 2015 a Paris

C’est avec le plus grand plaisir que j’irai aux TechDays demain. L’occasion de faire sur ce blog un compte-rendu de quelques sessions, comme à mon habitude, mais aussi de revoir et échanger avec tout le beau monde qui y va. Car chaque fois j’y retrouve clients, amis experts, et employés de Microsoft que j’ai pu côtoyer par le passé.

Signe des temps, les TechDays 2015 seront sur le thème de l’ambient intelligence. Ca tombe bien, je travaille notamment sur ce sujet depuis plusieurs années.

Alors à demain, en personne ou sur ce blog.

22 octobre 2013

Bibliothèques JavaScript pour...

microjsLe problème majeur de HTML5, c'est la prise en charge de tous les navigateurs quand on écrit du code un peu alambiqué. Et l'absence de petits outils cruciaux en JavaScript. On peut bien sûr prendre un énorme framework, mais sur des petits projets j'aime pouvoir combiner de petites bibliothèques JavaScript.

Eh bien microjs est une mine d'or pour cela: un micro site pour des micro bibliothèques.

Par exemple, des bibliothèques pour gérer les événements custom quel que soit le navigateur.