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

vendredi 28 novembre 2008

Mauvaise blague à faire sur un poste de travail

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

Un mauvais tour à jouer à un ami est de faire en sorte que lorsqu'il tente d'accéder à un site web populaire, il se retrouve ailleurs sans savoir pourquoi. C'est possible de le faire en modifiant le fichier hosts de son poste de travail.

Pour comprendre l'astuce, il faut savoir que lorsqu'on accède à un site web, le domaine entré est traduit en adresse IP grâce à un service nommé DNS (Domain Name System). Il est possible de modifier le fichier hosts pour y ajouter des règles de correspondance ou de les remplacer.

Dans cet exemple, je ferai en sorte que lorsqu'on voudra accéder à Google, on se retrouvera à la place chez Yahoo. Pour y arriver, on devra d'abord connaître l'adresse IP de Yahoo.

En ouvrant un invite de commande, exécuter un ping pour obtenir l'adresse IP du domane : ping www.yahoo.com

Identifier et noter l'adresse IP dans la réponse
Reply from 69.147.76.15: bytes=32 time=34ms TTL=52

Ouvrir ensuite le fichier hosts avec un éditeur texte. Sous Windows XP, il est placé dans C:\WINDOWS\system32\drivers\etc\hosts. Le même type de fichier existe sous Linux (dans /etc/hosts) mais ses utilisateurs ne sont généralement pas les cibles de ce genre d'attrapes ;-)

Sous la ligne 127.0.0.1 localhost, ajouter une ligne pour chaque domaine à remplacer sous la forme [adresse ip] [domaine] :

69.147.76.15 www.google.com
69.147.76.15 google.com
69.147.76.15 www.google.ca
69.147.76.15 google.ca

A noter que j'inclus des entrées sans les sous-domaines www car certaines personnes les omettent dans les urls, ainsi que les extensions .com et .ca afin de couvrir les principaux domaines de Google susceptibles d'être utilisés. Enregistrer le fichier et exécuter l'instruction suivante dans l'invite de commande pour réinitialiser la table de correspondance locale : ipconfig /flushdns

Normalement, ça fonctionne immédiatement (et seulement sur le poste de notre victime). Cependant, j'ai cru remarquer que certains fureteurs gardaient en cache l'information DNS et la rafraîchissait au bout de quelques minutes. Généralement, c'est assez rapide.

Lorsque votre victime (ou vous-même) tentera d'accéder au site de Google, elle attérira sur Yahoo. Autant que possible, je ne vous conseille pas de faire cette plaisanterie au bureau, à moins d'avoir la complicité de votre administrateur réseau, ou que vous occupiez vous-même ce poste. Essayez de garder un minimum de bon goût mais assurer-vous de faire durer le plaisir.

Oh, j'oubliais... Pour revenir à la normale, il suffit de retirer les entrées dans le fichier hosts et de réexécuter la commande ipconfig /flushdns.


Tags: Le coin du geek

jeudi 27 novembre 2008

Startup Camp Montreal 3

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

Je viens à l'instant de revenir de la troisième édition du Startup Camp Montreal qui se tenait à la Société des Arts Technologiques. Cet événement a pour but d'aider les entreprises en démarrage à présenter leurs idées aux investisseurs, où chaque invité a droit à 5 minutes au micro pour convaincre les gens de l'audience de la pertinence de leur projet. L'assistance peut ensuite participer à un échange de conseils et d'informations pour aider les entrepreneurs à paufiner leurs présentations afin de pouvoir mieux convaincre les futurs investisseurs (VCs, angels, etc).

La soirée débuta avec une introduction de Patrick Lor (iStockPhoto.com) qui usa de son expérience pour présenter ses précieux conseils au public, jusqu'à ce que les discours des startups commencent. Les projets présentés étaient les suivants :

  • SmartHippo
  • Dokdok
  • Tiamat Trading
  • ArkaLumen
Il y eut aussi un échange avec des entrepreneurs qui ont réussi à obtenir des fonds d'investissements pour leurs projets qui sont venus partager leurs expériences. Il s'agissait de représentants des entreprises Praized Media, Book Oven et John Stokes de Montreal Start Up.

En fin de soirée, Austin Hill (Akoha, Standout Jobs) démontra de façon pertinente et très amusante de quelle façon on pouvait transformer un discours morne et singulier en quelque chose de très dynamique et personnalisé. Une grande réussite! Une phrase m'a particulièrement fait rire : Even a pig can get a chance to fly in a tornado.

En résumé, ce fut une soirée très agrébable, où l'on avait droit à un petit buffet, une bière et une tonne de gens passionnés. Pour ceux qui voudraient en savoir plus sur l'univers des startups, je vous invite à lire le livre Founders at Work de Jessica Livingston (qui est aussi la femme d'un certain Paul Graham...).


Tags: Le coin du geek

mercredi 26 novembre 2008

Songbird, un lecteur multimédia à surveiller

Publié par Infinite Loop, à 19 h 49 0 commentaire

Tous les jours, quand je suis au travail, j'ai l'habitude d'écouter de la musique. La plupart du temps, j'utilise Winamp Lite pour sa légereté (très peu gourmand en mémoire) et lorsque j'ai le goût de découvrir de la musique, je vais fouiner sur iTunes dans les répertoires partagés de mes collègues. Chez moi, j'utilise 3 autres types de lecteur selon mes besoins. Je suis peut-être exigeant, mais aucun des lecteurs ne me donne entière satisfaction. Certains possèdent des fonctionnalités intéressantes, d'autres un look plus intuitif, et certains gèrent mieux que d'autres les librairies les plus larges.

Dans ma quête du lecteur idéal, j'ai découvert Songbird, un lecteur personnalisable à la manière de Firefox grâce à des extensions indépendantes. Encore en version beta, ce projet open source multi-plateforme (Windows, OS X et Linux) est développé par des membres de l'ancienne équipe de Winamp et de Yahoo! Music Engine.

En voici les grandes lignes :

  • Interface graphique s'inspirant énormément de iTunes
  • Possibilité d'appliquer des skins (qu'ils appelent des feathers) et de le réduire en version miniature
  • Prises en charge plusieurs formats audio comme les MP3, FLAC, Vorbis, Ogg, etc.
  • Support pour plus de 25 langages
  • Gestionnaire de pochettes
  • Bâti sur l'engin Mozilla XULRunner (comme Firefox), il est donc aussi un fureteur
À ceci s'ajoutent une panoplie d'extensions (environ 300 jusqu'à maintenant) qu'on peut installer en un simple clic. Voici celles que j'ai essayé :
  • LyricMaster : utilise les metadatas des fichiers musicaux pour obtenir automatiquement les paroles
  • MediaFlow : permet de visualiser les pochettes des albums comme dans iTunes
  • iPod Device Support : pour faire le plein! Mon iPod mini est compatible mais mon iPod Touch a plus de difficulté...
  • Wikipedia Extension : obtenir de l'information sur l'artiste
  • Album List : un type d'affichage comme dans iTunes
  • Album View : un autre type d'affichage comme dans iTunes 8, où l'on voit toutes les pochettes
  • Last.fm : intégration du service pour mettre à jour son compte de profilage musical
Même si le lecteur n'a pas encore atteint sa maturité (version 1.0 RC3 disponible), c'est certain que je porterai une attention particulière à son évolution. Le concept est génial et je suis certain qu'il suscitera beaucoup d'engouement chez les mélomanes comme moi. La compétition s'annonce féroce puisque Amarok 2.0 sortira aussi très bientôt (présentement en RC1)...


Tags: Musique

mardi 25 novembre 2008

Gestion des droits avec Zend_Acl

Publié par Infinite Loop, à 21 h 20 2 commentaires

Pour chaque application web ou CMS que j'ai développé, j'ai souvent eu de la difficulté à figurer de quelle façon j'allais implémenter la gestion des droits d'accès (par utilisateur, par niveau, par module et même par fonctionnalité). Malgré mes tentatives, je n'étais jamais tout à fait satisfait de l'élégance et de la lisibilité du code produit. Jusqu'à ce que je découvre Zend_Acl (Access Control List), un composant faisant parti de la librairie Zend Framework pour PHP.

Ce qui est bien avec le Zend Framework, c'est qu'il ressemble davantage à une librairie de code et de compostants plutôt qu'un framework imposant un cadre de travail prédéfini à respecter. Ça nous laisse donc la possibilité d'utiliser seulement les objets que nous avons besoins, tout en conservant nos bonnes (et parfois mauvaises!) habitudes de travail.

Pour pouvoir utiliser le composant, il faut d'abord télécharger Zend Framework (actuellement la version 1.7) et inclure les fichiers sources à son projet.

Dans un fichier php global au projet, on ajoutera les références aux objets nécessaires :

require_once('Zend/Acl.php');
require_once('Zend/Acl/Role.php');
require_once('Zend/Acl/Resource.php');

Instancier un objet ACL :

$oAcl = new Zend_Acl();

Définir les rôles :

$oAcl->addRole( new Zend_Acl_Role('programmers') );
$oAcl->addRole( new Zend_Acl_Role('designers') );
$oAcl->addRole( new Zend_Acl_Role('sysadmin') );

On spécifiera ensuite les ressources du site ou de l'application (par exemple un module ou une section) :

$oAcl->add( new Zend_Acl_Resource('internet') );
$oAcl->add( new Zend_Acl_Resource('databases') );
$oAcl->add( new Zend_Acl_Resource('zend_studio') );
$oAcl->add( new Zend_Acl_Resource('coffee') );
$oAcl->add( new Zend_Acl_Resource('photoshop') );
$oAcl->add( new Zend_Acl_Resource('servers') );
$oAcl->add( new Zend_Acl_Resource('porn') );

Pour terminer, on indiquera pour chaque module quels sont les privilèges qu'un niveau d'utilisateur a droit :

// Tous les niveaux
$oAcl->allow(null, 'internet', 'view');
$oAcl->allow(null, 'coffee', 'drink');
$oAcl->allow(null, 'porn', 'view');

$oAcl->allow('programmers', array('databases', 'zend_studio'), 'use' );
$oAcl->allow('designers', 'photoshop', 'use');
$oAcl->allow('sysadmin', 'servers', 'update');

$oAcl->deny( array('programmers', 'designers'), 'porn');

Je crois que vous avez compris, nul besoin de m'acharner puisque le code parle de lui-même. On pourra ensuite vérifier les droits aux endroits nécessaires et agir en conséquence (afficher une section, refuser l'accès, etc.) :

if ( !$oAcl->isAllowed($userLevel, 'coffee', 'drink') ) {
...
}

Avec Zend_Acl, il devient facile de faire la gestion des ressources, des rôles et des privilèges. En plus d'être facile à lire, le code se maintient très facilement. On peut ajouter de nouveaux rôles et de nouvelles ressources en un rien de temps. Exactement le genre de composant que j'aime pour être efficace dans mon travail.


Tags: PHP, Zend Framework

lundi 24 novembre 2008

Évolution des éditeurs web

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

Aujourd'hui, à mon travail, j'ai eu une discussion intéressante avec un autre développeur. Son OS préféré avait prit en otage la mémoire vive de son ordinateur et il avait énormément de difficulté à faire quoi que ce soit sur son poste, dont sa fonction principale, programmer. En vérifiant les processus de Windows, nous avons remarqué que l'éditeur web était en cause et que la mémoire virtuelle du processus dépassait 1 Go. En réaction à tout cela, ma matière grise s'éveilla et je me souvins d'une époque pas si lointaine où les éditeurs web étaient tellement moins gourmands. Époque dont je ne m'ennuie pourtant pas du tout...

Sur le chemin du retour, j'ai tenté de faire le compte de tous les éditeurs web que j'ai pu utiliser depuis mes premiers pas sur le web. Lorsque je suis arrivé chez moi, j'ai fouillé dans mes boîtes et à ma grande surprise, j'y ai trouvé une copie authentique du logiciel WebExpert de Visicom Media. Datant de 1997, cette petite disquette contenait la version 2.03a de WebExpert pour Windows 95 / NT 4.0 et permettait de créer des sites compatibles avec Netscape 3 et Internet Explorer 3. Et ce n'est rien! Permettez-moi de vous dire que j'avais acquis ce classique pour la modique somme de 56.32$, au défunt Aventure Électronique :-)

Selon mes souvenirs, voici la liste des éditeurs web que je me souviens avoir utilisé, en ordre chronologique :

  • NotePad
  • Netscape Gold (1996)
  • WebExpert (1997)
  • HotDog
  • HoTMetaL
  • SimpleWeb 1.0 (projet d'études d'un étudiant dans mes cours, vers 1999)
  • Arachnophilia (2001)
  • Allaire HomeSite (probablement la version 5, 2001)
  • Dreamweaver UltraDev 4.0 / Dreamweaver 4 (2000)
  • Dreamweaver MX (2002)
  • Dreamweaver MX 2004 (2003)
  • Dreamweaver 8 (2005)
  • Eclipse / PDT (2006)
  • Zend Studio 5.5 (2007)
  • Zend Studio for Eclipse (2008)
Quand je regarde ça, au moins je me dis que le développement web évolue dans le bon sens.


Tags: Programmation

dimanche 23 novembre 2008

Prendre avantage de __autoload() en PHP 5

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

Il y a quelques années, je me souviens avoir travaillé sur un projet ASP assez complexe qui avait nécessité l'écriture de nombreuses classes. Comme certaines classes fonctionnaient par composition d'objets, je devais inclure en entête du script principal toutes les dépendances et surtout ne pas en oublier. Parfois, un fichier en incluait un autre (à éviter) ou incluait le même qu'une autre librairie et comme ASP n'avait pas de mécanisme équivalent aux méthodes include_once() ou require_once() de PHP, certaines erreurs de redéfinitions survenaient.

En PHP 5, on a la possibilité d'utiliser une fonction nommée __autoload() qui permet, lorsqu'on déclare un objet qui n'est pas défini, de charger automatiquement la librairie reliée. Ce mécanisme permet donc d'inclure dynamiquement les librairies dépendantes lorsqu'elles sont requises, plutôt que de les inclure comme on le faisait traditionnellement en PHP 4 ou en ASP.

Dans un fichier de configuration global au projet (c'est-à-dire inclus à toutes les pages), on pourra définir la fonction qui effectuera le travail pour nous. Idéalement, on ajoutera aussi le chemin menant au répertoire des classes dans le fichier php.ini (variable de configuration include_path). Sinon, on devra spécifier le chemin d'accès aux classes à l'intérieur de la fonction __autoload().

Pour simplifier l'exemple suivant, j'ai spécifié dans php.ini le chemin du répertoire où je conserve toutes mes classes (donc transparent dans le code).

// Dans le fichier de configuration config.php
<?php
function __autoload($classname) {
require_once($classname . '.php');

}

// Dans le fichier principal
<?php
require_once('config.php');

$obj = new DBI();

Dans le fichier principal, comme la librairie DBI.php n'est pas incluse et que la classe DBI n'est pas définie, lorsque PHP tente de créer l'objet DBI et qu'il ne le trouve pas, la fonction __autoload() est déclenchée pour tenter de la charger. La fonction reçoit en paramètre le nom de la classe et lui concatène l'extension PHP pour obtenir le nom du fichier à inclure. Malgré une légère perte de performance, ce service nous donne un souci en moins et peut être utilisé même si les classes sont incluses explicitement au projet car la fonction __autoload() est appelée seulement lorsqu'il ne trouve pas la définition de la classe. Il n'y a donc pas de raison de ne pas en tirer profit.


Tags: PHP

Citation no. 5 sur Internet

Publié par Infinite Loop, à 10 h 05 0 commentaire

The internet is a place where absolutely nothing happens. You need to take advantage of that.

- Strong Bad


Tags: Citations

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