je n'ai jamais programmé en cocoa, seulement en java et assembleur (je
connais un peu applescript) je souhaite faire un petit bout d'essai en
cocoa.
j'ai une base de données (aujourd'hui se sont des objets java, mais pour
construire cette bd j'ai des fichiers textes que je pourrais convertir).
cette base de données décrit la système des appellations de vin
(ambition mondiale, réalisation france quasi totale et quelques autres
pays démarés)
donc je voudrai m'essayer en cocoa sur un exemple concret : représenter
dans une fenêtre l'arbre des appellations "mondiales"
(copie écran à http://yvon-thoraval.com/jCave/)
et ensuite les feuilles sur les cépages
(copie écran à
http://yvon-thoraval.com/jCave/index.php?page=vp-view&lang=fr&mode=zoom)
et ainsi de suite pour traduire mon appli java en cocoa.
(outre appellations et cépages dans mon appli il y a un carnet
d'adresses et une gestion des bouteilles en cave)
où trouver des infos pour démarrer ainsi ?
exemples ?
supposons maintenant que je finisse cette appli en cocoa. Bon des gens
me demandent la même chose sous unix et win* y a t'il moyen de traduire
depuis du cocoa ou faut-il tout refaire ?
avec des pools d'objets reutilisables on peut limiter (spectaculairement) les ralentissements du GC
de plus sur un bi-pro il peut etre // au traitement
oui, donc il faut s'assurer avoir un pool, càd conserver les mêmes objets pendant tout le runtime, il vaut mieux alors avoir des threads séparés par ex :
thread 1 - gestion pool (bd et objets) ; thread 2 - gestion ui ;
apr ex ? -- votez non ! non à paris 2012 ! non à l'otan ! non à l'onu et à l'omc !
Bruno Causse <pasde.bcausse.spam@wanadoo.fr> wrote:
avec des pools d'objets reutilisables on peut limiter
(spectaculairement) les ralentissements du GC
de plus sur un bi-pro il peut etre // au traitement
oui, donc il faut s'assurer avoir un pool, càd conserver les mêmes
objets pendant tout le runtime, il vaut mieux alors avoir des threads
séparés par ex :
thread 1 - gestion pool (bd et objets) ;
thread 2 - gestion ui ;
apr ex ?
--
votez non !
non à paris 2012 !
non à l'otan !
non à l'onu et à l'omc !
avec des pools d'objets reutilisables on peut limiter (spectaculairement) les ralentissements du GC
de plus sur un bi-pro il peut etre // au traitement
oui, donc il faut s'assurer avoir un pool, càd conserver les mêmes objets pendant tout le runtime, il vaut mieux alors avoir des threads séparés par ex :
thread 1 - gestion pool (bd et objets) ; thread 2 - gestion ui ;
apr ex ? -- votez non ! non à paris 2012 ! non à l'otan ! non à l'onu et à l'omc !
Schmurtz
(Une bévue) wrote:
Schmurtz wrote:
Si la partie lente de ton code forme un bloc (ie, qu'elle n'est pas éparpillé dans toute l'appli), ou alors peut être centraliser sur une seule classe, il fait savoir que tu peux garder tout ton code java et ne réécrire que les fonctions coûteuses de cette classe en C.
ben, c'est intéressant ce que tu dis because, la partie lente c'est ma base de donnée (objet) et sa gestion (recherche multi critères).
donc il faut que je me senseigne comment on fait une persistence en C...
le reste c'est l'affichage (actuellement du swingX ie swing amélioré) qui est assez proche, fonctionnellement, de ce qu'on peut faire en cocoa (chez sun certaines particularités des tables en cocoa sont prises en design goal par exemple le sorting...)
ce que je dois, à part l'ui, implémenter en c c'est la persistence d'objets tels que : []
Ne sachant pas exactement comment fonctionne les bases de données en java, je ne pourrais pas trop t'aider là dessus.
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très important de créer des index sur certains champs, ce qui permet ensuite d'effectuer des recherches beaucoup plus rapide (j'ai réussi, juste en rajoutant un index sur un champ clé, de passer d'un temps de calcul de 1-2 minutes à 10 secondes sur une base d'environ 10000 entrées !). Je ne sais pas si/comment java gère les index, mais c'est un truc à fouiller.
-- Schmurtz
une.bevueVOTEZ@NONfree.fr (Une bévue) wrote:
Schmurtz <moi@ici.com> wrote:
Si la partie lente de ton code forme un bloc (ie, qu'elle n'est pas
éparpillé dans toute l'appli), ou alors peut être centraliser sur une
seule classe, il fait savoir que tu peux garder tout ton code java et ne
réécrire que les fonctions coûteuses de cette classe en C.
ben, c'est intéressant ce que tu dis because, la partie lente c'est ma
base de donnée (objet) et sa gestion (recherche multi critères).
donc il faut que je me senseigne comment on fait une persistence en C...
le reste c'est l'affichage (actuellement du swingX ie swing amélioré)
qui est assez proche, fonctionnellement, de ce qu'on peut faire en cocoa
(chez sun certaines particularités des tables en cocoa sont prises en
design goal par exemple le sorting...)
ce que je dois, à part l'ui, implémenter en c c'est la persistence
d'objets tels que :
[]
Ne sachant pas exactement comment fonctionne les bases de données en
java, je ne pourrais pas trop t'aider là dessus.
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très
important de créer des index sur certains champs, ce qui permet ensuite
d'effectuer des recherches beaucoup plus rapide (j'ai réussi, juste en
rajoutant un index sur un champ clé, de passer d'un temps de calcul de
1-2 minutes à 10 secondes sur une base d'environ 10000 entrées !). Je ne
sais pas si/comment java gère les index, mais c'est un truc à fouiller.
Si la partie lente de ton code forme un bloc (ie, qu'elle n'est pas éparpillé dans toute l'appli), ou alors peut être centraliser sur une seule classe, il fait savoir que tu peux garder tout ton code java et ne réécrire que les fonctions coûteuses de cette classe en C.
ben, c'est intéressant ce que tu dis because, la partie lente c'est ma base de donnée (objet) et sa gestion (recherche multi critères).
donc il faut que je me senseigne comment on fait une persistence en C...
le reste c'est l'affichage (actuellement du swingX ie swing amélioré) qui est assez proche, fonctionnellement, de ce qu'on peut faire en cocoa (chez sun certaines particularités des tables en cocoa sont prises en design goal par exemple le sorting...)
ce que je dois, à part l'ui, implémenter en c c'est la persistence d'objets tels que : []
Ne sachant pas exactement comment fonctionne les bases de données en java, je ne pourrais pas trop t'aider là dessus.
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très important de créer des index sur certains champs, ce qui permet ensuite d'effectuer des recherches beaucoup plus rapide (j'ai réussi, juste en rajoutant un index sur un champ clé, de passer d'un temps de calcul de 1-2 minutes à 10 secondes sur une base d'environ 10000 entrées !). Je ne sais pas si/comment java gère les index, mais c'est un truc à fouiller.
-- Schmurtz
pasde.bcausse.spam
Luc Heinrich wrote:
Ca commence à faire beaucoup de si... :>
si == java optimisé :-) -- Bruno Causse http://perso.wanadoo.fr/othello
Luc Heinrich <lucsky@mac.com> wrote:
Ca commence à faire beaucoup de si... :>
si == java optimisé :-)
--
Bruno Causse
http://perso.wanadoo.fr/othello
je connais peu (pas) d'outil gratuit mais jProfiler est testable 15 jours.
ok, merci pour l'info, je pense que ça coince autour des requêtes sur la bd...
une.bevueVOTEZ
Schmurtz wrote:
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très important de créer des index sur certains champs
oui, merci, je sais ça, j'ai pratiqué MySQL et PHP et aussi PostGres et java. Mais bon là, il s'agit d'une bd objet ce qui n'a pas grans chose à voir avec MySQL et autres bases de type sql.
comment ça marche ?
je définis un objet "Bottle" par ex :
public class Bottle { public String description; public String appellation; public Integer vintage; [...]
public String drinkWith;
public Bottle() { } }
je définis une Bottle :
Bottle symphorine = new Bottle(); symphorine.description = "Cuvée Symphorine sélection 1998"; symphorine.appellation = "Grand Cru Blanc de Blancs"; symphorine.vintage = new Integer(1998);
j'entre cette Bottle dans la bd :
public static void init""""""""() { ObjectContainer db = null; Db4o.configure().messageLevel(-1); try { db = Db4o.openFile(FILENAME); db.set((Bottle) symphorine); db.commit(); db.close(); } finally { if (db != null) db.close(); } }
on peut aussi ajouter un index mais ce n'est pas nécessairement plus rapide, l'indexation dans le cas des bd objet n'est intéressante que pour un très grand nombre d'objets, ce qui ne semble pas être mon cas...
-- votez non ! non à paris 2012 ! non à l'otan ! non à l'onu et à l'omc !
Schmurtz <moi@ici.com> wrote:
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très
important de créer des index sur certains champs
oui, merci, je sais ça, j'ai pratiqué MySQL et PHP et aussi PostGres et
java. Mais bon là, il s'agit d'une bd objet ce qui n'a pas grans chose à
voir avec MySQL et autres bases de type sql.
comment ça marche ?
je définis un objet "Bottle" par ex :
public class Bottle {
public String description;
public String appellation;
public Integer vintage;
[...]
public String drinkWith;
public Bottle() {
}
}
je définis une Bottle :
Bottle symphorine = new Bottle();
symphorine.description = "Cuvée Symphorine sélection 1998";
symphorine.appellation = "Grand Cru Blanc de Blancs";
symphorine.vintage = new Integer(1998);
j'entre cette Bottle dans la bd :
public static void init""""""""() {
ObjectContainer db = null;
Db4o.configure().messageLevel(-1);
try {
db = Db4o.openFile(FILENAME);
db.set((Bottle) symphorine);
db.commit();
db.close();
} finally {
if (db != null)
db.close();
}
}
on peut aussi ajouter un index mais ce n'est pas nécessairement plus
rapide, l'indexation dans le cas des bd objet n'est intéressante que
pour un très grand nombre d'objets, ce qui ne semble pas être mon cas...
--
votez non !
non à paris 2012 !
non à l'otan !
non à l'onu et à l'omc !
Tout ce que je peux te dire, testé sur MySQL, c'est qu'il est très important de créer des index sur certains champs
oui, merci, je sais ça, j'ai pratiqué MySQL et PHP et aussi PostGres et java. Mais bon là, il s'agit d'une bd objet ce qui n'a pas grans chose à voir avec MySQL et autres bases de type sql.
comment ça marche ?
je définis un objet "Bottle" par ex :
public class Bottle { public String description; public String appellation; public Integer vintage; [...]
public String drinkWith;
public Bottle() { } }
je définis une Bottle :
Bottle symphorine = new Bottle(); symphorine.description = "Cuvée Symphorine sélection 1998"; symphorine.appellation = "Grand Cru Blanc de Blancs"; symphorine.vintage = new Integer(1998);
j'entre cette Bottle dans la bd :
public static void init""""""""() { ObjectContainer db = null; Db4o.configure().messageLevel(-1); try { db = Db4o.openFile(FILENAME); db.set((Bottle) symphorine); db.commit(); db.close(); } finally { if (db != null) db.close(); } }
on peut aussi ajouter un index mais ce n'est pas nécessairement plus rapide, l'indexation dans le cas des bd objet n'est intéressante que pour un très grand nombre d'objets, ce qui ne semble pas être mon cas...
-- votez non ! non à paris 2012 ! non à l'otan ! non à l'onu et à l'omc !
Laurent PERON
Alors la c'est pas gagner, Objective-c repose lui aussi sur un runtime. Je ne suis pas sur que les perf Objective-c soit supérieur a java.
Je n'ai pas de chiffres, mais c'est sûr qu'une utilisation "naïve" d'objc donnera un résultat pas bien terrible. Mais bon, pour ramer autant que java, il faut quand même en vouloir.
En utilisant du typage statique, et `methodForSelector' il y a moyen d'avoir des perfs correctes. De plus, en objective-c, tout ce qui est du C standard est compilé "normalement", et reste du C standard qui tourne vite.
Le pire en objective-c serait d'associer les défauts du monde C++ avec les défauts d'objective-c, respectivement des recopies d'objets à outrance, et de la liaison dynamique systématique. Alors là, oui, ça va ramer.
Si tu veux un truc portable osX, windows et linux, pourquoi ne pas jeter un oeil à RealBasic ?
LaP
LaP
Alors la c'est pas gagner, Objective-c repose lui aussi sur un runtime.
Je ne suis pas sur que les perf Objective-c soit supérieur a java.
Je n'ai pas de chiffres, mais c'est sûr qu'une utilisation "naïve"
d'objc donnera un résultat pas bien terrible. Mais bon, pour ramer
autant que java, il faut quand même en vouloir.
En utilisant du typage statique, et `methodForSelector' il y a moyen
d'avoir des perfs correctes. De plus, en objective-c, tout ce qui est du
C standard est compilé "normalement", et reste du C standard qui tourne
vite.
Le pire en objective-c serait d'associer les défauts du monde C++
avec les défauts d'objective-c, respectivement des recopies d'objets à
outrance, et de la liaison dynamique systématique. Alors là, oui, ça va
ramer.
Si tu veux un truc portable osX, windows et linux, pourquoi ne pas
jeter un oeil à RealBasic ?
Alors la c'est pas gagner, Objective-c repose lui aussi sur un runtime. Je ne suis pas sur que les perf Objective-c soit supérieur a java.
Je n'ai pas de chiffres, mais c'est sûr qu'une utilisation "naïve" d'objc donnera un résultat pas bien terrible. Mais bon, pour ramer autant que java, il faut quand même en vouloir.
En utilisant du typage statique, et `methodForSelector' il y a moyen d'avoir des perfs correctes. De plus, en objective-c, tout ce qui est du C standard est compilé "normalement", et reste du C standard qui tourne vite.
Le pire en objective-c serait d'associer les défauts du monde C++ avec les défauts d'objective-c, respectivement des recopies d'objets à outrance, et de la liaison dynamique systématique. Alors là, oui, ça va ramer.
Si tu veux un truc portable osX, windows et linux, pourquoi ne pas jeter un oeil à RealBasic ?
LaP
LaP
Laurent PERON
une fois que le code java est passé au hotspot (ou JIT) quelle est la difference?
La différence est la qualité de l'optimiseur. Avec GCC 4, objective c va tourner encore plus vite qu'avant. Il y a longtemps que je ne me suis pas tenu au courant des optimisations proposées par les JIT, mais ça ne doit pas être facile pour un JIT de faire des optimisations globales (comme le fait un compilateur) alors qu'il n'a que du code déjà transformé à se mettre sous la dent.
LaP
une fois que le code java est passé au hotspot (ou JIT) quelle est la
difference?
La différence est la qualité de l'optimiseur. Avec GCC 4, objective c
va tourner encore plus vite qu'avant. Il y a longtemps que je ne me suis
pas tenu au courant des optimisations proposées par les JIT, mais ça ne
doit pas être facile pour un JIT de faire des optimisations globales
(comme le fait un compilateur) alors qu'il n'a que du code déjà
transformé à se mettre sous la dent.
une fois que le code java est passé au hotspot (ou JIT) quelle est la difference?
La différence est la qualité de l'optimiseur. Avec GCC 4, objective c va tourner encore plus vite qu'avant. Il y a longtemps que je ne me suis pas tenu au courant des optimisations proposées par les JIT, mais ça ne doit pas être facile pour un JIT de faire des optimisations globales (comme le fait un compilateur) alors qu'il n'a que du code déjà transformé à se mettre sous la dent.