Python en un langage dynamique, tu peux patcher à tout moment le code de ton application, par exemple avec du currying (ajouter des méthodes dynamiquement à un objet)… en cours de fonctionnement !
Il y a bien un eval en python…
Autre piste: stocker les procédures python dans des grosses string (genre blob ou text dans la base de données), et utiliser un process.exec(python3 )… si tu mets un shebang à ton code dans la DB, tu peux créer un fichier temporaire avec le contenu de ton champs et l'executer directement avec process.exec - il doit y avoir un équivalent ssh dans paramiko. (ansible fait plus ou moins comme ça).
Ansible est une bonne piste aussi: ça fait tout ça et bien plus !
Tu géres un fichier hosts avec les adresses de et IoT
Ansible fait un inventaire des ressources pour toi quand il se connecte
Tu peux analyser cet inventaire et voir si il y a des décisions à prendre
Tu crées une liste de rôles pour les tâches les plus courantes
Ton appli automatise les appels aux procédures selon les besoins
En plus, tu peux utiliser la base SQLite directement comme liste de hosts !
Bravo pour cette super dépèche, et pour ce super logiciel qu'est Blender… Et merci pour le super boulot fait sur Gimp !
…mais il manque un tout petit peu de colle entre les deux : un truc qui permettrai de passer de Blender à Gimp pour éditer les textures : exporter les maps UV dans un calque Gimp, éditer la texture dans Gimp (dans un autre calque), voir le résultat dans Blender (sans le claque UV, hein), éventuellement faire une petite retouche localement avec Blender (un raccord entre 2 objets, par exemple), avec mise à jour +- automatique dans Gimp…
J'ai trouvé un bout de script python qui est sensé faire ça (enfin, en partie je pense), la partie Blender s'installe bien, mais par contre pas dans Gimp - le paquet gimp-python semble ne plus exister dans ma debian… et du coup, pas de python-fu dans les filtres de Gimp.
… il date de 2012 ! Je veux bien le réécrire en python3, mais il faudrait pouvoir utiliser à nouveau python3 avec Gimp… Après, je ne suis pas un expert de Gimp !
Un autre truc qui serait vraiment cool, c'est un importer "direct" de XCF dans Blender, avec la gestion des calques, mais c'est une autre histoire…
Bon, je ne suis pas du tout u pro de Gimp et Blender, juste un développeur python, utilisateur de Blender en amateur.
Les fonctionnaires sont et restent propriétaires du code qu'ils produisent (c'est mon cas). Il n'y a pas nécessité dans leur cas de demander l'autorisation à qui que ce soit.
L111-1 du Code de la propriété intellectuelle
"l’auteur d’une œuvre de l’esprit jouit sur cette œuvre, du seul fait de la sa création, d’un droit de propriété incorporelle exclusif et opposable à tous"
De ce fait, si par exemple le-dit fonctionnaire décide de quitter la fonction publique et de créer une entreprise pour commercialiser les production, libre à lui !
Dans ce cas, son ancienne administration est "prioritaire" pour continuer à utiliser ce code, mais l'ancien fonctionnaire peut décider de lui faire payer les mises à jour par exemple.
PS: c'est aussi le cas pour les photographes, vidéastes, profs…
Je suis également seul dev dans ma structure, j'utilise git flow. Il me permet de jongler avec les différentes features / bugfix…
Pour le déploiement, j'utilise des tags sur la branche master pour la PROD, et la branche "develop" brute pour la pré-prod (STAGING). La préprop peut casser, mes utilisateurs sont au courant :)
Le processus de déploiement est "à la demande": j'ai un rôle ansible qui fait le taff quand j'en ai besoin, avec un script maison deploy.sh qui n'est qu'un lanceur pour le rôle ansible.
Du coup, j'utilise pour mettre en prod :
git flow release start <version>
Bump version numbers vers > (y compris les vars ansible pour la prod !)
git commit (dans la branche release/)
git flow release finish
./deploy.sh << Vers la pré-prod
./deploy.sh -m PROD << Vers la prod
L'avantage de cette approche, c'est que je peux à tous moments pousser vers la staging (branche develop), mais que je ne peux pas pousser "par accident" dans la PROD.
Le process est à la fois contraignant mais pas trop, et avec le rôle ansible, je n'oublie rien.
Je déploie environ 20 projets différents avec cette méthode, et j'en suis très satisfait.
Ah, et j'ai un script python pour faire les montées de version:
Ce script ne fait que mettre à jour les numéros de version dans différents points du projet (main, docs, ansible vars pour récupérer le bon tag quand je déploie), il ne fait rien avec GIT.
Pour info, je fais quasi exclusivement du Django / python…
Je suis en train de taper dans l'écran de mon portable depuis le clavier d'un PC fixe… Barrier powa !
Passer à X.org pour le serveur graphique sur les machines Client et Server (il semble qu'ils se réveillent pour passer à Wayland depuis que X est passé en mode "maintenance")
Désactiver le chiffrement sur le Client et le Server
Pour mes projets en python:
+ pelican pour le doc utilisateurs
+ sphinx pour le doc technique
Les deux sont construites dans des projets différents, via gitlab-ci:
+ <app>/docs pour la doc technique, construite via une directive pages dans gitlab-ci
+ <app-docs> pour la doc utilisateurs, construite via une directive pages dans gitlab-ci
J'aime bien wayland, je trouve qu'il marche super… mais il lui manque une fonctionnalité qui est bloquante pour moi: le partage de clavier / souris entre plusieurs PC.
[myLife]
Je m'explique: je suis au boulot, j'ai une machine "de travail", avec un clavier et une souris. J'ai à côté un portable perso, qui me sert à rédiger ces quelques lignes, à consulter de la doc (3ème écran)…
J'utilise mon clavier "principal" et ma souris pour contrôler ce portable, à travers une appli nommée synergy, forkée récemment en "Barrier", qui marche très très bien… avec X uniquement.
Tant que Barrier ne supportera pas Wayland, je suis coincé.
[/myLife]
Quand j'étais confronté au problème, j'ai utilisé un script jeu de scripts shell nommé kidtimer, qui a très bien fonctionné pendant des années sur le PC en libre service de la maison :
configure les plages d'utilisation (ma fille de 10 ans à l'époque de 18 à 20h, mon fils plus agé de 16 à 22h…)
configure les durée d'utilisation, avec déconnexion automatique (ma fille: 1H de session, mon fils 2h…)
De plus, il y a un CLI qui permet d'ajouter du temps "exceptionnellement", de faire un reset de la session…
Bon, maintenant mes enfants sont plus grand, et ils ont tous des ordiphones, le besoin se fait moins sentir… juste on récupére le mobile de la plus petite à 21h30 (15 ans).
Je fais du python au quotidien… et là je suis séché : je n'ai jamais rien lu de si moche !
Code illisible
Tout est mélangé
…
Pour commencer, python dispose d'un mécanisme de namespace qui permet de séparer les trucs dans des distincts:
les modules : de simples fichiers python qui permettent de séparer le code, importables.
des packages : des dossiers contenant (au moins) un fichier __init__.py, importables.
Ces 2 trucs permettent de séparer les choses dans des espaces distincts, et éviter les scripts à ralonge.
Les fonctions et méthodes ne doivent pas dépasser 50 lignes, sinon tu dois découper.
En plus, tu mélanges des aspects "objet" avec du code procédural : la seule fonction doit être main(*args), protégée :
defmain(*args):# your launching code...return0if__name__=="__main__":sys.exit(main(sys.argv[1:]))
Ça permet de rendre un script importable, sans qu'il soit executé directement.
Le main doit retourner un entier, 0 si tout va bien, un autre entier sinon.
Ensuite, les règles de nommage:
les noms de variables en snake-case : truc_machin = "bidule"
les noms de classes capitalisées :
classClock:def__init__(self,**kwargs):self.thing=kwargs.get('thing',None)# None by default...
les variables privées commencent par un _
_private="foo"
Tu noteras que plutôt que de mettre 20 args à mon __init__, j'utilise l'opérateur splat qui permet de passer un **kwargs, qui est le dictionnaire de tous les paramètres passée, nommés.
Pour ta question concernant la suppression d'instance, tu as une méthode spéciale __del__(self) qui permet de gérer la suppression d'instance.
Il faut garder en mémoire qu'une classe permet de fabriquer des instances, et qu'elle peut avoir des méthodes qui permettent de manipuler ces instances…
Pour la latence, je m'en suis rendu compte : le son a marché une fois pour une vidéo dans vlc, j'ai décalé le son de -1.5s, ça a marché.
Depuis plus moyen : Le truc, c'est que je peux appairer le BT, le "connecter" (la source apparaît sur la chaine), mais que quand je vais dans les params audio (PA), je ne vois pas le sink…
Le bon réglage de l'écran est aussi une piste: plutôt que de bidouiller la config de la carte graphique, peut-être ça serait mieux de commencer par régler l'écran, si c'est possible…
De quel type est-il ?
J'ai ici deux écrans Dell, qui ont un rendu des couleurs très différent.
Ils ont tous deux un menu qui permet de régler ces couleurs, au niveau de l'écran lui-même.
[^] # Re: Gnome?
Posté par François GUÉRIN (Mastodon) . En réponse au message Gestion de xkb dans XWayland. Évalué à 1.
Salut,
J'ai installé gnome-shell, gnome-session et gnome-core (+ gdm3 pour wayland) depuis les dépots de mint, puis désinstallé cinnamon
…mais ça ressemble effectivement à un bogue dans mint.
J'ai posté dans le forum de mint fr, mais je n'ai pas eu de réponse pertinente.
Merci !
[^] # Re: Self debug
Posté par François GUÉRIN (Mastodon) . En réponse au message Référencer du code dans une BdD ?. Évalué à 2. Dernière modification le 13 juillet 2020 à 23:12.
Python en un langage dynamique, tu peux patcher à tout moment le code de ton application, par exemple avec du currying (ajouter des méthodes dynamiquement à un objet)… en cours de fonctionnement !
Il y a bien un eval en python…
Autre piste: stocker les procédures python dans des grosses string (genre blob ou text dans la base de données), et utiliser un process.exec(python3 )… si tu mets un shebang à ton code dans la DB, tu peux créer un fichier temporaire avec le contenu de ton champs et l'executer directement avec process.exec - il doit y avoir un équivalent ssh dans paramiko. (ansible fait plus ou moins comme ça).
Ansible est une bonne piste aussi: ça fait tout ça et bien plus !
En plus, tu peux utiliser la base SQLite directement comme liste de hosts !
Courage !
[^] # Re: Raccourci clavier
Posté par François GUÉRIN (Mastodon) . En réponse au journal Silence ! Contrôler le bruit des ventilos du portable. Évalué à 3.
Ah ouais, ça marche sur mon Clevo N151ZU… Cool !
… je ne connaissais pas, merci du tuyau !
# Intégration Gimp / Blender
Posté par François GUÉRIN (Mastodon) . En réponse à la dépêche Blender 2.8x : la consécration. Évalué à 3.
Bravo pour cette super dépèche, et pour ce super logiciel qu'est Blender… Et merci pour le super boulot fait sur Gimp !
…mais il manque un tout petit peu de colle entre les deux : un truc qui permettrai de passer de Blender à Gimp pour éditer les textures : exporter les maps UV dans un calque Gimp, éditer la texture dans Gimp (dans un autre calque), voir le résultat dans Blender (sans le claque UV, hein), éventuellement faire une petite retouche localement avec Blender (un raccord entre 2 objets, par exemple), avec mise à jour +- automatique dans Gimp…
J'ai trouvé un bout de script python qui est sensé faire ça (enfin, en partie je pense), la partie Blender s'installe bien, mais par contre pas dans Gimp - le paquet gimp-python semble ne plus exister dans ma debian… et du coup, pas de python-fu dans les filtres de Gimp.
Le plugin;
https://www.blendernation.com/2012/09/18/blender-gimp-autorefresh/
… il date de 2012 ! Je veux bien le réécrire en python3, mais il faudrait pouvoir utiliser à nouveau python3 avec Gimp… Après, je ne suis pas un expert de Gimp !
Un autre truc qui serait vraiment cool, c'est un importer "direct" de XCF dans Blender, avec la gestion des calques, mais c'est une autre histoire…
Bon, je ne suis pas du tout u pro de Gimp et Blender, juste un développeur python, utilisateur de Blender en amateur.
# Le cas des fonctionnaires
Posté par François GUÉRIN (Mastodon) . En réponse au journal Contributions open source en entreprise. Évalué à -2. Dernière modification le 04 mars 2020 à 10:28.
Les fonctionnaires sont et restent propriétaires du code qu'ils produisent (c'est mon cas). Il n'y a pas nécessité dans leur cas de demander l'autorisation à qui que ce soit.
L111-1 du Code de la propriété intellectuelle
"l’auteur d’une œuvre de l’esprit jouit sur cette œuvre, du seul fait de la sa création, d’un droit de propriété incorporelle exclusif et opposable à tous"
De ce fait, si par exemple le-dit fonctionnaire décide de quitter la fonction publique et de créer une entreprise pour commercialiser les production, libre à lui !
Dans ce cas, son ancienne administration est "prioritaire" pour continuer à utiliser ce code, mais l'ancien fonctionnaire peut décider de lui faire payer les mises à jour par exemple.
PS: c'est aussi le cas pour les photographes, vidéastes, profs…
# git flow + releases
Posté par François GUÉRIN (Mastodon) . En réponse au message branches GIT. Évalué à 1.
Salut?
Je suis également seul dev dans ma structure, j'utilise
git flow
. Il me permet de jongler avec les différentes features / bugfix…Pour le déploiement, j'utilise des tags sur la branche master pour la PROD, et la branche "develop" brute pour la pré-prod (STAGING). La préprop peut casser, mes utilisateurs sont au courant :)
Le processus de déploiement est "à la demande": j'ai un rôle ansible qui fait le taff quand j'en ai besoin, avec un script maison
deploy.sh
qui n'est qu'un lanceur pour le rôle ansible.Du coup, j'utilise pour mettre en prod :
git flow release start <version>
git commit
(dans la branche release/)git flow release finish
./deploy.sh
<< Vers la pré-prod./deploy.sh -m PROD
<< Vers la prodL'avantage de cette approche, c'est que je peux à tous moments pousser vers la staging (branche develop), mais que je ne peux pas pousser "par accident" dans la PROD.
Le process est à la fois contraignant mais pas trop, et avec le rôle ansible, je n'oublie rien.
Je déploie environ 20 projets différents avec cette méthode, et j'en suis très satisfait.
Ah, et j'ai un script python pour faire les montées de version:
https://pypi.org/project/bump-release/
Ce script ne fait que mettre à jour les numéros de version dans différents points du projet (main, docs, ansible vars pour récupérer le bon tag quand je déploie), il ne fait rien avec GIT.
Pour info, je fais quasi exclusivement du Django / python…
# Plash Player
Posté par François GUÉRIN (Mastodon) . En réponse à la dépêche Livre « Une Expérience Libre ». Évalué à 4. Dernière modification le 22 janvier 2020 à 14:09.
Ha, le Flash Player pour lire les extraits, en plus de la préview en police 2, j'adore, et je passe mon chemin !
# parallel
Posté par François GUÉRIN (Mastodon) . En réponse au message fichier de sortie sans l'extension du fichier source. Évalué à 1.
Bonjour,
L'utilitaire
GNU parallel
https://www.gnu.org/software/parallel/ permet d'executer le script de conversion et utilsant plusieurs cores / threads.Je m'en sert pour traiter des lots de photos…
Courage !
[^] # Re: Firefox sous Wayland sous Arch
Posté par François GUÉRIN (Mastodon) . En réponse à la dépêche GNOME 3.34. Évalué à 8.
… ça marche sous debian aussi …
# pas d'extension dans noms de scripts cron
Posté par François GUÉRIN (Mastodon) . En réponse au message Problème d'exécution script sur crontab. Évalué à -1.
[^] # Re: par le store ou le terminal
Posté par François GUÉRIN (Mastodon) . En réponse au message novice sur linux/unbuntu je ne comprend rien pour installer un logiciel. Évalué à 1.
Pour ça, tu lances le terminal depuis le menu, il t'affiche une boite avec un texte comme ça:
Pour lancer la commande :
Par exemple, si le disque que tu veux tester est sdb :
[^] # Re: Barrier
Posté par François GUÉRIN (Mastodon) . En réponse au message synergy. Évalué à 3.
Salut,
Je suis en train de taper dans l'écran de mon portable depuis le clavier d'un PC fixe… Barrier powa !
Courage !
[^] # Re: Site de référence
Posté par François GUÉRIN (Mastodon) . En réponse au journal Générateur de site web statique. Évalué à 5.
Pour mes projets en python:
+ pelican pour le doc utilisateurs
+ sphinx pour le doc technique
Les deux sont construites dans des projets différents, via gitlab-ci:
+
<app>/docs
pour la doc technique, construite via une directive pages dans gitlab-ci+
<app-docs>
pour la doc utilisateurs, construite via une directive pages dans gitlab-ciBien à vous
# ... pas compatible RGPD cette affaire...
Posté par François GUÉRIN (Mastodon) . En réponse au journal OATH et Verizon, faut qu'on parle. Évalué à 10.
Je ne suis pas sûr de mon coup, mais je pense que ce genre de protique est attaquable auprès de la CNIL comme procédure abusive !
Le non-consentement doit être le valeur par défaut normalement dans le cadre du RGPD, et donc l'option par défaut…
# Enregistrer l'imprimante dans l'OS
Posté par François GUÉRIN (Mastodon) . En réponse au message Installation scanner HP Envy ... . Évalué à 1.
Salut,
J'ai une Envy 5440 à la maison, utilisée en réseau, Wifi configuré sur l'imprimante.
L'impression marche out of the box, avec juste le driver hplip.
Pour le scan:
Pour enregistrer l'imprimante comme scanner, je n'ai pas trouvé d'autre moyen.
Je cherche l'imprimante en mode "Network/Ethernet/Wireless", et je mets l'Ip de l'imprimante…
Une fois fait, ça marche nickel: impression / scan !
Courage
[^] # Re: et avec ton smartphone ?
Posté par François GUÉRIN (Mastodon) . En réponse au message bluetooth et Marantz-MCR611. Évalué à 1.
Yep, c'est peut-être un problème de clé…
[^] # Re: et avec ton smartphone ?
Posté par François GUÉRIN (Mastodon) . En réponse au message bluetooth et Marantz-MCR611. Évalué à 2.
On peut "apairer" (?) plusieurs appareils avec le Marantz, et il reconnais les appareils quand on les connecte.
[^] # Re: et avec ton smartphone ?
Posté par François GUÉRIN (Mastodon) . En réponse au message bluetooth et Marantz-MCR611. Évalué à 1.
Oui
J'en sais rien… mais je ne crois pas
Oui
# Juste une fonctionnalité qui me fait rester sur X
Posté par François GUÉRIN (Mastodon) . En réponse au journal Le dégonflage des mythes Wayland... dégonflés sur Reddit. Évalué à 9.
Salut,
J'aime bien wayland, je trouve qu'il marche super… mais il lui manque une fonctionnalité qui est bloquante pour moi: le partage de clavier / souris entre plusieurs PC.
[myLife]
Je m'explique: je suis au boulot, j'ai une machine "de travail", avec un clavier et une souris. J'ai à côté un portable perso, qui me sert à rédiger ces quelques lignes, à consulter de la doc (3ème écran)…
J'utilise mon clavier "principal" et ma souris pour contrôler ce portable, à travers une appli nommée synergy, forkée récemment en "Barrier", qui marche très très bien… avec X uniquement.
Tant que Barrier ne supportera pas Wayland, je suis coincé.
[/myLife]
Courage !
# kidtimer
Posté par François GUÉRIN (Mastodon) . En réponse au message Moyen pour bloquer une session utilisateur sur plage horaire. Évalué à 2.
Salut,
Quand j'étais confronté au problème, j'ai utilisé un script jeu de scripts shell nommé kidtimer, qui a très bien fonctionné pendant des années sur le PC en libre service de la maison :
De plus, il y a un CLI qui permet d'ajouter du temps "exceptionnellement", de faire un reset de la session…
https://github.com/JimDunphy/kidtimer
Bon, maintenant mes enfants sont plus grand, et ils ont tous des ordiphones, le besoin se fait moins sentir… juste on récupére le mobile de la plus petite à 21h30 (15 ans).
Courage !
# SYLK
Posté par François GUÉRIN (Mastodon) . En réponse au journal Feuille de style pour CSV. Évalué à 3.
Il existe le format de fichier SYLK qui pourrait parfaitement cnvenir à ton usage:
https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
Courage !
# Pas beau du tout...
Posté par François GUÉRIN (Mastodon) . En réponse au message Mon premier code python. Évalué à 3. Dernière modification le 23 janvier 2019 à 18:11.
Salut,
Je fais du python au quotidien… et là je suis séché : je n'ai jamais rien lu de si moche !
Pour commencer, python dispose d'un mécanisme de namespace qui permet de séparer les trucs dans des distincts:
__init__.py
, importables.Ces 2 trucs permettent de séparer les choses dans des espaces distincts, et éviter les scripts à ralonge.
Les fonctions et méthodes ne doivent pas dépasser 50 lignes, sinon tu dois découper.
En plus, tu mélanges des aspects "objet" avec du code procédural : la seule fonction doit être
main(*args)
, protégée :Ça permet de rendre un script importable, sans qu'il soit executé directement.
Le
main
doit retourner un entier, 0 si tout va bien, un autre entier sinon.Ensuite, les règles de nommage:
truc_machin = "bidule"
_
Tu noteras que plutôt que de mettre 20 args à mon
__init__
, j'utilise l'opérateursplat
qui permet de passer un**kwargs
, qui est le dictionnaire de tous les paramètres passée, nommés.Pour ta question concernant la suppression d'instance, tu as une méthode spéciale
__del__(self)
qui permet de gérer la suppression d'instance.Il faut garder en mémoire qu'une classe permet de fabriquer des instances, et qu'elle peut avoir des méthodes qui permettent de manipuler ces instances…
Bon courage !
[^] # Re: latence
Posté par François GUÉRIN (Mastodon) . En réponse au message Mini-chaine BlueTooth . Évalué à 1.
Salut,
Pour la latence, je m'en suis rendu compte : le son a marché une fois pour une vidéo dans vlc, j'ai décalé le son de -1.5s, ça a marché.
Depuis plus moyen : Le truc, c'est que je peux appairer le BT, le "connecter" (la source apparaît sur la chaine), mais que quand je vais dans les params audio (PA), je ne vois pas le sink…
Merci et bonne année !
# Réglage de l'écran ?
Posté par François GUÉRIN (Mastodon) . En réponse au message Problème couleur carte graphique. Évalué à 2.
Le bon réglage de l'écran est aussi une piste: plutôt que de bidouiller la config de la carte graphique, peut-être ça serait mieux de commencer par régler l'écran, si c'est possible…
De quel type est-il ?
J'ai ici deux écrans Dell, qui ont un rendu des couleurs très différent.
Ils ont tous deux un menu qui permet de régler ces couleurs, au niveau de l'écran lui-même.
Courage !
[^] # Re: Badges avec photo
Posté par François GUÉRIN (Mastodon) . En réponse au journal Première version stable pour WeasyPrint. Évalué à 3.
Yep, et en plus mon imprimeur est content :)