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.