Miamondo

Billets de miamondo

  • Kronik

    Sommaire : Présentation de l'application Le script start.py le script kronik.py Epoch Les itérateurs  Quelques réflexions sur la notion d'infinité

    Bonjour

    Aujourd'hui, j'ai envie de vous présenter une application codée par mes soins. Je l'ai baptisée Kronik. Il s'agit d'un planificateur de tâches comparable à Cron, mais dotée d'une interface graphique. J'ai commencé à écrire les premières lignes en Bash, mais je trouvais le résultat peu chatoyant. J'ai donc décidé d'emballer tout ça dans du Python et du Tkinter. Vous trouverez une vidéo à la fin de l'article.

    Le projet est perfectible, notamment au niveau du redimensionnement des fenêtres, mais je suis tout de même très satisfait du résultat, car il m'a fallu relever plusieurs défis:

    • Des calculs mathématiques et des ajustements temporels à la limite de mes capacités mentales.
    • L'utilisation d'un itérateur qui permet de ne pas s'engouffrer dans une boucle infinie ayant pour irrémédiable conséquence un crash de l'application.

    Alors, comment ça fonctionne? Eh bien, grâce à deux scripts Python:

    • start.py lance le programme proprement dit, lequel permet à l'interface chaise/clavier, de sélectionner les applications à planifier.
    • kronik.py est lancé par le fichier openbox/autostart, à chaque démarrage et se charge de gérer les tâches précédemment planifiées.

    Voici donc à quoi ressemble la page d'accueil:

     

    Kronik

     

    On trouve le titre enchâssé dans un widget LabelFrame, avec en dessous, un second cadre étiqueté qui permet de sélectionner une commande ou de renseigner directement le chemin absolu d'un fichier à exécuter (.py, .c, etc...). Le menu déroulant (Listbox) répertorie les commandes de toutes les applications installées sur votre ordinateur. Pour générer cette liste, ce n'est pas bien compliqué. Il suffit de boucler sur le répertoire /usr/share/applications. Ensuite, il faut ouvrir chaque fichier *.desktop pour en extraire la ligne qui commence par exec

    Sous ce menu déroulant, on trouve un champ d'entrée qui permet de renseigner le chemin absolu d'une application qui n'est pas présente dans /usr/share/applications. Enfin, on trouve un bouton Applications planifiées. Il ouvre une fenêtre Toplevel qui répertorie toutes les tâches planifiées et permet de supprimer chacune d'entre elles. Je souhaite améliorer cette fonctionnalité, en y incluant la fréquence (tous les jours, toutes les deux heures etc...)

     

    Fenêtre surgissante

     

    Continuons... Je sélectionne gnome-disks et je valide. Une fenêtre surgissante apparaît et me demande de confirmer en cliquant dessus. Je peux encore changer d'avis mais je décide de confirmer.

     

    kronik2

     

    J'atterris sur une fenêtre remplie de widgets Scale. Il est à noter que je me suis arrangé pour qu'il ne soit pas possible de déplacer deux curseurs simultanément. Si vous bougez un curseur, les autres sont désactivés ou reviennent à la position 0. Il y a également un widget Entry. Ce dernier permet à l'usager de renseigner une tâche qui va se lancer une seule fois. Pour une précision optimale, il faut que je rajoute les minutes et les secondes. Lorsque vous avez fait votre choix et que vous l'avez confirmé, la planification est lancée.

     

    Kronik

     

    2020 07 29 204650 788x622 scrot

     

    Ça, c'est la partie émergée de l'iceberg. Le travailleur de l'ombre, celui qui gère la planification depuis son repaire situé dans les profondeurs de la chaîne volcanique balafrant les Terres de Volgor, c'est kronik.py. Et on peut dire que sa conception m'a donné du fil à retordre, car elle m'a obligé à manipuler des dates transformées en secondes et paramétrées en prenant pour référence Epoch, c'est-à-dire le 1er Janvier 1970. Je ne suis lancé dans de savants calculs qui ont failli me rendre fou, d'autant plus que je voulais trouver une combine pour prendre en compte le temps écoulé lorsque l'ordinateur n'est plus sous tension. C'est-à dire que lorsque je rallume mon ordinateur après une bonne nuit de sommeil, les paramètres temporels ne sont plus les mêmes qu'au moment de l'extinction. Ils ont été mis à jour grâce à l'intervention d'Epoch. Voici donc le fichier généré par Kronik le bossu. Il s'appelle scheduledApps:

    • /home/miamondo/.config/kronik/start.py:86400:47872:1596000773:1596039301
    • gnome-disks:86400:83624:1596039457:1596042233
    • /home/miamondo/.config/kronik/system_update/system_update.py:86400:86308:1596042147:1596042239

    Les paramètres sont séparés par deux petits points. Actuellement, on trouve trois tâches planifiées. Prenons la dernière d'entre elles. Il s'agit d'une petite application que j'ai inclus dans le programme, pour mettre à jour ma distribution Archlinux. Je l'ai codée il y a deux ans.

    1. Chemin de l'application: system_update.py
    2. Fréquence d'exécution du programme: 86400 secondes soit 24 heures
    3. Temps restant avant exécution du programme: 86308 secondes
    4. Précédente exécution du programme (ou premier lancement): 1596042147 secondes après Epoch (01/01/1970)
    5. Tems écoulé depuis Epoch: 1596042239 secondes. C'est l'instant présent. 

    Si vous êtes perspicaces, vous aurez remarqué qu'entre le second et le troisième paramètre, l'écart est de 92 secondes. C'est exactement le même nombre qui sépare le quatrième et le cinquième paramètre... Et normalement, si j'éteins mon ordinateur et que je le redémarre  dans deux heures, les écarts seront identiques (évidemment pas forcément 92 secondes!). Je ne vous raconte pas la prise de tête pour configurer tout ça!

     

    system_update

     

    Deuxième gros défi, il faut que le temps et le programme s'écoulent sans interruption. Il n'est pas possible de créer une boucle infinie du type while 1: go on!. Au bout de 998 tours, elle va se crasher, et le programme avec. Il faut écrire du code itératif ou récursif, mais en prenant soin de définir une condition qui permette théoriquement de sortir de la boucle. J'utilise donc un itérateur, qui tourne tant que la variable d' incrémentation n'a pas atteint Époch, ce qu'elle ne fera jamais... mais elle ne le sait pas... Et il ne faut surtout pas lui dire! Voici le bout de code :

            for i in range(0, int(datetime.datetime.now().timestamp())):
                self
    .go_on()

        def go_on(self): ... suite du code.

    Ce code de deux lignes, plus philosophique qu'informatique, nous interroge sur la notion d'infinité. Il s'agit bien d'une boucle infinie puisque la variable i ne rattrapera jamais Epoch, condition sine qua non pour arrêter le programme. Epoch est lui-même un itérateur. Et pourtant, si on change la valeur de la variable i en lui affectant Epoch, alors la boucle s'arrête... Et ça, ce n'est pas possible avec une boucle du type while 1 < 2. Celle-ci est réellement une prison infinie, un châtiment mathématique perpétuel que l'on ne peut arrêter puisque 1 sera pour toujours inférieur à 2.    

    Voilà donc pour cette petite application qui m'a demandé du temps à coder, mais qui m'a aussi apporté beaucoup de satisfaction. Elle est perfectible, certes, mais elle est déjà opérationnelle. N'hésitez pas à me faire part de vos remarques, notamment au niveau du code itératif. Il n'a pas encore planté mais sait-on jamais... Peut-être y-a-t-il une faiblesse qui m'échappe. 

    J'essaierai, dans un prochain billet, d'expliquer la différence entre un itérateur et une fonction récursive mais la vulgarisation de ces théories abstraites n'est pas chose aisée. 

  • La planète Archlinux

    Bonjour,

    Dans ce court billet, je mets à votre disposition deux liens d'un même document, en version PDF et en version ODT. Ils pointent vers un manuel d'une cinquantaine de pages qui détaille l'installation d'Archlinux. J'en suis l'auteur. Il s'agit d'une mise à jour du manuel initial paru sur ce même blog il y a un peu plus d'un an. J'ai simplifié le descriptif du processus d'installation, vérifié tous les liens, et refait la mise en page.

     

    Archlinux est une distribution à publication continue, qui tourne sur mon ordinateur depuis plus d'un an et qui me donne entière satisfaction. Contrairement à Ubuntu, distribution grand public, Archlinux n'est pas conseillée pour les débutant(e)s. Son installation, plus exigeante, s'adresse à celles et ceux qui possèdent dèjà des connaissances de base en système Linux et qui savent ouvrir un terminal pour exécuter des lignes de commande.

    Cela dit, bien qu'elle soit ardue, l'installation de cette distribution est très intéressante car elle permet de comprendre l'architecture et le fonctionnement d'un système d'exploitation Linux. Par conséquent, son intérêt pédagogique est évident.

    On peut diviser le manuel en deux parties. Les quatre premiers chapitres expliquent de manière détaillée, l'installation du système de base, tandis que le cinquième et dernier chapitre vous propose de post-installer une configuration d'Openbox personnalisée par mes soins. N'hésitez pas à me laisser vos commentaires. Toute remarque, si tant est qu'elle soit constructive, est la bienvenue.

    Le fond d'écran qui illustre cette article est celui que j'ai également choisi pour ma distribution. Il s'agit d'un tableau du peintre russe Ivan Chichkine intitulé Pluie dans le bois de chênes (1891). J'aime beaucoup le réalisme de ce peintre.

     

  • N'oubliez pas le geste Barrier pour vos ordinateurs

    Bonjour,

    Cette semaine, j'ai découvert une application fort intéressante puisqu'elle permet de partager un clavier et une souris entre plusieurs ordinateurs. Curieusement, cette application s'appelle barrier alors qu'elle abolit le "confinement digital" qui séparent deux écrans. Entendons nous bien! Il ne s'agit pas simplement d'un ordinateur équipé de deux écrans configurés côte à côte par xrandr par exemple. Il s'agit de deux ordinateurs différents partageant une seule souris et un seul clavier.

    Barrier est un fork libre de l'application commerciale Synergy. L'installation est d'une simplicité enfantine. Pour ma part, je l'ai effectuée sur un ordinateur de bureau et un ordinateur portable tous deux équipés d'Archlinux. L'ordinateur de bureau endosse le rôle de serveur et l'ordinateur portable celui de client. Il est impératif d'installer Barrier sur l'ordinateur serveur et sur l'ordinateur client (ou bien sur les ordinateurs clients, car il peut y en avoir plusieurs). Si vous tournez sous Archlinux, entrez ces deux commandes:

    • sudo pacman -Syu
    • sudo pacman -S barrier

    La première met à jour les paquets et la seconde installe barrier. Voici un lien vers un tableau récapitulatif qui vous permettra de déterminer la version installable sur votre distribution.

    Bon, entrons dans le vif du sujet. Une fois que vous avez lancé l'application sur l'ordinateur serveur, une fenêtre se matérialise. Cochez server. Puis, cliquez sur l'onglet configurer le serveur. Une fenêtre s'ouvre avec en son centre l'écran du serveur, en l'occurrence Volgor chez moi. À côté de celui-ci, j'ai glissé-déposé l'ordinateur dit client. Vous pouvez bien sûr lui donner un autre nom comme par exemple Gugutte. J'ai choisi client dans un souci de clarté pédagogique. Vous validez et vous quittez pour revenir sur la fenêtre précédente. Là, vous vérifiez que l'adresse IP est correcte et vous cliquez sur start puis sur appliquer (anwenden). 

     

    Server window

     

    Disposition

     

    Même opération sur l'ordinateur client, sauf que cette fois-ci, vous n'allez pas cocher server mais client. Prenez soin également de renseigner l'adresse IP du serveur. Ne sélectionnez pas Auto config. Faites-le manuellement. Puis cliquez sur start et appliquer (anwenden).

     

    client

     

    Normalement, si tout se passe bien, vous allez pouvoir promener votre pointeur de souris d'un écran à l'autre, et votre clavier d'ordinateur de bureau sera fonctionnel sur l'ordinateur portable! Izen'tit marvellousse?

    Descendons si vous le voulez bien dans mon antre... Oui, l'escalier est un peu raide mais n'ayez pas peur... Ces bruits derrière la cloison?... Ce sont des rats, ils pullulent! Voilà, nous y sommes enfin.

     

    Antre de Volgor

     

    L'écran bâbord et celui du milieu sont les deux têtes d'un même ordinateur. Ils sont configurés côte à côte grâce à xrandr. Je peux donc passer d'un écran à l'autre et même faire du glisser-déposer. Rien d'extraordinaire, c'est tout à fait normal.

    Par contre, l'écran à tribord est celui de mon ordinateur portable. Il est totalement indépendant de l'autre créature. Pourtant, par l'intercession de Belzébuth (et aussi un peu grâce à Barrier), je peux passer mon pointeur de souris sur cet écran, ouvrir l'éditeur de texte et taper cet article avec le clavier de l'ordinateur de bureau... Je peux même couper-copier-coller d'un écran à l'autre! La seule chose qui n'est pas encore possible, c'est le glisser-déposer. Mais ça viendra. Ce n'est qu'une question de temps. Il faut être patient. Vous tremblez malgré la chaleur infernale qui règne ici. Laissez-moi vous raccompagner vers la sortie. Mais on va plutôt prendre l'ascenseur parce que j'ai une sainte horreur de ces bestioles. Mon Dieu! Ces pattes qui grattent le bois, ça me met dans tous mes états!