Archive

Articles taggués ‘.NET’

Développement d’applications sur Windows Phone 7

L’année dernière, pendant mon année d’alternance, j’ai travaillé sur la plateforme Windows Phone 7. Je vais essayer de partager avec vous mon expérience sur cette plateforme mobile qui reste un peu méconnue du grand public, tout en essayant d’avoir un esprit critique sur le sujet.

Dès mon arrivée en septembre 2010, j ‘ai eu la chance  de manipuler des terminaux qui n’étaient pas encore commercialisés (date officielle de sortie : le 21 octobre 2010). Voici les réactions immédiates qui me sont venues concernant le hardware. Côté design rien d’impressionnant,   les téléphones sont assez sobres mais ce qui m’a surpris ce sont les performances : une rapidité d’exécution pouvant faire pâlir certains de ses concurrents et des écrans de très bonne qualité. La gamme des téléphones est assez homogène (caractéristiques techniques moyennes : processeur 1Ghz, 512MB de RAM, capacité entre 8 et 16Go, écran 800×480pixels, APN 5mégapixels avec Flash).

Au niveau de l’OS, le premier démarrage donne vite un brin de déception : on trouve un premier bureau avec les applications épinglées (grosses icônes carrées) et un autre avec « une grosse liste horizontale de toutes les applications », autant dire qu’il ne faut pas avoir peur de slider lorsqu’on a une grosse liste d’applications… On retrouve donc une interface Metro assez basique et on se rend vite compte que, mis à part la couleur des icônes et l’épinglage d’applications, rien n’est modifiable. En ce qui concerne les applications natives, on retrouve les classiques  (« Téléphone», « Contacts », « Photos », « Musiques + Vidéos », « Internet Explorer 8 » et « Jeux » qui correspond au Xbox Live),  la suite Microsoft Office Mobile et le moteur de recherche Bing accessible à tout moment (grâce à la touche recherche). Enfin, on a le Windows Phone MarketPlace, sur lequel, j’ai pu me rendre compte tout au long de l’année, qu’on retrouve petit à petit les grands classiques des autres markets (pour n’en citer aucun).

Maintenant, que le tour de l’utilisateur lambda est fait, passons à la partie un peu plus technique.

Le développement d’application WP7 repose sur une version de Silverlight « adaptée ». En plus du framework traditionnel, on trouvera toutes les APIS spécifiques aux SmartPhones : accéléromètre,  géolocalisation, caméra, tâches : téléphoner, envoyer un message, lancer le marketplace, et d’autres encore. On trouve aussi les 2 modes de navigation propres aux applications WP7 que sont le panorama et le pivot ; dans le cadre de mon projet l’accent était mis sur l’utilisation du panorama pour garder l’authenticité de WP7 et ne pas essayer de copier la navigation par onglets des autres plateformes mobiles. Toutefois, on observe une certaine amputation au niveau des composants classiques qui composent Silverlight et celle-ci s’avère vite handicapante.

Qui dit Silverlight, dit pattern MVVM (Model View ViewModel)… Ces deux notions étaient pour moi totalement inconnues et mes premiers pas furent hésitants, mais une fois les grands principes compris, on devient très vite adepte du concept.  Pour faire simple, et sans rentrer dans les détails voici un petit schéma  qui explique le pattern:

MVVM est basé sur le principe de « Databinding » qui permet de synchroniser une propriété du ViewModel avec une propriété d’un composant graphique de la View (y compris les événements : click, changement de sélection,…).  Cette technique devient très vite appréciable : code minimal, rafraichissement  automatique  dans les 2 sens entre la View et ViewModel.

De plus, du fait de sa faible dépendance entre les interfaces graphiques et le code métier, MVVM facilite les tests de code et la séparation des taches des développeurs et des designers. J’en profite pour faire un petit point sur les outils mis à disposition. Tout d’abord, on trouve l’incontournable IDE pour les technologies Microsoft, Visual Studio auquel est associé le Windows Phone Developer Tools (SDKs + Emulateur). Pour moi, l’environnement s’est avéré être très complet : parmi les choses appréciables, on trouve un petit éditeur d’interfaces graphiques, le déploiement sur l’émulateur ou sur un device, un débuggeur pas à pas (dans les 2 cas de déploiement). Il est possible d’effectuer tout le développement dans Visual Studio, toutefois, dans le cadre d’un projet où un designer a un rôle à part entière à jouer, il peut utiliser l’outil Microsoft Expression Blend pour créer les interfaces graphiques sans se soucier du code métier qui tournera derrière. Pour ma part, je pense que Blend est un « jouet de luxe » et qu’on peut rapidement s’en passer.

Voici un petite liste des concepts que j’ai pu utiliser et qu’il est judicieux d’évoquer :

  • L’ IsolatedStorage est un espace de stockage de données propres à chaque application et qui est abstrait du reste de système de fichiers et facile d’utilisation.
  • L’application possède plusieurs points d’entrées (launched ou actived) et de sorties (closed et deactivated) dans lequel on peut faire des traitements différents selon que l’utilisateur ferme ou mette en background l’application. On trouve aussi  une méthode Application_UnhandledException qui permet d’effectuer des actions importantes (sauvegarde du contexte par exemple) avant que l’application se ferme dans le cas d’une exception non traitée (donc crash) et cela s’avère très utile.
  • Dans l’attente de la gestion du multitâches, le développeur doit gérer la sauvegarde du contexte de l’application lors de sa « mise en background » et le rétablissement de ce contexte lors de la réactivation de l’application. Ce procédé appelé le tomstoning est assez fastidieux puisqu’il faut sauvegarder unitairement toutes les données nécessaires, mais il est toutefois inévitable dès lors que l’application possède des données persistantes. Dans le cadre de mon projet, c’était un point essentiel à respecter et une grande partie des tests y était consacrée.

Avec tout cela, on peut donc réaliser des applications avec des interfaces graphiques très riches sans produire beaucoup de code car le pattern MVVM très puissant quand on a compris les bonnes pratiques. J’ai pu aussi m’appuyer sur un MSDN très complet et plutôt bien présenté.

Pour moi, le principal aspect négatif est que le framework manque parfois de composants graphiques ou de propriétés dans les composants existants. Cela a entraîné que j’ai vite eu le besoin de créer des composants « custom ». Un des autres faits est que la plateforme manque encore de contributeurs. J’ai été confronté à quelques problèmes techniques qui n’ont pas trouvé de réponse sur les forums appropriés.  Enfin, j’ai pu constater qu’on obtenait vite de mauvaises performances  si l’application est mal architecturée ou si on ne se soucie pas de décharger un maximum le thread principal.

Après une  expérience de 3 mois sur un projet WPF et un peu de recul, le MVVM que j’ai pratiqué sur WP7 n’était pas optimal (trop de code behind). Il s’avère que, à l’heure actuelle, le framework Silverlight pour WP7 n’est pas complet pour pratiquer un bon MVVM et que si l’on souhaite mettre en place une vraie architecture MVVM, il faut utiliser l’outil MVVM Light Toolkit et complexifier un peu son code.

En conclusion, et pour donner un avis tout à fait personnel, le développement d’applications sur Windows Phone 7 s’appuie sur de bonnes bases (Silverlight pour des interfaces interactives riches, MVVM pattern, environnement de développement complet et pratique),  mais laisse rapidement transparaitre une grosse lacune : le framework WP7 n’est pas assez riche par rapport à ces aînés (Silverlight et .NET). Beaucoup de personnes pourront vite être repoussé par l’étiquette Microsoft, mais pour moi, le développement d’applications sur WP7 est aussi intéressant que le développement sous Android (pour avoir pratiquer les 2). Microsoft doit toutefois, selon moi,  enrichir son framework et l’interface de son OS car elle présente un excès de sobriété.

Nouvelles versions

  • Actuellement, on trouve la version de l’OS 7.5 « Mango » : Multitâches complet, IE9, copier-coller, … et la version 7.1 du SDK Windows Phone.
  • A venir, l’OS nom de code « Tango » (date inconnue) avec certainement un nouveau SDK.

Les liens utiles

WinRT, Windows 8 et le futur du .NET

Pour ceux qui ne sont pas au courant, du 13 et 16 septembre à Anaheim, California, Microsoft a organisé la conférence BUILD 2011.

Browse all sessions from BUILD

L’objectif principal de cette conférence a été le lancement de la future version de Windows 8 et Windows 8 Server. Bien sûr, ce qui nous intéresse est la nouvelle plateforme de développement appelée WinRT (pour Windows Runtime) introduite dans cette version de Windows et qui change (encore une fois!) la façon dont on développe nos logiciels sur Windows. Mais d’abord…

Lire la suite…

Packaging et déploiement d’une application Web avec Visual Studio 2010

Industrialiser, faciliter le développement d’une application Web en utilisant un outillage adapté au projet est appréciable. De manière générale, limiter les tâches à faible à valeur ajoutée, par exemple en les outillant, est une bonne pratique reprise dans les méthodes dites « agiles », telles que Scrum, ou bien XP.

Dans le cycle de vie d’une application Web, le packaging et le déploiement sont de bons candidats à l’automatisation. C’est d’autant plus vrai si l’équipe travaille par itération, en livrant une version régulièrement (sur nos projets, c’est généralement 3 semaines).

Visual Studio 2010 va nous aider à faciliter ces déploiements. En réalité, Visual Studio fournit une interface permettant de configurer une brique disponible sur iis.net : le web deploy. L’objectif de cette brique est de packager une application Web, en fournissant des scripts d’installation, en permettant d’inclure par exemple des scripts SQL de création de table ou d’insertion de données. L’ensemble des livrables est rassemblé dans un répertoire. Pour déployer sur une machine distante, il faut copier ce répertoire sur la machine cible et lancer le script. Pré-requis sur la machine cible : web deploy doit être installé.

Détaillons le travail à réaliser dans Visual Studio.

Première étape : configurer le packaging d’un projet de type application Web.

Lancement de la configuration du packaging d'un projet de type application Web

Lancement de la configuration du packaging d'un projet de type application Web

Deuxième étape : configurer le packaging

Ecran de configuration du packaging

Configuration du packaging

Cet écran de configuration permet notamment d’indiquer :

  • la configuration du build. Généralement, on lance l’application en mode Debug lors du développement, ce qui permet d’avoir entre autres choses des traces d’exécution. En revanche, le déploiement sur l’environnement de production est réalisé en mode release. Web deploy permet de définir des paramètres différents selon la configuration souhaitée. L’exemple type, c’est la connexion à la base de données dont les paramètres sont différents en mode développement ou en mode production.
  • l’URL cible d’accès à l’application Web. Dans notre exemple, si le site par défaut IIS est un serveur localhost, l’application cible sera disponible sous  http://localhost/ProtoGraphique_deploy
  • les fichiers SQL à exécuter sur le serveur de base de données avant de lancer l’application : création du schéma de base de données, insertion des données de référence, …
  • le chemin où notre livrable sera disponible. Parmi les livrables, figurera un script à exécuter en ligne de commande sur le serveur. Ce script peut être lancé avec l’option /T qui simulera le déploiement. Pour réellement jouer le déploiement, il faut exécuter le script avec /Y. Il est également possible de jouer le déploiement directement à partir de IIS manager, avec la commande « Import »

Une fois la configuration terminée, il reste à sélectionner la configuration de build souhaitée dans l’IDE et d’exécuter la commande « Build Deployment Package », disponible dans le menu présenté ci-dessus.

Derrière cette interface, plusieurs fichiers texte sont générés. Ils peuvent d’ailleurs être édités manuellement comme le décrit cet article. Je vous rassure, ce n’est pas le cas d’usage. En revanche, le fait que tout ce mécanisme soit décrit dans des fichiers texte offre deux avantages :

  1. les fichiers peuvent être stockés dans le gestionnaire de sources et partager par toute l’équipe
  2. si vous avez un mécanisme d’intégration continue, que ce soit avec Team Foundation Server ou avec une usine logicielle libre telle que Jenkins, la génération du packaging peut être automatisée !

Internationalisation des libelles Dynamics Ax dans les applications .NET

Dans mon article précédent je montrais comment récupérer des données Dynamics AX dans les applications .NET en utilisant le Business Connector NET. Par défaut, les libellés associés à ces données sont récupérés dans la langue du système.

Dans cet article on va discuter de comment récupérer ces libellés Dynamics Ax dans une langue désirée.

D’abord voici quelques éléments concernant les libellés :

Les libellés sont utilisés en Dynamics Ax pour l’internationalisation des chaînes de caractères. Dans Dynamics Ax on peut utiliser le même libellé pour plusieurs objets distincts en utilisant un identifiant unique de libellé. Le format de cet ID de libellé est :

  1. Un symbole @ (« at »)
  2. Un identifiant de fichier en trois lettres (normalement SYS où SYP)
  3. Un numéro: Assigné et maintenu par le système

Exemple: @SYS12

Le libellé @SYS12 pourrait être traduit par « Account/Group number » en Anglais et par « Konto-/Gruppennummer » en Allemand.
Lire la suite…

Categories: .NET Tags: , , , ,

Interroger Dynamics AX depuis une application .NET

Le composant.NET Business Connector permet le développement d’applications tierces qui s’intègrent à Microsoft Dynamics AX. Il fourni un ensemble de classes « managed» .NET permettant d’accéder aux classes X++ de Microsoft Dynamics AX.

Dans l’espace de noms Microsoft.Dynamics.BusinessConnectorNet il y a 5 classes souvent utilisées :

  • Axapta – la classe la plus importante. Parmi de nombreuse fonctionnalités, la classe offre les méthodes de connexion Logon() et Logoff().
  • AxaptaObject – représente une abstraction d’une classe X++ définie dans Dynamics Ax. Pour appeler les méthodes de ces objets on utilise les méthodes « Call » de la classe Axapta.
  • AxaptaRecord – fourni les méthodes de lecture/écriture d’enregistrements DynamicsAx.
  • AxaptaContainer – fourni les méthodes de lecture/écriture dans des conteneurs Axapta.
  • AxaptaBuffer – fourni les moyens d’utiliser une zone de mémoire tampon pour le transfert de données.

Lire la suite…

Categories: .NET Tags: , , , ,

Redirection de liaison d’assembly

J’ai présenté très rapidement NuGet dernièrement, permettant d’intégrer rapidement des librairies externes. Mais NuGet n’est pas magique : il ne sait pas gérer les conflits d’assembly, et d’une certaine façon, c’est mieux ainsi ! Alors que faire … ?

Prenons un exemple que j’ai rencontré il y a quelques temps : je souhaite utiliser FluentNHibernate en version 1.0, librairie qui a été compilée avec une version de NHibernate 2.1.0.4. Je souhaite également utiliser le dernier  build de NHibernate en version 2.1.2.4 que je rajoute comme une librairie de mon projet via Visual Studio. J’obtiens alors pour une même librairie, deux versions différentes : c’est le conflit de version… :(   Je dois supprimer une des deux librairies. Étant donné que je veux utiliser la version 2.1.2.4, je supprime la référence à la version 2.1.0.4. Lorsque j’exécute mon programme j’obtiens une exception de ce type :

System.IO.FileLoadException: Could not load file or assembly ‘NHibernate, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4′ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0×80131040)

Pour résoudre ce conflit, je vais indiquer à la CLR qu’il faut utiliser la version 2.1.2.4 au lieu de la version 2.1.0.4. Cette redirection n’ayant de sens que pour mon application, je vais configurer cette redirection au niveau de mon application. Dans la section configuration de mon fichier app.config, je rajoute l’élément suivant:

Cliquer sur l'image pour agrandir

Categories: .NET Tags: ,

Formations en soirée ouvertes aux candidats au recrutement

formez-vous.objetdirect.comDepuis plusieurs années, Objet Direct a mis en place un dispositif original de formations en soirée, pour favoriser la montée en compétences de ses collaborateurs avec des stages extrêmement qualitatifs et sur mesure, conçus au sein de notre centre de formation interne.
Aujourd’hui, nous ouvrons gratuitement ces formations en soirée aux personnes désireuses de candidater auprès d’Objet Direct, avec un premier programme planifié sur Grenoble de novembre 2010 à janvier 2011, autour des technologies Microsoft .NET, Java et HTML5 :

Formation .NET: organisée sur 2 soirées les 18 et 23 novembre 2010, à l’agence de Grenoble
Formation JEE6 & Spring3: organisée sur 2 soirées les 9 et 14 décembre 2010, à l’agence de Grenoble
Formation HTML5: organisée sur 2 soirées les 13 et 18 janvier 2011, à l’agence de Grenoble

plus d’infos sur le site Objet Direct, rubrique Espace Carrières

BDD dans un environnement .NET

Voici un tutoriel mettant en œuvre du BDD (Behavior Driven Development) en .NET. La librairie utilisée, SpecFlow, est fortement inspirée de Cucumber.

L’article est ici.

Je pense rapidement préparer un atelier avec cette librairie et je ferai alors un retour sur ce même blog.

Categories: .NET, Méthodes Agiles Tags: ,

Développer en .NET pour iPhone, c’est possible !

Novell propose depuis lundi un kit permettant de développer en utilisant le Framework .NET et le langage C# pour créer des applications iPhone et iPod Touch. Jusqu’ici, les développeurs qui ciblaient ces appareils étaient limités à l’environnement de développement Xcode et au langage C ou Objective-C uniquement disponible sur Mac OS X.

Basé sur Mono, le portage libre de la plate-forme de développement .NET, MonoTouch 1.0 va permettre aux développeurs .NET de réutiliser leurs connaissances en C# et de bénéficier de la puissance du Framework .NET pour exploiter le SDK de l’iPhone.

MonoTouch dispose aussi d’un compilateur croisé capable de traduire les exécutables et librairies en applications natives capables d’être distribuées sur l’AppStore.

Enfin, l’autre idée portée par ce projet est également d’offrir la possibilité aux développeurs d’utiliser leurs connaissances pour créer des applications multiplateformes en incluant l’iPhone dans leur cible.

Seul bémol, ce kit à un prix. MonoTouch Personal Edition est disponible au prix de 399$ par développeur pour un abonnement d’un an, contre 999$ par développeur pendant un an pour la version Entreprise. Une licence Entreprise pour cinq développeurs coûtera quant à elle 3999$ par an.

Plus d’information sur le site du projet : http://monotouch.net/

Categories: .NET, Actualités Tags: , , ,

Frameworks Open Source pour .Net

On trouve de plus en plus de frameworks Open Source pour .Net.

Eric Nelson, un des évangélistes Microsoft, a dressé une liste de 23 projets « incontournables » plus ou moins connus.

Les afficionados de Java ne devraient pas être dépaysés ;-)

Categories: .NET Tags: ,