DClick

Arquivos da categoria "AJAX"

Entendendo o Tamarin, Adobe e Mozilla

Categorias relacionadas: AJAX, ActionScript, Flash Platform, Notícias

O texto a seguir é parte de um e-mail que eu enviei para o time da DClick explicando sobre o projeto Tamarin, no dia seguinte ao seu lançamento.

A Adobe recentemente liberou a ActionScript Virtual Machine como open source sob o projeto Tamarin da Mozilla. Isso causou uma certa confusão e logo notícias como “Flash Open Source”, “Maior integração entre Flash e Firefox” entre outras começaram a ser divulgadas, inclusive por agências de nome.

Vamos esclarecer o que isso significa. As aplicações feitas com o Flash e Flex no fundo são aplicações em uma linguagem chamada ActionScript, atualmente na versão 3. Aliás, essa versão 3 do ActionScript foi lançada recentemente e é base para o Flex 2. A principal vantagem do ActionScript 3 em relação à versão anterior é a performance, que tem uma ganho estrondoso. Algumas tarefas ficaram 1000% mais velozes.

O ActionScript é baseado em uma especificação chamada ECMAScript, que também é base do JavaScript, linguagem utilizada em aplicações web em conjunto com HTML para dar dinamicidade e interação à aplicativos web tradicionais. Aplicações em AJAX, por exemplo, dependem completamente do JavaScript.

O que a Adobe fez foi liberar como open source um pedaço do Flash Player, a ActionScript Virtual Machine, que é responsável por interpretar código ActionScript e transformar em instruções de máquina (JIT, Just In Time Compiler). E como de certa forma o ActionScript e o JavaScript tem suas semelhanças (ambos baseados no ECMAScript), a Mozilla pode utilizar o Tamarin para melhorar a performance do interpretador de JavaScript de seus produtos, como o Firefox.

Assim, sucintamente, em breve teremos um Firefox muito mais ágil para interpretar códigos JavaScript, ou seja, poderemos ter aplicações em AJAX muito mais velozes que as de hoje em dia. Inclusive partes do Firefox e suas extensões são muito dependentes do JavaScript terão ganhos de performance. A Adobe e Mozilla agora também trabalharão em conjunto para o desenvolvimento da próxima especificação do ECMAScript.

Por Fabio Terracini em 1/February/2007
2 Comentários »


No Translations

Só o Flex Muda Completamente as Experiências Web

Categorias relacionadas: AJAX, Flex, Notícias, RIA

Relatório feito pela Forrester Research aponta que uma empresa que domina o Flex pode tirar melhor proveito das RIAs do que qualquer outra que adote um Ajax Framework. Em outras palavras somente o Flex é capaz de mudar completamente as experiências Web desde que se domine a tecnologia.

O conceituado relatório pode ser lido pela bagatela de US$379.00. Isto me faz pensar se eu e o Fábio não estamos perdendo dinheiro ao fazer alguns posts de graça sobre o assunto. :-)

Brincadeiras a parte é possível ter uma idéia sobre o conteúdo do relatório neste post do Ryan Stewart.

De certa forma no meu post eu dizia que o Flex não deveria ser comparado com o Ajax em si, mas sim com um dos seus Frameworks pagos. Tanto o relatório da Forrester quando o post do Ryan Stewart parecem corroborar a minha tese.

Por Beck Novaes em 10/January/2007
Nenhum Comentário »


No Translations

Tutorial: Master Detail com Transição no Spry

Categorias relacionadas: AJAX

O Spry é uma framework para AJAX da Adobe.
Com ele é possível criar páginas dinâmicas incorporando dados de arquivos XML nos seus HTMLS sem a necessidade de refresh da mesma forma que acontece no Flex. O Spry também conta com uma API de efeitos bem grande que permite de uma maneira fácil usando JavaScript aplicar efeitos nos elementos HTML da sua página. O Spry possui outras facilidades como criar Tabs, Accordions e também possui ferramentas para validação de formulário (esse pode ser o meu próximo post).

Para visualizar a versão completa do exemplo clique aqui

Neste tutorial irei criar um simples exemplo de Master Detail usando Spry 1.4 com as informações do XML abaixo.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <estados>
  3.     <estado id="1">
  4.         <nome>São Paulo</nome>
  5.         <desc>
  6.             <![CDATA[
  7.                 Lorem ipsum dolor...
  8.             ]]>
  9.         </desc>
  10.     </estado>
  11.     <estado id="2">
  12.         <nome>Rio de Janeiro</nome>
  13.         <desc>
  14.             <![CDATA[
  15.                 Ut sapien magna...
  16.             ]]>
  17.         </desc>
  18.     </estado>
  19.     <estado id="3">
  20.         <nome>Paraná</nome>
  21.         <desc>
  22.             <![CDATA[
  23.                 Nam et orci. Nulla...
  24.             ]]>
  25.         </desc>
  26.     </estado>
  27. </estados>

Antes de começar você precisa baixar a última versão do Spry clicando aqui.

O primeiro passo a seguir é incluir o Spry que é o arquivo SpryData.js (ele está na pasta includes do download feito) ele é o coração do Spry, também preciso incluir o arquivo Xpath.js pois o Spry utiliza o XPath parar procurar itens a partir da sua fonte de dados XML. XPath é uma linguagem baseada na árvore do arquivo XML e provê uma forma simples de selecionar os nós usando diversos critérios de busca. Para conhecer mais sobre XPath clique aqui.
Também iremos usar a bibliteca de efeitos do Spry que é a SpryEffects.js também na pasta includes do download.

CFM:
  1. <script type="text/javascript" src="includes/xpath.js"></script>
  2.   <script type="text/javascript" src="includes/SpryData.js"></script>
  3.   <script type="text/javascript" src="includes/SpryEffects.js"></script>

Após isso vamos criar o XML Data Set:

CFM:
  1. <script type="text/javascript">
  2.      var dsEstados = new Spry.Data.XMLDataSet("data/estados.xml", "estados/estado");
  3.   </script>

Agora vamos criar uma lista a partir do XML e a área de detalhe.

CFM:
  1. <div spry:region="dsEstados">
  2.     <div spry:state="loading">Carregando...</div>
  3.     <div spry:state="error">Erro na Captura dos Dados!</div>
  4.     <div spry:state="ready">
  5.         Estados:
  6.         <ul>
  7.             <li spry:repeat="dsEstados" onclick="fadeOutContentThenSetRow('{ds_RowID}');"><a href="javascript:;">{dsEstados::nome}</a></li>
  8.         </ul>
  9.     </div>
  10. </div>
  11.  
  12. <div id="descricao" spry:detailregion="dsEstados">
  13.     <h3>{dsEstados::nome}</h3>
  14.     <span>
  15.         {dsEstados::desc}
  16.     </span>
  17. </div>

Explicando:

  • spry:region - Indica uma região dinâmica do data set
  • spry:detailregion - é a região de detalhe para o data set indicado
  • spry:state - Indica qual o estado da requisição

    • loading - esta div contêm o conteúdo que deve ser mostrado quando o Spry estiver carregando os dados
    • error - esta div contêm o conteúdo que deve ser mostrado caso aconteça um erro no GET
    • ready - quando tudo estiver ok esta div entra em ação
  • spry:repeat - faz um loop dos resultados do data set
  • onclick - chamo a função que irá executar a transição
  • {dsEstados::nome} - Esta é a representação dos campos do dataset que aparecem na tela. Note que a variável é Bindable, ou seja ela fica sempre "escutando" o data set. existem 2 formas de utilização {dataset::nome_do_campo} ou {nome_do_campo} eu prefiro usar a primeira opção pra facilitar a manutenção no código.

O próximo passo é criarmos uma função que ira fazer a transição e adicionarmos um Observer na div.

CFM:
  1. <style type="text/css">
  2.         #descricao {
  3.             opacity: 0;
  4.             filter: alpha(opacity=0);
  5.         }
  6.     </style>
  7.    
  8.     <script type="text/javascript">
  9.         var dsEstados = new Spry.Data.XMLDataSet("data/estados.xml", "estados/estado");
  10.        
  11.         function fadeInContent(notificationType, notifier, data) {
  12.             if (notificationType != "onPostUpdate")
  13.                 return;
  14.             Spry.Effect.AppearFade('descricao', { to: 100, from: 0, duration: 500 });
  15.         }
  16.        
  17.         Spry.Data.Region.addObserver('descricao', fadeInContent);
  18.     </script>

Explicando:

  • fadeInContent - função Observer que irá fazer um "fade" escondendo o conteúdo da div sempre que o detailRegion for atualizado. Obs: Observe que eu tenho um style definindo opacidade 0 (zero) para minha div. Isto serve para previnir bugs entre navegadores na hora do Fade inicial.
  • Spry.Effect.AppearFade - Função que executa o efeito de Fade.
  • Spry.Data.Region.addObserver - onde eu indico que a função observer "fadeInContent" está relacionada a minha div "descricao"

Agora só nos resta criar a função de fade-out:

CFM:
  1. <style type="text/css">
  2.         #descricao {
  3.             opacity: 0;
  4.             filter: alpha(opacity=0);
  5.         }
  6.     </style>
  7.    
  8.     <script type="text/javascript">
  9.         var dsEstados = new Spry.Data.XMLDataSet("data/estados.xml", "estados/estado");
  10.        
  11.         function fadeInContent(notificationType, notifier, data) {
  12.             if (notificationType != "onPostUpdate")
  13.                 return;
  14.             Spry.Effect.AppearFade('descricao', { to: 100, from: 0, duration: 500 });
  15.         }
  16.        
  17.         Spry.Data.Region.addObserver('descricao', fadeInContent);
  18.        
  19.         function fadeOutContentThenSetRow(rowID) {
  20.             Spry.Effect.AppearFade('descricao', { to: 0, from: 100, duration: 1000, finish: function() {
  21.                 dsEstados.setCurrentRow(rowID);
  22.             }});
  23.         }
  24.     </script>

Explicando:

  • fadeOutContentThenSetRow - Irá mostrar o conteúdo da div quando algum ítem da lista é clicado
  • setCurrentRow - Defino qual a linha atual no DataSet

O código final ficará assim:

CFM:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Spry - Básico</title>
  6.  
  7. <script type="text/javascript" src="includes/xpath.js"></script>
  8. <script type="text/javascript" src="includes/SpryData.js"></script>
  9. <script type="text/javascript" src="includes/SpryEffects.js"></script>
  10. <script type="text/javascript">
  11.     var dsEstados = new Spry.Data.XMLDataSet("data/estados.xml", "estados/estado");
  12.    
  13.     function fadeInContent(notificationType, notifier, data) {
  14.         if (notificationType != "onPostUpdate")
  15.             return;
  16.         Spry.Effect.AppearFade('descricao', { to: 100, from: 0, duration: 500 });
  17.     }
  18.    
  19.     Spry.Data.Region.addObserver('descricao', fadeInContent);
  20.    
  21.     function fadeOutContentThenSetRow(rowID) {
  22.         Spry.Effect.AppearFade('descricao', { to: 0, from: 100, duration: 500, finish: function() {
  23.             dsEstados.setCurrentRow(rowID);
  24.         }});
  25.     }
  26. </script>
  27.  
  28. <style type="text/css">
  29.     #descricao {
  30.         opacity: 0;
  31.         filter: alpha(opacity=0);
  32.     }
  33.     span {
  34.         font-size:10px;
  35.         font-family:Verdana, Arial, Helvetica, sans-serif;
  36.     }
  37. </style>
  38.  
  39. </head>
  40. <body>
  41.  
  42. <div spry:region="dsEstados">
  43.     <div spry:state="loading">Carregando...</div>
  44.     <div spry:state="error">Erro na Captura dos Dados!</div>
  45.     <div spry:state="ready">
  46.         Estados:
  47.         <ul>
  48.             <li spry:repeat="dsEstados" onclick="fadeOutContentThenSetRow('{ds_RowID}');"><a href="javascript:;">{dsEstados::nome}</a></li>
  49.         </ul>
  50.     </div>
  51. </div>
  52.  
  53. <div id="descricao" spry:detailregion="dsEstados">
  54.     <h3>{dsEstados::nome}</h3>
  55.     <span>
  56.         {dsEstados::desc}
  57.     </span>
  58. </div>
  59.  
  60. </body>
  61. </html>

Bom é isso aí um "SIMPLES" tutorial de como fazer um master detail no Spry usando transições.

Mais informações sobre o Spry você encontra em:

Por Diogo Moura em 21/December/2006
3 Comentários »


No Translations

Sneak Peeks: FDS/Ajax Bridge e Flash 9/AS3

O sneak peek era relativo ao Flex Data Services e ao Ajax Bridge. Mostraram um recurso realmente muito legal, um componente chamado FDSDataSet para ser utilizado em conjunto com o Spry. Assim que eu vi isso logo imaginei o que poderia ser, e realmente é o que imaginei: fazer push de dados para o Spry, que é um framework para Ajax utilizando o Flex Data Services! Na demonstração a facilidade com que foi feito e o resultado do push foram realmente impressionantes.

Em relação ao Flash 9 o foco foi em relação ao debugging que finalmente chega em plena forma para a tecnologia Flash. A IDE do Flex hoje já tem um debugging efetivo. Foi mostrado o debug workspace, os breakpoints e algumas outras funcionalidades, como editar o valor de variáveis durante o debug, alterando o resultado.

PS: Ed Sullivan, que coordena o programa de grupo de usuários da Adobe acabou de passar por aqui enquanto escrevo este post e mandou um abraço para a comunidade brasileira e para o pessoal do AUG-SP (o que inclui eu, mas como ele estava falando comigo.. bem, vocês entenderam).

Por Fabio Terracini em 26/October/2006
Nenhum Comentário »


No Translations

Ajax e Flex

Categorias relacionadas: AJAX, Flex, RIA

Debates sobre qual é a melhor tecnologia são comuns. Alguns destes debates são debates genuínos, outros, um tanto dissimulados. Em outras palavras, é preciso tomar cuidado para não comparar laranjas com bananas: ambas são frutas, porém, a primeira é rica em vitamina C e a segunda em potássio. Mas o problema é que em tecnologia as comparações são bem complicadas.

Uma discussão recente no mundo virtual envolve o Flex e o Ajax. Ambas são tecnologias para desenvolver Rich Internet Applications. Mas será mesmo que podemos compará-las a ponto de afirmar qual é a melhor?

Este texto complementa e é complementado pelo do Fábio Terracini publicado no CF Gigolô, e é fruto de uma troca de idéias que tivemos recentemente.

Leia o artigo completo »

Por Beck Novaes em 31/March/2006
5 Comentários »


No Translations