Vu aujourd'hui imprimé sur un t-shirt vendu dans une des nombreuses boutiques de souvenirs de la province de Québec :
Suggestion de jeu de mots douteux : quelle belle ANALogie... Promis, j'essaierai de faire mieux demain...
Vu aujourd'hui imprimé sur un t-shirt vendu dans une des nombreuses boutiques de souvenirs de la province de Québec :
Si les gens ne croient pas que les mathématiques sont simples, c’est uniquement parce qu’ils ne réalisent pas à quel point la vie est compliquée.
Savez-vous prendre avantage du lookahead dans une expression régulière ? D'abord, qu'est-ce que c'est ? Le lookahead est un mécanisme d'assertion qui permet de regarder les caractères qui suivent pour voir s'il y a correspondance, sans toutefois les conserver dans le résultat retourné.
Par exemple, dans l'extrait de phrase suivant :
1èrement, je voudrais annoncer le gagnant du 1er prix...
Si on voulait remplacer "1er" pour qu'il devienne "1er" (avec la balise HTML SUP), on devrait utiliser une expression régulière qui vérifie s'il s'agit d'un chiffre, suivi du terme "er" et sa forme au féminin "ère".
(\d+)(er|ère)
Par contre, on voudra s'assurer que le mot est complet et qu'il ne remplace pas une partie du mot original car on ne veut pas que "1èrement" soit transformé en "1èrement". Dans les faits, on pourrait simplement utiliser le flag \b qui vérifie la limite d'un mot, mais pour les fins de mon exemple, je ferai exprès pour démontrer comment on le fait avec la technique du lookahead.
La regex avec le word boundary vérifie que la limite d'un mot est atteinte mais ne conserve pas l'espace qui suivrait.
(\d+)(er|ère)\b
Pour vérifier s'il y a un espace, on remplacera \b par \s à la fin de l'expression.
(\d+)(er|ère)\s
Le problème est qu'on veut vérifier la présence de l'espace, mais sans le conserver au moment du remplacement. C'est ici que le lookahead entre en jeu :
(\d+)(er|ère)(?=\s)
La syntaxe du lookahead est (?=regex). L'expression régulière qui suit ?= indiquera qu'il faut que ce qui s'en vient soit un "whitespace character", mais de ne pas le retenir dans la correspondance.
En PHP, les lignes suivantes feront le travail :
$regex = '/(\d+)(er|ère)(?=\s)/i';Le résultat :
$replace = '$1<sup>$2</sup>';
$sentence = '1èrement, je voudrais annoncer le gagnant du 1er prix...';
echo preg_replace($regex, $replace, $sentence);
D'abord paru sous forme de nouvelle dans le magazine Wired, l'auteur Douglas Coupland en a fait un roman. Il a passé plus de 5 mois à vivre à Redmond et Silicon Valley pour observer ce qui s'y passait et en apprendre davantage sur le milieu.
Cette fiction se situe entre les années 1993 et 1995 et raconte l'histoire d'un groupe d'employés de Microsoft assignés à différents projets et qui se voient l'opportunité de quitter un emploi stable et sécuritaire mais sans réelle possibilité d'avancement, pour se lancer dans l'aventure d'une start up. Ils se retrouvent donc entre amis, à la conquête de gloire et de richesse, même s'ils découvrent qu'ils ne le font pas que pour l'argent.
On suit leur quotidien, que Dan, le personnage principal, rédige dans un journal sur son PowerBook en y documentant un nombre impressionnant de références à des éléments de l'univers de la culture geek. Ils programmeront un jeu nommé Oops!, inspiré des Legos et de la modélisation par ordinateur.
L'auteur a su donner aux personnages des personnalités colorées, allant même jusqu'à décrire sans trop de compliments le seul qui soit canadien (Ontario), une fille aux allures plus que tomboy, qu'un des protagonistes rencontre en clavardant sur Internet et dont il tombe follement amoureux sans même savoir le genre de la personne qui se cache derrière le pseudonyme. Pourtant, l'auteur est lui-même originaire du Canada, de Vancouver plus précisément. Alors que nous vaut ce clin d'oeil ? Heureusement qu'il ne faut pas s'arrêter aux stéréotypes!
Lorsque j'ai lu le livre, j'ai apprécié revivre l'époque du début du web, de l'émergence et de l'effervescence de l'informatique populaire avant l'éclatement de la bulle technologique. Là-dessus, Coupland a fait du bon travail. Cependant, j'ai été déçu de la fin, précipitée, comme s'il avait avait plus ou moins su comment terminer l'histoire. Peut-être s'est-il reprit dans jPod, un autre livre du même genre, sorti 10 ans plus tard et qui a fait l'objet d'une série télé. J'y jetterai un oeil, soyez assuré!
En parcourant les pages, vous verrez deux messages codés dont j'ai pu retracer la signification grâce à Wikipedia. Aux pages 104-105, le code binaire représente une version adaptée du Rifleman's Creed (que vous avez certainement entendu dans le film Full Metal Jacket) :
I heart LiSA Computers. This is my computer. There are many like it, but this one is mine. My computer is my best friend. It is my life. I must master it, as I must master my life. Without me, my computer is useless. Without my computer, I am useless. I must use my computer true. I true. I must compute faster than my enemy who is trying to kill me. I must outcompute him before he outcomputes me. I will. Before God, I swear this creed. My computer and myself are defenders of this country. We are masters of our enemy. We are the saviours of my life. So be it until there is no enemy, but peace. Amen.
Aux pages 308-309, les consonnes apparaîssent sur la page de gauche tandis que les voyelles sont sur celle de droite. Le texte ainsi formé est tiré d'une lettre de Patty Hearst à ses parents, alors qu'elle avait été kidnappée.
Enfin, la version du livre que je me suis procuré contenait à la fin quelques pages supplémentaires présentant des informations pertinentes sur la rédaction du livre (entrevue, faits, etc). À lire si vous êtes amateurs de littérature geek.
Juste pour le plaisir de répertorier un autre easter egg, entrez sur le moteur de recherche Google le terme "ascii art" et cliquez sur le bouton de recherche.
Remarquez le changement de logo :
Voici un excellent site pour observer et apprendre différents algorithmes de tri.
Les algorithmes (insertion, selection, bubble, shell, merge, heap, quick et quick3) sont présentés avec incluant une explication de chaque type, le pseudo-code nécessaire à l'implémentation, les avantages et inconvénients, la possibilité d'observer visuellement le processus d'exécution selon le volume de données à traiter et l'ordre initial des éléments.
La page principale permet de comparer la performance de tri des mêmes données suivant les différents types.
Point intéressant à noter, le site sorting-algorithms.com est construit à l'aide de l'infrastructure de Google App Engine, qui permet de programmer en Python ou Java, avec une integration de Google Web Toolkit.
J'ai démontré récemment comment créer un service web facilement avec Zend Framework. Cet article pourra servir comme introduction à mon sujet d'aujourd'hui puisque j'expliquerai comment protéger l'accès à un service web en ajoutant une authentification HTTP.
Vous aurez besoin :
require_once('Zend/Soap/AutoDiscover.php');
require_once('classes/MyClass.php');
$auto = new Zend_Soap_AutoDiscover();
$auto->setClass('MyClass');
// ceci est nouveau!
$auto->setUri('http://url/vers/server.php');
$auto->handle();Si vous ne définissez pas la ligne $auto->setUri();, vous rencontrerez l'erreur suivante :require_once('Zend/Soap/Server.php');
require_once('classes/myClass.php');
$server = new Zend_Soap_Server('http://url/vers/definition-wsdl.php');
$server->setClass('MyClass');
$server->handle();Fichier .htaccessAuthType BasicFichier .htpasswd
AuthName "Webservice"
AuthUserFile /var/www/emplacement/de/.htpasswd
<files server.php>
Require valid-user
</files>
# $client = new Zend_Soap_Client($wsdl);À ce stade-ci, vous devriez pouvoir accéder au service web protégé. Si l'authentification ne fonctionne pas (par exemple, si vous ne passez pas $options à Zend_Soap_Client ou si les clés d'identification sont erronées), vous verrez une erreur :
# on remplacera l'appel client par ces lignes :
$options = array(
'login' => 'code18',
'password' => '81edoc'
);
$client = new Zend_Soap_Client($wsdl, $options);
$client->votreFonction();
...
Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft