Valid XHTML 1.0!

SAC : Stockage, Archivage et Compression ;
            solution des exercices choisis

 

Table des matières cliquable

pour la partie 1   :      Stockage    énoncé    solution
pour la partie 2   :      Archivage    énoncé    solution
pour la partie 3   :      Compression    énoncé    solution

Solutions des exercices pour la partie 1 : Stockage

  1. La chaine "Bon courage à tous et à toutes." (guillemets non compris) contient 31 caractères exactement : "B" en est le premier et le symbole "." (le point) en est le 31 ième et dernier. Si on met telle quelle cette chaine dans un fichier on a alors 32 octets pour Unix et 33 octets pour Windows comme le montrent les copies de commandes qui suivent : (attention sous Windows à coller le symbole > juste après le point sinon le fichier contiendra un ou plusieurs espaces avant la fin de fichier).
     
    
    
         # Unix
         gh@sirius>echo Bon courage à tous et à toutes.> boncourage.txt
         gh@sirius> ls -al boncourage.txt
         -rw-r--r--  1 gh info 32 oct 19 11:52 boncourage.txt
         gh@sirius> cat boncourage.txt
         Bon courage à tous et à toutes.
         gh@sirius>
    
         # Windows
         Z:\>echo Bon courage à tous et à toutes.> boncourage.txt
    
         Z:\>dir boncourage.txt
         19/10/2003  11:50                33 boncourage.txt
    
         Z:\>type boncourage.txt
         Bon courage à tous et à toutes.
    
         Z:\>
    
    

     
    Pour rajouter un retour charriot en plus, on peut pour Unix utiliser la commande echo avec la chaine vide et la redirection de sortie avec concaténation. Par contre sous Windows, il faut utiliser la commande echo. (le symbole . doit être collé au mot echo). Voici ce qu'on obtient
     
    
    
         # Unix
         gh@sirius>echo "" >> boncourage.txt
         gh@sirius> ls -al boncourage.txt
         -rw-r--r--  1 gh info 33 oct 19 11:54 boncourage.txt
         gh@sirius> cat boncourage.txt
         Bon courage à tous et à toutes.
    
         gh@sirius>
    
         # Windows
         Z:\>echo. >> boncourage.txt
         Z:\>dir boncourage.txt
         19/10/2008  11:52                35 boncourage.txt
    
         Z:\>type boncourage.txt
         Bon courage à tous et à toutes.
    
    
         Z:\>
    
    
    On obtient exactement la même taille Windows avec notepad, sous unix avec vi ou emacs car ces éditeurs n'insérent aucun autre caractère.
     
    Avec notre version de Word 2002 pour Windows pour stocker la phrase et le retour charriot les tailles vont croissant si on stocke en HTML, RTF et DOC (pas de XML disponible) :
    
                     35 boncourage.txt
                  2 893 boncourage.htm
                  4 062 boncourage.rtf
                 19 968 boncourage.doc
    
    alors qu'avec openoffice/write 1.1 pour unix on dispose du format standard (sxw) et d'une possibilité XML (DocBook) ainsi qu'un ordre différent pour les tailles :
    
                   612  boncourage.html
                   252  boncourage.xml
                  1961  boncourage.rtf
                  5402  boncourage.sxw
                  8192  boncourage.doc
    

     
    Pour passer à XHTML, il suffit d'enlever les particularités des balises <STYLE> d'OpenOffice.org 1.1.4 (Linux) ou des balises <o:> et <style:> de Microsoft Word 2002 version 10 ( Windows ) ce qui donne donc des fichiers plus petits.
     
    Pour Unicode, la question est compliquée car il faut savoir de quel encodage on part et vers quel encodage on veut arriver. Il suffit d'essayer sous Unix les commandes iconv --list ou recode --list pour s'en rendre compte. Toutefois, en admettant qu'on veuille de l'UTF8, voici qu'on peut faire :
    
    gh@sirius>iconv -f ISO_8859-1 -t UTF-8 boncourage.txt > boncourage.unicode
    gh@sirius>ls -al boncourage.*
    -rw-r--r--  1 gh info 32 oct 19 12:39 boncourage.txt
    -rw-r--r--  1 gh info 34 oct 19 12:43 boncourage.unicode
    

     
    On peut tirer de nombreuses conclusions de ces manipulations :
     
    • la plupart des logiciels savent enregistrer sous divers formats,
    • certains formats sont plus gourmands en taille que d'autres,
    • certains formats sont plus lisibles que d'autres par les humains,
    • les logiciels rajoutent leurs options, leur "meta-tags" dans les formats,
    • un simple retour-charriot n'est pas codé de la même façon sous Unix et sous Windows,
    • la gestion des documents multilingues est très technique,
    ...

    Si on ne peut pas ouvrir les fichiers boncourage.docx et boncourage.odt avec un simple éditeur, c'est parce que ce sont des archives. On peut voir ce qu'ils contiennent avec un archiveur quelconque ; on peut aussi les renommer pour utiliser un explorateur de fichiers :

    
          ls -al boncourage.*
          -rwxrwx--- 1 gh gh 10258 2008-12-06 19:57 boncourage.docx
          -rwxrwx--- 1 gh gh  7469 2008-12-06 19:34 boncourage.odt
    
          zip -v  boncourage.docx
          Archive:  boncourage.docx
           Length   Method    Size  Ratio   Date   Time   CRC-32    Name
          --------  ------  ------- -----   ----   ----   ------    ----
              1312  Defl:S      358  73%  01-01-80 00:00  3795fcdd  [Content_Types].xml
               590  Defl:S      243  59%  01-01-80 00:00  b71a911e  _rels/.rels
               817  Defl:S      250  69%  01-01-80 00:00  51b364d6  word/_rels/document.xml.rels
              1181  Defl:S      523  56%  01-01-80 00:00  fdee1e08  word/document.xml
              6992  Defl:S     1686  76%  01-01-80 00:00  e2adb596  word/theme/theme1.xml
              2108  Defl:S      985  53%  01-01-80 00:00  fb5bc572  word/settings.xml
              1031  Defl:S      382  63%  01-01-80 00:00  144bc8aa  word/fontTable.xml
               260  Defl:S      187  28%  01-01-80 00:00  928ad84a  word/webSettings.xml
               742  Defl:S      403  46%  01-01-80 00:00  239b0bf3  docProps/app.xml
               787  Defl:S      401  49%  01-01-80 00:00  54f97c77  docProps/core.xml
             14768  Defl:S     1752  88%  01-01-80 00:00  4d75182d  word/styles.xml
          --------          -------  ---                            -------
             30588             7170  77%                            11 files
    
          unzip -v  boncourage.odt
          Archive:  boncourage.odt
           Length   Method    Size  Ratio   Date   Time   CRC-32    Name
          --------  ------  ------- -----   ----   ----   ------    ----
                39  Stored       39   0%  12-06-08 18:33  0c32c65e  mimetype
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/statusbar/
                 0  Defl:N        2   0%  12-06-08 18:33  00000000  Configurations2/accelerator/current.xml
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/floater/
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/popupmenu/
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/progressbar/
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/menubar/
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/toolbar/
                 0  Stored        0   0%  12-06-08 18:33  00000000  Configurations2/images/Bitmaps/
              3130  Defl:N      805  74%  12-06-08 18:33  38fa86f2  content.xml
             10752  Defl:N     1927  82%  12-06-08 18:33  cd43d6ab  styles.xml
               971  Stored      971   0%  12-06-08 18:33  4ffa4f22  meta.xml
               846  Defl:N      236  72%  12-06-08 18:33  1cfa5a26  Thumbnails/thumbnail.png
              7992  Defl:N     1275  84%  12-06-08 18:33  3ddba80a  settings.xml
              1889  Defl:N      324  83%  12-06-08 18:33  da488265  META-INF/manifest.xml
          --------          -------  ---                            -------
             25619             5579  78%                            15 files
    
    

     

  2. Pour convertir le fichier agenda.txt en UTF-8 sous Linux, on peut utiliser la commande iconv présentée à la question précédente.
     
    Pour windows, on peut recompiler iconv à partir des sources disponibles sur Internet via openwebmail-libiconv ou encore plus simplement éditer le fichier avec XMLSPY et l'enregistrer car XMLSPY convertit automatiquement lorsqu'il voit l'attribut d'encoding dans l'en-tête XML (je l'avais bien dit qu'il était excellent !).

     

  3. La première chose à faire est d'apprendre vite fait Perl (ou d'essayer d'adapter des programmes déja écrits) par exemple avec notre tuteur Perl.
     
    Ensuite il faut réfléchir à l'usage du programme pour savoir quels paramètres lui passer. A priori, un seul paramètre (obligatoire), doit être suffisant : le répertoire où chercher les fichiers DSC. Sans paramètre, le script Perl, disons alldsc.pl, rappelera la syntaxe à utiliser.
     
    Si on ne connait pas bien Perl, on pourrait être tenté d'utiliser les redirections précédentes et donc d'effectuer quelquechose comme
    
         dir /on *.dsc > liste1.fic
         dir /od *.dsc > liste2.fic
         
    
    sous Windows et quelquechose comme
    
         ls -aln *.dsc > liste1.fic
         ls -alt *.dsc > liste1.fic
         
    
    sous Unix mais heureusement Perl dispose de fonctions suffisamment générales pour ignorer (au niveau de cet exercice) le système d'exploitation sous-jacent. De plus savoir trier en Perl est très formatteur pour progresser en Perl.
     
    On trouvera dans le fichier alldsc1.txt un programme Perl qui affiche dans la session Dos ou Xterm les listes demandées (sans gestion RTF).
     
    Pour mettre en forme les listes dans un document RTF, deux options sont possibles : écrire "à la main" les ordres RTF ou utiliser un module perl tout fait (attention la liste est longue et parfois lente à charger) comme RTF-Writer qui contient RTF-CookBook. Nous utiliserons la première option ce qui permettra de découvrir ou d'approfondir RTF : en voici les spécifications pour la version 1.5 (c'est encore un texte long et parfois lent à charger).
     
    Le prologue (début) du fichier RTF est assez facile à écrire puisqu'on n'a que deux styles de paragraphes : les "Nom de liste" et les "Description de fichier" avec chacune une police de caractère, disons "Arial" et "Courier New". Ce début ressemble donc à :
    
         {\rtf1
    
         {\fonttbl
         {\f0\fswiss Arial;}
         {\f1\fmodern Courier New;}
         }
    
         {\stylesheet
         {\s0 Nom de liste;}
         {\s1 Description de fichier;}
         }
    
         
    
    Pour écrire les noms de listes en gras avec la police 0 (Arial) et en taille 14 (soit en points 2*14=28) et les descriptions de fichier en police 1 non proportionnelle (Courier New) en taille 10, on peut se contenter de
    
         \par\s0\f0\fs28{\b  ...ici le nom de liste
         \par\s1\f1\fs20{    ...ici une description de fichier
    

     
    On trouvera dans le fichier alldsc2.txt le programme Perl qui produit le fichier RTF avec les listes demandées ; un exemple de fichier RTF est alldsc_rtf.txt et si votre navigateur est configuré pour cela, vous pouvez directement voir alldsc.rtf.

     

  4. Pour tester les commandes mysql, on peut utiliser à l'Université la machine forge. Voici une partie la session mysql :
    
         gh@forge>mysql -h forge  -u anonymous -p  statdata
         
            ... ici on tape le mot de passe qui est "anonymous" (sans les guillemets)
         
         mysql>describe  stagesMaitrise ;
         +-------------+-------------+------+-----+---------+-------+
         | Field       | Type        | Null | Key | Default | Extra |
         +-------------+-------------+------+-----+---------+-------+
         | nom         | varchar(60) |      | MUL |         |       |
         | an          | int(4)      |      |     | 0       |       |
         | categorie   | text        |      |     |         |       |
         | titre       | text        |      |     |         |       |
         | entreprise  | text        |      |     |         |       |
         | adresse     | text        |      |     |         |       |
         | codepost    | text        |      |     |         |       |
         | responsable | text        |      |     |         |       |
         | tel         | text        | YES  |     | NULL    |       |
         | telstd      | text        | YES  |     | NULL    |       |
         | telstg      | text        | YES  |     | NULL    |       |
         | fax         | text        | YES  |     | NULL    |       |
         +-------------+-------------+------+-----+---------+-------+
    
         mysql> select categorie, count(*) from stagesMaitrise group by categorie ;
         +-----------+----------+
         | categorie | count(*) |
         +-----------+----------+
         | ?         |        3 |
         | gp        |        8 |
         | info      |       92 |
         | info      |        1 |
         | infos     |        1 |
         | mkg       |        5 |
         | rh        |        3 |
         | stat      |       35 |
         +-----------+----------+
    
    

    Cette session montre que le champ categorie de la table stagesMaitrise est celui qui nous intéresse et qu'il y a plus de valeurs de catégorie que n'indique l'énoncé. Afficher ces valeurs dans une page Web avec PHP ne pose aucun problème, comme on pourra s'en rendre compte en cliquant sur le lien categstages.php dont le code source lisible est categstages.txt.
     
    Si vous savez déja bien manipuler HTML, PHP et MYSQL vous pouvez remplacer cet exercice par la correction du code source en un fichier conforme au standard XHTML 1.0 "strict", ce qui n'est pas si simple comme le dit le Markup Validation Service du W3C.

    Vous pouvez aussi transformer le programme PHP est un code plus "conceptuel" sans balise, comme categstages2.php, dont le code-source est ici, à condition d'inventer les fonctions qu'il faut.

    Dans le même genre d'idées, vous pourriez masquer les requêtes SQL à l'aide d'objets et de fonctions, comme on le préconise en Mapping objet relationnel.

    Un exemple de formulaire qui construit dynamiquement la liste des catégories est testable à la page choixcateg.php dont le code source est fourni par choixcateg.txt. Il est perfectible (laissé en exercice) car on peut entrer "à la main" avec l'URL une catégorie qui n'existe pas et le programme le gère mal, de même que les antislash dans certaines chaines de caractère...

    Pour automatiser ce traitement, comme PHP est disponible en ligne de commande sur la machine Deneb de l'Université, on peut écrire le programme suivant categstagesautom.php (le code source est dans categstagesautom.txt) qui produit le fichier PDF nommé categstagesautom_org.pdf

     

  5. Une copie lisible de la feuille de style XSL pour transformer le fichier XML nommé allstages.xml en une page HTML qui affiche le nombre de stages par catégorie est categstages_xsl.txt et on peut vérifier avec la page categallstages.xml qu'on obtient ce qu'il faut. Rappel : afficher le "code source" de la page web montre la page sans transformation.

     

  6. Pour reproduire le dessin
    et voila en svg
    On peut écrire :
    
    <?xml version="1.0" ?>
    <svg xmlns="http://www.w3.org/2000/svg" width="500px" height="300px">
    
    <g id="etvoila">
    <rect x="0" y="0" width="150" height="120"
    fill="yellow" stroke="blue" stroke-width="12"/>
    <path fill="red" d="M 75,10 L 25,90 L 125,90 z"/>
    <text x="20" y="60" font-size="25" font-family="Palatino">
    Et
    </text>
    <text x="60" y="60" font-size="25" font-family="Palatino">
    voilà !
    </text>
    </g>
    
    </svg>
    
    

    On peut ensuite l'utiliser seul comme ici soit l'intégrer dans la page comme ci-dessous avec une balise object (lire le code source de cette page pour voir les attributs utilisés avec cette balise object). Attention : certains navigateurs ne "supportent" pas SVG...

     

 

Solutions des exercices pour la partie 2 : Archivage

  1. Pour se déplacer rapidement d'un répertoire à l'autre, le plus simple dans un premier temps est d'utiliser les signets (ou "Favoris" ou encore "Marque-pages") des divers logiciels, navigateurs et explorateurs quand les logiciels offrent cette possibilité.

    Si par contre on veut aller dans un répertoire avant d'effectuer des manipulations sur les fichiers du répertoire, il faut certainement avoir recours à la ligne de commande et à la commande cd. Les chemins des répertoires proposés pour l'exercice sont longs, comme souvent. Une macro-commande ou un script permettent alors de diminuer la frappe. Ainsi définir la macro-commande log comme étant cd /usr/bin/installations/lastsofts/logs/ permet en tapant les trois lettres l, o et g suivi de <entrée> d'aller dans le répertoire considéré.

    Par exemple, avec alias en shell Bash, on définit rapidement ces changements de cd :

       alias monsac='cd ~/public_html/Farcompr'
       # mettre cet alias dans .bashrc pour le rendre permanent
    

     

    Si avec le temps on se rend-compte qu'on dépasse la dizaine de raccourcis et qu'on risque de les oublier, il faut programmer une commande (que l'on pourra nommer icd ou gocd ou go) qui permet de rappeler la liste des raccourcis, de définir un nouveau raccouri. Une simple table de hachage liée à un fichier avec deux colonnes (le raccourci et le chemin) permet alors de se déplacer en toute sécurité. Voici un exemple d'une telle table, mis dans le fichier demoicd.txt
        Bin         /home/info/gh/Bin
        Mia         /home/info/gh/public_html/Projets/Mia
        aa          /home/info/gh/Rch/Aa
        ad          /home/info/gh/Crs/Dossiers_AD
        algoc       /home/info/gh/Crs/Als/Alg/Algo_C
        algocpp     /home/info/gh/Crs/Als/Alg/Algo_Cpp
        algoj       /home/info/gh/Crs/Als/Alg/Algo_Java
        algop       /home/info/gh/Crs/Als/Alg/Algo_Perl
        algopa      /home/info/gh/Crs/Als/Alg/Algo_Pascal
        algope      /home/info/gh/Crs/Als/Alg/Algo_Perl
        algot       /home/info/gh/Crs/Als/Alg/Algo_Tcl
        ali         /home/info/gh/Rch/Align
        alid        /home/info/gh/Rch/AlignDistance
        align       /home/info/gh/Rch/Align
        alio        /home/info/gh/Rch/Ali_old
        allps       /home/info/gh/Rch/nbref/allps
        als         /home/info/gh/Crs/Als
        ap          /home/info/gh/Rch/pontsDis/ap
        apd         /home/info/gh/Rch/pontsDis/Articles
        aps         /home/info/gh/Crs/Stat/Aps
        aql         /home/info/gh/Crs/Projets/Plm/Aql
        aqt         /home/info/gh/Crs/Projets/Plm/Aqt
        asi         /home/info/gh/Crs/Stat/Asi
      ...
    
    On trouvera dans le fichier gocdrex.txt une implémentation en Rexx de la gestion de ces raccourcis. Voici des exemples d'utilisation :
         # quels sont les chemins "courts" qui contiennent stat ? 
         @sirius~/public_html/Projets/Mia|(~gH) > go /n | grep stat
         
             flag                          /home/info/gh/public_html/wstat/Flagrant
             stat                          /home/info/gh/Crs/Stat
             wapplis                       /home/info/gh/public_html/wstat/applis
             wasi                          /home/info/gh/public_html/wstat/wasi
             wd                            /home/info/gh/public_html/wstat/Dossiers
             wsa                           /home/info/gh/public_html/wstat/applis
             wstat                         /home/info/gh/public_html/wstat 
    
    
         # allons dans wasi (!)     
         @sirius~/public_html/Projets/Mia|(~gH) > go wasi
         
             go (gH) version   3.62 (linux-sirius)  
    
    
         # comme le "prompt" le montre, nous y sommes
         # on crée un nouveau répertoire et on va dans ce répertoire      
         @sirius~/public_html/wstat/wasi|(~gH) > mkdir Statx
         @sirius~/public_html/wstat/wasi|(~gH) > cd    Statx
    
         # regardons si l'alias statx existe déjà  
         @sirius~/public_html/wstat/wasi/Statx|(~gH) > go statx
         
             go (gH) version   3.62 (linux-sirius)
    
             Désolé, aucune ligne ne commence par le mot  statx
             que vous recherchez. Utilisez l'option -l
             pour voir la liste des abbréviations.
    
    
             Copyright  2000  - Gilles.HUNAULT@univ-angers.fr
                                http://www.info.univ-angers.fr/~gh/gh.html
    
         # il n'existe pas, alors on le crée     
         @sirius~/public_html/wstat/wasi/Statx|(~gH) > go -a statx .
         
             go (gH) version   3.62 (linux-sirius)
             (gH) go.rex : changements de répertoire.
    
             Abbréviation  statx  (pour  /home/info/gh/public_html/wstat/wasi/Statx)
             ajoutée à  /home/info/gh/Bin/gil.cds
    
             Tri des  282  abbréviations dans  /home/info/gh/Bin/gil.cds
                ....+....+....+....+....+...   
    
         # changeons de répertoire   
          @sirius~/public_html/wstat/wasi/Statx|(~gH) > go tmp
         
             go (gH) version   3.62 (linux-sirius)
             @sirius~/Tmp|(~gH) > go statx 
    
         # et revenons à Statx   
         @sirius~/Tmp|(~gH) > go statx
         
             go (gH) version   3.62 (linux-sirius)
             @sirius~/public_html/wstat/wasi/Statx|(~gH) > 
    
         # et voilà !   
    
    

     

  2. Pour trouver des noms de fichier, Unix est plus riche en commandes que Windows. Ainsi find et [s]locate disposent de nombreuses options de recherche et de tri, grep permet de filtrer les sorties de ces commandes ce qui permet de trouver rapidement des solutions aux questions posées.

     

    Ainsi pour obtenier le nom des 5 derniers fichiers écrits dans le répertoire courant on peut se contenter de
         ls -al -t | head -n 5 
    
    et pour les 10 plus gros :
         ls -al | sort -n -r -k 5,5 | head -n 10 
    
    Pour obtenir les 10 plus gros en tenant compte des sous-répertoires, nous vous conseillons d'utiliser la commande
         lister . | sort -r -n -k 2 | head  -n 10 
    
    où lister renvoie à notre programme perl nommé lister.pl qui liste de façon "sympathique" les fichiers que ce soit sous Linux ou Windows. Pour trouver tous les fichiers modifiés depuis hier, on peut écrire
         find  . -daystart -mtime -2 
    
    mais pour ceux du mois en cours, il faut calculer le paramètre à passer après -mtime (laissé en exercice). La commande Unix nommé du fournit des statistiques sur le répertoire courant, comme par exemple :
    
    @sirius~/Crs/Projets|(~gH) > du  
    
    1200    ./Mpm
    104     ./Mse
    2160    ./Pi/comparb
    2304    ./Pi
    7592    ./Pli
    72      ./Plm/Aql/XBase
    2424    ./Plm/Aql/gnuplot/bin
    2432    ./Plm/Aql/gnuplot
    4384    ./Plm/Aql
    72      ./Plm/Aqt/XBase
    576     ./Plm/Aqt
    6128    ./Plm
    112     ./Pls
    20312   .
    
    
    Il est très facile de gérer les sorties de cette commande pour obtenir des affichages plus personnels comme avec notre programme dun.rex qui propose des options d'affichage, de filtrage des sous-niveaux :
     @sirius~/Crs/Projets|(~gH) > dun 
    
        syntaxe  : dun niveaux [ tri [ chemin] ]
    
        exemples : dun 1
                   dun 2 ~gh/Rch
                   dun 1 A ~gh/Rch
    
        options de tri : A pour alphabétique
                       : T pour tri par taille
    
     @sirius~/Crs/Projets|(~gH) > dun 1 T 
    
     (gH) -- dun (en mO) de  .  profondeur  1 (tri : 2)
    
            1 Mse
            1 Pls
            2 Mpm
            3 Pi
            6 Plm
            8 Pli
    
           20 -- TOTAL --
    
    
     @sirius~/Crs/Projets|(~gH) > dun 1 A
    
     (gH) -- dun (en mO) de  .  profondeur  1 (tri : 1)
    
            2 Mpm
            1 Mse
            3 Pi
            8 Pli
            6 Plm
            1 Pls
    
           20 -- TOTAL --
    
    
    Dans le même genre d'idées, la dizaine de lignes Awk du fichier statdir.awk produisent un comptage des fichiers par extension :
    
     @sirius~/Crs/Projets|(~gH) >  ls -al . | awk -f statdir.awk 
    
    ---  ext            nb_fich        cumul_taille (kO)
         log                9               31
         htm                1                5
         ps.old             1              128
         ps                13             1538
         sty                1               16
         maple              1               34
         aux                8                4
         zip                1              377
         dvi                8              111
         tex               13              134
         tey                1                1
         rex                1                0
         ham                1                0
    
    

    Pour exploiter ce genre de résultat sous Excel, il suffit d'en faire des fichiers CSV c'est-à-dire séparés par des virgules. Vous pouvez par exemple essayer de charger avec Microsoft Excel ou Open Office Calc le fichier liste.csv qui correspond à la liste précédente dont voici le contenu :

    
         extension  ,   nb_fich   ,    cumul_taille_kO
         log        ,       9     ,         31
         htm        ,       1     ,          5
         ps         ,      13     ,       1538
         sty        ,       1     ,         16
         maple      ,       1     ,         34
         aux        ,       8     ,          4
         zip        ,       1     ,        377
         dvi        ,       8     ,        111
         tex        ,      13     ,        134
         tey        ,       1     ,          1
         rex        ,       1     ,          0
         ham        ,       1     ,          0
    
    

     

  3. On ne consultera pas la page Web

     

    http://www.info.univ-angers.fr/pub/gh/Projets/Mia/miaweb.php

     

    dont la "source" au format txt est miaweb.txt

     

  4. Les fichiers .jar sont des archives pour java. Les fichiers .xpi sont des archives pour Mozilla. On peut s'en rendre compte si on les renomme en remplaçant l'extension .jar ou .xpi par .zip ou ,mieux, si on associe ces extensions à l'application zip et ses avatars (gzip, winzip, tkzip etc.)

     

    Toutefois, ces archives .jar et .xpi sont spécifiques pour java et mozilla. Voir par exemple :

     

    Paquetages d'installation XPI
          http://xulfr.org/xulplanet/xultu/xpinstall.html

    "Sun tutorial" sur les archives jar
          http://java.sun.com/docs/books/tutorial/jar/index.html

    "Sun jar command reference" (on jurerait la commande tar [!])
          http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jar.html

    Pour trouver à partir du répertoire courant tous les fichiers dont le nom se termine par .xpi on peut utiliser la commande
    
         find . | grep "\.xpi$"
    

     

  5. Voici les deux syntaxes à utiliser sous Unix en fonction du protocole utilisé :
         firef www.google.fr h
         firefox  http://www.google.fr/ &
    
         # on est dans le cd /home/info/gh/Tmp/
         firef p1.htm a
         firefox  file:///home/info/gh/Tmp/p1.htm &
    
    
    On a certainement besoin d'un script pour tester les paramètres, pour mettre le bon protocole, pour compléter le nom de fichier relatif en nom de fichier absolu (avec indication du chemin d'accès complet)... Le langage Rexx est certainement un bon choix compte-tenu de son "interoperabilité". Le fichier firef.rex est un exemple de script faisant ce qui est demandé. Il se lance sous Unix par

           regina CHEMIN/firefex.rex $*

    et sous Windows par

           regina CHEMIN\firefex.rex %1 %2.

     

  6. Voici les deux URL à transmettre :
         # on veut afficher la page de départ de google
         goog a
         firefox  http://www.google.fr/ &
    
         # on veut rechercher les deux mots tuteur et xml
         goog tuteur xml
         firefox "http://www.google.fr/search?hl=fr&q=tuteur+xml" &
    
    
    
    On a certainement besoin d'un script pour tester les paramètres, pour mettre le bon protocole, pour compléter l'url en cas de paramètres... Le langage Rexx est certainement un bon choix compte-tenu de son "interoperabilité". Le fichier goog.rex est un exemple de script sous Unix faisant ce qui est demandé. Le fichier goog.rex est la version pour Windows (on aurait pu n'utiliser qu'un seul fichier mais les différences sont suffisamment faibles pour ne pas compliquer le script...). Le script se lance sous Unix par

           regina CHEMIN/goog.rex $*

    et sous Windows par

           regina CHEMIN\goog.rex %1 %2 %3 %4 %5 %6 %7.

     

  7. history | grep -i $1.

     

 

Solutions des exercices pour la partie 3 : Compression

  1. La compression en ligne de commande se fait par
         zip -u NOMZIP *
    
    -u pour update ; on pourrait ignorer les fichiers .zip par -x *.zip La décompression avec mise à jour se fait par
         unzip -uLao  NOMZIP -d .
    

    Le script Perl n' qu'à gérer les paramètres, ce que nous laissons en exercice non corrigé.

     

  2. Génération des mini-images à la volée : essayez dirimg (ou la version sur forge dirimg ) et regardez le code-source de la page (sic). Le programme php utilisé ressemble à dirimg et produit quelquechose comme listeg.txt. Un script en ligne de commande qui réalise le même travail à l'aide sed est miniatures.txt ; par contre le programme Perl correspondant est laissé en exercice.

     

    Le problème est que la mini-image est en fait l'image entière affichée en petit, d'où un problème de chargement comme pour la page qui suit mais
    ATTENTION
    cela peut "planter" ou immobiliser longtemps votre navigateur voir même utiliser presque toutes les ressources de votre ordinateur...

     

    bad

     

    la solution est de construire des petites images et de ne charger aucune grande image, comme pour

     

    cdm

     

     

  3. Imagemagick est sans doute la bonne réponse Compression d'images en ligne changer la résolution http://fr.wikipedia.org/wiki/Point_par_pouce http://www.sebsauvage.net/comprendre/dpi/index.html

     

  4. Puisque 419x83 fait 34777 il faut en gros 34 kO pour stocker les données.

     

  5. Il faut mettre dans le fichier .procmail une "recette" de procmail comme
       :0
       *^Subject.*miay2k.*
       * $ ? /home/info/gh/Bin/miarec
       $DEFAULT
    
    et ensuite écrire un script comme miarec

     

  6. Si on conserve le nombre de valeurs, leur somme et la somme de leur carré c'est suffisant car la moyenne s'obtient avec la somme des valeurs divisée par le nombre de termes et la variance (donc l'écart-type) s'obtient par la différence entre la moyenne des carrés et le carré de la moyenne...

     

  7. Voir par exemple sovotf.rex (pour unix) et sovotw (pour windows).

     

  8. On peut utiliser ImageJ, qui se programme par "plug-in" Java.

     

  9. La meilleure solution est sans doute tkdiff.

     

  10. Je ne vais quand même pas vous donner tous mes secrets de référencement... !

     

 

 

 

retour gH    Retour à la page principale de   (gH)