<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>420-1D5 - Assurer la gestion d&apos;un parc informatique</title>
  <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/" />
  <modified>2004-05-28T01:41:45Z</modified>
  <tagline>Toutes l&apos;info sur le cours 420-1D5 du collège Montmorency</tagline>
  <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2004, benoit</copyright>
  <entry>
    <title>Résultats final, examen et TP</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000331.html" />
    <modified>2004-05-28T01:41:45Z</modified>
    <issued>2004-05-27T21:41:45-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.331</id>
    <created>2004-05-28T01:41:45Z</created>
    <summary type="text/plain">Tout est maintenant corrigé. Les notes ont été entrées dans Omnivox : consultez pour voir si je n&apos;ai pas fait d&apos;erreurs flagrantes par exemple dans un examen passé. Ceux qui ont particulièrement bien réussi leur examen et/ou TP ont potentiellement...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Tout est maintenant corrigé. Les notes ont été entrées dans Omnivox : consultez pour voir si je n'ai pas fait d'erreurs flagrantes par exemple dans un examen passé.</p>

<p>Ceux qui ont particulièrement bien réussi leur examen et/ou TP ont potentiellement eu plus de 100% : j'ai déplacé ces points vers une autre évaluation. Félicitations! </p>

<p>J'attends quelques jours que se manisfeste ceux qui croieraient être victime d'une erreur puis je transmets les notes officielles au collège.</p>

<p>Bon été, et bonne chance dans vos études puis la job qui va suivre après!</p>

<p>N'hésitez pas à m'écrire pour me dire bonjour!<br />
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Examen</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000325.html" />
    <modified>2004-05-18T18:29:52Z</modified>
    <issued>2004-05-18T14:29:52-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.325</id>
    <created>2004-05-18T18:29:52Z</created>
    <summary type="text/plain">La correction de l&apos;examen est bien avancé : il me reste à bien départager comment de donne de points pour ceux qui ont &quot;presque bien&quot; répondu.. ;) La question no.7, celle qui parlait de filtre de logs avec HTTP::Log::Filter, a...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>La correction de l'examen est bien avancé : il me reste à bien départager comment de donne de points pour ceux qui ont "presque bien" répondu.. ;)</p>

<p>La question no.7, celle qui parlait de filtre de logs avec HTTP::Log::Filter, a été particulièrement... manqué. Comme on l'a vu très vite dans le cours, j'ai décidé d'être bon et généreux et de la transformer en question bonus. Ainsi, tout le monde a automatiquement les 2 points que la question valait. Si vous avez réussi quand même la question, vous gagnez 2 points supplémentaires. Oui, ca veut bel et bien dire que vous pouvez avoir plus de 100% à l'examen... :)</p>

<p>Les notes complètes devraient être disponibles dans Omnivox dans les prochains jours.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Question bonus!</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000320.html" />
    <modified>2004-05-11T18:36:48Z</modified>
    <issued>2004-05-11T14:36:48-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.320</id>
    <created>2004-05-11T18:36:48Z</created>
    <summary type="text/plain">Pour ceux qui sont assez avancé et/ou qui sont sur le bord de passer (ou de couler...), voici la chance de gagner quelques points supplémentaires : Il s&apos;agit simplement d&apos;ajouter à la série de scripts déjà fait un script supplémentaire....</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Pour ceux qui sont assez avancé et/ou qui sont sur le bord de passer (ou de couler...), voici la chance de gagner quelques points supplémentaires :</p>

<p>Il s'agit simplement d'ajouter à la série de scripts déjà fait un script supplémentaire. Ce script devra  utiliser une des librairies suivantes,au choix:<br />
- LWP<br />
- Parse::Syslog</p>

<p>Libre à vous de trouver une utilisation intelligente, réaliste et pertinente de l'un de ces modules et de l'incorporer dans votre infrastructure de monitoring.</p>

<p>La question bonus peut vous donner jusqu'à 3 points supplémentaires...</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Pour les macqueux dans la salle</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000318.html" />
    <modified>2004-05-10T18:59:16Z</modified>
    <issued>2004-05-10T14:59:16-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.318</id>
    <created>2004-05-10T18:59:16Z</created>
    <summary type="text/plain">MacDevCenter.com: Automated Web Photo Galleries with iPhoto and Perl [May. 07, 2004] If iPhoto is working nicely as your digital shoebox, but you want to automate the process of creating web galleries for your own server, here&apos;s a nifty setup...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Adresses Web</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p><a title="MacDevCenter.com: Automated Web Photo Galleries with iPhoto and Perl [May. 07, 2004]" href="http://www.macdevcenter.com/pub/a/mac/2004/05/07/iphoto_perl.html">MacDevCenter.com: Automated Web Photo Galleries with iPhoto and Perl [May. 07, 2004]</a></p>

<blockquote>
If iPhoto is working nicely as your digital shoebox, but you want to automate the process of creating web galleries for your own server, here's a nifty setup using Sendmail, MySQL, and Perl. Mike Schienle, who specializes in task automation for a living, shows you the system he designed for his wife, who is an avid photographer.</blockquote>
]]>
      
    </content>
  </entry>
  <entry>
    <title>TP3 - scripts de surveillance</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000310.html" />
    <modified>2004-04-27T14:31:31Z</modified>
    <issued>2004-04-27T10:31:31-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.310</id>
    <created>2004-04-27T14:31:31Z</created>
    <summary type="text/plain">Comme promis, voici des scripts de test à ajouter au système de surveillance développé dans les cours précédents : Ping : Écrire un script utilisant la librairie Net::Ping qui vérifie l&apos;état de la connexion Internet de l&apos;hôte en &quot;pingnant&quot; une...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Comme promis, voici des scripts de test à ajouter au système de surveillance développé dans les cours précédents :</p>

<p>Ping :<br />
Écrire un script utilisant la librairie Net::Ping qui vérifie l'état de la connexion Internet de l'hôte en "pingnant" une adresse externe <em>fiable<br />
</em> (www.yahoo.com est un excellent candidat).</p>

<p>FTP:<br />
Automatiser la récupération du fichier /pub/CPAN/RECENT.html  sur le serveur <br />
ftp.cpan.org. Le fichier doit être récupéré une fois par jour.<br />
Variante amusante à essayer : allez chercher le fichier /pub/CPAN/misc/japh ! </p>

<p>Suggestion : consultez la documentation de <a href="http://search.cpan.org/~bbb/Net-Ping-2.31/lib/Net/Ping.pm">Net::Ping</a> et <a href="http://search.cpan.org/~gbarr/libnet-1.18/Net/FTP.pm"><br />
Net::FTP</a> sur le site du CPAN...<br />
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Dates de remise et d&apos;examen</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000309.html" />
    <modified>2004-04-27T14:17:25Z</modified>
    <issued>2004-04-27T10:17:25-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.309</id>
    <created>2004-04-27T14:17:25Z</created>
    <summary type="text/plain">Voici les dates importantes pour la fin de la session : Examen final : 13 mai. L&apos;examen porte sur toute la matière vu au cours de la session : notion de Perl, base de données ainsi que les divers modules...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Voici les dates importantes pour la fin de la session :</p>

<p>Examen final : 13 mai.<br />
L'examen porte sur toute la matière vu au cours de la session : notion de Perl, base de données ainsi que les divers modules vus au cours de la 3e partie du cours.</p>

<p>Remise du TP 3 : 18 mai.<br />
La remise est à faire après la dernière scéance de laboratoire. Comme pour les autres TP, la remise doit se faire de 2 façons :</p>

<ul>
<li>Version papier : Remettre une copie imprimé de vos scripts <em>etat_sys.pl</em>, <em>surveillance_sys.pl</em> ainsi que de toutes librairies que vous auriez fait. Remettre également une copie de chaque scripts de surveillance.</li>
<li>Version électronique : envoyer votre répertoire ~/.montmoniteur par courrier électronique à <a href="mailto:remise@festina-lente.qc.ca">remise@festina-lente.qc.ca</a></li>
</ul> 

<p>La copie papier doit être agrafé, comporter une page de présentation et être remise <b>à temps</b> : 5% par jour de retard. La copie électronique doit me parvenir avant <b>minuit (23h59 !)</b> le 18 mai faute de quoi le décompte des points de retard commence!</p>

<p>Les notes seront affichés via Omnivox dès que la correction sera terminée. Ceux qui désirent recevoir leur copie d'examen et de TP corrigé peuvent me remettre une enveloppe <em>suffisament grande</em>, pré-adressée et dûment "timbrée".</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>TP3 : la base de données</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000301.html" />
    <modified>2004-04-20T16:55:03Z</modified>
    <issued>2004-04-20T12:55:03-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.301</id>
    <created>2004-04-20T16:55:03Z</created>
    <summary type="text/plain">Voici la structure de la base de données... Notez : dans le but de faciliter la correction, son nom doit être &apos;incident&apos;. Donc, vous aurez la table incident, dans la BD incident. Mise-à-jour: Le nom d&apos;usager et le mot de...</summary>
    <author>
      <name>holstein</name>
      
      <email>mtben@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Voici la structure de la base de données...</p>

<p>Notez : dans le but de faciliter la correction, son nom doit être 'incident'.</p>

<p>Donc, vous aurez la table incident, dans la BD incident.</p>

<p><b>Mise-à-jour</b>:<br />
Le nom d'usager et le mot de passe sont, respectivement 'bob' et 'elvis'.</p>]]>
      <![CDATA[<p>--<br />
-- Table structure for table 'incident'<br />
--<br />
 <br />
DROP TABLE IF EXISTS incident;<br />
CREATE TABLE incident (<br />
  id int(10) unsigned NOT NULL auto_increment,<br />
  moment timestamp(14) NOT NULL,<br />
  nom_service varchar(30) NOT NULL ,<br />
  nom_script varchar(30) NOT NULL ,<br />
  niveau enum('debug','info','critique','urgent') NOT NULL default 'urgent',<br />
  a_ete_affiche enum('O','N') NOT NULL default 'N',<br />
  message text NOT NULL,<br />
  PRIMARY KEY  (id)<br />
) TYPE=MyISAM;<br />
</p>]]>
    </content>
  </entry>
  <entry>
    <title>Faire des graphiques</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000297.html" />
    <modified>2004-04-16T20:04:43Z</modified>
    <issued>2004-04-16T16:04:43-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.297</id>
    <created>2004-04-16T20:04:43Z</created>
    <summary type="text/plain">Une introduction à la génération de graphiques avec Perl, via le module GD::Graph: DevChannel | Generating Perl graphs with GD::Graph...</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Adresses Web</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Une introduction à la génération de graphiques avec Perl, via le module GD::Graph:</p>

<p><a title="DevChannel | Generating Perl graphs with GD::Graph" href="http://www.devchannel.org/devtoolschannel/04/04/13/1429242.shtml">DevChannel | Generating Perl graphs with GD::Graph</a></p>]]>
      
    </content>
  </entry>
  <entry>
    <title>TP3 : un exemple de script</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000296.html" />
    <modified>2004-04-15T17:18:47Z</modified>
    <issued>2004-04-15T13:18:47-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.296</id>
    <created>2004-04-15T17:18:47Z</created>
    <summary type="text/plain">J&apos;ai écrit un exemple simple de script qui peut s&apos;insérer dans notre architecture. Ce script vérifie l&apos;espace disque disponible sur le système en &quot;parsant&quot; simplement la sortie de df -h, et avertie si l&apos;espace occupé est plus grand que $MAX_PCT_UTILISE....</summary>
    <author>
      <name>benoit</name>
      
      <email>benoit@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>J'ai écrit un exemple simple de script qui peut s'insérer dans notre architecture.</p>

<p>
Ce script vérifie l'espace disque disponible sur le système en "parsant" simplement la sortie de <code>df -h</code>, et avertie si l'espace occupé est plus grand que <code>$MAX_PCT_UTILISE</code>. Il ne fait qu'afficher (via <em>warn</em>) un message lorsque ce maximum est dépassé : la gestion de l'erreur dans la BD est laissé en exercice... :)</p>
]]>
      <![CDATA[<p>Voici le code en question :</p>

<pre>
#!/usr/bin/perl
#
# Test l'espace libre sur les systèmes de fichiers du système,
# via df -h
#

# On maximum, on
$MAX_PCT_UTILISE = 75; 
print tester();

sub tester{

    open (DF, " df -h|") || die "Erreur : $!";
    @df = <DF>;
    close DF;
    shift @df; # supprime la premiere ligne

    foreach my $d (@df){
	my ($fs, $sz, $utilise, $dispo, $pct, $montage) = split( /\s+/, $d);
	$pct =~ s/%//;
	if ($pct >= $MAX_PCT_UTILISE){
	    warn "Attention, $pct % du disque $fs utilise :\n\t Il ne reste que $dispo de libre sur $montage!\n";
	    ## Dans le TP, on logue cette condition dans la BD...
	}
    }
}

</pre>]]>
    </content>
  </entry>
  <entry>
    <title>Énoncé, TP3</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000293.html" />
    <modified>2004-04-06T14:20:33Z</modified>
    <issued>2004-04-06T10:20:33-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.293</id>
    <created>2004-04-06T14:20:33Z</created>
    <summary type="text/plain">L&apos;énoncé du TP 3 est disponible. Du moins, en partie : comme le dit l&apos;énoncé, certains éléments seront ajoutés au fur et à mesure que la matière nécessaire sera vu en classe. Mise-à-jour! On m&apos;indique (avec raison!) que l&apos;énoncé manque...</summary>
    <author>
      <name>holstein</name>
      
      <email>mtben@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>L'énoncé du TP 3 est disponible. Du moins, en partie : comme le dit l'énoncé, certains éléments seront ajoutés au fur et à mesure que la matière nécessaire sera vu en classe.</p>

<p>Mise-à-jour!</p>

<p>On m'indique (avec raison!) que l'énoncé manque un peu de profondeur côté "portrait d'ensemble"... J'ai donc ajouté un peu de viande autour de l'os et décrit un peu mieux ce à quoi va servir cet outil. Voir l'énoncé!</p>

<p><strong>Note</strong> : je vais vous fournir dans les prochains jours la structure de la base de données à utiliser : j'avais l'intention de vous laisser la faire, mais j'ai finalement décidé que ca serait plus simple que tout le monde ait la même base de départ.</p>]]>
      <![CDATA[<p><h2>TP3 - utilitaires</h2><br />
Écrire l'outil "Montmoniteur", un ensemble d'utilitaires permettant de surveiller l'état d'activité d'un système et/ou d'un parc.</p>

<p>Cet outil sert à surveiller un système (en l'occurence, le votre) et à garder un historique des situations "problématiques". Le tout fonctionne à l'aide de deux programmes : etat_sys.pl, qui nous donne une idée de l'état du système, et surveille_sys.pl, qui est activé chaque minute par cron et qui fait le travail de surveillance proprement dit.</p>

<p>Le script surveille_sys.pl utilise une architecture utilisant des "plugins" : le programme est exécuté chaque minutes et exécute les "plugins" appropriés, selon la pertinence (c'est décrit plus loin). Ainsi, chaque minutes, les plugins contenus dans le répertoire ~/.montmoniteur/minutes_1/ vont être exécutés et vont faire un travail de surveillance quelconque.  Pour les minutes qui sont un multiple de 5, on exécute les plugins du répertoire ~/.montmoniteur/minutes_5/, idem pour 10 minutes, etc.</p>

<p>Les scripts de monitoring proprement dit seront à développer au cours des prochaines semaines en utilisant les modules Perl que l'on verra en classe. Ces scripts utiliseront des modules Perl "standard" pour faire toute sorte de vérifications (état de santé d'un service, lecture de syslog, etc.). </p>

<p><h3>Programme à faire : </h3></p>

<p>etat_sys.pl : </p>

<p>Par défaut, se connecte à la BD et vérifie si des erreurs ont été détectées (on rapporte les 5 dernières erreurs au maximum, par défaut), les affiches et marque les erreurs comme ayant déjà été rapportées. Si appelé avec le paramètres "rapport x.'' (x étant un nombre), affiche tous les détails connus des x derniers événements.</p>

<p>Exemple d'utilisation : on ajoute ce script dans les commandes exécutées au démarrage de notre session shell (dans .bashrc par exemple). Lorsqu'on ouvre un terminal, la commande nous informe d'une situation problématique : </p>

<p><code><br />
Erreur : le service httpd ne répond plus!<br />
[benoit@localhost benoit]$ <br />
</code></p>

<p>surveille_sys.pl : </p>

<p>Activé par cron à chaque minutes. S'occupe de vérifier si des script de monitoring doivent être appelés.</p>

<p><h3>Scripts et configurations  : fonctionnement</h3></p>

<p>Dans la tradition Unix, les configurations du programme sont situé dans un répertoire caché (~/.montmoniteur/). Dans ce répertoire, on retrouve : <br />
<ul><br />
<li> montmoniteur_rc<br /><br />
   Contient les paramètres de conf.(pour la connection à la BD notamment).</li><br />
<li> minutes_1/,  minutes_5/,  minutes_10/<br /><br />
   Contient les scripts devant rouler chaque 1, 5, 10 minutes</li><br />
<li> heures_1/,  heures_2/,  heures_4/<br /><br />
    Contient les scripts devant rouler chaque 1, 2 ou 4 heures</li><br />
<li> jours_1 <br /><br />
    Contient les scripts devant rouler chaque jours.</li><br />
</ul></p>

<p><h3>Comment exécuter un script?</h3></p>

<p>D'abord, déterminer quels scripts doivent s'exécuter.</p>

<p>Ensuite, charger un-à-un les scripts en stockant leurs noms (pour pouvoir rapporter les erreurs d'exécution de script de la même façon qu'une erreur "normale", via la bd et etat_sys.pl, en nommant le script "coupable").</p>

<p>On exécute enfin, pour chaque script, la fonction <em>$PACKAGE->tester()</em>, qui fait le test fourni par le script.</p>

<p>Enfin,on appelle <em>$PACKAGE->stockage_erreur()</em> pour stocker les éventuels messages d'erreurs obtenus dans la BD. (<u title="Mise à jour">MAJ</u> Cette fonction pourrait être appelé implicitement dans la fonction tester() : c'est à vous de décider.)</p>

<p>Voir les <a href="/cours/420-1D5/exemples_tp3.tar.gz" title="Exemples de code pour le TP3">exemples </a>pour savoir comment faire ces opérations.</p>

<p><h3>Scripts de surveillance</h3></p>

<p>La liste des scripts de surveillance à programmer vous sera donnée au cours des prochaines semaines, selon les outils Perl qui seront vu en classe. Cet énoncé de TP est donc appelé à changer.</p>

<p>Pour l'instant, contentez-vous de faire exécuter des tests simples, qui vont par exemple afficher un "bonjour" ou autre chose qui fait votre bonheur ('Hello', par exemple.. ;oP ).</p>]]>
    </content>
  </entry>
  <entry>
    <title>Les tables avec auto_increment</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000290.html" />
    <modified>2004-04-05T13:44:15Z</modified>
    <issued>2004-04-05T09:44:15-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.290</id>
    <created>2004-04-05T13:44:15Z</created>
    <summary type="text/plain">Certains ont des difficultés avec les tables qui comportent un champs &quot;auto_increment&quot;. Je résume donc un peu leur utilisation : Normalement, la syntaxe est la suivante : create table patate ( id INT NOT NULL AUTO_INCREMENT, tubercule varchar(100), primary key(id)...</summary>
    <author>
      <name>holstein</name>
      
      <email>mtben@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Question et réponse</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Certains ont des difficultés avec les tables qui comportent un champs "auto_increment". Je résume donc un peu leur utilisation :</p>

<p>Normalement, la syntaxe est la suivante :</p>

<p>create table patate (<br />
   id INT NOT NULL AUTO_INCREMENT,<br />
   tubercule varchar(100),<br />
   primary key(id)<br />
);</p>

<p>A ne pas oublier :la spécification de "NOT NULL". Pour que l'auto_increment fonctionne, il faut que le champ soit marqué comme non-null. Lorsqu'on insères un nouvel enregistement, il faut alors ignorer le champ id, ou encore lui forcer un valeur de NULL :</p>

<p>INSERT INTO patate (tubercule) VALUES ('Monsieur');<br />
INSERT INTO patate (id, tubercule) VALUES (NULL, 'Monsieur');</p>

<p>N'hésitez pas à utiliser les commentaires du site pour demander des précisions si vous avez encore des questions!</p>

<p>Vous pouvez aussi, bien entendu, m'écrire directement si vous préfèrez garder votre anonymat.. :)</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Comment joindre 3 tables à la fois?</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000288.html" />
    <modified>2004-03-30T20:40:36Z</modified>
    <issued>2004-03-30T15:40:36-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.288</id>
    <created>2004-03-30T20:40:36Z</created>
    <summary type="text/plain">Dans le numéro 3 du TP, il faut afficher le titre + le nom du groupe des chansons contenus dans la base de données. Selon le modèle de données qu&apos;on utilise, il faut joindre 3 tables pour obtenir ces informations....</summary>
    <author>
      <name>holstein</name>
      
      <email>mtben@festina-lente.qc.ca</email>
    </author>
    <dc:subject>Bouts de code</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Dans le numéro 3 du TP, il faut afficher le titre + le nom du groupe des chansons contenus dans la base de données.</p>

<p>Selon le modèle de données qu'on utilise, il faut joindre 3 tables pour obtenir ces informations.</p>]]>
      <![CDATA[<p>Voici un exemple de requête :</p>

<p>SELECT DISTINCT cd.titre, g.nom <br />
FROM cd, groupe AS g, chanson AS ch<br />
WHERE <br />
ch.groupe = g.groupe_id<br />
AND<br />
cd.cd_id = ch.cd;</p>

<p>Notez que <i>g</i> et <i>ch</i> sont des alias sur les tables groupe et chanson, respectivement. La requête est donc équivalente à ca :</p>

<p>SELECT DISTINCT cd.titre, groupe.nom <br />
FROM cd, groupe, chanson<br />
WHERE <br />
chanson.groupe = groupe.groupe_id<br />
AND<br />
cd.cd_id = chanson.cd;</p>]]>
    </content>
  </entry>
  <entry>
    <title>Comment gérer les résultats par pages</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000285.html" />
    <modified>2004-03-26T16:06:44Z</modified>
    <issued>2004-03-26T11:06:44-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.285</id>
    <created>2004-03-26T16:06:44Z</created>
    <summary type="text/plain">Pour afficher les résultats, je demandes de limiter à 10 par pages le nombre d&apos;items. Comment faire alors?...</summary>
    <author>
      <name></name>
      
      
    </author>
    <dc:subject>Question et réponse</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Pour afficher les résultats, je demandes de limiter à 10 par pages le nombre d'items.</p>

<p>Comment faire alors?<br />
</p>]]>
      <![CDATA[<p>Voici du pseudo-code qui explique un peu la logique...</p>

<p># On initialise<br />
page = 0;<br />
nbparpage = 10;</p>

<p># on suppose que vous construisez votre SQL<br />
sql = Select [...] LIMIT page * nbparpage, nbparpage;</p>

<p># que vous l'exécutez et affichez les résultats<br />
[affichage de la liste]</p>

<p>S : page suivante demandé<br />
page =1 <br />
donc, <br />
limit 10, 10</p>

<p>qui donne requete de 10 résultats, a partir de 10.</p>

<p>et ainsi de suite : logiquement, on offre la page suivante seulement s'il y a possiblement des résultats, ie si le nombre d'enregistrements reçus est >= a nbparpage.</p>

<p>N'hésitez pas à écrire dans les commentaires si vous avez des questions sur ce code!</p>]]>
    </content>
  </entry>
  <entry>
    <title>Notes sur DBI</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000284.html" />
    <modified>2004-03-26T15:45:31Z</modified>
    <issued>2004-03-26T10:45:31-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.284</id>
    <created>2004-03-26T15:45:31Z</created>
    <summary type="text/plain">Les notes du cours du 25 mars sont disponibles, en format PDF ou HTML Notez bien que je n&apos;ai pas écrit de note sur l&apos;introduction à DBI du cours précédent : il y a assez d&apos;intro à DBI qui trainent...</summary>
    <author>
      <name></name>
      
      
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Les notes du cours du 25 mars sont disponibles, en format  <a href="/cours/420-1D5/mysql-perldbi-theorie4.pdf">PDF</a> ou <a href="/cours/420-1D5/mysql-perldbi-theorie4.html">HTML</a></p>

<p>Notez bien que je n'ai pas écrit de note sur l'introduction à DBI du cours précédent : il y a assez d'intro à DBI qui trainent sur le Net, je ne voulais pas en réécrire une autre...</p>

<p>Donc, regardez bien les textes données <a href="/admin_parc_info/archives/000281.html">plus bas</a></p>

<p>Considérez le contenu du texte "Spécification DBI - extrait de Perl DBI, le guide du développeur, de O'Reilly" comme matière à examen (seulement les concepts qu'on a abordés, bien sûr) : il s'agit pratiquement d'une traduction du manuel de DBI de toute façon...</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Pour le TP 2</title>
    <link rel="alternate" type="text/html" href="http://www.festina-lente.qc.ca/admin_parc_info/archives/000283.html" />
    <modified>2004-03-26T15:43:15Z</modified>
    <issued>2004-03-26T10:43:15-05:00</issued>
    <id>tag:www.festina-lente.qc.ca,2004:/admin_parc_info/3.283</id>
    <created>2004-03-26T15:43:15Z</created>
    <summary type="text/plain">Encore une modification au contenu à faire dans le TP. Pour être bien certain que tout le monde a bien compris la modification annoncé au début du cours du jeudi 25 mars : Le numéro 3 demandait d&apos;écrire 2 applications...</summary>
    <author>
      <name></name>
      
      
    </author>
    <dc:subject>Informations</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.festina-lente.qc.ca/admin_parc_info/">
      <![CDATA[<p>Encore une modification au contenu à faire dans le TP.</p>

<p>Pour être bien certain que tout le monde a bien compris la modification annoncé au début du cours du jeudi 25 mars :</p>

<p>Le numéro 3 demandait d'écrire 2 applications (que certaines constructions/manipulations auraient pu permettre la gestion dans un seul et même "exécutables" : je reviendrai sur ce genre de constructions dans la 3e partie de la session, après l'examen). La première de ces application, voircd, doit permettre de visualiser le contenu de la "discothèque" et des CD qu'elle contient. La seconde application devait servir à manipuler les inscriptions dans cette base de données : ajouter, modifier les entrées de CD, artistes, chansons, etc.</p>

<p>Dans le but de garder les choses simple et d'éviter d'étirer le temps alloué pour le TP2, la seconde application n'est plus à faire. Donc, le numéro 3 du TP 2 consiste à produire une application capable d'afficher le contenu de la base de données d'albums de la BD "musique".</p>

<p>Le TP est donc par conséquent bel et bien à remettre au <b>début</b> de la scéance de TP du mardi  6 avril. On pourra alors commencer dès cette scéance à travailler sur les utilitaires à bâtir pour le TP3.</p>]]>
      
    </content>
  </entry>

</feed>
