[UDF] UnitedData, stockez vos données !

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

[UDF] UnitedData, stockez vos données !

#1

Message par RL77LUC »

Bonjour à tous !

Je poste mon UDF nommé "UnitedData". Il sert à écrire des données pour vos programmes dans AppData, de manière automatique. Une technologie de cryptage en RC4 est proposée (réalisée par RazerM) pour sécuriser ces données. Voici la liste des fonctions :
_UnitedAddData : Ajoute une nouvelle donnée UnitedData
_UnitedReadData : Lis une donnée UnitedData
_UnitedDestroyData : Supprime une donnée UnitedData
_UnitedFormatData : Supprime toutes les données UnitedData d'un programme

Voici l'UDF en lui-même :
► Afficher le texteUDF UnitedData
N'hésitez pas à critiquer, à proposer des améliorations ;).
Avatar du membre
ricky
Niveau 7
Niveau 7
Messages : 443
Enregistré le : ven. 06 févr. 2009 09:25
Localisation : Suisse
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#2

Message par ricky »

Hello,

merci pour le partage, mais je vois pas vraiment à quoi ça sert. Tu peux en dire plus?
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#3

Message par RL77LUC »

Je te conseille d'étudier l'UDF. Il permet de stocker les données de façon homogène et organisée. De plus, plusieurs programmes peuvent communiquer plus facilement grâce à cette méthode.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#4

Message par Iste »

Merci pour votre contribution.

De manière générale c'est plutôt propre.

Les peu de conseils que je pourrais vous apporter serait de :

- Externaliser les chaines dans des variables globales pour rendre la modification plus facile. On peut même penser ajouter des accesseurs si on laisse ces variables non const.

- Bien que facile a utiliser, je vous dé-conseil fortement l'usage des .ini liés à beaucoup trop de contraintes.
Au moins, précisez le.

- Les SetError() ne sont pas suffisant pour lever des exceptions, il faut ajouter un Return. Dans l'état, vos fonctions retournent toujours True.


Voila, c'est tout.
Signez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#5

Message par RL77LUC »

Pour externaliser, j'ai juste à faire un global directement dans la fonction ? Et à quoi ça pourrait servir, j'ai mal compris cette partie :S.
Pour remplacer les INI, que puis-je utiliser ? SQLite ?
Pour les SetError, je m'en doutais, je n'ai pas l'habitude d'en faire usage. Je pourrais utiliser un "Return @error", non ?
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#6

Message par Iste »

Pour l'externalisation des chaines :

Quand je regarde votre code, je constate rapidement l’apparition a de nombreuses reprises de @AppDataDir & "\UnitedData\UD_" et ".ini"
L'externalisation consiste donc a creer une variable contenant cela qui sera appelé par la suite

Code : Tout sélectionner

Global Const $UD_PATH = @AppDataDir & "\UnitedData\UD_"
Global Const $UD_EXTENSION = ".ini"
On retrouvera donc des

Code : Tout sélectionner

IniWrite($UD_PATH & $IdPrg & $UD_EXTENSION,"ClearData",$TitreData,$Data)
On peut faire la même chose pour "ClearData" et "CryptData".
Il est aussi intéressent de décomposer cela en plusieurs variables :
rootPath pour @AppDataDir & "\"
dir pour "UnitedData\"
prefix pour "UD_"
Mais je resterai simple pour l'exemple.

Si on fait cela, un utilisateur qui souhaite changer le répertoire ou les extensions pourra le faire en modifiant la variable global et sera sûr de ne pas en oublier (surtout si l'UDF est grand)

Apres, la ou on peut pousser ca plus loin c'est de se dire qu'il est quand même dommage de devoir ouvrir l'UDF pour changer ca. Surtout si il est partagé (comme les UDF de bases) car cela affectera tout les scripts.

L'idée serait donc de se retrouver avec cela :

Code : Tout sélectionner

Global $UD_PATH = @AppDataDir & "\UnitedData\UD_"
Global $UD_EXTENSION = ".ini

Func _UD_setPath(Const $path)
    If FileExists($path) And StringInStr(FileGetAttrib($path), "D") Then
        $UD_PATH = $path
    EndIf
EndFunc

Func _UD_setExtension(Const $extension)
    $UD_EXTENSION = $extension
EndFunc
Les variables ne sont plus Const. du coup, au début d'un script, on peut les modifier grace aux fonctions présentées.
J'irai même plus loin, on peut maintenant changer a chaud de dossier. Cela peut etre utile par exemple pour une gestion d'utilisateur ou une sorte de "navigation privée".

On pourrait aussi modifier directement les variables comme la notion de "private" n'existe pas en AutoIt, mais l’intérêt de passer par les accesseurs est d'ajouter une couche de sécurité. De plus ces fonctions pourront plus facilement être documentées que des variables volantes.

Pensez aussi a donner un nom assez unique a vos variables Global pour ne pas avoir de conflit avec le reste du script de l'utilisateur.

Pour remplacer les INI :

SQLite pourrait en effet etre une tres bonne solution. La c'est a vous de voir.
Mais sinon, pour garder le coté lisible et modifiable a la main des .ini tout en évitant d'utiliser de lourdes fonction et/ou SGBDR, vous pouvez aussi utiliser un system arborescence de dossier.
En gardant la même structure que présent cela donnerait :

Code : Tout sélectionner

@AppDataDir & "\UnitedData\UD_" & $IdPrg & "\ClearData\" & $TitreData & ".txt"
Chaque clef deviendrait un fichier text contenant sa valeur. Ainsi, plus de limitations réelle ^^

Pour les SetError :
Bah, remplacez simplement vos SetError() en

Code : Tout sélectionner

Return SetError(x)
Une gestion plus poussée des erreurs serait la bien venue, mais n'a pas raison d’être en AutoIt. Cela suffira amplement.

vala
Signez ici
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#7

Message par matwachich »

Ca ressemble beaucoup à ça
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#8

Message par RL77LUC »

@matwachich: Désolé, je ne connaissais pas du tout votre UDF.

@Iste: C'est brillant comme idée ! D'autres suggestions ? Je vais inclure vos modifications/idées pour la v2, en utilisant des fichiers texte.

EDIT: Pour la version actuelle, vous devez impérativement créer les dossiers dans AppData (UD_[ID_DU_PROGRAMME] et UnitedData), la v2 le fera automatiquement.
EDIT 2: Nouvelle fonction pour la v2 : Permet de retourner la première ID non utilisée par un programme UnitedData sur le PC courant.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#9

Message par Iste »

@matwachich : votre code souffre des même limitations que celui de RL77LUC (avant correction), mais étant donné qu'il est clairement sujet d'info de configuration c'est bien moins grave.
De plus votre code est tres bien ecrit comme d'habitude.
Mais maintenant que RL77LUC a choisi de se débarrasser de ces limitations, sont projet devient une alternative pour un plus large public.

@Ceux qui viendraient ici pour choisir un UDF :
Réfléchissez bien a l'usage que vous voulez en faire, et choisissez celui qui convient le mieux ;)

@RL77LUC :
Pas d'autre modification a vous proposer. Il s'agissait ici juste de "corriger" le script.
Pour le faire évoluer, ce sera a vous de trouver des idées ;)
Vous pouvez toute foi vous inspirer du script de matwachich qui est vraiment tres bon. Je pense notament a la possibilité de choisir le support pour les infos.
Ajouter un choix ini/registre/txt/sqlite permettrait de couvrir tout les besoin !
Voyez aussi sa fonction _AutoCfg_Init() qui, si votre UDF s’agrandit, pourra être un très bon exemple a suivre !

Bonne continuation ;)
Signez ici
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#10

Message par RL77LUC »

Merci pour vos précieux conseils. Je ne suis pas très partant pour la fonction d'init, car pour moi elle reste d'un intérêt limité. Peut-être plus tard ...
En attendant, je n'ai plus trop d'idées, peut-être un système multi-supports. N'hésitez pas à faire des suggestions ^^.

EDIT: Deux nouvelles fonctions, permettant la conversion d'un array en string et vice-versa. J'attends toujours vos suggestions ...
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#11

Message par Tlem »

RL77LUC a écrit :EDIT: Deux nouvelles fonctions, permettant la conversion d'un array en string et vice-versa. J'attends toujours vos suggestions ...
Si vous cherchez ce genre de fonction, j'en ai mit à disposition dans ce sujet.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
RL77LUC
Niveau 5
Niveau 5
Messages : 173
Enregistré le : mar. 21 sept. 2010 16:54
Status : Hors ligne

Re: [UDF] UnitedData, stockez vos données !

#12

Message par RL77LUC »

C'est gentil, mais j'ai déjà codé les miennes ^^. J'y penserais quand même pour les Arrays 2D, qui ne sont pas encore supportés.
Répondre