vendredi 16 septembre 2005

Structure d'un site


STRUCTURE

Un site web n'est pas si long à créer. Du temps doit quand même être pris pour bien bâtir la structure du site afin de faciliter la maintenance. Un site bien conçu dès le départ permettra d'ajouter de nouvelle section, changer l'apparence du site... plus aisément. Dès le départ, nous devons penser comment on va découper notre site web: un en-tête, un menu, un sondage, un pied de page, la zone principale... Ensuite, nous devons penser où que ses zones soient affichées et quelles dimensions elles prendront.

Chaque zone devrait être défini à l'aide de la balise <div>. La mise en page à l'aide de tableau est à proscrire. Tant qu'à faire un site web, autant respecter les standards. L'utilisation de div, permet d'alléger le code.
Notre exemple comporte 4 zones: un en-tête, un menu, une zone principale et un pied de page.

Entête

L'entête présenté ci-dessous est celui utilisé pour le site web actuel. Ce script est utilisé pour toutes les pages du site web. Deux variables sont passées au script afin de modifier le tag titre et description.

<?php
function entete($sec_nomsection,$tmp){
?>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
    <head>
      <title><?php  echo $sec_nomsection; ?> - La boîte à prog </title>
      <link rel="stylesheet" type="text/css" href="/screen.css" />
      <meta http-equiv="Content-Language" content="fr" />
      <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
      <meta name="description" content="Site web d'apprentisassge - Cours, tutoriels et lien en programmation ainsi que des critiques de livres: Delphi, Pascal, PHP, Génie logiciel"/>
      <meta name="Keywords" content="<?php  echo $tmp.","; ?> Borland rulez, Delphi, cours, La boite à prog, Tutoriels, Tutoriaux, Système d'exploitation, Tutoriel, Génie logiciel, Interbase, Firebird, Optimisation, Bash" />
    </head>
    <body>
      <div class="conteneur">
        <div id="header">
          <div class="left">
            <img src="/img/logo.gif" alt="logo du site web" />
          </div>
          <div class="right">
            <a href="index">Accueil</a> | <a href="contact">Contact</a> | <a href="contribution">Contribution</a> | <a href="forum">Forum</a><br/>
            <form method="post" action="resultat" id="recherche">
              <div>
              <input class="txtsub" type="text" id="motsclef" name="motsclef" />
              <input type="hidden" name="form" value="recherche" />
              <input class="butsub" type="submit" name="resultat" value="Rechercher" />
              </div>
            </form>
          </div>
          <div class="pied"></div>
        </div>
 <?php
}
?>

Pied de page

Tel que l'entête, le pied de page présenté ci-dessous est celui utilisé pour le site web actuel.
<?php
function piedpage(){
  ?>   
    <br/>
    <div id="footer">   
      <div class="left">
        Webmestre: <a href="mailto:collinm@laboîteaprog.com" title="Courriel du webmestre">Marc Collin</a>
      </div>
      <div class="center">
        <a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a>
        <a href="http://jigsaw.w3.org/css-validator/"><img width="88" height="31" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"/></a>
      </div>
    </div>   
  </div>
</body>
</html>
<?php
}
?>

Menu

Pour un menu, plusieurs options peuvent être envisagées, vertical, horizontal, utilisation de liste, javascript... Dans un site web, plusieurs sections peuvent exister, ces sections peuvent être mises dans une base de donnée. Lorsqu'une section sera ajoutée dans la base de donnée, le changement aura lieu directement sur le site web.
function topmenu()
{
  echo'<br/><br/><div class="framemenu"><div class="menu">';
  // Obtient les noms des section de la bd
  $requete = mysql_query("SELECT sec_nosection, sec_nomsection FROM section");
  if ( mysql_num_rows($requete) != 0 )
  {
    // li les sous-sections dispo dans la bd et les affiche - delphi/kylix, asm -->
    while ($ligne = mysql_fetch_assoc($requete))
    {
      $tmp=htmlentities(''.$ligne["sec_nomsection"].'');
      echo'<a href="news'.$ligne["sec_nosection"].'">'.$ligne["sec_nomsection"].'</a>';
    }
  }
  echo'</div></div><br/>';
}

Zone principal

La zone principale est la zone où la majorité de l'information est affichée. C'est la zone qui change le plus... les autres : en-tête, pied de page... changent moins fréquemment. Par exemple sur ce site, la page principale affiche les nouveautés du site. Ensuite si on se dirige dans une section, les nouveautés de la section sont affichées. Les tutoriels, description de livre... sont affiché dans cette section.

Nous avons vu comment structure un site web. Il est possible de diviser les zones de notre site web afin d'avoir différentes zones. Cette pratique est mieux qu'utiliser des frame. Cette approche à l'avantage de fonctionner dans tout navigateur web. L'exemple montré était celui de ce site web.

Cycle du développement du logiciel


CYCLE DU DÉVELOPPEMENT DU LOGICIEL

Le développement d'un programme se résume souvent pour beaucoup de personnes à une phase de codage. Cette étape représente pourtant qu'une petite partie du cycle de vie d'un logiciel. Un programme ne pourrait bien sûr pas exister sans son écriture. Il est tout à fait possible de réaliser un logiciel sans utiliser d'autres étapes, mais des problèmes peuvent rapidement survenir si nous devons y apporter des modifications, ajouter des fonctionnalités...

Dès les années 70, le développement de logiciels connaissait des problèmes. Il n'y avait pas de méthodologie et de norme ce qui donna bien souvent des systèmes de qualité douteuse.

Les systèmes d'aujourd'hui sont encore plus complexes qu'à cette époque, imaginer alors les problèmes pouvant être rencontrés de nos jours. Le génie logiciel tente à l'aide de processus, analyse, méthode et norme de corriger ce problème. Les dépassements de budget et de temps sont monnaie courante dans le développement d'application. Nous allons voir les principes de base du génie logiciel qui tente de corriger ces problèmes.

Le but du développement de logiciel est de produire un logiciel de qualité. De nombreux critères existent afin de définir la qualité d'un logiciel.

Exactitude

C'est l'obtention des résultats escomptés. Si un logiciel doit effectuer des calculs sur des matrices, on s'attend à ce qu'il le fasse. Obtenir tout autre résultat ne nous intéresse pas et ne répond pas à nos besoins.

Portabilité

C'est la facilité à porter un logiciel sur un autre système d'exploitation. Par exemple, on pourrait citer Mozilla et Apache qui ont cette qualité, car ils existent pour divers systèmes.

Extensibilité

C'est la facilité qu'un logiciel peut être adapté pour de nouveaux besoins. Un système mal conçu pourrait faire en sorte que tout le système doit être refait afin d'ajouter quelques fonctionnalités que les utilisateurs désirent. Un système ne serait alors pas extensible.

Réutilisabilité

C'est la capacité à utiliser certaine partie du logiciel pour créer d'autre logiciel. Une telle approche permet de diminuer les coûts et risques lors de la construction d'un système.

Vérifiabilité

C'est la facilité à créer des tests pour un logiciel.

Intégrité

C'est l'aptitude d'un logiciel à se protéger contre les accès interdits au niveau du code et des données

Robustesse

C'est la capacité du logiciel à bien répondre lorsque ses conditions d'utilisation sont anormales. Un logiciel pourrait être conçu pour qu'environ 100 utilisateurs puissent l'utiliser simultanément. Des tests avec 1000 utilisateurs pourraient être faits afin de savoir si le logiciel est encore capable de répondre convenablement aux usagers.
D'autres qualités peuvent exister pour un système. Un logiciel ne peut combler toutes ces qualités.

Cycle du développement du logiciel

Le développement de logiciel, peut se résumer en 7 étapes :
  • Déterminer les besoins
  • Conception préliminaires
  • Conception détaillée
  • Implémentation
  • Intégration
  • Test
  • Maintenance
Ces étapes peuvent bien sûr varier d'une entreprise à l'autre. Elles constituent néanmoins le squelette du cycle logiciel. Il est tout à fait possible de retrouver plus ou moins d'étapes dans une entreprise donnée. Il y a plusieurs variantes.

Déterminer les besoins

La communication est primordiale afin d'arriver au résultat escompté par le client. Le client doit bien être identifié. Le client n'est pas nécessairement un connaisseur en informatique, c'est pourquoi que la communication est bien importante. Les deux parties doivent bien s'attendre sur ce qui doit être réalisé.

Cette section doit spécifier les fonctions nécessaires pour répondre aux besoins du client. Les besoins existants doivent être traduits en besoin logiciel. Les connaissances informatiques qu'ont les utilisateurs. Les performances requises. Les contraintes de réalisation. Le nombre de fois que l'usager doit utiliser le système. Les caractéristiques clés, obligatoires.

Plusieurs moyens sont disponibles pour obtenir ces informations. Il est possible d'effectuer un entretien avec les clients, les utilisateurs. L'utilisation d'un questionnaire ainsi que l'observation du client dans ses tâches, peuvent aussi contribuer à répondre à ces questions.
Les besoins du client au niveau des interfaces, performances contraintes, qualités... doivent être traduit. Les deux parties doivent bien s'attendre afin que la suite puisse fonctionner.

Conception préliminaire

Cette section décrit de façon globale le produit. Les résultats de l'étape précédente sont utilisés afin de produire ce que le système doit faire. Cette section doit permettre de savoir si le projet est faisable au niveau informatique, l'estimation de travail à faire. On doit pouvoir savoir comment réaliser le logiciel à la fin de cette section. La solution doit être décomposée en une architecture modulaire. Tous les besoins doivent être définis et décomposé en fonction.C'est l'étape du «quoi».

Conception détaillée

La description du logiciel est faite. Maintenant, on doit spécifier davantage les détails du système afin d'arriver à une description très proche du programme. C'est l'étape du «comment». Les modules de la section précédente doivent être décrits minutieusement. Les fonctions doivent être décomposées en élément plus petit. Les données et algorithme doivent être décrits pour chaque élément. Les données d'entrée et de sortie doivent être précisées. Un plan de test doit être fait pour chaque module. Une bonne estimation du temps et du nombre de personnes nécessaires peut-être fait à la suite de cette section.

Implémentation

Les modules de la section précédente doivent être codés, réalisés dans un langage de programmation. C'est souvent cette étape que les gens s'attardent le plus. Les autres étant souvent très négligés, pour ne pas dire oublié. Des tests des modules séparés sont effectués. (test unitaire).

Intégration

Cette étape vérifie si que l'architecture spécifiée dans la conception préliminaire est bien respectée. On rassemble les modules entre eux et on fait des tests Progressivement en vérifiant les résultats obtenus à ceux attendus. Un travail de modification doit être fait si les résultats ne concordent pas avec ceux escomptés.

Test

Cette étape permet de savoir si on a bien écrit le système que le client désirait, de savoir si on a répondu à ces besoins. Des tests de validation doivent être faits afin de vérifier si le logiciel est conforme aux spécifications déjà établies du logiciel. Le système doit être testé par d'autres personnes que ceux qui l'ont conçu et sur d'autres machines. Le système est installé chez le client. La formation est donnée. Cette formation peut être faite à l'aide de documentation,vidéo ou cours.

Maintenance

Des anomalies peuvent être trouvées et une ou des personnes sont en charge de modifier les modules, documentations... afin de résoudre ces problèmes. Des nouvelles fonctionnalités peuvent être ajoutées. Des tests peuvent être refaits afin de s'assurer que les corrections n'apportent pas d'autre problème sur le système.
Chaque étape à un temps approximatif. Très souvent la majorité du temps est passé à l'implémentation. Même si aucun problème n'était trouvé, rien ne garantit, que le système est bien, celui que le client désirait.
  • Déterminer les besoins environ 15%
  • Conception préliminaire environ 10%
  • Conception détaillée environ 15%
  • Implémentation environ 20%
  • Intégration environ 10%
  • Test environ 30%
Les temps présentés ici peuvent varier, mais ils devraient être près de ces valeurs. Si l'implémentation dure 80% de la durée du projet, il y a un problème. Les autres étapes vont en subir les conséquences et le projet risque d'avoir quelques difficultés.

Selon des études (Standish Group par exemple), seulement 30 % des projets informatiques des entreprises connaissent la réussite. C'est très peu. Environ 15 % d'entre eux sont purement et simplement des échecs et 50 % ne répondent pas aux contraintes qui leur avaient été imposées, d'où la nécessité de bien s'attendre avec le client sur ce qui doit être fait.

Le cycle présenté ici ne garantit pas que le projet soit une réussite, mais il diminue les risques d'avoir un échec.

Une étape ne doit pas être nécessairement être terminé pour en entamer une autre. Le modèle présenté ici est général. Nous allons voir plus en détail des modèles de développement qui existe.

mercredi 7 septembre 2005

Compiler le kernel


COMPILER LE KERNEL

Nous allons voir comment compiler un kernel Linux. Dans ce tutoriel, nous utiliserons suse 10. Nous compilerons le kernel 2.6.13-15.7. Les commandes montres dans cet article fonctionnent néanmoins avec n''importe quel kernel 2.6.

Installez les sources du kernel
rpm -i kernel-source-2.6.13-15.7.i586.rpm

déplacez-vous dans le répertoire du kernel (/usr/src/linux) pour effectuer les prochaines opérations.

Modifiez la ligne contenant EXTRAVERSION dans le fichier Makefile. N'importe quelle valeur peut être mise, mais le premier caractère doit être un trait d'union.

Si vous ne voulez pas utiliser le fichier de config de ce kernel faite
make mrproper

Cette commande permet de choisir les options du kernel
make xconfig

Pour débuter, il peut être intéressant de rien changer afin de s''assurer que ça fonctionne. Par la suite, vous pouvez enlevez des fonctionnalités que vous n''utilisez pas.

Ouvrez le fichier: .config et modifiez la ligne concernant: CONFIG_LOCALVERSION, changez sa valeur. La valeur mise pour cet exemple est: -default_collinm_1. Ce changement permettra de ne pas écraser les modules. Ainsi, ce noyau et ses modules seront totalement indépendants du noyau que vous avez.

Cette commande compile le kernel
make bzImage

Cette commande compile les modules
make modules

Cette commande installe les modules
make modules_install

La commande ci-dessous copie le bzimage, System-map et modifie grub pour vous
make install

Ensuite, vous devez modifier votre fichier grub ou lilo. Ici nous allons modifier le menu de grub
Avant les modifications menu.lst ressemblait à
# Modified by YaST2. Last modification on Tue Jan 17 02:34:27 EST 2006

color white/blue black/light-gray
default 0
timeout 8
gfxmenu (hd0,4)/message

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
    root (hd0,4)
    kernel /vmlinuz root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
    initrd /initrd

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
    root (hd0,4)
    kernel /vmlinuz root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
    initrd /initrd

Le fichier après les modifications fait par make install ressemble à
# Modified by YaST2. Last modification on mer fév  8 22:53:52 EST 2006
color white/blue black/light-gray
default 1
timeout 8
gfxmenu (hd0,4)/message
title Linux-2.6.13-test1-15.7-default_collinm_1
 root (hd0,4)
 kernel /vmlinuz-2.6.13-test1-15.7-default_collinm_1 root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-test1-15.7-default_collinm_1

###Don''t change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-15.7-default
###Don''t change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
 initrd /initrd-2.6.13-15.7-default

Si vous regarder dans votre répertoire /boot, il est fort probable que vmlinuz pointe sur la nouvelle valeur ici: vmlinuz-2.6.13-test1-15.7-default_collinm_1. Il faut donc modifier cela.
# Modified by YaST2. Last modification on mer fév  8 22:53:52 EST 2006
color white/blue black/light-gray
default 1
timeout 8
gfxmenu (hd0,4)/message
title Linux-2.6.13-test1-15.7-default_collinm_1
 root (hd0,4)
 kernel /vmlinuz-2.6.13-test1-15.7-default_collinm_1 root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-test1-15.7-default_collinm_1

###Don''t change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz-2.6.13-15.7-default root=/dev/sda6 vga=0x317 selinux=0    resume=/dev/sda9  splash=silent showopts
 initrd /initrd-2.6.13-15.7-default

###Don''t change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe -- SUSE LINUX 10.0
 root (hd0,4)
 kernel /vmlinuz-2.6.13-15.7-default root=/dev/sda6 vga=normal showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3
 initrd /initrd-2.6.13-15.7-default

Il est maintenant possible de démarrer sur un et l''autre des noyaux. Les modules sont indépendants.

Si vous utilisez les pilotes Nvidia, une fois qu'ils sont installés vous pouvez démarré sur vos autres noyaux. Lancez NVIDIA-Linux-x86-1.0-xxxx-pkg1.run avec l'option -K. Vous allez ainsi avoir les pilotes pour le noyau en cours. Cette commande doit être faite pour chacun de vos noyaux.