Ancestris - Forum

Ancestris Support => FRANÇAIS => Topic started by: GillesF on May 02, 2020, 17:49:03

Title: NetBeans Développement
Post by: GillesF on May 02, 2020, 17:49:03
Je suis débutant développeur Java avec NetBeans.
Je suis sous Windows 10.
J'ai téléchargé les fichiers sources Ancestris mais je n'arrive pas compiler avec NetBeans.
J'ai le message suivant lorsque je lance le Build :

platform.download:
Downloading clusters harness|platform
Getting: http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar (http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar)
To: C:\Users\Gilles\AppData\Local\Temp\tasks.jar
local file date : Fri Apr 20 08:35:10 CEST 2018
http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar (http://bits.netbeans.org/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar) moved to http://137.254.56.27/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar (http://137.254.56.27/dev/nbms-and-javadoc/lastSuccessfulBuild/artifact/nbbuild/netbeans/harness/tasks.jar)
Not modified - so not downloaded
Downloading http://updates.netbeans.org/netbeans/updates/8.2/uc/final/certified/catalog.xml.gz (http://updates.netbeans.org/netbeans/updates/8.2/uc/final/certified/catalog.xml.gz)
H:\Ancestris-11\AncestrisCore\build.xml:7: The following error occurred while executing this line:
H:\Ancestris-11\AncestrisCore\nbproject\build-impl.xml:41: The following error occurred while executing this line:
H:\Ancestris-11\AncestrisCore\nbproject\platform.xml:29: Fin prématurée du fichier.


Quelqu'un pourrait-il m'aider ?

Title: Re: NetBeans Développement
Post by: Zurga on May 02, 2020, 19:48:23
Normalement, Netbeans télécharge les répertoire Platform et Harness à partir du site d'Oracle, sauf que la version de Netbeans est un peu vieille et les liens automatiques n'existent plus.
Du coup, je vous invite à prendre le zip d'Ancestris et d'en extraire les deux répertoire platform et harness.
Ensuite, vous les référencerez dans Netbeans et cela devrait fonctionner.

En passant, la version utilisée est Netbeans 8.2.

Zurga
Title: Re : NetBeans Développement
Post by: GillesF on May 03, 2020, 09:50:53
Merci Zurga.
Mais j'ai installé la version NetBeans IDE 11.3, est-ce qu'il faut que je revienne à la version 8.2 ?

De plus, ou puis-je trouver la version Zip de Ancestris ?

J'avance mais doucement !!!
Merci encore.
Title: Re: NetBeans Développement
Post by: Zurga on May 03, 2020, 10:02:00
L'application ne compile pas avec Netbeans 11.3, il vous faut mettre la  version 8.2 et un Java 8.
Le zip est disponible sur le site d'Ancestris (téléchargez la version quotidienne).

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 06, 2020, 13:36:15
Salut Zurga,
J'ai tout réinstallé comme suit sur Windows 10 :
- jdk-8u241-windows-x64.exe
- netbeans-8.2-windows.exe
- J'ai reconfiguré le projet Ancestris-11 pour la plateforme. (Voir les captures écrans : https://3w-gfo.fr/Dev-Ancestris.pdf )

J'ai fait les mise à jour demandées. Mais pas de meilleurs résultats, toujours la même erreur.
Je ne vois pas où j'ai merdé !!!

Merci si tu peux m'aider.
Title: Re: NetBeans Développement
Post by: Zurga on May 06, 2020, 18:56:51
Je viens de faire une nouvelle installation sur mon ordinateur, mais visiblement, cela n'a pas reproduit votre problème.
Je n'ai pas de réponse à ce stade pour vous aider.
Je suppose que vous avez bien autorisé Netbeans à accéder à internet.

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 06, 2020, 19:21:27
Oui en effet, Netbeans a bien accès à internet.
Je vais chercher encore le problème, mais là je sature un peu !!!

Merci encore pour ton aide.
Gilles
Title: Re : NetBeans Développement
Post by: GillesF on May 06, 2020, 19:35:32
Peux-tu me dire à quoi sert le fichier "C:\Users\Gilles\AppData\Local\Temp\tasks.jar" qui est téléchargé quand je fais le build ?
De même pour ce fichier :
Downloading http://updates.netbeans.org/netbeans/updates/8.2/uc/final/certified/catalog.xml.gz

Gilles
Title: Re : NetBeans Développement
Post by: Zurga on May 06, 2020, 21:31:10
En fait, je n'en sais rien.
C'est de la cuisine interne de Netbeans.

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 06, 2020, 21:50:29
Merci quand même pour ton aide Zurga ;D
Je vais continué mes recherches pour arriver à compiler le projet sous Windows 10.


A+
Gilles
Title: Re: NetBeans Développement
Post by: GillesF on May 09, 2020, 10:14:22
Bonjour,
Ma config :

- Windows 10
- JDK 8
- NetBeans 8.2

J'ai enfin réussi à compiler Ancestris-11, mais j'ai l'erreur ci-dessous à la compilation :

platform.download:
ant -f H:\\svn\\ancestris\\AncestrisCore build
branding:
Building jar: H:\svn\ancestris\AncestrisCore\build\cluster\modules\locale\org-netbeans-core-windows_ancestris_nl.jar
files-init:
release:
suite.build:
ancestris.api.lnf.taskdefs:
ancestris.api.lnf.common-init:
ancestris.api.lnf.projectized-common.basic-init:
ancestris.api.lnf.basic-init:
ancestris.api.lnf.files-init:
ancestris.api.lnf.nbm-license-init:
ancestris.api.lnf.build-init:
Scanning for modules in H:\svn\netbeans_platform_8.2\harness
Scanning for modules in H:\svn\netbeans_platform_8.2\platform
Scanning for modules in suite H:\svn\ancestris\AncestrisCore
warning: had to upgrade dependencies for module ancestris.api.lnf: added = [module org.openide.util.ui > 9.3] removed = []; details: [#243100: Separate desktop-independent utilities]
ancestris.api.lnf.init:
ancestris.api.lnf.up-to-date:
ancestris.api.lnf.compile:
H:\svn\netbeans_platform_8.2\harness\suite.xml:187: The following error occurred while executing this line:
H:\svn\ancestris\AncestrisCore\nbproject\ancestris-tasks.xml:5: Execute failed:
java.io.IOException: Cannot run program "svn" (in directory "H:\svn\ancestris\AncestrisCore\api.lnf"): CreateProcess error=2, Le fichier spécifié est introuvable
   at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
   at java.lang.Runtime.exec(Runtime.java:620)
   at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
   at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:426)
   at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:440)
   at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:629)
   at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:670)
   at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:496)
   at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
   at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
   at org.apache.tools.ant.Task.perform(Task.java:348)
   at org.apache.tools.ant.Target.execute(Target.java:435)
   at org.apache.tools.ant.Target.performTasks(Target.java:456)
   at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
   at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
   at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
   at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
   at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:309)
   at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:224)
   at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
   at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
   at org.apache.tools.ant.Task.perform(Task.java:348)
   at org.apache.tools.ant.Target.execute(Target.java:435)
   at org.apache.tools.ant.Target.performTasks(Target.java:456)
   at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
   at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
   at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
   at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
   at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:286)
   at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:555)
   at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
Caused by: java.io.IOException: CreateProcess error=2, Le fichier spécifié est introuvable
   at java.lang.ProcessImpl.create(Native Method)
   at java.lang.ProcessImpl.<init>(ProcessImpl.java:444)
   at java.lang.ProcessImpl.start(ProcessImpl.java:140)
   at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
   ... 36 more
BUILD FAILED (total time: 2 seconds)



Avez-vous une idée du problème ???
Gilles.
Title: Re : NetBeans Développement
Post by: Zurga on May 09, 2020, 11:13:33
Ca, oui, je sais.
Les fichiers ant sont configurés pour vérifier le dernier commit svn et ajouter le numéro du commit dans le numéro de version.
Si ou n'avez pas créé un raccourci pour svn (ce qui est assez trivial avec Linux, mais un peu plus touchy pour windows), cela ne marche pas.
La solution est de désactiver ce contrôle (c'est ce que j'ai fait sur mon poste de dev).

Voila ce qu'il faut modifier :
fichier ancestris-tasks.xml : (sources/AncestrisCore/nbproject)
<target name="-svn-check">
       <!-- <exec executable="svn" failonerror="false"
              outputproperty="buildversion" errorproperty="erroroutput">
            <arg value="info"/>
            <arg value="- -xml"/>
        </exec>
      <condition property="svn-no-error">
            <length string="${erroroutput}" length="0"/>
        </condition>
   -->   </target>

fichier ancestris-tasks.xml (sources/Ancestrisextensions/nbproject) :
 <target name="-svn-check">
    <!--    <exec executable="svn" failonerror="false"
              outputproperty="buildversion" errorproperty="erroroutput">
                  <arg value="info"/>
            <arg value="- -xml"/> 
        </exec>
        <condition property="svn-no-error">
            <length string="${erroroutput}" length="0"/>
        </condition>
-->    </target>

Cela devrait vous permettre de compiler.

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 09, 2020, 12:58:43
Impeccable Zurga  :)


ça compile avec plein de "warning" mais ça arrive jusqu'au bout.
Je vais maintenant essayer de développer un plugin. ça va me prendre du temps car je suis débutant en Java.
Si j'avance bien, je demanderai un compte développeur à François.


Merci encore.
Gilles
Title: Re : NetBeans Développement
Post by: Zurga on May 09, 2020, 12:59:52
Vous voulez développer quoi comme plugin ?

Zurga
Title: Re : NetBeans Développement
Post by: GillesF on May 09, 2020, 14:04:18
Salut,Je cherche à développer un plugin qui me permettrait de générer les "Rendus Graphiques Étendus de l'Arbre" de tous les individus de mon arbre automatiquement en .svg vers un dossier de mon PC.
Ceci en donnant un préfixe au nom des fichiers à générer suivi de "I+n° individu".( Exemple : gillesI24.svg)
La génération se ferait avec les options renseignés dans l'application "Lites et Rapports", "Rendus Graphiques Étendus de l'Arbre", onglet "Options".

Ceci afin d'alimenter mon site WodrPress en graphique : https://genea.3w-gfo.fr

Bon mais c'est pas encore gagné !!! Il faut que je comprenne comment ça marche au niveau du code.


Gilles.
Title: Re : Re : NetBeans Développement
Post by: Zurga on May 09, 2020, 14:14:38
Beau projet.
Bon mais c'est pas encore gagné !!! Il faut que je comprenne comment ça marche au niveau du code.
Pas mieux.
Je ne comprends toujours pas l'algorithme d'affichage, mais j'avoue ne pas avoir cherché longtemps.
Bon courage.

Par contre ce n'est pas un nouveau plugin, c'est la mise à jour du plugin existant.
Ce rapport est dans le projet : Rapports - Représentation graphique d'arbre

Zurga
Title: Re : NetBeans Développement
Post by: GillesF on May 09, 2020, 15:44:04
Merci Zurga,
Oui en effet il faut du courage et de la persévérance !

Je vais regardé la modification du plugin : Rapports - Représentation graphique d'arbre

A+
Gilles
Title: Re : NetBeans Développement
Post by: emmanuel.gil on May 12, 2020, 10:36:04
Bonjour,
Je viens d'essayer d'installer le système de développement sur un ordinateur avec windows 7 64 bits qui je sais n'est plus maintenu mais c'est le seul a pouvoir utiliser un périphérique midi que windows 10 ne gère pas.
Mon problème est ailleurs c'est le jdk8 pour le télécharger il faut créer un compte oracle avec un numéro de téléphone et je ne veux pas donner cette information.
Ne peut t'on pas accepter la licence et télécharger le jdk sans fournir ses informations ?
Actuellement le kit est à la version 8u251 est-ce un problème ?
Je ne connais pas java mais j'étais prêt à regarder ce langage pour essayer de modifier le module de représentation étendu graphique de l'arbre à cause de la présentation des arbres ascendants qui me gène le fait que l'alignement des générations d'un même niveau ne soit pas alignés (hors implexe), je comprends qu'avec des implexes c'est un peu plus compliqué mais ce n'est pas trop mal géré peut être revoir cette possibilité en ajoutant une option permettant ou ne permettant pas les implexes.
C'est pour cela que je voulais tester sur mon ordinateur avant quitte à voir ensuite avec l'équipe si j'arrive à réaliser cette tache comment l'intégrer.
La tache risque de prendre du temps pour comprendre le langage, l’algorithme et ses variables re-documenter le module.
Pour le moment j'avoue que les demandes de renseignements d'Oracle me bloquent.
Est-ce identique sous linux ?
Je vais regarder si ma Mageia ne dispose pas d'un JDK 8 et d'un netbeans 8.2 dans sa distribution...
Cordialement.
Emmanuel
Emmanuel.
Title: Re: NetBeans Développement
Post by: Zurga on May 12, 2020, 10:39:32
Vous pouvez utiliser openjdk à la place de la version d'Oracle :
https://adoptopenjdk.net/

Zurga
Title: Re : NetBeans Développement
Post by: GillesF on May 22, 2020, 11:40:46
Bonjour,
J'ai une petite question concernant la version de développement de Ancestris dans Netbeans.
1 - Je récupère les sources à partie du serveur svn.
2 - Je compile le projet Ancestris-11.
3 - J'exécute le projet Ancestris-11 dans NetBeans.
4 - Je vais voir les versions dans Ancestris (Menu : Aide, A propos d'Ancestris, Versions)

Là, je constate que la version Ancestris est 11.0.0 et de même pour tous les modules. (voir pièce jointe)
De plus, j'ai 49 mises à jour trouvées.

Ma question : Pourquoi je n'ai pas la dernière version du projet Ancestris (version 11.0.10244) ?

Ma config :
- Windows 10
- NetBeans 8.2
- jdk1.8.0_251



Merci.
Gilles
Title: Re : NetBeans Développement
Post by: Zurga on May 22, 2020, 12:53:19
Ne mettez rien à jour, c'est consécutif à a mise en commentaire de l'appel à svn :
http://forum.ancestris.org/index.php?topic=2719.msg6201#msg6201

En fait, comme on a mis en commentaire la vérification de la version, il est impossible pour la compilation de se référer au dernier numéro de commit.

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 22, 2020, 13:45:49
Je comprends maintenant.
Est ce qu'il existe une doc qui me permettrais de créé un raccourci pour svn sous windows, afin de dé-commenter les fichiers ant et récupérer le dernier commit à la compilation ?

J'ai commencé à développer mon plugin, mais il y des effets collatéraux sur les éditeurs car je n'ai pas le dernier commit !!!

Merci.
Gilles.
Title: Re: NetBeans Développement
Post by: Zurga on May 22, 2020, 14:07:44
Pour avoir la dernière version, il suffit de vous mettre à jour avec Tortoise svn ou tout utilitaire svn adapté avant de lancer netbeans.

Pour une installation avec raccourci sous windows de svn, je ne m'y suis jamais lancé.
A voir si quelque chose existe sur internet.

Zurga
Title: Re : NetBeans Développement
Post by: GillesF on May 27, 2020, 13:19:57

Bonjour,
Malheureusement j'ai encore beaucoup de lacune dans le codage java !


Lorsque je lance le processus "Rendu Graphique Étendu de l'Arbre", je souhaiterais récupérer la variable "output_type (int)" dans la class "Report".
Cette variable est initialisé "Public int ouput_type;" dans la class "GraphicsOutputFactory".


En mode débug, je vois bien cette variable au moment de l'exécution de la méthode : (voir pièce jointe)
     public final Entity getEntityFromUser(String msg, Gedcom gedcom, String tag)
    {
   int output_type = outputs.output_type;
   SelectEntityPanel =  select = new SelectEntityPanel(gedcom,......
   .....
   .....
    }
mais je n'arrive pas à initialiser ma variable output_type (int) dans cette méthode.
Si quelqu'un a une idée pour combler mon manque de compétence en java, je suis preneur et merci d'avance.


Gilles.

Title: Re: NetBeans Développement
Post by: Zurga on May 27, 2020, 15:58:48
Les variables des reports, c'est magique.
Vous changez la valeur dans la fenêtre d'options, elles sont initialisées avec cette valeur dans le code.
Vous n'avez qu'à la déclarer publique dans la classe pour qu'elle apparaisse dans l'onglet Options de votre rapport.

Que souhaitez-vous faire exactement avec cette variable ?

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 27, 2020, 17:14:47
Merci Zurga.

Ce que je veux faire c'est connaitre le type de sortie du graphique (svg, pdf, png, screen) dans la la classe "Report" avant de lancer le SelectEntityPanel afin de proposer une génération des graphiques de tous les individus dans un dossier sauf en cas de sortie en "screen".
Pour cela, je vais créer un nouveau Panel "SelectAllEntitiesPanel" avec une case à cocher pour la génération de tous les individus dans le dossier qu'il faudra sélectionner.(voir pièce jointe)

Donc avant de lancer le "SelectEntityPanel" de la classe "Report", je doit récupérer la variable "output_type" pour savoir si dans l'onglet Options le type de sortie n'est pas "screen".

Je continue mes recherches dans ce sens ...
Gilles.
Title: Re : NetBeans Développement
Post by: Zurga on May 27, 2020, 17:49:57
De cette façon, ce ne sera pas possible.
Le lancement de la fenêtre de demande d'utilisateur est faite dans la classe Report.java alors que les variables sont assignées dans la classe ReportGraphicalTree.java.
Si vous voulez que cela fonctionne, il faut surcharger ces méthodes dans la classe ReportGraphicalTree.java
Là, vous aurez toutes les variables déjà assignées.

Zurga
Title: Re: NetBeans Développement
Post by: GillesF on May 27, 2020, 17:59:06
Ok merci Zurga.

Je me penche sur la façon de surcharger la classe les méthodes dans la classe ReportGraphicalTree.java.

Merci encore.
Gilles
Title: Re : NetBeans Développement
Post by: jmc21 on July 20, 2020, 17:15:41
Bonjour
J'ai presque réussi a compiler la dernière version  non sans mal :)
    outre les informations tres utiles trouvées ci dessus (platform et harness d'ancestris  dans les librairies de l'appli)
    il faut changer  dans le fichier  nbproject/platform.properties
                   # nb platform to use
                    nbplatform=11.3                    a remplacer par nbplatform=8.2

Mais j'ai du supprimer le module multimédia Website   car j'ai beau chercher les librairies a utiliser je n'ai pas reussi

une idée ?

cdlt
jmc
 
Title: Re: NetBeans Développement
Post by: Zurga on July 20, 2020, 23:10:30
La version 11 d'Ancestris est a présent développé avec Netbeans 11.3

Le contenu de platform et Harnes sont dans le zip de la version quotidienne.

Zurga
Title: Re: NetBeans Développement
Post by: jmc21 on July 21, 2020, 07:09:54
Merci Zurga pour cette bonne nouvelle

par contre l'erreur sur le fichier platform.properties demeure
      le programme cherche a télécharger  un lien qui n'existe pas
                        https://updates.netbeans.org/netbeans/updates/11.3/uc/final/certified/catalog.xml.gz
      le même lien avec 8.2 existe par contre  (et c'est pour cela que ça marchait précédemment)

qu'est ce qui peut dysfonctionner dans mon installation ?

merci pour l'aide
cdlt
jmc

NB peut etre faut il supprimer la mise a jour du catalogue (autoupdate.catalog.url=http://bits.netbeans.org/${nbplatform}/community/uc/catalog.xml.gz)
dans le fichier nbprojet/platform.propoerties
Title: Re : NetBeans Développement
Post by: Zurga on July 21, 2020, 07:44:24
Il ne faut pas chercher à télécharger ces éléments.
Netbeans est maintenant maintenu par Apache et plus par Oracle.
Normalement en définissant dans les paramètres où se trouve les répertoire de platform et Harness, vous ne devriez plus avoir de tentatives de téléchargement et vous devriez pouvoir compiler.

Zurga
Title: Re: NetBeans Développement
Post by: jmc21 on July 21, 2020, 07:59:16
en fait  c'est Netbeans qui essaie lors du build.....

si je modifie le fichier  platform.properties  alors  la compilation et l’exécution se déroulent bien  (avec java8)    :)

probablement ne configure-je pas correctement le projet
j'associe les harness et platform d'ancestris   avec l’opération suivante :   addcluster  [ancestries/project properties/ libraries]
comment faut il faire ?
 
merci pour l'aide
cdlt
jmc

probablement que je n'ai pas
Title: Re: NetBeans Développement
Post by: Zurga on July 21, 2020, 09:12:07
La configuration courante fonctionne bien pour les développeurs.
Normalement, il n'y a rien à modifier dans le fichier project.properties.
C'est le fichier "Netbeans platform config" qui donne l'endroit où se trouve le cluster Netbeans.
Si le cluster est déjà présent, il ne cherche pas à le télécharger.
Il est donné par cette ligne là :
nbplatform.custom.netbeans.dest.dir=${suite.dir}/../../netbeans_platform_${nbplatform}

Donc en créant un répertoire "netbeans_platform_11.3" dans le même répertoire que la racine des sources et en y copiant le contenu "platform" et "harness" contenus dans le zip de la version quotidienne, cela devrait fonctionner correctement.

Zurga
Title: Re : NetBeans Développement
Post by: jmc21 on July 21, 2020, 19:59:46
YYYYYYEEEEEESSSSSSSS

 ::)

Merci