mprinfo Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 Il y a 3 types d'optimisation. la mémoire, le temps processeur le temps du développeur. Une bonne application prend en compte ces 3 critères en essayant de faire un bon compromis entre les 3. Voici donc une petite analyse sur votre code ... attention, je suis volontairement très très critique juste pour essayer d'aider. Perso, la plus part de mon code n'est pas optimiser ainsi, voir pas du tout .. Optimisation mémoire Chaque variable déclarée pend une infime place en mémoire (son adresse) donc si on a pas besoin de la réutiliser ou de la maintenir ... on en fait pas Une variable utilisée qu'une seule fois ne sert donc à rien : exemple local message = string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R")) EnvoiPush(message) On fait directement : EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R"))) .. Optimisation temps processeur La démarche a déjà été faite .. bravo. En effet, certaine opération prenne du temps a être exécutée, il faut donc éviter de demander 2 fois le même calcul pour rien. Exemple : if ( os.date("%H:%M", os.time())== lever ) or ( os.date("%H:%M", os.time()) == coucher ) then On voit bien qu'on demande au processeur de calculer 2 fois l'heure actuelle alors que ce qui a été fait local osHeure = os.date("%H:%M", os.time()) if ( osHeure == lever ) or ( osHeure == coucher ) then est bien moins coà»teux puisque nous divisons simplement pas 2 le temps processeur. Bon ok, on passe de 0.00002 sec à 0.00001 sec Mais c'est un exemple. Optimisation développeur Moins il y a de code a maintenir mieux c'est. Donc vu que ceci : if (heure >= lever) and (heure < coucher) then valeur = "Jour" end revient au même que ceci (dans ce contexte) if ( OsHeure == Lever ) then Valeur = "Jour" else Valeur = "Nuit" end On extrait tout cela et on en fait une méthode (function) : function traitement(lever, coucher, heure) local valeur = "Nuit" -- test si on est le jour ou la nuit if (heure >= lever) and (heure < coucher) then valeur = "Jour" end ... end .. Optimisation bonus ... optimisation pour l'utilisateur On remonte tout en début du code, les variables, traitements que l'utilisateurs doit modifier afin que ce dernier n'aie pas a chercher dans le code la ligne X ou Y. Donc on met ce ci tout en haut : local NomVG = "Jour_Nuit" local IdTel = 181 On obtient donc ceci : --[[ %% autostart --]] local NomVG = "Jour_Nuit" local IdTel = 181 ---------------------------------------------------------------------- -- Envoi d'un Push pour avertir que le box à démarrer ou redémarrer -- ---------------------------------------------------------------------- function EnvoiPush(Message) fibaro:debug(Message) fibaro:call(IdTel, "sendPush", Message) end --------------------------------------------------- -- Mise a jour d'une variable global -- --------------------------------------------------- function UpdateVG(Valeur) if (fibaro:getGlobalValue(NomVG) == nil) then fibaro:debug("il faut cree la variable "..NomVG) EnvoiPush(string.format("La variable Globale %s n'existe pas ou a ete supprimer", NomVG)) fibaro:abort() -- fin du programme else fibaro:debug("VariableGlobale = "..NomVG.." - Valeur = "..Valeur) fibaro:setGlobal(NomVG, Valeur); end end --------------------------------------------------- -- Vérification de l'heure et mise à jour -- -- de la variable si necessaire -- --------------------------------------------------- function traitement(lever, coucher, heure) local valeur = "Nuit" -- test si on est le jour ou la nuit if (heure >= lever) and (heure < coucher) then valeur = "Jour" end UpdateVG(nuit) -- mise a jour de la VG Jour_Nuit end -- ======================================= -- Début du code -- ======================================= ---------------------------------------------------------------------- -- Controle si 1 Scéne et déjà en cours -- ---------------------------------------------------------------------- local NbreScene = fibaro:countScenes() fibaro:debug("Nombre de scéne : "..NbreScene) if (NbreScene ~= 1) then; fibaro:abort(); end ---------------------------------------------------------------------- -- Mise a jour de la variable VG Jour_Nuit au Démarrage de la Box -- -- Ou lors de la sauvegarde de la scéne -- ---------------------------------------------------------------------- EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R"))) traitement(fibaro:getValue(1, "sunriseHour"), fibaro:getValue(1, "sunsetHour"), os.date("%H:%M")) ---------------------------------------------------------------------- -- Test toute les minutes pour savoir si c'est jour ou nuit -- ---------------------------------------------------------------------- while true do local osHeure = os.date("%H:%M", os.time()) local lever = fibaro:getValue(1, "sunriseHour") local coucher = fibaro:getValue(1, "sunsetHour") if ( osHeure == lever ) or ( osHeure == coucher ) then traitement(lever, coucher, osHeure) end fibaro:debug(string.format("Lever Soleil : %s - Coucher Soleil : %s", lever, coucher)) fibaro:sleep(60*1000); end Maintenant, vous pouvez oublier tout ces bons préceptes car quand on regarde le code des professionnels, on voit bien que la théorie fait bien souvent place à la fatigue cérébrale et que 90% du code ne respecte pas le moindre petit de ces préceptes. Garbage collector Un gabagge collector n'est-il pas le truc inventé pour palier au mauvais développement ? ... Je plaisante . Il y en a un, mais comme toujours, moins la mémoire est sollicitée, moins le garbage collector fonctionne, meilleures sont les performances. Il ne faut pas oublier que lorsque le garbage collector fait son nettoyage, il prend énormément de ressources. Je travaille sur Java, et c'est horrible de voir que plus on améliore le garbage collector, plus les développeurs ne font pas attention. C'est le serpent qui se mord la queue. "Un garbage collector est coà»teux en performance, bien que dans la plus part des cas, son utilisation permet d'augmenter les performances globales d'une application" ... et si, un jour, on se mettait autour d'une table et qu'on se disait : - Il y a 25 ans, on faisait attention au nombre de ligne de code - Il y a 20 ans, on faisait attention à l'utilisation de la mémoire - Il y a 10 ans, on faisait attention à la place disque - Aujourd'hui, on se fout de tout alors on a inventé la "défragmentation" Pour les curieux : Ramasse-miettes (Garbage Collector) . . . Librairies Oui LUA permet les librairies, mais pas sur la Fibaro ou cette possibilité est désactivée. Le mot clé, de mémoire est : require . Merci Steven pour ces explications. Lien utiles pour la programmation lua : lua.org (Site Officiel Lua Anglais) WX LUA.fr Developer fibaro/ (Anglais) Programmation LUA Structures de Base LUA pour les débutants Introduction à la Programmation LUA Les bases de la programmation avec lua 1 3
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 Normal je suis en congé lol Envoyé avec mon SmartPhone
pepite Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 mprinfo en mode tuto ;-) super !!
D-GK Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 mprinfo ne serait-il pas prof ? Petite question j'ai pas encore ma HC2, donc je ne suis pas encore au point sur le LUA. Mais est-ce qu'un garbage collector est présent ? Si oui, le premier point sur la mémoire n'a pas un gros impact, si l'objet n'est plus utilisé la mémoire est en théorie libérée. Pour le reste c'est assez propre, il semblerait que le LUA soit un langage fonctionnel, est-il possible de faire des librairies pour réutiliser certaines fonctions ?
Steven Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 Garbage collector Un gabagge collector n'est-il pas le truc inventé pour palier au mauvais développement ? ... Je plaisante . Il y en a un, mais comme toujours, moins la mémoire est sollicitée, moins le garbage collector fonctionne, meilleures sont les performances. Il ne faut pas oublier que lorsque le garbage collector fait son nettoyage, il prend énormément de ressources. Je travaille sur Java, et c'est horrible de voir que plus on améliore le garbage collector, plus les développeurs ne font pas attention. C'est le serpent qui se mord la queue. "Un garbage collector est coà»teux en performance, bien que dans la plus part des cas, son utilisation permet d'augmenter les performances globales d'une application" ... et si, un jour, on se mettait autour d'une table et qu'on se disait : - Il y a 25 ans, on faisait attention au nombre de ligne de code - Il y a 20 ans, on faisait attention à l'utilisation de la mémoire - Il y a 10 ans, on faisait attention à la place disque - Aujourd'hui, on se fout de tout alors on a inventé la "défragmentation" Pour les curieux : Ramasse-miettes (Garbage Collector) . . . Librairies Oui LUA permet les librairies, mais pas sur la Fibaro ou cette possibilité est désactivée. Le mot clé, de mémoire est : require . . . P.S. Jamais je n'ai pensé que mon post ce retrouverais en tant que tuto La prochaine fois, je mettrais des exemples plus parlant et j'étofferais plus mes dires . . P.S.2 Pour mprinfo, un gabage collector est le Alzeihmer d'un programme, le truc qui fait que ta mémoire se vite (à ton age .. trop vite ) 1
pepite Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 haaaann c'est pas bien de se moquer steven ;-)
D-GK Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 Steven, je suis bien d'accord avec toi concernant le garbage collector mais dans ce cas là , n'y a t il pas une fonction qui permet de libérer la variable? On parle d'ailleurs ensuite d'optimisation du temps développeur, je trouve très difficile à lire du code regroupé sur une seule ligne suivant les cas surtout qu'on peut vite se retrouver dans le cas 2 à faire l'opération plusieurs fois. Sinon tu codais déjà il y a 25 ans ? Attention à ton garbage collector aussi !
Berale64 Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 Je me demande si l'avatar de mprinfo n'a pas une certaine influence, pour ne pas dire une influence certaine, sur la colorisation de ses posts !!! (En attendant, ça me manque depuis que j'ai quitté la région !!!!) @Steven : Dans une autre vie j'ai été project manager et je passais mon temps à me battre avec les développeurs qui disaient : La mémoire on s'en fout ça coute plus rien ! 3
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 @steven je préfére avoir Parkinson qu' Alzeihmer. Il vaut mieux renverser un peu le contenu de son verre plutôt que d'oublier de le boire Personnellement je n'ai que 64ko de mémoire comme mon très chers commodore 64 et ça me suffit largement Si je ne me trompe pas l'informatique fonctionne toujours avec des 0 ou des 1 On ne fait que rajouter des couches et des couches depuis des années 1 cÅ“ur, 2 cÅ“ur, 4 cÅ“ur etc.. moi j'en ai qu'un et il est malade Pour exemple le Lua a bien été écrit en C si je ne me trompe pas et le C en Hexa Quand je vois la taille d'un script pour écrire un texte sur l'écran ça me fait doucement rire et oui il faudrait connaitre l'adressage de l’écran savoir ou mettre le texte etc.. pas simple pour Monsieur tous le monde Je pense même que pour la V5 il va falloir ajouter de la RAM et overclocker ou changer le CPU
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 @Pépite tu as des soucis avec GEA pour fayoter avec Steven @Steven désolé pour ce tuto. J'ai pas demander car c'est pas du code. je pensé que quelqu'un allait le faire, j'ai attendu quelques jours pour voir et rien. A priori on préfère lire les tutos plutôt que de les faire 1
Steven Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 mprinfo = 1 CPU downclocker, 64Ko RAM, 0 ou 1 bitte .. j'ai pas bien compris la fin @mprinfo : Tout les temps que tu consacres à faire des tutos est du temps gagné pour les autres. Donc merci pour nous tous. @D-GK Attention, optimiser le temps du développeur ne veux pas dire minimiser le nombre de ligne à son paroxysme. Cela signifie surtout "centraliser" et "réutiliser" le code existant (en gros, éviter les doublons et les copier/coller en créant des méthodes (function)). Cela signifie aussi d'essayer de respecter les conventions de nommages et les habitudes des autres développeurs (afin de permettre une reprise plus aisée de son code). J'ai déjà analyser le code de certains collègues ou on trouve des méthodes "getMontantFacturation" qui retourne ... la date de la prochaine facturation ... cherchez l'erreur et surtout la perte de temps quand on cherche un bug. Mais je suis 100% d'accord avec toi, parfois la lecture la "mono-ligne" est destructrice, exemple : boolean resultat = voiture.roule() ? feu.vert() ? support.autoroute() : stop() ? true : feu.rouge() ? voiture.enpanne() : false Bon alors, c'est quoi le résultat ... ben heuuu, la couleur du moteur n'aurait-elle pas une influence sur le type de pneu ? Et oui, j'ai cette année plus de 25 ans de développement ... ouchhh .. dans mon cas, on parle plus de "garbage collector" bien que collector me va bien .. d'ailleurs, on parle de quoi .. j'ai un blanc ... humm un petit blanc, c'est une bonne idée ça ou un rouge... heuuu, pffft, c'est l'heure de la sieste non ? :-)
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 @Steven N’oublie pas de les mettre sur ton beau NAS tout neuf en cas de panne internet tu auras un peu de lecture 1
jojo Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 @mprinfo : Tout les temps que tu consacres à faire des tutos est du temps gagné pour les autres. Donc merci pour nous tous. @mprinfo : +1 1
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 Tu sais se tuto il ma fallu 15mn pour le faire le plus dur c'est de trouver les bonnes couleurs lol et surtour trouver les super explication de steven sur le forum dans un post perdu au fin fond d'un topic Envoyé avec mon SmartPhone
Nico Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 Moi je suis content d'avoir arrêter le dév
D-GK Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 +1 Nico Pour l'opérateur ternaire, je ne savais même pas que l'on pouvait les imbriquer Steven. Après effectivement c'est des bonnes pratiques et du bon sens, d'ou ma question sur les librairies mais dommage qu'il y ait une restriction. Concernant mprinfo, j'en avais déjà parlé dans le membre du mois, mais merci beaucoup, en tant que débutant c'est que du bonheur ces tutos !
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 Merci D-GK je debut aussi je me suis mis au lua fin janvier 2015 Envoyé avec mon SmartPhone
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 Par contre si quelqu'un veut des conseil pour une installation satellite multi satellite et plein de prises ca je mettrise Envoyé avec mon SmartPhone
Steven Posté(e) le 23 avril 2015 Signaler Posté(e) le 23 avril 2015 @Nico Nous aussi on est content que tu ailles arrêté @mprinfo Moi LUA c'est début 2014, j'ai un an d'avance sur toi et 3'543'234 ans de retard sur Krikroff Mais, de tout façon, il est hors quota et de plus il programme tellement mal que même chez Fibaro, quand ils copient son code, il le comprenne pas ... heinnnn comment ça c'est pas Krikoff qui code avec le pieds ... mais heuuu alors, vous voulez dire que c'est les développeurs de Fibaro qui sont pas au top ... Nooooonnn ! @D-GK Attention, c'est du Java et non pas LUA:
mprinfo Posté(e) le 23 avril 2015 Auteur Signaler Posté(e) le 23 avril 2015 Ah bon krikroff ne code qu avec les pieds je croyais qu'il avait aussi 2 main gauche lol Envoyé avec mon SmartPhone 1
Messages recommandés