Le bien coder

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Le bien coder

Message par Ar-S »

Pas faux Djes..
@Poshu (Je précise que je ne me sens nullement agressé ou visé hein, on discute mais je fais parti des "vieux" codeurs maladroits.)

Je vais reprendre tout de même ta métaphore de sportif .
Robert aime bien le foot, mais il va à son entrainement 1 fois toutes les 2 semaines, parce qu'il n'a pas que ça à faire Robert.. Il a un taf, des gosses, une vie de famille, des potes et d'autres passions comme le piano ou il excelle parce qu'il en à fait 15 ans de façon assidu. Alors lors de la rencontre contre l'équipe adverse du coin, il arrive malgré son entrainement heinekenesque à marquer un but. Un but assez simple, une ouverture s'est présenté, il a tiré... bim, au fond. Ici pas de retournée acrobatique ou de ciseaux ou même de grosse reprise de volée..
Mais il a gagné Robert et il est bien content.. Il aurait pu apprendre les retournées, en étant plus assidu, en se pétant le dos à chaque entrainement, mais non, il ne la pas fait. Le regrette-t-il ? Pas vraiment..

J'arrête là cette métaphore foireuse pour dire qu'étant un des codeurs de longues dates, je n'en demeure pas moins créatif et probablement pétri de "mauvaise habitudes". Alors certes je n'ai pas toujours le réflexe des callbacks, mise à part dans certains cas précis (je l'ai par exemple utilisé pour un chrono histoire que le temps défile quand on bouge la fenêtre), mes progs sont fonctionnels. j'en ai même vendus quelques uns et les clients ont toujours été satisfaits.
Mais avant tout, si le résultat est à la hauteur de mes attentes, j'en suis très satisfait.
Alors est-ce de la fainéantise ? Franchement je ne crois pas. Je n'aspire pas à devenir un codeur parfait. Je ne crache pas sur un bon trick ou une méthode vraiment efficace mais je ne vais pas non plus tout le temps remettre en question ce que j'ai mis déjà beaucoup de temps à assimiler, et qui fonctionne. Je code avant tout pour le fun que cela m'apporte.

Enfin pour en revenir aux conseils "bien moisis", là encore c'est le point de vu du perfectionniste que tu es.
Si les events sont si merdiques, la team n'a qu'à les virer.. Mais vu qu'on a encore le choix et que cela fonctionne très bien pour la grande majorité des codes. Je ne vois pas le mal à aiguiller un débutant via cette méthode.
Maintenant il a plein de solutions, s'il si retrouve, il aura le choix.

Je vais de ce pas me coucher car j'ai mon bébé qui va se réveiller encore à 5h30 donc plus trop de créneau dodo.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Le bien coder

Message par poshu »

Alors en fait, la team a viré la boucle d'event... Sur SB. Et ça fait déjà un très gros argument pour ne plus l'utiliser : la compatibilité web/iOS/android.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Le bien coder

Message par Ar-S »

On parlait de PB.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Le bien coder

Message par Marc56 »

EnableExplicit
On en voit l'intérêt lorsqu'il nous arrive de patauger durant des jours sur un code parce pour finalement trouver qu'au deuxième appel d'une variable on a inversé deux lettres. Avec EnableExplict, au deuxième appel, le compilateur aurait dit "cette variable n'existe pas" Donc c'est très utile dans tous les cas voir indispensable pour gagner du temps si on est dyslexique.

EnableExplicit devrait même être plus strict et ne pas considérer qu'une variable numérique sans type est par défaut un Integer.
On ne se retrouverait pas avec des variables qui deviennent négatives car elles ont fait la boucle,

Code : Tout sélectionner

a = 9223372036854775807
Debug a + 1
Résultat valeur négative (compilo 64bits) -9223372036854775808
ou à utiliser 4 à 8 octets pour une variable à un seul chiffre (qui aurait pu être codée sur 1 avec un .a .b ou .c)

Inconvénient d'EnableExplict, c'est qu'on a tendance à déclarer puis parfois oublier des variables et utiliser de la RAM pour rien, et quand c'est un tableau à plusieurs dimensions... C'est un peu pour cela que j'avais demandé à une époque s'il était possible de mettre dans le précompilo de PB une option qui existe dans d'autres langages et qui sort une phrase de type "La variable xxx a été déclarée, mais jamais utilisée". Ça incite à nettoyer le code.

Je serais même partisan d'une option genre NoGadgetNum qui obligerait à utiliser une constante ou une variable pour l'ID des gadgets

Bind ou classique
Pas aussi évident que ça n'y parait. Par exemple mettre un Bind sur le resize de la fenêtre principale provoque un nouvel appel de la fonction à chaque changement de taille même d'un pixel et en cours de manœuvre. C'est joli car on voit tous les objets grandir en même temps, mais sur les petit configs avec beaucoup d'objets, ça plombe le CPU.
La méthode classique ne redessine les objets que quand on relâche la souris

La boucle classique à base de WaitWindowEvent oblige le programme à s'arrêter dès qu'un event listé se produit. Dans certains types d'applications, c'est très bien car ça empêche que l'utilisateur ne reclique pensant qu'il ne se passe rien alors que le programme commence un traitement.

Sur le forum us, il a été démontré un bug (5.70b1): Si on bind plusieurs fois un même objet, unbind ne fonctionne plus.

Et il y avait d'autres désavantages évoqués sur le forum us (mais je ne m'en ne me souviens plus)

Mais de toutes façon, on peut mélanger les deux, et c'est très bien, car on peut par exemple mettre les actions qui doivent executer une par une en mode classique et d'autres (comme l'affichage d'une pendule) en bind
Dernière modification par Marc56 le ven. 06/juil./2018 9:05, modifié 1 fois.
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le bien coder

Message par microdevweb »

Même si dans la plupart de mes programmes la boucle d'événement se limite à

Code : Tout sélectionner

Repeat
   WaitWindowEvent()
forever
Car j'utilise les "bind", cette boucle peut s’avérer très utile.

Si je dis pas de bêtises, beaucoup de langages avec une programmation événementiel (GUI) comme par exemple "Java" n'on pas ce type de boucle et oblige de passé par des threads pour la gestion hors événementiel.

Avec Pb et ca boucle on est vraiment libre d’interagir comme on veux même si il n'y à pas d’événement.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Le bien coder

Message par poshu »

@Ar-S Moui. J'ai du mal à séparer les deux, et surtout : pourquoi ne pas faire une pierre deux coups?
En dehors de ça, on a vu comment la communauté réagi quand la team essaye de supprimer des features qui sont dépassées : la controverse autour de l’arrêt du support de l'ascii a fait trembler les murs...
Je l'ai dit dans mon premier poste : c'est difficile de faire un choix pour ses users, mais la suppression d'options est -la plupart du temps- quelque chose de positif.

@Marc je crois que quelqu'un avait fait un precompiler qui analysait ton code à la recherche de variables inutilisées, nan? (pas sûr de moi sur ce coup). Sinon, je trouve que perdre 4 octets de ram sur des machines modernes parce qu'on a déclaré une variable inutile, c'est pas cher payé :p

J'utilise rarement les fonctions internes à PB pour callback (j'avais découvert la surpuissance du système bien avant que ce ne soit implémenté, merci Srod!) et j'ai depuis longtemps dev ma propre solution pour ça; donc j'ignore tout des quirks liés à l'implémentation officielle... Mais tout comme la ram au dessus, est ce bien grave de pomper plus de CPU quand on resize? Déjà parce qu'on ne resize pas toutes les deux secondes, mais aussi parce que sur les machines modernes, on est pas à quelques milliers d'instructions prêt.

Comme je ne code pas d'application critique, je vais privilégier un code lisible à un code performant. Et c'est probablement le coût de la structure que j'emploie généralement dans mes programmes : c'est un peu plus lent.

Ça reste un argument complètement valide pour utiliser la boucle d’événements ponctuellement.

@Microdevweb j'ai la même ;3

Tous les autres langages que je connais utilisent exclusivement les callbacks (ça veut pas dire que je connais tous les langages!), Windows utilise des callbacks. Le callback, c'est un gros standard.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Le bien coder

Message par Marc56 »

poshu a écrit :Sinon, je trouve que perdre 4 octets de ram sur des machines modernes parce qu'on a déclaré une variable inutile, c'est pas cher payé :p
Ca depend de ce qu'on fait, imaginons un tableau déclaré mais jamais utilisé

Code : Tout sélectionner

Mem_Before = MemoryStatus(#PB_System_FreePhysical)

Dim Forgotten_Array.s(10000,10000)

Mem_After  = MemoryStatus(#PB_System_FreePhysical)

Debug FormatNumber(Mem_Before - Mem_After, 0)

Code : Tout sélectionner

799,944,704
800 Mo... utilisés pour rien donc inutilisable pour le reste :o

Comme en général les codeurs ont le dernier pc et glonflé à donf en ram, s'ils ne passent pas par le profileur ou tout autre méthode bien carrée, ils ne voient rien.
"Mais pourquoi les utilisateurs râlent parce que ça swapp tout le temps l'appli ?" :mrgreen:

Un bon codeur doit être radin et gratter tout ce qu'il peut en RAM (tout bon programmeur devrait commencer sur une machine sous-dimensionnée)
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Le bien coder

Message par microdevweb »

C'est une des faiblesse de l'ide de pb, il ne signale pas les variables ,procédure etc non utilisées.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Le bien coder

Message par poshu »

V'la la gueule du tableau aussi xD c'est vraiment un besoin hyper spécifique et oublier un truc aussi massif, c'est quand même une bonne grosse faute.

Sinon, pour la machine bas de gamme, je suis on ne peut plus d'accord, j'ai une tablette chinoise sous windows 10 à 60€, tout ce que je fais doit tourner dessus... Des fois c'est assez chiant, mais c'est un exercice gratifiant à la fin.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Le bien coder

Message par Ar-S »

Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Le bien coder

Message par GallyHC »

Marc56 > une autre méthode pour savoir ce qu'est la variable est d'indenter ça propre variable, je m'explique. On part d'un principe par exemple, toutes variable est en majuscule et les choses importante de la variable séparer par "_" (c'est un exemple).

Ce qui peu me donner par exemple "MAVARIABLE_QUIFAIT_UNTRUC", apres cela ne donne toujours pas son "type", alors pour ma part j'ajoute son type en minuscule au début ce qui me donne donc "iMAVARIABLE_QUIFAIT_UNTRUC", après tu peux aussi ajouter un "_" pour séparer les choses ce qui peut donnée "i_MAVARIABLE_QUIFAIT_UNTRUC".

un define simple avec cette norme perso donnerait (ce n'est pas forcement ce que j'utilise mais ça explique bien) :

Code : Tout sélectionner

define.i i_MAVARIABLE_QUIFAIT_UNTRUC
Les méthodes sont multiples pour avoir un code clair et de connaitre facilement le type de la variable peut être utile.

après pour tout ce qui est les tableaux ect... rien n’empêche une méthode perso mais simplifier, du style un dim peut être "tab_", une list "lst_" et j'en passe, c'est juste une question de logique personnelle.

cordialement,
GallyHC

PS: je fait parti de ce qui sont contre le fait de 100% unicode, juste sur le fait du chargement de fichier dans des structures (genre les headers). Ou avoir de quoi pouvoir dire a la variable de structure qu'elle prend en compte de l'ASCII.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: Le bien coder

Message par poshu »

GallyHC a écrit :PS: je fait parti de ce qui sont contre le fait de 100% unicode, juste sur le fait du chargement de fichier dans des structures (genre les headers). Ou avoir de quoi pouvoir dire a la variable de structure qu'elle prend en compte de l'ASCII.
Mais... Passer à l'unicode n’empêche pas de pouvoir lire de l'ascii. La preuve : pb peut toujours lire de l'ascii. Par contre, passer à l'unicode, c'est moins de taff pour l'équipe de PB qui peut se concentrer sur des trucs plus important, c'est s'assurer que tous les outils seront bien compilés en unicode (toujours pour protéger les gens de leur propre ignorance), c'est aussi rendre les codes plus compatibles : fut une époque où, quand on choppait un code sur un forum, c'était un peu la loterie pour la compatibilité unicode. Bref, ça a beaucoup d'avantage et peu d’inconvénients :p
J'ai lu sur le forum anglais qu'une app compilé en Unicode produisait du son moins bon qu'en ascii... J'ai pas vérifié et j'ai du mal à imaginer comment ça marche (je suis pas dans le code) mais, si c'est le cas, le passage à l'unicode forcé est l'occasion de régler ces petits désagréments aussi.
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Le bien coder

Message par GallyHC »

poshu>

j'ai un header pour les fichiers (par exemple les WAV), je suis obliger de faire des actions inutiles à cause du 100% unicode. je vais faire simple en donnant du code et des exemples.

Avant un simple :

Code : Tout sélectionner

Structure WaveFileHeader
  chunkid.s{4}
  chunksize.l
  format.s{4}
  fmtchunkid.s{4}
  fmtchunksize.l
  audioformat.u
  numchannels.u
  samplerate.l
  byterate.l
  blockalign.u
  bitspersample.u
  datachunkid.s{4}
  datachunksize.l
EndStructure
Global tabWaveFile.WaveFileHeader

; au niveau injection du fichier dans la structure été :

ReadData(file, tabWaveFile, SizeOf(WaveFileHeader))

; pour l'info du header :

debug tabWaveFile\chunkid
Avec le fait du passage au 100% unicode cela n'est plus du tout possible et on doit passer par une méthode a trouver soit même (je précise bien soit même et qui donne dans mon cas) :

Code : Tout sélectionner

Structure WaveFileHeader
  chunkid.a[4]
  chunksize.l
  format.a[4]
  fmtchunkid.a[4]
  fmtchunksize.l
  audioformat.u
  numchannels.u
  samplerate.l
  byterate.l
  blockalign.u
  bitspersample.u
  datachunkid.a[4]
  datachunksize.l
EndStructure
Global tabFile.WaveFileHeader

; Déjà l'ajout :
Macro ReadString(structProperty)
   LSet(PeekS(@structProperty, 4, #PB_Ascii), 4, " ")
EndMacro

; au niveau injection du fichier dans la structure (ça n'a pas changer):

ReadData(file, tabWaveFile, SizeOf(WaveFileHeader))

; et donc maintenant pour lire l'info je doit faire

debug ReadString(tabWaveFile\chunkid)
Pourquoi en déclarant un string dans une structure, il doit forcement être unicode? je ne connait pas encore de header de fichier en unicode (même les fichiers texte en unicode), mais par contre l'avoir forcer doit faire modifier le code existant des utilisateurs. A la rigueur si il y avait pour les structure une chose comme "montruc.s-ascii" ou l'on peu ajouter des limites comme "montruc.s-ascii{4}", la pas de problème, mais le fait est que le passage n'a pas arranger les chose par le fait qu'il y a eu des oublis toujours pas corriger.

J'ai bien peur, que tu vois que le futur et que tu vois pas l’utilité du passé. un fichier n'est que des bits mis bout à bout. l'unicode n'est juste qu'une extension de l'ascii mais ne le remplace pas (on à juste ajouter des bits pour encoder plus de caractères).

Bien cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre