Aller au contenu
BenjyNet

Evolution forum - Code snippet ?

Recommended Posts

suis d'accord avec @BenjyNet...  une bonne entête de fonction, bien claire et obligatoire, et ca doit être suffisant. On prend le bout de code, on sait ce qu'il fait, ce qu'il retourne, ce qu'il veut en entrée, et à la rigueur on s'en fout de savoir comment il le fait. Et si on veut malgré tout le savoir, ben , on l'analyse et on essaie de comprendre, c'est comme ca que tout le monde pourra progresser en LUA :D

Bon, après, fait pas comparer ca avec GEA ...  entre GEA et un snippet de 20 lignes, il y a de la marge, et je comprends que le sujet Support GEA soit des plus utiles....

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors, on en est où de cette idée ?? On fait quelque chose ou on abandonne ?

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est toujours une bonne idée, il faut le faire, mais la grand question, c'est "on fait quoi" ?

 

Parce que c'est pas super clair pour l'instant.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'en étais resté à :

   - Nom de la section : Snippet Place (j'aime ma box jusqu'au bout..)

   - 1 post = 1 snippet

   - formatage Sujet/Entête du snippet/Code du snippet/Exemples

   - approbation par les modérateurs du post avant publication pour vérification du formatage

Partager ce message


Lien à poster
Partager sur d’autres sites

Là ça devient tordu, ou alors je n'ai pas compris ce que tu voulais dire ?

 

On ne peut pas approuver chaque post, c'est le sujet entier qui est approuvé.

Si on créer autant de sujet que de code snipet, ça va être la jungle et impossible à parcourir et rechercher des exemples.

 

Il me semble plus réaliste de s'inspirer du Showroom GEA :

- Un sujet

- chaque message = 1 code snipet

 

A la limite, on peut subdiviser pour que chaque personne possède son propre sujet. Mais pas plus, sinon comme je disais plus haut, l'info sera totalement diluée.

Partager ce message


Lien à poster
Partager sur d’autres sites

je pensais que chaque post pouvait être modéré. ,-)

Dans ce cas :

 

- 1 message : 1 code snippet formaté avec :

     -> entête : Fonction du snippet, à quoi il sert en résumé

    -> Code du snippet

   -> Exemples

 

il y a une heure, Lazer a dit :

chaque personne possède son propre sujet.

Trop difficile de retrouver un snippet si on en a besoin ultérieurement non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

OK, donc un sujet unique, ça me va.

 

Du coup, pas besoin de créer de section (une section pour 1 sujet, ça serait overkill), il suffit d'épingler le sujet unique en haut de la section HC2.

 

@Pepite tu nous donnes un exemple de message avec le template que tu as donné ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer

Désolé pour la réponse tardive, je suis reparti de l'idée de @BenjyNet.

 

Généralité :

------------------------------------------
-- Utilité                 : A quoi sert le code
-- Fonction             : fonction à appeler
-- Données en Entrée     : ce qui est attendu
-- Données en Sortie     : ce qui est retourné
-- Auteur                 : le nom du codeur
------------------------------------------
 
 -- Exemples

 

- En voila un que j'ai sous la main ;-)


 

------------------------------------------
-- Utilité                 : Encodage login:password en base 64
-- Fonction             : encode() ou decode()
-- Données en Entrée     : Ce qui doit être encodé ou décodé
-- Données en Sortie     : Ce qui a été encodé ou ce qui a été décodé
-- Auteur                 : Trouvé sur le web (nom des fonctions adaptées pour plus de lisibilité)
------------------------------------------

-- Code -----

  -- character table string
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

-- encoding
function encode(data)
    return ((data:gsub('.', function(x)
        local r,b='',x:byte()
        for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
        return r;
    end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
        if (#x < 6) then return '' end
        local c=0
        for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
        return b:sub(c+1,c+1)
    end)..({ '', '==', '=' })[#data%3+1])
end

-- decoding
function decode(data)
    data = string.gsub(data, '[^'..b..'=]', '')
    return (data:gsub('.', function(x)
        if (x == '=') then return '' end
        local r,f='',(b:find(x)-1)
        for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
        return r;
    end):gsub('%d%d%d?%d?%d?%d?%d?%d?', function(x)
        if (#x ~= 8) then return '' end
        local c=0
        for i=1,8 do c=c+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
        return string.char(c)
    end))
end

-- command line if not called as library
if (arg ~= nil) then
    local func = 'encode'
    for n,v in ipairs(arg) do
        if (n > 0) then
            if (v == "-h") then print "base64.lua [-e] [-d] text/data" break
            elseif (v == "-e") then func = 'encode'
            elseif (v == "-d") then func = 'decode'
            else print(_G[func](v)) end
        end
    end
end
-- Exemple

print(encode('domotique.fibaro@gmail.com:motdepasse'))
print(decode('ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ=='))
-------------------------------------------------------------

-- Résultat dans le Debug

[DEBUG] 17:02:52: ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ==
[DEBUG] 17:02:52: domotique.fibaro@gmail.com:motdepasse

 

Modifié par pepite
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi aussi ça me va très bien. Je rajouterais juste dans les commentaires de chaque méthode la description des valeurRs attendues (data dans l'exemple) ainsi que le retour de chaque méthode.

 

Sinon c'est parfait pour moi. Bien joué.

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour messieurs,

 

Heuuu @Steven

tu commences à me connaitre ;-) tu crois vraiment que je suis capable de comprendre tous les return des methodes de l'exemple ? Certains sont du chinois pour moi :60:

Il y a 16 heures, pepite a dit :

return b:sub(c+1,c+1)

La j'ai compris : b:sub, le c+1, C+1..heuuuu ben voila quoi ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

:2:, dans ton cas, on s'en fiche. Si je reprend ton exemple, je mettrais uniquement ceci :

 

Au lieu de 

-- encoding
function encode(data)

Je noterais pour plus de clareté

-------------------------------------------
-- function : encode
-------------------------------------------
-- paramètres : 
--   data : chaîne à encodé
-- retour : chaîne encodée en base64
-------------------------------------------
function encode(data)

Dans ton cas, c'est pas vraiment utile mais s'il y a plusieurs paramètres ou plusieurs retours cela peux s'avérer nécessaire.

 

Reprenons un exemple que tu connais bien :

function getLabelValue(value, jour, date)
   ...
   return message:match("(%d+):(%d+)%s(%d+):(%d+)"), jour
end

Pour un utilisateur qui regarde le code, il ne comprendra pas facilement, voir pas du tout, qu'est-ce que value, jour et date et encore moins les valeurs retournées. 

C'est pour cela que je pense que de documenter les functions est aussi utiles (quand cela se justifie bien évidement).

 

 

Donc perso, je ferais ainsi .. mais c'est vraiment personnel ...  voir post suivant.

 

 

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
==================================================================
Encodage / Décodage en base 64
==================================================================
Description :
 Utilitaire pour l'encodage / décodage en base 64
 Utilisé fréquement pour encoder les login:password
==================================================================
Support         : [X] Scénario  [ ] VD
Firmware requis : 4.x
Auteur          : Trouvé sur le web (nom des fonctions adaptées 
                  pour plus de lisibilité)
------------------------------------------------------------------
Functions :
   encode : encode une chaîne de caractère en base64
   decode : décode une chaîne de caractère précédement encodée
==================================================================
--]]

-- ---------------------------------------------------------------
-- function : encode
-- ---------------------------------------------------------------
-- paramètres : 
--   data : chaîne à encodé
-- retour : chaîne encodée en base64
-- ---------------------------------------------------------------
function encode(data)
   -- ...
end

-- ---------------------------------------------------------------
-- function : decode
-- ---------------------------------------------------------------
-- paramètres : 
--   data : chaîne encodée
-- retour : chaîne en claire
-- ---------------------------------------------------------------
function decode(data)
   -- ...
end

 

Exemples :

-- Exemple d'encodage
print(encode('domotique.fibaro@gmail.com:motdepasse'))
-- Résuitat 
[DEBUG] 17:02:52: ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ==

-- Exemple de décodage
print(decode('ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ=='))
-- Résultat dans le Debug
[DEBUG] 17:02:52: domotique.fibaro@gmail.com:motdepasse

 

  • Like 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Parfait, c'est effectivement très clair comme cela. Je valide ;-) mais je ne decide pas ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, on en est où ? C'est mis en place quelque part ? J'ai zappé l'info ? :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Très bien ca. En plus bien commenté. Merci.

 

J'irais même encore plus loin pour les commentaires :

 

-- Exemple d'encodage
print("Encode Base64")
print(encode('domotique.fibaro@gmail.com:motdepasse'))

-- Exemple de décodage
print("Decode Base64")
print(decode('ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ=='))

Dans le debug :

 

[DEBUG] 19:48:51: Encode Base64
[DEBUG] 19:48:51: ZG9tb3RpcXVlLmZpYmFyb0BnbWFpbC5jb206bW90ZGVwYXNzZQ==
[DEBUG] 19:48:51: Decode Base64
[DEBUG] 19:48:51: domotique.fibaro@gmail.com:motdepasse

 

Modifié par yoim

Partager ce message


Lien à poster
Partager sur d’autres sites

Il existe déjà un sujet ici, on l'utilise ou on en fait un nouveau ?

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour moi c'est pas la même chose. Un script ou scénario est quelque chose de complet et fonctionnel qu'un quidam peut installer et utiliser. Le snippetplace est plus pour le développeur, du bout de code qui a lui seul ne fait quasi rien.

Partager ce message


Lien à poster
Partager sur d’autres sites

Il me semble qu'il manque la notion de version du code. Il conviendrait d'ajouter ceci dans l'entête :

 

Version       : 1.00
Date Update   : 07 janv. 2018

 

Comment vous voyez, les évolutions/corrections/optimisations des codes en question ? 

  • MAJ du post par l'auteur ?
  • Nouveau post ?

Est-ce tout ça ne devrait pas être écrit en anglais afin que ce soit ouvert aux autres utilisateurs que ceux de la langue de Molière ?

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est la première fois que je suis fatigué de lire un topic ... qui n'existe pas encore :D

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer

 

Il est très bien ce sujet.

 

Mais je ne l'avais pas vu épinglé. Je trouverais interessant d'avoir directement une sous-section dédié à la prog Lua / Scripts / Scénarios ... dans Home Center 2 & Lite

 

parfois c'est pas simple de retrouver des infos sur des sujets qui ont déja été traités...

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà, sujet créé :

 

Pas de discussion là bas, on conserve ce topic pour le blah blah ;)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×