Ce genre de problème est une des raisons pour lesquelles je déteste les démarrages en mode silencieux. C'est bien beau quand ça fonctionne, mais le jour ou ça ne marche pas, c'est bien difficile de savoir ce qui pose problème.
Simplement, j'aimerai que les défenseurs de l'automobile ne croient ni ne fassent croire qu'il est impossible de vivre "à la campagne" (ou du moins dans une petite ville de moins de 5000 habitants éloignée d'une métropole) sans voiture.
Sors de ta bulle : il y a beaucoup d'endroits ou aujourd'hui c'est quasi impossible. Pour ma part je m'en passe plutôt bien depuis quelques années, mais dans d'autres endroits c'est très compliqué.
Quand tu as trois enfants, que tu dois les amener à trois écoles différentes quasi à la même heure parce que les offres de transports ne sont pas adaptées, qu'en plus de ça tu as besoin de te rendre à des rendez-vous médicaux réguliers parce que tu as toi et/ou tes enfants des problèmes de santé, même dans des endroits pourvus de transports, ça peut devenir difficile. Donc ne parlons même pas des endroits ou il n'y en a pas … Et pour ton information, il y a de plus en plus d'endroits ou il n'y a plus de pharmacie, plus de distributeurs, plus de services postaux, plus de magasin de proximité, ou les seuls transports que tu trouve (s'il y en a) c'est un bus le matin pour aller au travail, et un bus le soir pour rentrer. Mais personne ne veut s'occuper de ces problèmes, parce que ceux qui sont chargé de le faire refusent de le voir - c'est leur idéologie qui passe avant tout.
Perso je suis favorable à la diminution de la voiture dans notre vie quotidienne, mais je trouve que la méthode adoptée aujourd'hui n'est pas la bonne : on s'y prend à l'envers. On rend la possession et l'utilisation de véhicules de plus en plus difficiles, mais à côté de ça on n'offre pas d'alternatives viables. On va avoir la même problématique avec les logements: on pousse de plus en plus les gens a s'entasser dans des immeubles, mais on ne fait rien pour que la cohabitation soit possible (immeubles mal insonorisés, manque de sanctions contre ceux qui pourissent la vie de leurs voisins par leur comportement, etc …).
… et ça faisait partie des questions que je me posais (et que j'avais posé autour de moi) aux débuts de chatGPT : une IA qui gère du contenu qui sera ingéré par elle-même ou une autre IA, ça va donner quoi ?
Après, ça ne signifie pas que l'IA soit une mauvaise chose en soi, mais que l'un des plus grands défis de cette techno, c'est la qualité de la source des données d'entrainement, Aujourd'hui c'est plus le fait d'entrainer des IA avec des données prises n'importe comment sur internet qui pose problème, mais on peut aussi y introduire un biais idéologique via les données qu'on sélectionne pour entrainer l'IA.
De toute façon je pense que ça va faire comme tous les trucs hypes qu'on a connu ces dernières années : tout le monde va vouloir en mettre partout à toutes les sauces (comme pour XML à une époque, ou on en a mis partout), mais après quelques déboires, on en viendra à une utilisation plus raisonnée de la techno. Par contre moi, ce qui me fait peur, ce sont les dégats que cet emploi à outrance auront occasionnés.
D'après ce que j'ai lu, j'ai cru comprendre qu'ils ont repris de zero en fin d'année dernière, mais d'un autre côté ils ne partaient pas de rien non plus. Et si le code est bien organisé, il est relativement facile après d'implémenter de nouvelles fonctionnalités. De plus, le fait que Rust détecte pas mal de problèmes à la compilation doit permettre de gagner du temps dans les phases de debug, donc permettre d'aller plus vite.
En tout cas, c'est une bonne chose que ça aille aussi vite.
J'ai acheté une pocketbook il y a maintenant 3 ou 4 ans. C'est une liseuse couleur, elle est toujours mise à jour, mais je lui trouve pas mal de défauts : lorsque je veux surligner, je dois me battre avec parce qu'elle ne me sélectionne jamais les bonnes lignes (c'est délirant, à en devenir fou), et l'un des boutons n'a plus l'air de fonctionner … Dommage, parce que mis à part ça le rendu est pas trop mal.
Sans aucune animosité, mais plutôt un conseil bienveillant : tu devrais cesser de poster ce genre de message et laisser les gens se faire leur opinion. A trop chercher à te justifier, les choses se retournent contre toi. On pourrait t'accuser de harcellement, de diffamation, de dénigrement, etc …
Je ne m'étendrai pas sur la pertinence de rester en 2G ou pas Dans l'absolu, tôt ou tard il faudra migrer. Cependant, d'après ce qui est dit, Free n'aurait pas communiqué sur sa planification de coupure 2G. A voir si c'est vrai, mais si c'est le cas ils auraient pu communiquer pour permettre aux personnes qui en ont absolument encore besoin de prendre leurs précautions (en s'abonnant chez un operateur qui la propose encore par exemple s'ils veunlent pousser l'utilisation dela 2G jusqu'au bout).
Pour savoir exactement ce que ça fait, il faut savoir comment fonctionne un "tube", et connaitre le principe d'entrée et de sortie standard + erreur sous Unix.
Tout processus lorsqu'il est créé possède par défaut trois descripteurs de fichiers ouverts qui lui serviront à communiquer : l'entrée standard (le clavier pour un processus interactif dans un shell), la sortie standard (le terminal par défaut), et la sortie d'erreur (le terminal également). Petit exemple : exécute la commande cat sans rien lui passer : tu verras qu'elle t'affichera tout ce que tu lui entres au clavier:
$ cat
abc
abc
def
def
ghi
ghi
Note : pour arrêter la saisie sur l'entrée standard, tu tapes sur les touches CTRL+D
En fait la commande cat est une commande qui, si on ne lui spécifie pas de paramètres, va prendre tout ce qui arrive sur l'entrée standard pour l'afficher sur la sortie standard (petite parenthèse : le nom cat vient à l'origine du mot con*cat*, et cette commande permet d'afficher sur sa sortie standard les fichiers qu'on lui passe en paramètre).
Le descripteur de fichier de l'entrée standard porte le numéro 0, celui de la sortie standard le numéro 1, et celui de la sortie d'erreur le numéro 2 (on y reviendra plus tard).
Cependant, il est possible de faire des redirections des divers périphériques par défaut. Par exemple, tu peux exécuter la commade cat < /dev/random : en exécutant cette commande tu dis à cat que l'entrée standard n'est plus le clavier, mais le fichier que tu as passé en paramètre (ici /dev/randpm génère des nombres aléatoires : tu verras une bouillie binaire s'afficher à ton écran).
De même qu'il est possible de changer le périphérique d'entrée, il est possible de changer le périphérique de sortie. Par exemple, si tu veux rediriger la sortie de la commande cat dans un fichier :
totof@superbipbip:~$ cat >/tmp/toto.txt
abc
def
ghi
la vie est belle
(taper control+d pour faire cesser la saisie)
Là tu as généré un fichier que tu peux visualiser ainsi :
totof@superbipbip:~$ more /tmp/toto.txt
abc
def
ghi
la vie est belle
totof@superbipbip:~$
Le troisième descripteur est la sortie d'erreur. Cette sortie affiche le message d'erreur. Faisons en sorte que cat génère une erreur en lui donnant un fichier bidon en paramètre d'entrée :
totof@superbipbip:~$ cat /tmp/je_nexiste_pas
cat: /tmp/je_nexiste_pas: Aucun fichier ou dossier de ce nom
Une erreur qui s'affiche à l'écran, mais tu peux également la rediriger :
La commande est "muette", mais elle génère bien un message d'erreur qu'on a redirigé vers un fichier
totof@superbipbip:~$ more /tmp/erreur.txt
cat: /tmp/je_nexiste_pas: Aucun fichier ou dossier de ce nom
Maintenant venons-en aux pipes. Quand tu enchaines les commandes via un pipe, tu demandes à ce que la sortie standard de la commande à gauche du pipe soit redirigée vers l'entrée standard de la commande à droite du pipe. Décomposons cet enchaînement :
totof@superbipbip:~$ echo "coucou" | cat
coucou
Ici, la commande écho affiche sur la sortie standard la chaîne "coucou" et la commande cat la récupère depuis son entrée standard pour l'afficher à son tour sur sa sortie standard. A noter que les deux commandes tournent en parallèle. Le traitement de la commande de droite n'attend pas que la commande de gauche soit terminée pour s'exécuter. Elles tournent ensemble et les données sont traitées par la commande de droite au fur à mesure qu'elles arrivent de la commande de gauche.
En redirigeant vers un fichier :
totof@superbipbip:~$ echo "coucou" | cat >/tmp/coucou.txt
totof@superbipbip:~$ more /tmp/coucou.txt
coucou
Si tu veux récupérer la sortie standard et la sortie d'erreur pour la rediriger vers ton pipe tu peux : il suffit de le demander. Voici ce qui se passe sans redirection :
totof@superbipbip:~$ cat /tmp/jenexistepas | cat >/tmp/coucou.txt
cat: /tmp/jenexistepas: Aucun fichier ou dossier de ce nom
Le premier cat essaie de récpérer le contenu du fichier en paramètre, mais comme il n'existe pas, le processus affiche un message d'erreur. ( et si tu vas voir le contenu de /tmp/coucou.txt, tu auras un fichier vide car la commande n'a rien retourné sur sa sortie standard).
Si on veut récupérer ce message d'erreur dans le pipe, il faut rediriger la sortie d'erreur (descripteur N° 2) vers la sortie standard (2>&1 permet de le faire dans la commande suivante) :
Là encore, à la saisie on a l'impression qui ne se passe rien .. mais si on va voir :
totof@superbipbip:~$ more /tmp/coucou.txt
cat: /tmp/jenexistepas: Aucun fichier ou dossier de ce nom
Pour résumer, quand on exécute commmande 1 | commande 2, on demande à commande 2 de récupérer sur son entrée standard le contenu du canal de sortie standard de commande 1. Et si tu veux rediriger la sortie d'erreur vers le pipe, il faut que tu précises à la commande 1 (à gauche du pipe) de rediriger sa sortie d'erreur vers la sortie standard (je précise parce que c'est facile d'oublier).
Maintenant pourquoi ce que tu as fait n'a pas fonctionné ?
tail -2 fichier.txt | nl fichier.txt
En gros tu dis à tail de récupérer les deux dernières lignes du fichier en paramètre. Tail les envoie sur sa sortie standard qui est capturée par le pipe. Sauf que à droite tu dis à la commande nl de ne pas récupérer la sortie standard, mais de récupérer les données du fichier passé en paramètre. Donc la sortie standard de la commande de gauche est ignorée. Tout ce que tu fais c'est exécuter des commandes en parallèle sans qu'elles n'interagissent entre elles.
Maintenant un petit mot : j'ai utilisé cat pour l'exemple. Cependant beaucoup de monde croit que faire un cat est nécessaire pour pouvoir ensuite le traiter par une autre commande (tu verras beaucoup de cat fichier | grep par exemple). Le cat ne sert à rien dans ce cas. Démonstration avec le fichier généré précédemment :
totof@superbipbip:~$ more /tmp/toto.txt
abc
def
ghi
la vie est belle
100% d'accord avec la logique, mais avec mes capacités limitées de programmation, le bash reste plus simple, car avant de me poser la question, il faut d'abord interroger la box pour savoir si le wifi est allumé (via le programme sysbus.py), ce que fait déjà mon script.
Dans ce cas je ne suis pas sûr que cette approche fonctionne : il faudra peut-être lancer un terminal qui appelle ton script plutôt que de lancer le script directement (a moins que tu utilises un framework graphique dans ton script …).
J'aurais bien aimé essayer, mais je n'ai pas vraiment le temps ce week-end ( j'ai du ménage et de l'exercice à rattrapper ce week-end … je me suis laissé un peu aller ces derniers jours). Je verrai si je trouve le temps de tester (chatgpt a peut-être racconté n'importe quoi, ou le signal en question n'est peut-être plus disponible).
J'ai cherché de ce côté mais je n'ai rien trouvé qui correspondant, et j'ai cherché dans la doc gnome shell extension, mais celle-ci est assez mal faite de mon point de vue. Normal vu qu'ils ne sont pas fichius de mettre de la stabilité dans leurs développements, donc pourquoi documenter un truc qui change tous les 4 matins ?
J'aimerai donc que mon ordinateur me demande à l'extinction si je désire couper ou non le wifi, lorsqu'il constate qu'il est encore allumé.
Tu demandes à la fermeture de session "voulez-vous couper le wifi ?" et si la personne dit oui, tu exécute la commande (ou le script) de coupure wifi (sans poser de question), sinon tu sors sans couper.
L'interactivité se fait au niveau de l'extension, pas du script. Ca restte de mon point de vue plus logique.
Je pense que le problème du posteur initial vient surtout du fait qu'en général l'apprentissage de la programmation objet est mal fait (que ce soit par des profs ou via des tutoriels en ligne). Parce que effectivement, quand la seule chose qu'un prof ou un tutoriel dit c'est "déclarer les propriétés de classe en privé et faites des méthodes pour y accéder", ça n'a pas de sens. Par contre lorsqu'on explique que l'intéret d'encapsuler ses objets et de mettre en place des interfaces pour y accéder, là on comprend mieux (l'exemple de la tempértature en degré ou en kelvin, ou l'expression des coordonnées d'un point en coordonnées polaires ou rectangulaires est plus parlant).
Si on n'explique pas que le but c'est de pouvoir changer l'implémentation sans que les développeurs qui utilisent nos classes ne soient impactés, il est difficle de se faire une idée de la raison d'être de l'encapsulation. L'idéal est d'avoir un cas concret comme exemple.
Et utiliser une fonction pour lire ou écrire chaque variable présente dans une classe, je trouve ça complètement inefficace et ça réduit les performances, car ça fait un appel de fonction au lieu de lire et écrire directement la variable.
Le but n'est pas de définir une fonction pour chaque élément de ta structure, mais de masquer les détails d'implémentation. Un exemple : une structure ou classe qui a une propriété température. Comment l'implémenter, sachant que l'on peut exprimer une température en kelvin (système international), en degré Celsius ou en Degré Fahrenheit. Si tu donnes directement accès à la propriété, tu vas devoir choisir de définir l'unité d'implémentation, et t'y tenir parce que es gens feront des trucs comme par exemple: temperature_degre = instance_objet.temperature
Par contre si tu rend ta propriété température privée, mais que tu crées des interfaces qui retournent la température soit en degré celsius, soit en kelvin, soit en degreé Fahrenheit, tu peux te sentir libre de changer du jour au lendemain la façon dont tu va stocker ta température. Les utilisateurs de ton objet n'auront qu'à appeler l'interface, qui leur retournera toujours la même chose. Ils n'auront rien à changer dans leur code (il n'y a que toi qui aura à faire les adaptations).
Pour info, GNOME Shell emet un signal 'end session' lorsqu'une session est sur le point de se terminer, c'est-à-dire lorsque l'utilisateur demande à se déconnecter, à redémarrer ou à éteindre l'ordinateur.
global.display.connect('end-session', …) : Cette ligne de code connecte ce signal à une fonction de rappel (callback), qui est exécutée lorsque ce signal est émis.
const { St, Main, Shell, Meta } = imports.gi;
const Dialog = imports.ui.modalDialog;
const ExtensionUtils = imports.misc.extensionUtils;
let logoutSignal;
function init() {
// Initialisation si nécessaire
}
function enable() {
logoutSignal = global.display.connect('end-session', (display, screen) => {
// Afficher la boîte de dialogue ici
let dialog = new Dialog.ModalDialog({
styleClass: 'prompt-dialog',
destroyOnClose: false
});
dialog.contentLayout.add(new St.Label({
text: 'Voulez-vous exécuter un script avant de fermer la session ?'
}));
dialog.setButtons([
{
label: 'Oui',
action: () => {
// Exécuter un script shell ici
Shell.util_spawn(['sh', '-c', '/chemin/vers/votre/script.sh']);
dialog.close();
display.end_session(true); // Confirmer la déconnexion
}
},
{
label: 'Non',
action: () => {
dialog.close();
display.end_session(true); // Confirmer la déconnexion sans exécuter le script
},
key: Dialog.DEFAULT_CANCEL_ACTION
}
]);
dialog.open();
});
}
function disable() {
// Nettoyage lors de la désactivation
if (logoutSignal) {
global.display.disconnect(logoutSignal);
logoutSignal = null;
}
}
Ça semble logique (l'utilisateur est déconnecté, donc il y a un souci sur qui interagit), et alors ma demande serait un moyen d'exécuter une action quand on demande à se déconnecter.
Oui, c'est ce que j'en ai déduit aussi : c'est pour ça que je verrais plutôt une extension gnome shell qui s'exécuterait à la fermeture de session. J'ai regardé un peu la documentation des extensions gnome shell, mais je n'ai pas encore vu s'il y a un moyen de créer un plugin qui demanderait d'éteindre le wifi de la box.
Ok, je vois. Du coup je me demande si c'est n script shell dont tu as réellement besoin, ou si c'est pas plutôt une extension gnome shel .. Je regarde si j'ai le temps (ça m'intéresse de savoir).
J'espère bien pouvoir le faire (il y a plein de journaux que j'ai envie d'écrire sur plein de sujets que je veux expérimenter), mais malhereusement, j'ai tendance à me disperser … J'avais même commencé à écrire une nouvelle (une petite histoire) pendant les confinements covid: j'ai une trame qui tient pas trop mal la route, mais là encore je n'ai pas continué :(. Là le pack de batteries va probablement rester là plusieurs semaines avant que je ne trouve la motivation pour m'y mettre …
[^] # Re: Après grub ...
Posté par totof2000 . En réponse au message Bloqué sur un écran noir après GRUB.. Évalué à 3.
Ce genre de problème est une des raisons pour lesquelles je déteste les démarrages en mode silencieux. C'est bien beau quand ça fonctionne, mais le jour ou ça ne marche pas, c'est bien difficile de savoir ce qui pose problème.
[^] # Re: Vroum vroum
Posté par totof2000 . En réponse au journal Ford: Quand les brevets ne sont pas pensés par les informaticiens. Évalué à 8. Dernière modification le 05 septembre 2024 à 11:15.
Sors de ta bulle : il y a beaucoup d'endroits ou aujourd'hui c'est quasi impossible. Pour ma part je m'en passe plutôt bien depuis quelques années, mais dans d'autres endroits c'est très compliqué.
Quand tu as trois enfants, que tu dois les amener à trois écoles différentes quasi à la même heure parce que les offres de transports ne sont pas adaptées, qu'en plus de ça tu as besoin de te rendre à des rendez-vous médicaux réguliers parce que tu as toi et/ou tes enfants des problèmes de santé, même dans des endroits pourvus de transports, ça peut devenir difficile. Donc ne parlons même pas des endroits ou il n'y en a pas … Et pour ton information, il y a de plus en plus d'endroits ou il n'y a plus de pharmacie, plus de distributeurs, plus de services postaux, plus de magasin de proximité, ou les seuls transports que tu trouve (s'il y en a) c'est un bus le matin pour aller au travail, et un bus le soir pour rentrer. Mais personne ne veut s'occuper de ces problèmes, parce que ceux qui sont chargé de le faire refusent de le voir - c'est leur idéologie qui passe avant tout.
Perso je suis favorable à la diminution de la voiture dans notre vie quotidienne, mais je trouve que la méthode adoptée aujourd'hui n'est pas la bonne : on s'y prend à l'envers. On rend la possession et l'utilisation de véhicules de plus en plus difficiles, mais à côté de ça on n'offre pas d'alternatives viables. On va avoir la même problématique avec les logements: on pousse de plus en plus les gens a s'entasser dans des immeubles, mais on ne fait rien pour que la cohabitation soit possible (immeubles mal insonorisés, manque de sanctions contre ceux qui pourissent la vie de leurs voisins par leur comportement, etc …).
# parfois sur certains équipement, on le désigne sous l'appellation ...
Posté par totof2000 . En réponse au journal L’astuce du jour (en espérant que tout le monde n’y a pas pensé avant moi). Évalué à 6.
… Part Number (ou PN).
# Qu'est-ce qui t'empêche de rester chez eux ?
Posté par totof2000 . En réponse au message Gandi, de plus en plus voleur ?. Évalué à 3.
.. je suppose que tu vas passer un peu de temps à trouver un meilleur fournisseur … mais mis à part ça ?
# C'était tellement prévisible ....
Posté par totof2000 . En réponse au lien L'intelligence artificielle se transforme doucement en monstre consanguin complètement débile. Évalué à 9.
… et ça faisait partie des questions que je me posais (et que j'avais posé autour de moi) aux débuts de chatGPT : une IA qui gère du contenu qui sera ingéré par elle-même ou une autre IA, ça va donner quoi ?
Après, ça ne signifie pas que l'IA soit une mauvaise chose en soi, mais que l'un des plus grands défis de cette techno, c'est la qualité de la source des données d'entrainement, Aujourd'hui c'est plus le fait d'entrainer des IA avec des données prises n'importe comment sur internet qui pose problème, mais on peut aussi y introduire un biais idéologique via les données qu'on sélectionne pour entrainer l'IA.
De toute façon je pense que ça va faire comme tous les trucs hypes qu'on a connu ces dernières années : tout le monde va vouloir en mettre partout à toutes les sauces (comme pour XML à une époque, ou on en a mis partout), mais après quelques déboires, on en viendra à une utilisation plus raisonnée de la techno. Par contre moi, ce qui me fait peur, ce sont les dégats que cet emploi à outrance auront occasionnés.
[^] # Re: Rapide
Posté par totof2000 . En réponse au lien Servo Browser Now Supports Tabbed Browsing, WAV Audio Files - phoronix. Évalué à 4.
D'après ce que j'ai lu, j'ai cru comprendre qu'ils ont repris de zero en fin d'année dernière, mais d'un autre côté ils ne partaient pas de rien non plus. Et si le code est bien organisé, il est relativement facile après d'implémenter de nouvelles fonctionnalités. De plus, le fait que Rust détecte pas mal de problèmes à la compilation doit permettre de gagner du temps dans les phases de debug, donc permettre d'aller plus vite.
En tout cas, c'est une bonne chose que ça aille aussi vite.
# Oracle Linux ?
Posté par totof2000 . En réponse au message Cherche a installe une nouvelle version a de linux . Évalué à 2.
https://www.digora.com/fr/blog/oracle-linux-ou-redhat-linux-comment-choisir
Aparamment il est possible de l'installer sans payer, mais c'est sans support.
Faudra que je l'essaie un jour.
# Mitigé sur PocketBook
Posté par totof2000 . En réponse au message Liseuses T4-2024 et vous ?. Évalué à 3.
J'ai acheté une pocketbook il y a maintenant 3 ou 4 ans. C'est une liseuse couleur, elle est toujours mise à jour, mais je lui trouve pas mal de défauts : lorsque je veux surligner, je dois me battre avec parce qu'elle ne me sélectionne jamais les bonnes lignes (c'est délirant, à en devenir fou), et l'un des boutons n'a plus l'air de fonctionner … Dommage, parce que mis à part ça le rendu est pas trop mal.
[^] # Re: Avertissement à ceux qui découvrent Ptilou
Posté par totof2000 . En réponse au message Le dev, les proS et les bugS !. Évalué à 5.
Sans aucune animosité, mais plutôt un conseil bienveillant : tu devrais cesser de poster ce genre de message et laisser les gens se faire leur opinion. A trop chercher à te justifier, les choses se retournent contre toi. On pourrait t'accuser de harcellement, de diffamation, de dénigrement, etc …
[^] # Re: Va falloir qu'ils s'y fassent, et rigolons
Posté par totof2000 . En réponse au lien Pour le rétablissement de la couverture 2G/GSM de Free Mobile (via itinérance). Évalué à 3.
Je ne m'étendrai pas sur la pertinence de rester en 2G ou pas Dans l'absolu, tôt ou tard il faudra migrer. Cependant, d'après ce qui est dit, Free n'aurait pas communiqué sur sa planification de coupure 2G. A voir si c'est vrai, mais si c'est le cas ils auraient pu communiquer pour permettre aux personnes qui en ont absolument encore besoin de prendre leurs précautions (en s'abonnant chez un operateur qui la propose encore par exemple s'ils veunlent pousser l'utilisation dela 2G jusqu'au bout).
[^] # Re: Qu'est-ce qu'un pipe ?
Posté par totof2000 . En réponse au message Incompréhension des pipes sur Linux. Évalué à 3.
OK, je vois. Je ne m'étais pas intéressé à cet aspect. Je ne m'interessais qu'à l'explication sur les pipes. Mais c'est bien vu.
# 'est quoi cet article ?
Posté par totof2000 . En réponse au lien Linus Torvalds s'exprime sur l’intégration du RUST dans Linux. Évalué à 4.
C'est incompréhensible : on dirait une traduction automatique issue d'une IA peu performante.
[^] # Re: Qu'est-ce qu'un pipe ?
Posté par totof2000 . En réponse au message Incompréhension des pipes sur Linux. Évalué à 2.
C'est à dire ?
# Qu'est-ce qu'un pipe ?
Posté par totof2000 . En réponse au message Incompréhension des pipes sur Linux. Évalué à 10. Dernière modification le 26 août 2024 à 23:44.
Pour savoir exactement ce que ça fait, il faut savoir comment fonctionne un "tube", et connaitre le principe d'entrée et de sortie standard + erreur sous Unix.
Tout processus lorsqu'il est créé possède par défaut trois descripteurs de fichiers ouverts qui lui serviront à communiquer : l'entrée standard (le clavier pour un processus interactif dans un shell), la sortie standard (le terminal par défaut), et la sortie d'erreur (le terminal également). Petit exemple : exécute la commande cat sans rien lui passer : tu verras qu'elle t'affichera tout ce que tu lui entres au clavier:
Note : pour arrêter la saisie sur l'entrée standard, tu tapes sur les touches CTRL+D
En fait la commande cat est une commande qui, si on ne lui spécifie pas de paramètres, va prendre tout ce qui arrive sur l'entrée standard pour l'afficher sur la sortie standard (petite parenthèse : le nom cat vient à l'origine du mot con*cat*, et cette commande permet d'afficher sur sa sortie standard les fichiers qu'on lui passe en paramètre).
Le descripteur de fichier de l'entrée standard porte le numéro 0, celui de la sortie standard le numéro 1, et celui de la sortie d'erreur le numéro 2 (on y reviendra plus tard).
Cependant, il est possible de faire des redirections des divers périphériques par défaut. Par exemple, tu peux exécuter la commade cat < /dev/random : en exécutant cette commande tu dis à cat que l'entrée standard n'est plus le clavier, mais le fichier que tu as passé en paramètre (ici /dev/randpm génère des nombres aléatoires : tu verras une bouillie binaire s'afficher à ton écran).
De même qu'il est possible de changer le périphérique d'entrée, il est possible de changer le périphérique de sortie. Par exemple, si tu veux rediriger la sortie de la commande cat dans un fichier :
(taper control+d pour faire cesser la saisie)
Là tu as généré un fichier que tu peux visualiser ainsi :
Le troisième descripteur est la sortie d'erreur. Cette sortie affiche le message d'erreur. Faisons en sorte que cat génère une erreur en lui donnant un fichier bidon en paramètre d'entrée :
Une erreur qui s'affiche à l'écran, mais tu peux également la rediriger :
La commande est "muette", mais elle génère bien un message d'erreur qu'on a redirigé vers un fichier
Maintenant venons-en aux pipes. Quand tu enchaines les commandes via un pipe, tu demandes à ce que la sortie standard de la commande à gauche du pipe soit redirigée vers l'entrée standard de la commande à droite du pipe. Décomposons cet enchaînement :
Ici, la commande écho affiche sur la sortie standard la chaîne "coucou" et la commande cat la récupère depuis son entrée standard pour l'afficher à son tour sur sa sortie standard. A noter que les deux commandes tournent en parallèle. Le traitement de la commande de droite n'attend pas que la commande de gauche soit terminée pour s'exécuter. Elles tournent ensemble et les données sont traitées par la commande de droite au fur à mesure qu'elles arrivent de la commande de gauche.
En redirigeant vers un fichier :
Si tu veux récupérer la sortie standard et la sortie d'erreur pour la rediriger vers ton pipe tu peux : il suffit de le demander. Voici ce qui se passe sans redirection :
Le premier cat essaie de récpérer le contenu du fichier en paramètre, mais comme il n'existe pas, le processus affiche un message d'erreur. ( et si tu vas voir le contenu de /tmp/coucou.txt, tu auras un fichier vide car la commande n'a rien retourné sur sa sortie standard).
Si on veut récupérer ce message d'erreur dans le pipe, il faut rediriger la sortie d'erreur (descripteur N° 2) vers la sortie standard (2>&1 permet de le faire dans la commande suivante) :
Là encore, à la saisie on a l'impression qui ne se passe rien .. mais si on va voir :
Pour résumer, quand on exécute commmande 1 | commande 2, on demande à commande 2 de récupérer sur son entrée standard le contenu du canal de sortie standard de commande 1. Et si tu veux rediriger la sortie d'erreur vers le pipe, il faut que tu précises à la commande 1 (à gauche du pipe) de rediriger sa sortie d'erreur vers la sortie standard (je précise parce que c'est facile d'oublier).
Maintenant pourquoi ce que tu as fait n'a pas fonctionné ?
En gros tu dis à tail de récupérer les deux dernières lignes du fichier en paramètre. Tail les envoie sur sa sortie standard qui est capturée par le pipe. Sauf que à droite tu dis à la commande nl de ne pas récupérer la sortie standard, mais de récupérer les données du fichier passé en paramètre. Donc la sortie standard de la commande de gauche est ignorée. Tout ce que tu fais c'est exécuter des commandes en parallèle sans qu'elles n'interagissent entre elles.
Maintenant un petit mot : j'ai utilisé cat pour l'exemple. Cependant beaucoup de monde croit que faire un cat est nécessaire pour pouvoir ensuite le traiter par une autre commande (tu verras beaucoup de cat fichier | grep par exemple). Le cat ne sert à rien dans ce cas. Démonstration avec le fichier généré précédemment :
Beaucoup de gens vont faire ceci :
Le cat ne sert à rien. On appelle ça UUOC ou Useless use of cat. Dans ce cas il vaut mieux faire ceci:
Et si ta commande ne prend pas de fichier en paramètre mais ne prend ses données sur l'entrée standard (oui ça existe) :
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
Dans ce cas je ne suis pas sûr que cette approche fonctionne : il faudra peut-être lancer un terminal qui appelle ton script plutôt que de lancer le script directement (a moins que tu utilises un framework graphique dans ton script …).
.
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
J'aurais bien aimé essayer, mais je n'ai pas vraiment le temps ce week-end ( j'ai du ménage et de l'exercice à rattrapper ce week-end … je me suis laissé un peu aller ces derniers jours). Je verrai si je trouve le temps de tester (chatgpt a peut-être racconté n'importe quoi, ou le signal en question n'est peut-être plus disponible).
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
J'ai cherché de ce côté mais je n'ai rien trouvé qui correspondant, et j'ai cherché dans la doc gnome shell extension, mais celle-ci est assez mal faite de mon point de vue. Normal vu qu'ils ne sont pas fichius de mettre de la stabilité dans leurs développements, donc pourquoi documenter un truc qui change tous les 4 matins ?
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
la demande initiale :
Tu demandes à la fermeture de session "voulez-vous couper le wifi ?" et si la personne dit oui, tu exécute la commande (ou le script) de coupure wifi (sans poser de question), sinon tu sors sans couper.
L'interactivité se fait au niveau de l'extension, pas du script. Ca restte de mon point de vue plus logique.
[^] # Re: Attentions aussi à l'électronique
Posté par totof2000 . En réponse au message Soudage/déssoudage d'éléments dans un bloc de batterie (pour remplacement). Évalué à 3.
Tu parles de la nouvelle ? Ca ne m'interesse pas de faire ce genre de choses en mode collaboratif. En tout cas, pas cette nouvelle.
[^] # Re: Pas le même paradigme
Posté par totof2000 . En réponse au message Avantages du C++ sur le C ?. Évalué à 3.
Je pense que le problème du posteur initial vient surtout du fait qu'en général l'apprentissage de la programmation objet est mal fait (que ce soit par des profs ou via des tutoriels en ligne). Parce que effectivement, quand la seule chose qu'un prof ou un tutoriel dit c'est "déclarer les propriétés de classe en privé et faites des méthodes pour y accéder", ça n'a pas de sens. Par contre lorsqu'on explique que l'intéret d'encapsuler ses objets et de mettre en place des interfaces pour y accéder, là on comprend mieux (l'exemple de la tempértature en degré ou en kelvin, ou l'expression des coordonnées d'un point en coordonnées polaires ou rectangulaires est plus parlant).
Si on n'explique pas que le but c'est de pouvoir changer l'implémentation sans que les développeurs qui utilisent nos classes ne soient impactés, il est difficle de se faire une idée de la raison d'être de l'encapsulation. L'idéal est d'avoir un cas concret comme exemple.
# à propos des setters/getters
Posté par totof2000 . En réponse au message Avantages du C++ sur le C ?. Évalué à 4.
Le but n'est pas de définir une fonction pour chaque élément de ta structure, mais de masquer les détails d'implémentation. Un exemple : une structure ou classe qui a une propriété température. Comment l'implémenter, sachant que l'on peut exprimer une température en kelvin (système international), en degré Celsius ou en Degré Fahrenheit. Si tu donnes directement accès à la propriété, tu vas devoir choisir de définir l'unité d'implémentation, et t'y tenir parce que es gens feront des trucs comme par exemple: temperature_degre = instance_objet.temperature
Par contre si tu rend ta propriété température privée, mais que tu crées des interfaces qui retournent la température soit en degré celsius, soit en kelvin, soit en degreé Fahrenheit, tu peux te sentir libre de changer du jour au lendemain la façon dont tu va stocker ta température. Les utilisateurs de ton objet n'auront qu'à appeler l'interface, qui leur retournera toujours la même chose. Ils n'auront rien à changer dans leur code (il n'y a que toi qui aura à faire les adaptations).
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 3. Dernière modification le 23 août 2024 à 16:47.
J'ai demandé à chatGPT … C'est possible (voir le code plus bas). Pour créer une extension, voir https://doc.ubuntu-fr.org/utilisateurs/roschan/tutoriel/creer_une_extension_gnome par exemple, ou https://gjs.guide/extensions/development/creating.html (doc officielle)
Pour info, GNOME Shell emet un signal 'end session' lorsqu'une session est sur le point de se terminer, c'est-à-dire lorsque l'utilisateur demande à se déconnecter, à redémarrer ou à éteindre l'ordinateur.
global.display.connect('end-session', …) : Cette ligne de code connecte ce signal à une fonction de rappel (callback), qui est exécutée lorsque ce signal est émis.
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
Oui, c'est ce que j'en ai déduit aussi : c'est pour ça que je verrais plutôt une extension gnome shell qui s'exécuterait à la fermeture de session. J'ai regardé un peu la documentation des extensions gnome shell, mais je n'ai pas encore vu s'il y a un moyen de créer un plugin qui demanderait d'éteindre le wifi de la box.
[^] # Re: voir du côté de /etc/gdm3/PostSession/Default ou un fichier dans le même dossier ?
Posté par totof2000 . En réponse au message exécution d'un programme en fin de session gnome (avant déconnexion). Évalué à 2.
Ok, je vois. Du coup je me demande si c'est n script shell dont tu as réellement besoin, ou si c'est pas plutôt une extension gnome shel .. Je regarde si j'ai le temps (ça m'intéresse de savoir).
[^] # Re: Attentions aussi à l'électronique
Posté par totof2000 . En réponse au message Soudage/déssoudage d'éléments dans un bloc de batterie (pour remplacement). Évalué à 3.
J'espère bien pouvoir le faire (il y a plein de journaux que j'ai envie d'écrire sur plein de sujets que je veux expérimenter), mais malhereusement, j'ai tendance à me disperser … J'avais même commencé à écrire une nouvelle (une petite histoire) pendant les confinements covid: j'ai une trame qui tient pas trop mal la route, mais là encore je n'ai pas continué :(. Là le pack de batteries va probablement rester là plusieurs semaines avant que je ne trouve la motivation pour m'y mettre …