LinkedIn E-mail RSS

Push to Press

Amis kinecteurs bonsoir,

 

Je viens de tomber sur un petit bout de code créé par un Sud Africain : « Vuyiswa Maseko ».

Ca ressemble à ce que j’avais dû faire chez Exakis : un push pour appuyer sur un bouton.

Vous trouverez toutes les informations ici : http://channel9.msdn.com/coding4fun/kinect/Push-to-Press-with-the-Kinect-for-Windows-SDK-17?utm_source=dlvr.it&utm_medium=twitter

La plus grande force de ce « plugin » c’est le curseur WPF qui est à mon sens bien plus evolué que ce que j’avais pu faire chez Exakis !

Bonne soirée :)

 

Windows 8 et Windows Phone 7

Récemment, j’ai fait le grand saut. Je suis passé sur Windows 8.

Cet article n’est pas là pour vous dire ce que j’en pense, mais plutôt de vous parler du problème de compatibilité entre Windows 8 et le SDK Windows Phone 7.

Vous aurez sans aucun doute des soucis pour installer le SDK WP7 sur votre ordinateur. Deux solutions s’offrent à vous :

  1. Revenir sur Windows 7
  2. Ou bien, suivre les instructions ci-dessous

Au cas ou vous choisiriez la deuxième solution (comme moi) vous trouverez ci-dessous les instructions pour résoudre les problèmes d’installation et d’exécutions.

  1. Installez VS 2010 (si ce n’est pas déjà fait)
  2. Installez VS 2010 SP1 (si ce n’est pas déjà fait)
  3. Téléchargez et installez le client Games for Windows Marketplace
  4. Téléchargez et installez XNA Game Studio 4.0
  5. Téléchargez et installez Windows Phone 7.1 SDK (dans la langue de votre Visual Studio, sinon, vous aurez VS 2010 express d’installé.)
  6. Téléchargez la mise à jour 7.1.1 du SDK Windows Phone et installez-la.

Suivez bien cet ordre et vous ne devrez plus avoir de soucis :)

 

TFS preview

Un petit post pour mes collègues de 3ème année d’EPITECH.

En Janvier, vous allez commencer votre module de .NET.
Le but : faire un Windows Media Player.

Ce projet est à faire par groupe de 3 ou 4 sur une période de 4 mois. Donc forcément, un source control est indispensable.
Je vous propose de jeter un œil à TFS.

Qu’est-ce que TFS ?

D’après nôtre cher Wikipedia :

Team Foundation Server (TFS) est une forge logicielle éditée par Microsoft permettant la gestion des sources, la gestion des builds, le suivi des éléments de travail, la planification, la gestion de projet et l’analyse des performances. Il a pour but d’augmenter la productivité des développeurs, lesquels doivent utiliser la suite Visual Studio.

Vu que c’est directement compatible avec Visual Studio, pourquoi ne pas essayer (vous aurez ainsi testé tous les gestionnaires de sources du marché).

Je vous conseille donc de jeter un oeil aux tarifs de Microsoft pour TFS ici, et de regarder ici ce que TFS propose.

Comme vous l’aurez remarqué, il y a une version gratuite. Ensuite, vous n’avez qu’à suivre les instructions pour vous inscrire, vous aurez un hébergement privé, gratuit, illimité, et même compatible avec Git.

Perso, c’est ce que j’utilise pour mes projets, et il faut bien le dire c’est moins cher et moins pénible que d’avoir TFS sur son propre serveur.

Enjoy :)

[EDIT : si vous utilisez VS 2010 comme moi, jetez un coup d'œil à ca pour utiliser TFS 2012.]

 

Omnilogie et Windows Phone

Omnilogie est un site lancé en 2009 par Neamar. Jetons un coup d’oeil à la définition sur le site :

L’omnilogie… un néologisme du xxie siècle. D’un côté, omni, un préfixe pour indiquer “le tout”. De l’autre, logie, suffixe apposé sur toutes les disciplines se réclamant d’un discours savant. Le résultat ? L’omnilogie, une science du tout, et paradoxalement du rien.

Le principe est simple, chaque jour un article sort sur un sujet complètement différent. J’ai été rédacteur sur ce site lors de ses débuts, mais j’ai du arrêter à cause de mes études.

Alors pourquoi ce site mérite-t-il un article me direz vous. Tout simplement car Neamar a commencé à exporter son site sur plateforme mobile.

Evidement, je lui ai proposé de m’occuper de la version Windows Phone. Je sens que je vais bien m’amuser.

 

MVVM Slider and MediaElement

En mars dernier, j’ai fait un post à propos d’un behavior qui permettait de binder un MediaElement et un Slider.

Pour rappel, le problème venait du fait que la Dependency Property Position du ?MediaElement est en lecture seule. Donc si vous voulez faire avancer la chanson avec un slider (comme dans 90% des lecteurs audio) il faut outrepasser ca.

C’était le but de ce behavior. J’ai eu beaucoup de question sur mon code et je dois avouer que le code fourni dans ce post pouvait parfois être déroutant.

Du coup, j’ai pensé à vous chers lecteurs, je vous ai fait une nouvelle solution toute propre Vous pouvez la télécharger ici : MVVMSliders Solution

Bon courage pour l’implementation. :)

 

Un petit tour en Irlande

Bonjour à tous,

J’ai réussi ma troisième année, et à EPITECH, la quatrième année est l’année de l’international. J’ai personnellement choisi d’aller en Irlande à l’université de Dublin Institute of Technologies (DIT).

Je devrai en juin 2013 avoir mon premier diplôme post bac d’IT Management.
Je ne sais pas si je vais ouvrir beaucoup mon Visual Studio durant cette année car les cours sont beaucoup plus théoriques et portent sur le management, mais ça ne sera qu’une courte pause.

Pour information, voici les cours que j’ai choisis :

  • Project management
  • Mobile Application Development
  • Strategic Management
  • Communication and Teamwork
  • Strategic information systems
  • Software quality insurance
  • Business decision Making
  • Entrepreneurship

Je vous dis donc, à très bientôt sur mon blog.

 

Des vacances ? Jamais !

Je viens de me rendre compte aujourd’hui que ca faisait un bail que j’avais pas posté. Avec mon stage, j’ai pas eu le temps de faire grand chose sur mon temps personnel.

Mais du coup pendant ces 5 mois, de nouvelles idées sont apparues, de nouveaux projets sont arrivés. J’espère que j’aurai le temps d’en réaliser avant mon départ en Irlande.

Donc ne vous inquiétez pas, les posts arrivent et les projets vont bientôt reprendre :)

 

WPF, MVVM, MediaElement et Slider

Récemment à l’ecole, on nous a demandé deveopper un Windows Media Player 2.0 qui doit gérer une bibliothèque de musique de vidéos et d’image.

Mon groupe et moi même, avons donc choisi de faire une architecture en MVVM et d’utiliser un mediaElement pour la lecture de ses différents fichiers.

Sauf que très vite, je me suis rendu compte d’un problème. La propriété Position du MediaElement n’est pas une DependencyProperty. De ce fait, impossible de faire un binding sur la position.
Apres quelques recherches sur mon moteur de recherche préféré, j’ai trouvé comment résoudre ce problème, mais seulement avec du code behind … En MVVM … Youpi …

Bref, un début de contournement aurait été :

<MediaElement Grid.Column="1" Name="MediaElem" Source="path/vers/ma/musique.mp3" />
<Slider Grid.Column="1" x:Name="SoundSlider" Minimum="0" Maximum="{Binding ElementName=MediaElem,Path=NaturalDuration.TimeSpan.TotalSeconds}"
Value="{Binding Path=Position, ElementName=MediaElem, Converter={x:Static converters:PositionToValueConverter.Instance}, Mode=TwoWay}" />

Sauf que cela pose deux problèmes. Premièrement, à la création de ma page, le média n’est pas chargé donc le maximum du Slider est égal à 0. De plus, le Slider ne se met pas à jour automatiquement.

Pas évident à traiter pour un apprenti du .NET. Donc du coup, pour vous éviter ce genre de souci, je vous propose une solution parmi tant d’autre : l’utilisation d’un behavior.

Je vois passe les formalités sur ce qu’est un behavior, son utilité et son utilisation. Mais l’idée est de faire un behavior héritant du MediaElement afin de pouvoir utiliser les contrôles associés et de pouvoir ajouter des Dependancy Property.

Ci dessous le code C# : MediaElementBehavior

    public class SliderBehavior : Behavior<MediaElement>
    {

        //une DP pour la position
        public static readonly DependencyProperty PositionProperty =
            DependencyProperty.Register("Position", typeof (TimeSpan), typeof (SliderBehavior),
                                        new PropertyMetadata((d, e) =>
                                                             ((SliderBehavior) d).PropertyChanged((TimeSpan) e.OldValue, (TimeSpan) e.NewValue)));
        // une autre pour le maximum
        public static readonly DependencyProperty MaximumProperty =
            DependencyProperty.Register("Maximum", typeof (double), typeof (SliderBehavior), new PropertyMetadata(default(double)));

        // les proprietes qui vont avec

        public double Maximum
        {
            get { return (double) GetValue(MaximumProperty); }
            set {SetValue(MaximumProperty, value);}
        }

        public TimeSpan Position
        {
            get { return (TimeSpan) GetValue(PositionProperty); }
            set
            {
                SetValue(PositionProperty, value);
            }
        }

        private readonly Timer _timer = new Timer(1000);

        public void PropertyChanged(TimeSpan oldValue, TimeSpan newValue)
        {
            AssociatedObject.Position = newValue;
        }

        //Quand le behavior est utilise, on initialise tout.

        protected override void OnAttached()
        {
            base.OnAttached();
            _timer.AutoReset = true;
            _timer.Elapsed += _timer_Elapsed;
            Position = AssociatedObject.Position;
            AssociatedObject.MediaOpened += MediaOpened;
            _timer.Start();
        }

        private void MediaOpened(object sender, RoutedEventArgs e)
        {
            Maximum = AssociatedObject.NaturalDuration.TimeSpan.TotalSeconds;
        }

        private void DispatcherTimerResync()
        {
            Position = AssociatedObject.Position;
        }

        //on utilise un timer pour changer la position toute les secondes.
        void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Dispatcher.Invoke(new Action(DispatcherTimerResync));
        }

        protected override void OnDetaching()
        {
            _timer.Stop();
            _timer.Elapsed -= _timer_Elapsed;
            base.OnDetaching();
        }
    }

Rien de techniquement compliqué là dedans, mis à part la declaration de la DP (sans doute ce qui m’as pris le plus de temps). On déclare un behavior qui herite de MediaElement, et deux Dependency Property qui nous interressent.

Enfin, le Code XAML :

<MediaElement Grid.Column="1" Name="MediaElem" Source="D:\Musique\Musique\Eluveitie\2012 - Helvetios\14 - Alesia.mp3">
                <i:Interaction.Behaviors>
                    <behaviors:SliderBehavior x:Name="sliderDP"/>
                </i:Interaction.Behaviors>
</MediaElement>
<Slider Grid.Row="1" x:Name="SoundSlider" Minimum="0"
                Maximum="{Binding ElementName=sliderDP, Path=Maximum}"
                VerticalAlignment="Center"
                Value="{Binding Path=Position, ElementName=sliderDP, Converter={x:Static converters:PositionToValueConverter.Instance}, Mode=TwoWay}" />

Vous remarquerez que cette fois, je n’effectue plus mon binding sur le MediaElement mais sur le Behavior.

Désormais, le MediaElement en MVVM ne devrai plus être un problème :)

[EDIT : vous trouverez le code complet ici]

 

La MUG Lyon dissèque Kinect

Le 26 janvier dernier, j’ai organisé une conférence sur Kinect en partenariat avec le MUG (Microsoft User Group de Lyon).
Le MUG a pour but de réunir les passionnés des technologies Microsoft tous les quatrièmes jeudi du mois autour d’un thème particulier. Chaque réunion s’articule autour d’une présentation technique par des experts. C’est l’occasion pour chacun de débattre d’échanger, et d’entretenir sa veille sur un thème passionnant et innovant.

En une demi-heure, j’ai présenté au MUG le SDK Kinect et comment il était possible de développer des applications pour Kinect.

Vous pouvez revoir la conférence avec le lien ci dessous :

On en parle :

 

Migrer vos applications Kinect

Je vous le disais il y a 15 jours, Kinect For Windows est sortie. Maintenant le plus difficile reste à venir puisqu’il vous faut migrer vos applications du SDK bêta 2 vers le SDK final. Pour cela il faut faire face à l’important refactoring fait par Microsoft Research.

Pour vous aider dans  travail fastidieux, Rob Releyea a écrit un article sur les différences entre les 2 SDKs. Vous pouvez voir cet article ici !

Si vous n’avez pas trouvé votre bonheur, il vous reste toujours la documentation du SDK et le README qui se trouve dans le dossier « Documentation » du dossier d’installation de Kinect.

Bon courage !