domingo, 2 de abril de 2017

DevOps - Swagger no Docker

A mais popular API Framework do Mundo é isso que diz o site oficial do Swagger, e pode parecer incrível mas não duvido nem um pouco que isso seja verdade. Nunca vi um Framework acender tão rápido quanto o Swagger ao gosto popular. Em termos simples o Swagger é uma especificação aberta para definição de API REST. É uma especificação na qual é possível descrever, produzir, consumir, testar e visualizar uma API RESTful API. Sua grande vantagem foi prover um conjunto com 3 ferramentas:

  • Swagger-Editor - cuida da parte de projeto
  • Swagger-Build - trabalha com construção (em várias linguagens) tanto do servidor (que proverá os serviços) quanto do cliente (que consumirá)
  • Swagger-Ui - responsável pela documentação online através do arquivo padrão do Swagger que pode ser no padrão JSON ou YAML.
Neste artigo pretendo mostrar como instalar e utilizar o Swagger-Editor e Swagger-UI através do Docker, porém sem entrar em qualquer detalhes sobre ambos. A documentação é muito vasta e já existem vários tutorias na Internet de como utilizá-lo. Vamos então para a parte prática.

Instalação

Primeiramente temos que subir e executar (não simultaneamente) 2 imagens a do editor:
$ docker pull swaggerapi/swagger-editor
$ docker run -d --name swaggereditor -p 80:8080 swaggerapi/swagger-editor
E a do documentador:
$ docker pull swaggerapi/swagger-ui
$ docker run -d --name swaggerui -p 80:8080 swaggerapi/swagger-ui

Visualização

Agora vem a parte da visualização dos serviços, para usar o Editor é muito simples, basta iniciar a imagem e utilizá-lo na porta 80 com o endereço http://localhost:80. Porém após criar um arquivo se desejar ver seu resultado no Documentador será necessário habilitar um servidor para isso.

1. Instalar globalmente o pacote http-server:
$ sudo npm install -g http-server
2. Na pasta do arquivo ativar o server com o parâmetro CORS (isso evita o erro Access-Control-Allow-Origin):
$ http-server --cors
3. Abrir o seguinte endereço no Swagger UI:
http://localhost:8080/[nome].json ou .yaml
Bem é isso, deixei a sua disposição um vídeo no meu canal do YouTube que mostra todos os passos para baixar e começar a usar o Swagger que como diz sua tradução no dicionário: "Swagger é andar ou agir de uma forma que mostra confiança ou importância".

Obrigado e até a próxima
Fernando Anselmo

sábado, 18 de março de 2017

Linux - Guia prático para o Pen Drive

Com o advento dos sites de compra da China um dos produtos mais consumidos são Pen Drives, é possível encontrar valores como R$ 15,00 para um Pen Drive de 32 Gb. Porém é preciso o máximo de cuidado com esse tipo de compra com garantia ZERO. Já citei neste artigo o que aconteceu comigo ao comprar um Pen Drive de 2 Tb. E agora queria passar um conjunto de instruções mais completas para que você possa resolver quaisquer problema.
ATENÇÃO: Todos os comandos mostrados neste artigo podem causar danos ao seu Sistema Operacional se não forem usados com o máximo de cuidado.

Guia prático para o Pen Drive

1. Localizar aonde está o pen driver (ATENÇÃO: Com certeza não é nada como /dev/sdaX isso é seu HD)
# fdisk -l
2. Uma vez localizado (algo como /dev/sdbX ou /dev/sd[outra_letra] NÃO É "a" - iremos supor "sde"), desmonte o pen driver:
# umount /dev/sdeX
3. Particione-o conforme desejado, ou mude suas partições:
# fdisk /dev/sde
# cfdisk /dev/sde <- Telinha bonitinha
4. Agora vem a parte da formatação:
# mkfs -t vfat /dev/sdeX                    <- Forma mais simples para VFAT     
# mkexfatfs -n Part01 /dev/sdeX             <- Modo FAT
# mkfs.ext4 -F -L "NOVO" /dev/sdeX          <- Modo EXT4
# mkfs.fat -F32 -n PART01 /dev/sdeX         <- Modo FAT32
# mkfs.vfat -c -v /dev/sdeX                 <- Verificar setores ruins para VFAT (Outros tipos use ext2, ext3, msdos) 
# mkntfs /dev/sdeX                          <- Modo NTFS
# mkntfs -c 512 -s 512 -p 2048 -F /dev/sdeX <- Modo NTFS mais completo
5. Realizando uma verificação:
# mke2fs -n /dev/sdeX           <- copia segurança do superbloco
# fsck -n /dev/sdeX             <- Verifica superbloco (file system consistency check)
# fsck -AR -y /dev/sdeX         <- Verifica superbloco (file system consistency check)
# fsck -y /dev/sdeX             <- Verifica superbloco (file system consistency check)
# e2fsck -fpC 0 /dev/sdeX       <- Outra forma de verificação
# e2fsck -fyC 0 /dev/sdeX       <- Outra forma de verificação
# dosfsck -a -r -t -w /dev/sdeX <- Corrige erros
# partprobe                     <- Realiza um Scan
# gpart /dev/sdeX         <- Realiza um Scan
# badblocks -v /dev/sdeX        <- Verificar setores ruins
# badblocks -nvs /dev/sdeX      <- Verificar setores ruins
# badblocks -wvs /dev/sdeX      <- Verificar setores ruins
6. Terminamos com uma verificação mais completa ao final (CUIDADO):
# dd if=/dev/zero of=/dev/sdeX
É isso, como disse antes use-os com cuidado e se não se sente seguro deixe esse artigo para lá e vá tentar algo mais divertido.

Obrigado e até a próxima
Fernando Anselmo

quarta-feira, 15 de março de 2017

DevOps - Resolvendo problemas em Python

Sabe aqueles termos da informática que os profissionais se enrolam completamente na hora de falar na prática? Um desses termos é DevOps, não estou brincando ninguém vai lhe dar uma resposta clara sobre o que é isso. Pessoalmente prefiro entendê-lo através da seguinte figura:


Resumidamente (e de um jeito bem simples) entenda essa palavra como "Resolver Problemas" juntando vários tipos de conhecimento. O desenvolvedor deve se valer de sua habilidade para isso, porém algumas resoluções envolvem várias áreas de conhecimento como Operação, Suporte e Desenvolvimento.

Amo Java, sou apaixonado pela linguagem e suas vertentes, porém devo confessar que tenho uma amante e essa é a linguagem Python. Java me sustenta, põe comida na minha mesa e me dá um lar para morar, porém é no colo de Python que me realizo como programador, pois é com essa linguagem que resolvo meus principais problemas. Não poderia fazer isso em Java? Claro que sim, mas é bem mais divertido fazê-los em Python.

Gosto de ouvir músicas e tenho uma boa coleção de MP3, porém sou tremendamente organizado e gosto de manter a "Tag" das músicas ordenadas, e muitas vezes mudo de ideia e gosto de mudá-las, fazer isso com 1 ou 10 é simples, agora tentar isso com mais de 3.000.

As vezes uso geradores de comunicação que traduzem para programas a ponte de interligação (como Axis e SOAP-UI) só que as classes geradas vem com diversas falhas principalmente erros de "Warnings" as vezes são 23.000 classes geradas tornando impossível alterar uma a uma.

Sou assinante de várias listas e algumas delas (como por exemplo a do curso de inglês) gosto de converter para HTML para acessá-la de qualquer lugar, porém o programa salva em uma extensão .EML e dá um trabalho infernal corrigir a informação.

Esses são apenas 3 problemas e desejo expor, não apenas esses, como resolvi com Python. Para isso estou preparando uma série de vídeos que a partir de cada sábado estarão disponíveis no meu canal do YouTube. Não espere um curso de Python ou qualquer coisa semelhante, simplesmente exporei o problema e construirei um programa para resolvê-lo (que de repente nem pode ser a melhor solução) e cabe a você usá-lo ou melhorá-lo.

Então fica combinado assim, lhe espero nesse sábado no meu canal do YouTube para brincarmos com a resolução de problemas com Python. E como não sou ciumento quem sabe essa linguagem não se torna sua amante também.

Obrigado e até a próxima
Fernando Anselmo




domingo, 26 de fevereiro de 2017

Lógica de Programação - OpenKarel - Desafio 1

Karel é um robô que vive em seu mundo retangular com "Avenidas" (nas horizontais) e "Ruas" (nas verticais). OpenKarel é sua mais nova versão que permite rodar o programa em qualquer ambiente Java (antigamente estava limitado a versão Java SE 6.0) e assim é possível dar nova vida a Karel.


Para iniciarmos na programação de Karel é necessário conhecermos alguns comandos de Java:
  • Comando de Decisão SE, em Java este comando é reconhecido pela palavra chave if e sua estrutura é a seguinte:
  • if (decisão_lógica) {
      instruções_caso_verdadeiro;
    }
  • Comando de Repetição PARA, em Java este comando é reconhecido pela palavra chave for e sua estrutura é a seguinte:
  • for (variável_inicial; decisão_lógica; incremento) {
      instruções_caso_verdadeiro;
    }
  • Comando de Repetição ENQUANTO, em Java este comando é reconhecido pela palavra chave while e sua estrutura é a seguinte:
  • while (decisão_lógica) {
      instruções_caso_verdadeiro;
    }
Outro detalhe que devemos nos ater na lógica de Karel a necessidade de construirmos métodos para realizarmos as ações e não mantermos tudo fechado dentro do método principal de execução (run). Um método em Java possui a seguinte estrutura:
[modificador] retorno nome_método([parâmetros]) {
  instruções_do_método;
}
O tipo da variável de retorno de um método é sempre obrigatório, caso não retorne nada a palavra chave void deve ser usada nesta posição.

No vídeo abaixo mostrarei como fazer para que Karel dê a volta completa em seu mundo, preste bastante atenção as dicas do vídeo e tente realizar a mesma tarefa ao final será lançado seu primeiro desafio.


Até a próxima
Fernando Anselmo

domingo, 19 de fevereiro de 2017

Lógica de Programação - O que é Karel?

Antigamente para ensinar Lógica de Programação os professores não tinham muitos recursos então deveriam colocar seus conhecimentos para trabalhar, assim surgiu muitas das coisas que usamos até hoje.

Um exemplo simples é a definição da Orientação a Objetos criada por Kristen Nygaard quando concebeu a Linguagem Simula. Do Brasil surgiu o Visualg para edição e execução de algoritmos em uma linguagem próxima ao Português estruturado. Dos laboratórios do MIT surgiu o Scratch para ensinar como um programa funciona usando blocos. Com uma ideia similar surgiu o GreenFoot para ensinar a linguagem Java.


Nenhuma delas tem o apelo de um simpático robozinho conhecido por Karel. Não pretendo contar toda sua história pois já fiz isso neste documento. Aconteceu que Karel ficou defasada em relação a linguagem Java, chegando ao ponto de só poder rodar com a JSE 6. Resolvi então recriá-la e da-lhe uma nova chance. Só que para isso estabeleci 2 regras:

  • O programa fonte de Karel deveria ser escrito totalmente em linguagem Java sem viciá-lo para determinada versão podendo ser compilado (com algumas mudanças simples) até para JSE versão 1.2.
  • Karel deveria permanecer com todas as funcionalidades como modificar e criar novos mapas, aumentar ou diminuir suas ruas e avenidas, recolher ou deixar sinalizadores e principalmente continuar a ser simples.
No meu site criei uma página para distribuir essa nova versão que chamei de OpenKarel. Sendo que é possível encontrar todo o material disponível sobre Karel. E pretendo (a partir desta publicação) criar uma série de desafios (e resolvê-los) para ajudar a entender como funciona o mundo da Lógica de Programação.


O primeiro vídeo já está disponível no meu canal no YouTube e nele você aprenderá como instalar o OpenKarel no BlueJ que será o nosso editor de códigos Java para os desafios.


Obrigado e até a próxima
Fernando Anselmo

domingo, 12 de fevereiro de 2017

DevOps - Vue.js no Docker

Quarto artigo da série DevOps, continuação do livro Docker que pode ser acessado através do site Academia.edu. Em postagens passadas mostrei três opções de bancos de dados que podem ser hospedadas em contêineres do Docker,  agora quando se trata de ambientes ou linguagens de programação a figura muda um pouco.

Um exemplo simples é o NPM, um gerenciador de pacotes para aplicações JavaScript, não é viável mantê-lo em um contêiner a menos que se deseje programar exclusivamente dentro do contêiner, ou caso similar é do Node.js, um servidor de aplicações JavaScript. Em ambos os casos é ideal instalar na máquina física pois não obteríamos qualquer vantagem colocando-os em contêineres.


Agora, pensemos no Vue.js, um framework para visão da página (é um pouco mais que isso), devido a sua flexibilidade pode muito bem estar amarrado a um contêiner e utilizado apenas quando necessário (o mesmo caso se aplica ao Yeoman e outros frameworks). Porém seu contêiner é um pouco diferente pois de vez em quando necessitamos executar um determinado comando.

Antes de começar é necessário ter a última versão instalada do: npm e nodejs.

1. Instalar a imagem do Vue.js:
$ docker pull amurf/docker-vue-cli
2. Editar o bashrc:
$ nano ~/.bashrc
3. Adicionar a seguinte linha (no final do arquivo):
$ alias vue='docker run -it --rm -v "$PWD:$PWD" -w "$PWD" amurf/docker-vue-cli vue'
4. Sair e entrar novamente do terminal. 5. O Vue.js responderá ao seguinte comando:
$ vue
6. Visualizar as templates oficias para a criação de projetos no Vue.js:
$ vue list
7. Criar um projeto:
$ vue init [template|webpack] [nome_do_projeto]
8. As opções são:
Nome do Projeto?
Descrição do Projeto?
Autor?
Vue Build? [Runtime-only - extenções .vue]
vue-router? No
ESLint? Yes [auxilia a manter o codigo correto]
Padrão de Projeto? Standard
Teste Unitários? No
Teste? No
9. Depois do projeto gerado executar os seguintes comandos:
$ cd [nome projeto]
$ sudo npm install
$ npm run dev
Esperar o Node.js subir e podemos ver a execução do projeto através do endereço http://localhost:8080 com a seguinte tela:


Assista o vídeo para tirar quaisquer dúvida de como proceder:


Obrigado e até a próxima
Fernando Anselmo

quinta-feira, 9 de fevereiro de 2017

Vagrant - Gerencie Máquinas Virtuais no Windows

Mudei do Windows para o Linux por causa de um motivo tremendamente simples: Tudo que usava podia muito bem usar no Linux, então para que deveria ficar com o Windows? Porém existem pessoas que adoram o Windows, MS-Office, MS-SQL e todo M$ que puder encontrar (como existem pessoas que adoram coisas começadas com "i").

Estou publicando uma série de artigos sobre o Docker no qual aquelas pessoas que ainda estão neste sistema não pode aproveitar (a menos que possuia a versão 10 e com o bash). Pensando nessas pessoas resolvi publicar esse artigo sobre o Vagrant, que na minha opinião é a melhor opção em se tratando de Gestão de Virtualização de Ambientes.


Primeiro o Vagrant não gera máquinas virtuais como o VirtualBox, ao contrário, inclusive será necessário ter o VirtualBox para usar o Vagrant. Então para que serve isso? Em condições normais de virtualização de sistemas é necessário baixar o VirtualBox, ter uma ISO do sistema operacional que se deseja virtualizar e realizar um monte de configurações para ter algo aceitável. Vagrant elimina toda essa necessidade, ele baixará, gerenciará e organizará como usaremos o VirtualBox.

Vamos na prática, primeiro é necessário instalar três programas: Vagrant, Oracle VM VirtualBox e Git. Não se preocupe que como tudo no Windows é Next > Next > Next > Vendo minha Alma > Next > Confirma. Baidu instalado com sucesso (não se preocupe pois as chances disso acontecer são de apenas 50%).

Segundo passo, ir na seção de Variáveis de Ambiente e na variável PATH adicionar o seguinte caminho: C:\Program Files\Git\usr\bin.

Agora executar o comando CMD para abrir uma janela de comandos:

a. Criar uma pasta para abrigar o Vagrant:
C:\>mkdir proj
b. Acessar essa pasta:
C:\>cd proj
c. Iniciar o Vagrant:
C:\proj>vagrant init
d. Na pasta será criado um arquivo chamado VagrantFile, adicionar a este arquivo três pequenas mudanças (pode usar seu editor de códigos favorito):
config.vm.box = "ubuntu/xenial64"

config.vm.network "forwarded_port", guest: 8080, host: 8080

config.vm.provision "shell", inline: <<-SHELL 
  passwd -d -u ubuntu
  chage -d0 ubuntu
SHELL
Atenção. Existem seções respectivas para esses dados basta retirar os comentários e modificá-las.

A primeira baixa a imagem do Ubuntu 16.04 (Codinome Xenial Xerus), a segunda informa que será realizado um compartilhamento da porta 8080 entre os sistemas operacionais e por último que no primeiro acesso deve ser definida a senha para o novo sistema. Recomendo que depois olhe com calma esse arquivo pois é ele que controla a máquina disponível no VirtualBox, ou seja, usar o Vagrant é como usar o Apache basta entender como funciona o arquivo de configuração.

e. Obter a máquina virtual
C:\proj>vagrant up
f. Uma vez terminado, basta acessar:
C:\proj>vagrant ssh
Na primeira vez será definido a senha para acessar a máquina, defina-a e digite novamente o mesmo comando.

g. Digitar "exit" se deseja sair da máquina virtual e retornar ao Windows. Para pará-la completamente use o seguinte comando no Windows:
C:\proj>vagrant halt
h. Veja o status do Vagrant com:
C:\proj>vagrant status
Nessa máquina é possível instalar e usar o Docker utilizando todos os comando que já mostrei em publicações anteriores, observe que também associamos a porta 8080 assim será possível subir um site (com o Node.js ou outro servidor) e ver o resultado na máquina Windows.

Infelizmente para este tutorial não gravei nenhum vídeo pelo simples fato de ter abolido completamente o Windows do meu computador pessoal, mas no próximo retomaremos as gravações e agora mesmo com o Windows 7 não existe mais desculpa para não aprender a usar o Docker.

Sei que ficou curioso e está louco para usar o Vagrant com o Docker, mas como? Que tal começar pelo Jenkins? Acesse o blog do Giovanni Nunes e descubra como.

Obrigado e até a próxima
Fernando Anselmo