lundi 28 décembre 2009

Cours de biostatistique (II)

Je vais tenter d'étoffer cette rubrique en proposant une référence par semaine sur un cours. Une semaine pour digérer une cours de base de statistique devrait sans acun problème être sufisant.

Les notes de cours proposées ici donnent les bases de la statistique. Elles n'ont pas la prétention de faire de ceux qui les lisent des statisticiens confirmés. Mais permettront à la plupart d'entre nous de comprendre les fondements. Le cours de biostatistique en tant que tel couvre des domaines plus pointus, tels que l'analyse de variance (ANOVA), la régression logistique, la définition d'un protocole ou d'un plan d'expérimentation, ... En ce qui concerne le blog, je me cantonnerai à ce que j'appelle les statistiques "humaines", c'est à dire du calcul statistique qui ne nous oblige pas à utiliser un ordinateur pour obtenir la solution. Ce qui signifie des méthodes de calculs restants à l'échelle humaine.

La partie proposée ici, comprend des notes concernant la statistique descriptive, les notes sont réparties en deux documents:

Statistique descriptive (I)
Statistique descriptive (II)

jeudi 24 décembre 2009

Virtualization

Définition

La virtualization permet d’utiliser les ressources hardware d’un système d’un point de vue fonctionnel en se moquant quelque part de leur implémentation physique (hardware).
L’idée consiste à diviser les ressources matérielles et de les utiliser indépendamment les unes des autres pour faire tourner différents ordinateurs « images ». On pourrait donc faire fonctionner sur la même machine un OS Unix, à côté d’une image Windows, et on pourra les utiliser, voir les rebooter indépendamment les unes des autres. Chaque image fonctionne de manière indépendante avec ses propres ressources CPU, RAM, … et est parfaitement isolée de l’autre comme si elle se trouvait sur un serveur séparé.

Il existe différents outils de virtualization tels que VMWare, XEN, VirtualBox, ... L'un des plus populaire est bien sûr VMWare.

Différence avec l’émulation

L’émulation consiste à imiter ou à rendre le comportement d’un système informatique sur un autre système informatique. Un exemple simple consiste à faire tourner un Commodore 64 sur un PC sous Windows.
Dans l’émulation on ne parle pas simplement d’une simple traduction d’un langage machine vers un autre. L’émulateur doit fournir les mêmes APIs et autres fonctions bas niveaux et les faire tourner sur un système pour lequel elles ne sont pas conçues.
L’émulation est consomme généralement beaucoup de ressources et fournit des résultats assez pauvres. Un système émulé est généralement très lent. Toutefois, les émulateurs sont souvent intéressants pour lutter contre l’obsolescence des systèmes informatiques. (Permettre de lire de vieilles données sur un système plus récent).

Bénéfices de la virtualization

  • Indépendance du matériel, comme pour l'émulation, ceci permet de lutter contre l'obsolescence du hardware, puisque l'image fonctionnera sur n'importe quel type de machines.
  • Ajouter de nouveau serveurs rapidement sans devoir racheter du nouveau matériel.
  • Déplacer une machine virtuelle sur une autre machine physique située ailleurs sans devoir ré-installer ni reconfigurer.
  • Optimalisation de l'utilisation des ressources matériel: Des études montrent qu'en général les serveurs sont utilisés entre 10 et 30% de leur capacité, grâce à la virtualization on peut installer plusieurs images sur un serveur et l'utiliser à pratiquement 100% de ses ressources.
  • Comme les images sont isolées et indépendantes, cela permet de placer des services critiques sur une image particulière, rendant ce service indépendant des autres applications, sans devoir acheter du hardware spécifique.

Les gros bénéfices sont bien sûr la réduction des coûts de matériel et une facilité de maintenance.

Contraintes techniques

  • Les processeurs i386 ne sont pas virtualisables (toutefois les duoCore Intel possède des jeux d’instructions redéfinis pour accepter la virtualisation).
  • Si le serveur physique contenant plusieurs machines est hors services, on perd tout d’un coup.
  • Ajouter trop d'images sur une machine physique réduit ses capacités (temps de réponse, mémoire) et cela peut se repercuter aussi sur les autres images.
  • L’interaction entre la machine « image » et le hardware n’est pas toujours aisée. Ex : les ports USB ne sont pas toujours reconnus correctement.
  • Il est bien sûr intéressant de faire fonctionner une machine à 100% de ses capacités, toutefois il faudra veiller à ménager les disques durs qui sont en général les pièces les plus fragiles. Un disque dur sollicité beaucoup plus a-t-il le même temps de vie qu’un disque moins sollicité ? L’expérience me ferait penser que non, mais seule une étude pourrait le prouver.

Conclusion

Comme toujours il n'y a pas de solution miracle, la virtualization peut s'avérer très puissantes dans certains cas d'utilisations précis. Toutefois, il vaut mieux rester prudent et éviter de virtualizer à tout prix, pour le plaisir de virtualizer. Tout dépend toujours des contraintes de coûts, de niveau de sécurité et de ce que à quoi on est prêt à perdre en cas de gros crash.

Sources

http://veillard.com/Talks/SL08LinuxVirt.pdf

http://www.computerworld.com/s/article/338993/Emulation_or_Virtualization_

mercredi 23 décembre 2009

Web Application (I)

Introduction
Une application Web , du point de vue utilisateur, est une collection de pages dynamiques (le HTML(1) n’est pas uniquement contenu dans un fichier) mais est construit par une extension du web serveur, qui peut créer la page en accédant à une base de donnée et en utilisant d'autres ressources sur le serveur. Du point de vue du développeur l’application web est tout de même un peu plus que cela…Outre le fait de devoir jouer avec un certain nombre de limitations techniques liées à la nature des protocoles (ex : HTTP(2) étant une protocole stateless(3), il faut prévoir un mécanisme de reconnaissance, pour ne pas demander à l’utilisateur de s’authentifier à chaque nouvel accès, autrement dit, il faut gérer la session de l'utilisateur), il faut encore jouer avec d’autres contraintes techniques, telles que la scalability et l’accès transactionnel au donnée. La première chose à définir lorsque l’on veut concevoir une application Web, ce sont ses limites… Ce sont ces limites ou obligations qui vont déterminer le choix de l'architecture, de la technologie et aussi le choix de la plateforme de développement.

Questions intéressantes à se poser

1. Quel est le domaine de mon application, quel est son business ?
Est-ce une application de data-entry, de reporting, de service?
Quel volume de contenus vais-je devoir renvoyer (le volume sera différent si il s'agit d'images, de vidéo, de rapports, ou d'une simple page statique ...)?
Quels types de traitements sur les données vais-je devoir effectuer pour présenter mes informations ? Simples, complexes, extrêmement lourds ?

2. Combien d’utilisateurs devrais-je gérer en même temps ?
Puis-je prévoir cette évolution ?Ex : lorsque le premier site microsoft.com fut mis en ligne, un mois après sa mise en marche le serveur crashait car il y avait beaucoup trop d’utilisateurs connectés. Dans le cas de page statique ne demandant pas d’authentification utilisateurs, il est possible de placer des filtres ISAPI ou encore jouer sur la NAT(4) du bastion(5) pour rediriger certaines addresses ip vers certains serveur. Dans le cas d’une application dynamique c’est beaucoup plus compliqué.

3. Puis-je me permettre de perdre des données en cas de crash, ou de redémarrage du serveur ?
Ex :J’encode un formulaire, au moment où je le soumet, le serveur est redémarré, seul la moitié du formulaire à été prise en compte et sauvée dans la base de donnée. Quelle sera l'impact d'un tel scénario?

4. L’application est-elle interne ou au contraire est-ce un produit qui sera partagé par différents clients ?
Dans le cas d’un produit, les demandes de configuration spécifiques seront nombreuses, par exemple, l’aspect même de l’interface changera peut-être du tout au tout, en fonction du client.

5. Les changements seront-ils nombreux au cours du temps ?
Quelle sera la fréquence des ajouts de nouvelles fonctionalités, modifications des fonctionalités existantes …

6. Quelles sont les contraintes de mon développement ?
Cela dépend bien sûr du type de secteur d'activités de vos clients, une application bancaire demandera beaucoup plus de contrainte en terme de sécurité, de scalabilité, de performances, ... qu'une application commerciale de vente de brosses à dent par correspondance.
Il faut également savoir que certains secteurs de l'industrie sont soumis à des règles strictes: Ex: L'industrie pharmaceutique est soumise à la FDA(6) qui va imposer un certain nombre de règles quant à la gestion des enregistrements électroniques et de l'utilisation des signatures.

7. Quel est mon budget ?
Les moyens financiers mis à disposition sont aussi un élément déterminant du choix d'une technologie. Le temps est aussi un facteur très important. Un bon RAD(7) vous reviendra sans doute plus cher à l'achat mais vous permettra peut-être de vous faire gagner du temps dans vos développements.

(A suivre...)


(1)HTML:(HyperText Markup Language) : ensemble de tags permettant de décrire le formattage d’une page web, ainsi que l’insertion de hyperliens qui permettront la navigation entre ces pages
(2)HTTP:(HyperText Tansfer Protocol) : permet de transférer des pages web, ainsi que des contenus de formulaire. http est un protocole dit state-less, une fois la page transférée, la connexion avec le serveur est coupée, et le serveur ne sait plus qui est le client.
(3)Stateless:Un protocole stateless ne maitient pas de données utilisateurs sur le server (ex: login/password)
(4)NAT:(Network Address Translation):Table contenant les adresses internet de machine localisée sur un réseau Interne.
(5)Bastion:Serveur faisant l'interface entre le réseau interne et le monde extérieur, il joue en général le rôle de gateway et de mur de feu et de serveur proxy (cfr NAT).
(6) FDA:Food and Drugs Administration: Il s'agit d'un comité d'éthique supervisant la mise en circulation des médicaments et de la nourriture. On ne peut pas mettre tout et n'importe quoi sur le marché. Il y a donc des règles imposées par la FDA qu'il faut respecter.
(7) RAD:Rapid Application Development. Il s'agit d'environnement de développement presse boutons qui vous permettent en général d'aller très vite. Il faut toutefois éviter de tomber dans le piège de la programmation spaghetti, difficilement maintenable sur le long terme.

mardi 22 décembre 2009

Cours de bio-statistiques

Avant de se lancer dans la statistique et l’informatique, il est bon au préalable d’avoir quelques notions de bases en stat. Si les notions informatiques peuvent s’obtenir assez intuitivement, il n’en est pas de même pour les statistiques.
Vous trouverez en hyperlien mes notes personnelles prises lors du cours de biostatistique du professeur Catherine Legrand, membre de l’UCL. Ceci, devrait pouvoir vous donner les bases nécessaires à l’utilisation des statistiques que nous ferons ici.

Introduction à la statistique

Cette introduction vous donnera une idée de ce qu'est la statistique, de son rôle dans les sciences et de son utilité générale pour le citoyen lambda. Apprendre notamment à ne pas se laisser berner par les statistiques... Comme le disait W. Churchill : "I only believe in statistics that I doctored myself". Nous verrons dans quelle mesure cette assertion est vraie ;-).

Introduction

Il pourrait paraître étrange de vouloir réaliser un blog sur l’IT et les statistiques, certains pourraient penser qu’à priori, il s’agit là de deux matières parfaitement différentes. Un regard rapide nous aide à comprendre qu’à l’heure actuelle, le travail du statisticien repose essentiellement sur des algorithmes mathématiques implémentés dans des applications logiciels, malgré cela, on peut aisément constater que les statistiques peuvent répondre à beaucoup de questions posées lors du développement et de la validation des logiciels informatiques.

L’objectif de ce blog est de présenter en quelque sorte ce lien dans des cas pratiques et vécu, entre les statistiques et l’informatique. Bien, sûr, je ne me limiterai pas uniquement à l’interaction des deux domaines. Pour en savoir plus, il faudra également apporter de la matière à chacun des domaines pris séparément.

Si en tant que développeur, architecte, ou ingénieur logiciel, vous vous posez la question de ce qu’est un intervalle de confiance ? Et que peut-il m'apporter? L’ambition de ce blog serait de vous fournir ce type de réponses.