IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Functional Reactive Programming en Java


Sujet :

Langage Java

  1. #41
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par thierryler Voir le message
    Regarde le sujet sur Algoid et tu vas voir que t'es pas seul ;-)
    Voui j'ai vu.
    Je te remercie d'ailleurs de ta relecture. Je porte les corrections demain.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  2. #42
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par CyaNnOrangehead Voir le message
    Pour le schemat, merci.
    Il faudrai que j'ajoute la légende suivante:
    S1, S2 -> signal 1 et 2
    sf1 sf1 -> signal function 1 et 2

    Exemple d'interprétation du filter :
    Le Signal 1 émet vers le signal 2.
    Le signal est filtré pas une signalFunction qui détermine si l’émission doit ce faire ou pas.

    Exemple d'interprétation du map :
    Le signal 1 émet vers le signal 2, la valeur du signal 1 est transformé au travers la signalFunction

    Exemple d'interprétation du fold :
    Le signal 1 émet vers le signal 2, la valeur du signal 1 est transformé en fonction de la valeur d'émission en cours et la précédente (dans le temps)
    Je dois avouer que je comprends vachement mieux les schémas avec les explications
    Bon, j'attendais d'avoir lu les 2 articles pour te faire un retour (ton article sur les foncteurs et l'article sur Scala.React), mais ça traine un peu (pas assez de temps dans une journée ).
    Cette façon de programmer est vraiment intéressante. Ça m'a bien épaté.
    Il faut que je jette un oeil en profondeur sur tout ça, mais t'as déjà fait un gros boulot !

    Petite remarque subsidiaire, comme tu as changé ton bitbucket, ça serait pas mal, soit de mettre à jour les liens dans les posts précédents, soit de faire un post récapitulatif. C'est toujours frustrant de se manger un 404 quand on clique sur un lien

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #43
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Bonjour Gueritarish.
    Pour le lien, je te donne raison, mais je ne parviens pas à éditer un poste ultérieur.
    Voici donc la nouvelle address Bitbucket

    Hier, en essayant d'expliquer la FRP à un collègue, je me suis rendu compte que j'était confus, et qu'en fait c'est très simple.
    Prenons l'exemple suivant en impératif classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int a = 0;
    int b = 0;
    int sum = a + b;
     
    System.out.println (sum); // 0, jusqu'ici tout va bien
    a = 10;
    b = 10;
    System.out.println (sum); // 0, ça vas toujours ?
    Montrez ça à n'importe quel non développeur (mon gamin de 12 ans par exemple) et il vous rie au nez :
    "Hey papa, tu ne sais donc pas calculé : 10 + 10 ça fait 20 !!!!"

    En programmation Réactive le même programme pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int a = 0;
    int b = 0;
    int sum = a + b;
     
    System.out.println (sum); // 0, jusqu'ici tout va bien
    a = 10;
    b = 10;
    System.out.println (sum); // 20, ça vas mieux !
    sum étant égale à a + b, si a ou b change son résultat devrait changé.
    En fait, ça fait juste 50 ans que nous, pauvres développeurs, nous somme habituer à ce que la variable (pas si variable que ça du coup) ne change pas si ses opérandes venaient à être changés. En fait on c'est habituer à ce que, dans le temps, sum = a + b ne soit plus vérifiable si l'une de ses opérande était altérée.

    Maintenant imaginons que notre ordinateur soit lui aussi réactif. Que ses états puissent changés dans le temps. Ce qui est le cas du curseur de la souris, de la touche du clavier et même du temps lui même.
    Imaginons, avec un tel système que nous voulions écrire dans un label la position de notre souris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int x = Mouse.posX;
    int y = Mouse.posY;
     
    String text = "La position de la souris est (" + x + ", " + y + ");
    myLabel.setText (text);
    Les variables posX et posY vont varier dans le temps de même que x et y. Cela vas provoquer la variation de la variable text.
    Plus besoin de gérer un évènement sur la souris, c'est le système de donnée qui c'en charge.

    C'est un peu ce que j'aimerai obtenir à terme dans mon ti langage AL.
    En attendant j'aimerai déjà l'intégré à Java. D'ou ma petite librairie.

    Maintenant un moyen d'intégrer cela dans un langage dont les états ne peuvent pas varier, est d'utiliser la FRP Functional Reactive Programming qui est une adaptation de cette idée dans les langages fonctionnels comme Haskell et un dialecte dérivé ELM.

    Voilà, sinon une petite démonstration des capacités de ma tite librairie adapté aux jeux vidéos : [ame="http://www.youtube.com/watch?v=-tYmfA1qqnw"]React4J - game developpment[/ame]

    Remarquez comme lorsque la fenêtre est redimensionné, tout reprend sa place.
    La positions des étoiles est un ratio sur la taille de la fenêtre. Si elle varie, ce ratio est automatiquement recalculé.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  4. #44
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Juste un petit post pour te dire que je trouve ton travail remarquable.

    Et même si je dois bien avouer ne pas avoir encore tout compris, les perspectives qu'offre ta librairie ont l'air très prometteuses.

    Je vais donc suivre ton travail avec intérêt

    @+

  5. #45
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Merci nico, c'est motivant !
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  6. #46
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par CyaNnOrangehead Voir le message
    Pas tant que cela car tes questions sont pertinentes (en plus comme ça je me sens moins seul snirfff )
    Citation Envoyé par CyaNnOrangehead Voir le message
    1 - oui, à la sauce Haskell (fonctionel), c'est à dire en partant de librairies comme react banana. Ou le langage elm fonctionel également.
    Désolé je connais pas Dans le domaine de la programmation concurrente et distribuée, je sais qu'Erlang est très réputé mais je ne m'y suis pas encore essayé.

    Citation Envoyé par CyaNnOrangehead Voir le message
    2 - Le nom n'est peu-t-être pas très bien choisi. C'est la gestion d'un évenement. Un pattern observer mais qui n'accepte pas des listeners mais une "procedure" càd une fonction sans retour
    En fait je vois pas trop en quoi c'est différent d'Observer et ses Listener. React devrait plutôt s'appeler Dispatcher. Regarde du côté de java.awt.EventQueue et java.awt.EventDispatchThread.

    Citation Envoyé par CyaNnOrangehead Voir le message
    3 - MouseReact().move().merge(new MouseReact().click(), new Function2 ... mergeFunction);
    On merge deux signaux mouse move et mouse click, et on traite les deux signaux d'entrée avec le foncteur mergeFunction. Du coup on as qu'une valeur de retour à chaque fois.
    Une construction du type or(function, onPressed(), onMove()) m'aurait paru plus compréhensible.

    Citation Envoyé par CyaNnOrangehead Voir le message
    5 - Question très pertinente :
    merge, emet les deux signaux chaque fois que l'un des signal d'entrée à emit.
    sync, n'emet les deux signaux que lorsque les deux signaux d'entrée ont emit.
    then, n'émet les deux signaux que lorsque le premier suivi du second ont emits
    when, n'émet les deux signaux que lorsque le second suivi du premier ont emits.
    Je te propose : or/merge, and/join, after, before.

    Citation Envoyé par CyaNnOrangehead Voir le message
    7 - En FRP il y a trois notion :
    Les Variables, qui varient dans le temps et ont une valeur d'initialisation.
    Les Signal, qui varient dans le temps mais ne possèdent pas de valeur initial (comme mouse button, time every etc.)
    Les constants, des valeurs qui ne varient plus mais ont une valeur initial
    Et donc le toVar sert à ?

    Citation Envoyé par CyaNnOrangehead Voir le message
    8 - J'ai du refactoré, ils se nomment MouseReact.positionX et MouseReact.positionY maintenant
    C'est quoi leur type ?

    Citation Envoyé par CyaNnOrangehead Voir le message
    9 - L'exemple crée un signal en concatenant dans une chaine des infos sur la souris :
    Si le bouton est pressé ou pas et la position.
    button1 retourne un booléen qui est transformé en String par le map juste après.
    Le toVar crée une variable et l'initialise avec une valeur par défaut
    On merge avec positionX de la souris, que l'on mapFolt (les deux en même temps) càd que arg1 contient la chaine précédement obtenue et arg2 la position integer en X de la souris.
    Idem avec la position en Y ensuite.
    De ce que j'en comprends ca affiche "button [pressed|released] ( x=?, y=?)", je trouve pas ca du tout expressif par rapport à
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    merge(
      (Boolean buttonStatus, Point location) -> return "button " + (buttonStatus ? "pressed" : "released") + "( x=" + location.x + ", y=" + location.y + ")"),
      onButton1(),
      onMove());
    non ?

    Citation Envoyé par CyaNnOrangehead Voir le message
    Voilà. Ce qu'il faut comprendre en FRP c'est que l'idée derrière c'est que tout état du système doit pouvoir être vérifié à tout moment du programme comme vrai.
    Exemple en pseudo code :
    var a = 0;
    var b = 0;
    var sum = a + b;

    print (sum); // 0
    a = 7;
    b = 8;
    print (sum); // 15

    En Java classique la dernière ligne écrirait 0.
    Tout est là.
    Après le reste c'est du traitement d'évènements, de la transformation (comme les liste en fonctionnel avec le map/filter/fold) et de la mise en réseau (d'ou mon petit schemat)

    Vala.... Mais je suis d'accord avec toi, j'ai aussi mis un peu de temps au dépard pour bien comprendre de quoi il sagissait.
    Ok, je comprends l'idée. D'ailleurs je pense que tu apprécieras la syntaxe de Ceylon :
    Code Ceylon : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer a = 0;
    Integer b = 0;
    Integer sum { return a + b };

    Citation Envoyé par Gueritarish Voir le message
    Petite remarque subsidiaire, comme tu as changé ton bitbucket, ça serait pas mal, soit de mettre à jour les liens dans les posts précédents, soit de faire un post récapitulatif. C'est toujours frustrant de se manger un 404 quand on clique sur un lien
    +1
    Par ailleurs, ca serait bien de pouvoir consulter la javadoc en ligne et de pouvoir télécharger les sources sous forme d'archive. Ou alors les inclure dans le jar exécutable. Pas trop envie d'installer Mercurial et cloner le dépôt pour récupérer les sources correspondants aux binaires.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #47
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Ok, je comprends l'idée. D'ailleurs je pense que tu apprécieras la syntaxe de Ceylon :
    Code Ceylon : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Integer a = 0;
    Integer b = 0;
    Integer sum { return a + b };
    Peu-t-on abonner un listener à sum en ceylon ?


    Citation Envoyé par Nemek Voir le message
    +1
    Par ailleurs, ca serait bien de pouvoir consulter la javadoc en ligne et de pouvoir télécharger les sources sous forme d'archive. Ou alors les inclure dans le jar exécutable. Pas trop envie d'installer Mercurial et cloner le dépôt pour récupérer les sources correspondants aux binaires.
    Si c'est possible sans télécharger bitbucket (mais comme vous j'ai mis du temps pour trouver)
    Va dans download, onglet tags il y a un petit lien zip à coté du tag tip.
    Allez je suis bon avec toi, voici le lien : https://bitbucket.org/yann_caron/react4j/get/tip.zip

    Normalement la javadoc et les testes unitaires sont dedans. Tout n'est pas encore tout à fait terminé hein !

    Pour le reste de tes remarques j'y reflechis et te redit.
    Je vais sans doute revoir les noms, c'est une bonne idée.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  8. #48
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Pour les termes, je t'invite fortement à consulter le jargon BPMN et SysML qui traitent justement de "signaux" et de "processus".

    EDIT: En y repesant le diagramme d'activité d'UML définit déjà ses concepts : decision/merge et fork/join.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  9. #49
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par Nemek Voir le message
    En fait je vois pas trop en quoi c'est différent d'Observer et ses Listener. React devrait plutôt s'appeler Dispatcher. Regarde du côté de java.awt.EventQueue et java.awt.EventDispatchThread.
    Je suis nul en choix de noms. Donc je prend.
    En effet cette implémentation de FRP est dite discrete (event driven) d'autre sont en temps continue (en échantillonnant)

    Citation Envoyé par Nemek Voir le message
    Une construction du type or(function, onPressed(), onMove()) m'aurait paru plus compréhensible.
    Je retiens les noms
    Mais que fait-on de TimeReact.once, TimeReact.every, TimeReact.framePerSecond et TimeReact.randomly ? Les noms conviennent il ?


    Citation Envoyé par Nemek Voir le message
    Je te propose : or/merge, and/join, after, before.
    Je prend after et before. Merge et Sync me plaisent bien.

    Citation Envoyé par Nemek Voir le message
    Et donc le toVar sert à ?
    Passer d'un signal (qui n'as pas de valeur, ce sont des instants) à une variable (qui à une valeur tout au long du temps et donc une à son initialisation)
    J'ai mise le wiki à jours avec des joli schemats ICI

    Citation Envoyé par Nemek Voir le message
    C'est quoi leur type ?
    Signal<Integer>

    Citation Envoyé par Nemek Voir le message
    De ce que j'en comprends ca affiche "button [pressed|released] ( x=?, y=?)", je trouve pas ca du tout expressif par rapport à
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    merge(
      (Boolean buttonStatus, Point location) -> return "button " + (buttonStatus ? "pressed" : "released") + "( x=" + location.x + ", y=" + location.y + ")"),
      onButton1(),
      onMove());
    non ?
    Oui c'est dejà le cas (mais c'est moins fonctionnel et ça n'illustre pas les fonctions d'ordre supérieures) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		final Var<Integer> x = MouseReact.onMoveX().toVar(0); // mouse x reactive position
    		final Var<Integer> y = MouseReact.onMoveY().toVar(0); // mouse y reactive position
     
    		Operation<String> text = Operation.mergeOperation(() -> "mouse position (" + x.getValue() + ", " + y.getValue() + ")", x, y); // react text = "mouse position (" react x ", " react y ")"
     
    		text.subscribe((String textPosition) -> {
    			System.out.println(textPosition);
    		});
    Merci encore pour tes remarques
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  10. #50
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Citation Envoyé par CyaNnOrangehead Voir le message
    Je suis nul en choix de noms. Donc je prend.
    Je comprends j'ai le même soucis ^^

    Citation Envoyé par CyaNnOrangehead Voir le message
    Mais que fait-on de TimeReact.once, TimeReact.every, TimeReact.framePerSecond et TimeReact.randomly ? Les noms conviennent il ?
    Ne sachant pas exactement à quoi correspondent "once" et "randomly", je ne me prononcerais pas. Sinon "every" c'est très bien et "framePerSecond", je le remplacerait peut-être "atRate" et toujours une notion de TimeUnit. Par exemple, [CODEINLINE=Java]TimeReact.atRate(2, TimeUnit.MINUTES)[/CODELINE] pour dire deux fois par minutes.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  11. #51
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Je comprends j'ai le même soucis ^^
    Affreux d'autant que c'est super important, ça impact directement la lisibilité du code

    Citation Envoyé par Nemek Voir le message
    Ne sachant pas exactement à quoi correspondent "once" et "randomly", je ne me prononcerais pas. Sinon "every" c'est très bien et "framePerSecond", je le remplacerait peut-être "atRate" et toujours une notion de TimeUnit. Par exemple, [CODEINLINE=Java]TimeReact.atRate(2, TimeUnit.MINUTES)[/CODELINE] pour dire deux fois par minutes.
    En fait TimeReact.once lance un thread qui s'execute qu'un fois au bout d'un moment
    TimeReact.randomly, lange un thread et déclenche l'émission à des intervales aléatoires (bornées)

    nb : L'idée de timeunit est bonne. Je vais regarder.
    Il faut aussi que je profil un peu le tout histoire de voir si ça ne génère pas trop d'objet (un peu quand même ! Pas bon pour Android tout ça !)
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  12. #52
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Rhaaaa mince !!!! Ca ressemble étrangement !
    http://docs.oracle.com/javafx/2/bind...ub-binding.htm
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  13. #53
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Pire encore, c'est carrément ça : https://github.com/Netflix/RxJava/wi...ng-Observables

    J'avais vu qu'il existant cette lib, mais je n'avait pas trouvé sa page wiki.
    C'est chose faite maintenant. Suis blazzzzéeuuu ....

    'fin bref, je me serais bien amusé ^_^
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

  14. #54
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Ca n'empeche pas de faire un article pour présenter le concept. Et tout le travail fournit permet de bien comprendre le concept et l'étendu de sa complexité en termes d'implémentation.
    Dans le cadre d'un article, ca permet de présenter une implémentation avec la bonne direction vu que tu connais les pièges.
    Bref, je pense pas que ce travail était une perte de temps.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  15. #55
    Rédacteur
    Avatar de CyaNnOrangehead
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2008
    Messages : 777
    Points : 1 731
    Points
    1 731
    Par défaut
    Citation Envoyé par Nemek Voir le message
    Bref, je pense pas que ce travail était une perte de temps.
    Tout à fait !
    J'ai un peu fait joujou avec RxJava cet aprèm, c'est trait pour trait ce que j'ai fait. En mieux évidemment! La gestion des émission par subscriber est super bien pensé et les 3 évènements distincts next / finish et error permettent d'entrevoir des trucs sympa.

    Le seul truc qui leur manque d'après ce que j'ai vu, c'est des "sujets" comme ils les appellent qui génère des évènements en fonction des évènements systèmes comme clock, mouse, keyboard. Eux sembles ce focaliser sur des listes et des suite d'évènements finis.

    Je me suis amusé à créer un timer, ça joue nickel.

    Il y a même un moyen de faire les opérations que j'ai cités dans mon article.
    Leur approche est même bien meilleur que celle de java avec les bindings qui j'ai cité 3 postes plus haut.

    Bref, je continue mon investigation.
    Je suis en train de regarder pour coller cette librairie avec une librairie de jeux vidéos. Pour reproduire mon petit space invader maison.
    L'idée serait à terme de faire du reactive game programming.
    Retrouvez tous mes tutoriels : http://caron-yann.developpez.com/

    Et mon projet en cours : Algoid - programming language

    N'oubliez pas de consulter les FAQ Java (http://java.developpez.com/faq/) et les cours et tutoriels Java (http://java.developpez.com/cours/)

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/10/2006, 11h42
  2. programer un timer Java
    Par karim86 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 21/07/2006, 17h34
  3. Probleme Programation JAVA débutant
    Par tomtom62136 dans le forum Langage
    Réponses: 1
    Dernier message: 03/03/2006, 12h07
  4. [xsl][Java] functions xpath non interpretees
    Par Pi2 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 30/01/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo