Migration à Ubuntu 22.04

Je relate ici mon expérience lors de la migration de Ubuntu 20.04 LTS à Ubuntu 22.04 LTS.

Possédants plusieurs machines je garde toujours les versions antérieurs au plus haut niveau pour l’architecture des processeurs .

Ainsi j’ai un Ubuntu 12.04 sur un vieux Dell Latitude 32 bits, un Ubuntu 16.04 sur un petit HP mini, un Ubuntu 18.04 sur un HP Elite Book 2540p et un Dell Latitude E6430.

C’est ce dernier,dont le disque estait une copie conforme du HP Elite Book que j’ai migré à Ubuntu 22.04 LTS au mois d’Aout. Deux systémes en doublions, c’étatit l’opportunité de tenter l’aventure à moindre risque.

En effet les date de fin de support des versions LTS permettent de prendre le temps que les distributions évoluent et que les soucis techniques s’amenuisent .

  • 18.04 avril 2023 Ubuntu 18.04.6 LTS Bionic Beaver
  • 20.04 juillet 2025 Ubuntu 20.04.5 LTS Focal Fossa
  • 22.04 avril 2027 Ubuntu 22.04.5 LTS Jammy Jellyfish

la migration

Avant de quitter Focal Fossa pour Jammy Jellyfish , une bonne sauvegarde du disque permettra de reprendre aisément la manip en cas de souci . Créer une image de votre système avec Clonezilla estr simple et rapide. A defaut n’oubliez pas de copier Pensez- le dossier /home et /var/www mais aussi les fichiers de configuration dans /etc et /root.

C’est parti, il faut maintenant enchaîner les commandes habituelles :

apt update && apt upgrade

puis redémarrer avec

shutdown -r now

Puis lancer la migration


do-release-upgrade -d

Cela prendra prendra un temps certain quelques réponses à ds question sans ambiguités; essayez de suivre ce qui se passe pour voir quels composanst semblent poser probléme ou sont supprimés.. Dans mon cas aMule et Gimp uf-raw et nodejs sont passés à la trappe .

Puis, redémarrer en 22.04 .

Cette excellente page vous indique les principaux changement d’interface entre 20.04 et 22.04

les problèmes à régler

En ce qui me concerne le machine était dotée de Apache , Mysql , nodejs, express, mongodb, et quelques icônes personnalisées sur le bureau pour lancer des scripts perso

Icônes : Sur le bureau les lien des icônes sont présents mais les icônes ont disparu et inactives
La solution consiste à en autoriser le lancement et éventuellement remplacer les icônes non trouvées par leur équivalent , pour la plupart dans /usr/share/icons…

nodejs a été supprimé …
La solution est la réinstallation suivant le procédé trouvé chez github.com/nodesource/distributions/blob/master/README.md
Pour une de mes application j’ai aussi du déplacer les views Handlebar dans le dossier PUBLIC.

J’en ai profité pour réinstaller la derniére version de mongodb après sauvegarde des données de la base . Toutes les collections sont dans /var/lib/mongodb.

apache2 ne démarre pas signalant une erreur dans apache2.conf.

Cela vient d’un petit oubli qui consiste à continuer à vouloir utiliser php 7.4 alors que la distrib a apporté php 8.1. Les commandes qui suivent permettent de régler rapidement le probléme.

apache2ctl configtest
sudo a2enmod php8.1

puis

sudo a2dismod php7.4
systemctl restart apache2

Et voilà, depuis plus d’un mois tout semble fonctionner correctement.

A notles updates de Firefox sont gérés par snap désormais .

En conclusion, si vous n’avez pas de besoin immédiat , attendez la fin de l’année et la plupârt de ces soucis seront probablement réglés . On peut aussi ajouter que désormais les évolutions de Linux Ubuntu sont devenues fiables et aisées

Scrabble help

<?php

S’appuyant sur un dictionnaire Français de 232116 mots de 10 lettres au maximum, ce petit développement PHP 5.6 résout les possibilités que vous offre votre tirage !

Si vous savez ou trouver l’ODS8 et ses 386264 mots, je suis preneur !

Le script utilise la technique de la factorisation, <crée des expressions réguliéres et optimise la lecture pour ne pas balayer l’intégralité du dictionnaire ( qui est trié !) à chaque recherche .

570 lignes de code tout rond !

?>

Il accepte plusieurs contraintes :

  • lettres positionnelles
  • débute par
  • se termine par
  • lettres qui doivent rester groupées ( 3 max)

Des liens vers d’autres sites d’aide sont aussi fournis en bas de page.

et

BONUS : vous pouvez jouer en musique avec le jingle de la meteo de France 24 on aime ou pas 😉

onkeydown

Pour démarrer cette nouvelle année, profitant du ciel gris, j’ai passé la journée, FIP dans les oreilles, à ramer sur la compréhension de la gestion des événements keypress « deprecated » donc à oublier et keydown pour un élément HTML5 de type input , voici ce que je retiens .

Mon objectif est de ne conserver/capturer que les valeurs correspondant aux touches « lettres » , « Chiffres » et « ponctuations » du clavier, en rejetant les touches de contrôle Backspace, Shift,Home, Ctrl, Escape, Delete, Alt gr,Arrow downn up right left, etc..

La fonction déclenchée par l’événement ressemble à çà

function onKeyDown(event) {
    var c=event.charCode || event.keyCode || event.which;

    String.fromCharCode(c)  ou  String.fromCodePoint(c)     fonctionnent correctement pour visualiser le caractère, 
    event.key    donne le code décimal qui représente la touche qui a été activée.

On trouve une page O’Reilly qui liste toutes ces valeurs,cf LIENS.

Testé sur Firefox 84.0 Unbuntu 18.04 , Windows10 avec Edge 87.0.664 et Google Chrome avec une tablette tactile, je croyais être arrivé à une maîtrise de l’objet lorsque je me décide à tester sur mon Android Samsung Galaxy S5 ( un peu ancien mais pas trop ). et là … terreur ça ne fonctionne plus : tous les caractères fournissent un code 229.
Aprés une bonne heure à lire les discussions de stackoverflow.com, les articles de developer.mozilla.org et d’autres, je comprends qu’il n’y a pas de solution évidente sinon de recourir à l’événement oninput pour Android.

Ce qui dans la forme aboutit à un résultat identique mais
autant keydown réagit à tout type de touche utilisée, input ne s’intéresse qu’aux caractères, nombre et caractères et ponctuation, caractères spéciaux ( slash, parenthèses, crochets etc…)

LIENS
Généralitéswww.geeksforgeeks.org/onkeypress-onkeyup-and-onkeydown-events-in-javascript/
Keyboard Key Code Valueswww.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html
oninputdeveloper.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event
KeyboardEvent.keydeveloper.mozilla.org/fr/docs/Web/API/KeyboardEvent/key

CODE HTML CSS Jacvascript

<!DOCTYPE html">
<html>
<head>
<title>AJAX : Exemple de client</title>
<meta  charset='utf-8' />
<meta name='viewport' content='initial-scale=1.0'>
<style>
.bord {border:solid 1px #dd0000; border-radius:4px;  }
.vert {border:solid 1px #00dd00;}
</style>
<script type="text/javascript">
var http; // Notre objet XMLHttpRequest
  function onKeyDown(event) {
    var c=event.charCode || event.keyCode || event.which;
    var a= event.keyCode || event.keyIdentifier ;
    a= event.KeyboardEvent;
    var props="";
//for (prop in event){ props+= event +  " => " +event[prop] + "\n"; }
  //  console.log(props);
    var cfcc=String.fromCharCode(c);
    var cfcp=String.fromCodePoint(c);
    var cafcc=String.fromCharCode(a);

    document.getElementById("kdtrace0").innerHTML +=  c +',';
    document.getElementById('kdtrace1').innerHTML += event.key;
    document.getElementById('kdtrace2').innerHTML += cfcc;
    document.getElementById('kdtrace3').innerHTML += cfcp;
    //document.getElementById('kdtrace4').innerHTML += a+','+cafcc;
  //document.getElementById('kdtrace4').innerHTML += '<em>'+a+'</em>';
    regExp= /([ a-zA-Z]|\*)/;
    regExp2= /(^[6][5-9]|[7-8][0-9]|^[9][0]|^[1][7][0])/;
    if( regExp.test(cfcc)) {
      //document.getElementById('kdtrace9').innerHTML +=cfcc;
    }

    if(c==8){
      var ir=document.getElementById('kdtrace9').innerHTML;
      document.getElementById('kdtrace9').innerHTML+='<';
      ir=ir.substring(0,ir.length-1);
      document.getElementById('kdtrace9').innerHTML=ir;

      ir=document.getElementById('kdtrace4').innerHTML;
      ir=ir.substring(0,ir.length-1);
      document.getElementById('kdtrace4').innerHTML=ir;
    //  document.getElementById('kdtrace4').innerHTML.replaceAll(".$","");
    } else {
      if( regExp2.test(c)) {
        document.getElementById('kdtrace9').innerHTML +=event.key;
      }
    }
  }
  function OnInput() {
    var oi=document.getElementById('inputArea').value;
    document.getElementById('kdtrace4').innerHTML='<b>'+oi+'</b>';
  }
</script>
</head>
<body>
<div>
<p>
  <form name="SAISIE" class="" >
    <input name="INPUT" id="inputArea" size="30" type="text" placeholder=" vos lettres ici" oninput='OnInput()'>
    <!--<input name="INPUT" id="inputArea" size="30" type="text" placeholder=" vos lettres ici" onkeydown="onKeyDown(event)"> -->
  </form>
  <script type='text/javascript'>
  var key_pressed= document.getElementById('inputArea');
  key_pressed.addEventListener("keydown",onKeyDown);
  key_pressed.focus();
  </script>
</p>
<br/>keydown 0  UNICODE <p id='kdtrace0' class='bord'></p>
<br/>keydown 1  E.key <p id='kdtrace1' class='bord'></p>
<br/>keydown 2  CharCode <p id='kdtrace2' class='bord'></p>
<br/>keydown 3  CodePoint <p id='kdtrace3' class='bord'></p>
<br/>keydown 4  oninput <p id='kdtrace4' class='bord vert'></p>
<br/>keydown 9  resultat <p id='kdtrace9' class='bord'></p>

</div>
</body>

Présentation personnelle

Je vous propose de vous accompagner dans le parcours à entreprendre pour réaliser votre site sur Internet.

Que celui-ci soit une simple vitrine, un log ou un site marchand, les point à aborder sont nombreux, certains très « techniques », le temps à y consacrer pas facile à évaluer…

Je propose de vous apporter mon expérience et mon expertise sur ces sujets , du conseil à la mise en route et au suivi de votre site.

Un long parcours d’informaticien professionnel débuté avant que des écrans soient connecté aux « mainframes » du siécle dernier, la pratique du développement d’application de gestion, de systèmes complexes , du management d’équipes dans un contexte international, m’ont permis de conserver le goût pour le développement et une bonne vision de la technologie et de ses coûts.

Comprendre votre besoin

  • identifier avec vous les cibles que vous vous êtes donné,
  • Comprendre la façon dont vous souhaitez vous développer.
  • Estimer les moyens que vous souhaitez mobiliser
  • préciser le temps que nous aurons pour mettre en place

En nous appuyant sur des principes simples de frugalité technique – les choses simples se construisent plus vite et durent plu longtemps..;- nous élaborerons ensemble

  • L’apparence de votre site
  • la navigation que vos clients emprunteront
  • Les services que vous souhaitez mettre à disposition
  • le type d’hébergement qui vous convient et la sécurité que vous estimez devoir protéger votre site
  • le budget qui sera nécessaire.

première maquette

Une fois ces nombreux points décidés, une premiére maquette donnera vite vie à vote activité.

Je préconise souvent l’utiisation de WordPress qui offre l’avantage de faciliter une mise ne route rapide et vous permettra , si vous le souhaitez, de pouvoir gérer vous-même le contenu de votre siteb, ou de votre blog.