vendredi 30 juillet 2010

Le PowerMac G4 867 à la Fnac en 2010


La Fnac joue à "Retour vers le futur" en proposant un PowerMac G4 867 sur son site.
Voir la page suivante :
http://www.fnac.com/Par-marque/Ordinateur-Apple/sh154596/w-4
A noter le commentaire lié au produit qui dit tout ...


samedi 13 février 2010

optimiser le chargement de vos pages grâce au sprites CSS

Pour optimiser le chargement de vos pages Web, une première approche serait de regrouper les images que vous utilisez en une seule.

Cette image doit être chargée via une feuille de style CSS puis par la suite, il faudra jouer sur plusieurs propriétés comme background-position pour utiliser la bonne partie de l'image.

Essayez de regrouper vos images selon l'utilisation dans la page :


  • les icônes et picto dans une.

  • les images de fond dans une autre.



Par exemple, une feuille de style utilisant cette méthode pourrait ressembler à cela :


.sprite{
background-image:url(sprites.jpg);
}

.lien {background-position: 0 -50px;}
.logo {background-position: 0 0;}



Les propriétés de position ne font simplement que positionner l'image chargée par la classe .sprite.
Ici, la partie de l'image servant comme picto pour les liens se situant à 50 pixels du haut de l'image.

Au final, vous économiserez de la bande passante et gagnerez en vitesse de chargement.

dimanche 31 janvier 2010

PHP : la fonction array_unique() conserve les index... à tort ?

La fonction array_unique() permet de supprimer les valeurs doublons dans un tableau PHP.
Mais attention par défaut, cette fonction retournera un tableau dédoublonné mais sans réorganiser les clés "index".

Par exemple, voyons le code suivant :

$tab = array (0 => "a",  1 => "a", 2 => "c");
$tab2 = array_unique($tab);
echo $tab2 donnera array (0 => "a", 2 => "c");



Les clés (0,2) sont conservées. Attention alors au moment où vous ferez une boucle qui parcourrera le tableau.
Pour corriger ce problème, l'utilisation d'un array_values() est nécessaire pour réaffecter correctement les index du tableau.

vendredi 29 janvier 2010

Nouveau standard des pages web : (x)HTML 5

Un nouveau standard pour la conception de pages Web : le HTML 5.
Après le passage de HTML 4.01 au XHTML, nous voici de retour au HTML 5.

Un retour en arrière au niveau du nom mais pas au niveau des nouveautés apportées par ce langage :


  1. Vous pourrez enfin utiliser le "content-type"xml+html. Le contenu servi pourra donc être du véritable XML.
    Il bénéficiera donc de toutes les règles strictes du XML notamment au niveau des fermetures de balises.

  2. La fièvre des <div> sera enfin guérie avec de nouveaux éléments comme <nav>, <section>, <header>, <footer>, ...

  3. une meilleure représentation sémantique des informations avec des attributs qui pourront indiquer le contexte voire le ton employé. Utile pour qualifier les textes et images exposés aux moteurs de recherches par exemple

  4. Des balises et formats multimédia plus faciles à intégrer.

  5. Une gestion du "hors-ligne" plus standardisée



Pour le moment, seuls les navigateurs comme Firefox, Chrome ou Safari commencent à gérer le HTML 5.
Internet Explorer semble en retard comme souvent en matière de standard. Des astuces Javascript (qui seront détaillées dans un
prochain article) existent et permettent de forcer un peu la main au navigateur de Microsoft.

jeudi 15 octobre 2009

Nouvelle version du site 118218.fr

Le Numéro vient de sortir une nouvelle version de son site annuaire www.118218.fr.
Cette version revient à système de recherche plus classique avec deux champs de saisie assistés de liste de complétion sur les recherches par catégorie professionnelle et les localités.

La recherche est segmentée par type : professionnel, particulier et inversé.

Quelques liens :

annuaire professionnel
restaurants italiens paris

A noter également la version iPhone du site ainsi que l'application dans le style "around me" téléchargeable sur l'appstore depuis votre iphone.

Les redirections HTTP 301 et les moteurs de recherche

Il arrive au fil de la vie d'un site web que ses url ne soient plus adéquates avec son contenu.

De base il est conseillé de faire en sorte que les mots dans l'url d'une page web soient trouvables également dans le contenu de la page elle-même.
Pour cela, vous avez sûrement utilisé un module de réécriture d'url (comme le mod_rewrite d'Apache) pour faire le lien entre une url riche en mots-clés pertinents et une url plus basique qui sert à retrouver le contenu à afficher au sein de votre système.

Tout ce contenu a été indexé par des moteurs de recherche et vous fournit un bon placement dans des pages de résultats.

Mais un jour, il faut que ces url changent et c'est là qu'il faut faire attention afin de rediriger les moteurs de recherche vers cette nouvelle url.

Par exemple, vous aviez l'url suivante :

(A) http://www.site.com/meilleure-page-du-monde/

et dorénavant, la nouvelle adresse est :
(B) http://www.site.com/article/meilleure-page-monde/

Le protocole HTTP permet de faire une redirection de A vers B en envoyant un code 301 qui signifie que la page a été déplacée. Les moteurs de recherche gèrent ce code qui signifie pour eux :

"prend en compte la nouvelle url (B) et oublie (A)".

Le moteur de recherche mettra donc à jour son index avec la nouvelle adresse.

Ce processus peut prendre du temps suivant le nombre d'url à rediriger.
Google, par exemple, semble d'abord repérer les nouvelles adresses avant d'aller ré-indexer leur contenu. Une instabilité dans vos pages indexées peut donc apparaitre durant la période d'analyse ce qui se traduit par des url apparaissant dans les pages de résultats de Google sans description et sans lien "En cache".

jeudi 30 avril 2009

Recherche de proximité sur 118218.fr

118218 propose sur son site annuaire 118218 un système de recherche de proximité par le biais du mot-clé "près de".

Voici quelques exemples :


  • restaurants près de avenue des champs élysées paris

  • hotels près du métro madeleine paris



Les résultats seront donc sélectionnés en fonction du point d'origine choisi.
Cela permet de filtrer de façon plus directe votre recherche.

Ce type de recherche fournit une plus grande liberté dans la saisie au lieu du traditionnel couple "catégorie/ville" comme restaurants paris ou hôtels paris

samedi 11 avril 2009

Brancher un disque dur externe auto-alimenté sur Freebox HD

La freebox HD possède deux entrées USB pour permettre le branchement de périphériques comme des disques durs externes.
Mais attention ! Si votre disque dur ne possède pas d'alimentation électrique dédiée, vous pourrez vite faire face à quelques problèmes.
Un disque dur auto-alimenté de type Western Digital Passport n'aura pas assez de courant pour fonctionner. La freebox HD ne fournissant pas assez de puissance électrique sur une seule entrée USB, il faut donc brancher le disque dur sur les deux entrées pour utiliser plus de courant.

Pour cela, vous pourrez acheter un cable USB en Y sur internet (par exemple le cable lindy sur Amazon) ou dans le quartier de Montgallet, Daumesnil à Paris.

Un autre détail : les systèmes de fichiers compatibles avec la Freebox HD sont NTFS (windows), HFS (mac os x) et ext3 (linux).

jeudi 9 avril 2009

Lenteur et plantage eclipse 3.4 (Ganymede) sur Ubuntu 8.10 (Intrepid Ibex)

Après l'installation du Java JRE 1.6.10 fournit par Ubuntu, la dernière version d'Eclipse SDK (3.4 ganymede) s'est mise à planter et ralentir lors de l'utilisation des vues "explorateur de fichiers".

Après beaucoup de tests, il s'avère qu'en revenant au JRE 1.5, ces plantages s'arrêtent et Eclipse 3.4 retrouve une certaine "rapidité".

Le mieux à faire est d'installer le JRE 1.5 par apt puis de spécifier la ligne suivante pour lancer Eclipse :

eclipe -vm /usr/lib/jvm/java-1.5.0-sun/jre/bin/java

De cette façon, vous pourrez continuer à utiliser le JRE 1.6 si besoin tout en ayant Eclipse 3.4 fonctionnel.

mercredi 5 novembre 2008

Mail Texte/HTML avec images intégrées en PHP

Comment créer un mail texte/HTML en PHP avec les images intégrées et surtout faire en sorte que ce mail soit lisible par une majorité de clients de messagerie ou webmail.



Après de nombreuses recherches qui ne me donnaient pas entière satisfaction, j'ai finalement trouvé une architecture de mail qui permet d'avoir à la fois une version HTML, texte et les images intégrées directement dans le corps de celui-ci.



Comme vous le savez peut-être, un mail est séparé en plusieurs parties définies par des "boundaries" (frontières) qui délimitent chaque élément du mail.
Dans l'exemple suivant, le mail complet doit avoir comme Content-Type multipart/alternative. Ceci signifie que le client mail qui recevra le courrier devra utiliser une seule partie du mail : la partie texte ou HTML. C'est très utile pour une question de compatibilité ou en cas d'absence du support HTML par le logiciel de messagerie.



Voici un exemple de code PHP :



// definition du saut de ligne et des boundaries
pour chaque partie du mail
$eol="\r\n";
$mime_boundary = md5(time());
$html_mime_boundary = $mime_boundary."_html";
$text_mime_boundary = $mime_boundary."_text";
$image_mime_boundary = $mime_boundary."_image";
$related_mime_boundary = $mime_boundary."_related";

$headers = "";
$headers .= "Reply-To: no-reply".$eol;
$headers .= "Return-Path: no-reply".$eol;
$headers .= "Message-ID: <".time()."-".$from.">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol;
$headers .= 'MIME-Version: 1.0'.$eol;

// content-type : alternative pour la gestion du format texte/html
et déclaration de la "boundary"
$headers .= "Content-Type: multipart/alternative;
boundary=\"--".$mime_boundary."\"".$eol.$eol;

// ATTENTION !!! Notez l'ajout de "--" en plus des précédents
$msg = "----".$mime_boundary.$eol;

// déclaration du format texte
$msg .= "Content-Type: text/plain; charset=UTF-8".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol.$eol;
// ajout du message en texte
// notez l'utilisation de la fonction chunk_split et de
// l'encodage en base 64 (pour plus d'explications,
// voir la partie HTML du mail)
$msg .= chunk_split(base64_encode($text_body)).$eol.$eol;

// on sépare les partie avec la "boundary" alternative
$msg .= "----".$mime_boundary.$eol;

// creation de la partie HTML contenant du HTML
et d'autres éléments (images, ...)
$msg .= "Content-Type: multipart/related;
boundary=\"--".$related_mime_boundary."\"".$eol.$eol;

// ATTENTION !!! Notez l'ajout de "--" en plus des précédents
$msg .= "----".$related_mime_boundary.$eol;

// partie HTML
$msg .= "Content-Type: text/html; charset=UTF-8".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol.$eol;
// ajout du message HTML
// notez l'utilsation du chunk_split et de l'encodage en base64
// pour éviter que le contenu en clair et la limite de 1000 caractères
// par ligne ne viennent perturber le serveur SMTP
$msg .= chunk_split(base64_encode($html_body)).$eol.$eol;

// on sépare les partie avec la "boundary" related
$msg .= "----".$related_mime_boundary.$eol;

// déclaration des images (encodées en Base 64)
$attached = "/header.jpg";
$msg .= "Content-Type: ".mime_content_type($attached).";
name=\"header.jpg\"".$eol;
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-ID:
".$eol;
$msg .= "Content-Description: header.jpg".$eol;
$msg .= "Content-Disposition: inline; filename=\"header.jpg\"".$eol;
$msg .= "Content-Location: header.jpg".$eol.$eol;
$file = fopen($attached,'rb');
$data = fread($file,filesize($attached));
fclose($file);
$data = chunk_split(base64_encode($data));
$msg .= $data.$eol;

// on ferme la "boundary" de la partie "related"
(Notez l'ajout de "--" à la fin de la boundary pour fermer)
$msg .= "----".$related_mime_boundary."--".$eol;

/** AJOUTER ICI D'AUTRES IMAGES OU ELEMENTS SI NECESSAIRE
VEILLEZ A LES ENCODER EN BASE 64 ET A LES SEPARER
AVEC LA "BOUNDARY" RELATED*/

// on ferme la "boundary" de la partie "alternative"
en fait on ferme le mail complet (Notez
l'ajout de "--" à la fin de la "boundary" pour fermer)
$msg .= "----".$mime_boundary."--".$eol.$eol;


Pour chaque image ajoutée, vous remarquerez qu'il faut déclarer un "Content-ID". C'est cet identifiant qui servira à utiliser l'image dans le code HTML de la façon suivante :
<img src="cid:header"/>