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