Florian Galinier

Articles

Recherche agile

J'effectuais de début février à fin mars une étude bibliographique dans le cadre de mon stage recherche au LIRMM. Habitué à participer à des projets utilisant les méthodes agiles, j'ai décidé de tenter le coup cette fois-ci encore.

Difficile d'imaginer comment faire une étude bibliographique, autrement dit compulser des articles de différents domaines, de manière agile puisse être possible. Je suis revenu aux bases de l'agile et plus précisément à ses valeurs.

Pour rappel, les 4 valeurs agiles sont :

  • Les individus et leurs interactions plus que les processus et les outils ;

    La première valeur n'a pas vraiment été difficile à mettre en place. L'utilisation de Kanban m'a permis de progresser sans stress, tout en étant relativement efficace. J'ai travaillé seul, mais les échanges avec les collègues qui étaient également en étude bibliographique ont permis d'enrichir la discussion de part et d'autre.
    Par ailleurs, nous nous sommes corrigés et relus mutuellement, permettant une amélioration continue de nos rapports respectifs.

  • Des logiciels opérationnels plus qu’une documentation exhaustive ;

    Durant cette étude, pas de logiciels, mais un rapport à rendre au final. De façon assez similaire au développement logiciel, j'ai eu assez tôt une version de mon rapport qui se suffisait en elle-même. J'ai ensuite procédé itérativement, enrichissant mon rapport au fur à mesure des semaines.

  • La collaboration avec les clients plus que la négociation contractuelle ;

    Les personnes les plus proches du rôle de clients durant mon étude étaient mes encadrants. J'avais des réunions hebdomadaires, et un échange continu sur le contenu même de mon rapport et sur mes avancées.

  • L’adaptation au changement plus que le suivi d’un plan ;

    Ici aussi, l'utilisation de Kanban m'a permis de m'adapter régulièrement. Par ailleurs, je pense que c'est la valeur la plus intuitive dans la recherche scientifique ; en effet, la lecture de nouvelles méthodes oblige à s'adapter, tout en étant capable de remettre en question l'existant.

D'un point de vue strictement opérationnel, j'ai fait le choix d'utiliser un simple Kanban qui m'a permis d'être efficace tout en ayant une approche assez « zen » de mon travail.

Backlog au cours de l'étude Backlog à la fin de l'étude

Évolution du tableau au fur à mesure du temps (et en taille aussi).

Au final, la recherche agile, oui, c'est possible. Il faut juste sortir de ces mécanismes qui consistent à associer systématiquement l'agile aux méthodologies (l'agile ne se limite pas à SCRUM). Au final, la recherche se prête plutôt naturellement aux valeurs agiles, et je continue l'aventure durant le stage à proprement parlé.

Rencontre Montpellier C++

Aujourd'hui, pas de PHP, mais du C++.

Lancées en octobre 2014, les Rencontres Montpellier C++ ont lieu régulièrement et sont l'occasion de rencontre entre développeurs de tous niveaux.

Au programme :

  • un petit quizz pour se mettre en route ;
  • des présentations sur des points particuliers/nouveautés du langage ;
  • et pour finir, un apéro pour échanger librement !

J'ai déjà donné quelques présentations (une (petite) histoire du C++ et une introduction à la métaprogrammation), et j'ai remis le couvert lors de la rencontre de novembre en abordant quelques notions plus avancées de méta-programmation.

Si vous êtes développeur dans la région de Montpellier, je vous invite à suivre le groupe meetup et à nous rejoindre au cours de ces rencontres, que vous aimiez ou non C++, ce sont des occasions de rencontrer des personnes et d'apprendre des choses.

ORM et... template

Désormais, tous les articles sont stockés dans une base de données ! Ainsi, j'écris celui-ci directement sur le site, et non pas en dur comme précédement. J'ajouterai un système de commentaires par la suite.

ORM

Je me suis donc finalement décidé pour l'ORM. Ce concept est beaucoup plus complexe qu'il ne le laisse paraitre ; c'est vrai après tout, quand on fait le lien à la main entre PDO et les objets de notre modèle, ce n'est pas bien sorcier, mais quand on veut que tout ça soit un peu plus automatisé, ça devient de suite un peu plus compliqué.

J'ai organisé mon code en plusieurs classes principales : Connection, ORM et Object (ainsi que ManagedObject qui est un comportement particulier de Object) qui permettent, respectivement, de gérer la connexion à la base de donnée et de préparer les requêtes, d'effectuer les tâches de CRUD sur un Object en utilisant l'interface de Connection pour composer les requêtes, ainsi que Object elle même qui est la classe de base de tous les objets ayant une représentation dans la base de données.
Beaucoup des aspects que l'on retrouve ici auraient pu être bien plus facilement modélisé dans le méta-modèle (plus que dans le modèle lui-même), mais PHP ne permettant pas cela, je me suis contenté de la méta-programmation réflexive du langage.

Template... (encore !)

L'utilisation de l'ORM ainsi que l'utilisation massive des structures de mon langage de template (boucle et conditionnelle) ont mis en avant des lacunes dans ce dernier. J'ai donc dû le modifier.
En effet, je me suis rendu compte que certaines de mes structures ne fonctionnaient pas parfaitement et je suis donc passé de quelque chose qui était de la petite bidouille sur les regex à une véritable usine à gaz pour produire du code HTML.

Plutôt que de persister dans cette voie obscure, j'ai pris le parti de réécrire complétement un interprète de mon langage de template. Les règles grammaticales étant relativement peu nombreuses, cela représenté en définitive un moyen bien plus élégant et simple de produire du code HTML en sortie.
J'ai ainsi créé un analyseur lexical, qui produit des tokens (au nombre effrayant de... 9). Je souhaitais dans un premier temps faire un exécution à la volée du flux de token mais ai finalement opté pour un analyseur syntaxique qui me génère un AST, ce qui me permettra éventuellement dans le futur d'étendre plus facilement mon langage. L'interprétation se fait ensuite par un bête parcours en profondeur.

Framework et moteur de template

Même si en apparence le site a relativement peu changé, j'ai profité de ces quelques jours pour travailler sur le back-end.
En effet, mon petit framework commence à prendre forme. Vous avez peut-être remarqué que les différentes pages ont désormais une extension en .html et non plus en .php. En réalité, j'ai créé un système de routeur qui permet un URL Rewriting. Ainsi, pour la page index.html, les écritures index.php et index sont égalements acceptés, et on peut également remplacé index par home ou accueil.

Fonctionnement du routeur

Le fonctionnement est assez simple ; lorsque l'utilisateur tente d'accéder à une page, index.html par exemple, le serveur ne peut pas répondre favorablement, la page n'existant pas. Le fichier .htaccess indique que la page à retourner en cas d'erreur 404 est la page routeur.php.
Le routeur analyse l'url demandée pour récupérer la route et cherche dans le fichier routes.json le contrôleur et l'action à exécuter. Le routeur fait alors appel à celui-ci.
Schéma du fonctionnement du routeur L'action du contrôleur renvoie la chaine de caractère HTML à afficher, que le routeur affiche. Le serveur a ainsi la page à afficher qu'il renvoie à l'utilisateur.

Moteur de template

Lors de mon précédent article à propos du site, je m'interrogeais sur l'utilisation d'un moteur de template existant ou sur la création d'un moteur maison. J'ai finalement opté pour la seconde solution, partant du principe que je souhaitais quelque chose d'assez simple, ne nécessitant que des regex et pas d'analyses lexicale et syntaxique. Malgré un langage de template assez basique, je dois bien avouer que j'ai eu du mal à tout réaliser avec les regex PCRE de PHP (j'ai dû faire une petite bidouille – promis, je mets tout sur github sous peu).

<% include resources/views/header.html %>
<div class="main">
	<section class="articles">
		<h2 class="no-display">Articles</h2>
		<% foreach article in articles %>
		<article>
			<% article %>
		</article>
		<% endfor %>
	</section>
Exemple du langage de template utilisé dans la page index.html.

Ce dernier est pour l'instant assez limité. Dans l'exemple ci-dessus, quelques unes des principales structures du langage sont exposées. Ainsi, il suffit d'écrire le nom d'une variable entre <% et %> pour que celle-ci soit remplacée par sa valeur, passée en paramètre au moteur de template via le contrôleur. Quelques autres fonctions sont disponibles, comme le foreach, le if, le include entre autres.
Cela a permis un véritable découpage de la vue du modèle et du contrôleur, et je vais ainsi pouvoir me focaliser sur ces deux dernières parties.

Et maintenant ?

Il me reste encore un gros morceau à gérer du côté du moteur de template : la gestion des langues. Je ne sais pas encore si ça sera mon prochain objectif, ou si celui-ci sera plutôt le second gros morceau : la création d'un ORM. Je pourrais ainsi enfin stocker des données en BD, afin de faire, par exemple, un système de commentaires pour mes articles.

Agile Tour Montpellier 2015

J'ai rejoins cette année l'organisation de l'Agile Tour Montpellier en cours de route avec Clément, Julia et Adrien. Ce fut une expérience enrichissante et j'ai pu apprendre énormément.

L'Agile Tour Montpellier est un événement annuel qui a lieu à Montpellier (yeah, really) dont l'objectif est la promotion des valeurs agiles. Il a eu lieu cette année le 13 octobre et avait pour thème « Cultiver le bonheur au travail ».

Cet événement, outre d'avoir pu me permettre de prendre part à un projet à grande échelle, m'a permis de rencontrer des personnes véritablement passionnées, que ce soit parmi les organisateurs ou parmi les orateurs. Cela m'a également conforté dans mon sentiment que le développement agile et la gestion de projet agile sont véritablement des façons de faire – et même plus que ça, des façons d'être – sur lesquelles il faudra de plus en plus compter dans l'avenir.
L'équipe d'organisation de l'Agile Tour Montpellier 2015 J'avoue avoir été touché par la sincérité des gens que j'ai pu rencontrer sur l'événement, et notamment la proximité immédiate dans les relations que j'ai pu avoir avec les participants sur l'événement. Je garde par ailleurs un très bon souvenir des ateliers/conférences auxquels j'ai pu participer. Je suis donc impatient d'entamer une nouvelle année d'organisation, en compagnie de toute l'équipe de choc !

0 1