|
|
|
<!doctype html>
|
|
|
|
<html lang="en">
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
|
|
|
<title>Por que e Como Participar de Projetos Open Source</title>
|
|
|
|
|
|
|
|
<meta name="description" content="A framework for easily creating beautiful presentations using HTML">
|
|
|
|
<meta name="author" content="Hakim El Hattab">
|
|
|
|
|
|
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
|
|
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/reveal.css">
|
|
|
|
<link rel="stylesheet" href="reveal.js/css/theme/night.css" id="theme">
|
|
|
|
|
|
|
|
<!-- Code syntax highlighting -->
|
|
|
|
<link rel="stylesheet" href="reveal.js/lib/css/zenburn.css">
|
|
|
|
|
|
|
|
<!-- Printing and PDF exports -->
|
|
|
|
<script>
|
|
|
|
var link = document.createElement( 'link' );
|
|
|
|
link.rel = 'stylesheet';
|
|
|
|
link.type = 'text/css';
|
|
|
|
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
|
|
|
|
document.getElementsByTagName( 'head' )[0].appendChild( link );
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<!--[if lt IE 9]>
|
|
|
|
<script src="lib/js/html5shiv.js"></script>
|
|
|
|
<![endif]-->
|
|
|
|
|
|
|
|
<style type="text/css" media="screen">
|
|
|
|
.happy {
|
|
|
|
color: yellow;
|
|
|
|
}
|
|
|
|
|
|
|
|
.reveal section img {
|
|
|
|
border: none;
|
|
|
|
}
|
|
|
|
|
|
|
|
.reveal ul.empty {
|
|
|
|
list-style: none outside;
|
|
|
|
}
|
|
|
|
|
|
|
|
li {
|
|
|
|
display: block;
|
|
|
|
}
|
|
|
|
|
|
|
|
.semi-opaque {
|
|
|
|
background-color: rgba(0, 0, 0, 0.7);
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<div class="reveal">
|
|
|
|
<div class="slides">
|
|
|
|
<section data-background="_images/osi_keyhole_300X300_90ppi_0.png" data-header>
|
|
|
|
<h2 class="semi-opaque">Por que e Como Participar de Projetos Open Source</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img src="_images/avatar-hd.png" alt="Me" style="float:left;width:160px;" class="no-border">
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<ul class="empty">
|
|
|
|
<li>Júlio Biason</li>
|
|
|
|
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
|
|
|
|
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
|
|
|
|
<li>julio.biason@pm.me</li>
|
|
|
|
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>Motivação</h2>
|
|
|
|
|
|
|
|
<p class="fragment">Ao contrário do que muitos acreditam, é possível
|
|
|
|
particiar <strong>sem</strong> ser apenas com código</p>
|
|
|
|
|
|
|
|
<p class="fragment">... e todo mundo sai ganhando.</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
O que me levou a fazer essa apresentação foi justamente a participação
|
|
|
|
em eventos passados do TcheLinux. Apesar de estar no meio do open source
|
|
|
|
desde 2000 e sempre estar usando (e ganhando dinheiro) com projetos
|
|
|
|
open source, eu sempre senti que não contribui o suficiente.
|
|
|
|
|
|
|
|
Mas existem coisas simples que qualquer um pode fazer e se eu não
|
|
|
|
consigo ajudar, pelo menos eu posso incentivar mais pessoas a participar.
|
|
|
|
E pode ser que alguém que eu incentive resolva justamente um
|
|
|
|
dos meus problemas.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>Por Que Participar?</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Por Que Participar?</h4>
|
|
|
|
|
|
|
|
<h2>Aprender algo novo</h2>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
O que a maior parte dos professores (principalmente) faz é sugerir
|
|
|
|
participar de um projeto open source para aprender uma nova
|
|
|
|
linguagem.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Por Que Participar?</h4>
|
|
|
|
|
|
|
|
<h2>Para retornar à comunidade</h2>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Essa deve ser o "por que" mais citado: O software está
|
|
|
|
disponível para quem quiser usar e seria interessante
|
|
|
|
que quem utilize retorne algo ao desenvolvimento.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Por Que Participar?</h4>
|
|
|
|
|
|
|
|
<h2>"Scratch an itch"</h2>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Se tem algo lhe incomodando no software, ele pode ser alterado.
|
|
|
|
E se você não se sentir capaz de fazer, ainda é possível pedir
|
|
|
|
pra alguém resolver isso pra você (e talvez você queria pagar
|
|
|
|
essa pessoa...)
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Por que participar?</h4>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
<a href="https://hbswk.hbs.edu/item/the-hidden-benefit-of-giving-back-to-open-source-software">
|
|
|
|
The Hidden Benefit of Giving Back to Open Source Software
|
|
|
|
</a>
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>Como Participar</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
|
|
|
|
<h2>Contribuir com código</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Enviar Código</h3>
|
|
|
|
|
|
|
|
<p>Enviar código com novas features é a forma mais direta <span class="fragment">mas não a mais fácil.</span></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Enviar Código</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Por onde começar?
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p class="fragment"><strong>Issue tracker</strong></p>
|
|
|
|
<p class="fragment">... ou mande um email perguntando "como eu posso ajudar?"</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Muitos projetos tem, no seu issue tracker, indicadores
|
|
|
|
de problemas mais fáceis para serem resolvidos.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Enviar Código</h3>
|
|
|
|
|
|
|
|
<p>Lembre-se: para alguém, o projeto é seu filho.</p>
|
|
|
|
|
|
|
|
<p class="frament"><small>Anedota: IceWM.</small></p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
IceWM é um gerenciador de janelas com uso mínimo de memória, mas altamente
|
|
|
|
configurável. Depois de abandonado pelo desenvolvedor original, ele foi
|
|
|
|
mantido por outra pessoa. Eu comecei a portar os temas do Enlightment
|
|
|
|
(o gerenciador com os temas mais bonitos que havia), mas havia um
|
|
|
|
problema: Sombras nos títulos. Como o IceWM não tinha suporte às
|
|
|
|
sombras, alguns temas ficavam completamente ilegíveis. Eu corri
|
|
|
|
atrás do código onde mostrava o título (dica: eu procurei dentro
|
|
|
|
do código pela variável do arquivo de tema que definia a cor do
|
|
|
|
título) e adicionei a nova funcionalidade.
|
|
|
|
|
|
|
|
Como o meu patch gerou mais burburinho na lista de discussão e
|
|
|
|
IRC do que o que o mantenedor estava fazendo, ele portou meu
|
|
|
|
patch, trocando os nomes das variáveis. No final, eu fiquei como
|
|
|
|
"co-autor" da feature e não como contribuidor.
|
|
|
|
|
|
|
|
Mas eu ganhei a feature que eu queria.
|
|
|
|
|
|
|
|
(Dica: o que eu usei pra achar onde estava a função foi
|
|
|
|
`grep`.)
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Enviar Código</h3>
|
|
|
|
|
|
|
|
<h2>PR = "Puppy Request"</h2>
|
|
|
|
|
|
|
|
<a href="https://www.youtube.com/watch?v=tzFWz5fiVKU&t=2970s">
|
|
|
|
Brett Cannon (Microsoft) - Setting expectations for Open Source participation
|
|
|
|
</a>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Enviar Código</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Muito raramente, o desenvolvedor simplesmente não tem tempo
|
|
|
|
para pesquisar como corrigir uma feature que ele mesmo quer
|
|
|
|
colocar.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p><small>Anedota: Htop.</small></p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Uma noite, quando eu estava trabalhando até mais tarde, o
|
|
|
|
Hisham, autor do Htop, veio conversar comigo no IM da época
|
|
|
|
(que eu não lembro exatamente qual era), como era costume
|
|
|
|
quando ele tava perdido e querendo desopilar um pouco.
|
|
|
|
|
|
|
|
Ele me explicou que tava com um problema no top dele, para
|
|
|
|
mostrar o usuário correto em aplicativos que estavam em
|
|
|
|
unidades NFS, mas o `ps` mostrava corretamente.
|
|
|
|
|
|
|
|
"Olha o fonte do psutils, oras. É pra isso que é open source",
|
|
|
|
eu disse.
|
|
|
|
|
|
|
|
"Ah, não tô com vontade."
|
|
|
|
|
|
|
|
Por pura irritação, eu baixei o fonte do psutils e olhei o
|
|
|
|
nome da função que encontrava o usuário e passei pra ele.
|
|
|
|
Meu nome está no "Thanks" do Htop 1 até hoje simplesmente
|
|
|
|
por isso.
|
|
|
|
|
|
|
|
(Dica: o que eu sei pra encontrar a função foi `ctags` pra
|
|
|
|
mapear o conteúdo do projeto e fui correndo de função em
|
|
|
|
função)
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Traduções</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Traduções</h3>
|
|
|
|
|
|
|
|
<p>Se você não entende de código, pode ajudar traduzindo
|
|
|
|
a aplicação para a sua língua.</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Documentação</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Documentação</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Desde "como instalar esse projeto" ao "o que ele faz",
|
|
|
|
ainda falta documentação de muita coisa. Nem é preciso
|
|
|
|
saber programar, pegando algumas dicas com o autor do
|
|
|
|
projeto.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p class="fragment">
|
|
|
|
Dica: Embora alguns desenvolvedores reclamem da falta
|
|
|
|
de man pages, é possível fazer coisas bem legíveis
|
|
|
|
usando projetos como <a href="https://readthedocs.org/">ReadTheDocs</a>
|
|
|
|
e <a href="http://gitbook.com/">Gitbook</a>.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Bug reports</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Bug Reports</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Quando encontrar um problema, tente repetir; tente isolar
|
|
|
|
o que causa o problema (uma configuração, o nome do arquivo);
|
|
|
|
se conseguir, envie para o desenvolvedor.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Bug Reports</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Se possível, crie um teste que mostre como o
|
|
|
|
problema se repete (o que é mais fácil para bibliotecas
|
|
|
|
e frameworks do que projetos).
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p><small>Anedota: MongoEngine.</small></p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
MongoEngine é uma biblioteca para acessar o banco de
|
|
|
|
dados MongoDB como se fosse um ORM, com schemas e tudo
|
|
|
|
mais (com a facilidade que, na mudança do schema, não
|
|
|
|
é preciso fazer migrações).
|
|
|
|
|
|
|
|
Como nós mantinhamos sempre a última versão, aconteceu
|
|
|
|
mais de uma vez que a última versão alterou um comportamento
|
|
|
|
completamente. Nesses casos, nós abrimos issues no Github
|
|
|
|
do autor, com o teste incluso, para mostrar o que estávamos
|
|
|
|
querendo fazer e o que estava acontecendo.
|
|
|
|
|
|
|
|
Em todos os casos, nós deixávamos a solução em aberto:
|
|
|
|
"se esse é o comportamento esperado da biblioteca, como
|
|
|
|
podemos obter o resultado esperado do teste?"
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Bug Reports</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Se não (quiser|saber) programar, descreva
|
|
|
|
passo-a-passo como reproduzir o erro.
|
|
|
|
</p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>O Fork</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>O Fork</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Quando o desenvolvedor original do projeto não tem mais
|
|
|
|
interesse e não quer continuar, sempre há a possbilidade
|
|
|
|
de ter um desenvolvimento em separado.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p><small>Anedota: Jenkins, Pillow</small></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Artwork</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Artwork</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Muitos projetos precisam de um site bonito e até
|
|
|
|
mesmo um logotipo interessante. Ajudar o desenvolvedor
|
|
|
|
mantendo um site que consiga comunicar o objetivo
|
|
|
|
do projeto sempre ajuda.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p><small>Anedota: Alguma-Coisa-Dog.</small></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Doações</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>Doações</h2>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Alguns projetos tem pessoas trabalhando full time e
|
|
|
|
precisam de alguma forma de pagar essas pessoas.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p><small>Anedota: VIM, Mozilla</small></p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
VIM, por exemplo, pede que se tu gostou do editor,
|
|
|
|
ao invés de contribuir pagando alguma coisa pro
|
|
|
|
Bram Moolenaar, seja feita uma doação para as
|
|
|
|
crianças de Uganda (a bem pouco tempo, o Bram postava,
|
|
|
|
no fim do ano, quanto havia sido doado).
|
|
|
|
|
|
|
|
Apesar de receber grandes doações, a Mozilla
|
|
|
|
precisa de doações do "99%" para que não fique
|
|
|
|
a mercê dos grandes doadores.
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Evangelização</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Evangelização</h3>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Você pode ajudar um projeto a crescer divulgando o mesmo
|
|
|
|
em palestas ou até mesmo comentando com seus colegas.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p class="fragment">
|
|
|
|
Dica: Evite guerras santas do tipo "meu projeto vs seu projeto".
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p class="fragment"><small>Anedota: Eu ;).</small></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h4>Como Participar</h4>
|
|
|
|
<h2>Diga "Obrigado"</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h3>Diga "Obrigado"</h3>
|
|
|
|
|
|
|
|
<p>Poucas coisas conseguem ser tão poderosas como um
|
|
|
|
simples "obrigado por ter feito esse projeto".</p>
|
|
|
|
|
|
|
|
<p class="fragment">
|
|
|
|
Dica: Cerveja e Pizza também contam como obrigados.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p class="fragment"><small>Anedota: Htop.</small></p>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h2>"One more thing..."</h2>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<img class="stretch" src="_images/community.jpg" alt="">
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section data-background='_images/thats-all-folks.jpg'>
|
|
|
|
<div class="semi-opaque">
|
|
|
|
<ul>
|
|
|
|
<li><a href="https://functional.cafe/@juliobiason">https://functional.cafe/@juliobiason</a></li>
|
|
|
|
<li><a href="https://t.me/juliobiason">https://t.me/juliobiason</a></li>
|
|
|
|
<li>julio.biason@pm.me</li>
|
|
|
|
<li><a href="https://presentations.juliobiason.me">https://presentations.juliobiason.me</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<h1 class="fragment semi-opaque">Perguntas?</h1>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script src="reveal.js/lib/js/head.min.js"></script>
|
|
|
|
<script src="reveal.js/js/reveal.js"></script>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
// Full list of configuration options available at:
|
|
|
|
// https://github.com/hakimel/reveal.js#configuration
|
|
|
|
Reveal.initialize({
|
|
|
|
controls: true,
|
|
|
|
progress: true,
|
|
|
|
history: true,
|
|
|
|
center: true,
|
|
|
|
// showNotes: true,
|
|
|
|
|
|
|
|
transition: 'none', // none/fade/slide/convex/concave/zoom
|
|
|
|
|
|
|
|
// Optional reveal.js plugins
|
|
|
|
dependencies: [
|
|
|
|
{ src: 'reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
|
|
|
|
{ src: 'reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
|
|
|
{ src: 'reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
|
|
|
|
{ src: 'reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
|
|
|
|
{ src: 'reveal.js/plugin/zoom-js/zoom.js', async: true },
|
|
|
|
{ src: 'reveal.js/plugin/notes/notes.js', async: true }
|
|
|
|
]
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
|
|
</body>
|
|
|
|
</html>
|