segunda-feira, 30 de junho de 2014

Instalando o plugin do Java no Ubuntu 14.04

Esse micro-tutorial mostra o passo a passo para a instalação do Plugin do Java no Ubuntu 14.04. Usei a versão 64 bits.

1. Baixe a versão mais atualizada da JRE em http://java.com.
Obs: Eu prefiro sempre baixar o arquivo .tgz.
Após o download você terá o arquivo da JRE no diretório Downloads, e o nome dele será algo como jre-7u60-linux-x64.tar.gz.

2. Descompacte no diretório /usr/lib/jvm
Surgirá um subdiretório com o nome similar a jre1.7.0_60.
Obs.: Naturalmente, você precisará de permissão de root para isso.

$ sudo su -
# cd /usr/lib/jvm
# tar -zxvf /home/<usuario>/Download/jre-7u60-linux-x64.tar.gz

3. Inicie o Firefox e desabilite as extensões do Ubuntu: clique no menu "Ferramentas->Complementos" (ou use Ctrl-Shift-A), clique em "Extensões" e desabilite todas as que estejam relacionadas com Unity. No meu caso:

  • Ubuntu Firefox Modifications
  • Ubuntu Online Accounts
  • Unity Desktop Integration
  • Unity Websites Integration
4. Feche o Firefox e verifique se existe o diretório /usr/lib/mozilla/plugins. Se não existir, crie-o:

# mkdir -p /usr/lib/mozilla/plugins

5. Entre no diretório e crie o link para a biblioteca dos plugins:

# cd /usr/lib/mozilla/plugins
# ln -s /usr/lib/jvm/jre1.7.0_60/lib/amd64/libnpjp2.so

6. Inicie novamente o firefox e veja se o plugin está ativo. Para isso, clique na caixa de endereços e digite "about:plugins" (sem as aspas) e tecle enter. Deverá aparecer na página a referência ao plugin do Java:

Java(TM) Plug-in 10.60.2

Arquivo: libnpjp2.so
Caminho: /usr/lib/jvm/jre1.7.0_60/lib/amd64/libnpjp2.so
Versão: 10.60.2
Status: Ativo
Next Generation Java Plug-in 10.60.2 for Mozilla browsers

Ok, o plugin foi instalado. Ao acessar qualquer página que exija o uso do plugin, o Firefox por segurança perguntará se você deseja executá-lo. Basta permitir a execução e o plugin faz o resto.

sábado, 28 de junho de 2014

Arduino: Gerenciando Bibliotecas (parte 1)

Uma das tarefas de quem programa para Arduino é gerenciar suas bibliotecas. Normalmente é uma tarefa simples, mas nem sempre intuitiva.

Nesse mini-artigo, listo algumas tarefas e o passo-a-passo relacionado a elas.

1. Criar uma biblioteca.

Em minha opinião, a melhor forma de se criar uma biblioteca para o Arduino é usar seu editor de programas preferido. O ambiente de desenvolvimento do Arduino foi projetado para criar Sketches, e não bibliotecas.

1.1 Crie um diretório com o nome da biblioteca, por exemplo Testlib.

$ mkdir Testlib

1.2 Crie os arquivos da biblioteca dentro do diretório criado. Nomeie os arquivos como Testlib.h e Testlib.cpp.

1.3 Abra o ambiente de desenvolvimento do Arduino e importe a biblioteca recém criada: Acesse o menu Sketch -> Import Library, e escolha a sua biblioteca. Caso não a visualize, verifique se os nomes foram criados corretamente (somente arquivos .h e .cpp). Numa inclusão correta, surgirá a linha abaixo no sketch:

#include "testlib.h"


1.4 Usando o ambiente de desenvolvimento, compile a biblioteca. Caso surjam erros, volte a editar os arquivos da biblioteca com seu editor de programas.

Para maiores detalhes, ver referência abaixo.

ReferênciaWriting a Library for Arduino

2. Adicionar uma biblioteca de terceiros

Muitas vezes, temos de baixar e instalar bibliotecas de terceiros para certos projetos. Recentemente adquiri um sensor DHT11 (humidade e temperatura) e tive de baixar a biblioteca que o gerencia.

2.1 Baixando os fontes:

Acesse o link http://playground.arduino.cc/main/DHT11Lib, copie os fontes dht11.h e dht11.cpp, salvando como arquivos texto.

2.2 Crie um diretório chamado DHT11 e copie os arquivos para ele.

2.3 Mova o diretório DHT11 (e os arquivos internos) para a pasta das bibliotecas do Arduino.

2.4 Abra o ambiente de desenvolvimento do Arduino e importe a DHT11: Acesse o menu Sketch -> Import Library.

Se tudo foi feito corretamente, surgirá a linha #include <dht11.h> no sketch automaticamente.

Esse é o método manual de instalar bibliotecas. O link a seguir detalha o método automatizado de instalação: http://arduino.cc/en/Guide/Libraries.

3. Incluindo uma biblioteca dentro de outra

Falamos até agora um pouco sobre a criação e instalação de bibliotecas para o Arduino. Agora descreveremos um "arremedo técnico" para que possamos referenciar elementos de uma certa biblioteca dentro de outra.

Esclarecendo o problema: recentemente, trabalhando num projeto de hexápode, tentei incluir a biblioteca "Servo" dentro de uma biblioteca que criei. Minha surpresa foi verificar que não era possível fazer isso. O ambiente de desenvolvimento do Arduino não traz facilidades para incluir uma biblioteca para dentro de outra. Tentei várias formas de include: referenciamento global, local etc. Nada deu jeito.

Então, pesquisando um pouco nos fóruns, encontrei uma dica que resolvel facilmente o problema. Basta escrever a biblioteca conforme o item 1. No Sketch criado, apenas inclua ambas as bibliotecas criadas, tendo o cuidado de colocar primeiro a biblioteca base. Por exemplo, se a biblioteca Testlib que criamos precisa acessar elementos da biblioteca Servo e da DHT11, nós simplesmente incluímos no sketch, na seguinte ordem:


# include <servo.h>
# include <dht11.h>
# include <testlib.h> 


sábado, 21 de junho de 2014

Arduino + Servo + Fonte Externa

Faz cerca de um mês que estou lidando com o Arduino. Adquiri um adquiri um Mega 2560 e, desde então tenho realizado algumas experiências. Hoje completei uma que acho digna de colocar nesse blog, pois poderá ajudar outras pessoas que estejam iniciando. Trata-se de um controlador de servo motor que usa um Arduino e uma fonte externa.

Por que usar uma fonte externa?

Alguns projetos utilizam servos que estão acima da capacidade dos pinos de força do Arduino e este fica resetando. Pode ocorrer também de seu projeto precisar de mais de um servo e o arduino não conseguirá gerar energia a todos.

Dessa forma, muitas vezes existe a necessidade de usar fontes externas para a alimentação do(s) servo(s).

Bom. Antes de seguirmos adiante, um aviso importante:

ATENÇÃO: Esse projeto não tem qualquer garantia de funcionar corretamente. Lembre-se que qualquer erro poderá levar a queimar os componentes usados, e até mesmo a placa Arduino. Eu faço meus projetos correndo esse risco. O que mostro aqui, é o que eu fiz e deu certo comigo, mas não posso dar garantias que funcionará com você.

No meu caso, comprei um servo que é potente demais para ser controlado sem fonte externa. É um servo um pouco maior que os comuns que se usam para robótica e o arduino ficava resetando direto. Ao usar a fonte, o sistema funcionou perfeitamente.

O servo usado foi um motorsat, normalmente usado em antenas parabólicas para alterar a polarização. Segundo o site, as especificações desse motor são:

Frequência de sinal: 60HZ(20ms)
Controle de pulso: 0.8 to 2.2ms
Voltagem: DC 5.0v
Ângulo de operação: 180 +10
Corrente: 180 to 200 mA
Velocidade: 0.3 (60/sec.)
Saída máxima de torque: 2.2 to 2.8 kg/cm
Corrente máxima: 580 to 600ma
Funciona com PWM, (modulação por largura de pulso).
Fio vermelho: alimentação 5 v DC.
Fio branco: Pulso
Fio preto: GND terra
Rotação do servo= 40 Rpm.
PESO: 500 Gramas


Dica: Um servo adequado a pequenos projetos em robótica é menor e pode ser alimentado direto pelo Arduino. Esse que utilizei não é o ideal, mas foi o que pude encontrar no mercado local em minha cidade.

Segue abaixo figura mostrando as ligações realizadas:




Nota: Essa figura foi feita com o Fritzing.

Basicamente:

  1. Ligamos os pinos GND e 5V (nesse caso, 4,8V) da fonte externa no servo;
  2. O GND (ground) do Arquino está interligado ao GND da fonte. Isso é necessário para permitir o controle do servo;
  3. Ligamos o pino 9 do Arduino no cabo de controle do motor. É importante usar um pino que tenha capacidade PWM (Pulse Wave Modulation).

Segue abaixo o código utilizado:

#include <Servo.h>

Servo servo1;
int pos = 0;

void setup() {
  servo1.attach (9);
}

void loop() {
  for (pos=0; pos<180; pos++) {
    servo1.write (pos);
    delay(15);
  }
  for (pos=180; pos>=1; pos--) {
    servo1.write (pos);
    delay(15);
  }
}


Esse código implementa apenas uma rotina de Sweep (gira o eixo do servo em 180 graus e retorna 180 graus, indefinidamente). O mesmo foi descaradamente copiado de: http://arduino.cc/en/Tutorial/Sweep

Ligue a fonte externa e carregue o código de teste no arduino. O servo começará a girar 180 graus, em ida e volta.

Os servo-motores são um dos componentes essenciais a inúmeros projetos em robótica. O que foi exposto nesse texto é uma forma extremamente simples de iniciar os estudos com servo-motores e Arduino.

Bons estudos :)

terça-feira, 10 de junho de 2014

Um Linuxer sobre o OSX parte 1

Dia 06/06/2014

Recentemente surgiu-me a oportunidade ímpar de adquirir um Mac Mini usado que um colega estava vendendo: um i7 quad core com 6GB de RAM e 500GB de HD. Fazia algum tempo que eu cogitava comprar um Mac Mini para substituir meu desktop, que mais lembrava um KingKong em meu escritório: gabinete de excelente qualidade, mas absolutamente enorme.

O Mac veio com o RedHat instalado. Esse meu amigo trabalha para a RedHat com virtualização e havia comprado-o para esse fim. Ele disse que esquecera de colocar o HD de 500GB e ficou de trazer na semana seguinte (era uma sexta feira). Assim que cheguei em casa, liguei o MAC e percebi que a interface gráfica não estava instalada. Para poder começar a testar adequadamente, instalei o Ubuntu 14.04 64 bits Desktop. A instalação fluiu de forma absolutamente tranquila, e o sistema operacional detectou todo o hardware, inclusive a interface de rede sem fio, que não funcionava com o RedHat.

Passei o fim de semana usando o pequeno e eficiente hardware: excelente aquisição.

Dia 09/06/2014

Na segunda-feira seguinte, recebi o HD de 500GB e decidi instalar o Mavericks, pois queria ter suporte fácil ao iTunes e Netflix, e começar a testar efetivamente o uso de um MAC OS. Meus pequenos problemas começaram aí...

Round 1: Criar pendrive de boot.

Acostumado com o procedimento fácil e trivial de criar pendrives de boot no Linux, fiquei perplexo com o procedimento muito mais complexo para criar um do Mavericks. Para ter uma idéia, no Ubuntu, normalmente basta baixar a imagem (ISO), abrir o "Criador de Discos de Inicialização", inserir o pendrive e clicar OK. O sistema faz o resto.

Para o MAC, segue esse tutorialEsse outro confirma o mesmo procedimento.  O processo no Linux é inegavelmente muito mais tranquilo.

Após finalizar a criação do pendrive de boot, espetei-o no Mac e iniciei. O Mavericks deu boot corretamente. Após aceitar o contrato de licença, o sistema me mostra uma tela perguntando em que disco eu quero instalar... mas não mostra qualquer disco! Que houve? Na minha personalidade acostumada com a Lei de Murphy imaginei logo que meu colega havia cometido algum erro ao conectar o HD de 500G. Desligo o Mac, abro-o, removo o HD, limpo os contatos, monto-o novamente (após uma longa luta para encaixar a pequena grade metálica que segura o HD e interface wifi). Quando tento novamente a instalação, o mesmo problema: o sistema não encontra o disco.

Para ter certeza, coloco novamente o pendrive de boot do Ubuntu, e magicamente ele reconhece o HD: estava lá, em toda a sua glória o dispositivo /dev/sda.

Antes de continuar essa saga, cabe um pequeno parágrafo de elogios: O Mac Mini é uma pequena obra de arte da engenharia, belíssimamente montada de forma a utilizar cada espaço. Além disso, o hardware consome muito pouco e a carga térmica é extremamente baixa. Inegavelmente a Apple merece os melhores elogios nesse aspecto. Para se ter uma idéia, e deleito dos leitores, segue link para um tutorial do iFixIt, que trata da instalação de um HD no Mac Mini, cheio de imagens deslumbrantes.

Mas voltemos à narrativa..

Novamente fiquei sem entender: por que o Mac não detectava o HD? Achando que eu havia cometido algum erro na criação do pedrive, recorri à instalação via rede: reboot, tecla alt (uso o teclado ABNT), conecto à wifi e inicio a instalação. Nesse caso o Mac força a instalação do Mountain Lion. Sem problemas, se der certo, atualizo para o Mavericks depois. Mas após aceitar o contrato de licença novamente deparo-me com o mesmo problema. Cadê a #$%! do disco ?!?

Tenho de dizer que é um sofrimento ser noob num sistema operacional. Eu, acostumado com as facilidades do mundo Linux, não fazia ideia que era necessário explicitamente recorrer ao utilitário de discos para fazer um particionamento prévio no disco antes de iniciar a instalação (o Linux sugere isso automaticamente). Terminei descobrindo esse detalhe por tentativa e erro. Após isso, a instalação e posterior atualização seguiu tranquilamente. Deixei o sistema atualizando, e como já era quase 2 da madrugada, fui dormir.

Continua ...

-x-x-x-

Dicas do dia:

1. Não crie pendrives de boot. Use o netinstall;
2. Sempre particione o disco antes da instalação.

Minha opinião após essa experiência: Caso não precise de algo proprietário, como iTunes ou Netflix, continue com o Linux ;)

Nos próximos capítulos: a mudança do idioma default e batalha pelo teclado ABNT.

terça-feira, 18 de fevereiro de 2014

Seu Roteador nos Pertence

Alguns usuários de roteadores ASUS tem sido surpreendidos nas últimas semanas por um estranho arquivo texto em suas pastas. O arquivo tem o título "WARNING_YOU_ARE_VUNERABLE.txt" abaixo seguem trechos do conteúdo (em inglês):

"Essa é uma mensagem automatizada que está sendo enviada a todos os afetados. Seu roteador Asus (e todos os seus arquivos) podem ser acessados por qualquer pessoa no mundo que tenha uma conexão com a Internet. 
(…)
Se você está lendo isso, VOCÊ ESTÁ VULNERÁVEL TAMBÉM.
(…)
Solução: DESABILITE COMPLETAMENTE O FTP E O AICLOUD, IMEDIATAMENTE!

Espero ter ajudado.

Atenciosamente,

/g/"

Essa mensagem está sendo adicionada a dispositivos de armazenamento USB conectados a roteadores ASUS, sem qualquer necessidade de login e senha, explorando-se uma vulnerabilidade que foi descoberta a cerca de oito meses. Tudo indica se tratar de um grupo Hacker tentando alertar sobre o problema, pois não há qualquer relato ou indicativo de roubo de dados ou injeção de malwares.

A falha é extremamente preocupante, pois como demonstrado, todos os arquivos ficam abertos ao público. E já existem listas com milhares de IP's vulneráveis disponíveis na Internet.

A solução parcial é desabilitar os recursos FTP e Aicloud desses roteadores. A solução ideal é a atualização do Firmware, que foram disponibilizadas pela Asus na semana passada.

Alguns modelos de roteadores afetados são: RT-AC66R, RT-AC66U, RT-N66R, RT-N66U, RT-AC56U, RT-N56R, RT-N56U, RT-N14U, RT-N16, e RT-N16R.

Essa notícia foi dada apenas uma semana após a descoberta de outra vulnerabilidade, relacionada a roteadores Lynksys, que permite a instalação de malwares no próprio roteador. Nesse caso, o malware afeta modelos E1000, E1200, e E2400.

Fonte: Arstechnica





domingo, 26 de maio de 2013

Programa de Afiliação ao Firefox

Essa vai para os fãs do Firefox.

A Fundação Mozilla mantém a algum tempo um programa de afiliação de usuários, que visa divulgar seus produtos na Web. Eventualmente, os divulgadores poderão receber alguns brindes (mas nunca valores em moeda). É uma proposta bem interessante e que certamente será do interesse dos fãs mais ardorosos. Infelizmente parece que poucos conhece, portanto estou tentando dar minha humilde contribuição através desse blog.

O registro é bem simples, bastando acessar a página Afiliados Firefox, e preencher um formulário. O novo afiliado poderá escolher o tipo, formato, tamanho, língua e cor do banner a divulgar, e receberá um código HTML que deverá ser inserido em sua página, blog twitter etc.

E para quem quiser me ajudar a subir minha pontuação como afiliado, é só clicar no banner abaixo :)

Atualização

segunda-feira, 29 de abril de 2013

Plantas Emissoras de Luz

Pesquisadores da Singularity University estão tentando desenvolver plantas que emitem luz natural, capazes de substituir a iluminação elétrica das grandes cidades à noite. O motivador é simples e direto: reduzir gastos na produção da iluminação artificial e seus consequentes estragos ao meio ambiente (a poluição gerada pelas usinas a carvão em muitos países). Já o modus operandi não é tão simples. É necessário alterar geneticamente as plantas. Eles precisam inserir o gene da luciferase, um tipo de enzima que permite a bioluminescencia em organismos como o vaga-lume.



Segundo os pesquisadores, essa não será a primeira vez que se altera geneticamente uma planta para que ela brilhe. O grande desafio será otimizar isso para que o brilho seja forte o suficiente para conseguir substituir a atual iluminação artificial.

Recentemente os pesquisadores lançaram uma campanha na Net para arrecadar fundos de doações. A campanha se tornou viral e em três dias eles alcançaram o objetivo inicial de $65.000,00 (isso mesmo: dólares).

A idéia das plantas brilhantes já foi explorada anteriormente em algumas obras de ficção científica e romances espiritualistas.