Configurer log4php selon l’environnement

logging  illustration
En anglais, log veut aussi dire tronc d’arbre ;o) (origine image :

L’importance de loguer les évènements d’une application qui tourne n’est plus à démontrer. Même si les pratiques observées chez beaucoup de développeurs PHP n’intègrent pas toujours un recours systématique à un logger, la diffusion des bonnes pratiques depuis d’autres écosystèmes (Java par exemple) et la maturité de certains frameworks (Symfony 2, Zend) tendent à rendre cette pratique beaucoup plus répandue, chose rendue d’autant plus aisée qu’il existe depuis quelques temps maintenant d’excellents frameworks de logging en PHP, notamment log4php, ou encore Monolog (utilisé par Symfony 2).

Continue Reading >>

Character encoding, character set … the essentials

memo illustration
All right, guilty, this may have little to do with character encoding … it has characters though! ;o)

Joel Spolsky, on his blog, considered it one of the minimal items of knowledge every developer should have. Having roamed the profession a bit, I know for a fact that this is not the case. So here is one unmissable opportunity to patch things up with this “all you need to know” compendium about character encoding.

Continue Reading >>

Architecture des applis web POJO

memo illustration

Il y a quelques années, lorsque j’ai commencé à développer des applications web en Java, nous étions au sein de mon entreprise déjà passés sur des architectures “lightweight” (ou “POJO”), plutôt qu’EJB (2; en ce qui concerne EJB3, plus récent, c’est une autre histoire).

Pour autant, beaucoup d’aspects du squelette d’appli web qui circulait à l’époque me laissaient insatisfait. Il y restait encore beaucoup de traces inutiles de l’ancienne philosophie EJB, et certaines considérations n’étaient pas ou peu envisagées (sécurité, accès concurrents, gestion des erreurs, architecture…)

Continue Reading >>

Obfuscating your email address to fight spammers


Spam is the scourge of the 21st century connected world. Shady harvesting companies use spambots and crawlers to scour the web looking for email addresses left “in the clear” by unsuspecting or candid website owners.
There are several ways to fight this, when, for one reason or the other, you have to communicate your email address on your website.
One way focuses on identifying these unwanted visitors and barring them from the site (by examining properties of the incoming request like user agent), the other (much stronger and subtler in my opinion) focuses on techniques to fool bots while leaving human readers unaffected.
In this article we’ll briefly summarize this second set of techniques.

Continue Reading >>

Memo Java

memo illustration

Quand on a une mauvaise mémoire, il est bon de noter les choses par écrit. Je ne sais pas si j’ai pire mémoire que la moyenne :-) mais j’ai pris l’habitude, autant que possible, de noter les  choses, celles que j’apprends, celles que j’utilise souvent sans jamais m’en rappeler les subtilités exactes, celles que je découvre “à la sueur de mes doigts” par la pratique, la recherche, etc. En effet, quoi de plus horripilant que de passer du temps à chercher de nouveau une info, une technique, un savoir que l’on a déjà croisé auparavant ?
Ainsi, ces documents que je me constitue au fur et à mesure permettent de remplir les fonctions suivantes :

  • Servir de référence  pour une utilisation régulière. Le document doit donc être pratique d’utilisation, facilement enrichissable, facilement consultable.
  • Pérenniser la connaissance, la “graver dans le marbre”, pour utilisation future : ne pas avoir à effectuer de nouveau des recherches similaires. Cela s’inscrit dans une démarche plus générale d’amélioration constante : capitaliser les acquis.
  • Présenter les problématiques sous un angle qui est le mien, avec mes mots, mes questionnements, ma manière de penser, ce qui accélère donc le “rechargement” de l’info.
  • Partager : ce type de démarche permet de bénéficier d’un support écrit qui peut être facilement partagé, diffusé, remodelé, au contraire de la connaissance impalpable et volatile de l’esprit.

Voici, par exemple, le “Memo Java”  (NB: en anglais) :

Memo-20-IT-00-Java.doc (environ 3 Mo)

Pour d’autres “mémos”, voir la section Memos.

Java – Maîtriser les exceptions

feature illustration

Parfois purement ignorées, souvent utilisées à mauvais escient, les exceptions restent une des fonctionnalités de Java les moins bien comprises. Le langage Java introduit, par rapport à ce qui était jusque là connu, le concept d’exceptions explicites (“checked”), qui obligent le développeur à les traiter concrètement, c’est-à-dire écrire du code, alors que jusque là les exceptions étaient implicites et transitaient “derrière le rideau”. Cette dichotomie, si elle récolte certaines critiques extérieures, ne semble susciter aucune dissension dans l’écosystème Java.

Continue Reading >>

Generating themed css stylesheets with Java

CSS has come a long way over the years but if you’re trying to build anything more than a static page you’ll still find it suffers many shortcomings.

For example, variables can’t be used. If you’re using one same colour in multiple rules, and wish to change it, you will have to edit all the rules, you can’t use a variable and just change its value.

Many tools have arisen to bridge these shortcomings. A simple web search will yield many references (look for “css framework”). A few examples among many: less, sass.

These tools are often a superset of CSS, providing the basic programmatic mechanisms that CSS lacks: variables, functions, inheritance etc.

However these tools -and CSS more so- come short when we start thinking of styling from a more global perspective, focusing on the global look and feel of the site and being oblivious to all the intricacies of tedious, low-level CSS rules. When we start Thinking in terms of “theme” rather than CSS property. A theme would be a set of visually coherent styling properties applied to content (either by the website programmer, or by the browsing user if the site is very dynamic). For example, a “liquid” theme could display rounded box edges, fancy fonts, and lively colours, whereas a “square” theme could exhibit square edges, straight fonts and darker shades. Working with themes would thus give the person “decorating” the website a level of abstraction from low-level, unrelated and meaningless CSS-rules. To achieve this we’ll need some sort of mechanism to bundle together sets of coherent, dependant CSS properties, into what will become the meaningful properties of our theme.

In this article, we’ll describe such a mechanism. The language chosen is Java, and the code is meant to be executed server-side, but the concept can easily be ported to PHP or Javascript, and also be executed client-side.

Continue Reading >>

Aligning code: tabs or spaces?

(adapted by EmacsWiki from an original comic strip by Steve Napierski – via Please let me know if I’m breaching any copyright.)

Most developers, it seems, fail to use spaces and tabs appropriately.

This is one of these basic computer science points, along with character encoding (see article) and a few others, that most developers simply fail to (or won’t) master. Sure, the potential implications of swapping a space for a tab are benign compared to messing strings up through wrongful encoding operations.

Use spaces and tabs interchangeably, blissfully ignoring their difference, and your code will most likely look like it written by Picasso himself when displayed on somebody else’s screen.

No, tabs are not “just for indenting”. They can also be used to align, provided an understanding of how they work. In this article we’ll dive into the appropriate use of tabs and spaces, and see it only takes a few very simple rules to ensure that your code always looks good wherever it is displayed.

Continue Reading >>

On my bookshelf

These are or have been my bedside -well, my desktop-side- books.

Effective Java


Author: Joshua Bloch
Publisher: Addison-Wesley
Year: 2008

A must-read by former Sun Microsystems engineer and design & implementation lead of numerous Java platform features, including the JDK 5.0 language enhancements and the Java Collections Framework.

Continue Reading >>

Hébergement free pages perso il est parti, il a tout compris ?

hosting free pages perso vs hebergeur dedie

Suite à une indisponibilité de plusieurs jours de mon site WordPress installé sur l’espace d’hébergement de Free (“pages perso”), indisponibilité à ce jour toujours non résolue, j’ai décidé de migrer vers un hébergement dédié payant.

Continue Reading >>