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