Alex Florentino

KISS - Keep It Simple, Stupid
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.

March 3rd, 2008

Rápida Introdução a XMLBEANS

XMLBeans é uma ótima ferramenta para quem precisa trabalhar com XML, por exemplo, fazer uma integração entre dois sistemas utitlizando troca de arquivos em formato xml , para entender como essa ferramenta funciona é necessário ter algum conhecimento sobre XML Schema.

O que é XML Schema ? resumidamente esta ferramenta foi projetada para substituir as DTD , ou seja, é forma de definir e validar um documento XML.

Aqui um ótimo tutorial sobre XML Schema, neste tutorial iremos trabalhar com XML BEANS.

O que vamos fazer : Nosso sistema de comércio online deverá permitir o envio de pedido em formato XML este arquivo recebido deverá ser transformado em java bean com os seus respectivos dados.

Existem várias formas de se fazer essa tarefa mas com certeza usar xmlbeans é realmente uma forma elegante de resolver o problema.

A Seguir um passo a passo , antes de prosseguir é necessário instalar xml beans, instruções aqui.

Nosso arquivo que representa um novo pedido:

Pedido.xml


<?xml version="1.0">
<Pedido cliente_id="1">
<Item produto_id="10" quantidade="10" />
<Item produto_id="10" quantidade="10" />
</Pedido>

Nosso pequeno arquivo xsd(XML Schema):

Pedido.xsd


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pedido="http://www.alexflorentino.com/pedido"
targetNamespace="http://www.alexflorentino.com/pedido"
elementFormDefault="qualified">

<xs:element name="Pedido">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" type="pedido:Item" />
</xs:sequence>
<xs:attribute name="client_id" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>

<xs:complexType name="Item">
<xs:attribute name="produto_id" type="xs:int" use="required"/>
<xs:attribute name="quantidade" type="xs:int" use="required"/>
</xs:complexType>

</xs:schema>

Este arquivo resumidamente descreve como um arquivo de pedido deve ser formatado.

Agora precisamos inserir em nosso arquivo de pedido uma referência ao nosso Arquivo XSD.

Pedido.xml


<?xml version="1.0" encoding="UTF-8"?>
<Pedido cliente_id="1"  xmlns="http://www.alexflorentino.com/pedido"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="pedido.xsd">

<Item produto_id="10" quantidade="10" />

<Item produto_id="10" quantidade="10" />

</Pedido>

Pronto! com esses artefatos criados precisamos agora rodar um comando mágico, no diretório onde você criou os arquivos pedido.xml e pedido.xsd, execute:

scomp -out pedido.jar pedido.xsd

lembre-se para este comando funcionar você precisa ter xml beans devidamente instalado.

Basicamente este comando irá criar um monte de código para você, código que trata todo o trabalho que você poderia ter ao trabalhar com arquivo xml em java.
Para isso basta inserir o arquivo pedido.jar(gerado com o comando anterior) na sua aplicação junto com as bibliotecas do xml beans.

exemplo o trecho de código abaixo ilustra o processamento do arquivo de pedido.


PedidoDocument pedidoDoc = PedidoDocument.Factory.parse(new File("pedido.xml"));

Pedido pedido = pedidoDoc.getPedido();

System.out.println("Client_id:"+pedido.getClientId());
System.out.println("XMLLIDO \n:"+pedidoDoc.toString());

repare neste código você acabou de ler o arquivo pedido.xml diretamente para o seu objeto java Pedido, sem qualquer preocupação com detalhes de leitura do arquivo xml.

Para finalizar, xmlbeans é uma ferramenta poderoza para o trabalho com arquivo xml quando você já tem xsd já definidos, um exemplo real : você quer integrar com sistema .Net e certamente o dono do sistema em .Net tem os arquivos xsd e lhe fornecerá com isso o tempo de integração cai drasticamente, né ?.

O XML Beans também evita a famosa programação orienta a String :) já que você não precisa ficar lendo este arquivo xml, dentre muitas outras vantagens.
Baixe aqui os arquivos deste tutorial.

February 28th, 2008

Novo Formatador de código

Finalmente consegui encontrar um plugin para formatar os códigos fontes apresentados neste blog.


public class TestPlugin {

public static void main(String args[]) {

System.out.println("teste");

}

}

com isso irei aumentar a frequência de posts apresentados aqui.

February 21st, 2008

Aplicação simples com Ruby On Rails - Usando Scaffold

No Mundo Ruby On Rails, existe uma ferramenta Chamada Scaffold que tem como objetivo basicamente geração de um esqueleto para a nossa aplicação. Com esta ferramenta podemos começar o nosso projeto com bastante código gerado automaticamente.vamos a um passo-a-passo.

1. Baixe e instale o Ruby

2. Instale o MySQL acessando o link

3. Instalar o framework rails

gem install rails –include-dependencies

4. Crie uma nova aplicação rails blog -d mysql

5. Configure usuario e senha de acesso ao banco de dados para isso edite o arquivo config/database.yml e atualize o username e password

6. Cria o database

rake db:create

7. Gerar um scaffold

ruby script/generate scaffold blog titulo:string autor:string conteudo:text

8. Gera as tabelas rake db:migrate

9. Inicie o Servidor ruby script/server
acesse http://localhost:3000/blogs

Se tudo ocorreu bem é para ver um site com um cadastro totalmente funcional rodando.

Viva ao Ruby.

February 3rd, 2008

Gestão ágil de projetos - Scrum

Cada vez mais gestão ágil de projetos ganha destaque na comunidade de software brasileira, encontrei uma ótima fonte sobre o assunto em português, gratuita e com qualidade.

A dica é o site Treina Tom que disponibiliza de forma gratuita varios videos sobre o tema.

Gestão Ágil de projetos tema já bastante conhecido e debatido no resto do mundo, e nos últimos anos ganhou bastante força no brasil, com o lançamento de varios treinamentos sobre o tema.

A palavra chave sobre Gestão Ágil no momento é SCRUM, parece que este framework de gestão de projetos ágeis esta invadindo os blogs(e empresas) no Brasil o Paulo Pereira disponibilizou um material excelente sobre o Scrum , realmente vale a pena conferir! , com certeza esta palestra ira lhe inserir neste tema assim como fez comigo, por isso agradeço o Paulo pelo excelente trabalho.

No Brasil o Scrum vem sendo adotado no desenvolvimento do globo.com e segundo relatos obtendo bastante sucesso, aqui tem um pequeno resumo do que é Scrum.
Estes frameworks de Gestão ágil de projeto se fundamental basicamente no
manifesto ágil, que com certeza todo programador deveria conhecer.

January 19th, 2008

Automatize

Como desenvolvedor de software já algum tempo, sempre notei que algumas tarefas se repetem independente do projeto e muitas vezes independente da própria linguagem. Quais são essas tarefas ? são varias, por exemplo publicação de um site que em geral envolve enviar arquivos por FTP, backup de banco de dados, gerar um arquivo .zip eu poderia citar varias outras tarefas.

Esses tarefas em geral tem em comum que não geram valor para o cliente, explicando, essas tarefas não adicionam features ou corrigem bugs para o cliente, essas tarefas são mais “administrativas”, entretanto o fato delas não adicionarem valor direto no produto, isso não significa que elas não sejam importantes pelo contrario muitas vezes essas tarefas definem o bom andamento do projeto.

O legal que essas tarefas podem ser automatizadas , existem varios caminhos de automatiza-las. Independente da maneira de automatização sempre deve ser levado em consideração que essa “automatização” tende a crescer com o tempo, então deve ser escolhido o processo simples e de facil manutenção, é aqui que eu apresento o ANT que é uma ferramenta excelente para a automatização dessas tarefas.

Ant tem minha preferência sobre scripts criados na mão(os famosos .bat e shell scripts), pois o ant é baseado em tags xml(bem semelhante a html) o que o torna elegante e simples.

ficou curioso ? encontre mais sobre o ant.

January 1st, 2008

Feliz Ano Novo

Espero que em 2008, eu consiga postar mais e melhor.

Apples and Ideas

“If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have one idea and we exchange these ideas, then each of us will have two ideas.”

George Bernard Shaw

fonte:

http://www.aprendendoingles.com.br/shtml/2007365.shtml

November 13th, 2007

Android - Google, Linux, Java e outros

O Google junto com um variado e respeitável grupo de grandes empresas lançaram na última segunda-feira o Android que é uma plataforma aberta para o desenvolvimento de aplicativos móveis.

Detalhe, essa plataforma é baseada em Linux Kernel e Java(misto Java SE e outras bibliotecas como HttpClient, etc.).

Na verdade o Android inclui o Android SDK que é uma caixa de ferramenta para desenvolver aplicativos para rodar na plataforma, que é java, inclusive com um plugin para o Eclipse.

O impressionante Desta iniciativa é quantidade de participantes de peso enquanto o J2ME(CLDC) da Sun evolui a passos de tartaruga ;)

Visite o hello world Android! para testar e aproveite deixe seus comentários!