Tendances
Les nouevlles tendances technologiques - IA, Blockchain, Realitée Augmentée, Big Data et autres.

Comment tirer profit de l’i...

De quoi parlons nous ? Nous appelons“logiciel cognitif”un logiciel qui mime les capacités cognitives d’un homme, c’est à dire qui résout un problème comme un homme le ferait. Des technologies variées (machine learning, deep learning, auto-apprentissage…) évoluent très rapidement et savoir en tirer parti rapidement est un réel accélérateur d’innovation et de compétitivité pour l’entreprise. Ce billet de blog propose une approche pour concevoir et exploiter au mieux des logiciels cognitifs. Le modèle SAMR aide à y voir plus clair Le modèle SAMR aide à concevoir le niveau d’impact d’une technologie (en l’occurrence,  l’intelligence artificielle) dans l’entreprise. Il définit quatre niveaux d’adoption d’une technologie sur un Produit ou Service (appelé “PoS” dans la suite de ce document) : Substitution: La technologie est appliquée comme substitut dans le PoS mais il ne change pas son fonctionnellement, Augmentation: La technologie est appliquée dans le PoS et il est amélioré fonctionnellement, Modification: La technologie permet de repenser la destination et les fonctions du PoS, Redéfinition: La technologie fait naître des nouveaux usages, manières de faire et impose une redéfinition totale du PoS et de son usage. Les néophytes s’engouffrent dans SAMR ! Il est souvent difficile pour une entreprise non entraînée d’utiliser l’IA pour concevoir ses usages métier. Le champ des applications est tellement vaste que l’entreprise a du mal à trouver par où commencer. La méthode des néophytes “pas trop pressés” est de se baser sur le cadre SAMR et de progresser sur des cas d’usage de l’IA, en partant de Substitutions pour aller progressivement vers la Redéfinition. Mais ce processus est peu efficace car les substitutions ne génèrent que peu ou pas de valeur : elles lassent donc rapidement le management qui s’intéresse au retour sur investissement. Cette approche est donc lente, coûteuse et finalement peu convaincante. Les “exigeants” font de l’IA Design Il est donc nécessaire de trouver les espaces d’opportunité apportant rapidement beaucoup de valeur quelque soit le niveau SAMR du cas d’usage métier (existant ou imaginé). Chez PALO IT, nous avons conçu une méthode de design qui permet : De naviguer dans le labyrinthe des possibles, De trouver ces opportunités Et de positionner la solution IA dans les processus, le système d’information et l’organisation.   Notre cadre de travail est représenté ci-dessous : En entrée de notre méthode de design : Expertise IA La connaissance approfondie des offres et technologies de l’IA, de leurs capacités et limitations permet d’être créatif. Expertise Métier Les experts métiers sont embarqués dans le processus de design où ils décrivent, imaginent et dévoilent des espaces d’usage et d’opportunité (fonctions, valeurs). Système d’information existant Les architectes du SI décrivent le système et ses capacités d’évolution pour incorporer du logiciel cognitif. En sortie de notre méthode de design, sont produits : Cas d’usage / Fonctions cognitives / SI Le cas d’usage proposé et les fonctions cognitives utilisées et leur positionnement dans le SI. Processus Organisation Transformation L’IA a un impact majeur sur l’organisation et les processus. Cela demande un programme de transformation associé. Cet impact est d’autant plus important que le cas d’usage est proche de la Redéfinition, au sens SAMR. La méthode “IA Design” Elle utilise les outils méthodologiques de recherche, cadrage de problèmes, priorisation, ateliers collaboratifs, proto/POC… Toutefois, les capacités fonctionnelles et interactives des technologies de l’IA sont systématiquement injectées dans les réflexions à des points bien stratégiques qui maximisent la valeur et l’identification des possibles. Cette méthode est enrichie au fur et à mesure des projets, ce qui en fait un outil particulièrement pertinent. En conclusion L’adoption de l’IA dans l’entreprise est une affaire de méthode de design avant tout. La vision holistique de l’impact de l’IA est indispensable pour trouver les cas d’usage à forte valeur et les clefs de transformation associées. PALO IT a pensé et éprouvé sa méthode de design IA pour ne pas tomber dans le piège d’une progression linéaire SAMR lente et peu convaincante.

Visually test your a...

The quickie of Alexandre Delattre (Viseo) on Marble testing with Rx (JS/Java/…) during the DevFest Toulouse 2017 was particularly interesting. What is Rx? Rx is a library for composing asynchronous and event-based programs by using observable sequences. It provides one core type, the Observable, satellite types (Observer, Schedulers, Subjects) and operators inspired by Array#extras (map, filter, reduce, every, etc) to allow handling asynchronous events as collections. - From RxJS doc We can use Rx in the frontend (for service calls combinations and reactive user interface) as well as in the backend (micro-services calls combinations, websockets, …). Problematic The current trend is to transform imperative programming into reactive functional programming. With the tools at our disposal, testing asynchronous behaviours is hard, and often, developers just skip this important step. But it is possible! And now, simpler than ever. So how to do that? How to check that our streams unfold the way we want them to? You guessed right: with Marble Testing. Marble diagrams In order to representObservables, we define Marble diagrams. They are drawn as a horizontal timeline, with events occurring as visual nodes. We can represent them like this example of a themergefunction that takes two observables and return a merge of the two. You can refer to RxMarbles website in order to find interactive diagrams of Rx Observables. In order to use them in code, we define an ASCII notation. First, we define the time frame (default is 10ms). Then we can have a look at the different symbols that we need: - : Nothing happens during one frame | : the observable is completed (onComplete) # : observable error (onError) x : the observable emits a value (onNext) ^ : subscription point of an Observable (only for hot Observables) () : value grouping Example of a mobile weather application For this example of application, the speaker chose the language Kotlin, but we could do the same with any Rx supported language and platform (see full list onReactiveX site). Application Requirements We have an “instant search” application, with the user inputting their city’s name. After a 500ms delay, we launch the search, and a loading progress is visible to the user during the search. Then the result is displayed, or an error, if need be. Interfaces Our available interfaces are the following: interface WeatherViewModel { // Inputs val city: Subject // Outputs val state: Observable<State> val weather: Observable<WeatherData> } sealed class State object Idle : State() object Loading : State() data class Error(val e:Throwable) : State() data class WeatherData ( val city: String, val pictoUrl: String, val minTemperature: Float, val maxTemperature: Float ) interface WeatherService { fun getWeather(city: String): Single<WeatherData> } Implementation city = BehaviorSubject.createDefault("") state = BehaviorSubject.createDefault(Idle) weather = city .filter { it.isNotEmpty() } .debounce(500, TimeUnit.MILLISECONDS, mainScheduler) .switchMap { weatherService.getWeather(it) .observeOn(mainScheduler) .doOnSubscribe { state.onNext(Loading) } .doOnSuccess { state.onNext(Idle) } .doOnError { state.onNext(Error(it)) } .toObservable() .onErrorResumeNext(Observable.empty()) } Use case diagram For example, in this diagram, the user starts typing “Toulouse”, and after 500ms without activity (no keystroke pressed), we call the webservice to get the weather in Toulouse. The webservice then returns the response (sunny weather). Afterwards, the user wants to check the weather in Paris, so after the delay, the webservice is called, and then we get the response. Marble testing implementation @Before fun setup() { weatherService = Mockito.mock(WeatherService::class.java) scheduler = MarbleScheduler(100) viewModel = WeatherViewModelImpl(weatherService, scheduler) } Following are the values that we need in order to test. We map the symbol “0” to the event “empty string”, the symbol “1” to the event the user inputs “tou”, the symbol “t” to the event the user inputs “toulouse”, etc. val cityValues = mapOf( "0" to "", "1" to "tou", "t" to "toulouse", "b" to "bordeaux" ) val stateValues = mapOf( "i" to Idle, "l" to Loading, "e" to Error(weatherError) ) val weatherValues = mapOf( "t" to weatherData, "b" to bordeauxData ) And these are the data that the webservice is mocked to respond. val weatherData = WeatherData("toulouse", "sunny", 20f, 30f) val bordeauxData = WeatherData("bordeaux", "cloudy", 10f, 15f) So now, the test looks like this. @Test fun test2Cities() { val s = scheduler val cityInput = s.hot( "0-1-t------------b----------", cityValues) // debouncing -----t -----b `when`(weatherService.getWeather("toulouse")) .thenReturn(s.single( "--t", weatherValues)) `when`(weatherService.getWeather("bordeaux")) .thenReturn(s.single( "--b", weatherValues)) s.expectObservable(viewModel.weather).toBe( "-----------t------------b---", weatherValues) s.expectObservable(viewModel.state).toBe( "i--------l-i----------l-i---", stateValues) cityInput.subscribe(viewModel.city) s.flush() } We obtain an ASCII visual representation of what we simulate the user interaction to be, and then, we tell the test what chain of events we expect to receive from the various observables. In this representation, we can visually check how the different timelines correspond, and easily test that the more complex chains of events actually lead to the observable that we want. Conclusion Pros Tests are more concise and expressive Complex cases can be tested visually Now testing the global coherence and behaviour is made possible. Cons The API suffers from differences between the different platform. Alignment of marbles can be visually challenging in ASCII. Possible improvements in the future The speaker concluded by proposing improvements in the future in order to counter the cons: Uniformisation of the APIs. Development of a graphical editor for marbles. He added that if someone in the conference wanted to get involved and develop a graphical editor, it would be great and useful.

L’IA qui répond inte...

L’intelligence artificielle semble créer un mouvement d’idées important dans le monde entier. Les états comme la Chine, la Franceet d’autres en font une priorité économique. Les entreprises en font une méthode de communication vis-à-vis de leurs actionnaires sans d’ailleurs avoir une idée juste de leur promesse (sauf cas exceptionnel). Chez PALO IT, nous ne prétendons pas tout connaitre dans le domaine de l’intelligence artificielle car le sujet est très vaste et très varié. Mais depuis 2 ans, nous travaillons dans le domaine de la compréhension du langage humain écrit. Dans ce domaine,  nous voulons vous persuader que la technologie est devenue industrialisable donc utilisable. Comme il y a 3-5 ans, les réseaux de neurones dit de convolution ont permis d’immenses progrès dans la reconnaissance d’images, les réseaux de neurones de type Long short-term memory(LSTM) nous ouvrent aujourd’hui une bonne perspective dans la compréhension du langage. OBJECTIFS DE CE POST Replacer le buzz sur l’IA à sa place de “bla-bla buzz”. En quelques mots, vous décrire ce qu’est réellement l’IA actuelle. Le travail et les difficultés rencontrées depuis 30 ans sur la compréhension du langage humain. La révolution qui se prépare, en comprendre les contours économiques et surtout en expliquer les capacités et les limites pour l’instant. L’Intelligence artificielle une croyance ou une réalité : La terminologie – malheureuse ! – d’Intelligence Artificielle est apparue en 1956 : L’Intelligence Artificielle (IA) est la science dont le but est de faire faire par une machine des tâches que l’homme accomplit en utilisant son intelligence. C’est FAUX On peut lui préférer celle de Calcul Informatique capable de simuler des tâches humaines sans présager de ce qu’est l’intelligence. "Depuis 30 ans, les chercheurs cherchent à comprendre le langage humain mais les chercheurs qui cherchent, on en trouve mais des chercheurs qui trouvent, on en cherche !" Après la dernière Guerre Mondiale, les états riches comme les Etats-Unisont investi beaucoup d’argent sur la promesse suivante : Il suffit d’avoir un ordinateur puissant et un logiciel qui connaît tous les mots et leurs règles de liaison pour comprendre la grammaire d’un langage humain comme un programme(compilateur) interprète un programme écrit en Cobol,Java ou autres. Raté : Le langage humain n’entre pas dans la catégorie des grammaires formelles aussi complexes soient-elles, contrairement à ce que des générations de professeurs ont voulu nous persuader. Vous connaissez les messages véhiculés par Twitter donc vous savez que le langage humain change en fonction de la culture et du contexte quitte à inventer de nouveaux concepts à chaque échange. Mais à l’époque, il n’y avait pas Twitter donc nous dirons que l’erreur est humaine. La révolution du Word Embedding et des réseaux de neurones profonds (Deep Learning) est une histoire d’hommes qui n’ont pas lâchés leur conviction. Le résultat de leur travaux est maintenant disponible et mesurable : La révolution est venue de l’idée que la sémantique d’un mot ne s’explique que par la connaissance de la présence possible des mots voisins dans toutes les phrases imaginables. Cette connaissance est connue par vous et par vos interlocuteurs donc vous vous comprenez. Un langage humain transporte ainsi votre culture qui est partagée par votre interlocuteur sinon vous devriez faire comme les italiens parler avec vos mains, pas simple ! Prenons un exemple : un chaperon : vous comprenez que l’on parle d’une profession qui a disparu (et heureusement). un chaperon rouge : vous comprenez que je parle d’une héroïne d’un conte de Charles Perrault Un mot peut changer de sens en fonction des mots qui l’entourent. Et pourtant, il a toujours un sens quand il est seul. Mais ce sens pour vous vient des mots qui peuvent l’entourer dans votre culture. Nous sommes passés du mot parmi d’autres à une représentation du mot par rapport aux autres mots. Un mot n’est plus un point dans la liste des mots mais un vecteur dans l’espace de représentation des mots. Collobert & Weston, chercheurs américains, ont trouvé une méthode pour calculer ces vecteurs en 2008 en utilisant des réseaux de neurones alors que tout le monde avait abandonné ce type de sujet. Ensuite la communauté scientifique a largement amélioré et utilisé cette vision en utilisant les réseaux de neurones car le deep learning à base de réseaux de neurones, avait révolutionné le domaine du traitement de l’image. Le véhicule autonome est le premier résultat industriel de ce progrès technique. Plus spécifiquement, la communauté scientifique a utilisé cette vision sur les problèmes difficiles comme la réponse à des questions ouvertes sur des textes fournis. L’université de Stanforda organisé une compétition dans ce domaine.N’hésitez pas à consulter ce site :SQUAD Ce site donne accès à un QCM avec 100 000 questions réponses sur des textes. Chaque compétiteur est mesuré avec un jeu de données que personne ne connaît. Ci-dessous, les qualités de prédictions sur 19 mois en arrière sachant cette mesure a été faite en mars 2018. La ligne rouge est le meilleur résultat des étudiants de Stanford qui ont fait le test. En bleu, la progression des algorithmes depuis 19 mois. On peut voir que les calculs semblent pouvoir faire mieux que l’homme sachant lire. À partir des écrits des chercheurs, nous avons refait un modèle et fait tourner sur ce jeu de données en apprentissage et en test. Nous avons atteint la qualité de 79,6. Ouf… cela fonctionne comme dans les papiers des chercheurs. Mais comment la machine répond sur des textes particuliers et ciblés ? Pour le tester, nous avons choisi un texte en anglais difficile à comprendre. Il s’agit du texte juridique qui régule l’utilisation des données personnelles, dit la RGPD. Et voilà, un résultat sur ce texte de lois : Question: “Who should infringe the regulation?” Réponses du calcul : Public authorities Member States The supervisory authorities Mais surtout les réponses sont intéressantes quand on a l’article qui contient la réponse. Vous pouvez venir tester le bot RGPD –> Ici <–  en cliquant sur “Sign Up” pour obtenir un droit d’accès. Nous pensons vous avoir prouvé qu’il est maintenant possible de répondre à des questions ouvertes sur un texte fourni par l’homme. L’humain est le professeur et le créateur des contenus. La machine apprend et répète intelligemment en répondant à des questions ouvertes.

Quelle relation entr...

Comme tout responsable de développement business, je m’interroge constamment sur les clefs de la croissance dans notre monde en perpétuel changement. J’ai découvert que le Cloud est un puissant contributeur à la croissance. Pour nous en convaincre, je m’appuie sur l’étude menée par Salim Ismail dans son livre “Exponential Organizations”. L’ouvrage présente 10 pratiques amenant à une croissance ultra-rapide. Ces pratiques, utilisées par les grands du monde Internet (Google, BlaBlaCar, Netflix, Airbnb…), s’appuient sur le Cloud. La bonne nouvelle est qu’elles sont également applicables à toute entreprise. Le livre propose de répartir les 10 pratiques de croissance en deux groupes : celles orientées vers l’audience extérieure (clients, partenaires…), et celles orientées vers l’interne (employés, ressources internes). Pratiques orientées vers l’externe Savoir profiter de l’effet de masse engendré par l’accès à Internet amène la croissance rapide. Les entreprises dans ce cas ont une capacité de scalabilité et d’élasticité très importante du SI en contact avec Internet. Par exemple, en sachant créer et animer des communautés ouvertes autour de sa marque, l’entreprise doit accueillir un trafic croissant et rapidement variable. D’autres pratiques telles que l’usage de la data science (Algorithmes) demande de créer des environnements de travail de manière dynamique et de profiter des dernières technologies du domaine sans passer des mois de R&D à les acquérir (usage du PaaS). Le fait d’utiliser les actifs des tiers est sûrement la pratique la plus “nativement cloud” : Le cloud lui-même porte cette idée de bâtir sur les actifs des opérateurs cloud et de variabiliser les coûts d’infrastructure. Pour finir sur cette partie, les fonctions d’engagement des clients et partenaires font appel à des mécanismes transactionnels plus complexes (par exemple des décisions liées au marquage des données de navigation web) et on doit sans arrêt renouveler les services offerts aux clients pour maintenir leur engagement. Le cloud permet le déploiement rapide d’applications variées et évolutives augmentant l’engagement des clients envers la marque. Pratiques orientées vers l’interne Il se pose la question de comment les interactions massives avec l’extérieur sont digérées par l’intérieur de l’entreprise. Pour cela, un système interface sait condenser ou router en temps réel les informations venant de l’extérieur. Le cloud et les middlewares de nouvelle génération (par exemple les apporte bases de données non structurées) apportent toute l’élasticité nécessaire à ce type de fonction. Les décisions de l’entreprises à forte croissance peuvent avoir un impact majeur sur leurs résultats. Avoir un retour rapide et fiable sur les actions est apporté par le développement des tableaux de bord et leur adaptation continuelle. Le cloud, grâce aux offres de data visualisation et la capacité à déployer des applications adaptées en continu, offre cette souplesse. Les trois dernières pratiques sont présentes dans le concept « d’entreprise apprenante ». D’une part, la capacité d’expérimenter des offres et des nouvelles manières de faire à coût variable, sans investissement, est largement supportée par le cloud. D’autre part, le partage des informations à travers les réseaux et outils collaboratifs sont également massivement utilisés. Les offres SaaS dans ce domaine offrent toutes possibilités. Conclusion Ainsi, les entreprises en forte croissance s’appuient sur le Cloud, car il offre 5 propriétés supportant les pratiques de croissance des entreprises : Elasticité: monter et descendre la capacité du SI à la demande Scalabilité : pouvoir augmenter sans limite la capacité Coût à la consommation : utiliser les actifs en coût variable Déploiements et environnements à la demande : rénover les applications rapidement Dernières technologies disponibles sans R&D : s’appuyer sur la R&D des opérateurs cloud

Blockchain : où en s...

Introduction La technologie phare de ces dernières années est bien la blockchain. Certains la décrivent comme une avancée aussi importante que l’était Internet à la fin du XXe siècle. Si vous n’en avez jamais entendu parler, vous avez probablement dû entendre parler de cryptomonnaie comme par exemple leBitcoin. L’objectif de cet article est de comprendre l’avancée technologique que procure la Blockchain, puis de s’intéresser aux nouvelles générations de cryptomonnaies. Dix années après l’apparition de la première blockchain mondialement connue, le Bitcoin, nous allons voir quelles sont les avancées dans ce domaine. Historie de la blockchain Afin d’introduire le concept de la blockchain nous avons besoin de nous situer dans le contexte de la crise bancaire et financière de l’automne 2008. Cette crise a provoqué un problème de confiance vis-à-vis des intermédiaires et plus précisément des institutions bancaires. Ces intermédiaires dictent leurs lois, abusent parfois de leurs autorités et, plus important, concentrent les risques. C’est dans ce climat de méfiance que sont nées les cryptomonnaies. La première et de loin la plus célèbre est le Bitcoin. Elle a été créée en 2008 par Satoshi Nakamoto et repose sur plusieurs principes. L’idée de base était de créer une monnaie d’échange entre utilisateurs en se passant des institutions bancaires afin de transférer des biens et des services de façon plus libre et indépendante. Néanmoins ce principe introduit plusieurs problématiques : L’échange d’argent se fait d’utilisateurs à utilisateurs ll faut assurer l’unicité de l’attribution d’un même bitcoin Et il faut garantir que la monnaie se gère sans autorité supérieure ou centrale Pour répondre à ces problématiques, le Bitcoin utilise la technologie de la blockchain et plus précisément la combinaison innovante de trois mécanismes : les réseaux Peer-to-peer, la cryptographie asymétrique et la preuve de travail. Les réseaux Peer-to-peer Le réseau pair à pair est un protocole de transfert de données proche du modèle client-serveur où chaque client est lui-même un serveur. De cette manière un utilisateur du réseau, appelé un noeud, met à la disposition des autres noeuds, un fichier. Ce fichier est copié par tous les noeuds de proche en proche jusqu’à ce que l’ensemble du réseau en possède une copie. Dans le cas du Bitcoin, les utilisateurs échangent un registre et à chaque fois qu’un noeud apporte un changement à ce registre tous les noeuds du réseau mettent à jour leur registre local. La cryptographie asymétrique La cryptographie asymétrique est une méthode de chiffrement de message. Elle permet de générer mathématiquement deux nombres. Ces deux nombres sont appelés clé privée et clé publique. La clé publique peut être diffusée à quiconque souhaite chiffrer un message, mais la clé privée est gardée secrète. Ce système peut être utilisé pour : Chiffrer un message à envoyer : imaginons Bob qui utilise la clé publique d’Alice afin de crypter un message. Alice va alors déchiffrer ce message à l’aide de sa clé privée qu’elle est la seule à détenir. Le message est alors totalement confidentiel et seul Alice pourra consulter le contenu de ce message. S’assurer de l’authenticité de l’expéditeur : le rôle des clés est interchangeable. Une clé privée peut aussi servir à chiffrer un message pour qu’une clé publique le déchiffre. Alice qui souhaite authentifier un message va utiliser sa clé privée pour crypter celui-ci et tous les détenteurs de la clé publique d’Alice peuvent valider qu’elle est bien l’auteur du message. Dans notre cas, afin d’éviter la possibilité qu’un même bitcoin soit attribué deux fois, la technologie Bitcoin va utiliser l’authenticité de l’expéditeur grâce à la cryptographie asymétrique. Si Alice veut devenir membre du réseau Bitcoin, elle va alors générer une clé privée et une clé publique. La clé privée va rester en sa possession et elle va diffuser la clé publique à tous les utilisateurs du réseau. Afin d’effectuer une transaction, elle va signer celle-ci avec sa clé privée. De cette manière, tous les utilisateurs du réseau sont sûrs que c’est Alice qui a créé cette transaction. Tant que Alice ne dévoile pas sa clé privée, elle sera la seule personne à pouvoir effectuer une transaction avec ses bitcoins. Maintenant que les transactions sont sécurisées, comment peut-on savoir que l’émetteur possède réellement le bitcoin à transférer ? La preuve de travail Afin de s’assurer qu’un utilisateur possède réellement le bitcoin à transférer et que la monnaie se gère sans autorité supérieure et/ou centrale, il va falloir trouver une astuce et mettre tous les noeuds du réseau d’accord sur l’ordre des transactions. Si l’ordre des transactions est la même pour tous les noeuds du réseau, on peut remonter dans les blocs et savoir si un émetteur possède réellement un bitcoin. C’est le concept de la preuve de travail (Proof-of-Work en anglais). Toutes les transactions sont groupées dans des blocs et chaque bloc référence le bloc précédent. De cette manière il n’y a qu’une seule chaîne de blocs qui est répliquée sur tous les noeuds du réseau. Nous pouvons alors affirmer qu’une transaction qui se trouve dans un bloc sera obligatoirement postérieure aux transactions présentes sur tous les blocs précédents. Les transactions sont donc ordonnées selon une suite chronologique. La question maintenant est de savoir comment créer de nouveaux blocs contenant les nouvelles transactions. Avant d’être incluses dans un bloc, les transactions sont dites en attente et doivent être confirmées. Pour créer un nouveau bloc tous les noeuds du réseau font appel au minage. Le minage Le concept du minage est simple. Chaque bloc est identifié par uneclé de hachage, et l’objectif des noeuds du réseau qui minent est de créer un identifiant (une clé de hachage) valide pour le nouveau bloc. Toutes les transactions en attente seront alors regroupées dans le nouveau bloc alors disponible dans la blockchain. Afin de trouver un identifiant valide, les noeuds du réseau font appel à une fonction de hachage. Grâce à cette fonction, les noeuds hachent l’identifiant du bloc précédent, les identifiants des transactions du bloc que l’on essaie de former et une chaîne de caractères aléatoires. Un noeud pourra créer le nouveau bloc si le hash qu’il vient de créer est valide; c’est-à-dire s’il comporte un grand nombre de zéro dans ses premiers chiffres. Le noeud met alors à jour la blockchain et propage cette dernière de proche en proche dans le réseau Peer-to-peer. Sachant que le hash est généré aléatoirement, un noeud a besoin de beaucoup de tentatives pour en trouver un qui soit valide. Ces tentatives génèrent beaucoup de travail d’où le nom preuve de travail. Dans l’exemple du bitcoin, la probabilité de trouver un noeud valide est de 9,18×10^-22 et un bloc est créé toutes les 10 minutes. Cette énorme quantité de travail est assurée par la puissance de calcul du matériel des mineurs (serveur, GPU, etc..). Pour les récompenser, une somme de 12,5 bitcoins leur est reversée lorsqu’une clé de hachage valide est trouvée. De cette manière les transactions sont vérifiées et stockées dans des blocs et si quelqu’un de mal intentionné veut changer une transaction dans un bloc; il doit changer l’identifiant de ce bloc (sa clé de hachage). Sachant que chaque bloc référence le bloc précédent, il doit aussi changer cette référence et donc l’identifiant des blocs suivants et ainsi de suite. Sachant que trouver un seul identifiant de bloc est extrêmement coûteux, frauder le système est presque improbable. Les réseaux peer-to-peer, la cryptographie asymétrique et la preuve de travail (PoW) qui permet de trouver un consensus distribué sont les trois mécanismes qui constituent la blockchain. Prise de recul Aujourd’hui les cryptomonnaies pèsent des centaines de milliards de dollars et prouvent au quotidien la fiabilité de la blockchain. Cette technologie est en application dans le domaine de la finance, il est temps de voir si elle est assez mature pour s’étendre à d’autres types d’informations. La blockchain s’appuie sur trois idées fondamentales décrites dans le chapitre précédent : La « désintermédiation » : nous pouvons nous passer des intermédiaires de confiance grâce au réseau peer-to-peer ce qui entraîne une diminution des coûts. La traçabilité : l’utilisation d’un registre permet de rendre traçable chaque transaction car elles sont publiques. Cette traçabilité nous apporte une preuve numérique d’existence non effaçable. Néanmoins, malgré le fait que les transactions soient publiques, elles sont signées avec les clés de hachage privées des utilisateurs. Un Consensus distribué : permet la conservation du registre par tous les utilisateurs et la vérification permanente des transactions, qui a pour effet de faciliter le travail ensemble et d’augmenter la sécurité. C’est dans ce contexte que certaines personnes se sont posées une question simple mais cruciale : Est-il possible d’exécuter un code ? Le bitcoin est une excellente innovation, mais est-il possible d’effectuer un virement à une certaine date par exemple. C’est de cette idée qu’est né le contrat intelligent (smart contract en anglais). C’est ce que je considère comme étant la deuxième génération de blockchain et de cryptomonnaie. Cette deuxième génération a été introduite par la technologie Ethereum. Un smart contract est la distribution sur le réseau de petits programmes avec une mini-base de données sur la blockchain. De cette manière il ne peut pas y avoir de litige, l’exécution du programme est garantie par la blockchain. Actuellement il existe plusieurs applications qui se basent sur un smart contract. Ces applications sont appelées les dApps pour « decentralized application ». Une application dApp s’exécute sur la blockchain au lieu de s’exécuter localement sur un appareil. Néanmoins les dApps regroupent un grand nombre de contraintes. La première et la plus dangereuse selon moi c’est qu’un code déployé sur une blockchain est immutable. C’est-à-dire qu’il n’est pas modifiable. Lorsqu’il est déployé sur la blockchain il y sera présent pour toujours. Au vue de la maturité de la technologie, il est quasiment sûr que du code déployé sur une blockchain contient du bug. Pour corriger ces bugs il faut déployer un nouveau contrat sur la blockchain et récupérer les informations du contrat précédent. Il existe plusieurs scandales, où des hackers ont détourné des montants énormes (plusieurs millions de dollars) sur des dApps en exploitant du code bugé. Une autre contrainte, les réponses sont très lentes. Lorsque l’on appelle une méthode d’un contrat via une transaction, il faut attendre que cette dernière soit vérifiée, donc qu’un bloc soit miné afin de pouvoir la stocker. Dans l’exemple de Ethereum, un bloc est miné chaque minutes. Troisième génération Les limites des blockchains de première et deuxième génération ont introduit l’arrivée de blockchain de troisième génération. Elles ont pour objectif de répondre aux problèmes rencontrés dans les versions précédentes tout en introduisant des innovations. C’est le cas par exemple de la technologie Cardano qui, selon moi, propose un tournant majeur dans le monde des cryptomonnaies. Cardano a été lancée en septembre 2017 et se présente comme la blockchain de troisième génération. Cette technologie reprend les idées de base du Bitcoin et de l’Ethereum, et répond partiellement aux problèmes soulignés précédemment. Selon ses créateurs, elle offrirait une solution scalable, interopérable et durable. Scalabilité La scalabilité recouvre trois problématiques : Le nombre de transactions par seconde, Sachant que ces transactions manipulent des données, nous rencontrons un questionnement sur la fiabilité du réseau, Etant donné que chaque transaction est stockée sur la blockchain, celle-ci grossit de jour en jour. Actuellement la blockchain du bitcoin pèse plus de 150 Go. Nous allons donc rencontrer un problème de stockage de data car chaque noeud du réseau doit stocker le registre en intégralité afin de vérifier les transactions. Nous avons vu précédemment que la première génération de blockchain (Bitcoin) permettait de trouver un consensus distribué grâce à la preuve de travail (PoW). Pour répondre au problème du nombre de transactions par seconde, Cardano utilise lui un algorithme de Proof-of-Stake (PoS) afin de parvenir à un consensus. La preuve de travail, pour le minage, consiste à effectuer des calculs mathématiques afin de créer des nouveaux blocs dans la chaîne ou de valider des transactions. Le problème identifié précédemment, est que la création de bloc était très lente (par exemple 10min pour le bitcoin), et donc la vérification de transaction de même. Sans rentrer dans les détails, le protocole utilisé par Cardano permet de générer des blocs et vérifier les transactions de manière beaucoup plus rapide. Ensuite, afin de réussir à effectuer des milliers de transactions par seconde, il est impossible de maintenir une topologie de réseau homogène. Tous les noeuds du réseau ne peuvent pas non plus étudier chaque transaction car ils n’auront pas une fiabilité du réseau suffisante. Cardano utilise l’architecture réseau RINA (Recursive InternetWork Architecture) http://irati.eu/the-recursive-internetwork-architecture/ afin de pallier à ce problème de support réseau. Pour finir, tous les utilisateurs n’ont pas nécessairement besoin de toutes les données pour vérifier leurs transactions tout en ayant un niveau de sécurité élevé. Cardano n’a pas encore implémenté de solution pour réduire la taille de la blockchain, mais une réponse à ce problème est en cours de développement et devrait être disponible courant 2018. Cette réponse consiste en l’union de plusieurs méthodes : l’élagage, l’abonnement, la compression et la partition de données. Un noeud du réseau pourra alors manipuler une version « light » de la blockchain afin de valider une transaction ou de créer un bloc. Voici comment Cardano répond au problème de scalabilité de la blockchain que rencontraient les deux premières générations. Interopérabilité L’idée d’interopérabilité est la même que dans le monde actuel de la finance. Le constat est qu’une seule monnaie ne peut pas gouverner le monde. Il existe une multitude de cryptomonnaies différentes, et l’idée ici est de pouvoir utiliser n’importe quelle autre monnaie avec Cardano. Chaque technologie comme le Bitcoin, l’Ethereum ou le système bancaire actuel possède son propre réseau mais il n’existe pas de standard permettant de communiquer entre eux. Il existe des plateformes d’échange, ce sont celles qui sont utilisées au quotidien pour échanger des devises en cryptomonnaie mais elles concentrent les risques. Il faut aussi avouer que c’est contradictoire de promouvoir une technologie de décentralisation totale sur des plateformes aussi centralisées. L’objectif est de pouvoir utiliser n’importe quelle monnaie avec Cardano, c’est-à-dire une manière de pouvoir « lier » les blockchains de réseaux différents. Pour respecter l’idée générale de la blockchain, ces échanges devraient se faire sans l’utilisation d’un tiers de confiance (plateformes d’échanges). Pour répondre à ce problème, Cardano introduit les chaînes latérales. Le concept de base est que lorsqu’une transaction est faite d’une blockchain à une seconde blockchain différente, les chaînes latérales doivent regrouper un ensemble d’informations compressées qui nous donnent l’aptitude de savoir si la transaction est légitime. La transaction doit respecter les mêmes règles de base que les transactions des blockchains de première génération. À ce stade les blockchains pourraient communiquer entre elles mais il est pertinent de constater qu’il reste une barrière entre le réseau bancaire et le réseau Blockchain. Cette barrière existe seulement car il y a un besoin, côté réseau bancaire, de traçabilité des transactions. Qui envoie à qui et pourquoi? Pour y répondre, Cardano ajoute un système de métadonnées dans les transactions que l’utilisateur aura le choix d’inclure ou non. La finance pourra alors exiger qu’une transaction soit transparente. Cardano fournit donc un alliage astucieux entre l’anonymat de la cryptomonnaie et la nécessité de traçabilité du monde de la finance. Durabilité Pour que cette technologie soit durable dans le temps il est important de répondre à une question : Comment payer les choses? En effet, il est nécessaire de développer un modèle économique permettant de  créer une trésorerie afin de rémunérer les personnes contribuant à l’évolution de cette technologie. De cette manière elle pourra perdurer dans le temps. Pour anticiper cela, Cardano a pour objectif de mettre en place un système de trésorerie de la manière suivante. Auparavant, les mineurs des cryptomonnaies recevaient une récompense lorsqu’un bloc était miné. Avec Cardano les mineurs reçoivent également une récompense, mais une partie de celle-ci est redirigée vers une trésorerie, vers un compte bancaire décentralisé. Lorsqu’un utilisateur à un projet qui pourrait faire avancer la technologie il le soumet à la trésorerie, ensuite tous les détenteurs de jeton pourront alors voter. Si l’utilisateur reçoit un montant élevé de vote, la trésorerie lui débloque une rémunération afin de développer son projet. Ce modèle économique permet alors de faire évoluer la technologie de manière sûre et durable dans le temps par la communauté elle-même. Conclusion Le monde de la blockchain évolue de manière efficace mais pour l’instant les résultats sont encore trop immatures. Créée en 2008, la technologie a déjà bien avancé par rapport au stade initial mais elle est encore beaucoup trop marquée par des scandales et des exploitations de bugs par des hackers. Les blockchains de troisième génération proposent des solutions permettant de démocratiser cette technologie. Je pense que Cardano est à suivre car selon moi, elle respecte entièrement la philosophie de la blockchain tout en répondant partiellement aux problèmes de scalabilité, d’interopérabilité et de durabilité liés aux générations précédentes. Néanmoins, il reste encore du chemin à parcourir car la technologie est encore très jeune. Quelque soit l’issue de cette innovation, révolution totale ou flop, il est passionnant pour un jeune développeur comme moi de voir l’évolution en direct de cette technologie et ses impacts sur la société actuelle.

Adopt a cloud soluti...

On November 3rd 2016 took place the very first Devfest conference in Toulouse. The event was a tremendous success and brought together a large community of technology addicts. In this event, you could choose from numerous breakout sessions covering a broad range of technical topics focused on web, mobile and cloud development. I was particularly interested in the sessions presented by Aurélie Vache (Atchik), Didier Girard (Sfeir) and Alain Regnier (Alto Labs) dealing with Big Data implementation using the Google Cloud Platform (GCP), and especially how to facilitate the implementation of Big Data projects using the services of the google cloud stack. " The Google Cloud Platform offers an integrated end to end Big Data solution." It lets you capture, process, store and analyse your data within a single platform. These services are serverless which frees you from the need to build, manage and operate complex and costly infrastructures. This is obviously a major benefit in terms of implementation cost for your Big Data projects. " We can particularly thank Didier Girard for his excellent session where he described the challenges that developers face when dealing with Big Data and how to solve them using the GCP." According to him, the volume of data being generated by today’s applications is increasing at dizzying rates. The real challenge is not to store a big amount of data to analyse them at a future date, but to be able to consume a large volume of events and extract meaningful informations in real time. He then presented the typical GCP architecture used to build such a solution and did a live demo of an application consuming roughly 100000 events per second. Cloud Pub/sub Is a real-time messaging service that allows you to send and receive data between independent applications. A messaging queue supports many to many communications, meaning that a Pub/Sub can be configured to support multiple publishers and subscribers. It is highly scalable, as the service can handle 10000 messages per second by default and up to several millions on demand. That makes it a major asset to capture big amount of real time events originating from various sources, such as Web analytics or IOT devices. It is also secure as all data on the wire is encrypted. Cloud Storage Is an object storage solution in the cloud similar to the very well known Amazon S3. It can be used for live data serving, data analytics or data archiving. Objects stored within Cloud Storage are organized in buckets that can be controlled and secured independently. The service also provides a Restful API that allows developers to programmatically access the storage and dynamically upload data to be processed, such as batch files. Cloud DataFlow Is a data processing service for both batch and real-time data streaming. It allows to set up processing pipelines for integrating, preparing and analyzing large data sets. Partly based on Google frameworks MillWheel and FlumeJava, it is designed for large scale data ingestion and low latency processing. Cloud Dataflow can consume data in publish-and-subscribe mode from Google Cloud Pub/Sub or, in batch mode from any database or file system (such as Cloud Storage). It fully supports SQL queries via Google BigQuery which makes it the natural solution to interface Google Pub/Sub and BigQuery. BigQuery is a fully managed data warehouse for large-scale data analytics. It offers users the ability to manage data using SQL-like queries against very large data sets and get results with an excellent response time. BigQuery uses columnar storage and Tree architecture to dispatch queries and aggregate results across multiple machines. As a result, BigQuery is able to run queries on datasets containing terabytes of data within a few seconds. BigQuery also provides a REST API that lets you control and query your data using your favorite client language and libraries. Alternatively, you can access it through command-line tools or google online console. "In conclusion, I would say that the Google Cloud Platform is definitely a solution to consider when implementing your Big Data projects." Its serverless and scalable approach represent a major asset to meet today's requirements of applications generating an unprecedented amount of data from diverse sources. The GCP services are also very well documented, and an infrastructure can be put in place fairly quickly. Lastly, the major benefit is probably the pricing, as the cost associated to the use of these services is very minimal and can be finely controlled through the google online console (e.g. BigQuery Pricing).