The 2006-05-17 at 17:43 by Loïc d'Anterroches filed under News.
Si vous commencez à bidouiller pour avoir accès à certaines informations à certains endroits dans votre code et que cela commence à ne pas être joli, alors stop. C’est le moment de revoir la structure du code et de la faire évoluer.
The 2006-05-16 at 14:46 by Loïc d'Anterroches filed under News.
Finalement j’ai pris le temps de mettre la documentation de Pluf en ligne. Si le site est un peu lent, c’est normal, je n’ai pas encore coder de class de mise en cache et donc chaque page de la documentation correspond à une compilation complète du code wiki. En effet, j’écris la documentation en Wiki. Avec cette documentation et une application exemple fonctionnelle, vous devriez avoir de quoi vous amuser.
The 2006-05-14 at 14:15 by Loïc d'Anterroches filed under News.
Plume CMS vient d’être présenté dans The Hackademy Prog de mai/juin. L’article tiend une double page et est agréablement écrit. Il est bien représentatif et je n’y trouve pas grand chose à redire. En fait, j’ai l’impression que l’auteur a bien installé et utilisé le logiciel avant de faire son article. Je ne peux pas me rendre compte pour les autres logiciels, mais si c’est la même chose, vous avez un aperçu rapide mais de qualité de 7 CMS libres, idéal pour votre trajet dans le métro.
The 2006-05-13 at 09:50 by Loïc d'Anterroches filed under News.
Oui, il faut que je prenne le temps d’apprendre la base de Lisp. Je passe une grande partie de mon temps dans Emacs et je commence à trouver des limites à mes bidouilles intuitives. Pouvoir automatiser des actions depuis mon éditeur favori serait bien pratique. Pour le moment je peux très facilement appeler un script externe, mais la puissance d’Emacs pourrait me permettre de faire mieux et plus simplement.
The 2006-05-09 at 20:32 by Loïc d'Anterroches filed under News.
Un travail bien ennuyant est la validation des pages produites par une application dynamique. Comment faites-vous pour vous assurer que les pages résultats d’un formulaire sont valides ? Vous pouvez utiliser une extension pour Firefox et soumettre le source à un service de validation en ligne. Vous pouvez aussi copier le source dans un fichier texte et faire passer Tidy dessus.
Une autre solution:
C’est ce que fait ce middleware pour Pluf.
Pour valider toutes vos pages automatiquement, dans la configuration de votre application, ajoutez Pluf_Middleware_Tidy à la liste des middleware. Installez tidy (par exemple sudo apt-get install tidy). Et voilà ! Vous aurez un log général des requêtes produisant des erreurs et des fichiers individuels pour chaque requête contenant des erreurs dans le répertoire temporaire.
The 2006-05-09 at 07:26 by Loïc d'Anterroches filed under News.
Je viens de faire tourner les tests unitaires de Pluf sur une Ubuntu Breezy, les versions minimales sont donc :
Je pense que MySQL doit pouvoir être utilisé dans des versions plus anciennes, l’important étant le support des versions d’avant la série des 4.1, en effet la 4.1 introduit un support à peu près correct de l’utf-8. Les tests unitaires sont bons pour la santé de vos programmes !
The 2006-05-01 at 12:27 by Loïc d'Anterroches filed under News.
Je crois que je vais finir par parler un peu de politique, ou tout du moins, réagir sur certains articles de la presse. Par contre, cela ne sera pas ici, car ici c’est de téchnologie que je parle.
Et la téchno du jour, c’est le chargement à la demande de modules en PHP. Je vous invite à regarder le bout de code extrait d’ici.
class Pluf
{
/**
* Returns a given object.
*
* Loads automatically the corresponding class file if needed.
* If impossible to get the class $model, exception is thrown.
*
* @param string Model to load.
* @param mixed Extra parameters for the constructor of the model.
*/
public static function factory($model, $params=null)
{
Pluf::loadClass($model);
if ($params != null) {
return new $model($params);
}
return new $model();
}
/**
* Load a class depending on its name.
*
* Through an exception if not possible to load the class.
*
* @param string Class to load.
*/
public static function loadClass($class)
{
if (class_exists($class, false)) {
return;
}
$file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
if (Pluf::fileExists($file)) {
include_once $file;
}
if (!class_exists($class, false)) {
throw new Exception('Impossible to load the class: '.$class);
}
}
}
Avec ce petit bout de code, vous pouvez charger le fichier d’une classe et l’utiliser à la demande. Ainsi on peut faire quelque chose comme :
$toto = Pluf::factory('My_Toto_Class', 'a parameter');
$toto->action();
On n’a pas besoin de faire un include du fichier de la classe My_Toto_Class avant de faire l’appel à Pluf::factory. Ce qui veut dire que vous pouvez charger en mémoire uniquement ce dont vous avez besoin dans votre script. Bonjour l’optimisation de votre code en quelques lignes.
The 2006-03-22 at 13:22 by Loïc d'Anterroches filed under News.
Voici encore un petit bout de code de la nouvelle infrastructure de Plume.
function addItem($request, $match)
{
$item = Px::factory('Todoitem');
$create_form = new CreateForm();
$create_form->defineFromModel($item);
$errors = array();
$new_data = array();
if ($request->method == 'POST') {
$new_data = $request->POST;
$errors = $create_form->getValidationErrors($request->POST);
if (empty($errors)) {
$item = $create_form->save($request->POST);
return new HttpResponseRedirect('/ok/');
}
}
$form_view = new FormRender($create_form, $new_data, $errors);
$c = new Context(array('form' => $form_view));
$t = new Template('add.tpl');
return new HttpResponse($t->render($c));
}
Comme vous pouvez le voir, c’est propre et inspiré de Django. Les petites choses à noter sont :
$item = Px::factory('Todoitem');$create_form->defineFromModel($item);Cela avance donc doucement mais sympatiquement.
The 2006-03-17 at 18:40 by Loïc d'Anterroches filed under News.
Il faut absolument qu’il puisse dire bonjour à tout le monde !
Voici donc pour vos yeux ébahis la première vue via l’infrastructure de base de la nouvelle version de Plume.
Pour les curieux, la navigateur utilisé n’est effectivement pas Firefox, c’est Epiphany un navigateur simple léger avec le moteur de rendu Gecko.
The 2006-03-15 at 19:03 by Loïc d'Anterroches filed under News.
Et oui, je suis en train de mettre en place la génération automatique du schéma des tables correspondant à un modèle. J’ai aussi amélioré le modèle. Maintenant on peut faire ça :
$m1 = new ManyToManyOne();
$m1->one = 'one is the best';
$m1->create();
$m2 = new ManyToManyTwo();
$m2->two = 'two is the best';
$m2->create();
$m1->setAssoc($m2);
$m3 = new ManyToManyTwo();
$m3->two = 'two bis is the best';
$m3->create();
$m1->setAssoc($m3);
$rel = $m1->get_two_list();
assert(2 == count($rel));
assert('two is the best' == $rel[0]->two);
assert('two bis is the best' == $rel[1]->two);
$rel = $m2->get_manytomanyone_list();
assert(1 == count($rel));
assert('one is the best' == $rel[0]->one);
$m1->delAssoc($m3);
$rel = $m1->get_two_list();
assert(1 == count($rel));
La gestion des relations plusieurs à plusieurs est en place. C’est un petit jeu sympa que de coder cela. Je suis un peu en retard par rapport à mon emploi du temps en ce qui concerne la création de mon gestionnaire de galerie, mais bon, la structure du système prend forme. Je m’inspire beaucoup de Django, une infrastructure en Python que j’utilise déjà pour mon carnet d’adresses en ligne (avec tag des adresses, export pdf, etc.) que je trouve très agréable à utiliser.
The 2006-03-11 at 22:21 by Loïc d'Anterroches filed under News.
Voici un petit bout de code pour présenter l’ORM que je développe en ce moment :
$model = new TestModel();
$model->title = 'title';
$model->description = 'A small desc ';
$model->create();
$m = new RelatedToTestModel();
$m->testmodel_id = $model->Id();
$m->dummy = 'stupid values';
$m->create();
$rel = $model->get_relatedtotestmodel_list();
if ('stupid values' == $rel[0]->dummy) echo('bingo');
Ici, vous avez deux modèles, dont un RelatedToTestModel qui est lié via une foreign key au modèle TestModel. Dans la définition de TestModel il est indiqué nulle part que ce deuxième modèle existe, pourtant la méthode get_relatedtotestmodel_list() est définie et utilisable ! Cela se fait automatiquement. PHP5 c’est bien.
The 2006-03-11 at 18:17 by Loïc d'Anterroches filed under News.
quand vous pouvez passer une journée les pieds dans la neige en bonne companie. Le temps était bien mauvais, de la neige, beaucoup de neige, mauvaise lumière et par moments besoin de marcher avec la neige jusqu’à mi-cuisse (quand les guêtres ne vont que sous le genou…). Super sympa dans tous les cas, surtout la pose chocolat chaud à la fin. Vivre dans une petite ville, au fin fond de l’Allemagne de l’Est, sous 2 m de neige, c’est sympa, très sympa. Il reste la nuit pour coder, avec de la bonne musique…
The 2006-03-10 at 20:21 by Loïc d'Anterroches filed under News.
On aime bien se moquer des messages d’erreur des applications sous Windows. Pour compenser un peu, voici un message d’erreur d’Evolution, mon client email sous Linux.
The 2006-03-08 at 10:28 by Loïc d'Anterroches filed under News.
Il y a des jours où je suis étonné. L’Allemagne commence à prendre conscience que ne pas avoir d’enfants n’est pas bon pour beaucoup de plus de raisons que premièrement pensé. Si vous lisez l’Allemand, vous avez un dossier intéressant du Spiegel cette semaine. Les logiciels libres sont basés sur la notion de partage et d’ouverture aux autres et comme l’Allemagne est très impliquée dans le domaine, le besoin de partage va peut-être ressortir là où on ne l’attendait pas.
Sur un autre sujet, je continue de travailler sur Plume, j’ai maintenant les bases d’un orm et je m’amuse bien. Je n’ai toujours pas de galerie photo, mais je ne doute pas que cela va venir.
The 2006-03-05 at 17:15 by Loïc d'Anterroches filed under News.
The 2006-03-01 at 15:59 by Loïc d'Anterroches filed under News.
Quand on fait la création d’un système de gestion d’un site web, on se trouve rapidement devant la question de la modification des gabarits des pages par l’utilisateur. Beaucoup de CMS. Je vous recommande la lecture de Template View, un article en Anglais qui fait une bonne présentation du sujet.
Maintenant, dans le cas de PHP, si vous voulez écrire votre système de gabarits/templates, je vous conseille de regarder cette classe de template. Elle est écrite par Laurent Jouanneau dans le cadre du projet Jelix. Cette classe est superbe car elle réutilise directement la puissance du tokenizer de PHP pour faire le travail. Joli code !
The 2006-02-27 at 08:22 by Loïc d'Anterroches filed under News.
Pour celles et ceux qui utilisent un licence sous licence GNU GPL pour la gestion de votre site web. Je vous rappelle que vous n’avez pas à annoncer que vous utilisez le dit logiciel. Par exemple, si vous utilisez le logiciel Plume CMS, vous n’avez pas à garder un lien sur la page d’accueil en direction du site de Plume CMS.
Vous êtes libres ! Libre de faire ce que vous voulez avec le logiciel, libre de mélanger n’importe quel code propriétaire avec. C’est uniquement dans le cas de la redistribution du logiciel que l’ensemble du logiciel doit être redistribué sous les termes de la licence GPL.
The 2006-02-17 at 09:08 by Loïc d'Anterroches filed under News.
J’ai pris l’habitude d’utiliser Emacs pour éditer mon code. Je peux me déplacer très rapidement dans du texte et faire rapidement son édition. Par contre, quand je me retrouve dans un textarea ou dans un autre éditeur de texte sous Gnome, je me retrouve un peu frustré. La solution est simple.
Ouvrez gconf-editor et changez la clef /desktop/gnome/interface/gtk_key_theme pour mettre Emacs à la place de Default.
The 2006-02-16 at 17:47 by Loïc d'Anterroches filed under News.
Si vous utilisez Plume, je vous recommande de télécharger la dernière version qui contient une correction de sécurité importante. Vous pouvez être sereins si votre installation de PHP est configuré sans register globals. Si vous devez faire une mise à jour, n’oubliez pas de mettre à jour tous les fichiers prepend.php dans les racines de vos sites webs.
register globals is evil!
The 2006-02-12 at 18:25 by Loïc d'Anterroches filed under News.
Certains d’entre vous savez que mon site utilise le logiciel Plume CMS pour fonctionner. C’est un logiciel vieux de quelques années maintenant. J’ai retrouvé les sources de la première série écrite en Perl, cela remonte à 1999. J’ai l’impression d’être un vieux quand je vois ça. Toujours est-il qu’un jour, j’ai décidé d’ouvrir ce projet en le publiant sous forme de logiciel libre, puis en janvier 2002, je passais à la vitesse supérieure en l’enregistrant comme un projet sur SourceForge.
Ensuite, la magie du web a fait venir du monde, certains sont fidèles, d’autres sont actifs pour quelques mois puis repartent. Quand on gère un projet comme cela, il faut donc être ouvert à tout le monde, tout en sachant que les gens peuvent ne dire que bonjour, regarder et partir ou rester un peu plus longtemps.
Pour moi, le grand plaisir d’un projet libre, plus que l’aboutissement en terme de code, est le partage et les échanges qu’il entraîne. Les gens rencontrés sont parfois insupportables, parfois super sympa, parfois très bon codeurs, parfois ils ne comprennent même pas la logique du if, then, else mais dans la grande majorité des cas, ces contacts m’apportent quelque chose.
C’est sympa, mais cela demande du temps, beaucoup de temps, cela demande aussi de la régularité. Les gens aiment voir un projet avancer régulièrement et les utilisateurs réguliers peuvent être au final très exigeants dans leur demandes. Ce n’est pas facile à gérer. Comme mon temps disponible pour la gestion du projet diminue, mais comme je souhaite garder ce projet actif (pour la simple et bonne raison que je souhaite bien pouvoir continuer de l’utiliser pour mon site web), j’ai commencé à rationaliser ma gestion du projet. Voici donc quelques points qui vadrouillent dans ma tête :
Au final, mon but aujourd’hui est de limiter le nombre de points d’accès à l’information pour le nouveau venu et pour ceux qui maintiennent l’information et minimiser le travail répétitif. La chose amusante est que le système de gestion de site web que je développe n’est pas vraiment adapté pour gérer les informations produites dans le développement de ce système. Bon, cela marche quand même bien pour les brèves et quelques pages de référence…