#Rui
on { .Net, Sql Server, Asp.Net MVC, jQuery} & More…
on { .Net, Sql Server, Asp.Net MVC, jQuery} & More…
Apr 15th
On peut voir avec plaisir (avec qui?) que Microsoft continue de fournir de temps des bouquins gratuitement. J’essaie d’en parler chaque fois que j’en vois passer (Free Ebooks ici).
Cette fois-ci, c’est une très bonne première introduction a Sql Server 2008 R2 que nous avons droit gratuitement et ce à quelques jours de la sortie de cette version.
Ce livre contient donc 10 chapitres dont voici le détail:
PART I Database Administration
CHAPTER 1 SQL Server 2008 R2 Editions and Enhancements 3
CHAPTER 2 Multi-Server Administration 21
CHAPTER 3 Data-Tier Applications 41
CHAPTER 4 High Availability and Virtualization Enhancements 63
CHAPTER 5 Consolidation and Monitoring 85
PART II Business Intelligence Development
CHAPTER 6 Scalable Data Warehousing 109
CHAPTER 7 Master Data Services 125
CHAPTER 8 Complex Event Processing with StreamInsight 145
CHAPTER 9 Reporting Services Enhancements 165
CHAPTER 10 Self-Service Analysis with PowerPivot 189
Au passage, si jamais certains d’entre vous se rendent au Sql Pass Summit europe la semaine prochaine pour le lancement de R2 faites moi signe, ce sera peut-être l’occasion de se voir
En attendant, bonne lecture!
Mar 24th
Je viens juste de tomber sur cette video qui retrace de manière assez réussie un certain nombre de mesures étonnantes et détonantes de 2009.
On a beau connaitre ou plus ou moins se douter de la plupart de ces chiffres, cela n’en reste pas moins hors normes à bien y regarder. Nous sommes aujourd’hui dans une certaine démesure et il faut somme toute relativiser.
Certains sites captent le gros du traffic sur internet et les applications qui sont derrière, car il s’agit bien d’applications, on est pas dans le contexte de faire un site web dans son garage, ont des architectures démentes.
Néanmoins le prochain qui me dit que son application tombe avec 10 utilisateurs connecteurs connectés se prend une baffe
JESS3 / The State of The Internet from JESS3 on Vimeo.
Mar 10th
Etant touché d’assez près par ce qui se passe dans l’éducation d’une manière générale, c’est toujours avec grand plaisir que j’accueille une nouvelle proposition de loi qui ne pourra bien sur qu’illuminer de joie les yeux pétillants de malice de nos chers enfants. A moins que ce ne soit le maquillage façon Lady Gaga qui les illumine mais je préfère la première solution.
Donc aujourd’hui, on se dit en haut lieu, que les profs ne foutent rien. Bon ça on le savait déjà, mais quand les parents commencent à retirer les enfants de l’école pour leur donner une éducation stable, ça commence à se voir. Pour compenser, puisqu’il ne suffit pas parait-il de coller le premier CRS venu dans une salle de classer pour calmer les enfants, on s’est dit pourquoi ne pas aller piocher dans le vivier de presque-profs et aussi dans celui des plus-profs?
C’est une bonne idée je trouve. D’ailleurs je pense qu’il faudrait pousser le concept un peu plus loin et l’appliquer à tous les corps de métiers. Prenons plutôt celui du développement logiciel puisque c’est celui qui nous est le plus proche.
Petit étudiant de fin de cycle d’ingé te sent tu capable de prendre la relève dès demain? Arrête donc tes études en cours d’année pour prendre tout de suite l’architecture d’une application et/ou une équipe de développeurs. Moi, perso, j’avoue que dit comme ça j’hésiterai un peu…
L’autre option de la solution est de faire appel à un jeune retraité . J’ai dans l’idée que la retraite est le temps d’un repos mérité et non l’occasion de se replonger dans les tracas du monde du travail juste pour dépanner une société en manque de solutions…mais peut-être que je suis dans l’erreur. En attendant je ne confierai pas mon projet web à un coboliste convaincu, voila c’est dit…
Une dernière solution consisterai à faire venir un développeur qui s’emmerde au fin fond de la Creuse pour me remplacer pour 15 jours. C’est bien connu la mobilité forcée, c’est notre cheval de bataille.
En attendant, je suis sur que quelques mauvaises langues me diront que l’on est déjà pas très loin de ce scénario idéal dans le beau monde des SSII…
Tout cela parait bien fantaisiste, néanmoins c’est ce qui est proposé dans l’éducation nationale.
C’est vraiment impressionnant de voir comment le principe de “colmatons les brèches” est valable à tous les niveaux de responsabilité et tous les secteurs. N’ayez pas mauvaise conscience quand vous faites des repatchs de patchs sur vos softs, vous n’êtes pas les seuls
A quand des patterns & practices en politique?
Feb 18th
Par ma nature même de développeur, j’ai toujours préféré utiliser des applications dans des technos que j’aimais bien pour pouvoir bricoler dedans.
Cela fait bien longtemps maintenant que j’utilise donc des moteurs de blog ou CMS en ASP/ASP.NET mais aujourd’hui je dois avouer que cela ne me satisfait plus.
En travaillant un peu avec WordPress, force est de constater que le niveau de services est largement différent. Je parle de services et d’expérience utilisateur, pour ce qui est du code source là c’est une autre histoire et c’est vraiment pourri. Je ne parle même pas de la base de données dont les concepteurs semblaient oublier la notion de relationnel, mais passons…
Le problème est que les personnes qui développent et utilisent des moteurs blogs en .Net sont des développeurs et que la communauté d’utilisateurs est très restreinte.
Donc en attendant que les choses changent, je vais migrer mon blog principal vers WordPress. Celui-ci s’installe d’ailleurs très bien sous IIS 7 car disponible directement à travers WIP (Web installation Platform). Vous lancez l’install à partir de IIS directement sans avoir à vous préocuper de php/mysql, le tout étant configuré automatiquement et tournant sous FastCGI, et ça c’est déja pas mal…
vous pourrez retrouver ce blog en beta sur rui.fr
Mais avant cela regardons les différentes étapes de la migration
Tout d’abord installons WordPress sur notre serveur IIS7. Comme je l’ai mentionné, cela s’installe très simplement à partir du WIP:

Lancez WIP, puis choisissez WordPress:

Je vous épargne les détails car la suite se fait au travers d’un Wizard sans aucune difficulté particulière. Vous pourrez alors choisir sur quel site l’installer, le chemin, la base mysql, les droits,etc…
Avant d’aller plus loin et tant que vous êtes sur le serveur, je vous invite à aller dans le répertoire d’installation de votre site et de créer un fichier web.config avec le contenu suivant:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”wordpress” patternSyntax=”Wildcard”>
<match url=”*” />
<conditions>
<add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true” />
<add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true” />
</conditions>
<action type=”Rewrite” url=”index.php” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Je sais qu’un web.config dans un site en php, ça peut heurter les âmes sensibles mais cela va vous permettre d’utiliser l’url rewriting à l’intérieur de WordPress et ainsi profiter d’urls customisées.
Une fois cette première phase vous pourrez lancer directement WordPress qui vous fournira un compte admin avec un mot de passe par défaut pour pouvoir commencer la configuration.
La partie configuration se fait entièrement par l’interface d’administration, de plus depuis quelques versions déjà, vous pourrez directement installer de nouveaux thèmes ou plugins à partir de celle-ci. Pour résumer, il n’y a plus aucun besoin d’accéder au serveur ni aux sources.
Avoir un nouveau moteur de blog c’est bien mais si je pouvais importer tous mes anciens posts ce serait mieux…Le problème étant qu’il n’y a pas de moyen direct de faire ça. La méthode ci-dessous convient pour la plupart des blogs .Net (dasBlog, Community, BlogEngine,…).
Le principe est de passer par le “Standard” BlogML. Nous allons donc créer un backup des posts en BlogML puis importer ce backup dans WordPress.
Tout d’abord téléchargez un petit utilitaire qui fait la création de ce backup à partir de votre repository dasBlog:
http://code.msdn.microsoft.com/DasBlogML
Pour les autres moteurs, soit ils font directement l’export en BlogML soit vous trouverez des outils similaires.
A partir de là vous aurez un backup xml avec tous vos posts.
Installez ensuite un plugin dans WordPress qui se charge de l’import.Téléchargez les fichiers suivants:
WordPress vient déjà livré avec un nombre impressionnant de modules d’import mais pas de BlogML par défaut. Installez donc les deux fichiers php des zip dans le répertoire import de wp-admin. Retournez dans votre interface d’admin et vous trouverez votre nouveau module d’import:
Lancez l’import en sélectionnant le fichiez que vous avez précédemment crée. Vous devriez obtenir un résumé vous confirmant que tout s’est bien passé avec la liste des posts insérés.
C’est la méthode la plus simple et rapide, néanmoins, il vous faudrait certainement repasser sur certains posts en ce qui concerne le contenu et les liens. De plus même si il importe le contenu, les commentaires et les tags, les liens et les images référencent toujours l’ancien site. Je vous conseille dans ce cas, de vous faire un petit outil d’update du fichier xml de votre contenu avant l’import…
Votre blog est installé et à jour avec votre contenu. Comme je le disais tout peut se faire maintenant à partir de l’interface, vous pourrez choisir de nouveaux themes directement dans l’administration et les installer directement. La configuration des widgets se fera aussi directement en ligne:
Ceci étant fait, vous avez peut-être l’habitude d’écrire vos posts avec Windows Live Writer au lieu d’utiliser une interface web. Pas de problème, tout ce qu’il faut c’est bien activer les fonctions XML-RPC pour que cela soit accessible depuis WLW:
De même vous pouvez très bien utiliser le mail pour écrire vos posts. Le tout étant d’avoir une adresse mail spécifique vers laquelle vous enverrez vos posts. Le moteur se chargeant de temps en temps d’aller vérifier si il n’y a pas de nouveaux messages et de l’intégrer dans le moteur. C’est une fonctionnalité installée par défaut sous WordPress, néanmoins un peu limitée. Je vous conseille donc de télécharger le plugin Postie(installation directe à partir de l’interface d’admin, tapez juste Postie):
http://wordpress.org/extend/plugins/postie/
Ce plugin combine l’énorme avantage de pouvoir aller chercher des messages sur GMAIL (en fait de pouvoir choisir son port et le SSL) et des options avancées de filtrage et d’import des posts mais je vous laisse découvrir par vous même
.
Voila donc une première étape de franchie avec une nouvelle plateforme de blog, en espérant qu’elle convienne à mes attentes au moins pour un moment.
Bien sur idéalement, je garde dans un coin, l’option de développer un vrai moteur de blog .Net/MVC avec une expérience utilisateur plus aboutie que ce qui existe actuellement mais c’est une autre histoire..
bons posts!
Feb 4th
On le dit depuis le début, un des points forts du framework ASP.NET MVC par rapport à d’autres produits Microsoft c’est qu’il y a une forte implication de la communauté dans le processus de développement. Pour la V1, la première preview a été présenté 1 an et demi avant la version finale et entre les deux une dizaine de versions intermédiaires avec à chaque fois le source.
C’est en grande partie pourquoi le produit était déjà grandement mature en v1.0.
C’est d’autant plus le cas avec la V2 qui continue avec sa présentation à la communauté des sources + binaires.
Celle-ci apporte quelques bugfixes bien sur, mais surtout elle se veut “Enterprise Ready”. Le but étant d’apporter àu framework tous les éléments nécessaires aux applications d’entreprise. Ceci est à mettre en comparaison de la V1 qui un peu vue comme “Geek friendly” par certains mais n’apportant pas assez d’outillage pour les besoins usuelles des applications d’entreprise.
Je vous rassure, pas de gros changements…
Les principaux objectifs sont:
Ok, je veux essayer?
oui, le dernier binaire d’installation de la RC sous Visual Studio 2010 est disponible depuis le 16 décembre sur le site de Microsoft et les sources sur CodePlex.
Attention cependant avec Visual Studio 2010.
Aujourd’hui les beta/rc de Visual Studio 2010 et ASP.NET MVC ne sont pas en phase car MVC intègre des features en avance par rapport à ce qui est supporté dans Visual Studio. Il s’agit principalement de problématiques du designer et non du Framework .Net 4. les Versions finales RTM de ASP.NET MVC 2 et de Visual Studio 2010 seront par contre bien sur en phase et livrées en même temps.
En attendant la version finale, il faut de préférence utiliser l’installeur pour Visual Studio 2008 pour profiter de toutes les features du designer.
Pour travailler sous Visual Studio 2010 et ASP.NET 4, il faut soit changer la référence par défaut de System.Web.Mvc.dll créée par le projet soit ouvrir un projet créé sous 2008 et changer le target.
Dans tous les cas, il s’agit d’une pratique temporaire, la version finale de Visual Studio 2010 devrait arriver mi-avril ou un peut avant pour le MIX 2010.
Et si on travaillais avec les sources pour bien comprendre?
Puisqu’on a vanté les mérites d’avoir accès aux sources, pourquoi ne pas les utiliser directement comme projet de référence pour travailler au lieu de prendre la dll System.Web.Mvc.dll intégrée par défaut à votre projet?
Cela vous permettra de descendre plus loin dans le débug aussi bien pour comprendre pourquoi quelque chose ne fonctionne pas mais aussi pour comprendre pourquoi et comment cela fonctionne.
1) tout d’abord récupérez les sources citées plus haut.
2) créez une solution avec un “Empty ASP.NET MVC 2.0 Web Application” (ou tout autre projet de votre choix)
3) pour plus de simplicité collez le répertoire src des sources ASP.NET MVC dans le même répertoire que celui de la solution de votre projet puis ajoutez le projet \src\SystemWebMvc\System.Web.Mvc.csproj j à votre solution.
4) Supprimez dans votre projet les références à System.Web.Mvc (et éventuellement à Microsoft.Web.Mvc si il s’agit d’un autre projet et que vous l’utilisiez, dans ce cas il faudra aussi charger ses sources \src\MvcFutures\MvcFutures.csproj ).
5) Ajoutez dans votre projet une référence au projet System.Web.Mvc(csproj). De même pour MvcFutures si vous désirez l’utiliser
6) Supprimez toutes les références fortes à la librairie System.Web.Mvc qui se trouve dans le GAC de votre web.config:
- commentez la ligne content “add assembly=”System.Web.Mvc…” dans system.web/compilation/assemblies
- Mettez à jour le PublicToken de toutes les autres références à System.Web.Mvc à Null comme ceci:
- pareil pour le MvcHttpHandler qui se trouve dans system.webserver/handlers/
- ouvrez maintenant le web.config qui se trouve de votre/vos répertoire(s) Views puis effectuez le même remplacement du Token comment dans le web.config principal. par exemple:
Le principe est juste de lui enlever les références fortes basées sur le PublickKeyToken qui est celui du GAC pour le forcer à prendre la référence qui se trouve dans votre projet.
Lancez votre projet et vous pourrez débugger complètement votre application sans avoir un message qui vous explique qu’il ne peut rien vous dire car l’appel vient d’un process externe. Ceci arrive souvent car c’est la tuyauterie MVC qui active les classes et invoque les méthodes toute seule la plupart du temps (comme l’exécution d’une action ou la récupération des données d’un formulaire par le DefaultModelBinder…)
Pour Finir
Je vous invite à venir me rejoindre mardi 9 février aux Techdays pour une session de présentation sur ASP.NET MVC 2 à 17h30 que je co-animerai avec Daniel Tizon.
Bon débug et bon démarrage!
Jan 31st
Sql Server Express (2005 ou 2008) est un très bon outil pour stocker des données dans un périmètre restreint. Le fait de pouvoir embarquer une base dans une application et la monter sur une instance utilisateur à la volée est très pratique aussi. De plus depuis qu’il est livré avec un Sql Server Management Studio Express, cela devient presque un environnement de développement suffisant à la plupart des tâches.
Néanmoins, il s’agit d’un outil gratuit et par là même limité par rapport aux versions payantes de Sql Server. Même dans l’optique où l’on ne fait qu’une utilisation de stockage basique des données, il est presque irréaliste d’imaginer que l’on n’aura jamais besoin à un moment ou un autre d’effectuer des tâches récurrentes sur la base que ce soit pour des besoins métiers (comme réinitialiser des valeurs en début de mois par exemple) ou techniques (mettre en place un plan de sauvegarde).
Sur toutes les versions de Sql Server en dehors des versions Express depuis longtemps, il y a une appli pour ça (traumatisé par Apple moi?). Il s’agit du Sql Server Agent qui est un service qui tourne en parallèle du process Sql Server et qui est dédié à la planification de tâches. Son avantage est d’être pleinement intégré à Sql Server, d’avoir accès à tout un contexte d’exécution en direct et les mécanismes de sécurité de de log qui vont avec.
Si pour vos besoins vous n’avez que Sql Server Express, il y a plusieurs moyens de contourner le problème. Voici quelques solution qui me viennent à l’esprit:
Nous allons voir ici la plus simple et la plus rapide, à savoir utiliser directement les tâches planifiées de Windows.
Prenons un scénario simple d’une procédure de backup à réaliser toutes les nuits à 2h du matin.
Pour plus de souplesse créons une procédure stockée qui contiendra l’ensemble des tâches à accomplir:
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name='ToolBox')
EXEC sp_executesql N'CREATE DATABASE ToolBox'
GO
USE Toolbox
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id=OBJECT_ID('BackupDB'))
DROP PROCEDURE BackupDB
GO
CREATE PROCEDURE BackupDB @dbname sysname --NVARCHAR(255)
AS
BEGIN
DECLARE @DateTag NVARCHAR(32), @BackupFile NVARCHAR(255)
SET @DateTag = '_' + CAST(YEAR(GETDATE()) AS NVARCHAR(4)) +
'_' + CAST(MONTH(GETDATE()) AS NVARCHAR(4)) +
'_' + CAST(DAY(GETDATE()) AS NVARCHAR(4))
SET @BackupFile = 'C:\Data\Backup\' + CAST(@dbname as NVARCHAR(255)) + @DateTag + '.bak'
BACKUP DATABASE @dbname TO DISK=@BackupFile
END
GO
--EXEC BackupDB 'mabase'
Il n’y a rien de particulier dans ce script qui est fait à minima pour l’exemple. Indépendamment des tâches qu’il faudrait effectuer pour sécuriser le script, nettoyer les fichiers, nettoyer la base,etc…, nous passerons quand même par une base de travail (ToolBox) pour stocker notre (nos) script(s).
Les tâches planifiées de Windows permettent bien sur de rentrer directement n’importe quelle commande, néanmoins, il est plus simple de créer au moins un petit programme de lancement sous forme de fichier .bat pour plus de souplesse (si vous avez des évolutions à faire dans vos commandes, il est plus simple de modifier ou scripter le texte du .bat qu’une commande de tâche planifiée même si celle-ci reste accessible par script)
Pour cela nous utiliserons bien sur SQLCMD qui nous permet de nous connecter à une instance Sql Server et de lancer une ou plusieurs commandes tsql par un script.
Voici donc notre commande (encore une fois à minima
:
sqlcmd -S .\SQLEXPRESS -Q "exec ToolBox.dbo.BackupDB mabase" -o "C:\Data\jobs\joblog.txt"
Ouvrez le gestionnaire de tâches planifiées de Windows (outils d’administration dans le panneau de configuration):
Puis ajoutez une nouvelle tâche de base:
Définissez ensuite un déclancheur quotidien:
Définissez votre heure et la récurrence:
Définissez enfin l’action, il s’agit ici de démarrer un programme:
Puis sauvegardez le tout après le récapitulatif de la dernière étape du wizard.
Votre tâche est maintenant effective et disponible mais il reste un dernier détail à régler. En effet, la tâche s’enregistre avec les droits de celui qui l’a créer et par défaut ne peut s’éxécuter que si celui-ci est connecté. Nous allons donc changer cela en sélectionnant notre tâche dans la liste des tâches et en cliquant sur [propriétés]:
Sauvergardez le tout et lancez la tache manuellement pour la tester à travers le bouton Run/Lancer de la barre d’actions:
Et voila
Nous verrons une prochaine fois comment programmer le Sql Server Broker pour avoir un système entièrement intégré à notre base.
En attendant, bons Sql Express Jobs!
Jan 19th
Cela fait un grand moment que je n’ai pas été très actif online et il est grand temps de revenir en ce début d’année. Le début d’année est une période privilégiée pour faire le point, prendre des bonnes résolutions et se projeter un peu.
Si il y a un truc que j’aime bien en cette deuxième moitié du mois de janvier, et vous n’y couperez pas, ce sont les vœux en retard. On a l’impression que tout le monde à dit ses diverses banalités et paf un zozo arrive après coup et en remet une couche (et puis d’abord jusqu’à la fin du mois de janvier c’est permis!).
Donc je vous souhaite à tous une bonne année 2010!
Mais au fait, c’est quoi une bonne année? Oui je sais, c’est idiot comme question mais au final c’est tellement vague que chacun pense à quelque chose en le souhaitant qui sera certainement très différent de celui qui l’entend…Est-ce une année où l’on fait très fort dans son travail, où l’on gagne plein de sous, où l’on a une vie perso pleine de joies? Vous m’en mettrez un peu de chaque s’il vous plait? Finalement une bonne année c’est peut être juste une année ou l’on a pas de grosses buches et c’est déjà pas si mal…
Une bonne année c’est aussi pour les geeks que nous sommes à des degrés divers et variés, une année pleine de bonnes nouvelles technologiques. Cette année par rapport à la précédente devrait être encore plus riche avec l’arrivée de Visual Studio 2010 mais surtout l’arrivée de .Net 4 et C#4. J’ajoutera à cela l’arrivée de tous les produits estampillés 2010 autour de Office ou encore Sql 2008 R2.
Mais il n’y a pas que les technos MS qui seront de la fête, tout un tas de bonnes choses sont attendues et même pourquoi pas une tablette chez Apple?
Coté web, l’année commence bien avec le jQuery nouveau qui vient d’arriver, la spec Html5 finale prévue pour la fin de l’année ou encore l’arrivée de ASP.NET MVC 2.0 pour avril (la RC1 est dispo depuis mi décembre ici)
Coté SQL, je ne m’attend pas à de grandes transformations avec 2008 R2 en ce qui me concerne même si les ajouts pour la BI sont vraiment top (j’avoue que PowerPivot m’impression un peu quand même
). Par contre coté projets, nos Challenges TSQL avancent toujours et continuent de grossir, le n°21 est actuellement en ligne jusqu’au 25 janvier. De plus vous pouvez gagner jusqu’à 100$ en proposant un challenge sur le Sql Server Challenge Idea Contest Q1, donc si vous avez des idées de défis à soumettre n’hésitez pas à participer! Si vous voulez participer au sein de l’équipe et travailler avec certains des plus grands experts Sql mondiaux faites moi signe, il y a toujours des places disponibles pour les bonnes volontés!
Bonne année et bonnes lectures!
Oct 21st
Dans la série des offres MSDN et si vous n’êtes pas abonnés à la newsletter, Microsoft Learning nous offre ce mois ci un livre d’introduction à Sql Server 2008 de Microsoft Press:
Comme d’habitude, il faut s’enregistrer pour avoir accès à l’intégralité du livre:
Jun 30th
Le MSDN magazine du mois de juillet est dispo.
Si j’en parle ici c’est qu’il y a notamment plusieurs articles sur ASP.NET MVC:
Bonne lecture!
Jun 23rd
J’ai l’impression que c’est passé un peu à la trappe, mais une nouvelle CTP d’OSLO est sortie le mois dernier.
vous pouvez la télécharger ici: Oslo May 2009 CTP.
So, what’s new?
Voici quelques nouveautés en vrac car je n’ai pas encore eut le temps de m’y plonger plus sérieusement:

Je ne sais pas si cela augure d’une nouvelle génération d’installeurs chez Microsoft mais celui-là est particulièrement beau, cela n’a rien à voir je sais mais j’aime bien
.
VELOCITY
Dans la même veine, je n’ai pas eu beaucoup d’échos là-dessus mais pour ceux qui auraient encore une CTP2, la CTP 3 de Velocity est dispo: Velocity CTP3.