logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Set 27

Agilizando seus testes

Escrito por Daniel Lopes em 1, 4, 6, api, app, apple, AR, Arquitetura, arte, auto, Banco de Dados, BI, blog, bug, cache, cifras, class, cliente, código, comunidade, Curso, Cursos, dados, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, Design, Dica, err, Excel, exemplo, Ferramenta, for, game, git, helpers, ide, IE, if, int, LOB, Mac, mg, moip, NaN, O, on, Otimização, Outros, padrão, pagamento, Partilha, Plugin, problema, processo, pt, rails, RIA, Ria’s Geral, ruby, Ruby e Rails, Saas, Segurança, serviço, tag, Tema, Teste, Testes Automatizados, Twitter, UI, uint, validação, Vários, Ved, web, XP, zend @ 09 27th, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Neste post vou compartilhar um pouco dos meus experimentos para tornar o suite de testes do Cifras mais rápido.

No atual estado do serviço eu tenho por volta de 800 testes automatizados usando Rspec 1.3 e Rails 2.3.9.

Estes testes cobrem o sistema praticamente todo e a são única forma ter a confiança necessária para trabalhar em novo recursos, correções de bugs e etc.

Este número de tests tem crescido consideravelmente desde que comecei a utilizar o Steak para testes de aceitação. Testes de aceitação possuem um papel muito importante em certificar que a funcionalidade é aceitável para o cliente em faz os testes em estado mais macro. Desta forma tenho coberto o sistema praticamente todo usando o Steak nas últimas semanas.

No entanto eu me vi em uma situação que já era perceptível mas começou a se tornar insuportável. Meu suite de testes (ainda com 800) estava demorando por volta de 4.5 minutos para ser executado. O mais estranho é que 800 testes é muito pouco para poder demorar tanto.

Arquitetura de um Saas

Cifras é um Saas que envolve pagamentos e múltiplos usuários dentro de um conta. Eu já trabalhei em vários outros Saas’s e todos que envolvem algum tipo de assinatura e vários usuários acabam tendo uma arquitetura muito parecida nos models.

Normalmente você possui os seguintes models: conta, usuário, assinatura, plano de uso, preferências e o uma associação para proprietário da conta. Além destes 5 models também existe um processo que insere alguns dados iniciais como categorias assim que uma conta é criada.

Fica claro que qualquer signup vai disparar uma criação em cadeia de uma conta com uma assinatura que possui um propietário (que é um usuário) e depois preencher as categorias e etc. Este processamento é bem rápido mas multiplicado por 800 (ou mais) acaba sendo um problema.

Eu não quero reduzir o número de models reunindo tudo no model de conta pois acredito que seria uma arquitetura bagunçada além de uma alteração que envolva tanto o banco de dados ser extremamente perigosa.

Eu não queria tocar em nada do código da aplicação apenas para fazer os testes se tornarem mais rápidos. Do contrário acredito que estaria ocorrendo um inversão das responsabilidades, fazendo os testes guiarem o desenvolvimento mais de uma forma errada.

1º passo: Logger

Comecei o trabalho de otimização analisando o log de test. Para ter certeza de onde cada query vinha e o tempo gasto, adicionei um plugin chamado query_trace.

É um plugin bastante antigo mas ainda funciona muito bem. Assim que instalei, fiz algumas anotações de todas as queries que ocorriam com frequência em meus tests e de onde elas vinham.

Mas o mais interessante que ao instalar o plugin a performance dos meus testes caiu drasticamente. A única razão para isto é que o plugin escrevia toneladas de textos no meu log, ou seja, operações que envolvem muito IO.

O que fiz foi anotar as coisas que me interessavam e remover o plugin, no entanto uma otimização que já poderia ser feita é alterar a estratégia de log do ambiente de tests para :info ao invés do padrão.

Apenas esta alteração tornou meu suite de testes quase 50 segundos mais rápido.

No arquivo config/environment/test.rb:

1
    config.log_level = :info

2º passo: Evitando consultas

Analisando o resultado do query_trace não havia nenhuma consulta extremamente lenta que ocorresse com frequência. Como eu já utilizava bibliotecas como SlimScrooge, Oink e NewRelic eu já tinha encontrado estas queries e resolvido a mais tempo.

No entanto, uma coisa que muitas vezes não nos lembramos é que qualquer validação de unicidade e associação do Rails vai disparar um consulta. Sim, uma micro consulta que normalmente gasta 0.3 ms e não incomoda em nada em ambiente de produção. Mas nos tests isso pode significar muito.

Como eu utilizava apenas factories (com FactoryGirl) cada spec acabava precisando de um before ou um let do Rspec que fazia uma chamada a Factory account que consequentemente criava todas outras factories associadas e ainda executava as validações.

As criações associadas não me incomodavam ainda pois eu estava atacando apenas as validações. A melhor alternativa que encontrei para remover os 0.3ms de cada validação foi usar fixtures.

Fixtures são carregadas apenas uma vez e não passam pelas validação, então em todos os momentos que eu precisava dos dados base como conta e usuário para fazer os outros testes eu passei a usar fixtures.

Por exemplo, nos testes de categorias eu precisava criar uma conta antes para associar uma categoria a ela. Este processo rodava em um before o que tornava os testes bem mais lentos, a partir de agora tudo é previamente carregado por fixtures.

No final, terminei com uma fixture para cada model base e criei helpers para o Rspec. Algo assim:

1
2
3
4
5
6
7
8
9
10
11
    def account
      accounts(:apple)
    end

    def subscription
      subscriptions(:apple)
    end

    def user
      users(:sjobs)
    end

E meus specs passaram a ficar assim:

1
2
3
    let :bank_account do
      Factory :bank_account, :account => account
    end

A desvantagem é que novos desenvolvedores terão que entender que o account é um helper já que ele é incluído pelo spec_helper.

Outra coisa que fiz foi incluir as fixtures base como globais para evitar ter que carrega-las manualmente nos specs.

1
2
    Spec::Runner.configure do |config|
      config.global_fixtures = :users, :plans, :accounts, :settings ...

Em vários casos o uso de fixtures para a base do sistema eu tive ganhos de mais de 100% em velocidade. Então a partir disso toda a base do sistema (5 models) utilizam fixtures nos models associados e factories em seus próprios models.

Por exemplo, no model User eu faço os specs usando a Factory user mas a sua conta é trazida de uma fixture e vice versa com os outros models base. No caso de Transações eu carrego usuário, conta, plano, assinatura e preferência através das fixtures enquanto as transações são criadas com factories.

3º passo: Evitando chamadas remótas

Uma coisa irritante da comunidade Rails são as modinhas. Por um lado é bom, pois as coisas se atualizam MUITO rápido por outro lado fixtures se tornaram diabólicas de um dia para o outro, também ocorreu com attachment_fu por exemplo e etc. O mesmo vale para mocks.

Se você vai fazer uma integração com uma API, você DEVE usar um mock para não fazer o request, essa é a regra. Eu simplesmente descordo!

Se sua aplicação depende da API para existir, eu considero totalmente errado fazer um mock disso pois você nunca saberá se por algum motivo a API mudou ou parou de funcionar, ou mudou de endereço.

Apesar de óbvio que uma API deve ter versões e não mudar dessa forma, nem sempre isso ocorre, ainda mais as API’s brasileiras.

Por esta razão os testes do Cifras executavam requests para o sandbox do MOIP, o que fazia eu ter a segurança que o meu código continuava funcionando com a API deles. Eu NÃO iria fazer um mock dessa parte e ponto final.

Isso causava uma demora de mais ou menos 1 min nos testes. Mas era um preço que eu preferia pagar.

Com uma dica do meu amigo Jeffry Degrande conheci uma ferramenta que resolve isso. O ephemeral_response faz o request para a API e armazena um cache com o retorno por um prazo pré-determinado. Defini que este prazo no Cifras seria de um dia.

Com este passo reduzi mais um minuto do meu suite.

4º passo: Trabalho de formiga

O último passo seria de fato passar spec por spec e olhar o que poderia ser otimizado. Em alguns pontos stubs faziam mais sentido, outros apenas um Factory.build ao invés de create tornava o test mais rápido.

Outras duas técnicas muito boas é utilizar Factory.attributes_for :meu_model e Factory.stub :meu_model.

Este passo não reduziu muito o tempo pois eu já utilizava desta forma, mas em alguns pontos eu tinha deixado passar então tive uma pequena melhoria.

Conclusão

O resultado final foi que de 5min eu consegui reduzir para 1.5 min. Ainda existe espaço para otimizações, mas por enquanto isso deixo de ser prioridade e será melhorado usando aos poucos seguindo The Boy Scout Rule.

A minha conclusão é que fixtures são excelente para alguns casos e factories também, então não existe nenhum motivo para este ódio contra fixtures. Você pode usar tanto fixtures quanto factories no mesmo projeto e tirar o melhor dos dois mundos.

Outra dica é quanto ao log e o ephemeral_response e sempre ficar atento para usar Factory.build e Factory.stub quando possível.

Se você tiver alguma outra dica, compartilhe nos comentários.

Set 27

Agon News S01R03

Escrito por DClick Team em 1, 2009, 4, AR, audio, auto, blog, class, Dica, Download, ide, IE, image, Java, Javascript, live, mg, News, O, on, Partilha, player, pt, Ria’s Geral, TAT, tv, Twitter @ 09 27th, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!

Nesta edição do Agon News, falando sobre como compartilharam conhecimento e ganharam pontos no Agon o Thiago, a Taissa e o Marcelo:


Video thumbnail. Click to play.
Click to play

Download Agon News S01R03

http://blip.tv/file/get/Dclick-AgonNewsS01R03930.mp3

Set 25

Tirando dúvidas em fóruns

Escrito por Kelps Sousa em .NET, 1, 4, 6, AR, Banco de Dados, BI, blog, busca, camp, class, comunidade, dados, demo, Desenvolvedor, desenvolvedores, Dica, Dicas, email, err, exemplo, Exemplos, Ferramenta, filtra, for, futuro, Geral, Google, ide, IE, if, map, mg, Microsoft, MSDN, News, O, on, Outros, problema, problemas, produto, pt, relatório, RIA, Ria’s Geral, silverlight, site, social, Sun, Tecnologia, Tema, UI, validação, Vários, Ved, zend @ 09 25th, 2010 | via http://kelps-sousa.blogspot.com/ | Sem comentários
Kelps Sousa
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Há muito tempo venho acompanhando o fórum de Silverlight do MSDN Brasil, tirando dúvidas e ajudando outros desenvolvedores com problemas. Por ser bastante ativo nesse fórum acabei sendo nomeado como um de seus moderadores, o que me dá acesso para fazer algumas coisas como mover questões, editar e bloquear posts de outras pessoas, marcar perguntas como respondidas, etc…

Após um tempo a gente começa a notar certos padrões, e um que fica bem evidente para quem acompanha fóruns é que a grande maioria das pessoas não sabe usá-los corretamente. Fóruns são uma base de conhecimento com dúvidas e respostas para ser consultada e utilizada em caso de necessidade. Veja como um fórum é normalmente usado:

  • Usuário encontra um problema ou tem uma dúvida
  • Acha o site de fóruns do MSDN (ou qualquer outro)
  • Acha a tela de postar dúvida, preenche a descrição, preenche o título e envia
  • Aguarda uma resposta e depois não volta mais

O que há de errado nesse comportamento? Esse usuário não tirou proveito da ferramenta em vários pontos chave e usou o fórum como se fosse um sistema de suporte.

  1. Esse usuário não pesquisou para ver se a dúvida/problema dele já estava no fórum. Talvez alguém já houvesse passado por isso e ele já conseguisse a resposta na hora.
  2. Ao postar a dúvida ele começou preenchendo a descrição do problema e deixou o título para depois (talvez nem tenha percebido o campo e tenha preenchido só quando a validação da tela informou que era obrigatório). O problema disso é que o título acaba sendo preenchido com qualquer coisa, o que não ajuda para que a dúvida seja encontrada e respondida logo. Há também casos que são ao contrário onde a pessoa faz uma pergunta bem genérica no título e não detalha o cenário na descrição. Não podemos também esquecer dos casos em que a pessoa submete a dúvida no tópico/categoria errada do fórum.
  3. Após ter sua pergunta respondida o usuário muitas vezes simplesmente utiliza a resposta e não atualiza o fórum informando que aquela é a resposta. Na maioria dos casos o usuário só voltará ao fórum se a resposta não resolver o problema dele.

Esse tipo de comportamento é ruim para os fóruns pois acaba gerando informações redundantes, retrabalho e inconsistência nas respostas. Eis como o fórum deve ser usado:

  • Usuário encontra um problema ou tem uma dúvida
  • Acha o site do fórum (MSDN/Stack Overflow ou qualquer outro)
  • Verifica se há uma busca geral e faz uma busca com as palavras chave sobre a questão que tem
  • Se encontrar uma pergunta igual ou semelhante, verifica se ela está respondida e resolve o problema. Se estiver e resolver, vote na resposta para indicar que foi útil. Se não estiver respondida ou não resolver seu problema, poste um comentário ou pelo menos assine a pergunta para poder receber uma alerta por email quando houver atualização.
  • Se a sua dúvida não estiver no fórum ainda, ache a sessão do fórum referente ao assunto da dúvida. Ex.: Se a dúvida de sobre como filtrar uma query no banco de dados, você não deve postar no fórum de Silverlight só porque sua aplicação é feita em Silverlight. Você deve postar sua dúvida no fórum de SQL nesse caso.
  • Coloque a questão central do seu problema no título, da forma mais clara e concisa possível. Quem estiver lendo tem que ser capaz de identificar pelo menos o escopo da pergunta lendo apenas o título. Um título bem feito ajuda para que outras pessoas possam tirar proveito no futuro da solução ao seu problema e também faz com que se obtenha uma resposta mais rápido pois uma pessoa pode simplesmente bater o olho no título e falar “ei, eu sei responder isso”, ao invés de ter que abrir a pergunta e ler a descrição para saber do que se trata. Exemplos de títulos ruims: “Dúvida?”, “Problema com relatório”, “Acesso ao banco”, “Silverlight”, etc…
  • Preencha a descrição da pergunta com mais detalhes sobre o seu cenários. O que você está tentando fazer? Que tecnologias está usando? O que sua aplicação faz? etc. Quanto mais informações você puder passar, mais chances têm de ter uma resposta precisa e rápida. Coloque o que faz sentido no seu caso e que seja útil para quem for tentar responder.
  • Se alguém responder sua questão fazendo mais perguntas ou pedindo mais detalhes, responda assim que puder.
  • Se alguém der uma solução que funcione, marque como resposta para que outros possam tirar proveito.
  • Se ninguém responder e você conseguir resolver o problema, responda você mesmo à questão e marque sua resposta como resposta da questão. Outros usuários vão agradecer.

Quase todas as questões nesses fóruns são respondidas por pessoas como eu e você, não por funcionários da Microsoft (ou da empresa relacionada à tecnologia/fórum em questão). Estamos fazendo isso em nosso tempo livre para ajudar a evoluir nossa comunidade de desenvolvedores e as tecnologias que usamos. Lembre-se disso ao usar os fóruns.

Seguem mais algumas dicas que também podem ser seguidas:

  • Seja educado ao fazer sua pergunta.
  • Seja educado com quem está tentando te ajudar. Lembre que, normalmente, ele não é pago para isso e realmente só quer ajudar.
  • Não use o tópico de uma pergunta para discutir uma técnologia. Abra um novo tópico de discussão
  • Evite fazer mais de uma pergunta em um único tópico
  • Não faça propagandas em fóruns, a não ser que o produto em questão resolva a dúvida de alguem.
  • Se tiver um tempo, contribua com o fórum tentando responder dúvidas de outros usuários.

A comunidade agradece.



Set 24

Aprendendo PHP – parte 2

Escrito por Gabriel Versallini em 1, 4, 6, action, Air, AR, arte, Artigo, BI, blog, class, dados, Dica, Download, email, exemplo, Exemplos, for, Formulário, Formulários, html, IE, if, image, Java, Javascript, Livro, Livros, Mac, mg, mysql, NaN, Number, O, on, Orientação, Orientação a Objetos, padrão, Password, Pessoal, PHP, Plugin, produto, programação, pt, RIA, Ria’s Geral, servidor, social, string, TAT, UI, UX, web, XP @ 09 24th, 2010 | via http://www.versallini.com.br | Sem comentários
Gabriel Versallini
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


Olá, pessoal!

No artigo anterior vimos um pouco do que é o PHP e de como a aplicação é executada. Neste artigo, veremos como transmitir, ou melhor, enviar dados ao arquivo.php através de um form (html). Mas antes de iniciarmos o estudo, gostaria de sugerir os livros a seguir para auxiliar na aprendizagem:

Pronto! Agora vamos ao trabalho. Primeiro vamos criar o arquivo contato.html para obter as informações. No nosso formulário poderemos o method GET ou POST. Vejamos a diferença entre eles:

O método GET transmite os dados primeiramente ao servidor web onde será armazenados temporariamente numa variável de contexto denominada QUERY_STRING.  Em seguida o arquivo indicado na diretiva action é acionado através da url e os dados transmitidos são exibidos após o a url utilizando o (?) para separar, por exemplo: http://www.versallini.com.br/mail.php?nome=Fulano. Já o método POST transmite os dados diretamente ao endereço que constar da diretiva action. Mas para isso é utilizado um script CGI para extrair os dados, normalmente o servidor PHP já vem com um script default (padrão).

Agora que já sabemos a diferença entre os métodos de envio vamos criar o nosso arquivo com o formulário:

?Download contato.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
<head>
<title>Aprendendo PHP - parte 2</title>
</head>
<body>
  <form action="confirmacao.php" method="POST">
    <fieldset>
    <legend>Inscrição:</legend>
     Nome: <input type="text" name="nome"><br>
     Email: <input type="text" name="email"><br>
     Senha: <input type="password" name="senha">
    </fieldset>
    <input type="submit" value="Enviar" />
  </form>
</body>
</html>

Veja como ficou:

Vamos criar agora o arquivo confirmacao.php. Para isso, precisamos entender que no php existe 3 comandos que permite a captura dados enviados por formulários, são eles: $_POST, $_GET e $_REQUEST. O $_REQUEST serve para capturar dados enviados através de qualquer um dos 2 métodos (GET ou POST), portanto é o melhor a ser usado no exemplo pois depois é possível mudar o método no formulário para GET sem precisar modificar o arquivo php. Vamos criá-lo:

?Download confirmacao.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
  // Declarando variáveis
  $Nome = $_REQUEST['nome'];
  $Email = $_REQUEST['email'];
  $Senha = $_REQUEST['senha'];
 
  // Exibindo os dados na tela
  echo "<h2>Confirmação de Dados</h2>";
  echo "Nome: $Nome<br />";
  echo "Email: $Email<br />";
  echo "Senha: $Senha<br />";
 
?>

Lembre-se de salvar os arquivos no diretório raiz do seu servidor web, no caso do EasyPHP é o www. Pronto! Vamos ver o resultado após o envio dos dados conforme a imagem anterior.

Fácil, né!? Neste exemplo utilizamos o método POST no formulário (html), experimente substituir por GET e veja a diferença na URL após o envio dos dados. Qualquer dúvida, comentem!

Um abraço

OBS.: Os exemplos são bem básicos devido a muitos colegas não terem nenhuma experiência com programação. Reforço a necessidade e importância da leitura de bons livros, juntamente com a prática. É isso!

Set 23

SQL Nativo no Hibernate

Escrito por Felipe Borella em AR, class, Curso, Cursos, exemplo, Hibernate, Java, lista, O, on, Ria’s Geral, UI @ 09 23rd, 2010 | via http://www.fborella.com.br/blog/ | Sem comentários
Felipe Borella
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Quando o programador necessita de recursos do SGBD também pode ser feito m query nativa no Hibernate. Existem muitas maneiras de se fazer isso. Vou colocar aqui um exemplo bem pratico.

Exemplo:

List<Cidade> lista = this.getSession().
      createSQLQuery("select id, nome from Cidade").addEntity(Cidade.class).list();

Felipe

Set 23

Lazy Loading Java

Escrito por Felipe Borella em 1, AR, auto, Banco de Dados, busca, carregar, dados, exemplo, Exemplos, for, Hibernate, Java, O, on, RIA, Ria’s Geral, UI @ 09 23rd, 2010 | via http://www.fborella.com.br/blog/ | Sem comentários
Felipe Borella
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Ao pesquisar em um tabela do banco de dados, não necessariamente pesquisa também pelas tabelas que estão relacionadas, você pode estar carregando informações que não são necessárias neste contexto da sua aplicação. O Hibernate também não inicializa os relacionamentos 1:N e N:N automaticamente, porque ele pode estar caindo nesse caso de carregar objetos que não são necessários neste caso.
O que eu uso é um “left join fecth” entre os objetos, em uma busca HQL, assim vai carregar somente a coleção quando for iniciada.

Exemplos

carregar um objeto aluno e suas matriculas já inicializados.

Aluno aluno = this.getSession().createQuery("from Aluno a " +
     "left join fetch a.matricula where a.id = 1").uniqueResult();

carregar um Set com objetos aluno e susa matriculas já inicializados:

Set set = new HashSet(this.getSession().createQuery( "from Aluno a" +
  " left join fetch a.matricula "where a.id < 5").list());

Espero que seja útil para alguém.

Felipe

Set 23

Flex 4 Custom Components – A DClick apresenta o componente “CollapsePanel”

Escrito por DClick Team em 1, 4, 6, Adobe, app, AR, BI, blog, class, Componente, Componentes, components, custom, Download, exemplo, flash, Flash Player, Flex, Flex 4, Flex4, IE, if, image, int, library, mg, mudanças, O, on, Pessoal, player, Projetos, Ria’s Geral, screen, Screencast, SDK, Sem categoria, skins, swf, TAT, Twitter, UI, wave @ 09 23rd, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!

Pessoal, estou separando alguns componentes que nós ja utilizamos em projetos internos aqui na DClick para disponibilizá-los através do blog.

Com as mudanças que vieram junto com o Flex 4 ficou muito mais simples e prático desenvolver seus proprios componentes ou extender os já existentes no SDK, portanto acredito que cada vez mais vocês vão ver novos componentes sendo disponibilizados aqui no blog.

Este componente é bem simples, entretanto não é difícil de encontrar coisas semelhantes ou até mesmo igual no dia-a-dia, não vou prolongar muito falando sobre componentes, flex 4 e skins neste post, mais pretendo fazer um screencast mostrando com mais detalhes estes conceitos.

Uma coisa interessante que vocês podem reparar na aplicação de exemplo é que eu estou utilizando o mesmo componente de duas maneiras diferentes somente trocando o skin.

Link para download do projeto: CollapsePanel

Segue exemplo:

id=”fm_CollapsePanelExample_741965049″
class=”flashmovie”
width=”500″
height=”600″>

Get Adobe Flash player


Set 23

Primeiros passos com Spring Roo

Escrito por DClick Team em 1, 2.0, 4, 6, Access, app, apple, Apresentação, AR, arte, Banco de Dados, BI, blog, class, classe, configuração, control, dados, demo, Documentação, Download, Eclipse, engine, err, Ferramenta, flash, Flex, for, framework, free, FullScreen, Geral, git, Google, ide, IE, if, image, int, Java, JPA, kit, Linux, mg, mvc, O, Office, on, Pessoal, pt, referencia, RIA, Ria’s Geral, screen, serviço, Serviços, Spring, Spring Framework, Sun, TAT, Teste, tool, toolkit, tv, Twitter, UI, uint, UX, wave, web, Web Service, web services, window, windows @ 09 23rd, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!

Para o pessoal que ficou curioso com o primeiro post sobre o Spring Roo aqui vai mais um post sobre esse assunto.

O que é Spring Roo?

Como a própria documentação do Spring Roo fala, Roo é uma ferramenta fácil e produtiva para construir Enterprise Applications com Java. Com Roo você não precisa aprender uma nova linguagem ou uma nova plataforma, você simplesmente programa em Java. Tudo que você precisa fazer é iniciar o Roo e deixar ele rodando enquanto você programa. Você pode interagir com Roo por linha de comando, mas na maior parte do tempo você apenas vai programar na sua IDE de preferencia. Enquanto você faz alterações no seu projeto Roo determina o que você esta tentando fazer e se encarrega disso para você.

Outra coisa importante sobre Roo é que ele não é usado quando seu projeto esta rodando em produção. Ou seja, você não vai encontrar nenhum jar do Roo no classpath ou Annotation compilada junto com sua classe. Desta forma você pode parar de usar Roo a qualquer momento do seu projeto.

Como instalar Spring Roo?

Antes de qualquer coisa precisamos garantir algumas dependências:

1 – Java 5 ou 6

2 – Maven 2.0.0 ou mais recente

Com as dependências resolvidas podemos instalar Roo com os seguintes passos:

1 – Fazer o download do Spring Roo em http://www.springsource.org/download

2 – Descompacte o arquivo Zip em um diretório de sua escolha, esse diretório será chamado de %ROO_HOME

3 – Se você usa Windows adiciona %ROO_HOMEbin na variável de ambiente %PATH%. Se você utiliza Linux ou Apple crie um link simbólico usando o comando ln -s $ROO_HOME/bin/roo.sh /usr/bin/roo

4 – Verifique se a Roo foi instalado corretamente, para isso abra o terminal e digite os comando “roo quit”:

(Opcional)

Para trabalhar com Roo é recomendado utilizar SpringSource Tool Suite (STS), uma ferramenta free que usa como base o Eclipse IDE e que tem varias features para trabalhar com Roo, mas você também pode trabalhar com a IDE de sua escolha. Neste e nos próximos posts eu vou utilizar a ferramenta STS.

Visão geral

Em sua atual versão Roo foca em Enterprise application escritas em Java utilizando banco de dados relacional, JPA para persistencia de dados, Spring FrameWork para injeção de dependência e controle de transação, JUnit para testes unitários, Maven para configuração e build e Spring MVC para camada de apresentação.

Outra característica do Spring Roo é que ele não adiciona camadas desnecessárias ao projeto. Normalmente uma aplicação tradicional é composta de uma camada com os DAO’s, uma camada com Serviços, uma camada de Domínio e uma camada de Controle. Já com Spring Roo você vai ter apenas uma camada web e uma camada de entidade (similar a camada de domínio). Porém uma camada de serviço pode ser adicionada se sua aplicação exigir.

Para as próximas releases Spring Roo pretende estender seu suporte para Cloud como Cloud Foundry, Amazon Web Services e Google App Engine. Também pretende dar suporte para Google Web ToolKit (GWT) e Flex.

Agora vamos iniciar nosso primeiro projeto utilizando Spring Roo

Set 23

Flash Builder Linux descontinuado

Escrito por Fabio da Silva em 1, 4, 6, Adobe, AR, BI, blog, Blogs, class, flash, flash builder, Flex, Flex Builder, for, Formação, Google, html, if, Linux, Mercado, mg, O, on, RIA, Ria’s Geral, Tema, UI, UX @ 09 23rd, 2010 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Informação oficial.

Não utilizo Linux mas vejo como uma má notícia para o mercado descontinuarem o Flash Builder para este sistema operacional.

Veja mais: Flex Builder for Linux project ending

Set 23

Discussão Silverlight x HTML5 gravada ao vivo no Community Zone

Escrito por Kelps Sousa em .NET, 1, 4, 6, AR, audio, blog, class, comunidade, for, Google, html, html5, int, internet, map, mg, Microsoft, News, O, on, Opinião, Outros, player, podcast, problema, problemas, procura, Ria’s Geral, silverlight, Silverlight 4, Sun, Twitter, UI, Vários, xhtml @ 09 23rd, 2010 | via http://kelps-sousa.blogspot.com/ | Sem comentários
Kelps Sousa
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Nos dias 16 e 17 a Microsoft reuniu alguns MVPs e influenciadores da comunidade em um rancho no interior de São Paulo com atividades de integração e de direcionamento. Esta reunião se chama Community Zone. Para alguns é um momento de lazer com os amigos da “internet”, mas para muitos é uma grande oportunidade de trocar informações e discutir determinados assuntos.

Foi isto que aconteceu na madrugada do Community Zone. Mais de 30 pessoas estavam presente para discutir Silverlight 4 x XHTML5? Assunto quente e polêmico que você confere neste mega podcast, com participações de Kelps, Giovanni Bassi, Rodrigo Kono, Victor Cavalcante, Igor Abade, Mauricio Alegretti, Gustavo Malheiros, Márcio Sete e vários outros. (ps.:não temos os nomes de todos, se você estava presente comente este post).

Html5 versus Silverlight no Community Zone

Qual a sua opinião?
Comente, compartilhe conosco.

PS.: Não consegui colocar um player de audio no post por causa de problemas com o Blogger. Estou procurando uma solução para isso.



http://feedproxy.google.com/~r/DevNewsAndOldsByKelps/~5/gAzbpVOvMN0/html5-x-silverlight.mp3

« Entradas anteriores | Entradas recentes »

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2791 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com