Month: May 2008

Tendances des langages et des frameworks orientés Web

Posted by – May 31, 2008

Connu mais toujours sympa de voir les tendances des différents langages et frameworks que nous utilisons. Les tendances sont issues de Indeed (US).

Tendances d’offres

Les langages

En absolu :

En relatif (donne le taux de progression depuis janvier 2005) :

Les frameworks
 

Tendances des salaires (aux USA, donc à ne pas comparer avec ceux pratiqués en France)

Frameworks
 

asp.net $75,000

ruby on rails $75,000

php $64,000

j2ee $83,000

django $73,000

View Larger Salary Graph


Langages

c# $79,000

java $79,000

ruby $74,000

perl $77,000

python $78,000

View Larger Salary Graph

MMmmmmmm, je vais peut-être sérieusement commencer à me mettre à RoR moi ;)

SaaS, DaaS, PaaS, Cloud computing : Altaïde Dev Drink…penser autrement le développement et l’hébergement d’applications Web

Posted by – May 30, 2008

Préambule

J’ai assisté hier soir à la 5ème édition des Altaïde Dev’ Drink consacrée à l’évolution du modèle de développement Web.

Ce type de rencontre a plusieurs objectifs :

  • pour Altaïde (cabinet de recrutement, leur blog), d’étendre son réseau sur de potentiels candidats,
  • pour les participants, d’assister à des présentations sur de nouvelles technos. ou de nouveaux moyens liés au Web / Web2,
  • prendre un pot à l’issue de la présentation, et boire des bières, du coca ou manger des carottes bio.

chacun y trouve son compte, dans du gagnant-gagnant, le concept me plaît, c’est fun et moderne. Nous étions une petite quinzaine.

More

FireFox 3 : relevons le défi du record de téléchargements

Posted by – May 29, 2008

Ami visiteur, inscris-toi ici http://www.spreadfirefox.com/fr/worldrecord et le jour J, télécharge FF 3 !

Agile

Posted by – May 28, 2008

En attendant de finaliser mes articles techniques (au nombre de 3) que j’ai du mal à terminer par manque de temps, intéressons-nous aux méthodes dites agiles.

C’est le billet sur TDW qui me pousse à avancer la rédaction de ce billet, un peu agacé (mais gentiment hein) par de tels propos qui mélangent dans un amalgame à peine voilé bataille technologique et savoir-faire et méthodes appliquées par l’humain. J’espère confronté nos points de vue avec Babozor un jour autour d’une bière afin de lui retirer de l’esprit tant d’idées reçues sur .NET.

Cela fait maintenant 2 ans que je m’intéresse aux grands principes de l’agilité en appliquant tout ou partie des règles de bon sens, pragmatiques et réalistes qu’apportent les méthodes agiles. La révélation fut à l’issue d’une formation sur la gestion de projets informatiques, le formateur (et ce ne fut pas le premier) était très orienté agile, son discours me parlait et faisait référence à mon vécu : “mais oui mais c’est bien sûr” me suis-je dit, cela me correspond presque parfaitement et c’est très adaptée à l’organisation dans laquelle je travaille.

J’ai pour habitude de répéter souvent cette phrase :

Think big, start small

Avoir des ambitions, des besoins géniaux à réaliser, c’est bien, être raisonnable dans leur réalisation, c’est mieux et surtout moins risqué (prendre des risques oui, mais calculés). Nous avons des apprentis en permanence, le cycle est de 2 mois en entreprise, 2 mois à l’école, rien de mieux pour appliquer un cycle itératif et incrémental sur nos chantiers ou projets.

Alors comment et pourquoi j’essaie (j’essaie, j’essaie, …) d’être agile, que je résumerais de la façon suivante :

  • itératif et incrémental : cycle court entre 2 versions (spécs, conception, codage, recette sont compris dans cette courte itération), on s’éloigne ainsi notamment de l’effet tunnel, propre aux vieilles méthodes traditionnelles, mais également permet de réduire le taux de bugs (courte itération = moins de fonctionnalités = moins de lignes de code = moins de bugs) ,
  • avoir des objectifs raisonnables, cela ne sert à rien d’essayer de prévoir 125 000 fonctionnalités nouvelles si on sait qu’on ne tiendra pas les objectifs avant même de commencer,
  • être à l’écoute du feedback utilisateur : on met son égo dans sa poche, on écoute, on argumente s’il faut le pour et contre (j’admets qu’avec certains, c’est dur ;) ), d’une manière générale, j’essaie de ne pas avoir d’apriori ou de préjugés sur les remarques, et de ne pas partir du principe que la solution est parfaite et éviter de partir dans des spéculations / conjectures à n’en plus finir, présumer que est une mauvaise direction,
  • savoir innover et prendre des risques mesurés, afin de ne pas tomber dans une inertie, accepter l’incertitude,
  • collaborer pour aller de l’avant et trouver des solutions et non se retrancher voire se couvrir derrière une irresponsabilité des parties prenantes (“c’est pas ma faute, c’est celle du stagiaire”),
  • peu de documents papiers/électroniques mais un bon code, documenté (dans le code, ou un wiki pour les principes généraux), simple (si cela existe…;)) et souvent refactoré pour une meilleure maintenabilité : diminution du risque d’entropie du système ou simplement, du degré d’installabilité de celui-ci qui le rendrait alors non évolutif, ceci est rendu possible grâce aux courtes itérations,
  • accepter le droit à l’erreur (pour peu qu’on ait le sens des responsabilités) et réagir pour corriger,
  • appréhender de façon positive le changement (de direction, de méthodes, de besoins, …), en gros, inscrire dans le marbre des besoins qui sont suceptibles de mûrir dans l’esprit (ie : et éventuellement qui in fine ne seront pas utilisés par ex. ) semble vain, cela évite l’inertie et le manque d’innovation, sans quoi la concurrence guette. Egalement, essayer, expérimenter, changer de méthode, de direction si besoin, si cela permet d’arriver à l’objectif, pourquoi pas : droit à l’erreur, accepter l’imperfection, faire de courtes itérations, écouter, expliquer.

Tout ceci n’est bien sûr pas exhaustif, cela correspond à des bonnes pratiques, comme on pourrait en avoir en développement logiciel, c’est une habitude à prendre et à avoir, et surtout, se faire souffrance parfois, mais c’est tellement mieux au bout du compte !

Tout ça c’est bien mais encore faut-il se doter d’outils, choisis, les outils les plus sont les meilleurs et non des outils imposés et supposés meilleurs, quelques exemples :

  • mind mapping,
  • cas d’utilisation,
  • excel ou tout autre logiciel permettant de lister des tâches (de recette, de choses à faire, de bugs, …),
  • procédures simples de déploiement (un script, des fichiers textes de todo/tasks list, …),

Tous ces points ne sont pas le fait d’une technologie mais bien du bon sens, issu du retour d’expérience, et du pragmatisme inhérent à l’agilité, indépendamment à toute technologie.

Architectes, développeurs, chefs de projets, utilisateurs, oeuvrons pour mettre au point le meilleur système, ou du moins une première version du système qui le deviendra…meilleur à termes, cela passe par la qualité et les méthodes ou moyens pour y parvenir.

Communautés .NET, affirmons-nous, assez de ces a priori ou idées reçues issus des anciennes technos. MS qui étaient certainement par le passé mauvaises, cela a bien changé depuis bientôt 7 ans, il est temps d’ouvrir les yeux chers lamers.

Sur ce, je vais me coucher, et ça, c’est du concret.

NB : bon nombre des points énumérés sont applicables pour une réunion, notamment avoir un délai fixe (débute à l’heure, finit à l’heure) et court (max 1h30), des objectifs / points du jour raisonnables (sinon cela ne tient pas dans le délai imposé, alors faire plusieurs réunions, tiens, ça me fait penser à itérations), des réunions à périodes et fréquences fixes (décidemment…), comprendra qui veut.

“ba-ba” : révisons les fondamentaux sur .NET, ASP.NET, la POO, SQL Server, UML

Posted by – May 21, 2008

Cette après-midi en Googleisant pour tenter de trouver une solution à des problèmes philosophiques d’ordre threading, cache et collections d’objets (passionnant !), je suis tombé sur ce site http://www.questpond.com, et notamment 2 documents nommés C# and ASP.NET projects et (surtout) .NET Interview Questions.

Le deuxième est très intéressant, il présente sur 400 pages, des centaines de questions sur tous les thèmes de la plateforme .NET et ses sujets satellites, avec leur réponse (simple), à découvrir, et surtout pour se remémorer pleins de choses parfois oubliées ou tout simplement ignorées ;)

Pourquoi utiliser un ORM et sur quels critères le choisir ?

Posted by – May 19, 2008

Introduction

Dans un environnement 100 % objet, il convient de ne manipuler que des objets, cela passe par les objets traitements (contrôleurs) mais aussi par des objets métiers (ou entités) pour plusieurs raisons :

  • cela facilite le développement en apportant une sémantique aux classes (par exemple on manipulera un objet Client qui représente un…client, et non un tableau contenant des champs issus de la base, les attributs de ce dernier seront faiblement typés et sans sémantique a contrario de l’objet Client),
  • apporte des fonctionnalités en termes de collections d’objets (itérations, manipulation de type tris, …),
  • l’accès aux propriétés (ie: champ d’une table) est fortement typé

Un ORM permet tout cela avec en plus une abstraction à l’accès aux données, ainsi que des fonctions que le développeur n’a plus ou pas à gérer et qui lui facilitent la vie : connexion à la base, instanciations des objets (ie : mapping avec prise en compte de l’héritage ou des collections pour les relations 1-n ou n-m), lazy loading, CRUD, moindre utilisation du langage SQL…on s’affranchit de beaucoup de traitements et c’est appréciable !

Une définition de Wikipédia :

L’object-relational mapping (ORM), que l’on pourrait traduire par « correspondance entre monde objet et monde relationnel » est une technique de programmation informatique qui crée l’illusion d’une base de données orientée objet à partir d’une base de données relationnelle en définissant des correspondances entre cette base de données et les objets du langage utilisé.

Quel choix ?

Le choix est souvent difficile parmi la pléthore de frameworks d’ORM sur le marché.

Après plusieurs expériences et d’implémentations de plusieurs architectures sur des projets Web, un peu de retour d’expérience : ci-après quelques critères que l’on pourrait énumérer selon des besoins qui seront spécifiques aux projets développés et à l’architecture mise en place :

  • non polluant : personnellement, afin d’éviter d’utiliser des objets DTO qui relient les différentes couches, j’aime que les classes utilisées par l’ORM soient directement sérialisables par celui-ci et utilisables directement par les différentes couches (présentation notamment) : cela évite d’avoir une couche service par laquelle on devra mapper les objets de l’ORM vers des objets entités (objets métiers), ceci afin de conserver une astraction entre les couches supérieure et la DAO. Beaucoup d’ORM utilisent une combinaison d’ attributs et d’héritage de classe pour gérer leur mapping (sur les champs, sur les tables), en cas de changement de framework, on risque de se faire coincer si on n’a pas suffisamment abstrait les classes entités.
  • SGBDR, CRUD, lazy-loading, collections, cache, héritage, transactionnel, langage d’interrogation objet
  • communauté existante : pour la correction de bugs ou tout simplement pouvoir se débloquer d’un problème d’implémentation, une communauté reste primordiale, comme tout logiciel Opensource
  • simple (si ce terme est réaliste) à mettre en oeuvre et qui s’intégre de façon transparente à la plateforme

SGBDR & CRUD

L’ORM devra fournir des mécanismes simples pour le CRUD (Create, Read, Update, Delete) des objets manipulés ainsi qu’une compatibilité avec plusieurs bases de données (MySQL, MSSQL, Oracle, PostgreSQL, …) et aussi ne pas se soucier des identifiants (l’ID système dans nos tables).

Lors d’un développement, certaines opérations de mise à jour des données nécessitent des contraintes d’intégrités afin de ne pas avoir d’incohérences dans les données, les contraintes sont faites pour ça. L’ORM doit alors mettre en place les transactions afin d’actionner le rollback le cas échéant en cas de soucis d’insertion, de suppression ou de mise à jour d’une entité.

Lazy-loading & cache

Egalement, la gestion des collections d’objets (typiquement les relations 1-n ou n-m) devra dans la mesure du possible utiliser le lazy-loading, cela permettra d’optimiser les accès à la base, notamment pour les relations, ou les gros champs (type text / blob) : ne charger les objets uniquement lors de leur accès, économie de ressource mémoire et de charge serveur côté SGBDR, et surtout ce qui induit une réduction de temps lors de l’initialisation d’une application. Avec le même objectif d’amélioration des performances, au lieu de gérer un cache de nos objets côté présentation, l’ORM peut offrir des mécanismes évolués pour le gérer.

Mapping entités, héritage

Souvent, 1 table = 1 classe, mais on peut avoir des objets non contenus dans la même table (une adresse par exemple), mais d’une représentation strictement objet, l’information sera insérée dans un objet plus globale (un individu ayant une adresse), cela facilite les manipulations. Egalement, l’héritage peut s’avèrer très utile, l’ORM devra alors prendre en compte (ie : instancier, souvent grâce à un discriminant) les différents types qui dérivent d’une entité mère, ceux-là étant stockées dans des tables différentes que celle représentant les informations communes.

Divers

Si on veut totalement s’abstraire de la base, il convient que l’ORM implémente son propre langage d’interrogation : soit par une constructions de critères ou filtres, soit grâce à un véritable langage d’interrogation objet. Dans ce cas, on s’affranchit totalement du SQL, ce dernier peut avoir des instructions spécifiques selon le serveur de bases de données, l’ORM traduira selon la cible les bonnes instructions.

And the winner is…

Après avoir testé plusieurs types d’architectures et d’ORMs, celui qui répond le plus à nos besoins précédemment cités est : NHibernate. Je ne suis pas très attiré par les ORMs qui génére toute une couche DAO, dès qu’il faut coder du spécifique, cela peut devenir très contraignant, sans compter les milliers de lignes de code plus ou moins compréhensibles. NHibernate a une forte communauté, très active, et on trouve bon nombre de blogs spécialisés pour décortiquer la bête.

Quelques ressources

Virtualisation, VirtualBox, le challenger

Posted by – May 18, 2008

Je suis très friant de la virtualisation (VMWare ou VServer), que cela soit pour de l’exploitation (j’admets ne pas avoir passé le cap à 100 %), de la pré-prod ou les stations de travail, pour quelques raisons non exhaustives :

  • un serveur virtuel ne prend pas une place de plus dans une baie d’hébergement (une baie coûte chère),
  • dans un environnement de pré-production (ou de validation) nécessaire, réduit les coûts, et permet également de façon simple (pas d’achat de serveur physique) la mise en place de nouveaux serveurs pour préparer une migration par exemple,
  • pour le développement, un serveur virtuel est très pratique pour avoir plusieurs environnements de travail (un gros serveur physique pour X projets avec des VMs), et notamment d’essayer de nouveaux moyens, ou tout simplement pour tester : IE pour le nommer ne permet pas plusieurs installation, mis à part Mutliple-IE, mais une VM permet d’avoir un environnement non pollué,
  • facilite la sauvegarde d’un serveur : on backup simplement la VM,
  • cloisonne les environnements, on pourra alors donner des accès à différents intervenants (serveurs mutualisés sur un serveur), tout en préservant la sécurité et la répartition des ressources entre les serveurs,

Prochainement, je dois ré-installer mon poste, et nous bénéficierons d’un total de 4 Go de RAM, c’est le moment d’installer une ou des VMs suuplémentaires sur le poste. Jusqu’à présent, très pro VMWare, car c’est le précurseur et offre notamment un superbe outil : VMWare Converter. Cela fonctionne très bien, prendre un serveur physique et en faire une VM (gain de temps énorme), ou alors, avant la réinstallation d’un poste, cela permet d’effectuer une sauvegarde de votre poste sous forme de VM.

Un challenger de taille me paraît très intéressant et déjà testé il y a quelques mois : VirtualBox, récemment racheté par Sun. C’est surtout au niveau des performances qu’il semble offrir un avantage certain par rapport aux autres solutions : un billet sur ce point

Résultats dans quelques temps, à suivre.

SitePoint offre gratuitement un livre (PDF) sur Photoshop

Posted by – May 15, 2008

Offre valable 30 jours sur le site Sitepoint

FlickrEdit : sauvegardez vos albums Flickr

Posted by – May 2, 2008

On connaissait Flickr uploadr, logiciel pour uploader vos photos vers Flickr, maintenant il y a FlickrEdit qui permet non seulement cela mais aussi et surtout d’effectuer un backup de vos albums Flickr, bien pratique pour retrouver des photos que vous n’avez plus en local.

Et bien plus : upload, slideshow, opérations sur les photos, …

Via Virusphoto

BorderMaker et dernière mise à jour de Java

Posted by – May 2, 2008

J’utilise BorderMaker pour faire des cadres sur mes photos. A la dernière mise à jour de Java, surprise : il ne fonctionne plus, erreur AWT.

Mise à jour vers Java SE 6 Beta et tout est rentré dans l’ordre.