<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lucas Teixeira</title>
	<atom:link href="http://lucastex.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucastex.com.br</link>
	<description>@lucastex</description>
	<lastBuildDate>Fri, 07 Jan 2011 12:44:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Vaga para desenvolvedor Grails</title>
		<link>http://lucastex.com.br/2011/01/07/vaga-para-desenvolvedor-grails/</link>
		<comments>http://lucastex.com.br/2011/01/07/vaga-para-desenvolvedor-grails/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 12:44:47 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[job]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=413</guid>
		<description><![CDATA[
Oi pessoal,
Pra quem tiver interessado em trabalhar com Grails, ou que conheca alguem que esteja procurando&#8230;
The person must have hands on experience with GRAILS.

Experience with Oracle (plus)
Experience developing highly visited and highly scalable websites
Experience using the Grails Web Framework
Excellent communication skills

Location: Redwood City, CA
Duration: 3+ months
Start: ASAP
Rate: Open
Please send resumes to cwelch [at] bluewolf [dot] [...]]]></description>
			<content:encoded><![CDATA[
<p>Oi pessoal,</p>
<p>Pra quem tiver interessado em trabalhar com Grails, ou que conheca alguem que esteja procurando&#8230;</p>
<p>The person must have hands on experience with GRAILS.</p>
<ul>
<li>Experience with Oracle (plus)</li>
<li>Experience developing highly visited and highly scalable websites</li>
<li>Experience using the Grails Web Framework</li>
<li>Excellent communication skills</li>
</ul>
<p><strong>Location</strong>: Redwood City, CA<br />
<strong>Duration</strong>: 3+ months<br />
<strong>Start</strong>: ASAP<br />
<strong>Rate</strong>: Open</p>
<p>Please send resumes to cwelch [at] bluewolf [dot] com (<strong>Charlotte</strong>)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2011/01/07/vaga-para-desenvolvedor-grails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AWS Parte 2 &#8211; Configurando suas credenciais</title>
		<link>http://lucastex.com.br/2010/12/20/aws-parte-2-configurando-suas-credenciais/</link>
		<comments>http://lucastex.com.br/2010/12/20/aws-parte-2-configurando-suas-credenciais/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 17:28:12 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[ec2]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=406</guid>
		<description><![CDATA[
Você pode controlar praticamente toda sua infraestrutura AWS através dos consoles web da Amazon, mas uma outra saída bem interessante, é configurar as APIs de acesso da amazon em sua máquina e acessar tudo diretamente da linha de comendo.
Cada serviço que possui uma API, possui um pacote para baixar, este post mostra como configurar e [...]]]></description>
			<content:encoded><![CDATA[
<p>Você pode controlar praticamente toda sua infraestrutura AWS através dos consoles web da Amazon, mas uma outra saída bem interessante, é configurar as APIs de acesso da amazon em sua máquina e acessar tudo diretamente da linha de comendo.</p>
<p>Cada serviço que possui uma API, possui um pacote para baixar, este post mostra como configurar e utilizar a API Tools do EC2, que são as instâncias da amazon. O primeiro passo é gerar e baixar as chaves de acesso de sua conta. Conto que a partir deste momento, você já tem um cadastro no AWS da Amazon (http://aws.amazon.com) e já se cadastrou no EC2 (http://aws.amazon.com/ec2).</p>
<p>Enfim, basta acessar esta URL (página de credenciais no seu perfil): <a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;action=access-key" target="_blank">https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;action=access-key</a>, acessar a aba do meio, <strong>X.509 Certificates</strong> e criar um novo certificado. Isto irá baixar para seu computador dois arquivos, um que é sua chave privada (private key), e o outro que é de fato o certificado X.509 para se conectar no ambiente AWS.</p>
<p><strong>ATENÇÃO:</strong> Estes arquivos não podem ser baixados novamente, caso você os perca, terá que criar um outro certificado e baixar novamente, portante, guarde-os com carinho.</p>
<p>Após ter os arquivos de credenciais, baixe o pacote da api do endereço: <a href="http://aws.amazon.com/developertools/351" target="_blank">http://aws.amazon.com/developertools/351</a> e descompactá-lo em algum diretório. Eu particularmente sempre opto por um diretório &#8220;aws&#8221; na pasta do meu usuário, e ali dentro uma pasta &#8220;ec2&#8243;. Ou seja, as pastas baixadas (lib e bin) para mim ficam dentro da seguinte pasta:</p>
<blockquote><p><em>/Users/lucastex/aws/</em></p></blockquote>
<p>Dentro desta mesma pasta <em>aws</em> eu mantenho um diretório <strong>keys</strong> e nele guardo aquelas duas chaves que baixamos no primeiro passo.</p>
<p>O último passo, é definir algumas variáveis de ambiente para que o toolkit possa funcionar sem problemas. Precisamos definir o JAVA_HOME apontando para a instalação do java na máquina, e algumas variáveis que apontam para os certificados do AWS, além de é claro, redefinir o PATH para que os binários do AWS possam ser encontrados. Fiz isso no meu <strong>.bash_profile</strong> no meu Mac, mas se alguem usa linux ou windows, basta definir variáveis de sistema com estes nomes e respectivos valores:</p>
<blockquote><p><em>export AWS_HOME=~/aws<br />
export EC2_HOME=$AWS_HOME/ec2<br />
export KEYS_HOME=$AWS_HOME/keys<br />
export EC2_PRIVATE_KEY=`ls $KEYS_HOME/pk-*.pem`<br />
export EC2_CERT=`ls $KEYS_HOME/cert-*.pem`<br />
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home<br />
export PATH=$PATH:$EC2_HOME/bin </em></p></blockquote>
<p>Pronto, basta garantir que estas instruções estão válidas para a sessão corrente. Na dúvida, encerre e reinicie a sessão do terminal.</p>
<p>Suas credenciais já estão configuradas! Você pode fazer um teste simples com o comando abaixo:</p>
<blockquote><p><em>ec2-run-instances &#8211;region us-east-1 &#8211;instance-type t1.micro ami-4a0df923</em></p></blockquote>
<p>Com este comando aí em cima, você está dizendo para que o AWS suba uma nova instância do tipo <strong>t1.micro</strong> na região de disponibilidade <strong>us-east-1</strong> com a AMI <strong>ami-4a0df923</strong>.</p>
<blockquote><p><strong>AMI: </strong>São as máquinas já pré-montadas disponíveis para você utilizar, existem milhares na internet disponíveis, cada uma com seu código. Você pode usar uma AMI limpa do ubuntu como também pode utilizar uma das muitas que já vem com o ambiente inteiro instalado. Existem AMIs para desenvolvimento Ruby on Rails, desenvolvimento Java, AMIs com toda a stack AMP, e etc. Visite <a href="http://aws.amazon.com/amis" target="_blank">http://aws.amazon.com/amis</a> para mais detalhes.</p></blockquote>
<p>Rápido e simples! Em poucos segundos você já tem uma instância rodando. Acesse o console EC2 (<a href="https://console.aws.amazon.com/ec2/home" target="_blank">https://console.aws.amazon.com/ec2/home</a>) para ver o status da instância! Com o tempo vou colocando outras dicas, para acessar a maquina por SSH, configurar firewall e acesso externo além de outras coisas.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/12/20/aws-parte-2-configurando-suas-credenciais/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>AWS Parte 1 &#8211; Entendendo alguns termos</title>
		<link>http://lucastex.com.br/2010/12/09/aws-parte-1-entendendo-alguns-termos/</link>
		<comments>http://lucastex.com.br/2010/12/09/aws-parte-1-entendendo-alguns-termos/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 14:11:01 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[blanq]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloudfront]]></category>
		<category><![CDATA[cloudwatch]]></category>
		<category><![CDATA[ebs]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[elb]]></category>
		<category><![CDATA[rds]]></category>
		<category><![CDATA[route53]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=401</guid>
		<description><![CDATA[
Faz um tempo já que estou mexendo com os serviços da Amazon AWS. Fiquei muito contente com os resultados dos meus testes, eles hoje já comportam uma infraestrutura completa por lá, que acaba por suprir toda a minha necessidade de infra. Nos próximos projetos aqui da nova empresa, estaremos investindo pesado nisso, e confiando nossa [...]]]></description>
			<content:encoded><![CDATA[
<p>Faz um tempo já que estou mexendo com os serviços da <a href="http://aws.amazon.com" target="_blank">Amazon AWS</a>. Fiquei muito contente com os resultados dos meus testes, eles hoje já comportam uma infraestrutura completa por lá, que acaba por suprir toda a minha necessidade de infra. Nos próximos projetos aqui da nova empresa, estaremos investindo pesado nisso, e confiando nossa infraestrutura por lá.</p>
<p>Pra quem ainda não viu nada disso, vou colocar aqui alguns dos serviços que iremos utilizar deles, e o que exatamente são eles.</p>
<ul>
<li><strong>EC2:</strong> Elastic Compute Cloud &#8211; São as instâncias de máquinas virtualizadas, propriamente ditos, os &#8220;servidores&#8221; que iremos utilizar.</li>
<li><strong>EBS:</strong> Elastic Block Storage &#8211; Um EBS é attachado (conectado) a uma instância EC2 como um HD que é conectado em sua máquina, é um disco de fato, onde sua instância dá o boot.</li>
<li><strong>S3:</strong> Simple Storage Service &#8211; É um mecanismo de armazenamento de arquivos &#8220;nas nuvens&#8221;. Um storage que independe de máquina ou servidor. É como se fosse daqueles antigos discos virtuais, mas com uma confiabilidade e durabilidade muito maior, além de controle de ACL (segurança) para cada object (arquivo) ou bucket (pasta) lá dentro.</li>
<li><strong>CloudFront:</strong> O CloudFront se posiciona junto com o S3, servindo como uma forma de cache para estes arquivos. Ele possui nós espalhados pelo mundo todo, e é ideal para servir arquivos estáticos como CSS, JS, e imagens de maneira rápida, muito rápida.</li>
<li><strong>ELB:</strong> Elastic Load Balancer &#8211; Utilizado para balancear a carga entre suas instâncias na requisição a sua aplicação. Com isso você escala sua aplicação muito facilmente, por exemplo: Quando você tem uma carga de acesso muito grande, basta subir novas instâncias (novas máquinas) no seu parque de máquinas, e disponibilizá-las jutno a este ELB. É possível duplicar ou triplicar a capacidade de sua infraestrutura apenas com alguns cliques, copiando servidores e aumentando a capacidade de seu parque.</li>
<li><strong>RDS:</strong> Relational Database Service &#8211; Trocando em miúdos, é um &#8220;mysql elástico&#8221;. Ele está na infra da propria Amazon, e consegue se dimensionar dependendo de sua necessidade, são vários tipos (small, large, extra, etc) de instâncias de banco de dados que você pode contratar dele. Para quem desenvolve, e para a aplicação, nada muda, o mesmo driver JDBC do banco, e apenas uma URL JDBC diferenciada.</li>
<li><strong>CloudWatch:</strong> Um servico de monitoramento que você pode usar para acompanhar a saúde de suas instâncias EC2, dos discos EBS e até do seu banco RDS. Métricas como IO, memória, CPU, etc estão disponíveis e você pode setar alarmes para elas.</li>
<li><strong>Route 53:</strong> Um servico de DNS, foi o último a ser testado, era uma grande reclamação do pessoal, pois ainda dependiam de um DNS externo, agora já não precisam, podem usar o próprio DNS da Amazon.</li>
</ul>
<p>Todos os serviços tem uma característica que eu acho muito legal, que é o tal do pay-as-you-go, ou seja, você paga o que utilizar e quanto utilizar. No caso das máquinas (instâncias), paga por quantas horas elas estiverem sendo utilizadas. No caso de um disco EBS, paga por quantos GB estiver alocando, no caso do DNS Route 53, paga por queries em cima do serviço. Ou seja, nada de custos exorbitantes quando não se tem um retorno (acesso) exorbitante. Seu orçamento acompanha o real uso desta infraestrutura.</p>
<p>É muito legal entender como estes serviços funcionam, e mais que isso, como podem trabalhar juntos. Principalmente quando se fala em autoscaling desta arquitetura. É possível definir métricas para o CloudWatch (monitoramento), para que caso sua infraestrutura esteja chegando no limite, ele automaticamente aumente esta infra subindo novas máquinas por exemplo.  Também é possível o contrário, ou seja, baixar máquinas que não estejam sendo necessárias no determinado momento para uma economia de dinheiro.</p>
<p>Cloud Computing tem virado um super buzz ultimamente, tem que ser visto e analisado com cuidado, mas não podemos deixar passar em branco. E com certeza, a Amazon lidera este segmento desde o seu lançamento.</p>
<p>Até mais,</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/12/09/aws-parte-1-entendendo-alguns-termos/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Um novo ano, um novo momento. Um novo desafio.</title>
		<link>http://lucastex.com.br/2010/12/03/um-novo-ano-um-novo-momento-um-novo-desafio/</link>
		<comments>http://lucastex.com.br/2010/12/03/um-novo-ano-um-novo-momento-um-novo-desafio/#comments</comments>
		<pubDate>Sat, 04 Dec 2010 01:48:11 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Minha Vida]]></category>
		<category><![CDATA[blanq]]></category>
		<category><![CDATA[desafio]]></category>
		<category><![CDATA[londrina]]></category>
		<category><![CDATA[sao paulo]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=395</guid>
		<description><![CDATA[
Imaginei algumas vezes que isso fosse acontecer, mas não sabia se seria tão rápido assim.
Em meio a um momento atribulado da minha vida, terminando de organizar e acertar minha festa de casamento, correndo atrás dos últimos detalhes de uma longa e merecida viagem de lua-de-mel e descanso, várias conversas se desenrolaram nos últimos 3 meses [...]]]></description>
			<content:encoded><![CDATA[
<p>Imaginei algumas vezes que isso fosse acontecer, mas não sabia se seria tão rápido assim.</p>
<p>Em meio a um momento atribulado da minha vida, terminando de organizar e acertar <a href="http://mmarinho.com/blog/default.aspx?id=161" target="_blank">minha festa de casamento</a>, correndo atrás dos últimos detalhes de uma longa e merecida viagem de lua-de-mel e descanso, várias conversas se desenrolaram nos últimos 3 meses para acertar uma nova oportunidade de trabalho.</p>
<p>Enfim, aconteceu.</p>
<p>Ir para um lugar que ainda nem é um lugar. Construir &#8220;alguma coisa&#8221; que ainda é abstrata demais em nossas cabeças, correr atrás de detalhes que eu nunca pensei correr&#8230; Afinal, sempre foi simples chegar em algum lugar, sentar em uma mesa pronta com seu computador e simplesmente produzir.</p>
<p>É, as coisas ficam diferentes quando a gente chega no local, e nada existe. Quando temos que correr atrás de qual mesa e qual computador estará ali para que alguém sente e produza. É diferente, é muito diferente.</p>
<p>É o momento de se colocar em prova tudo que foi aprendido, de provar para si mesmo o quanto você estava certo umas vezes e também o momento de convencer a si mesmo, que outras vezes estava errado (e outras, <strong>muito</strong> errado).</p>
<p>Aprender, aprender, aprender. E ao mesmo tempo, ensinar, ensinar e ensinar. No começo, a si mesmo. Mas sempre pensando em preparar um terreno para que alguém possa crescer junto, aprender também, e ensinar mais.</p>
<p>Hoje, 03 de dezembro, chego em São Paulo de volta de uma lua-de-mel inesquecível.</p>
<p>Hoje, 03 de dezembro, também me despeço de São Paulo, grato por estes 4 anos de aprendizado e muitas amizades. Uma nova oportunidade apareceu, um novo momento em minha vida surgiu. Neste dezembro, volto a Londrina, minha cidade natal com uma idéia madura, e muita, mas muita força de vontade de fazer dar certo.</p>
<p>Muito obrigado a todos!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/12/03/um-novo-ano-um-novo-momento-um-novo-desafio/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Criando um tipo de dados personalizado no Grails + Hibernate</title>
		<link>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/</link>
		<comments>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 11:39:24 +0000</pubDate>
		<dc:creator>Volnei Munhoz</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[boolean]]></category>
		<category><![CDATA[usertype]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=388</guid>
		<description><![CDATA[
Olá Pessoal,
Estou invadindo o Blog do meu grande amigo Lucas para postar uma solução que encontrei para um problema no mapeamento de dados de uma base de dados existente. Gostaria, em primeiro lugar, de agradecer o espaço cedido pelo Lucas e parabenizá-lo pelo excelente Blog.
Hoje em dia são poucos os projetos que precisamos desenvolver do [...]]]></description>
			<content:encoded><![CDATA[
<p>Olá Pessoal,</p>
<p>Estou invadindo o Blog do meu grande amigo Lucas para postar uma solução que encontrei para um problema no mapeamento de dados de uma base de dados existente. Gostaria, em primeiro lugar, de agradecer o espaço cedido pelo Lucas e parabenizá-lo pelo excelente Blog.</p>
<p>Hoje em dia são poucos os projetos que precisamos desenvolver do zero &#8212; criar modelagem, tabelas e etc&#8230; &#8212; por isso é muito comum depararmos com padrões proprietários que muitas vezes não se &#8220;encaixam&#8221; na ferramenta de desenvolvimento. Não preciso dizer que não é uma tarefa fácil convencer os desenvolvedores a se adequarem aos novos padrões, então, se não pode com eles, una-se a eles.</p>
<p>Bom, vamos direto ao assunto, no meu projeto atual me deparei com um padrão que utiliza &#8216;S&#8217; e &#8216;N&#8217; para o mapeamento de propriedades booleanas no banco de dados Oracle. Na pesquisa que realizei encontrei várias pseudo-soluções mas a única que atendeu 100% as necessidades foi a implementação de um tipo de dados do Hibernate.</p>
<p>Abaixo a implementação da classe SNUserType, não tem segredo é apenas a implementação da interface <strong>org.hibernate.usertype.UserType</strong>. Salve este código no pacote <strong>persistence</strong> na pasta de <strong>src/groovy</strong> do seu projeto Grails.</p>
<pre class="brush: groovy; title: ;">package persistence;

import org.hibernate.*;
import org.hibernate.usertype.*;
import java.sql.*;
import java.util.*;
import java.io.Serializable;

public class SNUserType implements UserType {

   def SQL_TYPES = [Hibernate.YES_NO.sqlType()];

   public int[] sqlTypes() {
      return SQL_TYPES;
   }

   private Class targetClass;

   public void setParameterValues(Properties params) {
      String targetClassName = params.getProperty(&quot;targetClass&quot;);
      try {
         targetClass = Class.forName(targetClassName);
      } catch (ClassNotFoundException e) {
         throw new HibernateException(&quot;Class &quot; + targetClassName + &quot; not found &quot;, e);
      }
   }

   public Class returnedClass() {
      return targetClass;
   }

   public boolean isMutable() {
      return false;
   }

   public Object deepCopy(Object value) {
      return value;
   }

   public Serializable disassemble(Object value) {
      return (Serializable) value;
   }

   public Object assemble(Serializable cached, Object owner) {
      return cached;
   }

   public Object replace(Object original, Object target, Object owner) {
      return original;
   }

   public boolean equals(Object x, Object y) {
      if (x == y)
         return true;
      if (x == null || y == null)
         return false;
      return x.equals(y);
   }

   public int hashCode(Object x) {
      return x.hashCode();
   }

   public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException {
      String value = rs.getString(names[0]);
      if (&quot;S&quot;.equals(value))
         return true;
      else
         return false;
   }

   public void nullSafeSet(PreparedStatement ps, Object value, int index) throws HibernateException, SQLException {
      if (value == null) {
         ps.setNull(index, Hibernate.YES_NO.sqlType());
      } else {
         if((Boolean)value) {
            ps.setString(index, &quot;S&quot;);
         } else {
            ps.setString(index, &quot;N&quot;);
         }
      }
   }
}</pre>
<p>Pronto, agora tudo que você precisa fazer é utilizar o novo tipo de dados no mapeamento de suas classes de domínio.</p>
<pre class="brush: groovy; title: ;">class Pessoa {

   String nome
   Boolean ativo

   static mapping = {
      ativo type: &quot;persistence.SNUserType&quot;
   }

}</pre>
<p>Com isso, resolvi o problema de integração e concluímos este post.</p>
<p>Um abraço</p>
<p>Volnei</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Instalando o iOS 4 em seu iPhone 3G ou 3Gs</title>
		<link>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/</link>
		<comments>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 19:07:21 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[3gs]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS4]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipsw]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[wwdc]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=379</guid>
		<description><![CDATA[
Oi pessoal,
Essa semana teve na WWDC o lançamento oficial do iPhone 4, o novo aparelho da apple, e junto com isso, também o lançamento da nova versão do sistema operacional, antigo iPhone OS, que agora é chamado de iOS, na versão 4.
A mudança de nome era fato que estava pra acontecer, já que o sistema [...]]]></description>
			<content:encoded><![CDATA[
<p>Oi pessoal,</p>
<p>Essa semana teve na WWDC o lançamento oficial do iPhone 4, o novo aparelho da apple, e junto com isso, também o lançamento da nova versão do sistema operacional, antigo iPhone OS, que agora é chamado de iOS, na versão 4.</p>
<p>A mudança de nome era fato que estava pra acontecer, já que o sistema já está sendo usado no iPad, e não fazia mais sentido o nome &#8216;iPhone&#8217; nele.</p>
<p>Bom, o aparelho iPhone 4 veio com vários recursos legais, mas que dependem de hardware, ou seja, só conseguiremos brincar quando tivermos o aparelho em mãos, como filmagem em HD pela câmera, a tela tipo &#8216;retina&#8217;, que segundo o Jobs, foi a maior melhoria no iPhone, já que trouxe *muito* mais precisão e sensibilidade para a tela do iPhone, que já era simplesmente animal. Além disso, também o giroscópio, processador melhor, e outras coisas.</p>
<p>Já outras funcionalidades que não dependem de hardware, apenas de software (no caso, o iOS4), podem ser atualizadas pra quem tem o iPhone 3Gs, (e alguns itens dela no iPhone 3G). Ontem atualizei o meu iPhone 3Gs e estou aproveitando muito. Hoje vou atualizar o iPhone 3G da @kapiologo pra ver efetivamente o que de diferente ele vai ficar.</p>
<p>Recursos legais do iOS4 (alguns já em uso massivo por aqui):</p>
<ul>
<li>Pastas de aplicativos &#8211; Chega daquela bagunça nas páginas, agora está enfim, tudo organizado em &#8220;Jogos&#8221;, &#8220;Financeiro&#8221;, &#8220;Inutil&#8221;, &#8220;Social&#8221;, e outras categorias</li>
<li>Multi-task &#8211; Enfim o tão esperado multi-task. Agora basta um duplo clique no botão home para que todos os programas que estejam abertos venham a tona, e você pode alterar entre eles sem perder tempo de recarregar ou perder o estado da app atual, muito bom mesmo.</li>
<li>Novo cliente de e-mail: Com e-mails agrupados em threads, como o gmail, agora fica mais fácil acompanhar listas de discussão também.</li>
<li>Bluetooth para teclados: Ainda não usei, nem sei se serviria para alguma coisa, mas vou fazer o teste hoje a noite com o teclado do iMac.</li>
<li>Camera fotográfica: Zoom digital &#8211; legal, e até mantém uma qualidade bem aceitável.</li>
<li>Personalização com papel de parede no home &#8211; particularmente não muda nada pra mim, mas pra quem gosta&#8230; :)</li>
</ul>
<p>Entre outros pontos, também existem os novos softwares como um tal de &#8220;Game Center&#8221; que não vi explicações muito convincentes em lugar algum, mas me parece ser uma app no estilo do antigo GameSpy (alguém jogava quake?) ou do Steam, para os jogos do iPhone, mas não tenho certeza. Também o iBook (que não está presente ainda, acredito que virá na atualização oficial do iOS4).</p>
<p>Bom, só que, como o mel nem sempre é tão doce, a Apple prometeu a atualização do iOS4 pra quem tem iPhone 3G/3Gs apenas para quando o iPhone4 começar a ser vendido nos EUA, e isso será no dia 21 de junho.</p>
<p>Só que como o pessoal que faz parte do Developer Program da Apple já tem acesso a versão, isso acabou vazando pela internet e pode ser encontrado facilmente, só que com um detalhe: Apenas para usuários &#8212; abençoados &#8212; que possuem um Mac em casa.</p>
<p>Por quê? Pelo fato que só se consegue usar o <strong>ipsw</strong> do iOS4 se for atualizado a partir do iTunes 9.2, que ainda está na versão beta.</p>
<p>Então se você é um desses felizardos de ter um iPhone 3G/3Gs e um Mac em casa, pode correr pra instalar a nova versão.</p>
<p>Eu encontrei o link para baixar o beta do iTunes 9.2 pro Mac aqui: <a href="http://hotfile.com/dl/47027679/1629379/itunes_9.2_beta.dmg.html">http://hotfile.com/dl/47027679/1629379/itunes_9.2_beta.dmg.html</a><br />
O ipsw do iPhone 3G: <a href="http://hotfile.com/dl/47027501/b933959/iPhone12_4.0_8A293_Restore.ipsw.html" target="_blank">http://hotfile.com/dl/47027501/b933959/iPhone12_4.0_8A293_Restore.ipsw.html</a><br />
O ipsw do iPhone 3GS: <a href="http://depositfiles.com/en/files/imajjlubx">http://depositfiles.com/en/files/imajjlubx</a> (links retirados do blog <a href="http://www.addictivetips.com/mobile/download-itunes-9-2-beta-and-ios-4-for-iphone-3g-and-3gs/" target="_blank">Addictive Tips</a>)</p>
<p>Bom, como fazer? Depois de baixar, é o procedimento normal de atualização. Execute o DMG do iTunes, e faça a instalação (mantenha sua versão do iTunes fechada durante o procedimento). Depois de instalar, abra o iTunes, e ele irá atualizar toda sua Library, esse processo demorou uns 5 minutos em minha library com 50gb aproximadamente.</p>
<p>Depois, é sempre bom dar uma verificada se a versão foi instalada corretamente, então vá no &#8216;About iTunes&#8217;, no menu para checar se está com a 9.2 e pronto.</p>
<p>Conecte seu iPhone no Mac, após o iTunes reconhecê-lo, faça o backup do seu aparelho (botão direito no item iPhone -&gt; backup).</p>
<p>Selecione o iPhone no menu esquerdo e na direita existirá uma opção &#8220;UPDATE&#8221;, clique nesta opção com a tecla &#8220;ALT-OPTION&#8221; do Mac pressionada, e uma janela de localização de arquivo será aberta. Basta agora selecionar o firmware ipsw para o modelo do seu aparelho que você baixou, e aguardar a instalação.</p>
<p>No final, o backup será restaurado, e o iPhone pronto para ser usado.</p>
<p>Incrível :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Palestra sobre Grails, meus agradecimentos</title>
		<link>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/</link>
		<comments>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/#comments</comments>
		<pubDate>Thu, 27 May 2010 02:20:58 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[umesp]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=373</guid>
		<description><![CDATA[
Como postado antes, ontem falei sobre Grails no SESTINFO &#8211; &#8220;Grails: Java produtivo e divertido&#8221;, evento aberto da UMESP (Universidade Metodista de São Paulo).
O evento foi incrível, com muita gente presente. O último número que recebi é que tinham 98 pessoas na sala assistindo e mais dois professores. Ainda depois do início da palestra cerca [...]]]></description>
			<content:encoded><![CDATA[
<p>Como postado antes, ontem falei sobre <a href="http://www.grails.org" target="_blank">Grails</a> no SESTINFO &#8211; &#8220;Grails: Java produtivo e divertido&#8221;, evento aberto da <a href="http://www.umesp.br">UMESP</a> (Universidade Metodista de São Paulo).<br />
O evento foi incrível, com muita gente presente. O último número que recebi é que tinham 98 pessoas na sala assistindo e mais dois professores. Ainda depois do início da palestra cerca de 15 a 20 pessoas chegaram mas não puderam entrar pelo limite de pessoas na sala.</p>
<p>Pra quem não pode estar presente, comecei a apresentação falando de <a href="http://groovy.codehaus.org">groovy</a> e fazendo um paralelo de uma aplicação Java e a mesma em Groovy, passo-a-passo mostrando os benefícios e vantagens que o groovy pode trazer para o desenvolvimento (o antigo caso do seletor de palavras).<br />
Tentei deixar bem claro o tempo inteiro que o importante é gastarmos tempo *PENSANDO* em resolver o problema e não tentando aprender e entender como a linguagem de programação funciona.</p>
<p>Logo depois, passei por vários pontos do Grails, tentando mostrar como ele trazia os benfícios do Groovy para o desenvolvimento web. Passei pelo GORM (mapeamento objeto-relacional dinâmico), plugins, convenções e vários outros pontos. Pra encerrar a parte teórica, deixei alguns links e sites interessantes para que o pessoal pudesse consultar além de oferecer para os presentes cupons de desconto para a <a href="http://groovymag.com">GroovyMag</a>, revista focada em desenvolvimento Groovy e Grails.</p>
<p>Ao fim, apresentei uma aplicação simples, desenvolvida em bem pouco tempo que funcionava como um &#8216;twitter wall&#8217;, ou seja, fazendo buscas automaticamente no twitter de palavras previamente cadastradas, inclusive capturando automaticamente tweets do pessoal que estavam assistindo a palestra e twittando&#8230; :)</p>
<p>Bom, como eu já falei, foi muito bom, e além de satisfeito, fiquei muito agradecido, então não posso deixar de agradecer:<br />
Principalmente ao Prof. Mauro Schneider (<a href="http://twitter.com/muschneider">@muschneider</a>), professor da Universidade que me fez o convite e viabilizou tudo isso, a Universidade não só o meu agradecimento, mas também os meus parabéns pelo ótimo evento. Aos meus amigos que me confirmara, e foram me apoiar e ajudar, Emerson (<a href="http://twitter.com/erbernardino">@erbernardino</a>), Paulo (<a href="http://twitter.com/paulosuzart">@paulosuzart</a>), Leonardo (<a href="http://twitter.com/leonardofigs">@leonardofigs</a>), Rafael (<a href="http://twitter.com/rafaelfelini">@rafaelfelini</a>), Luca (<a href="http://twitter.com/lucabastos">@lucabastos</a>) e Jailton (<a href="http://twitter.com/jailton">@jailton</a>). Ao Jailton, não só pela presença, mas também pelo apoio divulgando o evento na lista do SOUJava.</p>
<p>Pra quem quiser, a apresentação segue abaixo. E também 2 repositórios que criei no github, um com os fontes do projeto apresentado, e outro com a apresentação em HTML.</p>
<p>Repositório da apresentação: <a href="http://github.com/lucastex/slides-grails-umesp">http://github.com/lucastex/slides-grails-umesp</a><br />
Repositório dos fontes do projeto: <a href="http://github.com/lucastex/projeto-grails-umesp">http://github.com/lucastex/projeto-grails-umesp</a></p>
<div id="__ss_4324585" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Grails: Java produtivo e divertido" href="http://www.slideshare.net/lucastex/grails-java-produtivo-e-divertido">Grails: Java produtivo e divertido</a></strong><object id="__sse4324585" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=metodista-grails-100526215434-phpapp02&amp;stripped_title=grails-java-produtivo-e-divertido" /><param name="name" value="__sse4324585" /><param name="allowfullscreen" value="true" /><embed id="__sse4324585" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=metodista-grails-100526215434-phpapp02&amp;stripped_title=grails-java-produtivo-e-divertido" name="__sse4324585" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/lucastex">Lucas Teixeira</a>.</div>
<div style="padding: 5px 0 12px;">Ah, e uma foto do pessoal se arrumando antes da palestra comecar:</div>
<div style="padding: 5px 0 12px;">
<dl id="attachment_377" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://lucastex.com.br/wp-content/uploads/2010/05/photo.jpg"><img class="size-medium wp-image-377" title="palestra" src="http://lucastex.com.br/wp-content/uploads/2010/05/photo-300x225.jpg" alt="palestra" width="300" height="225" /></a></dt>
<dd class="wp-caption-dd">palestra</dd>
</dl>
</div>
<div style="padding: 5px 0 12px;">[]s,</div>
<p>Lucas</p></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Palestra aberta de Grails na Universidade Metodista</title>
		<link>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/</link>
		<comments>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/#comments</comments>
		<pubDate>Thu, 20 May 2010 02:30:49 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=367</guid>
		<description><![CDATA[
Pra quem estará em São Paulo na próxima terça-feira, eu irei apresentar uma palestra sobre Grails na SESTINFO &#8211; Semana de Estudos em Tecnologia da Universidade Metodista de São Paulo.
O título da palestra será &#8211; &#8220;Grails &#8211; Java produtivo e divertido&#8221; e a entrada é liberada para quem quiser assistir. Vou falar de Groovy e [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem estará em São Paulo na próxima terça-feira, eu irei apresentar uma palestra sobre Grails na SESTINFO &#8211; Semana de Estudos em Tecnologia da <a href="http://www.metodista.br" target="_blank">Universidade Metodista de São Paulo</a>.</p>
<p>O título da palestra será &#8211; &#8220;Grails &#8211; Java produtivo e divertido&#8221; e a entrada é liberada para quem quiser assistir. Vou falar de Groovy e Grails além da comunidade envolvida em torno dessas tecnologias. E ao final da apresentação, vou fazer algum hands on com o pessoal, desenvolvendo uma aplicação live com todos.</p>
<p>Divulgue em suas listas de discussões, empresa, amigos e inimigos, aproveitem que a entrada é liberada!</p>
<p><strong>Data</strong>: 25 de maio<br />
<strong>Horário</strong>: A partir das 19:00<br />
<strong>Local</strong>: Universidade Metodista<br />
<strong>Endereço</strong>: Rua Alfeu Tavares, 149 &#8211; Rudge Ramos &#8211; São Bernardo do Campo – SP</p>
<p><strong>Mapa</strong>: <a href="http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+Alfeu+Tavares,+149+Rudge+Ramos+-+S%C3%A3o+Bernardo+do+Campo+%E2%80%93+SP&amp;sll=-23.581689,-46.642769&amp;sspn=0.020551,0.046756&amp;ie=UTF8&amp;hq=&amp;hnear=R.+Alfeu+Tavares,+149+-+Rudge+Ramos,+S%C3%A3o+Bernardo+do+Campo+-+S%C3%A3o+Paulo,+09641-000&amp;ll=-23.609924,-46.548729&amp;spn=0.16437,0.37405&amp;z=13&amp;iwloc=A" target="_blank">http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+Alfeu+Tavares,+149+Rudge+Ramos+-+S%C3%A3o+Bernardo+do+Campo+%E2%80%93+SP&amp;sll=-23.581689,-46.642769&amp;sspn=0.020551,0.046756&amp;ie=UTF8&amp;hq=&amp;hnear=R.+Alfeu+Tavares,+149+-+Rudge+Ramos,+S%C3%A3o+Bernardo+do+Campo+-+S%C3%A3o+Paulo,+09641-000&amp;ll=-23.609924,-46.548729&amp;spn=0.16437,0.37405&amp;z=13&amp;iwloc=A</a></p>
<p>Depois da palestra, vou divulgar os slides e os fontes do hands on aqui no blog.</p>
<p>Ajude a divulgar, retwittando esta mensagem: <a href="http://twitter.com/lucastex/status/14333780136">http://twitter.com/lucastex/status/14333780136</a></p>
<p><span style="color: #ff0000;"><strong>[Atualizado!]</strong></span></p>
<p>Vou distribuir uma edição grátis da Groovy Magazine (<a href="http://groovymag.com" target="_blank">groovymag.com</a>) para cada pessoa presente no local, compareça!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Usando o textmate como editor de texto padrão do Mac</title>
		<link>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/</link>
		<comments>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:18:55 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=365</guid>
		<description><![CDATA[
Uma coisa bem chata que acontece, é que quando tentava abrir arquivos com a extensão txt no Mac, sempre abria o TextEdit, o editor padrão do Mac OS.
É um editor muito simples e pouco funcional, o que me fazia todas as vezes buscar o textmate para editar e trabalhar com os arquivos. Resolvi definir ele [...]]]></description>
			<content:encoded><![CDATA[
<p>Uma coisa bem chata que acontece, é que quando tentava abrir arquivos com a extensão txt no Mac, sempre abria o TextEdit, o editor padrão do Mac OS.</p>
<p>É um editor muito simples e pouco funcional, o que me fazia todas as vezes buscar o textmate para editar e trabalhar com os arquivos. Resolvi definir ele como padrão da seguinte forma</p>
<ol>
<li>Localize algum arquivo com a extensão que quer mudar (no meu caso, .txt)</li>
<li>Vá em propriedades deste arquivo (ou selecione-o e aperte cmd+I)</li>
<li>Na &#8216;aba&#8217; &#8220;Open with&#8221;, selecione o programa que deseja usar</li>
<li>Selecione o botão &#8220;Change All&#8221; para setar como padrão para todos os arquivos deste tipo.</li>
</ol>
<p>Pronto, agora os arquivos TXT serão abertos diretamente no Textmate!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugin grails para calcular valor de frete dos correios</title>
		<link>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/</link>
		<comments>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:46:38 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[calculo]]></category>
		<category><![CDATA[correios]]></category>
		<category><![CDATA[frete]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sedex]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=362</guid>
		<description><![CDATA[
Acabei de lancar um novo plugin grails.
Este calcula o valor do envio de uma encomenda através dos Correios. Contempla SEDEX, SEDEX 10, SEDEX a cobrar e outros. O texto explicativo está bem simples e legal, e está no github junto com os fontes:
http://github.com/lucastex/correios-br
Mesmo os fontes no github, você pode instalar o plugin usando o comando [...]]]></description>
			<content:encoded><![CDATA[
<p>Acabei de lancar um novo plugin grails.</p>
<p>Este calcula o valor do envio de uma encomenda através dos Correios. Contempla SEDEX, SEDEX 10, SEDEX a cobrar e outros. O texto explicativo está bem simples e legal, e está no github junto com os fontes:</p>
<p><a href="http://github.com/lucastex/correios-br">http://github.com/lucastex/correios-br</a></p>
<p>Mesmo os fontes no github, você pode instalar o plugin usando o comando padrão do grails:</p>
<pre class="brush: groovy; title: ;">grails install-plugin correios-br</pre>
<p>Deem uma olhada nos docs do github, vale a pena!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google agora analisa a velocidade dos sites</title>
		<link>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/</link>
		<comments>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:01:22 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/</guid>
		<description><![CDATA[
 O google iniciou no fim da semana passado com mais um fator de relevância para indexação e rankeamento dos sites que são retornados por ele. Por incrível que pareça, &#8220;velocidade do site&#8221; agora também conta.
Isso impacta diratamente em arquivos e chamadas externas do site (imagens, css, js), e traz a tona com MUITA importância [...]]]></description>
			<content:encoded><![CDATA[
<p><span><span style="font-family: Trebuchet MS;"> O google iniciou no fim da semana passado com mais um fator de relevância para indexação e rankeamento dos sites que são retornados por ele. Por incrível que pareça, &#8220;velocidade do site&#8221; agora também conta.</p>
<p>Isso impacta diratamente em arquivos e chamadas externas do site (imagens, css, js), e traz a tona com MUITA importância um assunto que já estava ganhando foco nos ultimos tempos que é a otimização dos sites. Otimização de tudo, desde tamanho de imagens, estrutura de HTML bem formatado, compactação de JS, união de estilos e funções JS em menos arquivos e etc.</p>
<p>Este recurso entrou em uso no Google.com, e ainda está no famoso &#8220;beta&#8221; do google. Em algum tempo, conforme for ganhando maturidade, será estendido a todos outros, incluindo Brasil. Vou deixar aqui o link oficial do anuncio pra que quem esteja interessado possa ler, e também ver as dicas de frameworks e tecnologias que o google recomenda para este trabalho de otimização.</p>
<p><a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html</a></p>
<p>:)</span></span></p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unboxing do meu iMac de 27&#8243;</title>
		<link>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/</link>
		<comments>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 03:46:11 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[imac]]></category>
		<category><![CDATA[unboxing]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=326</guid>
		<description><![CDATA[
Enfim chegou meu novo PC. Faz um tempo já que estava adiando comprar um computador de mesa para desenvolver e ficar mais a vontade em casa. Com o uso intensivo apenas de  notebook a alguns anos, meu pescoço e minhas costas começaram a reclamar feio esse ano.
Resolvi aproveitar a promoção de lançamento do site do [...]]]></description>
			<content:encoded><![CDATA[
<p>Enfim chegou meu novo PC. Faz um tempo já que estava adiando comprar um computador de mesa para desenvolver e ficar mais a vontade em casa. Com o uso intensivo apenas de  notebook a alguns anos, meu pescoço e minhas costas começaram a reclamar feio esse ano.</p>
<p>Resolvi aproveitar a promoção de lançamento do site do carrefour, que dava 20% de desconto em qualquer produto do site e comprei o tão sonhado iMac de 27&#8243;. 20% de desconto em cima do preço da Apple Store fez uma grande diferença, pode acreditar :) Cheguei de viagem este fim de semana e enfim hoje uma notícia boa, chegou meu iMac. :)</p>
<p>Ponto mega-positivo: Tela. Não podia imaginar a qualidade desse display de LED. É fantástico. Em relação a tamanho, já estava usando um Samsung de 24&#8243;, mas o brilho, a definição do display de LED da Apple é fora de sério. Tirando ainda a resolução alcançada, de <strong>2560</strong> por <strong>1440</strong>.</p>
<p>Preciso agora encontrar uma maneira efetiva de manter um sincronismo REAL entre os dados do iMac e do MacBook. Não queria nem algo web-based como dropbox ou sugarsync, seria alguma coisa normal mesmo, talvez até quem sabe um rsync possa ajudar. Se você tiver alguma opinião ou sugestão, me salve :)</p>
<p>Sobre o problema de flickering reportado por aí a alguns meses, achei que pudesse estragar a minha alegria, mas não, logo que liguei, junto com as atualizações, já veio um firmware do LED pra deixar tudo OK. :)</p>
<p>Segue algumas fotos do unboxing.</p>

<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-0/' title='Foto 1'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-0-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 1" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-1/' title='Foto 2'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-1-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 2" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-2/' title='Foto 3'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-2-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 3" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-3/' title='Foto 4'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-3-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 4" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-6/' title='Foto 5'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-6-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 5" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-7/' title='Foto 6'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-7-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 6" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-8/' title='Foto 7'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-8-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 7" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-9/' title='Foto 8'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-9-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 8" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-10/' title='Foto 9'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-10-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 9" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-12/' title='Foto 10'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-12-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 10" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-13/' title='Foto 11'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-13-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 11" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-14/' title='Foto 12'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-14-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 12" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-15/' title='Foto 13'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-15-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 13" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-16/' title='Foto 14'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-16-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 14" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-17/' title='Foto 15'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-17-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 15" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto1/' title='Foto 16'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto1-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 16" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto2/' title='Foto 17'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto2-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 17" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto3/' title='Foto 18'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto3-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 18" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto4/' title='Foto 19'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto4-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 19" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-18/' title='Foto 20'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-18-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 20" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-19/' title='Foto 21'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-19-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 21" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-20/' title='Foto 22'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-20-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 22" /></a>


]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Como, e por que usar um DataSource JNDI.</title>
		<link>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/</link>
		<comments>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 06:36:04 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[configuracao]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datasou]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[infra]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=312</guid>
		<description><![CDATA[
Recebi uma pergunta esses dias por aqui.
Lucas,
gostaria de saber como trabalhar com arquivos .properties pra conexão com o banco de dados.
No Grails a gente nota que a conexão fica no código-fonte (DataSorce.class)&#8230;
Estou tentando descobrir como faço para ter um arquivo de propriedade com os parametros da conexão. Caso eu precise apontar para outro banco, não [...]]]></description>
			<content:encoded><![CDATA[
<p>Recebi uma pergunta esses dias por aqui.</p>
<blockquote><p>Lucas,<br />
gostaria de saber como trabalhar com arquivos .properties pra conexão com o banco de dados.<br />
No Grails a gente nota que a conexão fica no código-fonte (DataSorce.class)&#8230;<br />
Estou tentando descobrir como faço para ter um arquivo de propriedade com os parametros da conexão. Caso eu precise apontar para outro banco, não terei que recoompilar tudo.</p></blockquote>
<div>Quem enviou foi o <strong>Felipe Juliani</strong>.</div>
<p></p>
<div>Neste caso, devemos usar ao invés das conexões declaradas no DataSource.groovy, uma declaração de conexão com banco de dados via <a href="http://pt.wikipedia.org/wiki/JNDI" target="_blank">JNDI</a>.</div>
<p></p>
<div>JNDI é uma árvore de &#8216;nomes&#8217; que referenciam &#8216;recursos externos&#8217;. O que isso quer dizer? Basicamente, que a sua aplicação poderá pegar uma configuração de fora da aplicação, diretamente de um &#8220;lugar&#8221; na JVM que alguém colocou. Seria mais ou menos um clipboard compartilhado, só que de objetos é claro :)</div>
<p></p>
<div>Então para o caso acima, nada melhor que deixar toda essa &#8216;configuração&#8217; de conexão com o banco de dados do lado de fora da aplicação e fazer com que ela vá buscar apenas pelo &#8216;nome&#8217; desta conexão. Pronto, desta maneira a configuração fica externa a nossa aplicação e feita diretamente no nosso container.</div>
<p></p>
<div>Bom, eu particularmente vejo três grandes razões para o uso de DataSources JNDI. A primeira é quando devemos tirar do desenvolvedor a (ir)responsabilidadade de dimensionar/configurar a utilização de banco de dados. Isso é um trabalho de infra estrutura, e se em algum determinado momento infra estrutura resolver aumentar o pool de conexões de banco da aplicação, consegue fazer isto sem encostar na aplicação, diretamente no container onde ela está rodando.</div>
<p></p>
<div></div>
<div>Outro motivo é a melhor utilização de recursos de banco de dados. Vamos imaginar um cluster de servidores de aplicação com 3 nós. Cada um dos nós roda uma instância da sua aplicação, que está configurada (diretamente no DataSources.groovy) com um pool de 10 conexões, ou seja, só de subir as aplicações, você terá 30 conexões com o banco já feitas. Com DataSources neste caso, todas as instâncias da aplicação poderiam ir buscar conexões com o banco de dados no mesmo DataSource, configurado uma única vez. Com isso, não precisamos necessariamente possuir 30 conexões abertas com o banco, pois quando uma instância necessita de todas elas, outra instância pode estar usando apenas 3 ou 4.  É claro que para isso, além dos servidores e da aplicação, o seu DataSource também precisa estar deployado no cluster todo.</div>
<p></p>
<div></div>
<div>E o terceiro motivo, é o apontado pelo Felipe acima, que precisa deixar uma maneira fácil de trocar o banco de dados da aplicação. Com estes DataSources JNDI fica fácil também, já que a url do banco, driver, e credenciais estão do lado de fora, na configuração do DataSource.</div>
<div></div>
<div>E para criar este DataSource?</div>
<div></div>
<div>Bom, o primeiro passo é levantar em que container você está rodando a sua aplicação, pois cada um tem a sua maneira particular de configuração, seja jetty, tomcat, jboss ou weblogic. Além das diferenças durante a criação do DataSource, temos também diferenças na &#8216;formação&#8217; do nome deles. No caso do weblogic por exemplo, o mais simplista neste quesito, você poderia ter um datasource com o nome de &#8220;PedidosDS&#8221;, já no JBoss, ele fica prefixado desta maneira: &#8220;java:&lt;nome_datasource&gt;&#8221;.</div>
<div></div>
<p></p>
<div>E depois disso, na configuração da sua aplicação Grails, na closure do environment específico que você quer, basta descrevê-lo desta maneira:</div>
<p></p>
<div>
<pre class="brush: groovy; title: ;">production {
   dataSource {
      jndiName = &quot;&lt;nome_datasource&gt;&quot;
   }
}</pre>
</div>
<p></p>
<div>Vale lembrar que estes dias postei sobre <a href="http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/" target="_blank">como criar um datasource no jboss e usá-lo em uma aplicação grails. Não deixe de ler também.</a></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>[GSolr] Beans declarados automagicamente</title>
		<link>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/</link>
		<comments>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:18:23 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[GSolr]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=314</guid>
		<description><![CDATA[
GSolr, é o nome do plugin de solr que estamos fazendo de solr para grails. Para quem quiser acompanhar o trabalho, o repositório está no github: http://github.com/lucastex/gsolr.
Uma coisa que já está feita é a leitura da configuração do gsolr e a declaração mágica de beans, um para cada servidor solr que estiver configurado. Exemplificando, vamos [...]]]></description>
			<content:encoded><![CDATA[
<p>GSolr, é o nome do plugin de solr que estamos fazendo de solr para grails. Para quem quiser acompanhar o trabalho, o repositório está no github: <a href="http://github.com/lucastex/gsolr" target="_blank">http://github.com/lucastex/gsolr</a>.</p>
<p>Uma coisa que já está feita é a leitura da configuração do gsolr e a declaração <strong>mágica</strong> de beans, um para cada servidor solr que estiver configurado. Exemplificando, vamos imaginar que a configuração esteja declarando três servidores Solr que serão consultados:</p>
<pre class="brush: groovy; title: ;">gsolr {
   solr {
      produtos {
         (...)
      }
      noticias {
         (...)
      }
      usuarios {
         (...)
      }
   }
}</pre>
<p>Particularmente, achei bem interessante usar o nome da closure para o nome do servidor ao invés de termos um atributo <em>name = produtos</em> :)<br />
A mágica legal mesmo, é que o plugin vai ler esta configuração quando a aplicação for para o ar, e depois disso irá declarar / criar beans spring dinâmicamente, usando a Spring DSL. E os beans vão ter no nome a declaração feita na closure do usuário.</p>
<p>Ou seja, para os servidores <strong>solr</strong> declarados acima, o plugin irá declarar os Spring Beans <strong>produtosGSolr</strong>, <strong>noticiasGSolr</strong> e <strong>usuariosGSolr</strong> .</p>
<p>Desta maneira, vamos garantir que se você quiser o usar o plugin, o processo como um todo ficará o menos intrusivo possível, e você poderá usar os métodos (de pesquisa e outros) do GSolr apenas injetando o bean do servidor Solr que você quiser.</p>
<pre class="brush: groovy; title: ;">class PesquisaService {
   def noticiasGSolr

   def pesquisar = {
      (...)
   }
}</pre>
<p>Achei no mínimo, muito prático. Tudo isso graças a Spring DSL que temos em groovy. Com um pouco mais de tempo, coloco o procedimento passo a passo para declarar os beans desta maneira. Enquanto isso, conheça um pouco mais sobre a <a href="http://grails.org/doc/latest/guide/14.%20Grails%20and%20Spring.html#14.4%20The%20BeanBuilder%20DSL%20Explained" target="_blank">Spring DSL aqui</a>, ou veja o código fonte <a href="http://github.com/lucastex/gsolr/blob/master/GsolrGrailsPlugin.groovy" target="_blank">aqui</a> e também <a href="http://github.com/lucastex/gsolr/blob/master/src/groovy/org/gsolr/core/GSolrConfigParser.groovy" target="_blank">aqui</a>.</p>
<p>Tem alguma idéia ou sugestão para o plugin? Deixe um comentário!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Resolvendo dependências de sua aplicação Grails usando Ivy</title>
		<link>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/</link>
		<comments>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 04:45:14 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[ivy]]></category>
		<category><![CDATA[buildconfig]]></category>
		<category><![CDATA[dependencia]]></category>
		<category><![CDATA[libs]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=307</guid>
		<description><![CDATA[
Estamos fazendo o desenho do plugin do Solr para o Grails, e precisei das libs do solr/lucene. Dessa vez quis fazer diferente e usar o gerenciamento de dependências que o grails traz usando o ivy. Pra mim, que nunca tinha trabalhado com ivy antes, foi bem simples até.
Bastou eu levantar os grupos/artifactsId e versão do [...]]]></description>
			<content:encoded><![CDATA[
<p>Estamos fazendo o desenho do plugin do Solr para o Grails, e precisei das libs do solr/lucene. Dessa vez quis fazer diferente e usar o gerenciamento de dependências que o grails traz usando o ivy. Pra mim, que nunca tinha trabalhado com ivy antes, foi bem simples até.</p>
<p>Bastou eu levantar os grupos/artifactsId e versão do solr-core e do solrj (1.4) e adicionar no meu <strong>BuildConfig.groovy. </strong>Consegui estas informações no próprio <a href="http://wiki.apache.org/solr">wiki do solr,</a> nesta página: <a href="http://wiki.apache.org/solr/Solrj#Maven">http://wiki.apache.org/solr/Solrj#Maven</a></p>
<p>Depois disso, bastou adicionar um repositório para buscar os jars</p>
<pre class="brush: groovy; title: ;">repositories {
    mavenRepo &quot;http://mirrors.ibiblio.org/pub/mirrors/maven2&quot;
}</pre>
<p>E declarar as dependências que eu precisaria em runtime:</p>
<div id="_mcePaste">
<pre class="brush: groovy; title: ;">dependencies {
    runtime 'org.apache.solr:solr-core:1.4.0'
    runtime 'org.apache.solr:solr-solrj:1.4.0'
}</pre>
</div>
<div>Depois, foi só rodar a aplicação que os jars já estavam todos carregados e prontos para serem importados, ponto para o Grails.</div>
<div></div>
<div></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Grails e Solr juntos, o melhor dos mundos</title>
		<link>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/</link>
		<comments>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 18:11:42 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[nabble]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=304</guid>
		<description><![CDATA[
Tá rolando uma discussão legal na lista &#8220;grails-users&#8221; sobre Solr.
Estamos levantando alguns pontos que seriam essenciais e interessantes para um plugin grails que cuidasse disso. Se você gosta também de Solr, ou está interessado, acompanhe os e-mails na Grails-Users ou no nabble aqui.
Você usa solr? O que acha interessante nele que deva existir em um [...]]]></description>
			<content:encoded><![CDATA[
<p>Tá rolando uma discussão legal na lista &#8220;grails-users&#8221; sobre Solr.</p>
<p>Estamos levantando alguns pontos que seriam essenciais e interessantes para um plugin grails que cuidasse disso. Se você gosta também de Solr, ou está interessado, acompanhe os e-mails na <a href="http://n4.nabble.com/Grails-user-f1312389.html" target="_blank">Grails-Users</a> ou no <a href="http://n4.nabble.com/Discussion-on-a-Grails-Solr-Plugin-td1569847.html" target="_blank">nabble aqui</a>.</p>
<p>Você usa solr? O que acha interessante nele que deva existir em um plugin grails?</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Criando um DataSource JNDI no JBoss</title>
		<link>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/</link>
		<comments>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 02:08:03 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datasource]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=296</guid>
		<description><![CDATA[
Ok, agora que temos uma aplicação grails rodando no ambiente jboss, temos que configurar um DataSource JNDI para ser usado, com isso evitamos que as credenciais e informações do banco fiquem diretamente configuradas em nossa aplicação.
Este procedimento é simples e facilmente descrito em dois simples passos:

Driver do banco de dados: Você deve copiar o jar [...]]]></description>
			<content:encoded><![CDATA[
<p>Ok, agora que <a href="http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/" target="_blank">temos uma aplicação grails rodando no ambiente jboss</a>, temos que configurar um DataSource JNDI para ser usado, com isso evitamos que as credenciais e informações do banco fiquem diretamente configuradas em nossa aplicação.</p>
<p>Este procedimento é simples e facilmente descrito em dois simples passos:</p>
<ol>
<li>Driver do banco de dados: Você deve copiar o jar do driver JDBC do seu banco de dados para dentro da pasta &lt;jboss_home&gt;/common/lib</li>
<li>Configuração do DataSource: No jboss ela é feita através de um arquivo XML. Após criar este arquivo, tenha certeza que o salvou dentro da pasta &lt;jboss_home&gt;/server/&lt;seu_server&gt;/deploy.</li>
</ol>
<p>No meu caso, o arquivo se chama <strong>database-ds.xml</strong> e possui as seguintes tags (são altamente descritivas, acredito não precisar detalhar):</p>
<pre class="brush: xml; title: ;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;datasources&gt;
  &lt;local-tx-datasource&gt;
    &lt;jndi-name&gt;jdbc/databaseDS&lt;/jndi-name&gt;
    &lt;connection-url&gt;jdbc:mysql://localhost:3306/banco_dev&lt;/connection-url&gt;
    &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/driver-class&gt;
    &lt;user-name&gt;root&lt;/user-name&gt;
    &lt;password&gt;senha&lt;/password&gt;
    &lt;min-pool-size&gt;5&lt;/min-pool-size&gt;
    &lt;max-pool-size&gt;30&lt;/max-pool-size&gt;
    &lt;idle-timeout-minutes&gt;1&lt;/idle-timeout-minutes&gt;
    &lt;prepared-statement-cache-size&gt;32&lt;/prepared-statement-cache-size&gt;
  &lt;/local-tx-datasource&gt;
&lt;/datasources&gt;</pre>
<p>Agora para acessá-lo basta buscar pelo nome JNDI <strong>java:jdbc/databaseDS</strong>, ou no meu caso, como é uma aplicação grails, usar a declarativa no <strong>DataSources.groovy</strong></p>
<pre class="brush: groovy; title: ;">production {
  dataSource {
    jndiName = &quot;java:jdbc/databaseDS&quot;
    dbCreate = &quot;update&quot;
  }
}
</pre>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Como fazer o deploy de uma app grails no JBoss</title>
		<link>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/</link>
		<comments>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 12:51:56 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[erro]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[validator]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=289</guid>
		<description><![CDATA[
Neste fim de semana quis fazer alguns testes pela primeira vez com uma aplicação grails no jboss.
Já tinha acompanhado na grails-users que existem alguns problemas para efetuar o deploy, e para cada um deles, uma sequência de passos obscuros para fazer o deploy acontecer com sucesso. Minha versão de grails neste procedimento é a 1.2.1 [...]]]></description>
			<content:encoded><![CDATA[
<p>Neste fim de semana quis fazer alguns testes pela primeira vez com uma aplicação grails no jboss.</p>
<p>Já tinha acompanhado na <strong>grails-users</strong> que existem alguns problemas para efetuar o deploy, e para cada um deles, uma sequência de passos obscuros para fazer o deploy acontecer com sucesso. Minha versão de grails neste procedimento é a 1.2.1 e do JBoss é a 5.1.0.GA</p>
<p>Efetivamente, o que acontece é que jboss traz junto com suas common libs vários jars que são empacotados juntamente com a sua aplicação quando você utiliza o comando <strong>grails war</strong>.</p>
<p>Existem alguns workarounds na internet que te mostram como modificar o <strong>BuildConfig.groovy</strong> (arquivo que define propriedades do empacotamento de sua app) para que após montar a estrutura de arquivos que irão ser empacotados, remova estes arquivos (principalmente o log4j onde o problema é mais aparente) do chamado <strong>stagingDir</strong> e os deixe de fora do pacote final.</p>
<p>Particularmente, achei a solução <a href="http://www.comerciaisnet.com.br/clientes/difermig_representacoes/minasul/marreta.jpg" target="_blank">um tanto quanto diferente</a> e acabei achando no <a href="http://www.grails.org/FAQ" target="_blank">FAQ do Grails</a> e depois com mais detalhes <a href="http://community.jboss.org/wiki/ClassLoadingConfiguration" target="_blank">nesta página</a> uma solução menos intrusiva ao pacote, que é definir a prioridade de carregamento dos jars da aplicação.</p>
<p>Bom, para isso, precisamos criar um arquivo <strong>jboss-web.xml</strong> dentro do diretório <strong>WEB-INF</strong> de nossa aplicação que irá mostrar ao jboss que queremos &#8220;blindar&#8221; nossa aplicação para utilizar os jars que estão dentro de seu lib, e que estes por sua vez não deverão ser sobrescritos pelos jars do classpath do servidor. O conteúdo do arquivo segue abaixo:</p>
<pre class="brush: xml; title: ;">&lt;jboss-web&gt;
   &lt;context-root&gt;/projeto&lt;/context-root&gt;
   &lt;class-loading java2ClassLoadingCompliance=&quot;false&quot;&gt;
      &lt;loader-repository&gt;
         projeto:archive=projeto.war
         &lt;loader-repository-config&gt;java2ParentDelegation=false&lt;/loader-repository-config&gt;
      &lt;/loader-repository&gt;
   &lt;/class-loading&gt;
&lt;/jboss-web&gt;</pre>
<p>Na tag <strong>context-root</strong> estamos apenas aproveitando que a aplicação terá seu arquivo de configuração específico para o jboss e definindo o contexto em que ela será publicada. Nas tags seguintes pedimos para o jboss criar o nosso classloader isolado, com o nome &#8220;projeto:archive=projeto.war&#8221;. Com este nome (que deve ser único, por isto leva em consideração o nome do projeto), garantimos que as classes pedidas pelo nosso projeto serão procuradas ali, e caso não encontradas, nos classpaths seguintes (common/lib, depois no tomcat).</p>
<p>Basicamente isto seria suficiente para conseguir que o projeto rodasse sem problemas. Porém no meu cenário de versões (grails 1.2.1 e jboss-5.1.0.GA) existe outro ponto de conflito. O Hibernate Validator que está junto ao jboss também difere em versão e gera conflito com o grails. Neste caso a solução é <a href="http://www.comerciaisnet.com.br/clientes/difermig_representacoes/minasul/marreta.jpg" target="_blank">ainda mais interessante</a> e simples que a anterior.</p>
<p>Para resolver o problema no deploy que indica claramente problema de versão no Hibernate Validator, basta que você faça o download da última versão deste jar (no meu caso, 4.0.2-GA) nesta url: <a href="https://www.hibernate.org/30.html" target="_blank">https://www.hibernate.org/30.html</a>. Depois disto, resta apenas colocar o jar do hibernate validator dentro da pasta <strong>&lt;jboss_home&gt;/common/lib</strong>.</p>
<p>Pronto, a aplicação está rodando e funcional dentro do jboss!</p>
<pre class="brush: plain; title: ;">10:36:32,815 INFO  [[/projeto]] Initializing Spring root WebApplicationContext
10:36:41,155 INFO  [[/projeto]] Initializing Spring FrameworkServlet 'grails'</pre>
<p>PS: Vale lembrar que o arquivo <strong>jboss-web.xml</strong> é padrão para arquivos <strong>war</strong>, se você quiser configurar a ordem do classpath para aplicações <strong>ear</strong> ou<strong> sar</strong>, consulte o link acima para entender as diferenças.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Como acessar uma taglib de dentro de um service</title>
		<link>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/</link>
		<comments>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 00:35:31 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[taglib]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=277</guid>
		<description><![CDATA[
Uma situação que acontece muito, é a reutilização das funções de taglibs dentro dos controllers de sua aplicação grails. Isso é muito fácil de se fazer, basta chamar o método usando o objeto com o nome do namespace da taglib.
Ou seja, para usar dentro do controller a função de formatação de números, definida pela função [...]]]></description>
			<content:encoded><![CDATA[
<p>Uma situação que acontece muito, é a reutilização das funções de taglibs dentro dos controllers de sua aplicação grails. Isso é muito fácil de se fazer, basta chamar o método usando o objeto com o nome do namespace da taglib.<br />
Ou seja, para usar dentro do controller a função de formatação de números, definida pela função formatNumber (<a href="http://grails.org/doc/latest/ref/Tags/formatNumber.html" target="_blank">taglib já no core do grails</a>), é só fazer a chamada assim:</p>
<pre class="brush: groovy; title: ;">def myAction = {
render g.formatNumber([number:5000.234, type: &quot;number&quot;, maxFractionDigits: 2])
}</pre>
<p>Esta função é equivalente a chamar a taglib de dentro de um gsp da seguinte maneira:</p>
<pre class="brush: xml; title: ;">&lt;g:formatNumber number=&quot;5000.234&quot; type=&quot;number&quot; maxFractionDigits=&quot;2&quot; /&gt;</pre>
<p>Mas quando precisamos fazer isto, por exemplo, dentro de um service, encontramos um probleminha chato, as taglibs não são injetadas automaticamente. Para contornar essa &#8220;<a href="http://upload.wikimedia.org/wikipedia/commons/7/7d/Bug.png" target="_blank">situação</a>&#8220;, temos que buscar a taglib manualmente, da seguinte maneira:</p>
<pre class="brush: groovy; title: ;">def myTag = grailsApplication.mainContext.
            getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
def value = myTag.formatNumber([number:5000.234, type: &quot;number&quot;, maxFractionDigits: 2])</pre>
<p>Ahhh, para isso não se esqueca de injetar o objeto da grailsApplication da seguinte maneira</p>
<pre class="brush: groovy; title: ;">class MeuService {
   def grailsApplication
   (...)
}</pre>
<p>Bin-go.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Devolvendo um texto como attachment no response</title>
		<link>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/</link>
		<comments>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:48:52 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[attachment]]></category>
		<category><![CDATA[content disposition]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[render]]></category>
		<category><![CDATA[response]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=271</guid>
		<description><![CDATA[
Me deparei com a seguinte situação em uma aplicação construída usando Grails.
O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:
def arquivo = Arquivo.get(params.id) [...]]]></description>
			<content:encoded><![CDATA[
<p>Me deparei com a seguinte situação em uma aplicação construída usando Grails.</p>
<p>O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:</p>
<pre class="brush: groovy; title: ;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
render arquivo.texto</pre>
<p>Legal, desta maneira (bem simples até), o conteúdo deste texto seria renderizado na página para o usuário poder salvá-la.</p>
<p>Imaginei que isto pudesse ser incrementado um pouco, e percebi que fazer com que o usuário tivesse que salvar a página (que continha apenas o XML) poderia se tornar um tanto chato com o passar do tempo. Resolvi alterar a action para devolver o texto em anexo ao response. Isso mesmo, com a caixinha para poder salvá-lo.</p>
<p>Olha que simples:</p>
<pre class="brush: groovy; title: ;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
response.setContentType &quot;text/xml&quot;
response.setHeader &quot;Content-Disposition&quot;, &quot;attachment;filename=\&quot;${arquivo.nome}.xml\&quot;&quot;
response &lt;&lt; arquivo.texto</pre>
<p>Simples, colocando a instrução no header para que a &#8220;disposição&#8221; da resposta seja &#8220;attachment&#8221; (anexo), o browser ao invés de renderizar apenas o conteudo, retorna um arquivo com este texto.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como definir o locale default de sua aplicação grails</title>
		<link>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/</link>
		<comments>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:05:33 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[bean]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[locale]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=266</guid>
		<description><![CDATA[
Graças ao ótimo suporte de internacionalização que o grails nos proporciona, podemos alterar o idioma corrente da app passando apenas o parametro lang na URL. Com isso, o locale é definido para o usuário e se sua aplicação recupera as mensagens com o g:message ou outros recursos de i18n, usará o locale indicado.
Caso queira definir [...]]]></description>
			<content:encoded><![CDATA[
<p>Graças ao ótimo <a href="http://grails.org/doc/1.1/guide/single.html#10.%20Internationalization" target="_blank">suporte de internacionalização</a> que o grails nos proporciona, podemos alterar o idioma corrente da app passando apenas o parametro <strong>lang</strong> na URL. Com isso, o locale é definido para o usuário e se sua aplicação recupera as mensagens com o <strong>g:message</strong> ou outros recursos de i18n, usará o locale indicado.</p>
<p>Caso queira definir um locale default para sua app, basta sobrescrever o bean <strong>localeResolver</strong> no seu resources.groovy como abaixo:</p>
<pre class="brush: groovy; title: ;">beans = {
  localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
    defaultLocale = new Locale(&quot;pt&quot;, &quot;BR&quot;)
    java.util.Locale.setDefault(defaultLocale)
  }
}</pre>
<p>Sim, estou trazendo aos poucos tópicos que estavam em meu outro blog, blog.lucastex.com, dê uma passada por lá.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Usando JNDI na configuração do DataImportHandler</title>
		<link>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/</link>
		<comments>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 11:27:03 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[dataimporthandler]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=254</guid>
		<description><![CDATA[
Quer evitar que suas credenciais (usuário e senha) estejam abertas no seu data-config.xml? A melhor alternativa com certeza é usar um datasource JNDI para isso e manter usuário, senha e url de conexão do banco de dados dentro do cointainer.
Para isso, é só declarar a tag dataSource do data-config.xml desta maneira:
&#60;dataSource user=&#34;&#34; password=&#34;&#34; jndiName=&#34;JndiDoMeuDs&#34;
Sim, os [...]]]></description>
			<content:encoded><![CDATA[
<p>Quer evitar que suas credenciais (usuário e senha) estejam abertas no seu <strong>data-config.xml</strong>? A melhor alternativa com certeza é usar um datasource JNDI para isso e manter usuário, senha e url de conexão do banco de dados dentro do cointainer.</p>
<p>Para isso, é só declarar a tag <strong>dataSource</strong> do <strong>data-config.xml</strong> desta maneira:</p>
<pre class="brush: xml; title: ;">&lt;dataSource user=&quot;&quot; password=&quot;&quot; jndiName=&quot;JndiDoMeuDs&quot;</pre>
<p>Sim, os parametros <strong>user</strong> e <strong>password</strong> devem ser declados vazios, não se esqueça disso.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache Solr &#8211; Recomendação de livro</title>
		<link>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/</link>
		<comments>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:53:57 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Livros]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[indexa]]></category>
		<category><![CDATA[leitura]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[seach]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=238</guid>
		<description><![CDATA[
Pra quem gosta de busca e assuntos relacionados, um ótimo livro que recomendo é este: Solr 1.4 Enterprise Search Server.
Muito legal, bem abrangente, fala um pouco sobre cada coisa, desde implementações básicas necessárias de DataImportHandler, Transformers, Term-Suggest, Types e outros pontos.


Foi lançado um pouco antes da versão 1.4 estável sair (por todo aquele problema do [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem gosta de busca e assuntos relacionados, um ótimo livro que recomendo é este: <strong>Solr 1.4 Enterprise Search Server.</strong></p>
<p>Muito legal, bem abrangente, fala um pouco sobre cada coisa, desde implementações básicas necessárias de DataImportHandler, Transformers, Term-Suggest, Types e outros pontos.</p>
<p><center><br />
<div id="attachment_239" class="wp-caption alignnone" style="width: 210px"><img class="size-full wp-image-239" title="Solr 1.4 - Enterprise Search Server" src="http://lucastex.com.br/wp-content/uploads/2010/01/Solr-1-4-Enterprise-Search-Server.jpg" border="0" alt="Solr 1.4 - Enterprise Search Server" width="200" height="247" /><p class="wp-caption-text">Solr 1.4 - Enterprise Search Server</p></div><br />
</center></p>
<p>Foi lançado um pouco antes da versão 1.4 estável sair (por todo aquele problema do último bug do lucene e etc), por 2 dos committers: David Smiley e Eric Pugh.</p>
<p>Está custando $40 diretamente no packetpub: A url para o produto é esta: <a href="http://www.packtpub.com/solr-1-4-enterprise-search-server/book" target="_blank">http://www.packtpub.com/solr-1-4-enterprise-search-server/book</a>. </p>
<p>Recomendo a todos que se interessam pelo assunto, e trabalham com isso, guia de consulta imprescindível :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Config.groovy &#8211; Cuidado ao manipular suas configurações</title>
		<link>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/</link>
		<comments>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:18:00 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Maldades do Groovy]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[grailsapplication]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[problema]]></category>
		<category><![CDATA[referencia]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=234</guid>
		<description><![CDATA[
Hum, reportando uma situação no mínimo inusitada que tive por aqui.
Acabei descobrindo, da maneira ruim, que no Grails, quando lêmos a configuração da aplicação (Config.groovy) através da referência grailsApplication.config estamos manipulando uma variável passível de alterações, ou seja, qualquer atributo que você recuperar de lá, e modificar, assim estará para toda a execução.
Na minha situação, [...]]]></description>
			<content:encoded><![CDATA[
<p>Hum, reportando uma situação no mínimo inusitada que tive por aqui.</p>
<p>Acabei descobrindo, da maneira ruim, que no Grails, quando lêmos a configuração da aplicação (Config.groovy) através da referência <strong>grailsApplication.config</strong> estamos manipulando uma variável passível de alterações, ou seja, qualquer atributo que você recuperar de lá, e modificar, assim estará para toda a execução.</p>
<p>Na minha situação, eu mantinha uma lista de e-mails lá no arquivo de configuração para que quando disparado, eu pudesse enviar o e-mail a estes destinatários somados ao e-mail do usuário, que tinha acabado de ser inputado no formulário. Tinha algo assim:</p>
<pre class="brush: groovy; title: ;">contato.destinatarios = [&quot;email1@xpto.com&quot;, &quot;email2@xpto.com&quot;, &quot;email3@xpto.com&quot;]</pre>
<p>E dentro do controller, usando o mail plugin (<a href="http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/">leia este post sobre o mail plugin</a>), executava o seguinte trecho de código:</p>
<pre class="brush: groovy; title: ;">def destinatarios = grailsApplication.config.contato?.destinatarios?.toArray()
destinatarios &lt;&lt; params.email
sendMail {
    to destinatarios
    subject &quot;Contato ...&quot;
    body &quot;......&quot;
 }</pre>
<p>Ou seja, quando eu pegava a referência dos destinatários do Config, eu mantinha essa referência em &#8216;destinatários&#8217;. Quando eu adicionava neste array o destinatário que vinha do formulários &#8220;params.email&#8221;, eu alterava a *instância* e referência da configuração da aplicação, e aquele e-mail ali ficava.</p>
<p>Resultado, no primeiro contato, receberam o e-mail a lista de destinatários e o primeirocontato@xpto.com, na segunda execução, todos eles da configuração, o primeirocontato@xpto.com e também o segundocontato@xpto.com foram copiados.</p>
<p>E assim sucessivamente.</p>
<p>Vivendo e aprendendo, tomem cuidado com isso!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Portal imobiliário usando Groovy e Grails</title>
		<link>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/</link>
		<comments>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 13:05:34 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[acegi]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[GORM]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[imob]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[locaweb]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[richui]]></category>
		<category><![CDATA[runtimelogging]]></category>
		<category><![CDATA[settings]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[sqlserver]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=220</guid>
		<description><![CDATA[
Ontem (dia 09/01) fizemos o lançamento de um site que desenvolvemos usando Groovy e Grails, um desafio e tanto, pela responsabilidade de colocar o sistema no ar e pelo timing do projeto. Todo o site e a integração com o sistema legado (onde algumas informações ainda estão sendo gerenciadas), tiveram que sair do simples &#8220;create [...]]]></description>
			<content:encoded><![CDATA[
<p>Ontem (dia 09/01) fizemos o lançamento de um site que desenvolvemos usando <a href="http://lucastex.com.br/tag/groovy/" target="_blank">Groovy</a> e <a href="http://lucastex.com.br/tag/grails/" target="_blank">Grails</a>, um desafio e tanto, pela responsabilidade de colocar o sistema no ar e pelo timing do projeto. Todo o site e a integração com o sistema legado (onde algumas informações ainda estão sendo gerenciadas), tiveram que sair do simples &#8220;<em>create app</em>&#8221; para produção em 2 meses. Esse é também o grande motivo para a falta de tempo de postar mais por aqui.</p>
<p>Trata-se dos sites <a href="http://www.imoveisnomorumbi.com.br" target="_blank">http://www.imoveisnomorumbi.com.br</a> e <a href="http://www.imoveisnopanamby.com.br" target="_blank">http://www.imoveisnopanamby.com.br</a>, site de duas imobiliárias do mesmo grupo, que negocia imóveis de alto padrão nestes dois bairros.</p>
<p>Algumas informações interessantes sobre o projeto:</p>
<p><strong>Tecnologia e Infraestrutura:</strong> O site antigo usava <a href="http://pt.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank">SQLServer</a> como banco de dados e tecnologia <a href="http://pt.wikipedia.org/wiki/ASP" target="_blank">ASP</a>. Como usamos Groovy e Grails, por trás temos uma JVM <a href="http://pt.wikipedia.org/wiki/Plataforma_Java">Java</a> em execução, e o banco de dados, o bom e velho <a href="http://pt.wikipedia.org/wiki/MySQL">MySQL</a>.</p>
<p>Antes, para suportar o ASP, o <a href="http://pt.wikipedia.org/wiki/IIS">IIS</a> era usado como web server, e agora Um <a href="http://pt.wikipedia.org/wiki/Servidor_Apache">apache</a> balanceia as requisições aos dois <a href="http://pt.wikipedia.org/wiki/Tomcat">Tomcats</a>. Tudo isto está deployado e rodando em um Cloud Server da Locaweb, por opção do cliente, onde já mantinha a conta antiga.</p>
<p><strong>Integração com o sistema legado:</strong> Para a integração do modelo de dados antigo e o novo modelo, construímos rotinas de importação dos dados usando <a href="http://docs.codehaus.org/display/GROOVY/Tutorial+6+-+Groovy+SQL" target="_blank">Groovy SQL</a>, uma maneira <span style="text-decoration: line-through;"> fácil, </span> muito fácil, de fazer rotinas em banco de dados.</p>
<p><strong>Plugins utilizados: </strong>Ahhh, os bons e velhos plugins do Grails, não canso de dizer que esta é a melhor parte do Grails! Foram usados os plugins:</p>
<p><a href="http://grails.org/plugin/mail" target="_blank"><strong>Grails-Mail</strong></a>, para envio dos e-mails e formas de contato do site<br />
<a href="http://grails.org/plugin/acegi" target="_blank"><strong>Grails-Acegi</strong></a>, para autenticação e segurança<br />
<a href="http://grails.org/plugin/cookie" target="_blank"><strong>Grails-Cookie</strong></a>, para manipulação dos cookies do cliente<br />
<a href="http://grails.org/plugin/navigation" target="_blank"><strong>Grails-Navigation</strong></a> para criação de menus/submenus da interface administrativa<br />
<a href="http://grails.org/plugin/richui" target="_blank"><strong>Grails-RichUi</strong></a> para alguns componentes gráficos como auto-complete e nuvem de tags<br />
<a href="http://grails.org/plugin/runtime-logging" target="_blank"><strong>Grails-RuntimeLogging</strong></a>, um ótimo plugin para moder trabalhar com o nível de log de cada artefato (controller, service, etc), da app em runtime<br />
<a href="http://grails.org/plugin/settings" target="_blank"><strong>Grails-Settings</strong></a> para algumas parametrizações da aplicação.</p>
<p>E com certeza, se eu tivesse pesquisado com um pouco mais de tempo, teria usado outros plugins para evitar algum trabalho que tenha feito na mão. E é claro, além disso, bastante (mesmo) <a href="http://www.jquery.com" target="_blank">jquery</a>, <a href="http://pt.wikipedia.org/wiki/AJAX_%28programa%C3%A7%C3%A3o%29" target="_blank">ajax</a> e <a href="http://pt.wikipedia.org/wiki/Json" target="_blank">json</a>.</p>
<p>É isso, qualquer dúvida sobre o projeto, como aconteceu, soluções e problemas, basta comentar!</p>
<p>Obrigado a todos!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Envio de e-mails com o Mail Plugin</title>
		<link>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/</link>
		<comments>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 03:43:10 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=211</guid>
		<description><![CDATA[
Enviar e-mails a partir de uma aplicação Grails é extremamente fácil. Tudo graças ao Mail Plugin. Sou um grande fã do mecanismo de plugins do Grails não só pela facilidade de criá-los, mas principalmente pelo espírito de compartilhamento de código que isto gera nos desenvolvedores. É bem simples, por exemplo, se eu preciso de alguma [...]]]></description>
			<content:encoded><![CDATA[
<p>Enviar e-mails a partir de uma aplicação <a href="http://grails.org" target="_blank">Grails</a> é extremamente fácil. Tudo graças ao <a href="http://grails.org/plugin/mail" target="_blank">Mail Plugin</a>. Sou um grande fã do mecanismo de plugins do Grails não só pela facilidade de criá-los, mas principalmente pelo espírito de compartilhamento de código que isto gera nos desenvolvedores. É bem simples, por exemplo, se eu preciso de alguma coisa que envie e-mails, vou construir isto separado da minha aplicação e distribuir para todos que precisem. Fácil, muito fácil!</p>
<p>Enfim, o Mail Plugin é um dos plugins mais antigos do Grails (acho que usei pela primeira vez em agosto de 2008), e um dos mais simples de ser usado. O primeiro passo é instalar o plugin como qualquer outro:</p>
<pre class="brush: groovy; title: ;">grails install-plugin mail</pre>
<p>Com isso as dependências serão baixadas e o plugin será instalado.</p>
<p>Após isso, você vai precisar configurar o envio de e-mail.<br />
De forma bem intuitiva novamente, diretamente em seu Config.groovy deverá setar as propriedades:</p>
<pre class="brush: groovy; title: ;">grails {
   mail {
      host     = &quot;smtp.meuservidor.com.br&quot;
      port     = 25
      username = &quot;usuario@provedor.com.br&quot;
      password = &quot;eusoul33t&quot;
      props    = [&quot;mail.smtp.auth&quot;: &quot;true&quot;, &quot;mail.smtp.socketFactory.port&quot;: &quot;587&quot;]
   }
}</pre>
<p>Ahhh, o exemplo acima já está pronto para usar validação de usuário e senha no envio, já que hoje (99%) dos servidores assim exigem. Pronto, com isso o plugin já consegue saber como o e-mail será enviado (por trás ele usa o envio de e-mails embutido no Spring, é claro).</p>
<p>Agora, quando for enviar um e-mail, basta usar a closure <strong>sendMail</strong> que é automaticamente adicionada em todos os seus controllers! Segue um exemplo:</p>
<pre class="brush: groovy; title: ;">sendMail {
   from &quot;lucas@testedoblog.com.br&quot;
   to &quot;dest1@email.com&quot;, &quot;dest2@email.com&quot;
   cc &quot;copia@email.com&quot;
   bcc &quot;oculto@email.com&quot;
   subject &quot;Enviando e-mails com Grails&quot;
   body &quot;&quot;&quot;
      E ai pessoal,
      Este e-mail foi enviado diretamente de um controller da minha
      aplicação Grails usando o Mail Plugin.

      Até mais.&quot;&quot;&quot;
}</pre>
<p>Pronto, agora é só checar as caixas de e-mail! Vale lembrar que as instruções <strong>cc</strong> e <strong>bcc</strong> não são obrigatórias!</p>
<p>O plugin suporta envio de anexos, conteúdo HTML e outras opções. Para mais detalhes, consulte a <a href="http://grails.org/plugin/mail" target="_blank">documentação oficial</a>, ou deixe um comentário aqui.</p>
<p>Ahh, e se quiser usar uma caixa do GMail para enviar as mensagens, use a configuração abaixo.</p>
<pre class="brush: groovy; title: ;">grails {
   mail {
      host     = &quot;smtp.gmail.com&quot;
      port     = 465
      username = &quot;seulogingmail@gmail.com&quot;
      password = &quot;suasenhadogmail&quot;
      props    = [&quot;mail.smtp.auth&quot;: &quot;true&quot;,
                  &quot;mail.smtp.socketFactory.port&quot;: &quot;465&quot;,
                  &quot;mail.smtp.socketFactory.class&quot;: &quot;javax.net.ssl.SSLSocketFactory&quot;,
                  &quot;mail.smtp.socketFactory.fallback&quot;: &quot;false&quot;]
   }
}</pre>
<p>Feliz 2010, ao som de &#8220;Dream Theater &#8211; Don&#8217;t look past me&#8221;.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Indexando vários campos com o mesmo conteúdo</title>
		<link>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/</link>
		<comments>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 18:15:22 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[schema]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=201</guid>
		<description><![CDATA[
Durante a definição schema do seu índice SOLR, muitas vezes precisamos armazenar o mesmo valor em diferentes campos (fields). Isto é necessário pelo fato de que cada field tem sua maneira de ser indexado, impactando diretamente no match deste documento em uma busca.
Por exemplo, temos o nome de um livro no nosso índice da biblioteca. [...]]]></description>
			<content:encoded><![CDATA[
<p>Durante a definição schema do seu índice SOLR, muitas vezes precisamos armazenar o mesmo valor em diferentes campos (fields). Isto é necessário pelo fato de que cada field tem sua maneira de ser indexado, impactando diretamente no match deste documento em uma busca.</p>
<p>Por exemplo, temos o nome de um livro no nosso índice da biblioteca. Este nome deve ser flexionado no maior número possível de formas para que seja encontrado, seja removendo acentos, usando o snowball, o tokenizando e etc. Porém, ele também será usado em uma feature de &#8220;ordenação alfabética&#8221;. Neste caso sabemos que o campo deve ser indexado como &#8220;string&#8221; sem tokenização ou flexão, ou o resultado pode virar uma bagunça.</p>
<p>Grande parte das pessoas, enviam o campo duas vezes para o Solr, em dois fields diferentes, por exemplo: &#8220;nome&#8221; e &#8220;nome_ord&#8221;. Com isso, deixamos de usar uma diretriz bem bacana do solr chamada <strong>copyField</strong> que serve para copiar o conteúdo de um campo para outro.</p>
<p>Imaginando que os campos estejam definidos da seguinte forma:</p>
<pre class="brush: xml; title: ;">&lt;field name=&quot;nome&quot; type=&quot;text&quot; indexed=&quot;true&quot; stored=&quot;true&quot; /&gt;
&lt;field name=&quot;nome_ord&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;false&quot; /&gt;</pre>
<p>E usar no fim do documento a instrução <strong>copyField</strong></p>
<pre class="brush: xml; title: ;">&lt;copyField source=&quot;nome&quot; dest=&quot;nome_ord&quot; /&gt;</pre>
<p>Desta forma não adicionamos nenhum overhead de parse de uma nova informação, diminuímos a quantidade de dados enviada para o Solr (muito importante se estiver usando HTTP para indexação) e garantimos que a informação será exatamente a mesma.</p>
<p>Uma outra funcionalidade (esta disponível apenas a partir do Solr 1.4) é o <strong>maxChars </strong>que pode ser usado para restringir a quantidade de caracteres que serão copiados. Neste meu exemplo poderia ser usado para criar um resumo da introdução desta maneira.</p>
<pre class="brush: xml; title: ;">&lt;copyField source=&quot;introducao&quot; dest=&quot;resumo&quot; maxChars=&quot;3000&quot; /&gt;</pre>
<p>Boa!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando o JDeveloper no Mac</title>
		<link>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/</link>
		<comments>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 11:42:16 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=188</guid>
		<description><![CDATA[
Neste fim de ano, estarei me divertindo com um novo projeto por aqui.
Usaremos JDeveloper como IDE e JSF como framework web. Particularmente não tenho boas impressões de JSF nem do JDeveloper, mas como apenas conheço comentários e opiniões de amigos, acredito ser uma boa oportunidade para tentar entender e um pouco deles e poder formar [...]]]></description>
			<content:encoded><![CDATA[
<p>Neste fim de ano, estarei me <a href="http://cpantiguidade.files.wordpress.com/2009/10/abolicaoescravatura081.jpg" target="_blank">divertindo</a> com um novo projeto por aqui.</p>
<p>Usaremos JDeveloper como IDE e JSF como framework web. Particularmente não tenho boas impressões de JSF nem do JDeveloper, mas como apenas conheço comentários e opiniões de amigos, acredito ser uma boa oportunidade para tentar entender e um pouco deles e poder formar uma opinião própria com propriedade . Mas já adianto, não vou me apaixonar :)</p>
<p>Enfim, precisei já instalar o JDeveloper no meu Mac, e como várias coisas no mundo Oracle, precisam de alguns ajustes para rodar sem problemas no Mac.</p>
<p>O primeiro passo, é <a href="http://www.oracle.com/technology/software/products/jdev/index.html" target="_blank">baixar o produto diretamente do site</a>. O arquivo já vem no genérico .jar, então para rodar é na base do clássico</p>
<pre class="brush: xml; title: ;">java -jar jdevstudio11111install.jar</pre>
<p>Só que por <a href="http://i188.photobucket.com/albums/z99/fisicomaluco/semttulo-3.jpg" target="_blank">algum motivo</a> ele não identifica os JREs instaladas por default no mac, para isso, um <a href="http://legalzinho.files.wordpress.com/2007/06/30102006125200g.jpg" target="_blank">pequeno ajuste</a> deve ser feito, criando um link dentro da pasta onde a instalação do JDeveloper irá procurar o JRE.</p>
<p><strong>Lembre-se que este processo deve ser feito antes de executar a instalação do pacote. Se você já havia iniciado, encerre-a e comece novamente.</strong></p>
<pre class="brush: bash; title: ;">cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
sudo mkdir -p jre/lib
cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/classes/
sudo ln -s classes.jar ../Home/jre/lib/rt.jar</pre>
<p>Pronto, agora basta iniciar a instalação padrão do JDeveloper sem mais problemas.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Solr 1.4 &#8211; Feito o lançamento oficial</title>
		<link>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/</link>
		<comments>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:12:51 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[indexação]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=181</guid>
		<description><![CDATA[
Bom pessoal, como disse no post anterior, hoje foi lançado o Solr 1.4 versão final.
O link para download é: http://linorg.usp.br/apache/lucene/solr/1.4.0/
Segue abaixo o e-mail oficial de lançamento, que acabou de cair na Lista de e-mails do framework, enviado pelo Grant Ingersoll.
Apache Solr 1.4 has been released and is now available for public download!
http://www.apache.org/dyn/closer.cgi/lucene/solr/
Solr is the popular, [...]]]></description>
			<content:encoded><![CDATA[
<p>Bom pessoal, como disse no post anterior, hoje foi lançado o Solr 1.4 versão final.</p>
<p>O link para download é: <a href="http://linorg.usp.br/apache/lucene/solr/1.4.0/">http://linorg.usp.br/apache/lucene/solr/1.4.0/</a></p>
<p>Segue abaixo o e-mail oficial de lançamento, que acabou de cair na <a href="http://lucene.apache.org/solr/mailing_lists.html#Users" target="_blank">Lista de e-mails do framework</a>, enviado pelo <a href="http://lucene.grantingersoll.com/2009/11/10/apache-solr-1-4-0-offically-released/" target="_blank">Grant Ingersoll</a>.</p>
<blockquote><p>Apache Solr 1.4 has been released and is now available for public download!<br />
<a style="color: #074d8f;" href="http://www.apache.org/dyn/closer.cgi/lucene/solr/" target="_blank">http://www.apache.org/dyn/closer.cgi/lucene/solr/</a></p>
<p>Solr is the popular, blazing fast open source enterprise search<br />
platform from the Apache Lucene project.  Its major features include<br />
powerful full-text search, hit highlighting, faceted search, dynamic<br />
clustering, database integration, and rich document (e.g., Word, PDF)<br />
handling.  Solr is highly scalable, providing distributed search and<br />
index replication, and it powers the search and navigation features of<br />
many of the world&#8217;s largest internet sites.</p>
<p>Solr is written in Java and runs as a standalone full-text search server<br />
within a servlet container such as Tomcat.  Solr uses the Lucene Java<br />
search library at its core for full-text indexing and search, and has<br />
REST-like HTTP/XML and JSON APIs that make it easy to use from virtually<br />
any programming language.  Solr&#8217;s powerful external configuration allows it to<br />
be tailored to almost any type of application without Java coding, and<br />
it has an extensive plugin architecture when more advanced<br />
customization is required.</p>
<p>New Solr 1.4 features include<br />
- Major performance enhancements in indexing, searching, and faceting<br />
- Revamped all-Java index replication that&#8217;s simple to configure and<br />
can replicate config files<br />
- Greatly improved database integration via the DataImportHandler<br />
- Rich document processing (Word, PDF, HTML) via Apache Tika<br />
- Dynamic search results clustering via Carrot2<br />
- Multi-select faceting (support for multiple items in a single<br />
category to be selected)<br />
- Many powerful query enhancements, including ranges over arbitrary<br />
functions, and nested queries of different syntaxes<br />
- Many other plugins including Terms for auto-suggest, Statistics,<br />
TermVectors, Deduplication</p>
<p>Getting Started<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
New to Solr?  Follow the steps below to get up and running ASAP.</p>
<p>1. Download Solr at <a style="color: #074d8f;" href="http://www.apache.org/dyn/closer.cgi/lucene/solr/" target="_blank">http://www.apache.org/dyn/closer.cgi/lucene/solr/</a><br />
2. Check out the tutorial at <a style="color: #074d8f;" href="http://lucene.apache.org/solr/tutorial.html" target="_blank">http://lucene.apache.org/solr/tutorial.html</a><br />
3. Read the Solr wiki (<a style="color: #074d8f;" href="http://wiki.apache.org/solr" target="_blank">http://wiki.apache.org/solr</a>) to learn more<br />
4. Join the community by subscribing to <a style="color: #074d8f;" href="mailto:solr-user@lucene.apache.org" target="_blank">solr-user@lucene.apache.org</a><br />
5. Give Back (Optional, but encouraged!)  See <a style="color: #074d8f;" href="http://wiki.apache.org/solr/HowToContribute" target="_blank">http://wiki.apache.org/solr/HowToContribute</a></p>
<p>For more information on Apache Solr, see <a style="color: #074d8f;" href="http://lucene.apache.org/solr" target="_blank">http://lucene.apache.org/solr</a></p></blockquote>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solr 1.4, mais que pronto</title>
		<link>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/</link>
		<comments>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 00:37:13 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[busca]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=173</guid>
		<description><![CDATA[
Pra quem acompanha a lista de discussões e o andamento do projeto, o Solr 1.4 já está prontinho para ser lançado tem algum tempo. O pessoal de dev estava apenas esperando o lançamento do Lucene 2.9 para oficializar o lançamento.
Quando então foi lançado, o pessoal do Solr empacotou o framework como RC, disponibilizou para download e [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem acompanha a lista de discussões e o andamento do projeto, o Solr 1.4 já está prontinho para ser lançado tem algum tempo. O pessoal de dev estava apenas esperando o lançamento do Lucene 2.9 para oficializar o lançamento.</p>
<p>Quando então foi lançado, o pessoal do Solr empacotou o framework como RC, disponibilizou para download e na hora do lançamento (pra ser mais preciso, um dia antes), dois bugs significativos foram levantados no Lucene 2.9. A equipe do Solr os avaliou com calma, entrou em alinhamento com os devs do Lucene (alguns fazem parte de ambas as equipes) e decidiram por bem aguardar o Lucene 2.9.1 para efetuar o anúncio oficial do Solr 1.4.</p>
<p>Pois bem, com <a href="http://lucene.apache.org/java/docs/index.html#6+November+2009+-+Lucene+Java+2.9.1+available">o lançamento oficial do Lucene 2.9.1 hoje a tarde</a>, o pessoal do Solr já correu, e empacotou em uma versão final a release tão esperada, 1.4.</p>
<p><a href="http://twitter.com/gsingers/status/5568639566" target="_self">Amanhã, dia 07, será feito o lançamento final do Solr 1.4 sem mais delongas</a>. Pois bem, é só aguardar! Mas se você quiser dar uma olhadinha antes, é só baixar os pacotes antes de serem replicados para o mirror central entrando aqui: <a href="http://people.apache.org/~gsingers/solr/1.4.0/" target="_blank">http://people.apache.org/~gsingers/solr/1.4.0/</a>.</p>
<p>Eu, em uma olhada muito, mas muito rápida por cima de algumas funcionalidades do Solr 1.4 (direto no wiki), levantei alguns pontos e encaminhei na lista de e-mails dos colaboradores da empresa em que trabalho. Não estão agrupados, muito menos organizados, mas segue como esboço e rascunho de um post que valeria a pena.</p>
<ul>
<li>SolrServer &#8211; SolrJ HTTP
<ul>
<li>Configuração
<ul>
<li>Timeout</li>
<li>Quantidade de retentativas</li>
</ul>
</li>
<li>SolrJ altamente evoluído para criação da queries e integrado aos searchcomponents</li>
</ul>
</li>
<li>DataImportHandler
<ul>
<li>Transformers
<ul>
<li>Clob Transformer: Permite pegar dados direto de colunas clob no banco de dados</li>
<li>HTML Stripper: Atua em campos com conteúdo HTML, removendo tags e deixando apenas o conteúdo</li>
</ul>
</li>
<li>Agora é possível usar o DIH indexando até conteúdos de um &#8216;datasource&#8217; de e-mail, deixando ele fazer pooling em um e-mail e indexando o que chega.</li>
<li>Eventos callback após indexação</li>
</ul>
</li>
<li>Replicação
<ul>
<li>Configuração interna a aplicação &#8211; Funciona como um RequestHandler</li>
<li>Dashboard de administração, permite ver como estão as replicações, qual indice está em cada nó, status do download de novos indices</li>
<li>Permite replicação interna, via HTTP, não sendo mais necessário usar apenas rsync
<ul>
<li>Com isso, possibilidade de usar em windows</li>
<li>Menos configuração de infra estrutura</li>
<li>Maior visibilidade do status da replicação</li>
</ul>
</li>
</ul>
</li>
<li>Indexação
<ul>
<li>indexação de grandes quantidades de documentos via streaming
<ul>
<li>conexão é aberta com o master, e permanece assim enquanto necessário.</li>
</ul>
</li>
<li>Anotação @Field para poder adicionar um POJO direto ao índice, sem ter que transformar em SolrInputDocument</li>
</ul>
</li>
<li>Componentes de busca (alguns presentes no 1.3 completos, outros eram beta, outros nem existiam)
<ul>
<li>Sugestão de busca</li>
<li>Spelling</li>
<li>Highlight</li>
</ul>
</li>
<li>Resposta da busca em vários novos formatos
<ul>
<li>php nativo</li>
<li>json (já existia mas não era oficial)</li>
<li>xml (normal)</li>
<li>ruby</li>
</ul>
</li>
</ul>
<p>E muito mais&#8230;</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

