Le fichier se place dans ~/.emacs.d/init.el. La première fois qu’emacs démarre il télécharge tous les paquets décrits dans la config, donc le premier démarrage est long, c’est normal.
Maintenant pour qu’eglot puisse trouver zuban, pour que flycheck puisse trouver pylint, et pour que blacken-mode puisse trouver black le mieux c’est … un venv !
Et pour que le venv du projet soit chargé automatiquement par emacs j’utilise direnv, ça fait double usage : mes venv sont aussi activés automatiquement dans le shell !
Pour configurer direnv il faut un fichier .envrc à la racine du projet qui contient :
VIRTUAL_ENV=.venv
layout python3
Si c’est votre première utilisation de direnv il faut rajouter eval "$(direnv hook bash)" dans ~/.bashrc.
Il vous fera executer direnv allow pour l’autoriser à bosser, et hop, le venv est crée tout seul, et activé automatiquement par bash et emacs.
Faites-vous un alias ou une commande nommé venv pour gagner du temps sur la création de ce .envrc.
Il faut installer deux-trois trucs dans le venv :
pip install --upgrade zuban black mypy pylint
puis démarrer emacs :
emacs test.py
Pour ceux qui n’ont jamais lancé emacs avant, tapez Ctrl-h puis t, ça vous ouvrira le tuto interactif.
Ohhh, et j’ai configuré blacken-mode pour ne passer black à la sauvegarde que s’il trouve [tool.black] dans pyproject.toml, ça m’évite d’avoir emacs qui réecrit des fichiers dans des projets qui n’utilisent pas black, c’est la ligne blacken-only-if-project-is-blackened dans la config.
Quelques raccourcis importants :
M-. : c’est pour aller a la définition de quelque chose.
M-x eglot-rename pour renommer une variable (et toutes ses occurrences).
C-c ! n pour sauter a la prochaine erreur.
Ma configuration complète est ici : https://git.afpy.org/mdk/dotfiles/src/branch/main/.emacs.d/init.el, elle est plus longue : j’enlève les menus, le message d’accueil, la décoration de la fenêtre, j’ajoute du confort, et j’ai de la configuration C, rust, org-mode, je configure emacs en mode serveur (et j’utilise emacsclient), etc…
On a lsusb, lspci, lscpu… mais rien pour les écrans ou les GPUs.
Pour savoir quel écran est branché sur quelle sortie, c'est la danse du xrandr | grep connected, cat /sys/class/drm/card*/edid | edid-decode, nvidia-smi…
J'ai écrit deux outils pour régler ça.
lsdisplay
Liste les écrans connectés avec fabricant, modèle, numéro de série,
résolution, fréquence, diagonale, et dessine un schéma ASCII du layout :
Je cherche une alternative à mathlab simulink pour la mise au point d'algorithmes de contrôle et la modélisation de systèmes.
Après quelques essais (scilab xcos, modelica, octave …), c'est python qui a retenu mon attention et en particulier les notebook Jupyter et la bibliothèque control.
Ça fait quelques jours que je fais un essai sur la modélisation d'une régulation pour un générateur de courant mais certaines subtilités m'échappe.
En particulier, lorsque je veux modifier un paramètre dans une "cellule code" et la rejouer. Si cette dernière contient une courbe générer avec matplotlib, soit la courbe ne s'affiche pas, ou bien pas correctement, ou toutes les autres courbes s'en retrouve modifiées…
Matplotlib propose bien des exemples d'utilisation, mais comme mes essais, ils ne semblent fonctionner que si l'on exécute le "notebook" une seule fois.
Question:
L'utilisation de Jupyter notebook est-elle réservée à la documentation final du processus et non aux essais ? Ou bien je passe à côté de quelque chose ?
Je débute en programmation et je me suis heurté a une incompréhension sur la correction d’un exercice :
nombres = input("tapez votre suite de nombre séparé par des virgule")
liste = nombres.split(",")
liste_entier = []
for nombre in liste:
nombre_entier = int(nombre)
liste_entier.append(nombre_entier)
print("liste: ", liste_entier)
somme = 0
for nombre in liste_entier:
somme += nombre
print("somme : ", somme)
moyenne = somme / len(liste_entier)
print("moyenne: ", moyenne)
nombre_superieur_moyenne = 0
for nombre in liste_entier:
if nombre > moyenne:
nombre_superieur_moyenne += 1
print("nombre suprieur: ", nombre_superieur_moyenne)
Ca peut paraitre évident pour certain mais je ne comprend pas pourquoi, à la ligne 4 ( for nombre in liste:) il y a ce “nombre” qui sort de nul part , alors que ma variable plus haut est “nombres”. J’ai cherché, pensant que “nombre” était peut être déjà connu par le logiciel, mais je ne trouve rien a ce sujet.
Je n’arrive pas à passer outre cette incompréhension, et cella me retarde dans mon apprentissage, si une personne avais l’amabilité de prendre un petit peu de son temps pour m’expliquer cela j’en serait comblé. Merci d’avance et je vous souhaite une agréable journée
Django Ninja : votre API nette et sans bavure ? - par Quentin Caron (profil LinkedIn), lead dev Python et expert technique chez Néosoft
Vous aimez Django mais vous avez préféré un autre framework pour écrire votre API ? Ce retour d’expérience sur Django Ninja vous fera peut-être changer d’avis. Après un tour d’horizon des frameworks web API Python permettant de planter le décor, découvrez les caractéristiques du framework, les difficultés rencontrées en 10 semaines d’utilisation et les contournements possibles pour devenir un véritable ninja des APIs.
Comparaison de 4 orchestrateurs de workflows open-source : airflow, argo, temporal.io, windmill par Jesshuan Diné (profil LinkedIn), ingénieur data et IA chez Crédit Mutuel Arkéa
Nos métiers intègrent de plus en plus de traitements d’ingestion et de remaniement de la donnée. J’ai eu besoin de faire un benchmark pour comparer différents frameworks d’orchestration open-source qui répondaient à mes besoins. Après une brève présentation des candidats et de leur différence de paradigmes, je vous présenterai la méthodologie que j’ai suivi pour les comparer (notamment concernant la performance de l’infrastructure) et les résultats.
Au menu :
une infra kubernetes
des workflows CPU-intensifs
une stack d’observabilité
Merci à Néosoft Rennes pour l’accueil du meetup
Publication à relayer sur les réseaux si vous le souhaitez :