Editeur de base de données "intelligent"

laurrislaurris Membre
octobre 2004 modifié dans Vos applications #1

Editeur de base de données, c'est vague ...
je précise tout de suite que l' idée est partie d' une base MySQL mais que le concept pourrait être généralisé à  d'autres types de DB.
Editeur de base MySQL, ça existe déjà , ...
certes mais la nouveauté consisterait à  mettre en forme de façon "intelligente" les données contenues dans chaque TABLE de façon à  les modifier plus facilement.

Je m'explique: en général, on accède à  un tableau de données en deux dimentions grace à  un objet d'interface du type NSTableView. On peut alors tout visualiser d'un coup et modifier éventuellement chaque cellule. C' est pratique lorsque les données doivent être vue dans leur ensemble et qu' elles sont directement modifiables (de type texte), et surtout pas trop importantes pour tenir dans une cellule. Dans tous les autres cas, c'est peu commode.

Il serait beaucoup plus efficace et clair de modifier les valeurs des données grace à  un élément d'interface approprié pour chacune. Un court texte serait modifié dans un NSTexfield, un texte long dans une NSTextView, une image dans un ImageView, un nombre dans un slider, un booleen dans un switch button, etc ...
J' ai fait une capture de l'interface ci-dessous. Dans une Outline View à  gauche on selectionne la row voulue et dans le drawer à  droite on modifie les valeurs.
On pourrait avoir des éléments d'interface dont la nature et les attributs varient en fonction du type de données (number, text, boolean) mais on peut aussi imaginer d'autres avantages:
- Une valeur à  choisir dans une liste prédéterminée (NSPopup) ou un maximum pour la valeur d'un number (NSSlider) ou un formattage de date si l'objet à  modifier est une date...
Pour chaque valeur dans la base MySQL on pourrait ainsi définir des valeurs possibles limites et d'autres attibuts.
Le gros du travail consisterait donc à  interpréter les variables dans la base et à  leur attribuer un élément d'interface et des attributs en fonction de critères comme:
- Le Nom de la variable dans la base
- Le type de données contenues dans la variable
- La quantité de données

Pour faire cela, je pense à  un fichier xml qui déciderait des conditions à  remplir pour chaque variable, comme par exemple, en langage humain:
"Si la variable est "Jour" et sa valeur "Lundi", on obtient un popup avec tous les jours de la semaine avec comme sélection "Lundi"."
Bien sûr, cela suppose que l'on sait à  l' avance comment doit être utilisée la base et quel doit être le type et les limites des données. Par exemple, je pense aux bases MySQL qui permettent de faire un weblog (comme textpattern): pour de nombreuses variables on sait quelle tête elles auront.
Chaque type de base aurait donc associé un fichier xml qui fait le lien entre les variables et les éléments d'interface pour les modifier. Un genre de CSS du UI cocoa.

Je cherche donc des developpeurs intéressés pour un projet open-source qui regroupe les domaines comme le xml, les connections MySQL, bindings, ...
Si vous êtes intéressés ou désirez des précisions sur le concept, le fonctionnement ou l' utilité du projet, merci de laisser un message ici même. J' essaierai plus tard de préciser les taches à  réaliser pour commencer.

Merci,
A+, Laurris

[Fichier joint supprimé par l'administrateur]

Réponses

  • BruBru Membre
    12:20 modifié #2
    Ce que tu évoques ressemble beaucoup au fonctionnement des certains AGL comme MAGIC, qui permettent d'attacher à  une définition de données un type de "contrôle" de saisie dans une interface UI.

    Par exemple, si le type de la variable est un booleen, alors, MAGIC utilisera automatiquement une boite à  cocher pour représenter graphiquement (dans une fenêtre UI) le contenu de cette variable.

    La base de données MySql permet aussi de définir des types de données "virtuelles" via les types ENUM et SET (c'est MySql qui se charge de la conversion du texte LUNDI en valeur numérique 1 par exemple). Donc si la colonne fournie par MySql est du type ENUM, alors il faut automatiquement utiliser un popup...

    Ton projet est "relativement" facile à  implémenter en cocoa, puisque dans ce dernier, justement, chaque "grand type" de données a son objet, mais aussi sa NSCell (sa représentation graphique) qui lui est associé.

    .
  • laurrislaurris Membre
    octobre 2004 modifié #3
    Salut Bru,

    Merci pour toutes ces infos qui me rassurent sur la possibilité de faire un tel projet car même si c' est "relativement" facile, je précise que mes connaissances en cocoa sont aussi "relativement moyennes". Je suis content de savoir qu 'il existe déjà  des logiciels qui exploitent ce genre d'idée mais je n' ai pas pu m' en rendre compte par moi même car MAGIC ne se laisse pas facilement trouver sur le web.
    Finalement, là  où j' aurais besoin le plus d'aide, c'est sur la mise en oeuvre du concept de "CSS pour NSControls".

    Ce que je voudrais faire, c'est que le type de controle et les valeurs limites soient déterminées de plusieurs façon:
    - Une règle globale où on dirait que systématiquement une variable de type ENUM (par ex.) va dans un popup.
    - Une règle "locale" qui dirait que dans le cas précis où la base MySQl correspond à  une certaine utilisation ( carnet d' adresse, weblog, library itunes ....), il faut appliquer certaines limites ou un certain formatage des données.
    C' est pour celà  que la métafore de la CSS me parraissait adaptée car il pourrait y avoir une possibilité d' établir des priorités et des conditions.
    Est-ce qu 'un fichier xml parait adapté ? Je me demande parce ce que je voudrais faire se rapprocherait plus d'un langage interprété (css, html) et la solution "plugins en Obj-C" serait tout aussi possible et moins stricte. Donc, si vous voyez ce que je veux faire et me conseiller par ou attaquer (xml ou plugins), merci d' avance.

    Concernant l'interface, le plus important est de réaliser un moyen de gérer tous ces différents NSControls. Pour l'instant, je les génère à  la main (normal) à  l'intérieur d'une NSView sous-classée. Pour organiser et modifier tout ça, il me faut un controller qui permette d'identifier facilement le NSControl concerné.

    Le NSArrayController est-il conseillé pour ce genre de collection ? Connaissez-vous un exemple avec un NSArrayController qui s'occupe d'une petite troupe de d' objets divers et pas juste de tableaux ?
    Rêve-je où les bindings pourraient être adaptés pour ce genre de situation ?
    Voilà  les questions qui me haaaantent.

    A+, Laurris.

    Encore une photo sur le vif: [ Modifié pour tenir compte de l' état de l' application au moment du post suivant]

    [Fichier joint supprimé par l'administrateur]
  • laurrislaurris Membre
    octobre 2004 modifié #4
    Pour ceux qui seraient intéressés par ce projet mais ne voient pas bien par ou le prendre, je vous rassure: c'est commencé, le concept fonctionne de façon embryonnaire et on peut voir comment ça se passe.

    Je rapelle que le but est de fabriquer un logiciel qui permette de communiquer avec une base MySQL grace à  une interface qui prenne en compte des valeurs typées, et qui adapte son interface en fonction de l' utilisation de la base . Mes tests concernent une base MySQL pour weblog.

    Pour ceux qui téléchargent le projet plus bas, voilà  la procédure de base:
    - Remplir les champs serveur, mdp, psw de votre base MySQL >> Connect
    - Sélectionner la database dans le popup à  gauche
    - Parcourir la outline view et selectionner une Row

    >> Les données s'affichent dans un format spécial selon le type. Pour l'instant les 3 seuls types sont: NSTexfield, NSSlider, NSButton.

    Le but est de pouvoir afficher les donneés avec d'autres UI elements personnalisables.

    Dans un panel, vous pouvez examiner le NSArrayController utilisé pour l' affichage des données.
    Reste à  faire principalement:
    - Update des valeurs modifiées dans le NSArrayController vers la base MySQL
    - Moyen de déterminer un NSControl  particulier en fonction de divers paramètres comme: le type de base, la valeur d'une autre variable dans la Row, le type de la valeur concernée, ...

    Ceux qui veulent se joindre au projet où qui veulent expérimenter leur connaissances dans divers domaines comme les bindings, Le framework SMySQL, le XML, cocoa ... sont bienvenus.

    Pour plus de précisions, vous pouvez m' écrire.

    TELECHARGEMENT DU PROJET XCODE 1.5/ OS 10.3.5:
    http://perso.netpratique.fr/escoz/MySQLControl.dmg




    "Passe ton code d' abord" Fangio
  • ClicCoolClicCool Membre
    12:20 modifié #5
    Salut laurris,

    Je ne m'en étais pas rendu compte mais j'ai un projet similaire qui germe chez moi.

    Faudra que je prenne le temps de regarder ton code ;)

    Demon côté c'est très embryonaire mais pour ce qui est des répecussion des modifs vers sql je me sert de notifications qui permettent une répercussion vers sql "champ par champ". Je suis pas sur qu'il ne soit pas plus performant de regroupper les modifs et de ne les répercuter qu'une fois que la sélection passe sur un autre enregistrement. (avec un dictionaire des champs "dirty")

    Si ça t'interresse je peux t'envoyer le code de mon début projet

    Si je peux collaborer avec toi c'est avec plaisir. :D
  • laurrislaurris Membre
    12:20 modifié #6
    Salut ClicCool,

    Je serais très heureux que tu participes. Bienvenue dans la MySQLControl team ! (qui jusqu'à  présent comptait:  moi).
    Voilà  l' URL du projet que je viens de mettre à  jour: http://perso.netpratique.fr/escoz/MySQLControl.dmg. Normalement c'est compilable avec xcode 1.5 et 10.3 et on peut acceder à  n'importe quelle base MySQL. Il y a un Readme qui explique un peu le principe et le design du code (binding inside !).
    Pour ce qui est de la partie connection MySQL, je suis confronté au même problème. Il faut voir si les valeurs sont mises à  jour à  chaque modif ou à  chaque selection de Row. Je dois aussi prendre en compte le fait que j'utilise un ArrayController pour controller chaque row. Là  dessus je pense que tu pourra m'aider car j' ai un problème conceptuel qui me bloque dans le developpement mais j' en reparlerai...

    Rappelle-moi par mail quand tu auras vu le code ou pour toutes précisions ou même pour m'envoyer ton code, qu'on confronte un peu tout ça.

    Laurris.
  • CoConutsCoConuts Membre
    12:20 modifié #7
    http://cocoamysql.sourceforge.net/

    Tu pourrais donner un coup de main ici  :trinque:
  • nucleusnucleus Membre
    12:20 modifié #8
    Vous avez regardé le projet Kexi?
    C'est fait avec KDE et c'est plutôt destiné à  faire une appli libre similaire à  M$-Access

    http://www.kexi-project.org
  • sekaijinsekaijin Membre
    12:20 modifié #9
    Salut
    Je réfléchit depuis longtemps à  ce genre d'outil.

    pour ma part j'ai imaginé plusieurs outils.
    un qui permette à  la 4D de dessiner des formulaires pour accéder à  une applie. (BD)
    je regarde de près les avancé de xform
    qui me semble une bonne base pour la rlation entre l'applicatif et le client.
    xform permet de definr le formulaire.
    en ajoutant des name space il devient possible de compléter les deffinition
    comme par exemple un textfield pour un N°Tel qui avec un name space est caractérisé comme yel et non un simple texte.

    il manque à  xform les élément statique de l'interface. le W3C propose XHTML mais là  je ne sais vers où me tourner.
    pourquoi pas des chose comme XUL bien plus riches

    enfin pour ma part le client doit être multi protocole

    j'ai pensé à  une définition xml de l'application cliente.
    qui décrive le protocole de com avec le serveur
    SQL RMI SOAP HTTP etc.
    qui definice l'interface client a partir des formulaires definie comme ci dessus.

    cela permet d'avoir un client plutôt générique mais tout de même pas aussi pauvre que le navigateur (capable de connexion permanante pas comme http par exemple)

    il faut en face un outil our creer les applications le fait de choisir XML permet de commencer à  faire des applie avant d'avoir l'outil. mais aussi de libérer le client d'une technologie (language plateforme)
    et donc un éditeur de formulaire.

    l'avantage d'un client lourd est que les traitements et l'interface utilisateur sont bien meilleurs l'inconégniant c'est le déploiement et la gestion des cohérances.

    l'avantage du client léger c'est que tous le straitements étant sur le serveur le client à  toujours le dernier taitement applicatif mais l'expérience utilisateur est pauvre.

    c la raison pour laquelle je regarde une voie intermédiaire.
    un client mi-lourd  et un serveur applicatif.

    le client de type access enbarque tout là  il n'embarque que l'expérience utilisateur contrôl de saisie etc.

    les traitement metier de l'appication côté serveur.

    le fait de définir le choix du protocole dans chaque cas permet de choisir le type de communication le plus approprié.

    client DB
    client SOAP
    client webapps/j2ee/webobjects

    pour arriver à  cela
    l'architecture du client est à  définir de façon très claire et bien architecturé.
    un gestionnaire de protocoles
    qui puisse géré les connexion type Mysql comme http
    un moteur de formulaire
    et la mécanique qui fait le lient entre tout ça.


    Voilà 
    A+JYT
Connectez-vous ou Inscrivez-vous pour répondre.