« »
6/26/2008

La rétro-ingénierie (reverse-engineering) appliquée à un mini-projet

Avant de commencer cet article, je souhaite préciser plusieurs choses :

  1. Je suis autodidacte, je n'ai aucune formation scolaire sur le sujet, il est donc possible que je n'emploie pas les bons termes, ne sortez pas le fouet pour autant.
  2. Je montrerai dans ce poste qu'un bref aperçu de mes méthodes de R-E (Reverse-engineering), mon but n'est pas de former, mais simplement d'expliquer la démarche.
  3. J'utilise la rétro-ingénierie à des fins de formation personnel et en aucun cas pour de la contrefaçon ou autre forme de piraterie.


Base d'une réflexion de rétro-ingénierie

Pour commencer, nous allons résumer rapidement le projet : Nous devons créer un équivalent à TwitterCounter mais pour Plurk (que nous appellerons PlurkCounter).

La page d'un utilisateur sur TC (TwitterCounter) est de la forme :

TwitterCounter- How popular are you- (open beta)_1214486815920

Maintenant l'idée consiste à chercher l'ensemble des informations dont on va avoir besoin pour réaliser un service similaire. On a donc besoin :

  • De connaitre le nombre de followers actuellement.
    • Pour l'afficher dans le badge/logo.
    • Pour l'afficher dans le graphique dans la colonne de droite.
  • On a besoin de connaitre le nombre de followers au jour X (dans le passé).
    • Pour afficher l'évolution du nombre de followers dans le graphique.
      • On aura donc besoin de stocker un tableau permettant une relation entre les jours et le nombre de followers pour ces jours-là.

Et c'est déjà fini ! Il ne reste plus qu'à retranscrire cela par un algorithme puis par du code, en allant du plus simple au plus complexe. L'objectif et de voir ce que vous pouvez recréer, puis, une fois vos acquis évalués, essayez de voir comment faire pour chercher les informations qui vous manquent.

 

Quelques pistes d'algorithme :

  1. Cherchez comment retrouver le nombre de followers actuels d'un utilisateur (Plurk ou Twitter ou même autre).
  2. Créez un système de cache qui permettra de ne pas aller rechercher l'information si elle n'est pas périmée :
    1. Si (un fichier cache existe pour cet utilisateur et qu'il date de plus de 24h) OU Si(le fichier cache de cette utilisateur n'existe pas)
      1. Chercher le nombre de followers de cet utilisateur et créer le fichier cache.
    2. Sinon
      1. Ouvrir le fichier cache et récupérer/afficher le nombre de followers.
  3. Ensuite pour la journalisation, et permettre le suivi du nombre de followers en fonction du temps, ajoutez un test à votre algorithme :
    1. Si (le fichier cache pour cet utilisateur existe) ET (le fichier cache date de plus de 24h)
      1. On enregistre dans une base de données/fichier le nombre de followers pour la date du fichier cache.
  4. Il ne vous reste plus qu'à afficher les données sous la forme que vous souhaitez.

 

Autre exemple : Reproduire le graphique de TC

Intéressons nous maintenant à l'affichage des données sous la forme de graphique, comme le montre TC :

TwitterCounter- How popular are you- (open beta)_1214487161004

Émettons que vous réussissiez à créer d'une façon ou d'une autre une base de données (ou un tableau) qui contient le nombre de followers en fonction de la date.

La question qu'il reste à vous poser est comment reproduire ce type de graphique ?

  1. Vous avez forcément le nombre de followers d'aujourd'hui pour cet utilisateur, donc la colonne de droite sera toujours remplie.
  2. Ensuite recherchez si hier, pour cet utilisateur, vous aviez le nombre de ses followers :
    1. si oui : vous affichez l'information.
    2. si non : vous informer l'utilisateur que vous n'avez pas de données pour ce jour-là.
  3. Vous pouvez effectuer une boucle jusqu'à J-X (pour TC la boucle va jusqu'à 7 jours en arrière, pour PlurkCounter la boucle va jusqu'à 8 jours en arrière) de la même façon.

 

Voila j'espère que cette petite initiation vous à plu, n'hésitez pas à tester PlurkCounter si vous êtes un utilisateur de Plurk.

« »
 
 
Made with on a hot august night.
http://bit.ly/1II1u5L