Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Fun : Le nouveau MacBook Wheel

Voici une petite vidéo assez marrante produite par le site theonion.com. Steve Jobs (qui a d'ailleurs décidé hier de quitter temporairement Apple pour raisons médicales), annonce le nouveau produit branché d'Apple : le MacBook Wheel.


Apple Introduces Revolutionary New Laptop With No Keyboard

Posté le par RaptorXP | 8 commentaire(s)
Classé sous :

Question SQL Server pour les experts

Voici une question qui m'a intrigué au moment où je rédigeais mes articles sur SQL Server. J'ai posé la question sur le forum MSDN, mais je n'ai pas obtenu de réponse satisfaisante, je profite donc des experts SQL Server du réseau codes-sources pour peut être avoir une réponse à cette question.

Créons d'abord une table :

CREATE TABLE dbo.Persons
    (
    Id int NOT NULL IDENTITY (1, 1),
    FirstName varchar(50) NOT NULL,
    LastName varchar(50) NOT NULL
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Persons ADD CONSTRAINT
    PK_Persons PRIMARY KEY CLUSTERED (Id) ON [PRIMARY]
GO

Insérons ensuite 5000 enregistrements :

INSERT INTO [dbo].[Persons] (FirstName, LastName) VALUES ('First name', 'Last name')
GO 5000

Consultons ensuite les DMV pour connaître le nombre de pages dans le clustered index :

SELECT * FROM sys.dm_db_index_physical_stats (db_id(), object_id('dbo.MyTable'), null, null, 'DETAILED')

Le résultat dans mon cas est le suivant :

index_type_desc index_depth index_level page_count record_count
CLUSTERED INDEX
2
0
24
5000
CLUSTERED INDEX
2
1
1
24

Nous avons donc un clustered index à deux niveaux. Le niveau racine a bien entendu une page, et 24 entrées correspondantes chacune à une page du niveau suivant, puisque le second niveau a 24 pages.

Exécutons ensuite la requête suivante avec les statistiques IO activées :

SELECT * FROM [dbo].[Persons]

Les statistiques indiquent :

Table 'Persons'. Scan count 1, logical reads 26, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Un scan est normalement effectué de la façon suivante : la page racine va être lue de façon à localiser la première page du niveau terminal de l'index, puis toutes les pages sont scannées dans l'ordre. On devrait donc avoir un logical read pour la racine, puis 24 pour le niveau terminal, donc 25 reads au total.

Avec la requête suivante :

SELECT TOP(50) * FROM [dbo].[Persons]

Seulement 2 pages sont lues (la racine, puis la première page du niveau terminal) :

Table 'Persons'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

J'obtiens donc ce que j'attendais.

Ma question est donc : pourquoi est-ce que dans le premier cas, on observe un 26e read ?

Posté le par RaptorXP | 4 commentaire(s)
Classé sous : ,

3 articles sur SQL Server (Data Structures, Scans and seeks, Data access strategies)

SQL Server 2008En tant que développeurs (non spécialisés en SQL), nous avons souvent, malgré tout, à utiliser SQL, sans toutefois comprendre comment cela fonctionne vraiment. Diagnostiquer les problèmes de performance qui peuvent survenir avec SQL Server, lire un plan d'exécution, ou encore savoir quel index créer sont des sciences à part entière.

Je profite donc d'une formation donnée par Kimberley Tripp que j'ai suivie le mois dernier sur SQL Server pour partager un peu ce que j'ai pu apprendre. Il s'agit d'une série de 3 articles surtout orientée sur les bases de la lecture de plans d'exécution (les deux premiers articles permettent de comprendre le 3e). Sans connaissances poussées, il est en effet souvent assez difficile de savoir pourquoi une certaine requête est lente, même avec le plan d'exécution sous les yeux, et surtout que faire pour la rendre plus rapide.

Les artiles sont rédigés en Anglais.

- Partie 1 : SQL Server Data Structures

- Partie 2 : SQL Server: Scans and seeks

- Partie 3 : SQL Server: Data access strategies

Posté le par RaptorXP | 0 commentaire(s)
Classé sous : ,

Amazon lance son offre cloud computing pour Windows

AWSAfin de répondre à Windows Azure, Amazon avait annoncé il y a un mois une version de EC2 fonctionnant avec Windows Server et SQL Server. Je viens aujourd'hui de recevoir un mail annonçant le lancement de la version bêta de cette offre.

Les tarifs par instance fonctionnant avec Windows Server sont les suivants:

Instance Type
Windows
Windows with Authentication Services
Standard Small (Default)
$0.125 per hour
$0.25 per hour
Standard Large
$0.50 per hour
$0.75 per hour
Standard Extra Large
$1.00 per hour
$1.50 per hour
High CPU Medium
$0.30 per hour
$0.50 per hour
High CPU Extra Large
$1.20 per hour
$2.00 per hour

Pour ce qui est des instances fonctionnant avec Windows Server et SQL Server Standard, les tarifs sont les suivants:

Instance Type
Windows
Windows with Authentication Services
Standard Large
$1.10 per hour
$1.35 per hour
Standard Extra Large
$2.20 per hour
$2.70 per hour
High CPU Extra Large
$2.40 per hour
$3.20 per hour

Une instance Windows Server est bien entendu suffisante si vous n'avez besoin que de SQL Server Express.

L'instance "Standard Small" se trouve donc 25% plus chère avec Windows qu'avec Linux ou Unix. Attendons maintenant de voir les tarifs que propose Microsoft pour Windows Azure (Microsoft avait annoncé lors du PDC que ceux-ci seraient "compétitifs").

Amazon fournit un SDK (C#, .NET 2.0) pour permettre à votre application de s'exécuter dans le contexte de EC2. Pour s'inscrire pour la bêta: http://aws.amazon.com/windows/.

Windows 7 fonctionne sans problèmes sur un "petit" PC

Windows 7 sur Eee PC Steve Sinofsky avait annoncé durant sa présentation sur Windows 7 que le nouvel OS de Microsoft consommait beaucoup moins de mémoire que Vista. Pour le prouver, il a montré un Netbook disposant de 1 Go de mémoire, et a annoncé que Windows 7 prenait moins de la moitié de la mémoire disponible.

Laptop Mag a voulu vérifier par eux-même et a installé Windows 7 Ultimate (en version pré-beta, je le rappelle) sur un Eee PC, équipé d'un processeur Atom et de 1 Go de mémoire (difficile de faire plus petit PC de nos jours). Leurs conclusions sont très positives. L'OS a démarré en 58 secondes, contre 40 secondes pour un XP fraichement installé (mais un XP avec un minimum de programmes installés arrive également a une minute). Pour ce qui est de l'occupation mémoire, Steve Sinofsky avait raison puisque Windows 7 n'occupait que 485 Mo de mémoire, sur le 1 Go disponible. L'OS leur a paru fluide a utiliser. Ils ont cependant noté des problèmes de drivers (à l'instar de Vista), puisque ceux-ci ne sont fournis que pour Windows XP.

Je rappelle qu'une partie des 485 Mo de mémoire utilisée sont en fait des programmes préchargés par la fonction Superfetch de Windows, qui permettent de charger plus rapidement certains programmes, mais cette mémoire se libère en cas de besoin. Ces améliorations en termes de mémoire occupée sont en partie dues au nouveau mode de démarrage de service disponible avec Windows 7 (Triggered startup), qui permet de ne lancer un service que lorsque certains évènements se produisent.

Windows 7 est également bien optimisé pour l'économie d'énergie puisqu'il exploite les dernières technologies des CPU Intel et AMD qui permettent "d'éteindre" des cores quand ils ne sont pas utilisés, ce qui le rend encore plus intéressant pour un nettop.

Ces bons résultats sont d'autant plus encourageants que Windows 7 est encore en version pré-beta, et de nombreuses optimisations auront lieu plus tard dans le cycle de développement.

Source: http://blog.laptopmag.com/eee-pc-1000h-runs-windows-7-well.

Posté le par RaptorXP | 5 commentaire(s)
Classé sous : ,

Microsoft annonce le nom commercial de Windows 7

Windows 7Le PDC, très attendu cette année, arrive à grand pas. Microsoft en a profité pour annoncer le nom commercial que portera le successeur de Windows Vista, pour l'instant connu sous le nom de code Windows Seven. Son nom sera... Windows 7. Désolé, pas de grosse surprise.

La dernière fois qu'une version "grand public" de Windows a porté un numéro de version comme nom, c'était pour Windows 3.11. Après les millésimes (95, 98) et les noms (XP, Vista), les équipes de marketing de Windows ont préféré la simplicité pour nommer Windows 7, et on ne leur en voudra pas.

C'est également la première fois qu'un OS de Microsoft porte le même nom commercial que son nom de code.

Par contre, l'histoire ne dit pas si son nom en France sera prononcé "Windows Seven" ou "Windows Sept".

Source: http://windowsvistablog.com/blogs/windowsvista/archive/2008/10/13/introducing-windows-7.aspx

Posté le par RaptorXP | 6 commentaire(s)
Classé sous : , ,

Microsoft ouvre un centre de développement à Paris

Dublin DatacenterSteve Ballmer a profité de son passage à Paris pour annoncer aujourd'hui la création d'un centre européen sur les technologies de recherche (STC, Search Technology Centre). Le centre sera réparti sur 3 sites : Londres, Munich... et Paris. Le centre Français sera situé à Issy-les-Moulineaux, donc à proximité du siège de Microsoft France qui doit s'y installer en 2009.

L'ouverture de ce centre fait partie d'un certain nombre d'investissements que Microsoft effectue en Europe, dont entre autres, 500 millions de dollars pour le nouveau Datacenter de Dublin, l'ouverture d'un centre de développement en Norvège (annoncé il y a quelques jours), le laboratoire de Microsoft Research à Cambridge et les centres de développements de Dublin et Copenhague. Aujourd'hui, plus de 2000 chercheurs et développeurs travaillent pour Microsoft en Europe.

Microsoft compte consacrer 8,5 milliards de dollars au R&D sur la recherche pour l'année fiscale 2009, un domaine où Microsoft est (encore) un challenger.

Source : http://www.microsoft.com/emea/presscentre/pressreleases/EuropeanRDInvestmentPR_021008.mspx.

Posté le par RaptorXP | 0 commentaire(s)

Fun : Casser YouTube

Voici une petite vidéo marrante sur Wario Land : Shake It sur Wii. Comme je ne peux pas vraiment l'inclure dans la page (je tiens à mon blog), je vous propose juste une capture d'écran.

Pour voir la vidéo, suivez le lien : http://www.youtube.com/experiencewii.

Wii Wario Land Shake It Youtube

Pendant la vidéo, vous pouvez même essayer de manipuler les morceaux du site avec votre souris.

Posté le par RaptorXP | 4 commentaire(s)
Classé sous : , ,

Nouvelle campagne publicitaire pour Windows : I'm a PC

Tout le monde se souvient de la campagne de publicité lancée par Apple "I'm a Mac, I'm a PC".

Face à la mauvaise réception de Windows Vista par les consommateurs, Microsoft avait lancé il y a peu le Mojave Experiment, ainsi que la campagne mettant en scène Jerry Seinfield et Bill Gates. Aujourd'hui, Microsoft continue avec le marketing autour de Windows, et lance une toute nouvelle campagne qui cette fois ci est une réponse directe à "I'm a Mac".

La campagne prend l'approche suivante : Si le Mac est le jeune branché, le PC, c'est monsieur tout le monde. Si vous allez faire un tour sur Msn.com, vous verrez à quoi ressemble cette nouvelle campagne. Des centaines de portraits sont affichés autour sur site, et chaque portrait met en scène littéralement n'importe qui, du boucher du coin, à Tony Parker, en passant par un neurochirurgien ou encore une étudiante en droit.

Un site a également été ouvert pour cette campagne : http://imapc.lifewithoutwalls.com/. Sur la première page, vous remarquerez Sean, le personnage en costume mis en scène par Apple dans "I'm a Mac", avec le slogan "A PC is not a stereotype".

Le site vous donne également la possibilité d'uploader une photo ou une vidéo en utilisant une Webcam, afin d'aider à remplir la mosaïque "I'm a PC".

I'm a PC

Posté le par RaptorXP | 6 commentaire(s)
Classé sous : , ,

Lancement de Windows HPC 2008 Server dans quelques jours

Windows HPC Server 2008Microsoft s'apprête à lancer le 22 septembre prochain une nouvelle version de Windows Server 2008 : Windows HPC 2008 Server.

Il s'agit en fait du successeur de Windows Compute Cluster Server 2003. Cette édition de Windows Server s'adresse surtout à la recherche et au domaine de la finance, son lancement aura d'ailleurs lieu lors de la conférence "High Performance on Wall Street".

Site officiel : http://www.microsoft.com/hpc/default.aspx

Posté le par RaptorXP | 0 commentaire(s)

Google sort son navigateur

Google Chrome Cela devait arriver un jour ou l'autre, Google a annoncé hier sur son blog officiel (http://googleblog.blogspot.com/2008/09/fresh-take-on-browser.html) qu'il travaillait sur un navigateur. Baptisé Google Chrome, ce nouveau navigateur sera open source. Les développeurs de Google ont en effet utilisé de nombreux composants issus entre autres de Apple WebKit et Mozilla Firefox. Le blog donne peu d'informations à propos de ce nouveau navigateur, mais on apprend par exemple que les différents onglets utiliseront chacun un processus différent, une idée cette fois ci prise à Internet Explorer 8. Google a également développé un puissant moteur Javascript "pour les applications Javascript que ne sont pas possible dans les navigateurs d'aujourd'hui".

Google Chrome est pour l'instant disponible en beta pour Windows mais devrait sortir pour Linux et MacOS plus tard.

Posté le par RaptorXP | 3 commentaire(s)
Classé sous : , ,

Facebook lance son nouveau design

Nouvelle interface Facebook Facebook est en train de mettre en place la nouvelle interface pour leur site. Elle est encore optionnelle, vous pouvez y accéder à cette adresse : www.new.facebook.com. La migration qui devait commencer la semaine du 14 juillet a pris plus ou moins une semaine de retard, mais au vu du site à cette date (qui était déjà accessible aux développeurs d'applications), cette semaine était vraiment nécessaire (par exemple, certaines version de IE7 étaient détectées comme incompatibles avec le site).

La version actuelle du nouveau profil est toujours très buggée, mais fonctionne quand même beaucoup mieux qu'il y a deux semaines. Les développeurs d'applications étaient avertis de cette migration depuis plusieurs mois, puisque la nouvelle plateforme n'est pas entièrement compatible avec la version précédente. Par exemple, le système d'ajout d'application a disparu. Il faut maintenant juste "autoriser" une application. Cela donne le droit à l'application de lire les informations de l'utilisateur disponibles publiquement. Pour avoir plus de permissions (envoi de notifications, envoi d'emails, ajout d'une boite dans le profil...), il faut pour chacune d'elle que l'application demande la confirmation à l'utilisateur.

Sinon au niveau du profil, il est maintenant organisé en onglets. Il y a 4 onglets fournis par Facebook : Wall, Info, Photos, Boxes. L'onglet Wall rassemble le news feed et le Wall. L'onglet informations contient vos informations professionnelles, études, etc... L'onglet Boxes contient toutes les boites que vos applications avaient tendance à ajouter à votre profil. Les applications peuvent aussi définir leurs propres onglets qui peuvent être ajoutés sur votre profil.

Une nouvelle feature est que les applications bénéficient maintenant d'une infrastructure qui permet de faire traduire son application par ses utilisateurs. Même si elle est buggée au point d'être inutilisable, cette fonctionnalité ouvre des perspectives très intéressantes.

Sinon, personnellement, je ne le trouve pas spécialement plus beau que le précédent (je préférais même le précédent). La migration de votre profile est optionnelle pour l'instant, mais devrait être obligatoire d'ici quelques semaines.

Posté le par RaptorXP | 0 commentaire(s)

C# 3.0 Best Practices : Utilisation de var

Un collègue qui utilise Resharper m'a demandé aujourd'hui pourquoi Reshaper lui suggérait tout le temps de replacer une déclaration explicite du genre :

StringBuilder sb = new StringBuilder();

en une déclaration implicite en utilisant le mot clé var :

var sb = new StringBuilder();

Je n'utilise pas moi même Resharper et cette suggestion m'a beaucoup surprise.

En cherchant un peu sur internet, je suis tombé sur le blog d'un Product Manager de Resharper (http://resharper.blogspot.com/2007/08/resharper-vs-c-30-implicitly-typed.html). Voici les règles qu'ils utilisent pour décider quand afficher ce conseil :

Some cases where it seems just fine to suggest var are:

  1. New object creation expression: var dictionary = new Dictionary<int, string>();
  2. Cast expression: var element = (IElement)obj;
  3. Safe Cast expression: var element = obj as IElement;
  4. Generic method call with explicit type arguments, when return type is generic: var manager = serviceProvider.GetService<IManager>()
  5. Generic static method call or property with explicit type arguments, when return type is generic: var manager = Singleton<Manager>.Instance;

Les développeurs de Resharper ont donc décidé de suggérer d'utiliser var quasiment à chaque fois que le compilateur peut inférer lui même le type de l'expression. C'est à dire dans 99% des cas. De toute évidence, ils se sont ici trompés, comme le montre les spécifications du langage (http://msdn.microsoft.com/en-us/library/bb383973.aspx) :

Overuse of var can make source code less readable for others. It is recommended to use var only when it is necessary, that is, when the variable will be used to store an anonymous type or a collection of anonymous types.

Le mot clé var est un outil amusant qui permet de gagner quelques secondes en tapant le nom d'un type, mais il ne doit surtout pas être utilisé à ces fins. Si vous le faites, le code va perdre beaucoup en lisibilité, et vous diminuez vos chances de détecter des erreurs à la compilation (par exemple, en changeant le type de retour d'une fonction, vous pouvez changer sans le vouloir le type d'une variable locale typée avec var, et changer la surcharge appelée par la suite dont cette variable est l'argument).

var doit être utilisé uniquement quand vous n'avez pas d'autre choix, c'est à dire dans les cas suivant :

  • Le type d'une expression est un type anonyme

var product = new { Id = 25, Price = 32.0 };

  • Le type d'une expression est un type générique dont un des paramètres est un type anonyme

var products = from id in ids
               select new { Id = id, Price = prices[id] };

Et évitez également d'avoir une confiance aveugle en ce genre d'outils, ils peuvent aussi parfois vous induire en erreur.

Posté le par RaptorXP | 7 commentaire(s)
Classé sous : , ,

L'Egypte accueille Imagine Cup 2009

Imagine Cup EgyptPlusieurs infos ont été annoncées à propos d'Imagine Cup 2009. D'abord, la finale se déroulera au Caire. Elle aura lieu à la fin de l'été (à cause de la température en Juillet et Août en Egypte, j'imagine).

Le thème de cette année sera un condensé de tous les thèmes des années précédentes : Imagine a world where technology helps solve the toughest problems facing us today.

Sinon, au niveau des catégories, il y a du changement :

  • Plus de catégorie Interface Design
  • Une nouvelle catégorie Mashup
  • La catégorie Algorithm est renommée en Robotics & Algorithms
  • Plus de catégorie Project Hoshimi

Alors Richard, il est passé où le professeur ?

Posté le par RaptorXP | 1 commentaire(s)
Classé sous : ,

Diablo 3 : c'est officiel

Le suspense était à son comble Samedi, quand Blizzard a annoncé son nouveau jeu, et il s'agit bien de Diablo 3.

Voici le trailer qui a été dévoilé pour le Blizzard WWI ce week end :


Video: Diablo 3 - Cinematic Trailer

J'avais remarqué quelques influences de films de science fiction dans les premières images de Starcraft II. Là, on peut noter une certaine inspiration du film de Peter Jackson, Le seigneur des anneaux, notamment la nouvelle apparence de Diablo, qui ressemble dans la vidéo à un mélange entre le Balrog et Sauron, ou encore la cité de Caldeum qui ressemble assez à Minas Tirith.

Blizzard a déjà annoncé deux des 5 classes de personnages qui seront disponibles (le bon vieux barbare et le sorcier docteur). Le jeu s'appuiera toujours sur des environnements générés aléatoirement. Les graphismes passent complètement en 3D (je ne précise pas que d'autres résolutions que 800x600 seront disponibles). Diablo 3 utilisera aussi le moteur physique Havoc, et il sera possible d'interagir avec l'environnement, par exemple détruire certains murs, etc... Il sera bien entendu toujours possible de jouer sur Battle.net.

Je ne vous laisse pas languir plus, voici les 20 minutes de jeu présentées le week end dernier :

La date de sortie n'a pas été annoncée, mais de mon point de vue personnel, je ne pense pas le voir sortir avant 2011 (snif).

Posté le par RaptorXP | 0 commentaire(s)

Bill Gates s'en va

Après 33 ans de carrière, aujourd'hui est le dernier jour de Bill Gates à Microsoft. Il va maintenant se consacrer à plein temps à sa fondation. Bill Gates reste quand même président du groupe et gardera un rôle consultatif.

Je rends donc un hommage à ce grand homme qui a su devenir l'homme le plus riche du monde en commençant dans son garage, et qui aura marqué et façonné les 30 premières années de l'histoire de l'informatique.

Bill Gates 1

Bill Gates 1

Bill Gates 1

Bill Gates 1

Posté le par RaptorXP | 1 commentaire(s)
Classé sous : ,

Diablo 3 serait le prochain titre de Blizzard ?

J'avais parlé il y a plus d'un an de l'annonce de Blizzard de sortir Starcraft II. Si celui-ci poursuit paisiblement son cycle de développement, il existe néanmoins des rumeurs évoquant une date de sortie du 3 décembre. Personnellement, je pencherais plutôt pour Juin ou Juillet 2009.

Mais ce n'est pas le sujet de ce post. Si vous visitez le site officiel de Blizzard, vous noterez un étrange Splash Screen.

Diablo 3 ?

Celui-ci est en fait une énigme dont la solution est probablement connectée à l'annonce que compte faire Blizzard samedi prochain pour le Blizzard Worldwide Invitational se tenant à Paris.

Les spéculations vont bon train. Jusqu'à présent, deux explications sont possibles :

  • Comme expliqué sur Clubic, on peut remarquer de tout petits détails sur l'images, et ces détails semblent être des runes, comme celles que l'on collectionnait dans Diablo 2 Lord Of Destruction. Il s'agit précisément des runes Shael et Hel. Cela voudrait donc dire que Blizzard planche actuellement sur Diablo 3.
  • Sinon, le site WorldOfWar.net pencherait plutôt pour l'extension de World Of Warcraft (Wrath of the Lich King)

Chaque jour jusqu'à samedi, l'image va devenir de plus en plus précise jusqu'à ce que quelqu'un devine de quoi il s'agit. Donc, suspense jusqu'à samedi.

Silverlight 2 : petit coup d'œil au VisualStateManager

La grande nouveauté de Silverlight 2 beta 2, c’est le VisualStateManager. Dans WPF, les animations d’un ControlTemplate étaient relativement compliquées a effectuer : il fallait définir un trigger puis un storyboad, le plus souvent en écrivant du markup puisque Blend ne gérait pas tous les types de triggers. De plus la complexité des triggers augmentait avec le nombre d’états possibles pour le contrôle.

Silverlight 2 beta 2 introduit un concept beaucoup plus simple et efficace dans la plupart des scénarios. Le VisualStateManager, comme son nom l’indique est basé sur une approche orientée états. Son fonctionnement est tellement plus pratique que l'approche par triggers de WPF que le VisualStateManager va être intégré à WPF plus tard cette année.

Le principe est le suivant : chaque contrôle définit un certain nombre d’états par des attributs. Par exemple, le bouton définit les états suivants :

[TemplateVisualState(Name = "Unfocused", GroupName = "FocusStates")]
[
TemplateVisualState(Name = "MouseOver", GroupName = "CommonStates"
)]
[
TemplateVisualState(Name = "Pressed", GroupName = "CommonStates"
)]
[
TemplateVisualState(Name = "Focused", GroupName = "FocusStates"
)]
[
TemplateVisualState(Name = "Disabled", GroupName = "CommonStates"
)]
[
TemplateVisualState(Name = "Normal", GroupName = "CommonStates")]

Chaque état appartient à un groupe, et à chaque instant, le contrôle est dans un et un seul état dans chaque groupe (par exemple Unfocused et Disabled).

Pour chaque état, il est possible de définir un storyboard. Ce storyboard sera joué lorsque le contrôle entrera dans cet état. De plus il est possible de définir une durée de transition entre chaque pair d'états. Lorsque le contrôle passera d'un état A à un état B, une animation linéaire de transition de la durée choisie sera jouée, et le storyboard de l'état B sera lancé lorsque l'animation de transition sera terminée.

Tout cela est entièrement définissable par Blend dans la partie gauche de l'interface :

Il est également possible d'utiliser le VisualStateManager pour un UserControl.

J'ai développé une petite application à l'occasion d'une démo sur le VisualStateManager. Il s'agit d'une implémentation du Jeu de la Vie de Conway.

Le user control CellControl est une simple ellipse, avec une opacité de 0 par défaut (donc invisible) :

<UserControl x:Class="GameOfLife.CellControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
<Ellipse HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Fill="#FF12BB05" Stroke="#FF000000" Opacity="0" x:Name="ellipse" MouseMove
="OnMouseMove"/>
</
UserControl>

Il utilise deux états : Alive et Dead. Il est très facile de définir des storyboards pour ces deux états en utilisant la propriété attachée VisualStateManager.VisualStateGroups de l'élément racine de l'UserControl. Dans notre cas, j'ai utilisé les storyboards suivants :

Pour l'état Alive, je veux que la cellule devienne visible. Blend génère par défaut une animation de 1 milliseconde vers la valeur voulue (opacité de 1). Je veux également que la couleur oscille. Le storyboard utilisé pour l'état Alive est donc le suivant :

<vsm:VisualState x:Name="Alive">
  <Storyboard
>
    <DoubleAnimation BeginTime="00:00:00" To="1" Duration="00:00:00.001" Storyboard.TargetName="ellipse" Storyboard.TargetProperty
="(UIElement.Opacity)"/>
    <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" AutoReverse="True" RepeatBehavior
="Forever">
      <SplineColorKeyFrame KeyTime="00:00:00" Value
="#FF13A108">
        <SplineColorKeyFrame.KeySpline
>
          <KeySpline ControlPoint1="0.5,0" ControlPoint2
="0.5,1"/>
        </SplineColorKeyFrame.KeySpline
>
      </SplineColorKeyFrame
>
      <SplineColorKeyFrame KeyTime="00:00:00.3" Value
="#FF063503">
        <SplineColorKeyFrame.KeySpline
>
          <KeySpline ControlPoint1="0.5,0" ControlPoint2
="0.5,1"/>
        </SplineColorKeyFrame.KeySpline
>
      </SplineColorKeyFrame
>
    </ColorAnimationUsingKeyFrames
>
  </Storyboard
>
</
vsm:VisualState>

Pour l'état Dead, je veut juste que la cellule ait la même apparence que l'apparence de base, je laisse donc le storyboard vide :

<vsm:VisualState x:Name="Dead">
  <Storyboard
/>
</
vsm:VisualState>

Il ne reste plus qu'a définir les temps de transition entre les deux états :

<vsm:VisualStateGroup.Transitions>
 
<vsm:VisualTransition Duration="00:00:00.1" To
="Alive"/>
  <vsm:VisualTransition Duration="00:00:00.25" To
="Dead"/>
</
vsm:VisualStateGroup.Transitions>

Comme nous venons de le voir, l'aspect des deux états est entièrement défini dans le markup. La séparation entre logique et design est donc parfaite. Il ne nous reste plus qu'à pouvoir changer d'état depuis le code. Il est très facile de faire cela :

VisualStateManager.GoToState(this, "Alive", true);

et

VisualStateManager.GoToState(this, "Dead", true);

gameoflife

Pour plus d'info sur le VisualStateManager, je vous conseille de visiter le blog de Christian Schormann.

Posté le par RaptorXP | 0 commentaire(s)
Classé sous : , , , ,

Attachment(s): GameOfLife.zip

Finales Irlandaises d'Imagine Cup

Alors que les finales Françaises d'Imagine Cup se sont déroulées il y a quelques jours (félicitations au passage à l'équipe de Supinfo), les finales Irlandaises se sont quand à elles déroulées il y a plus d'un mois. Il s'agissait par contre uniquement de la catégorie Software Design. La vingtaine d'équipes participantes se sont toutes déplacées à Dublin, jusqu'aux locaux de Microsoft Irelande. Elles ont alors toutes présenté leurs projets aux juges. Les trois meilleurs équipes ont ensuite été annoncées, puis celles-ci ont du présenter leur projets devant le public (cette présentation était plus longue que la première).

Pendant les premières présentations, des stands étaient tenus par les équipes pour présenter leurs projets.

Voici l'équipe du projet Sunny Town qui s'est placée 2e:

Sunny Town

Leur projet est un jeux vidéo éducatif pour les jeunes enfants (école maternelle / primaire) sur le thème de l'environnement. Leur projet était développé en utilisant XNA, et celui-ci était controllable à l'aide d'une WiiMote.

Le projet vainqueur est le projet ParkIT, qui est un service en ligne (utilisable également depuis un mobile), qui indique aux conducteurs quel est la plus proche place de parking libre. L'équipe du projet ParkIT mise sur le fait que beaucoup de carburant est gâché par les conducteurs en ville, tournant en rond pour chercher une place de parking.

Park IT

Ils ont réalisé leur démo à l'aide d'une maquette de parking et des modèles réduits de voitures. Leur dispositif était composé d'une caméra (type webcam), et leur logiciel était capable d'analyser l'image pour déduire quelle place du parking était libre.

On souhaite bonne chance à l'équipe de ParkIT qui affrontera cet été du 3 au 8 Juillet les autres équipes du monde entier.

Une première version de Silverlight pour Linux (Moonlight) disponible

Silverlight MoonlightMiguel de Icaza nous fait savoir sur son blog que la première version de Moonlight, à savoir le portage du plugin Silverlight pour Linux, est disponible. Il s'agit d'une version de Silverlight 1.0. Deux versions sont fournies : une version sans codec, mais facile à installer et une seconde à compiler soi même pour pouvoir utiliser les codesc FFMpeg.

Après Windows, Mac et Linux, des versions pour PocketPC et Symbian S60 sont encore prévues.

Pour l'installation de Moonlight, c'est par ici: http://www.go-mono.com/moonlight/.

 
Posté le par RaptorXP | 0 commentaire(s)


Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01