web 2.0

Propulser Subversion (SVN) dans les nuages de Windows Azure

Une des fonctionnalités fort sympathique de Windows Azure est qu’on peut y exécuter à peu prés tout ce qu’on peut exécuter sur un serveur Windows, du moment qu’on ne fait pas trop appel à COM ou à la base de registre.
En résumé tout ce que vous pouvez faire tourner sur Windows sous un compte non administrateur, tournera sur Azure. C’est grâce à cela qu’on peut exécuter du Java sur Windows Azure.

Dans cet article je vais vous présenter comment propulser votre serveur subversion dans les “nuages“ grâce à Windows Azure.

SVN qu’est ce que c’est ?

Pour ceux qui ne connaitraient pas Subversion, c’est un système de gestion de versions centralisé, très populaire et open source, sous licence Apache. Si vous ne connaissez pas Subversion je vous invite à lire cet article sur Wikipedia

Les préparatifs

Commencez par vous procurer les binaires d’un serveur subversion pour Windows. Et la vous avez l’embarras du choix http://subversion.apache.org/packages.html pour cet exemple j’avais pris la version 1.5.6 de collabnet.

Pas besoin d’installer le serveur sur votre poste il vous faut juste extraire le dossier bin qui contient svnserve.exe et les dll associées.

Ensuite on va uploader ce dossier dans les blobs de votre storage Azure. Pour cela j’ai utilisé  le cloudberry explorer qui permet d’y naviguer à la manière d’un explorateur de fichier.

Créez un container nommé “svn” et uploadez y le contenu du dossier bin que vous avez extrait.

Le Worker Role

Un Worker Role va récupérer les binaires stockés dans les blobs, les copier sur le local storage de la VM Azure, puis démarrer notre serveur svn.

Pour cela commençons par créer un nouveau Worker Role en utilisant les templates de Visual Studio.

Configuration du Worker Role

Ouvrez le ServiceDefinition.csdef 

Rajouter l’attribut enableNativeCodeExecution au WorkerRole, ainsi le WorkerRole peut exécuter du code non managé.

<WorkerRole name="WorkerRole" enableNativeCodeExecution="true">

A l’intérieur de cette balise insérez le code nécessaire pour déclarer l’utilisation des LocalResource

<LocalResources>
      <LocalStorage name="InstanceDriveCache" cleanOnRoleRecycle="false" sizeInMB="300" />
      <LocalStorage name="SvnFiles" cleanOnRoleRecycle="true" sizeInMB="300" />
</LocalResources>

Le LocalStorage que j’ai nommé SvnFiles sera pour les binaires de Svn.
Et le InstanceDriveCache servira comme cache disque pour mon repository svn.

A l’intérieur de la balise ConfigurationSettings ajouter :

<Setting name="SvnFilesContainerName" />
Cela permettra de déclarer le nom du container dans lequel j’ai stocké les binaires de SVN et
de le changer par la suite sans modifier le code de mon Worker Role
 
Et enfin dans les Endpoints rajouter comme cela un nouveau endpoint : 
<Endpoints>
      <InputEndpoint name="WorkerIn" protocol="tcp" port="3690" />
</Endpoints>

Ainsi nous ajoutons un endpoint vers l’extérieur pour notre Worker Role, le port étant celui du protocole svn.

Ouvrez le Serviceconfiguration.cscfg

et ajouter dans ConfigurationSettings :

<Setting name="SvnFilesContainerName" value="svn" />
pour déclarer le nom du container dans lequel j’ai stocké les binaires de svn
 
Vous pouvez aussi faire cette configuration en utilisant les écrans de propriétés du WorkerRole 
(clic droit, puis propriété sur le workerrole dans le projet de configuration du service)
 

Le Worker Role

Un serveur SVN c’est bien, mais où seront stockées mes repository ?

En fait nous allons utiliser un Windows Azure Drive (ou Xdrive).  Le Windows Azure Drive c’est un disque NTFS mais dans les nuages. Il est stockée sous forme de blob dans le storage Azure et monté dans la VM Azure par le Worker Role.

L’un des gros avantages d’utiliser le Windows Azure Drive est que mes repository SVN ne sont ainsi nullement lié à Azure. Le jour au je veux rapatrier mon serveur SVN et ses repository chez moi, c’est très simple il me suffit de recopier l’image disque (le .vhd) chez moi et de le remonter comme disque local (trois clics de souris sous Windows 7)

Attention par contre en utilisant un Azure Drive on reste limité en termes de montée en charge, puisque on ne peu monter un Azure drive que sur une seule instance de notre worker role en lecture/écriture.
Si on démarre plusieurs instances notre Azure Drive ne sera disponible qu’en lecture sur les autres instances, et par conséquent notre serveur svn aussi.

Donc la montée en charge se limite à augmenter la taille de la VM.

ouvrez le WorkerRole.cs

dans la classe du WorkerRole déclarer à l’intérieur de la classe cet objet :

private Process svnserve;
private string driveLetter;
private CloudDrive myCloudDrive;

L’objet svnserve nous servira à démarrer le processus du serveur SVN. Et le CloudDrive c’est l’objet correspondant au Windows Azure Drive.

 
Dans la méthode OnStart() rajouter :
// Initialize config environment 
            CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
            {
                configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
            });
InstallAndStartSvn();  

Les premières lignes sont pour initialiser la configuration, puis la  méthode va copier et démarrer le serveur SVN.

Voila le contenu de la  méthode InstallAndStartSvn  :

Les 2 premières lignes vont met permettre d’initialiser l’accès au blob

 
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
CloudBlobClient blobfoldersClient = storageAccount.CreateCloudBlobClient();

La je récupère le chemin local à la VM de la localresource que j’ai déclaré dans ma configuration

 
String svnroot = RoleEnvironment.GetLocalResource("SvnFiles").RootPath;
 

J’utilise à présent une classe qui va copier le contenu du container “Svn” dans le dossier correspondant à la local resource  (La classe est disponible plus loin dans l’article)

 
StoreFoldersInBlobs.Folder SvnFolder = new StoreFoldersInBlobs.Folder(
    svnroot, blobfoldersClient.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("SvnFilesContainerName"))
);
SvnFolder.CopyContainerToFolder();

Trace.WriteLine(" Copie du svn effectué :)");

Maintenant je monte mon Azure Drive.

 
MountAzureDrive();
 

Et je démarre mon serveur SVN.

 
int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WorkerIn"].IPEndpoint.Port;
svnserve = new Process()
  {
     StartInfo = new ProcessStartInfo(Path.Combine(svnroot, @"svnserve.exe"), 
" --daemon" + " --root " + driveLetter + " --listen-port " + port)
      {
         UseShellExecute = false,
         WorkingDirectory = svnroot,
         RedirectStandardOutput = true,
         CreateNoWindow = true
      }
  };
svnserve.Start();    
Trace.WriteLine("Serveur Svn démarré");       
}

A présent n‘oubliez pas de rajouter dans la méthode Run du WorkerRole :

svnserve.WaitForExit();
Trace.WriteLine(" svn a fermé");

Sans quoi votre Worker Role redémarrerait tout de suite aprés avoir fini de démarrer, tournant en boucle indéfiniment de l’état Busy à Starting.

Pour en savoir plus sur les Windows Azure Drive je vous recommande cet article de Thomas Conte

Le code suivant va créer s’il n’existe pas et monter l’Azure Drive.  Vous pouvez ainsi soit créer vos repository en local en utilisant le mode d’emploi de l’article de Thomas Conte pour créer votre vhd en local, y créer un repository à l’aide de la commande "svnadmin create” y régler les droits appropriés en modifiant les fichiers de config du repository puis uploader votre vhd sur Azure toujours avec le cloudberry explorer.

Le contenu de la méthode qui va monter le Windows Azure Drive pour le stockage du repository :

 
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
LocalResource localCache = RoleEnvironment.GetLocalResource("InstanceDriveCache");
CloudDrive.InitializeCache(localCache.RootPath + "cache", localCache.MaximumSizeInMegabytes);
Trace.WriteLine(" cache créé");
// Just checking: make sure the container exists 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
blobClient.GetContainerReference("drives").CreateIfNotExist();

// Create cloud drive 
myCloudDrive = storageAccount.CreateCloudDrive(
    blobClient
    .GetContainerReference("drives")
    .GetPageBlobReference("mysupercooldrive.vhd")
    .Uri.ToString()
);

try
{
    myCloudDrive.Create(64);
}
catch (CloudDriveException ex)
{
    Trace.WriteLine(ex.Message);
//     handle exception here 
//    exception is also thrown if all is well but the drive already exists 
}
driveLetter = "";
try
{
    driveLetter = myCloudDrive.Mount(25, DriveMountOptions.Force);
}
catch (Exception e)
{
    Trace.WriteLine(e.Message);
}
Trace.WriteLine("disque monté " + driveLetter);

 

Soit tout faire sur le cloud, en écrivant le code approprié. Voila un exemple de code que vous pouvez rajouter dans votre Worker Role pour créer un repository aprés le démarrage du serveur :

Process svnad = new Process()
  {
     StartInfo = new ProcessStartInfo(Path.Combine(svnroot, @"svnadmin.exe"), " create " + driveLetter + "test")
     {
        UseShellExecute = false,
        WorkingDirectory = svnroot,
        RedirectStandardOutput = true,
        CreateNoWindow = true
      }
   };
   svnad.Start;
   svnad.WaitForExit();
   svnad.Dispose();

Vous pouvez aussi créer un Web Role avec une page d’administration qui exécutera ce code, qui permettra ainsi de créer de nouveaux repository.

Et créer d’autres pages web d’administration qui permettront de gérer les droits de vos repository SVN.

La classe qui sert à copier le contenu du container vers la localresource :

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.WindowsAzure.StorageClient;

namespace StoreFoldersInBlobs
{
    public class Folder
    {
       private string LocalPath;
       private CloudBlobContainer container;

       private string GetLocalPath(string uri)
       {
           string path = LocalPath;
           // skip domain and container
           // note that this would almost certainly break running against dev storage (where paths look different)
           foreach (var segment in new Uri(uri).Segments.Skip(2))
           {
               path = Path.Combine(path, segment);
           }
           return path;
       }
       public Folder(string _localpath,CloudBlobContainer _blobcontainer)
       {
           LocalPath = _localpath;

           container = _blobcontainer;
       }
       public void CopyContainerToFolder()
       {
         var cloudBlobs = container.ListBlobs(new BlobRequestOptions() 
         { UseFlatBlobListing = true, BlobListingDetails = BlobListingDetails.Metadata }).OfType<CloudBlob>();
         foreach (var blob in cloudBlobs)
         {
             var path = GetLocalPath(blob.Uri.ToString());
             Directory.CreateDirectory(Path.GetDirectoryName(path));
             blob.DownloadToFile(GetLocalPath(blob.Uri.ToString()));
         }
       }

    }
}
 

Maintenant vous êtes prêt à propulser votre serveur SVN dans les nuages.

Mais ce n’est qu’une premiére étape, il serait de possible d’y ajouter un serveur de build, de test et de mettre tout votre processus d’intégration continue dans les nuages.

Mais cela c’est une autre histoire. Si vous êtes intéressés par cette idée, que vous êtes intéressés par un serveur SVN dans les nuages ou que vous désirez mettre votre serveur d’intégration continue dans les nuages n’hésitez pas à me contacter, ou à ajouter vos remarques dans les commentaires.

Tags:

Suivez les annonces Azure de Steve Ballmer aux MsDays en live sur ZeCloud

Demain matin le 7/10/10 à 9h30, suivez en direct sur ZeCloud depuis cette page, l'intervention de Steve Ballmer lors des Microsoft Days Paris. 

 

Tags:

Azure Camp le 18 octobre au campus Microsoft

Retrouvons nous le 18 octobre au campus Microsoft, pour ce premier Azure Camp de rentrée 2010.

Les Azure Camps sont des évènements fédérateurs dont l'objectif final est de produire des applications Métier en opensource pour Windows Azure.

Il s'agit de mêler pédagogie (exposé sur une fonctionnalité, retour d'expérience par des expérimentés), pratique (réalisation de modules / applications) et esprit communautaire (développement de concert et publication du code sur CodePlex).

Les Azure Camps s’adressent donc aussi bien aux débutants qu’aux passionnés expérimentés.

Nouveau lieu mais aussi nouvel horaire, l’Azure Camp aura lieu de 15h à 18h ( et au delà pour ceux qui veulent)

Thomas Conté Architecte Evangéliste sur la platefome Windows Azure sera présent.

Le programme :

15h : Conférence d’introduction: Présentation des nouveautés de la plateforme Azure

15h30 : Brainstorming entre les participants pour décider des projets.

16h à 18h : Coding Party : A la fin, le but est d’avoir un début d’application (ou une appli complète) qui compile et dont on peut faire une démo.

Après 18h: Ce sera l’occasion d’échanger entre les participants.

Donc ne manquez pas cet Azure Camp ce sera  l’occasion de démarrer de nouveaux projets, et de partager les retours d’expériences des projets précédents. Et quelques surprises seront au rendez vous.

Un pc portable au minimum pour 2 personnes est requis avec les outils nécessaires pour développer sur Azure.

L'adresse du Campus Microsoft :

39 quai du Président Roosevelt

92130 Issy les moulineaux France

Pour se rendre chez Microsoft c’est très simple, c’est juste à coté d’une gare de  RER, du tram et du métro, retrouvez toutes les informations pour vous y rendre sur leur site.

Pour s’inscrire un simple mail suffit à Azurecamp@zecloud.fr avec vos  nom et prénom, ou un message sur Twitter.

Restez connectés sur ZeCloud pour plus d’infos dans un prochain post.

Tags:

Un nouveau rendez vous Windows Azure au MTC

Un nouveau rendez vous sur Windows Azure aura lieu mensuellement au  Microsoft Technology Center.

Les Briefings Windows Azure au Microsoft Technology Center Paris 

Microsoft Technology Center
Campus Microsoft France
39, quai du Président Roosevelt
92130 Issy-les-Moulineaux

Retrouvez le détail de l’événement sur le blog de Thomas Conte

Et restez connecté sur ZeCloud, on organise pour Octobre un Azure Camp pour la rentrée.

Tous les détails dans un prochain Post.

Tags:

Migration ZeCloud terminé

ZeCloud est hébergé sur Windows Azure depuis le début de la CTP .  Et cet été avec la fin de la CTP au niveau mondial, le site à dû déménager d'un compte CTP vers un compte payant. Ce qui a pu occasionner quelques problèmes techniques et coupures du site.

Mais maintenant le site est de nouveau complètement opérationnel.

Tags:

TechEd 2010 : Windows Azure un meilleur outillage et les nouveautés de la plateforme

En ce moment a lieu le TechEd North America. Au cours de la Keynote, Bob Muglia a annoncé les dernières nouveautés de la plateforme Azure.

Une mise à jour du SDK et des Outils pour Azure  apporte son lot de nouveautés : 

  • Le support de la version finale de Visual Studio 2010
  • Le support de .Net 4.0
  • Un explorateur du stockage Azure permet de naviguer dans ses tables et ses blobs, malheureusement uniquement en lecture seule.
  • On peut publier sa solution sur Azure directement depuis Visual Studio, plus besoin de passer par le portail.
  • Un outil qui permet de suivre et de gérer l'état de ses services dans l'Explorateur de serveurs, sans passer non plus par le portail
  • IntelliTrace est désormais supporté pour les solutions Windows Azure

La fonctionnalité de mise à jour automatique de L’OS.

Il vous suffit de sélectionner l’option sur le portail, ou de le spécifier dans votre fichier de configuration et l’OS de votre service sera automatiquement mis à jour avec les dernières mises à jour de sécurité. Vous avez aussi la possibilité de choisir des versions précédentes de l’OS correspondant aux anciennes version du SDK sur le portail via le bouton OS settings.

 

Le Windows Azure Content Delivery Network est passé en production.

Les tarifs sont les suivant

  • $0.15 par GB pour les transferts d’Europe et d’Amérique du nord
  • $0.20 par GB pour les autres transferts
  • $0.01 pour 10,000 transactions
  •  

    SQL Azure a aussi son lot de nouvelles annonces

    • Les bases SQL Azure passent à 50GB maximum
    • Le support des données spatiales, les types Geometry et Geometry seront désormais supporté
    • La community preview de Data Sync Service pour SQL Azure est désormais disponible, précédemment annoncé sous le nom de code Huron
    • Microsoft SQL Server Web Manager (SSWM)  a été annoncé, le lancement d’une community preview est prévu pour cet été. Ce sera d’après l’annonce un outil facile à utiliser pour la gestion des bases de données SQL Azure.
    • Le support d’Access 10 permettra la connectivité Access 2010 vers Sql Azure.

    Vous pouvez aussi retrouver les précédentes nouveautés annoncées au REMIX 2010 dans la conférence dédié aux développeurs

    Tags:

    Tout ce que vous avez toujours voulu savoir sur Odata (sans jamais oser le demander)

     

    Voici un  webcast très complet sur Open Data et une présentation de Dallas et le tout en français, enregistré par Thomas Conté.

     


    Interopérabilité des données avec Open Data Protocol
    envoyé par tom_conte. - Vidéos des dernières découvertes technologiques.

    Tags:

    “Dallas” ton univers impitoyable

    Codename “Dallas” c’est l’offre de Data As A Service  d’Azure. Annoncé à la PDC où la CTP à démarré, une CTP2 vient de démarrer après le MIX à Las Vegas.

    L’idée de Dallas à terme c’est d’être la place de marché de l’API avec déjà quelques sources de données intéressantes disponible et toutes gratuites actuellement à l’essai. Je vous propose de m’accompagner dans cette découverte de la CTP.

    Après l’obtention d’un token pour la CTP  et de l’inscription, on obtient sa clé. Le sésame qui permet de consommer les différentes sources de données disponibles.

    image

    On navigue dans un catalogue pour voir toutes les sources de données disponible. Un moteur de recherche est même disponible. Il suffit de cliquer sur subscribe pour y avoir accès.

    image

    Et voila les différentes sources de données auxquels je me suis abonné. Maintenant les choses intéressantes commencent en utilisant la fonctionnalité d’exploration du dataset via le site.

    image

    On peut directement requêter via le site. Ca permet de se faire une idée des données qu’on peut trouver dans les datasets. Dans celui que j’ai choisi on peut récupérer les images prises les petits robots de la Nasa qui sont sur Mars : Spirit et Opportunity. C’est géant il y a de quoi se prendre pour un ingénieur de la NASA.

    image

    En bas de la page un lien permet de télécharger les classes C# de service proxy générées  qui vous permettront en les important dans votre projet d’accéder directement à Dallas depuis votre code sans trop d’efforts.

    Maintenant il ne reste plus qu’a faire travailler son imagination pour construire une application utilisant des vrais images de Mars. Si ça intéresses certains on pourrait faire un Azure Camp spécial Mars en développant un mini jeu vidéo en Silverlight qui permettra de refaire le trajet des petits robots. Avis aux amateurs n’hésitez pas à me contacter si ça vous intéresse.

    Tags:

    Codename “Galactica”

    Microsoft en partenariat avec la Nasa vient de présenter sa nouvelle offre qui va rejoindre la plateforme Azure.

    Une offre révolutionnaire de SaaS (Spaceship as a Service). Ou on louera un vaisseau spatial à la consommation.

    Voici quelques photos obtenues avec la ctp très confidentielle de cette offre :

     mars 1

    mars2

     

    mars 3

    Y’aurait ‘il anguille sous roche.


    Rendez vous très bientôt pour plus d’informations

    [Edit 2/04/2010] Ce post est un poisson d'avril mais ces images sont de vrais images de Mars récupérés via le projet Codename "Dallas" pour plus de détails et pour en récupérer de similaires lisez ce post http://www.zecloud.fr/post/2010/04/02/e2809cDallase2809d-ton-univers-impitoyable.aspx

    Tags:

    Mes TechDays 2010

    C’était 3 jours de rencontres et de conférences. Les TechDays c’est le genre d’événement ou on aimerait pouvoir faire comme sur Azure. Démarrer une deuxième instance de soi même, pour pouvoir assister aux conférences et en même temps être sur le salon.

    Les conférences

    Les conférences plénières ont étés particulièrement suivi. Le grand amphithéâtre était plein avec des gens assis partout dans les escaliers. Vous pouvez voir ou revoir les 3 pléniéres.

    Hormis les plénières j’ai pu assister à quelques conférences :

    Entity Framework 4 : J’ai suivi Entity Framework depuis ses première betas puis à la première version incluse dans .net 3.5 SP1. Mais même dans cette version le produit ne me paraissait pas encore fini. Le designer était loin d’être parfait, puisque bien souvent il fallait éditer manuellement les fichier .edmx pour certaines fonctionnalités. Et des fonctionnalités comme le “lazy loading” ou la pluralisation des noms disponibles dans Linq To Sql ne l’étaient pas dans Entity Framework.

    Mais cette conférence m’a convaincu que beaucoup de critiques faites sur Entity Framework avaient été entendus par Microsoft. Et la nouvelle version qui sera incluse avec .net 4.0 m’a l’air d’être enfin le bon ORM à recommander dans la plupart des scénarios. Ces fonctionnalités sont maintenant disponibles dans la V4 ainsi que la possibilité d’utiliser des objets POCO et beaucoup d’autres nouvelles fonctionnalités .

    Azure AppFabric : Le nom Azure AppFabric me parais un peu confus. Rien à voir avec la “Fabric” d’Azure. A l’origine je pensais que AppFabric c’était un produit pour Windows Server  regroupant les outils qui étaient connus sous les noms de code Dublin et Velocity. En fait Windows Azure AppFabric est un produit complètement distinct de Windows Server AppFabric et correspond à ce qui était précédemment connu sous le nom des .Net Services. C’est à dire le Service Bus et Access control pour la fédération d’identité. La conférence m’a permis de découvrir les derniers changements effectués pour  le service bus:
    Plus de queues qui sont remplacés par les message buffers et  les routers disparaissent.

    Cette conférence m’a aussi permis de rencontrer Thomas Conté que j’ai pu ainsi inviter pour de prochains Azure Camps, qui était accompagné dans cette conférence par Rochdi Chakroun et Geoffrey Daniel dont les démos étaient très réussi.

    Asp.net Mvc 2 : La conférence était réalisé par Daniel Tizon et Rui Carvalho. La première moitié était une présentation générale sur Asp.net MVC et la seconde moitié dédié aux nouveautés de la version 2 : Partial Actions, Areas et Data Annotations. 
    Si le sujet vous intéresse un prochain Azure Camp vous pourrez participer à un projet que j’ai initié en Asp.net MVC 2. Un site mobile pour rechercher des twitt autour de votre position http://twittaround.me à essayer exclusivement sur téléphone mobile.

    Les rencontres sur le stand

    Je n’ai pas pu assister à la session Php, Java sur Azure, mais Xavier Warzee à eu la sympathie de venir me refaire les Démos de Java sur Azure directement sur le stand. Et c’est assez bluffant, en utilisant le tomcat solution accelerator  il est possible d’embarquer tomcat dans Azure ainsi que la version de la JRE désiré, et bien sur son application.
    Et détail amusant, le premier serveur d’intégration continue dans les nuages que j’ai vu, est le “Hudson” publié sur Azure que Xavier Warzee a présenté dans ces démos.

    On s’est aussi lancé un challenge, organiser un Azure Camp dont l’objectif sera de porter Jboss sur Azure. Avis aux passionnés de Java si l’idée vous tente contactez moi ou envoyez un mail à azurecamp@zecloud.fr.

    Beaucoup de rencontres avec plein de personne intéressés par les Azure Camps à Paris et en province. Donc j’espère qu’on pourra concrétiser tous les projets dont on à parlé sur le stand. N’hésitez pas à me recontacter pour des azure camps en province.

    La plateforme est très attractive mais on a aussi abordé les sujets qui fâchent, les tarifs sont un peu cher pour un petit service. Les offres gratuites, MSDN et Bizspark sont bien pour découvrir la plateforme, tester faire des maquettes mais ne permettront pas d’aller beaucoup plus loin. Et il manque encore d’une offre communautaire, mais je pense que toutes ces remarque seront entendues. Et si vous voulez faire vous aussi entendre votre voix sur le sujet je vous invite à aller voter sur http://www.mygreatwindowsazureidea.com qui est le site officiel pour cela.

    Comme ça vous pourrez dire comme dans la pub que Windows Azure c’était votre idée.

    Et enfin un grand merci à Wilfried Woivré qui était sur le stand avec moi pendant les 3 jours.

    Tags: