Catégorie Technologie

Jobeet: Une vision convaincante 11 commentaires

Posté par Cedric, le 21/12/2008 - Technologie

T_bf7b2130de16cc7a4649c0e36ece40dfJobeet est un tutorial en 24 parties, destiné à couvrir l'ensemble des fonctions offertes par le framework symfony dans le contexte de réalisation d'un projet réel. Alors que la série touche à sa fin, on peut faire quelques observations:

#1 L'ordre des cours

L'équipe symfony a choisi de partir du cahier des charges (sous formes de stories, respectant les principes de l'XP), pour ouvrir les hostilités par le design, juste après la conception du modèle de données, avant de s'attaquer en profondeur à la couche métier.

C'est précisément l'ordre par lequel nous avons également eu le moins de surprises. Juste après la conception de données, nous nous attardons même sur le conception visuelle de l'ensemble des parties où l'utilisateur peut entrer des données. Généralement, donc, le back office. En plus du design des formulaires (très utile pour repasser ensuite aux formulaires objets, faire les bons empilements de formulaires et développer les bons widgets), on peut également designer les différentes listes proposées à l'administrateur, ainsi que les interactions qu'il devrait être en mesure de faire à partir de là (et les implémenter basiquement, y compris l'éventuelle couche javascript).

Il s'agit en fait d'un bon moyen pour se rendre compte des éventuelles incohérences de conception, puisqu'en partant de toutes les possibilités d'entrées de données, il est facile d'adapter le modèle de données au mieux, l'affichage en front n'étant très souvent qu'une simple exploitation de données entrées par ailleurs (ou alors, si ce n'est pas le cas, il convient dinclure ces interactions utilisateurs en front dans ce prototypage graphique du début). Commencer par l'aspect visuel permet aussi de rapidement traduire vos scénarii d'utilisation en modules, actions, et routes correspondantes.

#2 L'importance des plugins

Nous avons beaucoup aimé le retour appuyé sur l'utilité des plugins. En effet, les plugins ne sont pas uniquement des packages publics prets à l'emploi. Ils sont aussi peut être le meilleur moyen de développer la véritable intelligence de votre projet. En effet, leur réutilisation est extrêmement simple, et se résume souvent à copier/coller un répertoire, qui lui reprend l'ensemble de votre travail.

Ainsi, dans les traitements de la couche modèle que nous faisons, nous travaillons par itérations succsessives:

1/ définition du comportement souhaité (exemple, un modèle Article doit etre taggé par un modèle Tag)

2/ qualification selon le critère "besoin ponctuel" ou "fonctionnalité réutilisable". Si la fonctionnalité doit être réutilisée, soit sur un autre modèle du même projet (ex: modèle Video), soit sur un autre projet, nous pensons "plugin".

3/ Comme nous travaillons désormais uniquement sur Doctrine, nous avons le bonheur d'utiliser très régulièrement les Templates, natifs à l'ORM. Pour chaque template que nous créons, nous créons un plugin correspondant.

4/ Si des interactions utilisateurs sont propres à cette fonctionnalité, nous les ajoutons au plugin. Par exemple dans notre cas, nous pouvons y intégrer une interface d'administration pour voir la liste des tags et en supprimer, ou encore un widget spécial qui étend une fonctionnalité jQuery qui va puiser dans notre liste de tags pour auto-alimenter un champs text avec suggestions AJAX (qui lui même pourrait étendre ce widget déja existant).

Ainsi, l'application pure de notre système se résume à définir le comportement dans le modèle de données (actAs: Taggable), puis de définir notre nouveau widget dans notre formulaire (sfForm::setWidget('field' => myWidgetFormInputWhatever)). En bref, une fois que le plugin est développé, deux minutes de travail réutilisables sur tous nos modèles.

#3 L'ouverture sur le monde

Le move stratégique le plus intéressant de cette série de tutoriaux est d'avoir inscrit clairement symfony non comme une solution s'opposant aux autres offres du marché, mais comme une solution complémentaire, et en particulier un produit complémentaire du framework Zend.

C'est également une pratique que nous apprécions. En effet, de si nombreuses librairies ayant été développées pour Zend, qu'il serait contraire au principe DRY de vouloir réinventer la roue. De plus, symfony permet d'intégrer facilement n'importe quelle librairie externe. Zend_Rest, Zend_Gdata, Zend_Amf, Zend_Search_Lucene, et bien d'autres encore sont des librairies magnifiques tant elles vous font gagner du temps de développement.

En bref, ces tutoriaux nous ont fait découvrir le symfony que nous pratiquons et que nous aimons: une plateforme complète et fiable qui s'intègre avec toute l'intelligence créée par ailleurs, et qu'on peut vraiment développer de manière modulaire et incrémentale en réutilisant systématiquement chaque entité développée.

C'est en programmant de cette manière (avec des tests systématiques et complets) que l'ont peut beaucoup gagner en productivité, à mesure que l'expérience s'accumule.

Google Maps x Maroc 19 commentaires

Posté par Cedric, le 16/12/2008 - Technologie

Je suis content que Google Maps ait fini par couvrir le Maroc, où nous avons un bureau (à Rabat). En revanche côté précision, ce n'est pas encore tout à fait ca:

L'avenue de France semble allègrement empiéter sur les habitations des pauvres Rabati. Je vous rassure, dans la réalité, cela se passe très bien et elle est située bien sûr, au niveau de la grosse avenue juste au dessus sur la carte. Pareil pour l'avenue Oumeir, perpendiculaire à l'avenue de France. C'est en fait la grosse artère située à la droite de l'image.

En bref, méfiez vous si vous utilisez votre iPhone comme GPS au Maroc, car si vous avez déja la chance de trouver les noms des rues affichés (très rare), vous risquez quand même de vous perdre... à cause de Google!

LiveQuery: Un plugin indispensable 14 commentaires

Posté par Cedric, le 15/12/2008 - Technologie

T_be99a347f4f8bede4dde225e0275d636Si vous utilisez jQuery, vous pratiquez certainement la manipulation du DOM. Par exemple, lorsque vous créez des objets à la volée, le DOM se trouve modifié. Malheureusement, jQuery n'intègre pas automatiquement les éléments que vous rajoutez à sa surveillance (listeners).

Travaillons sur un bout de code basique:

<input type="button" id="add" value="add another radio button" />
<input type="radio" name="cool" value="cedric" />

<script language="JavaScript">
$(document).ready(function(){
	
	$(":radio").click(function(){
		alert($(this).val());
	})
	
	$("#add").click(function(e){
		e.preventDefault();
		var $v = Math.random(1, 100);
		
		$("#container").append(' value:'+$v+'
'); }) }) </script>
Dans cet exemple, le click sur les éléments que vous ajoutez au fur et à mesure ne déclenche aucune action nativement (à l'inverse de l'élément créé à la base, avec "cedric" comme valeur). C'est un gros problème quand on souhaite ajouter du dynamisme à ses documents tout en bénéficiant des écouteurs globaux.

Heureusement, il existe une solution: le plugin LiveQuery. Il ne serait pas étonnant qu'il intègre le coeur de jQuery tant il contourne un problème fondamental. Reprenons l'exemple précédent. Nous allons simplement changer une ligne, celle qui fait que jQuery écoute le click sur les éléments de type radio.


Avant:
	$(":radio").click(function(){
		alert($(this).val());
	});
Après:
	$(":radio").livequery('click', function(){
		alert($(this).val());
	});
Et vous pouvez ajouter autant d'éléments identiques au DOM, ils répondront tous de la même manière lorsque vous déclenchez un événement dessus.

 

24 tutoriaux pour symfony 1.2 11 commentaires

Posté par Cedric, le 01/12/2008 - Technologie

T_628e7daa333daed7075e69ccdb24385bSi vous maîtrisez bien le PHP5, comprenez la programmation orientée objet, et souhaitez en apprendre plus sur le framework symfony, cette news est pour vous. L'équipe symfony va mettre en place 24 tutoriaux successifs visant à développer de zéro une application entière, en s'arrêtant sur tous les points stratégiques qui vous permettront de bien maîtriser le fonctionnement du framework pour rapidement le prendre en main pour vos propres projets.

Symfony est un framework MVC (le traitement de votre couche métier est séparée du traitement de la requête, elle même séparée de l'affichage, via les templates et les fragments). Son but est de traiter la couche basse de votre application, celle qui est indispensable (et donc, récurrente) à chaque projet. Le projet symfony est entièrement découplé et organisé par grands ensembles. Gestion de vos URLs (routing), de vos formulaires, de l'accès à vos données modelisées (via un ORM, comme Doctrine ou Propel), sont autant de briques indépendantes qui, après les avoir apprivoisées, vous feront gagner du temps dans votre développement. Côté "magique", un générateur d'administration rendra heureux tous ceux qui souhaitent réaliser un prototypage rapide ou qui aiment voir un réusltat visuel immédiat.

Nous vous tiendrons informés ici-même de l'avancée de ces tutoriaux, et reviendrons en profondeur sur certaines briques qui nous paraissent importantes.

Lien >> Le tutorial Jobeet

Vous faites des sites "Web 2.0"? 7 commentaires

Posté par Cedric, le 27/11/2008 - Technologie

Dans les deux dernières semaines, trois prospects pour mon agence de technologie m'ont posé la même question... Une question dont je n'ai pas la réponse, et pire encore, une question que je ne comprends pas. "Est-ce que vous faîtes ou avez fait des sites 2.0?".

Je suis de sensibilité marketing, donc je concois l'intérêt du concept, mais bon, au delà de ca... Va t-on être ringard à continuer à vendre des sites performants, rapides, évolutifs, et bien référencés? Ou doit-on rayer cette offre de la carte en proposant du "Ajax dernier cri", du "Ruby on Rails, parce que Twitter l'utilise", ou encore une "application iPhone", pour "être dans le coup"?

ps: variante qui fait mal: "vous faîtes des sites 'two point O'?"