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 31 mai 2009

Obtenir le Page Rank Google en PHP ou Perl

Publié par Infinite Loop, à 10 h 27 1 commentaire

Pour nos services SEO (Search Engine Optimization), je cherchais un moyen de lister les sites dont nous avons la responsabilité du référencement en faisant afficher à côté de chacun le Page Rank Google (échelle allant jusqu'à un maximum de 10). Google Toolbar a beau être pratique, mais il faut visiter les sites un à un pour le récupérer.

En voulant automatiser ce processus, j'ai trouvé une classe PHP qui me permettrait d'y arriver sans effort. Sur Google Code, on peut télécharger la classe google_pagerank.class.php à partir du projet Popstats.

À noter la dépendance avec le fichier cacher.class.php. On doit donc définir une constante pour indiquer le répertoire utilisé pour l'engin de cache.

require_once("popstats/google_pagerank.class.php");

// par exemple :
define('CACHE_DIR', dirname(__FILE__));

$gpr = new GooglePageRank("http://code18.blogspot.com");

// duh... juste 2
echo $gpr->pagerank;
Pour mes besoins, il ne me reste plus qu'à créer une liste, effectuer les requêtes en boucle et stocker l'information.

Sinon, je sais que l'équipe réseau préfère de loin les scripts Perl pour ce type de tâche. Si la version PHP n'est pas retenue, je me tournerai vers le module Perl de CPAN WWW-Google-PageRank.

use WWW::Google::PageRank;

my $pr = WWW::Google::PageRank->new;

print "Le page rank du site est : " . scalar($pr->get($ARGV[0]));

Où l'appel pourra être fait à l'aide d'un terminal :

perl page-rank.pl http://code18.blogspot.com

Pour les gens moins techniques qui souhaiteraient connaître le Page Rank de leur site, jetez un oeil à un des nombreux interfaces web-based gratuits comme Google PageRank Checker.

Avec tout ça, je réalise que le page rank de mon blogue n'est pas très fort (cordonnier mal chaussé?). Le site est encore jeune et je dois dire que je n'ai pas vraiment fait d'efforts pour le référencer Mais le plus étonnant, c'est qu'il soit consulté par plus de 2000 personnes mensuellement et la tendance est visiblement à la hausse (300 visites de plus que le mois dernier).


Tags: Perl, PHP

Citation no. 32 sur Windows

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

Le comble de Windows, c'est que pour l'arrêter, il faut cliquer sur démarrer.

- La critique


Tags: Citations

samedi 30 mai 2009

Google Talk chatback badge

Publié par Infinite Loop, à 17 h 07 2 commentaires

Hier soir, j'ai ajouté un badge Google Talk chatback à mon blogue pour pouvoir discuter avec les lecteurs. Si je suis en ligne, vous verrez mon statut changer automatiquement et d'un simple clic, vous pourrez ouvrir une session pour parler avec moi sans avoir besoin d'avoir Google Talk d'installé ou d'ouvrir un compte. Évidemment, je ne serai pas toujours disponible alors si vous avez des questions, n'hésitez pas à m'écrire un courriel ou à laisser un commentaire.



À votre tour, si vous souhaitez ajouter une fonctionnalité semblable à votre site, votre blogue ou votre service à la clientèle, vous pouvez le faire simplement en suivant les instructions pour ajouter un badge Google Talk chatback sur le site de Google.

En gros, il suffit :

  • d'avoir un compte GMail
  • installer Google Talk
  • générer le script à l'aide du wizard
  • copier/coller le code (iframe) dans votre site
  • lorsque vous serez connecté, les visiteurs pourront cliquer sur l'icône pour démarrer une session de chat
  • de votre côté, vous recevrez un lien par Google Talk pour ouvrir la fenêtre de chat web-based. Vous devrez être authentifié dans GMail pour que ça fonctionne
J'en profite aussi pour vous inviter à suivre mes commentaires impertinents en vous inscrivant sur Twitter ou Identi.ca (semblable mais open source).


Tags: Intégration

vendredi 29 mai 2009

Images volantes en JavaScript

Publié par Infinite Loop, à 16 h 42 0 commentaire

Voici un vieux truc en JavaScript qui permet de faire "voler" les images d'une page avec un superbe effet visuel.

  1. Rendez-vous sur la page d'accueil de Google, sur Google Image Search ou encore sur le site d'Amazon
  2. Dans la barre d'adresse de votre fureteur (testé fonctionnel dans IE, Firefox et Chrome), copiez et entrez le code JavaScript suivant à la place de l'URL:

    javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ } setInterval('A()',25); void(0);

  3. Faites "Enter" puis admirez le spectacle


Que se passe-t-il exactement dans ce code pour rendre l'effet possible? Regardons la de plus près:
// déclaration et initialisation des variables
R=0;
x1=.1;
y1=.05;
x2=.25;
y2=.24;
x3=1.6;
y3=.24;
x4=300;
y4=200;
x5=300;
y5=200;

// obtenir un array des images contenues dans le document (balises IMG)
DI=document.images;

// combien sont trouvées ?
DIL=DI.length;

// déclaration d'une fonction
function A(){

// pour chaque image
for(i=0; i-DIL; i++){
// changer les propriétés dynamiquement
DIS=DI[ i ].style;
DIS.position='absolute';
DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5;
DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5
}
R++
}

// rappeler la fonction à chaque 25 millisecondes
// pour créer l'effet de déplacement
setInterval('A()',25); void(0);


Tags: Curiosités, JavaScript

jeudi 28 mai 2009

ASP vs PHP

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

Y a-t-il des nostalgiques du langage ASP parmi les lecteurs ? En fait, c'est surtout parce que je me pose la question à savoir comment le langage ASP du méchant Microsoft a bien pu inspirer le bien-aimé PHP au point d'y laisser des traces (au grand dam des développeurs les plus puristes).

D'abord, le non moins controversé ASP Tags consent à accepter les tags <% %> en plus du standard PHP <?php ?>. Simple caprice de style ou réel avantage ? Certains argueront que ça leur fait économiser la saisie de trois caractères à chaque fois alors que d'autres se contenteront d'affirmer que le raccourci d'impression <%= "Hello World!" %> est très pratique en comparaison avec la notation classique <?php echo "Hello World!"; ?>.

Pour les curieux qui souhaiteraient en faire usage, vous pouvez l'initialiser de deux façons:

  • dans le fichier php.ini, modifiez la valeur asp_tags pour qu'elle soit à "on"
  • si vous n'y avez pas accès, vous pouvez vous rabattre sur le fichier .htaccess en y ajoutant la ligne suivante : php_flag asp_tags on
  • Désolé, c'est impossible de le faire par ini_set().
L'autre vestige qui peut faire penser à l'ASP est la syntaxe alternative des structures de contrôles, où la première accolade est remplacée par un : et où un mot clé termine l'énoncé. Ainsi:
$list = array(1,2,3);

foreach($list as $item) :
echo $item;
endforeach;
est équivalent à :
foreach($list as $item){
echo $item;
}
Disponible en plusieurs saveurs : endif, endwhile, endfor, endforeach et endswitch. À vrai dire, c'est faux de croire qu'ASP a eu une influence majeure ici car on devrait plutôt en attribuer la paternité au langage C++. Mais pour ceux qui ont fait un peu d'ASP, avouez que ça vous rappelle des souvenirs : If/End If, While/Wend ou encore ForEach/Next ou Function/End Function. Et on ne s'en ennuie pas.

La preuve est qu'un programme de conversion de code ASP vers PHP a été créé pour mettre fin à vos souffrances. Asp2Php peut donc faire une conversion "rough" de vos scripts préférés mais au risque d'obtenir du code PHP pas toujours très compréhensible et plutôt difficile à maintenir. À classer au rayon des curiosités à expérimenter une fois dans votre vie.


Tags: PHP

mercredi 27 mai 2009

Intervalles de dates sous PostgreSQL et SQL Server

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

Quand j'ai commencé à programmer avec PostgreSQL, je sortais d'un environnement SQL Server et bien qu'il y ait des standards qui ne changent pas, je m'étonnais souvent de l'approche différente qu'avaient les deux SGBD. On le sait, Postgre a une tendance à suivre les traces d'Oracle alors que MSSQL le fait... à sa manière.

Dans SQL Server, si on veut ajouter un intervalle à une date, on doit utiliser la fonction DateAdd (inspirée de VBScript) en utilisant la forme : DateAdd(interval, number, date).

-- Ajouter 7 jours à la date
SELECT DateAdd("d", 7, "2009-05-27")
Sous PostgreSQL, c'est un peu plus subtil et on peut y arriver en utilisant plusieurs notations:
SELECT '2009-05-27'::date + 7
SELECT '2009-05-27'::date + interval '7 days'
SELECT '2009-05-27'::date + '7 days'::interval
Remarquez que l'opérateur "::" est utilisé pour la conversion de type, au même type que sa syntaxe équivalente CAST('2009-05-27' as date):
SELECT CAST('2009-05-27' as date) + 7
Ainsi, on peut convertir une chaîne de caractères en intervalle et l'utiliser comme s'il s'agissait du premier argument de DateAdd.
-- retourne 00:00:07
SELECT '7 seconds'::interval

-- retourne 00:10:00
SELECT '10 minutes'::interval

-- retourne 14:00:00
SELECT '14 hours'::interval
Maintenant qu'on comprend mieux les intervalles, plaçons en un dans un contexte pratique. Si on imagine un système de calendrier où chaque événement entré doit compter une date de fin calculée à 1 semaine plus tard, on pourrait faire quelque chose comme ceci:
SELECT date_event as date_start,
date_event + interval '1 week' as date_end
FROM calendar
Par contre, si la durée de l'intervalle se compte en jours et n'est pas fixe, on pourra la paramétrer, à l'aide d'une variable ou d'un champ de la table, qui composera l'intervalle:
UPDATE calendar
SET date_event = dt_event + (duration || ' days')::interval
Enfin, tant qu'à manipuler des intervalles, aussi bien en profiter pour montrer comment extraire une partie de la date (sous forme de timestamp - datetime en MSSQL):
-- 2009
SELECT EXTRACT(year FROM '2009-05-27 18:50:48.609-04'::timestamp)

-- 27
SELECT EXTRACT(day FROM '2009-05-27 18:50:48.609-04'::timestamp)

-- 18
SELECT EXTRACT(hour FROM '2009-05-27 18:50:48.609-04'::timestamp)
Vous l'aurez deviné, c'est l'équivalent PostgreSQL pour DatePart.


Tags: PostgreSQL, SQL Server

mardi 26 mai 2009

Ordre de chargement avec Prototype

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

Cet après-midi, j'ai rencontré un bogue un peu spécial avec la librairie Prototype.js. Pour une raison particulière, plusieurs fonctions étaient reliées au même événement, celui du chargement de la page (load).

Comme d'habitude, tout fonctionnait à merveille dans Firefox mais une fois testé dans Internet Explorer, un message d'erreur JavaScript était lancé. Avec un collègue de travail, nous avons tenté un certain temps de chercher la réponse jusqu'à ce qu'on s'impatiente et qu'on décide de suivre la trace des appels à l'aide de Firebug (Firefox) et Firebug Lite (IE).

En considérant le snippet de code suivant (simplifié par rapport à l'exemple réel) :

/*
les scripts suivants sont inclus dans la page

/js/firebug-lite-min.js
/js/prototype-1.6.0.3-min.js

*/

document.observe('dom:loaded', function(){ console.log('dom:loaded # 1'); });
document.observe('dom:loaded', function(){ console.log('dom:loaded # 2'); });

Event.observe(window, 'load', function(){ console.log('load'); } );
On remarque que la séquence des appels dans Firefox (Firebug) indique :

"dom:loaded # 1"
"dom:loaded # 2"
"load"

Tandis qu'Internet Explorer 7 affiche (Firebug Lite) :

"load"
"dom:loaded # 2"
"dom:loaded # 1"

C'est à dire que le stack des appels aux fonctions est complètement inversé! Firefox semble les exécuter dans l'ordre rencontré FIFO (First In, First Out) tandis qu'IE agit en FILO (First In, Last Out) Comme nous avions une fonction qui initialisait dynamiquement un composant d'interface et que la deuxième prenait le relais en prenant pour acquis que les changements avaient été appliqués précédemment, la séquence du code rencontré n'était pas respectée et IE se plaigna tout simplement que l'objet n'était pas trouvé dans la page.

Comme on ne fait pas de miracle, on a tout rapatrié dans la même fonction. Si quelqu'un croit avoir la solution, n'hésitez pas à me la partager.


Tags: JavaScript

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