Blog do Urubatan
msgbartop
Desenvolvedor, Palestrante, Escritor, Nerd Assumido e Pai do Marcus :D
msgbarbottom

31 Aug 07 Blog Day


Seguindo as instruções do site, este link é para a tag BlogDay2007 do Technorati, o BlogDay diz que no dia 31 de agosto, cada blogueiro deve postar uma lista com comentários de 5 blogs que ele lê com frequencia e recomenda. Então segue a minha lista.

Akita On Rails – um excelente blog com bastante conteúdo sobre Ruby On Rails, vale a pena dar uma olhada se você esta interessado no framework.

Desenvolvimento ágil – é o blog da empresa Improve IT, gosto principalmente do podcast sobre desenvolvimento ágil deles.

A Companhia – uma ótima forma de se ler sobre administração de empresas, escrita e administrada pelo “Grande Lider da Silva”.

Fragmental – Excelente blog do Philip Calçado, ele não posta todos os dias, mas quando posta vale a pena a leitura!

Blog do TaQ – O blog do TaQ é o blog do Eustaquio Rangel,também fala bastante sobre Ruby On Rails, e como eu ando bastante interessado neste assunto, é mais um para a minha lista de leituras, excelentes textos e ótimas dicas.

Acho que era isto, ja contribui para o BlogDay 2007 :D

Tags: ,

31 Aug 07 Um pouco de tudo e tudo de nada – correndo atrás da máquina

fields.JPGUma das coisas legais de trabalhar com TI é que todo dia tem novidade, uma das coisas ruins de trabalhar com TI é que precisamos pelo menos ter uma idéia sobre tudo o que esta acontecendo …

Então, segue mais um daqueles posts com poucas opiniões e muitos links …

  • Annotated to the bones:
    Parece que o pessoal não aprende mesmo, em vez de diminuir a quantidade de configurações necessárias eles só mudam elas de lugar, mas mesmo assim ja melhora um pouco, a versão 2.0 da especificação do JMX (Java Managenment Extensions) vai suportar a definição de MBeans via anotações como podemos ver neste post.
  • Parece que o JavaFX esta pegando mesmo, ja existem projetos para criação de bibliotecas de componentes para o JavaFX, alem do projeto do compilador que deve diminuir bastante o startup das aplicações em JFX transformando a aplicação em um .class padrão, mas o que eu quero realmente ver, é quando vai estar disponível o Java FX Mobile! por que quanto mais eu apanho pro Java ME, mais eu me convenço que Java ME só serve pra fazer joguinhos.
  • E depois que eu escreve um post sobre Design By Contract, na verdade em um dos comentários postados, fiquei sabendo do Spring DBC (Spring Design By Contract) que é uma biblioteca que facilita a utilização de Design By Contract em projetos que utilizam o Spring Framework, utilizando o AOP dinâmico do Spring Framework em vez de AOP estático do AspectJ, a única coisa que não gostei é que a especificação do “Contrato” é feita no XML, ou seja, longe da classe.
  • A Vingança dos Nerds! não, eu não estou falando daquele filme, estou falando deste post do BizRevolution, um ótimo post de uma “pessoa normal”, dizendo que mesmo os “humanistas” não gostando da idéia, o mundo é dos Nerds :D
  • A ZDnet finalmente revelou quais são os “7 hábitos dos desenvolvedores eficientes“, e sinceramente eu concordo com eles, com estes 7 hábitos, qualquer desenvolvedor se torna mais eficiente do que seria sem eles, os 7 hábitos são:
    • Entender o problema
    • Usar as ferramentas adequadas
    • Focar a simplicidade (foi a melhor tradução para Strive que eu consegui :( )
    • Mantenha o seu código limpo e claro
    • Aprenda a debugar
    • Use o que ja esta disponível (não re-invente a roda)
    • Continue a aprender
  • Ja começou a aprender a usar o Guice? se não começou ainda, ja esta na hora, tem empresas pedindo experiência com o Guice na hora de contratar, faz um tempinho já, mas eu falei um pouco sobre o Guice aqui no blog :D
  • glassfish.pngUm pouco sobre o Glassfish a implementação de referência do Java EE 5 (e um ótimo servidor de aplicações):
  • Sabe aqueles bug reports maravilhosos que ajudam aresolver problemas? se você gosta deles, não permita que seus usuários leiam isto. O Guia de como criar os piores bugs reports possíveis, e pior, baseado em fatos reais.
  • A equipe de desenvolvimento do Eclipse Web Tools ja esta trabalhando na versão 3.0, por enquanto a única alteração é o suporte ao Jetty :D
  • xplogo.gifXP: Melhor em Java ou em Ruby? é um post sobre um TCC falando de metodologias ágeis (no caso XP) comparando o mesmo projeto desenvolvido em Java e em Ruby, o meu único comentário sobre isto é: Ágil não quer dizer apenas entregar a primeira versão rápido (não estou dizendo que este é o caso), acho que as comparações deles valem tanto quanto dizer que delphi é melhor para desenvolvimento ágil do que java por que cria mais rápido uma aplicação Desktop de frontend para bancos de dados :D
  • Finalmente parece que o mercado esta acordando para as metodologias ágeis (tanto de desenvolvimento como de gerenciamento), todos os dias vejo uma noticia nova de mais uma empresa começando a utilizar XP ou SCRUM ou …
    Só espero que não façam a mesma porcaria que fizeram com o RUP que é muito bom, mas todas as empresas que eu conheço que dizem usar RUP usam Waterfall …
  • Java Server Faces

Tags: , , , , , , ,

31 Aug 07 O que estão usando por ai? quais bibliotecas? quais frameworks?

what-is-in-your-toolbox2.jpgUma pergunta que se vê muito em fóruns e listas de discução de java, .net, delphi,
é: qual biblioteca ou framework é mais utilizado no mercado para fazer X?
Em Java não existe uma forma minimamente segura de se responder isto, exceto pela própria experiência, o que se vê por ai no mercado e nas próprias listas ou fóruns …
Uma coisa que achei muito legal no site Working With Rails é que todos os que se registram la, ou pelo menos uma boa parte, informa quais gems ou plugins do rails que estão utilizando ou já utilizaram, e com isto, se você programa em Ruby, você tem uma forma mais “concreta” de saber “o que estão utilizando no mercado” …
Para saber quais GEMS são mais utilizadas é só clicar aqui, e para saber quais plugins do rails são mais utilizados basta clicar aqui.

Não que isto seja a informação mais importante do mundo, mas é uma forma fácil de saber se você vai encontrar suporte relativamente fácil para aquela super ultra mega solução para o seu maior problema de todos os tempos das ultimas duas horas :D

E por falar no Working With Rails, se algum de vocês se animar a me recomendar por la, este é o link para o meu profile :D

Tags:

30 Aug 07 Ruby cada vez mais próximo da JVM

logo rubyEste é bem rapidinho:
Depois do JRuby que é um interpretador de Ruby para a JVM, ou seja, permite que aplicações Ruby rodem sobre a JVM, agora eu encontro o projeto XRuby (acho que deve significar “Cross Ruby”), que é um compilador que transforma código fonte Ruby em bytecode java (arquivos .rb transformados em arquivos .class).
O projeto ainda esta em andamento (estão trabalhando na versão 0.4 agora), mas isto com certeza promete ficar bem divertido :D
Imagine a facilidade do Ruby com a performance do JIT :D

O XRuby eu ainda não sei, mas na próxima versão do JRuby vai ser possível chamar código java a partir do código ruby (já é possível chamar código ruby a partir de código java), o que vai facilitar muito escrever aplicações utilizando a ferramenta certa para cada situação :D

Por tanto, como eu comentei aqui Java esta indo para o caminho certo, é cada vez mais uma plataforma, em vez de apenas uma linguagem :D

Tags:

30 Aug 07 Extra!Extra! Certificação Sun Certified Enterprise Architect 5 (Java EE 5) – e ainda por cima de grátis!

duke_winter.gifA SUN finalmente esta atualizando as provas da certificação SCEA para Java EE 5 (a versão anterior ainda falava de EJB 1.2, na verdade 1.2 e 2.0).
As inscrições para a prova BETA da certificação vão abrir no dia 20 de setembro de 2007.
A vantagem das provas beta é que são gratuitas, a desvantagem é que normalmente elas tem o dobro de questões que a prova normal :D
Mas passando na prova beta, você ganha o certificado sem desenbolsar R$1 …

Mais detalhes sobre o conteúdo da prova podem ser encontrados nesta thread do JaraRanch, mas basicamente é o seguinte:
javasparrow-med.jpg

  1. Application Design Concepts and Principles
  2. Common Architectures
  3. Integration and Messaging
  4. Business Tier Technologies
  5. Web Tier Technologies
  6. Applicability of Java EE Technology
  7. Patterns
  8. Security

Agora não tenho mais desculpas para não fazer a prova :D
Como na prova atual, a SCEA é dividida em 3 partes, uma prova objetiva, o desenvolvimento de uma arquitetura, e perguntas sobre a arquitetura desenvolvida …
Para se registrar, a partir do dia 20 de setembro, acessar o site http://www.2test.com/ e seguir os passos, ou ligar para o centro prometric mais próximo :D

Tags: ,

30 Aug 07 Curso de Ruby On Rails em Porto Alegre em Setembro

rails.pngA Tech Office IT (minha empresa :D ) estará promovendo o primeiro curso de Ruby On Rails de Porto Alegre no final do mês de setembro.
Serão 20 horas de Ruby On Rails, onde os alunos desenvolverão uma aplicação completa, a aplicação será uma loja de DVDs, todos os conceitos e utilitários serão desenvolvidos a partir desta aplicação.
A aplicação não será toda gerada pelo scaffold, na verdade o comando vai ser utilizado uma única vez para apresenta-lo aos alunos …
Serão desenvolvidos testes antes de cada funcionalidade do sistema, para que o aluno saiba como escrever testes unitários, funcionais e de integração no ambiente do RoR, alguns recursos avançados do rails serão utilizados, sempre focando em DRY e KISS …
Quem ja conhece outra linguagem de programação e não conhece ainda o Ruby não precisa se preocupar, durante o curso será feita também uma introdução a linguagem Ruby, claro que ninguem vai sair um expert em Ruby, mas vai ser o suficiente para sair programando, e sabendo onde procurar mais informações para se aprimorar mais tarde, só é necessário ter conhecimento de lógica de programação e orientação a objetos.

Acho que é uma ótima oportunidade para quem quer aprender RoR ou quer aprimorar os conhecimentos.

Mais detalhes sobre o curso de Ruby On Rails neste link.
Podem fazer perguntas por aqui mesmo, ou usando os dados de contato na release abaixo.

Segue o release oficial :D

logo rubyA Tech Office It realiza no período de 24 a 28 de setembro de 2007 em Porto Alegre, o curso presencial Ruby on Rails, voltado a desenvolvedores Ruby que desejam conhecer mais sobre Rails e desenvolvedores de outras linguagens que tenham interesse em ingressar no RoR. O curso objetiva auxiliar o aluno a entender o Ruby on Rails e possibilitar a criação de aplicações o utilizando, além de expor suas vantagens e limitações.
Após o curso o aluno estará apto a desenvolver aplicações WEB utilizando o Ruby On Rails, saberá onde procurar mais recursos para acelerar o desenvolvimento e adicionar recursos na aplicação desenvolvida.
Com carga horária de 20 horas/aula, o treinamento será 100% prático e ministrado em laboratório. Durante o curso, os participantes desenvolverão uma loja de DVDs completa que poderá ser utilizada como exemplo ou como base para o desenvolvimento de uma aplicação mais complexa pós-curso.
Mais informações poderão ser obtidas através do site www.techoffice.com.br ou e-mail contato@techoffice.com.br, além do telefone 51.3012.8241.

Tags: ,

29 Aug 07 Sobre testes unitários e testes de integração (e um exemplo usando Spring)

junitlogo.gifNão sou um especialista em TDD, na verdade escrevo muito menos testes do que seria realmente o ideal, mas depois da experiência que estou tendo com o SCRUM (ele é usado para gerenciar o projeto que estou participando no momento), comecei a me interessar mais sobre metodologias ágeis (até o ano passado quase todos os projetos em que eu trabalhava utilizavam aquele RUP Desengonçado/Waterfall bastante difundido aqui pelo brasil).

Andei dando uma olhada em TDD e comecei a estudar um pouco mais sobre testes (até com uma forcinha do Ruby On Rails), mas não sei se peguei bem os conceitos …

Pelo que eu entendi a idéia é mais ou menos assim:
Teste unitário = testar um método ou uma seqüencia de métodos de uma classe, sem a interferência de outras classes do sistema, caso a classe em testes tenha alguma dependência, serão fornecidos Mocks para substituir estas dependências, assim garantindo o comportamento esperado das dependências …
Teste de integração = testar um método ou uma seqüencia de métodos de uma classe, mas com as dependências reais para garantir que elas funcionam em conjunto …

Não sei se eu entendi corretamente, mas se for isto mesmo, segue um exemplo para quem estiver trabalhando com o Spring Framework …

Primeiro uma classe que será testada, esta classe extremamente complexa é a classe de negócios do exemplo, que contem um método “sum”, que recebe dois inteiros e deve retornar a soma destes números …

package sptestexample;
public class MyBusinessClass
{
	public int sum(int i, int j)
	{
		return i+j;
	}
}

Depois, eu criei um teste unitário simples, que instância manualmente a classe, se ela tivesse alguma dependência esta seria fornecida e os métodos a serem testados são chamados …

package sptestexample;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
public class MyBusinessTestExample
{
	@Before
	public void setUp() throws Exception
	{
	}
	@Test
	public void testCalculation() throws Exception
	{
		MyBusinessClass cls = new MyBusinessClass();
		Assert.assertEquals(2, cls.sum(1,1));
		int res = cls.sum(Integer.MAX_VALUE,Integer.MAX_VALUE);
		Assert.assertEquals(res, Integer.MAX_VALUE+Integer.MAX_VALUE);
	}
}

Como os testes unitários estão passando e me dizendo que a classe funciona, agora eu vou fazer um teste de integração, que neste exemplo vai consistir em buscar a classe do contexto do Spring Framework, que ja vai ter fornecido todas as dependências reais da classe, e vou repetir o teste anterior, mas tendo a classe integrada com o resto do sistema (dêem um desconto, é um exemplo simples :D )

package sptestexample;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
public class MyBusinessSpringTestExample extends AbstractDependencyInjectionSpringContextTests
{
	protected MyBusinessClass myBusinessClass;
	@Override
	protected String getConfigPath()
	{
		return getClass().getSimpleName() + ".xml";
	}
	public MyBusinessSpringTestExample()
	{
		setPopulateProtectedVariables(true);
	}
	public void testCalculation()
	{
		assertEquals(2, myBusinessClass.sum(1,1));
		int res = myBusinessClass.sum(Integer.MAX_VALUE,Integer.MAX_VALUE);
		assertEquals(res, Integer.MAX_VALUE+Integer.MAX_VALUE);
	}

}

Para que este teste funcione, eu precisei configurar a aplicação, pois o spring precisa de um XML para instanciar o contexto, neste caso o método getConfigPath esta retornando o mesmo nome da classe, por tanto o spring vai tentar inicializar o contexto com um arquivo de mesmo nome da classe, no mesmo package da classe, e o método setPopulateProtectedVariables que é chamado no construtor do teste, diz para o spring configurar as propriedades do TestCase usando as variáveis protected, ou seja, assim não preciso criar os setters das propriedades …

Como este é um exemplo complexo, o arquivo de configuração ficou como no exemplo abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
	default-autowire="byName">
	<bean id="myBusinessClass" class="sptestexample.MyBusinessClass">
	</bean>
</beans>

Beleza o meu teste de integração esta funcionando também …

Considerando que este é o conceito correto, vamos explicar o que o spring fez para ajudar nos testes de integração e um pouco mais sobre o que ele pode ajudar também :D

A classe “AbstractDependencyInjectionSpringContextTests” como pode ser visto na imagem a baixo, é a classe base para todos os testes que precisam de um contexto do spring para funcionar (pelo que eu entendi, os testes de integração), ela permite injeção de dependências nos TestCases mas temos também algumas classes com recursos a mais para ajudar em situações mais especificas …

springtesthierarchy.png

A classe “AbstractTransactionalSpringContextTests” tem todos os recursos da sua super classe, mas é mais indicada para testes que precisam de acesso a banco de dados …
Cada método de testes sera executado dentro de uma transação, e no final do teste será executado um rollback para garantir que cada teste possa montar o seu próprio ambiente com dados conhecidos para facilitar a implementação dos testes …

A classe “AbstractTransactionalDataSourceSpringContextTests” adiciona ainda alguns métodos auxiliares para os testes que vão mexer diretamente com JDBC …

A classe “AbstractAnnotationAwareTransactionalTests” adiciona ainda algumas anotações que podem ajudar bastante, como por exemplo:
@Transactional – que pode ser utilizada para forçar que um teste seja executado dentro de uma transação read-only
@NotTransactional – que faz com que um teste seja executado sem uma transação (o contrário do padrão para esta classe)

A classe “AbstractJpaTests” que tem diversos helpers para testar código que acessa a API JPA

E por último mas não menos importante, a classe “AbstractAspectjJpaTests” que faz a mesma coisa que a anterior, mas habilita o loadtime-weaving do aspectJ para que os testes rodem um pouco mais rápido …

Acho que era isto, a idéia deste post era verificar se eu entendi corretamente o que é cada tipo de teste, e ja deixar alguns exemplos para quem precisa testar aplicações que utilizam o Spring Framework :D

Mais sobre Testes


Então fica a pergunta, é esta mesmo a diferença entre teste unitário e teste de integração?

Tags: , ,

29 Aug 07 Off Topic: Diversos sobre Blogging e Wordpress

Aproveitando que já falei do blog ontem (tudo bem, usei a palavra Wordpress apenas), segue uma série de links e comentários sobre Blogging e Wordpress.

Primeiro, um dos motivos para grande parte dos posts deste blog, é que uso ele como referencia para coisas que não quero esquecer, por exemplo algum exemplo de código que posto aqui, quase sempre uso depois, este é o segundo maior motivo para que eu escreva por aqui, o primeiro é que gosto do “IBOPE” hehehe :D

Seguindo com o offtopic …
Este site de nome muito doido, faz um trabalho bem legal, você fornece a sua URL e ele mostra o PageRank, BackLinks, Indexação das páginas e mais um monte de coisas sobre qualquer URL :D

Segundo o pessoal do “nerdown” a empresa Vikiworks, criou um plugin para o dreamweaver para facilitar a criação de temas para o wordpress, vamos ver o que vai sair disto :D
Acho que vai começar a aparecer um monte de temas para wordpress com aqueles javascripts chinelões do DW :D

Também tem gente dizendo, e eu concordo, que o Wordpress pode ser utilizado para diversos tipos de sites, e não apenas para blogs.

Depois das mudanças do google no algoritmo de calculo do PageRank, ter um “BlogRoll” muito grande no blog pode prejudicar o seu ranking no google,

Como todos sabem, tem maluco pra tudo, mas este negõcio de “ProBlogger” ta ficando meio ridiculo, tem gente pagando por comentários nos seus blogs, sinceramente, eu não acho graça nenhuma nisto, claro, uma das partes mais divertidas de ter um blog, é quando eu escrevo alguma coisa e um monte de gente comenta, mas se forem pagos para isto perde toda a graça …

Não sei se é só comigo que aconteceu, mas depois que diminui bastante a quantidade de adsense no blog, aumentaram os valores por click (o que compensou a diminuição deles).
O Ideal na minha opinião pelo menos, seria conseguir umas duas empresas para colocar o logo ali na barra lateral, ai poderia ficar só com isto e tirar todo o adsense (só não to afim de pagar pra escrever no blog, ja que hoje o blog se paga sozinho :D )

Acho que era isto :D
Prometo que o próximo post vai ser mais interessante :D

Tags: , ,

28 Aug 07 Deployment de servidores Glassfish no windows

glassfish.pngSe por algum motivo você realmente precisar instalar um servidor de produção em uma maquina com Windows, ou se isto for necessário para o seu sistema (precisa ganhar o selo de compatibilidade da MS), ou simplesmente por que você gosta de botar o dinheiro da empresa fora …
Seja qual for a razão que você tiver para querer fazer deploy de um servidor de aplicações Java EE em um servidor windows, você vai querer que ele seja um “serviço do windows”, correto?
O problema é que o instalador do glassfish não sabe configurar um serviço windows …

Ai alguem vai dizer que é possível utilizar o Java Service Wrapper, até é possível, mas não é exatamente prático fazer isto …

Esta semana eu encontrei um post no blog do Ryan de Laplante, que fez o grande favor para todos os que utilizam o glassfish, de criar um comando simples (que esperamos que seja incluído nas próximas versões do glassfish).
O utilitário que ele criou permite com apenas um comando configurar um serviço windows para um dominio do glassfish (cada dominio é como se fosse uma instancia do servidor de aplicações).
Beleza, mas como fazer isto?
é só baixar o arquivo GlassfishSvc.jar disponibilizado no blog dele e rodar o comando:

java -jar GlassfishSvc.jar -i

o -i vai instalar o servidor com as opções padrão, rodando a aplicação sem parâmetro nenhum, ela imprime todas as opções possíveis.

Quem quiser fazer o mesmo para a sua próxima super mega killer aplicação a ser desenvolvida no futuro próximo, é só dar uma olhada no código fonte que esta disponível no mesmo post do blog dele também.

Tags: ,

28 Aug 07 PHP como linguagem de scripting para JVM

Lembram que eu falei a algum tempo atrás que estava rodando o blog (Wordpress) no tomcat?
Pois é, acabou de sair um tutorial de como fazer a mesma coisa rodando no glassfish, ou seja, rodar aplicações PHP no glassfish.
Sinceramente eu não entendi a necessidade de um tutorial, até por que basta pegar o quercus.war e colocar a tua aplicação PHP ali dentro que funciona, mas para quem quiser um passo a passo, este tutorial é um bom começo.

Tags: ,

27 Aug 07 AJDT (AspectJ Development Tools) inconsistente ou eu que não captei a idéia?

Antes de seguir com o problema, vamos começar com um joguinho de procure o erro:

ajdt1.png

Alguém viu alguma coisa extranha na imagem acima?

Ninguém?

Se vocês prestarem atenção no Package Explorer, ele não apresenta nenhum erro na classe “Teste”, mas o editor de código diz que a classe “TestEntity” não possui o método “save” …

O legal é que isto vai acontecer sempre que eu abrir o editor de código, por tanto não é a famosa “perda de sincronia” que acontece de vez em quando no Eclipse.

Mas se eu mandar executar a classe “Teste” vai ocorrer tudo sem problemas, mesmo com o erro que é mostrado no editor de código, por que ela compila sem problemas …

Para se ver livre deste erro, tive que exportar um jar do do projeto onde estão as classes com aspectos, e mover a classe “Teste” para outro projeto, la o editor de código entende que existe o método “save” na classe “TestEntity” que foi introduzido pela compilação do AspectJ, da mesma forma que a classe executa sem problemas no primeiro projeto …

Por tanto, o editor de java do Eclipse, não fica nem sabendo que existe o compilador do AspectJ e que este altera as classes em tempo de execução, mas o package explorer, como tem os erros marcados pelo compilador, sabe que a classe esta OK, pois a compilação ocorreu sem problema algum …

Como eu fiz para confundir o eclipse?

Criei um projeto do AspectJ, e escrevi o seguinte aspecto:

package introduction;

public aspect EntityAspects
{
	declare parents: (@javax.persistence.Entity *) extends SmartEntity;

	public boolean SmartEntity.save()
	{
		return false;
	}
}

Depois eu criei a classe TestEntity:

package introduction;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class SmartEntity
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	protected Integer id;

	public Integer getId()
	{
		return id;
	}

	public void setId(Integer id)
	{
		this.id = id;
	}

	public abstract boolean save();
}

Criei uma Entity que teria os métodos injetados:

package introduction;

import javax.persistence.Entity;

@Entity
public class TestEntity
{

}

Depois disto foi só criar uma classe que usaria a classe TestEntity (qualquer uma com um public static void main)

package introduction;

import introduction.TestEntity;

public class Teste
{
	public static void main(String[] args){
		TestEntity te = new TestEntity();
		System.out.println(te.save());
	}
}


Prontinho, o eclipse se perdeu, mas se você mandar isto executar, vai funcionar sem problema algum.

Vou realizar o mesmo teste com o suporte a aspectJ do IntelliJ IDEA e do Netbeans a noite para ver se isto acontece com eles também, mas eu fiquei bastante decepcionado com o AJDT :(

PS.: sim, este teste foi influencia do Ruby On Rails, estava testando se seria possível com uma combinação de AOP + JPA + Qualquer outra coisa que eu não pensei ainda, um ambiente tão produtivo quanto o RoR :D

Na verdade, neste caso, apenas uma mistura de ActiveRecord com Repository, que ja ficaria bem legal …

A parte de CoC (Convencion over Configuration) é possível implementar em java sem problemas :D

UPDATE: instalei o plugin deste link no NetBeans e o comportamento é tão estranho quanto o do Eclipse, o netbeans marca o arquivo com erro no código fonte e no package explorer, mas se mandar rodar a aplicação, funciona tranqüilo :D

Tags: , ,

27 Aug 07 DevMedia TechWeek – Algumas alterações de agenda para o próximo sábado :D

Como eu falei aqui, no próximo sábado (01/09/2007) eu estarei ministrando alguns mini cursos no DevMedia TechWeek.

Ocorreram algumas alterações na grade (que ainda não se refletiram no site), alem do mini curso sobre Java EE (JPA e EJB3 + JSF) vou apresentar também o mini curso: Desenvolvendo aplicações Web com o Spring Framework, pois pelo que me avisaram, parece que o palestraste teve alguns problemas de saúde ou algo parecido.

Então, para quem quiser levar um notebook para acompanhar os mini cursos, o ambiente que vou utilizar será o seguinte:

Para ambos os mini cursos: My SQL (Se preferirem uma GUI podem instalar também o MySQL Administrator e o MySQL Query Browser), todos podem ser encontrados em http://www.mysql.org

Não esqueçam de baixar o driver JDBC para o MySQL

glassfish.pngPara os mini cursos Java EE: NetBeans 6.0M10 + GlassFish (vocês podem baixar um bundle com a IDE e Servidor de aplicações aqui)

Para o mini curso de desenvolvimento Web com Spring Framework: um servidor Tomcat, ou até mesmo o próprio Glassfish se vocês já tiverem ele instalado e um Eclipse Europa instalado da seguinte forma:

classic2.jpgBaixe o Eclipse Classic da página do eclipse (ou deste post), que é o mesmo Eclipse SDK que ja estamos acostumados.

Descompacte ele e abra a IDE, depois disto clique em Help, Software Updates, Find And Install, New Features.

Marcar os update sites do Europa e Eclipse Project, alem de adicionar os seguintes update sites:

Subversive: http://www.polarion.org/projects/subversive/download/1.1/update-site/ (que como eu comentei aqui, esta migrando para um sub projeto do eclipse)
Spring IDE: http://springide.org/updatesite/
Mylyn Extras: http://download.eclipse.org/tools/mylyn/update/e3.3

E marcar as seguintes opções (agrupadas por update site):

  • Europa Update Site
    • MyLyn
    • Programing Languages
      • AspectJ Development Tools
      • Dynamic Languages – Ruby
    • Testing and Performance
    • Web And JEE Development
  • MyLyn Extrax
    • Integration
  • SpringIDE
    • Core
    • Integrations
  • Subversive
    • Team Providers
    • Client Libraries
  • The Eclipse Project Updates
    • Eclipse 3.3 Patches

Next, Next, Finish …

Se quiserem ja deixar o servidor que vão utilizar configurado fica mais fácil :D

Fiz este passo a passo pois eu não tinha o Eclipse instalado na minha maquina, pois formatei ela semana passada e só tinha re-instalado o IntelliJ IDEA e achei que os mini cursos seriam mais interessantes em IDEs open source que todos pudessem utilizar :D

PS.: sim, eu sei que eu ja tinha um passo a passo para configuração do Eclipse, mas como a cada 2 ou 3 meses eu mudo completamente quais os plugins que eu utilizo, achei que ter o mesmo ambiente iria facilitar a vida de quem quiser acompanhar o desenvolvimento das aplicações no próprio notebook :D

Tags: , , ,

25 Aug 07 O que você acha de gerar um executável da sua aplicação Ruby On Rails para fazer um demo ou apresentar para um cliente?

Como o título já diz: O que você acha de gerar um executável da sua aplicação Ruby On Rails para fazer um demo ou apresentar para um cliente?

Pois é, acabei de descobrir que isto é possível :D

Para isto vamos precisar das seguintes ferramentas:

  • Tar2RubyScript – é um utilitário que transforma uma estrutura de diretórios com uma aplicação Ruby em um único arquivo .rb
  • RubyScript2Exe – é um utilitário que cria um executável a partir de um script ruby, com a grande vantagem de ja ter todo o necessário para executar este script, ou seja já inclui o Interpretador do Ruby e todas as libs necessárias, o melhor é que ele filtra o que vai se incluido, não sendo necessário incluir toda a stdlib por exemplo.

Para instalar ambos, basta executar os comandos:

$sudo gem install tar2rubyscript
$sudo gem install rubyscript2exe

Para começar, vamos criar uma aplicação RoR, mas para poder carregar tudo junto com o executável, vamos utilizar o banco de dados SQLite.

Criando a aplicação

$rails demo
$cd demo
$ruby script/server

Acesse com o browser o endereço: http://localhost:3000/ para garantir que esta tudo OK.

Criando o banco de dados

$irb

irb(main):005:0> require 'sqlite3'
irb(main):006:0> SQLite3::Database.new("demo_dev.db").execute(
irb(main):007:1* "create table books (id integer primary key,   \
irb(main):008:1"                      title varchar(255),       \
irb(main):009:1"                       author varchar(255));")

E copiaremos o banco criado para as bases de produção e testes:

$cp demo_dev.db demo_test.db
$cp demo_dev.db demo_prod.db

Desenvolvendo a aplicação Rails

$vi config/database.yml

Substituimos o conteúdo com algo parecido com isto:

development:
  adapter: sqlite3
  database: demo_dev.db
test:
  adapter: sqlite3
  database: demo_tst.db

production:
  adapter: sqlite3
  database: demo_prd.db

Criamos o model e o controller:

$script/generate model Book
$script/generate controller Book
$vim app/controllers/book_controller.rb

E alteramos o código para algo parecido com isto:

class BookController < ApplicationController
scaffold :book
end
$script/server

Acesse com o browser o endereço http://localhost:3000/book para ver se esta tudo OK.

Criando o Ruby Archive

Agora a parte nova (fala sério, até o meu gato já sabe criar um CRUD com scaffold :D )

O comando Tar2RubyScript cria um pacote para a aplicação, mas quando executado, ele descompacta tudo em um diretório temporário e no final da execução ele limpa o diretório, o que não é exatamente o comportamento esperado, então vamos mover os dados para um local seguro antes da execução …

$vi config.environment.rb

E vamos adicionar o seguinte código no inicio do arquivo:

module Rails
  class Configuration
    def database_configuration
      conf = YAML::load(ERB.new(IO.read(database_configuration_file)).result)
      if defined?(TAR2RUBYSCRIPT)
        conf.each do |k, v|
          if v["adapter"] =~ /^sqlite3/
            v["database"] = oldlocation(v["database"]) if v.include?("database")
            v["dbfile"]   = oldlocation(v["dbfile"])   if v.include?("dbfile")
          end
        end
      end
      conf
    end
  end
end

Isto vai alterar a forma como o rails encontra o banco de dados, que originalmente estava definido assim:

module Rails
  class Configuration
    def database_configuration
      YAML::load(ERB.new(IO.read(database_configuration_file)).result)
    end
  end
end

O que exatamente foi feito? quando executado um RBA precisa tratar dois diretórios diferentes: o diretório onde aplicação esta sendo executada, e o diretório onde a aplicação esta realmente ( referenciado como oldlocation), o código apresentado altera as configurações do database.yml colocando o caminho completo para o banco de dados e não apenas o nome do arquivo como seria utilizado em uma aplicação normal.

O Tar2RubScript precisa também de um arquivo chamado init.rb que sera o ponto de partida da aplicação, vamos cria-lo com o seguinte conteúdo:

$vi init.rb

at_exit do
  require "irb"
  require "drb/acl"
  require "sqlite3"
end

load "script/server"

Os ‘require’ adicionados são para facilitar a detecção de quais bibliotecas o programa utiliza, ja que o Rails carrega algumas delas apenas durante a execução do sistema, assim o Tar2RubyScript vai poder incluir estas bibliotecas também no executável gerado.

Agora vamos finalmente empacotar a aplicação:

$cd ..
$tar2rubyscript demo
$cp demo/demo_* .

Prontinho, ja podemos testar o nosso Ruby Archive

$ruby demo.rb

Pode acessar novamente a aplicação pela URL: http://localhost:3000/book

Criando um executável para levar para o cliente

Criar o executável não é nada complicado, basta executar o comando:

$rubyscript2exe demo.rb

Depois que o rails inicializar, precione CTRL+C e sera criado um executável de nome demo.exe, ou demo_linux no linux que é o meu caso.

Basta copiar o executável e os arquivos de banco de dados para o

Conclusões

Não será necessário chegar no cliente e instalar Ruby, RubyGems, Rails, outros Gems, …

Apenas um executável e alguns arquivos de bancos de dados no seu pendrive e esta tudo pronto para o demo :D

O que você quer melhor que isto?
Na verdade a única coisa que faltou para mim, foi a possibilidade de no linux gerar um executável windows para facilitar os demos, mas mesmo assim, ja esta mais do que bom :D

PS.: tirei este passo a passo desta URL, eu fiz alguns ajustes no código e traduzi o texto, o maior ajuste foi a utilização de sqlite3 :D

Tags: ,

24 Aug 07 Rails Envy (Inveja do Rails) – Agora é a vez do .NET :D

O Jason Hawkins e o pessoal do Rails Envy acabaram de lançar mais um dos seus infames comerciais do Ruby On Rails, bastante inspirados (para não dizer quase plágio) nos comerciais da Apple, mas eles são criativos nas comparações :D
Eu ja havia postado alguns dos comerciais aqui onde eles comparavam Ruby On Rails com PHP e Java, mas desta vez o alvo é o .NET …
Deem uma olhada no video abaixo:

Prazer, eu sou Ruby On Rails. E eu sou .NET

E só pra continuar o papo descontraido :D
Outro video que eu peguei o link no RailsEnvy.com também, mas que não tem nada a ver com tecnologia:

A tartaruga assassina :D

Tags: ,

24 Aug 07 C# 3.0 é uma linguagem dinâmica! e o Java correndo atrás da máquina! será mesmo?

Segundo este post, o C# 3.0 agora é uma linguagem dinâmica! Por que eles dizem isto?

  • Possibilidade de executar um ‘Eval’, ou seja, construir um programa que escreve programas
  • Suporte a Lambda/Closures
  • Implicit typing (espero sinceramente que eles não tenhas simplesmente ressuscitado o tipo Variant que tornava as apps em VB uma carroça)
  • Continuations (similar ao yield do Rub, mas isto acho que ja existia em C# a bastante tempo)
  • Melhor introspecção

Bom, esta é a opinião do autor do post pelo menos, claro, o Java não tem nenhum destes recursos, mas faz algum tempo que ja temos muito mais do que isto com o Groovy por exemplo, e agora no JRuby para a JVM.

Não lembro onde li a algum tempo atrás, que precisamos parar de ver Java como uma linguagem, e começar a ver Java como uma Plataforma!

Ou seja, temos que começar a aproveitar mais os recursos ja existentes na plataforma Java, e usar muito mais, as linguagens dinâmicas que rodam sobre a JVM, algumas delas até compiladas para bytecode como o Groovy ja é hoje e o JRuby esta caminho de ser também (O JIT deles ja esta pronto, estão trabalhando no compilador)

Mas voltando ao assunto, neste caso acho pouco provável que a linguagem Java, implemente alterações parecidas com estas para o Java 7 ou Java 8, por tanto, a única coisa que tenho a dizer é: Viva o Groovy e o JRuby!

Ai alguem vai comentar que o chefe, gerente, dono, “tech lider”, dono da lojinha da esquina, padeiro, … não vão aceitar utilizar groovy de forma alguma em um projeto …

Bom, é fácil de ir mudando isto aos poucos :D

Uma dica, comece escrevendo os testes unitários em Groovy para mostrar a produtividade que isto pode trazer, e principalmente que ele pode acessar normalmente todo o teu ambiente Java já existente.

Depois desta produtividade e facilidade comprovadas, acho pouco provável que isto não comece a “permear” outras partes dos projetos :D

Não sabe como testar o seu código Java usando Groovy? O Developer Works da IBM tem um ótimo artigo sobre isto.

O único impedimento para isto, é o tipo de desenvolvedor acomodado que não tem vontade de aprender coisas novas (sinceramente, a única razão para alguem assim trabalhar com desenvolvimento é achar que vai ganhar dinheiro fazendo algo que não gosta) , então esta na hora de arregaçar as mangas e começar a aprender Ruby ou Groovy (recomendo começar com o Groovy :D ) e não ficar esperando que uma linguagem com estruturas antigas se torne tão produtiva como a última bolachinha do pacote do mes passado (RoR e Grails por exemplo :D )

PS.: tendo dito isto, acho que o pessoal do .NET deveria desencanar também e começar a aproveitar as linguagens realmente novas existentes para a plataforma .NET, como IronRuby e F# (Sim, eu sei que Ruby não é tão novo assim, mas tem um conceito muito mais novo do que o C++ melhorado que o Java e o C# se propõe a ser)

Tags: , ,