JavaMagazine: Java 8

No mês de outubro de 2013 saiu mais um artigo meu na JavaMagazine. Acredito que já seja o quinto ou sexto. O assunto da vez foram as novidades que a nova versão do Java 8 nos trará. O artigo é extenso, afinal de contas, é o artigo de capa da revista. Aliás, meu primeiro artigo de capa e tenho certeza que minha mãe está orgulhosa do filho que teve. hahaha! 🙂 Valeu a pena carregar um traste desse na barriga por 9 meses, hein?

A capa da revista está aqui do lado ó (<–) Indico comprar ela, afinal de contas, tem meu artigo oras pombas. Infelizmente, não posso fornecer o artigo, já que é um artigo para revistas e eles tem os direitos sobre ele. Mas a revista é baratinha, vai lá nas bancas e compra. Claro, se gostou, deixa um comentário. Precisa melhorar? Deixa um comentário também. Não gostou? Deixa um comentário também, só não me xinga todo!

Ah! A DevMedia também me enviou três unidades da revista. Já dei duas de presente. Sobrou uma. Quem quer? 😛

Como Fiz o EncomendaZ 3.0 – Parte 1

Antes de mais nada, quer tirar dúvidas sobre este post? Acompanhe-me no Twitter: @marlonscarvalho. Agora, vamos ao que interessa. O EncomendaZ foi um projeto que surgiu meio que do nada. A primeira versão eu fiz só para aprender um pouco sobre programação com Swing. Aliás, eu sou fanzarço de programação desktop e não curto muito “programação orientada a tags”. A primeira versão você encontra até hoje no Google Code, neste endereço: http://code.google.com/p/encomendaz/. Foi uma versão sem muitas pretensões, mas acredito que já aconteceu com você também: você faz um programa, algumas pessoas começam a usar e elogiar mas você acha que podia ter feito melhor. E foi assim comigo. Resolvi, então, fazer uma nova versão, só que desta vez bem melhor.

O sucesso da versão 2.0 me fez pensar na versão 3.0. Fui bastante relutante em lançar ela, pois daria um trabalho monstro fazer. Mas eu fiz. E, desta vez, a motivação foi aprender ainda mais a programar para desktop, desta vez usando frameworks diferentes e padrões de projeto bastante conhecidos. Eu já tinha vontade de descrever todo o processo de criação desta versão. Sei que muitas pessoas também curtem programação desktop, mas não sabem por onde começar. Aliás, ultimamente você só encontra referências para programação Web. Parece que tudo é Web hoje em dia e sistemas desktop morreram. Pra mim, pura balela.

Eu vejo mais um mundo onde serviços estão na internet e aplicativos, seja desktop, mobile ou web, os consome. Tem aplicativos que são muito mais fáceis de serem usados no Desktop. São mais práticos, elegantes, tem mais funcionalidades, são rápidos e podem funcionar offline. O que é errado é criar aplicativos desktop “autocontidos”. Ou seja, tem seu próprio banco de dados, não compartilha dados com outros aplicativos. Enfim, falo dos “aplicativos ilha”: vivem em seu próprio mundo e esquecem o resto. Mas, hoje, todo mundo só pensa em fazer aplicativo pra browser, como se fosse a bala de prata. Estão errados.

O meu objetivo é criar uma sequência de posts descrevendo todo o processo criativo que levou à concepção da versão 3.0, que você pode usar através do Webstart, clicando aqui. O código fonte do EncomendaZ 3.0 está disponível no Bitbucket e você pode baixar, usar, brincar… Espero que estes posts sejam úteis para você.

Código fonte da camada de apresentação: https://bitbucket.org/alienlabz/encomendaz-swing
Código fonte do core: https://bitbucket.org/alienlabz/encomendaz-core

Primeiro, vamos listar as tecnologias envolvidas. São muitas:

  1. Maven para gerenciar o projeto;
  2. Eclipse Indigo como ambiente de desenvolvimento;
  3. Java/Swing para a camada de apresentação;
  4. Framework Demoiselle;
  5. Hibernate para persistência;
  6. HSQLDB para armazenar os dados;
  7. Velocity para geração dos templates de e-mail;
  8. Jasypt para criptografia de senhas e etc;
  9. Apache Commons E-mail para o envio de e-mail;
  10. Barbecue para a geração do código de barras;
  11. JasperReports para a geração dos relatórios;
  12. Jide OSS para alguns componentes de tela;
  13. HTTPClient da Apache para conexão com a internet;
  14. Quartz para o agendamento de tarefas;
  15. MigLayout para a criação de formulários;
  16. SwingX para componentes de tela;
  17. L2FProd para ter o componente de barra de ações lateral;
  18. Insubstantial para os temas Swing;
  19. JCalendar para ter um calendário bonito no Swing;
  20. JBusyComponent para ter um “Loading” tipo o Ajax em Web;
  21. Zeus JSCL para ter um componente mais amigável para exibir erros;
  22. Java WebStart para publicação.

Vou tentar justificar o uso de cada uma destas tecnologias. Ou não. 🙂 São muitas e talvez eu não consiga chegar até o final. Vou começar justificando o uso do Framework Demoiselle. Você conhece? Não? Pois saiba que você deveria dar uma chance a ele. E não foi só porque eu participei da equipe que o criou, mas porque é um ótimo framework, de fato. O Demoiselle teve sua concepção inicial no Serpro, mas hoje já é usado por diversas empresas, incluindo aí outros órgãos governamentais, como: TRT, MPU, Prodeb, Fundação Luís Eduardo Magalhães e por aí vai.

E estas empresas não o estão usando por imposição. Ninguém é obrigado a usar o Demoiselle. Usam porque gostaram e tecnicamente é um ótimo framework. Quer entrar em contato com a equipe do Demoiselle? Primeiro, use a lista de discussão. Depois, acesse o fórum. E também tem os @zyc, @wegneto, @e_saito e @Atiboni no Twitter para vocês tirarem dúvidas. 🙂

E como foi que o Demoiselle facilitou no EncomendaZ? Simples:

  • Injeção de Dependência com Weld é o bicho! 🙂 Nada de criar exaustivas fábricas;
  • As classes de template para CRUD diminuíram consideravelmente a quantidade de código para escrever;
  • O POM (Maven) parent do Demoiselle para aplicações Desktop simplificou a criação do projeto;
  • O controle de transações é fácil e extensível. Não fosse por isso, eu não teria conseguido resolver alguns problemarços que apareceram!
  • O ResourceBundle próprio do Demoiselle, com substituição de palavras-chave é uma mão na roda;
  • Já fornece algumas validações comuns no Brasil através do componente demoiselle-validation.

Eu poderia citar outras, mas estas aí já são suficientes. O que posso dizer é que o Demoiselle está funcionando rock-solid no EncomendaZ 3.0 e nenhum erro reportado até hoje foi proveniente dele. Contudo, tive alguns probleminhas e vou citar eles em breve. No próximo post, vou descrever o principal padrão de projeto que usei: Passive View. É um ótimo padrão e, em conjunto com o Demoiselle, forma a base do aplicativo.

O Eclipse, o Maven e o Tomcat 7

Um post rápido para lhe ensinar uma gambiarra que pode lhe ajudar a poupar muito tempo de sua vida. Quando Maven não quer funcionar, só partindo pra gambiarra. Já aconteceu com você de criar um projeto Maven, colocar ele como packaging war, mandar atualizar as configurações do projeto pelo Maven, deixar tudo lindo mas o miserável não rodar dentro do Tomcat 7? Pois é. Pode acontecer com você. Aconteceu comigo.

Primeiro de tudo, não sei porque caceta o Maven não configura o projeto para ser “deployavel” no Tomcat 7. Você sequer consegue arrastar o projeto para o Servidor configurado. Ele não deixa por não reconhecer ele como um projeto Web. A primeira questão é que seu projeto não está multifacetado (facets). Aí você tem que fazer isso na mão. Vai nas propriedades do projeto, em Project Facets. Seleciona Dynamic Web Module e Java.

Feito isto, já dá merda. Ele cria uma pasta /WebContent fora da estrutura padrão do Maven. Deveria ser a pasta /src/main/webapp. Agora você precisa ir na pasta do seu projeto no seu workspace, abrir a pasta oculta chamada .settings e editar o arquivo org.eclipse.wst.common.component.

Deve ter uma linha escrito isso: <wb-resource deploy-path=”/” source-path=”/WebContent” tag=”defaultRootSource”/>. Tá errado. Mude pra <wb-resource deploy-path=”/” source-path=”/src/main/webapp” tag=”defaultRootSource”/>. Feito isto, continua sem funcionar. O motivo é que ele não faz o deploy das dependências do Maven dentro da pasta /WEB-INF/lib. Para consertar isso, vá nas propriedades do projeto. Opção Deployment Assembly. Clica em Add, depois em Java Build Path Entries e seleciona Maven Dependencies. Pronto, esta merda agora deve funcionar! 😛

Pense em um armengue. Acabei de lhe apresentar um! 🙂

EncomendaZ 3.0 MegaBeta

Ufa! Enfim, consegui uma versão “quase estável” do EncomendaZ 3. Iniciei ele em julho de 2011 e só agora tomei vergonha na cara para concluir o bicho de uma vez por todas. Toda noite eu tinha pesadelos por ter abandonado ele. Fora um monte de gente mandando sugestões de melhoria para a versão 2 e que eu já tinha implementado na versão 3. Mas, enfim, agora tenho algo para mostrar. Eis a versão MegaBeta 3.0. Está com pressa pra baixar logo? Vai até o final do post que o link está lá! 🙂

O MegaBeta é só para deixar bem claro que, com certeza, você vai encontrar alguns problemas. Principalmente, porque eu sei que existem esses problemas. Só falta eu corrigir eles. Mas, você também pode encontrar outros problemas, certo? Caso sim, passe para mim. Pode ser nos comentários aqui deste post. Pode ser me enviando um e-mail (marlon.carvalho@gmail.com). Ou pode ser no bugtracker do Bitbucket, caso você entenda do negócio. O endereço é este: https://bitbucket.org/alienlabz/encomendaz-swing/issues?status=new&status=open.

Esta nova versão está rodando através do Java Webstart e precisa da versão 6 do Java. Roda apenas nesta versão, infelizmente. Isto por causa do sacana do Weld, que é cheio de frescura com o JAWS. Fazer o que, né! No caso do MacOS, você deve selecionar a opção conforme a imagem abaixo.

Em seguida, ele vai começar a fazer o download e vai lhe perguntar se você permite a execução do aplicativo. Obviamente, diga que sim, hein. Feito isto, daqui em diante, você vai sempre executar o aplicativo a partir do arquivo encomendaz.jnlp! Qual a vantagem disto? Não seria melhor distribuir a versão em um ZIP? Não. O JAWS não faz o download do aplicativo toda hora. Ele faz um cache local e só verifica se há versões novas no servidor. Caso haja, ele baixa somente esta parte que foi atualizada. Não é necessário ter instalador também e o aplicativo roda em uma sandbox que não lhe permite fazer miséria na sua máquina. Ah sim, a imagem aí embaixo mostra o download da aplicação.

Essa aí embaixo é para você clicar no Permitir! Fique tranquilo, o aplicativo é só para rastrear encomendas mesmo. 🙂

Agora, vamos para as imagens do aplicativo. Digaí se não ficou lindão, hein hein? Até eu me emocionei. Pode chorar.

Baixar a Versão

Ahaaaaaaa! Pensou que eu tinha esquecido do link para o download? Óbvio que não! O link pro JNLP é esse aqui: http://www.alienlabz.com/encomendaz/jnlp/encomendaz.jnlp. Pronto, agora é a sua vez de me ajudar! Dá essa força aí, não custa nada. Pelo menos, até agora, não. Aqui vai ume penca de código de rastreamento para vocês testarem:
PG000702074BR, CW180801270US, SE987654321BR, RA169391799CN, PG035883496BR, RB414391713HK, EI089772025US, RE909064538SE, SI001690372BR, RE605739191BR, RE605739188BR, RE605739174BR, RE605739165BR, RE605739205BR.

Alfred 1.1.0

Uma rápida chamada aqui no blog para a disponibilização da versão 1.1.0 da biblioteca Alfred! Acessem o site do Alfred para mais novidades. É só isso! 😛 Aliás, vou aproveitar então para dar uma puxada na orelha dos que usam o Alfred mas não dão feedback! Vamos lá galera, se gostam e usam, retornem pra gente. Mandem mensagens, e-mails, postem no blog e coisas do tipo. Vamos lá! Quanto mais gente contribuindo, mais vamos pra frente!

JSR 303 e Meu Primeiro Vídeo

Opa! Agora entrei de verdade na Nova Era! Gravei meu primeiro vídeo para publicar no YouTube. Já fazia um tempo que eu queria fazer essa brincadeira. Acho vídeos uma forma divertida e bem prática de ensinar algo de forma simples e direta. Normalmente, acho estes vídeos legais para demonstrar coisas simples. Vídeos muito longos normalmente são chatos de assistir.

Perdi minha virgindade em vídeos apresentando como você pode criar sua própria validação usando a JSR303. Para os curiosos e invejosos que desejam fazer a mesma coisa, então eu usei o Screenium para capturar a tela e o próprio iMovie para editá-lo. Sim, exatamente. Uso Mac, viu? Opções para fazer a mesma coisa com Windows ou Linux? Nem imagino! 🙂

Deixe suas críticas e sugestões! Comentem aqui ou lá no YouTube! Valeu!

Rastreador de Encomendas (EncomendaZ)

Quinta-feira de folga. Sexta também não fui trabalhar. Noite em branco com dor de barriga. Durante a quinta, nada de cerveja ou comidas exóticas. Sem vontade de ler livros. Resolvi: vou fazer alguma coisa em Swing/Java para aprender alguma coisa desse troço. E fiz. Precisei de algumas horas de Copy+Paste de códigos na Internet, um pouquinho de ajuda do Alfred e tcham tcham tcham…

Senhores, apresento-lhes o EncomendaZ. Um aplicativo que se conecta ao sítio dos Correios e acompanha o andamento de suas encomendas. É programa para paranóico que vive comprando coisas no Mercado Livre e tem tanto código de rastreamento para acompanhar que se perde. Pronto, agora você cadastra tudo lá no EncomendaZ que ele gerencia.

Tem utilidade? Sei lá, deve ter. E lembra o que eu já disse? Eu gosto de fazer coisas inúteis também. Só pra aprender alguma coisa mesmo. E, obviamente, depois eu disponibilizo o código fonte da brincadeira pra todo mundo ver. E o deste programa está logo aqui: http://encomendaz.googlecode.com/.

Veja uma tela do programa logo abaixo. Repare no Look and Feel do Nimbus. Achei estilo e botei como padrão. Agora a parte engraçada? Ah, para ver vai ter que baixar o programa e olhar na aba de Doações! 🙂

Quer baixar? Clique aqui. Achou um bug? Cadastre um Issue clicando aqui. Gostou? Deixe um comentário me elogiando, meu ego agradece! 🙂 Não gostou? Então, deixe um comentário e diga o que pode ser feito para melhorar!

AuctionX – Informações do Mercado Livre

Fale sério pra mim! Você já fez um sistema, biblioteca, ou algo que o valha, que não tem a mínima ideia se é útil? 🙂 Estou neste dilema. Na falta do que fazer numa noite dessas, resolvi brincar com o Mercado Livre, Java, XML e Maven.

E no que deu isso? Nasceu o AuctionX. Uma biblioteca pra você fazer consultas aos produtos vendidos no Mercado Livre. E aí? Tem utilidade isso? Sei lá, oras! Só sei que eu fiz e tá legal.

Pra usar é bem simples. A API eu fiz com o Hibernate em mente, logo, você verá algumas semelhanças com a classe Criteria deles. Vamos começar com os exemplos. Você quer pesquisar “iphones” vendidos apenas por vendedores certificados (Gold, Platinum):

	Search search = AuctionXService.createSearch("ML");
	Collection<Auction> auctions = search
				.addRestriction(Restriction.onlyCertifiedSellers())
				.search("iphone");

Certo. Legal. Agora você quer pesquisar por “iphones” que não estão em leilão, mas em venda direta. E também que os vendedores sejam da Bahia e mais, que os produtos sejam apenas novos!

	Search search = AuctionXService.createSearch("ML");
	Collection<Auction> auctions = search
			.addRestriction(Restriction.onlyCertifiedSellers())
			.addRestriction(Restriction.buyNow())
			.addRestriction(Restriction.location("BAHIA"))
			.addRestriction(Restriction.onlyNewProducts())
			.search("iphone");

Onde está o projeto? No lugar de sempre: Google Code! http://code.google.com/p/auctionx/. Tá completo? Não. Ainda falta implementar a ordenação do resultado. Mas vai ser rapidinho! 🙂 Vá lá, tou só esperando você me chamar de maluco e coisa de quem não tem o que fazer.

Vaadin

Você já ouviu falar do Vaadin? Ainda não? É um framework muito legal. Ele usa o GWT para construir sua interface, mas trabalha de uma forma um pouco diferenciada. Quer saber mais detalhes? Então acesse o blog do JavaBahia que tem o primeiro artigo que lançarei por lá. É o primeiro, bem introdutório, mas já serve para apresentar um pouco a ideia.
É isso. Ah, claro. Faltou o link!

http://javabahia.blogspot.com/
http://javabahia.blogspot.com/2010/03/vaadin-parte-1.html

Abraços e espero que gostem.