Welcome to Bukkit France

Inscrivez-vous maintenant pour profiter d'un accès total à tout le contenu offert par la meilleur communauté Bukkit française ! Une fois inscrit et connecté, vous pourrez contribuez à la communauté en postant vos propres sujets et questions ou en répondant à ceux existants. Vous pourrez aussi customiser votre profil, recevoir des points de réputations, communiquer avec les autres membres via le chat, et plus encore! 

  • Annonces

    • Pskyco

      Bukkit France passe sous Discord !   20/02/2016

      Bukkit France est désormais passé sur Discord, au revoir donc notre vieux Teamspeak ! Téléchargez le client et venez nous rejoindre sur notre salon en suivant les instructions suivantes.
ilicos

Helpful Customizable Configurator

6 messages dans ce sujet

HELPFUL CUSTOMIZABLE CONFIGURATOR

 

 

 

1/ Contexte : 

 

Ah... ce fameux temps que l'on perd à comprendre d'où vient ce NullPointerException, cette exception de configuration... 

-> 5 min à chercher où on a oublié de fermer une string dans une configuration...

-> 10 minutes pour trouver la tabulation en trop,

-> 15 minutes pour switcher entre le fichier de configuration et la documentation qui explique le model de configuration, ce que l'on peut rentrer comme valeur

 

Il était peut-être temps de faire quelque chose pour ça, non? :)

 

 

 

2/ Ce qui est prévu : 

 

- Définition de type ayant pour base:

    - Object

    - Map

    - List

    - Primitive:

        - Float

        - Int

        - String

        - Bool

    - Set

    - Enum

- Interface d'édition du model configuration (définition des types)

- Interface d'édition de la configuration {partiellement fini}

- Export :

    - JSON

    - YAML

    - XML

- Import (le model de configuration devra être chargé au préalable):

    - JSON

    - YAML

    - XML

- Mise en ligne des models de configurations et récupération

- Sauvegarde d'une configuration en ligne (?)

- Les propriétés optionnelles dans les objects

- Contraintes:

    - String :

        - regex,

        - enum,

        - Map<String> keys,

        - string values of list

    - Number (Float and int) :

        - operators:

            - INFERIOR TO,

            - SUPERIOR TO,

            - EQUAL TO,

            - SUPERIOR OR EQUAL TO,

            - INFERIOR OR EQUAL TO

            - NOT_EQUAL_TO

        - enum,

        - Map<Int> or Map<Float> keys

        - Int or Float values of list

 

 

2/ Quelques Maquettes de départ:

 

Interface pour définir les types:

a0987c917c.jpg

 

Interface de configuration (en partant du principe que l'objet de base est un object ListLocation):

23e82ba123.jpg
 
 

 

3/ Exemple :

 

http://ilicos.franceserv.com/editor-json-yaml-xml/

 

Cet exemple se base sur la configuration du fichier groups.yml de GroupManager

 

 

 

4/ Resume :

 

Définition des types de la configuration et du type utilisé à la racine de la configuration

Édition de la configuration

Export au format désiré

 

 

 

 

 

 

 

Le projet est en cours de prototypage...

C'est possible que le code soit pas mal remodelé

 

Je travaille en haxe en transpilant vers du js... (c'est mieux pour le web ahah) en supplément de l'html et du css

 

N'hésitez pas à me dire ce que vous en pensez, à proposer des améliorations voir carrément des interfaces etc...

 

Cordialement,

 

ilicos

Modifié par ilicos
8 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Super projet :)

 

Est-ce qu'il est prévu de limiter les valeurs primitives prises par un champ, par exemple :

dans une configuration de mini jeu que "min-player-count-to-start-game" ne puisse pas être inférieur à 2 (intervalle possible pour les valeurs numériques) ;

qu'un String doive obéir à une regex (à ce moment là il faudrait aussi un message d'explication custom en cas de String invalide parce qu'une regex c'est pas très userfriendly) ;

qu'un String ne puisse prendre que certaines valeurs dans une liste ;

ou tout simplement de pouvoir attacher du code en JavaScript (ou Haxe) qui vérifie la valeur du champ, pour les cas plus complexes.

 

Par rapport à du code JavaScript/Haxe ajouté en plus il pourrait aussi être intéressant d'en ajouter pour vérifier la config de manière globale, par exemple dans ta démo du code pourrait avoir été ajouté pour vérifier que les groupes hérités existent, ou pour proposer des optimisations par exemple si un groupe fils possède des permissions que le groupe parent a déjà.

 

Autre idée : pouvoir ajouter des commentaires sur chaque clé qui décrit ce à quoi elle sert.

5 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 2 minutes, Dragorn421 a dit :

Est-ce qu'il est prévu de limiter les valeurs primitives prises par un champ, par exemple :

dans une configuration de mini jeu que "min-player-count-to-start-game" ne puisse pas être inférieur à 2 (intervalle possible pour les valeurs numériques)

 

Il y a 8 heures, ilicos a dit :

// blabla

 

2/ Ce qui est prévu : 

 

// ...

    - Primitive:

// ...

        - RangedInt

 

il y a 4 minutes, Dragorn421 a dit :

qu'un String doive obéir à une regex (à ce moment là il faudrait aussi un message d'explication custom en cas de String invalide parce qu'une regex c'est pas très userfriendly) ;

 

Il y a 8 heures, ilicos a dit :

// ...

    - Primitive:

        - RegexedString

 

il y a 5 minutes, Dragorn421 a dit :

qu'un String ne puisse prendre que certaines valeurs dans une liste ;

 

Il y a 8 heures, ilicos a dit :

// ...

    - Enum

 

il y a 7 minutes, Dragorn421 a dit :

ou tout simplement de pouvoir attacher du code en JavaScript (ou Haxe) qui vérifie la valeur du champ, pour les cas plus complexes.

 

Pour tout ce qui est module, ça me semble un petit peu délicat actuellement, mais j'y réfléchirais.

 

il y a 11 minutes, Dragorn421 a dit :

Autre idée : pouvoir ajouter des commentaires sur chaque clé qui décrit ce à quoi elle sert.

 

ça pourrait être possible, j'y réfléchirais également.

 

Merci pour ces retours. :)

5 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Considérant qu'une configuration peut contenir plusieurs fichiers et qu'une contrainte peut provenir d'un contenu d'un autre fichier, j'ai revue le visuel

 

8dad3295f9.png
 
Pour l'instant, c'est purement visuel, c'est pour ça que ce n'est pas encore en ligne.
 
J'ai travaillé un peu sur les contraintes, je les mets de côté pour le moment pour pouvoir avancer sur le principal.
J'ai revu un peu l'architecture pour les contraintes justement
 
Suite:
- Chargement d'une définition de configuration selon un json et mise en place de la vue
- Récupérer des définitions de configuration à partir d'une url et mettre en place la vue => serveur à mettre en place + backend à développer
- Système d'alerte quand une erreur est faite, affichage des contraintes
- Liste de suggestion pour tout ce qui est string avec containte, enum etc...
...
3 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

La version avec les différents fichiers est en ligne (pour ceux qui veulent tester)

J'ai mis en place le système d'alerte.

 

Je travaillerais sur le backend demain et les contraintes plus tard.

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Pouf',

 

j'ai fait une partie du backend, les infos en bdd sont correctement récupérées et affichées

-  /configurations/ affiche toutes les configurations + lien pour y accéder

-  /configurations/+idConfiguration affiche bien la configuration

-  /users/ affichera tout les utilisateurs

-  /users/ + idUser affichera des informations sur l'utilisateur

et potentiellement

- /users/ + idUser + /configurations/ affichera toutes les définitions de configurations de l'utilisateur

 

(Ce n'est pas en ligne pour le moment)

 

Pour l'instant, je bloque sur quelque détails de structure. Contenu selon url mais surtout la partie cliente.

 

Nous avons la récupération d'information en bdd et affichage, maintenant, il faudrait l'insertion d'informations // mise à jour etc...

J'aimerai bien, pour ce faire, réaliser une définition de configuration qui servira à définir les définitions de configurations.

Du coup, il deviendrait intéressant de réutiliser des bouts de codes.

Cependant, il y a des choses en plus qui ne seront pas défini par l'utilisateur (ID d'une définition), par conséquent, il faut que je rajoute des données à d'autres.

 

Bref, je risque de prendre beaucoup de temps pour trouver une solution complète à partir des quelques bouts d'idée que j'ai :3

3 personnes aiment ça

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.