<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2481850143061022236</id><updated>2011-11-27T16:32:57.036-08:00</updated><category term='compilador'/><category term='hibernate'/><category term='AutoIt'/><category term='jsf'/><category term='java'/><category term='rastreamento'/><category term='correios'/><category term='jdk'/><category term='sun'/><category term='hql'/><category term='bean'/><category term='eclipse'/><category term='Tutorial'/><category term='programa'/><category term='programacão'/><title type='text'>Beer Not Found Exception</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-2247345336925878003</id><published>2011-08-29T06:33:00.000-07:00</published><updated>2011-08-29T10:12:00.455-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hql'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='bean'/><title type='text'>Instanciando um Bean em uma consulta HQL</title><content type='html'>Em uma consulta HQL quanto projetamos mais que um objeto, o mais comum é acessarmos a consulta por um List&amp;lt;Object[]&amp;gt; essa abordagem não é muito interessante, pois torna nossa consulta muito&amp;nbsp;passível&amp;nbsp;de dar erro, pois basta mudar a ordem das colunas e vamos causar um erro onde a consulta estiver sendo usada.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String hql = "select o.numeroProcesso, o.dataInicio from Processo o";&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Query query = EntityUtil.createQuery(hql);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;List&amp;lt;Object[]&amp;gt; list = query.getResultList();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma abordagem mais interessante é devolver essa consulta como um&amp;nbsp;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; criando os alias paras as colunas projetadas. Dessa maneira uma mudança de ordem na consulta não traria erro para quem a utilizasse:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;String hql = "select new map(o.numeroProcesso as numeroProcesso, o.dataInicio as dataInicio) from Processo o";&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;Query query = EntityUtil.createQuery(hql);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; list = query.getResultList();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;for (Map&amp;lt;String, Object&amp;gt; map : list) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;Object numeroProcesso = map.get("numeroProcesso");&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A utilização do&amp;nbsp;List&amp;lt;Map&amp;lt;String, Object&amp;gt;&amp;gt; é um avanço, mas pode induzir a erros de runtime, pois o cast fica sobre responsabilidade de quem for utilizar a lista.&lt;br /&gt;&lt;br /&gt;Uma maneira mais segura é utilizar o recurso de&amp;nbsp;instanciação&amp;nbsp;do bean via construtor. O hibernate permite que instanciemos em nossa consulta uma classe que as colunas projetadas sejam passadas como&amp;nbsp;parâmetro do construtor da classe:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-B0doI9_K9bw/TluV_l6bKGI/AAAAAAAAFI8/0WrkqHA1qKA/s1600/hql_constr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://3.bp.blogspot.com/-B0doI9_K9bw/TluV_l6bKGI/AAAAAAAAFI8/0WrkqHA1qKA/s400/hql_constr.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KdxhXI1tGZc/TluQyIlswaI/AAAAAAAAFI4/17vAiVr8d5Y/s1600/hql_bean.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://4.bp.blogspot.com/-KdxhXI1tGZc/TluQyIlswaI/AAAAAAAAFI4/17vAiVr8d5Y/s400/hql_bean.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Com essa abordagem, tornamos nossa consulta bem mais segura, pois vamos devolver uma lista com o nosso bean.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-2247345336925878003?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/2247345336925878003/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=2247345336925878003' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2247345336925878003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2247345336925878003'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2011/08/instanciando-um-bean-em-uma-consulta.html' title='Instanciando um Bean em uma consulta HQL'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-B0doI9_K9bw/TluV_l6bKGI/AAAAAAAAFI8/0WrkqHA1qKA/s72-c/hql_constr.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-4673261690261358620</id><published>2011-07-19T06:47:00.000-07:00</published><updated>2011-08-29T10:12:42.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='jdk'/><category scheme='http://www.blogger.com/atom/ns#' term='compilador'/><title type='text'>Diferenças entre compilador do Eclipse e o da Sun</title><content type='html'>Aqui na INFOX utilizamos o Eclipse como IDE Java e gosto muito dele. Acho o Eclipse&amp;nbsp;imbatível&amp;nbsp;para escrita de código e só utilizo o Netbeans quando preciso criar alguma tela Swing ;p&lt;br /&gt;&lt;br /&gt;Uma das grandes vantagens do Eclipse é seu compilador que é bastante rápido e muito bem integrado a ferramenta. O compilador do Eclipse possui outras vantagens, mas vou deixar este assunto apar outro post e vou focar aqui nas diferenças e nos problemas que elas podem trazer.&lt;br /&gt;&lt;br /&gt;Nosso deploy é feito nos servidores por meio de um script que baixa do SVN o projeto, faz algumas mudanças em arquivos de configuração e compila as classes utilizando o JDK da Sun.&lt;br /&gt;&lt;br /&gt;Algumas vezes ocorreram problemas de compilação na hora do deploy em classes que compilavam corretamente na IDE com o compilador do Eclipse.&lt;br /&gt;&lt;br /&gt;Tomando certo cuidado na hora de desenvolver é&amp;nbsp;possível&amp;nbsp;evitar essas problemas pois eles ocorrem em poucas situações e aqui vou mostrar 3 situações&lt;br /&gt;&lt;br /&gt;Segue abaixo imagens com código fonte no Eclipse e no Netbeans :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-vJ-gJmJyEP0/TiWCuvoMa0I/AAAAAAAAFHQ/WUYODvtJX20/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://1.bp.blogspot.com/-vJ-gJmJyEP0/TiWCuvoMa0I/AAAAAAAAFHQ/WUYODvtJX20/s400/01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[1] e [2] Comportamento correto nos dois compiladores, não é&amp;nbsp;possível&amp;nbsp;dar cast de um Object para um boolean (Tipo primitivo) mas sim para um Boolean(Objeto)&lt;/div&gt;&lt;br /&gt;[3] Aqui há diferença e onde um dia desses ocorreu um problema, o cast está sendo feito pelo&amp;nbsp;método&amp;nbsp;genérico&amp;nbsp;e o compilador do Eclipse permite que este método faça um cast de Object para boolean, coisa que o da Sun não permite.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3EDIN5XAXNE/TiWEMhfMcBI/AAAAAAAAFHU/nNVcNCt-F_M/s1600/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="58" src="http://1.bp.blogspot.com/-3EDIN5XAXNE/TiWEMhfMcBI/AAAAAAAAFHU/nNVcNCt-F_M/s400/02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[4] Neste caso o eclipse não esta acusando erro ao utilizar a constante privada NAME na anotação @Name e compila normal caso que não ocorre com o compilador da Sun.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Ab1tHvl3S2M/TiWFEXdRBAI/AAAAAAAAFHY/801vX-hmiXE/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Ab1tHvl3S2M/TiWFEXdRBAI/AAAAAAAAFHY/801vX-hmiXE/s1600/03.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;[5] Esse é o caso mais gritante onde o compilador do eclipse deveria acusar erro, mas relaxa e compila sem problemas. Dentro de anotações nos&amp;nbsp;parâmetros&amp;nbsp;que recebem vetores o compilador permite esta virgula no final.&lt;br /&gt;&lt;br /&gt;Para não dizer que o problema é sempre do compilador do Eclipse, eu já vi um caso de ocorrer um problema que parecia ser um bug no compilador da Sun. Pelo que eu lembre foi algo bem parecido com isto aqui:&amp;nbsp;&lt;a href="http://stackoverflow.com/questions/314572/bug-in-eclipse-compiler-or-in-javac"&gt;http://stackoverflow.com/questions/314572/bug-in-eclipse-compiler-or-in-javac&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Caso eu encontre outras diferenças/problemas vou continuar a alimentar este post aqui :D&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-4673261690261358620?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/4673261690261358620/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=4673261690261358620' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/4673261690261358620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/4673261690261358620'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2011/07/diferencas-entre-compilador-do-eclipse.html' title='Diferenças entre compilador do Eclipse e o da Sun'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-vJ-gJmJyEP0/TiWCuvoMa0I/AAAAAAAAFHQ/WUYODvtJX20/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-97244504372746235</id><published>2011-05-31T11:33:00.000-07:00</published><updated>2011-08-29T10:13:18.333-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Problema com equals em entidades usando Hibernate</title><content type='html'>&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Há uns meses atrás eu tive um problema com uma combo e motivo do problema era a falta de um equals na classe. As vezes quando a página era renderizada o objeto que estava selecionado era de uma instancia diferente do&amp;nbsp;correspondente&amp;nbsp;da lista e com isso dava&amp;nbsp;inconsistência.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Por este motivo todas as classes precisam do equals e hashcode implementado e o eclipse gera eles automaticamente. Mas ontem eu tive um problema com este equals gerado de maneira&amp;nbsp;automática, pois ele gera o equals dessa maneira:&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Override&lt;br /&gt; public boolean equals(Object obj) {&lt;br /&gt;  if (this == obj)&lt;br /&gt;   return true;&lt;br /&gt;  if (obj == null)&lt;br /&gt;   return false;&lt;br /&gt;  if (getClass() != obj.getClass())&lt;br /&gt;   return false;&lt;br /&gt;  UsuarioLogin other = (UsuarioLogin) obj;&lt;br /&gt;  if (idUsuario != other.idUsuario)&lt;br /&gt;   return false;&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Este equals pode gerar dois problemas em nosso ambiente por conta de como o hibernate trabalha. O hibernate cria constantemente classes em tempo de execução que herdam das classes da&amp;nbsp;entidade&amp;nbsp;e adicionam&amp;nbsp;métodos&amp;nbsp;que ele precisa. Vocês que trabalharam com Hibernate já devem ter visto Objetos com classes estranhas como br.com.infox.cliente.entity.&lt;wbr&gt;&lt;/wbr&gt;Pessoa_$$_javassist_26.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;O primeiro problema é que como são classes diferentes esta comparação sempre retorna false:&amp;nbsp;if (getClass() != obj.getClass()). Para resolver deve-se testar com instanceof.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;O segundo problema é o acesso aos campo da entidade. As vezes mesmo campos que não são lazy, só são populados quando são chamados pelo get do campo, então a comparação&amp;nbsp;(idProcesso != other.idProcesso) pode retornar false, pois o valor pode não estar populado ainda.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Eu tive esse dois problemas ontem com a classe UsuarioLogin, e perdi um bom tempo para descobri isso.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Para tornar nosso equals das entidades&amp;nbsp;compatíveis&amp;nbsp;com o hibernate podemos reescrever ele assim:&lt;/div&gt;&lt;div style="border-collapse: collapse; font-size: 13px;"&gt;&lt;div style="font-family: 'Droid Sans', arial, sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;@Override&lt;br /&gt; public boolean equals(Object obj) {&lt;br /&gt;  if (this == obj)&lt;br /&gt;   return true;&lt;br /&gt;  if (obj == null)&lt;br /&gt;   return false;&lt;br /&gt;  if (!(obj instanceof UsuarioLogin))&lt;br /&gt;   return false;&lt;br /&gt;  UsuarioLogin other = (UsuarioLogin) obj;&lt;br /&gt;  if (getIdUsuario() != other.getIdUsuario())&lt;br /&gt;   return false;&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;span style="white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: 'Droid Sans', arial, sans-serif; font-size: 13px;"&gt;Maiores explicações sobre estes problemas podem ser lidas aqui:&amp;nbsp;&lt;a href="http://blog.xebia.com/2008/03/advanced-hibernate-proxy-pitfalls/" target="_blank"&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;http://blog.xebia.com/&lt;wbr&gt;&lt;/wbr&gt;2008/03/advanced-hibernate-&lt;wbr&gt;&lt;/wbr&gt;proxy-pitfalls/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-97244504372746235?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/97244504372746235/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=97244504372746235' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/97244504372746235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/97244504372746235'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2011/05/problema-com-equals-em-entidades-usando.html' title='Problema com equals em entidades usando Hibernate'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-2520509203255738778</id><published>2011-05-31T05:34:00.000-07:00</published><updated>2011-05-31T05:40:39.554-07:00</updated><title type='text'>Meu ambiente de desenvolvimento em 7 itens</title><content type='html'>Recebi um convite publico do &lt;a href="http://hdoria.com/"&gt;Hugo Doria&lt;/a&gt; e resolvi participar deste meme retirando um item.&lt;br /&gt;&lt;br /&gt;1) Hardware e SO&lt;br /&gt;Minha maquina de desenvolvimento aqui na &lt;a href="http://www.infox.com.br/"&gt;Infox&lt;/a&gt; é um Dell Latitude E6500, com 4gb de memoria. Aqui&amp;nbsp;utilizamos&amp;nbsp;um monitor extra, que aumenta muito a produtividade.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-b-T34IWSWt0/TeThjLaQ1LI/AAAAAAAAFDI/52KimucvWEk/s1600/2011-05-31+08.54.23_desktop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-b-T34IWSWt0/TeThjLaQ1LI/AAAAAAAAFDI/52KimucvWEk/s320/2011-05-31+08.54.23_desktop.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;2) Linguagens de Programação&lt;br /&gt;Java é praticamente a unica linguagem que eu utilizo. No meu projeto aqui da Infox, trabalhamos com JavaServer Faces + &lt;a href="http://seamframework.org/"&gt;Seam Framework&lt;/a&gt; + Hibernate.&lt;br /&gt;Para quem programa em Java, recomendo pesquisar sobre o Seam. O mentor dele é nada menos que o &lt;a href="http://relation.to/Bloggers/Gavin"&gt;Garvin King&lt;/a&gt;, o cara por trás do Hibernate e que ajudou com a especificação do JPA, quase o Chuck Norris do Java.&lt;br /&gt;&lt;br /&gt;3) Editores e IDE&lt;br /&gt;Utilizamos como IDE o Jboss Developer Studio (É um empacotamento do Eclipse feito pela Red Hat, o pacote já vem com o plugin Jboss Tools e já instala e configura o Jboss Server). Antes usávamos o Eclipse + Jboss Tools sem nenhum problema nenhum.&lt;br /&gt;&lt;br /&gt;4) Controle de Versão&lt;br /&gt;Atualmente utilizamos o SVN, no passado utilizávamos os CVS e na migração tivemos vários problemas com o Plugin do SVN pro Eclipse que ná época dava problemas regularmente.&lt;br /&gt;&lt;br /&gt;5) Softwares.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Navegadores: No trabalho utilizo Firefox e IE (Por causa dos clientes claro), mas pessoalmente eu migrei do Firefox para o Chrome há alguns meses.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.squirrelsql.org/"&gt;SQuirreL SQL Client&lt;/a&gt;: Ótimo software open source para quem trabalha criando consultas de banco de dados. Possui muito recursos e o auto completar acelera muito a criação das consultas.&lt;/li&gt;&lt;li&gt;&lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt;: Melhor editor de texto que já usei, bem robusto, aceita plugins, leve, etc.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.foobar2000.org/"&gt;Foobar2000&lt;/a&gt;: Player de&amp;nbsp;áudio&amp;nbsp;bem leve e com muitos recursos, eu pessoalmente gosto de programar escutando música.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;6) Música&lt;/div&gt;&lt;div&gt;Gosto muito de trabalhar escutando música, ela ajuda muito a me isolar dos barulhos externos e me concentrar nas tarefas mais delicadas, alem de animar e relaxar ;)&lt;/div&gt;&lt;div&gt;Nas férias deste ano relaxei viajando para assistir dois shows: Ozzy e Iron Maiden!&lt;/div&gt;&lt;div&gt;Meu gosto musical é da vertente Rock and Roll -&amp;amp;gt; Metal pendendo mais para o Metal. Escuto Iron Maiden, Megadeth, Slayer, Pink Floyd, etc até coisas bem mais pesadas como Deicide, Carcass e Dying Fetus ou outras mais lights como Raul Seixas.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-2520509203255738778?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/2520509203255738778/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=2520509203255738778' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2520509203255738778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2520509203255738778'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2011/05/meu-ambiente-de-desenvolvimento-em-7.html' title='Meu ambiente de desenvolvimento em 7 itens'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-b-T34IWSWt0/TeThjLaQ1LI/AAAAAAAAFDI/52KimucvWEk/s72-c/2011-05-31+08.54.23_desktop.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-9016513391400196404</id><published>2009-01-26T04:41:00.000-08:00</published><updated>2009-01-26T04:56:50.714-08:00</updated><title type='text'>JAVASERVER FACES (JSF): UM ESTUDO COMPARATIVO ENTRE BIBLIOTECAS DE COMPONENTES.</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Ao final de 2008 conclui o curso de Sistema de Informação na Universidade Tiradentes e como tema da monografia, procurei fazer algo relacionado a Java e ao meu trabalho na &lt;a href="http://www.infox.com.br/"&gt;Infox&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Depois de consultar amigos e colegas, o tema escolhido acabou sendo JSF e fiz um estudo comparativo entre três das principais bibliotecas de componentes: RichFaces, ICEFaces e Apache Tomahawk.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Resumo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;A Internet mudou a maneira como as pessoas se comunicam e obtêm informação, diminuindo o tempo e encurtando as distâncias. Desde seu surgimento aconteceu uma evolução muito grande, onde os sítios com documentos estáticos foram substituídos por aplicações web dinâmicas, que se tornam cada vez mais complexas. Durante esta evolução das aplicações web, a tecnologia Java teve e tem um papel muito importante, sempre evoluindo para resolver os problemas encontrados, e melhorar a experiência, tanto de quem usa a tecnologia no desenvolvimento, quanto para quem é o usuário final. Nessa etapa atual da evolução da tecnologia Java para web, temos o JavaServer Faces que foi idealizado para ser robusto, escalável e produtivo. Este trabalho mostra a evolução da tecnologia Java e como a partir desta constante evolução, foi projetado e o construído o JavaServer Faces, e como os sistemas de componentes de interface do usuário ajudou a tornar o desenvolvimento mais produtivo e menos cansativo. O ponto principal do trabalho é mostrar a importância, em termos de produtividade, do surgimento de bibliotecas de componentes de interface do usuário e fazer um estudo comparativo com três das principais bibliotecas encontradas no mercado, fazendo deste trabalho uma referencia para quem estiver iniciando no desenvolvimento de aplicações, utilizando a tecnologia JavaServer Faces.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Aos interessados, seguem links para download e visualização on line:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;a href="http://www.scribd.com/doc/9197155/JAVASERVER-FACES-JSF-UM-ESTUDO-COMPARATIVO-ENTRE-BIBLIOTECAS-DE-COMPONENTES"&gt;http://www.scribd.com/doc/9197155/JAVASERVER-FACES-JSF-UM-ESTUDO-COMPARATIVO-ENTRE-BIBLIOTECAS-DE-COMPONENTES&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px;"&gt;&lt;a href="http://www.easy-share.com/1903404629/Monografia_Rodrigo-versão_Final.pdf"&gt;http://www.easy-share.com/1903404629/Monografia_Rodrigo-versão_Final.pdf&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-size: 13px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-9016513391400196404?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/9016513391400196404/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=9016513391400196404' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/9016513391400196404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/9016513391400196404'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2009/01/javaserver-faces-jsf-um-estudo.html' title='JAVASERVER FACES (JSF): UM ESTUDO COMPARATIVO ENTRE BIBLIOTECAS DE COMPONENTES.'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-3391258084806457466</id><published>2008-12-19T05:48:00.000-08:00</published><updated>2008-12-19T06:54:26.924-08:00</updated><title type='text'>Regex Tester</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'Times New Roman';"&gt;&lt;div style="margin-top: 8px; margin-right: 8px; margin-bottom: 8px; margin-left: 8px; font: normal normal normal small/normal arial; "&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:'Times New Roman';font-size:16px;"&gt;&lt;div style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; width: auto; font: normal normal normal 100%/normal Georgia, serif; text-align: left; "&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;div&gt;Uma das coisas de programação que mais gostei, quando precisei utilizar, foram as &lt;a href="http://pt.wikipedia.org/wiki/Express%C3%A3o_regular"&gt;Expressões Regulares&lt;/a&gt;. É uma ferramenta muito poderosa para manipulação de texto e se você já cursou compiladores deve lembrar deste nome :D&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No Java as expressões regulares são mais conhecidas por Regex, e você utiliza sem saber já que internamente o método &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html"&gt;replaceAll&lt;/a&gt; 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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Um dos ultimos programas que utilizei Regex foi o de restreamento de &lt;a href="http://beernotfoundexception.blogspot.com/2008/01/programa-para-rastrear-encomendas-do.html"&gt;encomendas dos correios&lt;/a&gt;. 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 &lt;a href="http://www.guj.com.br/posts/list/103520.java"&gt;link&lt;/a&gt; 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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A primeira vez que utilizei Regex foi em C# e achei na época várias ferramentas bacanas, como o &lt;a href="http://sourceforge.net/projects/regulator/"&gt;Regulator&lt;/a&gt;, para ajudar na criação e principalmente para testar as expressões regulares.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O uso do programa é muito simples e pode ser entendido observando a imagem abaixo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_IIaOERVwJlE/SUurggAJkLI/AAAAAAAADsY/0pyX83Qd82s/s1600-h/Regex.png"&gt;&lt;img src="http://1.bp.blogspot.com/_IIaOERVwJlE/SUurggAJkLI/AAAAAAAADsY/0pyX83Qd82s/s400/Regex.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5281503562856763570" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 273px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;Neste exemplo, o programa testa uma expressão regular que identifica um CNPJ e mostra o que encontrou.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;Caso vocês se interessem posso criar e postar um tutorial sobre o uso de Regex com Java.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;Link do programa: &lt;a href="http://br.geocities.com/ironbot_br/regex/RegexTester.zip"&gt;Regex Texter 0.0.1&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  ;font-family:Georgia;font-size:16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"   style="font-family:arial;font-size:13px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-3391258084806457466?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/3391258084806457466/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=3391258084806457466' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/3391258084806457466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/3391258084806457466'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2008/12/regex-tester.html' title='Regex Tester'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IIaOERVwJlE/SUurggAJkLI/AAAAAAAADsY/0pyX83Qd82s/s72-c/Regex.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-2702772897495583434</id><published>2008-10-16T10:24:00.001-07:00</published><updated>2008-10-16T10:26:01.095-07:00</updated><title type='text'>Atualização do programa de rastreamento de encomendas dos correios</title><content type='html'>&lt;div&gt;Adicionei a possibilidade de se colocar comentários e coloquei o código fonte para download.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://beernotfoundexception.blogspot.com/2008/01/programa-para-rastrear-encomendas-do.html"&gt;http://beernotfoundexception.blogspot.com/2008/01/programa-para-rastrear-encomendas-do.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-2702772897495583434?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/2702772897495583434/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=2702772897495583434' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2702772897495583434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/2702772897495583434'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2008/10/atualizao-do-programa-de-rastreamento.html' title='Atualização do programa de rastreamento de encomendas dos correios'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-4684606826245857717</id><published>2008-02-12T08:57:00.000-08:00</published><updated>2011-08-29T10:13:48.987-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programacão'/><title type='text'>Exemplo de Programação dinâmica</title><content type='html'>Um dos blogs que assino o RSS é o &lt;a href="http://vidageek.net/"&gt;VidaGeek&lt;/a&gt;. Hoje saiu um &lt;a href="http://vidageek.net/2008/02/11/programacao-dinamica/"&gt;post&lt;/a&gt; muito interessante sobre &lt;a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_din%C3%A2mica"&gt;Programação Dinâmica&lt;/a&gt;. Eu como desocupado além de achar interessante fiquei imaginando um exemplo simples que pudesse fazer em Java ou C#.&lt;br /&gt;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 &lt;a href="http://pt.wikipedia.org/wiki/Recursividade_%28ci%C3%AAncia_da_computa%C3%A7%C3%A3o%29"&gt;recursão&lt;/a&gt; em java, coisa que não lembro se já precisei fazer.&lt;br /&gt;&lt;br /&gt;Segue o código abaixo:&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_IIaOERVwJlE/R7HtiOElKvI/AAAAAAAACEc/py-RZHG6Y20/s1600-h/fatorial.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5166171419719314162" src="http://1.bp.blogspot.com/_IIaOERVwJlE/R7HtiOElKvI/AAAAAAAACEc/py-RZHG6Y20/s400/fatorial.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Referências:&lt;br /&gt;&lt;a href="http://vidageek.net/2008/02/11/programacao-dinamica/"&gt;http://vidageek.net/2008/02/11/programacao-dinamica/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pt.wikipedia.org/wiki/Recursividade"&gt;http://pt.wikipedia.org/wiki/Recursividade&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-4684606826245857717?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/4684606826245857717/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=4684606826245857717' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/4684606826245857717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/4684606826245857717'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2008/02/exemplo-de-programao-dinmica.html' title='Exemplo de Programação dinâmica'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_IIaOERVwJlE/R7HtiOElKvI/AAAAAAAACEc/py-RZHG6Y20/s72-c/fatorial.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-8704024196595696474</id><published>2008-01-21T08:00:00.000-08:00</published><updated>2011-08-29T10:14:06.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='AutoIt'/><title type='text'>Automatize Tarefas Com O Poderoso AutoIt</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;Ele é um canivete suíço para um heavy user que deseja/precisa automatizar tarefas.&lt;br /&gt;&lt;br /&gt;Algumas características:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fácil aprendizado.&lt;/li&gt;&lt;li&gt;Simula interações com teclados e mouse.&lt;/li&gt;&lt;li&gt;Manipula janelas e processos.&lt;/li&gt;&lt;li&gt;Interage com todos os controles padrão do windows.&lt;/li&gt;&lt;li&gt;Os scripts podem ser compilados em executáveis.&lt;/li&gt;&lt;li&gt;Pode criar interfaces gráficas.&lt;/li&gt;&lt;li&gt;Suporte a expressões regulares.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Vou tentar a partir de um tutorial simples mostrar o uso desta linguagem.&lt;br /&gt;&lt;br /&gt;Antes de iniciar o tutorial, vocês precisam fazer download do AutoIt e do seu editor:&lt;br /&gt;&lt;a href="http://www.autoitscript.com/autoit3/downloads.shtml"&gt;http://www.autoitscript.com/autoit3/downloads.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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: &lt;a href="http://www.foxitsoftware.com/pdf/rd_intro.php"&gt;http://www.foxitsoftware.com/pdf/rd_intro.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A primeira linha de nosso script será executar o instalador:&lt;br /&gt;&lt;br /&gt;Run("FoxitReader22_setup.exe")&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Como podemos ver na imagem abaixo, ele pode obter informações de todos os objetos da janela (Texto, Botoões, Checkbox, etc):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_IIaOERVwJlE/R5TCDFCV1qI/AAAAAAAABko/FXdBK8RJM1Q/s1600-h/01.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5157960831393453730" src="http://4.bp.blogspot.com/_IIaOERVwJlE/R5TCDFCV1qI/AAAAAAAABko/FXdBK8RJM1Q/s400/01.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "&amp;amp;Next&amp;gt;")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Com essas duas linhas scritas o programa vai executar o instalador e ficará pausado até essa janela ficar ativa.&lt;br /&gt;&lt;br /&gt;Depois disso vamos enviar um comando para que avance para a proxima janela:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: 'courier new';"&gt;Send("!n")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "&amp;amp;Next&amp;gt;")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;Send("!n")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "I &amp;amp;agree")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;Send("!a")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Antes de usar este método vamos identyificar que a janela esta ativa com o comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "&amp;lt; &amp;amp;Back")&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Feito isso vamos abrir o programa de informações e obter as informações do botão 'Default':&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_IIaOERVwJlE/R5TCZ1CV1rI/AAAAAAAABkw/nxJPa5jUwu8/s1600-h/Untitled-3.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5157961222235477682" src="http://3.bp.blogspot.com/_IIaOERVwJlE/R5TCZ1CV1rI/AAAAAAAABkw/nxJPa5jUwu8/s400/Untitled-3.png" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Com as informações obtidas podemos usar o método:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: 'courier new';"&gt;ControlClick("Foxit Reader Install Wizard", "&amp;lt; &amp;amp;Back", 1014)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Que é semelhante ao WinWaitActive( mas que possui um argumento a mais, que é o ID do Controle que a gente quer que seja executado.&lt;br /&gt;&lt;br /&gt;Seguindo o que foi mostrado aqui, podemos terminar o script com o resto do código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "&amp;amp;Install")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;ControlClick("Foxit Reader Install Wizard", "&amp;amp;Install", 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;WinWaitActive("Foxit Reader Install Wizard", "&amp;amp;Run Foxit Reader")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;;Desmarcar o checkbox&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;ControlClick("Foxit Reader Install Wizard", "&amp;amp;Run Foxit Reader", 1008)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new';"&gt;ControlClick("Foxit Reader Install Wizard", "&amp;amp;Run Foxit Reader", 1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Usar um ControlClick é preferivel ao Send, porque no ControlClick, temos o controle do ID do que queremos interagir.&lt;br /&gt;&lt;br /&gt;Espero que está mini tutorial seja util para vocês e eu escrevi voltado para uma pessoa que conhece algo de programação.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Rodrigo Menezes&lt;br /&gt;&lt;br /&gt;&lt;a href="http://br.geocities.com/ironbot_br/autoit/FoxitReader22setup.zip"&gt;Código fonte do exemplo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-8704024196595696474?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/8704024196595696474/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=8704024196595696474' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/8704024196595696474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/8704024196595696474'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2008/01/automatize-tarefas-com-o-poderoso.html' title='Automatize Tarefas Com O Poderoso AutoIt'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_IIaOERVwJlE/R5TCDFCV1qI/AAAAAAAABko/FXdBK8RJM1Q/s72-c/01.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481850143061022236.post-6121063520192927737</id><published>2008-01-16T07:58:00.001-08:00</published><updated>2011-08-29T10:14:33.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rastreamento'/><category scheme='http://www.blogger.com/atom/ns#' term='programa'/><category scheme='http://www.blogger.com/atom/ns#' term='correios'/><title type='text'>Programa Para Rastrear Encomendas dos Correios</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h1 style="display: none; font-size: 200%; line-height: 110%; margin-bottom: 0.8em; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;Programa Para Rastrear Encomendas dos Correios&lt;/span&gt;&lt;/h1&gt;&lt;div id="previewbody" style="color: #666666; display: block; font-size: 130%; margin-left: 0.2em;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;a href="http://2.bp.blogspot.com/_IIaOERVwJlE/R44t_FCVzJI/AAAAAAAABOQ/FgGLYXDzCDM/s1600-h/rastreador.png" style="color: #3366cc; font-weight: bold;"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5156109185092799634" src="http://2.bp.blogspot.com/_IIaOERVwJlE/R44t_FCVzJI/AAAAAAAABOQ/FgGLYXDzCDM/s400/rastreador.png" style="border-bottom-width: 0px; border-color: initial; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; border-width: initial; cursor: pointer; display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 (&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/essential/regex/" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Expressões Regulares)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;, 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;private static final Pattern patternCodigo = Pattern.compile("\\w{2}\\d{9}\\w{2}");&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Link para o programa: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;a href="http://www.easy-share.com/1908921048/Rastreador_1.1.2.zip"&gt;Rastreador 0.1.2&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="previewbody" style="color: #666666; display: block; font-size: 130%; margin-left: 0.2em;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;Link para o código fonte: &lt;a href="http://www.easy-share.com/1908945208/Rastreador_source.zip"&gt;Source Rastreador 0.1.2&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id="previewbody" size="4" style="color: #666666; display: block; margin-left: 0.2em;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;Criticas e sugestões são bem vindas.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;br /&gt;Rodrigo Menezes&lt;br /&gt;&lt;br /&gt;Edit: Fiz um update, para ele pegar a mensagem dos correios para um código que não exista.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Edit 2: Adicionei um campo de observação. Então o usuário pode adicionar uma observação para cada código de rastreamento.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial;"&gt;&lt;span class="Apple-style-span" style="color: #cccccc;"&gt;Observação: O arquivo que o programa salva as informações, não é compativel com esta versão, então descompacte o programa em outra pasta.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://geocities.yahoo.com.br/ironbot_br/Rastreador0.1.1.zip"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481850143061022236-6121063520192927737?l=beernotfoundexception.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beernotfoundexception.blogspot.com/feeds/6121063520192927737/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481850143061022236&amp;postID=6121063520192927737' title='21 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/6121063520192927737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481850143061022236/posts/default/6121063520192927737'/><link rel='alternate' type='text/html' href='http://beernotfoundexception.blogspot.com/2008/01/programa-para-rastrear-encomendas-do.html' title='Programa Para Rastrear Encomendas dos Correios'/><author><name>IronMan_br</name><uri>http://www.blogger.com/profile/03713570718536951867</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_IIaOERVwJlE/R44t_FCVzJI/AAAAAAAABOQ/FgGLYXDzCDM/s72-c/rastreador.png' height='72' width='72'/><thr:total>21</thr:total></entry></feed>
