Live geek or die tryin'

Protect Email Addresses From Spam Crawlers

Hi,

When displaying a raw email address on a Web page, this address is vulnerable and can be used by spam crawlers, email harvester, or whatever you want to call them to send you spam and such crap. That’s why people write their email address this way “samy at dindane dot com”, or “samy[@]dindane[.]com”. This writing is simple and efficient, but not pretty.

There are many ways to show an email address in its original format and still make it bots-proof. One of these ways is using JavaScript to obfuscate and then show the address. But I think that using JS is overdoing things, since it can be done using basic HTML, simply by printing the email address as ASCII and not raw characters.

These are the steps to follow using PHP:

Split the email address into an array of characters

$aEmail = str_split($email);

Convert each character into an ASCII one:

$strEmail = '';
foreach ($aEmail as $char) {
    $strEmail .= ord($char);
}

Display it (O RLY?):

echo "<a href='$strEmail'>$strEmail</a>";

The result is a beautiful and clickable email address. :)

Note: If you are using Twig as a template engine, you have to use the raw() filter in order to tell Twig to interpret the string and not to display raw ASCII characters: strEmail|raw

I hope this tutorial has been helpful.
Bye!

English Motherfucker, Do You Speak It?!

Hi there!

It has been a while since I started thinking about writing in English, but I neither had the time nor had I the strength to do it, especially that I wanted to write not only in English but also in French.
Now I realized that writing in both languages isn’t worth it since developers understand English. Besides it will take me less time to write in one language rather than two.

I made this decision mainly to reach more people: more people -> more interaction/feedback -> more knowledge.

So from now on, all my technical posts will be written in English.

Engligh Motherfucker, do you speak it?

Happy reading. :)

Symfony2: “Render” Helper for Calling an Action From a View

I discovered some days ago a secret Symfony 2’s helper. I call it secret because I can’t find it anywhere on the documentation.
Edit: Here it is on the Symfony2 book: Embedding Controllers

{% render %} is used to show an action’s response in a Twig template. It’s very useful when wanting to show a dynamic content in all the app’s pages.

Example: Displaying online users’ counter

Create a onlineUsersAction() function

That function fetches, processes the result and returns the counter of the online users.

Create a Twig template that displays the response returned by the action

The syntax is the following:

  {% render "LiveGeekBundle:Default:onlineUsers" %}

Knowing that onlineUsersAction() is an action of DefaultController which is a controller from the Live\GeekBundle bundle.

Include that template in our application’s default layout

Thus display the online users’ counter in all the app’s pages.

Passing arguments:

You can pass arguments to the action this way:

In the Twig template:

{% render "LiveGeekBundle:Default:onlineUsers" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}

In the controller:

helloAction($arg1, $arg2)

The arguments’ order doesn’t matter.

Enjoy. ;)

Symfony2: Le Helper Render Pour Appeller Une Action Depuis Une Vue Twig

Aujourd’hui j’ai découvert un helper secret de Symfony2. Secret parce que je ne le retrouve nulle part sur la doc.
Edit: On en parle sur la doc Symfony2: Embedding Controllers

{% render %} sert à afficher la réponse d’une action dans un template Twig. C’est surtout utile quand on veut afficher du contenu dynamique dans toutes les pages de notre application.

Exemple d’utilisation: Afficher le nombre des utilisateurs connectés.

Créer une action onlineUsersAction()

Cette fonction récupérera les utilisateurs et calculera leur nombre.

Créer un template Twig qui affiche la réponse retournée par l’action. La syntaxe est la suivante:

{% render "LiveGeekBundle:Default:onlineUsers" %}

Sachant que onlineUsersAction() est une action de DefaultController qui est lui même un contrôleur du bundle Live\GeekBundle.

Inclure ce template dans le layout de l’appli

Et ainsi afficher le nombre des utilisateurs connectés dans toutes mes pages.

Passer des arguments:

Vous pouvez passer des arguments à l’action de cette manière:

Dans le template Twig:

{% render "LiveGeekBundle:Default:onlineUsers" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}

Dans le contrôleur:

helloAction($arg1, $arg2)

L’ordre des arguments ne compte pas.

Enjoy. ;)

Symfony2: Erreur Inconnue en Environnement De Production

Ce billet est une note pour ceux qui tomberaient un jour dans ce genre de situations.

J’ai créé un contrôleur qui me renvoie la réponse attendue lorsque je suis en environnement de dev (site/app_dev.php/foo/bar), mais j’ai une page blanche en prod (site/foo/bar).
Rien dans le fichier de logs (/logs/prod.log), même pas une nouvelle ligne quand j’accède à la page.

Ne sachant plus quoi faire, je décide de nettoyer le cache de prod, et c’est justement ce dernier qui m’indique la source de mon problème. J’avais en effet changé le nom d’un Entity Manager, et j’ai oublié de mettre à jour quelques lignes dans app/config/config_prod.yml.
Celle-ci n’est évidemment pas l’unique raison possible, mais nous montre qu’une erreur peut survenir de n’importe où, que Symfony 2 ne nous montre pas toujours les erreurs, et qu’un nettoyage du cache peut le faire à sa place.

Morale du jour: un php app/console cache:clear --env="prod" après des heures de travail ne fait de mal à personne! :)