sexta-feira, 19 de dezembro de 2008

Regex Tester


Uma das coisas de programação que mais gostei, quando precisei utilizar, foram as Expressões Regulares. É uma ferramenta muito poderosa para manipulação de texto e se você já cursou compiladores deve lembrar deste nome :D

No Java as expressões regulares são mais conhecidas por Regex, e você utiliza sem saber já que internamente o método replaceAll utiliza Regex para localizar e substituir o texto. Esta abordagem do Java causa muitos problemas pois muita gente não sabe disto e existem caracteres reservados que causam erros se não forem devidamente utilizados.

Um dos ultimos programas que utilizei Regex foi o de restreamento de encomendas dos correios. Um dos maiores problemas de se utilizar Regex é criar e testar as expressões regulares. Para a criação delas existem muitos tutoriais e neste link você poderá encontrar alguns bem uteis. Para testar existe um problema de ter que ir testando as expressões executando seu programa o que é muito chato.

A primeira vez que utilizei Regex foi em C# e achei na época várias ferramentas bacanas, como o Regulator, para ajudar na criação e principalmente para testar as expressões regulares.

Motivado por isto eu acabei criando uma ferramenta simples (muito mais do que o Regulator, que é bastante complexo) em que basicamente se coloca um texto a expressão e o programa informa os pontos onde encontrou ou não.

Não é o objetivo deste poste ensinar como se utiliza Regex em Java, então quem não tem conhecimento, pode utilizar o link com tutoriais que eu forneci.

O uso do programa é muito simples e pode ser entendido observando a imagem abaixo:


Neste exemplo, o programa testa uma expressão regular que identifica um CNPJ e mostra o que encontrou.
Caso vocês se interessem posso criar e postar um tutorial sobre o uso de Regex com Java.

Link do programa: Regex Texter 0.0.1

quinta-feira, 16 de outubro de 2008

Atualização do programa de rastreamento de encomendas dos correios

Adicionei a possibilidade de se colocar comentários e coloquei o código fonte para download.

http://beernotfoundexception.blogspot.com/2008/01/programa-para-rastrear-encomendas-do.html

terça-feira, 12 de fevereiro de 2008

Exemplo de Programação dinâmica

Um dos blogs que assino o RSS é o VidaGeek. Hoje saiu um post muito interessante sobre Programação Dinâmica. Eu como desocupado além de achar interessante fiquei imaginando um exemplo simples que pudesse fazer em Java ou C#.
Como programação dinãmica é "aplicável à problemas no qual a solução ótima pode ser computada a partir da solução ótima previamente calculada e memorizada" eu imaginei que poderia ser usado em uma classe que calculasse fatorial, pois n! = n * (n - 1)! de quebra ainda estaria exercitando recursão em java, coisa que não lembro se já precisei fazer.

Segue o código abaixo:


Essa implementação seria util para um programa que calculasse o fatorial de vários números. A diferença pro algoritmo padrão de fatorial, é que eu armazeno os resultados pra cada iteração em um HashMap. Quem não entendeu muito bem, recomendo que leia os dois links que eu coloquei acima.

Referências:
http://vidageek.net/2008/02/11/programacao-dinamica/
http://pt.wikipedia.org/wiki/Recursividade

segunda-feira, 21 de janeiro de 2008

Automatize Tarefas Com O Poderoso AutoIt

AutoIt é basicamente uma linguagem de script com sintaxe parecida com basic feita para automatizar tarefas do windows. O grande diferencial do AutoIt é o controle que ele tem para interagir com as janelas do windows, ele pode simular clicks em botões, interação com formulários, etc. Ele também pode fazer chamadas para DLL externas e para a API do windows.

Ele é um canivete suíço para um heavy user que deseja/precisa automatizar tarefas.

Algumas características:

  • Fácil aprendizado.
  • Simula interações com teclados e mouse.
  • Manipula janelas e processos.
  • Interage com todos os controles padrão do windows.
  • Os scripts podem ser compilados em executáveis.
  • Pode criar interfaces gráficas.
  • Suporte a expressões regulares.

Eu tomei conhecimento dele, ao pesquisar sobre como modificar meu CD de instalação do windows, para que ele instalasse programas durante a instalação, e vi em foruns que usavam o AutoIt para criar um programa que executasse a instalação de um aplicativo de maneira automática.

Vou tentar a partir de um tutorial simples mostrar o uso desta linguagem.

Antes de iniciar o tutorial, vocês precisam fazer download do AutoIt e do seu editor:
http://www.autoitscript.com/autoit3/downloads.shtml

Escolhi fazer um script que instalasse de maneira automática o Foxit PDF Reader, um leitor de PDF leve e gratuito. Vocês podem fazer download do instalador nesta pagina: http://www.foxitsoftware.com/pdf/rd_intro.php

A primeira linha de nosso script será executar o instalador:

Run("FoxitReader22_setup.exe")

Um programa com somente esta linha, vai executar o instalador e acabar a execução, porém queremos mais que isso. Precisamos que o script pausa sua execução, até que a janela do instalador tenha surgido, para que o script possa interagir com ela.

O comando WinWaitActive(String tituloJanela, String textoJanela) faz isso, ele vai pausar o script até que fique ativa uma janela com o titulo informado e que possua em algum lugar dela o texto. É simples olhar para a janela de nosso instalador e saber qual o nome do titulo dela e ver outro texto que pode ser usado. Mas para facilitar nossa vida e saber todas as informações uteis desta janela, usaremos o indispensavel Window Info que pode ser executado a partir de Iniciar / Programas / AutoIt v3 / AutoIt Window Info.

Como podemos ver na imagem abaixo, ele pode obter informações de todos os objetos da janela (Texto, Botoões, Checkbox, etc):



Com este utilitário, podemos obter e selecionar para copiar / colar as informações que queremos: O título da pagina e o texto de um elemento e podemos escrever a linha de código abaixo:

WinWaitActive("Foxit Reader Install Wizard", "&Next>")


Com essas duas linhas scritas o programa vai executar o instalador e ficará pausado até essa janela ficar ativa.

Depois disso vamos enviar um comando para que avance para a proxima janela:

Send("!n")

Este comando vai enviar um Alt + n que fará com que o instaaldor passe para a proxima janela, que veremos possui a mesma aparência básica desta desta (mesmo titulo e também possui um botão next) então podemos repetir os comandos:

WinWaitActive("Foxit Reader Install Wizard", "&Next>")
Send("!n")


Que fará com que apareça a proxima janela que, a pessoa aceita a licença de uso, que não possui botao Next, mas possui o botão de “aceito” que é o que desejamos que seja executado, então escreveremos essas duas linhas:

WinWaitActive("Foxit Reader Install Wizard", "I &agree")
Send("!a")


Agora chegamos em uma janela, em que o botão não aceita um HotKey como o Alt + n, então usaremos outro método, que é muito mais preciso, pois usa um identificador para o botão.

Antes de usar este método vamos identyificar que a janela esta ativa com o comando:

WinWaitActive("Foxit Reader Install Wizard", "< &Back")


Feito isso vamos abrir o programa de informações e obter as informações do botão 'Default':



Com as informações obtidas podemos usar o método:
ControlClick("Foxit Reader Install Wizard", "< &Back", 1014)

Que é semelhante ao WinWaitActive( mas que possui um argumento a mais, que é o ID do Controle que a gente quer que seja executado.

Seguindo o que foi mostrado aqui, podemos terminar o script com o resto do código abaixo:

WinWaitActive("Foxit Reader Install Wizard", "&Install")
ControlClick("Foxit Reader Install Wizard", "&Install", 1)
WinWaitActive("Foxit Reader Install Wizard", "&Run Foxit Reader")
;Desmarcar o checkbox
ControlClick("Foxit Reader Install Wizard", "&Run Foxit Reader", 1008)
ControlClick("Foxit Reader Install Wizard", "&Run Foxit Reader", 1)


Usar um ControlClick é preferivel ao Send, porque no ControlClick, temos o controle do ID do que queremos interagir.

Espero que está mini tutorial seja util para vocês e eu escrevi voltado para uma pessoa que conhece algo de programação.

[]'s

Rodrigo Menezes

Código fonte do exemplo

quarta-feira, 16 de janeiro de 2008

Programa Para Rastrear Encomendas dos Correios


Programa Para Rastrear Encomendas dos Correios


Nas duas ultimas semanas fiz algumas compras de livros de alguns sebos de outros estados. Os livros claro foram enviados pelos correios e os vendedores me passavam os códigos de rastreamento, alguns já passavam um link já formado para a página dos correios.

Estes links já facilitavam minha vida, mas pensei que poderia fazer algo melhor. Como já tinha feitos testes de requisição de paginas trazendo o código html e também já tinha brincado com Regex (
Expressões Regulares), pensei em como fazer um programa bem simples que guardasse uma coleção de Códigos e fizesse uma requisição na pagina dos correios para trazer os dados.

Descobri que Swing aceita código html em alguns componentes (Labels, Buttons, etc) desde que o texto venha entre as tags e aproveitei isso para fazer o que eu queria com menos esforço :D, eu trago da pagina dos correios a mesma tabela que ele monta e coloco ela em um JLabel.

No Campo de entrada depois de pensar em como tratar códigos fora do formato acabei usando Regex para validar e decidi que a pessoa poderia colocar mais de um código por vez:

private static final Pattern patternCodigo = Pattern.compile("\\w{2}\\d{9}\\w{2}");

O tratamento ainda não está o ideal, ele somente procura no texto uma string que tenha 2 letras, 9 números e mais duas letras. As duas primeiras letras se referem ao tipo da postagem e as duas ultimas ao país. Não fiz tratamento se o código é valido nem se o país também, alias no momento o programa somente checa códigos na pesquisa nacional.

Link para programa em forma de exe: 
Rastreador 0.1.2
Link para o programa:
Rastreador 0.1.2
Link para o código fonte: Source Rastreador 0.1.2


Criticas e sugestões são bem vindas.

[]'s

Rodrigo Menezes

Edit: Fiz um update, para ele pegar a mensagem dos correios para um código que não exista.


Edit 2: Adicionei um campo de observação. Então o usuário pode adicionar uma observação para cada código de rastreamento.

Observação: O arquivo que o programa salva as informações, não é compatível com esta versão, então descompacte o programa em outra pasta.

Edit3: Adicionando novos links