Posts filed under 'PHP'
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.
March 14th, 2008
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:
-
<?php
-
// First of all, we need to include the class
-
require_once "class.path.php";
-
-
// Then we'll create a new path, with all options
-
// In order, the options are : the path string, is the path pointing a
-
// directory, is there some string to put before the path, and what is the
-
// separator ?
-
$path = new Path("/some/path/to/test/", true, "http://", "/");
-
-
// Obviously, I want to output an URL, just look
-
echo "It's looking like an URL: $path\n";
-
-
// Now I create a new path with a completely different delimiter
-
$path2 = new Path("\a\file.php", false, null, "\\");
-
-
// And I can just append it to the previous one
-
$path->a($path2);
-
// We could have done $path->b($path2), but it would have returned a new object
-
// with $path2 appened instead of changing $path
-
-
// And turn this into a SMB share
-
$path->setHead("\\\\");
-
$path->setSeparator("\\");
-
echo "Now it's a SMB share: $path\n";
-
-
// You can also use new basename() and dirname()
-
// Note that dirname() returns a Path and not a string
-
echo "The parent directory is: " .
$path->
dirname() .
"\n";
-
echo "The pointed file is: " .
$path->
basename() .
"\n";
-
echo "But without its extension it would be: " .
$path->
basename(".php") .
"\n";
-
?>
March 12th, 2008
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
October 7th, 2007
Youpi
J'ai gagné =D
October 1st, 2007
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.
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()
Une fois validé, vous obtenez un joli message dans la cellule :
Là il ne vous reste plus qu'à rééditer la cellule, puis à appuyer sur "entrée"
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 !
September 18th, 2007
Et voilà, mon uncentralizedDownloader est nominé sur phpclasses pour le mois d'aout 2007 =)
--> La classe
September 4th, 2007
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 ?
). 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
July 24th, 2007
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
July 23rd, 2007
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
June 15th, 2007
Voici les fichiers de ma présentation PHP/MySQL
Télécharger : 7zip - Bzip2 - Zip
Le site de toulibre -> http://www.toulibre.org/
June 10th, 2007
Previous Posts