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

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

Qt Quick Discussion :

La Freebox V6 développée en QML


Sujet :

Qt Quick

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Billets dans le blog
    1
    Par défaut La Freebox V6 développée en QML
    La Freebox V6 développée avec Qt et QML
    Un framework sera disponible pour créer ses propres applications



    Je sais, ça ne s'écrit pas comme ça, mais c'est une très bonne annonce que voilà pour les utilisateurs de Qt ! En effet, toute l'interface utilisateur de la Freebox V6 a été développée à l'aide de Qt et du langage déclaratif QML. Ce dernier peut être utilisé conjointement avec du code en JavaScript ou être intégré à une application C++.

    Comme pour les PC et Mac, les développeurs auront plusieurs niveaux pour le développement d'applications : du natif et bas niveau, en C ou en C++ avec l'API 3D OpenGL ; un peu plus haut niveau avec Qt en C++ ou en JavaScript avec QML ; finalement, avec les standards du Web. Sans oublier que le framework de développement de jeux 2D en JavaScript, Elixir, sera toujours supporté.

    Alors, elle n'est pas belle, la vie ?


    Sources

  2. #2
    Membre très actif
    Avatar de UNi[FR]
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 340
    Par défaut
    Arf !

    Moi qui voulais tester ce SDK ! ... sniff, sniff, sniff !

  3. #3
    Membre très actif
    Avatar de octal
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 441
    Par défaut
    Faudra que l'on signe une pétition. Je pense que beaucoup de développeurs manifestent le volonté d'avoir le SDK basé sur QT ca changera la donne.
    Il est ridicule de s'obstiner à obliger les gens d'utiliser Elixir: un framework extrèmement mal documenté et des tutos à la ramasse (pourtant j'ai bien plus de 15 ans de programmation derrière moi).

  4. #4
    Membre confirmé

    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par octal Voir le message
    Faudra que l'on signe une pétition. Je pense que beaucoup de développeurs manifestent le volonté d'avoir le SDK basé sur QT ca changera la donne.
    Je suis sur qu'une petition ne sera pas nécessaire car cela s'imposera de soi. Par exemple hier quand j'étais tout
    content d'avoir la V6 en janvier je disais que ce qui lui manquait c'était quelque chose pour faire du "mod", je pensait alors simplement à du script type Python, mais surement pas à Qt.
    Ce que je veux dire par là, c'est que des devs par les utilisateurs reste la meilleure pubs, et qu'en parlant de Qt il faut voir la quantité d'effort que fait Nokia pour les devs.

    Là dessus, je suis serein.

  5. #5
    Membre extrêmement actif Avatar de air-dex
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 689
    Par défaut
    Voilà de quoi renforcer le stéréotype qui veut que Free soit un FAI de geeks.

    Le seul point positif de cette annonce est que les téléphones Nokia pourront avoir plus de facilités avec les équipements Free, à cause de Qt. Ca pourrait lancer le SIP par exemple. De quoi faire de Symbian et MeeGo des OS appréciés par les geeks ? Ca changerait d'Android en tout cas.

  6. #6
    Membre confirmé

    Inscrit en
    Février 2007
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 202
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par air-dex Voir le message
    Voilà de quoi renforcer le stéréotype qui veut que Free soit un FAI de geeks.
    snif snif... tiens ça sent le bestiau velu sorti de sa grotte.
    Je ne me rappelle pas que Free ait mis ce point en avant que ce soit sur son site ou dans ses pubs. S'il est arrivé que des geeks s'y soient mis, et je trouve qu'il n'y en pas tant que ça, c'est certainement du au fait de son ouverture (Linux dans la box, Linux dans l'esprit du site, etc) et la preuve encore ici puisque je ne me rappelel pas que SFR, Orange (Wanadoo, FT) et autres aient fait pareils avec un quelconque SDK.

    Citation Envoyé par air-dex Voir le message
    Le seul point positif de cette annonce est que les téléphones Nokia pourront avoir plus de facilités avec les équipements Free, à cause de Qt. Ca pourrait lancer le SIP par exemple. De quoi faire de Symbian et MeeGo des OS appréciés par les geeks ? Ca changerait d'Android en tout cas.
    je ne vois pas le rapport entre la façon de programmer le Nokia par Qt et la façon de programmer une Freebox. Je pourrait trés bien dialoguer avec la Freebox avec autre chose que Qt..... un Iphone par exemple ?

    Là où je te rejoins c'est qu'il faut une véritable alternative à l'Iphone et Android n'en constitue pas uen pour moi, Qt : véritablement !.

  7. #7
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Citation Envoyé par UNi[FR] Voir le message
    Arf !

    Moi qui voulais tester ce SDK ! ... sniff, sniff, sniff !
    A priori le SDK "elixir" de la de freebox 5 est compatible et les applications bénéficieront du boost de puissance qu'apporte la Freebox 6.

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Par défaut
    Je n'ai rien contre Elixir.. mais pourquoi devrait-on fermer la techno ?

    Vu la taille du processeur, il n'y a aucune raison de ne pas pouvoir faire tourner du HTML5 saucé jQuery... par exemple... Cela correspond a une communauté de développeurs qu'il serait dommage de négliger...

    http://hacks.mozilla.org/demos/ et http://www.chromeexperiments.com/ sont de parfait exemple des possibilités...

    Pour le moment je n'ai pas les infos précise sur le noyau du navigateur de la V6.. mais, si il est, par exemple, une copie du navigateur open source présent dans Android... cela devrait marcher tip top

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut
    Franchement ça m'etonne bcp que free ouvre son SDK Qt.. Tout simplement car c'est la porte ouverte à toutes les applications malveillantes...

    Au mieux, on aura Exlir et un langage script comme javascript avec toutes les restrictions nécessaires... Et pourquoi pas un QML + javascript securisé ...

    En tout cas, ne rêvez pas de compiler une application pour la Freebox. Enfin, y aurait bien un as de l'informatique qui nous fera un FreeBox jailBreaker!

  10. #10
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Etant un développeur s'est pas mal amusé (et qui s'amuse toujours) avec Elixir (cf. ma signature), quelques petites infos. Pour être clair dès le départ, je ne suis absolument pas dans le 'secret des dieux', loin de là. Mais j'ai eu l'occasion d'avoir quelques précisions généralistes au détour d'un ou deux mails privés et ce que j'en déduis:

    A priori, Free prévoit bien deux 'SDK' distincts en plus de l'actuel Elixir:

    L'un sera effectivement basé sur QML, probablement avec autre chose en complément (Javascript ?) qui -je pense- devrait mettre l'accent sur le développement facilité de 'petites' applis en contrepartie de possibilités plus limitées. J'imagine que c'est plutôt pour viser le modding de l'interface avec quelques possibilités supplémentaires.

    L'autre s'approcherait d'une solution en 'vrai natif', tout en assurant le blindage pour éviter les jailbreaks. Je ne suis pas expert, mais ce que je sais c'est qu'ils ont trouvé une solution technique pour se blinder et j'imagine que ça passera par une solution dans le style 'machine virtuelle améliorée'.

    A propos du SDK natif déjà existant (non public, et mis à dispo uniquement pour les partenaires de Free, GameLoft ...): il est évident que pour des raisons de sécurisation de la box, il est impossible de le mettre à disposition du grand public. Sinon on se retrouverait dans la semaine avec un jailbreak de la box et un FAI qui perdrait ses diffuseurs étant alors incapable d'assurer la protection de leurs flux. D'où la situation actuelle où lesdits partenaires sont uniquement des 'pros', triés sur le volet, qui doivent signer des montagnes d'accords de NDA, etc...

    A propos d'Android ou de la reprise de la solution de GameTree TV: ça me paraît plus qu'improbable: Free a une culture forte des développements faits en interne 'from scratch', et manifestement il est hors de question de prendre le 'risque' de s'aliéner une techno qu'ils ne maîtriseraient pas de bout en bout.

    A propos d'Elixir: non, il n'est clairement pas parfait et oui il reste limité ; mais il ne faut pas oublier que la limitation première venait avant tout du hardware ciblé, à savoir un MIPS à 200MHz, quelque chose comme 16Mo de RAM utilisable et pas la moindre accélération hardware. Ajouté aux impératifs de sécurisation de la solution, le choix des EFL + JS n'était même plus un choix, mais à peu près la seule solution viable pour le hard visé et suffisamment sécurisée pour pouvoir voir le jour. Pour la petite histoire, et si je me rappelle bien, on m'avait dit à l'époque que Qt avait déjà été envisagé mais n'était même pas capable de s'initialiser tellement la plateforme était limitée (en RAM notamment). Pas plus que Java ou d'autres solutions tierces.

    Le petit grognement du jour: plutôt que cracher dans la soupe, il ne faut pas oublier non plus que même juste avec Elixir, Free reste le seul FAI à proposer une telle solution permettant le développement indie sur sa box ; donc quitte à paraître brutal: c'est toujours mieux que rien.
    Parce qu'il ne faut pas se leurrer: ce n'est pas avec quelques dizaines d'indies et une petite comm' sur chaque vente sur un marché aussi étroit que Free a la moindre chance d'être rentable lorsqu'il propose ce genre de feature si on compare aux coûts de développements qu'engendrent la mise en place d'une telle solution.
    Bref, les discours actuels font très "enfants gâtés jamais contents" amha. Perso, je me rappelle d'un temps pas si lointain où les abonnés à qui on filait un minimum d'ouverture pour faire leur propre mod de FreePlayer ou pour les télésites appréciaient et encourageaient (à raison) l'initiative de Free et son approche un peu différente d'un SFR qui propose trois jeux de Majhong et rien pour les développements indies ou de Bouygues qui ne propsoe rien du tout.

    Toujours à propos d'Elixir: le framework est déjà pleinement fonctionnel sur Freebox Révolution. Mon petit jeu, BounceBox (cf. signature), que Free a gentiment mis à dispo sur cette box en est la preuve concrète. Seule l'interface de publication d'applications sur le FreeStore de la v6 n'est pas encore totalement terminée (le FreeFactory pour ceux qui connaissent), mais il est prévu qu'il soit bientôt ajouté la possibilité de publier sur les v6 en plus de freebox HD.

    A noter également qu'ayant eu le privilège de tester justement Elixir sur Freebox Révolution, la solution montre alors tout son champ de possibilités, car le principal facteur limitant jusque là (la puissance dispo) n'est plus qu'un lointain souvenir.

    My 2 cents.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Par défaut Free font ce qu'il peuvent avec leur contraintes
    Je rejoins Nouknouk pour confirmer que Js+EFL était la seule solution possible sur un hardware aussi limité que celui de la V5. Le jailbreak n'est absolument pas envisageable pour Free, les enjeux sont trop grave pour laisser ne serait-ce qu'une seule posssibilité.

    J'avais à l'époque réalisé un bench mathématique pour mesurer les perfs en float du MIPS et ainsi avoir une idée.
    Le résultat montrait que le MIPS, en javascript permettait d'atteindre le... 387 à 20 Mhz !

    Une bonne indication consisterait donc à tester ce code sur la freebox 6 (que je n'ai pas) et à le tester sur chrome/V8 sur une machine rapide.

    Je ne sais pas quel moteur est utilisé pour le js (V8, SpiderMonkey ?), mais j'imagine que ça n'a rien à voir niveau puissance...

    Je serai quand même curieux de connaitre leurs perfs, en js..

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
     
     
    var spectral_line = [ 0, 
        7621.0,       // A
        6869.955,      // B
        6562.816,      // C
        5895.944,      // D
        5269.557,      // E
        4861.344,      // F
        4340.477,      // G'
        3968.494      // H
        ];
     
        var refarr = [  /* Reference results.  These happen to
                           be derived from a run on Microsoft 
                           Quick BASIC on the IBM PC/AT. */
     
        "   Marginal ray          47.09479120920   0.04178472683",
        "   Paraxial ray          47.08372160249   0.04177864821",
        "Longitudinal spherical aberration:        -0.01106960671",
        "    (Maximum permissible):                 0.05306749907",
            "Offense against sine condition (coma):     0.00008954761",
            "    (Maximum permissible):                 0.00250000000",
            "Axial chromatic aberration:                0.00448229032",
            "    (Maximum permissible):                 0.05306749907"
                                                        ];
     
                                                        /*  The test case used in this program is the design for a 4 inch
                                                            achromatic telescope objective used as the example in Wyld's
                                                            classic work on ray tracing by hand, given in Amateur Telescope
                                                            Making, Volume 3. */
     
                                                        var testcase = [
                                                        [ 27.05, 1.5137, 63.6, 0.52 ],
                                                        [ -16.68, 1, 0, 0.138 ],
                                                        [ -16.68, 1.6164, 36.7, 0.38 ],
                                                        [ -78.1, 1, 0, 0 ]
                                                        ];
     
                                                        var current_surfaces, paraxial, clear_aperture, aberr_lspher,
                                                        aberr_osc, aberr_lchrom, max_lspher, max_osc, max_lchrom,
                                                        radius_of_curvature, object_distance, ray_height,
                                                        axis_slope_angle, from_index, to_index;
     
    var s;                    // Design being traced
    var od_sa;                  // Object distance and slope angle
     
    var outarr;                 // Computed output of program goes here
     
    var niter = 1000;      // Iteration counter
     
    //  Display a string on the debug console
     
    function show(s)
    {
             print( s ,100,300);
    }
     
     
    /*  Perform ray trace in specific spectral line  */
     
    function trace_line(line, ray_h) {
            var i;
     
            object_distance = 0;
            ray_height = ray_h;
            from_index = 1;
     
            for (i = 0; i < current_surfaces; i++) {
                    radius_of_curvature = s[i][0];
                    to_index = s[i][1];
                    if (to_index > 1.0) {
                            to_index = to_index + ((spectral_line[4] -
                                                    spectral_line[line]) /
                                            (spectral_line[3] - spectral_line[6])) * ((s[i][1] - 1) /
                                                    s[i][2]);
                    }
                    transit_surface();
                    from_index = to_index;
                    if (i < current_surfaces) {
                            object_distance = object_distance - s[i][3];
                    }
            }
    }
     
    /*      Calculate passage through surface
     
            If the variable PARAXIAL is true, the trace through the
            surface will be done using the paraxial approximations.
            Otherwise, the normal trigonometric trace will be done.
     
            This subroutine takes the following global inputs:
     
            radius_of_curvature     Radius of curvature of surface
            being crossed.  If 0, surface is
            plane.
     
            object_distance       Distance of object focus from
            lens vertex.  If 0, incoming
            rays are parallel and
            the following must be specified:
     
            ray_height            Height of ray from axis.  Only
            relevant if object_distance == 0
     
            axis_slope_angle        Angle incoming ray makes with axis
            at intercept
     
            from_index        Refractive index of medium being left
     
            to_index          Refractive index of medium being
            entered.
     
            The outputs are the following global variables:
     
            object_distance      Distance from vertex to object focus
            after refraction.
     
            axis_slope_angle      Angle incoming ray makes with axis
            at intercept after refraction.
     */
     
    function transit_surface() {
            var iang,            /* Incidence angle */
                rang,            /* Refraction angle */
                iang_sin,            /* Incidence angle sin */
                rang_sin,            /* Refraction angle sin */
                old_axis_slope_angle, sagitta;
     
            if (paraxial) {
                    if (radius_of_curvature != 0) {
                            if (object_distance == 0) {
                                    axis_slope_angle = 0;
                                    iang_sin = ray_height / radius_of_curvature;
                            } else {
                                    iang_sin = ((object_distance - radius_of_curvature) /
                                                    radius_of_curvature) * axis_slope_angle;
                            }
                            rang_sin = (from_index / to_index) * iang_sin;
                            old_axis_slope_angle = axis_slope_angle;
                            axis_slope_angle = axis_slope_angle + iang_sin - rang_sin;
                            if (object_distance != 0) {
                                    ray_height = object_distance * old_axis_slope_angle;
                            }
                            object_distance = ray_height / axis_slope_angle;
                            return;
                    }
                    object_distance = object_distance * (to_index / from_index);
                    axis_slope_angle = axis_slope_angle * (from_index / to_index);
                    return
            }
     
            if (radius_of_curvature != 0) {
                    if (object_distance == 0) {
                            axis_slope_angle = 0;
                            iang_sin = ray_height / radius_of_curvature;
                    } else {
                            iang_sin = ((object_distance - radius_of_curvature) /
                                            radius_of_curvature) * Math.sin(axis_slope_angle);
                    }
                    iang = Math.asin(iang_sin);
                    rang_sin = (from_index / to_index) * iang_sin;
                    old_axis_slope_angle = axis_slope_angle;
                    axis_slope_angle = axis_slope_angle + iang - Math.asin(rang_sin);
                    sagitta = Math.sin((old_axis_slope_angle + iang) / 2);
                    sagitta = 2 * radius_of_curvature * sagitta * sagitta;
                    object_distance = ((radius_of_curvature * Math.sin(
                                                    old_axis_slope_angle + iang)) *
                                    (1 / Math.tan(axis_slope_angle))) + sagitta;
                    return;
            }
     
            rang = -Math.asin((from_index / to_index) * Math.sin(axis_slope_angle))
                    object_distance = object_distance * ((to_index *
                                            Math.cos(-rang)) / (from_index *
                                            Math.cos(axis_slope_angle)));
            axis_slope_angle = -rang;
    }
     
    //  Format a floating point number as does C "%.11f"
     
    function fnum(n) {
            var s = n.toFixed(11);
            if (n >= 0) {
                    s = " " + s;
            }
            return s;
    }
     
    //  Run the benchmark for the specified number of iterations
     
    function RunBenchmark() {
            var start, stop;
     
            // Load test case into working array
     
            clear_aperture = 4;
            current_surfaces = 4;
            s = testcase;
     
            axis_slope_angle = 0;
            od_sa = [ [0, 0], [0, 0]];
     
            niter = 1000;
     
            start = new Date();
            for (itercount = 0; itercount < niter; itercount++) {
                    for (paraxial = 0; paraxial <= 1; paraxial++) {
     
                            // Do main trace in D light
     
                            trace_line(4, clear_aperture / 2);
                            od_sa[paraxial][0] = object_distance;
                            od_sa[paraxial][1] = axis_slope_angle;
                    }
     
                    paraxial = 0;
     
                    // Trace marginal ray in C
     
                    trace_line(3, clear_aperture / 2);
                    od_cline = object_distance;
     
                    // Trace marginal ray in F
     
                    trace_line(6, clear_aperture / 2);
                    od_fline = object_distance;
     
                    aberr_lspher = od_sa[1][0] - od_sa[0][0];
                    aberr_osc = (1.0 - (od_sa[1][0] * od_sa[1][1]) /
                                    (Math.sin(od_sa[0][1]) * od_sa[0][0]));
                    aberr_lchrom = od_fline - od_cline;
                    max_lspher = Math.sin(od_sa[0][1]);
     
                    // D light
     
                    max_lspher = 0.0000926 / (max_lspher * max_lspher);
                    max_osc = 0.0025;
                    max_lchrom = max_lspher;
            }
            stop = new Date();
     
            var mstime = stop.getTime() - start.getTime();
            show("Elapsed time in seconds: " + (mstime / 1000).toFixed(3));
            show("Time for 1000 iterations: " + ((mstime / 1000) * (1000.0 / niter)).toFixed(4));
     
            outarr = [
                    "   Marginal ray         " + fnum(od_sa[0][0]) + "  " + fnum(od_sa[0][1]),
                    "   Paraxial ray         " + fnum(od_sa[1][0]) + "  " + fnum(od_sa[1][1]),
                    "Longitudinal spherical aberration:        " + fnum(aberr_lspher),
                    "    (Maximum permissible):                " + fnum(max_lspher),
                    "Offense against sine condition (coma):    " + fnum(aberr_osc),
                    "    (Maximum permissible):                " + fnum(max_osc),
                    "Axial chromatic aberration:               " + fnum(aberr_lchrom),
                    "    (Maximum permissible):                " + fnum(max_lchrom)
                                                                   ];
     
            errors = 0;
            for (i = 0; i < refarr.length; i++) {
                    if (refarr[i] != outarr[i]) {
                            var e;
     
                            errors += 1;
                            show("Error in results on line " + (i + 1));
                            show("Expected: " + refarr[i]);
                            show("Received: " + outarr[i]);
                            e = "";
                            for (j = 0; j < refarr[i].length; j++) {
                                    if (refarr[i][j] == outarr[i][j]) {
                                            e += " ";
                                    } else {
                                            e += "^";
                                    }
                            }
                            show("(Errors)  " + e);
                    }
            }
     
            if (errors > 0) {
                    show("" + errors + " error" + ((errors > 1) ? "s" : "") + " in results.  This is VERY SERIOUS.");
            } else {
                    show("No errors in results.");
            }
    }
     
     
     
    var FN = "/.fonts/";
    var test = true;
    var tick=0;
    var begin=0;
     
     
     
     
     
     
    function print(text,x,y) {
            var back = new TRectangle(x, y, 200, 50, 0xFFFFFF);
            var hello = new TText(text, x, y, 0, 'Vera', 22);
            back.setSize(hello.width, hello.height);
     
    }
     
     
     
     
     
    var a = new Array();
    var b = new Array();
     
     
    function DisplayPrimeNumbers(nombre) {
            var this_number,divisor,not_prime;
            this_number = 3;
            while(this_number < nombre) {
                    divisor = parseInt( this_number / 2);
                    not_prime = 0;
                    while(divisor > 1) {
                            if(this_number % divisor == 0) {
                                    not_prime = 1;
                                    divisor = 0;
                            } else {
                                    divisor = divisor - 1;
                            }
                    }
                    if(not_prime == 0) {
                            return this_number;
                    } else {
                            return -1
                    }
                    this_number = this_number + 1;
            }
    }
     
     
    function bench() {
            var result=0;
            for (var j = 0 ; i < 100000 ; i++ ) {
                    for (var i = 0 ; i < 10000 ; i++ ) {
                            a[i] = i*3+7.9+j;
                            b[i] = 7*i+5.7+j;
                    }
            }
            for (var j = 0 ; i < 100000 ; i++ ) {
                    for (var i = 0 ; i < 10000 ; i++ ) {
                            result += a[i]-b[i] % 10000 + j;
                    }
            }
            return result;
    }
     
    function isPrime(n) {
            prime = true;
            for (var i = 3; i <= Math.sqrt(n); i += 2)
                    if (n % i == 0) {
                            prime = false;
                            break;
                    }
            if (( n%2 !=0 && prime && n > 2) || n == 2) {
                    return n;
            } else {
                    return -1;
            }
    }
     
    var ccres=0;
     
    function main()
    {
            var bg;
            var obj;
            var deb=0;
            elx.print(DisplayPrimeNumbers(2147483647));
     
            elx.print("Rock n Roll " + elx.version() + "\n");
            elx.include('Cauldron.js');
            ecore_timer_add(1, function () { tick++}, null);
     
            var back = new TRectangle(10, 10, 100, 50, 0xFFFFFF);
            var hello = new TText('Hello World !', 10, 10, 0, 'Vera', 22);
            back.setSize(hello.width, hello.height);
     
            var obj = new TRectangle(50, 50, 250, 200, 0x804000);
     
            var anim = new TAnimator();
            anim.onChange = function() {
                    var x = obj.x ;
                    var y = obj.y ;
     
                    if (begin == 0) {
                            x = 50;
                            y = 50;
                    } else if (begin == 1) {
                            x = 100;
                            y = 100;
                    } else if (begin == 2) {
                            x = 200;
                            y = 200;
                    }
                    obj.move(x, y);
            }
     
            anim.setSpeed(1/5);
     
            anim.start();
     
            screen.onKeyup = function(event) {
                    switch (event.keyname) {
                            /*   case 'GP/Up' : hello.setStyle('outline', 0xFF0000); break;
                                 case 'GP/Down' : hello.setStyle('glow', 0xFF00FF); break;
                                 case 's' : hello.setStyle('shadow', 0x0000FF, 128); break;
                                 case 'f' :
                                 hello.setStyle('shadow', 0xFF0000);
                                 evas_object_text_style_set(hello.handle, EVAS_TEXT0YLE_FAR_SHADOW); break;
                                 case 'd' :   print("tick : "+tick,200,300);break;*/
                            case 'l' : deb=event.timestamp;
                                       begin=1;
                                       elx.print("debut="+deb + "\n");
                                       print('precedent='+ccres,0,100);
                                        RunBenchmark();
                                       begin=2;
                                       deb = event.timestamp-deb;
                                       print('Temps ecoule : '+deb,0,150);
                                       hello.setStyle('outline', 0xFF0000); 
                                       elx.print("fin="+event.timestamp+" soit "+deb + "\n");
                                       break;
                            default  : screen.quit() 
                    }
            }
            screen.main(); 
    }
     
    main();

  12. #12
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Hello,

    Je ne sais pas quel moteur est utilisé pour le js (V8, SpiderMonkey ?), mais j'imagine que ça n'a rien à voir niveau puissance...
    C'est SpiderMonkey qui a été choisi pour Elixir ; si mes souvenirs sont exacts, la raison était simple: c'était le seul à l'époque qui était capable d'être exécuté sur l'archi MIPS de la Freebox HD.

    Citation Envoyé par Montaigne Voir le message
    J'avais à l'époque réalisé un bench mathématique pour mesurer les perfs en float du MIPS et ainsi avoir une idée.
    Le résultat montrait que le MIPS, en javascript permettait d'atteindre le... 387 à 20 Mhz !

    Une bonne indication consisterait donc à tester ce code sur la freebox 6 (que je n'ai pas) et à le tester sur chrome/V8 sur une machine rapide.
    Alors je me suis amusé à reprendre ton code pour l'algo du bench ; je ne passe pas par ton main() basé sur Cauldron, mais par du code perso issu de mes outils propres. Pour ce qui vient de ton code, je lance RunBenchmark().

    Pour les connaisseurs, je mesure le temps comme étant la différence entre deux appels à ecore_time_get() juste avant et juste après RunBenchmark().

    Les résultats sont les suivants (moyenne 'stabilisée' après plusieurs exécutions):

    - l'appli elixir lancée sur mon ordi de développement (Core i5): 115 ms
    - sur Freebox HD (v5): 10 080 ms
    - sur Freebox Révolution (v6): 365 ms.

    Plutôt parlant, non ?

Discussions similaires

  1. Réponses: 31
    Dernier message: 27/03/2015, 15h34
  2. Interface de développement FreeBox
    Par Claude30120 dans le forum Autres EDI
    Réponses: 0
    Dernier message: 25/12/2014, 18h16
  3. Comment Développer en équipe ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 45
    Dernier message: 19/11/2007, 00h15
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

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