Archives de catégorie : Web

[Tips] Changer la culture de tous les threads en 1 ligne de code

Avec ASP.net, il est possible de définir globalement la culture via le fichier de configuration web.config et les attributs uiCulture et culture de la balise globalization :

<globalization uiCulture="fr-FR" culture="fr-FR"/>

Seul problème, cette configuration ne s’applique pas à l’ensemble des threads créés manuellement depuis les pages/handlers/modules.

En effet, si on créé un thread depuis une page, la culture par défaut de ce thread sera la culture du système sur lequel l’application est installée.

Avant .net 4.5, il était donc nécessaire de changer la culture manuellement à chaque création de thread.

Depuis .net 4.5, il est possible de définir une culture par défaut pour tous les threads qui seront créés par votre application via la propriété statique DefaultThreadCurrentCulture de classe CultureInfo :

CultureInfo.DefaultThreadCurrentCulture = ci

ASP (.net) a un cycle de 6-7 ans

Comme annoncé par Scott Hanselman ASP.net 5 actuellement en RC (et annoncé comme étant “production ready) est renommé en ASP.net Core 1.0.

Le nommage rejoint ainsi celui de .NET Core et se distingue plus clairement d’ASP.net 4.6 en ne laissant pas supposer qu’il s’agit d’une mise à jour de cette version mais bien d’un nouveau produit.

Cela est maintenant bien plus clair et peut donc inquiéter les développeurs qui n’avaient pas encore assimilé ce saut technogique entre ASP.net 4.6 et l’ex ASP.net 5 : “Encore une nouvelle version, qu’il va falloir assimiler, encore des réécritures/refontes/migrations en vue”.

Oui, cela est tout à fait vrai, c’est bien un nouveau produit qui devrait prochainement être disponible en RT(M/W), mais les plus grosses ruptures ne sont pas si fréquentes que cela, si l’on analyse les versions 1.0 de chaque technologie de développement web proposée par Microsoft, on se retrouve avec un cycle plutôt stable de 6-7 ans :

image

Cela peut sembler être une vision un petit simpliste car plusieurs changements ont été apportés notamment entre les différentes versions d’ASP.net MVC mais est quand même représentatif des ruptures auxquelles nous avons eu droit pour le moment.

image

On peut se dire que l’équipe d’Internet Explorer 9 a gagné…

On peut se dire que l’équipe d’Internet Explorer 9 a gagné en constatant qu’aujourd’hui un bloggeur peut se permettre d’écrire un post intitulé “Why Internet Explorer will survive and Firefox won’t” sans être trop ridicule.

imageIl s’agit certes d’un point de vue subjectif, et d’un avis tranché, mais qui est défendu avec des arguments intéressants et valables.  Le post est très largement discutable (je ne suis d’ailleurs pas d’accord avec ce billet) mais il reste crédible.

Et cela n’aurait pas du tout été le cas encore hier… Le même auteur aurait eu la même crédibilité en écrivant l’exact contraire. Et je trouve que ce changement de situation est remarquable.

J’avais déjà bloggé à différentes reprises (Compte Rendu PDC 2010 et Les nouveautés d’IE 9) sur le fait que j’étais impressionné par le travail d’engineering réalisé par l’équipe d’Internet Explorer et même s’il reste des défauts non négligeables (j’y reviendrais ultérieurement via un autre post) , force est de constater que le résultat est de l’avis de toutes les personnes censées à la hauteur (voire au-dessus en ce qui concerne les performances) des autres principaux navigateurs du marché.

Il y a très clairement une part de stratégie dans tout cela, mais la concurrence y est également pour beaucoup. Tous les navigateurs ont exactement les mêmes objectifs : une performance maximale en utilisant si possible le GPU pour y arriver, le respect de standards n’existant pas encore (HTML 5, CSS 3), une ergonomie réétudiée d’un point de vue de la gestion des onglets et de la barre d’adresse (entre autres), et une simili intégration des applications web en applications “natives”. Au point que l’on peut ne plus trop voir la différence entre ceux-ci :

Loin de moi l’idée de dire qu’IE 9 est le meilleur des navigateurs, ce qui est sûr ce qu’avec la sortie d’IE 9, la disponibilité de Chrome 10, et la publication de 4 (!) versions majeures de Firefox,  c’est durant cette année 2011 que l’on devrait probablement voir se décider quels seront les leaders de ce marché !

image

Les nouveautés d’IE 9

Microsoft est en train de perdre du terrain
face à la concurrence représentée par Firefox de la fondation Mozilla, Google Chrome,
et Safari. Autrefois très largement leader, le navigateur est passé sous les 60 ou
50% de parts de marchés selon les sources.
Les challenges de l’éditeur pour la prochaine
version de son navigateur sont simples :

  • La performance
  • Respect des standards
  • Intégration au système d’exploitation et intégration des extensions

Respect des standards

HTML 5 et CSS 3 sont les principaux standards que l’éditeur se doit de parfaitement
respecter pour ne pas être décrié comme ce fut le cas pour d’anciennes versions d’Internet
Explorer.

Alors que la plupart des standards (HTML 5, CSS 3) n’est pas encore finalisé, l’implication
de l’éditeur se fait certes au niveau de leur implémentation au sein d’Internet Explorer
9 mais également au sein des deux principaux organismes responsables de la conception,
validation et finalisation des standards web : le W3C pour l’HTML 5, le CSS et le
SVG, et l’ECMA pour l’ECMA-Script (le nom du standard lié au Javascript).

Pour parvenir à ses fins, l’éditeur fait partie du consortium W3C avec pas moins de
16 membres travaillant activement à la conception et la finalisation du ses standards.
Et le travail est assez important puisque l’on parle d’environ 80 spécifications regroupées
au sein des standards HTML5, CSS 3, SVG et ECMA Script.

Performance

Autre axe stratégique la performance d’Internet Explorer 9 est également un très important
chantier. Avec l’arrivée de frameworks javascript puissants, la montée en puissance
d’Ajax, les applications web se sont fortement complexifiées ces dernières années.
Les performances des navigateurs doit suivre le rythme afin de fournir aux utilisateurs
une expérience optimale.

Et le travail d’engineering effectué par l’éditeur est considérable comme nous allons
le voir au travers du parcours des évolutions apportées avec Internet Explorer 9.

Afin d’améliorer ces performances, l’éditeur a pris comme base Internet Explorer 8
et réalisé des tests de performances sur les sites internet les plus populaires afin
de comprendre le comportement de son navigateur actuel. Ces résultats ont été décomposés
en une dizaine de catégories telles que l’exécution du code javascript, l’affichage
de la page, la gestion de l’HTML du CSS, etc.

image

Figure 1 : Sous-ensembles fonctionnels

Le moteur Javascript

Le premier changement majeur concerne le moteur Javascript d’IE 9. Internet Explorer
8 utilise un interpréteur de code javascript. Comme tous les interpréteurs de code,
celui-ci a l’avantage d’être capable de démarrer l’exécution du code très rapidement,
avec comme contrepartie le fait que l’exécution de ce code ne soit pas très rapide
ce qui va avoir un impact sur les applications utilisant de nombreuses lignes de code
javascript.

La solution adoptée par plusieurs des concurrents d’Internet Explorer a donc été de
passer d’un interpréteur vers un compilateur afin de faire des gains très conséquents
sur le temps d’exécution des applications les plus complexes. Les seuls soucis est
qu’il est donc à présent nécessaire de compiler le code javascript afin d’être capable
de l’exécuter ce qui prend un temps un non négligeable, et ralentit donc le démarrage
de l’exécution des scripts.

Comme on peut le voir le point fort d’une solution étant le point faible de la seconde,
Microsoft a choisi une solution hybride. Internet Explorer 9 utilise à la fois un
interpréteur de code et un compilateur. Le premier est en charge d’exécuter le code
javascript pendant que celui-ci est compilé en arrière-plan. Dès que le résultat de
la compilation est disponible, le navigateur exécutera donc du code natif avec des
performances optimales.

Cette solution est d’autant plus optimale que durant les tests de performances d’Internet
Explorer 8 les ingénieurs de Microsoft se sont rendu compte que même sur des PC multi-cœurs,
le navigateur utilisait quasi-exclusivement un seul de ces cœurs. La moyenne de cœurs
présents sur un PC étant actuellement de 2.46, exécuter du code sur un cœur et compiler
en arrière-plan sur un second cœur ce même code est une solution idéale qui permet
au navigateur de réellement bénéficier des capacités CPU de la machine.

Le parsing du code javascript a également été optimisé. Les ingénieurs de Microsoft
Research ont en effet découvert que sur les principaux sites internet, moins de 50%
du code javascript chargé était effectivement exécuté. L’équipe d’Internet Explorer
a donc modifié le parser de code javascript afin de différer le parsing du code jusqu’�
ce qu’il soit réellement nécessaire.

Autre optimisation, alors qu’Internet Explorer 8 était un hôte générique capable d’appeler
un moteur d’exécution de code VBScript, Javascript ou autre, exposés sous forme de
composants COM, Internet Explorer 9 embarque en son sein le nouveau moteur Javascript.
Il n’est donc plus nécessaire de perdre beaucoup de temps en marshalling pour communiquer
avec le moteur javascript. De plus, pour permettre aux différents moteurs de scripts
de manipuler le DOM de la page affichée, Internet Explorer dupliquait ce DOM vers
tous les moteurs d’exécution de scripts. Le moteur Javascript étant à présent directement
intégré au navigateur, ce dernier manipule le même DOM que le moteur de rendu d’Internet
Explorer.

Le moteur de rendu

Internet Explorer 9 utilise pleinement l’accélération matérielle pour effectuer le
rendu. DirectX, Direct2D et DirectWrite sont au cœur du moteur de rendu. L’idée est
simple, au lieu de passer par le CPU pour effectuer le calcul du rendu, toutes les
opérations de calcul sont effectuées par le GPU. Ce changement est d’autant plus important
que les nouveautés proposées par HTML 5 nécessiteront d’importants calculs.

L’utilisation de l’accélération matérielle est également en cours d’implémentation
sur les navigateurs concurrents mais il est à noter qu’Internet Explorer 9 est le
seul à effectuer le rendu des images, du texte, des vidéos, des images SVG, des Canvas,
et du CSS 3 sur le GPU. La concurrence n’effectue qu’un rendu partiel sur la carte
graphique.

Intégration au système d’exploitation

Après le respect des standards, la performance, la troisième demande la plus fréquente
des développeurs web est de pouvoir mieux intégrer leurs applications web au sein
de l’OS, d’avoir la possibilité d’avoir un comportement qui se rapproche des applications
Windows.

Et la réponse de Microsoft à cette problématique tourne autour de la nouvelle taskbar
introduite avec Windows 7.

L’utilisateur a désormais la possibilité de pinner un site web au sein de la taskbar.
Une fois le site web ainsi attaché, de multiples possibilités sont offertes aux développeurs
web.

Il est à présent possible de s’intégrer à la jumplist afin de faciliter l’accès aux
principales fonctions de l’application web :

image

Figure 2 : Exemple d’intégration à la jumplist

Autre possibilité, l’intégration de boutons intégrés à la miniature de l’application
web. Ces boutons pourront déclencher du code javascript qui permet d’exécuter un certain
comportement en réponse à l’action de l’utilisateur.

image

Figure 3 : Intégration de boutons

Et enfin, pour notifier l’utilisateur il est possible de faire flasher l’icône du
site web ou d’afficher un symbole en overlay :

image

Figure 4 : Exemple d’overlay

<br />

image

Résoudre le problème : Login failed for user IIS APPPOOLDefaultAppPool

En voulant exécuter une application web sur mon poste je me suis retrouvé avec cette
erreur qui a première vue est habituelle :

image

Erreur classique sauf que dans ce cas l’utilisateur en question n’est pas IIS_WPG
comme on le rencontre généralement mais il s’agit curieusement d’un inconnu nommé
“IIS APPPOOLDefaultAppPool”. Et après un petit tour rapide dans la liste des comptes
utilisateurs Windows, on se rend vite compte que cet inconnu est très discret puisque
introuvable.

Cet utilisateur est lié à une nouveauté importante apparue dans Windows 7 et Windows
2008 R2, et pour le moment principalement utilisée par IIS 7.5. En effet la gestion
de l’identité des application pool a été changée :

image

Comme vous pouvez le voir l’identité des application est à présent définie comme étant
“ApplicationPoolIdentity”. IIS 7.5 créé  en effet un nouveau compte utilisateur
pour chaque application pool sous la forme “IIS APPPOOLApplicationPoolName” afin
d’avoir une meilleure isolation. Ces comptes utilisateurs ne sont pas des comptes
utilisateurs classiques puisqu’il s’agit d’un nouveau type de compte utilisateur proposé
par Windows Server 2008 et Windows 7 : les comptes utilisateurs virtuels. Ces comptes
utilisateurs sont des comptes utilisateurs spécifiques qui ont le même comportement
que les comptes traditionnels (ces comptes peuvent être utilisé par des ACL sans aucun
problème) mais ne sont pas visibles dans les interfaces de Browsing de comptes.

Ainsi si vous souhaitez ajouter les droits à l’utilisateur “IIS APPPOOLDefaultAppPool”
pour accéder à votre base, ne changez pas l’identité de votre ApplicationPool
(même si c’est contraire à toutes les pages du web traitant du sujet [ici, ou
encore ])
car vous perdrez le bénéfice de ce nouveau mécanisme de sécurité.

Pour rajouter cet utilisateur au niveau SQL Server il suffit de saisir son nom de
compte complet sans passer par l’interface de sélection de compte.

image

En savoir plus :

What’s New
in Service Accounts in Windows Server 2008 and Windows 7


GoodBye
Network Service

Training Kit ASP.net MVC disponible

Ce fut une des annonces du Mix09 il y a quelques
jours le framework ASP.net MVC est désormais disponible
en version 1.0
. Différentes sessions à propos de cette surcouche d’ASP.net 3.5
ont été proposées lors de cet évènement :

Il est à noter qu’un training kit vient d’être publié afin de pouvoir rapidement appréhender
cette nouvelle technologie. Ce kit est assez léger puisqu’il est composé d’une présentation
et de deux labs mais il a le mérite d’exister.

En savoir plus :

ASP.net
MVC 1.0


ASP.net
MVC 1.0 Training Kit