|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Bonjour,
J'intègre actuellement Kettle (issu du project Pentaho) pour un proto chez un de mes clients (tourisme). Contexte avec belle volumétrie (une table de faits de 22 millions d'enregistrements entres autres) et un suivi d'évolution des dimensions. Architecture Oracle vers Oracle sur Linux. Pour l'instant le loading initial a été réalisé, avec de nombreuses dénormalisations, souvent au niveau d'une table unique (indicateurs initialement stockés en ligne avec code spécifique). J'ai externalisé à la base certaines fonctions, notament les timestamps pour les enregistrements et la gestion des PK par commodité ou nécessité. Le loading initial a montré des performances jusqu'à 3000 enr/sec, sur une petite plateforme HP en AMD64. Voilà pour l'instant, je prépare un road map plus détaillé pour ceux qui sont intéressé par l'intégration de cet outil open source et je le posterai ici même prochainement (bugs, évolutions, tips, contournements ...). Vincent vteyssier@decisionsystems-studio.fr |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : juillet 2003 Messages : 83 ![]() |
Bonjour VinZent,
Trés interressant ta démarche de nous faire partager ton expérience sur un outil d'intégration de données open source du marché. En attendant les détails dans les jours à venir peux tu nous dire ce qui a conduit ton choix sur Kettle ? Cet outil a t'il été comparé à d'autres ? Cet outil intégre de la données dans une table de faits, qui dit table de faits et indicateurs dit analyse et rapports. Comptes tu utiliser Mondrian/Jpivot en restant chez Pentaho pour analyser tes données ? ou va tu t'orienter sur du BO ou autre ? Merci pour tes réponses. Cordialement Selecta |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Bonsoir,
Le choix de l'ETL, sous contrainte primordiale qu'il soit open source (budget client = 0), a vu un benchmark de Talend et de Kettle. La souplesse offerte au niveau de la gestion des batches Kettle, en perspective de l'existant client (présence massive de quartz pour l'ordonnancement des taches par exemple), a fait qu'on s'est orienté vers Kettle. Talend reste un super outil qui a d'ailleurs ma préférence (librairie de transformation riche et gui impeccable) mais aurait eu l'inconvénient d'alourdir la tâche d'intégration dans le contexte existant. Enfin, chose qui peut être sujet à discussions vu le nombre de paramètres en jeu, Kettle a montré de meilleures performances sur un mapping classique de type : input depuis base source-sélection-tri-dénormalisation-output en base cible pour 450 000 rows (ps : bases oracle). Au delà de l'alimentation, mon client souhaite passer un cap en deux étapes : 1 - Passage d'un mode d'organisation des données de type hiérarchique (appli web ...) vers du relationnel enrichi et optimisé (dénormalisation) pour la refonte des reports. 2 - Passage vers du multidimensionnel pour l'analyse et la découverte de son capital informationnel. Les reports sont refondus et s'appuient donc sur les nouvelles structures dimensionnelles. Leur présentation est encapsulée par le framework java existant (je ne fais que fournir au dev java un jeu de données par query à ce niveau). L'analyse est assurée par Mondrian, moteur ROLAP et JPivot. Là aussi le choix a été dicté par un budget à 0 (adieu BO, d'ailleurs non adapté à ce contexte) et une volumétrie assez conséquente (par exemple une des tables de faits touche 22 millions de rows) ce qui oriente vers un modèle ROLAP. Bien entendu, j'utilise Mondrian en conjonction avec des tables d'agrégats pour optimiser certaines analyses. A noter la souplesse extraordinaire des schémas mondrian (tags de description d'un cube), dès qu'on arrive à "accepter" de se taper cette description à la mano dans le fichier xml (le cube designer, proposé par Pentaho est une bouse pour le moment : v0.7). Un client lourd OLAP vient se greffer à l'offre, pour une partie de la MOA qui souhaite explorer et analyser en toute liberté : j'ai opté pour FreeAnalysis mais il se pourrait que JRubik remonte au sprint. Voilà, cela fait un peu déballage mais je suis crevé ce soir. N'hésitez pas à me relancer si d'autres infos vous sont necessaires. J'ai pris un peu de retard sur le doc de feed back Kettle mais il viendra. |
|
|
00
|
|
|
#4 | |
|
Membre à l'essai
![]() |
Citation:
Je suis consultant en Système d'Information, avec une spécialisation sur l'architecture ETL chez SQLI. Actuellement je prépare un séminaire : Réussir son projet d'intégration. Ma dernière partie traite de la typologie des différents ETL, et donc étant donné que je vais parler des outils ETL open source (en autre celui de Talend Open Studio). Donc si tu avais des info au format PPS traitant des éléments ci dessous, je serai preneur :
Merci d'avance si tu peux m'aider. Cordialement, |
|
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Salut,
A vrai dire je coince un peu avec ta démarche : - j'aiderai et échangerai volontier avec un développeur/réalisateur/chef de projet dans le cadre d'un projet d'intégration, et cela sans limite. Mais là tu me demandes de d'étoffer ton seminaire (commercial) avec des slides tous cuits, hop copy paste je me foule pas ... - tu compte intégrer mes infos à ton séminaire mais au final tu vas parler d'une solution que tu n'auras pas utilisé, ni même vu tourner sur ta station ... humm ... SQLI ... Etant moi même consultant, tu comprendra que je coince. Je te ferai parvenir la semaine prochaine la réponse, au format texte, aux 5 points que tu soulèves. A toi, après, de compiler, analyser et projeter. Vincent Teyssier |
|
|
00
|
|
|
#6 | |
|
Membre à l'essai
![]() |
Citation:
Je voulais juste éclaircir la situation. Je comprends tout à fait ta position. Mais sache que je ne venais pas pour pomper toutes les informations, mais juste pour étoffer cette dernière partie de séminaire afin d'avoir un deuxième d'ETL Open Source. Les points que j'avais demandé me suffise largement pour cette dernière partie et je m'étais adressé à toi comme tu connaissais également Open Studio de Talend afin de connaitre ton retour entre les deux produits. Cordialement, |
|
|
|
00
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : mars 2007 Messages : 1 ![]() |
Citation:
Salut, je trouve ton expérience très intéressante. J'ai une expérience dans le décisionnelle "classique" BO et cube OLAP Microsoft, et aujourd'hui je suis entrain de m'approcher aux outils open source en vue d'une étude de marché pour me mettre à mon compte. J'aimerais avoir ton ressenti sur le temps de mise en oeuvre d'une solution complète : installation, paramétrage, prise en main des outils. Dans tout les cas merci pour ta contribution. Massimo |
|
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : janvier 2007 Messages : 149 ![]() |
Merci pour le retour d'expérience VinZent
|
|
00
|
|
|
#9 | ||
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Bonjour à toutes et tous,
Après quelques mois passés quotidiennement sur une partie de l'offre Pentaho (PDI/Kettle + Mondrian/XMLA), voici un retour de ma part (qui n'engage que moi etc etc ...). L'éditeur / le projet : Pentaho affiche une forte volonté d'intégration pour tous les modules qui comportent l'offre. L'effort est très louable et je pense qu'ils y arriveront. Pour autant le chemin reste long : pour l'instant il n'y a guère que les chartes graphiques qui soient homogènes et font penser à une suite logicielle plus qu'à une collection de modules. La communauté participant au projet est vive et assez réactive sur les questions d'évolution, de bug report ou même de débat "idéologiques" (ETL, ELT, EII ...). Matt Casters et Julian Hyde, respectivement responsables de PDI/Kettle (ETL) et Mondrian (ROLAP) sont accessibles directement et tous deux entretiennent des blogs très riches (annonces de features, débats, tricks ...). Les participants aux forums (pentaho.com) sont, d'une manière générale, de bon niveau et un point bloquant reste rarement plus d'une journée sans réponse/solution. Pas de trolls, pas de débats philosophiques, ces forums sont partitionnés par type d'outil (ETL, ROLAP, Web, Datamining ...) et restent techniques et pragmatiques. Commercialement, car il faut bien en parler, Pentaho reste pour l'instant assez absent : j'ai demandé à acquérir leur module Spreadsheet Services (très séduisant pour dépasser les fonctions pivot natives de l'outil) et à ce jour je n'ai pas de réponse malgré plusieurs relances et en étant connu auprès d'eux. Avis sur l'éditeur / projet : une volonté certaine d'intégration des différents modules, des acteurs motivés et joignables, des releases fréquentes (sans régression). A l'inverse, un sentiment que chaque projet au sein de Pentaho avance quand même un peu "en silot". PDI/Kettle : Il s’agit là de l’outil d’ETL. Son approche est de reposer assez fortement sur la DB. Full java, son interface graphique est moins séduisante que l’offre « concurrente » de Talend. Pour autant, les fonctionnalités, la performance (liée à la DB, tout de même) et la fiabilité est présente. Le développeur dispose depuis la version 2.4 d’une interface unique pour développer et gérer ses transformations et ses jobs (les jobs contenant les transformations et les enchainant à la manière d’un workflow avec conditions et contrôles). La bibliothèque des transformations est très fournie et intègre dès à présent des fonctions évoluées : suivi d’évolution des dimensions, dénormalisations, normalisations, javascript (à la manière de vbscript pour DTS/SISS), recherches en DB, lecture depuis http, dédoublonneur, XML, fusion, merging, passages de variables entres transformations / opérations, lecture/écriture sur socket. Bref, l’éventail des outils n’est pas du tout limité. PDI/Kettle peut s’utiliser au travers de deux modes distincts, local ou avec référentiel :
Les fonctionnalités de logs sont très verbeuses mais leur lecture reste aisée. Une anomalie se remonte très vite avec un simple parseur, voire un Ctrl-F « ano » lors des mises au point. A noter que le lancement d’un job/transformation en interactif (via la gui) est bien entendu possible et que les logs sont du même niveau de qualité. Autres fonctions intéressantes, dont j’ai abusé au possible :
Les performances sont globalement au rendez-vous. Bien entendu, plus votre DB sera performante, meilleur sera le comportement de PDI/Kettle. Pour autant, en environnement de dev, sur un Solaris de base et un hardware peut optimisé, il m’est arrivé d’atteindre du 5000 rows/ seconds sur des transformations incluant des tris. Par ailleurs, je régénère un historique quotidien de 13 semaines sur des volumes allant de 500 000 rows à plus de 22 millions, incluant le calcul des agrégats ; cette phase se déroule en 2h50 – 3h00 la nuit. Il manque cependant un module à PDI/Kettle, qui se fait cruellement sentir dès lors que l’on travaille avec de multiples environnements (dans mon cas, dev, recette, prod) : un gestionnaire de transformations / jobs. Actuellement, pour migrer une transformation ou un job d’un environnement à un autre ( = un référentiel à un autre), il faut passer par une sauvegarde/export local, puis reconnexion au nouveau référentiel pour publication. Un module de gestion des transformations et des jobs serait super utile pour gérer au mieux la phase de montée en environnement. A imaginer comme un « CVS light » ou encore un « SourceSafe ». Avis sur PDI/Kettle : très bon outil qui s’est montré au rendez vous. Les fonctionnalités sont très riches et couvriront facilement, je pense, un minimum de 80% de vos besoins de traitement. Pour le reste, le Jscript et la débrouille (comme délocaliser certains traitements très lourds directement sur la DB – pourquoi ne pas en profiter) vous permettront de finaliser les transformations nécessitant de la haute couture. La débrouille, parlons en. La documentation de PDI/Kettle est bien fournie en volume mais s’avère parfois lapidaire (un snapshot et un titre …). Il faut donc parfois tatonner avant de trouver le fonctionnement idéal, sans parler des tricks de tordus (le dernier que j’ai trouvé impose de linker un « insert row » à un « call DB procedure » afin de réellement déclencher l’exécution d’une procédure stockée sur la DB …). La aussi la communauté documente elle-même ce genre d’astuces, moi y compris au travers de mon blog (http://open-bi.blogspot.com). Au final, les logs sont assurés à deux niveau : fichier de logs et tables de logs en base. C’est là un gage de suivi qui, de mon coté, n’a jamais été pris en défaut. Mondrian : Mondrian est le moteur ROLAP de Pentaho. Il est maintenu par Julian Hyde qui en est le papa historique. Là aussi, full java. Mondrian peut fonctionner suivant deux modes :
Le développement, de son coté, est un peu plus ardu. Un cube se crée via sa définition logique au sein de fichiers XML. Ces derniers sont structurés de manière à designer les dimensions de votre cube ainsi que les indicateurs. Pour faire simple : une dimension ou un indicateur mappe directement une colonne d’une de vos tables de dimension ou de faits. Dans la pratique, cela va beaucoup plus loin : les dimensions peuvent être partagées entre différents cubes, elle peuvent reposer sur des clauses SQL passées « in line », les indicateurs peuvent être natifs ou calculés. Par ailleurs, un virtual cube peut mapper deux autres cubes (très utile mais attentions au performances dans ce cas !!). Voici un exemple de fichier de définition d’un cube, assez simple : Code :
A noter que Pentaho met à disposition un générateur de cube graphique. A éviter absolument car il est en version 0.7, instable et surtout non abouti pour des cubes impliquant plus d’une table … Pour autant l’outil est prometteur et je pense que la prochaine release majeure (1.x) devrait frapper très fort. Parlons maintenant de l’accès aux données. Cet accès est réalisé au travers d’un librairie complémentaire qui s’appelle JPivot. Son but est d’interpréter les données renvoyées par le moteur Mondrian (système de coordonnées X, Y, Z … avec les indicateurs au milieu) et d’en assurer l’affichage avec tous les attributs graphiques souhaités (passés via le MDX). A noter que sur le projet actuel dont j’ai la charge, je n’utilise pas JPivot mais remets complètement en forme les données retournées (contrainte interne au projet). Je gagne donc un peu en performances (pas d’interprétation JPivot). La visualisation s’effectue sous un browser web, tout comme la navigation (drill down, up, through, slicing …) et l’écriture de queries MDX personnalisées. A noter que l’interface livrée est standard, dans le cas d’une intégration à un projet web existant (mon cas actuel), il faudra utiliser le SDK livré afin de développer la greffe (SDK très bien documenté). Voici deux aperçus, générés respectivement avec JRubik et JPivot, en phase de développement des queries MDX sur un cube Mondrian.
Les performances, parlons en. De nombreuses personnes se plaignent des performances, cela est fréquent. Cependant, si l’on regarde de plus près le mode de fonctionnement et l’architecture de ces plaignants, on s’aperçoit très souvent qu’ils font tous les mêmes erreurs :
Dans mon cas précis, voici ce que cela donne :
Coté MDX, Mondrian a la bonne idée d’intégrer pratiquement toutes les fonctions classiques que l’on retrouve par ailleurs (dont le fameux yeartodate et le paralleperiod !!). Coté tips et tricks, là aussi les amateurs vont être servis ! En voici un croustillant au hasard (presque) : Lors du passage d’un mode de fonctionnement « full Mondrian » vers un mode XML/A, il faut renomer les tags « Dimension name » en « Dimension caption » dans les fichiers XML de définition des cubes. Cela ne vous dira surement rien pour l’instant, mais sachez juste que ce trick n’est pas documenté et a lui-même surpris les mainteneurs du projet qui ont validé le phénomène. Avis sur Mondrian : très bon produit, qui a pris le parti du ROLAP et du système sollicitant le cache. Le développement peut paraitre un peu contraignant et lourd à première vue mais il devient facile dès lors que l’on s’entoure d’autres produits complémentaires tels que JRubik pour le codage des ordres MDX ou XML Marker pour l’édition et la manipulation des fichiers XML (tous deux open source). Lors du passage en production de Mondrian, de mon coté, des développeurs m’ont remonté que certaines libs intégrées commencent à dater et sont en release dépassées mais rien à signaler à part cela. Dès lors que l’on joue avec le cache pour y faire monter au maximum les données, on dispose de bonnes performances. Ne pas oublier d’optimiser au mieux les structures de données sources, la majeure partie des efforts est d’ailleurs à porter à ce niveau. Attention au mode XML/A, qui nécessite quelques tâtonnements avant de fonctionner idéalement. Prévoir aussi eu peu de développement web si l’on souhaite intégrer les fonctionnalités de JPivot au sein d’une application déjà existante. Mot de la fin : J’espère que ce retour d’expérience vous a plu et surtout vous éclairera pour d’éventuels choix. Je n’ai pas pu tout consigner, car il y a tellement à dire, aussi n’hésitez pas à me poser vos questions, qu’elles soient précises ou génériques. N'hésitez pas non plus à me bacher si j'ai écrit une quelconque bétise. Autre lieu qui pourrait vous intéresser, mon blog (http://open-bi.blogspot.com). Je ne vous envois pas là bas pour générer du traffic, rassurez vous, mais vous y trouverez un retour similaire avec en plus des snapshots. A noter qu’à l’avenir je m’efforcerai de maintenir un parallèle entre mon blog et developpez.com … |
||
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2003 Messages : 92 ![]() |
Bonjour,
tout d'abord un grand merci pour cette critique des différents produits relatif au monde des entrepôt de données. Ayant à travailler autour des mêmes problématiques dans le cadre d'une administration de l'état, je suis heureux de voir que tu partages les mêmes points de vue sur certains produits open source. Je suis surpris qu'à aucun moment tu ne fais allusion à OPENI. Est ce voulu ? L'as tu testé ? Est ce à ton avis un produit valable actuellement ? Eric |
|
|
00
|
|
|
#11 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Citation:
OPENI est un projet valable et l'effort d'intégration qu'ils poursuivent est louable (et nécessaire à des fins de cohésion, ce qui manque parfois dans le libre, tous domaines confondus). Leur approche, par exemple, orientée utilisateur final / analyste de données (plutôt que développeur BI) est admirable et à encourager !! Pour autant, et dans le contexte vécu actuellement, OPENI m'est plus apparu comme une autre compilation de briques déjà connues :
D'autre part, la partie partie serveur d'application et rendu final ne me sont d'aucune utilité car refondue sur SunOne dans mon contexte. Attention, je ne veux pas que mon avis passe pour arbitrairement négatif :
|
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 1 ![]() |
Je travaille avec mondrian&Jpivot pour mon sujet de PFE.
pour les tools déja choisiesJe voudrais bien savoir est cela est possible: je suppose : Scénario : lors de l'exécution d'une transformation avec kettle, une erreur s'est déclenchée avant la fin de la transformation, donc l'arrêt de la transformation en cours. Conséquence : des données ont étè déjà insérées dans ma table target, sans qu'une transformation aboutisse à sa fin. Question : est ce que ce cas est toléré pour la réalisation des datawarehouse? Merci |
|
|
00
|
|
|
#13 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Citation:
L'architecture décisionnelle doit mettre à disposition des données valides, vérifiées et cohérentes. Tout état intermédiaire, c'est à dire incohérent, n'a pas lieu d'être. Au delà de tes jobs d'alimentation et de transformation, il faut prévoir un contrôle qualité des données. Si ce contrôle passe, alors l'entrepôt peut être ouvert aux requêtes et analyses de tes clients. |
|
|
|
00
|
|
|
#14 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2003 Messages : 92 ![]() |
Bonjour,
dans d'un de nos projet je tente d'utiliser JPIVOT pour accéder via Xmla à un serveur Mondrian. Je rencontre des problème avec XMLA : - je ne peux pas lancer de requetes via XMLA sur un cube alors meme que je peux interroger le meme cube à partir des composants jpivot intégrés au serveur mondrian - mon 2ème problème concerne les caractères spéciaux, comme les caractères accentués en Francais par ex. . Sont ils à proscrire totalement du schema mondrian (XML) ? Si oui comment faire apparaître du francais avec caractères accentués dans les noms de membres comme "Tous les ééé" ? Eric |
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 3 ![]() |
Bonjour.
J'ai lu avec intérêt votre discussion à propos de mondrian et des outils d'exploration de cubes. Sachez que si JPivot est fourni avec Pentaho, l'éditeur ne le soutient pas et le projet n'est plus appelé à évoluer. C'est dans cet optique que nous développons FreeAnalysis, un explorateur de cube capable de se connecter aux cubes Mondrian et XMLA. Celui ci est disponible sur SourceForge : http://sourceforge.net/projects/freeanalysis/ Actuellement il est décliné en 2 versions, un client lourd Java (Eclipse RCP) et une application Web déployable sous JBoss (mais il devrait pouvoir l'être sur n'importe quel conteneur de servlet ou serveur applicatif). Un composant Pentaho a également été développé afin de permettre l'appel à FreeAnalysisWeb depuis des xactions. Je me ferais une joie de vous fournir du support si vous souhaitez tester ces produits et que vous rencontrez de quelconques difficultés, ou tout simplement si vous souhaitez plus d'informations à ce sujet. Ronan Dunklau, développeur FreeAnalysisWeb |
|
|
00
|
|
|
#16 | ||
|
Nouveau Membre du Club
![]() Inscription : septembre 2003 Messages : 92 ![]() |
Citation:
Je suis d'accord pour dire que Jpivot ne bouge pas beaucoup mais de là à dire que ca ne va jamais plus évoluer y'a une grosse marge ! Citation:
L'approche Jpivot m'a paru intéressante principalement car c'est facile à intégrer dans une appli J2EE existante (une appli JSF dans mon cas). Est ce que FreeAnalysis offre cette possibilité ? Eric |
||
|
|
00
|
|
|
#17 | |
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Citation:
Et là, on accélère beaucoup les affichages ... |
|
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2003 Messages : 92 ![]() |
Merci pour cette précision.
Mais cela suppose d'avoir à dispo une taglib qui permet d'attaquer les schema mondrian dans l'appli J2EE. Que fait on quand on ne possède pas cette taglib ? D'autre part tu sembles dire que la couche JPivot introduit des problèmes de performance. Me trompe je ? Eric |
|
|
00
|
|
|
#19 | ||
|
Nouveau Membre du Club
![]() Inscription : septembre 2005 Messages : 74 ![]() |
Citation:
Citation:
Vu que je ne passe pas par JPivot, mais par une taglib très réduite et compacte, oui je gagne en performances (une couche de moins). Je reconnais, et cela n'engage que moi et dans la limite de ce que j'ai pu réaliser, que JPivot n'est pas forcément un exemple de rapidité. D'autre part, j'ai fait examiner JPivot par un de mes expert Java J2EE, et il m'a été rapporté que les certaines des libs utilisées étaient deprecated, abandonnées ou en versions très mineures ... Au final, JPivot reste une lib très utile, et "qui fait le job" dès que l'on veut un rendu graphique réussi et sexy en sortie de Mondrian. Je l'utilise sur d'autres projets. |
||
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : mai 2008 Messages : 2 ![]() |
Bonjour tout le monde
bon je vais déterrer un peu ce post extremement intéressant avec lequel j'ai compris bcp bcp de chose! je voulais savoir comment voir justement ce jeu de donnée renvoyé par mondrian à Jpivot? pourrait on dire que mondrian est finalement comme un SGBD en ROLAP mais pour des cubes? dernière question pourrait on mettre JPivot directement en amont d'une base de donnée relationnelle normal (forme normalisée, là je sens qu'on va me taper )??je suis un bon petit newbie dans le domaine et je me forme tout seul car j'ai envie de m'orienter justement dans ce domaine dans mes études! Salutations marocaines et merci d'avance!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com