- A criação de uma máquina virtual em GNU/Linux usando o Vagrant de acordo com a aula de `DevOps <devops.html>`_.
- 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.
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.
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.
Imagens:
* Diversos sistemas de tickets.
+* https://en.wikipedia.org/wiki/Kanban_board#/media/File:Simple-kanban-board-.jpg
2.3 - Scripts e templates
~~~~~~~~~~~~~~~~~~~~~~~~~
#. Crie uma pasta para o seu projeto.
-#. Hora de programar!
-
-Referências
------------
+2.5 Referências
+---------------
-- `Atom <https://atom.io/>`_.
-- `Lime Text Editor <http://limetext.org/>`_.
-- `Guia Foca Linux – Site Oficial | Site oficial do guia Foca GNU/Linux, baixe gratuitamente! <http://www.guiafoca.org/>`_.
-- `jgm/pandoc-templates · GitHub <https://github.com/jgm/pandoc-templates>`_.
+- `Guia Foca Linux <http://www.guiafoca.org/>`_.
+- `Solarized - Ethan Schoonover <http://ethanschoonover.com/solarized>`_.
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 <http://travis-ci.org/>`_.
-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 <https://www.youtube.com/results?search_query=tron+legacy+soundtrack+>`_.
- `Automatizando a instalação (deploy) e atualização de sites com Git <http://blog.thiagobelem.net/automatizando-a-instalacao-deploy-e-atualizacao-de-sites-com-git/>`_.
- `Deploy estilo Heroku usando Git – Elton Minetto <http://eltonminetto.net/blog/2013/11/11/deploy-estilo-heroku-usando-git/>`_.
- `Deploy fácil com git - Dan Jesus <https://danjesus.github.io/blog/deploy-facil-com-git/>`_.
-3. Licenciamento
-================
+3. Licenciamento de software
+============================
3.1 - O que é e por quê licenciar?
----------------------------------
* Permite sublicenciamento.
* Exemplos de software sob esta licença: Ruby on Rails, Node.js e jQuery.
+Imagens:
+
+* Licença MIT.
+
3.2 - Estilo BSD
~~~~~~~~~~~~~~~~
* 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:
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
---------------------------------------
* 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
--------------------------------------
* 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
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).
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.
#. 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 <https://tldrlegal.com>`_.
* `Open Source Initiative <http://opensource.org/>`_.
- 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:
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.
- 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:
- 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 <https://en.wikipedia.org/wiki/Pomodoro_Technique#/media/File:Il_pomodoro.jpg>`_.
+
+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.
- 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.
- 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!
- 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.
* Diagramas jocosos de problema/solução.
-1.8 - Projeto de exemplo
+1.7 - Projeto de exemplo
~~~~~~~~~~~~~~~~~~~~~~~~
0. Descoberta:
* 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:
#. 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 <https://en.wikipedia.org/wiki/Best_coding_practices>`_.
- `Best practices for software development projects <http://www.ibm.com/developerworks/websphere/library/techarticles/0306_perks/perks2.html>`_.
- `Manifesto para o desenvolvimento ágil de software <http://www.manifestoagil.com.br/>`_.
- 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 <https://pedropeixotoferreira.files.wordpress.com/2014/03/robert-pirsig-zen-e-a-arte-da-manutenc3a7c3a3o-de-motocicletas.pdf>`_.
+- `O Tao da programação <http://www.geocities.ws/worgtal/2002/tao.pdf>`_.
+- `Top Open-Source Static Site Generators - StaticGen <https://www.staticgen.com/>`_.
+- `principles - IndieWebCamp <https://indiewebcamp.com/Principles>`_.
6.2 - Antipatterns
------------------
+* Linearidade: o mito da pessoa-mês (Lei de Brooks).
+
6.3 - Inferno de dependências
-----------------------------
::
sudo apt-get install ttyrec
+
+6.7 - Referências
+-----------------
+
+* `Versionamento Semântico 2.0.0 <http://semver.org/lang/pt-BR/>`_.
-----------------------------------------
* 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!
-----------------------------------
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:
* Í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.
* 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:
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).
::
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
~~~~~~~~~~~~~~~~~~~~~
cd ~/projetos/blogatico
git log
- git cola
+ sudo apt-get install gitk
gitk
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)
--------------------------------------
cd ~/projetos/blogatico
git branch develop
git checkout develop
- git commit
+ git commit -a
git checkout master
git merge develop
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:
# 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:
#. Faça um pequeno site com o Skeleton.
#. Bônus: git log to ChangeLog!
-Referências
------------
+4.13 - Referências
+------------------
+* `Instalando Git <https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git>`_.
+* `Curso Básico de Git - RBtech <https://www.youtube.com/watch?v=WVLhm1AMeYE&list=PLInBAd9OZCzzHBJjLFZzRl6DgUmOeG3H0>`_.
* `cheatsheet do git-flow <https://danielkummer.github.io/git-flow-cheatsheet/index.pt_BR.html>`_.
* `Skeleton: Responsive CSS Boilerplate <http://getskeleton.com/>`_
-* `Versionamento Semântico 2.0.0 <http://semver.org/lang/pt-BR/>`_.
-* `Curso Básico de Git - RBtech <https://www.youtube.com/watch?v=WVLhm1AMeYE&list=PLInBAd9OZCzzHBJjLFZzRl6DgUmOeG3H0>`_.
-* `Instalando Git <https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git>`_.
* `git-cola: The highly caffeinated Git GUI <https://git-cola.github.io/>`_