Hélio, Usando weakReference não tem necessidade de remover, mas é uma boa prática.
[]s Fabio da Silva http://www.fabiophx.blogspot.com/ On 11 maio, 11:44, Helio Antonio Francisco Silva <helio.afsi...@gmail.com> wrote: > Fabio e mario uma ultima duvida, mesmo depois de eu tornar os listeners > weakreference eu sempre tenho de remover eles antes de eu deletar um > componente ou modulo ? > > 2010/5/11 Helio Antonio Francisco Silva <helio.afsi...@gmail.com> > > > > > Vou postar aqui o codigo que eu uso para carregar todos os modulos dentro > > da minha aplicação. > > > // ActionScript file > > import flash.system.System; > > import mx.collections.ArrayCollection; > > import mx.events.ModuleEvent; > > import mx.modules.ModuleLoader; > > public var camposPes:String = new String(); > > public var listModulesPes:ArrayCollection = new ArrayCollection(); > > //Carregamento Dynamico dos modulos > > //parametros, caminho do modulo, campo de retorno > > public function createModule(s:String, c:String, b:String):void { > > //Variavel para saber se o modulo existe > > var existeModulo:Boolean = false; > > //Primeiro verifico se o modulo existe > > for(var x:Number=0;x<listModulesPes.length;x++){ > > if(listModulesPes[x].url == s){ > > //Modulo já existe > > existeModulo = true; > > listModulesPes[x].modulo.loadModule();//Caminho da aplicação > > //loader.enabled = false; > > break; > > } > > } > > //Se for falso então precisa criar o modulo. > > if(!existeModulo){ > > listModulesPes.addItem({ modulo: new ModuleLoader(),url: s, campoRetorno: > > c, moduloBloqueado:b }); > > this.addChild(listModulesPes[(listModulesPes.length-1)].modulo); > > listModulesPes[(listModulesPes.length-1)].modulo.autoLayout = true; > > listModulesPes[(listModulesPes.length-1)].modulo.includeInLayout = true; > > listModulesPes[(listModulesPes.length-1)].modulo.url = s;//Caminho da > > aplicação > > listModulesPes[(listModulesPes.length-1)].modulo.percentHeight=100; > > listModulesPes[(listModulesPes.length-1)].modulo.percentWidth=100; > > listModulesPes[(listModulesPes.length-1)].modulo.loadModule(); > > > > listModulesPes[(listModulesPes.length-1)].modulo.addEventListener(ModuleEvent.READY, > > pesClienteReady,false, 0, true); > > > > listModulesPes[(listModulesPes.length-1)].modulo.addEventListener(ModuleEvent.ERROR, > > pesClienteError,false, 0, true); > > > //Verificar qual o modulo deve ser bloqueado na abertura de outro > > for(var y:Number = 0;y<listModulesPes.length;y++){ > > if(listModulesPes[y].url == b){ > > listModulesPes[y].modulo.enabled = false; > > } > > } > > //loader.enabled = false; > > } > > } > > //Descarregamento dynamico dos modulos. Nome da URL UNICA para descarregar > > o modulo que precisa. > > public function removeModule(s:String):void { > > var desbloqueia:String = ""; > > //Primeiro achar qual modulo deve se abilitar > > for(var p:Number=0;p<listModulesPes.length;p++){ > > if(listModulesPes[p].url == s){ > > desbloqueia = listModulesPes[p].moduloBloqueado; > > listModulesPes[p].modulo.enabled = true; > > } > > } > > //Desbloquear o load de traz > > for(var q:Number=0;q<listModulesPes.length;q++){ > > if(listModulesPes[q].url == desbloqueia){ > > listModulesPes[q].modulo.enabled = true; > > } > > } > > for(var x:Number=0;x<listModulesPes.length;x++){ > > if(listModulesPes[x].url == s){ > > //Modulo já existe > > listModulesPes[x].modulo.unloadModule(); > > System.gc(); > > > this.removeChild(listModulesPes[x].modulo); > > listModulesPes.removeItemAt(x); > > //loader.enabled = true; > > break; > > } > > } > > } > > public function > > getNomeCampo(url:String):String<https://mail.google.com/mail/html/compose/static_files/String):String> > > { > > var retornaCampo:String = new String(); > > for(var x:Number=0;x<listModulesPes.length;x++){ > > if(listModulesPes[x].url == url){ > > //Se achar a url passar o nome do campo especifico. > > retornaCampo = listModulesPes[x].campoRetorno; > > return retornaCampo > > } > > } > > return ""; > > } > > public function > > getNomeModuleRetorno(url:String):Number<https://mail.google.com/mail/html/compose/static_files/String):Number> > > { > > var retornaCampo:Number > > var chave:String; > > for(var y:Number=0;y<listModulesPes.length;y++){ > > if(listModulesPes[y].url == url){ > > //Se achar a url passar o nome do campo especifico. > > chave = listModulesPes[y].moduloBloqueado; > > } > > } > > for(var x:Number=0;x<listModulesPes.length;x++){ > > if(listModulesPes[x].url == chave){ > > //Se achar a url passar o nome do campo especifico. > > retornaCampo = x; > > return retornaCampo; > > } > > } > > return 0; > > } > > Mas vou tentar seguir os conselhos do pessoal, tenso que eu ja tinha > > colocado tudo pra rodar via modulos, tanto as pesquisas como qualquer outra > > janela, a pesquisa por exemplo pedidos, clientes, produtos, transportes, sao > > reutilizaveis em todo o projeto, entao criei modulos dela para ser chamado > > em qualquer lugar a qualquer hora por qualquer MXML. > > > Mas vo tentar transformar em componentes. > > 2010/5/11 Fábio Goll <fabiog...@gmail.com> > > > É isso aí Helio, e dentro desse modulo para alternar entre os componentes > >> (navegação) utilize ViewStack. > > >> States só para coisas simples, ocultar algo, mudar algum componente de > >> posição, etc. > > >> 2010/5/11 Helio Antonio Francisco Silva <helio.afsi...@gmail.com> > > >> Mas tudo tudo tudo , não vo ficar com um puta SWF de uns 1 mega cara ? > >>> Eu tambem penso na parte de dar manutenção Mário. Por exemplo. > > >>> Entreguei um software para o cliente. > > >>> Ja fiz umas constumizações pra ele. > > >>> Quero colocar novas janelas se tiver por modulo e molezinha cada item e > >>> independente. > > >>> Mas ja curti a ideia de colocar as operações em form de componente e > >>> carregar isso para dentro de um modulo unico, vai ficar filé. > >>> já comecei a ter otimas ideias. > > >>> fora que vo aliviar em muito o problema da utilização da memoria. > > >>> valeu Mário me ajudo muito. acho que esse e o caminho. > > >>> -------------------------------------------------- MODULO > >>> ----------------------------------------------------- > >>> Pedido de venda: <- MODULO > >>> inserção <- Componente > >>> Deletar <- Componente > >>> Vizualizar <- Componente > >>> Copiar <- Componente > >>> Update <- Componente > >>> Legenda <- Componente > >>> Pesquisas <- Componente > > >>> --------------------------------------------------------------------------------------------------------------------------------------- > >>> Sempre tive duvidas se era esse o modo correto de se trabalhar. > >>> 2010/5/11 Mário Júnior <juninho...@gmail.com> > > >>> Exatamente: Componentizacao! > >>>> Deixar TUDO TUDO num mxml, com varios states e tal relmente deixa o > >>>> código um pouco complicado de manter depois, por isso a componentizacao > >>>> ajuda bastante. > > >>>> No entanto, a preciosidade com essa parte (criar componente pra tudo e > >>>> todos e dominar o mundo com eles) também pode ser ruim, é uma faca de > >>>> dois > >>>> gumes, ou melhor, uma balança muito sensível onde vc precisa ponderar > >>>> até q > >>>> ponto o código está bom, facil e limpo. > > >>>> Recomendo as seguintes leituras: > >>>>http://www.becklog.org/2009/08/06/ti-centrismo-vs-usuario-centrismo/ > >>>>http://www.becklog.org/2009/08/31/trade-off-com-foco-no-valor-agregado/ > > >>>> Abraços. > > >>>> Em 11 de maio de 2010 09:48, Helio Antonio Francisco Silva < > >>>> helio.afsi...@gmail.com> escreveu: > > >>>> Vou dar uma olhada quando chegar em casa do serviço nao da pra ver nada, > >>>>> tudo acess denied. > > >>>>> 2010/5/11 bruno bg <bruno...@ig.com.br> > > >>>>> Helio, lembra que falei sobre refatoração / desaclopamento do código. > >>>>>> Separação do MXML do ActionScript dos Eventos e etc > >>>>>> veja um exemplo > >>>>>> simples<http://blip.tv/file/get/Becknovaes-RefatorandoAFlexFlickrApp828.mov>. > > >>>>>> brunobg > > >>>>>> Em 11 de maio de 2010 09:27, Helio Antonio Francisco Silva < > >>>>>> helio.afsi...@gmail.com> escreveu: > > >>>>>> Claro concordo com o que você falo. > > >>>>>>> mas como faço para separar o codigo das telas usar states nem rola > >>>>>>> fica um lixo o codigo e dificil de manipular. > >>>>>>> Transformo a tela em um componente ? e isso ? > > >>>>>>> 2010/5/10 Mário Júnior <juninho...@gmail.com> > > >>>>>>>> Vamos lá =D > > >>>>>>>> *"A Mário não queria que voce me acha-se um chato e que como vim da > >>>>>>>> escola do flash, tenho enraizado esse conceito de separar as coisas > >>>>>>>> em SWF." > >>>>>>>> * > >>>>>>>> Nao mano.. capaz! > >>>>>>>> Compreendo seu ponto de vista, e até concordo que em animações é > >>>>>>>> melhor ter tudo separado em swf mesmo. Por exemplo, em um hot-site, > >>>>>>>> vc > >>>>>>>> poderia ter cada "pagina" um swf a parte. Agora, com Flex, não > >>>>>>>> pensamos em > >>>>>>>> "páginas". Tb não é muito certo pensar em "telas", embora esse > >>>>>>>> conceito está > >>>>>>>> bem mais relacionado a aplicacoes doq "páginas" propriamente ditas. > >>>>>>>> Mas é > >>>>>>>> normal pensarmos em componentes, em contextos, em funcionalidades > >>>>>>>> ou, mais > >>>>>>>> ainda, em casos de uso (use-cases). > > >>>>>>>> É possível separar cada funcionalidade em modulo a parte? Sim! Vc > >>>>>>>> mesmo já fez isso. Agora, compensa? IMHO não! > >>>>>>>> Daí vc me pergunta: "Pq?" Resposta: Pelo esforço desnecessário: Vc > >>>>>>>> pode até "achar q facilita" a sua vida de desenvolvedor, mas pensa > >>>>>>>> no lado > >>>>>>>> do cliente: O cara ter q ficar carregando cada modulo a medida q vai > >>>>>>>> usando > >>>>>>>> a app. Oras, vc pode criar o crud todo em uma única tela, não há > >>>>>>>> necessidade > >>>>>>>> de criar modulo_list, modulo_insert_update, modulo_delete. Além do > >>>>>>>> mais, > >>>>>>>> como vc mesmo disse, vc usa singleton para trafegar informacoes. Com > >>>>>>>> um > >>>>>>>> unica tela, vc poderia usar um "data model" só. Bem mais simples, e > >>>>>>>> bem mais > >>>>>>>> rapido para o usuario pq todas as funcionalidades da tela já estão > >>>>>>>> ali. > > >>>>>>>> Além do mais, eu acho um pouco de preciosismo demais se preocupar > >>>>>>>> com cada kb carregado pelo usuário. > >>>>>>>> Como no exemplo, vc tem dois modulos de 30kb (dando total de 60kb) e > >>>>>>>> uma tela q com aplication vai dar, sei lá.. uns 70kb .. taca logo no > >>>>>>>> swf > >>>>>>>> principal! :) ... isso representa oq para o usuario, talvez 1s ou 2s > >>>>>>>> a mais > >>>>>>>> no carregamento?! Entao, será q vale todo o esforço de deixar um > >>>>>>>> modulo a > >>>>>>>> parte, esperar compilar os modulos (vc percebeu q a compilacao com > >>>>>>>> modulos é > >>>>>>>> mais lenta né) por causa de 10kb (menos de 1s de loading).... enfim, > >>>>>>>> como > >>>>>>>> falei noutro e-mail "tamanho de aplicacao nunca fora minha principal > >>>>>>>> preocupacao". Temos muitas outras coisas para se preocupar, como a > >>>>>>>> interface > >>>>>>>> com o usuario e a experiencia q ela proporciona ao usuario final. > > >>>>>>>> Enfim.. não sou chato nao :), talvez só nos preocupamos com coisas > >>>>>>>> diferentes. > > >>>>>>>> []s, fica na paz. > > >>>>>>>> Em 10 de maio de 2010 15:15, Helio Antonio Francisco Silva < > >>>>>>>> helio.afsi...@gmail.com> escreveu: > > >>>>>>>> A Mário não queria que voce me acha-se um chato e que como vim da > >>>>>>>>> escola do flash, tenho enraizado esse conceito de separar as coisas > >>>>>>>>> em SWF. > > >>>>>>>>> A ideia original eu coloquei, todo o CRUD de pedidos em uma so > >>>>>>>>> tela, mas como os states na minha opiniao sao ruins por que nao > >>>>>>>>> separam o > >>>>>>>>> codigo, fico meio ruim de trabalhar, tinha algumas telas que > >>>>>>>>> precisavam de > >>>>>>>>> componentes, classes e outras coisas que que em outras telas nao > >>>>>>>>> precisava, > >>>>>>>>> ai pensei po e se o cara so quiser inserir ? ele nao vai usar > >>>>>>>>> nenhuma outra > >>>>>>>>> operação que tem varias coisas. > > >>>>>>>>> Pensei eu, vo dividir cada operação em um "modulo " pra mim nada > >>>>>>>>> mais que um mero SWF 40k em vez de 150k bem ate entao ta carregando > >>>>>>>>> super > >>>>>>>>> rapido, quando for uma empresa vai cair no cache o swf e todos os > >>>>>>>>> proximos > >>>>>>>>> usuarios vao acessar bem mais rapido ( correto ), o codigo fica bem > >>>>>>>>> otimizado e agrupado. > > >>>>>>>>> Por faor, nao to questionando o que voce me falo, so to colocando a > >>>>>>>>> minha visão, o que eu quero e compartilhar e aprender pra poder > >>>>>>>>> fazer um > >>>>>>>>> projeto bacana. > > >>>>>>>>> Eu so fico mesmo cabreiro de fazer todas as funcionalidades num > >>>>>>>>> modulo por causa do codigo fica bem maior por que tenho de tratar > >>>>>>>>> varias > >>>>>>>>> particularidades. > > >>>>>>>>> O que você acha ? > > >>>>>>>>> 2010/5/10 Helio Antonio Francisco Silva <helio.afsi...@gmail.com> > > >>>>>>>>> To usando o SDK 3.2 e o FP 10.1 > > >>>>>>>>>> 2010/5/10 Mário Júnior <juninho...@gmail.com> > > >>>>>>>>>>> essa de rodar o gc antes de remover é novidade pra mim tb... > >>>>>>>>>>> interessante. > > >>>>>>>>>>> Qual sdk esta usando e qual a versao do player? > >>>>>>>>>>> O FP 10.1 release candidate ja está bem melhor nessa questao de > >>>>>>>>>>> memoria, vai ver as mudancas nessa parte ja comecaram. > > >>>>>>>>>>> []s > > >>>>>>>>>>> Em 10 de maio de 2010 13:58, Helio Antonio Francisco Silva < > >>>>>>>>>>> helio.afsi...@gmail.com> escreveu: > > >>>>>>>>>>> Valeu mario. > >>>>>>>>>>>> Eu pensei em desenvolver modulos para cada operação por que to > >>>>>>>>>>>> usando RSL e cada swf meu fica 40k a 60k , e pensei muito > >>>>>>>>>>>> usuario so querem > >>>>>>>>>>>> inserir, ou vizualizar por que importar funcoes de excluir, > >>>>>>>>>>>> editar e depmais > >>>>>>>>>>>> coisas ? > > >>>>>>>>>>>> essa foi a ideia inicial, mas vo repensar isso. > > >>>>>>>>>>>> Vou ver se pego o contato do pessoal da datasul. > > >>>>>>>>>>>> abração. e brigadao pelo esclarecimento. > > >>>>>>>>>>>> 2010/5/10 Mário Júnior <juninho...@gmail.com> > > >>>>>>>>>>>> Semana passada dei aulas sobre Modulos na minha turma de Flex no > >>>>>>>>>>>>> curso da e-Genial, vou colocar aqui algumas considerações (nada > >>>>>>>>>>>>> muito > >>>>>>>>>>>>> diferente doq ja foi dito) > > >>>>>>>>>>>>> a) procure contextualizar seus modulos em sub-sitemas. > >>>>>>>>>>>>> Por exemplo: Seu sistema principal tem área de "Estoque" e > >>>>>>>>>>>>> "Financeiro". Entao, crie dois modulos para cada área, onde > >>>>>>>>>>>>> TUDO oq for > >>>>>>>>>>>>> relativo a Estoque fique dentro de seu respectivo modulo, assim > >>>>>>>>>>>>> como no > >>>>>>>>>>>>> financeiro, relatorios, etc. > > >>>>>>>>>>>>> Obviamente q isso requer uma analise melhor do seu projeto como > >>>>>>>>>>>>> um todo. > > >>>>>>>>>>>>> b) Se um modulo for "exclusivo" daquela app, entao utilize a > >>>>>>>>>>>>> otimizacao. > > >>>>>>>>>>>>> c) Criar um modulo para cada operacao é um tiro no pé. Vc > >>>>>>>>>>>>> facilita a sua vida de programador (organizacao do codigo e > >>>>>>>>>>>>> tal) mas > >>>>>>>>>>>>> complica pro usuario ter q toda hora ficar carregando um swf a > >>>>>>>>>>>>> mais. > >>>>>>>>>>>>> Lembre-se q o ModuleLoader extends de SWFLoader, portanto > >>>>>>>>>>>>> carregar > >>>>>>>>>>>>> diferentes modulos para cada tela é totalmente desnecessário e > >>>>>>>>>>>>> muito mais > >>>>>>>>>>>>> pesado. > > >>>>>>>>>>>>> d) Para fazer comunicação de dados entre Modulos => App use > >>>>>>>>>>>>> parenteApplication. Ja entre Modulos => App => OutroModulo > >>>>>>>>>>>>> dispare eventos e > >>>>>>>>>>>>> faça seus modulos implementar uma interface em comum que será o > >>>>>>>>>>>>> acessor da > >>>>>>>>>>>>> Application poder acessar o modulo destinatario. > > >>>>>>>>>>>>> e) Nesse caso de comunicacao por eventos, use listeners com > >>>>>>>>>>>>> referencia fraca (weakReference=true). Também, sempre remova os > >>>>>>>>>>>>> listeners > >>>>>>>>>>>>> qnd puder. > > >>>>>>>>>>>>> f) Nao reaproveitar ModuleLoaders (isso é interessante). Usar > >>>>>>>>>>>>> um moduleLoader para cada Module é mais performatico doq > >>>>>>>>>>>>> reaproveitar o > >>>>>>>>>>>>> mesmo moduleLoader para carregar varios Modules (isso tb é um > >>>>>>>>>>>>> misterio :S). > >>>>>>>>>>>>> Obviamente q nao se esqueça de destrui-lo depois q nao precisar > >>>>>>>>>>>>> mais do > >>>>>>>>>>>>> modulo. > > >>>>>>>>>>>>> g) terminou de usar o module e matou o seu module loader, entao > >>>>>>>>>>>>> pede pro gc te dar uma força =D (faça a pesquisa q a gabi > >>>>>>>>>>>>> recomendou e veja > >>>>>>>>>>>>> as tecnicas para isso, incluindo a do LocalConnection q é um > >>>>>>>>>>>>> grande misterio > >>>>>>>>>>>>> =P) > > >>>>>>>>>>>>> Obviamente q tudo isso ainda nao irá resolver totalmente a > >>>>>>>>>>>>> questao, mas ajuda bastante. Recomendo a leitura do e-mail > >>>>>>>>>>>>> deste email > >>>>>>>>>>>>> (repare na data: > >>>>>>>>>>>>>http://groups.google.com.br/group/flexdev/browse_thread/thread/d177cf...) > >>>>>>>>>>>>> e tb o link q ele sugere no proprio email. > > >>>>>>>>>>>>> Outro documento importante sobre "Sub Applications" é esse, > >>>>>>>>>>>>> extremamente recomendado, onde é falado sobre o Marshal Plan: > >>>>>>>>>>>>>http://livedocs.adobe.com/flex/3/loading_applications.pdf > > >>>>>>>>>>>>> Vamos ver agora no FP 10.1 final como isso será tratado. Me > >>>>>>>>>>>>> parece q vi (senao me engano foi no proprio bug jira da adobe) > >>>>>>>>>>>>> q isso será > >>>>>>>>>>>>> totalmente resolvido... tomara. > > >>>>>>>>>>>>> Mas enfim, em dois grandes projetos q trabalhei com modulos, na > >>>>>>>>>>>>> boa, problemas de memoria era oq menos me preocupava. > > >>>>>>>>>>>>> []s > > >>>>>>>>>>>>> (Ps: Vi q esta desenvolvendo para a Totvs né? Recomendo vc > >>>>>>>>>>>>> conversar com a galera fera de Flex q fica em Joinville-SC - q > >>>>>>>>>>>>> ja > >>>>>>>>>>>>> trabalhavam na Datasul - eles podem te ajudar bastante. Procure > >>>>>>>>>>>>> pelo Arian, > >>>>>>>>>>>>> Diefrei e tem tb o Fabio Gol, mas esse ultimo acho q ja nao > >>>>>>>>>>>>> trabalha mais na > >>>>>>>>>>>>> Totvs. Tem muita gente boa la q pode te ajudar.) > > >>>>>>>>>>>>> Em 10 de maio de 2010 12:56, miso <miso...@gmail.com>escreveu: > > >>>>>>>>>>>>> Olha Helio, não se desespere, jajaja... > > >>>>>>>>>>>>>> Minha humilde recomendação, e que não faça seus módulos > >>>>>>>>>>>>>> dentro de um só projecto, ainda mais se tem vários módulos. > >>>>>>>>>>>>>> Porque, francamente, não faz muito sentido no caso do flex, a > >>>>>>>>>>>>>> distribuição de > >>>>>>>>>>>>>> peso e terrível, cai tudo sobre o aplicação principal e se > >>>>>>>>>>>>>> perde o conceito de distribuição de carga. > >>>>>>>>>>>>>> Posso apostar que sua aplicação principal está com um tamanho > >>>>>>>>>>>>>> enorme e seus módulos muito pequenos em comparação. > > >>>>>>>>>>>>>> A melhor jogada é: > >>>>>>>>>>>>>> - criar um projeto commons para as classes em comun > >>>>>>>>>>>>>> - agregar no build path do app principal o projeto commons > >>>>>>>>>>>>>> como RSL > >>>>>>>>>>>>>> - fazer cada modulo em um projeto separado, só dele, e setar > >>>>>>>>>>>>>> no build-path como 'external' o seu projeto commons > >>>>>>>>>>>>>> - a o facer o release final do seu sistema, gerar > >>>>>>>>>>>>>> um link report do seu app principal introduzindo > >>>>>>>>>>>>>> *-link-report=C:\report.xml > >>>>>>>>>>>>>> *no compiler > >>>>>>>>>>>>>> - e por ultimo, em cada modulo, agregar no compiler * > >>>>>>>>>>>>>> -load-externs=report.xml**. *(depois de copiar o xml gerado, > >>>>>>>>>>>>>> no root de cada projeto). Isto irá prevenir que cada módulo > >>>>>>>>>>>>>> recarga > >>>>>>>>>>>>>> as classes que já estão carregadas no aplicativo principal. > > >>>>>>>>>>>>>> como falou o @bruno, em módulos, cada caso e um caso... > > >>>>>>>>>>>>>> bom, tai... > > >>>>>>>>>>>>>> -- > >>>>>>>>>>>>>> La alegría se multiplica, cuando la dividimos > > >>>>>>>>>>>>>> -- > >>>>>>>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista > >>>>>>>>>>>>>> "flexdev" > >>>>>>>>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>>>>>>>> flexdev@googlegroups.com > >>>>>>>>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>>>>>>>> Mais opções estão disponíveis em > >>>>>>>>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>>>>>>>> -- > >>>>>>>>>>>>> Mario Junior > >>>>>>>>>>>>>http://blog.mariojunior.com/ > >>>>>>>>>>>>> @mariojunior > > >>>>>>>>>>>>> -- > >>>>>>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista > >>>>>>>>>>>>> "flexdev" > >>>>>>>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>>>>>>> flexdev@googlegroups.com > >>>>>>>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>>>>>>> Mais opções estão disponíveis em > >>>>>>>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>>>>>>> -- > >>>>>>>>>>>> Desenvolvedor Web > > >>>>>>>>>>>> -- > >>>>>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista > >>>>>>>>>>>> "flexdev" > >>>>>>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>>>>>> flexdev@googlegroups.com > >>>>>>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>>>>>> Mais opções estão disponíveis em > >>>>>>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>>>>>> -- > >>>>>>>>>>> Mario Junior > >>>>>>>>>>>http://blog.mariojunior.com/ > >>>>>>>>>>> @mariojunior > > >>>>>>>>>>> -- > >>>>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista > >>>>>>>>>>> "flexdev" > >>>>>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>>>>> flexdev@googlegroups.com > >>>>>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>>>>> Mais opções estão disponíveis em > >>>>>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>>>>> -- > >>>>>>>>>> Desenvolvedor Web > > >>>>>>>>> -- > >>>>>>>>> Desenvolvedor Web > > >>>>>>>>> -- > >>>>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>>> flexdev@googlegroups.com > >>>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>>> Mais opções estão disponíveis em > >>>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>>> -- > >>>>>>>> Mario Junior > >>>>>>>>http://blog.mariojunior.com/ > >>>>>>>> @mariojunior > > >>>>>>>> -- > >>>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>>> flexdev@googlegroups.com > >>>>>>>> Para sair da lista, envie um email em branco para > >>>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>>> Mais opções estão disponíveis em > >>>>>>>>http://groups.google.com/group/flexdev > > >>>>>>> -- > >>>>>>> Desenvolvedor Web > > >>>>>>> -- > >>>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>>> flexdev@googlegroups.com > >>>>>>> Para sair da lista, envie um email em branco para > >>>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>>> Mais opções estão disponíveis em > >>>>>>>http://groups.google.com/group/flexdev > > >>>>>> -- > >>>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>>>> Para enviar uma mensagem, envie um e-mail para > >>>>>> flexdev@googlegroups.com > >>>>>> Para sair da lista, envie um email em branco para > >>>>>> flexdev-unsubscr...@googlegroups.com > >>>>>> Mais opções estão disponíveis em > >>>>>>http://groups.google.com/group/flexdev > > >>>>> -- > >>>>> Desenvolvedor Web > > >>>>> -- > >>>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>>> Para enviar uma mensagem, envie um e-mail para > >>>>> flexdev@googlegroups.com > >>>>> Para sair da lista, envie um email em branco para > >>>>> flexdev-unsubscr...@googlegroups.com > >>>>> Mais opções estão disponíveis em > >>>>>http://groups.google.com/group/flexdev > > >>>> -- > >>>> Mario Junior > >>>>http://blog.mariojunior.com/ > >>>> @mariojunior > > >>>> -- > >>>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>>> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com > >>>> Para sair da lista, envie um email em branco para > >>>> flexdev-unsubscr...@googlegroups.com > >>>> Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev > > >>> -- > >>> Desenvolvedor Web > > >>> -- > >>> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >>> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com > >>> Para sair da lista, envie um email em branco para > >>> flexdev-unsubscr...@googlegroups.com > >>> Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev > > >> -- > >> Fábio Goll > >> Gtalk/Msn: fabiog...@gmail.com > >> Twitter: @fabiogoll > > >> -- > >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" > >> Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com > >> Para sair da lista, envie um email em branco para > >> flexdev-unsubscr...@googlegroups.com > >> Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev > > > -- > > Desenvolvedor Web > > -- > Desenvolvedor Web > > -- > Você recebeu esta mensagem porque está inscrito na lista "flexdev" > Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com > Para sair da lista, envie um email em branco para > flexdev-unsubscr...@googlegroups.com > Mais opções estão disponíveis emhttp://groups.google.com/group/flexdev -- Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com Para sair da lista, envie um email em branco para flexdev-unsubscr...@googlegroups.com Mais opções estão disponíveis em http://groups.google.com/group/flexdev