# Tuesday, October 07, 2008

Captcha en Silverlight

Encore un nouveau venu dans SLExtensions. Voici un contrôle de captcha qui se branche sur le service gratuit www.recaptcha.net.

Le principe

recaptcha-api-diagram 

  1. 1 L’utilisateur télécharge l’application silverlight qui contient le contrôle de captcha.
  2. 2 Le contrôle de captcha récupère une image plus une clé de cryptage du serveur d’image de www.recaptcha.net.
  3. 3 Le contrôle de captcha renvoie au serveur web (par POST, Get, Webservice, comme vous voulez), la clé de cryptage optenue auprès de www.recaptcha.net ainsi que les mots saisis par l’utilisateur.
  4. 4 Le serveur web fait un appel au serveur www.recaptcha.net en passant les données venues de l’utilisateur (mots + clé) plus une clé privée. Le serveur reCaptcha valide ou non le captcha. Le serveur fait ensuite (ou non) son traitement.
  5. 5 Retour vers l’utilisateur pour l’informer du résultat.

Le contrôle

<UserControl x:Class="SLExtensions.Showcase.PageRecaptcha"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   xmlns:slec="clr-namespace:SLExtensions.Controls;assembly=SLExtensions.Controls"

   Width="400" Height="300">

    <StackPanel x:Name="LayoutRoot" Background="White">

        <slec:ReCaptcha x:Name="captcha" PublicKey="6LesLAMAAAAAACjPBtyjD80bwTowvEQrslT8bJvT" HorizontalAlignment="Center" VerticalAlignment="Center" >

            <slec:ReCaptcha.Verifier>

                <slec:ReCaptchaHttpPostVerifier Url="/VerifyCaptcha.aspx" Success="ReCaptchaHttpPostVerifier_Success" Failed="ReCaptchaHttpPostVerifier_Failed"/>

            </slec:ReCaptcha.Verifier>

        </slec:ReCaptcha>

    </StackPanel>

</UserControl>

Pour utiliser le contrôle, vous devez fournir un objet qui implémente l’interface IReCaptchaVerifier. C’est lui qui va se charger de faire l’appel au webservice vers votre serveur. Dans SLExtensions, j’ai ajouté une classe d’exemple qui fait un POST http des informations ainsi que la page aspx qui valide les informations auprès de recaptcha.

#    Comments [0] |
# Friday, October 03, 2008

DeepZoom facile

J’ai rajouté dans le projet SLExtensions une librairie permattant de gérer facilement vos galleries DeepZoom. Il rajoute grâce aux méthodes d’extensions des fonctions utiles comme le positionnement automatique de votre collection, la gestion de la roulette de la souris, le glisser du deepzoom, le zoom sur une image de la collection, etc…

<UserControl x:Class="SLExtensions.Showcase.PageDeepZoom"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   xmlns:sledz="clr-namespace:SLExtensions.DeepZoom;assembly=SLExtensions.DeepZoom"

   >

    <Grid x:Name="LayoutRoot" Background="White">

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto"/>

            <RowDefinition/>

        </Grid.RowDefinitions>

 

        <StackPanel Orientation="Horizontal">

            <Button Content="Next" Click="Next_Click"/>

            <Button Content="Previous" Click="Previous_Click"/>

            <Button Content="All" Click="All_Click"/>

        </StackPanel>

 

        <MultiScaleImage x:Name="msi" Source="http://labs.ucaya.com/dznantes/dzc_output.xml"

                        Grid.Row="1"

                        sledz:DZExtensions.ArrangeOnFirstMotionFinished="True"

                        sledz:DZExtensions.IsMousePanEnabled="True"

                        sledz:DZExtensions.IsMouseWheelEnabled="True"/>

    </Grid>

</UserControl>

L’activation de la gestion de la souris ainsi que le positionnement automatique des images se fait par des AttachedProperty à déclarer sur le contrôle MultiScaleImage.
Dans cet exemple, j’ai rajouté 3 bouttons permettant de faire un simple slideshow des images deepzoom. Ils exécutent des fontions d’extensions disponibles dans le namespace SLExtensions.DeepZoom.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using SLExtensions.DeepZoom;

 

namespace SLExtensions.Showcase

{

    public partial class PageDeepZoom : UserControl

    {

        public PageDeepZoom()

        {

            InitializeComponent();

        }

 

        private int collectionIndex = -1;

 

        private void Next_Click(object sender, RoutedEventArgs e)

        {

            DZContext context = msi.EnsureContext();

            collectionIndex = (collectionIndex + 1) % context.ImagesToShow.Count;

            msi.ZoomFullAndCenterImage(collectionIndex);

        }

 

        private void Previous_Click(object sender, RoutedEventArgs e)

        {

            DZContext context = msi.EnsureContext();

            collectionIndex = (collectionIndex + context.ImagesToShow.Count - 1) % context.ImagesToShow.Count;

            msi.ZoomFullAndCenterImage(collectionIndex);

        }

 

        private void All_Click(object sender, RoutedEventArgs e)

        {

            msi.ZoomCenter();

        }

    }

}

#    Comments [1] |
# Thursday, October 02, 2008

Second post venu d’ailleurs…

Ca y est je l’ai reçu ! Mon nouveau laptop, un alienware :-)

Je vous le recommande c’est un truc de fou !

Voici les specs et quelques photos :

Processor Intel(R) Core(TM)2 Duo CPU T8100 @ 2.10GHz

Memory (RAM) 4,00 GB

Intel Memory Turbo Cache 1,00 GB

Graphics NVIDIA GeForce 8600M GT

Primary hard disk 120 GB 7200

Windows Vista (TM) Ultimate

Manufacturer Alienware

Model m15x

PIC-0002 

PIC-0004 PIC-0005 PIC-0003 PIC-0006

#    Comments [2] |
# Saturday, September 27, 2008

Internet Explorer 8

La toute dernière version d’Internet Explorer (actuellement en bêta 2) propose quelques fonctionnalités assez intéressantes.

Un dossier a été créé à ce sujet sur msdn http://msdn.microsoft.com/fr-fr/ie/msdn.dossier-ie8.aspx.

Vous y retrouverez également les articles de Thierry et moi :

  - WebSlices : http://msdn.microsoft.com/fr-fr/ie/cc963660.aspx

  - Accelerators : http://msdn.microsoft.com/fr-fr/ie/cc963658.aspx

#    Comments [0] |
# Wednesday, August 20, 2008

UCAYA Tour Next 5

::Ile de la Réunion::

8 Les 3 roches.

#    Comments [0] |

UCAYA Tour Next 4

::Ile de la Réunion::

6 7

La nouvelle (gueule de bois).

#    Comments [0] |

UCAYA Tour Next 3

::Ile de la Réunion::

5  au Col du Taibit.

#    Comments [0] |

UCAYA Tour Next 2

::Ile de la Réunion::

4 au Cirque de Mafate.

#    Comments [0] |
# Saturday, August 16, 2008

Animations AgTweener vs Storyboard

Ces deux manières d'animer ont un comportement différent lorsque l'application silverlight effectue des traitements qui font baisser le taux d'images par seconde.
Petite comparaison du mode de fonctionnement.

Fonctionnement du storyboard

Les storyboards sont basés sur le temps et adaptent les valeurs des animations en fonction de la progression de l'animation.  Si le temps d'assignation de la valeur ou le traitement induit (binding par exemple) est supérieur au frame rate, le storyboard va sauter les frames intermédiaires.

Fonctionnement d'AgTweener

AgTweener utilise un système de "timer" pour animer les objets. L'implémentation aurait pu avoir le même comportement que les storyboard, mais les concepteurs en ont décidé autrement. Le timer interne est basé sur un storyboard de 20ms qui est redémarré chaque fois que l'assignation des valeurs est terminé. Le timing est effectué en comptant le nombre de frame. Même si l'application effectue un traitement coûteux lors de l'assignation de la valeur, on est sur d'avoir une animation de la valeur, au dépend du respect du timing de l'animation.

Conclusion

Lorsqu'une application effectue des traitement coûteux, une animation faite par AgTweener peut donner une impression de fluidité comparé à une animation par storyboard qui va sauter des frames. Si le timing de l'application est important, il vaut mieux alors utiliser des storyboards.

#    Comments [0] |
# Wednesday, August 13, 2008

Rejoignez UCAYA !

Les journées ne sont plus assez longues, nous avons besoin de renfort.

Nous recherchons un développeur plus que motivé et passionné par le code, le web et le café !

Envoyez-nous votre CV à contact[at]ucaya.com.

#    Comments [1] |
# Thursday, July 31, 2008

UCAYA Tour Next 1

::Ile de la Réunion::

3-small  au Piton des neiges : 3070m d' altitude !

#    Comments [0] |

UCAYA Tour

::Ile de la Réunion::

C'est parti !

1-small 2-small

à la plage...

#    Comments [0] |