Navigation

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

Anciens défis Discussion :

Le premier défi Qt ! Enfin un vainqueur :p


Sujet :

Anciens défis

  1. #1
    Responsable Qt & Livres

    Le premier défi Qt ! Enfin un vainqueur :p
    Citation Envoyé par yan Voir le message
    Après des mois d'attente insupportable et une notation totalement indiscutable (utilisation de dés, escalier et autres méthodes reconnues ), voici enfin les résultats :

    1. bobti89 - 42.50
    2. CameleonTH - 37.37
    3. Z3vil - 35.50
    4. khayyam90 - 34.33
    5. knopix77 - 33.58
    6. LittleWhite - 30.54
    7. 0x4e84 - 29.44
    8. Amnell - 22.50



    MAJ 10 mai 2010

    Un grand bravo à bobti89 !
    Le tout première vainqueur des défis Qt


    Vous trouverez le détails des notes et commentaires ici: http://qt.developpez.com/defis/01-bu...rot/resultats/
    Le juge 2 n'ayant pue tout noter, seules les notes des juges 1, 4, 5 et 6 sont comptabilisées pour la note finale.
    Les sources : http://qt.developpez.com/defis/01-bu...abrot/defis.7z

    Bien sûre si vous avez des questions, des remarques, un besoin de précision et autre joyeuseté, n'hésitez pas à nous demander

    Enfin, un tout grand merci (de la part de toute l'équipe) à tous les participants pour leur participation et leur enthousiasme durant ce défi !
    Nous sommes heureux que ce tout premier défi vous ait plus.

    Bonjour,

    Depuis longtemps, vous languissez à l'attente de leur lancement. C'est maintenant chose faite. Mais ne traînons pas plus en vains bavardages, passons aux choses sérieuses.

    Quel est le sujet de ce premier défi ? Une petite image pour vous mettre sur la piste ?



    Version plus grande
    Version haute qualité

    Reconnaissez-vous ce chef-d'oeuvre ? Il s'agit du Buddhabrot. Non, il ne s'agira pas de devoir l'implémenter : tel n'est pas le but. Vous devrez simplement l'afficher (ceci n'est que la base du défi : libre à vous d'ensuite continuer sur cette piste !), nous vous en fournissons une implémentation simpliste : voici la deuxième partie du défi, utiliser toute la puissance de Qt (multithreading, par exemple) pour l'optimiser. Seuls Qt et le C++ sont autorisés.

    Le défi s'ouvre ce lundi 30 novembre 2009 et s'achèvera le dimanche 28 février 2010 à minuit.

    Un nouveau forum est à votre disposition pour présenter votre solution au défi : les défis Qt. Aussi, les lots à remporter sont annoncés !


    La page d'accueil des défis Qt
    Les règles
    Dépôt des projets
    Le forum du défi

    Le défi du Buddhabrot

    N'hésitez pas à poster ci-après toute questions relative aux défis, à leurs règles, etc. ! Pour des questions plus techniques, non relatives directement au défi, utilisez le forum Qt ou le forum multithreading avec Qt, selon la nature de votre question.

    Envisagez-vous de participer à ce défi ? Connaîtriez-vous des gens qui seraient intéressés par ce défi ?
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Responsable 2D/3D/Jeux

    WOuah, on a trois mois pour ça... ( ne s'imagine pas encore la taille du boulot ).

    Bon bah j'espère que je vais dégagé du temps pour ce défi là.

    Merci tout l'équipe Qt du forum de nous avoir proposé ce défi
    ( Lira les règles un peu plus tard )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Rédacteur

    Citation Envoyé par LittleWhite Voir le message
    WOuah, on a trois mois pour ça... ( ne s'imagine pas encore la taille du boulot ).
    Avec les vacances qui arrive, 3 mois, c'est bien. Ca laisse le temps de peaufiner les idées et de coder sans stresse

    alors qui va participer?

  4. #4
    Responsable 2D/3D/Jeux

    Moi o/ ( quand j'aurais lu les règles )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé
    Je viens de faire un petit test: tout se calcul et s'affiche bien, barre de progression (mais pas de progression de l'image en temps réel), toussa...

    Ca m'a pris une demi heure tout au plus, j'imagine que les 3 mois c'est vraiment pour peaufiner tout ça (logiciel complet de génération de fractales optimisé).

    Par contre, étant plutôt nul en math (de ce niveau), je vois pas trop comment appréhender la partie génération de fractales, mais j'avoue ne pas m'être documenté .

    À titre d'exemple, le générateur fournit me calcule le Budhabrot en 2 minutes et 10 secondes sur un E8400 (3.0Ghz) sur 1 thread.

    Je crois que c'est celui qui prend le plus de temps, et je trouve vraiment ça énorme, d'où la nécessité d'une optimisation.

  6. #6
    Membre éclairé
    Je vais peut-être participer (comprendre : sûrement oui). À titre d'information, je compte reprendre l'idée pour montrer l'intérêt du calcul distribué (OpenCL, tout ça) pour un de mes projets de BTS (je dois en faire cinq et le jour de l'oral le jury en choisit un pour m'interroger).

    Question idiote : pourquoi interdire le C alors que le programme sera fait en C++ ?

  7. #7
    Rédacteur

    Citation Envoyé par manudwarf Voir le message
    Question idiote : pourquoi interdire le C alors que le programme sera fait en C++ ?
    Parceque Qt est en C++ et C++ ce n'est pas du C.
    Après faut comprendre ce que l'on entend par du C.
    * Si tu fait des pointeur pour les widget c'est normale. Là y as pas trop le choix.
    * Si tu fait des char* au lieu de std::string ou QString, c'est du C.
    * Si tu fait int *t =new int[10] au lieu de std::vector ou QVector ou autre, c'est du C
    * Si tu fait des pointeurs de tous les côtés, au lieu d'utiliser des pointeurs intelligent, c'est plutôt du C.
    * ...
    C'est dans ce sens là. Je sais pas si c'est claire...

  8. #8
    Membre habitué
    OpenGL autorisé?
    Bonjour,

    Excellent sujet pour un défi Qt!

    Je vais y prendre part, bien que débutant avec Qt (ou peut-être est-ce justement une bonne motivation pour s'y plonger!).

    L'utilisation d'OpenGL est-elle autorisée pour l'affichage?

  9. #9
    Rédacteur

    Citation Envoyé par klokinou Voir le message
    L'utilisation d'OpenGL est-elle autorisée pour l'affichage?
    Y as QGLWidget donc oui.

  10. #10
    Responsable Qt & Livres

    Citation Envoyé par JulienDuSud Voir le message
    Par contre, étant plutôt nul en math (de ce niveau), je vois pas trop comment appréhender la partie génération de fractales, mais j'avoue ne pas m'être documenté .

    Je crois que c'est celui qui prend le plus de temps, et je trouve vraiment ça énorme, d'où la nécessité d'une optimisation.

    Il n'y a pas que des maths à ce niveau du programme, c'est aussi la connaissance des technologies d'optimisation (multithreading, par exemple). Une petite recherche sur Google te donnera des résultats très intéressants sur le sujet
    - http://jame.sourceforge.net/
    - http://endlos.sourceforge.net/
    - et j'en passe...

    Si tu n'as pas envie de te plonger dans des maths, tu peux regarder comment eux ont fait dans d'autres langages (comme le Java). Tu as plus que le temps pour peaufiner cette partie, pour recouper les solutions, les implémentations, les trucs, les astuces... Tu peux aussi demander dans le forum Algo pour de l'aide sur l'optimisation de l'algorithme.

    Citation Envoyé par klokinou
    L'utilisation d'OpenGL est-elle autorisée pour l'affichage?

    Si Qt le met à disposition, tu peux, sans aucun problème. Dans le même genre, tu peux utiliser le JavaScript, parce qu'il est nativement supporté par Qt 4.5 et 4.6 avec QtScript et JavaScriptCore. Cela permet d'ajouter très facilement des facilités de scripting à une application sans complication excessive (petit tuyau ?).
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  11. #11
    Membre éclairé
    Citation Envoyé par yan Voir le message
    Parceque Qt est en C++ et C++ ce n'est pas du C.
    Après faut comprendre ce que l'on entend par du C.
    * Si tu fait des pointeur pour les widget c'est normale. Là y as pas trop le choix.
    * Si tu fait des char* au lieu de std::string ou QString, c'est du C.
    * Si tu fait int *t =new int[10] au lieu de std::vector ou QVector ou autre, c'est du C
    * Si tu fait des pointeurs de tous les côtés, au lieu d'utiliser des pointeurs intelligent, c'est plutôt du C.
    * ...
    C'est dans ce sens là. Je sais pas si c'est claire...
    Ça oui, mais ça ne répond pas à ma question : pourquoi le C est-il "interdit" ?
    Je sais, je cherche la petite bête, mais cette restriction me turlupine

  12. #12
    Responsable Qt & Livres

    Citation Envoyé par manudwarf Voir le message
    Ça oui, mais ça ne répond pas à ma question : pourquoi le C est-il "interdit" ?
    Je sais, je cherche la petite bête, mais cette restriction me turlupine

    Le C n'est pas le C++. Le C++ est souvent considéré comme une surcouche du C, alors qu'il s'agit d'un langage à part entière, qui évolue différemment de l'original (un peu comme un fork : le nouveau-né essaye de changer ce qui ne va pas dans l'original - ici, le manque de l'objet, principalement - sans pour autant chercher à être parallèle en tous points à l'original).

    Tout ça pour dire que ce sont deux langages totalement différents, même s'ils ont des similitudes. Comme Qt est écrit en C++, il nous a semblé logique de proposer le C++ comme langage, mais pas le C pour cette raison.
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  13. #13
    Rédacteur

    Citation Envoyé par manudwarf Voir le message
    Ça oui, mais ça ne répond pas à ma question : pourquoi le C est-il "interdit" ?
    Je sais, je cherche la petite bête, mais cette restriction me turlupine
    En simple Qt == C++ et C++ != C.
    J'avoue je ne comprend pas trop ta question.
    Qu'es ce qui te gêne de ne pas avoir la possibilité d'utiliser le C?
    on peut encore modifier ou re-expliquer certaine règle

  14. #14
    Expert éminent sénior
    Citation Envoyé par manudwarf Voir le message
    Ça oui, mais ça ne répond pas à ma question : pourquoi le C est-il "interdit" ?
    Je sais, je cherche la petite bête, mais cette restriction me turlupine
    Pour la même raison que hmm l'assembleur est interdit par exemple ?
    Ou le Java ? Ou le C# ?

    Ici il s'agit d'utiliser LA version officielle de Qt et tout ce qu'elle offre, et ça s'arrête là. Donc C++ et éventuellement QtScript, c'est tout. Comme ça tout le monde "se bat avec les mêmes armes". Je pourrai utilsier le binding Haskell pour écrire le code le plus concis et clair de toutes les participations, ou alors écrire des routines ASM pour fracasser les autres en vitesse. Mais là, avec ce choix, tout le monde aura les mêmes capacités, les mêmes possibilités. C'est plus juste.

    Et puis à part pour le côté historique, C et C++ sont aussi différents que C++ et Java, voir même plus que C++ et Java, à mes yeux et pas qu'aux miens en fait.

    J'espère avoir répondu à ta question

  15. #15
    Membre habitué
    Hum, cette interdiction du C me turlupine aussi !
    Autant je peux comprendre que vous vouliez avoir du beau C++, autant dans certain cas un tableau est totalement justifié. Un vector (std::vector ou QVector) est moins rapide, et coupe pas mal d'optimisations du compilateur. Un exemple est une classe simple d'image, qui va contenir une hauteur, une largeur et un buffer qui sera un tableau. Je ne vois pas en quoi un vector serait mieux, surtout que seule la classe image va modifier ce tableau qui signifie une zone de mémoire...
    Enfin je veux pas rentrer dans un grand débat, mais je pense qu'un tableau c'est du C++ aussi
    ( d'ailleurs "int *t =new int[10]" est une syntaxe typique du C++ )

    Sinon, toujours en rapport, on a le droit de faire du SSE ? Sachant que c'est des headers typiquement C contenant de l'assembleur. Remarque ils sont peut-être inclus dans Qt quelque part, faudrait que je regarde
    bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

  16. #16
    Rédacteur

    Citation Envoyé par bobti89 Voir le message
    Un vector (std::vector ou QVector) est moins rapide, et coupe pas mal d'optimisations du compilateur.
    Pour mettre casser les dents plusieurs fois je peut t'assurer que c'est faux.

    d'ailleurs "int *t =new int[10]" est une syntaxe typique du C++
    en faite non, c'est du C :p


    Citation Envoyé par bobti89 Voir le message
    Sinon, toujours en rapport, on a le droit de faire du SSE ?
    je dirais plutôt non. Je ne suis pas sur que tu faire quelque chose de portable en l'utilisant.

  17. #17
    Expert éminent sénior
    Pas de SSE, pas de C, juste C++ et Qt (donc éventuellement QtScript, qui est JIT-compilé je le rappelle).

    Enfin, personnellement, si je vois des Foo****** se promener, je sanctionnerai pour la safety du code AINSI QUE pour l'élégance. Et pour un vector plutôt qu'un tableau dynamique à l'ancienne, je suis d'accord avec yan.

    "int *t =new int[10]" est une syntaxe typique du C++
    Du vieux C++, oui. On ne voit pas ça dans Boost, ASL, j'en passe et des meilleures

    On préfère se caler sur le C++ moderne plutôt que le C With Classes pour juger les projets. On suit tout simplement le mouvement de la rubrique C++

  18. #18
    Responsable Qt & Livres

    Bonjour,

    Un sondage vient d'être ajouté à ce sujet : participez-vous (ou participerez-vous) à ce défi ?

    N'hésitez pas à voter et à commenter ce défi, à poser toutes vos questions ici !
    Vous souhaitez participer aux rubriques Qt ou PyQt (tutoriels, FAQ, traductions), HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  19. #19
    Rédacteur

    Et, bien sûr, si vous avez des problèmes
    - Pour utiliser la petite bibliothèque ou pour la compiler,
    - Sur la notation (je ne sais pas si la partie sur la notation optionnel est claire),
    - Ou d'autres,
    N'hésitez surtout pas à poster sur ce thread !

  20. #20
    Rédacteur

    comme la classe zone n'ets pas forcement trés claire, voici un peu plus d'explication :

    x,y est le point bas,gauche de l'espace complexe.
    h,l est taille de la zone complexe commençant à {x,y}
    ingH, imgL est la taille de l'image pour cette zone complexe. Cela correspond à la résolution en pixel de la zone.
    * imgL : nombre de pixel entre x et x + l
    * imgH : nombre de ligne-pixels sur y et y + h

    cela donne avec un schéma
    {,} coordonnées de la valeur complexe
    [,] coordonnées en pixel.

    {x,y+h} [0 , imgH -1]
    *-----------------------------------* {x+l,y+h} [imgL - 1 , imgH - 1]
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    |..................................................|
    *-----------------------------------* {x+l,y} [imgL - 1 , 0]
    {x,y} [0 , 0]

    [edit]
    quelques précisions