Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Le blog technique de Loïc Bar

Nouvelles technologies Web

Award

  • mvp

J'y serai...

Mes livres

jQuery dans Visual Studio?

C'est en effet ce qu'on peut lire sur le blog officiel de jQuery :

"Microsoft is looking to make jQuery part of their official development platform"

Aujourd'hui Visual Studio est déjà un outil indispensable pour utiliser l'ASP.NET AJAX Framework. En effet, celui-ci vous apporte l'intelisense, le debug, snippets etc.

Il semblerait que Microsoft prévoit de faire de même avec jQuery. Une très bonne nouvelle sachant qu'on parle de plus en plus de ce framework AJAX. J'avais moi même écris un article dessus il y a quelques temps : jQuery VS ASP.NET AJAX.

Mais la nouvelle ne s'arrête pas là. Microsoft irait plus loin en fournissant tout un tas de nouveaux controls - widgets qui permettront d'intégrer plus facilement jQuery dans votre développement .NET.

Je m'en réjouis déjà! Et vous?

Moi je suis UNIQUE mais plusieurs fois NULL!

Aujourd'hui, je suis tombé sur un cas des plus embêtant. Imaginez...

Vous avez une table, dans cette table vous voulez qu'un des champs soit gérer de façon unique mais que cette contrainte ne s'applique pas aux valeurs null.

Personnellement, je trouverai ça assez logique que cela fonctionne de cette manière par défaut (des arguments contre?). Que neni (comme on dit ici !).

Obstiné à ne pas vouloir faire cette vérification à un autre niveau que la base de données, je me suis mis à chercher une solution. Et figurez-vous que j'ai trouvé ! Je me souviens, lorsque j'étais encore à l'école (ma jeunesse), j'avais vu un truc du genre :

"Insertion à travers une vue"

Une vue, une vue... Mais SI vous connaissez ! CREATE VIEW... Non ? En fait, les vues permettent d'ajouter une couche d'abstraction à vos tables, ainsi que de facilité vos requêtes dans votre code.

On peut par exemple créer une vue qui ne renverra que les tuples d'une table où tel champs n'est pas null...

Mais, attendez ! ? C'est exactement ça qui nous faut!

Je m'explique...

Si je crée une vue sur ma table qui ne renvoie que les éléments où mon champs unique n'est pas null et que j'applique ma contrainte d'unicité sur cette vue, alors mon problème est résolu !

Exemple :

Nous avons donc une table avec un champ CIDENTI qui est unique mais dont la contrainte d'unicité ne doit pas s'appliquer aux valeurs NULL de ce champ. Nous créons donc une view du genre :

image

Et ensuite on ajoute la contrainte à la... vue ? Impossible ! ? Nous n'allons pas réellement ajouter une contrainte mais rien ne nous empêche d'ajouter un index sur notre table en spécifiant que cet index doit être unique. Autre problème (décidément) : pour pouvoir ajouter un index, il faut que notre vue soit mappée au schéma de la base de données :

image

On peut alors créer notre index :

image

Pas bien compliqué n'est-ce pas ?

Il y a plus qu'a ! En espérant que ça aide!

PS : Si vous avez des commentaires sur la technique, n'hésitez pas !
PS² : Le titre est ironique, je suis pas si nul que ça.

jQuery VS ASP.NET AJAX

Il existe une multitude de Framework AJAX. Les deux que j'ai fort en vue pour le moment c'est :

Ils sont très simple d'utilisation et assez bas niveau pour être modeler à volonté. Pour cette article, je me suis basé sur une lecture que j'ai eu il y a plusieurs jours mais a laquelle j'ai du apporter des corrections.

Le cas d'étude

image

Le but de cet article est de faire une simple comparaison entre les deux Frameworks afin de déterminer :

  • Lequel est le plus simple au niveau syntaxe
  • Lequel est le moins lourd

Pour cela, nous allons déclarer des handlers d'événements sur toutes les rows d'une GridView de 200 éléments.

Mise en place du projet

Les éléments commun de notre projet sont :

  • Le GridView (à quelques détails)
  • La source de données

Notre source de données est en fait un DataObject appelé TeamDataObject :

image

Le fichier XML est très simple :

image

Quant à notre GirdView il n'a rien de particulier :

image

Les bases du projet étant maintenant terminée, nous pouvons passer à l'implémentation JavaScript.

Implémentation avec ASP.NET AJAX Framework

La première chose à faire, est d'ajouter les handlers sur les différentes lignes de notre GridView. Cela se fait à l'aide de la méthode $addHandler.

image

Cette méthode sera appelée lors du chargement de la page :

image 

On voit ici qu'on ajoute trois traitement d'événements :

  • Sur le passage de la souris
  • Sur la perte de la souris
  • Sur le clic

Nous devons donc créer trois méthodes qui traiteront ces événements.

image

Vous voyez ici utiliser isClickedStyleSet qui est une méthode qui vérifie si le classe actuel de l'objet n'est pas "row-select" :

image

Implémentation jQuery

jQuery est un autre Framework Ajax qui n'est pas édité par Microsoft. Vous pouvez trouver toutes les informations sur jQuery.com.

Le code est beaucoup plus soft et ne se fait quasiment qu'en une fois :

image

Nous avons donc exactement la même méthode mais on peut directement ajouter les événements sur les lignes sans devoir faire un foreach. Bien entendu, pour pouvoir utiliser jQuery, nous avons du ajouter une référence à un fichier JavaScript :

image

Le résultat

jQuery :

image

ASP.NET AJAX Framework :

image

Et votre avis?

ASP.NET AJAX 4.0

Microsoft en avait déjà parlé dans un document qu'ils avaient mis à disposition des développeurs sur CodePlex. J'avais d'ailleurs entamé l'écriture d'un article de projection mais dans l'informatique ça va tellement vite qu'on a pas le temps de finir un article qu'il est déjà dépassé.

Ce nouveau Framework AJAX est actuellement en preview. Vous pouvez vous le procurer sur CodePlex.

Note : ce nouveau framework est actuellement fonctionnel avec les navigateurs suivants :

  • Internet Explorer 7.0.5730
  • Firefox 2.0.0.16 and 3.0
  • Safari 3.1.2
  • Opera 9.51

Installation

La première chose à faire est de télécharger les deux fichiers JavaScript sur CodePlex. Lorsque ceci est fait, nous allons devoir ajouter ces scripts à notre application web. Vous pouvez procéder de deux manières :

  • Ajouter la référence à la librairie JavaScript dans des balises "script".
  • Ajouter une référence dans le ScriptManager de votre page (si vous êtes en ASP.NET).

C'est la dernière solution qui a été retenue pour notre exemple :

image

Si vous exécutez la page dans votre navigateur (clic droit sur le fichier -> view in browser) vous verrez que la référence à bien été ajoutée :

<script src="Script/MicrosoftAjaxTemplates.js" type="text/javascript"></script>

Vous pouvez après cela commencer à utiliser le Framework.

Un premier exemple

Dans les readme, il n'y a pas de réel exemple d'utilisation. Juste une description de toutes les fonctionnalités (que vous retrouverez dans un prochain article). Je préfére directement vous montrer un exemple pratique qui utilise cette nouvelle librarie.

Nous allons utiliser AJAX pour créer un listing d'utilisateurs. La première chose à faire est de créer un service web qui nous permettra d'aller chercher nos utilisateurs et qui nous enverra le résultat formaté en JSON.

Pour cela, nous allons utiliser WCF (Windows Communication Foundation) :

  1. Clic droit sur votre projet
  2. Add new item
  3. Une nouvelle fenêtre apparait, sélectionnez "AJAX-enabled WCF Service" :
    image
  4. Laissez le nom par défaut (Service) et cliquez sur Add.

Visual Studio vous a normalement généré deux fichiers :

  • Service.cs dans App_Code. C'est dans ce fichier que nous définirons notre service web.
  • Service.svc qui est le fichier qui représente le web service et qui fait référence à Service.cs

Notez que Visual Studio à également généré toutes la configuration du service dans le Web.Config :

image

Vous n'avez rien besoin de toucher.

Dans Service.cs, nous allons déclarer une méthode qui ira chercher nos utilisateurs ainsi qu'une classe permettant de représenter un utilisateur.

La méthode :
image

La classe :
image

Pour pouvoir appeler ce service web avec JavaScript il faut ajouter un "ServiceReference" à votre ScriptManager :

image

Ensuite, nous devons définir un template qui sera utilisé pour afficher chaque élément. Cela ne devrait pas vous choquez car vous définissiez déjà des templates lorsque vous utilisiez le repeater par exemple.

Vous devez déclarer ce template dans une balise div en lui attribuant un identifiant (id) :

image

Vous voyez apparaître des éléments un peu étrange comme {{ Prenom }} ou encore <!--* if... *-->

Il s'agit en fait de tags qui seront compris pas le Framework ASP.NET AJAX 4.0. {{ Prenom }} est équivalent à <%# Eval("Prenom") %> que vous utilisiez dans votre reapter. Pour <!--* c'est la même chose qu'un bloc de code.

Naturellement, ce div doit être caché sur la page. C'est pour cela que nous lui avons appliqué une classe CSS (sys-template) :

image  

Maintenant que le template est défini nous pouvons traiter le chargement des données et les afficher.

Nous allons ajouter un bouton à notre page. Sur le clic du bouton, nous irons rechercher les données à l'aide de notre service web :

image

La fonction exec() utilise notre service web pour réculter les informations :

image 

Lorsqu'il a fini de charger les utilisateurs, la fonction onComplete est appelée. C'est cette fonction qui va parcourir les résultats et appelée la fonction initTemplateValues pour chaque utilisateur :

image

initTemplate va rechercher le template et l'utilise pour afficher les données en respectant le template à l'aide de la méthode createInstance :

image

  data est un simple div que nous avons déclaré dans notre page :

image

Résultat :

image

Téléchargement de la solution sur mon espace skydrive :

VPC SharePoint/WSS clonable

Lorsque nous voulons développer sur Sharepoint, nous avons l'habitude d'utiliser des VPC (machine virtuelle).

Problème :

  • Il est parfois (souvent) plus dur d'annuler une bétise que nous avons fait que de repartir du début.
  • Quid des VPC qui sont sur le réseau avec le même nom?
  • Sysprep difficile à utilisé lorsque WSS ou MOSS est déjà installé.

La solution est d'avoir une sorte de VPC de base avec Sharepoint correctement installé dessus. Du coup, lorsque nous voulons recommencer, il suffit de reprendre la VPC de base et d'entamer à nouveau la programmation ou la manipulation que nous voulions faire. Ceci ne règle cependant pas notre second problème. Cette VPC de base sera probablement utilisé par plusieurs personnes, du coup il faut changer le nom de la machine pour ne pas avoir des collisions réseau. C'est là que commencent les vrais ennuis!

Comment faire pour renommer correctement une machine ET le Sharepoint qui est dessus?

J'ai lu plusieurs articles sur le sujet et c'est bien ça qui me pousse à écrire le mien. Pour information, voici les liens des articles que j'ai lu :

Après avoir lu ces différents articles il s'avère que certaines procédures ne fonctionnent pas, d'autres ne sont pas adaptées etc. Alors j'ai décidé de partager avec vous "ma" solution.

Autres liens

Ces liens sont ajoutés par la communauté via les commentaires :

VPC Sharepoint clonable

Pour cloner une VPC WSS ou SharePoint, suivez le guide :

  1. Rendez-vous dans votre administration centrale
  2. Dans l'onglet Opération cliquez sur le lien Alternate access mappings.
    image
  3. Changez les différents mappings avec le nouveau nom de votre serveur.
    image
  4. Ouvrez ensuite une invite de commande (exécuté -> cmd).
  5. Rendez-vous dans le dossier suivant : "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN" à l'aide de la commande cd.
  6. Exécuté stsadm :
    stsadm -o renameserver -newservername "newservername" -oldservername "oldservername"
    Ce qui donnera ici :
    stsadm -o renameserver -newservername "sptest-tpl" -oldservername "sharepoint-tpl"
    image
  7. Renommez votre ordinateur. Il vous demandera un Login et un mot de passe, indiquez ceux de l'administreur de la machine. 
    image 
  8. Redémarrez votre ordinateur.
  9. (Si vous êtes sur un domaine, vous devez rajouter l'ordinateur sur le domaine maintenant et ensuite redémarrez à nouveau l'ordinateur/vpc).
  10. Rendez-vous à nouveau dans "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN" à l'aide de la commande cd
  11. Exécuter : stsadm.exe -o updatefarmcredentials -userlogin –password
  12. Redémarrez IIS (iisreset /noforce).
  13. Vérifiez le pool d'application dans IIS et changer les identifiants lorsque cela est nécessaire.
    image
  14. Ouvrez l'administration centrale de Sharepoint.
  15. Allez dans l'onglet Opérations et cliquez sur le lien Services on Server.
  16. Ensuite, cliquez sur Office SharePoint Server Search et changer les mauvais logins
    image
  17. Faites de même pour Windows SharePoint Services Help Search. 
  18. Si vous avez un Shared Service, rendez-vous sur sa page d'administration et cliquez sur Search Settings.
  19. Un message d'erreur apparaît, cliquez alors sur Configure an indexer and a search database for this Shared Services Provider.
    image 
  20. Corrigez le domaine de l'administrateur et sélectionnez le site d'index. Cliquez ensuite sur OK.
    image

Si tout c'est bien passé, votre SharePoint doit être comme un tout neuf :-).

PS : Si les experts Sharepoint veulent donner leur feedback, leurs conseils ou leur lien, ils sont le bienvenu, je mettrai vos liens en haut de l'article!

En espérant que ça aide!

Mon PowerPoint du 20 Juin 2008

La semaine passée j’ai du présenter un sujet assez… Enfin vous verrez :-). Voici mes slides


Uploaded on authorSTREAM by loicbar

Concrètement, la problématique Mashup est pour moi la problématique que nous rencontrons en tant que développeur lorsque nous voulons créer des applications composites (dont le contenu provient de plusieurs sources). Je présente deux solutions :

  • La solution “réelle” : on rend uniforme les différents formats de données. Cette solution est déjà utilisée partiellement avec Astoria par exemple (pour Live).
  • Une solution développeur : LINQ et les différents projets autour. LINQ est donc une solution qui permet de rendre le développement plus “rapide” (à condition qu’on ait les providers) en attendant qu’une réelle solution soit trouvée.

On peut en débattre en commentaire si vous le souhaitez.

Ah oui, j’aimerai vos avis sur ce genre de présentation (fort design?)

OpenSocial et WCF REST-ful

Cet article traitera principalement de Windows Communication Foundation. Nous mettrons WCF en pratique en allant attaquer notre service web avec OpenSocial.

Pour ceux qui ne suivent pas l'actualité du web social, OpenSocial est une sorte de meta network. C'est un ensemble d'APIs qui vont permettre d'exploiter les informations de différents réseaux sociaux. La condition est que ces réseaux implémentent OpenSocial. Ils sont alors appelés conteneurs.

Cela va permettre aux développeurs de créer des applications qui pourront être déployées sur les réseaux conteneurs sans changer une seule ligne de code.

"Many sites, one API"

WCF REST-ful

Windows Communication Foundation est une extension du Framework .NET permettant de faciliter la création d'applications distribuées. Notre but ici est de créer un service web REST-ful qui exposera des données.

Les services REST-ful sont caractérisés par trois éléments :

  1. On suppose que seul l'URI suffit à accéder aux données.
  2. Ils utilisent HTTP (GET, POST, DELETE et PUT suffisent normalement).
  3. Il n'y a pas d'état.

image

Pour ce qui est de la réalisation, cela reste assez simple si vous avez déjà créer des services avec Windows Communication Foundation.

Création d'un service WCF simple

Le plus simple pour créer un service WCF est d'utiliser Visual Studio 2008. Si vous n'avez pas de version profesionnelle de Visual Studio vous pouvez télécharger la version gratuite (express) à cet adresse.

Visual Studio propose un template de projet pour la création d'un service web WCF :

image

Visual Studio ajoute des fichiers à votre projet. Vous pouvez soit les supprimer, soit les utiliser comme base.

La première chose que nous devons définir c'est les données que nous allons exposer. Nous voudrions ici permettre d'accéder aux informations des membres de notre site web. Nous aurons donc une classe Personne :

image

Une fois ceci fait, nous devons créer un contrat qui n'est qu'une interface c#. Ce contrat va permettre de définir les méthodes qui devront être exposée via notre service web :

image 

Une fois cette interface créée, nous devons implémenter la méthode. Dans notre exemple nous utiliserons LINQ to SQL. LINQ à été ajouté au Framework .NET 3.5. Nous n'allons pas détailler ce qu'est LINQ ici, sachez que le but de cet ajout est d'unifier la façon d'accéder aux données. Nous en parlerons dans un prochain article.

image

L'implémentation de notre méthode n'est pas très compliquée :

image

Maintenant notre service créé, nous devons le déployer. Pour l'exposer nous avons besoin d'ajouter un fichier svc :

image

Le fichier web.config doit également subir quelques modifications :

image

Dans le web service nous définissons ce qu'on appelle le Binding. C'est la méthode d'accès au web service. Une vois tout ceci uploader sur votre serveur, vous pouvez atteindre le web service avec votre navigateur internet (ex : http://social.loicbar.com/Service.svc?wsdl).

Check list :

Nous avons vu se qu'on appelle l'ABC de WCF :

 

WCF REST-ful : mise en pratique

Pour passer de notre exemple précédent à un WebService REST, nous n'avons pas beaucoup de modification à apporter :

  1. Il faut définir que tel URI correspond à l'appel de tel méthode de notre WS.
  2. Il faut changer le binding et passer à webHttpBinding.
  3. Modifier le behavior (c'est à dire le comportement).

Pour déterminer le chemin d'accès à l'information (URI) on utilise des templates que nous définissons dans l'attribut WebGet.

image

Note : remarquez que id est devenu une chaîne de caractère. En effet, {id} ne peut correspondre qu'à un paramètre de type string. Nous devons donc traiter nous même le casting du paramètre.

Le template peut bien entendu être plus complexe. On peut par exemple avoir plus de paramètre à notre méthode et donc aussi dans notre template.

Au niveau de notre web.config, nous devons donc changer le binding et définir un behavior permettant d'utiliser REST.

image

Une fois déployé sur internet, vous pouvez accéder aux informations à l'aide d'une URI (ex : http://social.loicbar.com/Service.svc/personnes/1). Vous obtenez alors un objet JSON :

{"Id":1,"Nom":"Bar","Prenom":"Loic","Pseudo":"loicbar"}

OpenSocial et WebService REST JSON

Comme application test de notre web service nous allons créer un gadget sur Orkut à l'aide d'OpenSocial. Nous afficherons le nom et le prénom de l'utilisateur recherché :

image

Pour en savoir plus sur OpenSocial, attendez le 10 Juillet et la sortie de mon livre sur Facebook et OpenSocial. Quoi qu'il en soit, notre application fait bien ce qu'on lui demande :

image

En espérant que cela pourra vous être utile,

Loïc

Un contrôle utilisateur dans un autre

Il peut arriver qu'on veuille utiliser un User Control dans un autre User Control. On obtient alors ce genre d'erreur :

erreurUC

/!\ L'erreur n'apparait que lorsque vous déclarez vos User Controls dans le web.config.

On ne peut pas inclure l'un dans l'autre deux User Controls qui se trouve dans le même dossier. La solution est donc toute simple, il suffit de créer deux dossiers différents pour les deux User Controls.

  • MonDossier1
    • MonUC1.ascx
  • MonDossier2
    • MonUC2.ascx

Si on veut éviter les deux dossiers, on peut ajouter dans l'User Control un tag Register :

<%@ Register TagPrefix="uc2" Src="~/UserControls/Recommend.ascx" TagName="UCRecommend" %>

Le problème devient plus complexe quand nous devons inséré un User Control dans lui-même. Qu'est-ce que cela veut dire? Prenons un exemple : Nous avons un User Control de menu. On voudrait gérer des menus à plusieurs niveaux, nous allons donc faire appel à l'User Control lui-même pour afficher le menu représentant le sous menu.

Dans ce cas là, il n'est pas question d'avoir le même User Control dans plusieurs dossiers. On peut alors utiliser la technique du code behind. Le principe est de placer un panel et de charger notre User Control au Page_Load du panel.

protected void pn1_Load(object sender, EventArgs e)
    {
        Panel pn1 = (Panel)sender;

        UserControl uc = new UserControl();
        UserControls_VideoInfo uc1 = (UserControls_VideoInfo)uc;
        uc1 = (UserControls_VideoInfo)uc.LoadControl("~/UserControls/VideoInfo.ascx");
        pn1.Controls.Add(uc1);
    }

Ou encore (si on revient dans notre premier cas et qu'on ne veut pas plusieurs dossiers) :

protected void pn1_Load(object sender, EventArgs e)
    {
        Panel pn1 = (Panel)sender;
        UserControl uc = new UserControl();
        pn1.Controls.Add(uc.LoadControl("~/UserControls/Recommend.ascx"));
    }

Voilà, en espérant que ça aidera d'autres :-).

PS : Merci à Gaëlle et à Kim pour leur aide.

MSDN Bookmarks

Un petit poste pour vous informer d'une nouvelle fonctionnalité sur MSDN : MSDN Bookmarks.

image

Il m'est souvent arrivé de voir un article intéressant que je n'ai pas le temps de lire tout de suite. Eh bien, je peux maintenant ajouter cet article dans mes favoris MSDN pour pouvoir le retrouver plus facilement par après. MSDN Bookmarks est d'autant plus intéressant qu'il a une connotation social. Ainsi, lorsque vous arrivez sur la home page du projet, vous voyez une liste de tags ajoutés par d'autres utilisateurs de MSDN, ainsi que la liste des liens les plus ajoutés en favoris :

image

Mon feedback à froid :

  1. Il manque de l'intéraction avec MSDN comme la possibilité d'ajouter dans les bookmarks lorsqu'on se trouve sur un article. Mais cela arrivera certainement!
  2. Pas de possibilité pour catégorisé un lien mise à part avec les tags mais c'est un peu léger.

Voilà, en espérant que ça aide! A oui le liens c'est actuellement : http://social.msdn.microsoft.com/bookmarks/

Posted: samedi 31 mai 2008 16:00 par loicbar | 0 commentaire(s)
Classé sous :
Facebook Developers Belgium

Vous le savez peut être, Facebook organise pas mal d'événements à destination des développeurs. Ces événements s'appellent "Facebook Developer Garage". Un événement de ce type est entrain de se préparer en Belgique.

Facebook Developer Garage Belgium logoPour pouvez dors et déjà rejoindre le groupe officiel de cet événement en cliquant ici.

Cet événement rassemblera des grands noms au niveau du développement de la plateforme Facebook. Les conférences feront démonstration de l'utilisation de plusieurs technologies comme PHP, .NET et autres.

Sachez que ce Facebook Developer Garage fera partie d'un événement un peu plus grand qui concernera tout aussi bien le décisionnel. On verra ainsi plusieurs sociétés de communication qui viendront vous montrer quelle utilisation on peut avoir des réseaux sociaux tant au niveau de la promotion que du marketing alternatif.

Je tente de vous tenir informer mais le mieux est de rejoindre le groupe si vous êtes inscrit sur Facebook.

Live Mesh : WebDesktop, Sync Framework et compagnie!

Tout le monde en parle et... tout le monde se demande aussi ce que c'est! Mon Rédo vous en a parlé ce matin dans un post de blog. Je comprends son enthousiasme (que je partage) par rapport à ce projet mais je vais tenter d'aller plus loin dans l'explication pour que vous puissiez voir ce qu'une telle plateforme peut apporter aux développeurs que nous sommes.

"Live Mesh... Un petit pas pour l'homme, un grand pas pour le web de demain" (Version Microsoft)

Live Mesh c'est d'abord un changement de mentalité (déjà engager depuis un moment notamment chez Google). Quand on y pense, lorsque j'étais tout petit, je me souviens que j'avais internet en 56k avec un modem qui faisait un bruit d'enfer à la connexion. Aujourd'hui, j'ai internet sans m'en rendre compte. J'arrive au boulot le matin, je branche mon PC et il me semble normal de pouvoir lire directement mes mails. Je rentre chez moi en voiture, je suis dans les bouchons, je regarde mes mails et ça me semble normal. Enfin, à la maison, de la même manière qu'au boulot, j'ai internet! C'est bien là qu'est le changement :

  • Avant : on allait sur internet.
  • Après : internet vient à nous, internet est partout.

Ca vous rappelle peut être une publicité :-) mais c'est bien ça.

Sans compté le nombre incroyable d'appareils que nous avons. Je vais peut être paraître mégalo mais si je regarde actuellement ce que j'ai devant moi :

  • 2 PC
  • 1 Mobile

J'ai encore un autre mobile et un autre ordinateur chez moi. Sans compté que d'autres appareils viennent s'ajouter à cette liste :

  • Certain réveil sont connecté.
  • Des robots.
  • Application de lecture (notamment chez Amazon).
  • ...

Ouais ouais, bref tout ça on sait et alors? Aujourd'hui on connait pas mal d'application qui permettent de synchroniser des données entre plusieurs ordinateurs. Prennez par exemple Foxmarks, un petit add-in pour Firefox qui permet de synchroniser nos favoris entre plusieurs ordinateurs. Microsoft Live Mesh c'est ça mais ça va plus loin. D'abord car Live Mesh ne synchronise pas seulement les favoris...

... mais synchronise tout ou presque!

En le voyant comme ça, on pourrait confondre avec FolderShare, mais non!

Et là, je me permet de revenir au titre! J'ai noté WebDesktop (ou WebOS, ou Webtop, peu importe comment vous appelez ça). C'est bien de cela qu'il s'agit! Microsoft Live Mesh vous offre un burreau virtuel en ligne (limité à 5go selon mes infos) sur lequel vous pouvez venir stocker des fichiers et tout l'intérêt réside dans le fait qu'on peut y avoir accès de n'importe où. A confondre donc avec SkyDrive? Non plus! Car Mesh va plus loin avec la possibilité de synchroniser les applications, des devices (vos ordinateurs, mobile, pda)! C'est vraiment bien foutu et je vous conseil de regarder la vidéo suivante pour vous en persuader.

Mesh et les développeurs

Soyons prudent tout de même concernant les applications... Parce que là, Microsoft à besoin de nous (développeurs). En fait, Mesh utilise FeedSync pour synchroniser les applications. Si si, je suis sûr que vous en avez déjà entendu parlé. Vous vous souvenez du Sync Framework? Et bien, dans la mêlé il y avait un truc qui s'appellait Simple Sharing Extensions. C'est là que ça devient intéressant (désolé de vous avoir fait attendre aussi longtemps).

Tout le monde connait le RSS (ou Atom mais ici on va prendre RSS comme exemple). Et bien, FeedSync c'est une extension pour RSS (ou Atom). Notre RSS prendra donc cette forme :

<rss version="2.0" xmlns:sx="http://feedsync.org/2007/feedsync">

Du coup, on va pouvoir utiliser tout un tas de tags en plus (voir http://feedsync.org/2007/feedsync). Ces tags vont permettre d'ajouter des méta data qui indiqueront l'état de l'élément avec une notion d'historique :
  • L'élément est-il supprimé?
  • Où en somme nous dans l'historique?
  • Y a t'il des conflits?

Un beau dessin vaut mieux qu'un long discourt.

Cas d'utilisation concret :  nous avons une "todo liste" que nous devons synchronisé entre plusieurs application.

image

1. Nous avons une "todo liste" de départ :

image 

On remarque dans cette "Todo liste" que nous avons bien une chose à faire "Finir projet" avec une description comme dans un RSS normal, mais nous avons en plus de cela, des informations d'historiques.

2. L'application 1 ajoute un élément. On a donc une version intermédiaire qui ressemble à :

image 

3. L'application 2 ajoute elle aussi un élément ce qui provoque la création d'une autre version intermédiaire :

image 

4. La synchronisation s'effectue (merge des versions intermédiaire). Pour effectué le merge faut bien se mettre en tête que chaque application expose un EndPoint avec sa version modifier de la todo liste.

5. Ici pas de conflit, ce qui donne la version finale :

image 

Rien de bien compliqué! Maintenant on pourrait imaginer que deux applications fasse une mise à jour sur le même élément en modifiant complètement le contenu de la description (celle-ci étant complétement différent de l'application 1 à l'application 2). On aurait alors quelque chose comme ceci :

image 

On voit apparaître un autre tag : "sx:conflits". Lors du merge, on a prit comme version finale la modification qui a été faite en dernier mais nous avons la possibilité de résoudre le conflit car l'autre version n'a pas été effacée mais à a été placé dans le tag "conflicts". Ce qui veut dire qu'on à la possibilité par après de dire "non non, la bonne description c'était Implémentation....".

Voilà en gros comment FeedSync fonctionne et pour pouvoir synchroniser des applications au travers de Mesh, il faut que la communication (synchronisation) se passe avec FeedSync.

"Microsoft Live Mesh permet la synchronisation d'application si les développeurs de ces applications implémente FeedSync"

Et on a quoi comme outil pour gérer FeedSync? LINQ to XML... Non je blague! En fait, le Sync Framework gère FeedSync. Et là je vois déjà vos têtes avec au dessus une petite bulle : "C'est quoi?" Bon là on se calme, dites vous que cela va vous aider à gérer le FeedSync avec les technologies .NET. Oui car avec un tel format on peut imaginer des applications écrites en d'autres langages (et c'est bien l'idée de Microsoft) mais là, vos seuls outils (pour le moment et en attendant des projets Open Source) seront vos mains.

J'ai expliqué les principes de bases et pour la technique, on attendra un peu car d'abord j'ai des choses à faire sur Dynamic Data. Mais ce projet me passionne donc sans nul doute que je reviendrai dessus en long et en large (d'autant plus que j'ai déjà bossé sur ce framework).

Sachez également, que Microsoft proposera des APIs pour Live Mesh. Je sais pas vous en dire plus pour l'instant. Je sais juste que ces APIs permettront de gérer les feeds (qui à modifier tel ou tel document), la gestion et le partage de document etc.

WebOS, WebDesktop, WebTop

Ce projet est tout à fait intéressant et je vois en lui une tentative de Microsoft de contrer Adobe AIR et Google Gears (oh oui faut que je vous en parle aussi!). En effet, si vous avez regardé la vidéo vous avez vu sur le burreau Mesh (online desktop) qu'il reconnaissait bien le format Word (docx). En tout cas il affichait l'icône. Vous allez me dire que SkyDrive le fait aussi. Mais j'espére voir un jour tourné Word sur un tel bureau virtuel. A ce moment là, les choses pourraient devenir très intéressant malgré que le projet est dors et déjà fort prometteur.

Ce qui reste à faire :

  • Gagner la confiance des utilisateurs. En effet, partager tout sur internet ce n'est peut être pas très sécurisant (voir ce qui s'ai passé avec Facebook)
  • Séduire les développeurs :-).
  • Attendre!

https://www.mesh.com

@ bientôt!

ASP.NET Dynamic Data

J'ai pas mal de sujets dans le pipe mais aujourd'hui je vais parler de ASP.NET Dynamic Data dont une nouvelle preview vient justement de sortir. Bon d'accord j'ai quelques jours (semaines?) de retard. En fait, je voulais déjà nous en parler la dernière fois mais souvenez-vous, j'ai eu un contre temps.

La première question qu'on se pose naturellement lorsque nous découvrons une nouvelle technologie c'est :

"A quoi ça sert?"

Cette question la n'est pas des plus compliquée et, dans le cas de ASP.NET Dynamic Data, la réponse est très simple :

"créer un back office rapidement et simplement"

Mais de cette première question en découle une deuxième :

"A quoi ça va ME servir?"

Et là, la question est plus difficile à aborder dans un post de blog. Concrètement, ASP.NET Dynamic Data va vous permettre de créer un back office rapidement car -> dynamique. Il va se générer automatiquement en fonction d'un modèle de données. Dans ce cas-ci le modèle de données sera un fichier DBML (LINQ to SQL) ou un modèle LINQ to Entities (EDM). Pas de soucis pour ceux qui ne connaissent pas LINQ, je pense sincèrement que ce n'est pas une connaissance requise pour pouvoir utiliser ASP.NET Dynamic Data d'autant plus que depuis la dernière preview, vous avez un wizard intégré à Visual Studio pour générer vos modèles. Par contre, inutile de le dire mais vous avez besoin du framework .NET 3.5 pour pouvoir les utiliser.

Pratique aussi lorsque vous avez besoin de tester votre base de données et donc que vous avez besoin d'ajouter, éditer, supprimer des données. Donc, que pour des tests? Non! Depuis la première release de ASP.NET Dynamic Data il y a eu pas mal d'évolution notamment au niveau de la possibilité de personnaliser complètement les interfaces et les règles métiers. On pourrait donc imaginer un site full dynamic data. Pourquoi pas? ASP.NET Dynamic Data n'est donc pas à confondre avec le scaffolding de Ruby On Rails. Je ne rentrerai pas dans trop de détail... maintenant :p.

En plus de se baser sur un modèle de données, ASP.NET Dynamic Data génère des interfaces basées sur des pages templates. Ces templates sont de simples pages ASPX que nous pouvons bien entendu personnaliser à souhait. On retrouve dans cette page des contrôles bien connus comme le GridView ou encore le DetailsView. Vous serez donc dans votre élément pour pouvoir personnaliser ces templates. Vous pouvez naturellement définir des règles assez précise pour déterminé quel template sera utilisé pour telle table. Par défaut, vous avez la même interface pour le back office de toutes les tables, mais vous pouvez bien entendu aller plus loin dans la personnalisation. Bien évidement, comme nous sommes dans un modèle complètement dynamique, nous avons besoin de rester générique dans les templates. Nous ne pouvons pas, par exemple, savoir quel type de données sera affiché dans tel colonne étant donné qu'un template peut correspondre à plusieurs tables. Nous avons donc également un système de template pour les types de données. Vous pouvez par exemple afficher un slider (Ajax) pour les données de type "int" ou encore une Map Virtual Earth (Mon bon Nicolas est en ébullition) à la place d'un champ correspondant à une adresse -> Adjugé vendu! Je ferai ça pour l'article technique.

ASP.NET Dynamic Data gère également les règles métiers définies dans la base de données. Si par exemple, vous avez indiqué qu'un champ de ne peut pas être "null" alors cette règle sera reprise dans le modèle de données dont se sert Dynamic Data afin de pouvoir lancer une exception si cette règle n'est pas respectée. Encore une fois tout cela est dynamique. Il y a en fait un validator qui catch toutes les exceptions lancées à partir de notre modèle de données (LINQ to SQL ou LINQ to Entities). En plus des règles définies dans la base de données, vous avez la possibilité de définir les vôtres.

Pour voir comment cela fonctionne techniquement je vous encourage à... patienter :-). Je reviendrai vers vous avec la total : webcasts, articles etc.

A suivre :

  • Trois webcasts
  • Un article complet présentant l'utilisation de Dynamic Data
  • (Un article de comparaison avec Ruby On Rails... Même si il n'y a pas trop de comparaison)
  • Un post de blog de conclusion

Alors? Impatient?

Les technologies de la publicité (point de vue Microsoft)

Un post pas si technique que ça alors que j'avais prévu de vous parler des Dynamic Data. Mais ce soir, je me rend à un événement rassemblant une centaine de profesionnels des médias. Du coup, je me suis demandé ce que proposait Microsoft à cette audience. La réponse dans ce post, bien évidemment! (Bien que je n'ai pas beaucoup de temps pour me renseigner sur le sujet).

Avant de commencer, je tiens à inviter quiconque aurait des informations supplémentaires à les noter en commentaire.  Notez que je m'intéresse également à ce que fait Adobe dans ce domaine (dans un prochain post).

La première chose qu'il faut savoir sur le sujet c'est que Microsoft investi vraiment pas mal dans ce marché qui est, il faut bien l'avouer, très lucratif. Face à Google Microsoft tente de réagir notamment en tentant une entrée dans le marché de la publicité mobile. En fait, lors des MIX08, Microsoft à présenter plusieurs support pour la publicité (mais pas tous!) :

  • Le web avec des exemples de publicités très intéractives sur MSN.com.
    pubweb
  • Le mobile avec encore un format publicitaire pour le portail mobile de MSN.
    pubmobile
  • La publicité dans les logiciels avec comme exemple, les possibilités de Live Messenger dans ce domaine.
    pubmsn
  • La publicité dans les jeux vidéo au travers de la XBox.
    pubxbox

On l'aura compris, la publicité est partout et Microsoft tente de la rendre intéractive. Personnellement, quand je pense à "intéractivité" je pense à Silverlight qui est la solution Microsoft pour les applications de type RIA.

Silverlight 2.0, n'étant qu'en béta 1, annonce pourtant pas mal de nouveautés qui intéresseront probablement les acteurs du monde de la publicité en ligne.

Pour ceux qui ne connaissent pas Silverlight, c'est une technologie permettant de créer des interfaces riches pour le web. Vous avez probablement déjà entendu parler d'ajax, et bien Silverlight va au-delà (désolé pour les techniciens :-)). Pour ceux qui veulent plus d'information, consulter Guillaume.

Silverlight gère justement très bien tout ce qui est média (photo, vidéo) et se couple parfaitement avec Windows Server 2008 (la plateforme server de Microsoft) pour offrir de réelles solutions publicitaires. Concrètement ajouter ou retirer une publicité d'une vidéo c'est un clic dans Windows Server 2008.

Microsoft ne joue pas sur le secteur de la publicité qu'avec Silverlight. Microsoft propose également des outils de reporting ou encore des algorithmes permettant de cibler le profile d'un utilisateur afin de lui afficher une publicité en rapport avec ses centres d'intérêt (secteur déjà dominé par un certain Google).

Mais dans les laboratoires de Microsoft se trouve des choses encore bien plus intéressantes comme par exemple la technologie "AirWave" qui permet à une gallerie marchante (par exemple) d'afficher un écran tactile à la "surface" (vous vouyez de quoi je parle? Cette table complétement tactile dévoilé il n'y a pas si longtemps). Cet écran peut servir à afficher de la publicité intéractive (sous forme de jeux par exemple) ou à directement avoir accès à de l'information sur le produits ciblé par la publicité (pourquoi pas?)

080206_Microsoft_tech

Dans le monde de la vidéo, Microsoft travaille également sur " Contextual Ads for Video" qui permet de diffuser de la publicité en fonction de ce qui se dit dans la vidéo! Toujours dans cette univers, "Intelligent Bug Ads" permet de localisé l'endroit le moins intrusif pour placer un logo ou une publicité.

Microsoft travaillerait également sur un moteur de recherche Visuel ("Visual Product Browsing") qui permettrait de rechercher des objets ressemblant à une photo qu'on aurait uploadé ou suite à un clic sur une image (je veux tout ce qui ressemble a cette image).

Pour les annonceurs, Microsoft travaille également sur un outils "Content Analysis Engine" permettant d'indiquer la pertinence des mots clefs (en fonction de ce qui est tapé dans le moteur de recherche) le tout avec une interface utlisateur très "user friendly" (qui à dit Silverlight?).

Plus d'information sur ce qui se passe dans les laboratoire ici.

Si vous ne deviez retenir qu'une seule chose ici c'est que Microsoft fourni des outils pour les créatifs / développeurs :

  • Pour créer le contenu : Microsoft propose des outils comme Blend, Expression Design etc. (Gamme Expression). Ces outils fonctionne parfaitement en collaboration avec Visual Studio. Notez aussi que vous pouvez utiliser vos outils actuel, en effet, il existe pas mal de convertisseur des outils non Microsoft vers les outils de la gamme Expression.
  • Pour le publier : Windows Server 2008 propose pas mal d'options qui faciliteront la publication et la gestion de campagne publicitaire (notamment dans le monde de la vidéo).
  • L'intégration : Microsoft propose notamment Silverlight pour la création de contenu riche. Mais ils travaillent également sur la conception d'algorithmes etc.

Mais aussi pour les décideurs avec des outils pour le reporting, l'analyse de mots clefs, le ciblage d'utilisateurs.

Sans oublié que Microsoft s'intéresse à la diffusion de publicités peu importe le support (web, nouveau média, mobile, etc).

Bon... Vite vite, je dois partir! En espérant que ça aide! Je reviendrai sur le sujet plus tard!

PS : au fait, l'événement c'est Aperonet!

Et un de plus!

Bonjour et bienvenue sur mon blog gracieusement offert par notre ami Nix :-). Moi c'est Loïc Bar, vous m'avez peut être déjà croisé à des événements Microsoft, Google, Adobe ou encore à des événements networking. Je suis pas nouveau en tant que bloguers, j'animais déjà le blog www.loicbar.com.  

Je suis très content de rejoindre cette communauté où je retrouve pas mal de mes camarades de chez Wygwam :

Pour ce qui est du contenu de ce blog, vous trouverez pas mal d'ASP.NET, d'API Live, d'API Google, de LINQ et de WCF. En résumé, je suis principalement les nouvelles technologies du web.

J'écris également pour le magazine Programmez! (vous trouverez d'ailleurs un article de ma création dans le prochain hors série d'Avril).

Psssss : Nico a lui aussi son blog! Hihi, il a encore rien écrit!



Les 10 derniers blogs postés

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le il y a 14 heures et 29 minutes

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40

- [IIS] Erreurs web personnalisées par Blog de Jérémy Jeanson le 11-19-2014, 00:00

- BDD/TDD + Javascript par Fathi Bellahcene le 11-16-2014, 16:57

- Sécuriser sans stocker de mots de passe par Blog de Jérémy Jeanson le 11-15-2014, 08:58

- Où télécharger la preview de Visual Studio 2015 ? par Blog de Jérémy Jeanson le 11-13-2014, 21:33

- Les cartes sont partout ! par Le blog de Patrick [MVP Office 365] le 11-13-2014, 17:26

- [ #Office365 ] Courrier basse priorité ! par Le blog de Patrick [MVP Office 365] le 11-12-2014, 08:56

- [Oracle] Fichier oranfsodm12.dll absent du package client par Blog de Jérémy Jeanson le 11-10-2014, 20:44