Posts filed under 'PHP'

Similarité auditive

Dans un monde où on utilise de plus en plus d’outils de recherche, dans différentes langues, il est important de pouvoir trouver ce que l’on cherche même si on n’utilise pas exactement la bonne orthographe du mot que l’on cherche. Face à ce genre de problèmes, on a vu l’apparition de certains algorithmes, comme le Soundex, qui commence à dater et est loin d’être parfait. C’est pour ça que le Metaphone a été créé, sauf qu’il ne comprend que l’anglais (tout comme le Soundex d’ailleurs), alors l’algorithme a évolué et donné naissance au Double Metaphone qui lui prend en compte les différents langages (principalement l’anglais, les langues slaves, germaniques, celtiques, le grec, le français, l’italien, l’espagnol, ou le chinois) de manière intelligente et qui permet de faire des rapprochements entre des chaines.

Comment ça marche ? C’est relativement simple (dans l’idée, par ce que en pratique c’est loin d’être le cas, d’ailleurs je crois que Lawrence Philips, l’auteur du double metaphone, mérite que la communauté du web se cotise pour lui rembourser ses frais en aspirine) : à partir des combinaisons de lettres et de leur fréquence (si je vous écris “verwandelt” vous vous doutez bien que c’est germanique) en peut savoir le genre de prononciation que ça a, ensuite il ne reste qu’à appliquer des règles sur la prononciation (”ba” se prononce presque comme “bha”), ce qui permet de créer une clef (en fait 2 dans le cas du double metaphone). Deux mots ayant la même prononciation auront la même clef.

On peut trouver diverses implantations de cet algorithme dans différents langages, dont celle ci en PHP.

1 comment March 14th, 2008

Gestion des chemins en PHP

Comme j'en avais marre de devoir constament verrifier si les chemins avec lesquels je travaillais finissaient oui ou non par "/", j'ai décidé de faire une classe pour gérer ça de la manière la plus simple possible. Vous pouvez télécharger cette classe aux formats 7zip, Bzip2 ou Zip.

Voici l'exemple d'utilisation que j'ai fait :

PHP:
  1. <?php
  2. // First of all, we need to include the class
  3. require_once "class.path.php";
  4.  
  5. // Then we'll create a new path, with all options
  6. // In order, the options are : the path string, is the path pointing a
  7. // directory, is there some string to put before the path, and what is the
  8. // separator ?
  9. $path = new Path("/some/path/to/test/", true, "http://", "/");
  10.  
  11. // Obviously, I want to output an URL, just look
  12. echo "It's looking like an URL: $path\n";
  13.  
  14. // Now I create a new path with a completely different delimiter
  15. $path2 = new Path("\a\file.php", false, null, "\\");
  16.  
  17. // And I can just append it to the previous one
  18. $path->a($path2);
  19. // We could have done $path->b($path2), but it would have returned a new object
  20. // with $path2 appened instead of changing $path
  21.  
  22. // And turn this into a SMB share
  23. $path->setHead("\\\\");
  24. $path->setSeparator("\\");
  25. echo "Now it's a SMB share: $path\n";
  26.  
  27. // You can also use new basename() and dirname()
  28. // Note that dirname() returns a Path and not a string
  29. echo "The parent directory is: " . $path->dirname() . "\n";
  30. echo "The pointed file is: " . $path->basename() . "\n";
  31. echo "But without its extension it would be: " . $path->basename(".php") . "\n";
  32. ?>

Add comment March 12th, 2008

Optimisation PHP

Voici un slide d'excellent conseil sur l'optimisation en PHP. Il regorge de tout un tas de tests que j'ai toujours voulu faire et que j'ai toujours eu la flemme de faire...

http://ilia.ws/files/phptek2007_performance.pdf

1 comment October 7th, 2007

Number One

Youpi :) J'ai gagné =D

   

2 comments October 1st, 2007

Easter Eggs

Les Easter Eggs (oeufs de pâques) ne se trouvent pas que le matin de Pâques dans le jardin : si on cherche bien, on peut en trouver dans certains applications telles que Firefox, Open Office ou Aptitude. Il s'agit la plupart du temps d'une blague, ou d'un mini jeu, comme dans Open Office. Voici donc une liste non exhaustive de ce que vous pourrez trouver :

Mozilla/Firefox

Au fil des versions de Mozilla et/ou Firefox, les développeurs ont pris soin d'écrire une "Bible" de Mozilla, dont un nouveau verset est ajouté à chaque version majeure. Pour lire le verset de votre version, tapez about:mozilla dans la barre d'addresse, et validez.

about:mozilla

Apt-get et Aptitude

Les deux gestionnaires de paquet font décidément tout pareil... Même dans les easter eggs :) Il existe une opération non documentée et pourtant implémentée dans chacun des deux. Pour vous en convaincre, tapez dans un terminal :

apt-get moo

La même opération est possible sous aptitude, mais comme aptitude fait toujours mieux les choses, leur moo se déroule en plusieurs étapes. Pour l'étape 1 :

aptitude moo

L'étape 2 :

aptitude -v moo

L'étape 3 :

aptitude -vv moo

Et ainsi desuite jusqu'à ce que le message arrête de changer.

Note: testez le moo d'apt-get sous différentes distributions, il n'est pas le même partout !

PHP

Et oui, PHP posède aussi son (ou plutôt ses) Easter Eggs. Pour cela il suffit d'ajouter une variable dans l'URL de n'importe quel site fait en PHP. La variable en question c'est ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 ou ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 (les deux affichent quelquechose de différent). Par exemple, on passe de http://hyperthese.net/ à http://hyperthese.net/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

OpenOffice.org

Pour finir ce petit listing des Easter Eggs, voici celui d'OOo qui je crois mérite la palme du plus gros. Dans un premier temps, ouvrez un classeur. Dans une cellule, tapez =game()

OOo EE - Step 1

Une fois validé, vous obtenez un joli message dans la cellule :

OOo EE - Step 2

Là il ne vous reste plus qu'à rééditer la cellule, puis à appuyer sur "entrée"

OOo EE - Step 3

Il parraitrait que ce n'est pas le seul je, visiblement vous pouvez aussi tester "Froggle" et "TicTacToe" mais personellement je n'ai jamais eu aucun résultat....

The End

Et voici donc la fin de cette petite liste... N'hésitez pas à faire tourner google, car il y a fort à parier que votre logiciel favoris posède son easter egg ! ;)

Add comment September 18th, 2007

uncentralizedDownloader : nominé !

Et voilà, mon uncentralizedDownloader est nominé sur phpclasses pour le mois d'aout 2007 =)

--> La classe

Add comment September 4th, 2007

Risk

Pendant mes vacances chez un ami, on a pas mal joué à Risk. Ce qui est marrant dans risk, c’est à quel point c’est tordu de calculer les chances de gagner (en tout cas pour moi…). C’est pour ça que j’ai fait tourner mon processeur pour calculer toutes les permutations possibles (c’est quand même vachement plus simple non ? :-P ). J’ai commencé par calculer les % de chances de gagner aux dés :

Dés att VS déf Victoire: Attaquant Victoire: Défenseur Égalité
1vs1 42% (15/36) 58% (21/36) 0%
1vs2 25% (55/216) 75% (161/216) 0%
2vs1 58% (125/216) 42% (91/216) 0%
2vs2 22% (295/1296) 45% (581/1296) 32% (420/1296)
3vs1 66% (855/1296) 34% (441/1296) 0%
3vs2 37% (2890/7776) 29% (2275/7776) 34% (2611/7776)

Une fois la tâche accomplie, j’ai créé un programme qui donne les possibilité de score final dans un combat :

–> Calculateur de chances de victoire

Mon calculateur n’est pas très rapide pour un grand nombre d’attaquants, mais au moins je suis content par ce que ça fonctionne :)

Add comment July 24th, 2007

Uncentralized Downloader

Quand on a voulu faire des téléchargements directs sur TGS, nous avons été obligé d'utiliser free comme hébergeur, car je n'ai pas assez de bande passante ni de place sur mon serveur pour héberger de la musique. Mais on s'est heurté à divers obstacles :

  • Free est plutôt limité dans la liberté de configuration du serveur et les possibilités de PHP
  • Des serveurs se retrouvent hors ligne on ne sait pas bien pourquoi
  • Des sites hotlinkent nos fichiers (ils font des liens vers nos fichiers en faisant comme si ils venaient de leur site)

La solution pour le 2eme problème était de faire une gestion décentralisée des téléchargements : au lieu qu'un fichier ne soit que sur un seul serveur, on le met sur plusieurs serveurs, comme ça si un des serveurs plante les autres serveurs peuvent continuer à proposer le fichier. Le rôle de UD est de scanner les différents serveurs pour trouver le fichier quelquepart et générer un lien de téléchargement valide.
Pour le 3eme problème, la solution aurait facile si je n'avait pas eu le 1er problème. Malheureusement je l'avait... J'ai commencé par essayer de détourner les erreurs 404, mais pour diverses raisons ça n'était pas très stable et puis la plupart des firewalls empêchaient le système de fonctionner comme il faut. La parade a été de faire en sorte que le nom du dossier qui contient les fichiers change assez fréquement, de manière à ce que faire un lien permanant soit impossible. On envoi donc l'utilisateur sur une page qui verrifie que l'utilisateur vient du bon site, puis qui scanne tout les serveurs pour trouver les fichiers et ensuite créé un lien pour télécharger sur un des serveurs.
Ça n'est évidament pas une protection ultime, puisque même un codeur moyen pourra facilement faire sauter ce genre de protection, cependant ça reste une bonne arme contre la majorité des hotlinks : les blogs et tout les sites qui ne demandent aucune connaissance technique, car leurs webmasters n'ont justement aucune connaissance technique...

Comme mon blog est là pour faire profiter à ceux qui le veulent de mon code, voici les sources de ce gestionnaire de téléchargements, que j'espère suffisament documenté (en anglais). En cas de questions, n'hésitez pas à m'envoyer un mail ;) .

--> Télécharger uncentralizedDownloader : 7zip - Bzip2 - Zip

--> La classe sur PHP Classes

Add comment July 23rd, 2007

Pivot de Gauss en PHP

Voici un très intéressant article qui donne le code source d'une classe qui effectue un pivot de Gauss (résolution d'un système d'équations linéaire) en PHP.

--> Lire

Add comment June 15th, 2007

Présentation PHP/MySQL pour Toulibre

Voici les fichiers de ma présentation PHP/MySQL
Télécharger : 7zip - Bzip2 - Zip

Le site de toulibre -> http://www.toulibre.org/

Add comment June 10th, 2007

Previous Posts


Calendar

September 2008
M T W T F S S
« Aug    
1234567
891011121314
15161718192021
22232425262728
2930  

Posts by Month

Posts by Category