www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit a3c065b073f3a0cd9ee75004f0a452966285fe63
parent 8c0206d80a75d0b78fde5c07e48cdedbefe48562
Author: Bertrand BRUN <bertrand0brun@gmail.com>
Date:   Wed,  2 Feb 2011 11:40:54 +0100

Merge branch 'master' of https://github.com/jsmaniac/2011-m1s2-ter

Diffstat:
Mcode/PtiClic/res/raw/info.html | 26+++++++++++++++-----------
Mcode/serveur/.gitignore | 2+-
Mcode/serveur/dump2sqlite.sh | 2++
Dcode/serveur/php/config.php | 10----------
Dcode/serveur/php/function.php | 37-------------------------------------
Mcode/serveur/php/pticlic.php | 62+++++++++++++++++++++++++++++++++++---------------------------
6 files changed, 53 insertions(+), 86 deletions(-)

diff --git a/code/PtiClic/res/raw/info.html b/code/PtiClic/res/raw/info.html @@ -10,17 +10,21 @@ </style> <body style="margin: 0; padding: 0" bgcolor="Black"> <center> -<p> -PtiClic a ete concu et developpe par Mathieu Lafourcade (LIRMM - Universite Montpellier 3) et Virginie Zampa (LIDILEM - Universite Stendhal Grenoble 3)<br /> -</p><p> -Merci en particulier a (en vrac) farfadet, mehdi (mym), alain joubert, gilles serasset (krado)...<br /> -</p><p> -Pticlic n'est pas exempt de bugs - si vous en rencontrez un, pourriez-vous le signaler a l'administrateur ?<br /> -</p><p> -Mathieu Lafourcade - Administrateur - <a mailto:"pticlic.android.beta@gmail.com">contact</a><br /> -</p><p> -Derniere mise a jour : fevrier 2008 -</p> + +<p>PtiClic a été conçu et développé par Mathieu Lafourcade (LIRMM - Université Montpellier 3) +et Virginie Zampa (LIDILEM - Université Stendhal Grenoble 3)</p> + +<p>La présente version pour SmartPhone sous Android en cours de développement a été +conçue et réalisée par des étudiants en Master 1 à l'Université Montpellier II&nbsp;: +Yoann BONAVERO, Bertrand BRUN, John CHARRON et Georges DUPERON.</p> + +<p>Cette version du PtiClic est une version Alpha. Elle n'est pas exempte de bogues.</p> +<p>Si vous souhaitez participer au projet en tant que Bêta-testeur, +rendez-vous sur le site http://www... pour vous y inscrire.</p> +<p>Si vous souhaitez signaler des bogues ou de nous fournir des commentaires, vous pouvez +nous contacter sur pticlic.android.beta@gmail.com</p> + + </center> </body> </html> \ No newline at end of file diff --git a/code/serveur/.gitignore b/code/serveur/.gitignore @@ -1,3 +1,3 @@ -01042011-LEXICALNET-JEUXDEMOTS-FR-NOHTML.txt +*-LEXICALNET-JEUXDEMOTS-FR-NOHTML.txt db sql diff --git a/code/serveur/dump2sqlite.sh b/code/serveur/dump2sqlite.sh @@ -1,5 +1,7 @@ #!/bin/sh +# TODO : sed -E sur certaines machines, sed -r sur d'autres. + echo " dump2sql.sh : conversion des dumps de JeuxDeMots vers du sql (sqlite3)." >&2 echo " La progression est affichée avec pv. Si vous n'avez pas pv, supprimez la ligne correspondante dans ce script." >&2 echo " Et c'est parti !" >&2 diff --git a/code/serveur/php/config.php b/code/serveur/php/config.php @@ -1,10 +0,0 @@ -<?php - -/** fichier de configuration */ - -// Général - -// Quelques fonctions utiles. -// include("function.php"); - -?> diff --git a/code/serveur/php/function.php b/code/serveur/php/function.php @@ -1,36 +0,0 @@ -<?php - -/**Ce fichier définit un certain nombre de fonctions utiles */ - -// Connexion à la base de données. -function sqlConnect() -{ - global $sql_server, $sql_login, $sql_pass, $sql_bdd; - //connexion au serveur - $linkid = @mysql_connect($sql_server,$sql_login,$sql_pass) or die ("Erreur lors de la connection au serveur MySQL !"); - //selection de la base - @mysql_select_db($sql_bdd,$linkid) or die("Impossible de selectionner la base de données\n<br>\nVoici l'erreur renvoyée par le serveur MySQL :\n<br>\n".mysql_error()); - - return $linkid; -} - -function secure($string) -{ - if(ctype_digit($string)) - { - $string = intval($string); - } - else - { - $string = sqlite_escape_string($string); - $string = addcslashes($string, '%_'); - } - - return $string; -} - -function writeRequest($request) -{ - -} -?> -\ No newline at end of file diff --git a/code/serveur/php/pticlic.php b/code/serveur/php/pticlic.php @@ -69,23 +69,27 @@ function cg_build_result_sets($cloudSize, $centerEid, $r1, $r2) { // Ce n'est toujours pas ça… : "select eid from (select B.start as eid from relation as A, relation as B where A.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and A.start = $centerEid and B.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and B.end = A.end limit 1) order by random();" // Tordu, mais ça marche \o/ . En fait il faut empêcher l'optimiseur de ramener le random avant le limit (et l'optimiseur est malin… :) array('w'=>10, 'd'=>8, 's'=>"select x as eid, -0.1 as r1, -0.1 as r2 from (select x from (select X.eid + Y.dumb as x from (select B.start as eid from relation as A, relation as B where A.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and A.start = 74860 and B.type not in (4, 12, 36, 18, 29, 45, 46, 47, 48, 1000, 1001) and B.end = A.end limit $cloudSize) as X, (select 0 as dumb) as Y)) order by random();"), - array('w'=>10, 's'=>false) // random. Le r1 et r2 de random sont juste en-dessous + 'rand' => array('w'=>10, 's'=>false) // random. Le r1 et r2 de random sont juste en-dessous ); $sumWeights = 0; foreach ($sources as $k => $x) { - $sumWeights += $x['w']; + $sumWeights += $x['w']; + $sources[$k]['rsPos'] = 0; + $sources[$k]['rsSize'] = 0; if ($x['s'] !== false) { $sources[$k]['resultSet'] = array(); $res = $db->query($x['s']); $i = 0; while ($i < 10 && $sources[$k]['resultSet'][] = $res->fetchArray()) { - $i++; + $i++; + $sources[$k]['rsSize']++; } } else { $sources[$k]['resultSet'] = array(); for ($i = 0; $i < 10; $i++) { $sources[$k]['resultSet'][] = array('eid'=>random_node(), 'r1'=>-1, 'r2'=>-1); + $sources[$k]['rsSize']++; } } } @@ -106,32 +110,46 @@ function cg_build_cloud($cloudSize, $sources, $sumWeights) { // On boucle tant qu'il n'y a pas eu au moins 2 sources épuisées $cloud = array(); $nbFailed = 0; - $i = 0; - while ($i < $cloudSize && $nbFailed < 50) { + $i = 0; + while ($i < $cloudSize && $nbFailed < 5*$cloudSize) { // On choisit une source aléatoire en tennant compte des poids. $rands = rand(1,$sumWeights); $sumw = 0; - $res = false; // TODO + $src = $sources['rand']; foreach ($sources as $x) { $sumw += $x['w']; if ($rands < $sumw) { - $res = $x['resultSet']; + $src = $x; break; } } - if (/* dépassé la fin de ce set */) { + if ($src['rsPos'] >= $src['rsSize']) { $nbFailed++; continue; } - $res = $res['eid']; - if (in_array($res, $cloud)) { + $res = $src['resultSet'][$src['rsPos']++]; + if (in_array($res['eid'], $cloud)) { $nbFailed++; continue; - } - $cloud[] = $res; - $i++; + } + // position dans le nuage, difficulté, eid, probaR1, probaR2 + $cloud[$i] = array('pos'=>$i++, 'd'=>$src['d'], 'eid'=>$res['eid'], 'probaR1'=>$res['r1'], 'probaR2'=>$res['r2']); + } + while ($i < $cloudSize) { + $cloud[$i] = array('pos'=>$i++, 'd'=>$sources['rand']['d'], 'eid'=>random_node(), 'probaR1'=>$sources['rand']['resultSet'][0]['r1'], 'probaR2'=>$sources['rand']['resultSet'][0]['r2']); } return $cloud; +} + +function cg_insert($centerEid, $cloud, $r1, $r2) { + $db->exec("begin transaction;"); + $db->exec("insert into game(gid, eid_central_word, relation_1, relation_2) values (null, $centerEid, $r1, $r2);"); + $gid = $db->lastInsertRowID(); + foreach ($cloud as $c) { + $db->exec("insert into game_cloud(gid, num, difficulty, probaR1, probaR2, eid_word) values($gid, ".$c['pos'].", ".$c['d'].", ".$c['probaR1'].', '.$c['probaR2'].', '.$c['eid'].");"); + } + // TODO : insert into game_played une partie de référence. + $db->exec("commit;"); } function create_game($cloudSize) { @@ -140,20 +158,11 @@ function create_game($cloudSize) { $centerEid = random_node(); $r1 = cg_choose_relations(); $r2 = $r1[1]; $r1 = $r1[0]; $sources = cg_build_result_sets($cloudSize, $centerEid, $r1, $r2); $sumWeights = $sources[1]; $sources = $sources[0]; - $cloud = cg_build_cloud($cloudSize, $sources, $sumWeights); + $cloud = cg_build_cloud($cloudSize, $sources, $sumWeights); + cg_insert($centerEid, $cloud); var_dump($cloud); - exit; - - $db->exec("begin transaction;"); - $db->exec("insert into game(gid, eid_central_word, relation_1, relation_2, relation_3, relation_4, reference_played_game) values (null, ".$centerEid.", 1,2,3,4,null);"); - $gid = $db->lastInsertRowID(); - foreach ($cloud as $eid) { - $db->exec("insert into game_cloud(gid, num, difficulty, eid_word) values(".$gid.", ".$i.", ".$difficulty.", ".$eid.");"); - } - // TODO : insert into game_played une partie de référence. - $db->exec("commit;"); -} + exit;} create_game(10); echo 'ok'; @@ -210,4 +219,4 @@ echo 'ok'; // else // die("Commande inconnue"); -?> -\ No newline at end of file +?>