vendredi, 28 septembre 2007

La surjection, nouvelle maladie ?

La prochaine fois que vous allez chez le médecin, dites-lui que vous souffrez d'une surjection et que je avez besoin d'un injection pour retrouver un état stable de bijection...

lundi, 24 septembre 2007

Implémentation paresseuse du "Visitor pattern" en PHP

Sans m'étendre sur les bienfaits du Visitor pattern, dont le but est de séparer un algorithme de sa structure de données, je souhaite proposer ici une implémentation paresseuse mais possible en PHP.

En théorie ce pattern repose sur 2 interfaces qui permettent de faire un double dispatch (appeler depuis un objets visitable la fonction lui correspondant dans le visiteur) :

  • Visitable qui contient une fonction apply(Visitor $v)
  • Visitor qui contient une fonction visit(Visitable $v)
Puisqu'en PHP il n'est pas possible de faire de la surcharge de paramètres de fonction (polymorphisme), il faut donc appeler les fonctions différemment selon les types de structure de données.

En Java :
interface Visitor {
void visit(Wheel wheel);
void visit(Engine engine);
void visit(Body body);
void visit(Car car);
}
abstract class Visitable {
void apply(Visitor visitor) {
visitor.apply(this);
}
}

En PHP :
interface Visitor {
public function visitWheel($wheel);
public function visitEngine($engine);
public function visitBody($body);
public function visitCar($car);
}
interface Visitable {
public function apply(Visitor $visitor);
}

On remarque donc qu'en PHP on devra réécrire toutes les fonctions apply pour qu'elles appellent la fonction visit___ correspondant à leur type.
Mais paresseux comme je suis, la redéfinition de la fonction apply pour chaque visitable me parait un tâche trop répétitive et ennuyeuse. L'idée sous-jacente est de faire un dispatch dynamique en fonction du type du visitable, de la façon suivante :
abstract class Visitable {
public function visit(Visitable $visitable)
{
$func = array(&$this, 'visit' . get_class($visitable));
if (!is_callable($func)) {
trigger_error('[' . get_class($this) . '] Class ' . get_class($this) . ' has no visit' . get_class($visitable) . ' function', E_USER_ERROR);
}
call_user_func($func, $visitable);
}
}

Ainsi le visiteur devrait implémenter les fonctions standards visitWheel, visitEngine, ... mais leur dispatching devient automatique !

Mis à part la lourdeur de la fonction call_user_func, le reste de cette implémentation dynamique reste intéressante.

Références :
http://en.wikipedia.org/wiki/Visitor_pattern
http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading

Plus d'information pour les intéressés :
http://www.polyglotinc.com/reflection.html
http://www.javaworld.com/javaworld/javatips/jw-javatip98.html

mardi, 18 septembre 2007

Offre d'emploi : customer care

Ma petite startup, leader en suisse romande sur le marché des logiciels immobiliers, recherche un nouveau collaborateur afin d'assurer le support technique et la formation de ses nombreux clients.

Plus concrètement, le poste consisterait à répondre par téléphone/email aux questions techniques et d'assurer la formation des nouveaux clients sur les logiciels.

Le profile recherché est le suivant :

  • Langue maternelle française, bon niveau en allemand un plus
  • Excellentes capacités en communication, autant orales qu'écrites
  • Bonne capacité à comprendre et résoudre les problèmes
  • Capacité de travailler sur plusieurs tâches en parallèle
  • Bonne compréhension de l'architecture client-serveur
Les postulations peuvent être directement adressées à info _A_T_ migtechnology _P_O_I_N_T_ ch.

dimanche, 16 septembre 2007

Algue? piézo-phosphorescente

Mercredi 12 septembre 2007, tard le soir, plage de Vieux-boucaux dans les Landes française.

Nous étions alors en vacances entre amis. Une soirée des plus tranquilles, avec comme il se doit un passage sur la plage pour boire quelque breuvage local. Cadre peu crédible pour la suite de l'histoire si nous n'avions pas été 9 à être témoin du phénomène que nous avons découvert ce soir-là.

C'est en s'approchant de l'océan qu'on aperçut des points lumineux autour de nos pas. Des points d'une légère lumière bleutée s'illuminaient à chaque pression de nos pieds sur le sol dans un rayon d'une vingtaine de centimètres, avant de disparaitre 3 secondes plus tard.
Phénomène qui nous a émerveillé une bonne partie de la soirée, mais qui reste un mystère pour nos esprits curieux...

Une hypothèse d'une algue ou d'un organisme piézo-phosphorescent est de mise, car les points de couleurs apparaissaient dans une zone semblable à la zone de compression imposée par nos pas...

Mais les hypothèses les plus folles ont été imaginées sous cette nuit claire et chargée d'étoiles filantes.