From 40f48343cfb8dbace6432a071a1d5e08d7544732 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sun, 15 Nov 2015 11:53:29 -0200 Subject: Diversas mudanças nas aulas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aulas/ambientes.rst | 34 +++++++++++++------- aulas/devops.rst | 38 ++++++++++++++++------ aulas/licencas.rst | 32 ++++++++++++------- aulas/metodologias.rst | 73 ++++++++++++++++++++++++++---------------- aulas/reinventando.rst | 7 ++++ aulas/seguranca.rst | 4 ++- aulas/versionamento.rst | 85 +++++++++++++++++++++---------------------------- 7 files changed, 161 insertions(+), 112 deletions(-) diff --git a/aulas/ambientes.rst b/aulas/ambientes.rst index 1a4f50b..d9b8629 100644 --- a/aulas/ambientes.rst +++ b/aulas/ambientes.rst @@ -13,10 +13,17 @@ - A criação de uma máquina virtual em GNU/Linux usando o Vagrant de acordo com a aula de `DevOps `_. - Ou o uso do Cygwin juntamente com seu editor de textos favorito. +2.2 - Adote o GNU/Linux +~~~~~~~~~~~~~~~~~~~~~~~ + +* Além de ser livre, o GNU/Linux é um ambiente natural para desenvolvimento. +* Você não precisa largar de vez seu sistema operacional. Vá aos poucos, começando com uma imagem live. +* Sugestões: Debian GNU Linux e Ubuntu. + 2.1 - O essencial ~~~~~~~~~~~~~~~~~ -Desktop sem distrações: o que é o mínimo que você precisa? +Desktop sem distrações: o que é o mínimo que você precisa? No nosso caso, usaremos basicamente: - Editor de texto ou IDE: produz código. - Emulador de terminal: execução de tarefas. @@ -150,7 +157,7 @@ Roteiro do screencast: 2.3 - Básico ~~~~~~~~~~~~ -- Seu desktop funciona como uma bancada de trabalho: mantenha-o sempre arrumado, limpando a sujeira toda a vez que finalizar um trabalho. +- Seu desktop funciona como uma bancada de trabalho: mantenha-o sempre arrumado, limpando a sujeira toda a vez que finalizar uma tarefa. - Diário de bordo: de um arquivo de texto a um blog sobre desenvolvimento (o próprio blogático, no nosso caso!). - Organização de pastas. - Backups. @@ -181,8 +188,14 @@ Roteiro do screencast: touch README.md ChangeLog TODO.md gedit README.md -2.3 - Sistemas de tickets (tarefas) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +2.3 - Markdown e texto estruturado +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +* Convenções de formatação para arquivos de texto simples. +* Podem ser facilmente convertidos para outros formatos (html, pdf, epub, por exemplo). + +2.3 - Gestão de tarefas (tickets) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Kanban. * Arquivo TODO em formatos plaintext, Markdown, etc. @@ -199,6 +212,7 @@ Roteiro do screncast: Imagens: * Diversos sistemas de tickets. +* https://en.wikipedia.org/wiki/Kanban_board#/media/File:Simple-kanban-board-.jpg 2.3 - Scripts e templates ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -247,12 +261,8 @@ Roteiro do screencast: #. Crie uma pasta para o seu projeto. -#. Hora de programar! - -Referências ------------ +2.5 Referências +--------------- -- `Atom `_. -- `Lime Text Editor `_. -- `Guia Foca Linux – Site Oficial | Site oficial do guia Foca GNU/Linux, baixe gratuitamente! `_. -- `jgm/pandoc-templates · GitHub `_. +- `Guia Foca Linux `_. +- `Solarized - Ethan Schoonover `_. diff --git a/aulas/devops.rst b/aulas/devops.rst index b8df4e0..45ea0c5 100644 --- a/aulas/devops.rst +++ b/aulas/devops.rst @@ -1,40 +1,58 @@ 5. DevOps: desenvolvendo e orquestrando ======================================= +5.1 - O que é DevOps +-------------------- + +* Aproximação da administração de sistemas (sysadmin) com o desenvolvimento. +* Entregas constantes em ambientes de alta disponibilidade. +* Foco na automação. + +Imagens: + +* https://upload.wikimedia.org/wikipedia/commons/b/b5/Devops.svg + 5.1 Ambientes reprodutíveis --------------------------- 5.2 - Vagrant ------------- -5.3 - Docker ------------- +Roteiro do screencast: -5.4 - KVM, chroot e afins -------------------------- +:: + + # Instalando o vagrant + sudo apt-get install vagrant + + cd ~/projetos/blogatico + vagrant init + +5.3 - KVM, docker, chroot e afins +--------------------------------- -5.5 - Integração contínua +5.4 - Integração contínua ------------------------- - Integração contínua usando o `Travis CI `_. -5.6 - Fazendo o deploy +5.5 - Fazendo o deploy ---------------------- -- CLI básico (copiar, mover, apagar e permissões). - SSH e rsync. - Deploy via git. -5.7 Atividades +5.6 Atividades -------------- #. Instale o vagrant. #. Crie uma máquina virtual para desenvolver o seu projeto. #. Crie uma conta no Travis CI. -Referências ------------ +5.7 - Referências +----------------- +- `Trilha sonora: Daft Punk - TRON Legacy `_. - `Automatizando a instalação (deploy) e atualização de sites com Git `_. - `Deploy estilo Heroku usando Git – Elton Minetto `_. - `Deploy fácil com git - Dan Jesus `_. diff --git a/aulas/licencas.rst b/aulas/licencas.rst index 61de438..e438e0e 100644 --- a/aulas/licencas.rst +++ b/aulas/licencas.rst @@ -1,5 +1,5 @@ -3. Licenciamento -================ +3. Licenciamento de software +============================ 3.1 - O que é e por quê licenciar? ---------------------------------- @@ -27,6 +27,10 @@ * Permite sublicenciamento. * Exemplos de software sob esta licença: Ruby on Rails, Node.js e jQuery. +Imagens: + +* Licença MIT. + 3.2 - Estilo BSD ~~~~~~~~~~~~~~~~ @@ -38,12 +42,16 @@ * Desde que o nome dos/as autores não seja usado para promover produtos derivados. * Mas exime autores(as) de quaisquer responsabilidade advindas do software. +Imagens: + +* Licença BSD. + 3.2 - Vantagens e desvantagens ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Vantagens: -* Facilmente legível (licenças pequenas). +* Facilmente legíveis (licenças pequenas). * Flexibilidade: aderência a modelos de negócios. Desvantagens: @@ -57,10 +65,10 @@ Desvantagens: 3.3 - Histórico --------------- -* Custom crescente e comodificação do software. +* Custo crescente e comodificação do software. * Ameaça ao "commons" hacker. * Free Software Foundation. -* Licença copyleft "viral": garante as liberdades +* Licença copyleft "viral": garante as liberdades. 3.3 Quatro liberdades do software livre --------------------------------------- @@ -77,7 +85,7 @@ Exemplo: `licença desta documentação `_. * GNU GPL: licença padrão. * GNU FDL: para documentação. -* GNU Affero: requer o fornecimento de código fonte. +* GNU Affero GPL: requer a disponibilização de código fonte por quem roda o software. 3.3 - Open Source versus Free Software -------------------------------------- @@ -95,7 +103,7 @@ Exemplo: `licença desta documentação `_. * Atribuição. * Compartilhamento sob a mesma licença. - * (Não-)comercial. + * Se o trabalho é comercial ou não. * Permite ou não trabalhos derivados. 3.5 - Outras licenças @@ -120,7 +128,7 @@ Exemplo: `licença desta documentação `_. 3.6 - Licenciando o seu trabalho -------------------------------- -3.5 - Escolhendo a licença +3.6 - Escolhendo a licença ~~~~~~~~~~~~~~~~~~~~~~~~~~ * Compatibilidade entre licençar (distribuição e linkagem). @@ -135,8 +143,8 @@ Roteiro do screencast: cd ~/projetos/blogatico wget https://www.gnu.org/licenses/gpl.txt -O LICENSE.txt -3.6 Atividades --------------- +3.7 - Atividades +---------------- #. Escolha uma licença para o seu projeto. @@ -144,8 +152,8 @@ Roteiro do screencast: #. Bônus: escreva uma pequena licença de software. Isso pode lhe ajudar a entender melhor o que você acha importante numa licença. -Referências ------------ +3.8 - Referências +----------------- * `TLDRLegal `_. * `Open Source Initiative `_. diff --git a/aulas/metodologias.rst b/aulas/metodologias.rst index 603da7e..5ed6cc5 100644 --- a/aulas/metodologias.rst +++ b/aulas/metodologias.rst @@ -20,15 +20,24 @@ - Foco em Software Livre e Aberto (FOSS). - Experimente diversas metodologias, técnicas e ferramentas e monte seu próprio kit! -1.2 - Mitos e verdades do desenvolvimento ------------------------------------------ +Imagens: + +* https://upload.wikimedia.org/wikipedia/commons/7/7c/Yin_and_Yang.svg +* https://www.gnu.org/graphics/meditate.en.html + +Link: + +* https://www.youtube.com/watch?v=2FQU0WeGSEM + +1.1 - O problema fundamental +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Dificuldades essenciais e acidentais. -- Linearidade: pessoa-mês (Lei de Brooks). -- Métricas: dificuldade de se estimar o tempo gasto. -- Deterioramento natural do software! +* O processo criativo não é linear e difícil de colocá-lo numa metodologia de trabalho. +* Muitos métodos tentam dominar e formatar o fluxo natural de atividades. +* Queremos técnicas e ferramentas que reduzam o ruído no trabalho, mas que não acarretem na perda de liberdade criativa. +* Dificuldades essenciais e acidentais (Aristóteles). -1.3 - Metodologias pessoais +1.2 - Metodologias pessoais --------------------------- Queremos evitar: @@ -40,10 +49,10 @@ Queremos evitar: Queremos: -- Simplicidade sem comprometer funcionalidade (KISS). -- Excelência (melhoria incremental) ao invés de perfeccionismo obssessivo. +- Simplicidade sem perda de qualidade (KISS). +- Excelência (melhoria incremental) ao invés de perfeccionismo obsessivo. -1.3 - Metodologias pessoais - Básico +1.2 - Metodologias pessoais - Básico ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Fundamental: fazer fluir a criatividade. @@ -52,8 +61,9 @@ Queremos: - Foco na missão. - Fazer o essencial. - Método não é lei, é sugestão de caminho. Você descobriu que é multi-tarefas e funciona melhor assim? Ok! :) +- Mude seus hábitos aos poucos! -1.3 - Metodologias pessoais - Pomodoro +1.2 - Metodologias pessoais - Pomodoro ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ É uma técnica simples para execução de tarefas: @@ -65,10 +75,14 @@ Queremos: - Pare por um tempo curto (5 minutos, por exemplo). - Depois de 4 pomodoros, faça uma pausa mais longa (15 a 30 minutos). -1.4 - Metodologias pessoais - Get Things Done (GTD) +Imagem: + +* `Cronômetro do pomodoro `_. + +1.3 - Metodologias pessoais - Get Things Done (GTD) --------------------------------------------------- -É uma técnica para organização do fluxo de tarefas: +É uma técnica para organização de tarefas / vida. - Colete: apareceu na sua frente? Coloque para fora da cabeça! - Processe. @@ -77,25 +91,26 @@ Queremos: - Faça! - Workflow: https://en.wikipedia.org/wiki/Getting_Things_Done#/media/File:GTDcanonical.png -1.5 - Metodologias pessoais - Zen to Done (ZTD) +1.4 - Metodologias pessoais - Zen to Done (ZTD) ----------------------------------------------- -- ZTD é um GTD simplificado e mais estruturado. +ZTD é um GTD simplificado e mais estruturado: + - Tenha uma rotina. - Reduza as suas tarefas ao essencial. - Comece o dia realizando as tarefas importantes. Não se perca. - Sugestão do chef: ZTD com Pomodoro! -1.6 - Metodologias em equipe +1.5 - Metodologias em equipe ---------------------------- -1.6 - A Catedral e o Bazar +1.5 - A Catedral e o Bazar ~~~~~~~~~~~~~~~~~~~~~~~~~~ - Eficiência do código aberto. - Agile: conjunto de princípios. -1.6 - Metodologias populares +1.5 - Metodologias populares ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Scrum: metodologia de gerenciamento de projetos. @@ -104,10 +119,10 @@ Queremos: - TDD: técnica de desenvolvimento guiada por testes. - Híbridação: Scrumban + XP :D -1.7 - Começando um projeto +1.6 - Começando um projeto -------------------------- -1.7 - Etapas +1.6 - Etapas ~~~~~~~~~~~~ - Etapa 0: descoberta, brainstorm e levantamento de escopo! @@ -115,10 +130,10 @@ Queremos: - Qual ou quais problemas a serem atacados? - Como definir o projeto e seu escopo? O que é e o que não é? - Quais soluções possíveis? Qual a escolhida? - - A ser realizado em conjunto pel equipe de desenvolvimento e quaisquer partes envolvidas (clientes, por exemplo). + - A ser realizado em conjunto pela equipe de desenvolvimento e quaisquer partes envolvidas (clientes, por exemplo). - Descrição em alto nível. -- Etapa 1: pesquisa do que já existe: quais projetos abarcam os problemas? No que deixam a desejar? +- Etapa 1: pesquisa do que já existe: quais soluções abarcam os problemas formulados? No que deixam a desejar? - Etapa 2: planejamento inicial: escolha inicial de metodologias, bootstrap, provas de conceito, etc. - Etapa 3: aplicar um conjunto de metodologias mas principalmente *realizar* o projeto. @@ -126,7 +141,7 @@ Imagens: * Diagramas jocosos de problema/solução. -1.8 - Projeto de exemplo +1.7 - Projeto de exemplo ~~~~~~~~~~~~~~~~~~~~~~~~ 0. Descoberta: @@ -143,7 +158,7 @@ Imagens: * Criar um blog em qualquer lugar e fazer backups na unha? Pouco elegante e não atende a todos os requisitos. * Criar um blog em HTML simples e subir manualmente para um servidor? Não, queremos algo entre a web 1.0 e a web contemporânea. - * Que tal criarmos um blog gerado estaticamente, isto é, um conjunto de arquivos simples de editar e que são compilados num site que possa ser facilmente enviado para um servidor como qualquer outra aplicação web? + * Que tal criarmos um blog gerado estaticamente, isto é, um conjunto de arquivos simples de editar e que são compilados para o formato de site que possa ser facilmente enviado para um servidor como qualquer outra aplicação web? 1. Pesquisa: pesquise pesquise pesquise! O que você encontrou? 2. Bootstrap: @@ -167,12 +182,10 @@ Imagens: #. Para este curso, definimos o nosso projeto de exemplo como sendo um website/blog bem simples. Você pode fazer o mesmo ou então escolher qualquer projeto que queira fazer usando qualquer linguagem de programação e adaptar as atividades propostas nas aulas seguintes de acordo com o seu caso. Sugerimos apenas que você escolhe um nome para o seu projeto, mesmo que temporário! Mas lembre-se: nomes tem poder! :) -#. Pesquise geradores de site estáticos (static site generators). O que você encontrou? - #. Bônus: esboce um documento simples de escopo para o seu projeto. Ele pode ser um importante guia nas fases iniciais. -Referências ------------ +1.9 Referências +--------------- - `Best coding practices - Wikipedia, the free encyclopedia `_. - `Best practices for software development projects `_. @@ -190,3 +203,7 @@ Referências - `Manifesto para o desenvolvimento ágil de software `_. - https://www.mountaingoatsoftware.com/blog/differences-between-scrum-and-extreme-programming - http://manifesto.co.uk/kanban-vs-scrum-vs-xp-an-agile-comparison/ +- `Zen e a Arte de Manutenção de Motocicletas `_. +- `O Tao da programação `_. +- `Top Open-Source Static Site Generators - StaticGen `_. +- `principles - IndieWebCamp `_. diff --git a/aulas/reinventando.rst b/aulas/reinventando.rst index 1659e30..a0a539d 100644 --- a/aulas/reinventando.rst +++ b/aulas/reinventando.rst @@ -14,6 +14,8 @@ 6.2 - Antipatterns ------------------ +* Linearidade: o mito da pessoa-mês (Lei de Brooks). + 6.3 - Inferno de dependências ----------------------------- @@ -30,3 +32,8 @@ Roteiro do screencast: :: sudo apt-get install ttyrec + +6.7 - Referências +----------------- + +* `Versionamento Semântico 2.0.0 `_. diff --git a/aulas/seguranca.rst b/aulas/seguranca.rst index cce1689..0e8f21b 100644 --- a/aulas/seguranca.rst +++ b/aulas/seguranca.rst @@ -5,7 +5,9 @@ ----------------------------------------- * Criptografia é só uma parte das práticas seguras. -* Testes de penetração: inverta os papéis: e se você fosse o/a atacante? +* Modelagem de ameaças e testes de penetração: inverta os papéis: e se você fosse o/a atacante? +* A dificuldade de se encontrar vulnerabilidades. +* Segurança por isolamento. 6.2 - Use bibliotecas consolidadas! ----------------------------------- diff --git a/aulas/versionamento.rst b/aulas/versionamento.rst index ff1d844..876e160 100644 --- a/aulas/versionamento.rst +++ b/aulas/versionamento.rst @@ -4,20 +4,21 @@ 4.1 - O que é? Pra que serve? ----------------------------- -Tópicos: - * Salvar o estado do código em revisões sequenciais. * Integrar o trabalho do time. * Acompanhar as mudanças no código (encontrar bugs, rollback, etc). -* Boa prática: versionando desde o dia 0. * Ajuda, mas não resolve conflitos na edição de arquivos. +* Boa prática: versionando desde o dia 0. Imagens: * https://git-scm.com/book/en/v2/book/01-introduction/images/local.png +4.2 - Sistemas de controle de versão +------------------------------------ + 4.2 - Quais sistemas existem? ------------------------------ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tópicos: @@ -31,16 +32,16 @@ Imagens: * Ícones e screenshots do site de cada sistema. 4.2 - Centralizados versus distribuídos ---------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Tópicos: -* Centralizado: +* Centralizadaso: * Repositório central para onde são enviadas mudanças. * Ou seja, existe uma cópia de referência. -* Distribuído: +* Distribuídos: * Cada cópia de trabalho é um repositório completo e possui todo o histórico de revisões (também uma forma de backup). * Não requer um repositório central, porém um ponto de trocas central pode ser estipulado entre os desenvolvedores/as. @@ -61,17 +62,12 @@ Imagens: * Complexo e poderoso, porém pode ser usado de modo simples. * Checagem de integridade nativa! -4.3 - Instalando -~~~~~~~~~~~~~~~~ +4.3 - Instalando e configurando +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Focaremos em git pela linha de comando. * Disponível em tudo que é tipo de sistema operacional. - -4.3 - Configurando -~~~~~~~~~~~~~~~~~~ - -A única exigência é especificar um nome e email (de preferência funcional ;) -ara constar nas informações de revisão. +* A única exigência é especificar um nome e email (de preferência funcional ;) para constar nas informações de revisão. Roteiro do screencast: @@ -99,7 +95,10 @@ Roteiro do screencast: cd ~/projetos/ git clone https://github.com/rhatto/boaspraticas -4.3 - Trabalhando no projeto +4.4 - Trabalhando no projeto +---------------------------- + +4.4 - Trabalhando no projeto ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Três estágios de mudanças: cometidas (commited), marcadas para commit (staged) e modificadas (changed). @@ -109,32 +108,22 @@ Roteiro do screencast: :: cd ~/projetos/blogatico - gedit README.md # edite seu arquivo git status - git add README.md # em seguida edite mais um pouco + git add README.md + git status + gedit README.md git status git diff git commit -m "Primeira revisão" git add README.md # mudanças recentes adicionadas ao estágio de lançamento git commit -m "Segunda revisão" - git commit -a -m "Terceira revisão" # coloca todas as mudanças no estágio e comete - - # Agora vamos programar um pouco... - mkdir bin - touch bin/build - chmod +x bin/build - gedit bin/build + git add . + git commit -m "Adiciona demais arquivos" # coloca todas as mudanças no estágio e comete Imagens: * https://git-scm.com/book/en/v2/book/01-introduction/images/areas.png -4.4 - Git: navegando no histórico ---------------------------------- - -* Entendendo um commit. -* Tags (etiquetas). - 4.4 - Log de revisões ~~~~~~~~~~~~~~~~~~~~~ @@ -148,7 +137,7 @@ Roteiro do screencast: cd ~/projetos/blogatico git log - git cola + sudo apt-get install gitk gitk Imagens: @@ -156,18 +145,15 @@ Imagens: * https://git-cola.github.io/images/screenshot-main-linux.png * https://static.lwn.net/images/ns/kernel/gitk.png -4.4 - Revertendo uma mudança -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* Você pode fazer um novo commit na unha ou usar o ferramental do git. +4.4 - Interface gráfica +~~~~~~~~~~~~~~~~~~~~~~~ Roteiro do screencast: :: - git commit --amend - git revert - git rebase + sudo apt-get install git-cola + git cola 4.5 - Ramificações (branches e merges) -------------------------------------- @@ -183,7 +169,7 @@ Roteiro do screencast: cd ~/projetos/blogatico git branch develop git checkout develop - git commit + git commit -a git checkout master git merge develop @@ -206,13 +192,15 @@ Roteiro do screencast: cd ~/projetos/blogatico git flow init git flow feature start doc + git commit -a + git flow feature finish 4.7 - Submódulos ---------------- * Um repositório git dentro de outro. -* Trava em revisões específicas. -* "Sistema de empacotamento" simples e integrado ao git. +* "Trava" o submódulo em revisões específicas. +* "Sistema" de gestão de dependências de código simples e integrado ao git. Roteiro do screencast: @@ -225,8 +213,8 @@ Roteiro do screencast: # Clonando o repositorio noutro local cd .. - git clone projeto projeto-clonado - cd projeto-clonado + git clone blogatico blogatico-clonado + cd blogatico-clonado git submodule update --init # Ou: @@ -253,12 +241,11 @@ Roteiro do screencast: #. Faça um pequeno site com o Skeleton. #. Bônus: git log to ChangeLog! -Referências ------------ +4.13 - Referências +------------------ +* `Instalando Git `_. +* `Curso Básico de Git - RBtech `_. * `cheatsheet do git-flow `_. * `Skeleton: Responsive CSS Boilerplate `_ -* `Versionamento Semântico 2.0.0 `_. -* `Curso Básico de Git - RBtech `_. -* `Instalando Git `_. * `git-cola: The highly caffeinated Git GUI `_ -- cgit v1.2.3