Pesquisar no Programero

sexta-feira, 29 de agosto de 2008

Internet sob rede elétrica

Já imaginou plugar seu modem na tomada? E melhor, conseguir velocidades que chegam a 200Mbps (lembrando que hoje a maior velocidade é de 30Mbps). Pois é, esse tipo de tecnologia não é nenhuma novidade já em meados do ano 2000, algumas empresas brasileiras fizeram testes, mas nada além disso. Só em 2006 é que ela entrou em foco novamente, com a instalação de uma rede esperimental em Porto Algre, a rede cobre 3,5 quilômetros de extensão atingindo velocidades de até 45Mbps.

Bom percebe-se que sua area de abrangencia e um tanto pequena, vamos ver algumas desvantagens:
  • Manter a alta velocidade com longas distâncias, pelo encapamento plástico "roubar" os sinais de alta frequência;
  • Os fios de cobre com tal frequência podem interferir em alguns equipamentos eletro-eletrônicos, por fazer com que os dados gerem ruído no espectro eletromagnético, além de haver possibilidade de corromper os dados pela captura do sinal de rádios e outros;
  • Da mesma forma, alguns aparelhos podem interferir na transmissão;
  • Emendas, "T"s, filtros de linha, transformadores, e o ligamento e desligamento de eletrônicos na rede elétrica causam ecos do sinal, por criar pontos de reflexão, com isso podendo haver corrupção dos dados;
  • Necessidade de instalação de "repetidores" em cada tranformador externo (aqueles dos postes), pois filtram sinais de alta frequência.
Agora algumas de suas vantagens:
  • Facilidade de implantação;
  • Alta taxa de transmissão;
  • Segurança apurada, devido à criptografia com algoritmo DES de 56 bits;
  • Fácil integração entre dispositivos, eletrodomesticos e eletroeletronicos, desde que estes possuam estas funcionalidades;
  • Monitoração da energia eletrica, com o grid inteligente, as quedas são reduzidas em 80%, bem como diminuição da energia perdida em 10%, pois, num corte, o grid já aciona automaticamente a central e informa o local do ocorrido.

Mas porque cargas d'agua eu estou falando sobre isso então? Pois bem, a Panasonic em parceria com a Associação de Empresas Proprietarias de Infra-Estrutura e Sistemas Privados de Telecomunicações (Aptel) implantou uma rede em Barreirinhas (MA). A Panasonic aguarda a regulamentação do serviço pela Anatel e cogita até a produção dos equipamentos necessários em solo nacional. Questionada quanto a um possivel aumento no consumo de energia eletrica a empresa afirma que, com o sistema implantado e conectado ao sistema das concessionarias pode haver um controle maior dos gastos, gerando até uma redução no consumo.

Funcionamento

Para os interessados, segue abaixo o esquema de funcionamento, retirado do artigo "Entendendo a Inernet sob rede elétrica" de Júlio César Bessa Monqueiro, encontrado no Guia do Hardware.net:

O princípio básico de funcionamento das redes PLC é que, como a frequência dos sinais de conexão é na casa dos MHz 91,7 a 30), e a energia elétrica é da ordem dos Hz (50 a 60 Hz), os dois sinais podem conviver harmoniosamente, no mesmo meio. Com isso, mesmo se a energia elétrica não estiver passando no fio naquele momento, o sinal da Internet não será interrompido. A tecnologia, também possibilita a conexão de aparelhos de som e vários outros eletroeletrônicos em rede, como já dito acima. A Internet sob PLC possui velocidade não assíncrona: ou seja, você tem o mesmo desempenho no recebimento ou envio de dados.

O princípio de funcionamento da rede comercial é parecido, vamos ao esquema:


O sinal do BPL sai da central, indo para o injetor, que vai se encarregar de enviá-lo à rede elétrica. No caminho, o repetidor tem a função de não deixar com que os transformadores filtrem as altas frequências. Chegando perto da casa, o extrator, que deixa o sinal pronto para uso da casa, chegando até o modem BPL, que vai converter para uso pelo computador, através de uma porta Ethernet ou USB. No penúltimo passo, no caminho poste-casa, há 3 meios: por cabo de fibra óptica, por wireless ou pela própria fiação elétrica, este último mais provável.

Como há um repetidor a cada transformador, e nesse sistema com grids inteligentes não se usa mais os atuais “relógios”, descarta-se a desvantagem mais famosa na Internet do uso do PLC - de que os tranformadores, por absorver os sinais, impossibilitariam a instalação.

Analisando em termos de cidade, vamos à mais um esquema:


Veja, que é de modo um pouco diferente do outro, adaptado pela empresa Plexeon, porém com a mesma definição. O sinal sai da estação que o “injeta” na linha, indo para a rede de distribuição – primeiramente à órgãos públicos - e depois às casas, sempre passando por um repetidor ao passo que um transformador passa na linha, e um extrator quando finalmente chega na casa. Note que as casas também poder ser conectadas pelo repetidor.

Para uma rede doméstica, basta ligar um módulo PLC do roteador na rede elétrica, e o do outro computador também, após isso configurando normalmente. Esses módulos têm o nome de “USB to PowerLine”, e é vendido no Brasil pela Naxos.


A especificação mais usada hoje é a DS2, que se originou na Europa. Nos EUA, também é usado o padrão HomePlug. As versões comerciais vendidas no exterior hoje possui velocidade média de 200 Mbits/s. O principal diferencial entre os padrões é a frequência - cada uma com suas vantagens.

Como já visto, o BPL não interfere, na sua frequência, em eletrodomésticos, devido às grandezas serem diferentes. Porém, parte da onda média (1,7 a 3 Mhz) e toda a onda média (3 a 30 Mhz) ficam inutilizadas e prejudicadas, podendo outros equipamentos causarem interferências, como motores e dimmers de luz, além de secadores de cabelos, aspiradores e as furadeiras elétricas, havendo uma menor possibilidade também dos chuveiros elétricos prejudicarem.

Vale lembrar também que os equipamentos PLC não podem ser ligados à no-breaks, estabilizadores ou filtros de linha, pois este bloqueiam sinais de alta frequência.

Bom, e então, o que será do BPL? Apesar de muitas desvantagens, essa nova tecnologia caminha para o mesmo rumo que o maioria: unificação. Transformar a rede de telefonia (através do VoIP), internet e elétrica numa linha só é mais um passo para a evolução. Com relação às desvantagens, podemos dizer que, assim como a tecnologia ADSL, que leva dois tipos de sinais num só fio (dados e voz), e, as interferências podem ser consertadas ao longo do tempo, com novos equipamentos que respeitem essa faixa de frequência, além de outras tecnologias e padrões internacionais que vão sendo naturalmente incorporadas. Ou seja, a maioria dos problemas enfrentados podem ser resolvidos com uma boa dose de tempo. Claro que, essa teoria só é válida se houver interesse muito grande de empresas e principalmente de governos, além de uma cooperação entre companhias de eletricidade, Internet e telefonia. É como a carroça, que pode demorar, mas chega lá. Porém, ela não vai andar se cavalos não a puxarem, muito menos se cada um quiser ir para um lado.

No Brasil, obviamente também pode dar certo, pois muitas empresas do setor de elétrica estão continuando seus testes, além de que tecnologias européias podem ser importadas, isso se nenhuma universidade brasileira desenvolver algo antes. O BPL se mostra como mais uma alternativa de inclusão à Internet, num país onde 95% da população possui energia elétrica. Além disso, como a infra-estrutura é de menor custo, esse sistema mostra-se como uma alternativa mais econômica para os usuários.

Comente este artigo.

quarta-feira, 27 de agosto de 2008

Data e Hora no j2me

Segue um exemplo de como pegar a data e a hora usando o Calendar do j2me:

//
//Método para recuperação da data e hora do sistema
public String dataHora() {
//recupera data e hora atual do sistema
Calendar cal = Calendar.getInstance();
Date date = new Date();
cal.setTime(date);
String mes = String.valueOf(cal.get(Calendar.MONTH) + 1);
String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
String ano = String.valueOf(cal.get(Calendar.YEAR));
String horas = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
String minutos = String.valueOf(cal.get(Calendar.MINUTE));
String segundos = String.valueOf(cal.get(Calendar.SECOND));
//
cal = null;
date = null;
//
//formata a data de modo que o tamanho do resultado seja sempre fixo
//dia
if (dia.length() < 2) { dia = "0" + dia; } //mes
if (mes.length() < 2) { mes = "0" + mes; } //horas
if (horas.length() < 2) { horas = "0" + horas; } //minutos
if (minutos.length() < 2) { minutos = "0" + minutos; } //segundos
if (segundos.length() < 2) { segundos = "0" + segundos; } //
return dia + "/" + mes + "/" + ano + " " + horas + ":" + minutos + ":" + segundos;
}

segunda-feira, 18 de agosto de 2008

Colocar imagem em campo do dbGrid

Considerando que minha pasta de ícones esta no mesmo nível da pasta de minha aplicação, e que eu tenho em meu banco de dados o nome do arquivo isso funciona.

Procedure DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
vl_icone : ticon;
vl_fixo : TRect;

begin
vl_fixo := Rect;
if (Column.Field = ClientDataSet1cone) and (ClientDataSet1NOME_ICONE.AsString '') then
begin
vl_icone := Ticon.Create;
vl_icone.Height := 10;
try
vl_icone.LoadFromFile(('..\Icones\'+ClientDataSet1NOME_ICONE.AsString));
DBGrid1.Canvas.StretchDraw(vl_fixo, vl_icone);
finally
vl_icone.Free;
end;
end;

end;

quinta-feira, 14 de agosto de 2008

O ótimo LWUIT (Java ME)

Todos que começam a desenvolver com o j2me se deparam com várias limitações, mas uma com certeza é a que mais nos incomoda, a interface com o usuário. Para tornar essa tarefa mais fácil, e muito mais profissional foi desenvolvida uma biblioteca chamada LWUIT que suporta componentes visuais, temas, animações e outras coisas mais.
Em uma de minhas visitas a um fórum me deparei com um tópico que me chamou a atenção, era a respeito de layout no j2me, lá recomendaram o uso do LWUIT e a partir dai comecei a estudar.
Logo de cara fiquei bem empolgado com o resultado final dos exemplos, então decidi que irei escrever algumas matérias a respeito, e nessa introdutória deixarei aqui, alem do meu testemunho favorável, links para iniciar a utilização do mesmo.

Veja alguns videos:




No PSP:





Dentro do emulador:





Vários modelos:



Comece por aqui, baixe a biblioteca, veja a documentação e comece com os exemplos:
java.net lwuit

Blog de um dos desenvolvedores, recomendado:
Shai's Java & LWUIT Blog

Fórum especializado:
Forum:lwuit

Blog nacional que já abordou o assunto:
Neto Marin mobility Blog

quinta-feira, 7 de agosto de 2008

Desenvolvimento de aplicações para dispositivos móveis III (Java)

Completanto essa série de três artigos de introdução ao desenvolvimento de aplicações para dispositivos móveis vamos falar de escrita e leitura em arquivos texto. Algo primordial já que boa parte das aplicações necessita de persistencia para os dados.
No j2me existem outras formas para a persistencia, como o RMS, plugins como o Floggy ou mesmo XML, é provável que em posts futuros iremos apresentar como trabalhar com RMS, que é o método mais indicado, mas aqui o nosso foco será o bom e velho TXT.

Iniciando...

Vamos aproveitar a aplicação feita no post anterior e adicionar a ela os elementos necessários, que são:
- 1 textBox com três itemCommand, sendo um para salvar, outro para carregar e o ultimo para sair (ligando esse ultimo ao form).
- 1 itemCommand no form que deve ser ligado a nosso textBox

Nosso fluxo agora ficará assim:


Agora os imports utilizados:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

Logo no inicio de nossa classe precisaremos definir o caminho onde nosso arquivo estará, assim como seu nome:

private String diretorio = "fileconn.dir.memorycard";
private String path = System.getProperty(diretorio) + "meuArq.txt";

Agora nossos métodos para salvar e mostrar o conteudo do arquivo:

//
//Salvando o arquivo

private void saveFile(String fileName, String string) {
try {
//se conecta ao arquivo
FileConnection fconn = (FileConnection)Connector.open(fileName, Connector.READ_WRITE);
//se o arquivo não existir então ele é criado
if (!fconn.exists()) {
fconn.create();
}
//implementação da escrita
OutputStream ops = fconn.openOutputStream( Long.MAX_VALUE );
string = string + "\r\n";
ops.write( string.getBytes() );
//grava obrigatoriamente todos os bytes que estiverem no buffer
ops.flush();
ops.close();
fconn.close();
}
catch (IOException ioe) {
System.out.println("IOException: "+ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Exceção de segurança:" + se.getMessage());
}
}

//
//Carregando o arquivo

public void showFile(String fileName) {
try {
//se conecta ao arquivo
FileConnection fc = (FileConnection)
Connector.open( fileName );
//se não existir ocorre a exceção
if(!fc.exists()) {
throw new IOException("Arquivo não existe");
}
//implementação da leitura
InputStream is = fc.openInputStream();
byte b[] = new byte[is.read()];
is.read(b);
//o textBox recebe o conteúdo do arquivo texto
textBox.setString( new String(b, 0, b.length) );
is.close();
fc.close();
}
catch (IOException ioe) {
System.out.println("IOException: " + ioe.getMessage());
}
catch (SecurityException se) {
System.out.println("Exceção de segurança:" + se.getMessage());
}

}

Agora é só ir até commandAction for Displayables e adicionar:
//para nosso itemCommand5
saveFile(path, textBox.getString());
//para nosso itemCommand7
showFile(path);

Finalizando

Seria interessante que as classes OutputStream e IntputStream fossem verificadas afim de um melhor conhecimento.
A maneira de envio e recebimento de arquivos seja por meio de uma porta de comunicação como o infravermelho, ou por http é muito semelhante ao que acabamos de ver, salvo suas caracteristicas especificas, por isso é interessante estudar esse pequeno exemplo já que provavelmente essa idéia ainda será utilizada.
Em artigos futuros, demonstraremos como receber e enviar arquivos pela web, e como trabalhar com o RMS para persistência de dados.

domingo, 3 de agosto de 2008

Desenvolvimento de aplicações para dispositivos móveis II (Java)

Dando continuidade ao post anterior, iremos criar nossa primeira aplicação, nosso Olá mundo, nada muito elaborado, apenas um passo a passo inicial, mostrando um pouco sobre a ferramenta e suas possibilidades.


Iniciando...

Com o NetBeans aberto vá em Arquivo->Novo Projeto, você verá a seguinte tela:


Após escolher a categoria Moblity, defina o projeto como Aplicativo MIDP, clicando em próximo teremos:


Defina o nome do projeto e os diretórios, não esqueça de desmarcar a caixa Criar MIDlet Olá, na tela seguinte teremos:


No artigo anterior foi definido que nas matérias seguintes usaríamos o SDK Series 40 da nokia, sendo assim defina a plataforma do emulador (aparelho virtual para testar nossas aplicações), o dispositivo, as configurações (CLDC-1.1) e o perfil (MIDP-2.0). Em seguida precisamos apenas avançar e finalizar a criação do projeto.

Nosso projeto está pronto e aguardando o desenvolvimento de nossa primeira aplicação então vamos iniciar criando um novo arquivo (Arquivo->Novo Arquivo), teremos a seguinte tela:


Definimos agora a categoria escolhendo MIDP e o tipo de arquivo um MIDlet Visual, em seguida teremos:


Definimos os nomes e o ícone do nosso novo arquivo e finalizamos, estamos agora a um passo da nova aplicação.


Jogo rápido antes do Olá Mundo

Código-fonte
È aqui que nossa inspiração reside, todo o código inclusive o gerado automaticamente esta aqui.



Tela
Representação gráfica de nossa aplicação, arraste os componentes da Paleta e altere suas propriedades de maneira rápida e intuitiva.



Fluxo
Nesta parte podemos definir o fluxo de nossa aplicação, ou seja, qual formulário irá chamar qual, tudo visualmente também.



Analisador
Aqui poderemos verificar recursos não utilizados e a conformidade com MIDP-1.0, muito bom para os esquecidos.



Primeiro programa

Em primeiro lugar vamos até a área de Fluxo, depois acessar a Paleta e arrastar dois formulários para a tela, feito isso vamos colocar dois itemCommand em cada formulário, mais uma vez arrastar e soltar. Agora devemos clicar no itemCommand Iniciando do formulário que já estava na tela, Dispositivo móvel, e arrastar até nosso form. Do nosso form deveremos arrastar o itemCommand1 de volta para o formulário Dispositivo móvel e o itemCommand para o form1. Por fim, arraste o itemCommand3 do form1 de volta para o form. O que fizemos foi definir o fluxo de nossa aplicação, que iniciará no form, caso o itemCommand seja pressionado o form1 é iniciado, no form1 se pressionarmos itemCommand3 voltamos para o form e finalmente quando pressionamos itemCommand1 no form encerramos a aplicação. O fluxo deve estar como na figura seguinte:



Altere os nomes dos itemCommand de acordo com o desejado, é só selecionar, ir em propriedades e alterar o rótulo.
Vamos agora acessar Tela para visualizarmos nossos formulários, coloquemos um ItemString no form1, em propriedades alteramos o Rótulo para Primeiro Programa e o Texto para Olá Mundo!. Nossa tela deverá ficar assim:


Agora um pouco de códido, em Código-fonte devemos procurar por Generate Method: commandAction for Displayables indo até:

if (command == itemCommand2){

e digitar olaMundo();.


Código do nosso olaMundo:
public void olaMundo(){
StringItem item;
item = new StringItem("Primeira Aplicação II", "Olá mundo, novamente!!");
form1.append(item);
}

Após copiar esse trecho de códido é só "compilar", clicando na setinha verde, ou pressionando F6, nosso emulador irá se abrir, agora é só testar a aplicação. Quer rodar no seu celular? Simples, se não houve alteração na instalação do NetBeans siga esse caminho:

C:\Documents and Settings\usuario\Meus documentos\NetBeansProjects\Exemplo_1\dist

aqui se encontra um arquivo com a extensão .jar, é só colocar em alguma pasta do celular e executar.

Nos próximos artigos darei alguns exemplos de escrita e leitura em arquivos, locais e na web.