Arduino Forum

International => Français => Le bar => Topic started by: BrUnO14200 on Dec 17, 2018, 11:15 am

Title: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 17, 2018, 11:15 am
Salut

En lisant un post sur ce forum et plus précisément un débat sur le choix de tel ou tel type variable, j'ai eu une idée (ça m'arrive ...).

Pourquoi ne pas organiser un pseudo concours sans prise de tête où le but serait d'optimiser au mieux le code afin de le rendre le plus "léger" possible  !

Il y aurait un "sujet" défini au départ : un truc relativement "simple" et accessible au plus grand nombre .

Cela permettrait aux membres de voir plusieurs façons de faire ...


Un exemple de sujet qui pourrait servir de premier test :
*A l'aide d'une carte Arduino, afficher la température d'une sonde DS18B20 toutes les 5 seconds dans le moniteur série"

Interessant ou non ?
Title: Re: Idée de concours : Optimisation de code
Post by: fdufnews on Dec 17, 2018, 11:49 am
Ce genre de truc peut vite partir en vrille tu sais  :smiley-evil: .
Déjà rien que pour se mettre d'accord sur ce que recouvre l'idée d'optimisation du code.
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 17, 2018, 01:00 pm
Je pensais plus à de la chasse aux octets superflus ;) !
Title: Re: Idée de concours : Optimisation de code
Post by: Artouste on Dec 17, 2018, 01:34 pm
Ce genre de truc peut vite partir en vrille tu sais  :smiley-evil: .
Déjà rien que pour se mettre d'accord sur ce que recouvre l'idée d'optimisation du code.
:smiley-mr-green:

+1 avec toi

L'important est toujours de  savoir/apprécier l'entrée  dans une vrille  et de savoir/pouvoir en sortir  8)
Title: Re: Idée de concours : Optimisation de code
Post by: -Standby on Dec 17, 2018, 07:08 pm
Ce genre de truc peut vite partir en vrille tu sais  :smiley-evil: .
Déjà rien que pour se mettre d'accord sur ce que recouvre l'idée d'optimisation du code.
Déclarer un int pour y stocker le numéro d'une broche c'est un bon début.

*je sors*
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Dec 17, 2018, 07:42 pm
Moi je trouve que c'est une bonne idée. Je suis conscient de mes limites en programmation : le C à peu près OK, mais le C++ m'est totalement étranger. Je n'ai pas le temps ni la possibilité de prendre des cours de programmation objet. Apprendre sur un sujet sur lequel je me serais déjà posé des questions me semble un bon moyen de progresser, alors qu'aider des personnes qui ont un niveau plus faible que le mien ne me permettra guère de m'améliorer.
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 18, 2018, 09:25 am
Moi je trouve que c'est une bonne idée. Je suis conscient de mes limites en programmation : le C à peu près OK, mais le C++ m'est totalement étranger. Je n'ai pas le temps ni la possibilité de prendre des cours de programmation objet. Apprendre sur un sujet sur lequel je me serais déjà posé des questions me semble un bon moyen de progresser, alors qu'aider des personnes qui ont un niveau plus faible que le mien ne me permettra guère de m'améliorer.
C'est aussi le but recherché .
Confronter les idées de chacun afin que tout le monde progresse/apprenne ...


On peut toujours faire un test si ça vous tente , si c'est un flop car trop "bordélique" ou autre ...tanpis on aura essayé ..
Title: Re: Idée de concours : Optimisation de code
Post by: hbachetti on Dec 18, 2018, 12:06 pm
Quote
A l'aide d'une carte Arduino, afficher la température d'une sonde DS18B20 toutes les 5 seconds dans le moniteur série
Le possibilités d'optimisation sont pratiquement inexistantes dans un cas aussi simple.

@+
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Dec 18, 2018, 12:25 pm
Ajoutez le stockage et l'affichage des valeurs sur un serveur, voire un peu de traitement
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 18, 2018, 12:27 pm
Le possibilités d'optimisation sont pratiquement inexistantes dans un cas aussi simple.

@+

Même en utilisant différentes librairies ?

Title: Re: Idée de concours : Optimisation de code
Post by: Artouste on Dec 18, 2018, 01:38 pm
Même en utilisant différentes librairies ?


:smiley-mr-green:

Pour faire un choix entre les # lib , il faut regarder comment chacune est..  optimisée 8)
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 18, 2018, 03:24 pm
:smiley-mr-green:

Pour faire un choix entre les # lib , il faut regarder comment chacune est..  optimisée 8)
D'où ma proposition de concours ... :D !
Title: Re: Idée de concours : Optimisation de code
Post by: hbachetti on Dec 18, 2018, 05:06 pm
Quote
Même en utilisant différentes librairies ?
Y compris sans librairie en utilisant directement Wire/I2C. Trop simple.
Title: Re: Idée de concours : Optimisation de code
Post by: jfs on Dec 18, 2018, 05:22 pm
Je propose un nouveau tuto en annexe du concours :

Comment mettre le feu au forum..... 


:smiley-mr-green:
Title: Re: Idée de concours : Optimisation de code
Post by: 68tjs on Dec 18, 2018, 06:07 pm
Du moment qu'il n'y a pas de prosélytisme pourquoi pas s'il y a des volontaires.
Mais pourquoi s'arrêter au seul logiciel ?
L'optimisation du microcontrôleur est au minimum aussi importante.
Title: Re: Idée de concours : Optimisation de code
Post by: hbachetti on Dec 18, 2018, 06:09 pm

De plus pour tout concours il faut un jury ... impartial.

 :smiley-twist:
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 18, 2018, 07:51 pm
Mon idée de base était de comparer la taille de ...nos programmes :D .

C'était le seul critère "objectif" à mon sens ..

Le but était aussi de proposer une autre façon d'apprendre que les éternels copies de tutos ...
Title: Re: Idée de concours : Optimisation de code
Post by: hbachetti on Dec 18, 2018, 09:35 pm
Quote
C'était le seul critère "objectif" à mon sens ..
Pas vraiment d'accord. Privilégier la taille au détriment de la lisibilité n'est pas une solution.
Cela conduit généralement à du code du genre gros pâté monolithique.
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Dec 19, 2018, 07:23 am
+1 avec hbachetti... la maintenabilité du code et le respect des types par exemple sont 2 points importants qu'un hack qui fonctionne aujourd'hui est un bug difficile à trouver demain...

Cf bug de l'an 2000 parce qu'on avait voulu économiser 2 octets par date (et pris une représentation ascii)

Cf le bug d'un booléen b auquel on pouvait faire b++ par le passé pour le faire alterner entre true et false

Cf du code en assembleur qui vous laisse coincé dans le passé

La taille de n'est pas tout....

Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Dec 23, 2018, 12:42 am
La taille de n'est pas tout....
Oui, l'important c'est la manière de s'en servir, d'où l'idée initiale...

Peut-être le mot de "concours" était-il mal choisi, car il laisse penser à une comparaison, voire une récompense. Je ne pense pas que c'était inclus dans son idée.
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 23, 2018, 01:12 pm
Oui peu importe le nom , ce que j'imaginais c'était une sorte de comparaison de code "propre" pour un sujet donné .

Débrouillez vous avec le sens de "code propre" :D .

Dans l'idée, ca permettait à chacun, du noob au grand crack de participer et de confronter sa fàçon de faire à celles des autres et donc de progresser ..

On pourrait parler de "recueil d'idées de programmation" ... ;)
Title: Re: Idée de concours : Optimisation de code
Post by: 68tjs on Dec 23, 2018, 07:19 pm
Quote
Mon idée de base était de comparer la taille de ...nos programmes
Et la rapidité d'exécution peut être intéressante aussi.

Des discussions précédentes je retiens :
- compacité du code et de l'occupation de l'espace mémoire par les variables.
- lisibilité du code.
- et j'ajoute rapidité d'exécution parce que il n'y a pas que le programme qui compte, derrière le micro il y a de l'électronique qui peut être rapide à commander.

Il me semble  que la lisibilité du code peut aller à l'encontre de la compacité (Flash et Ram)  et de la vitesse d'exécution surtout pour un petit microcontrôleur.
Or on voit plus souvent la RAM saturée que la Flash, ce point a son importance.

Autre point à définir : faut-il obliger à utiliser les bibliothèques existantes  ou bien inciter à en écrire de mieux fichues (code optimisé et suppression de trucs tordus comme les yards,  les fahrenheits ou le mode AM/PM par exemple)

Comme proposition je pondérerais l'effort à fournir de la façon suivante :
- compacité du code en flash :  25%
- compacité de l'espace mémoire en RAM :  40%
- rapidité d'exécution :  25 %
- lisibilité :   10%

Si c'est trop compliqué : compacité Flash+ Ram = 100%

Je pense qu'il faut que tu suives ton idée. Ce ne pourra pas être parfait mais au moins cela existera.
Si tu écoutes tout le monde, en 2020 il n'y aura toujours rien de concret.


Propose un sujet, la discussion quittera la sphère philosophique pour entrer dans l'espace concret, et qui veut suivre suivra.
S'il n'y a personne ce ne sera pas une catastrophe.
Si cela donne l'envie à certains d'améliorer ta proposition ce sera super, à condition de ne pas dépasser le mois de janvier/février 2019 (pas 2020).
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Dec 24, 2018, 10:48 am
Ok je vais essayer de lancer ça entre les fêtes et on verra bien comment ça se passe ... :D !
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 10, 2019, 10:20 am
Les fêtes sont passées, et pas de suite...
Alors je vous propose un sujet :


Comment extraire des nombres d'un tableau de caractères ?
Supposons un tableau de caractères contenant des nombres perdus à l'intérieur, aussi bien des entiers que des décimaux, positifs ou négatifs, en nombre quelconque. Construire une fonction qui extrait ces nombres et les mets dans deux tableaux (int et float).



Exemple : la fonction extractNumbers renseigne les tableaux (variables globales) entiers et decimaux (taille limitée à 10 ici mais ce n'est peut-être pas nécessaire). Elle sauve le nombre d'entiers et de décimaux trouvés dans les variables nbEntiers et nbDecimaux.

Code: [Select]
char message[] = "abc123def-456gh1.2345!*_()-9.8765yz";
int entiers [10] = {0};
floats decimaux[10] = {0};
byte nbEntiers;
byte nbDecimaux;
extractNumbers (message, strlen(message));


Qui veut s'y lancer ? L'objectif serait de respecter certains critères :
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 10, 2019, 10:30 am
On rajoute peut être une contrainte sur la taille Max des nombres ?

-> Des int32_t ou des double au sens Arduino Uno (4 octets)

Sinon faut gérer aussi le nombre de dépassement de représentation
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 10, 2019, 10:43 am
Pas de souci, chacun le fait comme il l'entend : je  n'ai pas forcément la connaissance permettant de bien border le problème. C'est le type d'application qui peut fournir cette réponse.
L'idée est bien sûr de fournir des fonctions qui soient utilisables par chacun lorsqu'on en a besoin. J'ai proposé celui-ci car je viens d'en faire un plus simple pour un membre du forum US, et j'ai vu que ce n'est pas forcément facile à faire. Mais on peut en avoir besoin si on veut parser des entrées clavier (console) ou des réponses html, ou autres( certains capteurs peuvent renvoyer ce genre de résultat).

Par contre, si on continue sur cet exercice, peut-être faudrait-il en faire un sujet autonome ?

Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 10, 2019, 11:18 am
A mon avis si on veux faire un concours, il faut être précis dans la spécification fonctionnelle. Savoir écrire ou savoir lire un cahier des charges c'est la base des compétences nécessaires pour un bon développeur.

Par exemple un nombre flottant peut être représenté en notation scientifique: 123.345e-12 ou un entier peut être gigantesque 123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789. Que doit faire le code ?

Bien sûr ce genre de question s'est déjà posée il y a bien longtemps et l'approche standard en C ou C++ serait d'utiliser errno (http://www.cplusplus.com/reference/cerrno/errno/) pour reporter une erreur ERANGE et de retourner le plus petit ou plus grand nombre représentable

de même l'approche standard pour la représentation d'un nombre serait de se rapprocher de ce que fait stdlib.h (http://www.cplusplus.com/reference/cstdlib/) par exemple pour strtod() (http://www.cplusplus.com/reference/cstdlib/strtod/) ou strtol() (http://www.cplusplus.com/reference/cstdlib/strtol/)

leur définition de la lecture d'un nombre entier dans une certaine base est
Quote
The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes as many characters as possible that are valid following a syntax that depends on the base parameter, and interprets them as a numerical value. Finally, a pointer to the first character following the integer representation in str is stored in the object pointed by endptr.

If the value of base is zero, the syntax expected is similar to that of integer constants, which is formed by a succession of:
An optional sign character (+ or -)
An optional prefix indicating octal or hexadecimal base ("0" or "0x"/"0X" respectively)
A sequence of decimal digits (if no base prefix was specified) or either octal or hexadecimal digits if a specific prefix is present

If the base value is between 2 and 36, the format expected for the integral number is a succession of any of the valid digits and/or letters needed to represent integers of the specified radix (starting from '0' and up to 'z'/'Z' for radix 36). The sequence may optionally be preceded by a sign (either + or -) and, if base is 16, an optional "0x" or "0X" prefix.

If the first sequence of non-whitespace characters in str is not a valid integral number as defined above, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
de même pour un nombre décimal:
Quote
A valid floating point number for strtod using the "C" locale is formed by an optional sign character (+ or -), followed by a sequence of digits, optionally containing a decimal-point character (.), optionally followed by an exponent part (an e or E character followed by an optional sign and a sequence of digits).
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 10, 2019, 11:47 am
Je comprends. Il faut éviter de trop complexifier le problème sous peine de voir tout le monde fuir le "concours".

On pourrait se restreindre à parser des long (donc des entiers entre -2147483648 et 2147483647) et des floats sans la notation scientifique (par exemple 12345.67), éventuellement précédés par un '+' ou un '-' (ou rien) ?

De même, pour les entiers, on peut en rester à des représentations décimales, sauf si la prise en compte du binaire et/ou de l'hexadécimal n'augmente pas la complexité d'écriture de la fonction.
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 12, 2019, 01:09 pm
Bon. On fait quelque chose ou on laisse tomber ? Bruno14200... Es tu là ?
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 12, 2019, 02:01 pm
Proposition de cahier des charges:

écrire la fonction bool extraireNombres(const char * entree, int16_t * tableauEntiers, size_t& nbEntiers, float * tableauDecimaux, size_t& nbDecimaux, const char separateurDecimal) qui analyse la c-string (tableau de caractères terminée par un caractère NULL '\0') entree pour extraire et ranger dans les tableaux tableauEntiers et tableauDecimaux respectivement les nombres entiers et décimaux acceptables trouvés lors de l'analyse. Le nombre d'éléments trouvés sera à reporter respectivement dans nbEntiers et nbDecimaux.

On a le droit d'utiliser les fonctions c standard de stdlib.h (http://www.cplusplus.com/reference/cstdlib/) ou string.h (http://www.cplusplus.com/reference/cstring/) lors de l'analyse.

la c-string entree ne peut pas contenir plus de 10 nombres au total.


Les entiers acceptables sont les short aussi connus sous le type formel int16_t, donc entre -32768 to 32767, représentés en ASCII et base 10. Un seul signe - en début de séquence de chiffres est traité (par exemple aaa---12bbb sera reconnu comme -12). Le caractère + dénote un entier positif (qui est le défaut), de même un seul plus en début de nombre. Si l'entier reconnu est en dehors des bornes autorisées alors l'intégralité de la séquence numérique est consommée par l'analyseur, la fonction  reportera une erreur ERANGE dans errno (http://www.cplusplus.com/reference/cerrno/errno/) pour et retournera le plus petit ou plus grand nombre représentable en fonction du sens de dépassement (par exemple si l'entier est -32769 alors on stocke dans le tableau -32768 et on met le errno sur ERANGE. Si la chaine est aaaaa-3276900000000000000bbbb l'intégralité de la séquence -3276900000000000000 est consommée par l'analyseur et on continue à lire à partir du b). on peut avoir autant de 0 en début de nombre que l'on veut. 0000001 sera reconnu comme 1.


Les nombre décimaux sont les float en Single Precision sur 32 bits, donc entre -3.4e38 .. 3.4e38. la représentation autorisée est proche de celle que l'on a prise pour les entiers, pas de notation scientifique. Un nombre décimal contient donc un entier, suivi obligatoirement d'un seul symbole séparateur entre la partie entière et la partie décimale suivi d'un autre entier qui comportera au moins 1 chiffre valide. Par exemple aaa25,bbb ne sera pas reconnu comme un nombre décimal et donner juste un entier 25. mais aaa25,0bbb reconnaitra le nombre décimal 25,0

Le séparateur separateurDecimal est optionnel dans l'appel de la fonction. Il dénote quel symbole (de type char) est utilisé pour représenter un nombre décimal (les anglo-saxons et la programmation utilisent le point '.' mais en France on utilise la virgule ',' - d'autres symboles non numérique sont acceptables. Un chiffre passé comme séparateur devra faire que la fonction retourne immédiatement en revoyant false.)

Par défaut la fonction prendra la virgule française comme séparateur s'il n'est pas précisé lors de l'appel.

la fonction retourne true si elle a pu s'exécuter correctement, false si une incompatibilité a été détectée (y compris de représentation de nombre).

Donc par exemple -az---a//+0123.45-----azlkkma678,900blabla doit identifier comme entiers 123 et 45 et comme décimal 678,900 si le separateurDecimal n'est pas précisé (on prend alors la ',') mais si on précise que c'est '.' alors il faudra extraire en décimal 123.45 et en entiers 678 ainsi que 900



Critères d'évaluation dans l'ordre d'importance:

- résultat correct
- respect du cahier des charges
- vitesse d'exécution de la fonction telle que calculé avec un appel à micros() avant la fonction et en sortie de fonction (avec interdiction de toucher aux interruptions ni au timer contrôlant micros())
- impact sur l'utilisation de la mémoire (nombre d'octets nécessaires au bon déroulement de la fonction en dehors des paramètres).


tapé un peu vite, des avis ?
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 12, 2019, 02:31 pm
C'est très complet, mais un brin complexe. Notamment l'histoire des choses d'erreur.

Pour s'assurer du résultat correct, on peut fournir un jeu de cas tests.
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 12, 2019, 02:33 pm
OK pour simplifier.

On peut dire qu'un nombre qui ne rentre pas sera représenté par le nombre min ou max représentable, sans gérer d'erreurs par exemple.

je vous laisse virer ce que vous voulez.
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 12, 2019, 02:39 pm
Pas facile pour moi ce week-end, je n'ai que mon portable.

Mais j'aurais aussi aimé voir d'autres personnes s'intéresser à ce "concours" et son cdc pour s'assurer qu'il aura un minimum de participants...
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 12, 2019, 03:32 pm
laissons un peu de temps au bar de s'activer :)
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Jan 12, 2019, 03:49 pm
Je suis toujours présent ;) .

Concernant ton exemple, J-M-L , j'envisageais plus "accessible" ..j'ai peur que ça effraie les débutants .

Biensur le but est de progresser donc le niveau ira en augmentant .

C'est dommage qu'on ne puisse pas faire de sondages sur ce forum .
Ca permettrait de voter pour son programme "préféré" de manière "démocratique" et sans jury .

Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 12, 2019, 04:05 pm
Concernant ton exemple, J-M-L , j'envisageais plus "accessible" ..j'ai peur que ça effraie les débutants .
j'ai juste documenté la proposition de @lesept. Pas de soucis pour faire plus simple. On pourrait dire par exemple extraire et classer des entiers uint8_t qui seraient dans la chaîne de caractères par ordre croissant ?
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 14, 2019, 02:33 pm
Je reprends le cahier des charges de J-M-L, en essayant de le simplifier. J'ajoute aussi quelques cas tests.


Proposition de cahier des charges:

Ecrire la fonction
bool extraireNombres(const char * entree, int16_t * tableauEntiers, size_t& nbEntiers, float * tableauDecimaux, size_t& nbDecimaux)
qui analyse la c-string (tableau de caractères terminée par un caractère NULL '\0') entree pour extraire et ranger dans les tableaux tableauEntiers et tableauDecimaux respectivement les nombres entiers et décimaux acceptables trouvés lors de l'analyse. Le nombre d'éléments trouvés sera à reporter respectivement dans nbEntiers et nbDecimaux.

On a le droit d'utiliser les fonctions c standard de stdlib.h ou string.h lors de l'analyse.

La c-string entree ne peut pas contenir plus de 10 nombres de chaque catégorie.

Les entiers acceptables sont les short aussi connus sous le type formel int16_t, donc entre -32768 to 32767, représentés en ASCII et base 10. Un seul signe - en début de séquence de chiffres est traité (par exemple aaa---12bbb sera reconnu comme -12). Si l'entier reconnu est en dehors des bornes autorisées alors la fonction renvoie false. On peut avoir autant de 0 en début de nombre que l'on veut. 0000001 sera reconnu comme 1.

Les nombre décimaux sont les float en Single Precision sur 32 bits, donc entre -3.4e38 .. 3.4e38. La représentation autorisée est proche de celle que l'on a prise pour les entiers, pas de notation scientifique. Un nombre décimal contient donc un entier, suivi obligatoirement d'un seul symbole séparateur entre la partie entière et la partie décimale suivi d'un autre entier qui comportera au moins 1 chiffre valide.
Le séparateur décimal est le point '.'

La fonction retourne true si elle a pu s'exécuter correctement, false si une incompatibilité a été détectée (y compris de représentation de nombre).

Donc par exemple -az---a//+0123.45-----azlkkma678,900blabla doit identifier comme décimal 123.45 et comme entiers 678 et 900


Critères d'évaluation dans l'ordre d'importance:


Exemples de cas test (n'hésitez pas à en ajouter si nécessaire) :


Qu'en pensez-vous ? S'il n'y a pas suffisamment de personnes intéressées, pas la peine d'aller plus loin à mon avis...
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Jan 14, 2019, 04:27 pm
Moi ça me plait mais je vais viser les places du fond du classement :D !
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jan 14, 2019, 05:13 pm
Quote
Il y aurait un "sujet" défini au départ : un truc relativement "simple" et accessible au plus grand nombre.
Pour moi ça évoque un "Figure of eight challenge(1)" avec un buggy à 7€, pas un cahier des charges long comme "Guerre et Paix".

Tel quel votre truc n'est pas fun.

(1) Faire un parcours en forme de 8. Engins aquatiques et aeronefs bienvenus.
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 14, 2019, 06:00 pm
Notre cahier des charges n'est guère épais, pourtant...

Je comprends ce que tu veux dire. Mais il faut bien expliquer le contenu du challenge et faire en sorte que tous le comprennent de la même façon. Et il faut aussi trouver un sujet qui permette de se creuser un peu les méninges : si c'est pour faire clignoter une led, je ne vois pas l'intérêt.

Tout est ouvert, on peut penser à d'autre sujets, pour l'instant ce n'est qu'une phase de préparation.
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 14, 2019, 09:25 pm
Sinon pour faire du fun on peut proproser de faire un jeu avec les leds de bricofoy (http://forum.arduino.cc/index.php?topic=587126.msg3993990#msg3993990)

Il faudrait que Bricofoy documente son montage hardware (qui doit être assez simple à faire sur breadboard)

La mesure de succès = vote des participants (application qui ne plante pas, facile à lire, sans bugs visible par les membres du forum, et s'installe sur la spec hardware, et jeu addictif)

Le prix => Bricofoy envoie une copie de la boîte gravée et prête à monter (merci bricofoy :) ), en échange il peut utiliser tous les jeux (On peut prévoir une cagnotte pour financer le Matos et expédition au gagnant  :) )
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jan 14, 2019, 10:40 pm
@lesept

 Ca me foutrait les boules de savoir que tout ceux qui ne connaissent pas les pointeurs vont se tirer après avoir lu le premier paragraphe du cahier des charges.

 Un concept simple admet le plus grand nombre de participants. Ca n'oblige pas à faire simple, ça le permet.



 
Title: Re: Idée de concours : Optimisation de code
Post by: bricofoy on Jan 14, 2019, 11:08 pm
Whow, J-M-L ça c'est une idée qu'elle est bonne :)

Pour le hard du machin... bah pour le moment y'a 10 leds intégrées dans les poussoirs, avec leur résistance de limitation de courant intégrée (qui limite à 18mA avec alim en 12V), bufferisées par des 2n2222 montés en émetteur commun avec des R de 10K entre l'E/S de l'arduino et la base, et les 10 poussoirs entre E/S et la masse (avec les entrées du micro en input_pullup).
J'ai rajouté des 100nF sur les poussoirs, mais ça change rien pour l'anti-rebond, du coup il est logiciel.

En gros en l'état actuel,  il faut 10 poussoirs, 10 leds, 10 résistances pour les leds, 10 transistors (2N2222 ou autre), et 10 résistances pour la base des transistors, ou décharger la gate si c'est des mos.
Les poussoirs peuvent être NO ou NF, et reliés à la masse ou au +, le lociciel actuel est capable de s'adapter.

Le tout relié à une mega, car je n'avais pas assez d'E/S sur la uno.

Possibilité de rajouter un buzzer, pour faire un mode "Simon" ou autre.
Possibilité aussi de rajouter un affichage par matrice de leds et/ou afficheurs 7 segments, mais ça c'est quand même plus compliqué et il faut redessiner la face avant.

Alimentation en 10,8V par une batterie de visseuse constituée de 3 piles 18650 (ce que j'avais sous la main le soir du 24, en fait...).
Il n'y a pas encore le circuit de charge pour le moment, je n'ai pas encore reçu le BMS 3 cellules chinois que j'ai commandé. Mais vu la capacité des piles (2Ah), je ne crois pas avoir besoin de recharger le bazar avant un bon moment.

Le Vin de la carte arduino est alimenté par le + batterie, du coup même si l'inter général est coupé ou la batterie vide, il est possible d'alimenter le jeu via le câble USB. Les boutons sont juste moins lumineux, mais ça fonctionne parfaitement.

Coté logiciel (https://github.com/bricofoy/batakid/blob/master/batakid.ino), il y a une base réutilisable qui comprends la lecture des boutons avec anti-rebond, une mise en veille si pas d'actions sur les boutons pendant plusieurs minutes, un menu de départ pour le choix du jeu, et des fonctions d'affichage. Le tout basé sur la librairie YASM (dispo dans le gestionnaire de l'IDE arduino) qui facilite grandement la mise en place de chronos et autres.
La librairie est prévue au départ pour faire des machines à états, mais ici je m'en sert surtout pour les fonctions de chronométrage qu'elle propose, pour faire une sorte de multitâche.
Autant que possible, ce serait bien de garder ce système. Il est bien entendu envisageable de repartir de zéro, mais ça serait un peu réinventer la roue...

Dans ce contexte un nouveau jeu serait lancé par un état de plus de la machine "programme". Pour le moment, mes différents jeux tiennent chacun dans un seul état de la machine "programme", mais rien n'interdit depuis cet état d'exécuter une autre machine à état plus complexe si nécessaire (plus clair pour la lecture du code que de rajouter des états à "programme" à mon avis)

Voili voilou...
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 19, 2019, 12:53 pm
Bon ça déchaine pas les passions...

tant pis, c'était une idée comme ça
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 19, 2019, 02:24 pm
Mon problème sur ce dernier challenge, c'est qu'il nécessite pas mal de matériel.
Mais pour celui ci ou l'autre, c'est vrai qu'on n'a pas un succès fou.
Autant abandonner...
Title: Re: Idée de concours : Optimisation de code
Post by: fdufnews on Jan 19, 2019, 04:46 pm
Mais pour celui ci ou l'autre, c'est vrai qu'on n'a pas un succès fou.
Il faut être lucide:
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 19, 2019, 04:49 pm
si on ne peut plus avoir un peu d'utopie et d'idéal d'un monde meilleur...

 :)

mais oui, je pense que vous avez raison @fdufnews


Pour le dernier point cependant, il aurait suffit de quelques boutons, leds et résistances pour simuler le projet... Normalement les bricoleurs ont ça dans les tiroirs
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 19, 2019, 04:58 pm
Pour la remarque 1 : on pourrait poster l'annonce du challenge (je bosse plus parler de concours) dans la section principale.
Title: Re: Idée de concours : Optimisation de code
Post by: fdufnews on Jan 19, 2019, 05:18 pm
Je pense qu'un bon tuto est bien plus formateur qu'un concours. Mais il y a là aussi des difficultés:
Le 1er problème, c'est que les tutos sont noyés dans la masse (bien qu'ayant une section à part sur le forum) parce que l'outil de recherche sur le forum est piteux.
Le 2nd problème, c'est que cela demande beaucoup de travail de réaliser quelque chose qui soit didactique et qui soit quand même assez ouvert pour inciter les lecteurs à réfléchir dessus.

En fait, pour être honnête je n'ai pas vraiment de solution à la problématique de départ qui était de faire progresser les participants du forum. Peut-être des tutos qui se termineraient par des sortes d'exercices pour lesquels la solution ne serait donnée que quelques semaines plus tard. Comme ça tout le monde partirait avec une base et un vocabulaire commun qui auraient été expliqué au départ ce qui permettrait aux débutants d'acquérir du savoir et de le mettre en pratique rapidement. Mais là, on retombe sur le deuxième problème que j'ai cité ci-dessus c'est le travail pour mettre la chose en place.
Title: Re: Idée de concours : Optimisation de code
Post by: bricofoy on Jan 19, 2019, 08:21 pm
Concernant le problème du matériel levé dans le post précédent, beaucoup de participants sur le forum n'ont pas (ou très peu) de composants à la maison.
Pour le dernier point cependant, il aurait suffit de quelques boutons, leds et résistances pour simuler le projet... Normalement les bricoleurs ont ça dans les tiroirs
Pourtant, 10 poussoirs et 10 leds, c'est pas non plus un matériel phénoménal, je suis d'accord avec JML...

Comme pour @lesept, il me semble qu'il faudrait poster l'annonce en section principale
Title: Re: Idée de concours : Optimisation de code
Post by: jfs on Jan 19, 2019, 08:43 pm
Faite une annonce dans le forum principal et je l'épinglerai  ;)

Avec un petit MP pour me prévenir  :smiley-mr-green:
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 19, 2019, 08:45 pm
faut qu'on trouve une idée plus simple sans doute...
Title: Re: Idée de concours : Optimisation de code
Post by: BrUnO14200 on Jan 26, 2019, 11:48 am
Je pense qu'un bon tuto est bien plus formateur qu'un concours.
Mon idée de base était de pouvoir confronter sa façon de coder à celles des autres .
Et donc de montrer à tous qu'il y a plusieurs façons de faire ;)


Les tutos sont tous les mêmes en général car repris et copié/collé sur d'autres blogs/sites etc etc ...
Title: Re: Idée de concours : Optimisation de code
Post by: lesept on Jan 26, 2019, 01:27 pm
Désolé, j'ai un peu laissé tomber ce sujet, ne voyant pas de concensus apparaître...
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jan 26, 2019, 01:29 pm
oui faut trouver autre chose je pense...
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 05, 2019, 12:56 am
Entrée inacceptable pour le défi du parcours en 8:

https://peertube.fr/videos/watch/bdb1ccf8-8e5d-4bfa-be8b-624366f2f39e

Mais depuis que j'ai appris à faire le "grain de riz" je me sent plus.

:)
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 05, 2019, 01:07 am
 Entrée acceptable pour le défi du parcours en 8:

https://peertube.fr/videos/watch/d520187e-811d-4a9c-a5bd-a9eac7462ef5

Mais on voit pas mon tricot.

 :(

Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 07, 2019, 11:30 pm
 Accepté.

 https://peertube.fr/videos/watch/fb9bf6a8-78cf-4520-b67d-2a4a9b1c58dd
Title: Re: Idée de concours : Optimisation de code
Post by: savoriano on Jul 09, 2019, 10:24 pm
Toc toc..
Bonsoir à tous.
J'ai peut être une idée:
Et si vous organisez une chasse au trésor ou le trésor est un erreur dans un code mis exprès pour après aborder une notion plus ou moins basique?
C
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jul 10, 2019, 09:12 am
Toc toc..
Bonsoir à tous.
J'ai peut être une idée:
Et si vous organisez une chasse au trésor ou le trésor est un erreur dans un code mis exprès pour après aborder une notion plus ou moins basique?
C
J'en ai une:

Code: [Select]
uint16_t v = 12;

void setup()
{
  Serial.begin(115200);   
  Serial.println(v / -2);
}

void loop() {}

Expliquer pourquoi ça n'imprime pas -6 et pourquoi 0 est la réponse correcte
Bonus pour un lien vers la spec
(Ceux qui ont lu mon topic sur le sujet n'ont pas le droit de répondre)
Title: Re: Idée de concours : Optimisation de code
Post by: bricofoy on Jul 10, 2019, 10:23 am
m'sieur, m'sieur ! *lève le doigt*

...

ha bon, moi j'ai pas le droit ?
ok je sors...
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 10, 2019, 03:01 pm
Et si vous organisez une chasse au trésor ou le trésor est un erreur dans un code mis exprès pour après aborder une notion plus ou moins basique?
Si on enlève le mot "exprès", c'est ce que font déja les newbies pour amuser les anciens du forum principal.

 Toute question qui nécessite une expertise en programmation tournerait rapidement à un duel entre J-M-L et notre ami transalpin. C'est normal, ils sont les plus forts.

 Le défi du parcours en huit (y'a pas mieux que ça? ça vaut pas, "Figure of Eight Challenge") est avant tout pour mettre tout le monde à égalité. Quelqu'un qui nous fait rire serait sûrement autant,sinon plus, applaudit que quelqu'un qui nous instruit.

m'sieur, m'sieur ! *lève le doigt*
Il est donc sorti.

 On attend....

 :)
Title: Re: Idée de concours : Optimisation de code
Post by: savoriano on Jul 10, 2019, 06:58 pm
Quote
notre ami transalpin
Il y a un autre rital dans le groupe? C'est quoi son pseudo?
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 10, 2019, 07:33 pm

Il y a un autre rital dans le groupe? C'est quoi son pseudo?
On trouve de tout ici.

Ca rime avec spaghetti.

J'invente pas.
Title: Re: Idée de concours : Optimisation de code
Post by: Jambe on Jul 10, 2019, 08:23 pm
Et avec une autruche en avatar?
Title: Re: Idée de concours : Optimisation de code
Post by: savoriano on Jul 10, 2019, 09:00 pm
Quote
J'en ai une:
c'est ce genre de topic que je trouve intéressants.
Je ne participerai à un concours pour faire  faire à un * un 8  pas car je ne trouverai pas une motivation pour le faire.
Par contre je suivrai le post avec attention.
Ça c'est l'opinion d'un newbie âgé qui à besoin de les bases de l'informatique.
Title: Re: Idée de concours : Optimisation de code
Post by: hbachetti on Jul 10, 2019, 10:21 pm
Quote
Et avec une autruche en avatar?
Oui ?

Quote
Toute question qui nécessite une expertise en programmation tournerait rapidement à un duel entre J-M-L et notre ami transalpin. C'est normal, ils sont les plus forts.
Étant alsacien (tête de chien) ou alsaco (tête de veau) de naissance je n'avais pas imaginé un seul instant que l'ami transalpin était moi-même.
Rassurez-vous, depuis que j'ai quitté mon métier de développeur logiciel (retraite), le hard m'intéresse beaucoup plus que le soft :smiley-wink:

tschüss
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jul 11, 2019, 12:19 am
Et moi je ne suis qu'un vieux bidouilleur amateur!
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 11, 2019, 09:25 am
Je ne participerai à un concours
Ce n'est pas un concours. Ce n'est même rien du tout sans participants.

Je ne participerai à un concours pour faire  faire à un * un 8  pas car je ne trouverai pas une motivation pour le faire.
Et avec un # ?

@hbachetti:

 Alsacien!?

 On dirait un coming out!

@J-M-L:

 Mouais...

 :)
Title: Re: Idée de concours : Optimisation de code
Post by: J-M-L on Jul 11, 2019, 10:15 am
@J-M-L:
 Mouais...
 :)
disons passionné donc on fait de progrès forcément avec le temps... et quand vous avez quelques décennies derrière vous forcément la connaissance s'accumule
Title: Re: Idée de concours : Optimisation de code
Post by: savoriano on Jul 11, 2019, 10:33 am
Quote
Et avec un # ?
c"est pire car pour ça il faut appuyer sur 2 touches.
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 21, 2019, 07:49 pm
 Pour le Huit Défi original, il fallait que le huit soit exécuté de manière autonome.

 https://youtu.be/4LGdWCsp2eo (https://youtu.be/4LGdWCsp2eo)

 Ca manque un peu de fantaisie, mais on ne voit pas souvent un buggy avec la troisième roue qui fait à la fois direction et propulsion, comme un Fenwick.

 Règlement du Huit Défi en .pdf à suivre...
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 22, 2019, 05:55 pm
 Ici, ça manque de rigueur ET de fantaisie. Je pourrais peut-être faire quelque chose pour la fantaisie....

 https://peertube.fr/videos/watch/3a7d6af6-958a-4096-acb8-cdad98d5ff74 (https://peertube.fr/videos/watch/3a7d6af6-958a-4096-acb8-cdad98d5ff74)

 Règlement du Huit Défi en pièce jointe.
Title: Re: Idée de concours : Optimisation de code
Post by: jfs on Jul 23, 2019, 09:41 am
on ne voit pas souvent un buggy avec la troisième roue qui fait à la fois direction et propulsion, comme un Fenwick.
si, si ça existe.... (https://www.youtube.com/watch?v=SJIAa3-2VqM)

;D
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 23, 2019, 12:35 pm
 Qui? Quoi? Comment?

 Un participant est passé....?

 C'est parfait!


 Reçu avec mention.

 Je le mets dans la catégorie "perruque".

  :)

 On va finir par faire de l'ombre à Almodovar....
Title: Re: Idée de concours : Optimisation de code
Post by: kayel on Jul 28, 2019, 12:15 am
Cubi brocoli présente....

https://peertube.fr/videos/watch/fb419860-1f52-44dc-82ef-b2c84bd94cd2 (https://peertube.fr/videos/watch/fb419860-1f52-44dc-82ef-b2c84bd94cd2)