[TechDays2012] Forensics

Nicolas Ruff, d’EADS, présente cette session, la dernière pour ces Tech Days. A ce niveau de fatigue après avoir mangé des sessions pendant 3 jours, tout en s’étant levé à 4 heures du matin pour venir de Bretagne le premier jour, on commence à être un peu cuit, et la dernière session, d’expérience, est un quitte ou double. Là, excellente session d’un orateur visiblement passionné, et du coup passionnant. Je comprends maintenant pourquoi mes étudiants écoutent toujours mieux lorsque je leur fais un cours sur la sécurité : toutes ces petites anecdotes et astuces qui fourmillent dans ce domaine rende les interventions beaucoup plus sympa…

Forensics = recherche de preuve / analyse post-mortem. Autopsie de machines au lieu des cadavres. La scène de crime est une intrusion informatique, sachant que les anciennes méthodes ne fonctionnent plus.

Les interventions de personnes comme Nicolas Ruff sont surtout sur des Advanced Persistant Thread. Le terme de Successful Persistant Thread est, selon l’orateur, plus avancé. Il s’agit de combiner des méthodes, de manière organisée et récurrente pour accéder à des données très valorisables.

Le mode forensics traditionnel avec saisie du disque dur et indexation pour recherche d’un mot clé ne peut pas être utilisé avec des APT. Tout d’abord parce que les entreprises ne signalent pas leur piratage, alors même parfois qu’elles y sont forcées par la loi. Ensuite, parce qu’on ne sait pas précisément quoi chercher (ce n’est pas une adresse d’un site pirate, ou un fichier donnée, etc.). Enfin, la simple collecte des données serait impossible sur des milliers de serveur, avec des formats parfois spéciaux (RAID, par exemple) et la production reste prioritaire sur le forensics.

REX sur le forensics en APT : on ne cherche pas des preuves mais des indices, et il n’y aura pas de contre-expertise. La documentation reste indispensable, surtout si on travaille en équipe.

Big Data permet de traiter des masses de données de manière relativement rapides (5 minutes), mais les technologies de forensics n’existent aujourd’hui pas sur ces outils.

Du coup, recherche de signaux faibles : Autoruns de SysInternals, Fichier ZIP > 10 Go, Processus “Microsoft” mais pas signé par Microsoft, adresses IP suspectes, activité nocturne, certaines machines seulement avec un outil qui devrait être poussé partout par AD, etc. Plus de besoin d’intuition que pour de la forensics traditionnelle.

Même quand on a des logs actifs, ils ne remontent souvent pas beaucoup en arrière pour des raisons d’économie de place. Par exemple, un contrôleur de domaine prend plusieurs Go par jour pour loguer tout. Et il faut en plus un expert pour distinguer les sondes qui ne doivent pas être loguées, etc.

Très bonne idée d’avoir fait un petit quiz technique à la fin, c’était interactif et très intéressant. Ca montre aussi qu’il faut de l’intuition pour trouver ces problèmes, mais surtout un très bon background technique. Un des cas nécessitait de savoir trouver des instructions qui auraient du être absentes d’un code assembleur, tout en voyant qu’un JZ avec un JNZ sur la même adresse faisait en sorte qu’on aille toujours sur le même résultat, trompant ainsi les analyses de recherche d’instructions interdites qu’on avait juste après dans le code, et qui allaient taper directement sur les périphériques.

Posted in Retours, Sécurité | 2 Comments

[TechDays2012] NoSQL et BigData : les approches de Microsoft

Session très générale sur NoSQL et BigData. Je n’ai pas les noms des orateurs, mais je ne vais pas les rechercher, parce qu’honnêtement, je ne peux pas dire que la session ait été bonne, et ce n’est donc pas la peine d’associer leurs noms à cet article.

La personne parmi les trois qui avait le plus un profil commercial a accaparé le micro pendant la quasi-totalité de la session, qui a fini un quart d’heure en retard et en expédiant les derniers sujets, alors que les deux intervenants techniques ont eu droit à dix minutes de présentation. Le fait que le discours soit truffé de “effectivement” me fait penser que l’orateur cherche à nous présenter comme quelque chose qui tombe sous le sens une solution que n’est pas vraiment adaptée.

Le fait de parler de ZettaOctets et de YottaOctets, par exemple, fait penser que les erreurs de la BI n’ont toujours pas été assimilées : c’est plus facile d’augmenter la taille de données (et de s’ébahir sur le fait que ça représente une pile de DVD qui va de la Terre à la Lune) que de digérer de la qualité dès le début.

Bon, j’arrête mon mode ronchon, et je donne les quelques notes que j’ai prises…

Les paramètres de Big Data sont :

  • La volumétrie
  • La variété des données (hétérogénéité des sources et des formes)
  • La vélocité des données (vitesse de production)
  • La variabilité des données (interprétation possible de plusieurs manières sur une donnée unique)

Les typages de données sont :

  • Données structurées : SGBDR
  • Données semi-structurées : logs, fichiers XML, données de capteurs, etc.
  • Données non structurées : informations textuelles issues de Twitter, de mails, de blogs, etc.

Fast Track SQL Server = Symetric Processing / Parallel Data Warehouse = Massive Parallel Processing.

Le principe de Fast Track est tout d’abord d’avoir le plus grand équilibre possible entre les performances de toutes les composantes : CPU, cache, switch, LUN, disk, etc. En association avec des constructeurs, Microsoft permet donc de débarrasser les utilisateurs de toute la partie validation et choix d’architecture physique.

En MMP, la Landing Zone sert de tampon pour les données récupérées des ETL et à poser sur la base de données MMP. Les petites tables de dimension sont répliquées sur chacun des nodes pour pouvoir améliorer les performances.

L’une des solutions de Microsoft pour le Big Data est de proposer de faire du Scale Out sur SQL Azure. La limite de taille est alors contournée par une approche de fédération, qui consiste en un sharding des données qui sont partagées sur des nodes Azure différents. Il sera possible dès cette année de laisser les fédérations décider du nombre de machines à ajouter et du mode de re-partitionnement pour que les performances suivent (ou à l’inverse de fusionner en retour si les requêtes tombent, de façon à réduire les coûts). Ce qui est surtout intéressant dans ce cas est que les petites instances ne sont pas chères du tout, et qu’on peut alors avoir de très bonnes performances par l’utilisation de multiples petits serveurs.

Dans SQL 2012, il sera possible de faire des BLOB en FileStream, sur des fichiers stockés en dehors de la base.

La première partie de la session s’arrête, heureusement : beaucoup trop théorique, présentée par quelqu’un qui n’était visiblement pas technique, et avec une capacité oratoire limite pour ce genre d’évènement.

Reporting Service, PowerPivot, PowerView et le connecteur ODBCHive sont ensuite mis en oeuvre pour exposer de la donnée Hadoop. http://www.hadooponazure.com pour aller tester un cluster, en se basant sur ASV pour aller taper sur nos blobs Azure.

Plugin Hive pour Excel dans les downloads sur HadoopOnAzure. Ensuite, l’icone est dans l’onglet Data. Il ne faut pas oublier par contre d’ouvrir le port ODBC.

Malheureusement, la démo après n’est pas très fluide non plus. On ne comprend pas bien ce qui est expliqué. Pourtant, ça partait bien avec un des orateurs qui, pour une fois, expliquait DE ZERO comment faire fonctionner, en nous donnant tous les pointeurs nécessaires pour pouvoir télécharger, trouver où est l’outil au premier lancement, etc.

Il est possible dans SQLServer Reporting Server de créer des relations pour passer d’un rapport à l’autre. Une dernière petite démo de PowerView, et on est déjà en retard… Là aussi, un peu dommage d’aller tellement vite, car ça se fait au détriment de la compréhension du rapport.

Daytona est une implémentation Map/Reduce native, par contre la conférence ne dit rien de plus sur l’avenir de cette plateforme. En en discutant ensuite avec un Microsoftee, il semblerait que ce ne soit pas tellement d’avenir, et qu’il vaille mieux parier sur Hadoop.

StreamInsight est une solution de Complex Event Processing par Microsoft : abonnement à des capteurs + moteur de règles + système d’alerte. ll existe une version pour Azure de cette technologie.

Au final, très peu d’interactivité entre les orateurs qui avaient en plus à échanger leur micro, des démos pas bien expliquées, mais au moins de bons pointeurs pour savoir comment commencer à tester par nous-mêmes.

Posted in Retours | Tagged , | Leave a comment

[TechDays2012] DataExplorer

Jean-Pierre Riehl (de la société Azeo, connu sous le pseudo de djeepy1) présente cette session, en commençant par une revue rapide du principe de la BI : créer de la valeur en transformant de la donnée en information à teneur de décision.

ReportViewer et PivotView peuvent être utilisées comme viewers depuis PowerPivot. Par contre, en amont, PowerPivot ne fait que peu de nettoyage, agrégation, formatage, ajout de règles métiers en amont. Du coup, l’idée de Data Explorer est de combler ce manque pour avoir une ligne Data –> Data Explorer –> PowerPivot –> PowerView. Le tout forme la Self Service BI.

ETL va alors devenir plutôt ETP, car le chargement dans un cube sera plutôt découplé en publication d’un service de données, qui lui-même sera utilisé ensuite par un cube.

La CTP de Data Explorer devrait passer en release dans le courant de l’année. Tout se passe en version online, car c’est un outil qui est sur le Cloud. On peut demander un accès, il suffit d’un LiveID.

L’extraction peut se faire à partir de fichiers pas nécessairement parfaitement tabulaires. L’outil propose de choisir l’onglet, et permet de nettoyer en interactif le fichier. On peut par exemple ajouter dans le pipeline des actions de Skip des premières lignes, de suppression de colonnes, etc. Ensuite, on va mettre un FirstRowAsHeader, etc. Les actions sont décrites par une grammaire qui ressemble aux fonctions d’Excel (ou peut-être du DAX ?)

Il manque une action de merge intelligent, car le merge est une simple jointure, qui ne tient pas compte des accents, etc. Du coup, l’approche comme quoi un analyste peut se débrouiller sans capacité de développement est un peu biaisée.

Note : l’intervenant présente http://jsonformatter.curiousconcept.com, qui est un outil de formatage du JSON en ligne.

La récupération de l’adresse géolocalisée montre d’autant plus que seul un développeur peut réaliser cette approche. C’est d’ailleurs assez rassurant de voir que même Microsoft n’a pas réussi à inclure plus d’intelligence que dans des applications de pipeline normales. Par contre, ce qui est très intéressant est qu’on dispose d’un assistant, même s’il faudra bien sûr voir si on peut récupérer un format descriptif du contenu de l’ETP (apparemment, c’est le cas car on peut publier le format DE Mashup). Le langage de programmation est basé sur le métalangage M.

La publication se fait par défaut sur le site de DataExplorer lui-même (et pas dans Azure Data Market).

Le requêtage se fait de manière systématique. Par contre, on fait quand même des snapshots pour pouvoir figer le résultat d’un mashup. Le snapshot est alors au format DataExplorer, ou au format Base de données.

Il y a un add-in Excel pour publier de la donnée. Data Explorer existe également en version On Premise pour des serveurs locaux. Enfin, il est bien sûr possible d’exporter sur Azure Data Market. Certaines actions de transformation pourront être proposées de manière contextuelle en faisant de l’analyse de pattern (“Voulez-vous insérer la population de cette commune?”).

Il reste certaines questions : Comment ça se passe sur des gros volumes d’entrée ? Comment est-ce que le résultat tient compte des données qui ne changent pas lorsqu’il est rafraîchi lors de changement des fichiers sources ? Sur du contenu extérieur, il se remet automatiquement à jour, et ce de manière systématique, mais comment est-ce qu’on prend le cache en compte dans cette architecture ? Pour l’instant, il semble que le recalcul soit systématique, ce qui n’est vraiment pas bon du point de vue de l’utilisation des ressources.

Posted in Retours | Tagged | Leave a comment

[TechDays2012] Plénière Jour 3

Présentée par Bernard Ourghanlian, le Léon Zitrone de Microsoft. Cultivé, précis, très bon orateur, c’est vraiment un plaisir d’avoir une plénière présentée par cette figure de Microsoft.

Le Test de Turing consiste pour une machine à ne pas être différenciée d’un humain par un interrogateur pendant 5 minutes. Nous ne sommes peut-être plus si loin (une quinzaine ou une vingtaine d’années) de ce point de l’Histoire… L’orateur cite Ray Kurzweil : The Singularity is near, la singularité en question étant une fusion cybernétique entre le cerveau humain et son équivalent informatique.

Transport, Education et Santé vont être envisagés dans la conférence, dans le cadre des agents personnels intelligents s’adaptant au contexte. Le premier exemple donné est celui d’Angie, une plateforme ouverte de création d’agent personnel. Sur de l’acquisition vocale, des traitements sont faits dans le Cloud, qui utilise des marchés de compétences (ex : prix de l’essence, programmes TV, etc.). Le résultat n’est pas encore parfait, peut-être surtout à cause de la reconnaissance vocale, mais les résultats sont intéressants : c’est la première fois que je vois une application qui peut donner une impression fugace de compréhension. On est donc encore loin du Test de Turing, mais les chercheurs progressent.

Ensuite, un besoin est présenté : savoir retrouver dans 100 ans les données des Tech Days 2012, par exemple. Il faut voir que des écritures anciennes sont toujours connues, alors que ce ne sera peut-être pas le cas pour les données numériques actuelles. Pas sûr que ce soit une bonne approche de vouloir systématiquement garder la totalité de nos connaissances, toutefois : le processus d’évolution doit s’appliquer aussi sur les connaissances, potentiellement inutiles voire parasites, et qui disparaissent naturellement. Mais ça, ce n’est que mon opinion.

Le parallèle est ensuite réalisé avec Pompei, pour laquelle on a une maquette virtuelle qui va permettre de faire voir aux générations futures ce qu’était la ville, sachant qu’elle ne fait que se dégrader depuis sa découverte. Bonne idée de Microsoft de faire intervenir une archéologue, car les croisements de sciences sont toujours bénéfiques à tous. C’est important pour des développeurs de ne pas rester le nez dans le code : on trouve plus de bonnes idées en réfléchissant à des domaines qui ne sont pas liés directement.

Le mashup est mis en avant de manière tellement forte qu’on pourrait croire qu’il va remplacer la création effective de connaissance à partir d’une réflexion. Personnellement, ça me gêne un peu, surtout que je passe mon temps à expliquer à mes étudiants en veille technologique qu’une bonne étude n’est pas une simple concaténation d’informations piochées sur internet, mais une réflexion menée sur ces sources, de façon à les connecter. De la même manière qu’un cerveau vaut plus par ses synapses (connexions) que par ses neurones (stockage), une bonne étude n’est pas un simple assemblage de données, mais leur enrichissement par un apport intellectuel. C’est, je trouve, la limite de cette démo de la plénière : c’est bien de pouvoir agréger et diffuser facilement de la donnée, mais ça n’apporte pas grand chose…

La santé est abordée sous l’angle de la dépendance des personnes agées, avec la possibilité d’une assistance par robot. Rien de très nouveau là-dedans, et nous sommes même plutôt en retard sur ce qu’on peut trouver sur les robots japonais d’assistance personnelle.

La suite est une démo impressionnante de Kinect Fusion, qui permet de reconstruire instantanément un contenu en 3D en observant simplement le champ de profondeur pendant le déplacement. Le mouvement de la caméra est immédiatement compensé par un rafraîchissement du rendu 3D, et une forme peut être capturée pour le 3D Printing.

La conclusion de Bernard Ourghanlian est que “Les mondes réels et virtuels peuvent s’interpénétrer”. Le final est sur l’oeil de HAL qui surveille l’orateur, ce qui n’est pas très rassurant, il faut bien l’avouer. Et nous partons sur Ainsi parlait Zarathoustra, en se disant que, quand même, il ne faudrait pas oublier que le réel est la base, et que le virtuel ne fait que s’ajouter.

Posted in Retours | Leave a comment

[TechDays2012] Animations avec Canvas et CSS3

Bon, pour la deuxième fois de la journée, je me suis fait bouler de la session que je voulais suivre. C’est assez pénible… Si on veut vraiment être sûr de voir une session, le seul moyen est de courir vers la salle dès la fin de la précédente. Sauf que passer toute l’après-midi sans boire un café ou un verre d’eau, c’est un peu dur. Et encore, contrairement à la précédente loupée, j’ai pu ce coup-ci voir mon second choix, parce que c’était dans un grand amphi, et là il y a de la place. On a rapidement vu le sujet lors de la plénière du premier jour, mais ce sera l’occasion d’approfondir.

David Catuhe et David Rousset présentent cette session très bien faite, technique mais bien expliquée.

Les limites de la balise video sont le problème des codecs. Visiblement, l’orientation est que, dans l’attente d’un consensus, les différents formats d’encodage proposés sont pris l’un après l’autre en fonction de ce que le navigateur supporte. Par contre, il y a un bug sur les iPad, et du coup, il vaut mieux commencer par mp4 et ensuite webm, de façon que le fallback fonctionne à peu près correctement. Le deuxième niveau de fallback est de rebalancer sur une balise object.

Microsoft propose à validation du W3C la notion de GridLayout. Au lieu de faire des tas de div imbriqués, on va plutôt utiliser un style css3 qui va contenir les col / row / colspan / rowspan d’une façon très proche de ce qu’on fait en XAML. Ainsi, la séparation entre le contenu et le contenant est encore mieux implémentée.

La flexbox est une option proposée par Microsoft également, et qui permet de gérer les tailles différentes d’écran en tassant les images ou en changeant le positionnement avec les syles, plutôt que d’être dépendant du comportement standard de passage sur la ligne en dessous.

La démo expose ensuite le résultat sur le resize d’un navigateur. On peut changer complètement le layout en fonction de la taille disponible. La feuille de style utilise une media query comme @media screen and (orientation: portrait) and (min-width:320 px) pour donner le style associé à cette condition.

SVG étant un format vectoriel, il permet de conserver la qualité comme on le fait en XAML même avec un niveau de zoom. A l’inverse, le Canvas est un point d’entrée de contrôle de tous les pixels d’un bitmap. Autre différence, le SVG est un modèle retenu (qui existe sous forme de domaine en mémoire, qu’on peut manipuler, styler, etc.) alors que le Canvas est un mode Fire & Forget : une fois qu’on a écrit, c’est affiché et impossible à modifier.

RaphaelJS est une librairie JavaScript pour manipuler SVG sous forme d’objets de haut niveau.

La démo montre ensuite les rôles d’accessibilité ARIA, qui s’applique du coup à SVG car il y a un DOM derrière. Donc, l’accessiblité peut tout de même être bonne, à l’inverse du Canvas.

InfoVis est une librairie de haut niveau, mais ce coup-ci du côté Canvas. Au final, il y a autant de puissance, même si le modèle est plus élégant. Par contre, comme on gère les pixels, on peut tout à fait avec un gros frame per second y compris avec des très gros volumes de données. Pour ce qui est de l’accessibilité en mode Canvas, l’idée est surtout d’avoir un fallback avec le mode donnée dans un simple tableau.

Il est intéressant de voir que, au delà du combat entre les deux David pour savoir lequel des deux modes est le meilleur, ils peuvent tout à fait cohabiter.

La présentation passe ensuite sur les animations, qui sont des enchaînements de transitions. Au final, une très bonne session, très fouillée et qui explique bien non seulement le fonctionnement des technos, mais surtout pourquoi elles ont été créées et pour quel besoin précis il faut les utiliser, avec leur limite, etc. C’est suffisamment rare pour être souligné !

Posted in Retours | Leave a comment

[TechDays2012] Hadoop Map/Reduce sur Windows et Windows Azure

Session présentée par Pierre Lagarde, Yann Schwartz et Benjamin Guinebertière. Pour moi, clairement la meilleure des sessions qu’il y avait sur Hadoop aux TechDays.

Un type de manipulation classique sur de la donnée massive issue de logs et transformée par une sortie Hadoop est de reprendre les données pour analyse dans un cube PowerPivot. En plus des développeurs Big Data, il faut donc aussi mettre en scène des analystes de données.

Ce qui caractérise Big Data n’est pas seulement les très forts volumes, mais le fait que les données ne sont pas relationnelles, et qu’elles viennent de données hétérogènes. Ceci dans le but de répondre à des questions originales et permettant de créer des économies dans des approches différentes de ce qu’on faisait avant.

Hadoop = Pig pour l’ETL + Hive pour le reporting + Sqoop (RDBMS par interop avec des bases de données SQL). Hadoop est également le HDFS qui est un système de fichiers qui supporte tout ceci. ZooKeeper gère la mise en place et la coordination de tous ces outils.

Microsoft propose une API JavaScript pour la configuration du job Map/Reduce. Le JavaScript est compilé en Java, donc très performant. Il y aura certainement bientôt une API .NET également. Dans le mécanisme de décompte des mots, il y a une première phase de Reduce qui est quand même réalisée dans chacun des nodes, de façon à ne pas envoyer “coucou,1” trois fois, mais plutôt “coucou,3”, qui prendra moins de temps à passer en Reduce pour concaténer les décomptes des mots de tous les nodes.

Le mécanisme pour créer un cluster Hadoop est encore en CTP, mais l’interface sera bientôt disponible. Pour l’instant, il vaut donc mieux ne pas perdre son temps à se créer soi-même son ensemble Hadoop.

Hadoop a pour principe de déplacer le code vers la donnée plutôt que l’inverse, afin de réduire la bande passante.

Par contre, côté utilisation des ressources, c’est assez volumineux, car le principe d’Hadoop n’est pas d’économiser, mais seulement de distribuer les données et les traitements sur de nombreuses machines. Du coup, on n’économise pas, et au contraire, on donne la possibilité à un requêteur de mobiliser énormément de ressources pour satisfaire une requête. Au final, un analyste peut se retrouver à demander le calcul de plein de requêtes sans se rendre compte que chacune mobilise une heure de traitement sur des clusters de plusieurs dizaines de machines octo-processeurs.

Il y a un plugin Hive Query pour Excel, qui permet de faire des requêtes sur un cluster Hadoop.

Une utilisation possible d’Hadoop peut aussi être de travailler sur des données importantes mais pas obligatoirement énormes, tout simplement pour pouvoir paralléliser fortement les traitements.

La difficulté est qu’un algorithme correspond à beaucoup de Map/Reduce atomiques à la suite : il faut donc avoir une surcouche permettant de décrire des traitements plus complexes. C’est le cas de Hive qui permet de faire un pseudo SQL. Il y a aussi PigLatin, qui fait un mélange entre du SQL et de l’impératif. Ca ressemble un peu au niveau des jointures à Linq. Ensuite, les compilateurs tranforment ceci en Map/Reduce mais beaucoup plus optimisé que ce qu’on ferait à la main.

Yann Schwartz a créé un outil qui permet de transformer du Linq en Map/Reduce. Très intéressant, et à creuser, surtout pour les liens que cela ouvre de manière plus globale avec les autres méthodes de calcul rapide : à partir du moment où on exprime une expression fonctionnelle de calcul, on peut plus facilement envoyer sur Hadoop, du GPGPU, etc.

Hadoop sait travailler directement avec de la donnée en mémoire.

Mahout permet de faire du machine learning sur Hadoop. Par exemple, l’architecte en chef de Google a réalisé un algorithme de quelques dizaines de lignes qui est un correcteur orthographique universel, mais qui a besoin de 10 To de données sur lesquelles apprendre.

Encore une fois, désolé pour le style un peu télégraphique de ces retours de Tech Days, mais le but est surtout de ramener des astuces et de garder la connaissance acquise de manière synthétique. Pas besoin pour ça de trop d’enrobage verbeux…

Posted in Retours | Tagged , | 2 Comments

[TechDays2012] Tour dans les stands

Bon, ben, je me retrouve sans les sessions que je voulais voir… L’idée était de voir les nouveautés de programmation parallèle dans Visual Studio 11, et comme il n’y avait plus de place 15 minutes avant le début, j’ai foncé à MVVM de A à Z, mais pas de bol non plus ! Et après être reparti au galop pour me faire fermer la porte au nez devant la session sur TFS et Test Manager 2010, je me suis dit que c’était le moment de faire un tour des stands.

Bon, je ne suis pas méga-chaud pour me faire alpaguer par tous les commerciaux présents, donc toute l’astuce consiste à ne pas s’arrêter devant un stand pour lequel on n’a pas d’intérêt 🙂

Je récupère mes tee-shirts “Ask The Experts” au stand des communautés, mais ils ne me serviront malheureusement pas. Je suis allé passer presque une heure au stand développement, et ce en pure perte de temps. En fait, le stand était surtout utilisé par des étudiants partenaires Microsoft et des démonstrations du robot d’Aldebaran. Du coup, personne pour poser une question sur un sujet de développement, surtout que rien à part le logo sur le tee-shirt ne précise que les participants peuvent nous aborder.

Passage pour le stand ENI pour récupérer les flyers pour mon dernier livre, ainsi bien sûr que saluer la plus sympa des équipes d’édition 🙂 J’ai le plaisir d’apprendre que mon livre sur PowerPivot se vend bien, et qu’il a même fallu faire revenir des exemplaires de Nantes dès le deuxième jour !

Au stand des certifications Microsoft, j’apprends qu’il y a un nouveau niveau intermédiaire entre MCPD et MCA, à savoir MCM. Comme je suis MCPD.NET Entreprise Architect, il n’y avait auparavant rien au-dessus, à part Microsoft Certified Architect, mais cela suppose un tuteur, un projet d’un an et une soutenance aux USA, donc c’est clairement un énorme coût que ni la société qui m’emploie ni moi-même ne pouvons nous permettre. Microsoft Certified Master est une étape de certification entre les deux, à savoir qu’il s’agit également d’un projet avec un oral, mais visiblement un peu plus accessible en termes de temps et de complexité. Par contre, la soutenance se fait apparemment toujours aux USA, avec peut-être une possibilité de faire en Allemagne dans quelques années (mais c’est plus une hypothèse, d’après ce que j’ai compris). Dans les deux cas, il ne s’agit pas d’une inscription, mais d’un programme qui se fait sur proposition par Microsoft.

Posted in Retours | Leave a comment

[TechDays2012] Introduction à MongoDB

Sridhar Nanjundeswaran nous fait une excellente présentation de MongoDB : bien technique sachant que nous étions tous des développeurs à l’écoute, mais en même temps suffisamment transverse pour qu’on puisse trouver des points de compréhension facilement.

La partie importante de NoSQL est surtout que la donnée n’est pas relationnelle, ce qui permet d’obtenir une scalabilité horizontale plus forte. L’idée principale de MongoDB est d’évoluer librement et de faire du sharding pour améliorer la performance en écriture, alors qu’en mode relationnel, on a plutôt tendance à dégrader la structure normalisée et à gérer des problèmes de cohérence de cache ou de partitionnement logique pour améliorer la performance.

MongoDB est un système basé sur un master unique. MongoDB laisse l’OS se charger du cache d’écriture, car il utilise des fichiers mappés en mémoire. En MongoDB, une ligne est en fait un document JSON (en fait, la persistance est réalisée en BSON – Binary JSON) qui suit la description d’un schéma. Du coup, un Join peut être un embedded document, ou bien un identifiant vers un autre document.

http://try.mogodb.org permet de tester le système sans avoir à l’installer. Sinon, en local, on dézippe le contenu téléchargé, et on lance mongod.exe, en lui laissant prendre le défaut sur /data/db. En démarrant, il crée une console web pour les premières opérations de gestion. mondo.exe est un client simple. show dbs pour voir la liste des bases de données disponibles, et il y aura au minimum une base de données de test. db.posts.insert(p) avec p créé en écriture JSON pour faire notre première écriture. La fenêtre, au passage, est un vrai shell complet (SpiderMonkey), donc on peut faire des calculs, etc.

dp.posts.find() va faire un FindAll pour vérifier que les lignes ont été insérées, ce qu’on peut également vérifier par la présence d’un premier fichier de persistance de 64 Mo. La ligne a automatiquement ajouté un _id, qui est globalement unique, si il n’existait pas. Si on tape db.posts.findOne sans parenthèses, on a la définition de la fonction à titre d’aide. show collections donne accès à la liste des bases, en l’occurrence dans nos exemples depuis le début, posts.

db.stats() et dp.help() ou db.posts.help() donnent des informations sur le contenu et l’aide sur les commandes globales ou les commandes sur les collections. En MongoDB (contrairement à un SGBD où toutes les colonnes sont forcées sur toutes les lignes par la simple existence du schéma), il y a une différence entre la présence d’un attribut et sa présence avec une valeur null. Du coup, c’est l’opérateur $exists qui permet de voir ceci.

Attention, si on fait un $set, on remplace la totalité du contenu de l’attribut, alors que $push va rajouter une valeur dans un tableau. $unset enlève complètement le champ, ce qui est différent de pousser la valeur null dedans. En MongoDB, un update s’applique seulement sur le premier document qui correspond au critère. Il faut mettre le flag multi pour avoir le comportement comme dans une base de données.

Une relation 1-n peut être modélisée avec plus ou moins de force dans MongoDB, ce qui permet de prendre en compte le métier, où certains objets sont liés de manière forte (suppression automatique des fils sur la suppression du parent, etc.), mais certains ont un lien beaucoup plus lâche. On peut par exemple faire un arbre avec l’objet contenu dans le document du père. C’est très performant, mais plus compliqué si on doit récupérer une partie seulement du document. Surtout, il y a une limite de 16 Mo sur la taille d’un document unique. Sinon, on peut faire des liens en utilisant les identifiants des parents et des enfants. La table des ancêtres est alors elle-même indexée.

L’indexation est très puissante en MongoDB : on peut par exemple créer un index sur un attribut d’un document, mais aussi un attribut multi-clé sur les entrées d’un attribut contenant une table de valeurs. Enfin, il y a également un index basé sur la géolocalisation. Les index peuvent être incomplets, et du coup, il n’y aura pas de ressource perdue si un document ne contient pas l’attribut sur lequel on travaille.

Il est essentiel d’utiliser du 64 bits, car MongoDB utilise des fichiers mappés en mémoire, et du coup, on se retrouve limité à 1,5 Go environ si on est en 32 bits.

Le fournisseur .NET permet de piloter la sérialisation de telle ou telle manière pour un objet donné. La chaîne de connexion est de type “mongodb://localhost”. Le fait d’utiliser une base ou une collection est suffisant pour la créer si elle n’existe pas. En .NET, on va typiquement faire un insert sur une instance de BsonDocument.

MongoDB sur Azure existe, et fait appel aux mêmes librairies que la version serveur. Il est possible d’utiliser un worker role sur Azure pour mettre en place un MongoDB. En Azure, le mode d’installation est automatiquement avec un replica set.

Une question me reste à trouver : quelle est la relation de MongoDB à Map/Reduce ? MongoDB permet de faire du clustering pour la répartition des données, et il semble que du coup, comme le sharding se fait automatiquement, les requêtes soient naturellement parallélisées.

MongoDB utilise un niveau de lock sur les fichiers mappés en mémoire, ce qui lui permet de ne pas bloquer des ensembles complets. La structure étant très peu hiérarchisée par rapport à une base de données, c’est pratique car on peut locker non pas au niveau d’un métier, ce qui est en général gênant, mais plutôt au niveau d’une entité de l’infrastructure, en l’occurrence l’atome de stockage.

Posted in Retours | Tagged | Leave a comment

[TechDays2012] Nouveautés d’Azure

Pour cette session, comme il s’agit de beaucoup d’information très ponctuelles, je vous livre mes notes telles quelles. Tout ce que je pourrais ajouter comme texte ne serait que de l’enrobant cosmétique, et comme ça ne servirait pas à une meilleure compréhension, je préfère m’abstenir.

CloudCoverShow sur Channel9 pour suivre l’actualité d’Azure.

L’offre gratuite est désormais chapeautée, c’est-à-dire qu’on ne peut pas dépenser plus que prévue, et que les services s’arrêteront. C’est une excellente décision, je trouve, parce que le fait de donner un numéro de carte et de risquer de se faire facturer si on ne maîtrise pas bien (oubli d’arrêt d’une instance, mauvaise anticipation des ressources, utilisation extérieure non anticipée, etc.) n’était clairement pas bonne. Les deux orateurs précisent qu’ils se sont battus avec Microsoft Corp pour que ceci soit accepté, et ils ont bien fait !

Lien Help and Support accessible y compris sur les offres gratuites, et avec une personne réelle derrière, qui parle français et qui est très réactive en général.

Une interface permet de suivre la facturation en temps réel sur un contrat Azure. Pas eu le temps de noter le lien toutefois, mais je pense que ce ne doit pas être dur à retrouver.

Une autre permet de profiler les requêtes sur SQL Azure, avec le plan d’exécution, etc. Les orateurs ne sont pas convaincus de l’interface, parce qu’elle montre peu. Perso, je trouve ça bien au contraire de ne pas crouler sous les informations, mais de voir uniquement les infos globales, et de pouvoir ensuite creuser à notre rythme.

Azure Data Sync est en CTP 2, et SQL Azure Reporting est livré (désormais, les rapports qui étaient locaux même s’ils tapaient sur de la donnée Azure, peuvent tourner sur le Cloud même).

SQL Azure Federation : sharding d’une base de données pour éclatement sur plusieurs bases physiques. Attention par contre à bien garder sur toutes les bases les données de référence. Utiliser les partitions les plus logiques possibles de façon à ne pas pulvériser les performances sur jointures. Typiquement, une clé de sharding de type géographique est intéressante, de façon à permettre de répartir les données sur des sessions géographiques différentes.

Trois instances extra-small peuvent être obtenues en échange d’une instance small, ce qui permet de tester même sur des petits abonnements des systèmes avec plusieurs instances.

A partir de maintenant, c’est bien un IIS complet qu’il y a dans Azure. Donc, attention à toutes les docs antérieures à 2011, car elles parlent peut-être de Hosted Web Core.

Plutôt que de devoir mettre en place les certificats à la main, on peut utiliser le Publish Wizard dans Visual Studio pour récupérer un fichier XML avec toutes les informations mises en place automatiquement par Azure.

Windows Azure Connect (en Release) permet de créer un VPN IPSEC pour de l’intégration forte vers des machines locales. Il s’agit de cas extrêmes où on a besoin d’un VLAN, sachant que beaucoup de scénarios peuvent tout à fait être traités avec un bus de messages.

Pour éviter les problèmes liés à l’affinité de serveur pour la session, on peut utiliser le cache Azure, qui est prévu pour être utilisé comme un mode ServerState ou SQLServerState.

La fédération d’identité s’ouvre à des fournisseurs d’authentification entreprise, en plus des traditionnels Google, Yahoo, Facebook, LiveID, etc.

WAZAbi pour permettre de l’autoscaling.

Intégration TFS Build + Azure => DeployToAzure et TFS Build Extensions. Une partie de l’ALM peut être déployée sur Azure, et il est également possible d’intégrer dans TFS la publication dans Azure.

Posted in Retours | Tagged | Leave a comment

[TechDays2012] Plénière Jour 2

Pas facile de prendre des notes dans l’ambiance boîte de nuit / techno boom boom d’une plénière. Sympa, la démo de table de mixage en touch sur un écran transparent, mais mes vieilles oreilles en ont pris un coup…

Pour redevenir sérieux, la plénière était moins orienté développeurs qu’hier. Aujourd’hui, c’était la journée des commerciaux, et on a parlé de consumérisation de l’IT, à savoir le rapprochement de plus en plus proche des pratiques personnelles et professionnelles en termes non seulement de partage de matériel (le concept de BYOD, ou Bring Your Own Device), mais aussi en termes de partage de pratique (ergonomie visuelle, inclusion dans les réseaux sociaux, etc.)

Ce dernier point en particulier est illustré avec une démo intéressante du concept de XRM où la CRM est étendue au citoyen, au participant sur un réseau, à la personne qui pourrait influencer l’avenir d’un produit, etc. Le logiciel permet en particulier de moissonner des réseaux sociaux par des mots-clés pour savoir ce qui se dit sur un produit / une société, et de rebondir sur cette actualité pour une action ou une communication directement ciblée. Pas mal, donc, mais quand on en arrive au partage des centres d’intérêts personnels sur la plateforme professionnelle, je suis de plus en plus dubitatif…

Là où je suis beaucoup plus intéressé, par contre, c’est sur la démonstration de Benjamin Guinebertière et Pascal Bellaud autour de l’agrégation de données en mode BigData et la mise à disposition de données agrégées par des analystes, en particulier avec la spécification OData. Benjamin montre comment intégrer de la donnée dans un Hadoop sur Azure, puis comment le requêter ensuite depuis un SSAS “in house” avec Hive. Pascal montre le DataExplorer, qui permet de croiser des données hétérogènes. L’idée est qu’un simple analyste de données puisse réaliser ceci, sans besoin d’un développeur, et qu’il puisse redistribuer de la donnée sur la Market Place Data d’Azure, en lui ayant adjoint de l’intelligence / du métier.

Au passage, je suis content de voir que l’approche utilisée est celle d’une suite ordonnée de transformations simples (changer l’ordre des colonnes, les renommer, rajouter des calculs, etc.) sous forme d’un pipeline, sachant que je professe cette approche depuis pas mal d’année dans mon boulot 🙂

Deux questions, toutefois, se posent à mon avis. La première est la mise en relation : elle est effectivement simple quand les croisements sont explicites (la démo montrait des numéros de département), mais j’ai du mal à avoir comment on peut aider des analystes non développeurs dès qu’il faut attaquer du formatage fort de donnée pour la mise en relation. La seconde est liée aux licences : certaines données de data.gouv.fr, par exemple, force que l’utilisation de la donnée soit elle-même gratuite, donc il faut bien faire attention à ceci avant d’utiliser les outils.

La suite de la démo est très impressionnante, avec en particulier la diffusion d’un PivotView sur une tablette via PowerPoint, tout en gardant l’interactivité, et en particulier un graphe ou mouvement pour les évolutions d’indicateurs. Très visuel, très lisible.

Pour tout le reste, je vous renvoie aux webcasts…

Posted in Retours | Leave a comment