Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Article : Créer des Splash Screens sous Silverlight

Encore un article tout chaud à peine démoulé ! Le sujet aussi est brûlant : Avec l'arrivée prochaine de la version 3 Silverlight est un environnement qui a le vent en poupe... Puissant et hyper agréable à programmer, surtout accompagné de la suite Expression, Silverlight est un vrai plaisir.

Raison de plus pour savoir comment enrichir vos belles applications avec des Splash Screens originaux !

Comment ? Vous saurez tout en lisant ce nouvel article que je vous ai concocté : Conception de Splash Screens sous Silverlight (PDF 22 pages avec source des exemples VS 2008/Blend 2 sp1)

Bonne lecture !

 

(voir aussi le billet sur la façon de centrer un splash)

Silverlight 3 beta disponible !

La bêta de Silverlight 3 est disponible ! De nombreuses améliorations promises sont là et bien plus...

On trouve bien sur l'accélération matériel pour les video HD, le support de la 3D, le binding direct entre objets dans le code XAML, les effets Pixel Shader (flous, ombrage, plus création d'effets custom par le développeur), application des thèmes plus pratique et theme cascading, effets supplémentaires pour les animations (custom effect programmable), une soixantaine de contrôles supportant les thèmes (grille de données et plein de choses !), le nouveau contrôle Data Form pour simplifier la gestion des fiches de saisie et la validation des données, communication entre plusieurs plugin SL sur une page directement sans passer par le serveur, mode de fonctionnement hors browser permettant à une appli SL d'être installée comme une appli desktop, possibilité de stockage local, de mode hors connexion, de contrôle automatiquement de nouvelles versions, etc, etc. J'en oublie plein...

Bref, un déferlement de nouveautés toutes plus importantes les unes que les autres, et bien entendu un Blend 3 en vue, mieux intégré à VS 2010, avec la nouvelle fonction de Sketchflow pour modéliser rapidement des maquettes d'appli par exemple, l'importation Photoshop/Illustrator...

Si 2008 a été un cru d'exception avec VS 2008, SQL Server 2008, Silverlight 2 et j'en passe, Microsoft nous réserve une année 2009 fantastique avec VS 2010, Blend 3, et Silverlight 3 !

Pour goûter tout de suite aux plaisirs de SL3, vous pouvez télécharger tout le nécessaire dès maintenant :

Bon Dev, et Stay Tuned !

Unit Testing et Silverlight 2

Les applications Silverlight ont le même besoin que les autres d'être testées ! Et même s'il reste possible de tester de façon séparée tous les objets métiers (en utilisant le Unit Testing de Visual Studio), tester une application Silverlight en cours de fonctionnement ne s'avérait pas tout aussi simple.

Unit Test Framework for Silverlight

Ce Framework est une solution construite par des développeurs pour des développeurs, pour les aider à construire des applications riches et des composants pour Microsoft Silverlight 2. Le Framework est actuellement disponible en tant que binaires téléchargeables à utiliser dans vos propres applications. Microsoft avait d'abord sorti ce Framework avec le code source et les tests unitaires pour les contrôles Silverlight lors de la conférence MIX'08 à Las Vegas.

Compatibilité

Le Framework de tests unitaires est compatible avec Microsoft Silverlight 2. Il est utilisable sous Windows et Mac. Et il tourne sous les navigateurs suivants: Safari, Mozilla Firefox, et Internet Explorer.
Que demander de plus ? !

Simple, puissant et extensible

Le Framework permet :
  • d'exécuter des tests unitaires à l'intérieur du navigateur Web
  • de tester les contrôles riches et l'ensemble de la plate-forme Silverlight
  • de faire des tests asynchrones

 

sample application screenshot

Plus d'information

Téléchargements

Le code source du Framework est maintenant intégré au Silverlight Toolkit.
Aussi: de nouveaux templates à télécharger, et à lire, les breaking changes.

Un exemple d'application Silverlight "bien de chez nous" !

Le nombre des applications Silverlight augmente de jour en jour mais il est vrai que les exemples de réalisation en français ne sont pas encore légion. J'ai donc décidé de mettre en ligne une petite application de démonstration !

Comme c'est avec les vieux pots, parait-il, qu'on fait les meilleurs soupes, je pense que celle-ci va être délicieuse ! En effet, je suis reparti de l'idée d'un ancien exemple réalisé à cette époque lointaine sous Delphi Win32, un Web Service des codes postaux français qui avait eu un très grand succès (Microsoft l'avait d'ailleurs utilisé pour des Techdays afin de montrer la compatibilité entre un Web Service Delphi et le framework .NET qui venait tout juste d'émerger...).

Il était donc finalement naturel de reprendre cette bonne idée mais en la modernisant radicalement. C'est ainsi que j'ai le plaisir de vous annoncer que la démonstration "Les Codes Postaux Français" est ligne aujourd'hui. Bien entendu il ne s'agit plus seulement d'un Web Service (aujourd'hui réalisé avec WCF), mais aussi d'un frontal réalisé avec Silverlight 2.

Pour jouer avec l'application suivant ce lien : les Codes Postaux Français sous Silverlight.

Vous pouvez aussi consulter ce petit PDF de présentation (dont le texte se retrouve dans la about box de l'application): Codes Postaux Français.pdf (482,07 kb)

Amusez-vous bien !

[EDIT] Le titre de ce billet doit s'entendre dans le sens "enfin une démo en français sur un thème français" ce qui était rarissime au moment de l'écriture de celui-ci, et certainement pas comme une quelconque exaltation de sentiments nationalistes ou franchouillards. Personne ne me l'a dit, mais c'est moi qui, en ce jour de janvier 2010, en relisant le post hors de son contexte me fait la réflexion à moi-même... Citoyen du monde plus que français, ayant en horreur le nationalisme et les débats sur l'identité nationale, qui ne signifie rien en tant que terrien, je tenais à apporter cette petite précision pour lever toute forme d'ambiguité ! [/EDIT]

Silverlight 2 for Mobile : Une CTP pour le 1er timestre 2009 !

Il y a encore quelques jours je vous informais de la mise à jour française des outils pour Silverlight 2 et j'en profitais pour rappeler qu'il s'agit d'une solution multi plateforme unique en son genre. Une voix s'est fait entendre pour rappeler que sous Linux ce n'est pas encore au niveau de SL 2, c'est vrai. Mais preuve de ce dynamisme multi plateforme c'est maintenant au tour de Silverlight pour Mobile d'être annoncé par MS !

Et l'avancée est de taille puisque il n'y aura pas besoin de modifier son code pour qu'une application SL puisse tourner sur Mobile, même si elle utilise des vidéos. C'est incroyable quand on sait que sur un Mobile la place est réduite pour arriver à y faire entrer le framework .NET, même la version allégée de SL. Prouesse technique donc. Et encore plus d'ouverture pour les développeurs.

Autre annonce de taille, Silverlight est pour l'instant une technologie "navigateur", mais il semble que les équipes en charge de ce produit désire le faire évoluer en quelque chose de stand-alone, hors de tout navigateur. Une plateforme .NET multi OS fonctionnant directement sur Mac, PC, Linux, Mobile ? Il est vrai que techniquement il "suffit" de se passer du browser. Mais quelle perspective ! Avec WCF et les sockets pour la communication la panoplie semble alléchante.

Pour ce qui est des plateformes mobiles supportées, on retrouve bien entendu Windows Mobile 6.x. Là aussi, bien que les choses ne soient pas arrêtées, il semblerait que le support Windows Embedded CE soit sous le coude des développeurs SL...

Si vous voulez en savoir plus je vous conseille la video de "Silverlight 2 for Mobile" enregistrée aux dernières PDC et déjà diffusée sur le célèbre Channel 9 !

Contre la riposte graduée, secouez vos sénateurs (1 minute et 1 clic)

Si vous lisez ce billet régulièrement vous savez que j'aime de temps en temps gueuler un coup contre des choses qui me scandalisent. Aujourd'hui il s'agit de la riposte graduée qui se décide dans notre dos. Il ne faut pas laisser faire le gouvernement qui transforme notre démocratie en dictature : une peine appliquée sans jugement est un acte non plus de république bananière mais de simple dictature !

L'association ODEBI, vous la connaissez certainement, a organisé une pétition par email qui arrive directement chez les sénateurs. Il faut la signer, c'est un acte citoyen élémentaire.

L'adresse de la pétition est là : http://www.odebi.org/new2/?page_id=493

Le texte de la pétition pour que vous puissiez vous rendre compte du sérieux de la démarche avant de cliquer sur le lien plus haut pour vous engager dans cette lutte:

Les sénateurs français doivent réaliser que la riposte graduée est un mécanisme répressif totalement contraire aux droits les plus élémentaires des citoyens:

- Chaque citoyen a droit à un procès équitable avant toute sanction: c’est le juge indépendant et impartial, et lui seul, qui est le gardien des libertés.

- La liberté d’expression et d’information est un droit fondamental: il est scandaleux que la commission des affaires culturelles du sénat tente de le nier en affirmant qu’aucun texte communautaire n’affirme que l’accès à internet serait un droit fondamental. L’accès à internet permet d’exercer cette liberté d’expression et d’information: supprimer cet accès est donc à l’évidence une atteinte majeure à cette liberté. Cette sanction est totalement disproportionnée.

- La commission des affaires culturelles précise que la suspension ne concerne que l’accès à domicile, c’est à dire l’accès familial: il s’agit donc bien de punir les familles, et elles seules. Aucune démocratie ne peut accepter d’infliger des punitions collectives, ce qui a été rappelé par Michel Rocard le 22 avril 2008: « Pour moi, la coupure éventuelle de l'Internet est une punition collective, principe interdit par tous nos systèmes de droit. La lettre des textes est claire et il n’y a aucun problème sophistiqué de compréhension là derrière. »

Les sénateurs français doivent donc garantir:

- que seul le juge peut décider d’une sanction.

- que la suspension d’accès d’une famille, punition collective, soit clairement prohibée.

C'est simple, court, je pense que vous pensez la même chose, alors signez la pétition et faite la circuler autour de vous !

 

Silverlight 2 Final est enfin là (sous-titré : Youpi!)

Bon, on l'attendait, on mitonnait des petites pages avec la beta 2, on rongeait notre frein, et on attendait... Mais voilà ça y est, enfin un vrai concurrent pour Flash est né : Silverlight 2.0 finale est enfin releasée !

Silverlight 2.0 c'est tout Silverlight 1.0 avec un petit plus qui tranforme un joujou sympa en une vraie bombe : SL 2 embarque un mini framework .NET et peut donc être programmé en C# et non en Javascript (beurk!) qui est à la programmation ce que les plats congelés sont à la gastronomie.

Si SL 1.0 était du même tonneau que Flash ou Flex avec leur ActionScript (enfant adultérin de JavaScript et d'un Basic des années 70), SL 2.0 relève le débat en proposant un plugin portable (PC/Mac) multi-browser (FireFox, IE, Safari..) doté d'un vrai langage de programmation et d'une vraie plateforme de développement. Adobe a un grand savoir-faire en matière de graphisme mais pour les outils de développement et les langages ils n'ont jamais réussi a dépasser le niveau des macros de Excel, - et encore c'est très puissant les macros de Excel !

Microsoft n'a, de ce côté là, aucun souci à se faire, ils disposent aujourd'hui de l'une des plus belles et plus cohérentes plateformes jamais créées (.NET) servie par des outils de luxe comme Visual Studio 2008, SQL Server 2008, la suite Expression, etc..., le tout piloté par C# 3.0 dont on ne fait plus l'apologie.

Il reste néanmoins que MS n'a pas vraiment encore l'expérience d'un Adobe en ce qui concerne le graphisme. Rome ne s'est pas faite en un jour. Il serait mentir qu'affirmer que SL 2 est aussi bien doté que Flash ou Flex à ce niveau. Potentiellement oui bien sûr, dans la pratique pas tout à fait. Par exemple SL 2 ne sait pas appliquer d'effets aux images, il faut "pré traiter" les images sous un autre logiciel (Design ou ... Photoshop) et exporter un PNG, juste pour faire un drop shadow par exemple c'est pas encore le top, il faut l'avouer.
[EDIT]Il faut malgré tout ajouter que Microsoft travaille sur un Pack de composants additionnels pour Silverlight, pack qui devrait compter à termes environ 100 contrôles supplémentaires, et, cerise sur le gateau, ce pack sera mis en ligne via CodePlex avec tout son code source ! Il ne faut pas oublier non plus que SL 2 ajoute à SL 1 des contrôles de base indispensables comme la Datagrid. SL 2 est, de par le fait, la vraie version 1 utilisable sérieusement de Silverlight[/EDIT]

Mais tout cela sera de l'ordre du souvenir d'ici quelques versions cela ne fait aucun doute. Et ne termissons pas ce jour de joie, on peut dès maintenant créer des applications graphiquement alléchantes avec SL 2 (dont la force est le vectoriel plus que le bitmap précisons-le), il suffit d'avoir un bon graphiste sous la main, le look c'est une question d'art bien plus que d'outil...

Il n'en reste pas moins vrai que le jour est historique car Silverlight 2 est une solution intelligente, puissante et crédible qui offre enfin une alternative à la domination de Adobe sur ce créneau et qui permet d'échapper aux usines à gaz de type Ajax ou Javascript juste pour avoir quelque chose de moins laid qu'une page HTML de base !

Longue vie à Silverlight !

L'annonce officielle pour les anglophones : http://www.microsoft.com/presspass/press/2008/oct08/10-13Silverlight2PR.mspx

[EDIT]Le site web pour télécharger tout ce qu'il faut pour développer est là, sur la page Get Started du site officiel de Silverlight, faites chauffer vos connexions ![/EDIT]

Bon Web tout animé et haut en couleurs avec SL 2 et Stay Tuned !

 

Internationalisez vos blogs et pages Web en 1 seul click avec Windows Live Translator

On aimerait parfois offrir certaines informations dans une langue étrangère mais traduire toutes les pages d'un site représente un coût non négligeable que seules de très grosses entreprises aux moyens financiers à la mesure d'une telle opération de communication peuvent se permettre.

Il existe toutefois une parade, certes pas absolue mais très pratique, elle s'appelle Windows Live Translator. En ajoutant un simple bout de script à vos pages les visiteurs pourront les consulter dans leur langue. J'ai ajouté cette fonction au présent blog (tout en haut à gauche), vous pouvez donc "jouer" avec pour vous rendre compte par vous mêmes de la qualité (assez bonne mais très variable malgré tout!) des traductions proposées.

Un Web totalement international, libre et sans frontières, c'est un rêve non ? (sauf si on est au gouvernement chinois bien entendu).

Stay Tuned !

Votre compte Gmail est-il piraté ?

Gmail, paradis et enfer tout à la fois. Paradis de disposer d'un compte mail ubiquitaire disponible de partout tout le temps, de bénéficier d'archives totales sur des années. Enfer du courrier privé et confidentiel accessible depuis partout avec un simple login, enfer de violation de la vie privée lorsque Gmail lui-même lit vos mails pour mieux cibler la pub qu'il affiche à côté pendant que vous les consulter... Mais le risque le plus grand est bien entendu que quelqu'un d'autre lise vos mails.

Avec un système de type Outlook, pas de problème, tout est sans cesse téléchargé sur votre PC et toute indiscrétion suppose que l'indélicat puisse accéder à votre machine en votre absence. A vous de mettre des mots de passe qui la protège et l'affaire est jouée. Mais avec Gmail ?

Histoire certainement de nous faire oublier qu'ils violent eux-mêmes notre intimité en lisant nos mails pour afficher des pubs ciblées, Gmail vient de mettre en place un système permettant de vérifier les accès à son compte.

Regardez tout en bas de l'écran, sous l'indication de votre utilisation de l'espace disque :

En cliquant sur "Details" vous obtiendez un écran vous permettant de voir les IP des derniers accès avec l'heure mais vuos pourrez aussi couper immédiatement l'accès à toutes les IP différentes de celle de la machine sur laquelle vous êtes. Utile au bureau si on a laissé sa page Gmail ouverte sur une autre machine 2 étages plus haut, pratique pour vérifier que personne n'a piraté votre compte (consultation depuis des hot spots publiques par exemple), etc.

Voici la capture de l'écran de détail :

 

Amis paranos, bonne journée !

Et.. Stay Tuned !

Mieux utiliser les "Master Page" de ASP.NET

Quelle belle invention que les pages maîtres (Master Page) introduites sous ASP.NET 2.0 ! Quand on pense aux contorsions nécessaires pour avoir un menu ou des bandeaux lattéraux sans cet ajout décisif, et pire quand on sait comment il fallait faire ( et qu'il faut encore faire) sous d'autres environnements...

Bref les pages maître c'est super. Mais voilà, il arrive que les pages de contenu doivent accéder à des champs de la page maître, soit pour y lire certaines informations, soit pour en écrire (cas d'un label d'info se trouvant sur une MP dont le contenu est changé par la page courante par exemple).

La (mauvaise) méthode habituelle 

Prenons l'exemple du label (que vous remplacerez mentalement par ce que vous voulez du moment qu'il s'agit d'un objet de la MP). On rencontre très souvent un code qui ressemble à cela dans les pages détails :

Label info = this.Master.Page.FindControl("labelInfo") as Label;
if (info != null) { info.Text = "information sur la page en cours..."; }

 Et encore, le test sur le null est plutôt un luxe qui ne se voit pas dans tous les codes !

Bien entendu cette méthode fonctionne, mais elle n'est franchement pas propre. Au moins pour une raison, c'est qu'une simple erreur de frappe dans le FindControl et c'est le bug, pas trop grave si le test sur null est ajouté comme dans l'exemple de code ci-dessus, mais bug quand même. En aucun cas le compilateur ne peut détecter l'erreur. Dommage pour un environnement fortement typé !

Mais ne riez pas trop vite, on rencontre des horreurs bien pire que le code montré ici : certains n'hésitent pas à transtyper la propriété this.Master.Page pour accéder directement à l'objet ! Et comme un mauvais chemin ne peut mener qu'à faire des âneries de plus en plus grosses, les éléments d'interface étant protected par défaut, pour que ça passe (en force!) les mêmes sont donc contraints de modifier la visibilité de l'objet convoité en le faisant passer en public. Dire que c'est du bricolage est très largement en dessous de la réalité.

Heureusement il existe une solution très simple qui marche et qui permet d'écrire un code de bien meilleur qualité, c'est la directive MasterType, trop peu connue et encore moins utilisée (il y a même des pervers qui en ont entendu parlé mais qui ne s'en servent pas, si, ça existe!).

La (bonne) méthode à utiliser

Elle se décompose en deux temps :

  • Temps 1 : Créer des propriétés dans la page maître
  • Temps 2 : utiliser la directive MasterType

La propriété 

Continuons sur notre exemple du label, il conviendra alors d'écrire quelque chose du genre (dans le code de la page maître donc) :

 public Label InfoLabel { get { return labelInfo; } }

Honnêtement il y a encore mieux à faire, personnellement je n'aime pas voir des objets exposés de la sorte. On créera plutôt une propriété de ce type :

public string Info { get { return labelInfo.Text; } set { labelInfo.Text=value;} }

Chacun ses préférences et ses justifications, nous venons en tout cas de répondre à la première exigence pour faire un code plus propre.

La directive

Dans le fichier .aspx de la page de contenu, il suffit d'ajouter la directive suivante :

<%@ MasterType VirtualPath="~/blabla/LaMasterPageDeMonSite.master" %>

Cette simple directement va instruire l'environnement du vrai type de la page master, et, Ô magie !, c'est la propriété this.Master qui est automatiquement typée correctement !

On peut dès lors reprendre le même code que celui proposé en introduction (celui utilisant FindControl) et le réécrire proprement en bénéficiant d'un typage fort et de tous les contrôles dignes d'un environnement comme ASP.NET :

this.Master.InfoLabel.Text = "info affiché sur la page maître";

On suppose ici avoir utiliser la méthode consistant à publier le label via une propriété. Avec la seconde méthode proposée, encore plus propre, le code sera encore plus simple et lisible :

this.Master.Info = "info affiché sur la page maître";

Conclusion

C'est pas plus joli comme ça ? ! Si, forcément...

Alors maintenant que vous savez que MasterType existe, n'hésitez pas à vous en servir... et ...

Stay Tuned !