Dot.Blog

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

Le Web 3.0 = Pas de Web ?

[new:30/05/2012]En attendant de pouvoir sérieusement vous parler de WinRT, je m’intéresse beaucoup en ce moment à l’avenir du développement, tant pour les développeurs que les éditeurs dans la période très troublée que nous vivons depuis deux ans. Depuis plusieurs mois je vous fais part de mes observations, de mes doutes, de mes conseils et j’espère vous aider par mes réflexions à vous forger votre propre opinion. Souvent en décalage avec la pensée unique de l’instant, mes prévisions choquent parfois certains lecteurs. Force est de constater que le Web, donc HTML, a des soucis à se faire et j’en veux pour preuve de nombreux évènements qu’il faudrait être fou d’ignorer...Plus...

HTML 5 : la tragique fin d’un buzz

[new:30/04/2012]HTML 5, l’un des plus gros buzz sur du vaporware des vingt dernières années... Ce buzz prend fin de façon tragique. Il faut rapidement s’en rendre compte pour prendre les bonnes décisions pour le futur de vos développements !Plus...

Se préparer au “big shift” de la stratégie Microsoft

[new:31/12/2011]Tout le monde se souvient de cette petite phrase lâchée par Bob Muglia avant l’été “Our strategy with Silverlight has shifted”, ce qu’on traduirait par “notre stratégie à propos de Silverlight s’est déplacée”. Clair et nébuleux à la fois. La panique a envahi depuis le monde Silverlight, malgré la V5 qui va sortir très prochainement, la question devient “y-aura-t-il une V6 ?”. Mais je crois sincèrement que les vraies questions sont ailleurs. Microsoft a “shifté” sa stratégie, globalement, pas seulement autour de SL. Quelques éléments de réflexion pour mieux comprendre l’avenir. {Nota: le blog a subi une attaque qui a détruit ce billet et tous les commentaires, ceci est donc un nouveau post du même billet} Plus...

SeedFucker, Hadopi et C#

Voici un beau cocktail ! Pouvoir à la fois parler de C#, donc en plein dans le sujet de ce blog, et de Hadopi, un système liberticide non pas dans son fondement (le respect de la propriété intellectuel est un sujet sérieux) mais dans sa forme. Vous commencerez à recevoir vos premiers emails le 21 juin, c’est décidé et c’est en route ! Plus...

Blocage IE avec écran multitouch sous Silverlight

Voici un cas intéressant dont je viens de trouver la solution et que je m’empresse de vous communiquer…

Les écrans multitouch ne sont pas encore légion, sauf chez quelques geeks, dont je suis. Ainsi, pour tester dans un mode proche de la réalité les applications Phone 7 en cours de développement (et faute de téléphones de ce type disponible sur le marché pour l’instant) j’ai acquis un écran 22 pouces IIYama multitouch T2250MTS. C’est très sympa, pas très cher et ça marche vraiment bien de base avec Windows 7 sans installer aucun driver (c’est à dire que Windows 7 possède déjà le fameux driver et que brancher l’USB de l’écran sur le PC suffit sans aucun pilote extérieur ni CD d’installation, c’est beau le progrès !).

L’écran est même fourni avec un stylet qui se cache dans le bas de son boitier, ce qui évite les traces de gros doigts graisseux sur l’écran ! :-)

Bref, tout cela fonctionne à merveille et du premier coup. Quand on arrive sur des zones de saisie et qu’on touche l’écran il y a même un petit symbole de clavier qui apparait pour permettre d’ouvrir un grand clavier virtuel, voire le module de reconnaissance d’écriture. On voit que Windows 7 a été conçu pour investir les Tablet PC… Vraiment cool. Seul bémol, sur un écran vertical manipuler les applis avec les doigts à bout de bras c’est vite crevant… Mais ce n’est pas pour cela que j’ai acheté l’écran, c’est pour utiliser l’émulateur de Phone 7 en mode multitouch (car tester une appli pour téléphone touch avec la souris c’est le meilleur moyen de foirer le design, les doigts sont plus gros et moins précis, il faut y penser à la conception !).

Vous allez me dire c’est quoi le rapport avec Silverlight et Internet Explorer ?

C’est tout simple.

Plantage avec Silverlight ?

Silverlight gère le multitouch. Au moment où internet exploreur se lance et affiche l’application quand je suis en  debug (sous VS ou Blend) je ne sais pas trop quel niveau de sécurité IE reconnaît (en tout cas pas Intranet local car j’ai abaisser toutes les sécurités à ce niveau et cela n’a rien changé) mais à l’activation du plugin Silverlight IE 8 s’arrête, comme planté.

Impossible de s’en sortir. Il faut aller le shooter depuis les processus de Windows ou bien stopper le debug sous VS ce qui a le même effet.

Sécurité cachée !

Et là, l’oeil averti du chasseur de bug voit passer à toute vitesse comme une petite fenêtre cachée sous IE qui, hélas puisqu’on vient de flinguer IE, disparait sans qu’on puisse la lire…

Il y a donc une question qui est posée, en modal, ce qui bloque IE 8. Il “suffit” donc d’accéder à ce dialogue.

Je n’ai pas réussi. Et si on minimise IE pour que ça ne soit plus qu’un petit carré minuscule, on ne voit pas derrière la fenêtre du dialogue… Elle ne vient donc que quand IE est shooté. Bug…

Problème numéro 1: Identifier cette fichue fenêtre.

Ca passe tellement vite que c’est illisible bien entendu.

Ruse : Utiliser l’enregistreur d’écran livré avec Expression Encoder 3 et enregistrer la vidéo du bug pour faire ensuite un arrêt sur image et lire le texte du dialogue…

Ca ne marche pas au premier essai car ça va vraiment vite. Il faut ruser encore plus en modifiant les réglages d’enregistrement de la vidéo, notamment en passant à 100 images secondes et un débit d’au moins 20.000/s.

Là, on finit par choper sur la vidéo un “fantôme” du dialogue plus ou moins opaque selon la chance qu’on a. Mais on l’a eu ! Et que lit-on ?

“Un site Web veut ouvrir un contenu Web en utilisant ce programme sur votre ordinateur” et en dessous : Nom: Composant de saisie tactile ou avec sty…, Editeur: Microsoft Windows.

Le nom du composant n’est pas complet mais on a compris de ce quoi il s’agit. Silverlight, le plugin, au moment du chargement (car la première instruction de l’appli n’est pas encore atteinte, ce que prouve le debugger) doit forcément inspecter la machine pour savoir s’il y a de la vidéo, du son, et tous les périphériques ou facilités utilisées par le plugin. Parmi celles-ci se trouve vraisemblablement le multitouch et la gestion du stylet.

C’est à ce moment que le fameux dialogue est activé pour me demander si je donne le droit ou non à ce module de s’activer. Normalement on dispose sur ce genre de dialogue d’une case à cocher permettant d’indiquer si on souhaite ne plus voir la question.

Hélas, comme IE 8 semble avoir un léger bug, ce fichu dialogue est totalement incessible, on le voit à peine quand on shoote l’application. Et encore faut-il la ruse de la vidéo pour lire de quoi il s’agit.

Comment autoriser l’application bloquante ?

Second problème alors : comment autoriser le programme en question (la gestion du stylet) alors même que le dialogue et sa case à cocher ne sont pas accessibles ?

Réponse : en plongeant dans les arcanes de la gestion de sécurité de IE 8…

Et là, ce n’est pas de la tarte… J’aime bien IE, mais ce n’est pas d’une grande limpidité dès qu’on aborde ce genre de question.

Je vous fait grâce des multiples recherches sur le Web pour arriver à trouver une réponse utilisable. Que je vais maintenant vous exposer car ça peut servir ! (et pas seulement avec un écran multitouch, je suppose que le bug du dialogue doit se voir dans d’autres cas).

Pour faire simple, IE range dans la registry la liste des programmes ayant des droits faibles ainsi que la règle d’élévation de droit qui doit être appliquée. Comment certaines applications arrivent dans cette première liste, c’est un mystère que je n’ai pas essayé d’éclaircir, ce genre de plomberie en informatique me donnant rapidement la nausée. Donc, il existe dans la registry une première liste, elle se trouve là :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Low Rights\ElevationPolicy\

C’est une liste d’ID, donc de GUID. Il faut la balayer pour lire les clés qui correspondent afin de localiser le programme dont on veut changer les droits. (La registry doit être ouverte en mode administrateur cela va sans dire).

Pour ce qui est du stylet, j’ai fini par trouver le coupable, c’est le programme “wisptis.exe” qui se trouve dans %SystemRoot%\System32. Les clés d’un ID sont AppName, le nom de l’appli, ici celui de l’exe (ce qui ne simplifie pas la recherche vu à quel point le nom n’est pas parlant), AppPath, le chemin que je viens d’indiquer et enfin Policy, un DWord codant l’autorisation.

Vous trouverez des explications ici : http://www.hotline-pc.org/mode-protege.html#

Une fois l’application localisée dans cette première liste on a la moitié de la solution. Changer la Policy à ce niveau ne semble pas avoir d’effet (immédiat en tout cas).

Il faut savoir qu’en réalité, pour l’utilisateur courant, IE stocke une seconde liste, similaire, dans une autre clé de la registry :

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Low Rights\ElevationPolicy

L’astuce consiste donc à créer une nouvelle clé dans cette liste en utilisant le GUID repéré dans la première liste puis de recréer à la main les clés, dont Policy à laquelle on donne une valeur dépendant de ce qu’on cherche à obtenir. Pour la gestion du stylet j’ai mis 3, qui semble donner le maximum de droits.

Je reviens sous VS, je lance mon appli SL, et là, Ô magie… mon appli s’affiche et IE ne pose plus l’infamante question cachée…

Et ça marche !

Problème résolu. Comme on ne peut pas dire que la solution est évidente, je pense que la partagée ici sera un jour utile à quelqu’un.

Visiteur qui tombera au hasard d’une recherche Bing ou Google sur cette page et qui gagnera quelques heures de ton précieux temps, n’hésite pas à me laisser un message, ça fait toujours plaisir ! Quant aux fidèles lecteurs de Dot.Blog, le jour “J” j’espère que vous vous rappellerez que ce billet existe !

Et pour d’autres infos le mieux c’est : Stay Tuned !

Une dernière info : Le multitouch de l'écran utilise une barrière infrarouge visiblement, c'est à dire que les doigts ou le stylet coupe une grille infrarouge invisible. Ca marche vraiment bien. Sauf qu'en cette époque estivale, les mouches arrivent ! Et dans ma campagne elles ne sont pas en retard ! Hélas quand une mouche se pose sur l'écran : elle clique ! Ce qui fiche un beau bazard parfois ! Prévoyez ainsi avec l'achat d'un écran de ce type un désinsecteur électrique qui grillera tous ces nuisibles qui prennent votre écran pour un tarmark ! Je sais ça fait un peu rire comme truc... mais le geek n'a pas que des aventures palpitantes, il doit aussi combattre, outre les bugs, les mouches et autres diptères !

Mettez un peu de Live dans votre Windows !

Dans le précédent billet je grommelais un peu sur le système de recherche de fichiers de Windows. Microsoft ne fait pas que des bons choix, la perfection n’est pas de ce monde (ni d’un autre d’ailleurs à mon avis).

En revanche Microsoft a souvent de très bonnes idées, alors après les reproches, les louanges !

Comme vous le savez peut-être Microsoft met à disposition gratuitement un ensemble de services appelés Microsoft Windows Live .

Ces services se présentent sous la forme de logiciels à télécharger ou bien de services Internet. On y trouve Hotmail, la messagerie, Live Mail (remplace outlook express), Messenger, SkyDrive, Favorites, Spaces, Galery et Writer.

Bien entendu tout n’est pas nouveau (hotmail par exemple), et il s’agit pour l’essentiel d’un relookage commercial de MSN. Mais pas seulement.

Prenez par exemple Live Writer (téléchargeable à part), il permet de publier dans tous les blogs que vous possédez de façon centralisée tout en bénéficiant de la correction orthographique, de brouillons, etc. Writer sait même reconnaître le template de chaque blog et vous offre ainsi un espace de saisie ressemblant au look & feel de votre vrai blog dans sa version publiée.

Writer fonctionne très bien avec BlogEngine (le logiciel de blog Open Source en C#) et c’est d’ailleurs avec Writer que je publie maintenant mes billets, c’est bien plus pratique et plus complet que l’éditeur de BlogEngine. La plupart des services de blog sont reconnus automatiquement. On peut aussi visualiser un aperçu du billet en cours d’écriture dans une simulation du blog (mise en page en tout point conforme).

D’autres apprécieront la correction orthographique, d’autres flasheront sur la Galery de photo ou sur SkyDrive qui offre un espace de stockage et de partage de données sur le Web.

Je pense que chacun peut trouver son compte dans Windows Live sachant qu’on peut n’installer qu’un seul module sans être obligé de s’encombrer de toute la suite Live.

Au final, un ensemble de services bien pratiques, ni encombrants ni contraignants, et parmi lesquels il y en a forcément au moins un qui vous sera utile. Alors visitez le site Windows Live et installez les modules de vos choix !

Et Stay Tuned !

Security Essentials enfin disponible ! (un anti virus gratuit)

Il y a un bon moment déjà (nov 2008) je vous parlais dans le billet "Morro .. Vache ? (ou les nuits blanches d'Avast, McAfee et Symantec)" du projet de Microsoft de rendre sa solution de sécurité One Care gratuite, notamment la partie anti-virus. En juin 2009 je vous annonçais (dans le billet "Microsoft Security Essentials en bêta") que la solution Security Essentials était passée en phase béta, mais uniquement aux USA.

Désormais vous aussi vous pouvez utiliser Security Essentials gratuitement ! Simplement en vous rendant sur le site de Security Essentials et en téléchargeant le logiciel. Il existe des versions localisées (en Français entre autres) et l'installation s'effectue en un clin d'oeil. Après le téléchargement des mises à jour et un balayage rapide de vos disques, SE va s'occuper de tous les virus, malwares et autres spywares qui veulent saboter votre PC.

Comparativement à la meilleure solution gratuite alternative utilisée jusqu'à maintenant, Avast, Security Essentials est moins gourmand, plus efficace, mais en revanche s'occupe de moins de choses. Par exemple Avast utilise 7 processus différents pour le mail, les sites web filtrés (anti pub), etc. Lorsqu'on utilise S.E. on ne dispose plus de ces petits avantages qu'on retrouvent soit avec des logiciels gratuits supplémentaires, soit en configurant correctement son PC et son browser !

Personnellement j'ai opté pour cette dernière approche suivant le principe que toute solution de sécurité fiable se doit d'être simple avant d'être sophistiquée... Ainsi, en paramétrant correctement IE8 et le pare-feu de Windows, sans parler bien entendu du paramétrage de la box internet, on arrive à une sécurité certainement aussi totale qu'avec 50 logiciels ultra sophistiqués...

Dans tous les cas, avec Security Essentials, Microsoft s'invite dans le petit monde des anti virus gratuits. Nul doute que la surenchère que cela va imposer à ses concurrents va mettre un coup de pied dans la foumilière un peu trop tranquille qu'était devenu ce marché des anti-virus !

Sortez couvert !

(et Stay Tuned, cela va sans dire :-) )

Silverlight 3 : Gestion des cookies

Silverlight propose un espace de stockage privé pour chaque application sur la machine cliente. Cet espace s'appelle l'Isolated Storage (stockage isolé, car protégé et isolé du reste de la machine cliente). C'est dans cet espace qu'il est conseillé de sauvegarder les données propres à l'application (j'y reviendrai dans un prochain billet). Toutefois on peut amené pour certaines informations à préférer le stockage sous la forme de Cookies traditionnels. On peut aussi avoir besoin de lire certains cookies posés par l'éventuelle application hôte en ASP.NET par exemple.

Quelles que soient les raisons, il peut donc s'avérer utile de manipuler les cookies depuis une application Silverlight.

L'application exemple ci-dessous vous permet de tester en live cette fonctionnalité :

[silverlight:source=/SLSamples/Cookies/Cookies.xap;width=380;height=322]

Techniquement, et après avoir ajouté à votre code le using du namespace "System.Windows.Browser", il suffit pour créer (ou modifier) un cookie d'appeler la méthode SetProperty de HtmlPage.Document :

   1:  private bool setCookie(string key, string value)
   2:          {
   3:              if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
   4:              { return false; }
   5:              DateTime dt = calExpiry.SelectedDate ?? DateTime.Now 
   6:                  + new TimeSpan(1, 0, 0);
   7:              string s = key.Trim() + "=" + value.Trim() 
   8:                  + ";expires=" + dt.ToString("R");
   9:              HtmlPage.Document.SetProperty("cookie", s);
  10:              return true;
  11:          }

Pour la lecture on accède à la chaîne "Cookies" de HtmlPage.Document qu'on peut ensuite traiter pour séparer chaque cookie :

   1:  private string getCookie(string key)
   2:          {
   3:              string[] cookies = HtmlPage.Document.Cookies.Split(';');
   4:              foreach (string cookie in cookies)
   5:              {
   6:                  string[] pair = cookie.Split('=');
   7:                  if (pair.Length == 2)
   8:                  {
   9:                      if (pair[0].ToString() == key)
  10:                          return pair[1];
  11:                  }
  12:              }
  13:              return null;
  14:          }

Bref, rien de bien compliqué mais qui pourra vous servir dans certains cas.

Le code source du projet (Blend 3 de préférence, sinon VS 2008 + SL3) : Cookies.zip (62,65 kb)

Stay Tuned !