Youplablog

Aller au contenu | Aller au menu | Aller à la recherche

dimanche, mars 18 2007

PHP, jolies URLs et référencement

Reprise de la vie du blog, mais que vaguement

Depuis le jour où je me suis rendu compte que la négociation de contenu existait, j'ai essayé d'en profiter pour utiliser le plus possible des URLs sans extension[1]. Et pour ça, j'ai changé tous mes liens internes en leur version sans extension. Mais finalement, je n'empêche personne d'utiliser les extensions (même si personne ne tape les urls à la main).

Et puis j'ai lu cet article de WebRankInfo sur le duplicate content. Et plutÎt que d'utiliser page par page la fonction redirection_301_si_besoin() qui renseigne la "bonne" URL, je me suis dit que c'était possible de gérer ça une bonne fois pour toute. Et donc, quelques expressions réguliÚres plus loin, voilà le résultat.

Incluez ces quelques lignes tout en haut du fichier-que-vous-incluez-partout (celui présent dans tout petit site perso développé à la mimine en php...), et pouf pouf, à vous les jolies URL !

[1] Pour le jour où je ne fais plus de php, mes URI resteront cool, et puis parce que c'est beau (sisi, je vous assure)

dimanche, avril 23 2006

Bah merde alors !

Ya plus rien ?

Bah non.

vendredi, septembre 23 2005

C++, c'est aussi pour ça qu'on t'aime

basic/BasStatMgr.cpp:116: error: no match for 'operator=' in 'itrAName = (((std::map<KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator, std::less<KIT::BasStatMgr::Category>, std::allocator<std::pair<const KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator> > >*)(&itrByName)->std::_Rb_tree_iterator<_Tp>::operator-> [with _Tp = std::pair<const std::string, std::map<KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator, std::less<KIT::BasStatMgr::Category>, std::allocator<std::pair<const KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator> > > >]()) + 8u)->std::map<_Key, _Tp, _Compare, _Alloc>::insert [with _Key = KIT::BasStatMgr::Category, _Tp = KIT::BasStatMgr::Indicator, _Compare = std::less<KIT::BasStatMgr::Category>, _Alloc = std::allocator<std::pair<const KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator> >](((const std::pair<const KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator>&)((const std::pair<const KIT::BasStatMgr::Category, KIT::BasStatMgr::Indicator>*)(&aName_value_type(((const KIT::BasStatMgr::Category&)(+(&itrCat)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const KIT::BasStatMgr::Category*, _Container = std::vector<KIT::BasStatMgr::Category, std::allocator<KIT::BasStatMgr::Category> >]())), ((const KIT::BasStatMgr::Indicator&)((const KIT::BasStatMgr::Indicator*)(&Indicator(((const std::string&)(+(&itrName)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const std::string*, _Container = std::vector<std::string, std::allocator<std::string> >]())), (&itrCat)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const KIT::BasStatMgr::Category*, _Container = std::vector<KIT::BasStatMgr::Category, std::allocator<KIT::BasStatMgr::Category> >](), 1, (&itrTotal)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const AMD_Double*, _Container = std::vector<AMD_Double, std::allocator<AMD_Double> >](), (&itrTotal)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const AMD_Double*, _Container = std::vector<AMD_Double, std::allocator<AMD_Double> >](), (&itrTotal)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = const AMD_Double*, _Container = std::vector<AMD_Double, std::allocator<AMD_Double> >]())))))))))'

vendredi, septembre 3 2004

Michel Farinet

Ca fait quelque temps que je l'ai découvert, mais aujourd'hui je vous fait partager ce grand bonheur : Michel Farinet, grand nom de la chanson française (13 lettres au moins, 14 caractÚres en comptant l'espace).

Lire la suite...

lundi, juin 28 2004

Polard de tous les pays, unissez-vous!

Je rédécouvre avec joie les fonds d'écran de la po-liste. Petite explication pour les gens hors-Ensimag : un polard, c'est, pour simplifier, un geek. Mais un geek qui passe son temps en salle Tx (les salles informatique de l'Ensimag), en particulier lors du projet compil, le gros projet de 2ème année pendant lequel on passe un mois à faire un compilateur. La version gAm3rZ joue à Xblast, mais c'est un courant qui est rejeté par les polards de race, les Vrais, ceux qui ont la peau plus blanche que si elle avait été lavée avec le nouvel Omo (même en faisant le nœud). Et la po-liste, c'est la liste (virtuelle, ça va de soi) des polards pour l'élection du cerlce des élèves de l'Ensimag, qui a eu pour principale (et unique) action d'inonder les tx de ses jolis fonds d'écran, réalisés par l'incomparable, l'inégalé, le grand R.

À part ça, allez donc voir les vidéos de Steve Ballmer, et en particulier la compil « developers », et régalez-vous de délicieuses annaglossologiques. Florilège :

Cacophéronomisme caprin
Puer le bouc
Capillarisme épiglottal
Avoir un cheveu sur la langue
Endochiropilosité
Avoir un poil dans la main
Foin de mercantilisme ursino-dermique ante mortem
Ne pas vendre la peau de l'ours avant de l'avoir tué
paléocomporcinomaternage (Foin de -)
On n'a pas gardé les cochons ensemble
Testiculaurifaction
Se faire des couilles en or