Pesquisar no Programero

segunda-feira, 18 de julho de 2011

Netduino + LCD Nokia 5110

Em meu post anterior falei um pouco sobre o Netduino, fizemos nosso primeiro “Hello World” com a luz da própria placa piscando e agora vamos escrever em uma tela de LCD.
O LCD que eu escolhi foi o Nokia 5110, ele é bem simples, tem baixo consumo de energia e possui um único chip para todas as suas funções, tem 84 colunas por 48 linhas e originalmente foi desenvolvido para celulares. Eu o escolhi por ser diferente dos tantos LCDs menores (16 colunas por 2 linhas) que eu vi em vários tutoriais, como encontrei no próprio fórum um post dedicado a ele me empolguei e decidi que ele seria minha escolha (para quem estiver interessado eu comprei aqui).
lcd_nokia_5100
Quando abri a caixinha vermelha da sparkfun e peguei o LCD a primeira coisa que me vaio a cabeça foi “e agora como eu ligo esse cara no Netduino”, como eu não tinha ideia entrei no fórum e perguntei e prontamente me ajudaram, em menos de dois dias meu amigo Stefan (moderador do fórum) documentou como fazer essa conexão (para mais detalhes).
image
Na verdade foi tudo bem simples, tive apenas que soldar pinos no LCD para mantê-lo fixado na breadboard e depois conectar os cabos de acordo com a imagem, para mostrar texto na tela bastou usar o driver já implementado. O legal mesmo foi a conversão que existe para imagem, é possível transformar uma imagem em bytes para mostrar no LCD (a foto acima esta fazendo isso).
Dessa vez não colocarei código, no fórum esta tudo bem documentado e funcionando bem, então até a próxima.

quinta-feira, 7 de julho de 2011

Netduino

Recentemente o adquiri para um projeto da especialização, mas o que ele é e porque foi minha escolha?

Bom primeiramente como era necessário o uso de .net para esse projeto comecei a procurar algo diferente e então encontrei o netduino, que é uma plataforma eletrônica open source que usa o .net micro framework. Maravilha não? Com isso poderei usar c# para controlar um hardware!

netduino2

Infelizmente não o encontrei no Brasil, tive que importar, acabei escolhendo a Proto Advantage para fazer a compra e como meu primeiro pedido acabou no buraco negro dos correios o pessoal de lá acabou me mandando outro sem custo algum, tive apenas que arcar com metade do frete (fica ai a dica para os interessados, o atendimento dessa empresa é ótimo).

Já existe uma comunidade relativamente ativa, no fórum do site oficial existem vários projetos já em andamento com drivers para lcds, rfids, rede, sensores entre outros, tudo bem explicado, com os esquemas eletrônicos e exemplo dos códigos (sem contar a boa vontade do pessoal, sempre respondendo de pronto as novas postagens).

Um passo a passo já existe no site mas deixo aqui um resumo do que é preciso e também um código do que seria nosso primeiro hello world !

O que preciso instalar?

  1. Microsoft Visual  C# Express 2010
  2. Microsoft .Net Micro Framework v4.1 SDK
  3. Netduino SDK v4.1 32bits ou Netduino SDK v4.1 64bits

Tudo instalado e agora?

Ao conectar o netduino ao pc pelo cabo usb os drivers devem ser instalados automaticamente, feito isso abra o Visual Studio e crie um novo projeto (New Project => Visual C# => Micro Framework => Netduino Application), o que teremos será uma aplicação nos moldes de um console application.

Vamos ao código

Em nosso primeiro exemplo faremos com que o LED programável da própria placa pisque, basicamente iremos criar um OutPutPort para controlar a voltagem desse LED, em seguida, dentro de um loop, faremos com que esse LED ascenda e apague dentro de um intervalo, segue o código:

  1: using System.Threading;
  2: using Microsoft.SPOT.Hardware;
  3: using SecretLabs.NETMF.Hardware.Netduino;
  4: 
  5: namespace NetduinoApplication1
  6: {
  7:     public class Program
  8:     {
  9:         public static void Main()
 10:         {            
 11:             int i = 0;
 12:             OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
 13:             while (i < 20)
 14:             {
 15:                 led.Write(true);   // liga o LED
 16:                 Thread.Sleep(250); // aguarda 250ms
 17:                 led.Write(false);  // desliga o LED
 18:                 Thread.Sleep(250); // aguarda 250ms
 19:                 i++;
 20:             }
 21:         }
 22: 
 23:     }
 24: }
 25: 

 


Bom é isso, nos próximos meses terei muito a fazer com esse cara, sobrando um tempo eu postarei aqui meu progresso.

quarta-feira, 6 de abril de 2011

Antes do hello world um pouco de teoria (Android)

Eu sei que o legal de desenvolver é pular a parte chata (documentação e teoria) e ir direto para o desenvolvimento, fazendo de cara o bom e velho hello world, ok sem problema, mas depois é bom dar uma olhada nos fundamentos para ter noção das possibilidades da plataforma.

 

Um aplicativo dentro do sistema Android

As aplicações Android são codificadas em Java, depois de tudo compilado, código e recursos são colocados em um pacote, com extensão .apk, esse é o “instalador” da apicação desenvolvida.

Depois de instalado, a aplicação fica em seu próprio “sand box”:

  • O Android é um SO baseado em Linux, cada aplicação é tratada como um usuário distinto;
  • Cada aplicação recebe um ID de usuário único, onde apenas esse usuário possui permissão de acesso aos arquivos da aplicação;
  • Cada processo tem sua própria máquina virtual (VM), então o código de um aplicativo é executado isoladamente de outras aplicações.
  • Cada aplicativo é executado em seu próprio processo, que inicia quando um dos componentes da aplicação precisa ser executada e encerra caso contrário para a liberação de memória;

Desta forma, o sistema Android implementa o princípio de privilégio mínimo. Ou seja, cada aplicação, por padrão, só tem acesso aos componentes que ele necessita para fazer o seu trabalho e nada mais. Isso cria um ambiente muito seguro em que um aplicativo não pode acessar partes do sistema para o qual não é dado a permissão.

Porém existem maneiras de compartilhar dados com outras aplicações ou mesmo acessar outros serviços:

  • É possível configurar duas aplicações com o mesmo ID, de forma que ambas podem compartilhar seus recursos;
  • Um aplicativo pode solicitar permissão para acessar os dados do dispositivo, como contatos do usuário, mensagens SMS, o armazenamento (cartão SD), câmera, Bluetooth e outros. Todas as permissões devem ser concedidas pelo usuário no momento da instalação.

 

Componentes de aplicação

São os blocos de construção de uma aplicação, onde cada um permite uma maneira de entrada do sistema para a aplicação. Nem todos os componentes são pontos de entrada real para o usuário e alguns dependem uns dos outros, mas cada um existe como uma entidade própria e desempenha um papel específico, cada um é um bloco único que ajuda a definir o comportamento global da aplicação.

Existem quatro tipos diferentes de componentes de aplicação. Cada tipo serve a um propósito diferente e tem um ciclo de vida distinto que define como o componente é criado e destruído, são eles:

Activity

O activity representa uma tela de inteface com o usuário, uma aplicação pode conter várias activitys cada uma com seu propósito e a aplicação pode iniciar de qualquer uma delas se assim for permitido. Um exemplo poderia ser um activity de login, outro de menu e outro de cadastro, a menos que exista algum controle é perfeitamente possível iniciar a aplicação de qualquer uma delas.

Services

Os serviços não possuem interface com o usuário, possuem como propósito executar operações em segundo plano, mesmo quando a aplicação não esta ativa, como por exemplo realizar verificações para a aplicação quando o usuário estiver em outra ou tocar uma música por exemplo

Content provider

Sua função é gerenciar dados do aplicativo, como arquivos ou banco de dados. Ele também é capaz de permitir que outros aplicativos acessem esses dados, um exemplo disso é o content provider do Android que fornece informações de contatos do usuário.

Broadcast receivers

É o componente que recebe mensagens de sistema, como por exemplo desligamento de tela ou bateria fraca, também podem ser usados para criar notificações para o usuário. É comumente usado para iniciar serviços.

 

Ativando componentes

Três dos quatro tipos de componentes activitys, services e broadcast receivers são ativados através de uma mensagem assíncrona chamado intent. Intents são componentes individuais que se ligam uns aos outros em tempo de execução.

Para as activityse services, o intent define a ação a ser executada (por exemplo, para "ver"ou "mandar" alguma coisa), e pode especificar o URI dos dados para agir sobre (entre outras coisas que o componente a ser iniciado necessita de saber ).

Para broadcast receivers, o intent simplesmente define a mensagem a ser (por exemplo, uma transmissão para indicar a bateria do dispositivo é reduzido inclui apenas uma seqüência de ação que indica "a bateria está baixa").

O content provider, não é ativado por intents, ele é ativado por um pedido de ContentResolver. O content resolver manipula todas as operações diretas com o content provider. Isso deixa uma camada de abstração entre o content provider e as informações sobre o componente requerente (por segurança).

 

O arquivo manifest

Para que o Android possa iniciar um componente de nosso aplicativo, ele precisa antes de mais nada conhece-lo, por isso todos os componentes devem ser declarados no AndroidManifest.xml (fica na raiz de nossa aplicação). Além de nossos componentes também devem ser declarados os recursos do aparelho que serão utilizados, como acesso ao cartão SD ou navegação na internet, bibliotecas utilizadas, nivel de API entre outras coisas.

Recursos

Em geral as aplicações são formadas por muito mais do que código, como imagens, sons, estilos, definições de layout, cores, enfim uma infinidade de outras coisas.

Com recursos fica mais fácil realizar uma mudança no estilo das telas por exemplo sem a necessidade de alterar o código da aplicação, para acessar os recursos basicamente é necessário apenas que se conheça seu ID.

Um novo projeto Android vem com três grupos diferentes de recursos, drawable (aqui ficariam as imagens usadas pelo sistema), layout (aquios arquivos XML que definem as telas do sistema) e values (arquivos XML no estili INI, com nome e um valor).

Encerrando

Bom era isso, se você chegou até aqui tenho certeza que agora possui uma ótima noção de como as coisas funcionam no Android, para ver na integra o documento de fundamentos sobre o Andoird (sem tradução meia boca) é só acessar aqui.

quinta-feira, 31 de março de 2011

Boa Senador !

Recebi um e-mail de minha amiga Malba essa semana falando sobre um projeto de lei do Senador Cristovam Buarque propondo que todo político eleito (vereador, prefeito, Deputado, etc.) seja obrigado a colocar os filhos na escola pública.

Bom se tal coisa realmente vier a acontecer (sem as ressalvas e brechas costumeiras) teríamos com toda certeza um empenho maior nas questões da educação, já que quase tudo o que os políticos fazem é para o próprio benefício (haja vista votações de ultima hora para aumento de salario, novos benefícios e por ai vai), nesse caso a população sairia ganhando de tabela.

Cristov%C3%A3o

O projeto de lei não é novo (precisamos acompanhar mais de perto o que fazem por lá, em breve estará ainda mais fácil), é de 2007 e ele está desde o dia 14/01/2011 na Comissão de Constituição, Justiça e Cidadania, para que quiser dar uma olhada é só acessar o portal do Senado, ou baixar o projeto de lei diretamente daqui. Vamos divulgar, de fato é uma ótima ideia, parabéns ao Senador.

quinta-feira, 17 de março de 2011

Um exemplo a ser seguido (até agora) deputado José Reguffe

Tenho certeza que todos, assim como eu, se espantaram ao saber que certo deputado estava recusando (totalmente ou uma parte considerável) certos benefícios ao qual ele teria direito, a cifra dessa economia nos quatro anos de seu mandato é incrível, vejamos:

Ele abriu mão do 14º e 15º salários, ficando com os treze salários que todo trabalhador tem direito, economizando R$ 213.723,13.

Reduziu sua cota parlamentar de R$ 23.030,00 para R$ 4.600,00, esse dinheiro é o usado para bancar os gastos do parlamentar no trabalho, como viagens e combustível e que infelizmente sempre aparece um escândalo a respeito, economizando R$ 884.640,00.

Abriu mão dos 25 assessores de direito, estabelecendo que terá no máximo nove, segundo ele se treze pessoas são suficientes para lotar no gabinete, economizou com salários R$ 624.000,00, além de reduções com benefícios desses funcionários onde só com vale-alimentação será economizado R$ 514.000,00.

Se eu não somei errado por baixo houve uma economia de R$ 2.235.670,13! Incrível não é? Incrível mesmo seria multiplicar esse valor por 513.

clip_image001O deputado José Reguffe foi o mais bem votado proporcionalmente falando, e gastou em sua campanha apenas R$ 143.000,00, de fato por enquanto ele tem sido um exemplo, acho até que suas atitudes deveriam se tornar regra.

É isso ai minha gente, nem tudo esta perdido.

quinta-feira, 10 de março de 2011

Array no PL/SQL (Oracle)

Trabalhar com estruturas indexadas pode nos poupar muito trabalho, deixar o código mais limpo e reutilizável, pois bem vamos dar um exemplo de como fazer isso no PL/SQL. Criaremos um tipo table que seja capaz de armazenar nomes de uma tabela de funcionários de forma indexada, e em seguida mostraremos o que foi armazenado, segue o código:

  1: declare
  2:   -- tipo tabela contendo apenas texto e indexado
  3:   type   TipoNomFunc is table of varchar2(200) index by binary_integer;
  4:   -- variável do nosso tipo (como nosso tipo é indexado ele funcionará como um array)
  5:   func   TipoNomFunc;
  6:   -- indice para loop
  7:   indice number := 1;
  8:   --
  9: begin
 10:   --
 11:   -- cursor para nossa tabela de funcionarios
 12:   for emps in (
 13:       select * 
 14:       from   funcionarios
 15:   ) 
 16:   loop
 17:     -- colocamos o nome do funcionario em nosso "vetor"
 18:     func(indice) := emps.nom_funcionario;
 19:     -- incrementamos o indice
 20:     indice := indice + 1;
 21:     --
 22:   end loop;
 23:   --
 24:   -- agora percorremos todo nosso "vetor" e mostramos seu conteúdo
 25:   indice := func.first;
 26:   loop
 27:     -- se não houver um próximo sai do loop
 28:     exit when indice is null;
 29:     dbms_output.put_line(indice || ':' || func(indice));
 30:     indice := func.next(indice);
 31:     --
 32:   end loop;
 33:   --
 34: end;

sexta-feira, 4 de março de 2011

Android e eu

No final de 2010 comecei a pesquisar alguns aparelhos celulares em busca de um smartphone que tivesse uma boa câmera, wi-fi, e é claro, Android. Acabei comprando um modelo LG com Android. Meu primeiro contato no mundo dos smatphones foi diferente, navegar pela internet, baixar aplicativos era algo novo para mim (ainda estou me acostumando).

apexwallpaper_android-wallpaper11

No inicio desse ano comecei meus estudos para desenvolver para essa plataforma, e para minha satisfação (e de certo modo surpresa) encontrei uma documentação completa e com exemplos, uma ferramenta no ponto, um SDK simples e emuladores funcionando muito bem, além de uma comunidade bem desenvolvida repleta de exemplos.

Ainda tenho muito a aprender, mas pretendo começar a postar meus primeiros exemplos por aqui, então para iniciar fica a lista de downloads necessários:

  1. Eclipse, é recomendado a versão clássica;
  2. SDK Starter Package, não é a versão completa, os outros componentes você baixa por meio dele;
  3. ADT Plugin para o Eclipse, integra as ferramentas de desenvolvimento do Android no Eclipse (tutorial para instalação);

Se tudo estiver correto, ao iniciar o Eclipse já será possível criar um projeto Android.

quinta-feira, 3 de março de 2011

É possivel ficar pior ?

A eleição do ilustre Tiririca deixou bem claro como os eleitores, principalmente os novos, encaram a politica, com o mesmo desdém com o qual encaram quase tudo (exceto o bbb e seu perfil no orkut), às vezes me pergunto por que as coisas estão nesse passo e tenho certeza que isso tem uma relação intima com a educação. Estudei a vida toda em uma escola pública, e me lembro de como foi estranho quando foi instalou uma grade que separava a área comum dos alunos da sala dos professores e da diretoria, esse era um indicio do medo crescente da administração em relação aos alunos, na época tirando a grande pichação e destruição dos banheiros nada de mais violento ocorria, os funcionários eram sempre respeitados.

Em menos de cinco anos retornei a essa mesma escola e para minha perplexidade me deparei com uma espécie de curso pré-presidio, havia grades por todos os lados, imagino que isso deveria ter bons motivos.

É engraçado como quase tudo público não passa de um depósito de pessoas, a diferença fica só no porque você foi parar lá e quanto tempo vai levar para sair, se você vai a um hospital ou posto de saúde é atendido por pessoas despreparadas, médicos arrogantes e fartos de suas rotinas, em presídios as pessoas são colocadas lá e ponto, a quem diga até que são estimulados a rebeliões para um extra de periculosidade para os funcionários e as escolas o aluno vai por que o pai manda, muitos deixam de entender o que o professor fala antes de chegar ao ginásio.

O fato é que mesmo num curto espaço de tempo, é perceptível uma decadência ainda maior do ensino, alguns de meus amigos chegaram ao colegial sem saber ler direito, mas acho que hoje os alunos em situação diferente é que são a exceção.

Recentemente vimos o Tiririca que passou por um processo de averiguação de escolaridade fazendo parte da comissão da educação, isso me soa como uma provocação por parte do governo, como pode uma situação tão bizarra assim, por mais bem intencionado que ele seja (se é que ele realmente o é) com o que ele poderia contribuir? Não faço ideia, sinceramente.

tiririca1300

quarta-feira, 2 de março de 2011

Manipular arquivos com PL/SQL (Oracle)

papelO bom e velho arquivo, é impressionante como lidamos com seus vários tipos durante todos os dias, bom hoje vamos mostrar um jeito simples de se escrever e ler arquivos apenas com a codificação nativa do Oracle.

A primeira coisa a fazer é criar um diretório válido configurado no Oracle, e permissões de acesso a esse diretório para o usuário de banco onde faremos o exemplo, sendo assim suponhamos que nosso usuário de banco se chame programero, e nosso diretório real esteja em c:\programero, então logado como SYSTEM devemos executar os seguintes comandos:

  1: -- cria diretorio   
  2: create or replace directory DIR_PROGRAMERO as 'C:\PROGRAMERO';   
  3: -- concede permissão de escrita e leitura para nosso usuário   
  4: grant read, write on directory DIR_PROGRAMERO to PROGRAMERO;

Para escrever, basicamente precisamos apenas saber onde esse arquivo ficará, no nosso caso no diretório criado acima, segue o código de escrita:

  1: declare
  2:   -- nosso handler
  3:   v_arq utl_file.file_type;
  4: begin
  5:   -- diretório oracle, nome do arquivo, w indica escrita
  6:   v_arq := utl_file.fopen('DIR_PROGRAMERO' , 'programero.txt', 'w'); 
  7:   -- escrevemos duas linhas no arquivo
  8:   utl_file.put_line(v_arq,'Primeira linha !'); 
  9:   utl_file.put_line(v_arq,'Segunda linha !'); 
 10:   -- e finalmente fechamos o arquivo
 11:   utl_file.fclose(v_arq);
 12: end;

Da mesma maneira a escrita também depende do local onde o arquivo está salvo, segue o código:
  1: declare
  2:   -- nosso handler
  3:   v_arq utl_file.file_type;
  4:   -- recebe a linha lida do arquivo
  5:   v_txt varchar2(200);
  6: begin
  7:   -- diretório oracle, nome do arquivo, r indica leitura
  8:   v_arq := utl_file.fopen('DIR_PROGRAMERO' , 'programero.txt', 'r'); 
  9:   -- loop de leitura
 10:   loop
 11:     -- pega linha do arquivo
 12:     utl_file.get_line(v_arq, v_txt);
 13:     -- imprime
 14:     dbms_output.put_line(v_txt);
 15:   end loop;
 16: exception  
 17:   when NO_DATA_FOUND then
 18:     -- quando não existirem mais linhas no arquivo o mesmo é fechado
 19:     utl_file.fclose(v_arq);
 20: end;

Bom é isso, os códigos são simples e estão bem comentados, acredito que não exista nada a ser acrescentado, no caso de dúvidas é só postar nos comentários.

sábado, 26 de fevereiro de 2011

De volta, aos poucos …

De inicio minha parada foi por falta de tempo, quando o tempo voltou me faltou vontade (preguiça mesmo), mas nada como uma mudança de layout e uma série de conhecimentos novos para reativar essa vontade.

Vou começar postando algumas coisas que estavam em preparação e outras que estavam apenas na ideia, seguindo para algumas de minhas novas experiências, que por sinal foram muito gratificantes, que foi desenvolver para BlackBerry e Android.

Espero sinceramente que esta seja minha última postagem de justificativas hehe …