21
Danilo J. S. Bellini – @danilobellini – São Paulo – SP Projetos Open Source, como colaborar? – 2015-03-14 Projetos Projetos Open Source, Open Source, Como colaborar? Como colaborar?

(2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Embed Size (px)

Citation preview

Page 1: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

ProjetosProjetosOpen Source,Open Source,

Como colaborar?Como colaborar?

Page 2: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Getting started

● Como começar?– Iniciar do zero

– Projeto já existente

● Que conhecimentos são necessários?– Conhecer o projeto!

– Depende da contribuição

● Terminologia– Fork, branch, repositório, issues, testes, CI, ...

Page 3: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Como colaborar com um projeto existente?

● Issues– Bug report

– Feature request

● Código– Testes

● Documentação– Traduções

● Divulgação– Avaliação

● Uso– Relatos (e.g. blog)

– Criação de “plugins”

● Doações● ...

Page 4: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Issues

● Bug report– Reprodutibilidade!

– Versão usada

– Resultado e expectativa

– Passos que reproduzem o bug

● Anexar dados utilizados nos passos

– Exemplo:

http://savannah.gnu.org/bugs/?func=detailitem&item_id=42519

● Feature request– Público-alvo / potencial de

utilização

– Compatibilidade com o que existe

– “Design” da mudança

● Outras propostas– Pull-requests

– Otimização

– Fusão de projetos

– ...

Não precisa [saber]

programar!

Page 5: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Divulgação e avaliação

● Stars / likes– Aumentam visibilidade

● Relato de uso– Blog

– YouTube

– ...

● Material didático– Tutoriais

– Livros

– Vídeo-aulas

– Cursos

https://github.com/exploreTra

duções?

EVENTOS! Agitar a galera!

Page 6: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

É É preciso preciso ver aos ver aos poucos!poucos!

GitControle de versão distribuído

● git initgit init– Cria um repositório no diretório atualCria um repositório no diretório atual

● git addgit add– Marca um arquivo como “staged” para “commit”Marca um arquivo como “staged” para “commit”

● git commitgit commit– Insere uma atualização no repositório na forma de um “commit” com os dados “staged”. Parâmetro “-a” para todas Insere uma atualização no repositório na forma de um “commit” com os dados “staged”. Parâmetro “-a” para todas

as modificações de arquivos já inseridos.as modificações de arquivos já inseridos.

● git pullgit pull– Obtém os dados do remote, atualizando o repositório localObtém os dados do remote, atualizando o repositório local

● git pushgit push– Atualiza (append-like) a branch (ramificação) no servidor (remote) com os dados locaisAtualiza (append-like) a branch (ramificação) no servidor (remote) com os dados locais

● git resetgit reset– Limpa a área de “staging” ou retrocede commits (não usar após push)Limpa a área de “staging” ou retrocede commits (não usar após push)

● git remotegit remote– Insere um host (servidor) para “push”Insere um host (servidor) para “push”

● git configgit config– Altera configurações (usuário, e-mail, editor padrão para mensagens dos commit, etc.). 3 níveis: local (repositório), Altera configurações (usuário, e-mail, editor padrão para mensagens dos commit, etc.). 3 níveis: local (repositório),

usuário e global (sistema)usuário e global (sistema)

● git statusgit status– Exibe informações sobre o que está “staged”, arquivos alterados e arquivos que estão no diretório mas não Exibe informações sobre o que está “staged”, arquivos alterados e arquivos que estão no diretório mas não

pertencem ao repositóriopertencem ao repositório

● git loggit log– Exibe as mensagens e outros detalhes dos commits realizadosExibe as mensagens e outros detalhes dos commits realizados

● git diffgit diff– Exibe diferenças de código entre commits ou entre o último commit e os dados atuaisExibe diferenças de código entre commits ou entre o último commit e os dados atuais

● git checkout / branch / merge / mergetool / taggit checkout / branch / merge / mergetool / tag– Usados em branching, versionamento, etc.Usados em branching, versionamento, etc.

● ……– fetch, stash, rebase, reflog, subtree, submodule, ...fetch, stash, rebase, reflog, subtree, submodule, ...

● Apareça nos dojos!!!– https://github.com/Dojo-

SP● O GitHub fornece os

comandos em várias situações– Criação de repositório

– Merge (pull-request)

● Muita documentação disponível

!!!

https://help.github.com/articles/good-resources-for-learning-git-and-github/

Page 7: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

GUI para o git?

gitk

Page 8: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

GitHubHospedagem e rede social

● Organizações● Followers (seguidores)● Stars (likes/curtidas)● Histórico de atividades

– News feed

– “Quadradinhos”

● Estatísticas● Comentários

● Issues● Watch● Fork!!!● “Exibição” do

repositório/diretório– README

– Markdown: README.md

– reStructuredText: README.rst

Page 9: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Mais issues!(Organização no GitHub)

● Status– Open

– Merged

– Closed

● Issues– Não fazem parte do

repositório git

– Fazem parte do projeto no GitHub

● Pull-requests– Envio de código

– Fork

– Totalmente via interface Web

● Colaboradores– Podem aplicar mudanças no

código sem usar o mecanismo de pull-requests

– Mudança no status das issues

Page 10: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Fork

● Branch– Ramificação

– Experimentação

● Merge– União de branches

● Fork– Uma “cópia” do projeto

– Pode caracterizar outro projeto

● Clone– Cópia [local] do

repositório (git clone)

– Não caracteriza outro projeto

Fork famoso: pillow (fork que continuou o PIL - Python Imaging Library)

Page 11: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Pull-request“tradição”

1)Fazer um fork do projeto

2)Copiar conteúdo do fork para a máquina local

...git clone / git pull

3)Efetuar a alteração desejada em uma branch do fork

4)Atualizar conteúdo no fork

...git push

5)Solicitar o PR (pull-request) pela Web UI

...há um “git merge” implícito

Page 12: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Aspectos sociais das colaborações (pull-requests e outras issues)

● Alterações no comportamento do software– Necessário avisar o autor antes de fazer o pull-request (ou

antes de “encostar no código”)

● Bugfix / new feature– Aviso prévio é opcional, mas permite

● Brainstorming● Evitar escrever código que será recusado● Expectativa

● Em certos projetos (e.g. MongoDB), há um contrato (pessoal) p/ aceitação de PRs

A rigor, a licença já permite a alteração do código. Essa comunicação se refere à intenção de incorporação de seu código ao projeto original, i.e., como algo além de um fork.

Page 13: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Estilo

● Aspectos “cosméticos”– Evite conflitos!

– Não mande um PR puramente “cosmético” a menos que isso já esteja combinado com os colaboradores do projeto

● Idioma– Manter o do projeto, se possível

– Inglês costuma ser adotado na maioria dos projetos

– Isso vale para issues, comentários, nomes de variáveis, etc.

PEP8?

“Solução” única...

para qual

problema?

Page 14: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Projetos convidativos a novos colaboradores

● Sinalização através de issues fáceis (requisitadas pela própria “equipe” do projeto)– Estilo (código)

– Tradução

– Gramática/ortografia em comentários e documentação

– Atividades “braçais” / repetitivas / triviais (e.g. inserir shebang em todos os arquivos de exemplo)

● Talvez automatizáveis com shell script

– Testes● Incrementar a cobertura de código

– Oneliners

– Documentação extra / novos exemplos

● Auxilia no aprendizado com o ambiente social, com os softwares envolvidos, etc.

Page 15: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Stash / Rebase(comandos do git)

● É muito comum algo ser feito e desfeito entre commits de uma branch, ou incluir commits separados de “ajustes cosméticos”

● Estatísticas do GitHub coletam:– Número de commits

– Linhas inseridas

– Linhas removidas

● É muito fácil ser “cheater”, e PRs de cheaters normalmente não são bem-vindos

● Stash/rebase podem ser usados para “ajustar” o histórico de uma branch antes do merge na branch principal (normalmente “master”)

Minha colaboração no hipsterplotMinha colaboração no hipsterplot

Page 16: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Iniciar um projeto “do zero”?

● Sem “legado”● Controle de versão

– Git

– Mercurial

● Experimentação● Crowdfunding?

– Não pense nisso em seu primeiro projeto...

● Compatibilidade– Python 2 ou 3?

● Aonde colocar?– GitHub

– BitBucket

– Gitorious

– ...

● Que licença utilizar?

Page 17: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

“Open Source” ou “Free Software”?● OSI – Open Source Initiative

– http://opensource.org/

● FSF – Free Software Foundation– http://www.fsf.org/

– https://gnu.org/● Critérios e definições do

que é “livre”/”aberto”● Licenças de software

– GPL, MIT, BSD, etc.

– Compatibilidade

Page 18: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Licença

● NÃO ESCREVA A SUA!

...a menos que seja/contrate um advogado...

● [Strong] Copyleft / “Share-alike”– GPL v2 (GNU General

Public License)

– GPL v3

– AGPL (Affero GPL)

● Weak Copyleft– LGPL (Library/Lesser

GPL)

● Permissivas– MIT

– BSD

– PSFL (Python Software Foundation License)

Wikipedia tem muita informação

útil...

Page 19: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

PyPI – Python Package Index

● http://pypi.python.org/● Pacotes/bibliotecas externas

– Muitos projetos possuem o link do repositório

● Recomenda a utilização do pip● Utilização de arquivos setup.py● Tags de classificação em “List trove classifiers”● Quem faz o upload normalmente é o responsável pelo

projeto, e não tem vínculo com o repositório no GitHub

Page 20: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Testes e Integração Contínua (CI)

● Rodar os testes a cada “push”– Uma máquina virtual para cada possível ambiente (e.g.

CPython 2.7, CPython 3.4 e PyPy)

– Travis CI

● Cobertura de código– Coveralls

● Pins– Permitem registrar em imagens o estado do CI no README do

projeto (como links, contendo relatórios completos)

– PyPI possui pins acerca do número de downloads recente

Page 21: (2015-03-14) [Grupy-SP] Projetos Open Source, como colaborar?

Danilo J. S. Bellini – @danilobellini – São Paulo – SPProjetos Open Source, como colaborar? – 2015-03-14

Até a próxima!

● Get started! Outras recomendações:– GitHub

● https://help.github.com/articles/set-up-git/● https://help.github.com/articles/create-a-repo/● https://help.github.com/articles/fork-a-repo● https://help.github.com/articles/be-social/

– BitBucket● https://bitbucket.org/ → “Free Git tutorials”

– Gitorious● https://gitorious.org/about/faq

https://github.com/danilobellini

Vejam meus projetos e falem comigo caso queiram colaborar em algum: