Month: June 2007

NHibernate : best pratices remix

Posted by – June 28, 2007

Un article complet avec exemples sur NHibernate et les meilleurs pratiques avec la nouvelle version 1.2.

NHibernate best practises

L’article traite aussi des cas d’utilisation avec ASP.NET, services web, et aborde les tests. Il fait également référence à ActiveRecord (pattern de Martin Fowler et aussi très connu des Railers), IoC, et MonoRails (le portage de RoR en .NET), ces 3 derniers étant implémentés par le projet Castle que j’ai pu déjà testé.

Ce n’est pas ma spécialité mais il est toujours très intéressant de réfléchir aux ORM car cela oblige souvent à repenser l’architecture (objet, SOA, tests) afin d’abstraire et découpler les couches grâce à des techniques qui vont au delà de la simple POO.

Miniville

Posted by – June 28, 2007

Cela ne sert pas à grand chose mis à part compter les visites et flatter son ego…

Zorkyland

…et je ne dois pas en avoir beaucoup…de visites ;)

Recrutement, apprentis, et jeun’s

Posted by – June 27, 2007

Comme chaque année, nous procédons à une session de recrutement. L’objectif est d’accueillir dans notre équipe d’ingénierie pour une durée de 3 ans un étudiant en apprentissage en collaboration avec l’ITIN.

A chaque nouvelle session, pratiquement le même constat :

  • je prends un an de plus mais l’étudiant lui a toujours le même âge…et là, ça fait mal ;-) (surtout que cela doit faire la 7ème année).
  • le candidat prend rarement des notes lors de l’entretien : c’est une constante, 3 candidats sur 4 viennent les mains dans les poches : est-ce par manque d’expérience du monde du travail, y vont-ils au feeling, ou est-ce tout simplement les jeun’s d’aujourd’hui ?
  • le marché est tendu (tant mieux pour le métier !) depuis 2/3 ans. Parmi les 8 candidats retenus sur CV, 4 ont déjà trouvé ailleurs.
  • conséquence du point précédent, on doit faire preuve d’originalité pour vendre notre offre de poste d’apprenti : salaire de l’apprenti (+20%), intérêt du travail (équipe, .NET, plateforme d’applications, exemples de projets), suivi personnalisé et rigoureux de la part du tuteur, avantages divers (cantine avec un rapport qualité/prix imbattable, RTT, séminaires, …).

Un recrutement est à mener comme un projet, et prend du temps car il ne faut pas se tromper.

A suivre…

Mix’ 07

Posted by – June 21, 2007

Je viens d’assister à la conférence du Mix’07 de Microsoft (le remark du Mix de Las Vegas). Le lieu choisi était bien sympa, tout aussi original que le Google Developper Day, l’événement avait lieu au Cirque d’Hiver, habillé de façon très fashion (et donc design) : lumières, logos, et une DJette qui nous a mis de la bonne musique, un avant goût pour la fête de la musique. Cette manifestation est axée pour un public designers/créatifs et développeurs, ou comment rapprocher les 2 mondes.

Maîtres mots de la journée : ouverture (de Microsoft avec MACOS, Firefox…Linux1), interopérabilité, expériences (utilisateurs), APIs (REST, SOAP, …) et…Silverlight bien sûr, la plateforme qui relève le défi technologique, et concurrent non affiché d’Adobe Flash. Le tout dans une philosophie très Web 2.0.

1 Miguel de caza était présent pour faire des démonstrations de la DLR (Dynamic Language Runtime) : Python / Ruby, et bien sûr le portage de Silverlight sur les plateformes Un*x.

La matinée fut un mélange entre la volonté d’ouverture vers les autres communautés (MACOS & Safari, Firefox), avec des démos et des moments marketting (il faut bien manger…) avec la suite Expression.

Silverlight est un plugin qui s’installe sur le navigateur (IE, Firefox, Safari) et couvre les axes suivants :

  • la vidéo avec SLTV
  • l’interface simple (SL 1.0)
  • RIA (avec SL 1.1) : .NET (!) embarqué dans le Silverlight (et donc dans le navigateur)

Des démos de la gamme Expression (Blend, Media, …), une table ronde avec des designers (sous MAC…).

L’après-midi fut plus chargée sur le thème S + S : Software + Services.

Présentation des robots conversationnels qui vous guident sur vos choix (Cetelem, …), avec la société Virtuoz, cela donne pas mal d’idées. J’avais assisté à une démo avec Avendrealouer.com et leur service de robot sur MSN : avendrealouer@hotmail.com (et ça fonctionne ! ;) )

Suite avec un site de recherche développé avec Silverlight : Criteo : mettre en relation les blogs basés sur les mêmes concepts.

Popfly. J’avais créé un compte sur ce nouveau site sans avoir eu le temps d’y jeter un coup d’oeil (un petit exemple). Le principe est simple : pouvoir faire ses mashups grâce à l’utilisation de blocs issus d’APIs diverses. Le but est de combiner ces différents bloc d’APIs issus de différents sites pour créer un widget : par exemple des photos flickrs affichés dans un caroussel ou sur une carte, …et tout ça en ligne, j’aime bien le concept. Présentation de pas mal de sites (certaines déjà connus de la blogsphère) : dismoiou (encyclopédie de lieux), Scooplive, Ziki, BMyKey, facebook, …le point commun étant l’exposition d’APIs (annuaire d’APIs existantes : ici et , au format REST (REST/POX ou voir cet article).

Une session plus technique sur Silverlight 1.0 ou 1.1. Cette dernière permet de développer directement en .NET (C#/VB) une application qui sera déployée sur Silverlight : appel de méthodes .NET à partir de Javascript ou l’inverse, services Web REST, SOAP, RSS avec sérialisation JSON pour le retour, accès au DOM directement par .NET (!) utilisation de XAML, des librairies Ajax MS ou Silverlight (ajaxlibrary.js, silverlight.js).

Le clou de la fin de journée fut la présence de Miguel de Icaza qui a présenté l’implémentation de Silverlight sous Linux (Mono, Cairo pour le moteur graphique2), le bien nommé

projet Moonlight. Et là, je dis RESPECT. En effet, le portage a été effectué en…21 jours, des journées de 15h, week-end compris pour un résultat plus que convenable. Un jour, dès que j’aurai le temps, il faudra que j’installe une plateforme Mono tout de même.

2 Quand je vois le portable de Miguel, ça me fait penser : “Vista, ravale tes dents” ;)

Connaissez-vous qpsmtpd ?…

Posted by – June 21, 2007

On connaît les milters et autres méthodes pour effectuer des vérifications toujours plus en amont de la transaction SMTP pour la messagerie, ceci afin de lutter encore plus efficacement le SPAM. Bien souvent, cela reste assez fastidieux à mettre en oeuvre et rajoute une complexité supplémentaire au MTA, le serveur de messagerie final ne devrait être là que pour délivrer les (vrais) mails, et non de s’occuper à 100 % de la sécurité.

qpsmtpd est un serveur SMTP très léger et très modulaire qui se base sur le principe des plugins et des hooks qu’il peut appeller à chaque instant du protocole SMTP : mail from, rcpt to, data, … Le principe est de lancer qpsmtpd à l’écoute du port SMTP (25), charge à lui ensuite de faire les vérifications d’usage (beaucoup de plugins sont livrés dans le produit de base pour ce type d’opérations) pour ensuite relayer au serveur de messagerie qui écoutera sur un autre port (2525) par exemple. En gros qpsmtpd joue le rôle de firewall ou de frontal mail avant d’entrer dans l’infrastructure de la messagerie interne.

L’avantage de cette technique est de pouvoir développer un plugin maison, avec des hooks à appeler selon ses besoins : on peut introduire des règles métiers sur les mails : vérification de l’existence du compte, vérification de l’expéditeur selon des règles qui nous sont propres, etc…et de couper la transaction SMTP avant même de recevoir le message : gain de temps et de ressources pour le serveur MTA en bout de chaîne.

mail -> qpsmtpd (25) -> smtp (2525) -> délivre

Des plugins Postfix, Exim, Qmail…et un transfert simple smtp est aussi prévu (pour Sendmail notamment).

Il faut connaître Perl, mais les plugins sont simples à développer. Un exemple qui vérifie que le “to” existe bien (pour la démo, mais on pourra penser à une consultation LDAP, base de données, …) :



use Qpsmtpd::DSN;

sub hook_rcpt {
my ($self, $transaction, $recipient) = @_;
#my @badrcptto = $self->qp->config("badrcptto") or return (DECLINED);
return (DECLINED) unless $recipient->host && $recipient->user;
my $host = lc $recipient->host;
my $from = lc($recipient->user) . '@' . $host;

return Qpsmtpd::DSN->no_such_user("mail to $from not accepted here") if $recipient->user ne 'newsland';

return (DECLINED);
}

A découvrir en tout cas pour rajouter une brique de sécurité à votre plateforme.

Une présentation du produit.

Interop, services web et utopie

Posted by – June 17, 2007

Dans le cadre d’un projet d’intégration, je suis amené à faire usage d’un service Web qui me facilitera l’intégration d’un logiciel1 (sous Linux) à un extranet développé avec les technologies .NET : l’objectif d’une intégration étant de rendre transparentes certaines fonctionnalités d’un sous-système à l’utilisateur final, qui lui, ne voit que l’extranet.

Les services Web facilitent la vie pour toutes les parties : diminution du nombre d’API à maintenir grâce à la manière dont les échanges sont effectués (SOAP/REST, XML/JSON/…), passent les firewalls, etc, …rien que de voir toutes les APIs qui fleurissent (au format REST voire SOAP), le buzz est devenu une réalité (économique ?).

Bref, en ce qui concerne cette intégration, il s’avère que la méthode appelée renvoie des types différents, c’est en fait une méthode générique2, à laquelle on précise un service qui sera appelé sur le serveur (en fait une méthode du WSDL). Le seul problème c’est que les services sous-jacents renvoient des types différents : string[], int, …le client qui appelle le service Web se fie à la signature (WSDL), et en .NET (ou Java), qui sont des langages typés, avoir des types de retour qui varient pose évidemment un problème. Le serveur a été développé en Perl, bien que la fonction soit ingénieuse, on se retrouve confronté à une contrainte du langage indépendamment du WS : Perl, Ruby, Python, etc, sont des langages interprétés et peu typés, C#, Java, …des langages compilés et fortement typés, la conception et l’implémentation devraient prendre en compte ce type de contrainte pour faciliter justement l’interopérabilité.

Pour m’en sortir je vais certainement utiliser les hooks qui sont possibles grâce à SoapExtention ou exemple de cryptage, classe qui permet d’intercepter le message SOAP avant/après sérialisation/désérialisation, et modifier le message SOAP de retour, pour changer les types de retour afin qu’ils coïncident avec la signature de la méthode appelée réellement : string[] authenticateRemoteAppAndRun(…,string service, …), donc transformer un int en string[] à la volée (modification du schéma XML…), tout ça pour corriger un défaut du serveur.

Autre attention qu’il faut avoir lors de développement de services Web : renvoyer dans la mesure du possible des types ou des structures simples. Dans un autre projet où l’on devait exporter des données vers un site, le client était cette fois-ci écrit en Python : difficulté de produire un proxy (pour générer des classes, a contrario de .NET ou Java qui ont des outils pour cela), nous étions ainsi dans l’obligation d’exporter des structures simples (arborescence peu profonde), car lire un schéma XML compliqué reste peu humain (heureusement qu’il existe XPath mais quand même ;) ).

L’avantage de REST face à SOAP est sa simplicité dans les appels, mais aussi dans les retours qui peuvent prendre différentes formes : XML, JSON, HTML, en SOAP, tout est encapsulé dans un message SOAP, ce qui rajoute une couche de complexité pour la mise en oeuvre (et je ne parle pas des spécifications WS-*…)

Un article très intéressant sur le choix SOAP ou REST, qui résume bien mes cas d’utilisation, qui dépendent des technologies sous-jacentes utilisées.

Une piste à étudier, SOAP c’est bien mais en intra/inter .NET, REST me parait un bon compromis :

Et pour tous ceux qui ne pourront aller au Mix 07 (Miguel de Icaza y sera parait-il), je tenterai de faire un résumé de la journée dédiée aux webdesigners & co.

1 Serveur de listes Sympa : toutes les créations, suppressions de listes, ainsi que la gestion des abonnements doivent être transparentes pour les utilisateurs, qui ne connaissent que l’extranet.

2 string[] authenticateRemoteAppAndRun(…,string service, …) : service sous-jacent a appelé, ce service est une méthode décrite également dans le WSDL

Scrum checklists

Posted by – June 17, 2007

L’excellentissime InfoQ propose dans sa rubrique livres, un PDF (payant à l’impression, gratuit pour la consultation en ligne) sur les checklists Scrum (une méthode dite agile), beaucoup de bon sens mais rarement appliqué.

Egalement, un PDF de 104 pages (!) sur un retour d’expérience Scrum (ou XP) : blog de Henrik Kniberg, à lire !

Personnellement, je fonctionne beaucoup avec les checklists et autres todolists, cela évite de perdre la trame d’un projet, d’oublier le jour J d’une mise en ligne (où le stress est d’un niveau plus élevé qu’à l’habitude) certains points cruciaux (ou non), simple habitude à prendre.

Le PDF, il faudra vous inscrire au préalable sur le site pour le télécharger.

Bonne lecture !

SQL Server ou la diminution du fichier des transactions

Posted by – June 12, 2007

Imaginons le cas où vous n’ayez pas programmé de tâche (job SQL Agent) pour shrinker quotidiennement les logs de votre base (pour X mauvaises raisons…), SQL Server conserve toutes les transactions émises dans un fichier de log, celui-ci peut devenir à termes très gros (> XX Go) si on ne fait rien.

Pour résoudre ce problème, il suffit par l’intermédiaire du Query analyzer d’exécuter les deux commandes suivantes :

  • backup log mabase with truncate_only
  • dbcc shrinkfile(mabase_log,2)

Cela en sauvera plus d’un et vous fera l’économie d’un disque dur ;)

Conférence SYMPA, remerciements aux auteurs pour cette brillante journée

Posted by – June 8, 2007

J’ai assisté hier à un cours magistral concernant le serveur de listes SYMPA par les auteurs du produit (opensource et français, il faut le souligner). Sympa est utilisé par la majeure partie des universités françaises, et plus généralement par l’enseignement supérieur. Le logiciel a également une bonne croissance d’utilisation dans le monde anglophone outre-atlantique ou nos voisins d’en face où se constitue une forte communauté. Le projet a débuté il y a maintenant 10 ans, et est devenu une véritable plateforme de services de listes. Le CRU, organisateur de la journée l’utilise en interne : 20 millions de mails délivrés / mois semble être un gage de stabilité de SYMPA ;)

Nous étions environ 50, pas mal de portables sous Linux ou MacOS ;)

Le cours fut très enrichissant, car au-delà d’un serveur de listes, cela abordait d’autres problématiques (ils préfèrent le terme service d’ailleurs) :

  • intégration à un S.I. ou à d’autres applications : – approche service (SOA) par le service Web (par utilisateur, pour une application dument certifiée), synchronisation de sources externes – SSO : CAS, Shibboleth
  • centralisation des utilisateurs par LDAP
  • architecture, répartitions de charges, et optimisations des systèmes : MTA, Sympa & la répartition de charges, anti-spam & co
  • site Web hautement modulaire : utilisation du format TT2 qui permet dynamiquement de créer les pages HTML selon un mini-language, design : CSS (en cache)
  • caches : fichiers de configurations, abonnements, modèles de pages, …
  • sécurité et autorisation : groupes d’accès, MD5, …

…et un retour d’expérience, un “tueur” de la gendarmerie nationale : un gourou en développement Perl, XUL, SOA et administrateur expert en serveur de messagerie (anti-spam, règles du MTA) sous Postfix.

Les vidéos et supports en ligne

Je vous invite vivement à consulter le document du cours, il contient pas mal de bonnes idées et une foule de problématiques fort intéressantes.

geekomatik.com : 5 invitations

Posted by – June 2, 2007

J’ai 5 invitations pour ouvrir un compte sur Geekomatik , laissez votre email dans les commentaires pour ceux que cela intéresse.