class: center, middle, inverse # Google Summer of Code 101 (ou *Comment j'ai eu une job chez Wikimédia en quatre mois*) .footnote[par [Frédéric Bolduc](http://ferdbold.com)] --- .left-column[ ### Plan ] .right-column[ 1. Google Summer of quoi? 2. Appliquer à GSoC 3. Travailler chez Wikimédia 4. Contribuer à Wikipédia ] --- class: center, middle, inverse # Google Summer of quoi? ![wut?](/img/talk/gsoc-101/jackie-chan.jpg) --- layout: true .left-column[ ### Plan ### Google Summer of quoi? ] --- .right-column[ .center[![Google Summer of Code 2015 logo](/img/talk/gsoc-101/gsoc-logo.png)] **Google Summer of Code:** - est un programme international visant à regrouper les étudiants universitaires avec des *Open Source Organizations (OSO)* - est organisé par Google chaque été, de la fin mai à la fin août pour **12 semaines** Site officiel: https://developers.google.com/open-source/gsoc/ ] --- .right-column[ ## Quelques stats - Google Summer of Code 2015 était la **onzième** édition du programme - En 2015: - **1051 étudiants** de 73 pays ont été admis, dont **23 Canadiens** - **137 organisations** ont participé, dont [Mozilla](https://www.mozilla.org/fr/), la [Linux Foundation](http://www.linuxfoundation.org/), la [Fondation Wikimédia](https://wikimediafoundation.org/wiki/Home) et le [Tor Project](https://www.torproject.org/) - La grande majorité des étudiants étudiaient l'informatique, mais des étudiants en astronomie, géomatique, droit, musique, océanographie et philosophie ont aussi été admis - **87% des étudiants admis** ont terminé le projet avec succès (dont moi :D) ] --- .right-column[ ## Précisions - Le programme est ouvert à **tous les cycles universitaires** - L'étudiant ne travaille **pas** pour Google, mais pour une *OSO* - L'étudiant travaille de chez lui *(bien qu'il n'est pas interdit que l'organisation organise un déplacement durant l'été)* - Tout le code produit dans le cadre du programme est *open source* - GSoC est un programme payé. Un étudiant admis reçoit **$5500 USD*** durant l'été, réparti de la manière suivante: - $500 USD après le début du programme - $2250 USD après l'évaluation de mi-été (si réussie) - $2250 USD après l'évaluation de fin d'été (si réussie) - L'étudiant gère son temps durant l'été, mais GSoC représente un **travail à temps plein** ] .footnote[*Oui, vive les taux de change] --- layout: false class: inverse, center, middle # Appliquer à GSoC --- layout: true .left-column[ ### Plan ### Google Summer of quoi? ### Appliquer à GSoC ] --- .right-column[ ## Le processus d'application Les étudiants ont *environ une semaine* pour envoyer des applications à des projets. Les étudiants peuvent soumettre plusieurs applications, mais ne pas sous-estimer le temps requis! Souvent, la rédaction d'une *micro-tâche* est requise avec l'application. - Une micro-tâche consiste généralement d'un bugfix facile (<10 lignes) dans la même application où le projet se déroulera. [Mon application](https://phabricator.wikimedia.org/T89287) ] --- .right-column[ ## Calendrier 2015 - **20 février**: Liste des projets annoncés - **16 au 27 mars**: Période d'application - **27 avril**: Résultats annoncés - **27 avril au 25 mai**: *Community bonding* - **25 mai au 21 août**: `fun code time` ] .footnote[Voici le [calendrier 2016](https://summerofcode.withgoogle.com/) pour les intéressés] --- .right-column[ ## Trucs faciles minute* - **Commencez tôt!** 10 jours, c'est très court. Publiez un brouillon si c'est possible et ajustez au fil des commentaires que vous recevrez jusqu'à la date limite. - **Qualité > Quantité:** Vous avez beaucoup plus de chances d'être choisi si vous concentrez vos efforts sur une ou deux applications. - **Planifiez:** Montrez que le sujet vous intéresse beaucoup en commençant à soumettre des idées. Schémas UML, maquettes d'interface, échéancier, bouts de code, etc. - **Restez alerte!** Les mentors *vont* poser des questions sur votre application après que vous l'ayiez posté. Soyez prêts à répondre et soyez disponible! - **Explorez:** La micro-tâche n'est *pas* à sous-estimer. Explorez plus loin que les micro-tâches suggérées et n'ayez pas peur d'essayer un autre ticket. ] .footnote[**Certains trucs peuvent ne pas s'appliquer à toutes les organisations.*] --- layout: false class: inverse, center, middle # Travailler chez Wikimédia --- layout: true .left-column[ ### Plan ### Google Summer of quoi? ### Appliquer à GSoC ### Travailler chez WMF ] --- .right-column[ ## Mon projet J'ai travaillé (et travaille toujours!) sur l'édition de graphiques dans [MediaWiki](http://www.mediawiki.org) [![Graph-VE pitch](https://upload.wikimedia.org/wikipedia/mediawiki/0/03/Ve-graph-showcase.png)](https://upload.wikimedia.org/wikipedia/mediawiki/0/03/Ve-graph-showcase.png) ] --- .right-column[ ## Mon projet J'ai intégré un outil permettant d'éditer des spécifications **[Vega](http://vega.github.io)** dans [VisualEditor](https://www.mediawiki.org/wiki/VisualEditor), l'éditeur WYSIWYG de MediaWiki. Voici un diagramme à bandes simple: ![Diagramme à bandes simple](/img/talk/gsoc-101/vega-simple.png) ] --- .right-column[ ## Mon projet ...et voici une spécification Vega générant un graphique à bandes simple: .center[ [![Spécification Vega](/img/talk/gsoc-101/vega-simple-spec-small.png)](/img/talk/gsoc-101/vega-simple-spec.png) ] ] --- .right-column[ ## Ma routine - Me réveiller - Ouvrir tous mes outils - [Vagrant](http://www.vagrantup.com): Machine virtuelle de développement - [Adium](http://adium.im): Client IRC pour la communication - [Phabricator](http://phabricator.org): Gestion de projet / bug tracking - [SourceTree](http://sourcetree.com): Client Git - [Gerrit](http://www.gerritcodereview.com): Repositoire / Code review - Lundis: Scrum avec les mentors sur [Google Hangouts](http://hangouts.google.com) - `vagrant git-update && vagrant provision` et revenir dans 30 minutes - Travailler - Soumettre sur Gerrit ] --- .right-column[ ## La gameloop de travail ```javascript try { var commit; code.read(); // UNSAFE documentation.read(); // UNSAFE while(!commit.pushed) { commit = code.write(); gerrit.send(commit); gerrit.waitForReview(); } } catch(e) { irc.askQuestion(e.getMessage()); // !important irc.waitForReply(onReply); } function onReply(answer) { if (answer.type === 'jQuery.Deferred') { google.search('jQuery.Deferred'); cry(); } } ``` ] --- .right-column[ ## Mythes - **La distance est votre ennemi.** Travailler à distance veut dire que personne ne sait ce que vous faites à tout moment. *Documentez*, *parlez sur IRC*, *posez des questions*. Apprenez à détester le décalage horaire. - **Les gens savent que vous êtes junior.** Posez des questions, les gens veulent vous voir poser des questions. IRC est là pour ça. Vos mentors n'attendent que ça. - **Vous n'êtes pas payé pour livrer un projet.** GSoC vous donne une *bourse*, pas un salaire. Ce n'est *pas* grave si le projet n'est pas terminé à la fin de l'été. Attendez-vous à passer la première moitié de l'été à comprendre ce que vous faites et à ne rien pusher. - **Chaque étape compte.** Attendez-vous à une moyenne de [10 lignes de code par jour](https://en.wikipedia.org/wiki/The_Mythical_Man-Month). Attendez-vous à réviser chaque patch environ 5 fois avant de la soumettre. Certains jours, vous ne coderez même pas. ] --- layout: false class: inverse, center, middle # Contribuer à Wikipédia --- layout: true .left-column[ ### Plan ### Google Summer of quoi? ### Appliquer à GSoC ### Travailler chez WMF ### Contribuer à Wikipédia ] --- .right-column[ ## À mettre dans vos favoris - [Phabricator public](http://phabricator.wikimedia.org) pour la liste des tâches en cours - [Manuel d'utilisation](http://www.mediawiki.org) de MediaWiki, contient des guides d'installation - [Documentation](http://doc.wikimedia.org) de l'API développeur ] --- .right-column[ ## Installation - Installer [Vagrant](http://www.vagrantup.com) - Installer [git review](https://www.mediawiki.org/wiki/Gerrit/Tutorial#Prepare_to_work_with_Gerrit) - `git clone --recursive https://gerrit.wikimedia.org/r/mediawiki/Vagrant` `./setup.sh` `vagrant up` - Tester que `127.0.0.1:8080` fonctionne bien - Installer les extensions avec Vagrant `vagrant roles enable {extension}` (ex.: `visualeditor`, `math`, `graph`) - `vagrant git-update && vagrant provision` ] --- .right-column[ ## Contribuer un premier changement 1. Se faire connaître sur IRC. Wikimédia utilise [irc.freenode.org](http://www.freenode.org) et possède [beaucoup de salons](https://meta.wikimedia.org/wiki/IRC/Channels), mais le plus important est de loin `#wikimedia-dev` 2. Se créer un compte sur Phabricator et Gerrit 3. Prendre une tâche sur Phabricator 4. Coder une première version d'un fix (un *patchset*) 5. Soumettre la patch sur Gerrit avec `git review` 6. Ajouter d'autres développeurs au patchset sur Gerrit ([exemple](https://gerrit.wikimedia.org/r/#/c/253537/)) 7. Attendre l'inévitable -1 8. Modifier le commit localement et le rebâtir avec `git commit --amend`, le resoumettre avec `git review`, etc etc 9. Victoire! ] --- layout: false class: inverse, center, middle # Des questions? --- class: inverse, center, middle # Merci :) Frédéric Bolduc [@itsferdbold](https://twitter.com/itsferdbold) | [github](http://github.com/ferdbold) .footnote[diapositives disponibles sur [ferdbold.com](https://ferdbold.com)]