Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 668 vues
- 130 followers

Anonyme



Dr Pouet

J'avais pensé à utiliser une variable globale
Non. Ça c'est mal, et ce serait étonnant que tu ne finisses pas par le regretter.
Tu peux le faire via une programmation objet. Ou alors, ce qui revient à peu près au même, mais c'est moins élégant, passer sans arrêt en paramètre une structure qui contient les données dont tu as besoin.
Ceci n'est qu'un ´up' déguisé, car je pratique extrêmement peu Python.

[ Dernière édition du message le 27/06/2017 à 20:25:48 ]

Jimbass

En règle générale je ne suis pas fan de l'oo, mais là ca s'applique bien. Tu fais une classe par type d'instrument, avec dedans ta variable qui du coup est globale-mais-pas-trop, et des méthodes qui font ce que tu as à faire : initialiser, lire, changer de mode, etc.
Tu peux même factoriser les trucs communs dans une classe "instrument" dont hériteraient tes classes d'instruments particuliers.
Musikmesser 2013 - Bullshit Gourous - Tocxic Instruments - festivals Foud'Rock, Metal Sphère et la Tour met les Watts

static volatile

C'est comme goto, ça peut faire le job et parfois c'est ce qui donnera la solution la plus simple et la plus lisible.
C'est généralement déconseillé mais si la portée de cette variable est limitée à ton fichier, si tu sais qu'il n'y aura jamais qu'une seule instance de cette variable et pas d'effets de bord, ça peut faire du code plus simple à lire (et ça c'est un des critères les plus importants).
Sinon, pour rebondir sur l'idée de Dr Pouet, cherche du côté de **kwargs pour passer un Dict en paramètre à une fonction.
C'est assez élégant et facile à lire une fois qu'on a compris le principe.
EDIT: et rien ne t'empêche de passer par une globale dans un premier temps pour vérifier que ton programme fonctionne, puis d'améliorer le design avec une classe dans le futur.
First make it work, then make it good, finally, make it awesome
EDIT 2: ou alors, ta fonction d'init retourne ta variable ou un tuple avec plusieurs variables, et c'est ça qui sera le paramètre de ta fonction.
def init():
# initialize stuff
if something_bad_happens():
return None, None
return x, y
def process(x, y):
#do something awesome with x and y
if __name__ == "__main__":
from sys import exit
x, y = init()
if x is None or y is None:
exit("something bad happened")
process(x, y)
Resistance is not futile... it's voltage divided by current
[ Dernière édition du message le 27/06/2017 à 20:56:05 ]

EraTom

First make it work, then make it good, finally, make it awesome
En fait, je ne vois pas trop ce que l'on gagne en lisibilité et en simplicité à ne pas partir directement sur une programmation objet.

Anonyme

Voici ce que j'ai fait
Class monInstrument (object)
Def __init__(self, ip_adress, visa)
#blablablabla
Def read_output_state
Return self._query('OUTP?')
Lorsque je crée mon instrument ça marche j'arrive à m'y connecter. Mais si par exemple je veux lire sa sortie j'ai un message d'erreur :
Moninstrument instance has nous attribuer 'query'
Ce que j'avais fait
Import visa
Import moninstrument_driver
test = moninstrument_driver.moninstrument("192.168.xx.xx")
test.read_output_state()
Quelqu'un voit ce que c'est ? En gros je pense qu'il ne comprends pas le 'query' dans la méthode read_output_state

VvSurLeRiddim

donc il faut soit que tu déclares (et implémente) une méthode d'instance _query dans la classe monInstrument, soit que tu fasse hériter monInstrument d'une classe qui a déjà cette méthode, soit que tu apelles _query pour une instance d'une classe qui l'a (et pas self, qui est la référence à l'instance courante)

[ Dernière édition du message le 28/06/2017 à 20:37:38 ]

miles1981

Ensuite, effectivement, tu as un problème avec _query, et je suppose que tu as un _query qui est défini, mais le '_' rend la fonction cachée. Si tu fais un dir(objet), tu devrait voir qu'il y a un moninstrucmentdriver_query et non un _query.
Audio Toolkit: http://www.audio-tk.com/

static volatile

Citation de EraTom :Citation :Bof... On s'expose à rustiner encore et encore une archi qui aurait dû être pensée dès le début.First make it work, then make it good, finally, make it awesome
Dans un contexte industriel dans lequel tu développes un produit potentiellement complexe, qu'il va falloir maintenir, faire évoluer, etc.. je suis entièrement d'accord.
Ici on est manifestement dans un contexte de hobby, et vu la question posée, face à un dev ayant peu d'expérience (no disrespect @Patrick Truelle), et une des premières réponses parlait de classes et d'héritage.
Un design OO va demander une certaine expérience en architecture logicielle et un investissement en temps pour faire bien. Et si au final, il n'y a jamais qu'une seule instance de l'objet et seulement une poignée de méthodes, ce temps pourrait être employé de manière plus optimale en restant dans un simple programme procédural et en convergeant plus vite vers la fonctionnalité souhaitée.
Ce n'est bien sûr que mon avis.
Au sujet de _query, j'utilise très peu le système de classe de python.
Il me semble que rien n'est privé et que donc si _query est définie, tu devrais pouvoir l'appeler.
@Patrick Truelle: dans ce genre de cas, c'est plus facile d'aider si tu postes la trace que python imprime lorsque l'erreur arrive.
Resistance is not futile... it's voltage divided by current

miles1981

Audio Toolkit: http://www.audio-tk.com/

EraTom

xHors sujet :
Citation de EraTom :Citation :Bof... On s'expose à rustiner encore et encore une archi qui aurait dû être pensée dès le début.First make it work, then make it good, finally, make it awesome
Dans un contexte industriel dans lequel tu développes un produit potentiellement complexe, qu'il va falloir maintenir, faire évoluer, etc.. je suis entièrement d'accord.
Ici on est manifestement dans un contexte de hobby, et vu la question posée, face à un dev ayant peu d'expérience (no disrespect @Patrick Truelle), et une des premières réponses parlait de classes et d'héritage.
Un design OO va demander une certaine expérience en architecture logicielle et un investissement en temps pour faire bien. Et si au final, il n'y a jamais qu'une seule instance de l'objet et seulement une poignée de méthodes, ce temps pourrait être employé de manière plus optimale en restant dans un simple programme procédural et en convergeant plus vite vers la fonctionnalité souhaitée.
Ce n'est bien sûr que mon avis.
Au sujet de _query, j'utilise très peu le système de classe de python.
Il me semble que rien n'est privé et que donc si _query est définie, tu devrais pouvoir l'appeler.
@Patrick Truelle: dans ce genre de cas, c'est plus facile d'aider si tu postes la trace que python imprime lorsque l'erreur arrive.


static volatile

Citation de miles1981 :Il y a un mécanisme privé qui fonctionne quand la méthode commence par _.
Je viens de faire un simple test.
Une méthode préfixée par _ peut tout à fait être appelée depuis une instance de la classe.
Par contre, si une seconde classe hérite de la première, elle n'hérite pas des méthodes "privées", du moins en python 3.
C'est probablement plus subtil dans un vrai design (par opposition à une dizaine de lignes pour voir si ça marche), mais je ne suis pas un spécialiste de l'OO.
Ce qui m'amène à:
@Patrick Truelle: ta methode _query ne serait-elle pas une méthode "privée" d'une classe dont ta classe hérite?
J'imagine que tu dois pouvoir faire un truc du genre (pas testé, il faudra certainement lire la doc pour savoir comment faire ça bien de manière pythonique):
class p:
def __init__(self):
# init code
def _query(self):
# do something
class c(p):
def __init__(self):
self.query = p._query
Resistance is not futile... it's voltage divided by current
[ Dernière édition du message le 29/06/2017 à 19:37:14 ]

miles1981

xHors sujet :
Citation de miles1981 :Il y a un mécanisme privé qui fonctionne quand la méthode commence par _.
Je viens de faire un simple test.
Une méthode préfixée par _ peut tout à fait être appelée depuis une instance de la classe.
Par contre, si une seconde classe hérite de la première, elle n'hérite pas des méthodes "privées", du moins en python 3.
C'est probablement plus subtil dans un vrai design (par opposition à une dizaine de lignes pour voir si ça marche), mais je ne suis pas un spécialiste de l'OO.
Ce qui m'amène à:
Ah, ça doit être ça. C'est accessible en mettant le nom de la classe héritée devant le nom de la méthode.
Audio Toolkit: http://www.audio-tk.com/

Wolfen


(je repars bosser mon accent anglais)

Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Dr Pouet


miles1981

Je serai à nouveau à Londres en Novembre à l'Audio Developer Conference 2017, en partenariat avec JUCE / ROLI, pour faire une présentation en anglais qui s'appellera "Fifty Shades of Distortion" (Cinquante nuances de distorsion), et elle sera probablement enregistrée pour être mise sur Youtube comme les autres années !
(je repars bosser mon accent anglais)
Cool ! On se verra sur le thème de la dispo, je ferai un talk sur l'optimisation de la modélisation d'un circuit de distortion (j'hésite entre SD1/TS9 et un circuit plus classique).
Audio Toolkit: http://www.audio-tk.com/

Wolfen


https://www.juce.com/releases/juce-5-1
(bon tout a été réécrit par l'équipe de JUCE aussi pour être C++14 compliant, et pour suivre leurs standards de codage, donc il doit pas rester grand chose de mon code original

Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Rémy M. (chimimic)


Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

Dr Pouet



Jay f.

We're born naked, wet and hungry. Then things get worse.
http://soundcloud.com/jay-f-2

Wolfen


Les gars

Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud
[ Dernière édition du message le 29/07/2017 à 16:21:10 ]

Wolfen


https://www.youtube.com/channel/UCaF6fKdDrSmPDmiZcl9KLnQ
Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

.: Odon Quelconque :.

http://internetactu.blog.lemonde.fr/2017/11/25/reinventer-la-programmation/
https://www.theatlantic.com/technology/archive/2017/09/saving-the-world-from-code/540393/
Notamment les citations de Bret Victor.
“When I want to make a thing, especially when I want to create something in software, there’s this initial layer of disgust that I have to push through, where I’m not manipulating the thing that I want to make, I’m writing a bunch of text into a text editor.”
“There’s a pretty strong conviction that that’s the wrong way of doing things.”
http://worrydream.com/cv/ -> il a travaillé chez Alesis, sur les Micron, Ion et Fusion. Plutôt ironique et dépouillé, le Ion, pour un spécialiste des interfaces homme-machine.

« What is full of redundancy or formula is predictably boring. What is free of all structure or discipline is randomly boring. In between lies art. » (Wendy Carlos)

Wolfen

https://www.pushturnmove.com/
https://fr.audiofanzine.com/methode/kim-bjorn/push-turn-move/medias/photos/

Ca fait un mois que je l'ai

Développeur de Musical Entropy | Nouveau plug-in freeware, The Great Escape | Soundcloud

Dr Pouet

Chouette article du Monde.fr adapté de The Atlantic :
http://internetactu.blog.lemonde.fr/2017/11/25/reinventer-la-programmation/
Mouais, je suis assez mitigé sur cet article, du moins pour des gens qui s’intéressent depuis longtemps à la programmation :
- il passe beaucoup de temps à enfoncer des portes ouvertes (les très gros logiciels sont devenus courants, et sont très difficiles à rendre parfaitement fiables)
- il présente comme nouveaux des trucs connus depuis longtemps (les méthodes formelles), au moins 20 ans (1974 et 1980 pour Z et B)
- il pose des « fausses questions », dont on connaît déjà les réponses.
Pour ce dernier point, je parle de :
En fait, comme le montre l’exemple de l’aéronautique, nous savons déjà comment rendre des logiciels complexes fiables, via des normes réglementaires rigoureuses, des procédures de conception et de documentation très rigoureuses elles aussi. « Alors pourquoi ne le faisons-nous pas partout ? », interroge James Somers.
Tant et si bien, souligne Somers, qu’il faudrait surtout étudier pourquoi les développeurs sont encore si réfractaires à ces nouvelles méthodes.
Ce qui fait que ces méthodes (pas nouvelles) ne sont pas plus utilisées, c’est qu’elles coûtent beaucoup plus cher. Plus exactement : leur productivité est beaucoup plus faible, donc le coût beaucoup plus élevé pour réaliser les mêmes fonctions.
Typiquement, les systémiers (Airbus, Thalès, ADS ex Astrium/Matra...) estiment à une multiplication par 5 l’augmentation du coût entre chacun des niveaux suivants :
- industriel (le plus courant dans tout ce qui est censé être sérieux ; donc avec déjà beaucoup de tests, de la documentation etc...) ; estimation globale pour un projet (y compris docs, tests...) = un jour pour un bonhomme pour produire 25 lignes de code.
- critique (typiquement une salle de contrôle de satellites : ce dernier coûte tellement cher qu’on ne peut pas le perdre, néanmoins la salle étant au sol, les corrections sont plus faciles que ci-après)
- embarqué (forte probabilité de mort d’hommes, perte financière colossale ; commandes de vol d’un avion de ligne, matériel médical sensible, code de pilotage d’un satellite...)
Dans le dernier cas, les méthodes formelles sont assez souvent utilisées. Notamment le Z.100 / SDL (1988).
Mais ça coûte 25 fois plus cher que du code industriel, qui coûte déjà beaucoup plus cher que tout ce qui est un peu bâclé (pour du code industriel, la charge de travail totale est généralement considérée comme six fois la charge de codage).
Je pense que la faiblesse de l’article vient du fait qu’il a été rédigé essentiellement en interviewant des gens qui ont des trucs à vendre, et présentent donc les faits d’une manière qui les arrange un peu.
Ces questions de criticité du logiciel se sont imposées de manière brutale avec la triste histoire du Therac-25, donc ça ne date pas d’hier (1987). Aussi le vol inaugural d’Ariane 5 en 1996.
Après si on ne connaît pas ces sujets, cet article reste une introduction assez intéressante.
Je pense qu’il a aussi raison de souligner qu’en automobile la criticité semble un peu sous-évaluée.
[ Dernière édition du message le 26/11/2017 à 16:31:43 ]

Jimbass

J'ajoute que la productivité avec les langages graphiques ou WYSIWYG est désastreuse, même si c'est utilisé pour certains systèmes critiques (je pense notamment à SCADE : http://www.esterel-technologies.com/products/scade-suite/) [edit : je n'avais pas fini de lire l'article, en fait il en est question. En passant, le langage Esterel a été abandonné par la société du même nom ... pour se concentrer sur Lustre/SCADE et se faire racheter par ANSYS.]
Il y a en ce moment de gros enjeux sur la sûreté (au sens résilience aux erreurs, aux pannes et aux facteurs environnementaux) et de sécurité (au sens résilience aux attaques malveillantes) du logiciel. En effet, de plus en plus de systèmes critiques et/ou embarqués deviennent connectés. Et de plus en plus de produits contiennent de l'informatique embarquée. L'automobile, de plus en plus assistée voire autonome, est symptomatique (avec sa particularité d'être à la fois critique et grand public). Mais il y en a plein d'autres, le sujet très à la mode étant l'Internet des Objets (IoT).
Dans la course à la productivité sur des systèmes informatiques de plus en plus complexes, on a poussé l'abstraction. On code sous forme de strate, et on forme les ingénieurs à ne raisonner que dans l'abstraction d'une strate. Ca rend le code inoptimisable, et planque les bugs au plus profond des interactions entre strates. Il faut réussir à re-concrétiser tout ca pour maîtriser le fonctionnement.
Par ailleurs, l'esprit humain est super mal équipé pour penser des flux d'information parallèles intriqués (préemption de threads, déterminer les bonnes priorités dans un modèle CSP, partage de ressources entre plusieurs processeurs, etc.). À mon avis c'est plus là-dessus qu'il faudrait plancher en terme de révolution des langages informatiques : expression directe du temps (deadlines) et des dépendances de données, éviter les communications implicites (variables partagées), etc.
Le formalisme synchrone, sur lequel la recherche française était en pointe il y a 30 ans (et qui a débouché sur Esterel) a été une tentative dans ce sens. Il en faudrait d'autres ...
Mais bon, déjà une prise de conscience que le logiciel n'est pas magique, ce serait bien.
Musikmesser 2013 - Bullshit Gourous - Tocxic Instruments - festivals Foud'Rock, Metal Sphère et la Tour met les Watts
[ Dernière édition du message le 26/11/2017 à 16:50:18 ]
- < Liste des sujets
- Charte