Outils pour utilisateurs

Outils du site


issue184:tutoriel2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
issue184:tutoriel2 [2022/08/29 14:08] d52frissue184:tutoriel2 [2022/08/31 10:12] (Version actuelle) auntiee
Ligne 7: Ligne 7:
 In the conclusion of part 6, I told you that I was going into early retirement. That was a big mistake. Two years later I was approached for a position in Vienna where they had a few 20 year old Alpha’s and now I am working there for three years already. And if I listen to the customer, I get the idea that I will be working there long after my retirement.** In the conclusion of part 6, I told you that I was going into early retirement. That was a big mistake. Two years later I was approached for a position in Vienna where they had a few 20 year old Alpha’s and now I am working there for three years already. And if I listen to the customer, I get the idea that I will be working there long after my retirement.**
  
-NOTE : Les parties 1 à 6 sont les FCM n° 105 à 110+NOTE : Les parties 1 à 6 sont dans les FCM n° 105 à 110
  
-Aux premiers temps des ordinateurs, une société appelée Digital Equipment Corporation (DEC) a créé son ordinateur VAX 32-bit en utilisant OpenVMS comme système d'exploitation. Un ordinateur VAX/VMS est si fiable qu'il y en a encore aujourd'hui - après plus de 25 ans - un grand nombre en service. Mais, à terme, même ces ordinateurs fiables devront être remplacés. Comme décrit dans la première partie (FCM#105), vous pourriez migrer de VAX/VMS vers Linux, car le fonctionnement de Linux est largement compatible avec OpenVMS. Si vous utilisez le Pascal comme langage de programmation, vous trouverez que Lazarus/Free Pascal est un bon remplacement. Mais il y a des fonctions techniques utilisées dans OpenVMS sans remplacement apparent dans Linux. Dans cet article, je vais vous mettre à jour avec les améliorations et l'expérience depuis mon dernier article.+Aux premiers temps des ordinateurs, une société appelée Digital Equipment Corporation (DEC) a créé son ordinateur VAX 32-bit en utilisant OpenVMS comme système d'exploitation. Un ordinateur VAX/VMS est si fiable qu'il y en a encore aujourd'hui - après plus de 25 ans - un grand nombre en service. Mais, à terme, même ces ordinateurs fiables devront être remplacés. Comme décrit dans la première partie (FCM n° 105), vous pourriez migrer de VAX/VMS vers Linux, car le fonctionnement de Linux est largement compatible avec OpenVMS. Si vous utilisez le Pascal comme langage de programmation, vous trouverez que Lazarus/Free Pascal est un bon remplacement. Mais il y a des fonctions techniques utilisées dans OpenVMS sans remplacement apparent dans Linux. Dans cet article, je vais vous mettre à jour avec les améliorations et l'expérience depuis mon dernier article.
  
 Retraite anticipée ? Retraite anticipée ?
Ligne 24: Ligne 24:
 Numéros de version des fichiers Numéros de version des fichiers
  
-Dans la partie 4 de mon article, je vous disais que « Si votre projet dépend de ce comportement (la version du fichier, pas le plantage), vous devrez modifier vos programmes. Soit en ajoutant un numéro de version au nom ou au type, soit en modifiant votre projet de manière à ce qu'il ne dépende plus des versions de fichiers. » Mon tout premier client potentiel (mon travail actuel) dépendait fortement de ces numéros de version de fichiers. Un travail est lancé plusieurs fois avec des paramètres différents, et de nombreux fichiers journaux sont créés avec le même nom. J'ai donc modifié mes routines de traitement des fichiers pour utiliser les numéros de version. Comme Linux n'a pas d'équivalent, j'ai résolu le problème en ajoutant (et en espérant) le numéro de version du fichier comme partie du nom de fichier au format « ;1234 ». Comme il s'agit d'une chaîne de caractères, et non d'un nombre de 16 bits, la restriction du maximum de 32767 est levée. Cela pourrait causer des problèmes dans un projet qui s'appuie sur ce maximum, mais c'est quelque chose pour l'avenir.+Dans la partie 4 de mon article, je vous disais que « Si votre projet dépend de ce comportement (la version du fichier, pas le plantage), vous devrez modifier vos programmes. Soit en ajoutant un numéro de version au nom ou au type, soit en modifiant votre projet de manière à ce qu'il ne dépende plus des versions de fichiers. » Mon tout premier client potentiel (mon travail actuel) dépendait fortement de ces numéros de version de fichiers. Un travail est lancé plusieurs fois avec des paramètres différents, et de nombreux fichiers journaux sont créés avec le même nom. J'ai donc modifié mes routines de traitement des fichiers pour utiliser les numéros de version. Comme Linux n'a pas d'équivalent, j'ai résolu le problème en ajoutant le numéro de version du fichier comme partie du nom de fichier au format « ;1234 » en m'attendant à ce que cela fonctionne. Comme il s'agit d'une chaîne de caractères, et non d'un nombre de 16 bits, la restriction du maximum de 32767 est levée. Cela pourrait causer des problèmes dans un projet qui s'appuie sur ce maximum, mais c'est quelque chose pour l'avenir.
  
 Un autre problème avec les fichiers journaux des tâches batch est que si vous demandez au système quel est le fichier journal de la tâche xxxx, vous n'obtiendrez que le nom du fichier et son emplacement. Vous devez utiliser des astuces comme l'écriture d'un jeton dans le fichier journal actuel et la recherche de toutes les versions de ce jeton pour trouver le numéro de version du fichier. Cela m'a amené à modifier mon implémentation du batch en incluant le numéro de version du fichier dès le début du travail. Un autre problème avec les fichiers journaux des tâches batch est que si vous demandez au système quel est le fichier journal de la tâche xxxx, vous n'obtiendrez que le nom du fichier et son emplacement. Vous devez utiliser des astuces comme l'écriture d'un jeton dans le fichier journal actuel et la recherche de toutes les versions de ce jeton pour trouver le numéro de version du fichier. Cela m'a amené à modifier mon implémentation du batch en incluant le numéro de version du fichier dès le début du travail.
Ligne 39: Ligne 39:
 En essayant ma première vraie migration, j'ai rencontré des difficultés. Ne sachant pas si mon implémentation de DCL était mauvaise (oui, j'ai trouvé un tas de bogues), j'ai eu besoin d'un moyen pour voir ce qui se passe pendant l'exécution d'un script. La façon normale de déboguer un script DCL est de placer des commandes write ou show. Mais c'est très fastidieux et vous devez placer les commandes exactement aux bons endroits, ce que vous ne savez pas au départ. Si seulement vous pouviez déboguer un script DCL de la même manière que vous déboguez un programme. En essayant ma première vraie migration, j'ai rencontré des difficultés. Ne sachant pas si mon implémentation de DCL était mauvaise (oui, j'ai trouvé un tas de bogues), j'ai eu besoin d'un moyen pour voir ce qui se passe pendant l'exécution d'un script. La façon normale de déboguer un script DCL est de placer des commandes write ou show. Mais c'est très fastidieux et vous devez placer les commandes exactement aux bons endroits, ce que vous ne savez pas au départ. Si seulement vous pouviez déboguer un script DCL de la même manière que vous déboguez un programme.
  
-C'est exactement ce que j'ai créé. Une application graphique avec des points d'arrêt, des points de surveillance et un affichage continu des symboles, locaux et globaux. Vous pouvez spécifier une pause à la sortie, pour déterminer le point de sortie d'une routine (y compris la sortie par erreur). Vous avez donc la possibilité de voir quelle est la valeur des symboles locaux à la sortie (ou la cause de l'erreur). J'aurais aimé avoir cette application il y a des années.+C'est exactement ce que j'ai créé. Une application graphique avec des points d'arrêt, des points de surveillance et un affichage continu des symboles, locaux et globaux. Vous pouvez spécifier une pause à la sortie, pour déterminer le point de sortie d'une routine (y compris la sortie par erreur). Vous avez donc la possibilité de voir la valeur des symboles locaux à la sortie (ou la cause de l'erreur). J'aurais aimé avoir cette application il y a des années.
  
  
Ligne 52: Ligne 52:
 Extensions de la base de données Codasyl Extensions de la base de données Codasyl
  
-Dans la partie 6, je vous ai parlé d'un autre type de base de données : une base de données réseau appelée DBMS32. En fait, j'aurais dû l'appeler « base de données Codasyl ». Ce type de base de données existe depuis plus longtemps que les bases de données relationnelles, et a même eu un comité de normalisation. Mon implémentation est vaguement basée sur la spécification formalisée. Lorsque mon client a été confronté au problème qu'une chaîne de travaux prenait beaucoup trop de temps (6 à 7 heures), j'ai commencé une étude de faisabilité pour voir si je pouvais faire mieux en utilisant ma base de données Codasyl au lieu d'Oracle. Et bien sûr, je me suis heurté aux limites d'une base de données Codasyl. Conçue pour la vitesse, elle n'est pas adaptée aux grands ensembles de données.+Dans la partie 6, je vous ai parlé d'un autre type de base de données : une base de données réseau appelée DBMS32. En fait, j'aurais dû l'appeler « base de données Codasyl ». Ce type de base de données, qui existe depuis plus longtemps que les bases de données relationnelles, a même eu un comité de normalisation. Mon implémentation est vaguement basée sur la spécification formalisée. Lorsque mon client a été confronté au problème qu'une chaîne de travaux prenait beaucoup trop de temps (6 à 7 heures), j'ai commencé une étude de faisabilité pour voir si je pouvais faire mieux en utilisant ma base de données Codasyl au lieu d'Oracle. Etbien sûr, je me suis heurté aux limites d'une base de données Codasyl. Conçue pour la vitesse, elle n'est pas adaptée aux grands ensembles de données.
  
-Mais je n'ai pas abandonné et j'ai modifié mon implémentation pour gérer des millions d'enregistrements et j'ai introduit des indices pour conserver la vitesse. Oracle utilise des tables spéciales pour les index qui doivent être mis à jour. Ces tables peuvent être fragmentées, il est donc utile de les reconstruire de temps en temps. Mais cela peut prendre plus d'une heure, et les tables qui utilisent ces index sont bloquées pendant ce temps (un problème très courant chez mon client). Dans mon implémentation, la reconstruction est si rapide (moins d'une seconde) que j'ai décidé de la faire à la volée au lieu de la stocker. Le résultat final est un temps de traitement de moins d'une demi-heure, donc plus de 10 fois plus rapide.+Mais je n'ai pas abandonné j'ai modifié mon implémentation pour gérer des millions d'enregistrements et j'ai introduit des indices pour conserver la vitesse. Oracle utilise des tables spéciales pour les index qui doivent être mis à jour. Ces tables peuvent être fragmentées, il est donc utile de les reconstruire de temps en temps. Mais cela peut prendre plus d'une heure, et les tables qui utilisent ces index sont bloquées pendant ce temps (un problème très courant chez mon client). Dans mon implémentation, la reconstruction est si rapide (moins d'une seconde) que j'ai décidé de la faire à la volée au lieu de la stocker. Le résultat final est un temps de traitement de moins d'une demi-heure, donc plus de 10 fois plus rapide.
  
 Je vous parlais également d'une application graphique pour remplacer DBQ, le programme d'interface de la base de données. J'ai étendu cette application avec une représentation graphique des données liées entre elles, avec la possibilité de déplacer les enregistrements (avec votre souris) dans une liste pour en changer l'ordre. Je vous parlais également d'une application graphique pour remplacer DBQ, le programme d'interface de la base de données. J'ai étendu cette application avec une représentation graphique des données liées entre elles, avec la possibilité de déplacer les enregistrements (avec votre souris) dans une liste pour en changer l'ordre.
issue184/tutoriel2.1661774907.txt.gz · Dernière modification : 2022/08/29 14:08 de d52fr