sexta-feira, 23 de setembro de 2016

Aprendizado - Instalar o Scratch no Ubuntu

Scratch é um ambiente criado pelo MIT para ensinar Lógica de Programação através de uma estrutura visual de blocos. Sua instalação no Ubuntu requer alguns comandos via terminal que pode ser um pouco complicado para o usuário iniciante mas nada que assuste tanto a ponto de desistir.


A primeira ação a fazer é visitar o site oficial e realizar um download de dois programas, Adobe AIR  e Scratch 2.0 Offline Editor. A partir da versão 2.0 o MIT disponibilizou uma página aonde o Scratch roda online, porém algumas vezes desejamos tê-lo no computador de modo offline.
Para instalar o Adobe AIR (necessário para instalar e rodar o Scratch) seguiremos alguns passos básicos:

1. Abra o terminal com Ctrl+Alt+T.

2. Instalar as bibliotecas i386, que são requeridas para o Adobe AIR.
$ sudo apt-get install libxt6:i386 libnspr4-0d:i386 libgtk2.0-0:i386 libstdc++6:i386 libnss3-1d:i386 libxml2:i386 libxslt1.1:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386
3. Instalar o pacote libgnome-keyring.
$ sudo apt-get install libgnome-keyring0:i386
4. Criar links simbólicos para o gnome-keyring de modo que o Adobe Air possa vê-lo.
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libgnome-keyring.so.0 /usr/lib/libgnome-keyring.so.0
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libgnome-keyring.so.0.2.0 /usr/lib/libgnome-keyring.so.0.2.0
5. Dar permissão para executar o arquivo do Adobe AIR:
$ sudo chmod +x AdobeAIRInstaller.bin
6. Executar o arquivo:
$ sudo ./AdobeAIRInstaller.bin
7. Uma tela gráfica será mostrada para o aceite da licença e continuação do processo de instação. Uma vez concluído, entrar no Nautilus através do SuperUsuário:
$ sudo nautilus
8. Acessar a pasta das aplicações: /usr/share/applications

9. Localizar o aplicativo: Adobe AIR Application Installer

10. Clicar neste e chamar o arquivo baixado do Scratch.

Pronto, agora é só aceitar as licenças necessárias e instalar corretamente o Scratch.

Obrigado e até a próxima
Fernando Anselmo

domingo, 11 de setembro de 2016

DIY - Cardboard a custo R$ 0,00

Estava tranquilamente passeando em um Shopping de Brasília e resolvi entrar na loja da Samsung para ver algumas novidades tecnológicas. O vendedor me mostrou o Óculos VR e tomei um verdadeiro choque ao constatar o preço. Fiquei pensando sobre o projeto orignal chamado CardBoard, da Google.
Para quem não conhece a palavra "Cardboard" pode ser traduzida para "Papelão", isso mesmo é um óculos para imersão 3D totalmente feito com papelão e o custo deveria beirar a ZERO. Só que existem 2 custos na sua confecção: as lentes e os imãs. Porém ao ver o seguinte vídeo:


Fiquei pensando se não seria possível criá-lo realmente a custo ZERO. Os imãs poderia tirar de uma caixa de som velha. então meu maior problema realmente seriam as lentes, não sentia muita confiança nesse negócio de cortar uma garrafa PET mas corri atrás. Meu primeiro teste saiu assim:


Cometi 2 erros nessa lente, primeiro tentei colar com cola super-rápida (tipo Superbond) resultado que a lente ficou completamente embaçada - Tentei arrematar com cola quente. Segundo que deixei bolhas de ar. Mas como era apenas para teste até que funcionou bem, a lente original funciona como uma lente de aumento.


Agora já sabia o que fazer para construir as lentes. Esse outro vídeo pode lhe ajudar com algumas dicas bem importantes.


Acabei usando apenas cola quente para selar as lentes, 2 recomendações: primeiro uma pequena camada interna de cola e arremata com uma externa, segundo deixe um pequeno vão e coloque a água por último. De resto, foi apenas questão da trabalheira de cortar o papelão, pintar (pintar? resolvi pintar de preto para melhorar a imersão 3D), montar, baixar o aplicativo para cardboard e testar. Segue o óculos 3D a custo ZERO.


Funcionou muito bem, com 2 detalhes (sempre os malditos): as lentes devem ser manuseadas com o máximo de cuidado e os imãs deve ser pelo menos um superimã.

2 dicas finais (estou pensando em mudar o título dessa postagem):


Obrigado e até a próxima
Fernando Anselmo

terça-feira, 9 de agosto de 2016

Linguagem de Programação - O faz o Java ser forte?

Tem mais de 10 anos que programo e ministro aulas com a linguagem Java e certa vez ouvi a seguinte pergunta:
O que faz Java ser tão forte no mercado?
Acho que esse é o motivo principal por ministrar aulas, começamos a pensar em algo que sozinho nunca pensaríamos. Realmente, o que tem Java de tão importante assim? Se olharmos a lista do TIOBE a linguagem aparece na liderança com 19,01%, artigos como o JavaWorld mostram que 90% das empresas da revista Fortune 500 usam Java, Rankings de sites como DZone e InfoWorld colocam a linguagem em 1º Lugar na preferência de seus usuários. Será que são esses dados que fazem Java ser forte?
Penso que não isso é uma mera consequência e não o motivo. Vamos dar uma olhada na história de Java para entendermos seu sucesso. Foi lançada em março de 1995 (a versão 1.0 tem a data de janeiro de 1996) e foi algo jamais visto, foram milhares de downloads em um único dia, porém para que servia? Para muita gente era uma forma de programar para Web (nessa data a Internet ainda estava engatinhando). O slogan principal era: "Escreva uma vez e rode em qualquer lugar". Falando francamente a linguagem só atingiu a maturidade em 1998 com a chegada da versão 1.2, até lá era confusa e sem um objetivo definido. Com a Swing a linguagem teve um objetivo construção de aplicativos desktop. Em 2002 veio a versão 1.4 divisora de mundos com os três ambientes conhecidos até hoje JSE, JEE e JME.

Um dia, estava lendo a Exame Informática que tinha uma comparação entre Java e .NET (recém lançada da Microsoft e principal concorrente de Java na época) e chamaram dois especialistas para mostrar os benefícios de cada uma. Achei engraçado que metade do artigo de .NET dissertava sobre "os malefícios de Java" ao invés dos benefícios de se usar essa outra linguagem. Só que um dos malefícios era basicamente o seguinte:
O problema de Java foi a pressa para preencher buracos, o pensamento era: precisamos rodar na Web damos uns tapas no ASP e criamos a JSP, precisamos rodar no desktop criamos a Swing e para acessar banco de dados mudamos a ODBC e criamos a JDBC.
Neste dia entendi um dos fatores para o sucesso de Java, a capacidade em se adaptar rapidamente para qualquer ambiente.

Vejamos um outro detalhe. Quantos amigos conhece que possui um celular com o sistema operacional Java. Esse tipo de celular foi um grande fracasso, mas por adaptação Java entrou nesse mundo dos celulares graças ao Android (que possui por base o sistema Linux mas a linguagem de seus aplicativos é Java). JSF por muito tempo perdeu o espaço para diversos outros Frameworks como Struts, Seam e Spring. Qual a IDE Oficial de Java? Se respondeu Eclipse saiba que é da IBM e foi um pedaço cedido para a comunidade do VisualAge for Java que não alcançou o sucesso desejado (na época os desenvolvedores adoravam o JBuilder - Antiga Borland). A IDE oficial de Java é o NetBeans que nunca atingiu a preferência dos desenvolvedores. De mesma forma o Servidor de Aplicação Glassfish é substituido pelo JBoss (RedHat). O TomCat só foi usado em larga escala quando entrou como parte do Projeto Jakarta da Apache.

E se reparar em toda a história do Java quem fez sucesso foram terceiros que criavam adaptações bem sucedidas porém usando a linguagem Java. Podemos concluir que o segundo fator para o sucesso de Java está em uma comunidade forte para criar/adaptar aplicativos, ferramentas e sistemas que os usuários usem.

Resultado, Java criou um muro de proteção com esses dois pilares (sua capacidade rápida de adaptação e uma comunidade forte) que dificilmente (não acredito que seja impossível) outra linguagem sera capaz de superar. Por esse motivo a linguagem tornou-se um sucesso.

Obrigado e até a próxima
Fernando Anselmo

sábado, 21 de maio de 2016

Software Livre - Em substituição ao Software Pago

Contei a história do meu TCC na Pós em Gestão Empresarial Avançada no meu Blog de Leitura, escrever algo assim nunca é fácil e sempre sobram ideias que gostaria de ver publicadas mas que não cabem no contexto do TCC. Uma dessas ideias foi uma tirinha do blog "Vida de Programador" sobre o Software Livre:


E essa tirinha me fez realizar um levantamento de preços para dotar uma Empresa de Pequeno Porte com os aplicativos necessários ao mínimo de controle de sua gestão. Deve-se considerar que essas empresas são mais sensíveis em relação ao preço e uma redução do custo na obtenção das licenças pode ser considerado um fator estratégico valioso. O valor de investimento para produtos de informática é muito baixa em relação a outras áreas, entretanto soluções como CRM, ERP e Identidade Visual não deveriam ficar restritas as grandes empresas ou, vistas como soluções caras e que não compensam seu investimento.

Utilizando Software Proprietário

Segue uma relação do custo de aplicativos proprietários de uso comum (todas as consultas de preços dos aplicativos proprietários foram realizadas no dia 8 de Março de 2015 através dos sites oficiais).

Iniciamos com a licença do sistema operacional Windows 8.1 versão PRO é de R$ 610,00 (em muitos casos este custo vem embutido na compra do computador). O custo do pacote MS-Office 365 versão Personal é de R$ 169,00 por mês (consulta realizada na Microsoft Store), e em conjunto, obtemos um software de CRM, tal como o Microsoft Dynamics, é de R$ 212,20 por mês.

Um ERP, que é um pacote de Gestão que abrange aplicativos como Controle Financeiro, Controle de Estoque e Integração Bancária, o ContaAzul (um dos mais baratos do mercado) é de R$ 99,00 por mês (versão Pequeno). Para produção de cartazes e imagens que podem ser disponibilizadas em propaganda na Internet, a empresa deve contar com um editor gráfico de imagens tal como o Adobe Photoshop, no qual para empresas deve ser realizada uma consulta com o produtor, porém tomaremos como base o plano para Pessoa Física que adquire o produto como parte do plano Criative Cloud por R$ 44,00 por mês (no site oficial da Adobe).

O próximo da lista é um pacote para auxiliar na criação de documentos tais como revistas eletrônicas, panfletos e todo o material de marketing para a divulgação da empresa, o aplicativo inDesign da Adobe é encontrado no mesmo preço do Photoshop. Ou seja, chegamos a uma conta final de softwares no valor de R$ 399,20 mensais, excluindo o sistema operacional, que a empresa deve desembolsar para ter a sua disposição este conjunto para um único computador.

Mesmo resultado com Software Livre

Uma lista equivalente pode ser criada exclusivamente com Software Livre, de custo zero, incluindo a disponibilização do código-fonte para a realização de qualquer customização necessárias:

  • LibreOffice ou OpenOffice é uma suíte de escritório livre compatível com as principais suítes de escritório do mercado. Destinada tanto à utilização pessoal quanto profissional. Oferece uma completa solução de pacote de escritório, contém um editor de documentos, editor de planilhas eletrônicas, gerente de apresentação, programa para desenho, banco de dados simplificado para a criação de pequenos aplicativos ou mesmo mala direta de clientes e um editor de equações para trabalho matemático.
  • Zurmo CRM é uma aplicação fácil de personalizar e que pode ser adaptada para qualquer tipo de negócio. Criada com uma metodologia orientada a testes para a construção de todas as partes do aplicativo. Isto significa que é possível criar e manter um sistema de CRM com a garantia de que as futuras atualizações não vão causar inconvenientes na instalação atual.
  • OpenERP Brasil como solução de ERP que é uma iniciativa para traduzir e adaptar os módulos nativos do OpenERP11 para atender às leis e regulamentações exigidas no Brasil, tendo como maiores desafios as necessidades fiscais, financeiras e contábeis.
  • Gimp como solução de manipulação de imagens é apontado como um dos melhores substitutos ao Photoshop, este aplicativo reúne uma série de recursos ideais para aplicações comerciais e profissionais.
  • Scribus é um aplicativo para Desktop Publishing, ou seja, uma ferramenta de diagramação para editoração de panfletos, revistas e todo o material de distribuição visual da empresa.

O dinheiro investido nas licenças dos Softwares Proprietários seria melhor utilizado em investimentos nas outras áreas da empresa. Foi relacionado um simples conjunto de aplicativos que podem ser usados independente do ambiente operacional escolhido, seja este Windows, MacOS ou Linux. Desta forma a mudança para o Software Livre pode ser realizada de forma gradual sem a necessidade de mudanças radicais. Como destaca Serrano, Guerreiro & Caldeira (2004), “observa-se uma dificuldade de adaptação dos usuários de outras plataformas”.

Essa foi uma das partes do trabalho que não saíram na versão final, mas que gostaria de publicar como forma de iluminar os Empresários a entenderem a real vantagem na adoção do Software Livre. Não é questão de utopia, de amor ou qualquer dessas coisas apaixonantes dos livros, mas uma mera questão de custo. E que para muitas empresas pode significar sobrevivência.

Obrigado e até a próxima
Fernando Anselmo

sábado, 14 de maio de 2016

Projeto - Teste de Rorschach em Java

O Teste de Rorschach ficou famoso em duas ocasiões, primeira quando estreou o filme "Watchmen" e todos ficaram curiosos com o estranho personagem, a segunda quando foi aplicado a Suzane von Richthofen como forma de tentar entender sua personalidade.


É um teste simples e ao mesmo tempo muito complexo, consiste na apresentação de um cartão "manchado com tinta" (por esse motivo também é chamado de "Teste do Borrão de Tinta") e perguntar a pessoa o que ela está vendo. A partir das respostas (essa é a parte complexa) traçar a personalidade do entrevistado.

O que mais me diverte nesse teste, como programador, é ver que a imagem formada segue um padrão, a tinta é colocada em um lado do cartão e esse é dobrado ao ser aberto é que se forma o desenho. É como se metade do cartão fosse visto através de um espelho.

Então me perguntei se seria possível criar um programa para reproduzir os desenhos em Java? Um programa com o pacote Swing (parte gráfica da linguagem) usa o método paint(Graphics) para criar imagens (criei um RefCard que pode ser baixado aqui sobre esse assunto). Então é possível utilizá-lo para recriar o padrão desse desenho.

Primeiro detalhe é que a imagem deve possuir um tamanho fixo, pensando em uma imagem de 640 px por 335 px, temos que lembrar de alguns detalhes importantes:
  • Pensemos que o papel será dobrado para obter a imagem completa, sendo assim devemos pintar apenas metade da largura da área total (320 px) e reproduzir o mesmo desenho na outra metade em forma espelhada.
  • Deve ocorrer uma maior concentração de pontos da imagem do centro para as bordas.
  • Fica mais destacado o desenho se as cores são variações de preto e vermelho.
A lógica é simples, criar imagens ovais (bolinhas) com altura entre 5 px e 295 px (para não chegarmos ao topo), largura entre 1 px e 30 px e altura entre 1 px e 20 px. Para a posição a esquerda deve existir uma maior concentração de pontos no meio da figura, para isso vamos trabalhar com 5 áreas distintas, a primeira permitir que 150 bolinhas sejam geradas na área total, diminuir 50 px de margem esquerda e desenhar mais 150 bolinhas, e assim vai até chegar na última área de 50 px.

Para cada conjunto de 150 bolinha geradas serão 145 no padrão preto (isso é, com RGB variando entre [0,0,0] preto escuro e [109,109,109] cinza escuro) e outras 5 no padrão vermelho (isso é, com RGB variando entre [255,0,0] preto escuro e [255,109,109] cinza escuro).

O pulo do gato para formar a figura completa e duplicar cada uma das bolinhas geradas no seu correspondente a esquerda imitando um espelho. Imaginemos que uma bolinha foi gerada na posição a esquerda de 10 px (está bem perto do canto esquerdo) com largura de 10 px, ela deve parar no canto direito da imagem. Para isso vamos usar uma fórmula simples, [Tamanho Total] menos a [Posição a Esquerda] menos a [Largura].

Veja 4 imagens geradas pelo programa:





Adicionei dois detalhes ao programa que é um botão para mudar a imagem e outro para permitir salvá-la em arquivo formato PNG. Use esse programa para gerar suas imagens, mudar os padrões de geração aumentando ou diminuindo os valores e principalmente para melhorar seus conhecimentos na prática da linguagem Java.

Baixe o programa completo em: Rorschach

Obrigado e até a próxima
Fernando Anselmo

domingo, 8 de maio de 2016

Sistema Operacional - Adaptações com o Ubuntu 16.04

Muitos usuários esperavam ansiosamente por essa nova versão do Ubuntu, principalmente com a promessa da adição dos pacotes Snappy e a chegada da "Convergência", ambas novidades entraram no sistema de forma muito discreta e teremos que esperar pela versão 16.10 para uma mudança mais efetiva. Porém o que realmente mudou? Resolvi criar uma lista com as principais atualizações que tive que realizar na minha máquina como desenvolvedor de aplicativos.

1. Eclipse

Misteriosamente o Eclipse começou a apresentar um comportamento estranho, ao criar um projeto a tela fica travada, ao criar um pacote, uma classe tudo ficava travado. A solução para este problema envolve uma mudança ocorrida no uso da SWT utilizada para a construção visual do Eclipse. Para corrigir mudar a chamada do Eclipse (no seu arquivo .desktop):
Exec=env SWT_GTK3=0 eclipse

2. Adeus ao Braseiro e Emphaty

Esses programas cairam fora da distribuição original, o primeiro utilizado para gravar CD/DVD e segundo um comunicador de mensagens instantâneas. Acredito que com o uso e aumento da capacidade dos Pen Drivers e do "Armazenamento na Nuvem" poucas pessoas utilizavam o Braseiro e o Skype e Whats derrubou o Emphaty a muito tempo. Se utilizava esses programas basta reinstalar com os comandos (não é necessário importar nenhum repositório):
$ sudo apt install braseiro
$ sudo apt install empathy 

3. Falando de Repositórios

Os repositórios padrões do Ubuntu ganharam muitos programas que antes era necessário um repositório externo, GIT, Musescore, e muitos outros agora são instalados diretamente. Para gerenciar esses pacotes recomendo que instale o PPA Manager com os seguintes comandos (esse precisa de repositório):
$ sudo add-apt-repository ppa:webupd8team/y-ppa-manager
$ sudo apt update
$ sudo apt install y-ppa-manager
Só isso? Exatamente, só isso. A maior diferença que senti com o novo Ubuntu foi em termos de performance que ficou muito mais rápido em relação a versão anterior. Comecei o artigo falando de duas mudanças que os desenvolvedores aguardavam ansiosos e quero encerrar este com duas mudanças que afetou a comunidade.

1. Loja de Aplicativos

A loja agora se chama "Ubuntu Software", muito mais rápida que a antiga "Central de Programas", nela agora é possível atualizar um único determinado aplicativo, porém ainda está passando por acertos, por exemplo, até a data de lançamento não era possível obter aplicativos de terceiros "não confiáveis" isso já foi corrigido (mas gerou um determinado estresse).

2. gEdit

Considerado um substituto do "Bloco de Notas" do Windows, ganhou uma função mais nobre como editor simplificado de programas. Agora é possível inclusive abrir um "Mapa de Visão Geral" (uma visão na lateral direita com a estrutura do código), numerar as linhas ou adicionar (na seção de plugins) uma console para o Python. Essa nova função também não agradou a comunidade, mas acredito que tudo se uma mera questão de adaptação.

As pessoas não estão acostumadas em sair de suas "zonas de conforto", porém é facilmente percebido que é interesse da Canonical realizar mudanças muito mais profundas nas novas versões que virão. E agora é aguardar pelo Yakkety Yak (Ubuntu 16.10 a ser lançado em Outubro deste ano), só uma dica "Yakkety" é um Slang que significa algo como "Falar Demasiadamente"... Então essa versão pode ser traduzida para "O Iaque Falador".

Obrigado e até a próxima
Fernando Anselmo
 

sábado, 30 de abril de 2016

Mobile - Ubuntu Phone ou Android

Certa vez um aluno me perguntou: Qual a diferença entre o Ubuntu Phone e o Android, visto que os dois são uma distribuição Linux para celular? Acho que o detalhe mais precioso em ser professor está exatamente aí, nas questões que normalmente não pensamos e que devemos ter a resposta na ponta da língua (ou usar a velha desculpa, irei pesquisar e lhe darei a resposta).

Mas neste caso a resposta foi simples, simples como uma tese de doutorado, creio que a maior diferença seja que o Ubuntu Phone nasceu como um Sistema Operacional nativo para Linux a partir do Debian enquanto que o Android foi adaptado para ser um Linux. Calma e antes que os defensores do Android queiram minha cabeça explico.

Android nasceu para ser colocado em um Celular em uma época que as pessoas não conheciam a palavra "Convergência". Sua base de construção foi o Kernel do Linux com algumas modificações para se adaptar ao dispositivo móvel, simplificando o Android é uma máquina virtual Java (denominada Dalvik) sobre um Linux, possui suporte para o desenvolvimento de aplicações nesta linguagem através de um conjunto com bibliotecas e serviços. Basta ver qualquer imagem de sua estrutura:


Ubuntu Phone é bem diferente, primeiro que ele nasceu no Desktop, a primeira versão era chamada de Ubuntu Touch e servia para se utilizar com telas sensíveis ao toque, que começavam a aparecerem em muitos Notebooks. A segunda tentativa foi colocar esse sistema no telefone, porém era restrito ao Nexus, e ainda assim muitas vezes travava, consumia muita bateria, não aparecia a som e muitos outros problemas. A terceira foi em 2014 quando surgiu o BQ Aquaris E4.5 Ubuntu Edition, só vendido em 2015 e restrito a Europa.


Paro a história por aqui, que pode facilmente ser lida na Wikipedia, e retorno ao sistema em si. A ideia central da Canonical é criar um sistema que permita a "Convergência", e o que é isso? Pense em todo o hardware que existe a sua disposição: desktop, notebook, tablet, celular, relógio, televisão, carro, e por essa linha vamos. Agora vamos pensar no lado do desenvolvedor ou mesmo de um usuário. Um aplicativo que roda no Desktop provavelmente também roda no Notebook pelo simples motivo do sistema operacional de ambos serem o mesmo. Se o tablet possuir o mesmo sistema então é bem provável que o mesmo aplicativo também rode, se o celular possuir o mesmo sistema, e por aí vai em uma Convergência entre Hardware e Software. Ou seja, seria o melhor dos mundos para qualquer desenvolvedor ou usuário.

É essa a loucura que todos os Sistemas Operacionais perseguem atualmente e podemos dizer que o Ubuntu está na frente, o sistema em desktop está se adaptando para um novo modelo de pacotes (denominado Snappy) e já roda em celulares e tablets com razoável estabilidade e sucesso.

O Android permanece preso ao mundo móvel, não que isso seja uma falha ou um problema, é apenas uma característica de um sistema que nasceu para dispositivos móveis enquanto que o Ubuntu Phone foi definido como um sistema para realizar a Convergência.

Obrigado e até a próxima
Fernando Anselmo