CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
Slides de la présentation "TA la découverte de Grand Central Dispatch" de la session des CocoaHeads Rennais du 21 avril 2011. Présentation assurée par Pierre Duchêne et Thomas Dupont, ingénieurs chez Niji
- Principe du multithreading.
- Classe Thread.
- Création et exécution d'un thread.
- Accès simultanés à une ressource.
- Synchronisation
- Etats d'un Thread
- Conseils pratiques
Chapitre 2 de la formation "Java avancé", qui est composée de :
1 - introspection et annotations
2 - programmation concurrente
3 - communications distantes
4 - administration et supervision avec JMX
5 - utilisation du code natif avec JNI
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
Slides de la présentation "TA la découverte de Grand Central Dispatch" de la session des CocoaHeads Rennais du 21 avril 2011. Présentation assurée par Pierre Duchêne et Thomas Dupont, ingénieurs chez Niji
- Principe du multithreading.
- Classe Thread.
- Création et exécution d'un thread.
- Accès simultanés à une ressource.
- Synchronisation
- Etats d'un Thread
- Conseils pratiques
Chapitre 2 de la formation "Java avancé", qui est composée de :
1 - introspection et annotations
2 - programmation concurrente
3 - communications distantes
4 - administration et supervision avec JMX
5 - utilisation du code natif avec JNI
PHP expose dans son espace utilisateur un large éventail de classes et de fonctions regroupées sous forme d'extensions (mysql, pdo, json, date, etc.). Il existe deux principales raisons qui généralement poussent un développeur à écrire une extension : permettre l'utilisation d'une libraire externe ou la performance. Toutefois, un tel développement peut s'avérer difficile dû au manque de documentation sur le sujet. Nous aborderons différents concepts de base sur le fonctionnement interne de PHP. Puis, nous discuterons de certains outils (GDB, Valgrind, etc.) et des ressources (Opengrok, Mailing list) qui vous permettrons de mieux comprendre le fonctionnement des extensions.
Si vous êtes développeur node.js vous vous confronterez tôt ou tard au développement d'addons natifs ... et à tout un lot de nouveaux problèmes : langage C++ en lui même, mais également API V8, build system ou dépendance aux versions de V8. Pourtant dès que vous avez besoins de multi-threading, d'accès aux ressources machine ou même simplement pour réutiliser des librairies existantes vous n'y coupez pas. Lors de ce talk vous découvriez comment le langage Rust grâce à Neon permet de rendre vos modules natifs "fast & safe", vous pourriez même prendre du plaisir à développer des modules natifs dorénavant
Présentation de points clés sur les blockchains Bitcoin et Ethereum. Ainsi que la preuve d'existence dans la blockchain.
ps: et quelques slides sur TheDAO
La technologie par chaînage de blocs ou "blockchain" fut utilisée au départ pour permettre la libre circulation d'une cryptomonnaie, le bitcoin, dans un environnement décentralisé avec la garantie qu'aucune escroquerie n'est possible. On a parlé à juste titre de révolution et compris qu'elle permettait de repenser entièrement notre modèle de société et en particulier notre façon de s'échanger de la valeur. Cependant, cette technologie souffre de défauts de structure particulièrement visibles dans le cadre de l'internet des objets à cause des très nombreuses micro-transactions potentielles. Pour résoudre ces problèmes, plusieurs solutions ont été proposées. Nous les passons en revue.
Les slide, de la présentation faite lors de la conférence LeanKanban FR 2013 afin de découvrir l'approche kanban de manière décalée.
L'article à l'origine de la présentation: http://jfallet.wordpress.com/2013/05/31/comment-jai-explique-le-fut-tire-a-mon-pere/
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Daniel Rehn
Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München im Modul "Angewandte Medien – Medienpraxis II: Online".
Skript vom 11.02.2013.
PHP expose dans son espace utilisateur un large éventail de classes et de fonctions regroupées sous forme d'extensions (mysql, pdo, json, date, etc.). Il existe deux principales raisons qui généralement poussent un développeur à écrire une extension : permettre l'utilisation d'une libraire externe ou la performance. Toutefois, un tel développement peut s'avérer difficile dû au manque de documentation sur le sujet. Nous aborderons différents concepts de base sur le fonctionnement interne de PHP. Puis, nous discuterons de certains outils (GDB, Valgrind, etc.) et des ressources (Opengrok, Mailing list) qui vous permettrons de mieux comprendre le fonctionnement des extensions.
Si vous êtes développeur node.js vous vous confronterez tôt ou tard au développement d'addons natifs ... et à tout un lot de nouveaux problèmes : langage C++ en lui même, mais également API V8, build system ou dépendance aux versions de V8. Pourtant dès que vous avez besoins de multi-threading, d'accès aux ressources machine ou même simplement pour réutiliser des librairies existantes vous n'y coupez pas. Lors de ce talk vous découvriez comment le langage Rust grâce à Neon permet de rendre vos modules natifs "fast & safe", vous pourriez même prendre du plaisir à développer des modules natifs dorénavant
Présentation de points clés sur les blockchains Bitcoin et Ethereum. Ainsi que la preuve d'existence dans la blockchain.
ps: et quelques slides sur TheDAO
La technologie par chaînage de blocs ou "blockchain" fut utilisée au départ pour permettre la libre circulation d'une cryptomonnaie, le bitcoin, dans un environnement décentralisé avec la garantie qu'aucune escroquerie n'est possible. On a parlé à juste titre de révolution et compris qu'elle permettait de repenser entièrement notre modèle de société et en particulier notre façon de s'échanger de la valeur. Cependant, cette technologie souffre de défauts de structure particulièrement visibles dans le cadre de l'internet des objets à cause des très nombreuses micro-transactions potentielles. Pour résoudre ces problèmes, plusieurs solutions ont été proposées. Nous les passons en revue.
Les slide, de la présentation faite lors de la conférence LeanKanban FR 2013 afin de découvrir l'approche kanban de manière décalée.
L'article à l'origine de la présentation: http://jfallet.wordpress.com/2013/05/31/comment-jai-explique-le-fut-tire-a-mon-pere/
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Daniel Rehn
Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München im Modul "Angewandte Medien – Medienpraxis II: Online".
Skript vom 11.02.2013.
Este documento ensina como criar um banco de dados, tabelas e inserir e exibir dados usando PHP e MySQL. Ele explica como usar o phpMyAdmin para criar um banco de dados e tabelas, e como escrever código PHP para conectar ao banco de dados, inserir dados em uma tabela de um formulário HTML, e exibir esses dados.
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
O documento apresenta um resumo de uma palestra sobre a ligação de uma aplicação Flex a um backend PHP usando AMFPHP. A palestra aborda os principais tópicos: 1) métodos de comunicação entre o frontend e backend; 2) explicação detalhada do Flash Remoting; 3) implementações open-source de Flash Remoting incluindo AMFPHP. A apresentação inclui um exemplo prático de como utilizar o AMFPHP para criar e recuperar dados de uma base de dados MySQL numa aplicação Flex.
O documento descreve as etapas para criar um sistema de contatos simples utilizando Java e banco de dados MySQL. Inicialmente, ele explica como criar o banco de dados e tabela no MySQL. Em seguida, apresenta classes como Conector para conexão com o banco, Contato para o modelo de dados e ContatoDAO para realizar operações no banco. Por fim, aborda o uso de JSP e JSTL para a camada de visualização.
Découvrez les bonnes pratiques, conseils et astuces concernant le développement, l'administration et l'architecture de Microsoft SQL Server 2008 et des versions antérieures ! Cette présentation est conçue aussi bien pour les administrateurs de base de données ou développeurs de Microsoft SQL Server que pour les DBAs occassionnels.
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IIDaniel Rehn
Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München // Medienpraxis III: Online / Social Media (Vorlesung II) #educationinthemaking
O documento fornece dicas para otimizar queries no MySQL, incluindo usar EXPLAIN para analisar planos de execução, analisar tabelas com ANALYZE TABLE, comparar colunas do mesmo tipo, isolar colunas indexadas em comparações, fornecer sugestões ao otimizador, esvaziar tabelas com TRUNCATE, escolher tipos de dados adequados e carregar dados de forma eficiente.
Este documento fornece instruções sobre como usar o NotORM, uma biblioteca PHP para trabalhar com dados no banco de dados de forma simples. Ele explica como instalar o NotORM, conectar-se ao banco de dados, inserir, consultar e relacionar dados entre tabelas. Além disso, mostra como personalizar consultas e usar recursos como junções e agregações.
O documento apresenta uma palestra sobre otimização de aplicações com o framework Zend. Resume os principais pontos abordados: 1) Introdução ao palestrante e seus trabalhos com PHP; 2) Conceitos de avaliação e análise de desempenho; 3) Demonstração de testes de desempenho em aplicação simples utilizando diferentes técnicas de cache e escalonamento com Gearman.
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Daniel Rehn
Vorlesung im Studiengang Sport-, Event- und Medienmanagement am Campus M21 in München im Modul "Angewandte Medien – Medienpraxis II: Online".
Skript vom 31. Januar 2013.
Ogury est la plateforme de data mobile qui permet d’accéder aux données comportementales des profils de plus de 400 millions de mobinautes répartis dans plus de 120 pays.
Une plateforme micro-services c’est cool et c’est à la mode … mais il y a aussi le revers de la médaille ! L’augmentation du traffic inter-services peut dégrader vos temps de réponses car les connexions HTTP sont lentes.
Cependant des solutions existent pour optimiser le trafic réseau, durant cette session, David et Carles vous parleront de la solution qu’ils ont expérimentée : gRPC.
David Caramelo, Développeur Craftsman passionné depuis 12 ans, actuellement Tech Lead full stack chez Ogury. David s'est forgé son expérience essentiellement dans des startups parisiennes comme Viadeo ou Ogury et dans des cabinets conseil IT comme Xebia.
Carles Sistaré, Architecte-Développeur dans les clouds, actuellement Tech Lead de la team Delivery et co-fondateur d’Ogury. Carles a évolué dans le monde de la AdTech en passant par Ad4Screen et en tant qu’amateur de l’open-source en tant que commiteur Node-Kafka et créateur du module grpc-promise.
.NET Microframework: du code, de l’électronique, de la robotiqueMicrosoft
Envie de se faire plaisir le soir ? Envie de faire vibrer des canards ? Envie de développer quelque chose de WAF et super Geek ? Alors, cette session est pour toi :-) .NET Microframework est une technologie open source permettant de réaliser des robots, des modules intelligents, le tout sans aucun OS. Cette session montra par des exemples concerts comment réaliser des automates et les piloter à travers des interfaces web. Exemple concret avec un arrosage automatique entièrement pilotable depuis l'autre bout du monde.
Modern DevOps - kill the bottleneck (part 2/2)Loic Ortola
Most Developers live in Wonderland, a place where resources are unlimited, failures don't happen and where we take naps inside giant mushrooms.
The reality is different. Bottlenecks, failures, latency... take the red pill and come down the rabbit hole with us.
What the common bottlenecks are, how to detect them, the usual optimizations, and a full-scale use-case based on Jawg Maps (part 2)
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
Votre mission, si vous l'acceptez : collecter chez chaque client 500 métriques par seconde sur un réseau Modbus, stocker plusieurs jours de données localement, et pousser des métriques sous échantillonnées dans le cloud. Les contraintes incluent la remontée des contextes de défaut, l’envoi de commande sécurisée depuis le cloud, l’isolation des données entre clients, la connexion temps réel via websocket, la gestion des coupures de courant et d’internet. Le système tourne sur une PINE64, avec une base de donnée open source française !
Venez voir comment "hacker" des objets de votre maison pour en faire des "objets connectés" en réutilisant vos compétences de développeur.
Des exemples de montages et de code seront présentés, entre autres :
- Comptage électrique (téléinfo)
- Monitoring de température (hacking de station météo radio)
- Contrôle d'équipements (Chauffage, VMC, Volets roulants, ...)
- RaspberryPi, BeagleBone Black et Arduino seront les principaux ingrédients.
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
Le langage C++ a toujours la réputation d’un langage complexe, demandant une rigueur de tous les instants et qui peut en rebuter plus d’un. Mais avec l’arrivée de la nouvelle norme C++11 et de son intégration dans Visual Studio 11 (et intégration partielle dans Visual Studio 2010), elle permet comme le souligne Herb Sutter, d’écrire désormais du code "Clean, Safe and Fast", nous passons à l'ère du C++ moderne.
Introduction à la programmation lock-free en C++11 au moyen des atomics. Présentation données par Cyril Comparon lors des rencontres C++ de Montpellier (novembre 2014).
Du 7 au 9 mai aura lieu la conférence Microsoft //Build, LA conférence des développeurs Microsoft.
A peine le temps de digérer les nombreuses sessions proposées par Microsoft que nos MVP vous présentent une synthèse des principales annonces.
L’« entreprise libérée », buzzword du moment, fait couler beaucoup d’encre ces dernières années. Libérée ? De qui, de quoi ? Mais que cache cette expression ?
Nous retracerons l’évolution de l’organisation des hommes et du management, pour s’intéresser à cette nouvelle forme d’organisation qui remet l’humain au centre de l’entreprise.
Quelles sont les caractéristiques de celle-ci ? Quelles pratiques diffèrent des entreprises classiques ? Et surtout comment faire pour devenir une entreprise libérée et pour quels bénéfices ?
Que vous soyez développeurs, managers, chefs de projet, Scrum Master, RH, commerciaux ou dirigeants, je vous invite à découvrir ce nouveau paradigme d’organisation et de management, qui veut réconcilier deux concepts a priori incompatibles : Bonheur et Travail. Alors, info ou intox ?
Amélioration continue, c'est l'affaire de tous !SOAT
Popularisée par Toyota dans les années 50, est au cœur du processus Agile. L’idée majeure est de se dire qu’il y a toujours moyen, quel que soit le processus utilisé, de le rendre plus performant. Tout processus, aussi optimal soit-il, s’inscrit dans un contexte évolutif et perd donc de son efficacité avec le temps s’il n’est pas continuellement revu ou amélioré.
Reste que dans l’univers informatique, on a trop souvent tendance à cantonner cette démarche aux seules équipes de développement alors qu’elle peut être élargie à toutes les fonctions stratégiques d’une organisation. Nous allons voir lors de cette conférence, comment élargir cette approche en y impliquant toutes les étapes d’un projet et en travaillant sur les interactions entre ses différents acteurs.
L’amélioration continue ne pouvant se réduire à une maîtrise optimisée des processus, nous verrons dans quelle mesure elle induit également une nouvelle politique de partage des connaissances pour faire émerger une véritable « intelligence collective ».
JAVA 8 : Migration et enjeux stratégiques en entrepriseSOAT
La sortie de Java 8 est une véritable révolution dont l’enjeu dépasse de loin la simple évolution d’un langage et de ses APIs. Rdv sur notre chaîne Youtube pour revoir la conférence :
Après une version 7 peu convaincante, la version 8 replace Java au premier rang des langages objets actuels.
En parfaite adéquation avec les besoins des projets et les possibilités offertes par les environnements matériels actuels, cette nouvelle version apporte une modernisation du langage et de ses API, un suivi des performances des processeurs et des améliorations de la JVM.
Quels sont les nouveaux concepts introduits par Java 8 ? En quoi les expressions lambdas et l’API Stream représentent une avancée majeure de la plateforme ? Quelle stratégie adopter pour migrer vers Java 8 en toute sécurité et en diminuant au maximum sa dette technique ?
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
Les systèmes distribués ont largement évolués ces 10 dernières années, passant d’énormes applications monolithiques à de petits containers de services, apportant plus de souplesse et d’agilité au sein des systèmes d’information.
Le terme « Architecture microservice » a vu le jour pour décrire cette manière particulière de concevoir des applications logicielles.
Bien qu’il n’y ait pas de définition précise de ce style d’architecture, elles ont un certain nombre de caractéristiques communes basées autour de l’organisation de l’entreprise, du déploiement automatisé et de la décentralisation du contrôle du langage et des données.
Seulement, développer ces systèmes peut tourner au véritable casse-tête. Je vous propose donc un tour des concepts et différentes caractéristiques de ce type d’architecture, des bonnes et mauvaises pratiques, de la création jusqu’au déploiement des applications.
3/3 : The path to CDI 2.0 - Antoine Sabot-DurandSOAT
Allez plus Loin avec CDI
En moins de 5 ans d’existence, Contexts and Dependency Injection (CDI) est devenue l’une des principale spécification de Java EE. Néanmoins, CDI est bien souvent perçu comme une simple solution d’injection de dépendance enrichie alors que cette spécification est bien plus riche que ça. Lors de cette présentation, après un rapide rappel des fonctionnalités de base de CDI, nous montrerons comment son utilisation avancée permet Java EE en intégrant des technologies legacy ou plus récent de manière naturelle. Nous finirons avec le travail en cours sur CDI 2.0 qui a commencé début septembre.
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
Allez plus Loin avec CDI
En moins de 5 ans d’existence, Contexts and Dependency Injection (CDI) est devenue l’une des principale spécification de Java EE. Néanmoins, CDI est bien souvent perçu comme une simple solution d’injection de dépendance enrichie alors que cette spécification est bien plus riche que ça. Lors de cette présentation, après un rapide rappel des fonctionnalités de base de CDI, nous montrerons comment son utilisation avancée permet Java EE en intégrant des technologies legacy ou plus récent de manière naturelle. Nous finirons avec le travail en cours sur CDI 2.0 qui a commencé début septembre.
Allez plus Loin avec CDI
En moins de 5 ans d’existence, Contexts and Dependency Injection (CDI) est devenue l’une des principale spécification de Java EE. Néanmoins, CDI est bien souvent perçu comme une simple solution d’injection de dépendance enrichie alors que cette spécification est bien plus riche que ça. Lors de cette présentation, après un rapide rappel des fonctionnalités de base de CDI, nous montrerons comment son utilisation avancée permet Java EE en intégrant des technologies legacy ou plus récent de manière naturelle. Nous finirons avec le travail en cours sur CDI 2.0 qui a commencé début septembre.
Javascript s’est depuis longtemps imposé comme le principal langage pour développer des écrans web dynamiques. L'émergence des SPA (Single Page Application) est en fait l'aboutissement logique du succès de ces outils au premier rang desquels on compte jQuery et AJAX.
AngularJS fait partie d’une nouvelle génération de frameworks qui propose d’aller plus loin afin d’avoir non seulement des SPA améliorant l’expérience utilisateur mais aussi un code mieux organisé, plus modulaire et donc facilement testable.
Au cours de cette soirée, vous verrez d’abord la manière dont AngularJS étend le HTML à travers les directives puis le binding bidirectionnel, ensuite, la programmation asynchrone avec AngularJS. Enfin pour finir, nous allons voir ces petits plus qui expliquent la popularité du framework : les filtres, l’injection de dépendance et les tests.
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014SOAT
Les applications sont de plus en plus interconnectées. Une architecture type WOA (Web Oriented Archiecture) et l’utilisation des micros-services nécessitent de faire de plus en plus appel à différents services web.
Comment composer un résultat à partir de ces différents services, sans avoir à ce soucier de l’ordre dans lequel les serveurs vont répondre ?
RxJava offre une manière élégante de faire de l’asynchrone et de la composition au sein de son application. David vous exposera les concepts de Rx (Reactive eXtension) avant de vous montrer une mise en application avec des exemples de code venant d’une application Android.
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...SOAT
Plus de 50% des internautes français utilisent un support mobile pour naviguer sur le web. Il est donc temps de repenser votre stratégie mobile et le Responsive Web Design, consistant à ne faire qu’un seul site adapté au périphérique qui l’affiche, constitue une approche possible.
Après une introduction à ses principes, nous verrons qu’au-delà des défis techniques, le RWD suppose de revoir entièrement le processus de développement d’un site web et les méthodes de travail des équipes, que ce soit en phase de conception ou lors des tests.
Cette conférence sera l’occasion de découvrir les nouveaux challenges à relever par vos équipes lors de la conception de vos prochains sites internet.
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
La vidéo de cette conférence est visible ici : http://youtu.be/T7r7UlSoe7k
La croissance continue du Web a accru la nécessité pour les applications Client/serveur de gérer la monté en charge et la performance. Heureusement, Java est livré avec les outils nécessaires pour créer des applications performantes, et scalables ! Les premières versions de Java incluent le support des communications réseau avec la jdk 1.4 qui a introduit l'API NIO. La nouvelle version, NIO 2, introduite dans Java 7, a été conçue pour permettre l'écriture asynchrone en réseau, Aujourd'hui, encore peu de gens s'intéressent au développement d'applications réseaux, car l'API Jdk reste complexe.
Netty est une bibliothèque Java pour l'écriture d'applications et de services réseau hautement concurrent et scalable. Netty est une API complétement asynchrone : l'Api vous propose une nouvelle façon de développer vos applications réseau en assurant un découplage entre votre logique métier et les traitements réseau grâce à son modèle basé sur une architecture "event-driven".
Dans cette conférence, vous comprendrez l'architecture de Netty, et comment des entreprises comme Twitter, Facebook, RedHat et autres l'utilisent pour répondre à leurs problématiques de communication réseau.
- le niveau : développeurs Java débutants et expérimentés
- la durée : 2h
Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril ...SOAT
Développer des applications iOS et Android avec C# grâce à Xamarin par Cyril Cathala
A l’ère des smartphones et tablettes, le développement multiplateforme se révèle être un challenge : quelle solution choisir et comment minimiser les coûts, tout en optimisant l’expérience utilisateur ?
Parmi les solutions disponibles sur le marché, Xamarin s’adresse aux développeurs C# pour la création d’applications compatibles avec Windows 8, iOS et Android. Son approche multiplateforme permet de développer des applications natives de qualité en mutualisant jusqu’à 75% de code entre les différents OS.
Ce petit déjeuner sera l’occasion de faire un tour d’horizon des outils du marché, d’apprécier toutes les possibilités offertes par Xamarin et d’en explorer les pistes pour aller plus loin.
Amazon Web Service par Bertrand Lehurt - 11 mars 2014SOAT
Attention, soirée spécial cloud computing!
IAAS, PASS, SAAS... Perdu avec autant d'acronyme qui représente des types de cloud computing?
Ça tombe bien, Bertrand Lehurt vous propose une soirée d'introduction à l'IAAS (Infrastructure As A Service) avec Amazon Web Services, suivi d'une séance les mains dans le cambouis.
Vous allez apprendre à déployer une petite application en utilisant les services nécessaires dans la jungle de ceux proposés (plus de 37). Au cours de la soirée, nous aborderons donc l'utilisation d'EC2, S3, ELB, EBS, Cloudfront et Auto scaling et les architectures types qui sont utilisées dans le cloud computing.
La vidéo de la présentation est visible ici : http://youtu.be/0AUJ_hcMNhQ
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
HTTP est un protocole simple à comprendre, simple à utiliser et c’est cette simplicité qui le rend disponible sur un grand nombre de plate-forme. REST, de son côté, est un style d’architecture qui permet d’exposer facilement une API en utilisant HTTP et différents types de représentations de données tels que JSON ou XML.
ASP.NET Web API est une évolution de WCF pour écrire une couche d’API REST, en utilisant un modèle de programmation proche d’ASP.NET MVC. Cette soirée 3T sera l’occasion pour vous de découvrir les fonctionnalités offertes par ASP.NET Web API qui font que c’est une technologie qu’il faut envisager d’utiliser lorsque vous devez créer une API REST.
Xamarin et le développement natif d’applications Android, iOS et Windows en C#SOAT
Une mise à jour de cette présentation est disponible ici : http://fr.slideshare.net/soatexpert/dvelopper-des-applications-i-os-et-android-avec-c-grce-xamarin
*********************
Les slides de la conférence présentée par Cyril Cathala chez Soat le 04/03/2014 sur le thème : Xamarin et le développement natif d’applications Android, iOS et Windows en C#
La vidéo de la présentation est visible ici : http://youtu.be/0BF9NqLYNvQ
4. LMAX :
Société spécialisée dans le passage d’ordres de bourse.
Affichage temps réel des cotations, volume de transactions élevé,
respect de l’ordonnancement des ordres et temps d’exécution
réduit.
7. Le cloud, j’le casse
- On se base sur le principe de l’IoA (Inversion of Architecture).
- Pourquoi ne pas utiliser le maximum de puissance CPU et la
mémoire de nos machines ?
- Toutes ces architectures par strates sont compliquées non ?
9. Mais pourquoi la gestion de la
concurrence en Java est si
compliquée ?
Attention, ces 384 pages sont dangereuses !!!
10. L’ordre :
// ordre de programmation // ordre d’exécution (non certain)
int w = 10; int y = 30;
int x = 20; int x = 20;
int y = 30; int b = x * y;
int z = 40;
int z = 40;
int a = w + z; int w = 10;
int b = x * y; int a = w + z;
De nombreux facteurs peuvent influer : le matériel, les
paramètres de la JVM, le type de GC,... merci je JIT
11. Avant de continuer quelques chiffres :
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns
Mutex lock/unlock 25 ns
Main memory reference 100 ns
Compress 1K bytes with Zippy 3,000 ns
Send 2K bytes over 1 Gbps network 20,000 ns
Read 1 MB sequentially from memory 250,000 ns
Round trip within same datacenter 500,000 ns
Disk seek 10,000,000 ns
Read 1 MB sequentially from disk 20,000,000 ns
Send packet CA->Netherlands->CA 150,000,000 ns
12. Il faut faire attention aux détails :
Incrémenter un compteur : Utiliser un lock :
public static long foo = 0;
static long foo = 0;
public static Lock lock = new Lock();
private static void increment() {
private static void increment() {
for (long l = 0; l < 500000000L; l++) {
for (long l = 0; l < 500000000L; l++) {
foo ++;
lock.lock();
}
try {
foo++;
} finally {
Utiliser un AtomicLong : lock.unlock();
}}}
static AtomicLong foo = new AtomicLong(0);
private static void increment() {
for (long l = 0; l < 500000000L; l++)
{foo.getAndIncrement();}
}
13. Le coût des contentions
Incrémenter un compteur 500 millions de fois...
● One Thread! :! 300 ms
● One Thread (volatile):! 4 700 ms (15x)
● One Thread (Atomic) : 5 700 ms (19x)
● One Thread (Lock)!: 10 000 ms (33x)
● Two Threads (Atomic) : 30 000 ms (100x)
● Two Threads (Lock)!: 224 000 ms (746x)
Soit pas loin de 4 minutes
14. Découper des chaînes de caractères
● Parallel (Scala): 440 ops/sec
● Serial! (Java) : 1768 ops/sec
La parallélisation des traitements n’est pas toujours une bonne solution
15. Et quid des processeurs ?
Comparaison du temps de découpage des chaines de caractères
en mono-thread sur différents processeurs.
Les performances peuvent aller du simple au double...
16. Mais que peut nous apporter le
Disruptor
... A part nous sauver des réplicateurs... (Private JOKE)
17. Ne pas devoir recourir à une architecture multi-thread
Donc, une mise en place plus aisée
De la simplicité pour les tests
Un coût de machines moins élevé
Se remettre en question sur le fonctionnement de Java...
18. Les problématiques rencontrées par la société LMAX
- False sharing
- Memory barrier
- Context switch
- CAS (compare and swap)
- Cache line
19. le False sharing
public void run()
{
long i = ITERATIONS + 1;
while (0 != --i)
{
longs[arrayIndex].value = i;
}
}
public final static class VolatileLong
{
public volatile long value = 0L;
public long p1, p2, p3, p4, p5, p6; // comment out
}
24. Les conclusions que l’on peut tirer...
Les queues (java) sont coûteuses (temps de traitement et lock des ressources)
Le multi-threading est coûteux (contentions sur les ressources communes) et difficile a mettre en œuvre.
Le multi-threading n’est pas le plus efficace en terme de performances.
Attention, ce cas d’utilisation ne peut pas convenir à tout le monde...
25. Ce qu’a fait LMAX :
Ecriture d’un framework permettant de partager rapidement les données entre thread sans toutefois
recourir aux mécanismes classiques des locks. C’est ce que nous nommerons Disruptor.
26. Le pattern Disruptor :
Les producteurs, le Ring Buffer et les consommateurs sont chacun dans des threads différents.
Les acteurs : Producteur, Consommateur
Les objets : RingBuffer, Barrier
Les stratégies : Wait, Claim
Objectif : ne plus avoir de contentions...
27. Alors qu’avec une architecture classique nous avions :
Mais où se trouve ma contention...
28. Ce que peut apporter le disruptor ?
C’est mieux mais toujours pas parfait....
29. Mais est-ce vraiment rapide ?
Conclusion : jusqu’à 5 fois plus rapide... et combien de fois moins cher (maintenance,
matériel,...) et plus constant...
31. Conclusion
- Ne jamais croire ce que l’on nous dit, il faut tester, expérimenter, la pratique est
souvent très loin de la théorie
- La concurrence est un outil à manier avec précautions,...
- Pour avoir des performances, chaque détail compte, mais comme le dit Donald
Knuth, «premature optimization is the root of Evil»