Alex Florentino

KISS - Keep It Simple, Stupid
September 15th, 2008

Google Android

O Brasileiro  Augusto Ferrarin é premiado por desenvolver aplicação para o ANDROID a aplicação é TerraDesk , o tick tack fez uma entrevista com o Augusto, muito bacana.

O legal deste prêmio é o nome do Brasil aparecendo nas competições internacionais. Também pelo volume do prêmio mostra que o Google Android quer chegar para abalar o mercado mobile.

Android resumidamente é plataforma movel aberta encabeçada pelo google baseada em java. Essa última parte (java) me interessa muito ! isso invariavelmente irá criar novas oportunidades para os desenvolvedores java, ou melhor já esta criando, é melhor como desenvolvedor java acompanhar esta tecnologia.

September 12th, 2008

Java Annotations - bom ou ruim ?

Você gosta das anotações java ? bom primeiro o que é (anotações)annotations ? anotações são o que eles chamam de metaprogramação, você usa anotações para avisar para o compilador(compile time annotations) ou para JVM (runtime annotations) como sua aplicação deve se comportar.

Anotações vem sendo usada de maneira pesada por conhecidas bibliotecas do mundo java tais como hibernate, web frameworks, etc.

Mais segundo consta no java 7 e também o java EE 6 isso vai mudar, pois nessas versões o java virá de fabrica repleto de anotações que visa desta forma tornar mais facil o desenvolvimento EE nos livrando dos já odiados xmls.

um exmplo de um código anotado :


@Id
@Basic(optional = false)
@Column(name = "id")
private Integer id;

três linhas de meta código para 1 linha de código.

isso é o efeito colateral das annotations, ou seja, uma certa poluição do seu código fonte, mais isso me parece um bom preço a se pagar para se livrar dos xmls.

um preview das novas annotations.

September 6th, 2008

O google ataca novamente

Novamente o google, estava eu inocentemente navegando, lendo meus blogs preferidos quando me deparo com essa intrigante noticia, o google esta lançando mais um produto, pensei qual seria a novidade desta vez ? pois sempre que o google lança um produto eu fico com aquela sensação “por que não pensei nisso antes?”, entretanto este produto não chega a ser uma “novidade” pelo contrario ele nasceu com a web, então que produto é ? sim, isso mesmo um web browser e como de costume, para o google, “menos é mais” umas das principais caracteristica do navegador é a simplicidade, bom se ainda não é suficiente o pessoal do google criaram uma pagina para explicar o porque desta novidade.

enjoy!

August 4th, 2008

Lista Arquivos grandes

Comando util para achar arquivos “gigantes” (logs,backups velhos etc…) em seu sistema de arquivo :

find / -type f -size +20000k -exec ls -lh {} \; | awk ‘{ print $8 “: ” $5 }’

fonte: http://snippets.dzone.com/posts/show/1491

July 28th, 2008

SSH sem senha

Para habilitar o acesso SSH sem senha, muito util para criação de scripts que precisam acessar outras maquinas é muito simples.

basta criar uma chave publica no seu servidor:

1. ssh-keygen -t rsa
2. copiar o arquivo <HOME>/.ssh/id_rsa.pub para a maquina(você pode concatenar no final deste arquivo se ele já existir)  que você deseja acessar sem usuario e senha: <HOME>/.ssh/authorized_keys.

pronto com isso já esta feito ! em resumo você cria uma chave publica na sua maquina cliente e adiciona essa chave no authorized_keys do seu servidor.

July 20th, 2008

Ainda JBoss Seam

Uma curiosidade é  http://docs.jboss.com/seam/2.0.1.GA/reference/en/html/gettingstarted.html que é esse tal de seam-gen é basicamente uma cópia do generate do Ruby On Rails, até ae tudo bem mas reparem no trecho:

“But if you really want a fast edit/compile/test cycle, Seam supports incremental redeployment of JavaBean components. To make use of this functionality, you must deploy the JavaBean components into the WEB-INF/dev directory, so that they will be loaded by a special Seam classloader, instead of by the WAR or EAR classloader.”

e logo depois :

“ou need to be aware of the following limitations:

  • the components must be JavaBean components, they cannot be EJB3 beans (we are working on fixing this limitation)
  • entities can never be hot-deloyed
  • components deployed via components.xml may not be hot-deployed
  • the hot-deployable components will not be visible to any classes deployed outside of WEB-INF/dev
  • Seam debug mode must be enabled and jboss-seam-debug.jar must be in WEB-INF/lib
  • You must have the Seam filter installed in web.xml”

então em resumo este tal de ” fast edit/compile/test cycle” não existe com essas limitações… O mais engraçado é o “But if you really want” , se eu quero(preciso) ? não, eu não quero não… eu gosto de ficar reiniciando o tomcat…é divertido… perder o maior tempo e depois descobrir que o tomcat não fez o deployment da sua ultima alteração na sua classe, super legal.

July 20th, 2008

JBoss Seam - Frustação

Depois de muito ouvir falar desse tal de JBoss seam , hoje resolvi testar ele, fazer algum exemplo realmente facil para ver como ele funciona. Para isso fui até site do framework e baixei a versão [jboss-seam-2.0.3.CR1] eu já tinha baixado o JBoss [jboss-5.0.0.Beta4], com isso eu esperava ter tudo para rodar o tal JBoss Seam engano meu logo no começo para rodar o JBoss tive um problema, bem estranho, mais googlando “resolvi” tinha alguma coisa haver com java jdk 6, tudo bem adicionei um novo parametro para JVM e ok agora já era possível rodar o JBoss, claro para fazer isso la se foram uma 1 hora.

Depois disso já confiante que iria ver o JBoss Seam rodando na minha maquina, entrei no diretorio de exemplos do framework e depois de alguns minutos e um monte de build.xmls e build.properties eu era capaz de fazer o build das aplicações de exemplos no diretorio correto do JBoss.

E para ter “alguma base” abri o tutorial do Seam que começa pela aplicação “registration” depois de executar “ant” no diretório do exemplo, mais uma decepção :

*** CONTEXTS IN ERROR: Name -> Error
vfsfile:/C:/jboss-5.0.0.Beta4/server/default/deploy/jboss-seam-registration.ear
-> java.lang.RuntimeException: mapped-name is required for timerService of deplo
yment TimerServiceDispatcher

Novamente de volta ao google e desta vez sem muita sorte, depois de pelo menos uma hora, descobri que esse erro é realmente um bug, e que teria que baixar o JBoss com o release que corrigia este bug….

Em casa conexão discada… sem chance de baixar JBoss… então baixei esse tal de JBoss embebed [jboss-embedded-beta3-SNAPSHOT-bin] e mais uma vez depois de uma hora brigando com o bicho, devido a problemas de configurações especificos da minha maquina, “até que funcionou” consegui rodar alguns exemplos do JBoss Seam e já outros não funcionaram, por exemplo [registration]…

em resumo pretendia estudar o framework mais gastei quase todo tempo em problemas de configurações, talvez eu tenha escolhido errado as versões, pois quase todas elas era CR,BETA então vou tentar novamente mais somente com versões “estaveis” dos frameworks.

Mais de primeira o que notei no framework é a volta do EJB estilo “bem pesado”,”para rodar em servidor de aplicação” muito criticados em sua versão EJB 2.*.

Sobre o JBoss Seam a idéia do framework é Usar EntityBean(JPA e Hibernate) e um tal de Stateless Session Bean como a classe de ação.

bom lendo o tutorial percebe-se tem annotations para todo lado e alguns xmls(web.xml,persistence.xml,faces-config.xml,ejb-jar.xml).

A Java magazine deste mês fala deste framework, e pela matéria parece ser o framework “produtivo”, mais será mesmo ?

Outra critica é que JBoss Seam como próprio nome diz é “JBoss” teoricamente tem suporte para outros AS, mais sabe como é né ? “na pratica a teoria é outra…”.

bom vamos ver se na próxima tentativa eu tenha mais sorte.

May 13th, 2008

Downaload Tech Days Hands-on Labs 2008

Alguns Tech Days Hands-on Labs 2008 podem ser encontradas aqui

May 10th, 2008

Ruby On Rails – Counter cache

Uma feature muito interessante no Ruby On Rails é a “counter_cache” , mais o que seria counter cache ? vou explicar através de um exemplo , supomos que você esteja desenvolvendo um site de contatos, suponhamos que você queira mostrar a quantidade de contatos por tipos algo no estilo da listagem abaixo:

 

Categoria Quantidade
Familia 10
Profissional 15

na maneira “tradicional” , essa listagem sempre acarretaria em varios “selects”, ou seja, um select seleciona todos os tipos de contatos e um select para totalizar cada tipo, imagine, seu sistema tem 1.000,000 tipos de contato você teria 1.000,000 selects + 1.

O ruby counter cache minimiza este problema, pois ele cria uma nova coluna na tabela categoria com a quantidade correta de contatos.

Então vamos ao código.

 

  1. Criar o projeto rails

     rails contato 	--database=mysql
    
  2. Configuração

     edite seu 	config/database.yml e altere os dados do seu  banco de dados mysql
    
  3. Criar a base de dados

     rake  db:create
    
  4. Deixar o ruby criar algum código

    
    ruby 	script/generate scaffold Categoria nome:string
    
    
    ruby 	script/generate scafffold Contato nome:string email:string 	fone:string categoria_id:integer
    
  5. Vamos criar as tabelas

     rake db:migrate
    
  6. agora vamos setar nosso relacionamentos no model
    edite o app/models/categoria.rb que deve ficar como :

    
    class Categoria < ActiveRecord::Base
    has_many :contato
    end
    

    edite o app/models/contato.rb qude deve ficar como:

    
    class Contato < ActiveRecord::Base
    belongs_to :categoria
    end
    

    agora você já pode iniciar o servidor ruby script/server e acessar http://localhost:3000/categorias.

  7. vamos editar a view index da categoria e adicionar a quantidade de contatos:

    ...<table>
    <tr>
    <th>Nome</th>
    <th>Quantidade</th>
    </tr>
    
    <% for categoria in @categorias %>
    <tr>
    <td><%=h categoria.nome %></td>
    <td><%=h categoria.contato.length %></td>...
    
  8. agora vamos fazer a magica acontecer, vamos primeiro adicionar a coluna magica no seu modelo categoria

     ruby script/server migration 	add_categoria_count_cache
    

    edite esse novo arquivo:

    
    class AddCategoriaCountCache < ActiveRecord::Migration
    def self.up
    add_column :categorias,:contatos_count,:integer,:default => 0
    end
    
    def self.down
    end
    end
    

    logo após isso rode rake novamente,da pasta raiz do seu projeto:

    
    rake db:migrate
    
  9. Agora vamos atualizar o Contato para sempre atualizar o count_cache, para isso basta editar o app/models/contato.rb

    
    class Contato < ActiveRecord::Base
    belongs_to :categoria, :counter_cache => true
    end
    

Pronto se tudo correu bem é para o counter cache estar habilitado, para testar basta acessar ruby script/console cadastrar algumas categorias e popular alguns contatos para essas categorias e verificar o resultado no browser.

aqui um outro ótimo exemplo.

divirta-se!

 

March 24th, 2008

Controle Financeiro Open Source

Meu amigo Tiago Dornelas e Talita Pagani estão com um super projeto de controle financeiro open source e resumidamente eu vi o que eles já produziram e fiquei super empolgado, afinal eu mesmo já tentei iniciar um projeto neste domínio e não tive sucesso.

Eles estão trabalhando com o PHP neste projeto, nada contra o PHP, mais acredito que esta seria uma ótima oportunidade para aplicar o Ruby On Rails e ganhar experiência nesta proeminente plataforma.

Então implementarei uma versão do projeto em Ruby, a ideia é ter a mesmas funcionalidades, layout e banco de dados, mais em Ruby On Rails.

então em breve publicarei mais sobre isso.