skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

dimanche 6 septembre 2009

Comprendre la technologie informatique

Publié par Infinite Loop, à 20 h 27 0 commentaire

Vu aujourd'hui imprimé sur un t-shirt vendu dans une des nombreuses boutiques de souvenirs de la province de Québec :


(Cliquez sur l'image pour agrandir)

Suggestion de jeu de mots douteux : quelle belle ANALogie... Promis, j'essaierai de faire mieux demain...


Tags: Humour

Citation no. 46 sur les mathématiques

Publié par Infinite Loop, à 20 h 09 0 commentaire

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.

- John von Neumann


Tags: Citations

samedi 5 septembre 2009

Lookahead dans une regex

Publié par Infinite Loop, à 08 h 57 0 commentaire

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';
$replace = '$1<sup>$2</sup>';
$sentence = '1èrement, je voudrais annoncer le gagnant du 1er prix...';

echo preg_replace($regex, $replace, $sentence);
Le résultat :

1èrement, je voudrais annoncer le gagnant du 1<sup>er</sup> prix...

À noter qu'il existe aussi le lookahead négatif où la regex doit être fausse, qui utilise l'opérateur ?!.


Tags: PHP, Programmation

vendredi 4 septembre 2009

Microserfs de Douglas Coupland

Publié par Infinite Loop, à 18 h 33 0 commentaire

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.


Tags: Livres

jeudi 3 septembre 2009

Ascii Art sur Google

Publié par Infinite Loop, à 12 h 04 0 commentaire

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 :


Tags: Easter Eggs

mercredi 2 septembre 2009

Algorithmes de tri

Publié par Infinite Loop, à 18 h 37 0 commentaire

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.


Tags: Programmation

mardi 1 septembre 2009

Protéger un service web avec un mot de passe

Publié par Infinite Loop, à 18 h 30 2 commentaires

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 :

  • Zend Framework
  • un service web
  • fichiers .htaccess et .htpasswd
En reprenant l'exemple de mon article initial, vous remarquerez que les objets Server et AutoDiscover (qui génère le wsdl) se trouvent dans le même fichier, exécutés selon la condition qui vérifie la présence de la clé wsdl dans la query string ($_GET).

Comme l'authentification HTTP sera réalisée à l'aide de .htaccess et .htpasswd, il sera nécessaire d'indiquer quel fichier protéger dans .htaccess. Les deux actions se trouvant dans le même fichier, il sera nécessaire de les extraire et de séparer le code exitant en deux fichiers. N'oubliez pas que l'URI service.php?wsdl n'existera plus :
  • serveur.php
  • definition-wsdl.php
Si vous conservez le tout dans un seul fichier, vous rencontrerez une erreur du type suivant :

Fatal error: Uncaught exception 'SoapFault' with message 'SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://url' : failed to load external entity "http://url" ' in file

C'est parce que le fichier qui génère la définition du WSDL fait aussi la manipulation côté serveur. Par défaut, l'objet AutoDiscover utilise le script courant, sans le paramètre ?wsdl pour trouver l'objet serveur qui prendra en charge la requête ($_SERVER['SCRIPT_NAME']). Dans notre cas, on séparera le script en deux fichiers, le premier créera le wsdl, le second servira à l'objet serveur.

La différence est qu'à la déclaration d'AutoDiscover, on devra assigner à l'objet un autre URI que celui auquel il s'attend par défaut.

Fichier definition-wsdl.php
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 :

Fatal error: Uncaught exception 'SoapFault' with message 'Wrong Version'...

Fichier server.php
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 .htaccess

Une fois les fichiers séparés, on peut ajuster .htaccess pour que seul le fichier server.php demande une authentification (plutôt que service.php).

Placez le fichier sur le serveur à la racine du répertoire du service web. Dans .htaccess, indiquez l'emplacement du fichier de mot de passe sous AuthUserFile. Ensuite, protége l'accès au fichier server.php pour qu'il nécessite une authentification.
AuthType Basic
AuthName "Webservice"
AuthUserFile /var/www/emplacement/de/.htpasswd

<files server.php>
Require valid-user
</files>
Fichier .htpasswd

Vous devrez créer une combinaison login / password à insérer dans .htpasswd. À ce sujet, je vous recommande la lecture de protéger l'accès d'une ressource à l'aide d'un mot de passe. Le mot de passe doit être encrypté en utilisant l'utilitaire de htpasswd.

Fichier client.php

L'objet Zend_Soap_Client permet de spécifier deux paramètres qu'on peut passer en array optionnel pour indiquer le login et le password de l'authentification HTTP lorsque nécessaire.
# $client = new Zend_Soap_Client($wsdl);
# on remplacera l'appel client par ces lignes :

$options = array(
'login' => 'code18',
'password' => '81edoc'
);

$client = new Zend_Soap_Client($wsdl, $options);

$client->votreFonction();
...
À 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 :

Fatal error: Uncaught exception 'SoapFault' with message 'Authorization Required'


Tags: PHP, Zend Framework

Messages plus récents Messages plus anciens Accueil
S'abonner à : Messages (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (55)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ▼  2015 (6)
      • ▼  août 2015 (1)
        • Citation no.164 sur la tromperie
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ►  2009 (429)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ►  mars 2009 (36)
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft