Slides à propos des Linked Data et des API REST Hypermedia avec Symfony

Hier j’ai présenté certains de mes travaux autour des Linked Data et de Symfony au sfPot de Lille. Voici la présentation que j’ai projetée : voir les slides en plein écran.

sfPot à Lille sur Docker et le web sémantique avec Symfony

Alexandre Salomé (SensioLabs) et moi (Les-Tilleuls.coop) animeront un nouvel apéro Symfony à Lille le 15 janvier.

Au programmes deux talks :

  • L’un sur le web de données avec Symfony ou seront évoqués les APIs REST, l’hypermedia, Schema.org, PHP Schema et HydraBundle.
  • L’autre sur Docker ou l’on parlera… de Docker !

Tout cela arrosé de bières belges.

Rendez-vous le 15 janvier à 19h au Bar Braz rue Doudain à Lille.

Sfpot 15 janvier

Using SocialShare with WordPress to create custom social networks buttons

2013/02/14: Take care of the smarter caching system introduced in version 0.2.0.

Here is how to use the SocialShare PHP library to create custom Facebook, Twitter and Google Plus share buttons including the number of share.

The SocialShare library

Installing the library

The first step is to install SocialShare through the awesome Composer dependency manager. If you have not installed composer already, grab it!

In your custom WordPress themes directory (something like wp-content/themes/<mytheme-name>/), run the following command to get a copy of the library:

php /path/to/composer.phar require dunglas/php-socialshare:~0.1

Two Composer related files are created: composer.json and composer.lock. They contain the list dependencies of our project (only SocialShare for now). The code of SocialShare and Doctrine Cache (a dependecy of SocialShare) have been downloaded in the vendor/ directory.

Initializing SocialShare and creating helper functions

Put the following code in your theme’s functions.php file:

It loads the library through the Composer autoloading system, initializes a file based cache system (be sure to set a directory writable by your web server)  and loads Facebook, Twitter and Google Plus providers.

If you want to use other social networks such as Pinterest (bundled with SocialShare) or the newly supported LinkedIn, register them here.

Then, we create two helper functions to use in our theme’s templates: social_share_links that returns a share link and social_share_shares that returns the share counter. The last parameter of \SocialShare\SocialShare::getShares() function is set to true. This allows to delay the retrieving of share counts from social network when the \SocialShare\SocialShare::update() method will be called. If a value is already in the cache (how old it is doesn’t matter) it will be used, otherwise 0 will be returned.

Finally, we register the call to the update method on the WordPress’ shutdown hook. Thanks to this tweak, HTTP requests retrieving shares counts from social networks will be issued after the page load. Of course, only the next visitor will see updated counts, but this allows fast pages loading even in the worst case: when the data must be updated from social networks servers.

A last trick: if WordPress is served through PHP FPM (the most performant solution for PHP websites), we take care of the fastcgi_finish_request method. This method (only available when using PHP FPM) allows flushing the buffer and closing the connection to the client before retrieving data from social networks. By default, WordPress flush the response buffer but does not close the connection, even on FPM.

I’ve submitted a patch upstream using this trick to increase performance of all WordPress installations on PHP FPM, so I hope that the last lines of code will become unnecessary soon!

Using the helpers

You can now use the registered helpers in any template. Here is an example to put inside The WordPress Loop (e.g. content.php) to display a link to share the post and it’s number of share on Twitter, Facebook and Google Plus:

Customize the apparence of your social buttons with all the CSS you want!

Introducing the SocialShare PHP library

I’ve released a new PHP library allowing to retrieve the number of shares of URLs on popular social networks. It currently supports Facebook, Twitter, Google Plus / Plus One, Pinterest, LinkedIn and Scoop.it!. This library is also able to generate sharing links for these networks.

The main advantages of this library over traditional JavaScript share buttons are:

  • Speed: counts are retrieved server-side and can be cached through a lot of backends including Memcache, MongoDB and Redis; no JavaScript SDK loading; no HTTP request from your visitor’s browser to social networks
  • Privacy: therefore, no data from your visitors is send to social networks, their privacy is respected
  • Customization: there is no need to use official social networks buttons, you can create beautiful custom buttons displaying the number of shares

This library is installable with Composer, is fully tested with phpSpec, gets a platinum medal on the SensioLabs Insight monitoring system and is compatible with HHVM.

As usual, download it and learn how to use it on GitHub.

Workshop sur le référencement mardi 16 juillet à Lille

Workshop référencement Co-Factory

Mardi prochain, j’animerais un workshop traitant du référencement pour le centre de formation lillois Co-Factory. Ce workshop est destiné à tous ceux qui animent un site internet, un blog, une boutique en ligne… et qui souhaitent découvrir les bases du positionnement dans les moteurs de recherche. Il est destiné aux débutants complets, aucune connaissance préalable n’est nécessaire. Seuls les aspects généraux du référencement seront abordés (pas les aspects techniques plus avancés).

Réservation obligatoire auprès de David (son mail dans l’affiche).

Vous avez créer votre site internet et vous vous demandez comment faire en sorte qu’il soit plus visible ? Vous vous interrogez sur la pertinence de créer des liens avec d’autres sites internet ? Vous vous demandez comment rédiger vos textes pour qu’ils soient bien référencés ? Autant de questions qui seront abordées lors de ce workshop animé par Kévin Dunglas de la Coopérative des Tilleuls.

Diaporama diffusé lors du workshop sur le référencement avec HTML5

Voici le diaporama qui a servi de support au workshop sur le référencement avec HTML5 que j’ai animé jeudi 31 janvier pour La Coopérative des Tilleuls :

Ce sont le thème Prestashop HTML5 optimisé pour le référencement et l’implémentation de TodoMVC avec Symfony et Backbone.js qui ont servi de support.

Le prochain workshop de cette série sera justement dédié à la programmation JavaScript avancée avec Chaplin.js et Backbone.js. Il se déroulera début mars, toujours à Co-Factory.

Workshop HTML5

Workshop gratuit sur le référencement naturel avec HTML5 jeudi 31 janvier à Lille

Worskhop sur le référencement naturel avec HTML5

Jeudi prochain, j’animerais pour La Coopérative des Tilleuls, un atelier gratuit sur l’utilisation des propriétés sémantiques de HTML5 pour améliorer le référencement naturel des sites internet. C’est chez nos amis de Co-Factory que ça se passe (677 avenue de la République, Lille).

Au programme :

  • Introduction au référencement
  • Présentation des balises sémantiques de HTML5
  • Comprendre l’algorithme de « outline » HTML5 pour mettre en valeur l’information pertinente
  • Mettre en avant ses pages dans les moteurs de recherche avec les microdata, Schema.org et les extraits enrichis
  • Allez plus loin, jouer avec Javascript pour référencer des SPA (Single Page Application)

Ce workshop est gratuit et ouvert à tous mais il est impératif de réserver au préalable. Venez !

Un thème Prestashop HTML5 optimisé pour le référencement avec Rich Snippets

Exemple d'extrait enrichi (Rich Snippet) sur Google

Exemple d’extrait enrichi (Rich Snippet) sur Google

Mise à jour : ces fonctionnalités sont maintenant incluses dans le thème par défaut de Prestashop 1.6. Ce thème n’est donc plus maintenu.

J’ai contribué il y’à quelques temps déjà la migration vers HTML5 du thème par défaut de Prestashop, la plateforme e-commerce libre. En attendant l’inclusion de ce patch dans la version upstream je vous propose au téléchargement un thème autonome libre et gratuit compatible avec les versions 1.5 et supérieures de Prestashop.

Il s’agit donc du thème par défaut techniquement optimisé pour un meilleur référencement naturel, plus accessible aux personnes handicapées et avec le support automatique des extraits enrichis affichés dans Google (voir l’illustration plus haut).

Voici la liste détaillée des fonctionnalités ajoutées :

  • Microdata HTML5 Schema.org Offer, Product et Breadcrumb pour afficher des “extraits enrichis” (Rich Snippets) dans Google
  • Nouvelles balises sémantiques HTML5 header, nav, footer et article pour un meilleur référencement (support des anciens navigateurs via Modernizr)
  • Rôles ARIA mainnavigationsearchcomplementarycontentinfo et banner pour rendre le site plus accessible aux personnes souffrant de déficiences visuelles, auditives ou cognitives

Bien sûr cette template est complétement personnalisable, faites pour se charger vite et compatible avec le mode multiboutique et multilingue de Prestashop. C’est une base moderne pour personnaliser l’apparence de sa boutique sans négliger le référencement.

Elf Hostel où le référencement viral efficace

Cet été je me suis dans une auberge de jeunesse de Prague dénommée Elf Hostel dont la stratégie marketing est assez remarquable.

L’hôtel dispose d’un site au design d’un autre âge mais disponible dans de nombreuses langues. Sur ce site il est possible de réserver chambres et lits en ligne et de consulter quelques chaleureux reportages photos et vidéos. On y retrouve également les informations détaillées d’accès au lieu. Bref du très classique pour un hôtel, sans fioritures, juste ce qu’il faut.

Le réferencement naturel du site semble avoir était un peu travaillé (balises meta, titres des pages, …), sans grand succès apparent.

La ou leur démarche devient intéressante, c’est que l’équipe de l’hôtel a mis en place une page Facebook régulièrement mise à jour. A la fin de leur séjour, les clients sont invités à en devenir fan. L’appât : 5% de réduction lors des séjours suivants !

Grâce à ce petit stratagème environ 700 personnes sont “fans” de l’hôtel sur Facebook et les éléments publiés dans le mini-feed sont repris sur de nombreux profils via les commentaires et la fonction “j’aime ça”. Le marketing viral tourne à plein régime, les amis des anciens clients entendent parler en bien de l’hôtel, en découvrent l’ambiance rock’n’roll par ce biais et réservent plutôt la qu’ailleurs.

Encore mieux, ils encouragent les gens à écrire des revues sur les sites dédiés à ça, et la c’est plus de 200 avis qui ont étés rédigés. Les avis des consommateurs comptant pour une part importante dans le classement des résultats sur Google Maps, l’hôtel grimpe en seconde position sur ce dernier… Ces résultats géolocalisés sont repris sous forme de widget en tête de l’index principal de Google. Voilà notre hôtel deuxième sur Google.com avec la requete “Hostel Prague” !

Grâce à cette stratégie, sommes toutes simple à mettre en place, l’hôtel, profite d’une visibilité énorme. Même si la bière de 50cl vendue moins de 1€ et l’ambiance sympa doivent également y être pour quelque chose, il est bondé, et l’écrasante majorité des réservations proviennent du net.

Feedburner: Switching to Google account with MyBrand enabled

Since I’ve migrated my FeedBurner account to Google I encounter a lot of problems, especially with the MyBrand service. MyBrand is a service allowing to use custom domain names with FeedBurner. Instead of something like http://feeds.feedburner.com/lapin-blanc, your feed address become http://feeds.dunglas.fr/lapin-blanc. I’ve already explained why it’s better !

My subdomain for feeds was rss.dunglas.fr. There is no way to get this subdomain working since I’ve switched to Google accounts. I’ve followed the Tim Heuer’s tutorial but the message The domain “rss.dunglas.fr” you specified is already in use. is still displayed when I try to recreate my main custom URL in the MyBrand settings page. I’ve just managed to get my “backup” domain called feeds.dunglas.fr working.

So I’ve created this quick-and-dirty hack:

  1. Set a working MyBrand domain. For me: feeds.dunglas.fr.
  2. Point the DNS entry of your primary feeds domain on your web server. For me me: replace rss 10800 IN CNAME <my-login>.feedproxy.ghs.google.com. by rss 10800 IN CNAME www.
  3. Create a virtual host on your web server to redirect permanently the old addresses to the new one. For me (using Debian GNU/Linux):
    Create a file called /etc/apache2/sites-available/rss.dunglas.fr containing:

    Next type in a shell a2ensite rss.dunglas.fr && /etc/init.d/apache2 reload.
  4. Change all occurrences of your old feeds URL to the new in your site to reduce the number of HTTP requests.

Your burned feed must work without losing readers. This a temporary solution, and I think that the only useful long term solution is to go away from FeedBurner