Gerald's Blog

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

mercredi 7 mai 2008

En vrac...

Décidément, le temps file trop vite et même le simple fait de poster un billet sur mon blog est trop couteux dans mon planning, je cède donc à la mode du "vrac" histoire de donner des nouvelles.

  • Pour la première fois de l'histoire, je me suis déjà occupé de mes impôts en ligne, à peine deux jours après l'ouverture du site (habituellement, c'est plutôt vers les minuits du dernier jour).
  • Copix 3.0.3 est sorti, le travail sur ce framework n'arrête pas et il reste pourtant des centaines de choses à faire, sur des idées qui n'arrêtent pas de fuser dans la tête des utilisateurs et développeurs.
  • J'avais grandement besoin de vacances (des vraies ou la seule occupation de la journée planifiée est..... rien). Cette semaine et demie du mois de mai, avec quelques ponts bien placés, fut l'occasion idéale. De quoi repartir du bon pied lundi prochain.
  • Nous serons présents aux RMLL pour promouvoir Copix et nous moquer de regarder objectivement ce qu'est devenu Jelix. J'avoue que j'ai hâte d'être à cet évènement, tant pour présenter notre travail que pour discuter des autres projets.
  • La première conférence de l'AFUP à Lyon fut un franc succès à réitérer. Grand merci à Brice pour son implication dans l'organisation de cet évènement avec Damien (et sa légendaire implication dans l'écosystème PHP).
  • Promis Laurent, même si je compte bien assister à ta Presentation / Atelier Jelix, je resterais très sage et ne mettrais pas mon T-Shirt Copix (tout du moins durant l'atelier.... ça m'embêterais de montrer si clairement que c'est bien le notre de T Shirt qui est plus joli ;-)). Je garderais l'ensemble de mes remarques pour le "off", entre convaincus :-)
  • Un énorme merci à toute l'équipe Copix (qui compte maintenant plus d'une dizaine de développeurs) de garder le rythme en mon absence ! Un grand merci également à nos fans, utilisateurs, nouveaux venus, rédacteurs de tutoriels, qui participent à l'aventure.

Sur ce, il est temps pour moi de retourner a mes occupations (ne rien faire) pour les quelques jours qui me restent. Le travail a accomplir dès lundi sera des plus passionnant, autant être en forme !

vendredi 21 mars 2008

Interfaces & Classes abstraites (suite)

Dans un précédent billet, je parlais de mes malheurs avec PHP lorsqu'il était question de manipuler des interfaces couplées avec des classes abstraites.

Voici que Julien, alors qu'il travaille sur validateurs (une nouveauté de Copix 3.1), viens de trouver la bonne façon de procéder pour marier nos amoureux.

Ce qu'il ne faut pas faire (1)

interface IClasse {
       public function show ();
}
abstract class AClasse {
       abstract public function show ();
}
class AClasseConcrete extends AClasse implements IClass {
       public function show (){
               echo "Everything is ok";
       }
}
$classe = new AClasseConcrete ();
$classe->show ();

Donne le message d'erreur

Fatal error: Can't inherit abstract function IClasse::show() (previously declared abstract in AClasse) in  
/home/geraldc/workspace/Copix_3/www/syntax_playground.php

Ce qu'il ne faut pas faire (2)

interface IClasse {
       public function show ();
}
abstract class AClasse implements IClasse {
       abstract public function show ();
}
class AClasseConcrete extends AClasse {
       public function show (){
               echo "Everything is ok";
       }
}
$classe = new AClasseConcrete ();
$classe->show ();

Donne le message d'erreur

Fatal error: Can't inherit abstract function IClasse::show() (previously declared abstract in AClasse) in
in /home/geraldc/workspace/Copix_3/www/syntax_playground.php

Ce qu'il faut faire (enfin !)

interface IClasse {
       public function show ();
}
abstract class AClasse implements IClasse {
  //Ne PAS déclarer la méthode show de l'interface, même abstraite
}
class AClasseConcrete extends AClasse {
       public function show (){
               echo "Everything is ok";
       }
}
$classe = new AClasseConcrete ();
$classe->show ();

Et la, tout fonctionne !

Ne pas ajouter la définition de l'ensemble des méthodes de l'interface..... il fallait y penser :-)

Bon, il va falloir que je refasse un tour dans les sources de Copix pour remédier aux workaround que j'employais jusqu'alors.

mercredi 19 mars 2008

Spams je vous hais !

Spam je vous hais...... vous me faites passer à coté de nombres de messages importants.... comme cette superbe contribution à Copix que j'ai faillit manquer.

En effet, un énorme merci à Fabien Leroux qui a consolidé l'ensemble des pages de documentation de Copix 3 depuis le wiki en PDF.

Le résutat de ses travaux (294 pages quand même) est disponible en téléchargement.

Cette contribution sera surement utile a de nombreux utilisateurs qui nous demandent souvent un tel document.

De notre coté, ces travaux nous ont motivé pour combler les derniers manques sur tous les secrets de Copix !

mercredi 20 février 2008

window.open ouvre-toi !

Lorsque nous manipulons le javascript, les problèmes de compatibilité navigateurs sont légions, d'autant plus lorsque le code manipule des objets complexes et font appels aux propriétés diverses de ces derniers.

Voici un exemple de code atrocement complexe ou l'on comprend aisément pourquoi il fonctionne sous Firefox, mais pas sous IE :

window.open (url, 'aide-utilisateur');

L'erreur que donne IE est simple : "Argument non valide"

La solution est triviale.... et réside dans la présence du tiret (-) dans le titre de la fenêtre.

Note d'Arnaud qui s'est confronté au problème (âmes sensibles s'abstenir) :

De toute façon, le javascript c'est pour les *** 
on a pas besoin d'interfaces graphiques et je **** sur ****

vendredi 1 février 2008

Procrastiner, c'est mal !

Encore un mot pour faire le malin dans une soirée arrosée ;-)

"procrastiner" du latin "procrastinare" signifie "remettre au lendemain".

Un peu d'éthymologie : cras (demain) crastinus (qui concerne le lendemain)

A noter également la procrastination du latin procrastinatio (ajournement, délai) qui représente la tendance à tout remettre au lendemain !

jeudi 10 janvier 2008

Lazy Loading, PHP, SPL & ArrayAccess

Tout d'abord un peu de vocabulaire : Le Lazy Loading est un Design Pattern visant à initialiser des éléments "à la demande".

Le must est bien évidemment lorsque votre code client n'a pas conscience de ce mécanisme et qu'il se sert des données comme si elles étaient dores et déjà complètement disponibles.

PHP, avec ses méthodes magiques à n'en plus finir, dispose de tout un tas d'outils pour rendre la chose possible.

La SPL (méconnue des développeurs PHP malgrés son potentiel exceptionnel) est une bibliothèque disponible depuis PHP 5 permettant entre autres de rendre vos objets accessibles et manipulables de différentes façons, y compris via les mots clefs "standards".

ArrayAccess est dans ce cadre une interface permettant à vos objets d'être manipulés comme s'ils étaient des tableaux.

Voyons donc, dans un cas d'école, comment nous pouvons tirer partie de ces éléments techniques pour faire du Lazy Loading.

Lire la suite...

mercredi 9 janvier 2008

Colle du jour : variable statique & session

Considérez la classe PHP suivante :

class Exemple {
   public static $vars = 'valeur de classe';
   function __construct (){
      self::$vars = 'construction effectuée';
   }
   function showVars (){
      echo "<br /> Contenu de $vars"
      print_r (self::$vars);
   }
}

Considérez les deux pages PHP suivantes :

//page1.php
include ('exemple.class.php');//inclusion de la classe exemple
session_start ();
$_SESSION['exemple'] = new Exemple ();
header ('location: page2.php');
//page2.php
include ('exemple.class.php');//inclusion de la classe exemple
session_start ();
$_SESSION['exemple']->showVars ();

Question évidente, que va afficher showVars ? 1) Construction effectuée ou 2) Valeur de classe ?

Lire la suite...

lundi 7 janvier 2008

Colle du jour, la boucle "for"

Une petite colle pour commencer la semaine : qu'affiche le code PHP suivant ?

class TestBoucleFor {
	/**
	 * Le nombre de passages dans la boucle
	 */
	static $passageCount = 0;
	/**
	 * Fonction de test
	 */
	function doTest (){
		$monTableau = array (0, 1, 2, 3);
		for ($i=0; $i < count ($monTableau); $i++){
			$monTableau[4] = 1;
			self::$passageCount++;
		}
		echo "Passages dans la boucle : ", 
		 		 self::$passageCount;
	}
 }
 $test = new TestBoucleFor ();
 $test->doTest ();

Alors ? 4 ou 5 ? En gros la question est : "est-ce que le count ($monTableau) est réévalué à chaque passage ?

Lire la suite...

vendredi 4 janvier 2008

Citation au chocolat

Les fêtes sont terminées, mais heureusement certaines de leurs vestiges sont encore là comme les papillotes et les citations qui les accompagnent.

En voici une avec laquelle j'adhère assez, livrée à vous sans plus d'emballage :

Le retour à la norme me parait plus inquiétant que la folie.

Claude Chabrol

$version == 4 ? ++$version : $version;

PHP 4 n'est plus, et comme dirait ma "8 Ball", le sort en est jeté.

J'avoue avoir difficilement franchit le pas de la migration PHP5, pour de simples raisons de maintenance. Toutefois, cela fait maintenant bientôt 2 ans que je développe exclusivement avec la version 5, et j'avoue ne jamais regretter ces évolutions.

Si on devait faire une rétrospective, soyons clair, la grosse nouveauté de PHP 5 pour moi ne fut pas le modèle objet (il a toujours été possible de faire de l'objet en PHP4 avec les bonnes conventions), mais un ensemble de petits riens....

  • les appels imbriqués ($obj->getElement ()->getAutreElement ()) qui nous évitent de passer par des variables intermédiaires.
  • l'autoload qui évite les include / require fastidieux
  • les exceptions (ENFIN !!! qui pour moi étaient LA grosse nouveauté)
  • les variables de classe statiques
  • les Iterateurs
  • PDO (même si mon avis reste finalement assez mitigé sur certains points)
  • .... et finalement c'est agréable de spécifier complètement son code avec de jolis mots clefs :-)

Au même titre que vous migrerez vers PHP 5, n'oubliez pas de migrer votre version de Copix !

Lire la suite...

- page 1 de 10