Valid XHTML     Valid CSS2    

DECRA : Décomposition, Conception et Réalisation d'Applications

Cours 2 : Petites applications et langages ad hoc

Table des matières cliquable

  1. Qu'est-ce qu'une petite application ?

  2. Les langages de script en général

  3. Les langages Awk, Perl, Php, Python et R

  4. Quelques petites applications et les langages qui vont avec

1. Qu'est-ce qu'une petite application ?

non su non su
non su non su

Il n'est certainement pas facile de répondre à cette question car la limite entre une petite application et une "vraie" ou "grosse" application est difficile à quantifier. Il est clair qu'un petit pont en bois ou une petite cabane dans la forêt est plus facile à réaliser qu'un très grand immeuble ou qu'un immense viaduc, mais le point de départ est le même : il faut modéliser. De la même façon, cerner le "vrai" Big Data aujourd'hui (2017) et le distinguer de la simple accumulation de données n'est pas toujours très aisé.

Nous dirons ici qu'une petite application est une application dont la problématique est cernable en quelques minutes et dont la réalisation se situe dans un délai «raisonnable» inférieur à 10 heures de travail. Ce seuil maximal arbitraire n'a pour but ici que de fixer un ordre de grandeur. Le terme réalisation signifie ici conception, écriture, tests élémentaires. Il ne s'applique pas à la durée véritable de l'application lors de son utilisation. Cette distinction est très importante pour la bio-informatique par exemple lorsqu'on met au point un petit script d'une dizaine de lignes mais dont l'exécution prend plusieurs jours.

Voici donc quelques exemples de petites applications :

  • convertir une valeur de pouces en centimètres en ligne de commandes (ici) ou par page Web () ;

  • réaliser une C.A.H. (Classification Ascendante Hiérarchique) sur des données binaires comme sur la page Cabiq ;

  • produire à la volée des affichettes triangulaires de présentation.

Comme suite logique, voici quelques exemples d'applications qu'on ne peut pas considérer comme petites :

  • programmer la gestion des vols de l'aéroport de Chicago ;

  • écrire un programme qui évalue des réponses libres de lycéens (par exemple une rédaction, un devoir de philosophie) ;

  • réaliser un correcteur orthographique qui comprend «bien» la langue française ;

  • fournir un gestionnaire de réservation de salles simple et performant.

Pour réaliser une petite application, une fois la barrière des termes métiers franchie, on doit souvent se tourner vers un langage de programmation adapté. Même s'il est théoriquement possible de coder un site Web via le langage C, il n'y a pratiquement pas de tels sites.

Des questions à se poser mais qui ne relèvent pas de ce cours sont  «l'application existe-t-elle déjà ? » «Est-elle payante ? » « Facile d'accès ? » « Est-elle adaptée à nos besoins ? » Par exemple, pour une proposition de rendez-vous à plusieurs, ce serait stupide de vouloir réinventer Doodle sauf à vouloir pouvoir y accéder par programme.

Une autre question à se poser mais qui ne relève pas non plus de ce cours est celle de l'intérêt de l'application. Ainsi, y a-t-il un sens aujourd'hui (2017) à vouloir inventer un nouveau moteur de recherche comme Google ?

Nous supposerons donc ici qu'on s'intéresse à de petites applications pour réaliser des tâches utiles, originales... Par exemple, on peut supposer qu'un bon programmeur met "suffisamment" de commentaires dans son code, qu'il définit des cartouches en haut de fichier comme pour le dessin technique... Une petite application en rapport avec ce thème est d'essayer de quantifier le pourcentages de commentaires dans le code-source d'une application.

2. Les langages de script en général

Programmer une petite application ne requiert pas en général de sortir une grosse artillerie avec 50 développeurs, des sites-miroirs, des serveurs de tests. Toutefois, elle nécessite autant de rigueur qu'une grande application, sans quoi elle ne sert à rien. Ainsi il vaut mieux ne pas utiliser un programme qui est censé convertir des pouces en centimètres si la fiabilité de la conversion n'est pas garantie.

Réaliser une petite application -- et ce peut être la maquette d'une grande application, histoire de dégrossir les besoins du client -- suppose de pouvoir développer rapidement et facilement, ce qui exclut sans doute les langages compilés. Un certain nombre de langages de scripts se sont peu à peu imposés pour réaliser ce genre de tâches au fil des années. Leur persistance au-delà d'une dizaine d'années est un gage de leur valeur. C'est pourquoi il nous semble important de les connaitre, au moins de nom, au moins au travers de petits exemples.

Nous retiendrons donc les langages Awk, Perl, Php, Python et R ; tant pis pour les langages APL, Rexx/Regina, SmallTalk, Tcl/Tk... qui, s'ils sont encore utilisés, relèvent d'une communauté particulière, induite par le type de machines (IBM), soit par le type d'application (calcul scientifique, interfaces utilisateurs...). Un lecteur curieux pourra consulter notre vision historique des langages de script via notre cours de master sur le sujet.

     non su

Nous avons aussi écarté les langages dédiés au calcul scientifique inclus dans les logiciels comme Maple, Mathematica, Matlab, Scilab pour rester généralistes. C'est par contre le manque de temps imposé par le format de ce cours qui nous empêche de présenter le langage Ruby, pour lequel nous avons une préférence, même si Python semble, dans l'air du temps, plus utilisé que Ruby. A ce sujet, on pourra consulter les pages burtchworks survey 2017, SPECTRUM, STACIFY, TIOBE et JAXENTER.

Pour éviter de retranscrire ici les rubriques de notre cours de master sur les langages de script, nous vous proposons à titre d'introduction les liens suivants :

non su

3. Les langages Awk, Perl, Php, Python et R

Il n'est sans doute pas très difficile d'avoir un peu de culture sur les langages Awk, Perl, Php, Python et R. Ces langages sont gratuits, généralistes et disponibles partout. Pour vous éviter d'avoir à apprendre en détail tous ces langages, voici ce que nous avons préparé : des tutoriels et des petits problèmes qui montrent bien l'intérêt du langage. S'il est possible de résoudre tous ces problèmes avec tous ces langages, certains permettent de le faire plus aisément, ou de façon plus concise...

La première chose à faire est donc de survoler les langages, via nos tuteurs ou avec des pages synoptiques comme hyperpolyglot, rosetta code et repl.it.

De façon schématique, nous recommandons d'utiliser :

  • Awk pour des applications ultra-courtes et/ou jetables, dès lors que les commandes Unix ou Dos enchainées sont insuffisantes à résoudre le problème ou inadaptées ;

  • Perl s'il y a beaucoup de traitement de données textes à réaliser ;

  • Php s'il faut disposer d'une interface Web ;

  • Python s'il s'agit de traitement scientifique en général ;

  • R lorsqu'il y a beaucoup de statistiques ou des représentations graphiques à produire.

4. Quelques petites applications et les langages qui vont avec

On notera que les applications présentées ici sont de vraiment petites applications. Sauf pour Awk, les langages proposés sont aussi capables de produire des applications moyennes ou grandes.

4.1 Numéroter les lignes d'un ou plusieurs fichiers avec Awk

Comme le titre de la rubrique l'indique, on veut pouvoir consulter un ou des fichiers avec leurs lignes numérotées.

N'hésitez pas à réfléchir pour obtenir ce qui suit, pour les fichiers fic1.txt et fic2.txt avant d'afficher la solution.

Au passage, on regardera ce que produit la commande grep --text "## [0-9]" ndl.sh ; le fichier utilisé est ici.


     $gh> ndl
     Pas de fichier à traiter, rien  à faire, la vie est belle... EXITING. STOP
     
     $gh> ndl -h
     ndl, numéros de lignes pour les fichiers, (gH) version 1.35
     
     syntaxe  : gawk ndl.awk FICHIERS
     exemples : gawk ndl.awk fic1.txt
                gawk ndl.awk fic*.txt
     
     $gh> gawk -f ndl.awk fic1.txt
     
     -- Fichier numéro   1 : fic1.txt
     0001 Ada
     0002 Apl
     0003 Assembleur
     
     $gh> ndl fic*txt
     
     -- Fichier numéro   1 : fic1.txt
     0001 Ada
     0002 Apl
     0003 Assembleur
     
     -- Fichier numéro   2 : fic2.txt
     0001 Perl
     0002 Python
     0003 R
     0004 Ruby
     

4.2 Construire des dictionnaires alphabétiques et fréquentiels avec Perl

Il s'agit ici de construire les dictionnaire alphabétiques et fréquentiels d'un texte.

N'hésitez pas à réfléchir pour obtenir ce qui suit, pour les fichiers bush2dinvest.txt et beteZola.txt avant d'afficher la solution.


     $gh > perl dico.pl bush2dinvest.txt
      Analyse du fichier bush2dinvest.txt :
         486 ligne(s), 2106 mot(s)
         dont 772 mot(s) différent(s).
      Vous pouvez consulter les fichiers  dic_bush2dinvest.txt.mot et dic_bush2dinvest.txt.occ
      dont voici le début :
     
     fichier dic_bush2dinvest.txt.mot issu de dico.pl bush2dinvest.txt
        -                     17
        2nd                    1
        A                      1
        Abraham                1
        Across                 1
        Act                    2
        Advancing              1
        After                  1
        All                    2
        America               20
        American               2
        Americans              8
        And                    7
        At                     1
        Author                 1
        Bell                   1
        Bill                   1
        Bush                   2
        By                     2
     fichier dic_bush2dinvest.txt.occ issu de dico.pl bush2dinvest.txt
        the                  134
        of                   116
        and                  101
        our                   47
        in                    45
        to                    36
        is                    30
        we                    27
        that                  27
     
     $gh> perl dico.pl beteZola.txt
      Analyse du fichier beteZola.txt :
         7377 ligne(s), 23418 mot(s)
         dont 4426 mot(s) différent(s).
      Vous pouvez consulter les fichiers  dic_beteZola.txt.mot et dic_beteZola.txt.occ
      dont voici le début :
     
     fichier dic_beteZola.txt.mot issu de dico.pl beteZola.txt
        #                      2
        -                     32
        153                    1
        1804                   1
        1830                   1
        1855                   1
        1869                   1
        293                    1
        ?                     96
        A                     24
        Ah                    30
        Ainsi                  1
        Allons                 2
        Alors                 25
        Amsterdam              1
        Anglais                1
        Argenteuil             2
        Assieds-toi            2
        Au                     2
     fichier dic_beteZola.txt.occ issu de dico.pl beteZola.txt
        de                   966
        la                   642
        il                   477
        le                   476
        à                    386
        l                    381
        un                   368
        d                    326
     
     

4.3 Veille technologique avec Php

On veut comparer le nombre de hits renvoyés par Google sur des termes technologiques comme XML, JAVA...

N'hésitez pas à réfléchir pour produire un formulaire et une page de résultats comme ci-dessous avant d'afficher la solution.

 

          non su          non su

Au passage, quelle est la différence entre les deux commandes grep "## [0-9]" et grep "##\s\+S[0-9]" ? on pourra les appliquer au fichier PHP qui produit les résultats.

4.4 Système de fichiers et tailles avec Python

On voudrait connaitre la taille des systèmes de fichier et l'espace disque restant sur chaque système de fichier via un script Python.

N'hésitez pas à réfléchir pour produire une page de résultats et d'options comme ci-dessous avant d'afficher la solution.


     $gh> pydf
     
     Filesystem     Size Used Avail Use%                                                                               Mounted on
     /dev/nvme0n1p5 681G 242G  405G 35.5 [###########################................................................] /
     /dev/nvme0n1p1 356M  83M  273M 23.5 [##################.........................................................] /boot/efi
     
     $gh> pydf --help
     
     Usage: pydf [options] arg
     
     Options:
       --help                show this help message
       -v, --version         show version
       -a, --all             include filesystems having 0 blocks
       -h, --human-readable  print sizes in human readable format (e.g., 1K 234M
                             2G)
       -H, --si              likewise, but use powers of 1000 not 1024
       -b BLOCKSIZE, --block-size=BLOCKSIZE
                             use BLOCKSIZE-byte blocks
       -l, --local           limit listing to local filesystems
       -k, --kilobytes       like --block-size=1024
       -m, --megabytes       like --block-size=1048576
       -g, --gigabytes       like --block-size=1073741824
       --blocks              use filesystem native block size
       --bw                  do not use colours
       --mounts=MOUNTS_FILE  File to get mount information from. On normal Linux
                             systems only /etc/mtab or /proc/mounts make sense.
                             Some other Unices use /etc/mnttab. Use /proc/mounts
                             when /etc/mtab is corrupted or inaccessible  (the
                             output looks a bit weird in this case).
       -B, --show-binds      show 'mount --bind' mounts
       -i, --inodes          show inode instead of block usage
     

4.5 Réaliser des histogrammes de classes avec R

On voudrait décrire une colonne quantitative d'un fichier de données en R.

N'hésitez pas à réfléchir pour produire une page de résultats et d'options comme ci-dessous avant d'afficher la solution.


     @ghchu5~/public_html/Decra|(~gH) > sh decritqt.sh
     Pas de fichier à traiter, rien  à faire, la vie est belle... EXITING. STOP
     
     @ghchu5~/public_html/Decra|(~gH) > sh decritqt.sh elf.data
     
     Nombre de paramètres incorrect.
     Vous devez fournir un nom de fichier de données, un nom de colonne et une unité.
     
     Exemple : Rscript --vanilla decritqt.r elf.data AGE ans
     
     Erreur : -1
     Exécution arrêtée
     
     @ghchu5~/public_html/Decra|(~gH) > sh decritqt.sh elf.data2 AGE ans
     Fichier de données elf.data2 non vu.
     Erreur : -2
     Exécution arrêtée
     
     @ghchu5~/public_html/Decra|(~gH) > sh decritqt.sh elf.data AGE3 ans
     Il n'y a pas de colonne nommée AGE3 dans les données.
     Erreur : -3
     Exécution arrêtée
     
     @ghchu5~/public_html/Decra|(~gH) > sh decritqt.sh elf.data AGE ans
     
     DESCRIPTION STATISTIQUE DE LA VARIABLE  AGE
     
      Taille                49        individus
      Moyenne               40.5918         ans
      Ecart-type            20.1183         ans
      Coef. de variation    49               %
      1er Quartile          22.0000         ans
      Mediane               41.0000         ans
      3eme Quartile         60.0000         ans
      iqr absolu            38.0000         ans
      iqr relatif           93.0000          %
      Minimum                11.000         ans
      Maximum                78.000         ans
     
      Tracé tige et feuilles
     
       The decimal point is 1 digit(s) to the right of the |
     
       1 | 124556799
       2 | 00122346789
       3 | 179
       4 | 012346789
       5 | 0239
       6 | 01122345
       7 | 03368
     
     
      vous pouvez utiliser  demoDecritQt.png
     
     

         non su

 

       retour au plan de cours  

 

Code-source PHP de cette page.

 

retour gH    Retour à la page principale de   (gH)