15.11.12

Etre geek, parfois c’est – presque – utile

Posté dans Forrest Gump, Geek à 14h03 par Laurent

Comment ? Un second article en moins d’un mois ? Incroyable mais vrai !

Certains d’entre vous m’ont demandé à  quelle rang j’ai terminé le dernier Marseille-Cassis. Je t’arrête tout de suite, toi là qui vas bientôt zapper sur facebook ou youtube: oh non, il va encore nous parler de ça…. Pas de panique, je ne vais pas parler de course, cet article sera à 80% geek !

Aïe, je sens que je perds l’autre moitié de mes lecteurs (oui bon, « l’autre lecteur »).
Bon, revenons à notre question : à quel rang ? La réponse est : « difficile à dire ». Pourquoi ? Tout simplement parce que l’organisation (ou plutôt KMS) fournit le classement « scratch », c’est à dire l’ordre de passage sous la ligne d’arrivée. Sachant que le passage sous la ligne de départ peut prendre de longues minutes (environ 5 min en ce qui me concerne), ce classement n’est pas très précis pour ceux qui partent dans le peloton.

Alors comment faire ? Bonne nouvelle : en plus des classement et temps « scratch », KMS fournit aussi le temps « réel », c’est à dire entre le passage sous la ligne de départ et le passage sous la ligne d’arrivée. Il suffit alors de compter les concurrents en triant par temps « réel ». Bien sûr, KMS ne fournit pas toute la liste. Bien sûr, ce petit détail n’allait pas m’arrêter icon_smile

A partir d’ici je conseille aux non-geeks ou non intéressés de passer directement aux résultats, à la 3e étape.

Première étape : récupérer la liste. Premier réflexe : analyser les entêtes HTTP envoyées au serveur sur la page qui va bien. Rien ne se passe. En lisant plus attentivement le code, on trouve rapidement un petit XHR qui nous renvoie les résultats par blocs de 201 (une position +/- 100). Armé de bash, wget, sed et awk, il est assez facile de reconstruire une liste du type CSV. Allez, un indice :

wget -O - "mon_url_qui_va_bien" --post-data "mes_parametres_qui_vont_bien" 
>> mon_fichier_csv

Connaissant le nombre de coureurs à l’arrivée et le pas, il est assez facile de mettre tout ça dans une petite boucle for.

Deuxième étape : je suis un peu geek, donc un peu fainéant. Ca serait tellement plus facile d’avoir ça dans une base de données. Hop ! Quelques commandes mysql et un sed plus tard, c’est chose faite. Bon d’accord, un autre indice :

sed -e "s/\\t/','/g" mon_fichier_csv | sed -e "s/^/insert into ma_table values
 ('/" -e "s/$/');/" > mon_fichier_sql

Troisième étape : c’est là que ça devient rigolo et qu’on peut faire tout un tas de requêtes inutiles.
D’abord mon classement réel :

mysql> select count(*) from classement_mc where temps_reel<'01:31:12';
+----------+
|  1525    | 
+----------+

Classique : la moyenne et la médiane :

mysql> select sec_to_time(sum(time_to_sec(temps_reel))/12174) 
from classement_mc;
+----------+
| 01:50:16 |
+----------+
mysql> select temps_reel from classement_mc order by temps_reel 
limit 6087;
[...]
| 01:49:28 | 
+----------+

J’avoue, pour la médiane je ne me suis pas foulé. Je me rattrape avec un petit tableau du nombre d’arrivants par tranche de 10 min :

mysql> select count(*) as nb, concat(left(temps_reel,4), '0') as min 
from classement_mc group by left(temps_reel,4);
 +------+-------+
 |  nb  |  min  |
 +------+-------+
 | 8    | 00:50 |
 | 31   | 01:00 |
 | 233  | 01:10 |
 | 1053 | 01:20 |
 | 2145 | 01:30 |
 | 2745 | 01:40 |
 | 2632 | 01:50 |
 | 2028 | 02:00 |
 | 677  | 02:10 |
 | 414  | 02:20 |
 | 132  | 02:30 |
 | 52   | 02:40 |
 | 22   | 02:50 |
 | 1    | 03:00 |
 | 1    | 03:20 |
 +------+-------+

La même chose dans un joli graphique, minute par minute ; vous me trouverez au niveau des points verts :

On peut aussi récupérer d’autres informations rigolotes :

  • rang au départ (nombre de personnes qui ont passé la ligne de départ avant moi : 8427 (sur 12174 ; je suis donc parti loin dans le peloton)
  • nombre de coureurs que j’ai doublés sur toute la course : 6902 (oui je vous l’ai dit, je suis parti looiiiiin)
  • mon classement dans la montée : 899 1756
  • mon classement dans la descente : 2411 ; étonnant, 1340, ce qui confirme que je suis habituellement un bien meilleur descendeur
  • 246 Laurent ont fini la course, je suis le 41e

Bon, j’avoue que je suis allé un peu loin sur ce coup-là icon_smile

7 Comments »

  1. Anne a dit,

    15 novembre 2012 à 15h17

    Ils ne t’ont pas encore nourri ? Parce que là, tu as l’air complètement azymuté, non ? Je dis juste BRAVO, euh, pour toutes tes performances !

  2. Jube a dit,

    15 novembre 2012 à 16h11

    T’es complètement fou tu le sais ça ?!?
    Tu m’as épuisé…

  3. Ohad a dit,

    15 novembre 2012 à 20h09

    clap clap!

  4. Alice a dit,

    16 novembre 2012 à 0h01

    Viens courir en Suisse, les courses sont gérées par DataSport, avec un vrai transpondeur, pas la peine de te masturber le cerveau les soirs où tu t’embêtes !!!!

  5. Laurent a dit,

    16 novembre 2012 à 9h00

    @Anne : si si, j’ai bien dévalisé le ravitaillement à l’arrivée comme d’habitude :)

    @Jube : merci, je prends ça comme un compliment !

    @Alice : on avait aussi des vrais dossards RFID… encore faut-il publier les bonnes infos !

    @tous : je m’étais trompé sur les classements montée / descente ; c’est corrigé (et beaucoup plus cohérent)

  6. Odile a dit,

    17 novembre 2012 à 23h03

    Félicitations pour cette superbe performance !! Apparemment, jambes fatiguées ne veut pas dire cerveau fatigué icon_smile

  7. mme-beaute a dit,

    18 novembre 2012 à 21h45

    putain vous avez un pic d’activité au Mailclub en ce moment ??????

Laisser un commentaire