WEBVTT 00:00:07.414 --> 00:00:10.008 Ok, bienvenue à tous ! 00:00:10.008 --> 00:00:13.235 Je suis ici aujourd'hui avec Lieke pour vous parler de Cloud9, 00:00:13.235 --> 00:00:19.331 un IDE dans le cloud, avec lequel vous pouvez accéder à votre code de n'importe où, n'importe quand. 00:00:20.039 --> 00:00:26.458 Je suis Ruben Daniels, co-fondateur et directeur de Ajax.org, et Cloud9. 00:00:26.474 --> 00:00:31.835 Je développe en Javascript depuis 1999. 00:00:31.835 --> 00:00:35.921 Ça fait un moment, et javascript a beaucoup évolué. 00:00:35.921 --> 00:00:44.582 Je suis l'auteur et le créateur de la plateforme Ajax.org, qui est une librairie d'interface qu'on utilise dans Cloud9. 00:00:44.582 --> 00:00:51.804 Notre compagnie comprend 20 personnes, et on essaie de révolutionner le développement 00:00:51.804 --> 00:00:54.596 de code, dans le cloud. 00:00:55.380 --> 00:01:01.022 Bonjour, je m'appelle Lieke, je parle français, mais je ne fais pas cette présentation en français, 00:01:01.022 --> 00:01:05.921 parce que Ruben ne parle pas, et moi je ne parle pas "tant" bien. 00:01:05.921 --> 00:01:12.911 Donc, il y a de la traduction, mais je m'intéresse : combien de gens peuvent entendre l'anglais ? 00:01:12.911 --> 00:01:16.696 C'est presque toute la salle. 00:01:16.746 --> 00:01:25.655 Je vais parler anglais. Je fais partie dAjax.org depuis 2009, dans les relations avec les développeurs. 00:01:33.429 --> 00:01:40.426 Donc, ce dont on va parler aujourd'hui : premièrement, une réponse à la question "Pourquoi le cloud ?" 00:01:40.426 --> 00:01:44.420 Ou plutôt, "Pourquoi le cloud pour des développeurs ?" 00:01:44.420 --> 00:01:49.761 Je vous ferai une démo de l'IDE Cloud9, qui est notre vision de la manière de faire, 00:01:49.761 --> 00:01:57.307 et ensuite nous parlerons de collaboration, que nous imaginons dans le futur du développement dans le cloud. 00:01:57.307 --> 00:02:04.350 Je vais laisser Lieke commencer, elle va vous expliquer pourquoi le cloud est important. 00:02:05.365 --> 00:02:12.075 Nous pensons que le développement se fera dans le cloud, donc prenons un peu de recul. 00:02:12.075 --> 00:02:16.673 Il se peut que vous vous demandiez : pourquoi travailler dans le cloud ? 00:02:16.673 --> 00:02:21.748 Et d'ailleurs, c'est quoi cette chose qu'on appelle le "cloud" ? 00:02:22.733 --> 00:02:25.400 Alors, jetons un oeil au cloud... 00:02:25.400 --> 00:02:33.809 Le cloud, c'est l'étape qui suit la virtualisation, qui nous permet de ne plus nous soucier du matériel, 00:02:33.809 --> 00:02:42.586 mais quand même toujours de quel OS tourne, comment installer et configurer des SGBD comme MySQL, 00:02:42.586 --> 00:02:49.343 et il faut toujours garder un oeil sur chaque serveur, on doit s'inquiéter de leur dimensionnement. 00:02:49.343 --> 00:02:55.543 Donc, il y a deux types de systèmes que l'on appelle "cloud" : 00:02:55.543 --> 00:02:59.026 il y en a qui sont des constructions d'APIs sur des systèmes de gestion de virtualisation, 00:02:59.026 --> 00:03:03.647 ce qui est proche de "Infrastructure as a Service" (IaaS) 00:03:03.647 --> 00:03:12.052 et des systèmes où la couche remonte au-dessus de l'API, "Platform as a Service" (PaaS) 00:03:12.052 --> 00:03:18.670 Pour moi, la promesse du cloud, c'est que l'intégration remonte au niveau de l'API, 00:03:18.670 --> 00:03:23.128 que l'on utilise en construisant des applications au-dessus. 00:03:23.128 --> 00:03:27.447 Ça inclut donc l'espace disque, la base de données, et la puissance de calcul. 00:03:27.447 --> 00:03:33.554 Ce niveau de cloud est pour l'instant surtout une promesse, même si Google App Engine 00:03:33.554 --> 00:03:36.967 et Heroku sont plutôt loin dans le concept. 00:03:36.967 --> 00:03:41.983 Donc, regardons un exemple ; il est plutôt simple, peut-être inutile, 00:03:41.983 --> 00:03:44.816 mais j'aimerais vous expliquer ce que le cloud signifie. 00:03:44.816 --> 00:03:49.227 Donc, disons que vous avez une boîtes de livres ; vous devez la stocker, 00:03:49.227 --> 00:03:52.409 et plus tard, vous voudrez récupérer des livres. 00:03:52.409 --> 00:04:01.743 Avant la virtualisation, vous deviez construire un abri ; pour protéger vos livres, avec une porte verrouillable, 00:04:01.743 --> 00:04:06.851 mais maintenant, avec la virtualisation, l'abri est déjà prêt. 00:04:06.851 --> 00:04:13.469 Vous avez quand même besoin de gérer l'espace à l'intérieur, construire les étagères, 00:04:13.469 --> 00:04:17.370 et stocker les livres vous-mêmes. 00:04:17.370 --> 00:04:24.731 Avec le cloud, vous obtenez un gars, ou un robot, vous lui donnez votre stock de livres, 00:04:24.731 --> 00:04:29.584 il les stocke pour vous, et vous pouvez les lui redemander quand vous voulez. 00:04:29.584 --> 00:04:38.036 C'est un exemple simple, mais il montre bien les niveaux de pré-intégration. 00:04:38.036 --> 00:04:43.240 Alors, quelle est la fonctionnalité la plus utile du cloud ? 00:04:43.240 --> 00:04:49.437 Premièrement, gérer le dimensionnement des serveurs. 00:04:49.437 --> 00:04:57.332 Imaginez que vous avez une application sociale, vous commencez avec quelques utilisateurs, 00:04:57.332 --> 00:05:01.511 et vous le faites tourner sur une VM chez Amazon. 00:05:01.511 --> 00:05:05.923 Soudainement, Justin Bieber remarque votre appli, et il tweete dessus. 00:05:05.923 --> 00:05:12.076 Et hop, 8 million d'adolescentes excitées, qui embourbent soudainement sur vos serveurs ! 00:05:12.076 --> 00:05:17.928 Que votre business model soit construit pour ça, c'est pas la question ! 00:05:17.928 --> 00:05:21.596 Et du coup, vos serveurs explosent... 00:05:21.596 --> 00:05:27.378 Il faut que vous puissiez gérer vos ressources back-end rapidement, donc que faire ? 00:05:27.378 --> 00:05:36.179 Il faut démarrer d'autres instances, et un balanceur de charge, mais d'abord, il faut gérer le dimensionnement de votre code ! 00:05:36.179 --> 00:05:40.869 La plupart de vos applications avec des fonctionnalités sociales, ou des bases de données, 00:05:40.869 --> 00:05:44.723 ne peuvent pas se redimensionner horizontalement, sans une étude approfondie ; 00:05:44.723 --> 00:05:47.185 c'est donc un cauchemar ! 00:05:47.185 --> 00:05:54.104 Pas juste à cause de lui, mais à cause du coût pour architecturer et dimensionner votre application 00:05:54.104 --> 00:05:59.411 sans même savoir si elle sera populaire ou non. 00:05:59.411 --> 00:06:06.968 L'infrastructure dans le cloud résoud ce problème ; les APIs sont exactement construites pour le dimensionnement. 00:06:06.968 --> 00:06:13.423 En utilisant cet outil de dimensionnement tout prêt, vous pouvez dimensionner d'1 utilisateur à 1 million, 00:06:13.423 --> 00:06:15.327 puis redescendre à 1 utilisateur ! 00:06:15.327 --> 00:06:23.361 Et ceci, sans le coût de le prévoir à l'avance, ou les pertes dûes à l'échec face à la popularité soudaine ! 00:06:23.361 --> 00:06:27.611 En gros, le cloud sauve du temps et de l'argent, 00:06:27.611 --> 00:06:33.114 et les développeurs peuvent se concentrer sur ce qu'ils aiment faire le plus : développer des applications ! 00:06:33.114 --> 00:06:38.826 Ils peuvent se concentrer sur les fonctionnalités demandées par les utilisateurs. 00:06:38.826 --> 00:06:43.354 Je pense qu'on peut se mettre d'accord pour dire que le cloud, c'est un truc sympa. 00:06:43.354 --> 00:06:45.026 Ruben ? 00:06:45.026 --> 00:06:48.694 Qu'est-ce que ça veut dire pour le développement ? 00:06:48.694 --> 00:06:54.081 Les plateformes cloud fournissent un SDK, que vous installez sur votre machine, 00:06:54.081 --> 00:06:58.563 et vous espérez que tout marchera pareil sur votre machine et dans le cloud, mais ce n'est jamais le cas. 00:06:58.563 --> 00:07:03.741 Regardons App Engine, dans Google, qui embarque Big Table. 00:07:03.741 --> 00:07:08.222 Big Table est cette énorme infrastructure dans le cloud pour stocker des données ; 00:07:08.222 --> 00:07:11.102 vous ne pouvez pas l'installer sur votre PC. 00:07:11.102 --> 00:07:17.418 Donc, vous devez simuler ça, quand vous installez ce SDK, vous simulez l'environnement cloud. 00:07:17.418 --> 00:07:22.480 Et ce n'est jamais parfait ; vous aurez toujours le cas où votre application marche localement, 00:07:22.480 --> 00:07:27.774 et vous l'uploadez, et elle ne marche pas, à cause de certaines différences. 00:07:27.774 --> 00:07:38.710 Donc, c'est difficile, vous ne pouvez pas tester entièrement votre application, et il faut une solution. 00:07:38.710 --> 00:07:44.004 Cloud9, c'est notre vision d'une solution au problème. 00:07:44.004 --> 00:07:49.507 Le code que vous développez ne vit pas sur votre machine, mais dans le cloud, 00:07:49.507 --> 00:07:58.610 vous développez dans le cloud, et puisque c'est là qu'il vit, vous pouvez accéder toute l'API, dont Big Table. 00:07:58.610 --> 00:08:02.929 Donc quand vous buildez l'application, il n'y a pas de problème. 00:08:02.929 --> 00:08:07.758 Vous pouvez lancer et débuguer dans le même environnement aussi. 00:08:07.758 --> 00:08:12.008 Un autre avantage : vous n'avez pas à télécharger et installer un SDK, 00:08:12.008 --> 00:08:20.529 sur votre système, qui est sans doute différent de celui du développeur qui a créé le SDK. 00:08:20.529 --> 00:08:27.913 Tous ces problèmes s'en vont, vous pouvez commencer à faire ce que vous aimez faire en tant que développeur : 00:08:27.913 --> 00:08:29.788 écrire du code. 00:08:30.465 --> 00:08:37.666 Maintenant, prenons ce scénario, vous êtes un nouveau développeur, vous rejoignez une compagnie, 00:08:37.666 --> 00:08:41.218 qui a distribué une web-app il y a un an ; 00:08:41.218 --> 00:08:45.073 les clients appellent parce qu'ils ont entendu parler d'une nouvelle technologie, 00:08:45.073 --> 00:08:48.904 et ils veulent que la web-app la supporte. 00:08:48.904 --> 00:08:56.427 Pour ajouter cette fonctionnalité convenablement, vous avez besoin de tout l'environnement, 00:08:56.427 --> 00:09:05.437 le serveur, la base de données, scripts pour le déploiement, et d'installer tout ça. 00:09:05.437 --> 00:09:10.011 Il faut que vous trouviez votre chemin dans ce système : discuter avec les administrateurs, 00:09:10.011 --> 00:09:14.214 trouver les mots de passe, comprendre la procédure de déploiement... 00:09:14.214 --> 00:09:20.530 Du coup, avant d'avoir créé un environnement de développement que vous pouvez utiliser 00:09:20.530 --> 00:09:28.285 sans avoir à modifier du code en live, vous devez passez une éternité à faire tout ça. 00:09:28.285 --> 00:09:33.301 Ce problème est une réalité pour beaucoup de développeurs. 00:09:33.301 --> 00:09:38.572 Imaginez que vous tentiez d'ajouter une fonctionnalité, ou de résoudre un bug, 00:09:38.572 --> 00:09:44.052 maintenant, imaginez ça : un environnement de développement qui tourne dans le cloud 00:09:44.052 --> 00:09:49.531 est ce qui est utilisé pour fabriquer cette application. 00:09:49.531 --> 00:09:56.869 Tout l'ensemble d'outils, d'éditeurs et de processeurs sont maintenant disponibles 00:09:56.869 --> 00:10:00.491 en entrant une simple URL dans le navigateur. 00:10:00.491 --> 00:10:09.129 En tant que développeur, vous pouvez démarrer immédiatement, améliorer votre application, 00:10:09.129 --> 00:10:13.402 et tester sur une ferme cloud de test. 00:10:13.402 --> 00:10:17.628 Quand vous avez testé le nouveau code, et avec succès, 00:10:17.628 --> 00:10:21.900 vous pouvez cliquer sur "déployer en prod", et le client est content ! 00:10:21.900 --> 00:10:29.191 Vous n'avez pas à perdre de temps à faire l'admin système, ou à répéter vos efforts ! 00:10:29.191 --> 00:10:35.902 Vous pouvez avoir tout l'environnement de développement d'un projet derrière une simple URL, 00:10:35.902 --> 00:10:41.389 et votre vie est soudainement bien plus heureuse ! 00:10:42.635 --> 00:10:50.256 Je vais vous montrer comment un IDE dans le cloud peut marcher. 00:10:53.781 --> 00:11:04.462 C'est notre site web, c9.io, et vous ne le voyez pas, parce qu'on a deux écrans... 00:11:11.985 --> 00:11:19.857 Donc, vous pouvez vous loguer avec votre compte GitHub ; qui en a un ? 00:11:19.857 --> 00:11:30.352 GitHub est un site qui héberge votre code source, avec un aspect social. 00:11:30.352 --> 00:11:37.945 Pour les gens qui ont un compte c'est facile ; sinon, vous pouvez créer un compte avec Cloud9. 00:11:37.945 --> 00:11:42.961 Ici, vous avez tous vos projets ; ils vivent tous dans le cloud. 00:11:42.961 --> 00:11:51.506 Vous pouvez les ouvrir, en les clonant depuis GitHub. 00:11:51.506 --> 00:11:58.890 On ouvre le projet Node.JS, par exemple. 00:11:58.890 --> 00:12:03.952 Comme vous voyez, vous pouvez reconnaître des éléments d'IDE habituels. 00:12:03.952 --> 00:12:11.173 Un éditeur, un arbre de fichiers, et des éléments d'interface pour vous aider dans certaines tâches. 00:12:11.173 --> 00:12:20.949 Nous voulons cet éditeur innovant, meilleur que les éditeurs que vous connaissez, dans Eclipse, par exemple, 00:12:20.949 --> 00:12:26.011 ou dans d'autres IDEs important, ou des éditeurs de textes. 00:12:26.011 --> 00:12:35.670 Quand nous l'avons construit, en septembre 2010, nous l'avons présenté à une conférence, "JS conf", 00:12:35.670 --> 00:12:40.616 et immédiatement, les gars de Mozilla qui construisaient un éditeur sont venus nous voir : 00:12:40.616 --> 00:12:49.811 "votre éditeur est plus rapide, on pourrait travailler ensemble, et mêler nos efforts" 00:12:49.811 --> 00:12:56.313 Et donc, c'est ce qu'on a fait, on a travaillé avec Mozilla pour le rendre meilleur et plus rapide. 00:12:56.313 --> 00:13:00.655 Et maintenant, on a une vraie communauté de quelques centaines de gens qui donnent du code, 00:13:00.655 --> 00:13:05.763 et qui rendent l'éditeur encore meilleur, avec des raccourcis vim pour ceux qui aiment. 00:13:05.763 --> 00:13:11.475 La coloration syntaxique, et toutes ces choses que vous voulez pour en faire le meilleur éditeur 00:13:11.475 --> 00:13:16.816 au monde, point final, le détail étant qu'il tourne dans un navigateur. 00:13:16.816 --> 00:13:22.667 Le truc cool avec cet éditeur, c'est qui se dimensionne dynamiquement, 00:13:22.667 --> 00:13:28.705 même avec 100000 lignes de code, il serait toujours aussi rapide ; il ne rend que la partie que vous voyez. 00:13:28.705 --> 00:13:38.550 Cloud9 utilise ACE, cet éditeur, il est open-source, sur ace.ajax.org 00:13:38.550 --> 00:13:47.048 et Cloud9 y ajoute notamment des onglets pour naviguer à travers les fichiers. 00:13:47.048 --> 00:13:53.898 et les fichiers vivent dans le cloud, donc vous y accéder dans le navigateur, 00:13:53.898 --> 00:14:01.584 et on supporte l'offline, donc sans connexion, certains fichiers restent disponibles. 00:14:01.584 --> 00:14:06.367 Dans les versions futures, il y aura un support complet de la synchronisation, 00:14:06.367 --> 00:14:09.107 on en a fait une démo le mois dernier. 00:14:09.107 --> 00:14:15.400 Tout votre projet se synchronise automatiquement avec votre système de fichier local. 00:14:15.400 --> 00:14:20.021 Vous pouvez y accéder dans le train. 00:14:20.021 --> 00:14:25.077 Créons une application de zéro. 00:14:35.462 --> 00:14:39.311 Une application Hello World... 00:15:02.049 --> 00:15:09.253 On commence en créant un fichier javascript. 00:15:13.961 --> 00:15:19.115 On l'appelle "HelloWorld", fichier vide. 00:15:19.115 --> 00:15:27.219 On crée un fichier javascript qui s'exécute côté serveur, qui tourne grâce à Node.JS. 00:15:27.219 --> 00:15:31.399 Qui ici connaît Node.JS ? 00:15:31.399 --> 00:15:36.066 Pour ceux qui ne connaissent pas, c'est un runtime javascript, qui utilise V8, 00:15:36.066 --> 00:15:43.659 et exécute du javascript côté serveur, en étant très orienté sur les entrées/sorties asynchrones. 00:15:43.659 --> 00:15:51.577 Vous utilisez un style de développement orienté "événements", comme les événements dans le navigateur, 00:15:51.577 --> 00:15:53.644 sauf qu'on est dans le serveur. 00:15:53.644 --> 00:15:57.196 Pour toutes les opérations qui peuvent prendre du temps, comme la lecture d'un fichier, 00:15:57.196 --> 00:16:04.905 vous passez un callback, qui est retourné quand le contenu du fichier est chargé. 00:16:04.905 --> 00:16:08.133 Ça vous autorise à faire beaucoup de choses en même temps, 00:16:08.133 --> 00:16:12.600 et de ne pas bloquer votre thread principal. 00:16:12.600 --> 00:16:18.098 Donc, créons un petit serveur HTTP. 00:16:27.452 --> 00:16:32.294 On crée une classe HTTP. 00:16:38.156 --> 00:16:47.342 Ça c'est le callback, et il a deux paramètres, "request" et "response". 00:16:58.404 --> 00:17:01.748 On lui demande d'écouter sur le port 80. 00:17:01.748 --> 00:17:10.107 Puisqu'il tourne dans le cloud, il va nous lever une erreur, parce qu'on n'a pas le droit d'écouter sur le port 80. 00:17:10.107 --> 00:17:14.054 Regardons... Je clique sur "debug"... 00:17:14.054 --> 00:17:21.067 La boîte de dialogue me propose d'ajouter des arguments, mais je ne veux pas. 00:17:21.067 --> 00:17:23.737 Et j'obtiens mon erreur. 00:17:23.737 --> 00:17:28.172 C'est exécuté dans le serveur, qui me dit que je ne peux pas accéder ce port, 00:17:28.172 --> 00:17:35.231 il faut que j'utilise le port qui est dans cette variable, que l'on me fournit. 00:17:35.231 --> 00:17:38.644 donc, je copie ça là. 00:17:38.644 --> 00:17:43.265 On devrait faire autre chose, tiens, à la récupération de la requête. 00:17:43.265 --> 00:18:00.464 Répondons, passons "200", et lançons ça. 00:18:05.510 --> 00:18:09.178 J'ai oublié quelque chose ? 00:18:09.178 --> 00:18:18.332 Ah, après le "200", il faut quand même que j'envoie quelque chose. 00:18:27.040 --> 00:18:40.409 Et voila ; c'est un petit serveur web écrit en Node. Je peux l'accéder dans le cloud, et il me dit "HelloWorld". 00:18:40.409 --> 00:18:48.290 Maintenant, un peu plus complexe ; on ajoute un compteur. 00:19:05.998 --> 00:19:10.462 Regardons ce que ça fait. 00:19:16.400 --> 00:19:22.043 À chaque fois que je recharge la page, il s'incrémente, mais deux fois. 00:19:22.043 --> 00:19:31.960 C'est parce que le serveur requête aussi la favicône à chaque requête. 00:19:31.960 --> 00:19:39.334 Pour faire en sorte que ça ne contrarie pas notre test, 00:19:48.026 --> 00:19:55.603 on peut ajouter cette petite condition. 00:20:29.268 --> 00:20:32.678 Désolé ? 00:20:32.678 --> 00:20:39.322 Oui, c'est partiellement vrai. 00:20:46.122 --> 00:20:50.580 Parce que c'est à la favicon qu'il s'intéresse... 00:20:50.580 --> 00:20:56.194 Faute de frappe ? 00:21:12.825 --> 00:21:26.757 Bon, aucune idée de pourquoi ça ne marche pas, mais on peut passer à autre chose. 00:21:26.757 --> 00:21:31.285 On peut aussi positionner un point d'arrêt. 00:21:31.285 --> 00:21:39.040 J'arrête ce process... 00:21:39.040 --> 00:21:44.102 Et maintenant qu'on a lancé une requête, le breakpoint l'arrête. 00:21:44.102 --> 00:21:50.952 On peut inspecter les variables, pour voir ce qui se passe. 00:21:50.952 --> 00:22:01.192 On peut voir la pile d'appels ici, et la visiter. 00:22:01.192 --> 00:22:06.510 Et tout ceci, ce sont les fichiers internes à Node.JS, que l'on visite. 00:22:06.510 --> 00:22:12.367 On peut aussi regarder ce qu'est la variable "counter". 00:22:18.398 --> 00:22:22.322 "counter" est à 1. 00:22:22.322 --> 00:22:30.287 On débloque, et on relance la requête ; et maintenant, c'est 2. 00:22:30.287 --> 00:22:36.470 Vous pouvez aussi changer la variable. 00:22:48.747 --> 00:22:51.649 Et comme vous voyez, on a changé la variable ici. 00:22:51.649 --> 00:22:59.567 Ça permet un debugging d'application auquel on est habitué dans le monde Java. 00:22:59.567 --> 00:23:03.143 Mais ici c'est du javascript, et c'est dans le cloud. 00:23:03.143 --> 00:23:06.278 Donc, on n'a pas d'application qui tourne localement. 00:23:06.278 --> 00:23:13.638 Et c'est le type de choses qui deviennent possibles avec les navigateurs qui sont de plus en plus rapides. 00:23:13.638 --> 00:23:20.321 Beaucoup plus rapides, 3000 fois plus rapides. 00:23:20.321 --> 00:23:27.408 Cette application, en terme de vitesse et de temps de démarrage bat Eclipse, mais parce que c'est dans le cloud, 00:23:27.408 --> 00:23:35.419 on peut faire beaucoup plus, on peut prendre l'URL, et la partager. 00:23:35.419 --> 00:23:42.547 On n'a pas eu à installer quoi que ce soit, j'ai juste créé un projet, pas d'installation de Node, 00:23:42.547 --> 00:23:46.704 ou de Git, ou NPM, ou quoi que ce soit. 00:23:46.704 --> 00:23:51.673 Ce n'est même pas mon ordinateur que je suis en train d'utiliser. 00:23:51.673 --> 00:23:56.526 Je peux prendre n'importe quel ordinateur, et j'ai toujours accès à tous mes projets. 00:23:56.526 --> 00:24:05.280 Ça change beaucoup de choses, mais ce qui compte encore plus, c'est la collaboration. 00:24:05.280 --> 00:24:07.787 Travailler ensemble sur du code. 00:24:07.787 --> 00:24:14.272 Et c'est la partie suivante de cette présentation. 00:24:20.164 --> 00:24:29.544 Il y avait un slide de plus que je voulais évoquer, sur le projet qui tourne sous Cloud9 IDE. 00:24:29.544 --> 00:24:34.305 Ce sont tous des projets open source que l'on a démarrés et que l'on utilise. 00:24:34.305 --> 00:24:42.269 Le plus large est APF, Ajax.org PlatForm, une librairie d'applications qui tourne dans le navigateur. 00:24:42.269 --> 00:24:49.769 C'est open source, et ça vous permet de mélanger plusieurs types de composants, de manière déclarative. 00:24:49.769 --> 00:24:58.291 Et il y a ACE, je vous en ai parlé, l'éditeur avec la coloration syntaxique, la complétion de code, etc. 00:24:58.291 --> 00:25:03.980 Et Cloud9 IDE, qui est open source aussi ; elle est sur GitHub, 00:25:03.980 --> 00:25:08.577 vous pouvez la rélécharger, et l'utiliser localement, ou sur votre serveur Web, si vous le souhaitez. 00:25:08.577 --> 00:25:17.703 Il y a beaucoup d'autres projets, comme JSDav, WebFS, qui est un wrapper pour le FS offline de Chrome, 00:25:17.703 --> 00:25:20.489 et aussi quelques autres librairies. 00:25:20.489 --> 00:25:28.105 Donc, jetez-y un oeil, sur github.com/ajaxorg, si ça vous intéresse. 00:25:28.105 --> 00:25:34.560 Donc, comme Ruben l'a dit, c'est l'étape suivante dans la collaboration. 00:25:34.560 --> 00:25:39.320 Jetons un oeil à la collaboration : il y a des challenges habituels. 00:25:39.320 --> 00:25:45.567 Quand vous regardez le monde, vous voyez que c'est un énorme effort de collaboration : 00:25:45.567 --> 00:25:51.604 bureaux, immeubles, gouvernements, ... tout est collaboration ! 00:25:51.604 --> 00:25:58.198 Et la nature lui a donné une forme particulière, qui la rend efficiente et efficace ! 00:25:58.198 --> 00:26:04.235 Prenons un exemple simple encore : des enfants, qui construisent un château de sable. 00:26:04.235 --> 00:26:11.085 Si on veut faire un truc simple, comme un gros tas de sable, tout le monde peut travailler librement, 00:26:11.085 --> 00:26:17.680 ils travaillent en parallèle, et il n'y a aucun problème, ils font tous la même chose. 00:26:17.680 --> 00:26:24.321 Mais une fois que la pile de sable est finie, il faut des changements dynamiques ; 00:26:24.321 --> 00:26:31.798 les tâches vont être séparées : un enfant va creuser une trancher, un autre construire le château, 00:26:31.798 --> 00:26:35.211 encore un autre doit construire une porte, ... 00:26:35.211 --> 00:26:41.434 La collaboration parallèle vient d'être remplacée par une séparation des tâches, 00:26:41.434 --> 00:26:49.073 et quand un enfant interfère avec les tâches d'un autre, il va y avoir des caprices, sous peu... 00:26:49.073 --> 00:26:53.322 Je ne pense pas que cet enfant déteste les châteaux de sable ; 00:26:53.322 --> 00:27:01.031 je pense qu'il ne peut juste pas séparer ses tâches convenablement avec l'autre enfant. 00:27:01.031 --> 00:27:10.041 C'est une partie difficile de la collaboration ; et fondamentalement, il n'y a pas une seule manière de faire. 00:27:10.041 --> 00:27:18.768 Toutes les tâches ont des paramètres différents selon la phase du process où vous êtes. 00:27:20.722 --> 00:27:28.477 Avec le développement, tout le monde utilise sans doute un de ces contrôleurs de sources. 00:27:28.477 --> 00:27:34.956 Et c'est la manière de collaborer du malchanceux. 00:27:34.956 --> 00:27:40.459 Vous devez uploader votre code pour qu'il soit livré à un serveur, peut-être dans le cloud. 00:27:40.459 --> 00:27:43.478 Et qu'il soit re-downloadé. 00:27:43.478 --> 00:27:48.841 C'est très distant, vous n'avez pas une réponse immédiate, il faut que vous sachiez ce que les autres font, 00:27:48.841 --> 00:27:53.601 en utilisant une autre forme de communication. 00:27:53.601 --> 00:27:58.362 Vous travaillez séparément, chacun dans son silo. 00:27:58.362 --> 00:28:04.608 Il y a beaucoup d'autres moyens de collaborer, et dans Cloud9, on essaie de trouver des pistes 00:28:04.608 --> 00:28:11.249 pour faire en sorte que les développeurs travaillent en temps réel. 00:28:11.249 --> 00:28:17.495 Avoir un IDE dans le cloud ouvre la voie à des nouveaux modes de collaboration. 00:28:17.495 --> 00:28:24.670 Par exemple, les revues de code interactives : vous pouvez parcourir le code, et ajouter un commentaire. 00:28:24.670 --> 00:28:30.382 Et c'est immédiatement partagé avec les autres personnes, parce que c'est dans le cloud. 00:28:30.382 --> 00:28:41.806 Pensez aussi à l'entraide, à la formation, au partage de morceaux de codes, ou de l'URL de votre application. 00:28:41.806 --> 00:28:46.822 On n'aura plus besoin de dépendre d'inventions comme celle-ci, pour la programmation à plusieurs. 00:28:46.822 --> 00:28:53.880 Il y a une nouvelle manière de collaborer qui améliore l'expérience de développement. 00:28:53.880 --> 00:29:01.450 Disons que vous avez une équipe sur un projet, je vais prendre un exemple véridique. 00:29:01.450 --> 00:29:10.808 Avec Cloud9, on a la possibilité de partager notre environnement de travail. 00:29:10.808 --> 00:29:14.523 Regardons un peu la situation de notre compagnie à nous : 00:29:14.523 --> 00:29:18.958 on a des gens qui travaillent à distance, aux USA ou en Europe, 00:29:18.958 --> 00:29:22.673 mais l'équipe centrale de développement est à Amsterdam. 00:29:22.673 --> 00:29:30.522 Souvent, quelqu'un a un problème, il y a un bug à corriger, du code doit être produit, 00:29:30.522 --> 00:29:39.647 ça nécessite d'y réfléchir, et d'y collaborer ; c'est pratique de travailler ensemble sur ce problème. 00:29:39.647 --> 00:29:42.317 Comment faire ? 00:29:42.317 --> 00:29:47.402 Avec Cloud9, tout le projet est en ligne, pas juste le code. 00:29:47.402 --> 00:29:53.045 Le runtime, la base de données, tout est là derrière une unique URL. 00:29:53.045 --> 00:29:56.760 Comme vous en avez l'habitude avec d'autres services en ligne, 00:29:56.760 --> 00:30:04.446 avec Cloud9, vous pouver partager l'URL de votre environnement avec vos collègues de l'autre côté du monde. 00:30:04.446 --> 00:30:10.785 Pour le faire, vous positionnez des permissions, lecture seule ou lecture-écriture. 00:30:10.785 --> 00:30:14.639 Puis, votre ami rejoint votre projet. 00:30:14.639 --> 00:30:21.536 À l'intérieur du projet, vous pourrez communiquer directement, chat, vidéo, conversations audio ; 00:30:21.536 --> 00:30:30.406 mais avant tout, vous pouvez coder simultanément, de manière collaborative, comme vous le faites avec Google Docs. 00:30:30.406 --> 00:30:36.652 Et non seulement ça, mais la personne qui s'est fait inviter peut lancer l'application. 00:30:36.652 --> 00:30:41.528 En cliquant sur le bouton "debug", vous lancez le code dans un système identique au vôtre, 00:30:41.528 --> 00:30:44.686 parce que c'est très exactement votre système. 00:30:44.686 --> 00:30:55.762 Donc la personne n'a pas à simuler votre environnement, et la phrase "Ça marche chez moi" n'existe plus ! 00:30:55.762 --> 00:31:00.406 Donc, en résumé : les APIs dans le cloud vous aident à dimensionner, 00:31:00.406 --> 00:31:06.675 et avoir votre code dans le cloud vous facilitent l'accès, la collaboration, et la maintenance sur vos applications. 00:31:06.675 --> 00:31:10.158 L'intégration permet de cibler facilement des plateformes. 00:31:10.158 --> 00:31:15.267 Donc, c'était un aperçu de l'avenir, merci de votre attention, 00:31:15.267 --> 00:31:22.256 et si vous voulez collaborer, ou utiliser notre application, c'est en ligne sur c9.io, ou GitHub. 00:31:22.256 --> 00:31:26.349 Merci beaucoup ! 00:31:33.564 --> 00:31:36.490 Y a-t-il des questions ? 00:31:36.490 --> 00:31:40.135 C'est un vieux troll, désolé de le présenter ! 00:31:40.135 --> 00:31:48.355 Mais il y a un problème avec la confiance et la sécurité, et l'accessibilité, dans le cloud. 00:31:48.355 --> 00:31:54.532 Je peux hacker dans le train, et pusher mes commits ; mais que se passe-t-il 00:31:54.532 --> 00:32:01.591 si je possède une compagnie privée, et je ne veux pas ne plus être capable de récupérer mes données 00:32:01.591 --> 00:32:06.002 parce que le service est down, ou a simplement fermé ? 00:32:06.002 --> 00:32:09.555 Je ne vous souhaite pas d'avoir à fermer Cloud9, bien sûr... 00:32:09.555 --> 00:32:19.795 Mais quels sont les problèmes de sécurité, de confidentialité, de confiance, et comment vous les gérez ? 00:32:19.795 --> 00:32:23.301 Je pense que ce sont des soucis généralisés au le cloud ; 00:32:23.301 --> 00:32:26.088 et je pense que le monde s'en rend progressivement compte, 00:32:26.088 --> 00:32:29.478 de plus en plus de grosses applications tournent en ligne, 00:32:29.478 --> 00:32:34.633 et les gens mettent beaucoup de leur valeur dedans, regardez Salesforce, par exemple. 00:32:34.633 --> 00:32:38.742 Il y a des solutions, notamment aux problèmes de sécurité bien entendu ; 00:32:38.742 --> 00:32:43.851 on pourrait même avancer qu'un fournisseur de cloud investira plus dans sa sécurité, 00:32:43.851 --> 00:32:52.558 parce que c'est son "nom", et sa compagnie n'aura aucune valeur en cas de problème de sécurité. 00:32:52.558 --> 00:32:58.596 Mais il y a des compagnies qui veulent pouvoir contrôler ça eux-mêmes. 00:32:58.596 --> 00:33:04.493 Je pense qu'il va toujours y avoir un équilibre entre le cloud privé, et le cloud public ; 00:33:04.493 --> 00:33:09.904 et ceux qui se soucient plus des coûts se pencheront vers les publics, 00:33:09.904 --> 00:33:21.278 et ceux qui se soucient plus de la sécurité se pencheront vers les clouds privés. 00:33:25.647 --> 00:33:31.545 Dans l'exemple, vous avez fait une application en Node.JS, et je me demande, 00:33:31.545 --> 00:33:37.837 il y a plusieurs versions de Node.JS, comment vous en sortir ? 00:33:37.837 --> 00:33:42.296 Chaque utilisateur installe sa propre version de Node.JS ? 00:33:42.296 --> 00:33:48.263 Est-ce qu'il y a des modules spéciaux, des hacks spéciaux ? 00:33:48.263 --> 00:33:54.207 Ou est-ce que vous le mettez à jour à la dernière version, mais du coup le code doit être mis à jour ? 00:33:54.207 --> 00:33:57.133 Ou alors vous restez sur une version spécifique ? 00:33:57.133 --> 00:34:02.195 Pour le moment, nous ne supportons qu'une version, mais on travaille dur, 00:34:02.195 --> 00:34:09.463 pour gérer ce problème de versions ; et c'est dans le SDK, et dans le runtime en effet. 00:34:09.463 --> 00:34:15.268 Ce que vous aurez, c'est un fichier de configuration, dans votre projet, qui déclare la version, 00:34:15.268 --> 00:34:17.636 et on les supportera toutes. 00:34:17.636 --> 00:34:29.338 On travaille ensemble avec Joyent pour supporter toutes ces versions de Node simultanément. 00:34:35.400 --> 00:34:39.208 Bonjour, je ne vous ai jamais vu sauvegarder votre code ; 00:34:39.208 --> 00:34:42.923 et comment est-ce que vous gérer le versionning, aussi ? 00:34:42.923 --> 00:34:50.144 J'ai sauvegardé du code en utilisant Cmd+S, mais c'était rapide ! 00:34:50.144 --> 00:34:56.158 Si je ne sauvegarde pas, il sauvegardera quand je cliquerai sur le bouton "debug". 00:34:56.158 --> 00:35:02.079 Pour le versionning, vous avez dû voir vers le bas l'interface en ligne de commande ; 00:35:02.079 --> 00:35:07.281 et vous pouvez faire beaucoup de choses que vous feriez sur votre ordinateur, comme "ls" ou "cd", 00:35:07.281 --> 00:35:11.878 ou taper "git" ; et même "git" et ce que vous voulez. 00:35:11.878 --> 00:35:17.033 "git status", "git push/pull", "git commit", pour gérer vos versions. 00:35:17.033 --> 00:35:25.648 On ajoute Mercurial en ce moment aussi ; Subversion n'est pas encore sûr, mais on finira probablement par l'ajouter. 00:35:25.648 --> 00:35:34.959 Pardon ? inaudible Peut-être, peut-être... 00:35:34.959 --> 00:35:41.878 Il demandait aussi si ça allait fonctionner avec Bazaar. 00:35:41.878 --> 00:35:51.909 Bonjour, si j'ai bien compris, votre IDE Cloud9 exécute du Javascript du côté du serveur ? - Oui. 00:35:51.909 --> 00:35:57.436 Du coup, est-ce qu'on devrait l'utiliser comme CDN, Content Delivery Network ? 00:35:57.436 --> 00:35:59.618 Est-ce possible ? 00:35:59.618 --> 00:36:02.730 Heu... non... 00:36:02.730 --> 00:36:09.347 Ce sont des concepts très différents... 00:36:09.347 --> 00:36:15.501 Il exécute du code, mais qui vivra uniquement sur un serveur, quelque part dans le cloud. 00:36:15.501 --> 00:36:21.515 Donc ce n'est pas plus proche de certains réseaux, c'est à un seul endroit, 00:36:21.515 --> 00:36:24.069 contrairement à ce que ferait un CDN. 00:36:24.069 --> 00:36:28.341 Ok, donc c'est juste de l'exécution locale pour tester ? 00:36:28.341 --> 00:36:32.149 Oui, l'exécution est dans le but de développer votre application ; 00:36:32.149 --> 00:36:40.811 donc on vous fournit toute l'infrastructure pour développer votre appli, comme vous l'installeriez localement. 00:36:40.811 --> 00:36:50.795 Juste un petit exemple : votre IDE a l'air d'utiliser MarkItUp, pour les Cmd+S et tout. 00:36:50.795 --> 00:36:57.273 Si vous voulez refactoriser MarkitUp avec votre IDE, que va-t-il se passer ? 00:36:57.273 --> 00:37:01.523 Je ne comprends pas vraiment la question, désolé ? 00:37:01.523 --> 00:37:08.164 C'est écrit en Javascript, Cloud9? - Oui. - Il utilise des librairies, des plugs-in jQuery ? 00:37:08.164 --> 00:37:12.483 Quelque chose de similaire, mais pas jQuery, oui. 00:37:12.483 --> 00:37:19.634 Et si je veux refactoriser un plug-in jQuery, par exemple (désolé pour mon anglais) 00:37:19.634 --> 00:37:27.552 qui est utilisé par Cloud9 IDE ? Est-ce qu'il y a des conflits entre les exécutions ? 00:37:27.552 --> 00:37:33.357 Non, l'exécution de votre application est complètement séparée de Cloud9. 00:37:33.357 --> 00:37:41.879 Cloud9 est juste une application qui tourne là, et quel que soit le code que vous tapez, il tourne dans une nouvelle fenêtre. 00:37:41.879 --> 00:37:45.734 Donc il n'y a pas de conflits. 00:37:45.734 --> 00:37:49.193 C'était ça la question que tu voulais poser ? - Ouais ouais. 00:37:49.193 --> 00:37:52.421 Merci beaucoup. Juste pour savoir. 00:37:52.421 --> 00:37:56.763 inaudible 00:37:56.763 --> 00:38:01.779 Production ? Non, c'est juste pour du développement. 00:38:01.779 --> 00:38:06.283 La question c'est : est-ce fait pour du développement, ou aussi de la production ? 00:38:06.283 --> 00:38:09.348 Et on veut vraiment rester concentrés sur le développement. 00:38:09.348 --> 00:38:12.831 On travaille avec d'autres compagnies qui fournissent des environnements de production, 00:38:12.831 --> 00:38:19.402 donc vous pouvez publier votre application depuis Cloud9, vers l'environnement que vous voulez. 00:38:19.402 --> 00:38:23.048 Vous avez montré Node.JS, mais qu'est-ce qu'il en est de Python, de Ruby, ... ? 00:38:23.048 --> 00:38:28.389 On était à Google I/O le mois dernier, à démontrer un runtime Python, 00:38:28.389 --> 00:38:31.361 pour pouvoir déployer dans Google App Engine. 00:38:31.361 --> 00:38:36.910 On travaille sur ce type de runtimes, et on les ajoutera dans les mois qui viennent. 00:38:36.910 --> 00:38:41.252 On pourrait considérer un déploiement vers Heroku, aussi ? 00:38:41.252 --> 00:38:45.293 Où es... ? - Juste derrière. - Ah ! 00:38:45.293 --> 00:38:52.770 Désolé ? - On pourrait considérer un déploiement vers Heroku, en d'autres langages, comme PHP ? 00:38:52.770 --> 00:39:05.866 Oui, on pense à Ruby aussi, et peut-être PHP, et on discute avec ces fournisseurs pour déployer vers eux. 00:39:05.866 --> 00:39:14.666 Désolé pour mon anglais. Est-ce qu'il y a des services de tests automatisés dans l'outil ? 00:39:14.666 --> 00:39:18.706 Vous parlez de développement, de plans, d'infrastructure, ... 00:39:18.706 --> 00:39:23.188 Très bonne question. Pas encore, mais c'est sur la roadmap. 00:39:23.188 --> 00:39:29.364 Et on est en train de construire une jolie interface, pour brancher n'importe quel framework 00:39:29.364 --> 00:39:32.917 de test unitaire que vous souhaitez. 00:39:32.917 --> 00:39:37.120 Et on va aussi ajouter des tests Selenium, pour que vous puissiez les lancer, 00:39:37.120 --> 00:39:47.468 les enregistrer dans Cloud9 mais les lancer dans le cloud, pour n'importe quel navigateur. 00:39:56.299 --> 00:40:02.522 Bonjour, j'aimerais en savoir plus sur votre business model, est-ce que le service est gratuit ? 00:40:02.522 --> 00:40:10.487 Pourquoi devrais-je avoir confiance en un service gratuit comme le vôtre ? 00:40:10.487 --> 00:40:16.454 Ok, le service est basé sur du freemium, c'est-à-dire qu'il y a une partie gratuite. 00:40:16.454 --> 00:40:21.121 C'est gratuit pour une utilisation open-source ; donc si vous avez un projet open-source, 00:40:21.121 --> 00:40:24.256 et que vous voulez travailler dessus dans le cloud, c'est gratuit. 00:40:24.256 --> 00:40:32.200 Si c'est un projet commercial, que vous voulez avoir en privé, alors il faut payer. 00:40:35.077 --> 00:40:38.676 Que se passe-t-il quand vous perdez la connexion ? 00:40:38.676 --> 00:40:44.481 On peut toujours utiliser l'éditeur et écrire du code ? 00:40:44.481 --> 00:40:49.798 La fonctionnalité "offline" devrait disponible dans quelques semaines ; 00:40:49.798 --> 00:40:55.278 elle permettra de synchroniser tout le projet sur votre système de fichier, 00:40:55.278 --> 00:40:59.527 et en utilisant le manifest HTML5, l'application est disponible aussi. 00:40:59.527 --> 00:41:04.752 Donc vous pouvez faire toutes les opérations, créer des répertoires, des fichiers, etc. 00:41:04.752 --> 00:41:14.368 les sauvegarder, les supprimer, et ils seront resynchronisés en se reconnectant. 00:41:23.722 --> 00:41:30.897 Si vous n'êtes pas un environnement de production, comment vous gérer les déploiements ? 00:41:30.897 --> 00:41:36.795 L'un de vos arguments était que vous êtes dans le cloud, donc c'est facile de déployer ; 00:41:36.795 --> 00:41:45.642 mais si la configuration de l'environnement de déploiement est différent du vôtre, vous ne résolvez pas le problème ? 00:41:45.642 --> 00:41:52.051 Ce qu'on fait, c'est qu'on travaille ensemble avec les PaaS, ou les fournisseurs d'infrastructure. 00:41:52.051 --> 00:41:57.763 Quand vous commencez votre projet, vous pouvez choisir : je veux créer un projet Google App Engine. 00:41:57.763 --> 00:42:02.639 Et votre environnement se configure pour que vous développiez sur App Engine. 00:42:02.639 --> 00:42:06.285 Et quand vous déployez, il déploie sur App Engine. 00:42:06.285 --> 00:42:14.296 Du coup, on génère de la liberté, parce que toutes ces organisations ré-invente comment on fait ça. 00:42:14.296 --> 00:42:23.583 Nous on ne veut pas faire ça, on veut juste fournir la meilleure expérience de développement. 00:42:23.583 --> 00:42:25.952 Je pense qu'on n'a plus de temps. 00:42:25.952 --> 00:42:33.313 On a deux livres, qui doivent être donnés aux meilleures questions ; mais il faut que tu me donnes un coup de main. 00:42:33.313 --> 00:42:36.331 J'ai trouvé la première question plutôt bonne. - Moi aussi, oui. 00:42:36.331 --> 00:42:39.187 Et qui va avoir le deuxième ? 00:42:39.187 --> 00:42:43.181 J'ai trouvé la question sur les tests très bonne. - Mais c'est un orateur ! 00:42:43.181 --> 00:42:46.827 Mais il ne peut pas l'avoir, je sais, c'est juste une remarque pour l'honneur ! 00:42:46.827 --> 00:42:51.564 Bon, du coup, on va le garder ! 00:42:51.564 --> 00:42:53.421 Je pense que... 00:42:53.421 --> 00:42:56.393 La dernière ? 00:42:56.393 --> 00:43:02.084 Ok, donc pour la première et la dernière question ! 00:43:02.084 --> 00:43:04.530 Félicitations ! 00:43:08.653 --> 00:43:09.884 Voila. 00:43:09.884 --> 00:43:13.878 Vous pouvez poser quand même une dernière question en français si vous voulez, si c'est juste la langue qui vous retient. 00:43:13.878 --> 00:43:17.779 On traduira après. 00:43:17.779 --> 00:43:21.076 Si vous avez honte de votre anglais... 00:43:21.076 --> 00:43:22.725 Merci beaucoup ! 00:43:22.725 --> 99:59:59.999 Merci !