Concours "Evenja Café", un nouveau paradigme de programmation

Posté par  . Édité par Benoît Sibaud, ZeroHeure, Ontologia, NeoX, Nils Ratusznik, Bruno Michel et bubar🦥. Modéré par Nils Ratusznik. Licence CC By‑SA.
Étiquettes :
-17
6
jan.
2014
Technologie

Evenja est le nom d'une bibliothèque et d'une méthodologie de travail (code sous AGPL, doc sous GFDL et présentation sous CC By Sa).
Evenja est aussi un nouveau paradigme de programmation. Il permet de définir une machine à état pour gérer des flux de données qui vont être traités en fonction des opérations de traitement définies dans le "circuit" (comme en électronique), mais aussi de l'état de la machine.

Evenja simplifie les solutions des problèmes complexes, comme ceux d'Internet, des bases de données non centralisées, des téléphones mobiles. Avec ce nouveau paradigme de programmation, il est possible à une petite équipe de développer de gros logiciels.

Evenja

Grâce à l'inférence causale, Evenja répond à cette question : dans un logiciel est-il possible de faire uniquement ce qui est nécessaire ?

Le Concours « Evenja Café » vous propose d'expliquer avec vos mots le nouveau paradigme de programmation Evenja.

Les trois meilleures explications gagneront

  1. 500 CHF (~ 410€)
  2. 200 CHF (~160€)
  3. 100 CHF (~82€)

Dans un logiciel Evenja, en fonction de la position et du moment, la donnée change en fonction de son propre contenu et des données voisines.

Le wiki doc de programmation Evenja est en ligne.

Aller plus loin

  • # Lien XMPP evenja

    Posté par  . Évalué à 1.

    Il semble y avoir un problème avec le lien XMPP… qui reviens sur linuxfr.org.
    Voici un lien OK :
    XMPP evenja@chat.evenja.org

  • # hello world

    Posté par  . Évalué à 8.

    N'y aurait-il pas un petit "Hello World!" pour illustrer le paradigme ?

    Les trois meilleures explications gagneront …

    Ça c'est fort : le concept est si abscons qu'on cherche encore une manière de l'expliquer ;)

    • [^] # Re: hello world

      Posté par  (site web personnel) . Évalué à 6.

      "Le Concours « Evenja Café » vous propose d'expliquer avec vos mots le nouveau paradigme de programmation Evenja."

      J'avoue ne toujours pas avoir compris le principe même en lisant quelques présentations.

      Il est question de réseau baysien, sans doute pour calculer "à pas cher", le déclenchement d'un calcul. Le reste ressemble à un langage dataflow comme Lustre ou Esterel.

      Je me trompe ?

      "La première sécurité est la liberté"

      • [^] # Re: hello world

        Posté par  . Évalué à 3.

        Lustre et Esterel sont des languages. Evenja est une manière de voir l'informatique. Pas en mode programmation, mais dans un mode "inférence causal".

        Wikipédia : L'inférence désigne les actions de mise en relation d'un ensemble de propositions, aboutissant à une démonstration de vérité, de fausseté ou de probabilité, sous la forme d'une proposition appelée conclusion.

        Comme avec un programme … mais différemment pas avec des processus complètement pré-défini, comme en dataflow ou autres OOP.

        • [^] # Re: hello world

          Posté par  (site web personnel) . Évalué à 2.

          Tu nous parles du "comment" nous on voudrait déjà comprendre le "quoi".

          On a toujours pas compris les entrées de ton compilo pour arriver à faire quoi que ce soit.

          "La première sécurité est la liberté"

          • [^] # Re: hello world

            Posté par  . Évalué à 1.

            C'est pas un compilo, c'est une librairie.

            • [^] # Re: hello world

              Posté par  (site web personnel) . Évalué à 3.

              lib c++ ?

              "La première sécurité est la liberté"

              • [^] # Re: hello world

                Posté par  . Évalué à 0. Dernière modification le 06 janvier 2014 à 15:25.

                OUI, C++.

                Pas une librairie dans le sens ".so" ou ".a". Pour l'instant;)

                C'est une librairie dans le sens on utilise cet outils pour compiler des objets (notion normal de OOP) selon le paradigme Evenja et qui ainsi profitent des avantages de cette nouvelle approche.

        • [^] # Re: hello world

          Posté par  . Évalué à -1. Dernière modification le 06 janvier 2014 à 20:06.

          Complément d'information pour la language Lustre de la Société Esterel.

          Il s'agit d'un langage synchrone et déclaratif et Evenja 100% Asynchrone et non-déclaratif.

          Si SCADE utilise le langage Lustre pour générer du code C ou Ada. C'est que Lustre n'utilise pas le pardigm Evenja. Avec Evenja, ce n'est pas à la compilation que ce décide le fonctionnement Macro du logiciel, mais au RUN TIME avec des une approche micro. La donnée, ce qu'elle EST, au MOMENT et OÙ elle est, crée le lien entre les deux : le Macro et le Micro.

    • [^] # Re: hello world

      Posté par  . Évalué à 10.

      Je me demande si ce n'est pas simplement un logiciel de pipeautique fonctionnelle récursive, qui permet par une approche transversale d'intégrer des grands défis sociétaux dans un cadre conceptuel à la fois top-down et bottom-up.

      Si c'est le cas, le Hello World devrait ressembler à:

      #include <iostream>
      #include <string>
      #include "random_string.h"
      
      int main() {
         std::string answer;
         do {
            answer = random_string();
         } while (answer != "Hello World!");
         std::cout << answer << std:endl;
         return(0);
      }
      
      
      • [^] # Re: hello world

        Posté par  . Évalué à 0.

        C'est exactement ce que évite Evenja… une jolie boucle… et comment on ajoute une autre fonctionnalité dans ce joli programme… on tiens compte des autres fonctionnalités…Et puis au bout d'un moment, c'est les bugs ;)

        Pas avec Evenja, chaque fonctionnalité peut être ajoutée SANS tenir compte des autres déjà présente.

        COMMENT, c'est justement le but du concours ;)

        • [^] # Re: hello world

          Posté par  . Évalué à 4.

          OK, dans Evenja y'a pas de boucle. Mais ça peut durer longtemps si les seules explications tournent autour de ce qu'Evenja n'est pas ou ne contient pas.

          Sans dec, si ce truc n'est pas du vent, alors la com n'a aucun sens : c'est une variante du Shmilblick où personne n'a décidé ce qu'était le Shmilblick. "Est-ce que le Shmilblick est un fruit?" "Ah non, c'est le contraire". "Est-ce que le Shmilblick est une personne?" "Ah non, le Shmilblick ne ressemble à rien de connu". "Bordel, c'est quoi le Shmilblick?" "Bah c'est le Shmilblick". C'est à se taper la tête contre les murs, non?

          • [^] # Re: hello world

            Posté par  . Évalué à -2. Dernière modification le 06 janvier 2014 à 16:13.

            Je suis d'accord avec toi, au début, c'est à ce taper la tête contre les murs.

            Mais après t'as plus envie de faire autrement.

            • [^] # Re: hello world

              Posté par  . Évalué à 9.

              Autrement que QUOI? Je te parle de discours fallacieux, là, je ne te parle pas de ton truc magique!

              F. --- J'ai découvert un truc super qui doit révolutionner la programmation.
              A. --- Ah, c'est quoi?
              F. --- Un tout nouveau concept, celui qui le décrit le mieux gagner 150 francs Suisses.
              A. --- Je veux bien le décrire, mais je ne comprends pas ce que c'est. C'est X?
              F. --- Mais non. Tu vas voir, essaye-le, tu ne pourras pas t'en passer.

              Comme je tiens à ma tête, ça donne vraiment envie de cogner la tête des autres contre les murs. Soit je suis dingue, soit tu es fou, mais si on pense tous les deux tenir un discours rationnel, l'un de nous doit être enfermé d'urgence.

    • [^] # Re: hello world

      Posté par  . Évalué à 4.

      Il y a un Hello World sur la page des downloads.
      http://www.evenja.org/evenja/downloads

      Le fonctionnement n'est pas abscons (même s'îl semble ;). Mais il est l'inverse de la programmation de Turing : "séquence" de commande qui execute un programme et traite une donnée.
      Pour Evenja, c'est la donnée et ce qu'elle est, au moment ou elle l'est qui crée le programme. C'est différent, c'est plus de l'inférence causal qu'une séquence de "programmation".

      • [^] # Re: hello world

        Posté par  . Évalué à 3.

        En gros on aurait moins de difficultés de se mettre au Haskell.

        • [^] # Re: hello world

          Posté par  . Évalué à 1.

          Pour moi Haskell est exactement l'inverse de Evenja… On programme TOUT et la donnée subi de toute façon.

          Dans le cas de Evenja, ce qu'EST la donnée, QUAND elle l'est et OÙ elle l'est devient l'élément principal du raisonnement… pas la logique suite à une analyse.

          En gros le "USE CASE" est le "programme" :D

          • [^] # Re: hello world

            Posté par  (site web personnel) . Évalué à 3.

            Montres des exemples. Les trucs à la prolog, c'est joli mais cela marche rarement, et surtout pas en temps borné.

            "La première sécurité est la liberté"

            • [^] # Re: hello world

              Posté par  . Évalué à 0.

              Prolog suit des règles et plus il y a de règles plus le système est lent.

              Evenja, ne prend en compte QUE LES DONNEES est ce qu'elles sont au moment et au lieu où elles le sont… pas de ralentissement. Fonctionnement toujours optimum.

              Pour les exemples, viens sur le WIKI.evenja.org pose des "USE CASE", et je te montrerais comment on peut les résoudre de manière plus simple avec Evenja.

              • [^] # Re: hello world

                Posté par  (site web personnel) . Évalué à 2.

                Les use case ne définissent jamais complètement un comportement, sinon il n'y aurait jamais de trou dans les spécifications.

                Tu peux montrer une multiplication/addition de matrice ? Une copie d'image selon la date exif contenu dedans ? Un parseur de fichier xml ? Une interface graphique de dessin avec undo/redo ?

                "La première sécurité est la liberté"

                • [^] # Re: hello world

                  Posté par  . Évalué à -2.

                  ON peux tout montrer, mais la différence IMPORTANT apparaît avec la quantité des entrées/sorties d'un système.

                  Par exemple si tu as une entrée et une sortie… pas beaucoup de différence par rapport à la programmation conventionnel.

                  Par contre si tu as trois entrées et trois sorties, je te garanti une simplification d'au minimum 8x du "logiciel".

                  La seul différence, c'est que si tu le fait avec Evenja, après c'est hyper facile d'ajouter des fonctions sans mettre en péril ce qui fonctionne ;)

                  • [^] # Re: hello world

                    Posté par  (site web personnel) . Évalué à 7.

                    Sans exemple, tes paroles sont du vent.

                    "La première sécurité est la liberté"

                    • [^] # Re: hello world

                      Posté par  . Évalué à 3.

                      Sur le ton de l'humour, je te défie :

                      Viens sur le WIKI pose un USE CASE complexe (plusieurs entrées/sorties) et tu verras par toi-mêmes la différence avec les autres type de programmation :)

                      • [^] # Re: hello world

                        Posté par  (site web personnel) . Évalué à 2.

                        Je pensais à une application de réseau bayésien : la détection de faux commentaires. Tu récupères les date/heures des commentaires, le commentaire, le pseudo de connexion et son IP.

                        Un bon commentateur cache une seul personne derrière un seul pseudo, et qq IP. Un mauvais commentateur se cache derrière un proxy, dispose de plusieurs pseudo, mais utilise le même genre de mots (on peut détecter une personne avec le contenu de ses textes : fréquence de certains mots, c'est comme une empreinte).

                        "La première sécurité est la liberté"

                        • [^] # Re: hello world

                          Posté par  . Évalué à 1.

                          C'est exactement le genre de complexité où Evenja excelle.

                          Inscris-toi sur le wiki.evenja.org.

                          Tu pourras spécifiez mieux ton "cahier des charges" et je vais faire le USE CASE des données en Evenja.

                          • [^] # Re: hello world

                            Posté par  (site web personnel) . Évalué à 3.

                            Le cahier des charges, c'est un spamassassin pour détecter les personnes payés à écrire un commentaire, et non une "personne légitime".

                            si tu veux du contenu dans ton wiki, copie colle, le texte d'ici, j'ai pas envie de m'inscrire à un truc de plus.

                            "La première sécurité est la liberté"

                    • [^] # Re: hello world

                      Posté par  . Évalué à 5.

          • [^] # Re: hello world

            Posté par  . Évalué à 2.

            En terme de programmation, j'ai beaucoup de mal à comprendre les termes tels que "où".
            Tu parles de pile et de tas ? Quant au "quand", ça ressemble à la programmation impérative.

            • [^] # Re: hello world

              Posté par  (site web personnel) . Évalué à 3.

              En dataflow, "quand" définit les cycles courant et ceux d'avant n-1 n-2 …, le ou, j'imagine que cela définit peut être un namespace.

              J'ai vu un générateur de pattern de test définit à partir d'un réseau baysien. J'imagine que c'est le même principe. Une machine d'état qui utilise des proba conditionnels pour changer d'état, en suivant un/des exemples comme point d'entrée au générateur. Par contre, définir un truc complètement de cette façon doit être sportif.

              "La première sécurité est la liberté"

              • [^] # Re: hello world

                Posté par  . Évalué à 1.

                En dataflow, "quand" définit les cycles courant et ceux d'avant n-1 n-2 …, le ou, j'imagine que cela définit peut être un namespace.

                Pour le workflow, n-1 et n-2…, sont défini HORS de la donnée. ET il y des traitements spécifiques (processus) à chaque étape pour être sûre de "bien faire" pour maintenant et pour la suite.

                En Evenja, la donnée par ce qu'elle EST, au MOMENT et OÙ elle et ses voisines de mêmes, "provoque" la suite.

                Pour résumé en Workflow on fait de la Macro-logique et en Evenja de la Micro-logique.

                …générateur de pattern de test définit à partir d'un réseau baysien…

                Si tu regarde la présentation Evenja-Bayesian tu verras la différence. Le choix du "segment" d'après ce trouve dans la donnée et une autre si nécessaire, pas dans le choix par un "programme de sélection" de la suite à faire.

                C'est pour cela que nous organisons ce concours.

                • [^] # Re: hello world

                  Posté par  . Évalué à 6.

                  "C'est intéressant ça… Et tu aimes partager ta passion ? tu peux en parler en public ? Faire l'historique de la louche à travers les âges ? Tu viens à Paris de temps en temps ?"

                  • [^] # Re: hello world

                    Posté par  . Évalué à 0. Dernière modification le 07 janvier 2014 à 13:47.

                    Oui, s'il y a un petit groupe je viens (10 personnes minimum). Je l'ai souvent fait.
                    Depuis l'année passé, les gens comprennent… avant c'était pas facile :)

                    Mais pour parlé uniquement de la manière de traiter les datas de Evenja ou comment faire un logiciel avec Evenja, ou améliorer un logiciel existant.

                    Dernières conférences

                    • [^] # Re: hello world

                      Posté par  . Évalué à 6.

                      "une vraie tête de vainqueur"

                      -> []

      • [^] # Re: hello world

        Posté par  . Évalué à 1.

        Il y a un Hello World sur la page des downloads.
        http://www.evenja.org/evenja/downloads

        Je ne le trouve pas. Une recherche de "hello" dans cette page ne trouve rien.

      • [^] # Re: hello world

        Posté par  (site web personnel) . Évalué à 10.

        Il se trouve que j'ai rédigé

        Evenja est aussi un nouveau paradigme de programmation. Il permet de définir une machine à état pour gérer des flux de données qui vont être traités en fonction des opérations de traitement définies dans le "circuit" (comme en électronique), mais aussi de l'état de la machine.

        Je suis toujours incapable de dire si c'est j'ai vraiment bien compris ce paradigme…

        Les exemples de HelloWorld son effectivement abscons : vu que ton paradigme est basé sur des flux et une machine à état, alors dessine des flux et une machine à état. Introduit ta méthode après, parce qu'on comprend pas quels axiomes on peut manipuler.
        De plus, les helloWorld ne gèrent aucun évènement, donc on voit pas l'intérêt de ta contribution.
        ie. Commence par une présentation inductive et ensuite du déductif pour comprendre le système en général.

        Si tu veux que ton projet marche, il va falloir faire un gros travail de pédagogie et de comm', parce que pour le moment, c'est complètement imbitable.
        Test simple : prend un développeur de base, met le sur ton site. Si en 5mn il a pas compris, considère que ton site est mal fait/imbitable.

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

        • [^] # Re: hello world

          Posté par  . Évalué à -9.

          C'est pour cela que nous organisons ce concours ;)

          Un nouveau paradigme, indique une nouvelle manière ou structure de penser ;)

          Désolé pour les "Turingeux", les séquences de cartes perforées, c'est "ASBIN".

          • [^] # Re: hello world

            Posté par  (site web personnel) . Évalué à 8.

            Tu devrais faire un peu plus profil bas. Lisaac a été présenter ici, alors qu'il ne s'agissait que d'un langage à prototype, et c'est fait descendre pour beaucoup moins que ça.

            Tu ne présentes pas l’intérêt de ta nouveauté.
            Tu ne présentes pas d'exemple concret.
            Tu affirmes un tas de propriétés, sans rien montrer.
            Tu ne démontres pas en quoi ton logiciel est meilleur qu'une solution déjà existante.

            A moins que le thread tombe dans l'oubli, le journal risque de partie en flamme.

            "La première sécurité est la liberté"

            • [^] # Re: hello world

              Posté par  . Évalué à -3.

              Tu ne présentes pas l’intérêt de ta nouveauté.

              Avantages

              Tu ne présentes pas d'exemple concret.

              Tutorials code source

              Tu affirmes un tas de propriétés, sans rien montrer.
              Tu ne démontres pas en quoi ton logiciel est meilleur qu'une solution déjà existante

              Pour les trois dernier points : Tutorials Howto

              • [^] # Re: hello world

                Posté par  (site web personnel) . Évalué à 6.

                Ta page "avantage" pourrait d'appliquer à n'importe quoi, et cela reste du purement qualitatif, sans quantitatif.

                Le code source est noyé. Celui que j'ai pu lire ressemble à du C++/Qt avec du message-passing entre objet. J'ai toujours pas compris l’intérêt de ton truc.

                "La première sécurité est la liberté"

      • [^] # Re: hello world

        Posté par  (site web personnel) . Évalué à 2.

        Tu parles de ce lien ? " http://downloads.evenja.org/download.php?app=evenja&os=all&file=evenja-3.2-tuto1.tgz "

        Le simple tutorial "hello world" contient un bonne centaine de fichiers. Avec sans doute un tas de truc autogénéré. J'ai pas pu trouver les fichiers sources. A moins que l'on parle des "hello1.xml" "hello2.xml" ?

        "La première sécurité est la liberté"

        • [^] # Re: hello world

          Posté par  . Évalué à -1. Dernière modification le 06 janvier 2014 à 14:49.

          Sur la page Download Code source, tu trouveras le code source des Tutos.

          Sur la page Download Documentation, tu trouveras la documentation "Tutorials Howto".

          Comme c'est une librairie, les bon vieux
          ./configure
          make

          … font le reste.

          • [^] # Re: hello world

            Posté par  (site web personnel) . Évalué à 2.

            Le code est un paquet de fichier *.cpp ? Je croyais qu'il s'agissait d'un nouveau langage. Je me fous de lancer l'exemple, je cherche à lire le code.

            "La première sécurité est la liberté"

            • [^] # Re: hello world

              Posté par  . Évalué à 0.

              Si tu as les *.cpp, tu as le code source.

              Mais je crois pas que en lisant le code cela va aider. Je pense que les tutos disponible explique mieux le fonctionnement basé uniquement sur la donnée et non comme en Turing, sur un "processus" pré-défini.

              • [^] # Re: hello world

                Posté par  (site web personnel) . Évalué à 5.

                "comme en Turing"

                Cela veut rien dire. Des langages non basé sur une suite de commande, il y a en des tas. (dataflow, grammaire BNF, xsl-fo, …)

                "Mais je crois pas que en lisant le code cela va aider."

                Si personne ne peut utiliser ton outil, à quoi sert-il ?

                "La première sécurité est la liberté"

                • [^] # Re: hello world

                  Posté par  . Évalué à 1.

                  Merci,

                  Voici un des éléments que je cherchais à éclaircir avec le concours.

                  En Evenja "La suite de commande" n'existe pas du tout. Mais c'est la donnée OÙ, QUAND et QUOI qui défini la suite… avec ses copines ayant un lien direct selon leur valeur propre à ce moment à cette endroit.

                  Le dataflow est un management pré-défini d'une logique macro, résultant d'une analyse du "use case". Evenja est la mise en place d'un micro-level du "use-case".

                  La grammaire BNF a pour rôle de fixer des règles à des compilateurs. En Evenja TOUT ce passe selon la réalité des données au RUNTIME, pas à la définition du logiciel.

                  La XSL-FO consiste à créer qqChose de static en sortie d'un mélange de donnée XML/XSL. Le résultat est statique. En Evenja c'est la donnée et son OQQ (OÙ-QUAND-QUOI) WWW(Where-What-When) qui défini la réalité suivante dynamiquement par rapport au CONTENU et à ceux de ses données proches (contenu).

              • [^] # Re: hello world

                Posté par  (site web personnel) . Évalué à 4.

                Pourquoi un hello world a besoin de dizaines de fichier .cpp ?!

                "La première sécurité est la liberté"

                • [^] # Re: hello world

                  Posté par  . Évalué à 3.

                  Si tu regarde bien, il y a le kernel et aussi la fonctionnalité "Hello World".
                  Cela fait beaucoup de class pour le Kernel…

                  Mais ce qui est vraiment intéressant, comme tu pourras le voir c'est que deux "fonctions" qui n'ont rien en commun et qui ne se connaisse pas du tout (humour) ;)

                  Tutos1 et Tutos2… produisent le Tutos3 SANS aucune modifications de leur code-source respectif et sans se ralentir l'une, l'autre.

                  • [^] # Re: hello world

                    Posté par  (site web personnel) . Évalué à 2.

                    "Tutos1 et Tutos2… produisent le Tutos3 SANS aucune modifications de leur code-source respectif et sans se ralentir l'une, l'autre."

                    Comme les signaux/slot de Qt ?

                    "La première sécurité est la liberté"

                    • [^] # Re: hello world

                      Posté par  . Évalué à 1.

                      Tout les systèmes de message fonctionnent ainsi et offre cette avantage de mélange de fonctions. Comme les messages des OS d'ailleurs qui mélange les applications ;)

                      Mais des vrais fonctions non slotée (c'est à dire NON commandée à l'avance) où l'on est obligé de s'inscrit avant le besoin réel et pour suivre une procédure pré-définie.

                      La différence est vraiment visible quand tu écrit un programme concret avec. Essaie et tu verras (je fait du code depuis 1979, j'ai une vague idée :)

                      En plus dans le cas de Message "sloté" tu défini les segments d'un graphe bayesian et non quelque chose de dynamique comme avec Evenja. C'est à nouveau le processus "Turing" qui défini la suite… pas la donnée elle-même, par ce qu'elle EST au moment et à l'endroit OÙ elle est.

                      • [^] # Re: hello world

                        Posté par  (site web personnel) . Évalué à 1.

                        " (je fait du code depuis 1979, j'ai une vague idée :)"

                        Et vous donnez l'impression d'être bloqué avec les paradigmes de l'époque.

                        "Mais des vrais fonctions non slotée (c'est à dire NON commandée à l'avance) où l'on est obligé de s'inscrit avant le besoin réel et pour suivre une procédure pré-définie."

                        Il y a forcément un endroit pour décrire le canal de communication entre l'émetteur et le récepteur.

                        " dans le cas de Message "sloté" tu défini les segments d'un graphe bayesian "

                        Non, pas du tout, tu définis un canal de canal de communication.

                        Et arrêtez de parler de Turing à tout bout de champ. Cela fait un peu ridicule, son ruban simple est une démonstration, que l'on peut écrire touts algorithmes avec pas grand chose, rien de plus. Vous semblez pensez que tout algo se décrit comme sur un ruban de Turing, alors qu'il a seulement démontrer l'implication inverse.

                        "La première sécurité est la liberté"

                        • [^] # Re: hello world

                          Posté par  . Évalué à 1.

                          Je crois que nous arrivons au fond de la différence ;)
                          Merci pour cette discussion.

                          Il y a forcément un endroit pour décrire le canal de communication entre l'émetteur et le récepteur.
                          " dans le cas de Message "sloté" tu défini les segments d'un graphe bayesian "
                          Non, pas du tout, tu définis un canal de canal de communication.

                          Exactement tu définis un canal Bayesian, à un moment dans une procédure, par exemple une méthode "init", qui décrit tes besoins pour ton programme spécifique, selon les consignes défini LORS DE L'ANALYSE.

                          Evenja n'utilise QUE les données et leur contenu dans l'espace temps réel pour définir la suite. C'est le contenu QUI DEFINI LE CANAL SUIVANT.

                          Si dans ton programme tu ajoutes des traitements nouveaux avec de nouvelles données et de nouveaux contenu… tu es sûre de ne pas avoir à changer ta méthode "init" ? Entre autres ?

                          En Evenja c'est CERTAIN ! Puisque c'est la donnée qui contient la suite et pas la logique dans la méthode "init" ou autres.

                • [^] # Re: hello world

                  Posté par  (site web personnel, Mastodon) . Évalué à 5.

                  Pourquoi un hello world a besoin de dizaines de fichier .cpp ?!

                  Parce qu'il n'est pas encore passé à systemd, je suppose…

                • [^] # Re: hello world

                  Posté par  . Évalué à 6.

                  Pourquoi un hello world a besoin de dizaines de fichier .cpp ?!

                  Une dizaine? Tu es bien loin de la réalité. Il y a 24 .cpp et 29 .h! :-D Le plus marrant, c'est que la chaine de caractères "Hello World!" est dans l'un des 5 fichiers xml.

                  À part un concours d'obfuscation, l'intérêt m'échappe.

                  • [^] # Re: hello world

                    Posté par  (site web personnel) . Évalué à 9.

                    C'est surtout que j'ai beau pas être un dieu de la programmation, quand je vois un gars qui dit programmer depuis 1979, mais ne maîtrise pas les bases de l'indentation de code, ni de la gestion d'erreur, j'ai l'impression qu'on me prend bien pour un con. La présentation PDF est un summum de vaporware, et le concepteur qui fait un concours pour qu'on explique son concept… Bref. Un sérieux concurrent pour MultiDeskOS.

  • # RP

    Posté par  (site web personnel) . Évalué à 7. Dernière modification le 06 janvier 2014 à 13:05.

    Le site a l'air assez perché et me promet qu'Evenja va pouvoir réparer les motos russes à distance, mais il n'indique pas vraiment ce que c'est. Je n'ai pas très bien compris si c'était un paradigme de langage de programmation, ou bien de développement. Dans le premier cas, est-ce que c'est une forme de programmation réactive ?

    • [^] # Re: RP

      Posté par  . Évalué à 1.

      Oui, c'est une programmation réactive, mais c'est aussi un peu de l'Agent (mais stupide l'agent, pas la programmation par agent), et aussi un peu de workflow, et un peu tout ce que j'ai lu sur cette page.

      Mais pas réactive dans le sens, un processus va réagir ou être déclenché après un calcul en fonction de certains paramètre ou configuration.

      C'est la donnée, elle-même en fonction de ce qu'elle est à un moment à un lieu qui produit la suite. Pas un processus découlant d'une analyse, qui va devoir tenir compte de tout les cas de "réactions" et des différentes conditions.
      Et qui ce complique avec le temps (voir bugs).

      Le USE CASE est le programme.

  • # hum

    Posté par  . Évalué à 10.

    À lire le site Web et à survoler le code source, cela ressemble fort à un concurrent de feu MultiDeskOS.

    • [^] # Re: hum

      Posté par  . Évalué à 9.

      Zino/Zind sera-t-il écrit grâce à Evenja ?

  • # Broken English

    Posté par  . Évalué à 3. Dernière modification le 06 janvier 2014 à 16:20.

    Evenja vs OOP

    By definition, OOP mean Object Oriented Programming ⇒ everything is based on object, with his object inheritance.

    Evenja is based on events, it is not a structure that define the behavior of the software as in OOP. But the events and his own content, when and where they are, that define the behavior of the software.

    WUT ?

    "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

    • [^] # Re: Broken English

      Posté par  (site web personnel, Mastodon) . Évalué à 3.

      Et surtout il n'a pas compris ce qu'est l'OOP. La programmation orienté objet n'est pas synonyme de classes ou d'héritage. On peut faire de l'objet sans celà.

      • [^] # Re: Broken English

        Posté par  . Évalué à -4.

        Suis totalement d'accord avec toi !
        Avant le C++ on faisait du C avec des struct… sérieux :)

        • [^] # Re: Broken English

          Posté par  (site web personnel, Mastodon) . Évalué à 1.

          Les struct sont des class publiques, leur instantiations sont des objets. Quand je pense à la programmation objets sans classe, je pense à la programmation modulaire et la programmation générique, avec le polymorphisme statique.

    • [^] # Re: Broken English

      Posté par  . Évalué à 1.

      J'ai mise à jour la page du wiki.evenja.org.

      Ainsi c'est plus clair, j'espère.

  • # Brace yourselves, bullshit is coming.

    Posté par  (site web personnel, Mastodon) . Évalué à 8.

    Le src/main.cpp de l'outil de la bibliothèque ne laisse aucun doute quand à la qualité du développeur. Les commentaires WTF sont de moi :

    #include <stdlib.h> // WTF Tiens, je croyais que j'allais lire du C++
    #include <string.h>
    
    #include "OSconfig.h"
    #include "fstarter.h"
    #include "returncodes.h"
    #include "globalvars.h"
    
    int main(int argc, char * const argv[])
    {
      long ret = RET_OK;
      char buff[ MAX_STRING]; // WTF Brace yourself, a buffer overflow is comming.
    
      if (argc < 2)
      {
        sprintf( buff, "Error #%ld \n", (long) RET_NOPARAMS); // WTF Seriously?
        printf( "%s", buff);
            return EXIT_FAILURE;
      }
    
      evenja::initGlobalVars(); // WTF Admettons
    
      evenja::Fstarter* starter = new evenja::Fstarter(); // WTF Oh, a nude pointer
      if(! starter)                  // if created then work, otherwise error
      {
        sprintf( buff, "Error #%ld \n", ( long) RET_MEMORYSPACE); // WTF But why sprintf?
        printf( "%s", buff);
            return EXIT_FAILURE;
      }
    
      // Start with the config file
      char xmlFile[MAX_PATH]; // WTF Brace yourselves (bis)
      sprintf( xmlFile, "%s/%s/%s", DATADIR, "evenja/configs", argv[ 1]); // WTF WHITEWALKERS OVERFLOW!!!
      ret = starter->start( xmlFile);
    
      if (ret != RET_OK)
      {
        sprintf( buff, "Error #%ld \n", ret); // WTF ...
        printf( "%s", buff);
            return EXIT_FAILURE;
      }
    
      starter->execute();
      ret = starter->end();       // Enabled if we are in a dynamic configuration
    
      delete starter; // WTF Why?
    
      return RET_OK; // WTF Why not ret, recently assigned to hold the actual ret code?
    }

    Concept fumeux, incompris de l'auteur lui-même.
    Code douteux.

    C'est assez pour arrêter la blague je crois.

    • [^] # Re: Brace yourselves, bullshit is coming.

      Posté par  . Évalué à 1.

      Question naïve (histoire de profiter de cette discussion absurde pour apprendre quelque chose), pourquoi le WTF sur le "delete starter;"? Simplement parce que ça ne sert à rien vu qu'on est juste avant le return du main(), ou y-a-t'il quelque chose de plus profond?

      En tout cas, c'est un superbe exemple de C/C++ :-)

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  (site web personnel, Mastodon) . Évalué à 1.

        Tout à fait, et encore, j'ai passé un peu de temps à lire les classes, c'est assez consternant (mélange de fonctions membres virtuelles et non-virtuelles, destructeur non-virtuel sur des classes dérivées publiquement, réimplémentation de std::list et de realloc en combo, etc).

        Oui, delete starter est tout à fait inutile, puisque l'objet sera libéré à la termination du processus.

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 4.

          D'un autre côté, ce n'est pas une précaution utile quand même de nettoyer son bazar avant de terminer le processus? Quelque part, si dans 6 mois tu trouves ton main() trop long, et tu copies-colles le bloc de code ailleurs, l'absence de delete aurait aussi déclenché un WTF bien plus grave, non?

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 0.

          Ben voilà tu as trouvé un des tips que j'utilise.

          J'utilise le "virtuel" différemment que cela ne se fait classiquement en OOP. Tu peux participer au concours ;)

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  . Évalué à 9.

            J'utilise le "virtuel" différemment que cela ne se fait classiquement en OOP.

            Tu essaies d'avoir plus de "Fortunes" que Jayce ?

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            struct base
            {
                virtual void hop() { }
                void plop() { }
            };
            
            #include <iostream>
            
            struct derivate : base
            {
                virtual void hop() {  std::cout << "Hop!\n";}
                void plop() { std::cout << "Plop\n"; }
            };
            
            int main()
            {
                base * p = new derivate;
            
                p->hop(); // Ok
                p->plop(); // Ko
            }

            En règle général, on essaye d'éviter ce genre de blagues, pour éviter à l'utilisateur de se tromper dans l'utilisation des objets.

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 3.

          Oui, delete starter est tout à fait inutile, puisque l'objet sera libéré à la termination du processus.

          L'objet ou seulement la mémoire utilisée ? Si le destructeur fait un truc non-trivial, genre ajouter une entrée à /etc/passwd, désallouer la mémoire ne suffit pas.

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  (site web personnel, Mastodon) . Évalué à 3.

            Il sera détruit, donc le destructeur sera appelé. Cependant, si le destructeur fait quelque chose de non-trivial, c'est qu'il y a un problème.

            En règle générale, on essaye de toute façon de libérer les ressources gérées de manière explicite, pour éviter au destructeur de devoir gérer des problèmes complexes, sans pouvoir lever d'exceptions (puisque lever une exception depuis le destructeur, c'est verbotten).

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  . Évalué à 2.

        Je ne pense pas que c'est un code C++ parfait. Je suis pas le meilleures pour la manière d'écrire le code.

        Sûre que cela ne sert à rien le dernier "delete starter", mais je viens d'une époque où chaque "byte" de mémoire comptais et j'aime bien faire le nettoyage complet en quittant l'application.

        J'ai connu des compilateurs … pas très propre, disait le vieux :D

    • [^] # Re: Brace yourselves, bullshit is coming.

      Posté par  . Évalué à -3.

      Merci pour tes remarques constructive.
      J'ai regardé ton CV… BIEN.

      Je te propose de regarder le mien.

      Depuis 1988 tout en C et C++… Mais sûrement pas parfait. Heureusement mes programmes fonctionnent à la place ;) Puisque je vis de cette programmation non parfaite depuis 1986 :)

      Inscris-toi au concours et essaye de comprendre le paradigme en posant des questions, je crois cela plus constructif.

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  (site web personnel) . Évalué à 2.

        "Full profiles for 3rd-degree connections are available only to premium account holders."

        Dommage, j'étais curieux.

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  (site web personnel, Mastodon) . Évalué à 3.

        essaye de comprendre le paradigme en posant des questions,

        Oké, j'ai donc une question : « Globalement, ça sert à quoi ? »

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  . Évalué à 7.

        Puisque je vis de cette programmation non parfaite depuis 1986

        On ne peut évidemment que se réjouir que les gens aient un boulot dans lequel ils s'épanouissent. Mais bon, je ne suis pas développeur moi-même, je code des outils quand j'en ai besoin mais ce n'est pas le centre de mon activité, et il est pourtant très clair pour moi que le code présenté n'est pas d'un niveau professionnel ; je ne pense même pas qu'il serait passable dans la plupart des logiciels libres artisanaux qu'on trouve dans les distributions Linux. Ça ressemble à un mélange entre deux langages de programmation, C et C++, et tout ça semble très bancal—je ne sais pas si certains d'entre nous enseignent, mais il serait peut-être utile qu'ils indiquent à quel niveau d'études correspond un tel morceau de code.

        Le pépin, à mon avis, ce n'est pas des compétences de développeur douteuses (c'est déja pas mal d'être capable de produire un code qui compile, tant qu'on ne se situe pas dans un contexte professionnel), c'est que votre argumentation tourne autour du fait que les langages de programmation traditionnels ne correspondent pas à certaines de vos attentes, alors qu'il semble évident que vous êtes loin de les maitriser à un niveau suffisant pour émettre de telles critiques. Ça pose quand même un vrai problème de crédibilité.

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 7.

          Je te trouve injuste. Par exemple, le code suivant:

          #define XML_VERSION                 (char*)"1.0"           /** Version of XML (compatible) */
          #define TXT_NEW                     (char*)"NEW"           /** Name of a new tree */
          #define TXT_NULL                    (char*)""              /** Null string */
          

          dénote clairement une capacité à anticiper l'avenir (pour quand XML changera de version, ou pour quand la chaîne vide ne sera plus vide), ce qui me semble bien la marque d'un nouveau paradigme disruptif qui bouscule l'existant et fera grincher les grincheux.

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à -1.

          Merci de parler du niveau de ce code source.
          Ce code a été écrit pour que le fonctionnement soit simple et compréhensible par le maximum de gens. J'ai souvent vu des programmeurs C++, ne pas comprendre plus que du simple C++98 sans rien de spécial même comme du "virtuel" ou des méthode "null".

          La version 4 de Evenja, est en cours et en C++11, exclusivement en Template, puisque c'est ce que j'apprécie personnellement le plus.

          Quand elle sera finie, bientôt j'espère (quelques semaines). Je me ferrais un plaisir de la mettre en Open Source comme le reste et de lire contentieusement vos remarques.

          Le but de cette news était, d'expliquer la logique Evenja, pas vraiment de savoir si la notion "#define" est dépassée ou toujours d'actualité.

          Concernant la crédibilité, j'aimerais savoir qui parmi mes accusateurs de "manque crédibilité" peux se vanté d'avoir fait un programme qui concurrence cinq sociétés de programmation à lui tout seul et aussi un des truc que j'ai mi le plus de temps à fignoler : Faire 45000 filtres différent sur 7 colonnes en mémoire sur une base de donnée de 10 colonnes sur un Pentium 1Ghz, y compris les calculs de l'application en 0.75 secondes (les filtres et les données changeant à chaque fois). Et quand je dit programme fait, c'est pas dans sa cave, c'est mise en production chez DES entreprises de plus de cents personnes, pendant plusieurs années.

          Si l'un de ses "programmeurs" arrivent à me donner une solution technique pour une seul des choses ci-dessus, je prendrais volontiers en compte ces remarques.

          Mon CV

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  . Évalué à 2.

            Pourquoi même le CV ressemble de près comme de loin à un imbroglio de divers langages …

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  . Évalué à 9. Dernière modification le 07 janvier 2014 à 10:16.

            J'ai souvent vu des programmeurs C++, ne pas comprendre plus que du simple C++98 sans rien de spécial même comme du "virtuel" ou des méthode "null".

            Ça:

            char buff[ MAX_STRING];
            sprintf( buff, "Error #%ld \n", (long) RET_NOPARAMS);
            

            c'est du C, pas du C++.

            Personne je pense n'a suggéré que votre code ne fonctionnait pas—comment pourrait-on? On n'a pas accès aux logiciels dont vous parlez. Ce que les gens disent, c'est que vous ne programmez pas comme un professionnel, et que certaines erreurs (comme le buffer overflow) ne devraient pas être présentes dans un code que vous facturez à un client. Après, si le client est content et qu'il s'en fout d'avoir un programme en C alors qu'il avait commandé du C++, et si vous lui avez pris trois fois moins cher que le coût d'un développement traditionnel, tant mieux.

            Pour prendre une analogie, si vous achetez une voiture, vous vous attendez à ce qu'elle marche bien. Mais si vous ouvrez le capot, et vous apercevez que tout tient avec des petits bouts de ficelle et de scotch, et que certaines pièces sont en plastique alors que vous aviez demandé du métal, alors le fait qu'elle fonctionne peut devenir secondaire : certes, elles fonctionne, mais ce n'est pas ce que vous aviez imaginé.

            En gros, tel que je le comprends, apparemment, votre voiture semble fonctionner. Mais quand vous ouvrez le capot, non seulement c'est du bricolage, mais en plus, personne, pas même des ingénieurs expérimentés, ne comprend comment elle fonctionne. Vous êtes vous-même incapable d'expliquer comment elle fonctionne, personne d'autre que vous ne pourrait reconstruire un tel moteur, et vous ne faites que dire que c'est un nouveau type de fonctionnement révolutionnaire. Et quand on prend une pièce au hasard et qu'on regarde comment elle est faite, elle semble avoir été bricolée par des ferailleurs roumains presbytes. Alors non, personne ne veut monter avec vous dans votre voiture : selon toute vraisemblance, elle va exploser au bout de 200 mètres. La réaction des gens est tout à fait rationnelle, et je ne vois pas comment vous pouvez imaginer convaincre avec les arguments que vous donnez.

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  (site web personnel, Mastodon) . Évalué à 1.

              En fait, ce qui me choque le plus dans ce passage, c'est l'emploi inutile de sprintf. Utiliser printf directement aurait été plus pertinent, et sans risque de buffer overflow.

              Notez que j'aime tendrement snprintf, mais que je ne l'emploi que de manière encadrée.

              • [^] # Re: Brace yourselves, bullshit is coming.

                Posté par  . Évalué à 2.

                Mais pour ce genre de trucs, en C++, tu ne fais pas

                ostream buff;
                buff << truc << endl;
                

                ?

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  (site web personnel, Mastodon) . Évalué à 3.

                  En PHP j'utilises sprintf, jamais la concaténation.
                  En C++, j'utilises boost::format.
                  En C, snprintf.
                  En Python, le mécanisme natif avec l'opérateur %.
                  En JavaScript, je pleure ma mère et je supplie pour qu'on utilise un système de template à la mustache.

                  En fait, je trouve la concaténation ou l'injection de chaîne totalement illisible. Le soucis de l'i18n me pousse aussi à employer des formats de chaîne.

                  Au fait, std::endl, ce n'est pas un synonyme de "\n". std::endl flush en plus, ce qui peut avoir des conséquences sur les performances http://en.cppreference.com/w/cpp/io/manip/endl

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  (site web personnel) . Évalué à 2.

                    "ce qui peut avoir des conséquences sur les performances"

                    Et pas qu'un peu. Pour une application de copie qui fonctionne par bloc de 15Mo, avec une mise à jour d'un pourcentage de complétion à chaque fin de copie d'un bloc, avec une bande passante de 100 Mo/s, le flush() faisait chuter la vitesse de 20 % !

                    "Le soucis de l'i18n me pousse aussi à employer des formats de chaîne."

                    Tu peux développer ? Je n'ai jamais eu à faire à du i18n.

                    "La première sécurité est la liberté"

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  (site web personnel, Mastodon) . Évalué à 6.

                      Une version non internationalisée :

                      std::cout << "The captain is " << age << " old.\n";
                      std::cout << std::format("The captain is %d old.\n") % age;

                      Traditionnellement, pour traduire une phrase on utilise la fonction (ou la macro) _ :

                      Une version internationalisée (où je considère qu'il existe un overload pour la fonction _(std::stringstream ss) ) :

                      std::cout << _("The captain is ") << age << _(" old.\n");
                      std::cout << _(std::stringstream("The captain is ") << age << " old.\n"); 
                      
                      std::cout << std::format(_("The captain is %d old.\n")) % age;
                      std::cout << std::format(_("The captain is %1$d old.\n")) % age;

                      Dans le premier cas, il faudra traduire deux chaînes, qui ne sont pas des phrases complètes. Ici le problème n'est pas très grave, car l'ordre des séquences sera le même en français ou en allemand qu'il l'est en anglais. Mais la traduction risque tout de même de ne pas être correcte ("Le capitaine est ", " vieux.")

                      Dans le second cas, il y aura autant de chaîne à traduire qu'il y a d'âges possibles. Sans compter que je ne suis pas convaincu gettext supporte l'évaluation d'expressions lors de la création du catalogue de traduction.

                      Enfin, dans le troisième cas, avec la chaîne de format, il n'y a qu'une chaîne à traduire. Le quatrième permet ici est inutile, mais s'il y a plus d'un arguments à la chaîne (genre le nom du capitaine), il est possible de préciser la position de l'argument, et on pourra donc déplacer l'ordre relatif des placeholders dans la chaîne.

                      Note qu'en Python, on peut nommer ces arguments et utiliser un dictionnaire pour l'alimenter, ce que certains considéreront plus lisibles, là où d'autres se plaindront de la verbosité.

                      args = { 'age': age }
                      print _("The captain is %age old.\n") % args
                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  . Évalué à 3. Dernière modification le 07 janvier 2014 à 13:11.

                    Au fait, std::endl, ce n'est pas un synonyme de "\n". std::endl flush en plus, ce qui peut avoir des conséquences sur les performances

                    Mais du coup, pour coller des messages d'erreur dans un ostream qui est peut-être cerr ou un fichier de log, est-ce que ça n'est pas canonique de flusher le truc? Si tu as un segfault juste après, c'est un coup à te retrouver avec un crash complètement silencieux, voire à considérer que le test s'est bien passé, non?

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  (site web personnel, Mastodon) . Évalué à 2.

                      La décision de flusher est de la responsabilité de std::cout ou std::cerr, voire std::clog. À noter que std::cerr (et donc std::cerr) n'est pas bufferisé dans un environnement POSIX. Tout ça est en fait défini dans POSIX, pour les flux standard de sortie. L'idée est que STDERR n'est pas souvent écrit, et donc il n'y a pas de problème à flusher, et ça répond surtout à ton interrogation ; alors que STDOUT est destiné à envoyé du bois, et doit donc être configuré au mieux pour une sortie optimale.

                      Ensuite, si tu utilises un autre système de log, ça configuration devrait se faire en fonction des compromis que tu dois faire. Il n'y a là pas de solution universelle, mais une question de besoin de l'application et de ses clients.

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à 1.

                        En fait, ça voudrait dire que std::endl n'a pas d'utilité en soi? Ce qui me semble un peu compliqué, c'est de devoir supposer que le code tourne sur un système POSIX par exemple, ça ne met pas en cause la portabilité?

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à -7.

              Concernant le "satck Overflow", j'ai beaucoup de chance. Mes applications chez mes clients fonctionne depuis des dizaines d'années, et sans jamais de problème de "stack overflow", des centaines d'utilisateurs tout les jours. Cool, sûrement la chance du débutant.

              Pour reprendre ton exemple de voiture, vos analyse de détails sont assez "spécial". C'est comme si je te montre une voiture pour essayer d'expliquer comment fonctionne le moteur de manière simple… Et je me retrouve avec des personnes qui discute de la couleur de la voiture, de la poignée, etc… Amusant, mais pas très constructif.

              Essayez de participer au concours si vous êtes si fort, franchement je serais content de trouvé une explication qui générerait moins de trolls :)

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à -3. Dernière modification le 07 janvier 2014 à 10:58.

              Je suis capable de l'expliquer Documentation Evenja et même que depuis une année quand je l'explique directement en public, les personnes se rendent compte que c'est possible, mais ne voient pas comment l'utiliser.

              Ce concours cherche justement des personnes plus douée que moi, qui pourraient mieux l'expliquer.

              Mon explication d'origine et perso, c'est "Un partouze de chat de Schrödinger, qui ce définisse eux-mêmes étant selon le lieu, le moment et leur état la cause ou l'inférence". Avec un déterminant externe au système, à l'inverse de l'exemple de Schrödinger interne au système de détermination.

              Je crois que c'est pire encore, comme explication, NON ? :)

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 1.

          que votre argumentation tourne autour du fait que les langages de programmation traditionnels ne correspondent pas à certaines de vos attentes

          J'ai mi 4 heures pour définir le USE CASE de générer des statistiques des appels entrant d'une Hotline pour Reuters à Genève, il y a quelques années.
          Le code dans l'ancienne version de Evenja a été écrit en 8 heures (même paradigme, mais avec un langage et son compilateur de script propre).
          J'ai corrigé les erreurs en 4 heures… Et installé en 5 minutes chez le client

          Si tu arrives à me trouver un paradigme dans lequelle tu peux OUBLIER l'analyse et ne même pas tenir compte des 4 autres fonctionnalité d'un programme déjà opérationnel, je lirais ta réponse avec attention.

          Les 4 autres fonctions déjà présente sur le serveur était dans le même langage :
          1) CTI, control du téléphone sur le bureau avec l'ordinateur (toutes fonctions, appel, réception, enregistrement vocal, déviation, etc..)
          2) Gestion des taxes du central téléphonique
          3) Programmation du central ou des centraux associés depuis tout les ordis du réseaux
          4) Gestion de client avec prépaiement et coupure automatique selon type de client.

          Pas à une seul seconde la programmation de cette cinquième fonctions "Hotline", n'a mise en péril de bugs ou de ralentissement le fonctionnement du serveur déjà existant.

          Si tu connais une autre approche, je prend, par curiosité ;)

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  (site web personnel) . Évalué à 3.

            Pas à une seul seconde la programmation de cette cinquième fonctions "Hotline", n'a mise en péril de bugs ou de ralentissement le fonctionnement du serveur déjà existant.

            Si tu connais une autre approche, je prend, par curiosité ;)

            Un code bien conçu, dans n'importe quel paradigme ? Auquel cas il sera modulaire, donc l'ajout d'une fonction qui n'a rien a voir sera faite dans son module indépendant, éliminant d'éventuels effets de bord ?

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à -2.

              Oui, normalement et en théorie, ce que tu écris :

              Un code bien conçu, dans n'importe quel paradigme ? Auquel cas il sera modulaire, donc l'ajout d'une fonction qui n'a rien a voir sera faite dans son module indépendant, éliminant d'éventuels effets de bord ?
              On devrait y répondre toujours OUI.

              Mais dans le processus de fabrication d'un programme, il y a l'analyse : selon le dico
              Examen méthodique permettant de distinguer les différentes parties d'un problème et de définir leurs rapports.

              Quelqu'un va définir une structure logiciel et tout ce qui est nécessaire pour que le programme exécute les tâches qu'on lui demande. ET normalement tout vas bien.

              Malheureusement dans la vie réel, au bout d'un moment, les besoins et tâches du logiciel change… c'est à ce moment que l'on recommence l'analyse (qui normalement aurai du être parfaite ;)
              La première structure ou une partie, devient source de bug et de complication, alors on sort la version 2.0.
              Et cela recommence. Dans la vie réel d'un programmeur, les clients demandes de choses qui peux-être (voir sûrement) n'avais pas été prévue… est c'est très souvent le cas.

              Sinon les bugs n'existerais plus depuis longtemps ;)

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à -4. Dernière modification le 08 janvier 2014 à 23:05.

              .

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  (site web personnel, Mastodon) . Évalué à 1.

        Et tu n'as pas honte de publier (et d'en faire la publicité) sale ?

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  . Évalué à 3.

          Pour le coup, je ne vois pas pourquoi il devrait avoir honte de publier sale. Mieux vaut publier sale que pas du tout.

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  (site web personnel, Mastodon) . Évalué à 4.

            Ça dépend quel est le but de la publication. Un gars qui vient nous raconter qu'il est plus malin que tout le monde, alors que son code montre un manque de maîtrise des parties du langage dans lequel il implémente sa panacée, n'a pas ma clémence. Et plutôt que de rejeter les remarques constructives que les pinailleurs dans mon genre fait, il devrait les considérer.

            Ensuite, du code caca, j'en écris aussi. C'est publié, mais je n'en fait pas une publicité monstre en disant que je révolutionne le monde.

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à 0.

              Si tu pouvais dans ta grande clémence, juste m'indiquer où j'ai écrit que cela "révolutionne le monde" ?

              J'aimerais enlevé cette erreur au plus vite. Si cela sors de ton imagination, c'est un autre problème…

              Evenja est juste un outil qui m'a rendu de grands services et je souhaite partager en licence libre, il y a un problème ? Si oui lequelle ?

              Quand je livrerais la version C++11 en templates. La version qui ne cherche plus à être une "explication ouverte", j'espère que tu m'aidera aussi, dans ta grande clémence bien entendu.

              • [^] # Re: Brace yourselves, bullshit is coming.

                Posté par  (site web personnel, Mastodon) . Évalué à 1.

                Inventer un nouveau paradigme, c'est révolutionnaire, ça change le monde.

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  . Évalué à 1.

                  Je crois pas.
                  Si tu ne prends que les Agents ou la programmation fonctionnelle, c'est deux autres paradigme et pourtant je crois pas que le monde à changé.

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  (site web personnel, Mastodon) . Évalué à 1.

                    Le programmation fonctionnelle a changé le monde, le monde n'est pas le même avant et après Google, qui est tout de même l'application du paradigme de la programmation fonctionnelle le plus proéminent (MapReduce et autres applications du paradigme).

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  . Évalué à 2.

                      Google ne se limite pas à une "application du paradigme de la programmation fonctionnelle"… À ce compte n'importe quelle technique utilisée par Google a "changé le monde", c'est un peu débile.

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  (site web personnel, Mastodon) . Évalué à 1.

                        Si, Google c'est MapReduce au départ, ce qui permet une recherche rapide sur un ensemble très large de données. Pas de programmation fonctionnelle, pas de Google.

                        Ah oui, quand je dis Google, je parles évidement du moteur de recherche, pas le reste autour.

                        • [^] # Re: Brace yourselves, bullshit is coming.

                          Posté par  . Évalué à 2.

                          Il ne suffit pas de MapReduce pour faire un moteur de recherche, il faut une BD performante (BigTable), un algorithme de classement (PageRank), et des tas d'autres choses autour.

                          MapReduce sert à optimiser le passage à l'échelle, mais un moteur de recherche ne se limite pas au passage à l'échelle. Il faut vraiment être aveuglé par la hype pour penser le contraire.

                          • [^] # Re: Brace yourselves, bullshit is coming.

                            Posté par  (site web personnel) . Évalué à 3.

                            N'empèche avant google, personne ne savait faire des applis tournant sur des clusters de 1000 machines, les doigts dans le nez.

                            Qui est capable de faire une application insensible à un plantage d'un ordinateur complet ? Aujourd'hui cela se démocratise avec les VM, mais c'est encore loin des applis déployés par google.

                            "La première sécurité est la liberté"

                            • [^] # Re: Brace yourselves, bullshit is coming.

                              Posté par  . Évalué à 2.

                              "Les doigts dans le nez" c'est n'importe quoi. Tu penses qu'il suffit d'un claquement de doigts et, hop, les problèmes de parallélisme sont résolus ? Ils servent à quoi les milliers d'ingénieurs chez Google ?

                              Qui est capable de faire une application insensible à un plantage d'un ordinateur complet

                              Drôle de question. Pas besoin d'attendre Google pour ça. Le système DNS, par exemple, existe depuis longtemps, et Google n'a pas inventé le load balancing.

                              • [^] # Re: Brace yourselves, bullshit is coming.

                                Posté par  (site web personnel) . Évalué à 1. Dernière modification le 08 janvier 2014 à 15:51.

                                Le load balancing ne te fait une tolérance aux pannes en écriture.

                                "Tu penses qu'il suffit d'un claquement de doigts et, hop, les problèmes de parallélisme sont résolus ?"

                                Il faut utiliser les outils mis à disposition (mapreduce+bigtable), mais ce n'est pas sorcier non plus. C'est beaucoup moins complexe que de faire du mpi.

                                "La première sécurité est la liberté"

                          • [^] # Re: Brace yourselves, bullshit is coming.

                            Posté par  (site web personnel, Mastodon) . Évalué à 1.

                            Pas plus qu'il ne suffit d'un moteur pour faire une voiture, mais c'est indispensable.

                            Un peu comme la bielle au moteur à vapeur ; la roue au transport ; la bêche au jardinage. Des innovations sans lesquelles une technologie n'a pas la même saveur.

                            « optimiser le passage à l'échelle »
                            Et en français ça donnerait quoi ? MapReduce permet d'affronter les problèmes de croissance (en volume de données et de requêtes) certes, des problèmes qui irrésolus n'auraient pas permis à Google d'exister. On serait encore à se coltiner des moteurs peu pertinent tels qu'Altavista ou Y!

                            L'incapacité à scaler aurait empêcher Google de croître, c'est certain. Et c'est ce point que je mettais en avant.

                            • [^] # Re: Brace yourselves, bullshit is coming.

                              Posté par  . Évalué à 2.

                              Ta phrase d'origine c'est "Google c'est MapReduce au départ", ce qui est fallacieux.

                              On peut toujours ergoter sur l'importance relative de telle ou telle technique dans le succès de Google (PageRank, BigTable, MapReduce…) : ce n'est pas intéressant, parce que ce qui compte c'est d'avoir eu la vision nécessaire pour combiner tout ça. Les techniques en soi peuvent parfaitement ne rien donner. Par exemple la Chine a inventé l'imprimerie bien avant l'Europe, et n'en a rien fait contrairement à nous. Il faut se départir d'un regard purement technicien sur les bouleversements sociaux ou économiques.

    • [^] # Re: Brace yourselves, bullshit is coming.

      Posté par  (Mastodon) . Évalué à 6.

      On pourrait ajouter que le if après le new est complètement inutile puisque new ne renvoie jamais null. Sans compter qu'il ne sert à rien ici de faire un new, avoir l'objet dans la pile suffirait amplement (et éviterait d'avoir à faire un delete à la fin). Bon, les include de headers C et surtout aucun header C++, c'est à mourir de rire. Et les buffer overflow included également.

      • [^] # Re: Brace yourselves, bullshit is coming.

        Posté par  . Évalué à -2.

        J'ai une autre version et ma petite expérience avec :)
        cplusplus.com

        En 2)
        Same as above (1), except that on failure it returns a null pointer instead of throwing an exception.

        • [^] # Re: Brace yourselves, bullshit is coming.

          Posté par  (Mastodon) . Évalué à 3.

          Arrête, tu t'enfonces. Tu montres juste que tu n'as pas compris le principe de surcharge. Dans ton cas, tu n'utilises pas 2) mais 1), sinon tu aurais écris :

          evenja::Fstarter* starter = new(std::nothrow) evenja::Fstarter();

          Du coup, comme l'indique ton lien : "On failure, it throws a bad_alloc exception."
          Et donc, tu n'auras jamais NULL en sortie.

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  . Évalué à -1.

            Je suis pas là pour troller ou parlé du new et de ses retour.

            Mais si je l'ai fait ainsi c'est que à un moment la class ne se créait pas et j'avais un zéro en retour.

            Quand au fait que c'est écrit sur plusieurs ligne, il y a plein d'endroit dans le code ainsi. C'est pour simplifier la compréhension de ceux qui n'ont pas votre niveau de lecture. Le but étant de partagé la technique par la manière du code.

            La prochaine version en Template C++11, résoudras ce problème de "simplicité" ;)

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  (site web personnel, Mastodon) . Évalué à 3.

              Mais si je l'ai fait ainsi c'est que à un moment la class ne se créait pas et j'avais un zéro en retour.

              Oh, de la programmation par hasard :o)

              Franchement, c'est un bogue de ton compilo… à moins que tu ne compiles en désactivant les exceptions ?

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à 3.

              Mais si je l'ai fait ainsi c'est que à un moment la class ne se créait pas et j'avais un zéro en retour.

              Chaque excuse est encore plus piteuse que la précédente :-)

              • [^] # Re: Brace yourselves, bullshit is coming.

                Posté par  . Évalué à -3.

                Nous étions deux à avoir cette vision imaginaire avec le "main()" et le zéro en retour. J'informerais donc mon ami de vos débats au delà de nos heures de travail concrète.

                Je suis heureux que des connaissances scolaire, bien cadrée par des sites Internet soit plus réel que la réalité elle-même.

                Dans ce cas effectivement vous ne pouvez pas comprendre l'approche Evenja, puisque le système ne se base QUE sur la réalité des données OÙ, QUAND et QUOI ;)

                Effectivement n'essayer pas de comprendre, c'est trop différent.

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  . Évalué à 10. Dernière modification le 07 janvier 2014 à 16:24.

                  Techniquement, il semble que certains vieux compilateurs ne respectaient pas le standard—ça doit dater quand même, la FAQ C++ parle de "very old". Ou alors c'est juste un problème d'include <new>, apparemment c'est nécessaire pour certains compilos. Mais bon, ce que je trouve bizarre, c'est de ne pas attrapper l'exception "réglementaire" mais de faire ce test, qui ressemble à un calque du test du pointer après le malloc sous C. Et quand quelqu'un vous dit que le test ne sert à rien, vous essayez d'abord d'argumenter sur la base du new(nothrow), qui est quand même un truc assez confidentiel, puis vous dites clairement et naturellement que vous n'auriez pas fait le test si vous n'aviez pas eu le problème. On fait tous plus ou moins ça, j'imagine, mais on sait tous plus ou moins que c'est une pratique assez honteuse, et c'est juste un peu naïf d'utiliser ça comme argument dans une discussion où on remet en cause vos compétences de programmeur.

                  Encore une fois, écrire du code pourri, beaucoup le font. Le publier, certains le font. Le produire dans un contexte professionnel, ça commence à craindre un peu, ça pourrait se rapprocher de l'escroquerie (par exemple, livrer du code écrit dans un dialecte personnel du C et le vendre comme du C++, c'est gonflé). Mais quand on dit que les programmes traditionnels sont pleins de bugs et difficiles à développer, il faut quand même montrer un minimum de technique. L'exemple traditionnel, c'est Picasso, qui a étudié très soigneusement l'école classique avant de définir son style. Là, vous définissez votre style sans bases solides dans le style traditionnel, vous ne pouvez pas donner confiance aux autres, c'est techniquement impossible.

                  Les accusations que vous subissez sont graves, on parle de vous plus bas dans cette discussion comme un mythomane et un imposteur. Et vos réponses sont exactement celles qu'on attendrait d'un mythomane ou d'un imposteur : "n'essayez pas de comprendre, c'est trop différent". Vous êtes en train de dire à des programmeurs professionnels et reconnus (je ne parle évidemment pas de moi) qu'ils ne peuvent pas comprendre, tout en démontrant naïvement vos lacunes en programmation. C'est une position qui me semble intellectuellement intenable.

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  . Évalué à -1.

                    C'est gentil et merci, mais je m'en fou des accusations de personne qui réponde par une boucle à une question de logique informatique.

                    C'est pas grave, ils trollent…. ils ne savent faire que cela.

                    C'est amusant surtout le C/C++… c'est le prof qui leur a dit que c'était pas bien, alors j'accepte la mauvaise note :D
                    Je répondrai : regarde le code qui est générer en C et en C++ pour ce genre d'opérations et tu auras ta réponse.

                    D'ailleurs je n'ai eu aucune réponse en retour concernant mes questions pour l'analyse en objet d'une Hotline, des 45000 filtres en 0.7 seconde (normalement c'est 30 minutes avec les objet TableDB du marché), et autres questions qui rendent réel et concrète des discussions stériles et stupides puisque basée sur un dogme appri, et ne serait-elle basée que sur le résultat de compilation on ferrait avancer le schmilblique ;)

                    Et puisque tu me semble correct, franchement, ça m'amuse, je sais ce que je vais sortir dans quelques semaines et j'attend avec impatience leurs remarques, vraiment j'en rigole déjà, tu pourras leur demandé leur opinion de "spécialiste" :D à ce moment là.

                    Je connais un excellent programmeur, chaque fois que je li son code, je rêve qu'un jour j'écrirais comme lui, aussi bien le code que les commentaires.

                    Perso je suis pas un spécialiste ou un excellent programmeur, mais j'ai toujours fait des programmes mi en production chez des gros clients et qui ont toujours fonctionner SANS PLANTAGE ni téléphone d'URGENCE pendant DES ANNEES de fonctionnement en PRODUCTION REEL. Avec des fois des algos assez sympa, je crois.

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  . Évalué à 6. Dernière modification le 07 janvier 2014 à 17:54.

                      C'est amusant surtout le C/C++… c'est le prof qui leur a dit que c'était pas bien, alors j'accepte la mauvaise note :D
                      Je répondrai : regarde le code qui est générer en C et en C++ pour ce genre d'opérations et tu auras ta réponse.

                      I don't agree avec ta réponse, quand un prof say that mixing deux langages c'est not good, c'est perhaps because c'est juste imposer a painful effort aux lecteurs et rendre le monde ambigü et inhabitable.

                      À mon avis, tu as toi-même démontré avec ton test inutile du retour de new que tu as appliqué un paradigme C en C++: quand tu codes, tu ne sais pas vraiment dans quel langage, ce qui peut amener à des bugs ou des erreurs, et créer du code illisible et inutilisable. Être autodidacte est très différent de mal faire les choses, surtout pour des disciplines "dures" comme les mathématiques ou la programmation : un jour, tu ne peux plus t'échapper avec des mots et des schémas, et tu finis par devoir te confronter à la réalité. La réalité avec le code du main() qui a été montré, c'est que le programme peut planter s'il est lancé avec une mauvaise commande, et que le buffer overflow peut introduire une faille de sécurité dans le système du client.

                      je n'ai eu aucune réponse en retour concernant mes questions pour l'analyse en objet d'une Hotline, des 45000 filtres en 0.7 seconde

                      Tu n'as aucune réponse parce que ton problème est vague et mal spécifié. Je ne comprends pas ce que sont ces 45000 filtres, mais si j'essaye d'extrapoler à un exemple concret, si tu as une table de 45000 lignes x 10 données (réels double précision) et que tu filtres par une comparaison (par exemple, ne garder que les lignes où les 7 premières colonnes sont positives), c'est quasiment instantané. Je ne vais pas me faire le code en C, mais même avec un langage de script comme R et un code crade,

                      > L <- 45000
                      > D <- 10
                      > dd <- matrix(rnorm(L*D), ncol=D)
                      > system.time(dd[dd[,1] < 0 & dd[,2] < 0 & dd[,3] < 0 & dd[,4] < 0 & dd[,5] < 0 & dd[,6] < 0 & dd[,7] < 0],])
                         user  system elapsed 
                        0.021   0.001   0.022
                      
                      

                      20 ms sur un Cpu à 2.8 GHz, ça fait 0.07s sur un 1 GHz. J'imagine que tu as mal expliqué ton problème, évidemment, mais je veux juste te faire comprendre que balancer des trucs comme "45000 filtres en 0.7 secondes", ça n'impressionne personne d'autre que toi. Et dire que les SGBD commerciaux mettent 30 minutes, si tu les utilises de la même manière que C++, ça risque de n'étonner personne. Rien dans les informations et le code fourni ne prouve que tu n'es ni un escroc, ni un mythomane.

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à -2.

                        Le problème des 45000 filtres d'une table :

                        Tu reçois environs 300K de donnée de la base de donnée dans un objet que nous nommerons TableDB.

                        Tu "start" le début du temps, juste après l'arrivée des données SQL.

                        Cette table est composée de 10 colonnes nommée (champ), décomposée en deux parties
                        1) Les sept premières colonnes sont les données pour filtrer.
                        2) Les trois dernière colonnes contiennent de informations "utile"

                        Tu as 45000 combinaison de filtre différents pour chacune des sept colonnes de "filtre". Ou dit différemment, chacun de ses 45000 filtres sélectionne des parties différentes des lignes de la TablDB en fonction des sept première colonnes. Certaines combinaisons de filtre pour une seul colonne sont multiples par exemple "1-9 AND A-B OU …".

                        Le travail concret
                        Faire pour chacun des 45000 filtres diffèrent sur la TableDB avec les lignes selectionnée du filtre, un calcul correspondant à l'une des trois colonnes (informations) par exemple une addition mathématique et tu remplis le tableau de 45000 filtres => avec les 450000 résultats correspondant.

                        A la fin du calcul et du remplissage, c'est le "end" temps.

                        Voilà, normalement avec un outil du marché j'arrivais à 30 minutes… Pentium 1Ghz.
                        Et mon outil 0.7 secondes… Pentium 1Ghz.

                        Cette outil est utiliser en ce moment où nous écrivons par les chefs de département qui font leur bouclement annuel ;)
                        Ainsi que la compta, les contrôleurs, etc…

                        Si tu as des questions n'hésite pas, je complète volontiers.

                        • [^] # Re: Brace yourselves, bullshit is coming.

                          Posté par  . Évalué à 3.

                          300K = 300 kilo-octets ou 300 000 lignes ?

                          À quoi ressemble à un filtre ? Pourquoi 45000 différents, elles sortent d’où ces combinaisons, elles servent à quoi ? Les colonnes sont des chaînes ? des entiers ? quelle taille ?

                          • [^] # Re: Brace yourselves, bullshit is coming.

                            Posté par  . Évalué à -1.

                            300k de donnée, ce la doit faire 10000 lignes.

                            • [^] # Re: Brace yourselves, bullshit is coming.

                              Posté par  . Évalué à 2. Dernière modification le 07 janvier 2014 à 18:55.

                              Si 300 ko de données c’est 10.000 lignes de 7 colonnes, ça veut dire que chaque colonne est sur ~ 4 octets, ce qui répond à une de mes questions, le format des données.

                              Ça ne répond pas à la seconde, la gueule qu’ont les filtres, comment ils sont générés, et quels sont les calculs faits exactement.

                              On va faire simple : tu pourrais mettre en ligne un exemple de dataset et de résultat attendu ?

                              • [^] # Re: Brace yourselves, bullshit is coming.

                                Posté par  . Évalué à -3. Dernière modification le 07 janvier 2014 à 19:33.

                                Le dataset si je le sors, je suis m…. ;(
                                C'est des données privée et je les ai plus.
                                Et les résultat rendu, c'est sans importance, une simple table 10 colonnes, trois les filtres réel et 3 les résultats des additions.

                                Une simple addition suffira (c'était dans la majorité des cas des chiffres les colonnes données). Et des string les colonnes "filtres".

                                • [^] # Re: Brace yourselves, bullshit is coming.

                                  Posté par  . Évalué à -3.

                                  Les trois dernières colonnes sont la majorité du temps des chiffre à virgule flottante (double OK, pas besoin de float).

                                  • [^] # Re: Brace yourselves, bullshit is coming.

                                    Posté par  . Évalué à 3.

                                    double OK, pas besoin de float

                                    Là, par contre, j'ai pas compris. Tu veux dire qu'un double est suffisant, par rapport à un float qui serait "de trop"?

                                    • [^] # Re: Brace yourselves, bullshit is coming.

                                      Posté par  . Évalué à -7.

                                      Exact, un double suffit, pas besoin d'utiliser float (plus lent).

                                      • [^] # Re: Brace yourselves, bullshit is coming.

                                        Posté par  (site web personnel) . Évalué à 2.

                                        C'est plutôt l'inverse, quoi que de nos jours, sur des cpus modernes, c'est un peu kif kif. Sur le pc maintenant un peu ancien dont tu parlais, le calcul en float est très probablement plus rapide que le calcul en double (mais évidemment la précision peut être un problème (je t'aide au cas où tu ne saurai que répondre)).

                                      • [^] # Re: Brace yourselves, bullshit is coming.

                                        Posté par  . Évalué à 5.

                                        Je ne pratique plus le C ni le C++ depuis longtemps, mais il m'a toujours semblé que le double pouvait plus que le float. Au temps pour moi.

                                        • [^] # Re: Brace yourselves, bullshit is coming.

                                          Posté par  . Évalué à 1.

                                          Et il te semble bien… Sans aller sortir la norme IEEE, on peut déjà faire:

                                          (gdb) p sizeof (double)
                                          $1 = 8
                                          (gdb) p sizeof (float)
                                          $2 = 4
                                          
                                          • [^] # Re: Brace yourselves, bullshit is coming.

                                            Posté par  (site web personnel, Mastodon) . Évalué à 1.

                                            Ceci est un détail d'implémentation, un double doit être au moins un float, mais ce pas forcément supérieur.

                                            • [^] # Re: Brace yourselves, bullshit is coming.

                                              Posté par  . Évalué à 1.

                                              Oui, mais certainement pas inférieur, on est d'accord (la norme est assez claire la dessus en effet).

                                              Ceci étant, sans aller vérifier, je suppose qu'il y a un lien historique entre les noms float et double de C et les flottants simple et doucle précision de la norme IEEE, mais que la norme est moins stricte pour les archis sans ces derniers.

                          • [^] # Re: Brace yourselves, bullshit is coming.

                            Posté par  . Évalué à 3.

                            OK, je crois que j'ai compris. Il y a un filtre sur chacune des 7 colonnes, avec en moyenne 4 ou 5 classes par colonnes (4.67 ~ 44000). L'objectif, c'est de faire une opération mathématique sur les colonnes restantes pour toutes les combinaisons exhaustives de filtres, par exemple col1==filtre1 && col2==filtre2, etc.

                            Si on passe outre la question de l'intérêt du bazar, il est évident que sur seulement 10 000 lignes de données, la plupart des combinaisons n'existeront pas, il est donc totalement inutile de parcourir toutes les possibilités. À froid comme ça, en codant rapido, je ferais simplement une map basée sur une clé générée à partir des filtres (genre "Col1Filtre1-Col2Filtre2"), remplir la map ligne par ligne, puis gérer les requêtes en cherchant la clé correspondante dans la map—si la clé n'existe pas, la combinaison n'existe pas. Remplir 10 000 éléments de map avec 3 données, à vue de nez, ça devrait être super rapide, non?

                            • [^] # Re: Brace yourselves, bullshit is coming.

                              Posté par  . Évalué à -2.

                              Pour être plus préci :
                              Et revenons à 5 colone de filtre et une de donnée (0.6 secondes).

                              45000 x Filtre de
                              1er filtre =>
                              - col1 = filtre1.col1
                              - col2 > filtre1.col2(a) AND col2 < filtre1.col2(b)
                              - col3 > filtre1.col3(a) AND col3 < filtre1.col3(b) OU
                              col3 < filtre1.col3(c) AND col3 < filtre1.col3(d)
                              - col4 = filtre1.col4
                              ON FAIT LES ADDITIONS

                              puis
                              2eme filtre ->
                              - col1 = filtre12col1
                              - col2 > filtre2.col2(a) AND col2 < filtre2.col2(b) OU
                              col3 < filtre2.col3(c) AND col3 < filtre2.col2(d)
                              - col3 > filtre2.col3(a) AND col3 < filtre2.col3(b) - col4 = filtre2.col4(a) OU filtre2.col4(b)
                              ON FAIT LES ADDITIONS

                              3eme filtre
                              4eme filtre
                              etc…

                            • [^] # Re: Brace yourselves, bullshit is coming.

                              Posté par  . Évalué à -2.

                              J'ai oublié la colonne 5, sorry.

                              45000 x Filtre de
                              1er filtre =>
                              - col1 = filtre1.col1
                              - col2 > filtre1.col2(a) AND col2 < filtre1.col2(b)
                              - col3 > filtre1.col3(a) AND col3 < filtre1.col3(b) OU
                              col3 < filtre1.col3(c) AND col3 < filtre1.col3(d)
                              - col4 = filtre1.col4
                              - col5 > filtre1.col5
                              ON FAIT LES ADDITIONS sur la colonne donnée (6) et
                              mise du résultat dans un tableau

                              puis on recommence avec le filtre 2
                              2eme filtre ->
                              - col1 = filtre12col1
                              - col2 > filtre2.col2(a) AND col2 < filtre2.col2(b) OU
                              col3 < filtre2.col3(c) AND col3 < filtre2.col2(d)
                              - col3 > filtre2.col3(a) AND col3 < filtre2.col3(b)
                              - col4 = filtre2.col4(a) OU filtre2.col4(b)
                              - col5 < filtre2.col5
                              ON FAIT LES ADDITIONS sur la colonne donnée (6) et
                              mise du résultat dans un tableau

                              • 3eme filtre
                              • 4eme filtre etc…
                              • 45000eme filtre

                              c'est FAIT.

                              Comme vous le voyez un des problèmes (je trouvais) c'est que chaque filtre est différent du précédent et du suivant.

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  . Évalué à 4. Dernière modification le 07 janvier 2014 à 17:56.

                      C'est pas grave, ils trollent…. ils ne savent faire que cela.

                      Ils savent troller ET coder. Ça fait une grosse différence, mine de rien, parce que vous avez largement prouvé votre capacité trollesque, mais pas le reste.

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à -1.

                        Essaye d'utiliser les Howto…

                        Si tu as des questions, je suis souvent sur xmpp:evenja@cht.evenja.org. Sinon, j'ai un email, etc…

                        Si tu es Suisse, je suis le Mardi et le Jeudi pour parlé de cela à Lausanne ou à Zurich… pour répondre à toute questions autre que pourquoi le new ou le define sont-il mieux en C++98 quand C++11 ;)

                        J'aime les questions concrètes et donc les réponses concrètes.

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  (site web personnel, Mastodon) . Évalué à 8.

                      C'est gentil et merci, mais je m'en fou des accusations de personne qui réponde par une boucle à une question de logique informatique.

                      Comment tu réponds alors à des problèmes d'itération de données dans ce cas ?

                      C'est pas grave, ils trollent…. ils ne savent faire que cela.

                      Je… mais oui, mais c'est bien sûr, tu es sur DLFP ! Bienvenue \o/

                      C'est amusant surtout le C/C++… c'est le prof qui leur a dit que c'était pas bien, alors j'accepte la mauvaise note :D

                      C'est génial le C++, même le C, mais il faut savoir faire la part des choses.

                      Je répondrai : regarde le code qui est générer en C et en C++ pour ce genre d'opérations et tu auras ta réponse.

                      Quand je m'intéresse à un outil, et que je dois le compiler, je l'audit pour savoir si le compiler et l'exécuter ne compromet pas mon système. Donc le code source est ce que je vois en premier, et la lecture peut s'arrêter rapidement.

                      D'ailleurs je n'ai eu aucune réponse en retour concernant mes questions pour l'analyse en objet d'une Hotline, des 45000 filtres en 0.7 seconde (normalement c'est 30 minutes avec les objet TableDB du marché),

                      Pas la peine, mon ordi quantique en IPoT le fait déjà en 6,59 ns (tu vois, ça c'est troller, apprends la différence).

                      et autres questions qui rendent réel et concrète des discussions stériles et stupides puisque basée sur un dogme appri, et ne serait-elle basée que sur le résultat de compilation on ferrait avancer le schmilblique ;)

                      Des dogmes découverts, sous des stèles sur lesquelles je sacrifie des petits chats à la gloire de Meyers, Sutter et Stroustrup.

                      Et puisque tu me semble correct, franchement, ça m'amuse, je sais ce que je vais sortir dans quelques semaines et j'attend avec impatience leurs remarques, vraiment j'en rigole déjà, tu pourras leur demandé leur opinion de "spécialiste" :D à ce moment là.

                      J'espère avoir du temps à tuer !

                      Perso je suis pas un spécialiste ou un excellent programmeur, mais j'ai toujours fait des programmes mi en production chez des gros clients et qui ont toujours fonctionner SANS PLANTAGE ni téléphone d'URGENCE pendant DES ANNEES de fonctionnement en PRODUCTION REEL. Avec des fois des algos assez sympa, je crois.

                      Je te crois sans problème, j'ai vu tellement d'horreurs qui fonctionnent dans ma petite vie de programmeur que ça ne m'étonne pas.

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  . Évalué à -7.

                    C'est gentil et merci, mais je m'en fou des accusations de personne qui réponde par une boucle à une question de logique informatique.

                    C'est pas grave, ils trollent…. ils ne savent faire que cela.

                    C'est amusant surtout le C/C++… c'est le prof qui leur a dit que c'était pas bien, alors j'accepte la mauvaise note :D
                    Je répondrai : regarde le code qui est générer en C et en C++ pour ce genre d'opérations et tu auras ta réponse.

                    D'ailleurs je n'ai eu aucune réponse en retour concernant mes questions pour l'analyse en objet d'une Hotline, des 45000 filtres en 0.7 seconde (normalement c'est 30 minutes avec les objet TableDB du marché), et autres questions qui rendent réel et concrète des discussions stériles et stupides puisque basée sur un dogme appri, et ne serait-elle basée que sur le résultat de compilation on ferrait avancer le schmilblique ;)

                    Et puisque tu me semble correct, franchement, ça m'amuse, je sais ce que je vais sortir dans quelques semaines et j'attend avec impatience leurs remarques, vraiment j'en rigole déjà, tu pourras leur demandé leur opinion de "spécialiste" :D à ce moment là.

                    Je connais un excellent programmeur, chaque fois que je li son code, je rêve qu'un jour j'écrirais comme lui, aussi bien le code que les commentaires.

                    Perso je suis pas un spécialiste ou un excellent programmeur, mais j'ai toujours fait des programmes mi en production chez des gros clients et qui ont toujours fonctionner SANS PLANTAGE ni téléphone d'URGENCE pendant DES ANNEES de fonctionnement en PRODUCTION REEL. Avec des fois des algos assez sympa, je crois.

          • [^] # Re: Brace yourselves, bullshit is coming.

            Posté par  (site web personnel) . Évalué à 3. Dernière modification le 08 janvier 2014 à 12:18.

            C'est ce que je pensais aussi, mais il y a quelques compilos foireux:
            http://stackoverflow.com/questions/550451/will-new-return-null-in-any-case

            Mais d'après le standard, oui, tu as raison. Mais s'il n'y avait que cela. Ce qui me choque plus c'est qu'il caste des chaînes de caractères qui sont en dur en (char *) plutôt que de changer ses prototypes pour utiliser du const char * … Quand tu commences à contourner les warnings remontés par le compilo, c'est que tu ne les as pas compris. Du coup quand je lis qu'il fait du C et du C++ depuis 1979, j'ai un peu peur.

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à 3.

              Il fait du C++ depuis 4 ans avant son apparition !

              Je m'incline, c'est un Dieu.

              "Quand certains râlent contre systemd, d'autres s'attaquent aux vrais problèmes." (merci Sinma !)

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  . Évalué à -3.

              Pour le cast, je suis complètement d'accord, mais c'est quand j'ai commencé avec GNU GCC et je voulais pas perdre de temps, alors pas très propre OK pour toi.

              Perso, je m'en fou de la couleur de la voiture, ce que je cherche avec ces Tutos et première version de la librairie, c'est d'expliquer comment le moteur fonctionne.

              Avant il y en a même qui disait que c'était IMPOSSIBLE :D

              Le Tutos et la librairie prouvent que c'est possible !
              C'est déjà ça :)

            • [^] # Re: Brace yourselves, bullshit is coming.

              Posté par  (Mastodon) . Évalué à 4.

              Que MS ne suive pas un standard, c'est pas nouveau. Mais ça fait quand même pas loin de 10 que même MS suit cette partie du standard, donc on peut quand même considérer que new ne renvoie jamais NULL.

              Ce qui me choque plus c'est qu'il caste des chaînes de caractères qui sont en dur en (char *)

              Oui, surtout s'il s'amuse à les modifier à un moment donné, ça va faire un joli coin.

              Du coup quand je lis qu'il fait du C et du C++ depuis 1979, j'ai un peu peur.

              En fait, il a un style qui se rapproche du "C with classes", c'est-à-dire les toutes premières version de C++, à l'époque où c'était pas encore standardisé et qu'on utilisait largement les en-têtes du C, et qu'on connaissait pas encore bien les design pattern, et qu'on avait pas toute la méthodologie de conception objet. C'est comme si on lisait un code K&R de nos jours, on trouverait ça un peu dur, surtout quand le même explique qu'il a un nouveau paradigme. Pour moi, ça montre qu'il ne s'est pas renseigné sur ce qui s'est passé ces 20 dernières années. On peut être autodidacte et à jour, pas lui.

              • [^] # Re: Brace yourselves, bullshit is coming.

                Posté par  . Évalué à -1.

                Je fait pas du C depuis 1979.
                Je faisais de l'assembleur en 1979.

                Et du C depuis 1986.

              • [^] # Re: Brace yourselves, bullshit is coming.

                Posté par  . Évalué à -3.

                Pourrais-tu m'indiquer comment faire deux applications
                par exemple Tutos1 et Tutos2 d'une certaine manière (comme tu dit pattern ou autres…)

                Puis faire qu'elle fonctionne ensemble Tutos3, sans modifier aucunement le code, sans créer de bugs ou qu'elle ce ralentisse l'une l'autre (avec deux thread par exemple ;).

                Vraiment imbriquée… et à cette application tu peux ajouter de nouvelles fonctions sans savoir ce qui y est déjà ou si tu veux utilisé une partie de ce qui est déjà en fonctions… sans AUCUN RISQUE DE BUGS.

                C'est ce que fait Evenja (le moteur de Evenja… désolé pour la couleur de la voiture;)

                Si tu as une proposition ?
                Je suis preneur.

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  (site web personnel) . Évalué à 2.

                  C'est la programmation modulaire, n'importe quel langage permet de le faire.

                  "La première sécurité est la liberté"

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  . Évalué à -6.

                    C'st OK alors. Je crois que le sujet est clos après cette réponse.

                    La programmation "modulaire"… ça marche à 100%, un module ne ralenti pas les autres et si tu rajoutes des modules l'ensemble n'est pas ralenti ou n'a pas de risque de BUGS… même avec un petite quantité de "taff". Et d'ailleurs on peu faire tout les types d'applications.

                    Tu as raison en fait j'ai sûrement tout copié et je suis chanceux de profitez d'autant d'expérience, merci à tous.

                    Dommage j'aurais bien aimé que quelqu'un m'aide à mieux expliquer le fonctionnement, que perso je comprends… Mais aux experts il faut céder.

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  (site web personnel) . Évalué à 3.

                      'soupir'

                      "un module ne ralenti pas les autres"

                      Comment 2 trucs pourrait aller aussi vite qu'un seul ?

                      Pour mettre tes 2 modules ensembles, tu décris bien la connexion entre eux par un fichier XML, il y a donc bien un 3ième truc qui fait la liaison.

                      "La première sécurité est la liberté"

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à -3.

                        Dans le cas des modules, tu faits comment pour que tes deux modules fonctionne "en même temps" sans gérer le multi-threading des modules.

                        Selon la technique des modules, il y a souvent des problèmes si un des modules pose problèmes, de fiabilité. Les autres modules se retrouvent avec des difficultés pour travaillé normalement.

                        En plus, je crois pas (sauf erreur) qu'avec des modules tu ne peux pas faire TOUTES LES APPLICATIONS possible, cela fait longtemps que cette technique aurait été utilisée, non ?

                        Après je crois que c'est la notion de souscription à des services qui est apparue. Mais au bout d'un moment tu as des problèmes de temps de réponses, s'il y a trop d'inscrit au même service :)

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  (Mastodon) . Évalué à 6.

                  Ce n'est pas à moi de le faire, c'est à toi. Tu n'as jamais cherché à te comparer à l'existant, ce qui est la base quand on présente un truc «nouveau». Pourtant, beaucoup de commentaires ici ont lancé des mots-clefs : «programmation par flux», «programmation événementielle», «programmation par composants». À aucun moment tu n'as essayé de te comparer, ce qui peut avoir deux significations : 1) tu ne sais pas ce que sont toutes ces techniques, et dans ces cas là, renseigne-toi vite, et dis nous clairement ce qu'apporte ton paradigme par rapport à tout ça, ou alors 2) tu nous enfumes. Dans un cas comme dans l'autre, continuer comme tu le fais à demander à ce qu'on évalue ton paradigme dans l'absolu, ça n'a aucun intérêt. Surtout quand personne (sauf peut-être Ontologia) n'a compris de quoi il retourne. Et lancer des défis comme ça, qui n'ont aucun sens vu que rien n'est spécifié correctement, ça ne plaide pas en ta faveur et ça ne va pas t'aider plus.

                  Après, je dis ça, je dis rien. Ce n'est pas moi qui est en train de rentrer dans la légende de linuxfr aux côtés des Pierre Tramo, de la boulangère et de la carte audio linux. Si tu ne le fais pas sérieusement, tu seras décrédibilisé pour un bon moment, ici comme ailleurs (surtout que le monde informatique est très petit).

                  • [^] # Re: Brace yourselves, bullshit is coming.

                    Posté par  . Évalué à -3.

                    Cela fait des années que je cherche un truc similaire pour m'éviter de refaire le kernel… pas trouvé.

                    J'ai mi quelques "versus" sur wiki.evenja.org .

                    Te gênes pas pour posé des questions concrète sur la logique et pas sur la meilleur manière d'utilisé "static" en C++;

                    • [^] # Re: Brace yourselves, bullshit is coming.

                      Posté par  (Mastodon) . Évalué à 3.

                      J'ai mi quelques "versus" sur wiki.evenja.org .

                      Où précisément ? Sur la page que tu donnes, il n'y a aucun titre qui se rapproche de près ou de loin de ça. C'est incroyable que même les liens, tu n'arrives pas à les donner correctement. Tu veux juste qu'on clique ? Tu veux augmenter ton PageRank ? Vraiment, c'est agaçant.

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à 2. Dernière modification le 08 janvier 2014 à 17:26.

                        Colonne de gauche, entre "Use case" et "Contacts" :
                        vs OOP
                        vs Dataflow
                        vs Bayesian network
                        vs Lustre

                      • [^] # Re: Brace yourselves, bullshit is coming.

                        Posté par  . Évalué à 2.

                        Pour moi le lien fonctionne j'arrive bien sur http://wiki.evenja.org .

                        Sur la partie gauche (la sidebar), il y a un menu "Versus" et au dessous :
                        ◾ Object Oriented Programming
                        ◾ Dataflow
                        ◾ Bayesian network
                        ◾ Lustre

                        Merci de confirmer que tout est OK ?

                        • [^] # Re: Brace yourselves, bullshit is coming.

                          Posté par  . Évalué à 2.

                          Ok, je vais être chiant. Un temps, j'ai cru que tu allais comparer (en termes de code) une solution à un problème donné (fut-il un hello world) entre deux approches. En fait, non.

                          Si c'est trop compliqué (et ça a l'air, si on en croit ta proposition de concours) à expliquer avec des mots, tu ne veux pas plutôt l'expliquer avec du code? C'est simple, c'est factuel, tout le monde (en tous cas ici) comprend. Ça aiderait grandement ta démarche, non?

                • [^] # Re: Brace yourselves, bullshit is coming.

                  Posté par  (site web personnel) . Évalué à 3. Dernière modification le 08 janvier 2014 à 15:18.

                  Alors déjà, pour faire ça SANS AUCUN RISQUE DE BUGS, je n’utiliserais pas Evenja, quand je vois ce que me donne ton Tuto3 :

                  $ ./configure
                  $ make
                  $ cd src
                  $ ./evenja hello1.xml
                  Hello World!
                  
                  This is only an example.
                  Loto : 35,17,33,34,38,9
                  Segmentation fault
                  

                  Alors, sans Evenja, comment faire des choses complexes en combinant des programmes simples sans modifier le code de ceux-ci ?

                  Euh, comme on fait déjà sous Unix depuis quarante ans ?

                  Soit Tuto1 un programme qui lit les lignes d’un fichier et les affiche (même pas besoin de l’écrire, il existe déjà, il s’appelle cat), Tuto2 un programme qui affiche six numéros tirés au hasard entre 1 et 42 ; et voici Tuto3, un programme qui lit et affiche les lignes d’un fichier et affiche 6 numéros tirés au hasard :

                  $ (./Tuto1 hello1.txt & ./Tuto2)
                  
    • [^] # Re: Brace yourselves, bullshit is ENDED

      Posté par  . Évalué à -5.

      Maintenant que les trolls ce sont calmé, je pense qu'il est temps d'expliquer l'origine de mon "mauvais" code avec un mélange "horrible, insupportable, malhonnête, qui appel la clémence, programmeur raté, etc…" de C & C++.

      En C++ on écrit :

      std::cout << "salut";

      Ceci appel l'objet iostream du fichier
      #include <iostream>
      qui inclut
      #include <ostream>
      qui inclut
      include <cstdio>
      qui lie(en résumé)
      extern "C" printf
      c'est selon, la version de la lib, des params et du compilo ;)

      Perso, j'aime bien savoir exactement ce que fait mon code, alors j'écrit directement… Cela m'évite les fameux "stack overflow" et me permet de programmer pendant que mon client utilise le logiciel.

      Soyez un peu poli la prochaine fois, on a toujours quelque chose à apprendre des autres.

      • [^] # Re: Brace yourselves, bullshit is ENDED

        Posté par  (site web personnel) . Évalué à 5.

        Tu devrais arrêter de t'enfoncer :D

        Tu est en train de nous expliquer que tu as développé un langage de haut-niveau vachement trop cool, que tu es incapable de définir, mais que en même temps, tu aime bien savoir ce que fait exactement le code. Tu n'a même pas défini de sémantique claire à ton langage …

        Ensuite, si on continue dans la régression, printf c'est une fonction de haut niveau. Tu devrais utiliser directement write(2), comme ça tu sais directement ce qui est envoyé au noyal. Tu ne risque pas de rencontrer un bug dans la libc. L'overflow, il est dans l'usage incontrôlé de sprintf :D On va inventer snprintf depuis 15 maintenant (sauf évidemment pour les gens condamnés à compiler avec vc++).

        • [^] # Re: Brace yourselves, bullshit is ENDED

          Posté par  . Évalué à -3.

          J'ai pas développer un langage !
          C'est du C ou C++, mais on hérite que de trois class EvenDoor, EvenBoard et EvenPrg.
          Evenja c'est une librairie.

          Je le défini clairement, mais il n'y a qu'une année que les gens comprennent quand je discute avec eux. Alors, maintenant j'essaye de faire mieux, et je faits le concours pour que d'autres l'explique mieux que moi. Pour ma part c'est clair "Une partouze de chat de Schrödinger en inférence causale;)".

          Concernant le régression, tu as raison, mais pas besoin d'aller plus bas que "vprintf" (que j'ai remplacé par printf par simplicité de lecture), non ?
          C'est juste pour indiqué aux personnes qui semblait choquées par du C et C++ que derrière… dans ce cas… c'est la même chose.

      • [^] # Re: Brace yourselves, bullshit is ENDED

        Posté par  (site web personnel, Mastodon) . Évalué à 3.

        Calmés ? Non, il faut dormir de temps à autre.

        Quand je parlais des header C, ce n'était pas pour privilégier std::cout par rapport à std::printf, mais à préciser qu'en C++ correct, on essaye d'employer les mécanismes d'isolation au maximum.

        Donc j'aurais préférer lire :

        #include <cstdlib>

        j'en conviens, c'est du pinaillage. Mais ça indique que le programmeur qui a codé ces quelques lignes que C et C++ sont deux langages différents, dont même les types de base divergent parfois dans leur sémantique et leur implémentation.

        Par exemple, le code suivant ne référence pas le même type d'objet en C et C++.

        // En scope global:
        int const c_counter;

        Même comme je l'ai dit, ce n'est pas printf qui m'emmerde, c'est l'emploi bogué de snprintf.

        Quand à prétendre employé printf pour éviter les buffer overflow, c'est une blague sympathique. C++ réduit le risque de buffer overflows parce qu'il nous éloigne des pointeurs. Plus on manipule de pointeurs, et en particulier de pointeurs nus, et plus on a de chance de créer du code compromis.

        L'exemple canonique est std::vector<>, qui remplace avantageusement les pointeurs de pointeurs, sans aucun risque de buffer overflow.

        • [^] # Re: Brace yourselves, bullshit is ENDED

          Posté par  . Évalué à 8.

          Bon maintenant qu'on a bien rigolé avec tout plein de mots qu'on comprend pas, voila en quelques lignes ce que j'ai compris en téléchargeant le code et en regardant ça d'un peu plus près :

          • on prend un problème classique, genre cat (c'est le sujet de l'exemple hello1), qu'on transforme en une espèce de graphe (les machins de mealy, si j'ai bien compris, cf wikipedia), en ayant comme nœuds :
            • une "door" file_reader, qui va ouvrir le fichier et va lire les lignes une a une.
            • une autre "door" printf qui va recevoir des lignes et les afficher a l’écran
            • et un "link" qui relie les 2 doors.

          file_reader ---link----> printf

          La lib evenja permet de définir des classes c++ correspondant a ces 3 éléments, et contient le moteur qui va faire tourner le bouzin, cad appeler une méthode du file_reader, récupérer la structure qui contient la ligne lue, et la renvoyer via le link au printf.

          Toute la description de ce workflow est contenue dans un fichier xml (hello1.xml ici) qui définit les différents noeuds et leurs liens, et à l’exécution le moteur instancie les éléments définis dans ce ficher.
          Du coup, si par exemple on veut faire un double cat, cad rajouter un deuxième fichier, il suffit de modifier le fichier xml (en rajoutant un noeud et un lien) et de relancer la commande (evenja hello1.xml) (mais dans ce cas les lignes des 2 fichiers seront mélangés, un peu comme si 2 cat se déroulent en parallèle).

          • [^] # Re: Brace yourselves, bullshit is ENDED

            Posté par  . Évalué à 1.

            MERCI
            ça fait du bien de voir que des gens essai de faire avancer le schmilblick.

            Tu as 100% raison sur tout.
            Si tu regarde comment le "board" fonctionne, tu verras que la manière de lier les données est différente à d'autres logique, comme les Agents ou le Dataflow, par exemple. Et la suite du processus pour les donnée dépend 'elle-même et pas "d'un bout de code de décision".

            Et c'est, je trouve, cette autre manière qui est très très intéressante.

            T'es la bien venu au concours ;)

            • [^] # Re: Brace yourselves, bullshit is ENDED

              Posté par  . Évalué à 4.

              Et la suite du processus pour les donnée dépend 'elle-même et pas "d'un bout de code de décision".

              Alors la je pige pas tout. Dans Fprg_concat::receive_evenData, on trouve un evenData->addDestination("printf"), ce que je comprend comme "on force l'envoie de la donnée a printf" ; ça me semble faire double emploi avec le fichier xml, et être une source de bug. Si on veut réutiliser le concat dans une autre partie comme entrée pour un autre FevenPrg mais sans faire un printf, on l'a dans l'baba..

              • [^] # Re: Brace yourselves, bullshit is ENDED

                Posté par  . Évalué à 1.

                Effectivement dans un EvenPrg, on peux faire les deux soit fixer la prochaine destination (des vieille habitude qui persiste;) ou demander à l'EvenData la "destination" suivante et faire livré.

                Dans ce cas de démonstration, c'est fixe dans le code, mais normalement c'est un paramètre dans le fichier XML qui est passé la l'EvenPrg. Ainsi chaque fonctions dans exactement le même code envoie selon les besoins à la destination appropriée.

                Si cela peux t'aidé, j'ai amélioré la page Principles du Wiki.

                N'oublie pas le concours.

            • [^] # Re: Brace yourselves, bullshit is ENDED

              Posté par  (site web personnel) . Évalué à 5.

              Et franchement, tu es pas capable pour un exemple aussi simple de faire une explication comme celle de jigso ?
              La sienne est claire, pourquoi tu ne ferais pas pareil, plutôt que de nous parler de partouze de chats en inférence causale…

              • [^] # Re: Brace yourselves, bullshit is ENDED

                Posté par  . Évalué à -1.

                J'arrive à refaire complètement le Kernel en C++11 Template, et c'est ce que je fait maintenant.
                Cette approche est tellement simple pour moi et depuis tellement de temps que j'arrive pas à "transformer" cette connaissance de manière simple et clair pour les autres en fonctionnement actuel.

                C'est pour cela que j'organise le concours .

                Je trouve que Ontologia et jigso s'en sorte très bien.

                J'ai fait un doc Downloads documentation, et des présentations.

                • [^] # Re: Brace yourselves, bullshit is ENDED

                  Posté par  (site web personnel) . Évalué à 3.

                  Cette approche est tellement simple pour moi et depuis tellement de temps que j'arrive pas à "transformer" cette connaissance de manière simple et clair pour les autres en fonctionnement actuel.

                  Ça ne veut pas dire qu'il y a un gros problème quelque part ?

                  • [^] # Re: Brace yourselves, bullshit is ENDED

                    Posté par  . Évalué à -4.

                    Je crois pas, j'ai utilisé cette approche pour développer seul un logiciel. Logiciel qui a été utilisé par plusieurs centaines de personnes sur différent site : EZCOM.

                    Ce logiciel concurrençait 5 sociétés différentes, chacune avec son produit propre. Mais j'avais cette outil Evenja (précisément la version précédente en script et compilo perso) et j'y suis arrivé.

                    A l'origine j'ai "suivi" la logique du "chat de Schrödinger" pour faire de manière empirique que cela fonctionne… puis six ans après, après avoir fini les cinq fonctions du serveur, il m'a fallu trois mois pour réalisé le pourquoi et le comment du fonctionnement et des avantages.

                    Mon raisonnement est toujours associé (même collé) au "chat de Schrödinger".
                    Et en plus si tu regarde bien (ça risque de troller;) c'est une approche différente dans le sens où au lieu d'avoir un ou des processus qui gère la donnée (processus centrique) et souvent en mode synchrone, c'est 100% orienté autour de la donnée (data centrique) et asynchrone.

                    C'est pour cela que j'ai organisé le concours.
                    Le bon point : les discussion autour me permette de trouver des arguments compréhensible par plus de monde, les versus ajouter sur le wiki. J'espère qu'ils sont plus clair.

                    • [^] # Re: Brace yourselves, bullshit is ENDED

                      Posté par  . Évalué à 10.

                      Personnellement, si un maçon me disait :

                      Je viens de finir de bâtir votre maison. J'ai utilisé la logique du chat de Schrödinger, ça fait trois mois que je me demande comment ça tient debout, mais ça a l'air de tenir de façon empirique. Ah au fait je cherche comment expliquer ma méthode, vous auriez une idée ?

                      Je n'aurais franchement pas confiance.

                      Tout ça pour dire qu'il n'y a guère qu'en informatique qu'on peut trouver des « professionnels » aussi incompétents et qui ne s'en cachent à peine.

  • # Nouveau concurrent de la carte audio linux 9temps ?

    Posté par  . Évalué à 3. Dernière modification le 06 janvier 2014 à 20:21.

  • # Conférence

    Posté par  . Évalué à 5.

    Je vois que la dépêche omet malencontreusement la conférence qui a eu lieu aux RMLL 2012 :
    http://schedule2012.rmll.info/Evenja-La-programation-quantique
    avec un enregistrement ici :
    https://mediaserver.unige.ch/play/75534

    • [^] # Re: Conférence

      Posté par  . Évalué à -6.

      ah ouais, c'est du lourd quand même ! Dans le genre autodidacte raté qui n'a jamais levé son nez au dessus du code pourri qu'il produit et qui prétend réinventer le monde dans un délire total empreint d'une crasse ignorance qui fait de la peine à chaque phrase, c'est assez similaire à la "carte son Linux" de la fin de l'an dernier.

      Ça fait deux fois en peu de temps que linuxfr.org sert de tribune à des charlatans mythomanes, qu'est-ce qui vous arrive ?

      • [^] # Re: Conférence

        Posté par  . Évalué à -5.

        Au lieu de critiquer, tu pourrais juste essayer de faire l'analyse des appels entrants dans une équipe hotline.

        En programmation comme tu veux…

        ça doit pas être trop difficile pour toi, juste l'analyse et sa structure objet par exemple… on pourra comparer avec ce que je vais ajouter sur le wiki.

        Un peu de réalisme et moins d'insulte, ça ferait avancer les choses tu crois pas ?

      • [^] # Re: Conférence

        Posté par  (site web personnel) . Évalué à 10.

        Merci de rester courtois dans les échanges, et d'éviter d'asséner des phrases cinglantes, non argumentées et potentiellement diffamatoires.

        • [^] # Re: Conférence

          Posté par  (site web personnel) . Évalué à -5.

          Police des mœurs, au rapport.

          • [^] # Re: Conférence

            Posté par  (site web personnel, Mastodon) . Évalué à 7.

            Non, il a raison. Je suis le premier à ne pas être tendre, et à taper fortement. Cependant, j'essaye de le faire en argumentant, en évitant les attaques /ad hominem/ et autres pourrissement de débat. Je n'y arrives pas toujours, mais quand même.

            • [^] # Re: Conférence

              Posté par  . Évalué à 4.

              Ceci dit, il faut quand même que quelqu'un le dise. Il y a diverses manières de le dire, mais il est probable qu'un certain nombre de clients payent pour ça. Et le coup du "dissailldeur" qui n'y connait rien et qui a bien cherché ce qu'il a, ça n'est pas un bon argument si le web ne fournit pas l'opinion claire de spécialistes du sujet.

    • [^] # Re: Conférence

      Posté par  . Évalué à 5.

      J'ai commencé à écouter. J'ai tenu jusqu'à la moitié, J'ai aussi lu une grande partie des commentaires.

      Je me demande si ce monsieur n'était pas en train de décrire la programmation par flux (EN parceque wiki FR pas connaîte).
      C'est (malheureusement) répandu dans les milieux scientifique sous forme de labview/simulink et autre logiciels à base de fils et de boites.
      Il faut néanmoins avouer que le discours est un charabia incompréhensible avec les termes mal utilisés. On dirait un assemblage de buzz-word formé pour appâter le client.

      Je n'ai pas fait de C/C++ depuis bien longtemps (5-6 ans), mais les exemples de code que vous donnez sont affreux, ça ne m'étonne pas qu'il vous faille plusieurs semaine pour modifier un code pour un client si vous inventez vos propre règles.
      Votre bibliothèque vous conviens peut être; et vous êtes plus rapide avec, mais apprenez a vous servir correctement des outils qui existe déjà avant d'inventer les autres

      Et par pitié vous avez un directeur en communication pour Evenja, il serai bien de l'utiliser pour faire de la comm, si il fait des erreurs techniques il serra plus pardonné que vous qui vous dites expert, et évitera les escalades comme celle-ci.


      Utilisateurs de linuxfr, je vous proposerai de malgrer tout participer au concours, vous n'avez pas besoin de comprendre complêtement maitriser pour décrire Evenja, par exemple:

      Evenja est une bibliothèque multiparadigme basée sur l'analyse des flux de donnée à l'exécution (ou runtime). En combinant une approche micro-bayesiene à inférence de type avec une conception macro-quantique de l'entropie du hash des données qui sont fournies. Le framework peut extrapoler l'effet de l'incertitude de Heisenberg pour générer au point de la localisation (OÙ) et au moment même (QUAND) la structure algébrique nécessaire (QUOI) à la résolution du problème implicite. Ainsi ce sont bien les flux imposés (en entrée) et exposée (en sortie) qui définissent l'état de supperposition dans lequel scénario (USE CASE) se déroule. L'intégration progressive peut se faire au sein de n'importe quelle jonction API/ABI grâce à la polyvalence des surcouches de compatibilité, et permet une migration par étape et rapide d'un état synchrone, à un état asynchrone et finalement metachrone (si les abstraction peuvent évoluer en espace de quaternion dual, ce qui est généralement le cas). On évite ainsi tout les problèmes d'injection SQL, de XSS sans s'enchainer dans les politiques CORS pour les systèmes en ligne ceci en profitant directement d'une scalibilité dans les 3 dimensions ainsi que transverse. Ce dernier exemple se limite bien-sûr à un deploiement sur une plateforme Saas, mais une utilisation sur un réseau local, privé ou d'entreprise couvre l'authentification, la Perect Forward Secrecy, synchronisation, redondance, test unitaire et passerelle VPN-TCP/IP (tcp/ipv4 et tcp/ipv6 simultanément).

      Je n'ai bien sûr pas parlé ici du support du typage statique , dynamique fort et faible lors de la compilation à la volée par le préprocesseur qui met en forme l'arbre syntactique abstrait, mais je pense que c'est trop technique….

      (Pardon pour les fôte, en plus c'est pas mon clavier)

      • [^] # Re: Conférence

        Posté par  . Évalué à -4.

        Je préfère la version d'origine et perso (plus courte) :

        "Un partouze de chat de Schrödinger, qui ce définisse eux-mêmes étant selon le lieu, le moment et leur état la cause ou l'inférence".

        Avec un déterminant externe au système, à l'inverse de l'exemple de Schrödinger interne au système de détermination.

        ça je le comprend, mais c'est pas la bonne manière de l'expliquer… alors le concours, tu vois à quoi ça sert maintenant ;)

      • [^] # Re: Conférence

        Posté par  (site web personnel) . Évalué à 10.

        De ce que j'ai compris (et juste compris) du concept, c'est effectivement de la programmation par flots plus une machine de Mealy. J'ai codé une lib pour faire ce genre de chose, mais dans le cadre d'une machine à état fini hiérarchique (ie. chaque état peut contenir une machine à état, on en a discuté ), et c'est assez marrant parce que les transitions sont conditionnés par l'état de l'objet qui héberge la machine à état.

        Du coup tu peux coder des petits agents, dans un jeu par exemple, et lui dire que tu passes à l'état "mort" si ses points de vie sont < 0.

        Je suppose que sa lib permet de faire ça, ce qui est pas con, dans le fond.
        Elle (d'après ce que j'ai compris, toujours) te permet de faire de la programmation par flot avec des "modules" qui doivent faire certaines opérations en fonction de la forme des données (grâce à la machine à état de Mealy).
        Et comme pas mal de logiciels dans l'informatique de gestion sont juste des problèmes de flux conditionnels d'information, ça permet de faire avancer le smilliblick d'une certaine façon.

        Fabian J. Padilla, j'ai à peu près compris ?

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

        • [^] # Re: Conférence

          Posté par  . Évalué à 2. Dernière modification le 07 janvier 2014 à 19:16.

          C'est exactement cela.
          Juste que c'est pas vraiment des agents, c'est juste la donnée et son contenu qui fait la suite, pas une méthode comme avec un agent.

          MERCI INFINIMENT.

      • [^] # Re: Conférence

        Posté par  (site web personnel) . Évalué à 3.

        La programmation par flux ressemble beaucoup, à la technique de transformation d'arbre successive. Cela peut souvent paraitre une perte, de recopier les données sont une autre forme. Mais cela permet d'éliminer toute une classe de bug lorsqu'il existe un tas de configuration fautive en lecture. C'est toujours plus facile d'écrire les données sous une forme pratique avant.

        "La première sécurité est la liberté"

        • [^] # Re: Conférence

          Posté par  . Évalué à -4.

          Oui, la technique de

          transformation d'arbre successive

          Fait presque le même travail. Mais le problème avec cette manière de faire, c'est que plus l'arbre est grand plus c'est lourd à gérer. Avec Evenja, comme seul la réalité compte il n'y a que l'eefctif qui est pri en compte… donc pas de lourdeur et de traitement inutile.

          J'ai expliquer à ma manière ma version du chat de Schrödinger.

  • # Mailing list : hackerspace FixMe

    Posté par  (site web personnel) . Évalué à 2.

    C'est marrant, l'auteur à aussi diffusé l'annonce sur la mailing-list du hackerspace FIXME. Pas de bol, elle est en accès restreint, mais globalement, c'est la même incompréhension de la part du seul correspondant qui répond :

    That's exactly my question. How do you use it? Can you give a 10 line
    example to do something useful or funny?

    Et après un message creux, voici une autre remarque :

    So you're the author of the library, but you can't give 10 lines of
    example code that demonstrate what it does? It requires meeting the
    author of the library in person to explain how it works?

    I call that a failure.

    Comme quoi, il y a une coalition contre Evenja (tant que ça n'aura pas été clairement expliqué, en tous cas)…

    • [^] # Re: Mailing list : hackerspace FixMe

      Posté par  . Évalué à -4.

      Juste avant j'avais envoyé le lien sur le HowTo dans la mailing list en indiquant qu'il fallait venir trolleer ici au lieu de charger la mailing-list pour rien. Ainsi il y a déjà des infos :D

      C'est amusant, j'organise un concours pour trouver une explication plus clair. Explication que j'ai de la peine à fournir sauf lors de meeting direct et on me reproche de ne pas être clair. Le serpent ce mort la queue.

      Bravo, alors bravo, vous avez réussi à comprendre pourquoi j'organise ce concours :D

      C'est bien, maintenant quelqu'un voudrais essayer de comprendre Evenja vraiment et m'aider, afin que d'autres puisse profiter de ses avantages.

      • [^] # Re: Mailing list : hackerspace FixMe

        Posté par  . Évalué à 3.

        Et tu n’as pas expliqué en direct à quelqu’un qui lui serait capable d’expliquer de manière intelligible ?

        • [^] # Re: Mailing list : hackerspace FixMe

          Posté par  (site web personnel) . Évalué à 4.

          Ah oui, ça me rappelle que quelqu'un avait finalement compris puis rédigé un cahier des charges pour Zino/Zind. Quelqu'un se rappelle qui c'est ? Il faudrait lui demander de se pencher sur ce problème !

        • [^] # Re: Mailing list : hackerspace FixMe

          Posté par  . Évalué à -3.

          Première vrai question, VRAIMENT MERCI.

          Oui en direct, les gens comprennent que c'est possible, que c'est différent, qu'il y a des avantages concret, etc…
          depuis seulement une année.

          Mais ils n'arrivent pas encore à imaginer comment l'utiliser.

          Je pense, c'est parce que la logique Evenja et différente complètement data-centrique et pas du tout processus centrique.

          Pour ma pars, j'ai utilisé mon script de l'époque pendant six ans. Et après la surprise de la Hotline (2 jours de travail seulement). Il m'a fallu trois mois pour comprendre ce qui se passait et du pourquoi et du comment. Trois mois complets pour comprendre ce que j'avais mi au point de manière empirique pendant six ans. Et comprendre les raisons réels des ses avantages.
          Mais cela fait trop longtemps que je baigne dedans et c'est pour cela que j'ai organisé ce concours.

          Pour que d'autres personnes me pose des questions lors des Evenja Café ou dans le chat ou autre et participant au concours trouve des explications meilleures que les miennes.

          • [^] # Re: Mailing list : hackerspace FixMe

            Posté par  (site web personnel, Mastodon) . Évalué à 3.

            Mais ils n'arrivent pas encore à imaginer comment l'utiliser.

            Ils n'ont même pas pensé à regarder le code des tests unitaires pour avoir une petite idée ?

          • [^] # Re: Mailing list : hackerspace FixMe

            Posté par  (site web personnel) . Évalué à 2.

            Si ils ont compris, ils pourraient peut-être l'expliquer, non ?

            • [^] # Re: Mailing list : hackerspace FixMe

              Posté par  . Évalué à -2.

              C'est bien cela le problème, les gens comprennent, mais nous avons tellement l'habitude de faire autrement que c'est pas si facile de changer.

              Après six ans d'utilisation de cette approche, j'ai mi trois mois avec des maux de têtes ;)
              Pour comprendre profondément son fonctionnement et ses avantages.

              • [^] # Re: Mailing list : hackerspace FixMe

                Posté par  (site web personnel) . Évalué à 2.

                Mais si ils comprennent, c'est déjà un énorme pas en avant, et ils pourraient peut-être l'expliquer au monde entier, non ?

                • [^] # Re: Mailing list : hackerspace FixMe

                  Posté par  . Évalué à -7.

                  Je sais pas si "le monde entier" c'est les mots justes.
                  Si j'arrive à partager cette outil avec quelques Geek (non troll ;) c'est déjà pas mal.

                  Le concours a ce but aussi.
                  Dans ma petite entreprise, nous sommes 6 à travailler autour de ce projet (pas tous à 100% :).

                  • [^] # Re: Mailing list : hackerspace FixMe

                    Posté par  (site web personnel) . Évalué à 2.

                    Mais pourquoi tu n'a pas réussi à faire qu'une personne (une seule !) ayant compris ton système, l'explique avec ses mots ?!

                    • [^] # Re: Mailing list : hackerspace FixMe

                      Posté par  . Évalué à -6.

                      Parce que c'est pas du tout une logique que nous utilisons tout les jours.

                      Et les gens ne comprennent que depuis une année, avant ils disaient juste que c'était IMPOSSIBLE :D
                      Maintenant qu'il y a les Tutos… c'est je comprend pas expliques-toi ?
                      Mais comme c'est une autre logique… c'est difficile d'expliquer en Anglais la langue Français, surtout ses subtilités.

                      Perso, quand je comprend pas un truc, je cherche comprendre et je menace pas l'auteur d'incompétence si je comprend pas.

                      Ceux qui comprennent comme hier soir au Hackerspace de Lausanne, FIXME, ne sont pas encore complétement dans une compréhension suffisante pour l'expliquer à d'autres ou l'utiliser.

                      Ayant mis au point de manière empirique pendant 6 ans le système, j'ai quand même mi trois mois à vraiment être capable de reproduire l'effet et j'ai eu pas mal de maux de têtes.
                      Et pourtant j'ai simplement refait le raisonnement initial avec le "Chat de Schrödinger", en tenant compte de bien mesurer les risques de chaque logique intégrée dans le projet.

                      • [^] # Re: Mailing list : hackerspace FixMe

                        Posté par  . Évalué à 2.

                         Mais comme c'est une autre logique… c'est difficile d'expliquer en Anglais la langue Français, surtout ses subtilités.
                        

                        Essaie peut-être en premier lieu de l'expliquer en français, ça pourrait constituer un bon début.

                      • [^] # Re: Mailing list : hackerspace FixMe

                        Posté par  . Évalué à 2.

                        c'est difficile d'expliquer en Anglais la langue Français, surtout ses subtilités.

                        Surtout si on ne les maîtrise pas.

  • # J'ai bon ?

    Posté par  . Évalué à 5.

    expliquer avec vos mots le nouveau paradigme de programmation Evenja

    Une blague sans poneys !

  • # Du coup…

    Posté par  (site web personnel) . Évalué à 6.

    Bon, j'ai lu et essayé de comprendre le tutoriel, et j'ai l'impression que c'est un truc tout à fait similaire à des processus qui communiqueraient avec une pipe.

    Tu as tes trucs, tes nœuds (c'est ça que tu appelle des « data » ?), qui ont un état interne avec des variables, et qui reçoivent un ou plusieurs flux en entrée.
    Ils renvoient un ou plusieurs flux à d'autre nœuds.
    nœud = processus, flux = pipe.

    J'ai bon, Fabian J. Padilla ?

    Si oui, tu pourrais m'expliquer l'intérêt par rapport à des processus et des pipe ? D'après ce que j'ai cru comprendre, tu vas répondre que les flux de données sont figés (que le graphe a une forme fixe), alors que chez toi les données peuvent partir un peu n'importe où, selon leur type ?
    Si oui, fournis un exemple où c'est le cas, car dans tous les exemples que j'ai vus (et si j'ai bien compris), les données suivent toujours le même chemin.

    De plus, est-ce que tu es en mesure d'expliquer de manière simple et claire le rapport entre ton système et un réseau bayésiens ? Entre ton système et la physique quantique ?
    Je ne vois absolument pas le rapport, actuellement. Si jamais ce n'est pas simple et clair, évite de perdre du temps.

    D'après ce que je vois, plutôt que de fournir du code en C++ à insérer dans des fichiers générés par ton système, tu pourrais peut-être fournir de jolis dessins qui représentent tes nœuds/data/processus, avec leurs données en entrée et en sortie, non ? Sur des exemples concrets ? Ça serait pas légèrement plus clair ?

    • [^] # Re: Du coup…

      Posté par  . Évalué à -1.

      Oui pour :

      nœud = processus, flux = pipe.

      A la différence suivante il n'y a que trois type de nœud : Evendoor, EvenBoard et EvenPrg.
      Concernant le nœud, j'ai amélioré la page Principles du Wiki.

      Concernant le pipe, il y une différence dans la class EvenBoard, ce n'est pas cette class ou un héritage de celle-ci qui décide de manière programmée le futur "pipe" à prendre pour choisir un nœud. C'est le contenu de la donnée elle-mêmes qui décide. Si tu veux comparer à du dataflow.

      Pour moi, les pipes sont des liens fixe et synchrone (souvent) entre deux processus, en Evenja les liens entres les nœuds ne sont pas fixe et asynchrone, et non pas absé sur une analyse complète d'un logiciel. Mais dynamique en fonction d'un USE CASE de la donnée et selon le contenu de la donnée elle-même.

      Pour le réseau Bayesian, il y a une page sur le wiki et une présentation sur le site.

      Pour les dessins, si tu pouvais le faire et je corrige… Register wiki.

      • [^] # Re: Du coup…

        Posté par  (site web personnel) . Évalué à 3.

        Je ne vois toujours pas le rapport avec les réseaux Bayésiens. Le mot important dans réseaux Bayésiens, c'est Bayésiens, i.e. des probabilités (conditionnels) et de l'inférence. Si c'est juste pour sortir la notion de DAG, pas la peine de sortir l'artillerie lourde ;).

        Concernant la présentation, il y'a plusieurs occurence de 'sateless' (en particulier dans le titre), c'est un peu génant.

        La question auquel tu n'a toujours pas répondu, c'est que tu clame 'les connections se font en fonction du quoi, quand et où', mais:
        - aucun example ne démontre cette fonctionnalité (je ne vois que des graphes classiques fixes)
        - tu ne décris nul part les mécanisme sous-jacent (comment se fait la décision dynamique ?)

      • [^] # Re: Du coup…

        Posté par  (site web personnel) . Évalué à 4.

        A la différence suivante il n'y a que trois type de nœud : Evendoor, EvenBoard et EvenPrg.

        Que sont ces nœuds ? Quelles différences ?
        Pour chaque nœud, décris à quoi il sert… J'ai regardé ton wiki, mais ça m'éclaire vraiment pas du tout.

        Pour le réseau Bayesian, il y a une page sur le wiki et une présentation sur le site.

        Dans un réseau bayésien, il y a la notion de probabilités… Peux-tu m'expliquer en quoi ton système va au delà du DAG, et utilise des probabilités ? Il me semble tout ce qu'il y a de plus déterministe…
        Et pour le rapport avec du quantique ?

        Pour les dessins, si tu pouvais le faire et je corrige… Register wiki.

        Je me suis inscrit, et je ne peux pas créer de nouvelle page… Pas très pratique pour soumettre un use case…

        De plus, c'est TOI qui a conçu le logiciel, c'est à TOI de l'expliquer simplement en faisant des graphes qui représentent des exemples concrets !!!
        Ton concours, personne ne pourra y participer puisque personne ne pourra comprendre ton système vu le peu de documentation que du mets à disposition, et surtout la qualité de cette dernière.

        • [^] # Re: Du coup…

          Posté par  . Évalué à -5.

          Que sont ces nœuds ? Quelles différences ?
          Pour chaque nœud, décris à quoi il sert… J'ai regardé ton wiki, mais ça m'éclaire vraiment pas du tout.

          Je pense qu'il faut lire la doc, mêmes si c'est pas parfait…

          Dans un réseau bayésien, il y a la notion de probabilités… Peux-tu m'expliquer en quoi ton système va au delà du DAG, et utilise des probabilités ? Il me semble tout ce qu'il y a de plus déterministe…
          Et pour le rapport avec du quantique ?

          Justement, le calcul de probabilité et "remplacé" dans Evenja par la réalité (chat vivant ou mort) et pas par une logique spécifique au programme. Ceci ce passe dans les EvenBoard, qui intègre le processus standard des logiciel merge

          C'est en utilisant ma compréhension du quantique que j'y arrive,
          //Ceci est une explication pas l'exactitude quantique// : Dans le cadre du chat de Schrödinger, il y a une personne qui a un moment donné ouvre la boîte.
          On pourrait le traduire en "français" par : Dans la ligne du temps à un moment t on cherche à définir l'état de vie d'un chat, état réellement existant, mais sans le savoir à t-1.

          Maintenant on reviens au code, en programmation "normal" quand on a deux objets que l'on souhaite "merger", on contrôle par un processus prédefini avant, en fonction de l'endroit dans le programme, des données que cela concernent, si on peu faire cette opération de "fusion". Cela complique énormément tout les codes et surtout rend les évolutions de logiciel difficile.

          Avec Evenja, si on reprend l'onde quantique et sa réduction du paquet d'onde et que l'on admet que ce n'est plus quelqu'un qui "ouvre la boite", mais une autre donnée (un autre chat ;)… on obtiens en "français" :

          Une donnée (une chat) arrive dans un système (une room en Evenja), elle vas dans une direction que celle elle connaît (le chat et ses idées;). Dans le cadre du "logiciel" c'est comme une onde, le processus de l'application n'ayant pas connaissance de vers où va le chat ;). La donnée arrive dans la room vers un EvenBoard… Et là seul deux cas sont possible :
          - Il y a un autre chat (donnée) qui lui ressemble (link value des EvenData). Ils partent ensemble vers la suite comme une nouvelle donnée unique ou un chat ou une nouvelle onde vers on ne sait où… seul les chats ont l'info ;)
          - Il n'y a pas un autre chat. Il (le chat) continue ou décide d'attendre un moment.

          Je sais, c'est pas à 100% de la réduction du paquet d'onde OFFICIEL, mais c'est l'idée d'origine.
          La donnée sait ou elle va, mais est stupide (comme un paquet de la poste), le processus ou application ne connaît pas la prochaine destination "super asynchrone" :D mais le facteur livre le paquet quand même, sans savoir ce que va en faire le prochain facteur ;)

          Pour le wiki, ton statut viens de changer :)

          • [^] # Re: Du coup…

            Posté par  . Évalué à -4.

            Petit correctif de chat :

            Pour le cas où le chat ne trouve pas son "copain" ayant la même "link value", c'est pas une décision de chat de rester ;)
            C'est avant de rentré dans la room à "t-2", qu'il avait une seul suite d'idée.

            Il ne fait que sa suite logique, seul la rencontre REEL à un MOMENT, a un ENDROIT avec une certaine LINK VALUE avec un autre chat (donnée) crée la suite… pas un processus prédéfini "une année" avant l'arrivé de la donnée.

          • [^] # Re: Du coup…

            Posté par  (site web personnel) . Évalué à 2. Dernière modification le 09 janvier 2014 à 11:52.

            Je pense qu'il faut lire la doc, mêmes si c'est pas parfait…

            C'est pas « pas parfait », c'est juste pas compréhensible…
            Mais explique ! Explique ce que sont chaque nœud ! Pourquoi trois types : EvenBoard, EvenDoor, EvenPrg ? C'est quoi ?
            Pourquoi 7 « process », en quoi ça permet de tout expliquer ? D'ailleurs c'est quoi un process ?

            Justement, le calcul de probabilité et "remplacé" dans Evenja par la réalité (chat vivant ou mort)

            Donc quel rapport avec les réseaux bayésiens, avec des probas… Je ne vois pas.
            En programmation classique aussi, on a x% de chances de passer dans un if, et on pourrait partir dans des délires comme quoi on a un graphe avec des probabilités… Sauf qu'en vrai, bah c'est déterministe et les variables sont fixées… C'est pareil avec ton système, non ?

            Bon, sinon tu peux te douter que ton explication à base de FÉLIDÉS ZOMBIES m'a juste un peu plus fait pencher du côté « c'est peine perdue »… Si tu en a une de plus compréhensible, je suis partant (mais je suppose que ce n'est pas le cas).

            Ah, et aussi : tes données, elles doivent choisir ou elles vont ensuite, non ? Ça veut dire qu'elles doivent connaître les différents bidules ou elles peuvent aller ?
            Donc si tu ajoute des bidules, faut que les données aient conscience des nouveaux bidules pour pouvoir choisir d'y aller, non ? (donc faut les modifier ??).

            • [^] # Re: Du coup…

              Posté par  . Évalué à -7.

              C'est pas « pas parfait », c'est juste pas compréhensible…

              Je te remercie, c'est la raison du concours
              Et concernant les "félidées zombies" (que je réutiliserais), comme le dit l'expression, j'ai pas mieux. Quand je prend un exemple informatique déjà existant, c'est très difficile de changer de logique au milieu de l'explication. Les gens veulent continuer dans ce qu'ils connaissent, par expérience. Alors je donne un autre exemple plus "chat" et … les pauvres chat deviennent zombies… c'est la raison du concours

              bah c'est déterministe et les variables sont fixées

              et

              tes données, elles doivent choisir ou elles vont ensuite, non ? Ça veut dire qu'elles doivent connaître les différents bidules ou elles peuvent aller ?

              Oui est non, les variables sont déterminées, mais le mélange ou "merge" des variables n'est déterminé par aucun processus. C'est le contenu lui-même de la variable qui produit la suite, pas un processus (suite de commande) qui prend la décision selon une analyse datant peux-être d'une ancienne version du programme.

              Ou en Bayesian, c'est le contenu lui-même de la variable qui produit le prochain segment, en fonction de la réalité de présence d'autre donnée et de leur contenu… existant ou pas.

              • [^] # Re: Du coup…

                Posté par  (site web personnel) . Évalué à 2.

                Et concernant les "félidées zombies" (que je réutiliserais), comme le dit l'expression, j'ai pas mieux. Quand je prend un exemple informatique déjà existant, c'est très difficile de changer de logique au milieu de l'explication. Les gens veulent continuer dans ce qu'ils connaissent, par expérience. Alors je donne un autre exemple plus "chat" et … les pauvres chat deviennent zombies… c'est la raison du concours

                Merci pour les félidées zombies :)
                Bon, toutefois on est bien d'accord que ton code ne nécessite pas d'ordinateur quantique pour fonctionner : il tourne sur un processeur classique. Ton système est codé en C++, et tu dois donc pouvoir expliquer son fonctionnement de manière claire.
                Même si tu arrive pas à monter énormément plus haut que le code en théorisant tout, tu peux forcément expliquer comment ça fonctionne en prenant un peu de hauteur.

                C'est le contenu lui-même de la variable qui produit la suite

                Et comment il le produit ?

                Ou en Bayesian, c'est le contenu lui-même de la variable qui produit le prochain segment, en fonction de la réalité de présence d'autre donnée et de leur contenu… existant ou pas.

                Très bien. Ton « en fonction » m'intéresse : c'est quoi cette fonction dont tu parle ? Comment ce prochain segment est produit ? C'est quoi ce que tu appelle un segment d'ailleurs ?

                Bon, et sinon je pense que la meilleure façon d'essayer d'avancer c'est que tu réponde aux questions concrètes qu'on pose :
                Pourquoi trois types : EvenBoard, EvenDoor, EvenPrg ? C'est quoi ? Pourquoi 7 « process », en quoi ça permet de tout expliquer ? D'ailleurs c'est quoi un process ?

                • [^] # Re: Du coup…

                  Posté par  . Évalué à -5.

                  1 process = une tâche

                  Tout les logiciels du monde ne font que 7 tâches DIFFERENTES !

          • [^] # Re: Du coup…

            Posté par  (site web personnel) . Évalué à 1.

            Tu n'a pas vraiment répondu à la question. Ok, la boîte ne décide rien. C'est la donnée qui décide. Mais comment ? Par rapport à quoi ?

            Cas 1: donnée qui se 'ressemble', peux-tu préciser ? Considère tu 'un type' ? Comment deux données peuvent elle se comparer in fine ? Est-ce que 12 secondes de temps à parler ressemble à 12 sec de temps à attendre ? (en prenant un example venant du #UseCase 1 Hotline).
            Cas 2: Un chat qui décide, je peux comprendre, une donnée (le temps passé à attendre par exemple), bah je ne vois définitivement pas. Est-ce que tu peux préciser ?

            • [^] # Re: Du coup…

              Posté par  . Évalué à -7.

              Oui, j'ai répondu et je suis sûre quand le concours sera terminé tu comprendras aussi. C'est la raison du concours.

              Cas 1: donnée qui se 'ressemble', peux-tu préciser ?

              La donnée c'est un container EvenData. Ce container EvenData contient par exemple [Prénom, Adresse, Ville] comme informations. On décide que pour une fonctions la valeur de [Ville] est le LIEN. Quand un autre objet EvenData arrive sur le EvenBoard, le EvenBoard regarde s'il y a une linkValue déjà existante. Si c'est le cas, il insert l'une dans l'autre et envoie (sans aucun décision) vers le nœud suivant (SANS CODE SPECIFIQUE A CE CHOIX).

              Cas 2: Un chat qui décide.

              J'ai corrigé juste après. Le chat ne décide pas avant de rentrer dans la chambre il avait une suite de truc a faire et il continue (comme certains Dataflow). Seulement comme le EvenBoard crée un "merge" ne dépendant plus des fonctions de l'applications c'est pas du dataflow.

              Normalement et sauf exceptions TRES RARE, le EvenBoard ne doit pas changer de fonctionnement.

              • [^] # Re: Du coup…

                Posté par  . Évalué à 0.

                Puisque tu parles de ville, je propose un exemple bête, mais simple.

                Voici les 10 plus grandes villes françaises :

                1 Paris
                2 Marseille
                3 Lyon
                4 Toulouse
                5 Nice
                6 Nantes
                7 Strasbourg
                8 Montpellier
                9 Bordeaux
                10 Lille

                Quelle serait la logique d'un programme en Evenja qui me retourne le nom de la ville en fonction de sa position (ex : Toulouse pour 4) ?

                • [^] # Re: Du coup…

                  Posté par  . Évalué à -6.

                  Merci pour ta vrai questions.
                  Seulement comme je l'explique sur la page du wiki.evenja.org

                  Plus il y a d'entrées et sorties différentes, plus la différence avec la programmation classique est visible. Avec une entrée et une ville à choisir, c'est aussi facile que en programmation classique, mais cela va paraître plus difficile à comprendre sans tenir compte des avantages comme ajouts de fonctions sans bugs ou ralentissement.

                  Nous avons avancer les "Use cases", par exemple, le Use case de "Hotline" est fini
                  http://wiki.evenja.org/doc/usecase/hotline

                  C'est vraiment plus simple puisque le graphisme c'est exactement ce que va faire Evenja (sans aucune modification).

                  Si tu trouve plus simple, réponds ici-mêmes, je suis preneur.

                  Nous sommes en train de préparer le "Use case" d'un petit serveur web, si quelqu'un à des propositiosn avant que je fasse le "Use case" et donc directement le progamme, n'hésitez pas. ;)

                  Nous préparons pour la semaine prochaine (on fait d'autres choses à côté), le "Use case" en Evenja d'un système de transactions "garantie".
                  http://www.uml-diagrams.org/examples/spring-hibernate-transaction-sequence-diagram-example.html

                  Avec "Transactions" comme il y a ce diagramme "classique", la différence sera très visible.

                  • [^] # Re: Du coup…

                    Posté par  (site web personnel) . Évalué à 4.

                    c'est aussi facile que en programmation classique, mais cela va paraître plus difficile à comprendre sans tenir compte des avantages comme ajouts de fonctions sans bugs ou ralentissement.

                    On ne te demande pas si cet exemple t'arrange, on te demande comment cet exemple pourrait être mis en place avec ta solution afin de comprendre comment ta solution s'utilise.

                    Nous avons avancer les "Use cases", par exemple, le Use case de "Hotline" est fini

                    Plus tu expliques comment Evenja s'utilise moins je comprends la différence avec le dataflow.
                    La page http://wiki.evenja.org/doc/versus/dataflow partie difference n'est pas très claire sur le sujet, assez confuse et assez peu convaincante.
                    J'aurai donc tendance à penser qu'Evenja est un framework de dataflow programming écrit en C++ et utilisant un format de fichier XML spécifique pour décrire le graphe. J'ai gagné quelque chose?

                    • [^] # Re: Du coup…

                      Posté par  . Évalué à -6.

                      On ne te demande pas si cet exemple t'arrange…

                      C'est pas très cool comme remarque, comme je l'ai indiqué sur http://wiki.evenja.org/doc/usecase/start#important , plus il y a de ports en entrée et en sortie… plus la différence est visible.

                      Indiques-moi ce que tu trouves confus sur la page http://wiki.evenja.org/doc/versus/dataflow ou mieux, comme c'est un wiki tu peux t'inscrire et apporter des améliorations.

                      Pour la différence, après plusieurs discussion avec des Geeks, j'ai compris où ce situe l'incompréhension, en faite à plusieurs endroit, que je vais éclaircir pendant ces prochains mois, juste pour la fin du concours. Ainsi chacun aura sa chance ;)
                      Participe au concours et tu peux gagner, il y a trois pris.

                  • [^] # Re: Du coup…

                    Posté par  . Évalué à 0.

                    OK, l'exemple "Hotline" pause une base pour comprendre.

                    Le tableau What the work ? est un tableau de règles, en fait ?

                    1 et 2 signifie que Pour un appel on obtient le numéro d'appel et on démarre l'horodatage ?

                    Peux-tu expliquer le rôle de convert ?

                    Pourquoi dans EvenPrgs, il n'y a que Task convert (D2-D1) et non pas convert (serial number) et convert (start timestamp) ?

                    • [^] # Re: Du coup…

                      Posté par  . Évalué à -5.

                      Merci pour le "Hotline".

                      Le tableau "What the work ?" c'est la liste des opérations à faire… sans logique précise. Pas de logique mais l'une des 7 tâches de la page Principles du Wiki, http://wiki.evenja.org/principles/start . Ceci juste pour savoir quelle objet Evenja va être utilisé : EvenDoor, EvenBoard ou EvenPrg.

                      … le numéro d'appel et on démarre l'horodatage ?

                      Oui, cela fait partie de l'Event qui arrive dans la EvenDoor(PABX).

                      Peux-tu expliquer le rôle de convert ?

                      http://wiki.evenja.org/principles/start et aussi dans la doc.

                      Pourquoi dans EvenPrgs, il n'y a que Task convert (D2-D1) et non pas convert (serial number) et convert (start timestamp) ?

                      Par ce que "convert" est la seul vrai opérations de travail selon le tableau "What the work ?". D2-D1, c'est ni du merge, ni du split… alors convert, il s'agit d'une conversion de donnée.

                      Et il n'y a que cela parce qu'il n'y a pas besoin d'ajouter autre chose (sauf erreur), je vais afficher ces détails dans quelques temps (pas mal de conférence actuellement).

                      Viens sur le http://wiki.evenja.org et chat avec nous sur xmpp:evenja@chat.evenja.org .

                      • [^] # Re: Du coup…

                        Posté par  . Évalué à 0.

                        Le tableau "What the work ?" c'est la liste des opérations à faire…

                        Ce sont les opérations que tu dois créer au niveau programmation dans Evenja alors ?

                      • [^] # Re: Du coup…

                        Posté par  . Évalué à 0.

                        Sinon, si j'ai bien compris le lien entre Data1 et Data2 est le numéro de téléphone de l'appelant, mais quels sont les autres champs/attributs de Data1 et Data2 ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.