Apresentação realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequência lógica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e segurança, estabelece contato visual com os participantes durante a apresentação. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gráficos são claros e contêm informações suficientes. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
+
A
+
Apresentação realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequência lógica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e segurança, estabelece contato visual com os participantes durante a apresentação. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gráficos são claros e contêm informações suficientes. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
-
B
-
O tempo de apresentação foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequência de apresentação razoável. Expõe o trabalho corretamente, mas não usa os slides de forma coesa com a fala. Postura e segurança razoáveis. Os elementos visuais são de baixa qualidade: figuras, tabelas e gráficos não são totalmente claros e não contêm informações suficientes para compreensão. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
+
B
+
O tempo de apresentação foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequência de apresentação razoável. Expõe o trabalho corretamente, mas não usa os slides de forma coesa com a fala. Postura e segurança razoáveis. Os elementos visuais são de baixa qualidade: figuras, tabelas e gráficos não são totalmente claros e não contêm informações suficientes para compreensão. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
-
C
-
Tempo de apresentação foi de mais ou menos 10 min do estabelecido. A organização da apresentação é confusa, o que prejudica o acompanhamento e compreensão das ideias. Comunicação deficiente, com dificuldade de expor ideias. Não usa adequadamente os slides. Não tem boa postura e segurança durante a apresentação. Os recursos visuas prejudicam a apresentação. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
+
C
+
Tempo de apresentação foi de mais ou menos 10 min do estabelecido. A organização da apresentação é confusa, o que prejudica o acompanhamento e compreensão das ideias. Comunicação deficiente, com dificuldade de expor ideias. Não usa adequadamente os slides. Não tem boa postura e segurança durante a apresentação. Os recursos visuas prejudicam a apresentação. Fez uso de no mínimo uma técnica para interação com a audiência (por exemplo, debate, painel com votações, entre outros).
@@ -613,46 +627,46 @@
Agenda
-
Data e horário
-
Tema
+
Data e horário
+
Tema
-
17/11 (9:45-10:45)
-
GitHub Copilot é ético? [Eiki Yamashiro e Marcelo Miguel]
+
17/11 (9:45-10:45)
+
GitHub Copilot é ético? [Eiki Yamashiro e Marcelo Miguel]
-
17/11 (10:45-11:45)
-
A relação entre Software as a Service (SaaS) e projetos de Código Aberto [Caroline Chaim, Felipe Lemos, João Farias Araujo]
+
17/11 (10:45-11:45)
+
A relação entre Software as a Service (SaaS) e projetos de Código Aberto [Caroline Chaim, Felipe Lemos, João Farias Araujo]
-
22/11 (9:45-10:45)
-
Telemetria é "ético"? [Guilherme Lunetta, Rafael Monteiro e João Magalhães]
+
22/11 (9:45-10:45)
+
Telemetria é "ético"? [Guilherme Lunetta, Rafael Monteiro e João Magalhães]
-
22/11 (10:45-11:45)
-
Regulamentações futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti]
+
22/11 (10:45-11:45)
+
Regulamentações futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti]
-
24/11
-
Não teremos aula. Joga do Brasil na Copa do Mundo
+
24/11
+
Não teremos aula. Joga do Brasil na Copa do Mundo
-
29/11 (9:45-10:45)
-
Regulamentações recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas]
+
29/11 (9:45-10:45)
+
Regulamentações recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas]
-
29/11 (10:45-11:45)
-
Por que Open Source é crítico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho]
+
29/11 (10:45-11:45)
+
Por que Open Source é crítico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho]
-
01/12 (9:45-10:45)
-
The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [João Pedro Meirelles, Gustavo Molina e Rafael Almada]
+
01/12 (9:45-10:45)
+
The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [João Pedro Meirelles, Gustavo Molina e Rafael Almada]
Como consertar: git commit --amend permite modificar o último commit feito.
-
-
Erro 4: Pull Request com descrição ruim
-
-
Como consertar: Só editar na interface do Github.
-
-
Consertar em casa e pedir review via Github
-
Lembrete: se não der push não estragou nada
-
Lembrete II: git log mostra seu histórico atual
-
Dica: se modificou commits já publicados use git push -f para sobrescrever
-
-
Nem todos os alunos que estão matriculados na disciplina fizeram a atividade da última aula!
-
pythondev-aberto.pylist-users
-
-
-
Comunidades de software
-
-
Discussão
-
-
Pergunta 1: quais são os softwares que vocês mais utilizam no dia a dia?
-
-
-
-
Pergunta 2: quem é o principal desenvolvedor do projeto?
-
-
Exemplo: Kernel Linux
-
-
Fundação dá suporte ao desenvolvimento do Kernel Linux e à criação de um ecossistema de software de código aberto ao seu redor.
-
Apoio:
-
-
Financeiro
-
Propriedade intelectual
-
Infraestrutura
-
Serviços e treinamento
-
-
-
Exemplo: Kernel Linux
-
Empresas que patrocinam desenvolvimento:
-
-
Individuais (11,95%)
-
Intel (10,01%)
-
Red Hat (8,90%)
-
Desconhecido (4,09%)
-
IBM (3,79%)
-
SUSE (3,49%)
-
Linaro (2,96%)
-
Consultores (2,96%)
-
Google (2,79%)
-
Samsung (2,28%)
-
-
Fonte: "2020 Linux Kernel Development Report"
-
-
Exemplo: Ubuntu
-
-
-
-
-
-
Empresa privada controla o desenvolvimento do Ubuntu. Obtem recursos via
-
-
Doações
-
Serviços de desenvolvimento e consultoria
-
Treinamento
-
-
-
Exemplo: Gitlab
-
-
-
-
-
-
Empresa financiada até agora por VC (Venture Capital) em busca de lucro.
-
-
Opção de planos grátis com software de código aberto
-
Opção de planos corporativos com mais funcionalidades e suporte
-
Instalações locais
-
-
-
Exemplo: Elementary
-
-
-
-
Distribuição linux comandada por uma empresa "minúscula" focada em experiência de usuário. Recursos são obtidos via
-
-
Patrocínios individuais e por empresas
-
Modelo pay-what-you-want (loja de aplicativos e sistema operacional)
-
Hardware com o sistema pré-instalado
-
-
-
-
-
Exemplo: Linux Mint
-
-
-
Distribuição linux cujo objetivo é que tudo funcione direto na instalação. É considerada boa para iniciantes.
-
-
-
-
-
-
-
-
Outras fontes
-
-Diversas outras maneiras de conseguir suporte e financiamento
-
-
Razões para financiar (empresa)
-
-
-
"Adquirir" especialistas em uma tecnologia
-
Vender suporte ou consultoria
-
Marketing
-
Licença de software "obriga"
-
-
-
-
Nem sempre o que é financiado termina em um formato "aproveitável" por terceiros (ex: Android/Linux, TiVO)
-
-
"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware" [Wikipedia]
-
-
Razões para contribuir (indivíduo)
-
-
Profissionais
-
Reputação / Currículo
-
Necessidade de negócio
-
-
-
Pessoais
-
Altruísmo / Ideologia
-
Sensação de realização pessoal
-
Exercício de criatividade
-
Resolver um problema de seu interesse
-
-
-
-
-
Atividade: Explorando o entorno de um projeto
-
-
-
Pesquisar como as comunidades de alguns projetos estão organizadas
-
Produzir uma apresentação resumindo suas descobertas
-
-
-
Desenvolvimento Aberto
-
-
Fluxo de trabalho distribuído e Comunidades de Software
Existe um momento em que ele já soluciona um problema para o autor e começa a ficar claro que ele é de interesse de outras pessoas. Vamos considerar que o Servidor de Desafios chegou neste momento e transformá-lo em um projeto "profissional".
-
Seu trabalho neste roteiro será preparar o projeto para ser apresentado "oficialmente" a outros usuários. Ou seja, fará mudanças para melhorar a qualidade do código e criará uma página para o projeto apresentando-o e provendo instruções de instalação e uso.
-
Para entregar esta tarefa você deverá criar um repositório softdes-desafios em seu usuário, colocar o servidor de desafios lá e hospedar sua documentação usando Github Pages. Com isto pronto envie o trabalho de vocês via PR para o repositório da disciplina.
Os itens obrigatórios são descritos nos itens abaixo.
-
Itens básicos de qualidade
-
-
Adicionar um README ao projeto
-
Adicione uma descrição do projeto
-
Screenshot
-
Links para docs de Desenvolvimento e Usuário
-
-
-
Organizar pastas seguindo uma estrutura em que o código está em src e a documentação oficial em docs
-
Subir código no Github
-
-
Qualidade de código
-
Nosso código está mal formatado e tem várias práticas ruins de programação. O pylint detecta estes problemas e dá uma nota para seu código. Melhore a nota do Servidor de Desafios eliminando estes problemas do código. Alguns dos problemas são de resolução simples e podem ser feitos por ferramentas, mas outros requerem uma atenção "humana"
-
Ele não precisa estar 100%, mas você precisa eliminar grande parte dos erros mais bizarros. Após fazer as correções crie um novo commit e prossiga.
-
-
Danger
-
Certifique-se que o projeto continua funcionando! Alguns erros, como usar exec ou eval são inerentes ao projeto e não podem ser "consertados".
-
-
Documentação
-
O mkdocs é uma ferramenta de documentação de software para gerar uma página web de documentação para o projeto. Vamos usá-lo para documentação de desenvolvimento e de usuário do nosso projeto.
-
-
Tip
-
O mkdocs possui vários temas. Escolha um que você goste.
-
-
Documentação de usuário
-
Os seguintes itens devem estar presentes:
-
-
Uma página inicial descrevendo o projeto e explicando seu uso esperado. Inclua links e screenshots do software rodando.
-
Uma página de guia de usuário para alunos. Este guia deverá mostrar passo a passo as seguintes tarefa
-
entrar no servidor de desafios
-
enviar solução correta para desafio
-
enviar solução errada
-
-
-
Uma página de guia de usuário para professores. Ela deverá descrever:
-
como adicionar usuários (usando os arquivos users.csv e add_user.py)
-
como adicionar novos desafios (linha de comando mesmo)
Nesta aula complementaremos as últimas discussões criando um pequeno pacote Python instalável via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.
-
Distribuindo software para desenvolvedores: pacote Python básico
-
Nosso módulo se chamará dev_aberto e disponibilizará um programa executável hello.py. Crie a seguinte estrutura de pastas para nosso pacote.
Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu próprio pacote usando
-
-
pip install .
-
-
-
-
Exercise
-
Em outra pasta, abra um console Python e tente importar seu módulo.
-
-
-
Exercise
-
Pesquise quais argumentos são usados para especificar o autor do pacote, as versões de Python e sistemas operacionais suportados. Preencha estes valores com suas informações. Note que o pip leva estas informações em conta e só instalará um pacote se ele estiver em um ambiente suportado.
-
-
Dependências
-
Para adicionar pacotes que são automaticamente instalados quando instalamos nosso pacote precisamos identificá-los no nosso arquivo setup.py. Para adicionar uma dependência de instalação basta adicionar o seguinte argumento:
Verifique as dependências do código e adicione-as no setup.py.
-
-
requirements.txt
-
Muitos softwares usam também um arquivo requirements.txt para listar todas as dependências do software de modo a obter uma instalação idêntica à do desenvolvedor. Isto é importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca será usado por usuários finais.
-
-
Exercise
-
Crie um requirements.txt para seu projeto com as mesmas dependências listadas no seu setup.py.
-
-
Scripts executáveis
-
Além de instalar o nosso módulo para uso via import desejamos também disponibilizar o arquivo hello.py como um executável para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py deverá ser instalado como um executável.
-
...
- scripts=['scripts/hello.py'],
- ...
-
-
Não se esqueça de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:
-
#!/usr/bin/env python3
-
-
No Windows é criado um executável que chama nosso script, de modo que as chamdas do executável continuarão funcionando normalmente. Note que isto não cria menus em nenhum tipo de interface gráfica.
-
Criando arquivos de distribuição
-
Dois tipos de arquivos de distribuição podem ser usados:
-
-
sdist: é um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
-
wheel: é um formato pré-compilado e específico para cada plataforma. Mais usado quando o projeto contém extensões em C.
-
-
A criação de um arquivo de distribuição de fontes é bem simples:
-
> python setup.py sdist
-
-
A instalação deste pacote pode ser feita via pip.
-
Envio para o PyPI
-
Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para não poluir o repositório com pacotes temporários e de teste, podemos usar o TestPyPI. Toda sua infraestrutura é igual ao oficial, mas ele é limpo de maneira regular.
Vamos agora trabalhar (em grupo) no Servidor de Desafios novamente. Seu trabalho será criar um Dockerfile que roda o software de maneira "completa". Ou seja, o script de criação do container deverá
-
-
instalar todas as dependências do sistema
-
criar a base de dados, se necessário
-
adicionar os usuários presentes no arquivo users.csv, se necessário
-
executar o servidor e serví-lo na porta 8080 do host
-
manter os dados adicionados ao reiniciar o container
-
-
Entrega
-
Faça a entrega de sua atividade adicionando a skill Dockerfile segundo o modelo abaixo.
-
-
Objetivo: Criou deploy automatizado para sistema web Python
Na parte expositiva da aula tivemos uma introdução aos problemas de Internacionalização (i18n) e Localização (L10N). Neste roteiro iremos praticar o uso destas técnicas em uma aplicação linha de comando de exemplo simples.
-
Em ambos exemplos vamos trabalhar com o módulo Babel, que é feito para facilitar a tradução e localização de aplicações feitas em Python. Outras linguagens de programação possuem bibliotecas similares que seguem a mesma sequência de comandos e usam os mesmos tipos de arquivos.
-
Sistemas POSIX suportam a determinação do locale utilizado por meio da variável de ambiente LANGUAGE, que pode ser modificada para cada execução de um programa. O formato padrão usado é <lingua>_<pais>.<codificacao>. Para português do Brasil usando codificação UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em inglês.
-
-
LANGUAGE=en_US.utf8 ls --help
-
-
Já executando o comando abaixo elas devem aparecer em português.
-
-
LANGUAGE=pt_BR.utf8 ls --help
-
-
De maneira mais geral, existe uma série de variáveis LC_* que controlam qual locale é usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e números são exibidos e LANGUAGE para definir a lingua de exibição de um programa.
-
Localizando um programa em Python
-
Vamos trabalhar com uma aplicação de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um número fracionário grande e uma mensagem pré-definida. O código completo (arquivo cli.py) está abaixo.
2018-08-28
-240000000000.3221
-Input your name: Igor
-Hello Igor
-
-
Como já visto em aula, este programa reúne três das principais saídas que precisam ser formatadas: datas, números fracionários e mensagens para o usuário.
-
Formatando datas
-
A formatação de datas é governada para variável LC_TIME. O módulo babel.dates já possui diversas funções que automaticamente a utilizam para fazer a localização de variáveis do tipo Date (usando a função format_date) ou DateTime (usando format_datetime).
-
-
Exercise
-
Pesquise como usar estas funções e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).
-
-
-
Exercise
-
O quê acontece quando definimos a variável de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?
-
-
Formatando números
-
A formatação de datas é governada para variável LC_NUMERIC. O módulo babel.numbers possui a função format_number que formata um número de acordo com esta configuração.
-
-
Exercise
-
Pesquise como usar estas funções e utilize-as no seu programa para localizar o número fracionário mostrado.
-
-
-
Exercise
-
Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos são os esperados?s
-
-
Traduzindo mensagens
-
A parte final consiste em criar traduções das duas strings presentes no texto. A linguagem usada é definida pela variável LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes é marcar quais strings deverão ser traduzidas para que uma equipe de tradutores não precise mexer no código. O módulo gettext do Python já provê suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.
-
A implantação do framework de tradução é feita em quatro passos:
-
-
Marcação das strings a serem traduzidas
-
Extração destas strings do código em um arquivo modelo .pot
-
Criação de traduções .po a partir do modelo criado no passo anterior
-
Compilação das strings traduzidas em um arquivo binário .mo
-
-
No arquivo principal de nossa aplicação podemos "instalar" o framework de tradução e marcar todas nossas strings a serem traduzidas com a função _(). A instalação é feita pelo seguinte trecho de código.
-
importgettext
-gettext.install('cli',localedir='locale')
-# cli é o nome do arquivo em que guardamos nossas traduções
-# localedir é o caminho onde estão armazenadas as traduções. Pode ser um caminho relativo.
-
-
Devemos então marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instalação tenha sido feita somente no arquivo principal.
-
print(_("Hello!"))
-
-
Os passos seguintes são feitos com auxílio do Babel, que efetivamente analisa nosso código Python e extrai as strings para tradução. A criação do arquivo modelo de tradução a partir dos arquivos do diretório atual é feita com o seguinte comando.
-
-
$ pybabel extract . -o cli-model.pot
-
-
Criamos então uma nova tradução usando o seguinte comando. A opção -D indica o nome do arquivo em que as traduções serão guardadas (usado em gettext.install). A opção -l indica o locale da tradução. A opção -d indica o localedir usado em gettext.install.
Devemos então editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Serão apresentados (após algumas linhas de comentários) pares de linhas como as seguintes. O primeiro valor msgid é a string a ser traduzida e o segundo msgstr é a tradução no locale pt_BR (pois o arquivo está na pasta pt_BR do localedir).
Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto é feito para que não seja possível mexer nos arquivos de tradução em uma versão Release do programa.
-
-
$ pybabel compile -D cli -l pt_BR -d locale
-
-
Isto gerará os arquivos .mo correspondentes a ao locale pt_BR. São estes os arquivos carregados durante a execução do programa.
-
Teste final
-
Podemos definir a variável LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?
-
Entrega
-
Modifique o exercício da aula passada (pacote python) para suportar datas e mensagens em Inglês e Português. Faça a entrega de sua atividade adicionando a skill Tradução básica segundo o modelo abaixo.
-
-
Objetivo: Aplicou ferramentas de localização para traduzir um programa simples em linha de comando.
Agora que você já conhece os passos necessários para traduzir um software é o momento de colocar esse conhecimento em prática. O trabalho de seu grupo será encontrar softwares que necessitem de traduções para o Português brasileiro e realizá-las. Alguns projetos também disponibilizam arquivos *.po para tradução de guias de usuário e isto também é válido neste item.
O objetivo da atividade de hoje é criar testes automatizados para o servidor de desafios. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situações reais.
-
-
Documentação (usuários e desenvolvedor)
-
Distribuição de software e versionamento
-
Localização e internacionalização
-
Testes automatizados
-
-
Testes de unidade
-
Uma parte do programa do servidor de desafios que pode ser testada com testes de unidade é a função lambda_handler, que executa a função submetida pelo usuário. Seu trabalho será criar testes usando o pytest e cobrir os seguintes casos:
-
-
programa submetido está correto
-
programa submetido não contém a função pedida
-
programa submetido retorna resultado incorreto
-
-
Testes de interface de usuário
-
Iremos criar testes de interface de usuário para o Servidor de Desafios usando o Selenium. Este software permite imitar interações reais de um usuário usando código e criar testes baseado nessas interações.
-
Vocês devem simular os seguintes cenários:
-
-
Aluno faz login com sucesso
-
Aluno entra senha incorreta
-
Aluno envia desafio com resposta incorreta
-
Aluno envia desafio com resposta correta
-
-
A ideia básica seria reproduzir os mesmos testes apresentados no manual do usuário.
-
Entrega
-
Coloquem os scripts de teste na pasta test do repositório e adicionem instruções de como rodar os testes no README.
+
09 - Trabalho sobre cultura livre
+
Esta aula não tem atividade prática. As discussões são feitas durante a aula expositiva.
diff --git a/lessons/09-cultura-livre/slides.pdf b/lessons/09-cultura-livre/slides.pdf
new file mode 100644
index 00000000..db94585d
Binary files /dev/null and b/lessons/09-cultura-livre/slides.pdf differ
diff --git a/aulas/04-discussao-documentacao-de-software/slides/index.html b/lessons/09-cultura-livre/slides/index.html
similarity index 81%
rename from aulas/04-discussao-documentacao-de-software/slides/index.html
rename to lessons/09-cultura-livre/slides/index.html
index 81356e53..a3af659c 100644
--- a/aulas/04-discussao-documentacao-de-software/slides/index.html
+++ b/lessons/09-cultura-livre/slides/index.html
@@ -8,16 +8,16 @@
-
+
-
+
- Tradução e localização de software - Open Source Development 2023/2
+ Cultura de software livre - Open Source Development 2023/2
@@ -98,7 +98,7 @@
- Tradução e localização de software
+ Cultura de software livre
A aula de hoje é estúdio para trabalhar na atividade da aula passada mais tempo para discussões.
+
09 - Licenças de Software
+
Esta aula não tem atividade prática. As discussões são feitas durante a aula expositiva.
diff --git a/lessons/09-licencas/itunes_nuclear.png b/lessons/09-licencas/itunes_nuclear.png
new file mode 100644
index 00000000..fa52344e
Binary files /dev/null and b/lessons/09-licencas/itunes_nuclear.png differ
diff --git a/lessons/09-licencas/lisp-machine.JPG b/lessons/09-licencas/lisp-machine.JPG
new file mode 100644
index 00000000..0eec1bf9
Binary files /dev/null and b/lessons/09-licencas/lisp-machine.JPG differ
diff --git a/lessons/09-licencas/safari_windows.png b/lessons/09-licencas/safari_windows.png
new file mode 100644
index 00000000..ae703434
Binary files /dev/null and b/lessons/09-licencas/safari_windows.png differ
diff --git a/lessons/09-licencas/shoe-sneaker.svg b/lessons/09-licencas/shoe-sneaker.svg
new file mode 100644
index 00000000..0d04434c
--- /dev/null
+++ b/lessons/09-licencas/shoe-sneaker.svg
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/lessons/09-licencas/slides.pdf b/lessons/09-licencas/slides.pdf
new file mode 100644
index 00000000..d7b6bf02
Binary files /dev/null and b/lessons/09-licencas/slides.pdf differ
diff --git a/aulas/07-localizacao/slides/index.html b/lessons/09-licencas/slides/index.html
similarity index 54%
rename from aulas/07-localizacao/slides/index.html
rename to lessons/09-licencas/slides/index.html
index 564f5912..58c52cdb 100644
--- a/aulas/07-localizacao/slides/index.html
+++ b/lessons/09-licencas/slides/index.html
@@ -8,16 +8,16 @@
-
+
-
+
- Tradução e localização de software - Open Source Development 2023/2
+ Licenças de software - Open Source Development 2023/2
@@ -98,7 +98,7 @@
- Tradução e localização de software
+ Licenças de software
posso precisar trocar entre línguas e entre formatos
+
+
Contexto 1: Propriedade intelectual e work-for-hire
+
+
Contexto brasilero: "Pela nossa lei de software, a não ser que expressamente dito o contrário, aquele que contrata o desenvolvimento é titular original do software resultante" [1]
+
Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o serviço [2]
Contributor License Agreement é um documento de cessão de copyright (direitos de exploração comercial).
+
+
Dá ao projeto uma licença não exclusiva (normalmente) e irrevogável para o projeto explorar sua contribuição
+
Mantém autoria
+
Isenta o projeto de responsabilidades sobre suas contribuições
-
O suporte a L10N e I18N implica modificar código fonte.
-
Locales
-
Um locale é uma tripla
+
Contexto 3: comercialização de software
+
End User License Agreement (EULA): Termo usado para aquelas condições que (não lemos) aceitamos ao instalar software proprietário ou nos registramos em um site/serviço.
-
<lingua>_<pais>.<codificacao>
-
-
-
que representa configurações de I18N e/ou L10N para uma determinada cultura.
+
Ignorado por aproximadamente 90% dos usuários (fonte)
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lessons/10-first-contribution/slides.html b/lessons/10-first-contribution/slides.html
new file mode 100644
index 00000000..76fafbbe
--- /dev/null
+++ b/lessons/10-first-contribution/slides.html
@@ -0,0 +1,117 @@
+Explorando seu projeto
\ No newline at end of file
diff --git a/lessons/10-first-contribution/slides.pdf b/lessons/10-first-contribution/slides.pdf
new file mode 100644
index 00000000..7b87326c
Binary files /dev/null and b/lessons/10-first-contribution/slides.pdf differ
diff --git a/aulas/08-testes-automatizados/index_2022/index.html b/lessons/10-first-contribution/slides/index.html
similarity index 76%
rename from aulas/08-testes-automatizados/index_2022/index.html
rename to lessons/10-first-contribution/slides/index.html
index af4acdf1..b7612da2 100644
--- a/aulas/08-testes-automatizados/index_2022/index.html
+++ b/lessons/10-first-contribution/slides/index.html
@@ -8,16 +8,16 @@
-
+
-
+
- 08 - Testes automatizados - Open Source Development 2023/2
+ Explorando seu projeto - Open Source Development 2023/2
@@ -63,7 +63,7 @@
O objetivo da atividade de hoje é criar testes automatizados para um projeto específico de software. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situações reais.
Qualidade de código e ferramentas para qualidade de projeto
+
Tradução de UI e documentação
+
Aspectos não técnicos relacionados
+
licenças
+
comunidades
+
+
+
+
+
Primeira contribuição
+
+
+
Ajuda na seleção de *issues- e projetos
+
Será feita em duplas/trios
+
+
Entrega final: 02/10
+
+
Etapa individual (Outubro)
+
Aprofundar habilidades desenvolvidas em grupo
-
Documentação (usuários e desenvolvedor)
-
Distribuição de software e versionamento
-
Localização e internacionalização
-
Testes automatizados
+
proporcionar uma experiência de trabalho em um projeto real de escolha dos alunos
+
valorizar diversos tipos de contribuições, não somente de código
+
exercitar autonomia*- e **independência
-
Biblioteca para implementação de agentes baseados em busca
-
O projeto AI Code implementa uma biblioteca que possui diversos algoritmos de busca pré-prontos e alguns exemplos de utilização.
-
Os exemplos de utilização já possuem arquivos de teste usando a biblioteca pytest, mas podem estar incompletos ou até mesmo errados.
-
As implementações dos algoritmos de busca, da biblioteca em si, não possuem testes. Estes algoritmos estão implementados no arquivo SearchAlgoritms.py.
-
Atividades
+
Início em 04/10
+
+
Minha primeira contribuição de código
+
Bons projetos usam tags para facilitar a recepção de novatos
+
+
good-first-issue
+
newcomers
+
low effort
+
difficulty novice
+
easy
+
+
+
Sugestão I - Pandas
+
Biblioteca de tratamento de dados usada em Ciência dos Dados.
-
Faça um fork do projeto;
-
Leia a documentação para entender os exemplos e o propósito da biblioteca;
-
Revise os testes;
-
Implemente ou altere 3 novos testes para um dos exemplos apresentados na documentação. Justifique o motivo da sua nova implementação ou alteração no pull request;
-
Implemente 3 novos testes para os algoritmos base da biblioteca. Faça isto em um pull request diferente do anterior.
+
Projeto complexo, com muitos casos de uso especiais
+
Toneladas de funcionalidades de visualização textual e gráfica de dados
+
Python é familiar para a maioria
-
Além da implementação dos testes, uma outra alternativa é executar o pylint e sugerir mudanças na formatação do código dos arquivos search/SearchAlgorithms.py, search/Graph.py e ProblemSpecificationExample.py.
-
Formato de entrega
-
Para a entrega do exercício você deverá:
+
Tickets de testes são, em geral, fáceis para começar e úteis para a comunidade.
+
+
Sugestão II - Matplotlib
+
Plotar gráficos em Python
+
Lista de Good first issues tem vários em aberto ou com PRs que estão parados há meses e podem ser assumidos por outras pessoas.
Esta atividade deve ser individual. Os PRs devem ser enviados e discutidos ao longo desta semana.
+
+
Hoje
+
+
escolher issue e projeto
+
montar ambiente
+
baixar código
+
compilar
+
rodar sua versão
+
+
+
reproduzir a issue
+
diff --git a/lessons/11-contribuicoes-externas/capa.svg b/lessons/11-contribuicoes-externas/capa.svg
new file mode 100644
index 00000000..26958275
--- /dev/null
+++ b/lessons/11-contribuicoes-externas/capa.svg
@@ -0,0 +1,36 @@
+
+
\ No newline at end of file
diff --git a/lessons/11-contribuicoes-externas/doesnt-work.png b/lessons/11-contribuicoes-externas/doesnt-work.png
new file mode 100644
index 00000000..51f18884
Binary files /dev/null and b/lessons/11-contribuicoes-externas/doesnt-work.png differ
diff --git a/lessons/11-contribuicoes-externas/hacktoberfest.png b/lessons/11-contribuicoes-externas/hacktoberfest.png
new file mode 100644
index 00000000..e0851a1f
Binary files /dev/null and b/lessons/11-contribuicoes-externas/hacktoberfest.png differ
diff --git a/aulas/05-projeto-profissional/star.svg b/lessons/11-contribuicoes-externas/hacktoberfest.svg
similarity index 61%
rename from aulas/05-projeto-profissional/star.svg
rename to lessons/11-contribuicoes-externas/hacktoberfest.svg
index c33b9c83..e6975c9b 100644
--- a/aulas/05-projeto-profissional/star.svg
+++ b/lessons/11-contribuicoes-externas/hacktoberfest.svg
@@ -1,5 +1,5 @@
\ No newline at end of file
diff --git a/aulas/02-comunidades-de-software/index.html b/lessons/11-contribuicoes-externas/index.html
similarity index 82%
rename from aulas/02-comunidades-de-software/index.html
rename to lessons/11-contribuicoes-externas/index.html
index 56ab293a..e2b7f1a8 100644
--- a/aulas/02-comunidades-de-software/index.html
+++ b/lessons/11-contribuicoes-externas/index.html
@@ -8,16 +8,16 @@
-
+
-
+
- 02 - Comunidades de Software - Open Source Development 2023/2
+ 11 - Contribuições externas - Open Source Development 2023/2
@@ -63,7 +63,7 @@
A atividade desta aula envolve a criação de uma apresentação explicando como são organizadas as comunidades ao redor dos seguintes projetos de software:
-
-
Docker
-
GIMP
-
Kubernetes
-
flatpak
-
Godot engine
-
GNOME
-
TensorFlow
-
digiKam
-
Shotcut
-
-
Cada grupo de 3 alunos deverá escolher um projeto acima e pesquisar os seguintes
-pontos.
-
-
Para quê serve o projeto?
-
Onde está o código fonte? Quais tecnologias são usadas?
-
Qual a licença? Existem guidelines públicos ou algum tipo de
- burocracia para contribuições?
-
Existe documentação de desenvolvedor?
-
Parece fácil de compilar/rodar?
-
Parece fácil de modificar?
-
-
-
-
Como o projeto é comandado?
-
-
Quem são as grandes figuras (desenvolvedores, evangelistas,
- etc) do projeto? Se o projeto for grande, cite duas áreas
- diferentes neste item.
-
Existe um roadmap público?
-
São aceitas contribuições externas? Por qual via?
-
As decisões são tomadas por quem?
-
-
-
-
Onde encontrar os membros do projeto? Onde pedir ajuda?
-
-
O projeto arrecada fundos?
-
Existem empresas patrocinando desenvolvedores?
-
Quanto foi arrecadado? E gasto? Com quais fins?
-
Quem decide como gastar?
-
-
-
-
O trabalho do grupo será, então, criar uma apresentação de 10 minutos que responda as perguntas acima.
-
As apresentações da versão do curso 2022/2 podem ser acessadas nos links abaixo:
a evitar que mudanças não intencionais quebrem código que estava funcionando.
-
a documentar em quais situações o software funciona.
+
PATTERN: expressão regular
+
FILES: lista de diretórios ou arquivos
-
Testes automatizados
+
3. Quit thinking and look - grep
+
Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto "dialog" ignorando maiúsculas/minúsculas.
+
+
$ grep -r -i dialog .
+
+
+
Exemplo 2: Listas todos os arquivos .cpp que fazem algum include
+
+
$ grep -r --include "*cpp" "#include" .
+
+
Sua IDE/editor devem ter algo parecido. Procure e use.
+
+
4. Divide and Conquer
+
Crie um plano de ação
-
Testes de unidade
-
Testes de integração
-
Testes de interface de usuário
+
Por que o bug ocorre?
+
Está relacionado a qual função?
+
Qual variável tem o valor errado?
+
+
+
O que deve ser mudado para que pare de ocorrer?
+
Pré-requisito: debugar visualmente usando alguma IDE / editor
-
Testes unitários
-
Ideia: dada uma função, verificar se ela devolve o valor esperado para um certo conjunto de parâmetros.
+
5. Change one thing at a time
+
Um bom PR muda o mínimo possível
-
Testa as funções de maneira isolada
-
Cobertura: porcentagem das linhas de código que é executada durante os testes de unidade.
-
Serve como documentação da função
+
use várias branches se quiser testar ideias diferentes
+
git commit é grátis. Quando chegar na versão final é só juntar tudo e mandar.
+
git rebase para atualizar seu branch com o master upstream caso necessário.
-
Testes unitários - pytest
-
-
-
Testes de integração
-
Ideia: dados um conjunto de classes com interdependências, verificar se elas funcionam bem em conjunto.
+
6. Keep an audit trail
+
Registre suas descobertas
-
Testa interação entre em objetos
-
Possibilidade de criar mocks, que são objetos falsos feitos para simular a interação entre vários objetos.
+
Log de como você encontrou onde mexer
+
Log de todos arquivos de interesse e seus usos
+
Log de todas as pesquisas feitas
+
Log de todas as modificações feitas
+
git commit é útil para registrar testes também
+
Não se esqueça:git diff é seu melhor amigo
-
Testes de interface de usuário
-
Ideia: simula ações do usuário (cliques, entrada de dados, etc) e confere se a saída esperada é mostrada na tela
-
-
Menos específico possível
-
Mais fiel ao uso real de um usuário
-
+
7. Check the plug
+
Nunca se esqueça de testar a soluções mais simples primeiro
-
Testes de interface de usuário
-
Selenium
-
Permite fazer scripts que interagem com uma página web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conteúdo de um objeto da página.
+
8. Get a fresh view
+
Empacou?
+
É por isso que vocês trabalham em grupo no primeiro bug.
+
Empacou mesmo?
+
Para isto serve seu grupo.
+
Empacou mesmo!?!?!?!?
+
Me chame!
-
O quê eu preciso testar?
-
+
9. If you didn't fix it, it ain't fixed
+
-
O quê eu preciso testar?
-
Ninguém sabe....
+
Hora de programar
+
Tentem aplicar estas ideias aos seus problemas
-
Atividade prática: Testado e aprovado
-
-
Objetivo: Primeira experiência com testes automatizado de código.
+
+
Envie 4 PRs para projetos participantes e ganhe uma camiseta
+
+
Atividade extra: hacktoberfest
+
+
Objetivo: Enviar 3 PRs para projetos externos no mês de outubro.
diff --git a/lessons/12-projeto/slides.pdf b/lessons/12-projeto/slides.pdf
new file mode 100644
index 00000000..343095bd
Binary files /dev/null and b/lessons/12-projeto/slides.pdf differ
diff --git a/aulas/05-projeto-profissional/slides/index.html b/lessons/12-projeto/slides/index.html
similarity index 73%
rename from aulas/05-projeto-profissional/slides/index.html
rename to lessons/12-projeto/slides/index.html
index 0c9a4d4b..98c576fa 100644
--- a/aulas/05-projeto-profissional/slides/index.html
+++ b/lessons/12-projeto/slides/index.html
@@ -8,16 +8,16 @@
-
+
-
+
- Documentação de API e linters - Open Source Development 2023/2
+ Projeto da disciplina - Open Source Development 2023/2
@@ -98,7 +98,7 @@
- Documentação de API e linters
+ Projeto da disciplina
proporcionar uma experiência de trabalho em um projeto real de escolha dos alunos
+
valorizar diversos tipos de contribuições, não somente de código
+
exercitar autonomia e independência
+
-
Ferramentas
+
Projeto Aberto
+
Organizado em dois blocos de 5 aulas
-
Python:
-
pydoc, numpydoc
+
11/05 - 25/05
+
27/05 - 10/06
-
-
C/C++
-
Doxygen
-
-
-
Java
-
Javadoc
-
-
+
+
Projeto Aberto - Pitches de projeto
+
Cada bloco se inicia com uma aula de Pitches de Projeto, que é uma apresentação de 5 minutos apresentando o projeto para o qual você contribuirá na semana.
+
+
Trocar ideias sobre projetos interessantes
+
Ajudar alunos indecisos a escolherem um projeto
+
Se comprometer com uma escolha de projeto
-
Em geral podem ser plugadas em alguma ferramenta de documentação de projetos.
-
Padrões de codificação
-
+
Projeto Aberto: Pitch de projeto
+
+
Objetivo: Apresentou um Pitch de projeto. Se o aluno só apresentar o projeto e não fizer contribuição vale 0 XP.
+
+
"metadata": {"url": "url_do_projeto_proposto", "filename": "pdf da apresentacaoo"}
+
+
Colocar pdf da apresentação na pasta docs/pitches.
-
Padrões de codificação
-
+
Projeto Aberto: Pitch aceito!
+
+
Objetivo: Enviou contribuição para um projeto apresentado em sala.
+
+
"metadata": {"url": "url_do_projeto_proposto"}
+
+
A ser enviado além da skill da contribuição.
-
Padrões de codificação
+
Projeto Aberto: Sugestão aceita!
+
+
Objetivo: Outro aluno enviou contribuição para o projeto que você fez Pitch.
+
+
"metadata": {"url": "url_da_contribuicao"}
+
+
A ser enviado pelo aluno que propôs o Pitch, que também precisa ter contribuído.
+
+
Projeto Aberto - Pitches de projeto
+
+
Apresentar um pitch é uma skill que vale XP
+
Ajudar colegas interessados no "seu" projeto vale XP
+
Aceitar sugestões/ajudas vale XP
+
Tudo isso é além da XP já obtida com as contribuições
+
+
Evitar alunos trabalhando sozinhos.
+
+
Estratégias para escolha um projeto
+
Aprendizado de tecnologias novas
-
Cada projeto tem o seu
-
Algumas linguagens tem um estilo padrão
-
Python - PEP8
+
Linguagem de programação
+
Biblioteca
+
Tipo de tecnologia: web, mobile, desktop
-
-
Ferramentas ajudam a conferir (forçar) um estilo específico
diff --git a/search/search_index.json b/search/search_index.json
index 55492f89..2276278e 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Open Development 2023/2","text":"
Welcome to the Open Development page for 2023/2. On this site, you will find all the course lessons and syllabus. The learning objectives covered are:
The student is capable of understanding a software project and fixing a bug or implementing an improvement.
The student is capable of making modifications that meet the technical and non-technical requirements of a software project.
The student is capable of interacting with a (remote) development team.
This course is gamified and entirely done using a git repository. Each student creates a user following the instructions in Lesson 01 and submits a Pull Request to be included in the repository. Each completed activity is delivered via a PR in the course repository and serves as evidence for the learning objectives mentioned above.
The course revolves around four types of activities:
Tutorial: (Guided) Preparatory activities in the classroom.
Code: Code contributions to external projects.
Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations.
Impact: Significant results achieved through the student's participation in open projects.
More information about all possible activities can be found on the Assessment page.
Current and past instructors
Igor Montagner
Fabr\u00edcio Barth
"},{"location":"agenda_apresentacoes/","title":"Apresenta\u00e7\u00f5es sobre cultura livre","text":"
Este documento descreve a rubrica para avalia\u00e7\u00e3o do trabalho e a agenda das apresenta\u00e7\u00f5es.
"},{"location":"agenda_apresentacoes/#rubrica","title":"Rubrica","text":"Conceito Descri\u00e7\u00e3o A Apresenta\u00e7\u00e3o realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequ\u00eancia l\u00f3gica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e seguran\u00e7a, estabelece contato visual com os participantes durante a apresenta\u00e7\u00e3o. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gr\u00e1ficos s\u00e3o claros e cont\u00eam informa\u00e7\u00f5es suficientes. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). B O tempo de apresenta\u00e7\u00e3o foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequ\u00eancia de apresenta\u00e7\u00e3o razo\u00e1vel. Exp\u00f5e o trabalho corretamente, mas n\u00e3o usa os slides de forma coesa com a fala. Postura e seguran\u00e7a razo\u00e1veis. Os elementos visuais s\u00e3o de baixa qualidade: figuras, tabelas e gr\u00e1ficos n\u00e3o s\u00e3o totalmente claros e n\u00e3o cont\u00eam informa\u00e7\u00f5es suficientes para compreens\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). C Tempo de apresenta\u00e7\u00e3o foi de mais ou menos 10 min do estabelecido. A organiza\u00e7\u00e3o da apresenta\u00e7\u00e3o \u00e9 confusa, o que prejudica o acompanhamento e compreens\u00e3o das ideias. Comunica\u00e7\u00e3o deficiente, com dificuldade de expor ideias. N\u00e3o usa adequadamente os slides. N\u00e3o tem boa postura e seguran\u00e7a durante a apresenta\u00e7\u00e3o. Os recursos visuas prejudicam a apresenta\u00e7\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros)."},{"location":"agenda_apresentacoes/#agenda","title":"Agenda","text":"Data e hor\u00e1rio Tema 17/11 (9:45-10:45) GitHub Copilot \u00e9 \u00e9tico? [Eiki Yamashiro e Marcelo Miguel] 17/11 (10:45-11:45) A rela\u00e7\u00e3o entre Software as a Service (SaaS) e projetos de C\u00f3digo Aberto [Caroline Chaim, Felipe Lemos, Jo\u00e3o Farias Araujo] 22/11 (9:45-10:45) Telemetria \u00e9 \"\u00e9tico\"? [Guilherme Lunetta, Rafael Monteiro e Jo\u00e3o Magalh\u00e3es] 22/11 (10:45-11:45) Regulamenta\u00e7\u00f5es futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti] 24/11 N\u00e3o teremos aula. Joga do Brasil na Copa do Mundo 29/11 (9:45-10:45) Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas] 29/11 (10:45-11:45) Por que Open Source \u00e9 cr\u00edtico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho] 01/12 (9:45-10:45) The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [Jo\u00e3o Pedro Meirelles, Gustavo Molina e Rafael Almada] 01/12 (10:45-11:45) Mantainer burnout [Cesar Ades e Jonathan Sutton]"},{"location":"assessment/","title":"Assessment","text":"
As you can see in Lesson 01, this course allows for a great deal of freedom, and it is organized through gamification. Each participant creates a profile in the repository and earns skills (and XP) by completing the available activities. All submissions are made via PR to the course repository.
The final grade is a combination of the total amount of XP received for completing tasks, the amount of XP obtained from group members, and some barrier criteria. The table below summarizes these conditions:
Grade Score Extra Criteria I ---- Did not complete any tutorial activities D ---- Completed all lesson activities but did not reach a C grade C 45XP
1 x Code Contribution +
Accepted Translation! or Documentation Contribution
B 90XP
Accepted Code Contribution
A 150XP A+ 200XP
Throughout the semester, the scores in the table above may be revised downward, but never upward.
Each skill translates into evidence for one of the learning objectives of the course. The collection of all the skills completed during the semester indicates the proficiency of the students in each of the objectives.
In this initial part, preparatory activities are carried out to support the development of skills in Code and Community skills.
id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"assessment/#code","title":"Code","text":"
Any activity that results in a code contribution to open-source software projects is accepted in the course.
id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"assessment/#community","title":"Community","text":"
A software project is also defined by the interactions of all the people around it: users, developers, and translators. This category includes non-technical contributions that benefit these individuals.
id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"assessment/#impact","title":"Impact","text":"
This category encompasses skills that represent the impact generated by the activities performed within the context of the course, both on a software project and the community around it. This includes:
Presentations given by students
A large number of accepted contributions to a single project
Mentions of work done by the student on the project's social media
Releases containing commits made within the course's context
id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"impact-2019/","title":"Edi\u00e7\u00e3o 2019/2","text":"
In the 2019/2 edition, students worked on 19 different projects, contributing with 46 code modifications, of which 14 were incorporated into the original projects. In addition to these projects, students also worked on the Servidor de Desafios, a software developed by Insper professors to be used in the Software Design course. A total of 12 accepted modifications have already been used during the semester.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 10 events.
"},{"location":"impact-2019/#alunos","title":"Alunos","text":"Alessandra Bl\u00fccher Alexandre Edington Antonio Jo\u00e3o Andraues Junior Elisa Mochetti Malzoni Gabriel Lopes Monteiro Gabriel Do Vale Rios Giulia Braga Passarelli Guilherme Leite Hugo Ebert Carl Igor Montagner Leonardo Pereira Medeiros Lucas Scarlato Astur Pedro Cunial Campos Samuel Vinicius Granato De Barros Vinicius Gomes De Lima Vitor Liu"},{"location":"impact-2019/#contribuicoes-de-codigo","title":"Contribui\u00e7\u00f5es de c\u00f3digo","text":"Servidor de desafios
In the 2020/1 edition, students worked on 15 different projects, contributing with 27 code modifications, of which 17 were incorporated into the original projects. In addition to these projects, students also worked on the Challenge Server, a software developed by Insper professors to be used in the Software Design course. A total of 7 accepted modifications have already been used during the semester.
"},{"location":"impact-2020/#alunos","title":"Alunos","text":"Isabella Rocha De Oliveira Bruna Mayumi Kimura Bruno Arthur Cesconetto Eli Jose Abi Ghosn Eric Fernando Otofuji Abrantes Francisco Ciol Rodrigues Aveiro Gabriel Fonseca Moreira Gabriel Valente Francato Hugo Silva Pereira Mendes Igor Dos Santos Montagner Lucca Delchiaro Costabile Martim Ferreira Jose Pedro De La Pe\u00f1a Ferreira Bueno Fonseca Pedro Oliveira De Azambuja Raphael Costa Sabrina Sampaio Simao Victor Laperuta De Moura"},{"location":"impact-2020/#contribuicoes","title":"Contribui\u00e7\u00f5es Melhorias de c\u00f3digo enviadas","text":"Servidor de desafios
https://github.com/Insper/servidor-de-desafios/pull/75 (Pedro De La Pe\u00f1a Ferreira Bueno Fonseca)
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2021/2 edition, students worked on 30 different projects, contributing with 56 code modifications, of which 37 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
Melhorias de c\u00f3digo enviadas Uutils/Coreutils Pull Requests
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2022/2 edition, students worked on 15 different projects, contributing with 20 code modifications, of which 4 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
Alunos participantes Bruno Freitas Do Nascimento Rodrigues Caroline Chaim De Lima Carneiro Cesar Ezra Ades Eiki Luis Yamashiro Fabricio Barth Felipe Lemos Gabriel Zanetti Guilherme Carneiro Lunetta Guilherme Teixeira Batista Gustavo Molina Freneda Benites Joao Pedro Farias De Araujo Joao Pedro Montefeltro Junqueira Meirelles Jo\u00e3o Vitor Menezes De Magalh\u00e3es Jonathan Sutton Keiya Nishio Luiza Rodrigues Silveira Marcelo Cesario Miguel Paulo Wook Kim Rafael Alves De Mello Almada Rafael Evangelista Monteiro Raphael Lahiry Rodrigo Guimar\u00e3es Coelho Melhorias de c\u00f3digo enviadas Geekquad/Algobook Pull Requests
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2023/2 edition, students worked on 0 different projects, contributing with 0 code modifications, of which 0 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
The following students are enrolled in this semester.
Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"syllabus/","title":"Syllabus","text":""},{"location":"syllabus/#assessment","title":"Assessment","text":"
This course has a gamified assessment system. At any time, you can check your grade by running:
Biweekly reports will be sent with a summary of what has been delivered and which criteria have been met, as well as the student's current grade. There is no possibility of losing points. Although the report is for informational purposes only, if the student is not failing due to absences, they should receive the grade indicated in the biweekly reports.
Attention
The complete list of rules is available on the Course Rules page and is the official reference for grade calculation. If there is a discrepancy between the report and the rules page, consider the report to be buggy.
The following activities are planned. The program is subject to changes and adaptations as the course progresses.
Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/alunos/","title":"Alunos","text":"Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"_snippets/plano-de-aulas/","title":"Plano de aulas","text":"Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/skills-code/","title":"Skills code","text":"id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"_snippets/skills-community/","title":"Skills community","text":"id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"_snippets/skills-impact/","title":"Skills impact","text":"id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"_snippets/skills-tutorial/","title":"Skills tutorial","text":"id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"aulas/02-comunidades-de-software/","title":"02 - Comunidades de Software","text":"
A atividade desta aula envolve a cria\u00e7\u00e3o de uma apresenta\u00e7\u00e3o explicando como s\u00e3o organizadas as comunidades ao redor dos seguintes projetos de software:
Docker
GIMP
Kubernetes
flatpak
Godot engine
GNOME
TensorFlow
digiKam
Shotcut
Cada grupo de 3 alunos dever\u00e1 escolher um projeto acima e pesquisar os seguintes pontos.
Para qu\u00ea serve o projeto?
Onde est\u00e1 o c\u00f3digo fonte? Quais tecnologias s\u00e3o usadas?
Qual a licen\u00e7a? Existem guidelines p\u00fablicos ou algum tipo de burocracia para contribui\u00e7\u00f5es?
Existe documenta\u00e7\u00e3o de desenvolvedor?
Parece f\u00e1cil de compilar/rodar?
Parece f\u00e1cil de modificar?
Como o projeto \u00e9 comandado?
Quem s\u00e3o as grandes figuras (desenvolvedores, evangelistas, etc) do projeto? Se o projeto for grande, cite duas \u00e1reas diferentes neste item.
Existe um roadmap p\u00fablico?
S\u00e3o aceitas contribui\u00e7\u00f5es externas? Por qual via?
As decis\u00f5es s\u00e3o tomadas por quem?
Onde encontrar os membros do projeto? Onde pedir ajuda?
O projeto arrecada fundos?
Existem empresas patrocinando desenvolvedores?
Quanto foi arrecadado? E gasto? Com quais fins?
Quem decide como gastar?
O trabalho do grupo ser\u00e1, ent\u00e3o, criar uma apresenta\u00e7\u00e3o de 10 minutos que responda as perguntas acima.
As apresenta\u00e7\u00f5es da vers\u00e3o do curso 2022/2 podem ser acessadas nos links abaixo:
Docker
GIMP
Kubernetes
flatpak
Godot engine
GNOME
TensorFlow
digiKam
Shotcut
"},{"location":"aulas/02-comunidades-de-software/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/02-comunidades-de-software/slides/#modelo-github-fork-pull-request","title":"Modelo Github fork + pull request","text":"
"},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-outros-modelos","title":"Fluxo de Trabalho: outros modelos","text":"
Enviar patch via lista de e-mails (ex. Linux)
Ferramentas de code review (ex. KDE - Phabricator)
Patch \u00e9 anexado no Bug Tracker (ex. Haiku, KDE)
N\u00e3o recebe contribui\u00e7\u00f5es externas
"},{"location":"aulas/02-comunidades-de-software/slides/#revisao-dos-prs-da-aula-passada","title":"Revis\u00e3o dos PRs da aula passada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erros-comuns","title":"Erros comuns","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-0-o-arquivo-login-achievements","title":"Erro 0: o arquivo login-achievements","text":"
Como consertar: Crie um novo commit com a data certa e veja o erro 2.
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr","title":"Erro 1: arquivos extras no PR","text":"
Erro: modificar arquivos n\u00e3o relacionados a sua mudan\u00e7a proposta.
"},{"location":"aulas/02-comunidades-de-software/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Ideal:
Um Pull Request dever\u00e1 conter o somente os arquivos relacionados a modifica\u00e7\u00e3o proposta.
Cada modifica\u00e7\u00e3o proposta est\u00e1 em um Pull Request separado
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-1-arquivos-extras-no-pr_1","title":"Erro 1: arquivos extras no PR","text":"
Como consertar: git revert cria um commit que desfaz altera\u00e7\u00f5es anteriores.
Op\u00e7\u00f5es extras:
--no-commit: s\u00f3 adiciona as modifica\u00e7\u00f5es, mas n\u00e3o faz o commit. Permite desfazer parcialmente um commit.
Fonte: https://www.atlassian.com/git/tutorials/
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"
Erro: o PR est\u00e1 espalhado em v\u00e1rios commits.
"},{"location":"aulas/02-comunidades-de-software/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Ideal:
Colocar toda sua modifica\u00e7\u00e3o em um s\u00f3 commit ajuda a entender o que foi modificado no PR.
Mant\u00e9m hist\u00f3rico limpo, com um commit por bug consertado ou funcionalidade adicionada.
Facilita encontrar erros e desfazer a modifica\u00e7\u00e3o caso ela seja problem\u00e1tica (usando `git revert')
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_1","title":"Erro 2: PR cont\u00e9m mais de um commit","text":""},{"location":"aulas/02-comunidades-de-software/slides/#erro-2-pr-contem-mais-de-um-commit_2","title":"Erro 2: PR cont\u00e9m mais de um commit","text":"
Como consertar: git rebase -i master permite remover e juntar commits do branch atual que n\u00e3o estejam no master.
Fonte: https://www.atlassian.com/git/tutorials/
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-3-mensagens-de-commit-nao-descritivas","title":"Erro 3: Mensagens de commit n\u00e3o descritivas","text":"
Como consertar: git commit --amend permite modificar o \u00faltimo commit feito.
"},{"location":"aulas/02-comunidades-de-software/slides/#erro-4-pull-request-com-descricao-ruim","title":"Erro 4: Pull Request com descri\u00e7\u00e3o ruim","text":"
Como consertar: S\u00f3 editar na interface do Github.
"},{"location":"aulas/02-comunidades-de-software/slides/#consertar-em-casa-e-pedir-review-via-github","title":"Consertar em casa e pedir review via Github","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-se-nao-der-push-nao-estragou-nada","title":"Lembrete: se n\u00e3o der push n\u00e3o estragou nada","text":""},{"location":"aulas/02-comunidades-de-software/slides/#lembrete-ii-git-log-mostra-seu-historico-atual","title":"Lembrete II: git log mostra seu hist\u00f3rico atual","text":""},{"location":"aulas/02-comunidades-de-software/slides/#dica-se-modificou-commits-ja-publicados-use-git-push-f-para-sobrescrever","title":"Dica: se modificou commits j\u00e1 publicados use git push -f para sobrescrever","text":""},{"location":"aulas/02-comunidades-de-software/slides/#nem-todos-os-alunos-que-estao-matriculados-na-disciplina-fizeram-a-atividade-da-ultima-aula","title":"Nem todos os alunos que est\u00e3o matriculados na disciplina fizeram a atividade da \u00faltima aula!","text":"
python dev-aberto.py list-users\n
"},{"location":"aulas/02-comunidades-de-software/slides/#comunidades-de-software","title":"Comunidades de software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#discussao","title":"Discuss\u00e3o","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Pergunta 1: quais s\u00e3o os softwares que voc\u00eas mais utilizam no dia a dia?
"},{"location":"aulas/02-comunidades-de-software/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Pergunta 2: quem \u00e9 o principal desenvolvedor do projeto?
Funda\u00e7\u00e3o d\u00e1 suporte ao desenvolvimento do Kernel Linux e \u00e0 cria\u00e7\u00e3o de um ecossistema de software de c\u00f3digo aberto ao seu redor.
"},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-ubuntu","title":"Exemplo: Ubuntu","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Empresa privada controla o desenvolvimento do Ubuntu. Obtem recursos via
Doa\u00e7\u00f5es
Servi\u00e7os de desenvolvimento e consultoria
Treinamento
"},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-gitlab","title":"Exemplo: Gitlab","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Empresa financiada at\u00e9 agora por VC (Venture Capital) em busca de lucro.
Op\u00e7\u00e3o de planos gr\u00e1tis com software de c\u00f3digo aberto
Op\u00e7\u00e3o de planos corporativos com mais funcionalidades e suporte
Instala\u00e7\u00f5es locais
"},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-elementary","title":"Exemplo: Elementary","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Distribui\u00e7\u00e3o linux comandada por uma empresa \"min\u00fascula\" focada em experi\u00eancia de usu\u00e1rio. Recursos s\u00e3o obtidos via
Patroc\u00ednios individuais e por empresas
Modelo pay-what-you-want (loja de aplicativos e sistema operacional)
Hardware com o sistema pr\u00e9-instalado
"},{"location":"aulas/02-comunidades-de-software/slides/#exemplo-linux-mint","title":"Exemplo: Linux Mint","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Distribui\u00e7\u00e3o linux cujo objetivo \u00e9 que tudo funcione direto na instala\u00e7\u00e3o. \u00c9 considerada boa para iniciantes.
Diversas outras maneiras de conseguir suporte e financiamento
"},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-financiar-empresa","title":"Raz\u00f5es para financiar (empresa)","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
\"Adquirir\" especialistas em uma tecnologia
Vender suporte ou consultoria
Marketing
Licen\u00e7a de software \"obriga\"
"},{"location":"aulas/02-comunidades-de-software/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Nem sempre o que \u00e9 financiado termina em um formato \"aproveit\u00e1vel\" por terceiros (ex: Android/Linux, TiVO)
\"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]
"},{"location":"aulas/02-comunidades-de-software/slides/#razoes-para-contribuir-individuo","title":"Raz\u00f5es para contribuir (indiv\u00edduo)","text":"
Profissionais
Reputa\u00e7\u00e3o / Curr\u00edculo
Necessidade de neg\u00f3cio
Pessoais
Altru\u00edsmo / Ideologia
Sensa\u00e7\u00e3o de realiza\u00e7\u00e3o pessoal
Exerc\u00edcio de criatividade
Resolver um problema de seu interesse
"},{"location":"aulas/02-comunidades-de-software/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
Pesquisar como as comunidades de alguns projetos est\u00e3o organizadas
Produzir uma apresenta\u00e7\u00e3o resumindo suas descobertas
"},{"location":"aulas/02-comunidades-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/02-comunidades-de-software/slides/#_22","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/02-comunidades-de-software/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/","title":"04 - Discuss\u00f5es: documenta\u00e7\u00e3o de projetos","text":"
A aula de hoje \u00e9 est\u00fadio para trabalhar na atividade da aula passada mais tempo para discuss\u00f5es.
"},{"location":"aulas/04-discussao-documentacao-de-software/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:
https://github.com/Insper/servidor-de-desafios
"},{"location":"aulas/04-discussao-documentacao-de-software/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#proximas-aula","title":"Pr\u00f3ximas aula","text":"
Entender o qu\u00ea \u00e9 um projeto profissional:
documenta\u00e7\u00e3o de usu\u00e1rio e desenvolvedor
boas pr\u00e1ticas de programa\u00e7\u00e3o e qualidade de c\u00f3digo
integra\u00e7\u00e3o de c\u00f3digo e documenta\u00e7\u00e3o em um mesmo reposit\u00f3rio
"},{"location":"aulas/04-discussao-documentacao-de-software/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#a-ausencia-de-documentacao-de-software_1","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"aulas/04-discussao-documentacao-de-software/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/","title":"05 - Projeto Profissional","text":"
Existe um momento em que ele j\u00e1 soluciona um problema para o autor e come\u00e7a a ficar claro que ele \u00e9 de interesse de outras pessoas. Vamos considerar que o Servidor de Desafios chegou neste momento e transform\u00e1-lo em um projeto \"profissional\".
Seu trabalho neste roteiro ser\u00e1 preparar o projeto para ser apresentado \"oficialmente\" a outros usu\u00e1rios. Ou seja, far\u00e1 mudan\u00e7as para melhorar a qualidade do c\u00f3digo e criar\u00e1 uma p\u00e1gina para o projeto apresentando-o e provendo instru\u00e7\u00f5es de instala\u00e7\u00e3o e uso.
Para entregar esta tarefa voc\u00ea dever\u00e1 criar um reposit\u00f3rio softdes-desafios em seu usu\u00e1rio, colocar o servidor de desafios l\u00e1 e hospedar sua documenta\u00e7\u00e3o usando Github Pages. Com isto pronto envie o trabalho de voc\u00eas via PR para o reposit\u00f3rio da disciplina.
Os itens obrigat\u00f3rios s\u00e3o descritos nos itens abaixo.
"},{"location":"aulas/05-projeto-profissional/#itens-basicos-de-qualidade","title":"Itens b\u00e1sicos de qualidade","text":"
Adicionar um README ao projeto
Adicione uma descri\u00e7\u00e3o do projeto
Screenshot
Links para docs de Desenvolvimento e Usu\u00e1rio
Organizar pastas seguindo uma estrutura em que o c\u00f3digo est\u00e1 em src e a documenta\u00e7\u00e3o oficial em docs
Subir c\u00f3digo no Github
"},{"location":"aulas/05-projeto-profissional/#qualidade-de-codigo","title":"Qualidade de c\u00f3digo","text":"
Nosso c\u00f3digo est\u00e1 mal formatado e tem v\u00e1rias pr\u00e1ticas ruins de programa\u00e7\u00e3o. O pylint detecta estes problemas e d\u00e1 uma nota para seu c\u00f3digo. Melhore a nota do Servidor de Desafios eliminando estes problemas do c\u00f3digo. Alguns dos problemas s\u00e3o de resolu\u00e7\u00e3o simples e podem ser feitos por ferramentas, mas outros requerem uma aten\u00e7\u00e3o \"humana\"
Ele n\u00e3o precisa estar 100%, mas voc\u00ea precisa eliminar grande parte dos erros mais bizarros. Ap\u00f3s fazer as corre\u00e7\u00f5es crie um novo commit e prossiga.
Danger
Certifique-se que o projeto continua funcionando! Alguns erros, como usar exec ou eval s\u00e3o inerentes ao projeto e n\u00e3o podem ser \"consertados\".
O mkdocs \u00e9 uma ferramenta de documenta\u00e7\u00e3o de software para gerar uma p\u00e1gina web de documenta\u00e7\u00e3o para o projeto. Vamos us\u00e1-lo para documenta\u00e7\u00e3o de desenvolvimento e de usu\u00e1rio do nosso projeto.
Tip
O mkdocs possui v\u00e1rios temas. Escolha um que voc\u00ea goste.
"},{"location":"aulas/05-projeto-profissional/#documentacao-de-usuario","title":"Documenta\u00e7\u00e3o de usu\u00e1rio","text":"
Os seguintes itens devem estar presentes:
Uma p\u00e1gina inicial descrevendo o projeto e explicando seu uso esperado. Inclua links e screenshots do software rodando.
Uma p\u00e1gina de guia de usu\u00e1rio para alunos. Este guia dever\u00e1 mostrar passo a passo as seguintes tarefa
entrar no servidor de desafios
enviar solu\u00e7\u00e3o correta para desafio
enviar solu\u00e7\u00e3o errada
Uma p\u00e1gina de guia de usu\u00e1rio para professores. Ela dever\u00e1 descrever:
como adicionar usu\u00e1rios (usando os arquivos users.csv e add_user.py)
como adicionar novos desafios (linha de comando mesmo)
"},{"location":"aulas/05-projeto-profissional/#documentacao-de-desenvolvimento","title":"Documenta\u00e7\u00e3o de desenvolvimento","text":"
As seguintes informa\u00e7\u00f5es devem estar presentes:
como configurar ambiente de desenvolvimento
instala\u00e7\u00e3o do software
estrutura do c\u00f3digo em alto n\u00edvel
"},{"location":"aulas/05-projeto-profissional/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/05-projeto-profissional/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
Arquitetura
Qualidade de c\u00f3digo
Seguran\u00e7a
"},{"location":"aulas/05-projeto-profissional/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"aulas/05-projeto-profissional/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"
Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas
Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
Algum processo de qualidade de software
testes automatizados
formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
linters
PEP8
"},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"
Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.
Focado em detalhes
Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
Tipicamente obtida direto do c\u00f3digo
N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
"},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"
Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.
"},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"aulas/05-projeto-profissional/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
Cada projeto tem o seu
Algumas linguagens tem um estilo padr\u00e3o
Python - PEP8
Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
"},{"location":"aulas/05-projeto-profissional/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"
Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.
"},{"location":"aulas/05-projeto-profissional/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"aulas/05-projeto-profissional/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"
Objetivo: Transformar um c\u00f3digo perdido em um projeto \"completo\"
"},{"location":"aulas/05-projeto-profissional/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/05-projeto-profissional/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"aulas/05-projeto-profissional/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/06-distribuicao-software/","title":"06 - Distribui\u00e7\u00e3o de Software","text":"
Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.
"},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"
Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.
A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:
from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n version='0.1',\n packages=['dev_aberto']\n )\n
Exercise
Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando
pip install .
Exercise
Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.
Exercise
Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.
Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:
Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.
Exercise
Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.
Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.
...\n scripts=['scripts/hello.py'],\n ...\n
N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:
#!/usr/bin/env python3\n
No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamdas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.
"},{"location":"aulas/06-distribuicao-software/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"
Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:
sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.
A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:
> python setup.py sdist\n
A instala\u00e7\u00e3o deste pacote pode ser feita via pip.
"},{"location":"aulas/06-distribuicao-software/#envio-para-o-pypi","title":"Envio para o PyPI","text":"
Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.
Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.
Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:
"},{"location":"aulas/06-distribuicao-software/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"
Vamos agora trabalhar (em grupo) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1
instalar todas as depend\u00eancias do sistema
criar a base de dados, se necess\u00e1rio
adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
executar o servidor e serv\u00ed-lo na porta 8080 do host
manter os dados adicionados ao reiniciar o container
Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.
Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.
Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.
LANGUAGE=en_US.utf8 ls --help
J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.
LANGUAGE=pt_BR.utf8 ls --help
De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.
"},{"location":"aulas/07-localizacao/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"
Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.
from datetime import date\n\nif __name__ == '__main__':\n today = date.today()\n print(today)\n\n number = 240000000000.32212\n print(number)\n\n name = input('Input your name: ')\n print('Hello {}'.format(name))\n
Uma sa\u00edda poss\u00edvel seria
2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n
Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).
Exercise
O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.
Exercise
Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s
A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.
A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:
Marca\u00e7\u00e3o das strings a serem traduzidas
Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo
No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.
import gettext\ngettext.install('cli', localedir='locale') \n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n
Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.
print(_(\"Hello!\"))\n
Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.
$ pybabel extract . -o cli-model.pot
Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.
Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).
msgid \"Input your name: \"\nmsgstr \"\"\n
Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).
Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.
$ pybabel compile -D cli -l pt_BR -d locale
Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.
Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?
Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.
Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.
"},{"location":"aulas/07-localizacao/#traduzindo-no-mundo-real","title":"Traduzindo no mundo real","text":"
Agora que voc\u00ea j\u00e1 conhece os passos necess\u00e1rios para traduzir um software \u00e9 o momento de colocar esse conhecimento em pr\u00e1tica. O trabalho de seu grupo ser\u00e1 encontrar softwares que necessitem de tradu\u00e7\u00f5es para o Portugu\u00eas brasileiro e realiz\u00e1-las. Alguns projetos tamb\u00e9m disponibilizam arquivos *.po para tradu\u00e7\u00e3o de guias de usu\u00e1rio e isto tamb\u00e9m \u00e9 v\u00e1lido neste item.
GNOME - sistema de tradu\u00e7\u00f5es
KDE - status de tradu\u00e7\u00f5es e brasileiros tradutores.
Inkscape
Openshot
Elementary Linux
Aplicativos m\u00f3veis livres no fdroid.org
Ao ter tradu\u00e7\u00f5es aceitas por um projeto voc\u00eas receber\u00e3o a skill Tradu\u00e7\u00e3o aceita!
"},{"location":"aulas/07-localizacao/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/07-localizacao/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"aulas/07-localizacao/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.
Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es
de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.
"},{"location":"aulas/07-localizacao/slides/#i18n-e-l10n","title":"I18N e L10N","text":"
Precisam ser
independentes:
idioma ingl\u00eas e datas no formato brasileiro
configur\u00e1veis
posso precisar trocar entre l\u00ednguas e entre formatos
"},{"location":"aulas/07-localizacao/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"aulas/07-localizacao/slides/#locales","title":"Locales","text":"
Um locale \u00e9 uma tripla
"},{"location":"aulas/07-localizacao/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
<lingua>_<pais>.<codificacao>\n
"},{"location":"aulas/07-localizacao/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.
"},{"location":"aulas/07-localizacao/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"aulas/07-localizacao/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"aulas/07-localizacao/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
Baixar uma biblioteca de Localiza\u00e7\u00e3o
Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
"},{"location":"aulas/07-localizacao/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
# Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
"},{"location":"aulas/07-localizacao/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso
"},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"
Envolve 4 etapas:
Marcar todas strings que devem ser traduzidas
Extra\u00ed-las do c\u00f3digo fonte
Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
Empacotar as tradu\u00e7\u00f5es junto com o programa
"},{"location":"aulas/07-localizacao/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
\u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.
"},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"
Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.
LANG para l\u00edngua
LC_TIME para data
LC_NUMERIC para n\u00fameros
Um locale sempre \u00e9 expresso no formato
<lingua>_<pais>.<codificacao>\n
"},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"
O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"
Existem diversas maneiras de determinar um bom locale em sistemas Web:
Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
Geolocaliza\u00e7\u00e3o via IP
Prefer\u00eancia armazenada em banco de dados
"},{"location":"aulas/07-localizacao/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"aulas/07-localizacao/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.
"},{"location":"aulas/07-localizacao/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/07-localizacao/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"aulas/07-localizacao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/08-testes-automatizados/","title":"08 - Testes automatizados","text":"
O objetivo da atividade de hoje \u00e9 criar testes automatizados para o servidor de desafios. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.
Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
Distribui\u00e7\u00e3o de software e versionamento
Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
Testes automatizados
"},{"location":"aulas/08-testes-automatizados/#testes-de-unidade","title":"Testes de unidade","text":"
Uma parte do programa do servidor de desafios que pode ser testada com testes de unidade \u00e9 a fun\u00e7\u00e3o lambda_handler, que executa a fun\u00e7\u00e3o submetida pelo usu\u00e1rio. Seu trabalho ser\u00e1 criar testes usando o pytest e cobrir os seguintes casos:
programa submetido est\u00e1 correto
programa submetido n\u00e3o cont\u00e9m a fun\u00e7\u00e3o pedida
programa submetido retorna resultado incorreto
"},{"location":"aulas/08-testes-automatizados/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"
Iremos criar testes de interface de usu\u00e1rio para o Servidor de Desafios usando o Selenium. Este software permite imitar intera\u00e7\u00f5es reais de um usu\u00e1rio usando c\u00f3digo e criar testes baseado nessas intera\u00e7\u00f5es.
Voc\u00eas devem simular os seguintes cen\u00e1rios:
Aluno faz login com sucesso
Aluno entra senha incorreta
Aluno envia desafio com resposta incorreta
Aluno envia desafio com resposta correta
A ideia b\u00e1sica seria reproduzir os mesmos testes apresentados no manual do usu\u00e1rio.
O objetivo da atividade de hoje \u00e9 criar testes automatizados para um projeto espec\u00edfico de software. Com isso completamos nossa jornada rumo a software que possa ser desenvolvido de maneira colaborativa e que possa ser usado em situa\u00e7\u00f5es reais.
Documenta\u00e7\u00e3o (usu\u00e1rios e desenvolvedor)
Distribui\u00e7\u00e3o de software e versionamento
Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o
Testes automatizados
"},{"location":"aulas/08-testes-automatizados/index_2022/#biblioteca-para-implementacao-de-agentes-baseados-em-busca","title":"Biblioteca para implementa\u00e7\u00e3o de agentes baseados em busca","text":"
O projeto AI Code implementa uma biblioteca que possui diversos algoritmos de busca pr\u00e9-prontos e alguns exemplos de utiliza\u00e7\u00e3o.
Os exemplos de utiliza\u00e7\u00e3o j\u00e1 possuem arquivos de teste usando a biblioteca pytest, mas podem estar incompletos ou at\u00e9 mesmo errados.
As implementa\u00e7\u00f5es dos algoritmos de busca, da biblioteca em si, n\u00e3o possuem testes. Estes algoritmos est\u00e3o implementados no arquivo SearchAlgoritms.py.
Leia a documenta\u00e7\u00e3o para entender os exemplos e o prop\u00f3sito da biblioteca;
Revise os testes;
Implemente ou altere 3 novos testes para um dos exemplos apresentados na documenta\u00e7\u00e3o. Justifique o motivo da sua nova implementa\u00e7\u00e3o ou altera\u00e7\u00e3o no pull request;
Implemente 3 novos testes para os algoritmos base da biblioteca. Fa\u00e7a isto em um pull request diferente do anterior.
Al\u00e9m da implementa\u00e7\u00e3o dos testes, uma outra alternativa \u00e9 executar o pylint e sugerir mudan\u00e7as na formata\u00e7\u00e3o do c\u00f3digo dos arquivos search/SearchAlgorithms.py, search/Graph.py e ProblemSpecificationExample.py.
"},{"location":"aulas/08-testes-automatizados/index_2022/#formato-de-entrega","title":"Formato de entrega","text":"
Para a entrega do exerc\u00edcio voc\u00ea dever\u00e1:
implementar os dois conjuntos de testes, ou;
implementar um dos conjuntos de testes e as modifica\u00e7\u00f5es sugeridas pelo pylint.
Esta atividade deve ser individual. Os PRs devem ser enviados e discutidos ao longo desta semana.
Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.
Testa as fun\u00e7\u00f5es de maneira isolada
Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
"},{"location":"aulas/08-testes-automatizados/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"aulas/08-testes-automatizados/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"
Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.
Testa intera\u00e7\u00e3o entre em objetos
Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
"},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"
Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela
Menos espec\u00edfico poss\u00edvel
Mais fiel ao uso real de um usu\u00e1rio
"},{"location":"aulas/08-testes-automatizados/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"aulas/08-testes-automatizados/slides/#selenium","title":"Selenium","text":"
Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.
"},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#_1","title":"Testes automatizados","text":""},{"location":"aulas/08-testes-automatizados/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"aulas/08-testes-automatizados/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"aulas/08-testes-automatizados/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"
Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.
"},{"location":"aulas/09-cultura-livre/","title":"09 - Trabalho sobre cultura livre","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"aulas/09-cultura-livre/slides/","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-cultura-livre/slides/#cultura-de-software-livre","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-cultura-livre/slides/#atividade","title":"Atividade","text":"
Cultura livre: fazer uma pesquisa profunda e apresentar semin\u00e1rio sobre licen\u00e7as de software e casos recentes em que licen\u00e7as tem papel de destaque
"},{"location":"aulas/09-cultura-livre/slides/#sua-apresentacao-precisa-ter-alguma-forma-de-interacao-com-a-audiencia","title":"Sua apresenta\u00e7\u00e3o precisa ter alguma forma de intera\u00e7\u00e3o com a audi\u00eancia","text":"
debate
painel com vota\u00e7\u00f5es
"},{"location":"aulas/09-cultura-livre/slides/#atividade-sugestoes-de-temas","title":"Atividade - sugest\u00f5es de temas","text":"
The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022?
There is no \"Linux\" platform.
Telemetria \u00e9 \"\u00e9tico\"? (exemplo VSCode e outros).
GitHub CoPilot \u00e9 \"\u00e9tico\"? Respeita licen\u00e7as de software?
Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones (bateria, right to repair, etc).
Maintainer burnout.
"},{"location":"aulas/09-cultura-livre/slides/#atividade-datas-de-apresentacao","title":"Atividade - datas de apresenta\u00e7\u00e3o","text":"
17/11 - 2 trabalho
22/11 - 2 trabalhos
24/11 - 2 trabalhos
29/11 - 2 trabalhos
"},{"location":"aulas/09-cultura-livre/slides/#45-minutos-de-apresentacaoatividade-10-minutos-para-perguntas","title":"45 minutos de apresenta\u00e7\u00e3o/atividade + 10 minutos para perguntas","text":""},{"location":"aulas/09-cultura-livre/slides/#hoje","title":"Hoje","text":"
Defini\u00e7\u00e3o de temas e datas de apresenta\u00e7\u00e3o
Pr\u00e9via de 5 minutos do seu tema na pr\u00f3xima aula
"},{"location":"aulas/09-cultura-livre/slides/#registrar-seu-grupo-escolha-de-tema-e-dia-de-apresentacao-na-issue-665","title":"Registrar seu grupo, escolha de tema e dia de apresenta\u00e7\u00e3o na issue #665","text":""},{"location":"aulas/09-licencas/","title":"09 - Licen\u00e7as de Software","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"aulas/09-licencas/slides/","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-licencas/slides/#ate-agora","title":"At\u00e9 agora","text":"
Ferramentas de colabora\u00e7\u00e3o
Modifica\u00e7\u00f5es de c\u00f3digo
Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
Distribui\u00e7ao de software
Teste de software
### Conte\u00fado t\u00e9cnico: ferramentas, fluxos de trabalho, etc
"},{"location":"aulas/09-licencas/slides/#hoje","title":"Hoje","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_1","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_2","title":"Licen\u00e7as de software","text":"
Governam a distribui\u00e7\u00e3o de um software
Cess\u00e3o de direitos do autor para outras pessoas
Listam quais permiss\u00f5es um usu\u00e1rio (n\u00e3o) tem
"},{"location":"aulas/09-licencas/slides/#disclaimer","title":"Disclaimer","text":""},{"location":"aulas/09-licencas/slides/#eu-nao-sou-especialista-em-direito-autoral-brasileiro-toda-informacao-disponibilizada-foi-fruto-de-pesquisa-e-nao-constitui-aconselhamento-legal","title":"Eu n\u00e3o sou especialista em direito autoral brasileiro. Toda informa\u00e7\u00e3o disponibilizada foi fruto de pesquisa e n\u00e3o constitui aconselhamento legal.","text":""},{"location":"aulas/09-licencas/slides/#distribuicao-de-software","title":"Distribui\u00e7\u00e3o de software","text":"
Escrever software \u00e9 considerado um trabalho intelectual, estando ent\u00e3o sujeito \u00e0s leis de direitos autorais.
Essas leis s\u00e3o espec\u00edficas de cada pa\u00eds
Autoria vs explora\u00e7\u00e3o econ\u00f4mica
Engloba tanto c\u00f3digo fonte como bin\u00e1rios
N\u00e3o \u00e9 necess\u00e1rio registro. N\u00e3o vale para ideias.
Direito moral:
assegura a autoria da obra ao autor original
integridade da obra
instransfer\u00edvel e irrevog\u00e1vel
Direito patrimonial:
explora\u00e7\u00e3o econ\u00f4mica da obra.
licenciado ou cedido
copyright em ingl\u00eas
"},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante","title":"Por que isto \u00e9 importante?","text":"
O dono dos direitos autorais (patrimoniais) pode controlar:
Distribui\u00e7\u00e3o, parcial ou total;
Cria\u00e7\u00e3o de obras derivadas
Reprodu\u00e7\u00e3o (execu\u00e7\u00e3o)
"},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_1","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-durante-o-expediente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware durante o expediente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_2","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-nao-relacionado","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto n\u00e3o relacionado.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_3","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-concorrente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto concorrente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_4","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-programador-faz-um-freelance-e-entrega-um-projeto-para-uma-empresa-ele-pode-reutilzar-parte-do-codigo-em-outros-projetos-para-outras-empresas","title":"Um programador faz um freelance e entrega um projeto para uma empresa. Ele pode reutilzar parte do c\u00f3digo em outros projetos (para outras empresas)?","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_5","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-prestador-de-servicos-contratado-como-empresa-via-cnpj-participa-de-um-projeto-terceirizado-junto-com-outros-pjs","title":"Um prestador de servi\u00e7os (contratado como empresa via CNPJ) participa de um projeto terceirizado, junto com outros PJs.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_6","title":"Por que isto \u00e9 importante?","text":"
Nenhum dos casos acima tem respostas fixas. Tudo depende de um monte de fatores jur\u00eddicos e do qu\u00ea cada um assinou. Alguns guias interessantes:
Association of Software Professionals
Start-se
Legal Nature - EULA
"},{"location":"aulas/09-licencas/slides/#contexto-1-propriedade-intelectual-e-work-for-hire","title":"Contexto 1: Propriedade intelectual e work-for-hire","text":"
Contexto brasilero: \"Pela nossa lei de software, a n\u00e3o ser que expressamente dito o contr\u00e1rio, aquele que contrata o desenvolvimento \u00e9 titular original do software resultante\" [1]
Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o servi\u00e7o [2]
Fontes 1 2
"},{"location":"aulas/09-licencas/slides/#contexto-2-projetos-open-source","title":"Contexto 2: projetos open source","text":"
Contributor License Agreement \u00e9 um documento de cess\u00e3o de copyright (direitos de explora\u00e7\u00e3o comercial).
D\u00e1 ao projeto uma licen\u00e7a n\u00e3o exclusiva (normalmente) e irrevog\u00e1vel para o projeto explorar sua contribui\u00e7\u00e3o
Mant\u00e9m autoria
Isenta o projeto de responsabilidades sobre suas contribui\u00e7\u00f5es
"},{"location":"aulas/09-licencas/slides/#contexto-3-comercializacao-de-software","title":"Contexto 3: comercializa\u00e7\u00e3o de software","text":"
End User License Agreement (EULA): Termo usado para aquelas condi\u00e7\u00f5es que (n\u00e3o lemos) aceitamos ao instalar software propriet\u00e1rio ou nos registramos em um site/servi\u00e7o.
"},{"location":"aulas/09-licencas/slides/#_1","title":"Licen\u00e7as de software","text":"
Ignorado por aproximadamente 90% dos usu\u00e1rios (fonte)
"},{"location":"aulas/09-licencas/slides/#end-user-license-agreement","title":"End User License Agreement","text":"
E por algumas empresas... Fonte
"},{"location":"aulas/09-licencas/slides/#end-user-license-agreement_1","title":"End User License Agreement","text":"
Restri\u00e7\u00f5es t\u00edpicas encontradas em EULAs:
Software \u00e9 licenciado, n\u00e3o vendido;
\u00c9 proibido engenharia reversa
N\u00e3o pode modificar ou explorar limita\u00e7\u00f5es / vulnerabilidades
Isenta responsabilidades pelo (mau) uso do software
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia","title":"Um pouco de hist\u00f3ria","text":""},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_1","title":"Um pouco de hist\u00f3ria","text":"
Richard Stallman fez um interpretador Lisp (MIT ~ 1985)
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_2","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_3","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
Fez modifica\u00e7\u00f5es no software
Deu um jeito de n\u00e3o devolv\u00ea-las para o MIT....
E eliminou a competi\u00e7\u00e3o...
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_4","title":"Um pouco de hist\u00f3ria","text":"
Stallman ficou #$@#$@#$@
e criou a primeira licen\u00e7a de software livre: Emacs General Public License
Toda c\u00f3pia do programa dever\u00e1 estar acompanhada do c\u00f3digo fonte;
Se uma modifica\u00e7\u00e3o do software for distribu\u00edda, ela dever\u00e1 estar sujeita aos mesmos termos do software original;
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1985","title":"Um pouco de hist\u00f3ria - 1985","text":"
GNU Manifesto: descrevia um esfor\u00e7o em criar um sistema completamente livre cujo destino estivesse nas m\u00e3os dos usu\u00e1rios
GNU/Hurd: todas as ferramentas de linha de comando das distribui\u00e7\u00f5es modernas vieram desse projeto
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1990","title":"Um pouco de hist\u00f3ria - 1990","text":"
Linus Torvalds tinha um kernel experimental \"pronto\".
Liberava uma vers\u00e3o nova toda semana;
Recebia contribui\u00e7\u00f5es de outros interessados.
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_5","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Free Software, Free Society: Selected Essays of Richard M. Stallman.
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_6","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Just for Fun: The Story of an Accidental Revolutionary, Linus Torvalds and David Diamond
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre","title":"Licen\u00e7as de software (livre)","text":"
Criadas pela Free Software Foundation visando garantir 4 liberdades para um usu\u00e1rio ao usar um software:
Execu\u00e7\u00e3o sem restri\u00e7\u00f5es
Estudo e modifica\u00e7\u00e3o do software;
Redistribuir c\u00f3pias;
Redistribuir c\u00f3pias das suas modifica\u00e7\u00f5es.
Distribuir os fontes \u00e9 pr\u00e9-requisito dos itens 1 e 3!
Chamadas tamb\u00e9m de rec\u00edprocas.
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre_1","title":"Licen\u00e7as de software (livre)","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre-reciprocas","title":"Licen\u00e7as de software livre - rec\u00edprocas","text":"
Copyleft: S\u00edmbolo \u00e9 o contr\u00e1rio do copyright, cujo objetivo seria restringir os usu\u00e1rios
Fundada para difundir um discurso menos anti-comercial e ideol\u00f3gico
Tamb\u00e9m difunde benef\u00edcios \"pragm\u00e1ticos\" do uso de software \"de c\u00f3digo aberto\"
Free causa confus\u00e3o em ingl\u00eas
Gr\u00e1tis (free as in beer)
Livre (free as in freedom)
Fundada por Eric Raymond e Bruce Perens
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-de-codigo-aberto","title":"Licen\u00e7as de software de c\u00f3digo aberto","text":"
Mais associadas a Open Source Iniciative, s\u00e3o consideradas menos \"ideol\u00f3gicas\".
Muitas vezes chamadas de permissivas;
Normalmente n\u00e3o garatem a liberdade 3;
Podem fazer outras pequenas exig\u00eancias ou restri\u00e7\u00f5es
Exemplos: MIT, BSD
Permitem a distribui\u00e7\u00e3o de software com partes propriet\u00e1rias
Permitem a venda e completo rebranding do software sem nenhuma contribui\u00e7\u00e3o para o autor original.
"},{"location":"aulas/09-licencas/slides/#licencas-qual-usar","title":"Licen\u00e7as: qual usar?","text":"
https://choosealicense.com/licenses/
"},{"location":"aulas/09-licencas/slides/#desafio-de-traducao","title":"Desafio de tradu\u00e7\u00e3o","text":""},{"location":"aulas/09-licencas/slides/#skill-traducao-aceita-5xp-ao-menos-40-string-traduzidas","title":"Skill \"Tradu\u00e7\u00e3o aceita!\" (5XP): Ao menos 40 string traduzidas","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_3","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/","title":"10 - Minha primeira contribui\u00e7\u00e3o","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica guidada. Faremos aula est\u00fadio com atendimento para encontrar projetos e issues interessantes.
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#_1","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#contribuicao-de-codigo","title":"Contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":"
Bons projetos usam tags para facilitar a recep\u00e7\u00e3o de novatos
good-first-issue
newcomers
low effort
difficulty novice
easy
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#agregadores-de-projetos","title":"Agregadores de projetos","text":"
https://github.com/MunGell/awesome-for-beginners
https://www.codetriage.com/
https://up-for-grabs.net/
http://github-help-wanted.com/
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-i-pandas","title":"Sugest\u00e3o I - Pandas","text":"
Biblioteca de tratamento de dados usada em Ci\u00eancia dos Dados.
Projeto complexo, com muitos casos de uso especiais
Toneladas de funcionalidades de visualiza\u00e7\u00e3o textual e gr\u00e1fica de dados
Python \u00e9 familiar para a maioria
Tickets de testes s\u00e3o, em geral, f\u00e1ceis para come\u00e7ar e \u00fateis para a comunidade.
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-ii-escolha-seu-proprio-projeto","title":"Sugest\u00e3o II: Escolha seu pr\u00f3prio projeto :)","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica guidada, mas tem uma parte expositiva importante. N\u00e3o esque\u00e7a de olhar os slides de hoje para relembrar.
"},{"location":"aulas/11-contribuicoes-externas/slides/","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_1","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-para-debugar-qualquer-coisa","title":"Dicas para debugar (qualquer coisa)","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#9-regras-de-debug","title":"9 regras de debug","text":"
UNDERSTAND THE SYSTEM
MAKE IT FAIL
QUIT THINKING AND LOOK
DIVIDE AND CONQUER
CHANGE ONE THING AT A TIME
KEEP AN AUDIT TRAIL
CHECK THE PLUG
GET A FRESH VIEW
IF YOU DIDN'T FIX IT, IT AIN'T FIXED
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nada-acontece-se-nao-conseguirmos","title":"Nada acontece se n\u00e3o conseguirmos","text":"
Baixar a vers\u00e3o de desenvolvimento
Instalar todas as depend\u00eancias
Compilar nossa pr\u00f3pria vers\u00e3o
Rodar testes na vers\u00e3o do master
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_1","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#ferramentas-importantes","title":"Ferramentas importantes:","text":"
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_2","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#conheca-suas-ferramentas","title":"Conhe\u00e7a suas ferramentas","text":"
Debugging visual linha a linha
Stacktrace
Busca em projeto inteiro
Ir para defini\u00e7\u00e3o de fun\u00e7\u00e3o
"},{"location":"aulas/11-contribuicoes-externas/slides/#debugar-usando-print-e-perda-de-tempo","title":"Debugar usando print \u00e9 perda de tempo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#2-make-it-fail","title":"2. Make it fail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#reproduza-seu-bug","title":"Reproduza seu bug","text":"
Crie um exemplo m\u00ednimo que reproduza o bug desejado ou que usaria a feature que quer implementar
entrada de exemplo e sa\u00edda esperada vs sa\u00edda obtida
Possivelmente isto j\u00e1 foi descrito na issue escolhida.
Anote elementos que te ajudem a encontrar onde isto ocorre no c\u00f3digo (fun\u00e7\u00f5es usadas, elementos de interface gr\u00e1fica, mensagens de erro.)
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#encontre-onde-esta-o-problema-e-leia-o-codigo-com-atencao","title":"Encontre onde est\u00e1 o problema e leia o c\u00f3digo com aten\u00e7\u00e3o","text":"
Encontre no c\u00f3digo onde o bug pode estar
Comece geral (em qual arquivo est\u00e1 a funcionalidade?) e v\u00e1 restringindo (em qual fun\u00e7\u00e3o o bug \"explode\"?)
Ferramentas de debug s\u00e3o essenciais. Veja o item 1.
N\u00e3o atenderei ningu\u00e9m que esteja debugando s\u00f3 com print
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_1","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-por-nomes-de-arquivos","title":"Buscando por nomes de arquivos","text":"
Comando find (man page)
Exemplo: procurar por arquivos cujo nome \u00e9 aceito por uma certa express\u00e3o regular come\u00e7ando no diret\u00f3rio atual.
$ find -iname \"regexp\" .
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_2","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-no-conteudo-dos-arquivos","title":"Buscando no conte\u00fado dos arquivos","text":"
Comando grep (man page)
$ grep [OPTIONS] PATTERN FILES
PATTERN: express\u00e3o regular
FILES: lista de diret\u00f3rios ou arquivos
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look-grep","title":"3. Quit thinking and look - grep","text":"
Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto \"dialog\" ignorando mai\u00fasculas/min\u00fasculas.
$ grep -r -i dialog .
"},{"location":"aulas/11-contribuicoes-externas/slides/#_2","title":"Dicas de Debug","text":"
Exemplo 2: Listas todos os arquivos .cpp que fazem algum include
$ grep -r --include \"*cpp\" \"#include\" .
"},{"location":"aulas/11-contribuicoes-externas/slides/#sua-ideeditor-devem-ter-algo-parecido-procure-e-use","title":"Sua IDE/editor devem ter algo parecido. Procure e use.","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#4-divide-and-conquer","title":"4. Divide and Conquer","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#crie-um-plano-de-acao","title":"Crie um plano de a\u00e7\u00e3o","text":"
Por que o bug ocorre?
Est\u00e1 relacionado a qual fun\u00e7\u00e3o?
Qual vari\u00e1vel tem o valor errado?
O que deve ser mudado para que pare de ocorrer?
Pr\u00e9-requisito: debugar visualmente usando alguma IDE / editor
"},{"location":"aulas/11-contribuicoes-externas/slides/#5-change-one-thing-at-a-time","title":"5. Change one thing at a time","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#um-bom-pr-muda-o-minimo-possivel","title":"Um bom PR muda o m\u00ednimo poss\u00edvel","text":"
use v\u00e1rias branches se quiser testar ideias diferentes
git commit \u00e9 gr\u00e1tis. Quando chegar na vers\u00e3o final \u00e9 s\u00f3 juntar tudo e mandar.
git rebase para atualizar seu branch com o master upstream caso necess\u00e1rio.
"},{"location":"aulas/11-contribuicoes-externas/slides/#6-keep-an-audit-trail","title":"6. Keep an audit trail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#registre-suas-descobertas","title":"Registre suas descobertas","text":"
Log de como voc\u00ea encontrou onde mexer
Log de todos arquivos de interesse e seus usos
Log de todas as pesquisas feitas
Log de todas as modifica\u00e7\u00f5es feitas
git commit \u00e9 \u00fatil para registrar testes tamb\u00e9m
N\u00e3o se esque\u00e7a:git diff \u00e9 seu melhor amigo
"},{"location":"aulas/11-contribuicoes-externas/slides/#7-check-the-plug","title":"7. Check the plug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nunca-se-esqueca-de-testar-a-solucoes-mais-simples-primeiro","title":"Nunca se esque\u00e7a de testar a solu\u00e7\u00f5es mais simples primeiro","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#8-get-a-fresh-view","title":"8. Get a fresh view","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#empacou","title":"Empacou?","text":"
\u00c9 por isso que voc\u00eas trabalham em grupo no primeiro bug.
"},{"location":"aulas/11-contribuicoes-externas/slides/#9-if-you-didnt-fix-it-it-aint-fixed","title":"9. If you didn't fix it, it ain't fixed","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#hora-de-programar","title":"Hora de programar","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#tentem-aplicar-estas-ideias-aos-seus-problemas","title":"Tentem aplicar estas ideias aos seus problemas","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#envie-4-prs-para-projetos-participantes-e-ganhe-uma-camiseta","title":"Envie 4 PRs para projetos participantes e ganhe uma camiseta","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#atividade-extra-hacktoberfest","title":"Atividade extra: hacktoberfest","text":"
Objetivo: Enviar 3 PRs para projetos externos no m\u00eas de outubro.
\"metadata\": {\"date\": \"2021-10-31\"}
"},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_3","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug_1","title":"Dicas de debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/#ate-agora","title":"At\u00e9 agora","text":"
Analisar uma base de c\u00f3digos desconhecida de m\u00e9dio/grande porte e modific\u00e1-la de modo a fazer melhorias e corrigir falhas em um software;
"},{"location":"aulas/12-projeto/slides/#_1","title":"Projeto da disciplina","text":"
Interagir com uma equipe remota de desenvolvedores para entregar c\u00f3digo que atenda aos padr\u00f5es de qualidade e estilo de c\u00f3digo de um projeto;
proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
exercitar autonomia e independ\u00eancia
"},{"location":"aulas/12-projeto/slides/#projeto-aberto_1","title":"Projeto Aberto","text":""},{"location":"aulas/12-projeto/slides/#organizado-em-dois-blocos-de-5-aulas","title":"Organizado em dois blocos de 5 aulas","text":"
11/05 - 25/05
27/05 - 10/06
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto","title":"Projeto Aberto - Pitches de projeto","text":"
Cada bloco se inicia com uma aula de Pitches de Projeto, que \u00e9 uma apresenta\u00e7\u00e3o de 5 minutos apresentando o projeto para o qual voc\u00ea contribuir\u00e1 na semana.
Trocar ideias sobre projetos interessantes
Ajudar alunos indecisos a escolherem um projeto
Se comprometer com uma escolha de projeto
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-de-projeto","title":"Projeto Aberto: Pitch de projeto","text":"
Objetivo: Apresentou um Pitch de projeto. Se o aluno s\u00f3 apresentar o projeto e n\u00e3o fizer contribui\u00e7\u00e3o vale 0 XP.
\"metadata\": {\"url\": \"url_do_projeto_proposto\", \"filename\": \"pdf da apresentacaoo\"}
Colocar pdf da apresenta\u00e7\u00e3o na pasta docs/pitches.
Objetivo: Outro aluno enviou contribui\u00e7\u00e3o para o projeto que voc\u00ea fez Pitch.
\"metadata\": {\"url\": \"url_da_contribuicao\"}
A ser enviado pelo aluno que prop\u00f4s o Pitch, que tamb\u00e9m precisa ter contribu\u00eddo.
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto_1","title":"Projeto Aberto - Pitches de projeto","text":"
Apresentar um pitch \u00e9 uma skill que vale XP
Ajudar colegas interessados no \"seu\" projeto vale XP
Aceitar sugest\u00f5es/ajudas vale XP
Tudo isso \u00e9 al\u00e9m da XP j\u00e1 obtida com as contribui\u00e7\u00f5es
"},{"location":"aulas/12-projeto/slides/#evitar-alunos-trabalhando-sozinhos","title":"Evitar alunos trabalhando sozinhos.","text":""},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aprendizado-de-tecnologias-novas","title":"Aprendizado de tecnologias novas","text":"
Linguagem de programa\u00e7\u00e3o
Biblioteca
Tipo de tecnologia: web, mobile, desktop
"},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_1","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aperfeicoamento-em-tecnologias-que-ja-domina","title":"Aperfei\u00e7oamento em tecnologias que j\u00e1 domina","text":"
Linguagem de programa\u00e7\u00e3o espec\u00edfica
Tipo de tecnologia: web, mobile, desktop
"},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_2","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#projetos-de-interesse-pessoal","title":"Projetos de interesse pessoal","text":"
Algum software que voc\u00ea usa
Melhorar alternativa livre para software propriet\u00e1rio
Moonshot: projetos ambiciosos com chance m\u00ednima de sucesso
"},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina_1","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/01-distributed-workflow/","title":"01 - Distributed Development Workflow","text":"
In this guide, we will work on the standard workflow for contributing to projects hosted on GitHub (which also applies to Git projects in general). Before starting, each student should locate the corresponding issue on the course's GitHub repository for creating their user.
Our workflow will be based on three main parts. In the first part, we will create a copy of the repository \"insper/dev-aberto\" where we will make all the necessary changes. In the second part, we will send our modifications to the original repository using a Pull Request, which is a request to accept the changes from a forked repository into the original repository. Finally, we will update our fork with modifications sent by colleagues.
Some key points to highlight in the above workflow:
Even if a user does not have access to the original repository, they can work on their own copy and only submit their modifications to the original repository when everything is ready.
It is necessary for a developer from the original project to \"take responsibility\" for the accepted external modifications.
The Pull requests tab allows developers to discuss proposed modifications and improve them. Every commit made after the creation of the PR is included and can be tested by anyone.
"},{"location":"lessons/01-distributed-workflow/#creating-your-own-copy","title":"Creating your own copy","text":"
We will start our workflow by creating a fork of the repository \"insper/dev-aberto\". All our modifications will be made in our fork, on a separate branch (it is recommended to use a different branch for each issue). This way, our modifications are completely isolated from the original code, and we can test them alongside the original code.
First, create the fork through the GitHub interface. Then, clone your fork and create a new branch called \"issue-X,\" where \"X\" is the number of your issue in the original project.
$ git checkout -b issue-X
To ensure that you are in the directory of your fork, execute the following command:
$ git remote -vv
The displayed addresses should be those of your fork, not the original project.
With the fork created and being on the \"issue-X\" branch (you can check using git branch and switch using git checkout issue-X), we will begin making modifications.
"},{"location":"lessons/01-distributed-workflow/#interacting-with-the-course-repository","title":"Interacting with the course repository","text":"
The creation of users and addition of skills is done using the command dev-aberto.py.
Tip
To use it, you need to install the packages listed in the requirements.txt file.
Running it in the terminal should list the available commands.
$ python3 dev-aberto.py
To check if everything is working correctly, list all registered users. There should be only one registered user (igorsm1).
"},{"location":"lessons/01-distributed-workflow/#creating-a-user","title":"Creating a user","text":"
User creation is done with the command:
$ python3 dev-aberto.py new-user
This will create three files in the students folder:
your-login: basic user information in JSON format.
your-login-achievements: encrypted file containing the deliveries of each student in JSON format.
your-login.key: cryptographic key for the above file.
Verify that your user was created correctly by listing the existing users again. Your user should have an asterisk (*) next to the name, indicating that the login.key file is present in the system.
Danger
Do not include the *.key file in your PR. It should be sent by email to the professor. Do this now before you forget!
Also, verify that you can use the command dev-aberto.py compute-grade your-login. If everything is okay, proceed to the next item.
"},{"location":"lessons/01-distributed-workflow/#adding-a-skill","title":"Adding a skill","text":"
With the user created, we can add the skill \"First Steps.\" You may have noticed that the professor's key is available (file students/igorsm1.key). This was done so that you have at least one example of how each skill should be added. See below for an example of how the skill should be included:
$ python3 dev-aberto.py edit-achievements igorsm1
This will open a file for editing in Vi. The format is a list of objects containing two fields: \"skill_id\" and \"metadata\". See the example below for the first skill
If you want to use another text editor, you can set the environment variable EDITOR just before calling dev-aberto.py.
Now add the skill to your user following the same pattern seen above. Verify that your skill was correctly added using the compute-grade command.
Tip
If your repository is OK, help your classmates.
"},{"location":"lessons/01-distributed-workflow/#sending-modifications-to-the-original-project","title":"Sending modifications to the original project","text":"
Now let's create a commit and send it as a Pull Request to the course's repository. Add the created files (excluding the *.key file!) and make a commit with the following message (replace the X with the number of your issue in the repository):
Add user your-login.\n
Execute git push and continue.
With your modifications already in your fork, it's time to send them to the original repository. This is done on the GitHub interface. First, access your fork in the browser, locate your issue-X branch, and click the \"Pull request\" button.
The title of your Pull Request should be Create user login. Your PR should contain only one commit and should have the branch issue-X created above as the source. In the description of your PR, add the text:
Closes #X\n
where X is the number of your user's issue. This automatically closes the issue when (and if) this PR is accepted.
Warning
PRs made from main or with more than one commit will not be accepted.
Use the checklist below to help verify if your work is correct:
Created a new user with new-user.
Added the \"First Steps\" skill.
Checked that the new user has the new skill using compute-grade.
Created a PR with only one commit and the correct files.
Sent the .key file by email to the professor.
Did not include the .key file in the PR.
Once your PR is accepted, you can remove the issue-X branch.
"},{"location":"lessons/01-distributed-workflow/#updating-your-fork","title":"Updating your fork","text":"
After having your PR accepted, you may have noticed that your commit appears in the original project's main branch but does not appear in your fork. This is because a fork is not automatically updated when its corresponding original repository receives new commits.
To make this happen, you need to perform a manual synchronization. For now, we will use the GitHub interface to do this.
Visit your fork again. Now, there should be an option to sync your fork with the original repository. Use it to make your main branch receive the new commits.
Warning
Sync your repository whenever you work on a new PR. This will prevent many conflicts when merging your modifications into the original repository.
In the industry, we usually work on existing projects:
Fixing issues.
Making improvements.
Projects used by multiple users.
"},{"location":"lessons/01-distributed-workflow/slides/#why-did-i-create-the-course","title":"Why did I create the course?","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_1","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_2","title":"My motivation (Igor)","text":"
"},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_3","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#its-not-enough-anymore-to-create-software-for-learning-purposes","title":"It's not enough (anymore) to create software for learning purposes","text":""},{"location":"lessons/01-distributed-workflow/slides/#i-would-like-to-have-some-impact","title":"I would like to have (some) impact","text":"
To create/contribute to software other people use
To write texts/tutorials that are read by someone
To be a part of a community that would miss me if I stop participating
"},{"location":"lessons/01-distributed-workflow/slides/#why-are-you-here","title":"Why are you here?","text":"
https://forms.gle/uDvnDoyxBsVoHy6S8
"},{"location":"lessons/01-distributed-workflow/slides/#achievements-in-this-course-so-far","title":"Achievements in this Course So Far","text":""},{"location":"lessons/01-distributed-workflow/slides/#vitoria-20182","title":"Vit\u00f3ria - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#spyder","title":"Spyder","text":"
Tutorial: Guided preparatory activities in the classroom
Code: Code contributions to external projects
Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations
Impact: Significant results achieved by the student's participation in open projects
"},{"location":"lessons/01-distributed-workflow/slides/#full-list-of-skills","title":"Full list of skills","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-syllabus","title":"Course Introduction (syllabus)","text":"
Final grade is a combination of XP and acquired skills.
Bi-weekly reports sent by email.
Complete conditions on the rules and skills page.
"},{"location":"lessons/01-distributed-workflow/slides/#discussion-development-workflow","title":"Discussion: Development Workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#how-does-git-work","title":"How does Git work?","text":"
"},{"location":"lessons/01-distributed-workflow/slides/#activity-first-steps","title":"Activity: First Steps","text":"
Objective: Submit your first Pull Request to the course's repository.
"},{"location":"lessons/01-distributed-workflow/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_5","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow_1","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/","title":"02 - Software and Communities","text":"
less02in
The activity for this class involves creating a presentation explaining how the communities around the following software projects are organized:
Visual Studio Code
NeoVIM
Django
Blender
Kdenlive
NewPipe
Each group of 3 students should choose one of the above projects and research the following points.
What is the purpose of the project?
Where is the source code located? Which technologies are used?
What is the license? Are there public guidelines or any kind of bureaucracy for contributions?
Is there developer documentation?
Does it seem easy to compile/run?
Does it seem easy to modify?
How is the project governed?
Who are the key figures (developers, evangelists, etc.) in the project? If the project is large, mention two different areas in this item.
Is there a public roadmap?
Are external contributions accepted? How can one contribute?
Who makes the decisions?
Where can project members be found? Where can one seek help?
Does the project raise funds?
Are there companies sponsoring developers?
How much has been raised? And spent? For what purposes?
Who decides how the funds are spent?
Each group must create a 10 minutes presentation for the next meeting that addresses these questions.
"},{"location":"lessons/02-software-and-communities/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities","title":"Software and Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request","title":"Github Model: fork + pull request","text":"
"},{"location":"lessons/02-software-and-communities/slides/#workflow-other-models","title":"Workflow: other models","text":"
Send patch via email list (e.g., Linux)
Code review tools (e.g., KDE - Phabricator)
Patch is attached to the Bug Tracker (e.g., Haiku, KDE)
Does not receive external contributions
"},{"location":"lessons/02-software-and-communities/slides/#review-of-last-classs-prs","title":"Review of last class's PRs","text":""},{"location":"lessons/02-software-and-communities/slides/#common-errors","title":"Common Errors","text":""},{"location":"lessons/02-software-and-communities/slides/#error-0-login-achievements-file-has-errors","title":"Error 0: login-achievements file has errors","text":"
How to fix: Create a new commit with the correct date.
"},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr","title":"Error 1: Extra files in the PR","text":"
Error: Modifying files not related to your proposed changes.
"},{"location":"lessons/02-software-and-communities/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Ideal:
A Pull Request should contain only the files related to the proposed modification.
Each proposed modification is in a separate Pull Request.
"},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr_1","title":"Error 1: Extra files in the PR","text":"
How to fix: git revert creates a commit that undoes previous changes.
Extra options:
--no-commit: Only adds the modifications, but does not make the commit. Allows undoing part of a commit.
How to fix: git commit --amend allows modifying the last commit made.
"},{"location":"lessons/02-software-and-communities/slides/#error-3-pull-request-with-a-poor-description","title":"Error 3: Pull Request with a poor description","text":"
How to fix: Simply edit it in the Github interface.
"},{"location":"lessons/02-software-and-communities/slides/#fix-at-home-and-request-review-via-github","title":"Fix at home and request review via Github","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-if-you-dont-push-nothing-is-broken","title":"Reminder: If you don't push, nothing is broken","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-ii-git-log-shows-your-current-history","title":"Reminder II: git log shows your current history","text":""},{"location":"lessons/02-software-and-communities/slides/#tip-if-you-modified-already-published-commits-use-git-push-f-to-overwrite","title":"Tip: If you modified already published commits, use git push -f to overwrite","text":""},{"location":"lessons/02-software-and-communities/slides/#not-all-students-enrolled-in-the-course-did-the-activity-from-the-last-class","title":"Not all students enrolled in the course did the activity from the last class!","text":"
python dev-aberto.py list-users\n
"},{"location":"lessons/02-software-and-communities/slides/#software-communities","title":"Software Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#discussion","title":"Discussion","text":""},{"location":"lessons/02-software-and-communities/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Question 1: What are the software you use the most in your daily life?
"},{"location":"lessons/02-software-and-communities/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Question 2: Who is the main developer of the project?
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel","title":"Example: Linux Kernel","text":"
Foundation supports the development of the Linux Kernel and the creation of an open-source software ecosystem around it.
Support:
Financial
Intellectual property
Infrastructure
Services and training
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel_1","title":"Example: Linux Kernel","text":"
Companies that sponsor development:
Individual (11.95%)
Intel (10.01%)
Red Hat (8.90%)
Unknown (4.09%)
IBM (3.79%)
SUSE (3.49%)
Linaro (2.96%)
Consultants (2.96%)
Google (2.79%)
Samsung (2.28%)
Source: \"2020 Linux Kernel Development Report\"
"},{"location":"lessons/02-software-and-communities/slides/#example-ubuntu","title":"Example: Ubuntu","text":""},{"location":"lessons/02-software-and-communities/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Private company controls the development of Ubuntu. Obtains resources via:
Donations
Development and consulting services
Training
"},{"location":"lessons/02-software-and-communities/slides/#example-gitlab","title":"Example: Gitlab","text":""},{"location":"lessons/02-software-and-communities/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Company funded so far by VC (Venture Capital) in search of profit.
Option of free plans with open-source software
Option of corporate plans with more features and support
On-premises installations
"},{"location":"lessons/02-software-and-communities/slides/#example-elementary","title":"Example: Elementary","text":""},{"location":"lessons/02-software-and-communities/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Linux distribution led by a \"tiny\" company focused on the user experience. Resources are obtained through:
Individual and corporate sponsorships
Pay-what-you-want model (app store and operating system)
Hardware with the pre-installed system
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-mint","title":"Example: Linux Mint","text":""},{"location":"lessons/02-software-and-communities/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Linux distribution aimed at everything working right after installation. Considered good for beginners.
"},{"location":"lessons/02-software-and-communities/slides/#reasons-for-funding-company","title":"Reasons for funding (company)","text":""},{"location":"lessons/02-software-and-communities/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
\"Acquire\" experts in a technology
Sell support or consulting services
Marketing
Software license \"obliges\"
"},{"location":"lessons/02-software-and-communities/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Not everything funded ends up in a \"usable\" format for others (e.g., Android/Linux, TiVO)
\"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]
"},{"location":"lessons/02-software-and-communities/slides/#reasons-for-contributing-individual","title":"Reasons for contributing (individual)","text":"
Professional
Reputation / CV
Business needs
Personal
Altruism / Ideology
Sense of personal fulfillment
Exercise creativity
Solve a problem of personal interest
"},{"location":"lessons/02-software-and-communities/slides/#activity-exploring-the-environment-of-a-project","title":"Activity: Exploring the environment of a project","text":"
Research how the communities of some projects are organized
Produce a presentation summarizing your findings
"},{"location":"lessons/02-software-and-communities/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities_1","title":"Software and Communities","text":""},{"location":"lessons/03-software-documentation/","title":"03 - Explorando um projeto desconhecido","text":"
Este roteiro tem algumas perguntas com o objetivo de guiar a explora\u00e7\u00e3o do c\u00f3digo e documentar suas descobertas. Voc\u00ea tamb\u00e9m pode aplic\u00e1-lo para qualquer outro projeto mal documentado em que precisar trabalhar no futuro.
Baixe o c\u00f3digo do projeto a ser analisado aqui e siga as perguntas. Elas s\u00e3o um guia de como explorar um projeto que voc\u00eas n\u00e3o conhecem.
"},{"location":"lessons/03-software-documentation/#dependencias-e-servicos-usados","title":"Depend\u00eancias e servi\u00e7os usados","text":"
Question
Quais tecnologias s\u00e3o usadas no c\u00f3digo? Al\u00e9m da linguagem de programa\u00e7\u00e3o, liste tamb\u00e9m as bibliotecas/m\u00f3dulos externos usados.
Question
A aplica\u00e7\u00e3o utiliza um banco de dados. Qual gerenciador? Onde a aplica\u00e7\u00e3o busca a base de dados? Quais s\u00e3o as tabelas usadas? Como elas s\u00e3o criadas?
A aplica\u00e7\u00e3o usa autentica\u00e7\u00e3o? Se sim, qual tipo? Como usu\u00e1rios s\u00e3o criados? Existe algum usu\u00e1rio administrador? Como \u00e9 feita a seguran\u00e7a das senhas? Qual a senha padr\u00e3o?
Question
Quais comandos voc\u00ea usou para rodar a aplica\u00e7\u00e3o? Escreva todos desde a cria\u00e7\u00e3o do banco de dados e dos usu\u00e1rios at\u00e9 o funcionamento completo do projeto.
Question
Agora que voc\u00ea consegue rodar a aplica\u00e7\u00e3o, explore-a um pouco e descreva em poucas frases para qu\u00ea ela serve.
"},{"location":"lessons/03-software-documentation/#documentacao-do-projeto","title":"Documenta\u00e7\u00e3o do projeto","text":"
Question
Se voc\u00ea fosse criar um guia de usu\u00e1rio (aluno) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?
Question
Se voc\u00ea fosse criar um guia de usu\u00e1rio (professor) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?
Question
O qu\u00ea voc\u00ea descreveria em um guia de desenvolvedor para esta aplica\u00e7\u00e3o?
"},{"location":"lessons/03-software-documentation/slides/","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#_1","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#ordem-das-apresentacoes","title":"Ordem das apresenta\u00e7\u00f5es","text":"
VSCode
Blender
KDENlive
NeoVim
"},{"location":"lessons/03-software-documentation/slides/#10-minutos-cada-uma","title":"10 minutos cada uma","text":""},{"location":"lessons/03-software-documentation/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
\"metadata\": {\n \"filename\": \"nome do arquivo\",\n \"group\": [\"login1\", \"login2\"]\n}\n
No group incluir os outros membros do grupo somente
Um membro da equipe deve fazer um PR para o projeto incluindo o arquivo da apresenta\u00e7\u00e3o. O mesmo deve ser colocado na pasta apresentacoes/2023
"},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_2","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_2","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_1","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de usu\u00e1rio:
"},{"location":"lessons/03-software-documentation/slides/#_2","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_3","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_4","title":"Documenta\u00e7\u00e3o de Software","text":"
Documenta\u00e7\u00e3o de desenvolvimento:
"},{"location":"lessons/03-software-documentation/slides/#_5","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_6","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_7","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_2","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de usu\u00e1rio:
Instala\u00e7\u00e3o
Funcionalidades
Onde obter ajuda
"},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_3","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de desenvolvimento:
Como compilar (depend\u00eancias, ferramentas usadas, etc)
Como testar (depend\u00eancias, ferramentas usadas, etc)
Estilo de c\u00f3digo e outras orienta\u00e7\u00f5es relacionadas
Organiza\u00e7\u00e3o do c\u00f3digo e arquitetura da aplica\u00e7\u00e3o
"},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_4","title":"Documenta\u00e7\u00e3o de software","text":"
\u00c0s vezes as coisas se confundem! O que voc\u00eas colocariam na documenta\u00e7\u00e3o de usu\u00e1rio do Python?
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao","title":"Sistemas de documenta\u00e7\u00e3o","text":"
Sphinx
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao_1","title":"Sistemas de documenta\u00e7\u00e3o","text":"
Mkdocs
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao-hospedagem","title":"Sistemas de documenta\u00e7\u00e3o (hospedagem)","text":"
Voc\u00eas receber\u00e3o um zip com o c\u00f3digo de um software e zero instru\u00e7\u00f5es. Voc\u00eas dever\u00e3o:
Aprender como rodar o software
Documentar os passos que voc\u00eas seguiram para faz\u00ea-lo
Fazer uma an\u00e1lise cr\u00edtica do projeto com rela\u00e7\u00e3o a
Arquitetura
Qualidade do c\u00f3digo
Seguran\u00e7a da solu\u00e7\u00e3o
"},{"location":"lessons/03-software-documentation/slides/#objetivos-desta-atividade","title":"Objetivos desta atividade","text":"
Entender na pr\u00e1tica a necessidade de documenta\u00e7\u00e3o;
Identificar quais s\u00e3o as depend\u00eancias de um software. Isto inclui bibliotecas/frameworks usados e servi\u00e7os aos quais esse software se conecta.
Rodar sua pr\u00f3pria vers\u00e3o de um software de terceiros
"},{"location":"lessons/03-software-documentation/slides/#nao-sao-objetivos-desta-atividade","title":"N\u00e3o s\u00e3o objetivos desta atividade","text":"
Mostrar nenhum tipo de boa pr\u00e1tica de programa\u00e7\u00e3o
Modificar o software analisado
Criticar o desenvolvedor que trabalhou antes no projeto
"},{"location":"lessons/03-software-documentation/slides/#atividade-pratica-projeto-nao-documentado","title":"Atividade pr\u00e1tica: Projeto n\u00e3o documentado","text":"
Objetivo: entender como rodar um c\u00f3digo sem instru\u00e7\u00f5es.
Valida\u00e7\u00e3o: apresenta\u00e7\u00e3o do sistema funcionando.
Grupos de at\u00e9 3 pessoas
"},{"location":"lessons/03-software-documentation/slides/#tempo-restante-de-hoje-hora-inicial-da-proxima-aula-usem-handout-como-guia","title":"Tempo restante de hoje + hora inicial da pr\u00f3xima aula. Usem handout como guia","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_3","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_5","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_3","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/04-professional-project/","title":"04 - Professional Project","text":"
There is a moment in a project's history where it is already useful for the author and other people are starting to get interested in it. Software documentation, clear install instructions and being free of errors are important to these people but are not necessarily essential to the authors, who are used to fix problem when they appear and are familiar with every aspect of the code. We will transform a project like this into a project that is ready to be used by other people and that can receive contributions from other developers.
Form a pair and select a project that one of you worked on during your degree. We will transform it into a complete project that other people can use and contribute to.
Create README with project description, screenshot and links to documentation
Organize repo with source code in a src folder and documentation in docs
Execute a linter in your project and export its output to one or more issues with names related to code quality improvements
"},{"location":"lessons/04-professional-project/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:
https://github.com/Insper/servidor-de-desafios
"},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"lessons/04-professional-project/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"lessons/04-professional-project/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"
Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas
Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
Algum processo de qualidade de software
testes automatizados
formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
linters
PEP8
"},{"location":"lessons/04-professional-project/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"
Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.
Focado em detalhes
Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
Tipicamente obtida direto do c\u00f3digo
N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
"},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"
Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.
"},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
Cada projeto tem o seu
Algumas linguagens tem um estilo padr\u00e3o
Python - PEP8
Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
"},{"location":"lessons/04-professional-project/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"
Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.
"},{"location":"lessons/04-professional-project/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"lessons/04-professional-project/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"
Objetivo: Transformar um c\u00f3digo perdido em um projeto
"},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/05-python-packaging/","title":"05 - Distribui\u00e7\u00e3o de Software","text":"
Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.
"},{"location":"lessons/05-python-packaging/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"
Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.
A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:
from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n version='0.1',\n packages=['dev_aberto']\n )\n
Exercise
Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando
pip install .
Exercise
Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.
Exercise
Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.
Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:
Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.
Exercise
Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.
Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.
...\n scripts=['scripts/hello.py'],\n ...\n
N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:
#!/usr/bin/env python3\n
No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamadas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.
"},{"location":"lessons/05-python-packaging/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"
Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:
sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.
A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:
$ python setup.py sdist
A instala\u00e7\u00e3o deste pacote pode ser feita via pip.
"},{"location":"lessons/05-python-packaging/#envio-para-o-pypi","title":"Envio para o PyPI","text":"
Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.
Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.
Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:
"},{"location":"lessons/05-python-packaging/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"
Vamos agora trabalhar (em duplas) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1
instalar todas as depend\u00eancias do sistema
criar a base de dados, se necess\u00e1rio
adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
executar o servidor e serv\u00ed-lo na porta 8080 do host
manter os dados adicionados ao reiniciar o container
Algumas refer\u00eancias que podem ser \u00fateis:
https://docker-curriculum.com/
https://docs.docker.com/get-started/
"},{"location":"lessons/06-localization-translation/","title":"06 - Localiza\u00e7\u00e3o e Tradu\u00e7\u00e3o","text":"
Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.
Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.
$ pip install Babel
Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.
$ LANGUAGE=en_US.utf8 ls --help
J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.
$ LANGUAGE=pt_BR.utf8 ls --help
De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.
"},{"location":"lessons/06-localization-translation/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"
Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.
from datetime import date\n\nif __name__ == '__main__':\n today = date.today()\n print(today)\n\n number = 240000000000.32212\n print(number)\n\n name = input('Input your name: ')\n print('Hello {}'.format(name))\n
Uma sa\u00edda poss\u00edvel seria
2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n
Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).
Exercise
O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.
Exercise
Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s
A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.
A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:
Marca\u00e7\u00e3o das strings a serem traduzidas
Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo
No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.
import gettext\ngettext.bindtextdomain('cli', 'locale')\ngettext.textdomain('cli')\n_ = gettext.gettext\n\n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n
Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.
print(_(\"Hello!\"))\n
Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.
$ pybabel extract . -o cli-model.pot
Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.
Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).
msgid \"Input your name: \"\nmsgstr \"\"\n
Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).
Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.
$ pybabel compile -D cli -l pt_BR -d locale
Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.
Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?
Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.
Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.
"},{"location":"lessons/06-localization-translation/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/06-localization-translation/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"lessons/06-localization-translation/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.
Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es
de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.
"},{"location":"lessons/06-localization-translation/slides/#i18n-e-l10n","title":"I18N e L10N","text":"
Precisam ser
independentes:
idioma ingl\u00eas e datas no formato brasileiro
configur\u00e1veis
posso precisar trocar entre l\u00ednguas e entre formatos
"},{"location":"lessons/06-localization-translation/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"lessons/06-localization-translation/slides/#locales","title":"Locales","text":"
Um locale \u00e9 uma tripla
"},{"location":"lessons/06-localization-translation/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
<lingua>_<pais>.<codificacao>\n
"},{"location":"lessons/06-localization-translation/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.
"},{"location":"lessons/06-localization-translation/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"lessons/06-localization-translation/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"lessons/06-localization-translation/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
Baixar uma biblioteca de Localiza\u00e7\u00e3o
Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
"},{"location":"lessons/06-localization-translation/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
# Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
"},{"location":"lessons/06-localization-translation/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"
Envolve 4 etapas:
Marcar todas strings que devem ser traduzidas
Extra\u00ed-las do c\u00f3digo fonte
Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
Empacotar as tradu\u00e7\u00f5es junto com o programa
"},{"location":"lessons/06-localization-translation/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
\u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"
Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.
LANG para l\u00edngua
LC_TIME para data
LC_NUMERIC para n\u00fameros
Um locale sempre \u00e9 expresso no formato
<lingua>_<pais>.<codificacao>\n
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"
O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"
Existem diversas maneiras de determinar um bom locale em sistemas Web:
Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
Geolocaliza\u00e7\u00e3o via IP
Prefer\u00eancia armazenada em banco de dados
"},{"location":"lessons/06-localization-translation/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.
"},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/07-code-quality/","title":"07 - Code quality","text":"
In Lesson 04 - Professional Project we created a repo and website for an old project developed during the course. Now we are going to improve its quality by fixing the issues each group found using a linter tool.
Warning
We won't work on our own projects this time! Select a project from the discussion page and comment on the issue you'd like to do. Every project must have at least one issue with external participation.
We will now add (some) automated testing to one of the projects from the discussion page. Again, our objective in this activity is to get used to build and modify different projects.
Warning
You'll need to select a different project from the last Lesson 07 - Code Quality
Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.
Testa as fun\u00e7\u00f5es de maneira isolada
Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
"},{"location":"lessons/08-automated-testing/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"lessons/08-automated-testing/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"
Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.
Testa intera\u00e7\u00e3o entre em objetos
Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
"},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"
Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela
Menos espec\u00edfico poss\u00edvel
Mais fiel ao uso real de um usu\u00e1rio
"},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"lessons/08-automated-testing/slides/#selenium","title":"Selenium","text":"
Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.
"},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#_1","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"lessons/08-automated-testing/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"
Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.
Creating a release is the final step to distribute software to users. It involves \"freezing\" the repository in a specific commit and attaching binaries and other ready to use assets. Users should be able to grab one of the releases and use it direclty without having to setup a dev environment.
The skill New Release involves the creation of a release for your own project used in the last lessons.
PyInstaller for creating installers/binaries using Python
The following checks will be used to verify if this skill is completed:
there is a release in the repo's Releases tab containing the description of the release and the source code
the release includes either an installer or a direccly executable file in one of the following formats:
Linux: .deb, .rpm for installers,AppImage for executables
Windows: .msi installer or single .exe (plus asses, if necessary)
Other: if the project is an extension, plugin or any other type of stoftware, the release must include a redistributable package in the official format
This page illustrates how to create toast (or snackbar) notifications. This is intended for plugin development and probably shouldn't be called directly from the markdown content.
In your plugin, whenever you want to show a toast notification, just call notification.toast():
notification.toast(\"Go crazy!\", { bgColor: \"#FFFF00\", color: \"#ff4498\" });\nnotification.toast('bgColor \"danger\"', { bgColor: \"danger\" });\nnotification.toast(\"Notification with click event (reload page)\", {\nonClick: () => window.location.reload(),\n});\nnotification.toast(\"Toasts have an optional timeout argument\", {\ntimeout: 3000,\n});\n
The following values are accepted for bgColor:
primary (your theme's primary color)
note
abstract
summary
tldr
info
todo
tip
hint
important
success
check
done
question
help
faq
warning
caution
attention
failure
fail
missing
danger
error
bug
example
quote
cite
a color in hex notation (e.g. \"#FF00FF\")
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Open Development 2023/2","text":"
Welcome to the Open Development page for 2023/2. On this site, you will find all the course lessons and syllabus. The learning objectives covered are:
The student is capable of understanding a software project and fixing a bug or implementing an improvement.
The student is capable of making modifications that meet the technical and non-technical requirements of a software project.
The student is capable of interacting with a (remote) development team.
This course is gamified and entirely done using a git repository. Each student creates a user following the instructions in Lesson 01 and submits a Pull Request to be included in the repository. Each completed activity is delivered via a PR in the course repository and serves as evidence for the learning objectives mentioned above.
The course revolves around four types of activities:
Tutorial: (Guided) Preparatory activities in the classroom.
Code: Code contributions to external projects.
Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations.
Impact: Significant results achieved through the student's participation in open projects.
More information about all possible activities can be found on the Assessment page.
Current and past instructors
Igor Montagner
Fabr\u00edcio Barth
"},{"location":"agenda_apresentacoes/","title":"Apresenta\u00e7\u00f5es sobre cultura livre","text":"
Este documento descreve a rubrica para avalia\u00e7\u00e3o do trabalho e a agenda das apresenta\u00e7\u00f5es.
"},{"location":"agenda_apresentacoes/#rubrica","title":"Rubrica","text":"Conceito Descri\u00e7\u00e3o A Apresenta\u00e7\u00e3o realizada dentro do tempo estipulado. O tema foi organizado de forma excelente, com boa sequ\u00eancia l\u00f3gica das ideias. O trabalho foi apresentado de forma clara e concisa, usando so slides de forma coesa com a fala. Tem boa postura e seguran\u00e7a, estabelece contato visual com os participantes durante a apresenta\u00e7\u00e3o. Incorporou elementos visuais de qualidade no material: figuras, tabelas e gr\u00e1ficos s\u00e3o claros e cont\u00eam informa\u00e7\u00f5es suficientes. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). B O tempo de apresenta\u00e7\u00e3o foi de mais ou menos 5 min do estabelecido. O tema foi parcialmente bem organizado, com sequ\u00eancia de apresenta\u00e7\u00e3o razo\u00e1vel. Exp\u00f5e o trabalho corretamente, mas n\u00e3o usa os slides de forma coesa com a fala. Postura e seguran\u00e7a razo\u00e1veis. Os elementos visuais s\u00e3o de baixa qualidade: figuras, tabelas e gr\u00e1ficos n\u00e3o s\u00e3o totalmente claros e n\u00e3o cont\u00eam informa\u00e7\u00f5es suficientes para compreens\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros). C Tempo de apresenta\u00e7\u00e3o foi de mais ou menos 10 min do estabelecido. A organiza\u00e7\u00e3o da apresenta\u00e7\u00e3o \u00e9 confusa, o que prejudica o acompanhamento e compreens\u00e3o das ideias. Comunica\u00e7\u00e3o deficiente, com dificuldade de expor ideias. N\u00e3o usa adequadamente os slides. N\u00e3o tem boa postura e seguran\u00e7a durante a apresenta\u00e7\u00e3o. Os recursos visuas prejudicam a apresenta\u00e7\u00e3o. Fez uso de no m\u00ednimo uma t\u00e9cnica para intera\u00e7\u00e3o com a audi\u00eancia (por exemplo, debate, painel com vota\u00e7\u00f5es, entre outros)."},{"location":"agenda_apresentacoes/#agenda","title":"Agenda","text":"Data e hor\u00e1rio Tema 17/11 (9:45-10:45) GitHub Copilot \u00e9 \u00e9tico? [Eiki Yamashiro e Marcelo Miguel] 17/11 (10:45-11:45) A rela\u00e7\u00e3o entre Software as a Service (SaaS) e projetos de C\u00f3digo Aberto [Caroline Chaim, Felipe Lemos, Jo\u00e3o Farias Araujo] 22/11 (9:45-10:45) Telemetria \u00e9 \"\u00e9tico\"? [Guilherme Lunetta, Rafael Monteiro e Jo\u00e3o Magalh\u00e3es] 22/11 (10:45-11:45) Regulamenta\u00e7\u00f5es futuras na Europa sobre responsabilidade legal dos criadores de IAs [Luiza Silvera, Guilherme Batista e Gabriel Zanetti] 24/11 N\u00e3o teremos aula. Joga do Brasil na Copa do Mundo 29/11 (9:45-10:45) Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones. [Keiya Nishio e Bruno Freitas] 29/11 (10:45-11:45) Por que Open Source \u00e9 cr\u00edtico para criptomoedas? [Paulo Kim, Raphael Lahiry e Rodrigo Coelho] 01/12 (9:45-10:45) The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022? [Jo\u00e3o Pedro Meirelles, Gustavo Molina e Rafael Almada] 01/12 (10:45-11:45) Mantainer burnout [Cesar Ades e Jonathan Sutton]"},{"location":"assessment/","title":"Assessment","text":"
As you can see in Lesson 01, this course allows for a great deal of freedom, and it is organized through gamification. Each participant creates a profile in the repository and earns skills (and XP) by completing the available activities. All submissions are made via PR to the course repository.
The final grade is a combination of the total amount of XP received for completing tasks, the amount of XP obtained from group members, and some barrier criteria. The table below summarizes these conditions:
Grade Score Extra Criteria I ---- Did not complete any tutorial activities D ---- Completed all lesson activities but did not reach a C grade C 45XP
1 x Code Contribution +
Accepted Translation! or Documentation Contribution
B 90XP
Accepted Code Contribution
A 150XP A+ 200XP
Throughout the semester, the scores in the table above may be revised downward, but never upward.
Each skill translates into evidence for one of the learning objectives of the course. The collection of all the skills completed during the semester indicates the proficiency of the students in each of the objectives.
In this initial part, preparatory activities are carried out to support the development of skills in Code and Community skills.
id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"assessment/#code","title":"Code","text":"
Any activity that results in a code contribution to open-source software projects is accepted in the course.
id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"assessment/#community","title":"Community","text":"
A software project is also defined by the interactions of all the people around it: users, developers, and translators. This category includes non-technical contributions that benefit these individuals.
id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"assessment/#impact","title":"Impact","text":"
This category encompasses skills that represent the impact generated by the activities performed within the context of the course, both on a software project and the community around it. This includes:
Presentations given by students
A large number of accepted contributions to a single project
Mentions of work done by the student on the project's social media
Releases containing commits made within the course's context
id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"impact-2019/","title":"Edi\u00e7\u00e3o 2019/2","text":"
In the 2019/2 edition, students worked on 19 different projects, contributing with 46 code modifications, of which 14 were incorporated into the original projects. In addition to these projects, students also worked on the Servidor de Desafios, a software developed by Insper professors to be used in the Software Design course. A total of 12 accepted modifications have already been used during the semester.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 10 events.
"},{"location":"impact-2019/#alunos","title":"Alunos","text":"Alessandra Bl\u00fccher Alexandre Edington Antonio Jo\u00e3o Andraues Junior Elisa Mochetti Malzoni Gabriel Lopes Monteiro Gabriel Do Vale Rios Giulia Braga Passarelli Guilherme Leite Hugo Ebert Carl Igor Montagner Leonardo Pereira Medeiros Lucas Scarlato Astur Pedro Cunial Campos Samuel Vinicius Granato De Barros Vinicius Gomes De Lima Vitor Liu"},{"location":"impact-2019/#contribuicoes-de-codigo","title":"Contribui\u00e7\u00f5es de c\u00f3digo","text":"Servidor de desafios
In the 2020/1 edition, students worked on 15 different projects, contributing with 27 code modifications, of which 17 were incorporated into the original projects. In addition to these projects, students also worked on the Challenge Server, a software developed by Insper professors to be used in the Software Design course. A total of 7 accepted modifications have already been used during the semester.
"},{"location":"impact-2020/#alunos","title":"Alunos","text":"Isabella Rocha De Oliveira Bruna Mayumi Kimura Bruno Arthur Cesconetto Eli Jose Abi Ghosn Eric Fernando Otofuji Abrantes Francisco Ciol Rodrigues Aveiro Gabriel Fonseca Moreira Gabriel Valente Francato Hugo Silva Pereira Mendes Igor Dos Santos Montagner Lucca Delchiaro Costabile Martim Ferreira Jose Pedro De La Pe\u00f1a Ferreira Bueno Fonseca Pedro Oliveira De Azambuja Raphael Costa Sabrina Sampaio Simao Victor Laperuta De Moura"},{"location":"impact-2020/#contribuicoes","title":"Contribui\u00e7\u00f5es Melhorias de c\u00f3digo enviadas","text":"Servidor de desafios
https://github.com/Insper/servidor-de-desafios/pull/75 (Pedro De La Pe\u00f1a Ferreira Bueno Fonseca)
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2021/2 edition, students worked on 30 different projects, contributing with 56 code modifications, of which 37 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
Melhorias de c\u00f3digo enviadas Uutils/Coreutils Pull Requests
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2022/2 edition, students worked on 15 different projects, contributing with 20 code modifications, of which 4 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
Alunos participantes Bruno Freitas Do Nascimento Rodrigues Caroline Chaim De Lima Carneiro Cesar Ezra Ades Eiki Luis Yamashiro Fabricio Barth Felipe Lemos Gabriel Zanetti Guilherme Carneiro Lunetta Guilherme Teixeira Batista Gustavo Molina Freneda Benites Joao Pedro Farias De Araujo Joao Pedro Montefeltro Junqueira Meirelles Jo\u00e3o Vitor Menezes De Magalh\u00e3es Jonathan Sutton Keiya Nishio Luiza Rodrigues Silveira Marcelo Cesario Miguel Paulo Wook Kim Rafael Alves De Mello Almada Rafael Evangelista Monteiro Raphael Lahiry Rodrigo Guimar\u00e3es Coelho Melhorias de c\u00f3digo enviadas Geekquad/Algobook Pull Requests
One of the main objectives of Open Development is to actively participate in existing software projects. In the 2023/2 edition, students worked on 0 different projects, contributing with 0 code modifications, of which 0 were incorporated into the original projects. In addition to these projects, students also worked on software developed by Insper professors to be used in various courses. A total of 0 modifications were accepted in these projects.
We also encourage students to participate in external technology events and experience the world outside Insper. In total, students participated in 0 events.
The following students are enrolled in this semester.
Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"syllabus/","title":"Syllabus","text":""},{"location":"syllabus/#assessment","title":"Assessment","text":"
This course has a gamified assessment system. At any time, you can check your grade by running:
Biweekly reports will be sent with a summary of what has been delivered and which criteria have been met, as well as the student's current grade. There is no possibility of losing points. Although the report is for informational purposes only, if the student is not failing due to absences, they should receive the grade indicated in the biweekly reports.
Attention
The complete list of rules is available on the Course Rules page and is the official reference for grade calculation. If there is a discrepancy between the report and the rules page, consider the report to be buggy.
The following activities are planned. The program is subject to changes and adaptations as the course progresses.
Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/alunos/","title":"Alunos","text":"Abel Cavalcante De Andrade Antonio Fonseca Caio Emmanuel Soares Rocha Cicero Tiago Carneiro Valentim Henrique Sim\u00f5es Alberti Igor Montagner Joao Pedro Gianfaldoni De Andrade Jor\u00e1s Cust\u00f3dio Campos De Oliveira Nat\u00e1lia Queiroz Menezes Carreras Rafael Libertini"},{"location":"_snippets/plano-de-aulas/","title":"Plano de aulas","text":"Date Question/Problem/Challenge Content 14/08 Introduction to the course and its challenges Workflow with distributed version control: forks, patches, pull requests, and local repositories. Technical and non-technical aspects surrounding software: infrastructure, support, marketing, funding. Reference: FOGEL Ch. 3; Additional reading: TAPSCOTT & WILLIAMS. 16/08 First code contribution Workflow with distributed version control: ammend, rebase, revert. 21/08 Project documentation and what to do when it doesn't exist Types of documentation (user, developer). Source code documentation systems: doxygen, Javadoc, pydoc, sphinx; Reference: FOGEL Ch. 3 (Wikis, Website) 23/08 Studio class for \"Professional Project\" activity Studio class for \"Professional Project\" activity 28/08 Ensuring others can work on the project: API documentation code quality 30/08 Software distribution and versioning Software distribution tools. Types of distribution. Versioning schemes. Reference: FOGEL Ch. 7 04/09 How to make software work in multiple countries? Localization and internationalization. Gettext tool for translations and .po format. 06/09 Software testing Types of software testing: unit, integration, and interface. Testing tools: pytest, selenium. 11/09 Studio class for \"Software Testing\" activity Studio class for \"Software Testing\" activity 13/09 Software licenses Copyrights in Brazil, patents, and software licenses; Reference: LAURENT Ch. 1 and 5, STALLMAN Ch. 6 18/09 Introduction to contributions in open projects - Activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 20/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 25/09 Studio class for group activity \"My First Contribution\" Studio class for group activity \"My First Contribution\" 27/09 Working in software communities Assessment metrics for the second part of the course; Communication and teamwork. Reference: RAYMOND Ch. 4 02/10 Course project Studio class for project development 04/10 Course project Studio class for project development 09/10 EXAM WEEK EXAM WEEK 11/10 EXAM WEEK EXAM WEEK 16/10 Course project Studio class for project development 18/10 Course project Studio class for project development 23/10 Course project Studio class for project development 25/10 Course project Studio class for project development 30/10 Course project Studio class for project development 01/11 Course project Studio class for project development 06/11 Course project Studio class for project development 08/11 Course project Studio class for project development 13/11 Course project Studio class for project development 15/11 PUBLIC HOLIDAY PUBLIC HOLIDAY 20/11 Topics on free culture and software communities nan 22/11 Topics on free culture and software communities nan 27/11 Topics on free culture and software communities nan 29/11 Topics on free culture and software communities nan 04/12 EXAM WEEK EXAM WEEK 06/12 EXAM WEEK EXAM WEEK"},{"location":"_snippets/skills-code/","title":"Skills code","text":"id Name Description XP Date 21 Code Contribution Submitted a pull request fixing a bug. 7 04/12 22 Contribution Accepted! A non-trivial pull request was accepted by an external project. 13 04/12 23 Simple Contribution Accepted! A simple pull request (with trivial changes or small code refactorings) was accepted by an external project. 3 04/12 24 Bug Report Reported a bug in a repository, and another user was able to reproduce it. 5 04/12 25 Feature Request Made a request for a new feature in a software. 2 04/12 26 INSPER Project Made additional contributions to an INSPER educational project. 5 04/12"},{"location":"_snippets/skills-community/","title":"Skills community","text":"id Name Description XP Date 40 Indirect Issue Conversations in an issue or pull request led other users to open issues reporting new bugs/improvements. 3 04/12 41 Beta Tester When reproducing a bug, you discovered that it had already been fixed and caused the closure of an issue. 3 04/12 42 Translation Accepted! Made a translation that was accepted in an open-source software. 5 04/12 43 New Languages Added support for translations in a previously non-translatable software. 10 04/12 44 Reviewer Reviewed minor errors in the documentation of a project, and your modifications were accepted. 2 04/12 45 Documentation Contribution Closed an issue marked as docs. 7 04/12 46 Project Pitch Delivered a project pitch. 0 04/12 47 Pitch Accepted! Contributed to a project presented in class. 5 04/12 48 Accepted Suggestion! Another student contributed to the project you pitched. 3 04/12 49 PR Replay Presented (in 15 minutes) the process of resolving a bug in class. 5 04/12"},{"location":"_snippets/skills-impact/","title":"Skills impact","text":"id Name Description XP Date 60 Speaker Gave a talk about libraries or open-source software. 20 04/12 61 Helpdesk Had an accepted answer on sites like StackOverflow or email lists. 4 04/12 62 Published Contribution One of your contributions was included in a release. 10 04/12 63 VIP Guest After making a contribution, someone from the project asked you to perform a task. After delivering the task, add this skill. 5 04/12 64 3 Submitted PRs Submitted 3 pull requests to the same project. 10 04/12 65 3 Accepted PRs 3 pull requests you submitted to a project were accepted. 30 04/12 66 Shoutout Something you did was mentioned by the project on social media or through an official channel. 10 04/12 77 Hacktoberfest Participated in Hacktoberfest by submitting 3 pull requests to external projects. 20 04/12"},{"location":"_snippets/skills-tutorial/","title":"Skills tutorial","text":"id Name Description XP Date 1 First Steps Added to the discipline's repository. 2 25/09 2 Exploring a Project's Environment Researched the history and community of people and services around a project. 3 25/09 3 Undocumented Project Received an undocumented system and got it up and running. 5 25/09 4 Professional Project Refactored poorly written code and created a web page for it. 5 25/09 5 Tested and Approved Created unit tests and interface tests for the challenge server. 5 25/09 6 Python Package Created a Python package installable via pip. 3 25/09 7 Dockerfile Created automated deployment for a Python web system. 3 25/09 8 Basic Translation Used translation tools to translate and localize a small command-line program. 2 25/09 10 FLOSS Research Delivered a long presentation on a recent and relevant topic related to free and open-source software. 5 04/12 11 Better code Addressed linting problems in a poorly written project 5 25/09 12 Release created Created a release and published a binary package for users 5 25/09"},{"location":"aulas/09-cultura-livre/","title":"09 - Trabalho sobre cultura livre","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"aulas/09-cultura-livre/slides/","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-cultura-livre/slides/#cultura-de-software-livre","title":"Cultura de software livre","text":""},{"location":"aulas/09-cultura-livre/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-cultura-livre/slides/#atividade","title":"Atividade","text":"
Cultura livre: fazer uma pesquisa profunda e apresentar semin\u00e1rio sobre licen\u00e7as de software e casos recentes em que licen\u00e7as tem papel de destaque
"},{"location":"aulas/09-cultura-livre/slides/#sua-apresentacao-precisa-ter-alguma-forma-de-interacao-com-a-audiencia","title":"Sua apresenta\u00e7\u00e3o precisa ter alguma forma de intera\u00e7\u00e3o com a audi\u00eancia","text":"
debate
painel com vota\u00e7\u00f5es
"},{"location":"aulas/09-cultura-livre/slides/#atividade-sugestoes-de-temas","title":"Atividade - sugest\u00f5es de temas","text":"
The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022?
There is no \"Linux\" platform.
Telemetria \u00e9 \"\u00e9tico\"? (exemplo VSCode e outros).
GitHub CoPilot \u00e9 \"\u00e9tico\"? Respeita licen\u00e7as de software?
Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones (bateria, right to repair, etc).
Maintainer burnout.
"},{"location":"aulas/09-cultura-livre/slides/#atividade-datas-de-apresentacao","title":"Atividade - datas de apresenta\u00e7\u00e3o","text":"
17/11 - 2 trabalho
22/11 - 2 trabalhos
24/11 - 2 trabalhos
29/11 - 2 trabalhos
"},{"location":"aulas/09-cultura-livre/slides/#45-minutos-de-apresentacaoatividade-10-minutos-para-perguntas","title":"45 minutos de apresenta\u00e7\u00e3o/atividade + 10 minutos para perguntas","text":""},{"location":"aulas/09-cultura-livre/slides/#hoje","title":"Hoje","text":"
Defini\u00e7\u00e3o de temas e datas de apresenta\u00e7\u00e3o
Pr\u00e9via de 5 minutos do seu tema na pr\u00f3xima aula
"},{"location":"aulas/09-cultura-livre/slides/#registrar-seu-grupo-escolha-de-tema-e-dia-de-apresentacao-na-issue-665","title":"Registrar seu grupo, escolha de tema e dia de apresenta\u00e7\u00e3o na issue #665","text":""},{"location":"aulas/09-licencas/","title":"09 - Licen\u00e7as de Software","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"aulas/09-licencas/slides/","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/09-licencas/slides/#ate-agora","title":"At\u00e9 agora","text":"
Ferramentas de colabora\u00e7\u00e3o
Modifica\u00e7\u00f5es de c\u00f3digo
Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
Distribui\u00e7ao de software
Teste de software
### Conte\u00fado t\u00e9cnico: ferramentas, fluxos de trabalho, etc
"},{"location":"aulas/09-licencas/slides/#hoje","title":"Hoje","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_1","title":"Licen\u00e7as de software","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_2","title":"Licen\u00e7as de software","text":"
Governam a distribui\u00e7\u00e3o de um software
Cess\u00e3o de direitos do autor para outras pessoas
Listam quais permiss\u00f5es um usu\u00e1rio (n\u00e3o) tem
"},{"location":"aulas/09-licencas/slides/#disclaimer","title":"Disclaimer","text":""},{"location":"aulas/09-licencas/slides/#eu-nao-sou-especialista-em-direito-autoral-brasileiro-toda-informacao-disponibilizada-foi-fruto-de-pesquisa-e-nao-constitui-aconselhamento-legal","title":"Eu n\u00e3o sou especialista em direito autoral brasileiro. Toda informa\u00e7\u00e3o disponibilizada foi fruto de pesquisa e n\u00e3o constitui aconselhamento legal.","text":""},{"location":"aulas/09-licencas/slides/#distribuicao-de-software","title":"Distribui\u00e7\u00e3o de software","text":"
Escrever software \u00e9 considerado um trabalho intelectual, estando ent\u00e3o sujeito \u00e0s leis de direitos autorais.
Essas leis s\u00e3o espec\u00edficas de cada pa\u00eds
Autoria vs explora\u00e7\u00e3o econ\u00f4mica
Engloba tanto c\u00f3digo fonte como bin\u00e1rios
N\u00e3o \u00e9 necess\u00e1rio registro. N\u00e3o vale para ideias.
Direito moral:
assegura a autoria da obra ao autor original
integridade da obra
instransfer\u00edvel e irrevog\u00e1vel
Direito patrimonial:
explora\u00e7\u00e3o econ\u00f4mica da obra.
licenciado ou cedido
copyright em ingl\u00eas
"},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante","title":"Por que isto \u00e9 importante?","text":"
O dono dos direitos autorais (patrimoniais) pode controlar:
Distribui\u00e7\u00e3o, parcial ou total;
Cria\u00e7\u00e3o de obras derivadas
Reprodu\u00e7\u00e3o (execu\u00e7\u00e3o)
"},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_1","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-durante-o-expediente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware durante o expediente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_2","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-nao-relacionado","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto n\u00e3o relacionado.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_3","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-concorrente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto concorrente.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_4","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-programador-faz-um-freelance-e-entrega-um-projeto-para-uma-empresa-ele-pode-reutilzar-parte-do-codigo-em-outros-projetos-para-outras-empresas","title":"Um programador faz um freelance e entrega um projeto para uma empresa. Ele pode reutilzar parte do c\u00f3digo em outros projetos (para outras empresas)?","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_5","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"aulas/09-licencas/slides/#um-prestador-de-servicos-contratado-como-empresa-via-cnpj-participa-de-um-projeto-terceirizado-junto-com-outros-pjs","title":"Um prestador de servi\u00e7os (contratado como empresa via CNPJ) participa de um projeto terceirizado, junto com outros PJs.","text":""},{"location":"aulas/09-licencas/slides/#por-que-isto-e-importante_6","title":"Por que isto \u00e9 importante?","text":"
Nenhum dos casos acima tem respostas fixas. Tudo depende de um monte de fatores jur\u00eddicos e do qu\u00ea cada um assinou. Alguns guias interessantes:
Association of Software Professionals
Start-se
Legal Nature - EULA
"},{"location":"aulas/09-licencas/slides/#contexto-1-propriedade-intelectual-e-work-for-hire","title":"Contexto 1: Propriedade intelectual e work-for-hire","text":"
Contexto brasilero: \"Pela nossa lei de software, a n\u00e3o ser que expressamente dito o contr\u00e1rio, aquele que contrata o desenvolvimento \u00e9 titular original do software resultante\" [1]
Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o servi\u00e7o [2]
Fontes 1 2
"},{"location":"aulas/09-licencas/slides/#contexto-2-projetos-open-source","title":"Contexto 2: projetos open source","text":"
Contributor License Agreement \u00e9 um documento de cess\u00e3o de copyright (direitos de explora\u00e7\u00e3o comercial).
D\u00e1 ao projeto uma licen\u00e7a n\u00e3o exclusiva (normalmente) e irrevog\u00e1vel para o projeto explorar sua contribui\u00e7\u00e3o
Mant\u00e9m autoria
Isenta o projeto de responsabilidades sobre suas contribui\u00e7\u00f5es
"},{"location":"aulas/09-licencas/slides/#contexto-3-comercializacao-de-software","title":"Contexto 3: comercializa\u00e7\u00e3o de software","text":"
End User License Agreement (EULA): Termo usado para aquelas condi\u00e7\u00f5es que (n\u00e3o lemos) aceitamos ao instalar software propriet\u00e1rio ou nos registramos em um site/servi\u00e7o.
"},{"location":"aulas/09-licencas/slides/#_1","title":"Licen\u00e7as de software","text":"
Ignorado por aproximadamente 90% dos usu\u00e1rios (fonte)
"},{"location":"aulas/09-licencas/slides/#end-user-license-agreement","title":"End User License Agreement","text":"
E por algumas empresas... Fonte
"},{"location":"aulas/09-licencas/slides/#end-user-license-agreement_1","title":"End User License Agreement","text":"
Restri\u00e7\u00f5es t\u00edpicas encontradas em EULAs:
Software \u00e9 licenciado, n\u00e3o vendido;
\u00c9 proibido engenharia reversa
N\u00e3o pode modificar ou explorar limita\u00e7\u00f5es / vulnerabilidades
Isenta responsabilidades pelo (mau) uso do software
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia","title":"Um pouco de hist\u00f3ria","text":""},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_1","title":"Um pouco de hist\u00f3ria","text":"
Richard Stallman fez um interpretador Lisp (MIT ~ 1985)
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_2","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_3","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
Fez modifica\u00e7\u00f5es no software
Deu um jeito de n\u00e3o devolv\u00ea-las para o MIT....
E eliminou a competi\u00e7\u00e3o...
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_4","title":"Um pouco de hist\u00f3ria","text":"
Stallman ficou #$@#$@#$@
e criou a primeira licen\u00e7a de software livre: Emacs General Public License
Toda c\u00f3pia do programa dever\u00e1 estar acompanhada do c\u00f3digo fonte;
Se uma modifica\u00e7\u00e3o do software for distribu\u00edda, ela dever\u00e1 estar sujeita aos mesmos termos do software original;
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1985","title":"Um pouco de hist\u00f3ria - 1985","text":"
GNU Manifesto: descrevia um esfor\u00e7o em criar um sistema completamente livre cujo destino estivesse nas m\u00e3os dos usu\u00e1rios
GNU/Hurd: todas as ferramentas de linha de comando das distribui\u00e7\u00f5es modernas vieram desse projeto
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia-1990","title":"Um pouco de hist\u00f3ria - 1990","text":"
Linus Torvalds tinha um kernel experimental \"pronto\".
Liberava uma vers\u00e3o nova toda semana;
Recebia contribui\u00e7\u00f5es de outros interessados.
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_5","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Free Software, Free Society: Selected Essays of Richard M. Stallman.
"},{"location":"aulas/09-licencas/slides/#um-pouco-de-historia_6","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Just for Fun: The Story of an Accidental Revolutionary, Linus Torvalds and David Diamond
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre","title":"Licen\u00e7as de software (livre)","text":"
Criadas pela Free Software Foundation visando garantir 4 liberdades para um usu\u00e1rio ao usar um software:
Execu\u00e7\u00e3o sem restri\u00e7\u00f5es
Estudo e modifica\u00e7\u00e3o do software;
Redistribuir c\u00f3pias;
Redistribuir c\u00f3pias das suas modifica\u00e7\u00f5es.
Distribuir os fontes \u00e9 pr\u00e9-requisito dos itens 1 e 3!
Chamadas tamb\u00e9m de rec\u00edprocas.
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre_1","title":"Licen\u00e7as de software (livre)","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software-livre-reciprocas","title":"Licen\u00e7as de software livre - rec\u00edprocas","text":"
Copyleft: S\u00edmbolo \u00e9 o contr\u00e1rio do copyright, cujo objetivo seria restringir os usu\u00e1rios
Fundada para difundir um discurso menos anti-comercial e ideol\u00f3gico
Tamb\u00e9m difunde benef\u00edcios \"pragm\u00e1ticos\" do uso de software \"de c\u00f3digo aberto\"
Free causa confus\u00e3o em ingl\u00eas
Gr\u00e1tis (free as in beer)
Livre (free as in freedom)
Fundada por Eric Raymond e Bruce Perens
"},{"location":"aulas/09-licencas/slides/#licencas-de-software-de-codigo-aberto","title":"Licen\u00e7as de software de c\u00f3digo aberto","text":"
Mais associadas a Open Source Iniciative, s\u00e3o consideradas menos \"ideol\u00f3gicas\".
Muitas vezes chamadas de permissivas;
Normalmente n\u00e3o garatem a liberdade 3;
Podem fazer outras pequenas exig\u00eancias ou restri\u00e7\u00f5es
Exemplos: MIT, BSD
Permitem a distribui\u00e7\u00e3o de software com partes propriet\u00e1rias
Permitem a venda e completo rebranding do software sem nenhuma contribui\u00e7\u00e3o para o autor original.
"},{"location":"aulas/09-licencas/slides/#licencas-qual-usar","title":"Licen\u00e7as: qual usar?","text":"
https://choosealicense.com/licenses/
"},{"location":"aulas/09-licencas/slides/#desafio-de-traducao","title":"Desafio de tradu\u00e7\u00e3o","text":""},{"location":"aulas/09-licencas/slides/#skill-traducao-aceita-5xp-ao-menos-40-string-traduzidas","title":"Skill \"Tradu\u00e7\u00e3o aceita!\" (5XP): Ao menos 40 string traduzidas","text":""},{"location":"aulas/09-licencas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/09-licencas/slides/#licencas-de-software_3","title":"Licen\u00e7as de Software","text":""},{"location":"aulas/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/","title":"10 - Minha primeira contribui\u00e7\u00e3o","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica guidada. Faremos aula est\u00fadio com atendimento para encontrar projetos e issues interessantes.
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#_1","title":"Explorando seu projeto","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#contribuicao-de-codigo","title":"Contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"aulas/10-minha-primeira-contribuicao/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":"
Bons projetos usam tags para facilitar a recep\u00e7\u00e3o de novatos
good-first-issue
newcomers
low effort
difficulty novice
easy
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#agregadores-de-projetos","title":"Agregadores de projetos","text":"
https://github.com/MunGell/awesome-for-beginners
https://www.codetriage.com/
https://up-for-grabs.net/
http://github-help-wanted.com/
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-i-pandas","title":"Sugest\u00e3o I - Pandas","text":"
Biblioteca de tratamento de dados usada em Ci\u00eancia dos Dados.
Projeto complexo, com muitos casos de uso especiais
Toneladas de funcionalidades de visualiza\u00e7\u00e3o textual e gr\u00e1fica de dados
Python \u00e9 familiar para a maioria
Tickets de testes s\u00e3o, em geral, f\u00e1ceis para come\u00e7ar e \u00fateis para a comunidade.
"},{"location":"aulas/10-minha-primeira-contribuicao/slides/#sugestao-ii-escolha-seu-proprio-projeto","title":"Sugest\u00e3o II: Escolha seu pr\u00f3prio projeto :)","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica guidada, mas tem uma parte expositiva importante. N\u00e3o esque\u00e7a de olhar os slides de hoje para relembrar.
"},{"location":"aulas/11-contribuicoes-externas/slides/","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_1","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-para-debugar-qualquer-coisa","title":"Dicas para debugar (qualquer coisa)","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#9-regras-de-debug","title":"9 regras de debug","text":"
UNDERSTAND THE SYSTEM
MAKE IT FAIL
QUIT THINKING AND LOOK
DIVIDE AND CONQUER
CHANGE ONE THING AT A TIME
KEEP AN AUDIT TRAIL
CHECK THE PLUG
GET A FRESH VIEW
IF YOU DIDN'T FIX IT, IT AIN'T FIXED
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nada-acontece-se-nao-conseguirmos","title":"Nada acontece se n\u00e3o conseguirmos","text":"
Baixar a vers\u00e3o de desenvolvimento
Instalar todas as depend\u00eancias
Compilar nossa pr\u00f3pria vers\u00e3o
Rodar testes na vers\u00e3o do master
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_1","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#ferramentas-importantes","title":"Ferramentas importantes:","text":"
"},{"location":"aulas/11-contribuicoes-externas/slides/#1-understand-the-system_2","title":"1. Understand the system","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#conheca-suas-ferramentas","title":"Conhe\u00e7a suas ferramentas","text":"
Debugging visual linha a linha
Stacktrace
Busca em projeto inteiro
Ir para defini\u00e7\u00e3o de fun\u00e7\u00e3o
"},{"location":"aulas/11-contribuicoes-externas/slides/#debugar-usando-print-e-perda-de-tempo","title":"Debugar usando print \u00e9 perda de tempo","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#2-make-it-fail","title":"2. Make it fail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#reproduza-seu-bug","title":"Reproduza seu bug","text":"
Crie um exemplo m\u00ednimo que reproduza o bug desejado ou que usaria a feature que quer implementar
entrada de exemplo e sa\u00edda esperada vs sa\u00edda obtida
Possivelmente isto j\u00e1 foi descrito na issue escolhida.
Anote elementos que te ajudem a encontrar onde isto ocorre no c\u00f3digo (fun\u00e7\u00f5es usadas, elementos de interface gr\u00e1fica, mensagens de erro.)
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#encontre-onde-esta-o-problema-e-leia-o-codigo-com-atencao","title":"Encontre onde est\u00e1 o problema e leia o c\u00f3digo com aten\u00e7\u00e3o","text":"
Encontre no c\u00f3digo onde o bug pode estar
Comece geral (em qual arquivo est\u00e1 a funcionalidade?) e v\u00e1 restringindo (em qual fun\u00e7\u00e3o o bug \"explode\"?)
Ferramentas de debug s\u00e3o essenciais. Veja o item 1.
N\u00e3o atenderei ningu\u00e9m que esteja debugando s\u00f3 com print
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_1","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-por-nomes-de-arquivos","title":"Buscando por nomes de arquivos","text":"
Comando find (man page)
Exemplo: procurar por arquivos cujo nome \u00e9 aceito por uma certa express\u00e3o regular come\u00e7ando no diret\u00f3rio atual.
$ find -iname \"regexp\" .
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_2","title":"3. Quit thinking and look","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#buscando-no-conteudo-dos-arquivos","title":"Buscando no conte\u00fado dos arquivos","text":"
Comando grep (man page)
$ grep [OPTIONS] PATTERN FILES
PATTERN: express\u00e3o regular
FILES: lista de diret\u00f3rios ou arquivos
"},{"location":"aulas/11-contribuicoes-externas/slides/#3-quit-thinking-and-look-grep","title":"3. Quit thinking and look - grep","text":"
Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto \"dialog\" ignorando mai\u00fasculas/min\u00fasculas.
$ grep -r -i dialog .
"},{"location":"aulas/11-contribuicoes-externas/slides/#_2","title":"Dicas de Debug","text":"
Exemplo 2: Listas todos os arquivos .cpp que fazem algum include
$ grep -r --include \"*cpp\" \"#include\" .
"},{"location":"aulas/11-contribuicoes-externas/slides/#sua-ideeditor-devem-ter-algo-parecido-procure-e-use","title":"Sua IDE/editor devem ter algo parecido. Procure e use.","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#4-divide-and-conquer","title":"4. Divide and Conquer","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#crie-um-plano-de-acao","title":"Crie um plano de a\u00e7\u00e3o","text":"
Por que o bug ocorre?
Est\u00e1 relacionado a qual fun\u00e7\u00e3o?
Qual vari\u00e1vel tem o valor errado?
O que deve ser mudado para que pare de ocorrer?
Pr\u00e9-requisito: debugar visualmente usando alguma IDE / editor
"},{"location":"aulas/11-contribuicoes-externas/slides/#5-change-one-thing-at-a-time","title":"5. Change one thing at a time","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#um-bom-pr-muda-o-minimo-possivel","title":"Um bom PR muda o m\u00ednimo poss\u00edvel","text":"
use v\u00e1rias branches se quiser testar ideias diferentes
git commit \u00e9 gr\u00e1tis. Quando chegar na vers\u00e3o final \u00e9 s\u00f3 juntar tudo e mandar.
git rebase para atualizar seu branch com o master upstream caso necess\u00e1rio.
"},{"location":"aulas/11-contribuicoes-externas/slides/#6-keep-an-audit-trail","title":"6. Keep an audit trail","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#registre-suas-descobertas","title":"Registre suas descobertas","text":"
Log de como voc\u00ea encontrou onde mexer
Log de todos arquivos de interesse e seus usos
Log de todas as pesquisas feitas
Log de todas as modifica\u00e7\u00f5es feitas
git commit \u00e9 \u00fatil para registrar testes tamb\u00e9m
N\u00e3o se esque\u00e7a:git diff \u00e9 seu melhor amigo
"},{"location":"aulas/11-contribuicoes-externas/slides/#7-check-the-plug","title":"7. Check the plug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#nunca-se-esqueca-de-testar-a-solucoes-mais-simples-primeiro","title":"Nunca se esque\u00e7a de testar a solu\u00e7\u00f5es mais simples primeiro","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#8-get-a-fresh-view","title":"8. Get a fresh view","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#empacou","title":"Empacou?","text":"
\u00c9 por isso que voc\u00eas trabalham em grupo no primeiro bug.
"},{"location":"aulas/11-contribuicoes-externas/slides/#9-if-you-didnt-fix-it-it-aint-fixed","title":"9. If you didn't fix it, it ain't fixed","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#hora-de-programar","title":"Hora de programar","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#tentem-aplicar-estas-ideias-aos-seus-problemas","title":"Tentem aplicar estas ideias aos seus problemas","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#envie-4-prs-para-projetos-participantes-e-ganhe-uma-camiseta","title":"Envie 4 PRs para projetos participantes e ganhe uma camiseta","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#atividade-extra-hacktoberfest","title":"Atividade extra: hacktoberfest","text":"
Objetivo: Enviar 3 PRs para projetos externos no m\u00eas de outubro.
\"metadata\": {\"date\": \"2021-10-31\"}
"},{"location":"aulas/11-contribuicoes-externas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#_3","title":"Dicas de Debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#dicas-de-debug_1","title":"Dicas de debug","text":""},{"location":"aulas/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"aulas/12-projeto/slides/#ate-agora","title":"At\u00e9 agora","text":"
Analisar uma base de c\u00f3digos desconhecida de m\u00e9dio/grande porte e modific\u00e1-la de modo a fazer melhorias e corrigir falhas em um software;
"},{"location":"aulas/12-projeto/slides/#_1","title":"Projeto da disciplina","text":"
Interagir com uma equipe remota de desenvolvedores para entregar c\u00f3digo que atenda aos padr\u00f5es de qualidade e estilo de c\u00f3digo de um projeto;
proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
exercitar autonomia e independ\u00eancia
"},{"location":"aulas/12-projeto/slides/#projeto-aberto_1","title":"Projeto Aberto","text":""},{"location":"aulas/12-projeto/slides/#organizado-em-dois-blocos-de-5-aulas","title":"Organizado em dois blocos de 5 aulas","text":"
11/05 - 25/05
27/05 - 10/06
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto","title":"Projeto Aberto - Pitches de projeto","text":"
Cada bloco se inicia com uma aula de Pitches de Projeto, que \u00e9 uma apresenta\u00e7\u00e3o de 5 minutos apresentando o projeto para o qual voc\u00ea contribuir\u00e1 na semana.
Trocar ideias sobre projetos interessantes
Ajudar alunos indecisos a escolherem um projeto
Se comprometer com uma escolha de projeto
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitch-de-projeto","title":"Projeto Aberto: Pitch de projeto","text":"
Objetivo: Apresentou um Pitch de projeto. Se o aluno s\u00f3 apresentar o projeto e n\u00e3o fizer contribui\u00e7\u00e3o vale 0 XP.
\"metadata\": {\"url\": \"url_do_projeto_proposto\", \"filename\": \"pdf da apresentacaoo\"}
Colocar pdf da apresenta\u00e7\u00e3o na pasta docs/pitches.
Objetivo: Outro aluno enviou contribui\u00e7\u00e3o para o projeto que voc\u00ea fez Pitch.
\"metadata\": {\"url\": \"url_da_contribuicao\"}
A ser enviado pelo aluno que prop\u00f4s o Pitch, que tamb\u00e9m precisa ter contribu\u00eddo.
"},{"location":"aulas/12-projeto/slides/#projeto-aberto-pitches-de-projeto_1","title":"Projeto Aberto - Pitches de projeto","text":"
Apresentar um pitch \u00e9 uma skill que vale XP
Ajudar colegas interessados no \"seu\" projeto vale XP
Aceitar sugest\u00f5es/ajudas vale XP
Tudo isso \u00e9 al\u00e9m da XP j\u00e1 obtida com as contribui\u00e7\u00f5es
"},{"location":"aulas/12-projeto/slides/#evitar-alunos-trabalhando-sozinhos","title":"Evitar alunos trabalhando sozinhos.","text":""},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aprendizado-de-tecnologias-novas","title":"Aprendizado de tecnologias novas","text":"
Linguagem de programa\u00e7\u00e3o
Biblioteca
Tipo de tecnologia: web, mobile, desktop
"},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_1","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#aperfeicoamento-em-tecnologias-que-ja-domina","title":"Aperfei\u00e7oamento em tecnologias que j\u00e1 domina","text":"
Linguagem de programa\u00e7\u00e3o espec\u00edfica
Tipo de tecnologia: web, mobile, desktop
"},{"location":"aulas/12-projeto/slides/#estrategias-para-escolha-um-projeto_2","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"aulas/12-projeto/slides/#projetos-de-interesse-pessoal","title":"Projetos de interesse pessoal","text":"
Algum software que voc\u00ea usa
Melhorar alternativa livre para software propriet\u00e1rio
Moonshot: projetos ambiciosos com chance m\u00ednima de sucesso
"},{"location":"aulas/12-projeto/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"aulas/12-projeto/slides/#projeto-da-disciplina_1","title":"Projeto da disciplina","text":""},{"location":"aulas/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/01-distributed-workflow/","title":"01 - Distributed Development Workflow","text":"
In this guide, we will work on the standard workflow for contributing to projects hosted on GitHub (which also applies to Git projects in general). Before starting, each student should locate the corresponding issue on the course's GitHub repository for creating their user.
Our workflow will be based on three main parts. In the first part, we will create a copy of the repository \"insper/dev-aberto\" where we will make all the necessary changes. In the second part, we will send our modifications to the original repository using a Pull Request, which is a request to accept the changes from a forked repository into the original repository. Finally, we will update our fork with modifications sent by colleagues.
Some key points to highlight in the above workflow:
Even if a user does not have access to the original repository, they can work on their own copy and only submit their modifications to the original repository when everything is ready.
It is necessary for a developer from the original project to \"take responsibility\" for the accepted external modifications.
The Pull requests tab allows developers to discuss proposed modifications and improve them. Every commit made after the creation of the PR is included and can be tested by anyone.
"},{"location":"lessons/01-distributed-workflow/#creating-your-own-copy","title":"Creating your own copy","text":"
We will start our workflow by creating a fork of the repository \"insper/dev-aberto\". All our modifications will be made in our fork, on a separate branch (it is recommended to use a different branch for each issue). This way, our modifications are completely isolated from the original code, and we can test them alongside the original code.
First, create the fork through the GitHub interface. Then, clone your fork and create a new branch called \"issue-X,\" where \"X\" is the number of your issue in the original project.
$ git checkout -b issue-X
To ensure that you are in the directory of your fork, execute the following command:
$ git remote -vv
The displayed addresses should be those of your fork, not the original project.
With the fork created and being on the \"issue-X\" branch (you can check using git branch and switch using git checkout issue-X), we will begin making modifications.
"},{"location":"lessons/01-distributed-workflow/#interacting-with-the-course-repository","title":"Interacting with the course repository","text":"
The creation of users and addition of skills is done using the command dev-aberto.py.
Tip
To use it, you need to install the packages listed in the requirements.txt file.
Running it in the terminal should list the available commands.
$ python3 dev-aberto.py
To check if everything is working correctly, list all registered users. There should be only one registered user (igorsm1).
"},{"location":"lessons/01-distributed-workflow/#creating-a-user","title":"Creating a user","text":"
User creation is done with the command:
$ python3 dev-aberto.py new-user
This will create three files in the students folder:
your-login: basic user information in JSON format.
your-login-achievements: encrypted file containing the deliveries of each student in JSON format.
your-login.key: cryptographic key for the above file.
Verify that your user was created correctly by listing the existing users again. Your user should have an asterisk (*) next to the name, indicating that the login.key file is present in the system.
Danger
Do not include the *.key file in your PR. It should be sent by email to the professor. Do this now before you forget!
Also, verify that you can use the command dev-aberto.py compute-grade your-login. If everything is okay, proceed to the next item.
"},{"location":"lessons/01-distributed-workflow/#adding-a-skill","title":"Adding a skill","text":"
With the user created, we can add the skill \"First Steps.\" You may have noticed that the professor's key is available (file students/igorsm1.key). This was done so that you have at least one example of how each skill should be added. See below for an example of how the skill should be included:
$ python3 dev-aberto.py edit-achievements igorsm1
This will open a file for editing in Vi. The format is a list of objects containing two fields: \"skill_id\" and \"metadata\". See the example below for the first skill
If you want to use another text editor, you can set the environment variable EDITOR just before calling dev-aberto.py.
Now add the skill to your user following the same pattern seen above. Verify that your skill was correctly added using the compute-grade command.
Tip
If your repository is OK, help your classmates.
"},{"location":"lessons/01-distributed-workflow/#sending-modifications-to-the-original-project","title":"Sending modifications to the original project","text":"
Now let's create a commit and send it as a Pull Request to the course's repository. Add the created files (excluding the *.key file!) and make a commit with the following message (replace the X with the number of your issue in the repository):
Add user your-login.\n
Execute git push and continue.
With your modifications already in your fork, it's time to send them to the original repository. This is done on the GitHub interface. First, access your fork in the browser, locate your issue-X branch, and click the \"Pull request\" button.
The title of your Pull Request should be Create user login. Your PR should contain only one commit and should have the branch issue-X created above as the source. In the description of your PR, add the text:
Closes #X\n
where X is the number of your user's issue. This automatically closes the issue when (and if) this PR is accepted.
Warning
PRs made from main or with more than one commit will not be accepted.
Use the checklist below to help verify if your work is correct:
Created a new user with new-user.
Added the \"First Steps\" skill.
Checked that the new user has the new skill using compute-grade.
Created a PR with only one commit and the correct files.
Sent the .key file by email to the professor.
Did not include the .key file in the PR.
Once your PR is accepted, you can remove the issue-X branch.
"},{"location":"lessons/01-distributed-workflow/#updating-your-fork","title":"Updating your fork","text":"
After having your PR accepted, you may have noticed that your commit appears in the original project's main branch but does not appear in your fork. This is because a fork is not automatically updated when its corresponding original repository receives new commits.
To make this happen, you need to perform a manual synchronization. For now, we will use the GitHub interface to do this.
Visit your fork again. Now, there should be an option to sync your fork with the original repository. Use it to make your main branch receive the new commits.
Warning
Sync your repository whenever you work on a new PR. This will prevent many conflicts when merging your modifications into the original repository.
In the industry, we usually work on existing projects:
Fixing issues.
Making improvements.
Projects used by multiple users.
"},{"location":"lessons/01-distributed-workflow/slides/#why-did-i-create-the-course","title":"Why did I create the course?","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_1","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_2","title":"My motivation (Igor)","text":"
"},{"location":"lessons/01-distributed-workflow/slides/#my-motivation-igor_3","title":"My motivation (Igor)","text":""},{"location":"lessons/01-distributed-workflow/slides/#its-not-enough-anymore-to-create-software-for-learning-purposes","title":"It's not enough (anymore) to create software for learning purposes","text":""},{"location":"lessons/01-distributed-workflow/slides/#i-would-like-to-have-some-impact","title":"I would like to have (some) impact","text":"
To create/contribute to software other people use
To write texts/tutorials that are read by someone
To be a part of a community that would miss me if I stop participating
"},{"location":"lessons/01-distributed-workflow/slides/#why-are-you-here","title":"Why are you here?","text":"
https://forms.gle/uDvnDoyxBsVoHy6S8
"},{"location":"lessons/01-distributed-workflow/slides/#achievements-in-this-course-so-far","title":"Achievements in this Course So Far","text":""},{"location":"lessons/01-distributed-workflow/slides/#vitoria-20182","title":"Vit\u00f3ria - 2018/2","text":""},{"location":"lessons/01-distributed-workflow/slides/#spyder","title":"Spyder","text":"
Tutorial: Guided preparatory activities in the classroom
Code: Code contributions to external projects
Community: Non-technical contributions that can benefit users and developers of a project, such as documentation and translations
Impact: Significant results achieved by the student's participation in open projects
"},{"location":"lessons/01-distributed-workflow/slides/#full-list-of-skills","title":"Full list of skills","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-introduction-syllabus","title":"Course Introduction (syllabus)","text":"
Final grade is a combination of XP and acquired skills.
Bi-weekly reports sent by email.
Complete conditions on the rules and skills page.
"},{"location":"lessons/01-distributed-workflow/slides/#discussion-development-workflow","title":"Discussion: Development Workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#how-does-git-work","title":"How does Git work?","text":"
"},{"location":"lessons/01-distributed-workflow/slides/#activity-first-steps","title":"Activity: First Steps","text":"
Objective: Submit your first Pull Request to the course's repository.
"},{"location":"lessons/01-distributed-workflow/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/01-distributed-workflow/slides/#_5","title":"Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#course-overview-distributed-coding-workflow_1","title":"Course overview + Distributed coding workflow","text":""},{"location":"lessons/01-distributed-workflow/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/","title":"02 - Software and Communities","text":"
less02in
The activity for this class involves creating a presentation explaining how the communities around the following software projects are organized:
Visual Studio Code
NeoVIM
Django
Blender
Kdenlive
NewPipe
Each group of 3 students should choose one of the above projects and research the following points.
What is the purpose of the project?
Where is the source code located? Which technologies are used?
What is the license? Are there public guidelines or any kind of bureaucracy for contributions?
Is there developer documentation?
Does it seem easy to compile/run?
Does it seem easy to modify?
How is the project governed?
Who are the key figures (developers, evangelists, etc.) in the project? If the project is large, mention two different areas in this item.
Is there a public roadmap?
Are external contributions accepted? How can one contribute?
Who makes the decisions?
Where can project members be found? Where can one seek help?
Does the project raise funds?
Are there companies sponsoring developers?
How much has been raised? And spent? For what purposes?
Who decides how the funds are spent?
Each group must create a 10 minutes presentation for the next meeting that addresses these questions.
"},{"location":"lessons/02-software-and-communities/slides/","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#open-source-development","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_1","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities","title":"Software and Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"2023/2: Igor Montagner ( igorsm1@insper.edu.br) )","text":""},{"location":"lessons/02-software-and-communities/slides/#github-model-fork-pull-request","title":"Github Model: fork + pull request","text":"
"},{"location":"lessons/02-software-and-communities/slides/#workflow-other-models","title":"Workflow: other models","text":"
Send patch via email list (e.g., Linux)
Code review tools (e.g., KDE - Phabricator)
Patch is attached to the Bug Tracker (e.g., Haiku, KDE)
Does not receive external contributions
"},{"location":"lessons/02-software-and-communities/slides/#review-of-last-classs-prs","title":"Review of last class's PRs","text":""},{"location":"lessons/02-software-and-communities/slides/#common-errors","title":"Common Errors","text":""},{"location":"lessons/02-software-and-communities/slides/#error-0-login-achievements-file-has-errors","title":"Error 0: login-achievements file has errors","text":"
How to fix: Create a new commit with the correct date.
"},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr","title":"Error 1: Extra files in the PR","text":"
Error: Modifying files not related to your proposed changes.
"},{"location":"lessons/02-software-and-communities/slides/#_2","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Ideal:
A Pull Request should contain only the files related to the proposed modification.
Each proposed modification is in a separate Pull Request.
"},{"location":"lessons/02-software-and-communities/slides/#error-1-extra-files-in-the-pr_1","title":"Error 1: Extra files in the PR","text":"
How to fix: git revert creates a commit that undoes previous changes.
Extra options:
--no-commit: Only adds the modifications, but does not make the commit. Allows undoing part of a commit.
How to fix: git commit --amend allows modifying the last commit made.
"},{"location":"lessons/02-software-and-communities/slides/#error-3-pull-request-with-a-poor-description","title":"Error 3: Pull Request with a poor description","text":"
How to fix: Simply edit it in the Github interface.
"},{"location":"lessons/02-software-and-communities/slides/#fix-at-home-and-request-review-via-github","title":"Fix at home and request review via Github","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-if-you-dont-push-nothing-is-broken","title":"Reminder: If you don't push, nothing is broken","text":""},{"location":"lessons/02-software-and-communities/slides/#reminder-ii-git-log-shows-your-current-history","title":"Reminder II: git log shows your current history","text":""},{"location":"lessons/02-software-and-communities/slides/#tip-if-you-modified-already-published-commits-use-git-push-f-to-overwrite","title":"Tip: If you modified already published commits, use git push -f to overwrite","text":""},{"location":"lessons/02-software-and-communities/slides/#not-all-students-enrolled-in-the-course-did-the-activity-from-the-last-class","title":"Not all students enrolled in the course did the activity from the last class!","text":"
python dev-aberto.py list-users\n
"},{"location":"lessons/02-software-and-communities/slides/#software-communities","title":"Software Communities","text":""},{"location":"lessons/02-software-and-communities/slides/#discussion","title":"Discussion","text":""},{"location":"lessons/02-software-and-communities/slides/#_3","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Question 1: What are the software you use the most in your daily life?
"},{"location":"lessons/02-software-and-communities/slides/#_4","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_5","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_6","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Question 2: Who is the main developer of the project?
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel","title":"Example: Linux Kernel","text":"
Foundation supports the development of the Linux Kernel and the creation of an open-source software ecosystem around it.
Support:
Financial
Intellectual property
Infrastructure
Services and training
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-kernel_1","title":"Example: Linux Kernel","text":"
Companies that sponsor development:
Individual (11.95%)
Intel (10.01%)
Red Hat (8.90%)
Unknown (4.09%)
IBM (3.79%)
SUSE (3.49%)
Linaro (2.96%)
Consultants (2.96%)
Google (2.79%)
Samsung (2.28%)
Source: \"2020 Linux Kernel Development Report\"
"},{"location":"lessons/02-software-and-communities/slides/#example-ubuntu","title":"Example: Ubuntu","text":""},{"location":"lessons/02-software-and-communities/slides/#_7","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_8","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_9","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_10","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Private company controls the development of Ubuntu. Obtains resources via:
Donations
Development and consulting services
Training
"},{"location":"lessons/02-software-and-communities/slides/#example-gitlab","title":"Example: Gitlab","text":""},{"location":"lessons/02-software-and-communities/slides/#_11","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_12","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_13","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_14","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Company funded so far by VC (Venture Capital) in search of profit.
Option of free plans with open-source software
Option of corporate plans with more features and support
On-premises installations
"},{"location":"lessons/02-software-and-communities/slides/#example-elementary","title":"Example: Elementary","text":""},{"location":"lessons/02-software-and-communities/slides/#_15","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_16","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Linux distribution led by a \"tiny\" company focused on the user experience. Resources are obtained through:
Individual and corporate sponsorships
Pay-what-you-want model (app store and operating system)
Hardware with the pre-installed system
"},{"location":"lessons/02-software-and-communities/slides/#example-linux-mint","title":"Example: Linux Mint","text":""},{"location":"lessons/02-software-and-communities/slides/#_17","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Linux distribution aimed at everything working right after installation. Considered good for beginners.
"},{"location":"lessons/02-software-and-communities/slides/#reasons-for-funding-company","title":"Reasons for funding (company)","text":""},{"location":"lessons/02-software-and-communities/slides/#_18","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
\"Acquire\" experts in a technology
Sell support or consulting services
Marketing
Software license \"obliges\"
"},{"location":"lessons/02-software-and-communities/slides/#_19","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#_20","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":"
Not everything funded ends up in a \"usable\" format for others (e.g., Android/Linux, TiVO)
\"Tivoization is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to prevent users from running modified versions of the software on that hardware\" [Wikipedia]
"},{"location":"lessons/02-software-and-communities/slides/#reasons-for-contributing-individual","title":"Reasons for contributing (individual)","text":"
Professional
Reputation / CV
Business needs
Personal
Altruism / Ideology
Sense of personal fulfillment
Exercise creativity
Solve a problem of personal interest
"},{"location":"lessons/02-software-and-communities/slides/#activity-exploring-the-environment-of-a-project","title":"Activity: Exploring the environment of a project","text":"
Research how the communities of some projects are organized
Produce a presentation summarizing your findings
"},{"location":"lessons/02-software-and-communities/slides/#open-source-development_1","title":"Open Source Development","text":""},{"location":"lessons/02-software-and-communities/slides/#_21","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/02-software-and-communities/slides/#software-and-communities_1","title":"Software and Communities","text":""},{"location":"lessons/03-software-documentation/","title":"03 - Explorando um projeto desconhecido","text":"
Este roteiro tem algumas perguntas com o objetivo de guiar a explora\u00e7\u00e3o do c\u00f3digo e documentar suas descobertas. Voc\u00ea tamb\u00e9m pode aplic\u00e1-lo para qualquer outro projeto mal documentado em que precisar trabalhar no futuro.
Baixe o c\u00f3digo do projeto a ser analisado aqui e siga as perguntas. Elas s\u00e3o um guia de como explorar um projeto que voc\u00eas n\u00e3o conhecem.
"},{"location":"lessons/03-software-documentation/#dependencias-e-servicos-usados","title":"Depend\u00eancias e servi\u00e7os usados","text":"
Question
Quais tecnologias s\u00e3o usadas no c\u00f3digo? Al\u00e9m da linguagem de programa\u00e7\u00e3o, liste tamb\u00e9m as bibliotecas/m\u00f3dulos externos usados.
Question
A aplica\u00e7\u00e3o utiliza um banco de dados. Qual gerenciador? Onde a aplica\u00e7\u00e3o busca a base de dados? Quais s\u00e3o as tabelas usadas? Como elas s\u00e3o criadas?
A aplica\u00e7\u00e3o usa autentica\u00e7\u00e3o? Se sim, qual tipo? Como usu\u00e1rios s\u00e3o criados? Existe algum usu\u00e1rio administrador? Como \u00e9 feita a seguran\u00e7a das senhas? Qual a senha padr\u00e3o?
Question
Quais comandos voc\u00ea usou para rodar a aplica\u00e7\u00e3o? Escreva todos desde a cria\u00e7\u00e3o do banco de dados e dos usu\u00e1rios at\u00e9 o funcionamento completo do projeto.
Question
Agora que voc\u00ea consegue rodar a aplica\u00e7\u00e3o, explore-a um pouco e descreva em poucas frases para qu\u00ea ela serve.
"},{"location":"lessons/03-software-documentation/#documentacao-do-projeto","title":"Documenta\u00e7\u00e3o do projeto","text":"
Question
Se voc\u00ea fosse criar um guia de usu\u00e1rio (aluno) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?
Question
Se voc\u00ea fosse criar um guia de usu\u00e1rio (professor) para esta aplica\u00e7\u00e3o, quais tarefas descreveria?
Question
O qu\u00ea voc\u00ea descreveria em um guia de desenvolvedor para esta aplica\u00e7\u00e3o?
"},{"location":"lessons/03-software-documentation/slides/","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#_1","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#fluxo-de-trabalho-distribuido-e-comunidades-de-software","title":"Fluxo de trabalho distribu\u00eddo e Comunidades de Software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#ordem-das-apresentacoes","title":"Ordem das apresenta\u00e7\u00f5es","text":"
VSCode
Blender
KDENlive
NeoVim
"},{"location":"lessons/03-software-documentation/slides/#10-minutos-cada-uma","title":"10 minutos cada uma","text":""},{"location":"lessons/03-software-documentation/slides/#atividade-explorando-o-entorno-de-um-projeto","title":"Atividade: Explorando o entorno de um projeto","text":"
\"metadata\": {\n \"filename\": \"nome do arquivo\",\n \"group\": [\"login1\", \"login2\"]\n}\n
No group incluir os outros membros do grupo somente
Um membro da equipe deve fazer um PR para o projeto incluindo o arquivo da apresenta\u00e7\u00e3o. O mesmo deve ser colocado na pasta apresentacoes/2023
"},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_2","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#a-ausencia-de-documentacao-de-software","title":"(A aus\u00eancia de d)ocumenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_2","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_1","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de usu\u00e1rio:
"},{"location":"lessons/03-software-documentation/slides/#_2","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_3","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_4","title":"Documenta\u00e7\u00e3o de Software","text":"
Documenta\u00e7\u00e3o de desenvolvimento:
"},{"location":"lessons/03-software-documentation/slides/#_5","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_6","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#_7","title":"Documenta\u00e7\u00e3o de Software","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_2","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de usu\u00e1rio:
Instala\u00e7\u00e3o
Funcionalidades
Onde obter ajuda
"},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_3","title":"Documenta\u00e7\u00e3o de software","text":"
Documenta\u00e7\u00e3o de desenvolvimento:
Como compilar (depend\u00eancias, ferramentas usadas, etc)
Como testar (depend\u00eancias, ferramentas usadas, etc)
Estilo de c\u00f3digo e outras orienta\u00e7\u00f5es relacionadas
Organiza\u00e7\u00e3o do c\u00f3digo e arquitetura da aplica\u00e7\u00e3o
"},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_4","title":"Documenta\u00e7\u00e3o de software","text":"
\u00c0s vezes as coisas se confundem! O que voc\u00eas colocariam na documenta\u00e7\u00e3o de usu\u00e1rio do Python?
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao","title":"Sistemas de documenta\u00e7\u00e3o","text":"
Sphinx
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao_1","title":"Sistemas de documenta\u00e7\u00e3o","text":"
Mkdocs
"},{"location":"lessons/03-software-documentation/slides/#sistemas-de-documentacao-hospedagem","title":"Sistemas de documenta\u00e7\u00e3o (hospedagem)","text":"
Voc\u00eas receber\u00e3o um zip com o c\u00f3digo de um software e zero instru\u00e7\u00f5es. Voc\u00eas dever\u00e3o:
Aprender como rodar o software
Documentar os passos que voc\u00eas seguiram para faz\u00ea-lo
Fazer uma an\u00e1lise cr\u00edtica do projeto com rela\u00e7\u00e3o a
Arquitetura
Qualidade do c\u00f3digo
Seguran\u00e7a da solu\u00e7\u00e3o
"},{"location":"lessons/03-software-documentation/slides/#objetivos-desta-atividade","title":"Objetivos desta atividade","text":"
Entender na pr\u00e1tica a necessidade de documenta\u00e7\u00e3o;
Identificar quais s\u00e3o as depend\u00eancias de um software. Isto inclui bibliotecas/frameworks usados e servi\u00e7os aos quais esse software se conecta.
Rodar sua pr\u00f3pria vers\u00e3o de um software de terceiros
"},{"location":"lessons/03-software-documentation/slides/#nao-sao-objetivos-desta-atividade","title":"N\u00e3o s\u00e3o objetivos desta atividade","text":"
Mostrar nenhum tipo de boa pr\u00e1tica de programa\u00e7\u00e3o
Modificar o software analisado
Criticar o desenvolvedor que trabalhou antes no projeto
"},{"location":"lessons/03-software-documentation/slides/#atividade-pratica-projeto-nao-documentado","title":"Atividade pr\u00e1tica: Projeto n\u00e3o documentado","text":"
Objetivo: entender como rodar um c\u00f3digo sem instru\u00e7\u00f5es.
Valida\u00e7\u00e3o: apresenta\u00e7\u00e3o do sistema funcionando.
Grupos de at\u00e9 3 pessoas
"},{"location":"lessons/03-software-documentation/slides/#tempo-restante-de-hoje-hora-inicial-da-proxima-aula-usem-handout-como-guia","title":"Tempo restante de hoje + hora inicial da pr\u00f3xima aula. Usem handout como guia","text":""},{"location":"lessons/03-software-documentation/slides/#desenvolvimento-aberto_3","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/03-software-documentation/slides/#documentacao-de-software_5","title":"Documenta\u00e7\u00e3o de software","text":""},{"location":"lessons/03-software-documentation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_3","title":"Vers\u00e3o 2023/2 - Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/04-professional-project/","title":"04 - Professional Project","text":"
There is a moment in a project's history where it is already useful for the author and other people are starting to get interested in it. Software documentation, clear install instructions and being free of errors are important to these people but are not necessarily essential to the authors, who are used to fix problem when they appear and are familiar with every aspect of the code. We will transform a project like this into a project that is ready to be used by other people and that can receive contributions from other developers.
Form a pair and select a project that one of you worked on during your degree. We will transform it into a complete project that other people can use and contribute to.
Create README with project description, screenshot and links to documentation
Organize repo with source code in a src folder and documentation in docs
Execute a linter in your project and export its output to one or more issues with names related to code quality improvements
"},{"location":"lessons/04-professional-project/slides/","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-e-linters","title":"Documenta\u00e7\u00e3o de API e linters","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-faz-o-projeto","title":"Discuss\u00e3o: o que faz o projeto?","text":""},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios","title":"Servidor de desafios","text":"
Voc\u00eas rodaram um MVP do servidor de desafios. Veja abaixo seu estado atual:
https://github.com/Insper/servidor-de-desafios
"},{"location":"lessons/04-professional-project/slides/#servidor-de-desafios_1","title":"Servidor de desafios","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-tecnologias","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (tecnologias)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-como-o-projeto-esta-organizado-codigo","title":"Discuss\u00e3o: como o projeto est\u00e1 organizado? (c\u00f3digo)","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-arquitetura-do-projeto","title":"Discuss\u00e3o: avalie a arquitetura do projeto","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-qualidade-de-codigo-do-projeto","title":"Discuss\u00e3o: avalie a qualidade de c\u00f3digo do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_1","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-avalie-a-seguranca-do-projeto","title":"Discuss\u00e3o: avalie a seguran\u00e7a do projeto.","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_2","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-esse-projeto-e-um-projeto-profissional","title":"Discuss\u00e3o: esse projeto \u00e9 um projeto \"profissional\"?","text":""},{"location":"lessons/04-professional-project/slides/#0-a-10_3","title":"0 a 10","text":""},{"location":"lessons/04-professional-project/slides/#discussao-o-que-voce-incluiria-na-documentacao-do-projeto","title":"Discuss\u00e3o: o que voc\u00ea incluiria na documenta\u00e7\u00e3o do projeto?","text":""},{"location":"lessons/04-professional-project/slides/#software-tem-historia-e-depende-de-pessoas-para-evoluir","title":"Software tem hist\u00f3ria e depende de pessoas para evoluir","text":""},{"location":"lessons/04-professional-project/slides/#codigo-vs-software-profissional","title":"C\u00f3digo vs software profissional","text":"
Os seguintes pontos transformam um c\u00f3digo que fiz para mim em algo \u00fatil para outras pessoas
Tradu\u00e7\u00f5es e internacionaliza\u00e7\u00e3o (datas)
Documenta\u00e7\u00e3o de usu\u00e1rio e de desenvolvimento
Algum processo de qualidade de software
testes automatizados
formata\u00e7\u00e3o de c\u00f3digo e estrutura de repo
Padr\u00f5es de formata\u00e7\u00e3o de c\u00f3digo
linters
PEP8
"},{"location":"lessons/04-professional-project/slides/#documentacao-de-api","title":"Documenta\u00e7\u00e3o de API","text":"
Objetivo: explicar o funcionamento das fun\u00e7\u00f5es, classes e m\u00f3dulos de um programa.
Focado em detalhes
Documenta os argumentos esperados e em quais situa\u00e7\u00f5es a fun\u00e7\u00e3o funciona
Tipicamente obtida direto do c\u00f3digo
N\u00e3o detalha como as fun\u00e7\u00f5es s\u00e3o usadas em conjunto
"},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_1","title":"Documenta\u00e7\u00e3o de API","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api_2","title":"Documenta\u00e7\u00e3o de API","text":"
Em geral podem ser plugadas em alguma ferramenta de documenta\u00e7\u00e3o de projetos.
"},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_1","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":""},{"location":"lessons/04-professional-project/slides/#padroes-de-codificacao_2","title":"Padr\u00f5es de codifica\u00e7\u00e3o","text":"
Cada projeto tem o seu
Algumas linguagens tem um estilo padr\u00e3o
Python - PEP8
Ferramentas ajudam a conferir (for\u00e7ar) um estilo espec\u00edfico
"},{"location":"lessons/04-professional-project/slides/#_1","title":"Documenta\u00e7\u00e3o de API e linters","text":"
Ajudam a manter c\u00f3digo limpo e leg\u00edvel. Podem ser plugadas no seu editor favorito.
"},{"location":"lessons/04-professional-project/slides/#execucao-obrigatoria-para-muitos-projetos-grandes","title":"Execu\u00e7\u00e3o obrigat\u00f3ria para muitos projetos grandes","text":""},{"location":"lessons/04-professional-project/slides/#atividade-pratica-projeto-profissional","title":"Atividade pr\u00e1tica: Projeto profissional","text":"
Objetivo: Transformar um c\u00f3digo perdido em um projeto
"},{"location":"lessons/04-professional-project/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/04-professional-project/slides/#documentacao-de-api-testes","title":"Documenta\u00e7\u00e3o de API + testes","text":""},{"location":"lessons/04-professional-project/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/05-python-packaging/","title":"05 - Distribui\u00e7\u00e3o de Software","text":"
Nesta aula complementaremos as \u00faltimas discuss\u00f5es criando um pequeno pacote Python instal\u00e1vel via pip. Com isto chegamos mais perto de um projeto que esteja preparado para que outras pessoas o utilizem e colaborem em seu desenvolvimento.
"},{"location":"lessons/05-python-packaging/#distribuindo-software-para-desenvolvedores-pacote-python-basico","title":"Distribuindo software para desenvolvedores: pacote Python b\u00e1sico","text":"
Nosso m\u00f3dulo se chamar\u00e1 dev_aberto e disponibilizar\u00e1 um programa execut\u00e1vel hello.py. Crie a seguinte estrutura de pastas para nosso pacote.
A descri\u00e7\u00e3o de um pacote Python \u00e9 feita usando um arquivo setup.py Veja abaixo uma vers\u00e3o inicial deste arquivo:
from setuptools import setup\n\nsetup(name='dev_aberto_seunome',\n version='0.1',\n packages=['dev_aberto']\n )\n
Exercise
Crie o arquivo acima no seu projeto, substituindo seunome por .... seu nome. Instale o seu pr\u00f3prio pacote usando
pip install .
Exercise
Em outra pasta, abra um console Python e tente importar seu m\u00f3dulo.
Exercise
Pesquise quais argumentos s\u00e3o usados para especificar o autor do pacote, as vers\u00f5es de Python e sistemas operacionais suportados. Preencha estes valores com suas informa\u00e7\u00f5es. Note que o pip leva estas informa\u00e7\u00f5es em conta e s\u00f3 instalar\u00e1 um pacote se ele estiver em um ambiente suportado.
Para adicionar pacotes que s\u00e3o automaticamente instalados quando instalamos nosso pacote precisamos identific\u00e1-los no nosso arquivo setup.py. Para adicionar uma depend\u00eancia de instala\u00e7\u00e3o basta adicionar o seguinte argumento:
Muitos softwares usam tamb\u00e9m um arquivo requirements.txt para listar todas as depend\u00eancias do software de modo a obter uma instala\u00e7\u00e3o id\u00eantica \u00e0 do desenvolvedor. Isto \u00e9 importante para uniformizar os ambientes de desenvolvimento. Ou seja, este arquivo nunca ser\u00e1 usado por usu\u00e1rios finais.
Exercise
Crie um requirements.txt para seu projeto com as mesmas depend\u00eancias listadas no seu setup.py.
Al\u00e9m de instalar o nosso m\u00f3dulo para uso via import desejamos tamb\u00e9m disponibilizar o arquivo hello.py como um execut\u00e1vel para todo o sistema. Isto pode ser feito adicionando a seguinte linha no nosso setup.py indicando que scripts/hello.py dever\u00e1 ser instalado como um execut\u00e1vel.
...\n scripts=['scripts/hello.py'],\n ...\n
N\u00e3o se esque\u00e7a de adicionar a seguinte linha no topo de seu arquivo para que ele possa ser executado diretamente do shell:
#!/usr/bin/env python3\n
No Windows \u00e9 criado um execut\u00e1vel que chama nosso script, de modo que as chamadas do execut\u00e1vel continuar\u00e3o funcionando normalmente. Note que isto n\u00e3o cria menus em nenhum tipo de interface gr\u00e1fica.
"},{"location":"lessons/05-python-packaging/#criando-arquivos-de-distribuicao","title":"Criando arquivos de distribui\u00e7\u00e3o","text":"
Dois tipos de arquivos de distribui\u00e7\u00e3o podem ser usados:
sdist: \u00e9 um arquivo contendo os fontes do projeto, incluindo arquivos adicionais especificados usando o argumento data_files. Usado se seu projeto for Python-puro.
wheel: \u00e9 um formato pr\u00e9-compilado e espec\u00edfico para cada plataforma. Mais usado quando o projeto cont\u00e9m extens\u00f5es em C.
A cria\u00e7\u00e3o de um arquivo de distribui\u00e7\u00e3o de fontes \u00e9 bem simples:
$ python setup.py sdist
A instala\u00e7\u00e3o deste pacote pode ser feita via pip.
"},{"location":"lessons/05-python-packaging/#envio-para-o-pypi","title":"Envio para o PyPI","text":"
Vamos agora enviar nosso pacote para o Python Package Index para que ele possa ser instalado diretamente via pip. Para n\u00e3o poluir o reposit\u00f3rio com pacotes tempor\u00e1rios e de teste, podemos usar o TestPyPI. Toda sua infraestrutura \u00e9 igual ao oficial, mas ele \u00e9 limpo de maneira regular.
Visite https://test.pypi.org/account/register/ e registre-se no TestPyPI.
Ap\u00f3s o registro, usaremos o pacote twine (instal\u00e1vel via pip) para fazer o upload:
"},{"location":"lessons/05-python-packaging/#distribuindo-software-para-usuarios-finais","title":"Distribuindo software para usu\u00e1rios finais","text":"
Vamos agora trabalhar (em duplas) no Servidor de Desafios novamente. Seu trabalho ser\u00e1 criar um Dockerfile que roda o software de maneira \"completa\". Ou seja, o script de cria\u00e7\u00e3o do container dever\u00e1
instalar todas as depend\u00eancias do sistema
criar a base de dados, se necess\u00e1rio
adicionar os usu\u00e1rios presentes no arquivo users.csv, se necess\u00e1rio
executar o servidor e serv\u00ed-lo na porta 8080 do host
manter os dados adicionados ao reiniciar o container
Algumas refer\u00eancias que podem ser \u00fateis:
https://docker-curriculum.com/
https://docs.docker.com/get-started/
"},{"location":"lessons/06-localization-translation/","title":"06 - Localiza\u00e7\u00e3o e Tradu\u00e7\u00e3o","text":"
Na parte expositiva da aula tivemos uma introdu\u00e7\u00e3o aos problemas de Internacionaliza\u00e7\u00e3o (i18n) e Localiza\u00e7\u00e3o (L10N). Neste roteiro iremos praticar o uso destas t\u00e9cnicas em uma aplica\u00e7\u00e3o linha de comando de exemplo simples.
Em ambos exemplos vamos trabalhar com o m\u00f3dulo Babel, que \u00e9 feito para facilitar a tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de aplica\u00e7\u00f5es feitas em Python. Outras linguagens de programa\u00e7\u00e3o possuem bibliotecas similares que seguem a mesma sequ\u00eancia de comandos e usam os mesmos tipos de arquivos.
$ pip install Babel
Sistemas POSIX suportam a determina\u00e7\u00e3o do locale utilizado por meio da vari\u00e1vel de ambiente LANGUAGE, que pode ser modificada para cada execu\u00e7\u00e3o de um programa. O formato padr\u00e3o usado \u00e9 <lingua>_<pais>.<codificacao>. Para portugu\u00eas do Brasil usando codifica\u00e7\u00e3o UTF8 usamos o locale pt_BR.utf8. Rodando o seguinte comando as mensagens de ajuda do ls devem aparecer em ingl\u00eas.
$ LANGUAGE=en_US.utf8 ls --help
J\u00e1 executando o comando abaixo elas devem aparecer em portugu\u00eas.
$ LANGUAGE=pt_BR.utf8 ls --help
De maneira mais geral, existe uma s\u00e9rie de vari\u00e1veis LC_* que controlam qual locale \u00e9 usado para determinado tipo de dados. Veremos a seguir como usar LC_TIME e LC_NUMERIC para controlar como datas e n\u00fameros s\u00e3o exibidos e LANGUAGE para definir a lingua de exibi\u00e7\u00e3o de um programa.
"},{"location":"lessons/06-localization-translation/#localizando-um-programa-em-python","title":"Localizando um programa em Python","text":"
Vamos trabalhar com uma aplica\u00e7\u00e3o de linha de comando que nada mais faz que imprimir alguns dados simples como data em extenso, um n\u00famero fracion\u00e1rio grande e uma mensagem pr\u00e9-definida. O c\u00f3digo completo (arquivo cli.py) est\u00e1 abaixo.
from datetime import date\n\nif __name__ == '__main__':\n today = date.today()\n print(today)\n\n number = 240000000000.32212\n print(number)\n\n name = input('Input your name: ')\n print('Hello {}'.format(name))\n
Uma sa\u00edda poss\u00edvel seria
2018-08-28\n240000000000.3221\nInput your name: Igor\nHello Igor\n
Como j\u00e1 visto em aula, este programa re\u00fane tr\u00eas das principais sa\u00eddas que precisam ser formatadas: datas, n\u00fameros fracion\u00e1rios e mensagens para o usu\u00e1rio.
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_TIME. O m\u00f3dulo babel.dates j\u00e1 possui diversas fun\u00e7\u00f5es que automaticamente a utilizam para fazer a localiza\u00e7\u00e3o de vari\u00e1veis do tipo Date (usando a fun\u00e7\u00e3o format_date) ou DateTime (usando format_datetime).
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar a data por extenso (ou seja, 31 de agosto de 2021).
Exercise
O qu\u00ea acontece quando definimos a vari\u00e1vel de ambiente LC_TIME=en_US.utf8 e rodamos o programa? E se usamos LC_TIME=pt_BR.utf8?
A formata\u00e7\u00e3o de datas \u00e9 governada para vari\u00e1vel LC_NUMERIC. O m\u00f3dulo babel.numbers possui a fun\u00e7\u00e3o format_number que formata um n\u00famero de acordo com esta configura\u00e7\u00e3o.
Exercise
Pesquise como usar estas fun\u00e7\u00f5es e utilize-as no seu programa para localizar o n\u00famero fracion\u00e1rio mostrado.
Exercise
Teste seu programa com LC_NUMERIC=en_US.utf8 e LC_NUMERIC=pt_BR.utf8. Os efeitos s\u00e3o os esperados?s
A parte final consiste em criar tradu\u00e7\u00f5es das duas strings presentes no texto. A linguagem usada \u00e9 definida pela vari\u00e1vel LANGUAGE, que pode ser definida separadamente para cada processo. Um dos pontos mais importantes \u00e9 marcar quais strings dever\u00e3o ser traduzidas para que uma equipe de tradutores n\u00e3o precise mexer no c\u00f3digo. O m\u00f3dulo gettext do Python j\u00e1 prov\u00ea suporte a esta funcionalidade, o Babel apenas fornece um conjunto de ferramentas que facilita seu uso.
A implanta\u00e7\u00e3o do framework de tradu\u00e7\u00e3o \u00e9 feita em quatro passos:
Marca\u00e7\u00e3o das strings a serem traduzidas
Extra\u00e7\u00e3o destas strings do c\u00f3digo em um arquivo modelo .pot
Cria\u00e7\u00e3o de tradu\u00e7\u00f5es .po a partir do modelo criado no passo anterior
Compila\u00e7\u00e3o das strings traduzidas em um arquivo bin\u00e1rio .mo
No arquivo principal de nossa aplica\u00e7\u00e3o podemos \"instalar\" o framework de tradu\u00e7\u00e3o e marcar todas nossas strings a serem traduzidas com a fun\u00e7\u00e3o _(). A instala\u00e7\u00e3o \u00e9 feita pelo seguinte trecho de c\u00f3digo.
import gettext\ngettext.bindtextdomain('cli', 'locale')\ngettext.textdomain('cli')\n_ = gettext.gettext\n\n# cli \u00e9 o nome do arquivo em que guardamos nossas tradu\u00e7\u00f5es\n# localedir \u00e9 o caminho onde est\u00e3o armazenadas as tradu\u00e7\u00f5es. Pode ser um caminho relativo. \n
Devemos ent\u00e3o marcar todas as strings para serem traduzidas com _(). Podemos usar _() em qualquer arquivo do projeto, mesmo que a instala\u00e7\u00e3o tenha sido feita somente no arquivo principal.
print(_(\"Hello!\"))\n
Os passos seguintes s\u00e3o feitos com aux\u00edlio do Babel, que efetivamente analisa nosso c\u00f3digo Python e extrai as strings para tradu\u00e7\u00e3o. A cria\u00e7\u00e3o do arquivo modelo de tradu\u00e7\u00e3o a partir dos arquivos do diret\u00f3rio atual \u00e9 feita com o seguinte comando.
$ pybabel extract . -o cli-model.pot
Criamos ent\u00e3o uma nova tradu\u00e7\u00e3o usando o seguinte comando. A op\u00e7\u00e3o -D indica o nome do arquivo em que as tradu\u00e7\u00f5es ser\u00e3o guardadas (usado em gettext.install). A op\u00e7\u00e3o -l indica o locale da tradu\u00e7\u00e3o. A op\u00e7\u00e3o -d indica o localedir usado em gettext.install.
Devemos ent\u00e3o editar o arquivo criado em locale/pt_BR/LC_MESSAGES/cli.po. Ser\u00e3o apresentados (ap\u00f3s algumas linhas de coment\u00e1rios) pares de linhas como as seguintes. O primeiro valor msgid \u00e9 a string a ser traduzida e o segundo msgstr \u00e9 a tradu\u00e7\u00e3o no locale pt_BR (pois o arquivo est\u00e1 na pasta pt_BR do localedir).
msgid \"Input your name: \"\nmsgstr \"\"\n
Apesar de ser poss\u00edvel fazer tudo diretamente no arquivo de texto, \u00e9 mais conveniente usar softwares como o poedit ou este editor online(https://localise.biz/free/poeditor).
Com as strings traduzidas vamos finalmente compilar nossos resultados. Isto \u00e9 feito para que n\u00e3o seja poss\u00edvel mexer nos arquivos de tradu\u00e7\u00e3o em uma vers\u00e3o Release do programa.
$ pybabel compile -D cli -l pt_BR -d locale
Isto gerar\u00e1 os arquivos .mo correspondentes a ao locale pt_BR. S\u00e3o estes os arquivos carregados durante a execu\u00e7\u00e3o do programa.
Podemos definir a vari\u00e1vel LANGUAGE para modificar a lingua de um programa (como visto anteriormente com ls). Execute seu programa diretamente e depois setando LANGUAGE=pt_BR.utf8. Os resultados foram os esperados?
Modifique o exerc\u00edcio da aula passada (pacote python) para suportar datas e mensagens em Ingl\u00eas e Portugu\u00eas. Fa\u00e7a a entrega de sua atividade adicionando a skill Tradu\u00e7\u00e3o b\u00e1sica segundo o modelo abaixo.
Objetivo: Aplicou ferramentas de localiza\u00e7\u00e3o para traduzir um programa simples em linha de comando.
"},{"location":"lessons/06-localization-translation/slides/","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/06-localization-translation/slides/#traducao-de-software","title":"Tradu\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#qual-a-diferenca-de-internacionalizacao-e-localizacao","title":"Qual a diferen\u00e7a de internacionaliza\u00e7\u00e3o e localiza\u00e7\u00e3o?","text":""},{"location":"lessons/06-localization-translation/slides/#internacionalizacao-i18n","title":"Internacionaliza\u00e7\u00e3o (I18N)","text":"
Consiste em traduzir a interface de usu\u00e1rio de um software para outros idiomas.
Sistema Operacional guarda configura\u00e7\u00f5es de idioma e as disponibiliza para aplica\u00e7\u00f5es
de acordo com as prefer\u00eancias de um usu\u00e1rio e relativos a sua cultura.
"},{"location":"lessons/06-localization-translation/slides/#i18n-e-l10n","title":"I18N e L10N","text":"
Precisam ser
independentes:
idioma ingl\u00eas e datas no formato brasileiro
configur\u00e1veis
posso precisar trocar entre l\u00ednguas e entre formatos
"},{"location":"lessons/06-localization-translation/slides/#o-suporte-a-l10n-e-i18n-implica-modificar-codigo-fonte","title":"O suporte a L10N e I18N implica modificar c\u00f3digo fonte.","text":""},{"location":"lessons/06-localization-translation/slides/#locales","title":"Locales","text":"
Um locale \u00e9 uma tripla
"},{"location":"lessons/06-localization-translation/slides/#_1","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
<lingua>_<pais>.<codificacao>\n
"},{"location":"lessons/06-localization-translation/slides/#_2","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
que representa configura\u00e7\u00f5es de I18N e/ou L10N para uma determinada cultura.
"},{"location":"lessons/06-localization-translation/slides/#posso-usar-locales-diferentes-para-a-lingua-da-interface-de-usuario-e-para-mostrar-datas","title":"Posso usar locales diferentes para a l\u00edngua da interface de usu\u00e1rio e para mostrar datas.","text":""},{"location":"lessons/06-localization-translation/slides/#configuracoes-possiveis-linux","title":"Configura\u00e7\u00f5es poss\u00edveis (Linux)","text":"
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"lessons/06-localization-translation/slides/#implementando-suporte-a-l10n","title":"Implementando suporte a L10N","text":"
Baixar uma biblioteca de Localiza\u00e7\u00e3o
Encontrar todas as exibi\u00e7\u00f5es de n\u00fameros, datas, etc
Pr\u00e9-process\u00e1-las usando fun\u00e7\u00f5es da biblioteca
"},{"location":"lessons/06-localization-translation/slides/#_3","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
# Antes \nprint('Numero:', 10.5) \n# Depois\nprint('Numero', format_number(10.5))\n
"},{"location":"lessons/06-localization-translation/slides/#_4","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
N\u00e3o \u00e9 complicado, mas \u00e9 trabalhoso
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n","title":"Suporte a I18N","text":"
Envolve 4 etapas:
Marcar todas strings que devem ser traduzidas
Extra\u00ed-las do c\u00f3digo fonte
Criar um arquivo de tradu\u00e7\u00f5es para cada locale suportado
Empacotar as tradu\u00e7\u00f5es junto com o programa
"},{"location":"lessons/06-localization-translation/slides/#_5","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":"
\u00c9 um pouco mais complicado, mas pode ser integrado ao processo de compila\u00e7\u00e3o de um programa.
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix","title":"Suporte a I18N (POSIX)","text":"
Sistemas POSIX suportam determina\u00e7\u00e3o de lingua e locale usando vari\u00e1veis de ambiente.
LANG para l\u00edngua
LC_TIME para data
LC_NUMERIC para n\u00fameros
Um locale sempre \u00e9 expresso no formato
<lingua>_<pais>.<codificacao>\n
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-posix_1","title":"Suporte a I18N (POSIX)","text":"
O comando locale mostra todas as op\u00e7\u00f5es dispon\u00edveis:
# sa\u00edda do comando locale\nLANG=en_US.UTF-8\nLC_CTYPE=\"en_US.UTF-8\"\nLC_NUMERIC=pt_BR.UTF-8\nLC_TIME=pt_BR.UTF-8\nLC_COLLATE=pt_BR.UTF-8\nLC_MONETARY=pt_BR.UTF-8\nLC_MESSAGES=\"en_US.UTF-8\"\nLC_PAPER=pt_BR.UTF-8\nLC_NAME=pt_BR.UTF-8\nLC_ADDRESS=pt_BR.UTF-8\nLC_TELEPHONE=pt_BR.UTF-8\nLC_MEASUREMENT=pt_BR.UTF-8\nLC_IDENTIFICATION=pt_BR.UTF-8\n
"},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-web","title":"Suporte a I18N (Web)","text":"
Existem diversas maneiras de determinar um bom locale em sistemas Web:
Cabe\u00e7alho HTTP Accept-Language inclui as linguagens de exibi\u00e7\u00e3o suportadas pelo browser do visitante.
Geolocaliza\u00e7\u00e3o via IP
Prefer\u00eancia armazenada em banco de dados
"},{"location":"lessons/06-localization-translation/slides/#_6","title":"Tradu\u00e7\u00e3o e localiza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#web-e-desktop-usam-as-mesmas-tecnologias-l10n-e-i18n","title":"Web e desktop usam as mesmas tecnologias (l10n e i18n)","text":""},{"location":"lessons/06-localization-translation/slides/#suporte-a-i18n-em-python","title":"Suporte a I18N (em Python)","text":"
Objetivo: usar o m\u00f3dulo Babel para traduzir uma aplica\u00e7\u00e3o do terminal.
"},{"location":"lessons/06-localization-translation/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/06-localization-translation/slides/#localizacao-e-internacionalizacao-de-software_1","title":"Localiza\u00e7\u00e3o e internacionaliza\u00e7\u00e3o de software","text":""},{"location":"lessons/06-localization-translation/slides/#versao-20232-igor-montagner-amp105amp103amp111amp114amp115amp109amp49amp64amp105amp110amp115amp112amp101amp114amp46amp101amp100amp117amp46amp98amp114_1","title":"Vers\u00e3o 2023/2: Igor Montagner (igorsm1@insper.edu.br)","text":""},{"location":"lessons/07-code-quality/","title":"07 - Code quality","text":"
In Lesson 04 - Professional Project we created a repo and website for an old project developed during the course. Now we are going to improve its quality by fixing the issues each group found using a linter tool.
Warning
We won't work on our own projects this time! Select a project from the discussion page and comment on the issue you'd like to do. Every project must have at least one issue with external participation.
We will now add (some) automated testing to one of the projects from the discussion page. Again, our objective in this activity is to get used to build and modify different projects.
Warning
You'll need to select a different project from the last Lesson 07 - Code Quality
Ideia: dada uma fun\u00e7\u00e3o, verificar se ela devolve o valor esperado para um certo conjunto de par\u00e2metros.
Testa as fun\u00e7\u00f5es de maneira isolada
Cobertura: porcentagem das linhas de c\u00f3digo que \u00e9 executada durante os testes de unidade.
Serve como documenta\u00e7\u00e3o da fun\u00e7\u00e3o
"},{"location":"lessons/08-automated-testing/slides/#testes-unitarios-pytest","title":"Testes unit\u00e1rios - pytest","text":""},{"location":"lessons/08-automated-testing/slides/#testes-de-integracao","title":"Testes de integra\u00e7\u00e3o","text":"
Ideia: dados um conjunto de classes com interdepend\u00eancias, verificar se elas funcionam bem em conjunto.
Testa intera\u00e7\u00e3o entre em objetos
Possibilidade de criar mocks, que s\u00e3o objetos falsos feitos para simular a intera\u00e7\u00e3o entre v\u00e1rios objetos.
"},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario","title":"Testes de interface de usu\u00e1rio","text":"
Ideia: simula a\u00e7\u00f5es do usu\u00e1rio (cliques, entrada de dados, etc) e confere se a sa\u00edda esperada \u00e9 mostrada na tela
Menos espec\u00edfico poss\u00edvel
Mais fiel ao uso real de um usu\u00e1rio
"},{"location":"lessons/08-automated-testing/slides/#testes-de-interface-de-usuario_1","title":"Testes de interface de usu\u00e1rio","text":""},{"location":"lessons/08-automated-testing/slides/#selenium","title":"Selenium","text":"
Permite fazer scripts que interagem com uma p\u00e1gina web, realizando entrada de dados, rolagem de tela e cliques. Cada assert pode ser feito com o conte\u00fado de um objeto da p\u00e1gina.
"},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#_1","title":"Testes automatizados","text":""},{"location":"lessons/08-automated-testing/slides/#o-que-eu-preciso-testar_1","title":"O qu\u00ea eu preciso testar?","text":""},{"location":"lessons/08-automated-testing/slides/#ninguem-sabe","title":"Ningu\u00e9m sabe....","text":""},{"location":"lessons/08-automated-testing/slides/#atividade-pratica-testado-e-aprovado","title":"Atividade pr\u00e1tica: Testado e aprovado","text":"
Objetivo: Primeira experi\u00eancia com testes automatizado de c\u00f3digo.
"},{"location":"lessons/09-cultura-livre/","title":"09 - Trabalho sobre cultura livre","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"lessons/09-cultura-livre/slides/","title":"Cultura de software livre","text":""},{"location":"lessons/09-cultura-livre/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/09-cultura-livre/slides/#cultura-de-software-livre","title":"Cultura de software livre","text":""},{"location":"lessons/09-cultura-livre/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"lessons/09-cultura-livre/slides/#atividade","title":"Atividade","text":"
Cultura livre: fazer uma pesquisa profunda e apresentar semin\u00e1rio sobre licen\u00e7as de software e casos recentes em que licen\u00e7as tem papel de destaque
"},{"location":"lessons/09-cultura-livre/slides/#sua-apresentacao-precisa-ter-alguma-forma-de-interacao-com-a-audiencia","title":"Sua apresenta\u00e7\u00e3o precisa ter alguma forma de intera\u00e7\u00e3o com a audi\u00eancia","text":"
debate
painel com vota\u00e7\u00f5es
"},{"location":"lessons/09-cultura-livre/slides/#atividade-sugestoes-de-temas","title":"Atividade - sugest\u00f5es de temas","text":"
The new open-source economics (Yochai Benkler, 2005). O que mudou de 2005 para 2022?
There is no \"Linux\" platform.
Telemetria \u00e9 \"\u00e9tico\"? (exemplo VSCode e outros).
GitHub CoPilot \u00e9 \"\u00e9tico\"? Respeita licen\u00e7as de software?
Regulamenta\u00e7\u00f5es recentes na Europa sobre durabilidade de smartphones (bateria, right to repair, etc).
Maintainer burnout.
"},{"location":"lessons/09-cultura-livre/slides/#atividade-datas-de-apresentacao","title":"Atividade - datas de apresenta\u00e7\u00e3o","text":"
17/11 - 2 trabalho
22/11 - 2 trabalhos
24/11 - 2 trabalhos
29/11 - 2 trabalhos
"},{"location":"lessons/09-cultura-livre/slides/#45-minutos-de-apresentacaoatividade-10-minutos-para-perguntas","title":"45 minutos de apresenta\u00e7\u00e3o/atividade + 10 minutos para perguntas","text":""},{"location":"lessons/09-cultura-livre/slides/#hoje","title":"Hoje","text":"
Defini\u00e7\u00e3o de temas e datas de apresenta\u00e7\u00e3o
Pr\u00e9via de 5 minutos do seu tema na pr\u00f3xima aula
"},{"location":"lessons/09-cultura-livre/slides/#registrar-seu-grupo-escolha-de-tema-e-dia-de-apresentacao-na-issue-665","title":"Registrar seu grupo, escolha de tema e dia de apresenta\u00e7\u00e3o na issue #665","text":""},{"location":"lessons/09-licencas/","title":"09 - Licen\u00e7as de Software","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica. As discuss\u00f5es s\u00e3o feitas durante a aula expositiva.
"},{"location":"lessons/09-licencas/slides/","title":"Licen\u00e7as de software","text":""},{"location":"lessons/09-licencas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/09-licencas/slides/#licencas-de-software","title":"Licen\u00e7as de Software","text":""},{"location":"lessons/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"lessons/09-licencas/slides/#ate-agora","title":"At\u00e9 agora","text":"
Ferramentas de colabora\u00e7\u00e3o
Modifica\u00e7\u00f5es de c\u00f3digo
Tradu\u00e7\u00e3o de UI e documenta\u00e7\u00e3o
Distribui\u00e7ao de software
Teste de software
### Conte\u00fado t\u00e9cnico: ferramentas, fluxos de trabalho, etc
"},{"location":"lessons/09-licencas/slides/#hoje","title":"Hoje","text":""},{"location":"lessons/09-licencas/slides/#licencas-de-software_1","title":"Licen\u00e7as de software","text":""},{"location":"lessons/09-licencas/slides/#licencas-de-software_2","title":"Licen\u00e7as de software","text":"
Governam a distribui\u00e7\u00e3o de um software
Cess\u00e3o de direitos do autor para outras pessoas
Listam quais permiss\u00f5es um usu\u00e1rio (n\u00e3o) tem
"},{"location":"lessons/09-licencas/slides/#disclaimer","title":"Disclaimer","text":""},{"location":"lessons/09-licencas/slides/#eu-nao-sou-especialista-em-direito-autoral-brasileiro-toda-informacao-disponibilizada-foi-fruto-de-pesquisa-e-nao-constitui-aconselhamento-legal","title":"Eu n\u00e3o sou especialista em direito autoral brasileiro. Toda informa\u00e7\u00e3o disponibilizada foi fruto de pesquisa e n\u00e3o constitui aconselhamento legal.","text":""},{"location":"lessons/09-licencas/slides/#distribuicao-de-software","title":"Distribui\u00e7\u00e3o de software","text":"
Escrever software \u00e9 considerado um trabalho intelectual, estando ent\u00e3o sujeito \u00e0s leis de direitos autorais.
Essas leis s\u00e3o espec\u00edficas de cada pa\u00eds
Autoria vs explora\u00e7\u00e3o econ\u00f4mica
Engloba tanto c\u00f3digo fonte como bin\u00e1rios
N\u00e3o \u00e9 necess\u00e1rio registro. N\u00e3o vale para ideias.
Direito moral:
assegura a autoria da obra ao autor original
integridade da obra
instransfer\u00edvel e irrevog\u00e1vel
Direito patrimonial:
explora\u00e7\u00e3o econ\u00f4mica da obra.
licenciado ou cedido
copyright em ingl\u00eas
"},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante","title":"Por que isto \u00e9 importante?","text":"
O dono dos direitos autorais (patrimoniais) pode controlar:
Distribui\u00e7\u00e3o, parcial ou total;
Cria\u00e7\u00e3o de obras derivadas
Reprodu\u00e7\u00e3o (execu\u00e7\u00e3o)
"},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_1","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"lessons/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-durante-o-expediente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware durante o expediente.","text":""},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_2","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"lessons/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-nao-relacionado","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto n\u00e3o relacionado.","text":""},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_3","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"lessons/09-licencas/slides/#um-funcionario-trabalhando-para-uma-empresa-produz-sotfware-fora-do-expediente-e-decide-lancar-um-produto-concorrente","title":"Um funcion\u00e1rio trabalhando para uma empresa produz sotfware fora do expediente e decide lan\u00e7ar um produto concorrente.","text":""},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_4","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"lessons/09-licencas/slides/#um-programador-faz-um-freelance-e-entrega-um-projeto-para-uma-empresa-ele-pode-reutilzar-parte-do-codigo-em-outros-projetos-para-outras-empresas","title":"Um programador faz um freelance e entrega um projeto para uma empresa. Ele pode reutilzar parte do c\u00f3digo em outros projetos (para outras empresas)?","text":""},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_5","title":"Por que isto \u00e9 importante?","text":"
De quem \u00e9 o c\u00f3digo nos seguintes cen\u00e1rios?
"},{"location":"lessons/09-licencas/slides/#um-prestador-de-servicos-contratado-como-empresa-via-cnpj-participa-de-um-projeto-terceirizado-junto-com-outros-pjs","title":"Um prestador de servi\u00e7os (contratado como empresa via CNPJ) participa de um projeto terceirizado, junto com outros PJs.","text":""},{"location":"lessons/09-licencas/slides/#por-que-isto-e-importante_6","title":"Por que isto \u00e9 importante?","text":"
Nenhum dos casos acima tem respostas fixas. Tudo depende de um monte de fatores jur\u00eddicos e do qu\u00ea cada um assinou. Alguns guias interessantes:
Association of Software Professionals
Start-se
Legal Nature - EULA
"},{"location":"lessons/09-licencas/slides/#contexto-1-propriedade-intelectual-e-work-for-hire","title":"Contexto 1: Propriedade intelectual e work-for-hire","text":"
Contexto brasilero: \"Pela nossa lei de software, a n\u00e3o ser que expressamente dito o contr\u00e1rio, aquele que contrata o desenvolvimento \u00e9 titular original do software resultante\" [1]
Contexto americano: work-for-hire determina que software feito sob encomenda pertence a quem contratou o servi\u00e7o [2]
Fontes 1 2
"},{"location":"lessons/09-licencas/slides/#contexto-2-projetos-open-source","title":"Contexto 2: projetos open source","text":"
Contributor License Agreement \u00e9 um documento de cess\u00e3o de copyright (direitos de explora\u00e7\u00e3o comercial).
D\u00e1 ao projeto uma licen\u00e7a n\u00e3o exclusiva (normalmente) e irrevog\u00e1vel para o projeto explorar sua contribui\u00e7\u00e3o
Mant\u00e9m autoria
Isenta o projeto de responsabilidades sobre suas contribui\u00e7\u00f5es
"},{"location":"lessons/09-licencas/slides/#contexto-3-comercializacao-de-software","title":"Contexto 3: comercializa\u00e7\u00e3o de software","text":"
End User License Agreement (EULA): Termo usado para aquelas condi\u00e7\u00f5es que (n\u00e3o lemos) aceitamos ao instalar software propriet\u00e1rio ou nos registramos em um site/servi\u00e7o.
"},{"location":"lessons/09-licencas/slides/#_1","title":"Licen\u00e7as de software","text":"
Ignorado por aproximadamente 90% dos usu\u00e1rios (fonte)
"},{"location":"lessons/09-licencas/slides/#end-user-license-agreement","title":"End User License Agreement","text":"
E por algumas empresas... Fonte
"},{"location":"lessons/09-licencas/slides/#end-user-license-agreement_1","title":"End User License Agreement","text":"
Restri\u00e7\u00f5es t\u00edpicas encontradas em EULAs:
Software \u00e9 licenciado, n\u00e3o vendido;
\u00c9 proibido engenharia reversa
N\u00e3o pode modificar ou explorar limita\u00e7\u00f5es / vulnerabilidades
Isenta responsabilidades pelo (mau) uso do software
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia","title":"Um pouco de hist\u00f3ria","text":""},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_1","title":"Um pouco de hist\u00f3ria","text":"
Richard Stallman fez um interpretador Lisp (MIT ~ 1985)
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_2","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_3","title":"Um pouco de hist\u00f3ria","text":"
Uma empresa chamada Symbolics licenciou o LISP do MIT para rodar em m\u00e1quinas como a acima
Fez modifica\u00e7\u00f5es no software
Deu um jeito de n\u00e3o devolv\u00ea-las para o MIT....
E eliminou a competi\u00e7\u00e3o...
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_4","title":"Um pouco de hist\u00f3ria","text":"
Stallman ficou #$@#$@#$@
e criou a primeira licen\u00e7a de software livre: Emacs General Public License
Toda c\u00f3pia do programa dever\u00e1 estar acompanhada do c\u00f3digo fonte;
Se uma modifica\u00e7\u00e3o do software for distribu\u00edda, ela dever\u00e1 estar sujeita aos mesmos termos do software original;
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia-1985","title":"Um pouco de hist\u00f3ria - 1985","text":"
GNU Manifesto: descrevia um esfor\u00e7o em criar um sistema completamente livre cujo destino estivesse nas m\u00e3os dos usu\u00e1rios
GNU/Hurd: todas as ferramentas de linha de comando das distribui\u00e7\u00f5es modernas vieram desse projeto
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia-1990","title":"Um pouco de hist\u00f3ria - 1990","text":"
Linus Torvalds tinha um kernel experimental \"pronto\".
Liberava uma vers\u00e3o nova toda semana;
Recebia contribui\u00e7\u00f5es de outros interessados.
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_5","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Free Software, Free Society: Selected Essays of Richard M. Stallman.
"},{"location":"lessons/09-licencas/slides/#um-pouco-de-historia_6","title":"Um pouco de hist\u00f3ria","text":"
Leitura complementar: Just for Fun: The Story of an Accidental Revolutionary, Linus Torvalds and David Diamond
"},{"location":"lessons/09-licencas/slides/#licencas-de-software-livre","title":"Licen\u00e7as de software (livre)","text":"
Criadas pela Free Software Foundation visando garantir 4 liberdades para um usu\u00e1rio ao usar um software:
Execu\u00e7\u00e3o sem restri\u00e7\u00f5es
Estudo e modifica\u00e7\u00e3o do software;
Redistribuir c\u00f3pias;
Redistribuir c\u00f3pias das suas modifica\u00e7\u00f5es.
Distribuir os fontes \u00e9 pr\u00e9-requisito dos itens 1 e 3!
Chamadas tamb\u00e9m de rec\u00edprocas.
"},{"location":"lessons/09-licencas/slides/#licencas-de-software-livre_1","title":"Licen\u00e7as de software (livre)","text":""},{"location":"lessons/09-licencas/slides/#licencas-de-software-livre-reciprocas","title":"Licen\u00e7as de software livre - rec\u00edprocas","text":"
Copyleft: S\u00edmbolo \u00e9 o contr\u00e1rio do copyright, cujo objetivo seria restringir os usu\u00e1rios
Fundada para difundir um discurso menos anti-comercial e ideol\u00f3gico
Tamb\u00e9m difunde benef\u00edcios \"pragm\u00e1ticos\" do uso de software \"de c\u00f3digo aberto\"
Free causa confus\u00e3o em ingl\u00eas
Gr\u00e1tis (free as in beer)
Livre (free as in freedom)
Fundada por Eric Raymond e Bruce Perens
"},{"location":"lessons/09-licencas/slides/#licencas-de-software-de-codigo-aberto","title":"Licen\u00e7as de software de c\u00f3digo aberto","text":"
Mais associadas a Open Source Iniciative, s\u00e3o consideradas menos \"ideol\u00f3gicas\".
Muitas vezes chamadas de permissivas;
Normalmente n\u00e3o garatem a liberdade 3;
Podem fazer outras pequenas exig\u00eancias ou restri\u00e7\u00f5es
Exemplos: MIT, BSD
Permitem a distribui\u00e7\u00e3o de software com partes propriet\u00e1rias
Permitem a venda e completo rebranding do software sem nenhuma contribui\u00e7\u00e3o para o autor original.
"},{"location":"lessons/09-licencas/slides/#licencas-qual-usar","title":"Licen\u00e7as: qual usar?","text":"
https://choosealicense.com/licenses/
"},{"location":"lessons/09-licencas/slides/#desafio-de-traducao","title":"Desafio de tradu\u00e7\u00e3o","text":""},{"location":"lessons/09-licencas/slides/#skill-traducao-aceita-5xp-ao-menos-40-string-traduzidas","title":"Skill \"Tradu\u00e7\u00e3o aceita!\" (5XP): Ao menos 40 string traduzidas","text":""},{"location":"lessons/09-licencas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/09-licencas/slides/#licencas-de-software_3","title":"Licen\u00e7as de Software","text":""},{"location":"lessons/09-licencas/slides/#versao-20222-fabricio-barth-fabriciojbinsperedubr_1","title":"Vers\u00e3o 2022/2: Fabr\u00edcio Barth ( fabriciojb@insper.edu.br )","text":""},{"location":"lessons/09-releases/","title":"09 - Releases","text":"
Creating a release is the final step to distribute software to users. It involves \"freezing\" the repository in a specific commit and attaching binaries and other ready to use assets. Users should be able to grab one of the releases and use it direclty without having to setup a dev environment.
The skill New Release involves the creation of a release for your own project used in the last lessons.
PyInstaller for creating installers/binaries using Python
The following checks will be used to verify if this skill is completed:
there is a release in the repo's Releases tab containing the description of the release and the source code
the release includes either an installer or a direccly executable file in one of the following formats:
Linux: .deb, .rpm for installers,AppImage for executables
Windows: .msi installer or single .exe (plus asses, if necessary)
Other: if the project is an extension, plugin or any other type of stoftware, the release must include a redistributable package in the official format
"},{"location":"lessons/10-first-contribution/","title":"10 - Minha primeira contribui\u00e7\u00e3o","text":""},{"location":"lessons/10-first-contribution/slides/","title":"Explorando seu projeto","text":""},{"location":"lessons/10-first-contribution/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/10-first-contribution/slides/#_1","title":"Explorando seu projeto","text":""},{"location":"lessons/10-first-contribution/slides/#contribuicao-de-codigo","title":"Contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"lessons/10-first-contribution/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/10-first-contribution/slides/#ate-agora","title":"At\u00e9 agora","text":"
Ferramentas de colabora\u00e7\u00e3o
Qualidade de c\u00f3digo e ferramentas para qualidade de projeto
"},{"location":"lessons/10-first-contribution/slides/#etapa-individual-outubro","title":"Etapa individual (Outubro)","text":""},{"location":"lessons/10-first-contribution/slides/#aprofundar-habilidades-desenvolvidas-em-grupo","title":"Aprofundar habilidades desenvolvidas em grupo","text":"
proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
exercitar autonomia*- e **independ\u00eancia
"},{"location":"lessons/10-first-contribution/slides/#inicio-em-0410","title":"In\u00edcio em 04/10","text":""},{"location":"lessons/10-first-contribution/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":"
Bons projetos usam tags para facilitar a recep\u00e7\u00e3o de novatos
good-first-issue
newcomers
low effort
difficulty novice
easy
"},{"location":"lessons/10-first-contribution/slides/#sugestao-i-pandas","title":"Sugest\u00e3o I - Pandas","text":"
Biblioteca de tratamento de dados usada em Ci\u00eancia dos Dados.
Projeto complexo, com muitos casos de uso especiais
Toneladas de funcionalidades de visualiza\u00e7\u00e3o textual e gr\u00e1fica de dados
Python \u00e9 familiar para a maioria
Tickets de testes s\u00e3o, em geral, f\u00e1ceis para come\u00e7ar e \u00fateis para a comunidade.
"},{"location":"lessons/10-first-contribution/slides/#sugestao-ii-matplotlib","title":"Sugest\u00e3o II - Matplotlib","text":"
Plotar gr\u00e1ficos em Python
Lista de Good first issues tem v\u00e1rios em aberto ou com PRs que est\u00e3o parados h\u00e1 meses e podem ser assumidos por outras pessoas.
"},{"location":"lessons/10-first-contribution/slides/#sugestao-iii-pyscript","title":"Sugest\u00e3o III - Pyscript","text":"
Python rodando no Browser via WebAssembly
Lista de issues tem v\u00e1rias que parecem acess\u00edveis
"},{"location":"lessons/10-first-contribution/slides/#sugestao-iii-escolha-seu-proprio-projeto","title":"Sugest\u00e3o III: Escolha seu pr\u00f3prio projeto :)","text":"
Esta aula n\u00e3o tem atividade pr\u00e1tica guidada, mas tem uma parte expositiva importante. N\u00e3o esque\u00e7a de olhar os slides de hoje para relembrar.
"},{"location":"lessons/11-contribuicoes-externas/slides/","title":"Dicas de Debug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#_1","title":"Dicas de Debug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#dicas-de-debug","title":"Dicas de Debug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#minha-primeira-contribuicao-de-codigo","title":"Minha primeira contribui\u00e7\u00e3o de c\u00f3digo","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#dicas-para-debugar-qualquer-coisa","title":"Dicas para debugar (qualquer coisa)","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#9-regras-de-debug","title":"9 regras de debug","text":"
UNDERSTAND THE SYSTEM
MAKE IT FAIL
QUIT THINKING AND LOOK
DIVIDE AND CONQUER
CHANGE ONE THING AT A TIME
KEEP AN AUDIT TRAIL
CHECK THE PLUG
GET A FRESH VIEW
IF YOU DIDN'T FIX IT, IT AIN'T FIXED
"},{"location":"lessons/11-contribuicoes-externas/slides/#1-understand-the-system","title":"1. Understand the system","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#nada-acontece-se-nao-conseguirmos","title":"Nada acontece se n\u00e3o conseguirmos","text":"
Baixar a vers\u00e3o de desenvolvimento
Instalar todas as depend\u00eancias
Compilar nossa pr\u00f3pria vers\u00e3o
Rodar testes na vers\u00e3o do master
"},{"location":"lessons/11-contribuicoes-externas/slides/#1-understand-the-system_1","title":"1. Understand the system","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#ferramentas-importantes","title":"Ferramentas importantes:","text":"
"},{"location":"lessons/11-contribuicoes-externas/slides/#1-understand-the-system_2","title":"1. Understand the system","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#conheca-suas-ferramentas","title":"Conhe\u00e7a suas ferramentas","text":"
Debugging visual linha a linha
Stacktrace
Busca em projeto inteiro
Ir para defini\u00e7\u00e3o de fun\u00e7\u00e3o
"},{"location":"lessons/11-contribuicoes-externas/slides/#debugar-usando-print-e-perda-de-tempo","title":"Debugar usando print \u00e9 perda de tempo","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#2-make-it-fail","title":"2. Make it fail","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#reproduza-seu-bug","title":"Reproduza seu bug","text":"
Crie um exemplo m\u00ednimo que reproduza o bug desejado ou que usaria a feature que quer implementar
entrada de exemplo e sa\u00edda esperada vs sa\u00edda obtida
Possivelmente isto j\u00e1 foi descrito na issue escolhida.
Anote elementos que te ajudem a encontrar onde isto ocorre no c\u00f3digo (fun\u00e7\u00f5es usadas, elementos de interface gr\u00e1fica, mensagens de erro.)
"},{"location":"lessons/11-contribuicoes-externas/slides/#3-quit-thinking-and-look","title":"3. Quit thinking and look","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#encontre-onde-esta-o-problema-e-leia-o-codigo-com-atencao","title":"Encontre onde est\u00e1 o problema e leia o c\u00f3digo com aten\u00e7\u00e3o","text":"
Encontre no c\u00f3digo onde o bug pode estar
Comece geral (em qual arquivo est\u00e1 a funcionalidade?) e v\u00e1 restringindo (em qual fun\u00e7\u00e3o o bug \"explode\"?)
Ferramentas de debug s\u00e3o essenciais. Veja o item 1.
N\u00e3o atenderei ningu\u00e9m que esteja debugando s\u00f3 com print
"},{"location":"lessons/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_1","title":"3. Quit thinking and look","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#buscando-por-nomes-de-arquivos","title":"Buscando por nomes de arquivos","text":"
Comando find (man page)
Exemplo: procurar por arquivos cujo nome \u00e9 aceito por uma certa express\u00e3o regular come\u00e7ando no diret\u00f3rio atual.
$ find -iname \"regexp\" .
"},{"location":"lessons/11-contribuicoes-externas/slides/#3-quit-thinking-and-look_2","title":"3. Quit thinking and look","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#buscando-no-conteudo-dos-arquivos","title":"Buscando no conte\u00fado dos arquivos","text":"
Comando grep (man page)
$ grep [OPTIONS] PATTERN FILES
PATTERN: express\u00e3o regular
FILES: lista de diret\u00f3rios ou arquivos
"},{"location":"lessons/11-contribuicoes-externas/slides/#3-quit-thinking-and-look-grep","title":"3. Quit thinking and look - grep","text":"
Exemplo 1: buscar todos arquivos nas pasta atual (.) e subpastas com o texto \"dialog\" ignorando mai\u00fasculas/min\u00fasculas.
$ grep -r -i dialog .
"},{"location":"lessons/11-contribuicoes-externas/slides/#_2","title":"Dicas de Debug","text":"
Exemplo 2: Listas todos os arquivos .cpp que fazem algum include
$ grep -r --include \"*cpp\" \"#include\" .
"},{"location":"lessons/11-contribuicoes-externas/slides/#sua-ideeditor-devem-ter-algo-parecido-procure-e-use","title":"Sua IDE/editor devem ter algo parecido. Procure e use.","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#4-divide-and-conquer","title":"4. Divide and Conquer","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#crie-um-plano-de-acao","title":"Crie um plano de a\u00e7\u00e3o","text":"
Por que o bug ocorre?
Est\u00e1 relacionado a qual fun\u00e7\u00e3o?
Qual vari\u00e1vel tem o valor errado?
O que deve ser mudado para que pare de ocorrer?
Pr\u00e9-requisito: debugar visualmente usando alguma IDE / editor
"},{"location":"lessons/11-contribuicoes-externas/slides/#5-change-one-thing-at-a-time","title":"5. Change one thing at a time","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#um-bom-pr-muda-o-minimo-possivel","title":"Um bom PR muda o m\u00ednimo poss\u00edvel","text":"
use v\u00e1rias branches se quiser testar ideias diferentes
git commit \u00e9 gr\u00e1tis. Quando chegar na vers\u00e3o final \u00e9 s\u00f3 juntar tudo e mandar.
git rebase para atualizar seu branch com o master upstream caso necess\u00e1rio.
"},{"location":"lessons/11-contribuicoes-externas/slides/#6-keep-an-audit-trail","title":"6. Keep an audit trail","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#registre-suas-descobertas","title":"Registre suas descobertas","text":"
Log de como voc\u00ea encontrou onde mexer
Log de todos arquivos de interesse e seus usos
Log de todas as pesquisas feitas
Log de todas as modifica\u00e7\u00f5es feitas
git commit \u00e9 \u00fatil para registrar testes tamb\u00e9m
N\u00e3o se esque\u00e7a:git diff \u00e9 seu melhor amigo
"},{"location":"lessons/11-contribuicoes-externas/slides/#7-check-the-plug","title":"7. Check the plug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#nunca-se-esqueca-de-testar-a-solucoes-mais-simples-primeiro","title":"Nunca se esque\u00e7a de testar a solu\u00e7\u00f5es mais simples primeiro","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#8-get-a-fresh-view","title":"8. Get a fresh view","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#empacou","title":"Empacou?","text":"
\u00c9 por isso que voc\u00eas trabalham em grupo no primeiro bug.
"},{"location":"lessons/11-contribuicoes-externas/slides/#9-if-you-didnt-fix-it-it-aint-fixed","title":"9. If you didn't fix it, it ain't fixed","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#hora-de-programar","title":"Hora de programar","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#tentem-aplicar-estas-ideias-aos-seus-problemas","title":"Tentem aplicar estas ideias aos seus problemas","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#envie-4-prs-para-projetos-participantes-e-ganhe-uma-camiseta","title":"Envie 4 PRs para projetos participantes e ganhe uma camiseta","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#atividade-extra-hacktoberfest","title":"Atividade extra: hacktoberfest","text":"
Objetivo: Enviar 3 PRs para projetos externos no m\u00eas de outubro.
\"metadata\": {\"date\": \"2021-10-31\"}
"},{"location":"lessons/11-contribuicoes-externas/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#_3","title":"Dicas de Debug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#dicas-de-debug_1","title":"Dicas de debug","text":""},{"location":"lessons/11-contribuicoes-externas/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/12-projeto/slides/","title":"Projeto da disciplina","text":""},{"location":"lessons/12-projeto/slides/#desenvolvimento-aberto","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/12-projeto/slides/#projeto-da-disciplina","title":"Projeto da disciplina","text":""},{"location":"lessons/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"lessons/12-projeto/slides/#ate-agora","title":"At\u00e9 agora","text":"
Analisar uma base de c\u00f3digos desconhecida de m\u00e9dio/grande porte e modific\u00e1-la de modo a fazer melhorias e corrigir falhas em um software;
"},{"location":"lessons/12-projeto/slides/#_1","title":"Projeto da disciplina","text":"
Interagir com uma equipe remota de desenvolvedores para entregar c\u00f3digo que atenda aos padr\u00f5es de qualidade e estilo de c\u00f3digo de um projeto;
proporcionar uma experi\u00eancia de trabalho em um projeto real de escolha dos alunos
valorizar diversos tipos de contribui\u00e7\u00f5es, n\u00e3o somente de c\u00f3digo
exercitar autonomia e independ\u00eancia
"},{"location":"lessons/12-projeto/slides/#projeto-aberto_1","title":"Projeto Aberto","text":""},{"location":"lessons/12-projeto/slides/#organizado-em-dois-blocos-de-5-aulas","title":"Organizado em dois blocos de 5 aulas","text":"
11/05 - 25/05
27/05 - 10/06
"},{"location":"lessons/12-projeto/slides/#projeto-aberto-pitches-de-projeto","title":"Projeto Aberto - Pitches de projeto","text":"
Cada bloco se inicia com uma aula de Pitches de Projeto, que \u00e9 uma apresenta\u00e7\u00e3o de 5 minutos apresentando o projeto para o qual voc\u00ea contribuir\u00e1 na semana.
Trocar ideias sobre projetos interessantes
Ajudar alunos indecisos a escolherem um projeto
Se comprometer com uma escolha de projeto
"},{"location":"lessons/12-projeto/slides/#projeto-aberto-pitch-de-projeto","title":"Projeto Aberto: Pitch de projeto","text":"
Objetivo: Apresentou um Pitch de projeto. Se o aluno s\u00f3 apresentar o projeto e n\u00e3o fizer contribui\u00e7\u00e3o vale 0 XP.
\"metadata\": {\"url\": \"url_do_projeto_proposto\", \"filename\": \"pdf da apresentacaoo\"}
Colocar pdf da apresenta\u00e7\u00e3o na pasta docs/pitches.
Objetivo: Outro aluno enviou contribui\u00e7\u00e3o para o projeto que voc\u00ea fez Pitch.
\"metadata\": {\"url\": \"url_da_contribuicao\"}
A ser enviado pelo aluno que prop\u00f4s o Pitch, que tamb\u00e9m precisa ter contribu\u00eddo.
"},{"location":"lessons/12-projeto/slides/#projeto-aberto-pitches-de-projeto_1","title":"Projeto Aberto - Pitches de projeto","text":"
Apresentar um pitch \u00e9 uma skill que vale XP
Ajudar colegas interessados no \"seu\" projeto vale XP
Aceitar sugest\u00f5es/ajudas vale XP
Tudo isso \u00e9 al\u00e9m da XP j\u00e1 obtida com as contribui\u00e7\u00f5es
"},{"location":"lessons/12-projeto/slides/#evitar-alunos-trabalhando-sozinhos","title":"Evitar alunos trabalhando sozinhos.","text":""},{"location":"lessons/12-projeto/slides/#estrategias-para-escolha-um-projeto","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"lessons/12-projeto/slides/#aprendizado-de-tecnologias-novas","title":"Aprendizado de tecnologias novas","text":"
Linguagem de programa\u00e7\u00e3o
Biblioteca
Tipo de tecnologia: web, mobile, desktop
"},{"location":"lessons/12-projeto/slides/#estrategias-para-escolha-um-projeto_1","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"lessons/12-projeto/slides/#aperfeicoamento-em-tecnologias-que-ja-domina","title":"Aperfei\u00e7oamento em tecnologias que j\u00e1 domina","text":"
Linguagem de programa\u00e7\u00e3o espec\u00edfica
Tipo de tecnologia: web, mobile, desktop
"},{"location":"lessons/12-projeto/slides/#estrategias-para-escolha-um-projeto_2","title":"Estrat\u00e9gias para escolha um projeto","text":""},{"location":"lessons/12-projeto/slides/#projetos-de-interesse-pessoal","title":"Projetos de interesse pessoal","text":"
Algum software que voc\u00ea usa
Melhorar alternativa livre para software propriet\u00e1rio
Moonshot: projetos ambiciosos com chance m\u00ednima de sucesso
"},{"location":"lessons/12-projeto/slides/#desenvolvimento-aberto_1","title":"Desenvolvimento Aberto","text":""},{"location":"lessons/12-projeto/slides/#projeto-da-disciplina_1","title":"Projeto da disciplina","text":""},{"location":"lessons/12-projeto/slides/#igor-dos-santos-montagner-igorsm1insperedubr_1","title":"Igor dos Santos Montagner ( igorsm1@insper.edu.br )","text":""},{"location":"plugins/notification/","title":"Toast Notifications","text":"
This page illustrates how to create toast (or snackbar) notifications. This is intended for plugin development and probably shouldn't be called directly from the markdown content.
In your plugin, whenever you want to show a toast notification, just call notification.toast():
notification.toast(\"Go crazy!\", { bgColor: \"#FFFF00\", color: \"#ff4498\" });\nnotification.toast('bgColor \"danger\"', { bgColor: \"danger\" });\nnotification.toast(\"Notification with click event (reload page)\", {\nonClick: () => window.location.reload(),\n});\nnotification.toast(\"Toasts have an optional timeout argument\", {\ntimeout: 3000,\n});\n