quinta-feira, 30 de novembro de 2017

Tecnologia - O que esperar em 2018

Final do Ano está na porta e é hora de começar as previsões tecnológicas para 2018. Antes de começar devo dizer que sou um simples desenvolvedor que lê e acompanha blogs de tecnologia. Tudo o que escrever nesta postagem está relacionado a uma simples percepção (é como olhar para um céu cheio de nuvens negras e dizer que vai chover) que obviamente pode estar errada e não acontecer.


Essas são minhas apostas para as 5 tecnologias que mais vão aparecer em 2018, traduzindo escolha uma delas, estude e se aprofunde para não ficar fora do mercado:

1ª Crescimento acelerado da Machine Learning. Neste ano esta tecnologia deu seus primeiros passinhos tímidos, mas em 2018 parece que a coisa vai finalmente deslanchar, grandes empresas como Amazon, Google e IBM estão jogando muitas fichas nisso. Esta tecnologia permite o reconhecimento de objetos e ações através de uma câmera. E o que isso vai mudar minha vida? Simples, imagine você chegar em casa e a porta lhe reconhece e abre para você, ao chegar perto do computador ele mostra as notícias que mais lhe interessam, se seu gato (ou cachorro) estiver passando ele pode analisar e verificar se está com fome ou com alguma doença através da identificação de um determinado padrão.

2ª Mais Mundos Virtuais. A um bom tempo atrás surgiu o SimLife, foi um fracasso generalizado pois as pessoas ainda não estavam preparadas para aquilo. Os novos "Mundos Virtuais" estão mais ligados a tecnologia de Realidade Aumentada. Então pense que você pode estar em um apartamento que ainda nem foi construído, ou em uma sala na qual é possível trocar os móveis de lugar apenas mechendo as mãos. Ou participar de um congresso estando presente virtualmente. Os óculos 3D que permitem tal nível de interação tem se tornado cada dia mais baratos (com R$ 50,00 é possível adquirir um) e com eles podemos interagir profundamente com esses mundos.

3ª Descobertas e análises da Ciência de Dados. Data Science veio para ficar e os analistas dessa tecnologia estão se tornando cada vez mais procurados. Neste campo um revolução está acontecendo pois linguagens como R e Python estão se destacando e não irá me supreender em nada que listas como a do Tiobe indique mais crescimento para ambas até o final de 2018 (atualmente R é a 11ª e Python a 4ª).

Chatbot ou Chatterbot. Tem coisa mais chata que ligar para uma empresa e ser atendido por um robô? Disque 1 para fazer tal coisa, disque 2 para outra... Agora imagine ser atendido e você nem saber que se trata de uma máquina. "Serviço de atendimento em que posso lhe ajudar?" acha isso muito futurista? Pois saiba que muita gente está treinando esses robos com Teras de informação para que possam substituir completamente os atendentes humanos de 1º e 2º nível das grandes empresas. Quando você for transferido para um "humano" raramente perceberá a diferença.

5ª Revolução dos Aparelhos Eletrodomésticos. Calma, sua geladeira não vai dominar o mundo, nem se apaixonar pelo forno de Microondas, basicamente isso tem a ver com uma tecnologia chamada IoT (Internet das coisas), demos passos tímidos este ano através do crescimento de placas como Arduíno e Raspberry. Acredito que o próximo ano é que veremos como essas placas vão influenciar aparelhos eletrodomésticos criando a tal "Cozinha do Futuro", imagine chegar em casa e sua cozinha preparar sozinha o seu jantar com aquela receita que sua avó costumava fazer. Acredita que estou viajando muito? Pois saiba que já é possível ter uma horta totalmente automatizada (ver FarmBot), além disso, uma empresa japonesa iniciou a primeira fazenda totalmente operada por robôs industriais que são responsáveis pelo cultivo até a coleta das hortaliças.


E aonde fica o Ser Humano nisso tudo? Simples nas questões de Inovação e Criatividade, "ainda" não conseguimos ensinar uma máquina a criar algo que não existe, essa é uma característica única do Ser Humano, além disso por mais perfeita que seja uma máquina ela sempre precisará de manutenção ou de inovações para adaptar a sua programação. Apesar de já existir um termo chamado "Singularity" isso ainda não passa de mera ficção.


A próxima geração de desenvolvedores deve contar com esses dois fatores para se destacar neste crescente mercado.

Obrigado e até a próxima
Fernando Anselmo

quinta-feira, 19 de outubro de 2017

Ubuntu - Não me arrependo

A três anos atrás fiz uma troca de Sistema Operacional, o Windows pelo o Ubuntu (por favor, Linux é apenas o Kernel), tive que realizar muitas adaptações nesse tempo. Porém, olhando para trás paro e penso que só tenho um arrependimento não ter feito isso mais cedo. Nessa postagem quero explicar os motivos, não se preocupe pois não pretendo convertê-lo nem dizer que a Microsoft é a vilã na face da terra, aprendi que liberdade é exatamente respeitar as escolhas.



80% do que faço com meus computadores (tenho 3 deles) é desenvolvimento de sistemas, o resto dos 20% é uma distração como assistir filmes ou jogar alguns games (no estilo RPG ou tiro no estilo Doom). No primeiro quisito terei que explicar que como desenvolvedor preciso testar muitos softwares principalmente versões betas de aplicativos e que muitas vezes conseguem danificar o Sistema Operacional, o que mais fazia com o Windows era usar o comando "format c:" (estava tão acostumado que trimestralmente fazia isso).

O Windows foi criado para usuários comuns que compram aplicativos em lojas e essas são versões sólidas e estáveis. Não estou denegrindo o sistema, mas nenhum "usuário avançado" usa ele, é só você assistir a vídeos no YouTube dessas pessoas e reparar que normalmente ou estão usando o MacOS ou alguma distribuição Linux. Pelo simples motivo que citei anteriormente, é muito chato ter que ficar formatando constantemente o sistema.

Optei pelo Ubuntu pois foi a distribuição (ou distro como todo mundo chama) que mais fácil me adaptei (já tinha tentado a Red Hat, a Fedora e o Debian). Não quero dizer que é a melhor, apenas foi a que me adaptei e penso que as pessoas deveriam parar com isso de ficar rotulando se essa é boa ou ruim.

Se tive problemas? sim vários, porém consegui resolver todos eles. Já tive placas de vídeo que não funcionava, vídeo que não tocava, som que não saia, certa vez depois de uma palestra minha resolução de vídeo não retornava e fique um bom tempo em 800x600, entre outras coisas que me aconteceram. E é por essas e outras que penso: "nesse quisito o Windows é bem mais tranquilo, principalmente para um usuário iniciante".





Como disse estou com o Ubuntu a 3 anos, comecei com a versão 14.04 e exatamente hoje mudei o sistema para a versão 17.10. E disse que só me arrependo por não ter trocado mais cedo de sistema foi que, mesmo com todos os problemas que passei, nesse tempo não tive mais que formatar meus computadores uma única vez. Só para que você entenda, até o processo de troca de versão no Sistema Operacional no Ubuntu é feita da seguinte forma: o Sistema me avisa que tem uma nova versão disponível e me pergunta se quero atualizar, digo que sim e pronto começa todo o processo de troca (enquanto ele ocorre continuo trabalhando normalmente).

Toda vez que instalo um aplicativo no sistema por mais beta que seja ele não consegue danificar o sistema, por quê não? Simples, porque ele não tem acesso a isso. Não é que as distros do Linux sejam a prova de vírus, é apenas que o vírus não pode chegar no Kernel do Sistema. No Windows seu usuário é Deus e ali é seu Paraíso, nas distros seu usuário é seu usuário e Deus é o "sudo", ou seja, apenas o "sudo" é que tem permissão de machucar o sistema. E você só usa ele em caso de necessidade.

No Windows você tem duas pastas importantes: "Program Files" e "Windows", a primeira é onde estão os programas instalados e a segunda aonde está o Sistema Operacional em si. Nas distros, existem várias pastas importantes, mas você tem beeeeeemmmm delimitado onde é sua casa, e tudo o que instala com seu usuário está limitado a ela. Ou seja, como corromper um sistema que para ser corrompido tenho que querer isso?

Dois programas que são quase nativos do Ubuntu e que agradam a maioria dos desenvolvedores (não que eles não possam ser instalados em outras distros), o Git e o Docker. O primeiro para publicar seus códigos na Internet e o segundo para a criação de contâineres. Resultado, quero testar um banco novo, como o  RethinkDB (um NoSQL), em pouquíssimos passos tenho um contâiner criado com ele e numa área totalmente delimitada, sendo impossível que faça algo no meu sistema que não permita (não me agradou? Mato o contâiner e pronto). Meus códigos? Boa parte está no Git assim não tenho como perdê-los. Outro aplicativo que o Ubuntu interage muito bem é com o Dropbox. E isso porque não estou tratando que linguagens como Python, Perl, Java e Assembly já fazem parte do pacote básico do sistema e que o npm é possível instalar com uma única linha de comando.

Então pergunto, o que mais posso querer como desenvolvedor?

Obrigado e até a próxima
Fernando Anselmo

Deseja saber mais sobre o sistema? Então baixe aqui meu livro gratuitamente "Instalei o Ubuntu e agora?" e talvez você veja que a mudança pode ser algo muito proveitoso.

quinta-feira, 12 de outubro de 2017

Aprendizado - Sabe programar em BASIC?

Neste "Dia das Crianças" queria lembrar um pouco minha infância, me tornei programador por paixão, na verdade foi depois de ter visto no cinema ao filme "Tron" (1982). Meu primeiro computador veio apenas alguns anos depois através de um TK-83C que era um clone do ZX81, resultado a primeira linguagem que aprendi foi Basic (como muita gente da minha geração).

Meu desejo de consumo sempre foi o de comprar um ZX Spectrum oficial, mas as finanças não me permitiram tal luxo. O tempo passou, as máquinas evoluiram, tive vários computadores e o desejo ficou guardado na gaveta.

Em 2014 comecei a usar o Ubuntu e através dele descobri várias coisas que podia fazer, entre elas retornar a meu antigo desejo. Então neste artigo você descobrirá como ter um ZX Spectrum (muita coisa que fizer aqui poderá ser adaptada para outros Sistemas Operacionais) que a partir de agora vou abreviar para ZX.

Instalação do Emulador

O ponto mais importante é o Emulador que é um programa que traduz as instruções para o sistema operacional, escolhi o FUSE por ser gratuito e bem compatível com o ZX. No Ubuntu existem os pacotes oficiais através dos seguintes comandos:
$ sudo apt install fuse-emulator-common
$ sudo apt install libspectrum
O primeiro comando instala o FUSE propriamente dito e o segundo a biblioteca necessária para executar o ZX.

+3 BASIC

Próximo passo é achar o programa para excutar a linguagem BASIC (Beginners All-Purpose Symbolic Instruction Code), escolhi o compilador +3 BASIC.

Para isso baixe o disco aqui e com o FUSE instalado basta clicar neste para que o +3 Basic seja executado e carregado. Na primeira vez pode apresentar um erro, não se preocupe basta esperar um pouco e quando aparecer a mensagem do Loader: "To cancel - press BREAK twice" pressione a Barra de Espaços duas vezes para entrar no menu.


Agora basta selecionar a opção +3 BASIC para entrar no editor. No menu principal do FUSE selecione "Machine | Reset" (ou pressione F5) e devemos voltar para o mesmo Menu. Saia e entre novamente do FUSE e verá que este programa será carregado por padrão.

Passos Iniciais


Primeiro detalhe que devemos conhecer é que o teclado possui algumas teclas completamente diferente do teclado tradicional do PC (principalmente os brasileiros), então veja a seguinte imagem:


Observe que a aspas duplas (") se encontra em cima da letra P, ou os dois pontos (:) na letra Z, para conseguí-los use a combinação Ctrl+P ou Ctrl+Z.

Segundo detalhe é como criar, salvar e ler um programa?

Precisamos criar um drive de disco, no menu superior do FUSE acesse "Media |  Disk | +3 | Drive A: | Insert New...", agora precisamos formatá-lo, para fazer isso no editor digite o seguinte comando:
format "a:" 
Se tudo ocorrer bem receberá a mensagem "No data, 0:1" (aperte barra de espaço para retornar ao editor), digite o comando "cat" para ver os arquivos existentes no disco. Agora vamos proceder um pequeno teste digite a seguinte codificação:
10 LET a = 10
20 PRINT a
Para executar digite o comando "run", se tudo der certo verá o valor 10 na tela e a mensagem "0 OK, 20:1". Conseguiu perceber o que o programa faz? A linha 10 cria uma variável a com o valor 10 e a segundo mostra o valor dessa variável.

Pronto agora que temos nosso programa devemos salvá-lo, para isso digite o comando:
save "prog01.bas"
E após receber a mensagem de OK digite novamente o comando "cat" para verificar que está tudo OK.


Agora pressione F5 para "resetar" o editor. Entre novamente no editor e digite o comando:
load "prog01.bas" e o programa salvo retornará ao editor.

Indo mais além

Em 1985 surgiu uma das melhores revistas de informática para minha geração, na verdade eram livrinhos, chamada Micro Aventura.


Para minha tristeza só durou 10 edições. Cada edição além da história trazia vários programas a serem executados e ao final a explicação de cada um. E foi assim que me aperfeiçoei com o BASIC e realmente comecei a me tornar um programador. É possível baixar os livros neste site (ou comprá-los no Mercado Livre como Edição de Colecionador) e aproveitar tudo o que essa linguagem tem para oferecer.

Quer explorar mais? Então veja esses dois livros:

Understanding Mathematics and Logic Using BASIC Computer Game
Basic Computer Games - Microcomputer Edition

Obrigado e até a próxima
Fernando Anselmo

Dica, quer mais programas para esse emulador? Então não deixe de visitar esse site.


segunda-feira, 2 de outubro de 2017

Divertimento - Brincando com Papel

Uma das artes que mais adoro é chamada de Papercraft (acredito que a palavra japonesa para isso seja Pepakura), e realizar objetos nessa técnica envolve os seguintes passos: Criar (ou localizar) um modelo em 3 dimensões, imprimir, recortar e montar. Ou seja, não é preciso de nenhum material ou habilidade especial apenas tesoura, cola e um bom nível de paciência.

Assim como o Origami (que é a arte dobradura em papel) essa arte teve sua origem no Japão (ou China - existe uma boa discussão sobre isso) e foi popularizada após a II Grande Guerra trazida para os EUA. É diferente no que se refere ao uso de tesoura ou cola. Mas ambos surgiram como um passatempo que virou arte na mão de modelistas profissionais.

Para introduzí-lo nessa arte escolhi um modelo que me apaixonei a primeira vista, assistindo a um documentário sobre o Festival das Lanternas de Peixes Dourados de Yanai.


Fiquei louco com esse peixe e corri atrás até conseguir o modelo em PaperCraft para montá-lo. Até que finalmente encontrei.


Recomendo-lhe apenas 2 coisas, primeiro imprima em uma boa impressora colorida e segundo não use uma folha A4 comum e sim um papel de gramatura maior (mais grosso, preferencialmente entre 120 a 200 grs - O papel normal tem 75) que pode ser encontrado em qualquer boa papelaria.

Aqui está o modelo para impressão: Baixe aqui o PDF

Bom Relaxamento e até a próxima
Fernando Anselmo

PS. Já falei sobre Papercraft nesse blog em um outro artigo.

sábado, 19 de agosto de 2017

Linux - Gravar de Vídeos de Forma Livre vale a pena?

Para disponibilizar os vídeos para meu canal no YouTube utilizo basicamente 2 programas, o primeiro, para gravar, é chamado de SimpleScreenRecord e o segundo, para editoração OpenShot Video Editor. Ambos gratuitos e ambos rodam perfeitamente bem em vários sistemas operacionais incluindo meu Ubuntu.
O que eu acho mais engraçado nas pessoas é que elas acham que é necessário gastar uma grana em softwares (ou que apenas o Mac faz isso) para gerar vídeos de qualidade e que aplicativos gratuitos não prestam. Hoje enquanto estava gerando a segunda aula para meu curso de Spring com JSon aconteceu algo bem inusitado, bem no final (após gravar quase uma hora e meia de vídeo) aconteceu uma queda de energia. Qual o pensamento? Perdi tudo, desisto, vai ficar sem aula e deixa para amanhã. Mas após religar o computador descubro que o vídeo estava lá. Porém, e obviamente, estava corrompido, e lá vem o pensamento de novo: "Perdi tudo, desisto..." (e toda a choradeira comum) só que me lembrei que estava no Ubuntu.

Isso mesmo estava em um sistema operacional que me oferecia várias manipulações de arquivos então a solução foi abrir o terminal e digitar uma simples linha comando para recuperar meu vídeo:
$ ffmpeg -err_detect ignore_err -i arquivo.mkv -c copy resolvido.mkv
Se estivesse em qualquer outro sistema provavelmente estaria, procurando por um software que resolvesse meu problema e, pagando ou realizando alguma espécie de pirataria (atrás de uma versão craqueada). Fico maravilhado como o simples fato de usar um sistema livre me faz pensar em soluções livres.

Não estou falando que todo mundo que usa outro sistema não pensa assim, mas para quem é aficionado pelo Windows ou Mac quando foi a última vez que usou algo livre? Ou pensou em usar, é quase automático, quem usa esses ambientes quando querem um Editor Profissional pensam logo no Photoshop e torcem o nariz para o Gimp ou Krita. Quando querem uma suíte escritório correm para o MS-Office (que agora é Office 365) e esquecem completamente que existe o Libre-Office que faz exatamente a mesma coisa.

Existem excelentes soluções abertas e consigo produzir tudo que quero com elas, não vejo a menor necessidade (pelo menos até o momento) de recorrer a qualquer software "alternativo" que no máximo irá encher meu computador de vírus.

Obrigado e até a próxima
Fernando Anselmo








terça-feira, 15 de agosto de 2017

Instalação do Scratch 2.0 no Ubuntu 17.04

Desde que a Adobe Air abandonou o Linux começou a dar problemas para atualizar a versão do Scratch 2.0 no Ubuntu, a coisa desandou de vez quando instalei a versão 16.10. Depois de muito sufoco finalmente consegui um passo a passo de como instalar e nunca mais ter problemas pois bastará apenas copiar uma nova versão do arquivo .AIR para a pasta.


 Então vamos a um passo a passo, vou dividí-lo em três partes.

1ª Parte - Instalação das bibliotecas i386

# Instalar as bibliotecas i386 necessárias
$ sudo apt-get install libgtk2.0-0:i386 libstdc++6:i386 libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386 libqt4-qt3support:i386 libgnome-keyring0:i386 libnss-mdns:i386 libnss3:i386

# Disponibilizar o keyring para o Adobe Air
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0 /usr/lib/libgnome-keyring.so.0
$ sudo ln -s /usr/lib/i386-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/libgnome-keyring.so.0.2.0

2ª Parte - Instalação do Adobe AIR SDK

# Download do Adobe Air
$ cd ~/Downloads
$ wget http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRSDK.tbz2
$ sudo mkdir /opt/adobe-air-sdk
$ sudo tar jxf AdobeAIRSDK.tbz2 -C /opt/adobe-air-sdk

# Download Air runtime/SDK do Archlinux
$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/adobe-air.tar.gz
$ sudo tar xvf adobe-air.tar.gz -C /opt/adobe-air-sdk
$ sudo chmod +x /opt/adobe-air-sdk/adobe-air/adobe-air

3ª Parte - Instalação do Scratch na última versão disponível

# Pegar a última versão do Scratch em https://scratch.mit.edu/scratch2download/
$ sudo mkdir /opt/adobe-air-sdk/scratch
$ wget https://scratch.mit.edu/scratchr2/static/sa/Scratch-456.0.4.air
$ sudo cp Scratch-456.0.4.air /opt/adobe-air-sdk/scratch/
Um detalhe, aqui você pode abrir o arquivo "Scratch-456.0.4.air" com o com "Compactador de arquivos e retirar o ícone "icons/AppIcon128.png" e copiá-lo para a mesma pasta que foi colocado o arquivo Scratch-XXX.X.Xair.
$ sudo cp /tmp/icons/AppIcon128.png /opt/adobe-air-sdk/scratch/scratch.png
Por fim agora basta criar um arquivo em "/usr/share/applications" chamado "Scratch2.desktop" e adicionar as seguintes configurações nele:
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Exec=/opt/adobe-air-sdk/adobe-air/adobe-air /opt/adobe-air-sdk/scratch/Scratch-456.0.4.air
Icon=/opt/adobe-air-sdk/scratch/scratch.png
Terminal=false
Name=Scratch 2
Comment=Programming system and content development tool
Categories=Application;Education;Development;ComputerScience;
MimeType=application/x-scratch-project
Dar permissão de execução para este arquivo:
$ sudo chmod +x /usr/share/applications/Scratch2.desktop
E pronto, agora basta executar e desfrutar deste ambiente de lógica e programação.


Agora quando surgir uma nova versão basta copiar para a pasta "scratch" e modificar no arquivo desktop e fim dos problemas.

Obrigado e até a próxima
Fernando Anselmo

domingo, 2 de julho de 2017

Finanças - Data Science em Python

O termo Data Science é novo e antigo, novo porque parece que só agora com o advento do Big Data (esse é totalmente novo) começa a ser realmente aplicado e a aparecer profissionais especializados. Antigo pois este termo se refere a cobrir onde e como obter, classificar e organizar automaticamente dados algo que o Analista de Sistemas (esse é bem antigo) já deveria fazer a muito tempo.


Existem várias formas de fazer Data Science, neste Blog, há um bom tempo atrás, mostrei como usar a HP-12C em benefício da extração e manipulação de dados, veja alguns artigos:
Mas com a evolução de vários produtos as linguagens de programação alcançaram níveis incríveis de busca e localização de dados. Por exemplo podemos utilizar APIs de sites financeiros para retornar os dados do preço histórico para o símbolo do ticker que especificamos e para o período de tempo que pedimos. Uma vez de posse dos dados, iremos montar gráficos de comparação para melhor representar e manipular toda essa informação. A minha única dúvida é? Sabe fazer isso?

Resolvi usar os benefícios da linguagem Python para auxiliar todos aqueles que se interessam em descobrir esse novo mundo, e o melhor, de forma totalmente gratuita através do meu canal no YouTube. Assista aqui o vídeo introdutório:



Junte-se a mim e não fique para trás, descubra semanalmente o que é Data Science. Já foi dada a largada e provavelmente as empresas vão começar a procurar profissionais que utilizam e dominam a Ciência dos Dados.

Obrigado e até a próxima
Fernando Anselmo


sábado, 24 de junho de 2017

Sails.js - Eis o motivo que optei por esse Servidor

Chegou no momento da minha vida que resolvi fazer um trabalho de pesquisa (significa que não estava fazendo nada para melhorar sua carreira e resolvi ver o que o mundo podia me oferecer, não confunda isso com trabalho de faculdade) sobre um Servidor (padrão Node.js) que poderia me prover serviços. Depois de algum tempo optei pelo Sails.js.

Cheguei nesse resultado após ficar tendencioso entre quatro servidores (cortei a extensão js para simplificar): Express, Restify, Hapi e Sails (por favor não entenda que os outros são ruins apenas não me adaptei a eles). Agora não tinha mais escolha o máximo que poderia fazer era um teste de campo com cada um e ver qual deles me atendia.

A lista abaixo de prós e contras representam as observações que tive sobre cada um deles, não é uma regra geral ou uma opinião formada pelo mundo.

Express

Prós:
  • Bom ponto de partida
  • Baixa curva de aprendizado
  • Próximo ao padrão Node.js para Web Middleware
  • Totalmente customizável
  • Alvo no navegador e template
Contras:
  • Todos os endpoints devem ser criados manualmente
  • Sem padrão ou prescrição, tipo DIY (Do it yourself - Faça você mesmo)

Restify

Prós:
  • Boa estabilidade
  • DTrace automático e suporte para todo handlers ou plataformas
  • Construído em throding
  • Suporte SPDY*
  • Estrita API com total controle sobre as interações HTTP
  • Visibilidade dentro das características da App
Contras:
  • Todos os endpoints devem ser criados manualmente
  • Sem padrão ou prescrição, tipo DIY
  • Pouca documentação

Hapi

Prós:
  • Suportado pelo Labs Walmart
  • Controle granular
  • Detalhada referencia da API com suporte para geração da documentação
  • Significantemente mais funcional para construção de Web Servers
  • Pseuda prescrição com abordagem para configuração cêntrica
  • Caching, Autenticação e validação de dados
  • Bom conjunto de Plugins, com base em arquitetura escalável 
  • Boa construção de blocos, mas deixa para você seis próprios dispositivos para padrões de projeto
Contras:
  • Esconde módulos específicos
  • Todos os endpoints devem ser criados manualmente

Sails

Prós:
  • MVC - possibilidade de fazer Visão e Serviços em um só lugar
  • Rápido desenvolvimento RESTful API
  • Convenção sobre a configuração (estende o Express)
  • Construído sobre modelos de uso (ORM)
  • Suporte a RPC, Web e Mobile SDK
  • Conectores de dados
  • Totalmente configurado quando necessário.
  • Extensa documentação
  • Suporte comercial e fulltime ao projeto (Loopback)
  • Serviços Mobile (Push, Geo, Storage, Sync, Offline, File, Device, User)
  • Autenticação, validação e autorização
  • Endpoints são criados através de geração automática
Contras:
  • Alta curva de aprendizado
  • Deve obrigatoriamente seguir o modelo prescrito (fiquei na dúvida se colocava isso como um pró ou contra)
Não escolhi o Sails.js por ter poucos contras (inclusive você pode encontrar muito mais coisas contras), foi o servidor que mais rápido me adaptei e o que atendeu as minhas necessidades. Recomendo que ao escolher um Servidor reduza sua lista a um número aceitável e teste cada um deles vendo o que melhor lhe atende. Nunca parta de opiniões formadas.

Deseja aprender mais sobre o Sails.js? Baixe aqui uma apostila gratuita que criei.

Obrigado e até a próxima
Fernando Anselmo

* SPDY (pronunciado speedy) é um protocolo de rede desenvolvido principalmente pela Google para transporte de dados pela internet. Apesar de não ser atualmente um protocolo padrão, o grupo que está desenvolvendo o SPDY está trabalhando em direção a uma padronização cuja última versão é o spdy/4 (Wikipédia).

domingo, 4 de junho de 2017

Kotlin - Apenas alguns dados

Kotlin foi criada pela JetBrains, uma empresa conhecida pela criação de ferramentas de desenvolvimento para profissionais. Em agosto de 2011, a JetBrains publicou uma postagem no blog, porque precisava criar uma nova linguagem e explicando os motivos de sua criação. Veja os principais pontos:

 
  • Para aumentar sua produtividade: Na época, a equipe JetBrains escrevia suas IDEs baseados em IntelliJ quase que inteiramente em Java e isso demorava muito tempo para compilar com o javac. Seu desejo era aumentar a produtividade ao mudar para um idioma mais expressivo. 
  • Para impulsionar as vendas da IntelliJ IDEA: Queriam que suas estruturas e ferramentas de desenvolvimento empresarial para a Kotlin fossem parte da IntelliJ IDEA Ultimate (versão comercial) aumentando suas vendas. 
  • Dirigir os negócios da empresa mantendo sua confiança: JetBrains é confiável por muitos desenvolvedores profissionais. Era necessário impulsionar os negócios da empresa e atrair mais pessoas para sua abordagem de desenvolvimento de ferramentas, aumentando a consciência da comunidade sobre JetBrains e mantendo a confiança. 
E quais são as características dessa nova linguagem:


  1. Código aberto: Kotlin é distribuído sob a Licença Apache, Versão 2.0. O Kompiler (compilador Kotlin), o plugin IntelliJ IDEA, os aprimoramentos nas bibliotecas básicas de Java e as ferramentas de compilação são de código aberto. 
  2. Interoperabilidade com Java e Android:  É 100% interoperável com Java e Android. Isso significa que todo o seu código Java / Android atual funciona perfeitamente com o Kotlin. Além disso, permite compilar para módulos JavaScript. 
  3. Concisa e expressiva: A estimativa aproximada indica que é possível eliminar as linhas de código em aproximadamente 40% (em comparação com o Java). Meios expressivos, é fácil escrever código que humanos e compiladores podem entender facilmente. 
  4. Fácil de aprender: A linguagem puxou o que existia de bom em Java, Scala, Groovy, C#, JavaScript e Gosu. Aprender Kotlin é fácil ao conhecer alguma dessas linguagens de programação. É mais fácil de aprender se conhece Java. 
  5. Fácil de usar: A Kotlin é desenvolvida pela JetBrains, uma empresa conhecida pela criação de ferramentas de desenvolvimento para profissionais. É possível escolher qualquer IDE para executar o Kotlin ou criá-lo a partir da linha de comando. 
  6. Segura: Destina-se a eliminar perigos de referências nulas do código (uma grande dor de cabeça em Java). Além disso, é estaticamente digitado, o que dá capacidade para capturar mais erros em tempo de execução (tipo seguro). 

Simples comparativo

Apenas para questões de análise compararemos alguns blocos de códigos em linguagem Java e o similar escrito em Kotlin.

1. Saída da Informação
// Java
System.out.print("Hello World");
System.out.println("Hello World");

// Kotlin
print("Hello World")
println("Hello World")
2. Criação de Variáveis
// Java
String frase = "Hello World";
final String frase = "Hello World";

// Kotlin
var frase = "Hello World"
val frase = "Hello World"

// Kotlin Opcionalmene
var frase: String = "Hello World"
val frase: String = "Hello World"
3. Objetos nulos
// Java
String frase;
frase = null;
if (frase != null) {
  int length = frase.length();
}

// Kotlin
var frase : String?
frase = null
frase?.let {
  val length = frase.length
}
4. Concatenação de Strings
// Java
String frase1 = "Hello";
String frase2 = "World";
String mens = "A frase é: " + frase1 + " " + frase2;

// Kotlin
val frase1 = "Hello"
val frase2 = "World"
val mens = "A frase é: $frase1 $frase2"
5. Comparação do Objeto e sua Classe
// Java
if (object instanceof Car) {
  Car car = (Car) object;
}

// Kotlin
if (object is Car) {
  var car = object as Car
}

Esse artigo foram apenas alguns dados do que vem a ser essa nova linguagem de programação é como é possível utilizá-la a fim de obter alguns benefícios, ficou interessado? Então acompanhe a série de vídeos que estou lançando a cada semana no meu canal do YouTube sobre o Kotlin.

Obrigado e até a próxima
Fernando Anselmo

domingo, 28 de maio de 2017

Kotlin - Olá Mundo

É tradição criar o primeiro programa em uma nova linguagem o famoso "Olá Mundo" (Hello World), e quem sou eu para quebrar essa tradição. Esse tutorial será todo realizado com meu ambiente (Ubuntu 17.04 com a OpenJDK 8.0) desse modo faça as devidas adaptações para seu ambiente.
Primeiro passo é óbvio consiste da instalação do ambiente. Isso é feito com dois comandos no terminal:
$ curl -s https://get.sdkman.io | bash
$ sdk install kotlin
O primeiro realiza o download do projeto SDKMAN e disponibiliza o comando SDK para o bash, para usar o segundo comando deve-se sair e entrar novamente no terminal. O segundo comando instala, basicamente, duas ferramentas kotlinc (o compilador) e kotlin (o executor), seriam os correspondentes a javac e java.

Segundo passo é criar o programa nessa linguagem, para isso abra um Vim, Nano, Editor de Comandos, ou qualquer outro editor de sua preferência e crie um arquivo chamado hello.kt com o seguinte conteúdo:
fun main(args: Array<String>) {
  println("Hello World!")
}
Saia do editor e para compilar digite o seguinte comando:
$ kotlinc hello.kt -include-runtime -d hello.jar
Nesse momento começam as diferenças entre Java não será criado um arquivo compilado (correspondente ao .class de Java) mas uma biblioteca (padrão JavaARchive) que pode tanto ser executada com o Java:
$ java -jar hello.jar
Quanto com Kotlin:
$ kotlin -classpath hello.jar HelloKt
Observe que nesse segundo caso é quando definimos o nome da classe do programa (HelloKt), outra ação bem diferente de Java é que podemos entrar em um ambiente da linguagem para testar os comandos, para isso digite:
$ kotlinc-jvm
Ao entrar tente o comando println("Hello World!"). Para sair desse ambiente digite :quit.

Descobrindo o Kotlin:

Pronto, agora já está habilitado para começar a realizar testes com essa nova linguagem, lembre-se que normalmente quem sai na frente obtém os melhores lugares.

Obrigado e até a próxima
Fernando Anselmo

terça-feira, 23 de maio de 2017

Kotlin - Vai tomar o Trono de Java?

Vou começar essa postagem bem diferente de todas as que você já viu por aí, primeiro duas perguntas: "Kotlin vai derrubar Java?" e "Kotlin vai substituir Java?". E não será preciso ler todo blog para saber minha resposta: "Sinceramente, não sei!". Acredito que Java foi a linguagem que por mais tempo programei programo. O problema é que todo esse tempo me fez ver alguns problemas nela.

O principal problema existe uma facilidade e complexidade da linguagem. Facilidade pois Java tem muitos poucos comandos e complexidade por ter uma biblioteca muito grande e difícil de assimilar tudo sem exigir muito entendimento de alguns conceitos. Deixe-me mostrar um simples "Hello World" escrito em Java:
public class Hello {
  public static void main(String [] args) {
    System.out.println("Hello World");
  }
}
Se já viu qualquer programa escrito nessa linguagem saiba que para um professor explicar o significado desses códigos ao iniciante é bem complicado, primeiro devemos falar sobre classes, em seguida o que são métodos estáticos, retornos de método, arrays, Classe System, objeto out, método println (e sua diferença para o print) e finalmente a classe String. A coisa complica mesmo quando desejamos sair desse método para outro não estático. Em Kotlin é melhor? Julgue isso com o mesmo exemplo:
package hello

fun main(args: Array) {
   println("Hello World!")
}
Não é que seja melhor ou pior, é simplesmente mais intuitivo o que isso está fazendo. Java começou a ter problema no seu início com as Applets que foram rapidamente substituídas pela Swing que por sua vez deu lugar na entrada do mundo Web e por fim foi parar no celular com Android. Foi anunciado agora que o Android vai adotar TAMBÉM a Kotlin.

O grande problema de Java sempre foi não ter um Pai (ou ter um Pai que não cuidava muito bem de sua filha - a falecida Sun sempre foi uma empresa de hardware e não de software). Java sofreu quando ganhou um Pai Adotivo (a Oracle) e se dividiu em duas (atualmente temos a OpenJDK), resultado que isso apenas tornou a linguagem mais confusa do que merecia, Java é uma adolescente e se fosse uma pessoa teria sérios problemas.

Afinal de contas o que é Kotlin, acredito que algumas pessoas se lembrem da (também falecida) Borland. Era uma empresa voltada a grandes ferramentas de programação como os conhecidos Borland Pascal, Delphi e JBuilder. Quem assumiu seu trono foi a JetBrains com uma série de fantásticas ferramentas para os desenvolvedores como PyCharm, WebStorms, IntelliJ e o Android Studio. Kotlin nasceu nesse meio.

Sinceramente acho que ainda veremos muita coisa antes de afirmar que Java está perdendo sua liderança para Kotlin, mas acredito que não me importo com isso, me importo é saber qual das duas me manterá empregável e a resposta é sim, pretendo estudar essa linguagem (assim com estudei Groovy, R e Go) e recomendo fortemente que faça o mesmo. Se a substituição vier prefiro estar preparado do que chorar porque me amarrei a uma linguagem que agora não passa de história (como Clipper, Fortran ou Algol).

Obrigado e até a próxima
Fernando Anselmo

PS. Pode se preparar para me ver falando ainda muito dessa linguagem.





domingo, 21 de maio de 2017

Sails.js - Um caso de amor

Sabe aquelas tecnologias que quando você começa a conhecer bem se torna um verdadeiro caso de amor? Assim foi comigo e o Sails.js. Não foi apenas questão de achar o framework um dos mais interessantes que vi nessa nova geração de JavaScript. Mas descobri no Sails um servidor Node.js completo com a disponibilização de serviços, uma parte visual interessante e toda flexibilidade que precisava para tocar meus projetos.

Sails.js é framework Javascript projetado para se assemelhar a arquitetura MVC de frameworks como Ruby on Rails. Foi escrito em Node.js e utiliza Express como um servidor web. Além disso, é fornecido com o Waterline ORM, simplificando a camada de dados, mas se desejar pode-se trocar os adaptadores para a maioria dos bancos de dados SQL ou NoSQL.

Resolvi expor esse caso para a comunidade e para isso começou com um Paper (draft) que coloquei gratuitamente na Academia.edu de modo que possa baixá-lo gratuitamente. E não pretendo parar por aí. No meu Canal do YouTube pretendo lançar uma série de vídeos mostrando algumas possibilidades interessantes para realizar com este MVC.

Assista ao primeiro vídeo:


Obrigado e até a próxima
Fernando Anselmo

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