JavaScool:ProgletProcessing : Différence entre versions

De Sciencinfolycee
Aller à : navigation, rechercher
m (Le fichier proglet.pml)
m (Processing et Svn ou Git)
 
(18 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
[[Catégorie:JavaScoolDev]]  
 
[[Catégorie:JavaScoolDev]]  
Cette page a pour but d'expliquer comment créer une proglet avec  [http://processing.org processing], consulter aussi à la [[JavaScool:DocCreationProgletExemple|documentation générale]]  et la [[JavaScool:DocCreationProglet|spécification d'une proglet]] pour voir les principes généraux.
+
Cette page a pour but d'expliquer comment créer une proglet avec  [http://processing.org processing], consulter aussi à la [http://javascool.github.com/doc/developper/index.html documentation générale] sur la création de proglet pour voir les principes généraux.
  
 
__TOC__
 
__TOC__
Ligne 6 : Ligne 6 :
 
== Principe général ==  
 
== Principe général ==  
  
Tous les fichiers standards de la proglet ''sauf'' <tt>Panel.java</tt> sont définis comme pour une[[JavaScool:DocCreationProglet|proglet standard]] :  
+
Tous les fichiers sont définis comme pour une standard, sauf :
** <tt>proglet.pml</tt> : le descripteur de la proglet.
+
* <tt>Panel.java</tt> puisque l'objet graphique vient de processing.
** <tt>help.xml</tt> : le fichier de documentation de la proglet.
+
* <tt><name>Functions.java</tt> au lieu de <tt>Functions.java</tt> come expliqué ci dessous.
** <tt>Functions.java</tt> : qui définit les fonctions proposées à l'élève (''optionnel'').
 
** <tt>completion.xml</tt> : qui définit les complétions automatiques proposées dans l'éditeur (''optionnel'').
 
** <tt>Translator.java</tt> : qui implémente la traduction de Jvs en Java spécifique de cette proglet (''optionnel'').
 
  
L'interface graphique correspond lui à l'applete processing.
+
== Lancer processing ==
  
== Le fichier proglet.pml ==
+
Il faut que la jarre <tt>javascool*.jar</tt> soit dans le class-path de processing pour qu'il puisse compiler les classes liées à javascool.
  
<pre>
+
== Le fichier de description de la proglet ==
title="Exemple de «proglet»"
 
author="Guillaume Matheron <guillaume.quest@gmail.com>"
 
icon="sample.png"
 
processing="true"
 
width="600"
 
height="400"
 
</pre>
 
  
c'est à dire que par rapport à un fichier standard il comporte en plus:
+
Par rapport à un fichier standard il comporte en plus:
# la mention <tt>processing="true"</tt>
+
# la mention <tt>"processing" : "true"</tt>
 
# les largeur <tt>width</tt> et hauteur <tt>height</tt>, qui ''doivent'' être spécifiées.
 
# les largeur <tt>width</tt> et hauteur <tt>height</tt>, qui ''doivent'' être spécifiées.
  
== Le fichier Functions.java ==
+
== Le fichier <name>Functions.java ==
 +
 
 +
Plusieurs choses diffère dans ce cas:
 +
* La classe doit se nommer <tt><name>Functions.java</tt> ou <tt><name></tt> est le nom de la proglet.
 +
* La classe ne doit pas être déclarée dans un package
 +
* La fonction qui renvoie l'instance de la proglet ne renvoie un objet de nom <tt>sampleCode</tt> si sampleCode est le nom de la proglet.
  
Une seule chose diffère
+
Pour comprendre cela il faut noter que, avec processing:
 +
* une applete de nom <tt>sampleCode</tt> génère une classe (sans package) de nom <tt>sampleCode</tt> (qui étend la classe <tt>Applet</tt>), donc:
 +
** il faut bien récupérer ici un objet de ce nom
 +
** il faut définir la classe sans package pour qu'elle accède à l'applete sans package
 +
** il faut lui donner un nom qui soit différent pour chaque proglet.
  
 +
Voici un exemple de header d'un fichier <tt><name>Functions.java</tt>:
 
<pre>
 
<pre>
package org.javascool.proglets.sampleCode;
+
public class sampleCodeFunctions {
import static org.javascool.macros.Macros.*;
 
 
 
public class Functions {
 
 
   /** Renvoie l'instance de la proglet. */
 
   /** Renvoie l'instance de la proglet. */
   private static '''sampleCode''' getPane() {
+
   private static sampleCode getPane() {
     return getProgletPane();
+
     return org.javascool.macros.Macros.getProgletPane();
 
   }
 
   }
 
   /** ../.. */
 
   /** ../.. */
 +
}
 +
</pre>
 +
 +
== Le fichier Translator.java  ==
 +
 +
Il n'est pas possible de faire un import java des fonctions processing car elles ne sont pas dans un package. Il faut donc définir l'ajout de préfixe aux méthodes statiques par translation du code, comme ici dans l'exemple de la proglet [http://javascool.gforge.inria.fr/v4/index.php?page=proglets&action=show&id=exploSonore exploSonore].
 +
<pre>
 +
package org.javascool.proglets.exploSonore;
 +
public class Translator extends org.javascool.core.Translator {
 +
  @Override
 +
  public String translate(String code) {
 +
    return code.replaceAll("\\s(playSignal|playRecord|playStop)\\(", " exploSonoreFunctions.$1(");
 +
  }
 
}
 
}
 
</pre>
 
</pre>
Ligne 56 : Ligne 66 :
 
#* Exporter le travail sous forme d'applete
 
#* Exporter le travail sous forme d'applete
 
#* C'est dans <tt>File -> Export</tt> qui effectue cette action
 
#* C'est dans <tt>File -> Export</tt> qui effectue cette action
# Dans le même répertoire générer les fichiers <tt>proglet.pml</tt>, <tt>help.xml</tt>, <tt>Functions.java</tt>,  <tt>completion.xml</tt>  et <tt>Translator.java</tt>
+
# Dans le même répertoire générer les fichiers usuel pour définir une proglet.
#* Par exemple avec le [JavaScool:DocJavaScoolBuilder Javascoolbuilder] (ou à la main)
+
#* puis construire la proglet comme pour une proglet standard
# Lancer ensuite le [JavaScool:DocJavaScoolBuilder Javascoolbuilder] qui
 
#* va prendre en charge l'intégration,
 
#* voir détailler les éventuelles erreurs.
 
 
 
Le Javascoolbuilder prend en compte les spécification d'une apllete processuing
 
  
 
* Note: éviter de mettre dans le répertoire des fichiers inutiles ou trop volumineux car tous les fichiers sont intégrés à la jarre Java finale.
 
* Note: éviter de mettre dans le répertoire des fichiers inutiles ou trop volumineux car tous les fichiers sont intégrés à la jarre Java finale.
Ligne 68 : Ligne 73 :
 
== Processing et Svn ==  
 
== Processing et Svn ==  
  
Si vos fichiers sont contrôlés par le système de versionning [http://subversion.tigris.org subversion] (dit «svn») une difficulté survient: processing détruit les fichiers <tt>.svn</tt> qui permettent d'administrer l'archive (donc plus rien ne marche côté svn) ! La soluce:
+
Si vos fichiers sont contrôlés par un système de versionning comme [http://subversion.tigris.org subversion] (dit «svn») une difficulté survient: processing détruit les fichiers <tt>.svn</tt> qui permettent d'administrer l'archive (donc plus rien ne marche côté svn) ! La soluce:
 
# Avant d'exporter l'applete sauver le dossier caché <tt>applet/.svn</tt> par exemple sur le bureau
 
# Avant d'exporter l'applete sauver le dossier caché <tt>applet/.svn</tt> par exemple sur le bureau
# Après l'export le remettre en place
+
# Après l'export le remettre en place ou ne pas inclure le dossier applet dans le svn.
ou ne pas inclure le dossier applet dans le svn.
 
 
 
Ce mécanisme est automatisés sur la plateforme Java'sCool
 
  
 
== Discussion ==
 
== Discussion ==

Version actuelle datée du 10 août 2012 à 12:38

Cette page a pour but d'expliquer comment créer une proglet avec processing, consulter aussi à la documentation générale sur la création de proglet pour voir les principes généraux.

Principe général

Tous les fichiers sont définis comme pour une standard, sauf :

  • Panel.java puisque l'objet graphique vient de processing.
  • <name>Functions.java au lieu de Functions.java come expliqué ci dessous.

Lancer processing

Il faut que la jarre javascool*.jar soit dans le class-path de processing pour qu'il puisse compiler les classes liées à javascool.

Le fichier de description de la proglet

Par rapport à un fichier standard il comporte en plus:

  1. la mention "processing" : "true"
  2. les largeur width et hauteur height, qui doivent être spécifiées.

Le fichier <name>Functions.java

Plusieurs choses diffère dans ce cas:

  • La classe doit se nommer <name>Functions.java ou <name> est le nom de la proglet.
  • La classe ne doit pas être déclarée dans un package
  • La fonction qui renvoie l'instance de la proglet ne renvoie un objet de nom sampleCode si sampleCode est le nom de la proglet.

Pour comprendre cela il faut noter que, avec processing:

  • une applete de nom sampleCode génère une classe (sans package) de nom sampleCode (qui étend la classe Applet), donc:
    • il faut bien récupérer ici un objet de ce nom
    • il faut définir la classe sans package pour qu'elle accède à l'applete sans package
    • il faut lui donner un nom qui soit différent pour chaque proglet.

Voici un exemple de header d'un fichier <name>Functions.java:

public class sampleCodeFunctions {
  /** Renvoie l'instance de la proglet. */
  private static sampleCode getPane() {
    return org.javascool.macros.Macros.getProgletPane();
  }
  /** ../.. */
}

Le fichier Translator.java

Il n'est pas possible de faire un import java des fonctions processing car elles ne sont pas dans un package. Il faut donc définir l'ajout de préfixe aux méthodes statiques par translation du code, comme ici dans l'exemple de la proglet exploSonore.

package org.javascool.proglets.exploSonore;
public class Translator extends org.javascool.core.Translator {
  @Override
  public String translate(String code) {
    return code.replaceAll("\\s(playSignal|playRecord|playStop)\\(", " exploSonoreFunctions.$1(");
  }
}

La méthode pas à pas

  1. S'assurer que le répertoire «sketchbook» de processing est bien le même que celui des proglets.
    • Voir la [JavaScool:DocJavaScoolBuilder mise en place du «sketchbook» ] pour plus de détails
    • C'est dans File -> Preferences -> Sketchbook location que cette option est donnée.
    • Voir les éléments de documentation pour Linux si besoin
  2. Lancer processing et travailler au développement de l'applete
    • Exporter le travail sous forme d'applete
    • C'est dans File -> Export qui effectue cette action
  3. Dans le même répertoire générer les fichiers usuel pour définir une proglet.
    • puis construire la proglet comme pour une proglet standard
  • Note: éviter de mettre dans le répertoire des fichiers inutiles ou trop volumineux car tous les fichiers sont intégrés à la jarre Java finale.

Processing et Svn

Si vos fichiers sont contrôlés par un système de versionning comme subversion (dit «svn») une difficulté survient: processing détruit les fichiers .svn qui permettent d'administrer l'archive (donc plus rien ne marche côté svn) ! La soluce:

  1. Avant d'exporter l'applete sauver le dossier caché applet/.svn par exemple sur le bureau
  2. Après l'export le remettre en place ou ne pas inclure le dossier applet dans le svn.

Discussion

  • Utiliser processing permet de
    • programmer facilement des proglets multimédia (son, 3D, vidéos, ..) et de profiter d'un très large panel existant;
    • de déplacer la vision de "programmeur" à "créateur d'objets numériques" qui est le fondement de la démarche de processing;
    • celà établi aussi que la plateforme Javas'Cool est techniquement et dans son principe "ouverte" et s'interopère avec d'autres plateformes de développement.