Bon, en gros, l'application est un SIG spécialisé.
Cependant, il y a 2 différences fondamentales par rapport aux SIG
existants (MapInfo etc..) :
a) les données échangées sont de vraies données, et non des symboles.
Le tracé symbolique vient en dernier, ce qui veut dire que dans le code
(les librairies C), les objets sont des données (double, entier, byte,
chaînes).
b) Afin de permettre la portabilité sur plusieurs GUI de manière la
plus facile possible, la FONCTIONALITE d'affichage est à l'EXTERIEUR du
GUI, et l'IHM est bien ce que son nom indique, une INTERFACE.
Je vais prendre un exemple (en paraphrasant le modèle objet) :
La fenêtre d'affichage contient un bouton : "Boucle avec le temps"
Ce bouton a une méthode (callback) qui ne fait qu'appeler une routine C
indépendante du GUI (Make_Loop). Cette routine fait donc une boucle sur
le temps, et donc passe à travers les objets (récupérés via un
protocole à partir de bases de données réparties), en appelant pour
chaque objet une méthode "Draw_Objet" (là aussi en C). Cette méthode,
suivant le type d'objet, appelle par exemple la méthode "Draw_Square"
(là aussi en C). Cette méthode enfin appelle une routine dépendante du
GUI , mais dont l'interface en est indépendante (par exemple
"Draw_Line").
Donc le GUI est utilisé pour :
1) présenter les choix accessibles à l'utilisateur
2) appeler la fonctionalité requise (en C)
3) tracer le graphisme à l'écran, à l'intérieur de la fenêtre du GUI
utilisé (sous forme de bibliothèque de fonctions élémentaires du style
"Set_Font", "Draw_Line", "Draw_bitmap", "Set_Color", etc..).
AUCUN code de fonctionalité ne figure à l'intérieur du code du GUI.
ce que je voulais dire, c'est que du coup, il y a des allers-retours
entre la fonctionalité C et le GUI. Et donc, si il faut dynamiquement
charger un DLL régulièrement, possibilité d'overhead excessif.
le GUI Java interrogera les structures C++ ou le code C++ trigerra
des méthodes Java destinés à rafraichir la représentation.
Voir remarque ci-dessus. Je pense effectvement à cette solution, mais
je me pose la question de l'overhead.
notez que vous pouvez également faire communiquer ces 2 parties
(moteur faceless C++ et GUI Java via un socket idoine, vous vous
épargnerez alors les classes Java avec natives et le wrapper JNI au
prix d'un format d'échanges de trames.
Très intéressant. J'aimerais si possible avoir plus de précisions..
Comment pourrais-t-on faire ? Auriez-vous un exemple, ou un lien
expliquant ?
b) si par contre la gestion même du GUI est le goulot d'étranglement,
Java peut (selon API d'abstraction, CPU, ...) ne pas offrir les
performances voulues, [...] un portage C++ de votre code sous
windows est donc surement également possible
Oui aujourdh'hui j'utilise un serveur X et librairies X/Motif sur
Unix/Linux. J'ai également pensé à C++. Cela semble effectivement
possible (par exemple avec cygwin pour la partie C). Cependant, dans ce
cas, les compilateurs que j'ai regardé à l'heure actuelle (DevC++,
CodeBlocks, VS Express) ne contiennent pas tout (en particulier les
signaux, les timers et les sockets) qui sont la base de la
communication de données entre les serveurs et les applications.
(puisque par exemple sous cygwin il existe un serveur X mais pas Motif).
Donc une question subsidiaire est : est-il possible d'attacher à un
projet Java (puisque nous sommes dans le groupe Java, mais la question
est aussi valable pour Visual Express) une librairie statique
(éventuellement dynamique) compilée pour Windows mais créée par exemple
avec cygwin ?
Bon, en gros, l'application est un SIG spécialisé.
Cependant, il y a 2 différences fondamentales par rapport aux SIG
existants (MapInfo etc..) :
a) les données échangées sont de vraies données, et non des symboles.
Le tracé symbolique vient en dernier, ce qui veut dire que dans le code
(les librairies C), les objets sont des données (double, entier, byte,
chaînes).
b) Afin de permettre la portabilité sur plusieurs GUI de manière la
plus facile possible, la FONCTIONALITE d'affichage est à l'EXTERIEUR du
GUI, et l'IHM est bien ce que son nom indique, une INTERFACE.
Je vais prendre un exemple (en paraphrasant le modèle objet) :
La fenêtre d'affichage contient un bouton : "Boucle avec le temps"
Ce bouton a une méthode (callback) qui ne fait qu'appeler une routine C
indépendante du GUI (Make_Loop). Cette routine fait donc une boucle sur
le temps, et donc passe à travers les objets (récupérés via un
protocole à partir de bases de données réparties), en appelant pour
chaque objet une méthode "Draw_Objet" (là aussi en C). Cette méthode,
suivant le type d'objet, appelle par exemple la méthode "Draw_Square"
(là aussi en C). Cette méthode enfin appelle une routine dépendante du
GUI , mais dont l'interface en est indépendante (par exemple
"Draw_Line").
Donc le GUI est utilisé pour :
1) présenter les choix accessibles à l'utilisateur
2) appeler la fonctionalité requise (en C)
3) tracer le graphisme à l'écran, à l'intérieur de la fenêtre du GUI
utilisé (sous forme de bibliothèque de fonctions élémentaires du style
"Set_Font", "Draw_Line", "Draw_bitmap", "Set_Color", etc..).
AUCUN code de fonctionalité ne figure à l'intérieur du code du GUI.
ce que je voulais dire, c'est que du coup, il y a des allers-retours
entre la fonctionalité C et le GUI. Et donc, si il faut dynamiquement
charger un DLL régulièrement, possibilité d'overhead excessif.
le GUI Java interrogera les structures C++ ou le code C++ trigerra
des méthodes Java destinés à rafraichir la représentation.
Voir remarque ci-dessus. Je pense effectvement à cette solution, mais
je me pose la question de l'overhead.
notez que vous pouvez également faire communiquer ces 2 parties
(moteur faceless C++ et GUI Java via un socket idoine, vous vous
épargnerez alors les classes Java avec natives et le wrapper JNI au
prix d'un format d'échanges de trames.
Très intéressant. J'aimerais si possible avoir plus de précisions..
Comment pourrais-t-on faire ? Auriez-vous un exemple, ou un lien
expliquant ?
b) si par contre la gestion même du GUI est le goulot d'étranglement,
Java peut (selon API d'abstraction, CPU, ...) ne pas offrir les
performances voulues, [...] un portage C++ de votre code sous
windows est donc surement également possible
Oui aujourdh'hui j'utilise un serveur X et librairies X/Motif sur
Unix/Linux. J'ai également pensé à C++. Cela semble effectivement
possible (par exemple avec cygwin pour la partie C). Cependant, dans ce
cas, les compilateurs que j'ai regardé à l'heure actuelle (DevC++,
CodeBlocks, VS Express) ne contiennent pas tout (en particulier les
signaux, les timers et les sockets) qui sont la base de la
communication de données entre les serveurs et les applications.
(puisque par exemple sous cygwin il existe un serveur X mais pas Motif).
Donc une question subsidiaire est : est-il possible d'attacher à un
projet Java (puisque nous sommes dans le groupe Java, mais la question
est aussi valable pour Visual Express) une librairie statique
(éventuellement dynamique) compilée pour Windows mais créée par exemple
avec cygwin ?
Bon, en gros, l'application est un SIG spécialisé.
Cependant, il y a 2 différences fondamentales par rapport aux SIG
existants (MapInfo etc..) :
a) les données échangées sont de vraies données, et non des symboles.
Le tracé symbolique vient en dernier, ce qui veut dire que dans le code
(les librairies C), les objets sont des données (double, entier, byte,
chaînes).
b) Afin de permettre la portabilité sur plusieurs GUI de manière la
plus facile possible, la FONCTIONALITE d'affichage est à l'EXTERIEUR du
GUI, et l'IHM est bien ce que son nom indique, une INTERFACE.
Je vais prendre un exemple (en paraphrasant le modèle objet) :
La fenêtre d'affichage contient un bouton : "Boucle avec le temps"
Ce bouton a une méthode (callback) qui ne fait qu'appeler une routine C
indépendante du GUI (Make_Loop). Cette routine fait donc une boucle sur
le temps, et donc passe à travers les objets (récupérés via un
protocole à partir de bases de données réparties), en appelant pour
chaque objet une méthode "Draw_Objet" (là aussi en C). Cette méthode,
suivant le type d'objet, appelle par exemple la méthode "Draw_Square"
(là aussi en C). Cette méthode enfin appelle une routine dépendante du
GUI , mais dont l'interface en est indépendante (par exemple
"Draw_Line").
Donc le GUI est utilisé pour :
1) présenter les choix accessibles à l'utilisateur
2) appeler la fonctionalité requise (en C)
3) tracer le graphisme à l'écran, à l'intérieur de la fenêtre du GUI
utilisé (sous forme de bibliothèque de fonctions élémentaires du style
"Set_Font", "Draw_Line", "Draw_bitmap", "Set_Color", etc..).
AUCUN code de fonctionalité ne figure à l'intérieur du code du GUI.
ce que je voulais dire, c'est que du coup, il y a des allers-retours
entre la fonctionalité C et le GUI. Et donc, si il faut dynamiquement
charger un DLL régulièrement, possibilité d'overhead excessif.
le GUI Java interrogera les structures C++ ou le code C++ trigerra
des méthodes Java destinés à rafraichir la représentation.
Voir remarque ci-dessus. Je pense effectvement à cette solution, mais
je me pose la question de l'overhead.
notez que vous pouvez également faire communiquer ces 2 parties
(moteur faceless C++ et GUI Java via un socket idoine, vous vous
épargnerez alors les classes Java avec natives et le wrapper JNI au
prix d'un format d'échanges de trames.
Très intéressant. J'aimerais si possible avoir plus de précisions..
Comment pourrais-t-on faire ? Auriez-vous un exemple, ou un lien
expliquant ?
b) si par contre la gestion même du GUI est le goulot d'étranglement,
Java peut (selon API d'abstraction, CPU, ...) ne pas offrir les
performances voulues, [...] un portage C++ de votre code sous
windows est donc surement également possible
Oui aujourdh'hui j'utilise un serveur X et librairies X/Motif sur
Unix/Linux. J'ai également pensé à C++. Cela semble effectivement
possible (par exemple avec cygwin pour la partie C). Cependant, dans ce
cas, les compilateurs que j'ai regardé à l'heure actuelle (DevC++,
CodeBlocks, VS Express) ne contiennent pas tout (en particulier les
signaux, les timers et les sockets) qui sont la base de la
communication de données entre les serveurs et les applications.
(puisque par exemple sous cygwin il existe un serveur X mais pas Motif).
Donc une question subsidiaire est : est-il possible d'attacher à un
projet Java (puisque nous sommes dans le groupe Java, mais la question
est aussi valable pour Visual Express) une librairie statique
(éventuellement dynamique) compilée pour Windows mais créée par exemple
avec cygwin ?
j'imagine - vous l'avez présenté comme cela - que l'acquisition et
l'archivage sont gérés par une des couches C, sa recompilation C sous
env. win32/64 devra être réglée mais on ne parle pas de portage Java.
OUI
l'analyse des évènements en cours (temps qui passe) et des events
induits par l'utilisateur ("et si ...") occupe sûrement une autre
grosse partie en C et ne sera pas non plus portée.
l'interface utilisateur elle-même (boutons de contrôles, saisies de
paramètres) serait sûrement 100% pure Java, dans le cadre d'un
portage Java; ceci signifie bien qu'elle serait codée de manière
originale à votre existant.
exprimé autrement: est-ce que votre client cherche une solution de
visualisation en Java pour la déployer sur N consoles / terminaux /
clients légers Java ? ou parle-t-on d'un vrai moteur de rendu
(renderer) dynamique en Java ?
dans le premier cas, le C exportera peu de choses, qlq statiques pour
paramétrer et récupérer le nouveau dessin; dans le second cas vous
devrez manipuler depuis Java les grands items du moteur (accès aux
collections de données, aux règles d'inférences, ...)
dans une variante partagée entre C et Java cela pourrait donner:
une interface optionelle de tracé en Java qui sera construite et/ou
initialisé avec une instance de Graphics (l'exemple vaut pour un code
AWT, il sera différent pour Swing mais la logique sera la même)
cette interface sera communiquée au C pour qu'il réalise le dessin
final à partir de ses primitives (drawObject, drawSquare, ...).
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
le chargement est fait une seule fois, l'overhead est insignifiant
pour l'appel, les accès additionnels (conversion de types, appels
croisés, ...) fait depuis le C dépendent de ce que ces routines
devront utilisés; à l'époque de trucs managés le marshalling de Java
/ JNI est loin d'être le pire (il est concrètement non pénalisant).
les problèmes liés aux perfs s'adresseront via soit un codage avec
les API UI Java existantes (certaines sont critiqués pour leur
lenteur comme Swing, d'autres un peu buggée comme AWT; ces critiques
sont soit partisanes, soit trop génériques), soit via un driver
OpenGL ou DirectX impliquant un hard (carte graphique) spéciale.
dans le premier cas, l'overhead d'appel Java<->C est non
significatif, dans le second cas on ne parle plus d'un projet Java
(ou si peu).
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
j'imagine - vous l'avez présenté comme cela - que l'acquisition et
l'archivage sont gérés par une des couches C, sa recompilation C sous
env. win32/64 devra être réglée mais on ne parle pas de portage Java.
OUI
l'analyse des évènements en cours (temps qui passe) et des events
induits par l'utilisateur ("et si ...") occupe sûrement une autre
grosse partie en C et ne sera pas non plus portée.
l'interface utilisateur elle-même (boutons de contrôles, saisies de
paramètres) serait sûrement 100% pure Java, dans le cadre d'un
portage Java; ceci signifie bien qu'elle serait codée de manière
originale à votre existant.
exprimé autrement: est-ce que votre client cherche une solution de
visualisation en Java pour la déployer sur N consoles / terminaux /
clients légers Java ? ou parle-t-on d'un vrai moteur de rendu
(renderer) dynamique en Java ?
dans le premier cas, le C exportera peu de choses, qlq statiques pour
paramétrer et récupérer le nouveau dessin; dans le second cas vous
devrez manipuler depuis Java les grands items du moteur (accès aux
collections de données, aux règles d'inférences, ...)
dans une variante partagée entre C et Java cela pourrait donner:
une interface optionelle de tracé en Java qui sera construite et/ou
initialisé avec une instance de Graphics (l'exemple vaut pour un code
AWT, il sera différent pour Swing mais la logique sera la même)
cette interface sera communiquée au C pour qu'il réalise le dessin
final à partir de ses primitives (drawObject, drawSquare, ...).
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
le chargement est fait une seule fois, l'overhead est insignifiant
pour l'appel, les accès additionnels (conversion de types, appels
croisés, ...) fait depuis le C dépendent de ce que ces routines
devront utilisés; à l'époque de trucs managés le marshalling de Java
/ JNI est loin d'être le pire (il est concrètement non pénalisant).
les problèmes liés aux perfs s'adresseront via soit un codage avec
les API UI Java existantes (certaines sont critiqués pour leur
lenteur comme Swing, d'autres un peu buggée comme AWT; ces critiques
sont soit partisanes, soit trop génériques), soit via un driver
OpenGL ou DirectX impliquant un hard (carte graphique) spéciale.
dans le premier cas, l'overhead d'appel Java<->C est non
significatif, dans le second cas on ne parle plus d'un projet Java
(ou si peu).
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
j'imagine - vous l'avez présenté comme cela - que l'acquisition et
l'archivage sont gérés par une des couches C, sa recompilation C sous
env. win32/64 devra être réglée mais on ne parle pas de portage Java.
OUI
l'analyse des évènements en cours (temps qui passe) et des events
induits par l'utilisateur ("et si ...") occupe sûrement une autre
grosse partie en C et ne sera pas non plus portée.
l'interface utilisateur elle-même (boutons de contrôles, saisies de
paramètres) serait sûrement 100% pure Java, dans le cadre d'un
portage Java; ceci signifie bien qu'elle serait codée de manière
originale à votre existant.
exprimé autrement: est-ce que votre client cherche une solution de
visualisation en Java pour la déployer sur N consoles / terminaux /
clients légers Java ? ou parle-t-on d'un vrai moteur de rendu
(renderer) dynamique en Java ?
dans le premier cas, le C exportera peu de choses, qlq statiques pour
paramétrer et récupérer le nouveau dessin; dans le second cas vous
devrez manipuler depuis Java les grands items du moteur (accès aux
collections de données, aux règles d'inférences, ...)
dans une variante partagée entre C et Java cela pourrait donner:
une interface optionelle de tracé en Java qui sera construite et/ou
initialisé avec une instance de Graphics (l'exemple vaut pour un code
AWT, il sera différent pour Swing mais la logique sera la même)
cette interface sera communiquée au C pour qu'il réalise le dessin
final à partir de ses primitives (drawObject, drawSquare, ...).
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
le chargement est fait une seule fois, l'overhead est insignifiant
pour l'appel, les accès additionnels (conversion de types, appels
croisés, ...) fait depuis le C dépendent de ce que ces routines
devront utilisés; à l'époque de trucs managés le marshalling de Java
/ JNI est loin d'être le pire (il est concrètement non pénalisant).
les problèmes liés aux perfs s'adresseront via soit un codage avec
les API UI Java existantes (certaines sont critiqués pour leur
lenteur comme Swing, d'autres un peu buggée comme AWT; ces critiques
sont soit partisanes, soit trop génériques), soit via un driver
OpenGL ou DirectX impliquant un hard (carte graphique) spéciale.
dans le premier cas, l'overhead d'appel Java<->C est non
significatif, dans le second cas on ne parle plus d'un projet Java
(ou si peu).
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
je te recommande de faire un tour sur http://www.swig.org/
bye,
samuel
je te recommande de faire un tour sur http://www.swig.org/
bye,
samuel
je te recommande de faire un tour sur http://www.swig.org/
bye,
samuel
denebet wrote:Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
denebet wrote:
Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
denebet wrote:Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
Je vais essayer d'éclaircir encore quelques points :
1) Une précision globale : ce n'est pas une seule appli, [...]
2) Ce n'est pas à proprement parler un SIG comme on l'entend en
général, mais plutôt un système de visualisation de données
géoréférencées, et où donc un affichage géographique est sous-jacent.
Ce n'est certainement pas un "mini-sig web" (voir ci-dessous)
3) En ce qui concerne la vitesse de raffraichissement, je pense que
cela tombe dans le cas le plus complexe : [...]
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est principalement
pour la portabilité, la continuité, et le fait de ne pas être lié à M$.
Cependant, au vu de la criticité de l'application, l'important est
qu'elle roule vite, avec le moins possible de mises à jour.
5) du coup, il est possible qu'il soit nécessaire de développer 2 IHM
: si le temps de réponse avec Java n'est pas viable, peut-être la
développer plus près de la machine sous Windows, avec quand même une
version Java en parallèlle.
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
OUI et comme j'ai déjà assez de travail et de langages comme ça
je ne prendrais qu'un seul outil.. (Egalement pour des raisons de
maintenance). Pour Java, j'ai installé il y a 2 jours Eclipse.. Pour un
aute langage, ce serait vraisemblablement du C++ via qquechose comme
VC++..
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
OUI. Ce que vous voulez dire, c'est que je pourrais ouvrir un socket
de communication de chaque côté, et faire passer quelque chose comme
"trace point à 800, 600 de couleur rouge" sur le socket, c'est ça (du C
vers Java) ou "Fait boucle" (de Java vers C") ?
MAis ça ça veut dire redéfinir toutes les opérations possibles en
structure texte, dans les 2 sens, avec un parser... ça me semble très
lourd...
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
Dans ce cas que veux dire "dynamique forcément" ? Un DLL ? un ".so" ?
A l'heure actuelle je fabrique des ".a". L'avantage est que pour la
livraison je livre un binaire, et non pas tout un tas de bibliothèques
(dont de plus la localisation dans le système doit être la même
partout).
Je vais essayer d'éclaircir encore quelques points :
1) Une précision globale : ce n'est pas une seule appli, [...]
2) Ce n'est pas à proprement parler un SIG comme on l'entend en
général, mais plutôt un système de visualisation de données
géoréférencées, et où donc un affichage géographique est sous-jacent.
Ce n'est certainement pas un "mini-sig web" (voir ci-dessous)
3) En ce qui concerne la vitesse de raffraichissement, je pense que
cela tombe dans le cas le plus complexe : [...]
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est principalement
pour la portabilité, la continuité, et le fait de ne pas être lié à M$.
Cependant, au vu de la criticité de l'application, l'important est
qu'elle roule vite, avec le moins possible de mises à jour.
5) du coup, il est possible qu'il soit nécessaire de développer 2 IHM
: si le temps de réponse avec Java n'est pas viable, peut-être la
développer plus près de la machine sous Windows, avec quand même une
version Java en parallèlle.
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
OUI et comme j'ai déjà assez de travail et de langages comme ça
je ne prendrais qu'un seul outil.. (Egalement pour des raisons de
maintenance). Pour Java, j'ai installé il y a 2 jours Eclipse.. Pour un
aute langage, ce serait vraisemblablement du C++ via qquechose comme
VC++..
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
OUI. Ce que vous voulez dire, c'est que je pourrais ouvrir un socket
de communication de chaque côté, et faire passer quelque chose comme
"trace point à 800, 600 de couleur rouge" sur le socket, c'est ça (du C
vers Java) ou "Fait boucle" (de Java vers C") ?
MAis ça ça veut dire redéfinir toutes les opérations possibles en
structure texte, dans les 2 sens, avec un parser... ça me semble très
lourd...
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
Dans ce cas que veux dire "dynamique forcément" ? Un DLL ? un ".so" ?
A l'heure actuelle je fabrique des ".a". L'avantage est que pour la
livraison je livre un binaire, et non pas tout un tas de bibliothèques
(dont de plus la localisation dans le système doit être la même
partout).
Je vais essayer d'éclaircir encore quelques points :
1) Une précision globale : ce n'est pas une seule appli, [...]
2) Ce n'est pas à proprement parler un SIG comme on l'entend en
général, mais plutôt un système de visualisation de données
géoréférencées, et où donc un affichage géographique est sous-jacent.
Ce n'est certainement pas un "mini-sig web" (voir ci-dessous)
3) En ce qui concerne la vitesse de raffraichissement, je pense que
cela tombe dans le cas le plus complexe : [...]
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est principalement
pour la portabilité, la continuité, et le fait de ne pas être lié à M$.
Cependant, au vu de la criticité de l'application, l'important est
qu'elle roule vite, avec le moins possible de mises à jour.
5) du coup, il est possible qu'il soit nécessaire de développer 2 IHM
: si le temps de réponse avec Java n'est pas viable, peut-être la
développer plus près de la machine sous Windows, avec quand même une
version Java en parallèlle.
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
si cette interface n'est pas dispo, on pourra transmettre directement
un java.awt.Graphics aux routines C mais celles-ci seront alors
marquées par le modèle d'abstraction graphique choisi coté Java (donc
sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
OUI et comme j'ai déjà assez de travail et de langages comme ça
je ne prendrais qu'un seul outil.. (Egalement pour des raisons de
maintenance). Pour Java, j'ai installé il y a 2 jours Eclipse.. Pour un
aute langage, ce serait vraisemblablement du C++ via qquechose comme
VC++..
un exemple: le client Flash utilisé par un navigateur.
coté Java les sockets sont simples d'emploi (voir java.net.Socket)
coté C les API unix et win32 sont différentes.
OUI. Ce que vous voulez dire, c'est que je pourrais ouvrir un socket
de communication de chaque côté, et faire passer quelque chose comme
"trace point à 800, 600 de couleur rouge" sur le socket, c'est ça (du C
vers Java) ou "Fait boucle" (de Java vers C") ?
MAis ça ça veut dire redéfinir toutes les opérations possibles en
structure texte, dans les 2 sens, avec un parser... ça me semble très
lourd...
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
oui bien sur, pour le compilo tous peuvent être utilisés s'ils savent
créer une librairie (dynamique forcément) exportant des statiques C.
Dans ce cas que veux dire "dynamique forcément" ? Un DLL ? un ".so" ?
A l'heure actuelle je fabrique des ".a". L'avantage est que pour la
livraison je livre un binaire, et non pas tout un tas de bibliothèques
(dont de plus la localisation dans le système doit être la même
partout).
Jano wrote:denebet wrote:Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
Je ne comprends pas la question. Il me semblait que vous souhaitiez
modifier uniquement la GUI?
Vous pouvez utiliser QT uniquement pour la GUI avec l'avantage sur
java d'être natif et que l'interface C++/lib C est plus facile à
gérer. Vous pouvez aussi utiliser les classes non-gui de Qt, vous
devrez alors modifier votre code mais ce sera le même sous Win et
Linux (et MacOs X). Par contre QT en version non GPL coûte bonbon.
www.trolltech.com
alain
Jano wrote:
denebet wrote:
Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
Je ne comprends pas la question. Il me semblait que vous souhaitiez
modifier uniquement la GUI?
Vous pouvez utiliser QT uniquement pour la GUI avec l'avantage sur
java d'être natif et que l'interface C++/lib C est plus facile à
gérer. Vous pouvez aussi utiliser les classes non-gui de Qt, vous
devrez alors modifier votre code mais ce sera le même sous Win et
Linux (et MacOs X). Par contre QT en version non GPL coûte bonbon.
www.trolltech.com
alain
Jano wrote:denebet wrote:Qt est pas mal pour la compatibilité Linux et Windows, en plus cela
s'interface facilement sur des libs en C.
Alain
Avez-vous une bonne réference là-dessus s'il vous plaît ?
Est-ce juste un enrobage de code ?
Je ne comprends pas la question. Il me semblait que vous souhaitiez
modifier uniquement la GUI?
Vous pouvez utiliser QT uniquement pour la GUI avec l'avantage sur
java d'être natif et que l'interface C++/lib C est plus facile à
gérer. Vous pouvez aussi utiliser les classes non-gui de Qt, vous
devrez alors modifier votre code mais ce sera le même sous Win et
Linux (et MacOs X). Par contre QT en version non GPL coûte bonbon.
www.trolltech.com
alain
vous concluez par "je livre un binaire", je pense que l'on parle bien
d'un seul exécutable (que j'appelerais "appli") constitué de nombreux
modules (actuellement librairies statiques).
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est
principalement pour la portabilité, la continuité, et le fait de ne
pas être lié à M$.
il peut ne pas être lié à M$ simplement en utilisant des PC sous
linux (ou lieu de PC sous Windows et à la place des stations
actuelles) :
pour le reste vous (et vous seul) devrez vous acquitter
de licences pour les outils de dev. M$ (un compilo free ne me parait
pas pérenne, ni rentable: perte de temps plus importante que gain
initial)
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
en gros avoir accès, depuis le Java, à toutes les structures (listes
des sources d'objets, d'events, etc). dans votre version actuelle -
basée sur des lib. statiques - vont accéder directement pour chaque
besoin à un extern d'un des modules; avec une interface Java vous
devrez définir / implémenter des accessors (getXX / setXX) pour
chacun de ces accès.Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
8000 routines high-level, utilisateurs, toutes invoquables par menu,
palette d'outils, etc ?? dans ce cas; il faudra 8000 wrapper
Java<->C, ie 8000 méthodes déclarées native en Java et implémentés en
C pour appeler la méthode correspondante de la lib.
si cette interface n'est pas dispo, on pourra transmettre
directement >> un java.awt.Graphics aux routines C mais celles-ci
seront alors >> marquées par le modèle d'abstraction graphique choisi
coté Java (donc >> sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
"pas dispo" signifiait si vous choisissez de ne pas coder une telle
interface (ie de coder dans le C faisant la liaison Java/C des appels
à un certain type - fixé / figé - de primitives graphiques).
car, en effet, plusieurs "systèmes graphiques" (le terme est un peu
fort) ou "modèle d'abstraction graphique" existent sous Java; ils se
distinguent par différents jeux d'API, des possibilités (types de
contrôles, ...) différentes et des fonctionnalités globales
(customisation, look'n'feel, ...) différentes. les 2 plus classiques
fournis par SUN sont AWT (abstract window toolkit) présent depuis
Java 1.0, revisité en 1.1 (ça date mais c'est toujours présent et
fonctionnel), et Swing qui a démarré comme un add-on et qui est
intégré depuis Java 2.0 java.awt.Graphics est la classe de base du
système graphique de AWT, elle définit toutes les primitives de tracé
(en autres) que vous pourriez utiliser.
IMHO, si l'outil est compliqué au point d'interdire l'apprentissage
d'un second outil c'est que celui-ci est mauvais et ne devrait pas
être retenu. Eclipse me parait un bon choix pour la partie Java; un
environnement Visual Studio me parait indiqué pour la partie C/C++ -
oui, il existe un plug-in GNU C/C++ pour Eclipse, non il n'est pas
comparable à Studio.
la "syntaxe" des messages peut être binaire et ne pas nécessiter de
parser (seulement des switch); cette option pré-suppose l'existence
exhaustive de primitives de tracé coté lib. C (les primitives
Draw_Line, etc); ces primitives aujourd'hui "externes" (apportées
statiquement par le module d'interface) seraient implémentés dans un
nouveau module implémentant une communication socket.
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
qlq primitives systèmes devront être changées, je ne pense pas que
cela représente une charge importante. (fr.comp.lang.c si besoin).
librairie externe chargée dynamiquement donc non lié statiquement au
programme principal ... simplement parce que Java n'est pas un
langage statique (ne repose pas sur une définition statique du code).
vous concluez par "je livre un binaire", je pense que l'on parle bien
d'un seul exécutable (que j'appelerais "appli") constitué de nombreux
modules (actuellement librairies statiques).
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est
principalement pour la portabilité, la continuité, et le fait de ne
pas être lié à M$.
il peut ne pas être lié à M$ simplement en utilisant des PC sous
linux (ou lieu de PC sous Windows et à la place des stations
actuelles) :
pour le reste vous (et vous seul) devrez vous acquitter
de licences pour les outils de dev. M$ (un compilo free ne me parait
pas pérenne, ni rentable: perte de temps plus importante que gain
initial)
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
en gros avoir accès, depuis le Java, à toutes les structures (listes
des sources d'objets, d'events, etc). dans votre version actuelle -
basée sur des lib. statiques - vont accéder directement pour chaque
besoin à un extern d'un des modules; avec une interface Java vous
devrez définir / implémenter des accessors (getXX / setXX) pour
chacun de ces accès.
Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
8000 routines high-level, utilisateurs, toutes invoquables par menu,
palette d'outils, etc ?? dans ce cas; il faudra 8000 wrapper
Java<->C, ie 8000 méthodes déclarées native en Java et implémentés en
C pour appeler la méthode correspondante de la lib.
si cette interface n'est pas dispo, on pourra transmettre
directement >> un java.awt.Graphics aux routines C mais celles-ci
seront alors >> marquées par le modèle d'abstraction graphique choisi
coté Java (donc >> sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
"pas dispo" signifiait si vous choisissez de ne pas coder une telle
interface (ie de coder dans le C faisant la liaison Java/C des appels
à un certain type - fixé / figé - de primitives graphiques).
car, en effet, plusieurs "systèmes graphiques" (le terme est un peu
fort) ou "modèle d'abstraction graphique" existent sous Java; ils se
distinguent par différents jeux d'API, des possibilités (types de
contrôles, ...) différentes et des fonctionnalités globales
(customisation, look'n'feel, ...) différentes. les 2 plus classiques
fournis par SUN sont AWT (abstract window toolkit) présent depuis
Java 1.0, revisité en 1.1 (ça date mais c'est toujours présent et
fonctionnel), et Swing qui a démarré comme un add-on et qui est
intégré depuis Java 2.0 java.awt.Graphics est la classe de base du
système graphique de AWT, elle définit toutes les primitives de tracé
(en autres) que vous pourriez utiliser.
IMHO, si l'outil est compliqué au point d'interdire l'apprentissage
d'un second outil c'est que celui-ci est mauvais et ne devrait pas
être retenu. Eclipse me parait un bon choix pour la partie Java; un
environnement Visual Studio me parait indiqué pour la partie C/C++ -
oui, il existe un plug-in GNU C/C++ pour Eclipse, non il n'est pas
comparable à Studio.
la "syntaxe" des messages peut être binaire et ne pas nécessiter de
parser (seulement des switch); cette option pré-suppose l'existence
exhaustive de primitives de tracé coté lib. C (les primitives
Draw_Line, etc); ces primitives aujourd'hui "externes" (apportées
statiquement par le module d'interface) seraient implémentés dans un
nouveau module implémentant une communication socket.
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
qlq primitives systèmes devront être changées, je ne pense pas que
cela représente une charge importante. (fr.comp.lang.c si besoin).
librairie externe chargée dynamiquement donc non lié statiquement au
programme principal ... simplement parce que Java n'est pas un
langage statique (ne repose pas sur une définition statique du code).
vous concluez par "je livre un binaire", je pense que l'on parle bien
d'un seul exécutable (que j'appelerais "appli") constitué de nombreux
modules (actuellement librairies statiques).
4) En ce qui concerne le choix Java ou autre, le "client" principal
est relativement peu exigeant. Si il a pensé Java, c'est
principalement pour la portabilité, la continuité, et le fait de ne
pas être lié à M$.
il peut ne pas être lié à M$ simplement en utilisant des PC sous
linux (ou lieu de PC sous Windows et à la place des stations
actuelles) :
pour le reste vous (et vous seul) devrez vous acquitter
de licences pour les outils de dev. M$ (un compilo free ne me parait
pas pérenne, ni rentable: perte de temps plus importante que gain
initial)
vous devrez manipuler depuis Java les grands items du moteur
(accès aux collections de données, aux règles d'inférences, ...)
J'avoue ne pas suivre le "accès aux collections de données, aux
règles..."...
en gros avoir accès, depuis le Java, à toutes les structures (listes
des sources d'objets, d'events, etc). dans votre version actuelle -
basée sur des lib. statiques - vont accéder directement pour chaque
besoin à un extern d'un des modules; avec une interface Java vous
devrez définir / implémenter des accessors (getXX / setXX) pour
chacun de ces accès.Par contre oui le C contient environ 8000 routines appelées depuis
l'IHM.
8000 routines high-level, utilisateurs, toutes invoquables par menu,
palette d'outils, etc ?? dans ce cas; il faudra 8000 wrapper
Java<->C, ie 8000 méthodes déclarées native en Java et implémentés en
C pour appeler la méthode correspondante de la lib.
si cette interface n'est pas dispo, on pourra transmettre
directement >> un java.awt.Graphics aux routines C mais celles-ci
seront alors >> marquées par le modèle d'abstraction graphique choisi
coté Java (donc >> sûrement moins pérenne).
Là j'avoue que vous me perdez.. Je ne comprends pas "pas dispo" et
"modèles d'abstraction graphique" .. et pas non plus
"Java.awt.Graphics".. Mais c'est sans doute que je ne connais rien à
JAva..
"pas dispo" signifiait si vous choisissez de ne pas coder une telle
interface (ie de coder dans le C faisant la liaison Java/C des appels
à un certain type - fixé / figé - de primitives graphiques).
car, en effet, plusieurs "systèmes graphiques" (le terme est un peu
fort) ou "modèle d'abstraction graphique" existent sous Java; ils se
distinguent par différents jeux d'API, des possibilités (types de
contrôles, ...) différentes et des fonctionnalités globales
(customisation, look'n'feel, ...) différentes. les 2 plus classiques
fournis par SUN sont AWT (abstract window toolkit) présent depuis
Java 1.0, revisité en 1.1 (ça date mais c'est toujours présent et
fonctionnel), et Swing qui a démarré comme un add-on et qui est
intégré depuis Java 2.0 java.awt.Graphics est la classe de base du
système graphique de AWT, elle définit toutes les primitives de tracé
(en autres) que vous pourriez utiliser.
IMHO, si l'outil est compliqué au point d'interdire l'apprentissage
d'un second outil c'est que celui-ci est mauvais et ne devrait pas
être retenu. Eclipse me parait un bon choix pour la partie Java; un
environnement Visual Studio me parait indiqué pour la partie C/C++ -
oui, il existe un plug-in GNU C/C++ pour Eclipse, non il n'est pas
comparable à Studio.
la "syntaxe" des messages peut être binaire et ne pas nécessiter de
parser (seulement des switch); cette option pré-suppose l'existence
exhaustive de primitives de tracé coté lib. C (les primitives
Draw_Line, etc); ces primitives aujourd'hui "externes" (apportées
statiquement par le module d'interface) seraient implémentés dans un
nouveau module implémentant une communication socket.
Et d'autre part cela voudrait sans doute dire modifier le code
C pour pouvoir gérer les sockets Windows, ce dont je ne suis pas sûr
d'avoir envie ...
qlq primitives systèmes devront être changées, je ne pense pas que
cela représente une charge importante. (fr.comp.lang.c si besoin).
librairie externe chargée dynamiquement donc non lié statiquement au
programme principal ... simplement parce que Java n'est pas un
langage statique (ne repose pas sur une définition statique du code).