Christophe Grand
Une introduction à Clojure qui met l’accent sur la programmation par valeurs.
Sans elle, pas de programmes plus simples à “faire tenir dans sa tête”, pas de gestion saine des états et encore moins de programmation concurrente !
http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/clojure.html
Montrer la mécanique de Scrum en l'appliquant à la session elle-même. Comme cette mécanique est mise en œuvre avec iceScrum, la session permet également de présenter un outil Open Source dédié à Scrum. Le backlog utilisé contient des sujets autour de Scrum et de l’agilité. C’est interactif : les participants sont invités à proposer des sujets pour compléter le backlog initial défini par les animateurs, à choisir ceux qui les intéressent le plus et à dire si un sujet (une "story") est terminé.
Par Claude Aubry (Aubry Conseil) & Vincent Barrier (iceScrum Technologies)
Durant ce laboratoire, nous allons réaliser un audit sécurité d'une application Web Open Source. L'objectif technique est de dresser un rapport complet, et d'assimiler toutes les phases du travail d'enquête : analyse boîte noire, analyse à code ouvert, recensement des vulnérabilités (XSS, injections, dévoilement, etc), recommandations de renforcement, priorisation des tâches. Toutes les compétences seront mises à l'épreuve dans cet excercice complexe.
Nous travaillerons sur une application réelle : (Nom de l'application à venir ultérieurement). Le laboratoire se terminera avec la remise du rapport aux auteurs de l'application pour qu'ils puissent avoir un regard extérieur sur le niveau de sécurité de l'application.
Montrer la mécanique de Scrum en l'appliquant à la session elle-même. Comme cette mécanique est mise en œuvre avec iceScrum, la session permet également de présenter un outil Open Source dédié à Scrum. Le backlog utilisé contient des sujets autour de Scrum et de l’agilité. C’est interactif : les participants sont invités à proposer des sujets pour compléter le backlog initial défini par les animateurs, à choisir ceux qui les intéressent le plus et à dire si un sujet (une "story") est terminé.
Par Claude Aubry (Aubry Conseil) & Vincent Barrier (iceScrum Technologies)
Durant ce laboratoire, nous allons réaliser un audit sécurité d'une application Web Open Source. L'objectif technique est de dresser un rapport complet, et d'assimiler toutes les phases du travail d'enquête : analyse boîte noire, analyse à code ouvert, recensement des vulnérabilités (XSS, injections, dévoilement, etc), recommandations de renforcement, priorisation des tâches. Toutes les compétences seront mises à l'épreuve dans cet excercice complexe.
Nous travaillerons sur une application réelle : (Nom de l'application à venir ultérieurement). Le laboratoire se terminera avec la remise du rapport aux auteurs de l'application pour qu'ils puissent avoir un regard extérieur sur le niveau de sécurité de l'application.
30 slides pour apprendre à suivre les développements d'un projet web et le recetter :
Le contexte
L'importance du lotissement
La gestion des relations avec le client
La documentation du projet
Les tests
Les référentiels de test
Fonction, cas d'utilisation & tests
La documentation de la recette
Mantis
Customiser Mantis
Automatisation des tests fonctionnels avec Selenium
Déroulement de la recette
Démarche
Tâches
Revue de tickets
Et ça continu encore et encore…
Redmine
Concevoir des piles logicielles entreprises et des applications java professionnelles en utilisant la puissance de l'inversion de contrôle avec nuun.io.
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?soft-shake.ch
Sascha Corti
Just a year after Windows Phone 7 was released to the market, Microsoft is updating the already widely popular platform to a new release called “Mango”, which adds a lot of highly anticipated features, especially for developers.
This session will introduce you to what’s new in the Mango platform for you as a developer. Many samples will show you the latest additions including background agents, the new on-device database, how to make your application run in the background and how to create augmented-reality applications or create multiple live tiles per application, that can be easily updated from within the running app.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/windows-phone-7-mango.html
Sascha Corti
With Internet Explorer 9, Microsoft has entered the league of HTML 5 browsers and with its active participation in the W3C working groups, the company proves its engagements towards the new and emerging standards. Developers however are often left wondering where the boundaries are drawn between HTML5 web site, plug-in based rich internet application and smart client or “app”.
This session intends to answer this question and uses many examples to show you some of the most important enhancements introduced by HTML5, CSS3, SVG, DOM, WOFF and ECMA script. You will learn now the standards are still evolving and how Microsoft is contributing.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/introduction-to-html5.html
soft-shake.ch - Domotique et robotique avec le micro Framework .NETsoft-shake.ch
Jean-Claude Armici and Philippe Schutz
Le micro Framework .NET offre un environnement de développement et d’exécution complet et innovant. Il offre une programmation de haut niveau, par exemple en C#, permettant de gérer toutes les possibilités offertes par diverses carte électroniques modernes et performantes.
Cette présentation a pour but de faire connaître le micro Framework .NET, son architecture et ses fonctionnalités, au travers d’exemples et de démonstrations dans les domaines de la domotique et de la robotique. La programmation, dans un environnement standard, ainsi que le matériel utilisé, très abordable à tous les points de vue, devraient permettre à chacun de s’initier sans peine à l’utilisation de l’informatique embarquée.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/domotique-et-robotique-avec-le-micro-framework-NET.html
soft-shake.ch - JBoss AS 7, la révolutionsoft-shake.ch
Alexis Hassler
JBoss AS 7 est sorti pendant l’été 2011. Cette version est une véritable révolution pour tous les utilisateurs JBoss : temps de démarrage et de déploiement record, techniques d’administration renouvelées, configuration simplifiée et plus expressive,…
Dans cette présentation, j’explique ces nouveautés et je les montre avec des vrais morceaux de ligne de commande.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/13/jboss.html
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch
Julien Ponge
This talk introduces part of the Java SE 7 novelties. The fork/join framework aims at making parallel programming simpler, while Project Coin brings a set of subtle yet useful changes to the Java programming language.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/java7.html
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch
Alexis Hassler
Avec les EJB 3, on a beaucoup mis en avant leur caractère POJO qui facilite la mise en oeuvre de tests unitaires ainsi que le conteneur autonome pour des tests d’intégration. On a vite constaté que ces possiblités étaient limitée et qu’ils manquait un outil dans cet ensemble.
Les équipes de JBoss nous proposent Arquillian. Cet outil est capable de piloter les serveurs d’applications, d’y déployer des archives et de tester toute sorte de composant JavaEE dans leur jus, avec un effort minimal.
Cette session est très pratique, elle montre comment utiliser Arquillian pour les tests d’intégration CDI, EJB, JPA, sur JBoss, Glassfish et Tomcat.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/arquillian.html
soft-shake.ch - Un zeste d’Erlang dans le shaker!soft-shake.ch
Dominic Williams & Fabrice Nourisson
Les technologies logicielles se multiplient. Il faut savoir combiner les forces de plusieurs langages et outils. Erlang est la seule technologie conçue spécifiquement pour tirer parti très simplement des architectures multi-coeur et en cluster. Cette présentation vous invite à ajouter cet ingrédient à votre cocktail.
Sommaire:
- Aperçu du langage.
- Démo de code, en TDD et en binôme, avec du refactoring et de la mise à jour de code à chaud.
- Points forts, points faibles, domaines et contextes adaptés.
- Ecosystème (références, produits).
- Cas d’étude: chat online de Facebook.
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/13/un-zeste-d-erlang-dans-le-shaker.html
soft-shake.ch - Déploiement continu sur le cloud avec SlipStreamsoft-shake.ch
Marc-Elian Begin
Le passage en production de toute application nécessite de franchir une série d’étapes - p. ex. construction, testes unitaires, déploiement en environnement de certification, testes fonctionnels, déploiement en production, maintenance, mise-à-jour). Ces étapes sont souvent, à l’heure actuelle, manuelles et donc prônes à l’erreur.
De plus, dans un contexte agile, ou les équipes de développement sont amenées à ‘releaser’ souvent, ce besoin de passer en production crée en goulot d’étranglement important et peut être la source de stresses et frictions importantes.
Avec l’avènement du cloud, de la virtualisation et des services en ligne (SaaS), une nouvelle génération de produits et services permet d’automatiser considérablement la chaine de production logiciel, permettant de déployer en continue et à la demande, des systèmes multi-tiers, pour créer des environnements de développement et testes proches de la production et ce en quelques minutes.
Cette session propose un workshop, ou les participants pourront ‘apprendre en faisant’, ou la théorie et la pratique s’alternera pour permettre aux participants de créer et déployer une application sur un environnement de cloud, par petites étapes et de la tester.
Cette session utilisera SlipStream, une application développée par SixSq et un cloud basé sur StratusLab, une solution open source européenne de cloud IaaS.
Venez participer avec ou sans laptop !!
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/12/deploiement-continu-sur-le-cloud-avec-slipstream.html
Mathilde Lemée & Romain Maton
La théorie, c’est bien, la pratique … aussi !
Venez nous rejoindre pour découvrir les profondeurs de Node.js !
Nous nous servirons d’un exemple pratique pour vous permettre d’avoir une premiere experience complete autour de Node.js et de vous permettre de vous forger un avis sur ce serveur Javascript qui fait parler de lui !
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/01/hands-on-nodejs.html
soft-shake.ch - De Hermes RUP à Hermes Scrumsoft-shake.ch
Alexandre Cuva
Retour d’expérience à l’Administration Cantonale sur la mise en place de Scrum dans une équipe de maintenance évolutive avec des procédures de gestion de projet Hermes RUP et des stratégies de test TMap.
Nous allons couvrir les différentes étapes de l’évolution de l’équipe SCRUM dans un monde standard. Les problèmes rencontrés et les solutions que nous avons trouvées.
“YES WE CAN !!!”
http://soft-shake.ch/2011/en/conference/sessions.html?key=hermes
soft-shake.ch - Stewardship et motivationsoft-shake.ch
Thierry Cros
L’auto-organisation est à la base des pratiques agiles.
Nous verrons lors de cet atelier les pratiques agiles qui vous permettent de véritablement vous auto-organiser.
Nous reviendrons aux bases de l’agilité : responsabilité et hédonisme.
http://soft-shake.ch/2011/en/conference/sessions.html?key=stewardship
soft-shake.ch - Agile qu'es aco : scrum xp leansoft-shake.ch
Thierry Cros
Aujourd’hui l’agilité est “mainstream”. Comment s’y retrouver parmi les innombrables présentations, retours d’expérience qui se réclament de l’agilité ?
Cette présentation vous propose un bref panorama de l’agilité, depuis ses débuts historiques jusqu’aux évolutions actuelles. Vous allez donc acquérir les informations qui vous permettront de vous forger viotre propre opinion et discerner ainsi ce qui est véritablement agile.
http://soft-shake.ch/2011/conference/sessions/agility/2011/09/23/agilte-kesaco.html
30 slides pour apprendre à suivre les développements d'un projet web et le recetter :
Le contexte
L'importance du lotissement
La gestion des relations avec le client
La documentation du projet
Les tests
Les référentiels de test
Fonction, cas d'utilisation & tests
La documentation de la recette
Mantis
Customiser Mantis
Automatisation des tests fonctionnels avec Selenium
Déroulement de la recette
Démarche
Tâches
Revue de tickets
Et ça continu encore et encore…
Redmine
Concevoir des piles logicielles entreprises et des applications java professionnelles en utilisant la puissance de l'inversion de contrôle avec nuun.io.
soft-shake.ch - Windows Phone 7 „Mango“ – what’s new for Developers?soft-shake.ch
Sascha Corti
Just a year after Windows Phone 7 was released to the market, Microsoft is updating the already widely popular platform to a new release called “Mango”, which adds a lot of highly anticipated features, especially for developers.
This session will introduce you to what’s new in the Mango platform for you as a developer. Many samples will show you the latest additions including background agents, the new on-device database, how to make your application run in the background and how to create augmented-reality applications or create multiple live tiles per application, that can be easily updated from within the running app.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/windows-phone-7-mango.html
Sascha Corti
With Internet Explorer 9, Microsoft has entered the league of HTML 5 browsers and with its active participation in the W3C working groups, the company proves its engagements towards the new and emerging standards. Developers however are often left wondering where the boundaries are drawn between HTML5 web site, plug-in based rich internet application and smart client or “app”.
This session intends to answer this question and uses many examples to show you some of the most important enhancements introduced by HTML5, CSS3, SVG, DOM, WOFF and ECMA script. You will learn now the standards are still evolving and how Microsoft is contributing.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/introduction-to-html5.html
soft-shake.ch - Domotique et robotique avec le micro Framework .NETsoft-shake.ch
Jean-Claude Armici and Philippe Schutz
Le micro Framework .NET offre un environnement de développement et d’exécution complet et innovant. Il offre une programmation de haut niveau, par exemple en C#, permettant de gérer toutes les possibilités offertes par diverses carte électroniques modernes et performantes.
Cette présentation a pour but de faire connaître le micro Framework .NET, son architecture et ses fonctionnalités, au travers d’exemples et de démonstrations dans les domaines de la domotique et de la robotique. La programmation, dans un environnement standard, ainsi que le matériel utilisé, très abordable à tous les points de vue, devraient permettre à chacun de s’initier sans peine à l’utilisation de l’informatique embarquée.
http://soft-shake.ch/2011/conference/sessions/microsoft/2011/09/06/domotique-et-robotique-avec-le-micro-framework-NET.html
soft-shake.ch - JBoss AS 7, la révolutionsoft-shake.ch
Alexis Hassler
JBoss AS 7 est sorti pendant l’été 2011. Cette version est une véritable révolution pour tous les utilisateurs JBoss : temps de démarrage et de déploiement record, techniques d’administration renouvelées, configuration simplifiée et plus expressive,…
Dans cette présentation, j’explique ces nouveautés et je les montre avec des vrais morceaux de ligne de commande.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/13/jboss.html
soft-shake.ch - Java SE 7: The Fork/Join Framework and Project Coinsoft-shake.ch
Julien Ponge
This talk introduces part of the Java SE 7 novelties. The fork/join framework aims at making parallel programming simpler, while Project Coin brings a set of subtle yet useful changes to the Java programming language.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/java7.html
soft-shake.ch - Tests d'intégration JavaEE avec Arquilliansoft-shake.ch
Alexis Hassler
Avec les EJB 3, on a beaucoup mis en avant leur caractère POJO qui facilite la mise en oeuvre de tests unitaires ainsi que le conteneur autonome pour des tests d’intégration. On a vite constaté que ces possiblités étaient limitée et qu’ils manquait un outil dans cet ensemble.
Les équipes de JBoss nous proposent Arquillian. Cet outil est capable de piloter les serveurs d’applications, d’y déployer des archives et de tester toute sorte de composant JavaEE dans leur jus, avec un effort minimal.
Cette session est très pratique, elle montre comment utiliser Arquillian pour les tests d’intégration CDI, EJB, JPA, sur JBoss, Glassfish et Tomcat.
http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/arquillian.html
soft-shake.ch - Un zeste d’Erlang dans le shaker!soft-shake.ch
Dominic Williams & Fabrice Nourisson
Les technologies logicielles se multiplient. Il faut savoir combiner les forces de plusieurs langages et outils. Erlang est la seule technologie conçue spécifiquement pour tirer parti très simplement des architectures multi-coeur et en cluster. Cette présentation vous invite à ajouter cet ingrédient à votre cocktail.
Sommaire:
- Aperçu du langage.
- Démo de code, en TDD et en binôme, avec du refactoring et de la mise à jour de code à chaud.
- Points forts, points faibles, domaines et contextes adaptés.
- Ecosystème (références, produits).
- Cas d’étude: chat online de Facebook.
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/13/un-zeste-d-erlang-dans-le-shaker.html
soft-shake.ch - Déploiement continu sur le cloud avec SlipStreamsoft-shake.ch
Marc-Elian Begin
Le passage en production de toute application nécessite de franchir une série d’étapes - p. ex. construction, testes unitaires, déploiement en environnement de certification, testes fonctionnels, déploiement en production, maintenance, mise-à-jour). Ces étapes sont souvent, à l’heure actuelle, manuelles et donc prônes à l’erreur.
De plus, dans un contexte agile, ou les équipes de développement sont amenées à ‘releaser’ souvent, ce besoin de passer en production crée en goulot d’étranglement important et peut être la source de stresses et frictions importantes.
Avec l’avènement du cloud, de la virtualisation et des services en ligne (SaaS), une nouvelle génération de produits et services permet d’automatiser considérablement la chaine de production logiciel, permettant de déployer en continue et à la demande, des systèmes multi-tiers, pour créer des environnements de développement et testes proches de la production et ce en quelques minutes.
Cette session propose un workshop, ou les participants pourront ‘apprendre en faisant’, ou la théorie et la pratique s’alternera pour permettre aux participants de créer et déployer une application sur un environnement de cloud, par petites étapes et de la tester.
Cette session utilisera SlipStream, une application développée par SixSq et un cloud basé sur StratusLab, une solution open source européenne de cloud IaaS.
Venez participer avec ou sans laptop !!
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/12/deploiement-continu-sur-le-cloud-avec-slipstream.html
Mathilde Lemée & Romain Maton
La théorie, c’est bien, la pratique … aussi !
Venez nous rejoindre pour découvrir les profondeurs de Node.js !
Nous nous servirons d’un exemple pratique pour vous permettre d’avoir une premiere experience complete autour de Node.js et de vous permettre de vous forger un avis sur ce serveur Javascript qui fait parler de lui !
http://soft-shake.ch/2011/conference/sessions/incubator/2011/09/01/hands-on-nodejs.html
soft-shake.ch - De Hermes RUP à Hermes Scrumsoft-shake.ch
Alexandre Cuva
Retour d’expérience à l’Administration Cantonale sur la mise en place de Scrum dans une équipe de maintenance évolutive avec des procédures de gestion de projet Hermes RUP et des stratégies de test TMap.
Nous allons couvrir les différentes étapes de l’évolution de l’équipe SCRUM dans un monde standard. Les problèmes rencontrés et les solutions que nous avons trouvées.
“YES WE CAN !!!”
http://soft-shake.ch/2011/en/conference/sessions.html?key=hermes
soft-shake.ch - Stewardship et motivationsoft-shake.ch
Thierry Cros
L’auto-organisation est à la base des pratiques agiles.
Nous verrons lors de cet atelier les pratiques agiles qui vous permettent de véritablement vous auto-organiser.
Nous reviendrons aux bases de l’agilité : responsabilité et hédonisme.
http://soft-shake.ch/2011/en/conference/sessions.html?key=stewardship
soft-shake.ch - Agile qu'es aco : scrum xp leansoft-shake.ch
Thierry Cros
Aujourd’hui l’agilité est “mainstream”. Comment s’y retrouver parmi les innombrables présentations, retours d’expérience qui se réclament de l’agilité ?
Cette présentation vous propose un bref panorama de l’agilité, depuis ses débuts historiques jusqu’aux évolutions actuelles. Vous allez donc acquérir les informations qui vous permettront de vous forger viotre propre opinion et discerner ainsi ce qui est véritablement agile.
http://soft-shake.ch/2011/conference/sessions/agility/2011/09/23/agilte-kesaco.html
soft-shake.ch - Documentation et agilitésoft-shake.ch
Jean-François Jagodzinski
<br /><br />
La documentation est une question récurrente des organisations qui découvrent le mode de fonctionnement agile pour les projets.
<br /><br />
Les bases du manifeste Agile “un logiciel opérationnel plutôt qu’une documentation exhaustive” ainsi que le fait de privilégier l’accueil du changement perturbent la logique actuelle dont les fondations reposent avant tout sur la documentation.
Le but de cette présentation est de répondre aux interrogations que suscite la logique Agile. La documentation ne disparaît pas, c’est son rôle qui change. Sa forme, son contenu, son mode de production s’en trouvent affectés. En modifiant son point d’observation les choses deviennent plus claires.
http://soft-shake.ch/2011/conference/sessions/agility/2011/09/12/Documentation-et-ailite.html
soft-shake.ch - Agilité = discipline et rigueur ?soft-shake.ch
Christian Lapointe
L’Agilité. Liberté pour les uns, chaos pour les autres. La liberté de choisir comment on veut travailler vient avec la responsabilité de livrer ce que nous promettons. La réussite d’un projet Agile demande de la discipline et de la rigeur. Cela vous semble t’il aller à l’encontre de la définition que vous avez de l’Agilité?
Nous allons jeter un coup d’œil sur certaines perceptions que les gens ont de l’Agilité. Celles où ont entends :
“Oui mais en Agile, vous ne faites pas de doc”
“Nous, on n’a pas de spec car nous sommes agiles”
“On livre une première version tout de suite même si elle est buggé. C’est pas grave, en Agile on itère”
soft-shake.ch - Transition agile & Accompagnement au changementsoft-shake.ch
Romain Couturier
Des pressions externes grandissantes poussent les entreprises à changer leurs organisations pour s’adapter et développer la réactivité. Les SI, eux aussi sont impactés. L’agilité devient une alternative pertinente pour accélérer la mise en œuvre de produits et sécuriser les développements.
Premier challenge : définir l’organisation agile adaptée au contexte de votre entreprise.
Mais au-delà, la réelle complexité réside dans l’implication des hommes à tous les échelons. L’évolution des habitudes de travail doit être couplée à l’évolution des habitudes de conception des solutions informatiques. Je vous propose un premier cadre de réflexion sur la transition organisationnelle nécessaire au déploiement de l’agilité.
http://soft-shake.ch/2011/conference/sessions/agility/2011/08/31/transition-agile-et-accompagnement-au-changement.html
soft-shake.ch - Agilité et Testing: de l'intérêt d'une démarche structuréesoft-shake.ch
Julien Behr
Comment réconcilier l’approche des tests structurés et les démarches Agile.
http://soft-shake.ch/2011/en/conference/sessions.html?key=agiliteettesting
5. La non-introduction
au langage
• syntaxe
• listes de fonctions
• gestion des états
• interop Java
• macros
• valeurs/principes de Clojure
jeudi 6 octobre 11
6. Moi, je
• Développeur indépendant
• Contributeur Clojure
• Co-auteur de Clojure Programming
jeudi 6 octobre 11
7. Début 2008
• Fin d’un projet traumatique
• Asynchrone
• Concurrent
• Rhino (JS/JVM)
• Décidé à trouver un meilleur langage
jeudi 6 octobre 11
12. Sain et robuste
• Un langage qui dit non, non, non...
• On ne transige pas avec les principes !*
*Y compris le principe de réalité :-)
• Une implémentation Java «bizarre»
• Style fonctionnel poussé
• Facilement auditable
jeudi 6 octobre 11
13. Principe de réalité
Respecter le principe de réalité consiste à
prendre en compte les exigences du
monde réel, et les conséquences de ses actes. Le
principe de réalité désigne avant tout la possibilité
de s'extraire de l'hallucination, du rêve, dans
lesquels triomphe le principe de plaisir et
d'admettre l'existence d'une réalité,
insatisfaisante.
jeudi 6 octobre 11
14. Principe de réalité (2)
• JVM/CLR/JS
• Impur aux entournures
• Numériques
• Pas de précision infinie par défaut
• Mais pas de primitives qui débordent non
plus
• Laziness non-stricte
jeudi 6 octobre 11
15. Le coeur
• Programmation fonctionnelle
• Valeurs (immuables)
• Structures de données persistantes*
*pas dans le sens mémoire morte
jeudi 6 octobre 11
16. Persistance
• Après mise à jour d’une collection,
l’ancienne valeur de la collection persiste
• Deux objets collections : «avant» & «après»
(def m {:a 1})
(assoc m :b 2)
⇒ {:a 1, :b 2}
m
⇒ {:a 1}
jeudi 6 octobre 11
17. Persistance (2)
• Efficace
• Pas de copies naïves
• Partage de structure
• Conseil de lecture
(ou sa thèse)
jeudi 6 octobre 11
18. Prog. Fonctionnelle
• Mauvais focus
• Les données sont centrales
• Programmation orientée données ?
orientée valeurs ?
jeudi 6 octobre 11
19. Data, data, data !
• Inexorablement sortent du process :
• disque, réseau, etc.
• Espérance de vie supérieure au code
• Transparentes
• Structurantes pour le code
jeudi 6 octobre 11
20. Data, data, data ! (bis)
Show me your code and conceal your data
structures, and I shall continue to be mystified.
Show me your data structures, and I won’t usually
need your code; it’ll be obvious.
(Frederic Brooks modernisé par ESR)
jeudi 6 octobre 11
21. Données > Code
• Le code (fonctions, méthodes) sérialise mal
• beaucoup de contexte (versions)
• opacité
• complexité d’implem des runtimes
• sensibilité (fragilité) / détails d’implem
jeudi 6 octobre 11
22. Les données d’abord
• Types de données simples :
• entiers, décimaux, flottants, booléen,
identifiants, chaînes
• Types de données composites :
• listes, vecteurs, maps*, ensembles
*aka hashmaps, hashtables, dictionnaires...
jeudi 6 octobre 11
23. Heureux les simples
• Facilement sérialisable
• Facilement mappable
• dans une BDD (SQL ou pas)
• en JSON
• etc.
• Facilement testable
jeudi 6 octobre 11
24. Avantages
• Penser les données d’abord facilite le
découplage
• in-process : entre libs, entre modules
• out-of-process : déjà vu
• Pas de classes, pas de dépendances !
• Immutabilité : pas de conflit d’ownership
jeudi 6 octobre 11
25. Inconvénients
• Simples objets = pas de validation
• La validation est ailleurs
• dans les traitements
• via un «middleware» (un wrapper quoi)
• en tant que pré et post-conditions
jeudi 6 octobre 11
26. Séparation
• En OO classique :
• données et traitements mélangés dans
une classe
• En Clojure :
• les données sont «bêtes»
• les traitements sont dans des fonctions
• potentiellement polymorphiques !
jeudi 6 octobre 11
27. interface = dialecte
• nouvelles méthodes = nouveaux mots
• généricité = mots communs
• réutilisabilité ↗ = nb interfaces ↘
jeudi 6 octobre 11
28. Exemple
• Le Web : massivement interopérable
• Une seule interface de 8* méthodes
• Nul besoin d’implémenter les 8 pour
bénéficier d’outils existants
*5 + OPTIONS, TRACE, CONNECT
jeudi 6 octobre 11
30. Ça tombe bien...
...c’est ce que fait Clojure !
jeudi 6 octobre 11
31. 3 abstractions cœurs
• La fonction
• La collection
• La séquence
jeudi 6 octobre 11
32. L’appel de fonction
• Le «POST» de Clojure
• peut tout faire
• communique peu l’intention
• Ok, ok, la parenthèse ouvrante est avant le
nom de la fonction
(f arg1 arg2) et non f(arg1, arg2)
jeudi 6 octobre 11
33. Les fonctions c’est pas
que des fonctions !
• Des collections aussi
• ({"ch" "Suisse", "fr" "France"} "ch")
⇒ "Suisse"
• (["a" "b" "c"] 2)
⇒ "c"
• Des mots clés aussi
• (:nom {:nom "Hickey", :prénom "Rich"})
⇒ "Hickey"
jeudi 6 octobre 11
34. Et encore des fonctions !
• Plusieurs niveaux de polymorphisme :
• fonctions simples
• méthodes de protocoles
• multi-méthodes
• predicate-dispatch (expérimental)
jeudi 6 octobre 11
35. Polymorphismes
• Méthodes de protocoles :
• ±interfaces Java mais rétroadaptables
• Multiméthodes :
• dispatch sur tous les arguments
• Predicate dispatch*
• dispatch ouvert sur tous les arguments
*Une simple librairie
jeudi 6 octobre 11
36. 3 abstractions cœurs
• La fonction
• La collection ⬅ Vous êtes ici
• La séquence
jeudi 6 octobre 11
37. Les collections
• Comme en HTTP
• beaucoup de méthodes : seq, conj,
count, disj, assoc, dissoc, get, nth, pop,
peek
• fréquences de support très différentes
jeudi 6 octobre 11
38. seq, conj, count
• seq : séquence (itérateur en mieux) sur la
collection
• conj : ajoute à la collection
• count : renvoie le nb d’éléments
jeudi 6 octobre 11
39. Les maps sont des
collections comme les autres
• collection d’entrées (couple clé-valeur)
(conj {:name "Soft-Shake.ch"} [:year 2011])
⇒ {:name "Soft-Shake.ch", :year 2011}
(seq {:name "Soft-Shake.ch", :year 2011})
⇒ ([:name "Soft-Shake.ch"] [:year 2011])
• les entrées sont aussi des collections
comme les autres...
jeudi 6 octobre 11
40. Les objets sont des
collections comme les autres
• Records : classes customs, ±beans
• Support de seq, count, conj, get, assoc,
dissoc
• Pas besoin d’API réflexive
• Pas besoin de getters/setters
jeudi 6 octobre 11
41. La preuve par l’exemple
(defrecord Point [x y])
(def p (->Point 0 1)) ; factory par défaut
(seq p)
⇒([:x 0] [:y 1])
(get p :y) ; ou (:y p) encore mieux
⇒1
(assoc p :x 2)
⇒#ch.soft_shake.Point{:x 2, :y 1}
jeudi 6 octobre 11
42. 3 abstractions cœurs
• La fonction
• La collection
• La séquence ⬅ Vous êtes ici
jeudi 6 octobre 11
43. Les séquences
• Vue séquentielle
• sur une collection
• Substituts aux itérateurs (en mieux)
• sur un traitement
• mort aux boucles !
• Un air de pipe unix
jeudi 6 octobre 11
45. Les séquences (2)
• Interface de liste chaînée
• premier et suivant (first & rest)
• Constructible
• pas besoin de commons.collections.iterators
ou Guava’s Iterators ou...
• Des collections comme les autres
jeudi 6 octobre 11
46. À la demande
• Évaluation paresseuse
• vers l’infini et au delà !
• traitement de gros volumes
• pas pour le contrôle d’exécution
jeudi 6 octobre 11
47. Media de traitement
• Intermédiaire de calcul
• Résultat concret
• Type «strict» (non paresseux)
• Effet de bord
• Concrétisation met la machine en
branle
jeudi 6 octobre 11
49. Coder en Clojure
• Données au centre
• Abstraire avec parcimonie
• Connaitre les 3 abstractions essentielles
• Changer ses habitudes
• Exercices avec une main dans le dos
jeudi 6 octobre 11