logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Jan 3

SharedObject com Flash Media Server

Escrito por Leonardo França em .NET, 1, 2.0, 4, 6, action, Actionscript, ActionScript 3, Actionscript 3.0, Actionscript3, Adobe, Air, Aplicativos, app, AR, BI, botão, browser, C#, class, cliente, código, Cookie, Curso, dados, demo, Download, err, event, EventListener, events, exemplo, Ferramenta, filter, flash, flash media, Flash Media Server, Flash Player, Flex, FMS, function, Geral, git, Google, handle, html, ide, IE, if, image, instalação, int, live, mg, O, on, Outros, Partilha, player, pt, referencia, RIA, Ria’s Geral, RTM, RTMP, S+S, server, servidor, swf, TAT, UI, uint, update, Ved, web, window @ 01 3rd, 2012 | via http://www.leonardofranca.com.br | Sem comentários
Leonardo França
? 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 »

SharedObject é um recurso que dar ao Flash Player a capacidade de salvar dados localmente para poder ser usado posteriormente em sua aplicação, a grosso modo é como um cookie. Com o Flash Media Server, foi introduzido a possibilidade de usar o SharedObject Remote, no qual os dados são salvos no servidor Flash Media Server e compartilhados para todas as instâncias de uma conexão entre o Flash Player e o Flash Media Server. Isso possibilita a criação de aplicativos em real time como Dashboards, chats e o que mais a imaginação permitir.

O uso do SharedObject Remote pode ser usado de duas maneiras em conjunto com o Adobe Flash Media Server.

  • Somente pelo lado cliente, através do Flash Player/AIR
  • Em conjunto com ActionScript Communication, linguagem de servidor do Flash Media Server

Vejamos o primeiro caso:

Através do lado cliente, através do Flash Player/AIR

Caso você não tenha conhecimento para usar a linguagem Server-side do Flash Media Server, é possível utilizar o SharedObject Remote somente pelo ActionScript 3.0. Vamos a um exemplo clássico sharedBall, onde o objetivo é compartilhar as posições da bolinha a atualizar nos outros clientes conectados a mesma instância.

  • Vá até o diretório de instalação do Flash Media Server e procure pela pasta “applications”, lá crie um diretório chamado “sharedBall”, dentro dele um arquivo chamado “main.asc”
  • Abra o main.asc no seu editor de textos de preferencia ou pelo próprio Flash e digite: trace(“sharedBall…”);
  • Vamos testar esse arquivo, abra o console do Flash Media Server, geralmente fica localizado no diretorio de instalação/webrrot/swfs. Você pode abrir pelo browser ou o swf diretamente.
  • Clique no botão “View Applications” e em seguida procure o nome “sharedBall” no combobox logo no canto inferior esquerdo onde está escrito “New Instance…”
  • Selecione “sharedBall” e deveremos ter na aba Live Log algo como na imagem abaixo:

  • No Flash, criei uma bola com as ferramentas de desenho e converti para MovieClip dando o nome de “mc_ball”.
  • Estamos prontos para começar a integração entre o Flash e o Flash Media Server. Crie um layer para o ActionScript e abra o editor apertando F9 ou “Window->Actions”
  • Nosso código começa com a conexão com o servidor Flash Media Server
PLAIN TEXT
ACTIONSCRIPT3:

  1. import flash.net.NetConnection;
  2. import flash.events.NetStatusEvent;
  3. var nc:NetConnection;
  4. function init():void
  5. nc = new NetConnection();
  6. nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  7. nc.connect(“rtmp://localhost/sharedBall”);
  8. function handlerNetStatus(evt:NetStatusEvent):void
  9. trace(evt.info.code);
  10. init();

Feito isso, podemos testar o swf apertando Ctrl+Enter, se tudo correr bem, deveremos ter a seguinte mensagem no output do Flash:

NetConnection.Connect.Success

Com a conexão feita, podemos instanciar o nosso SharedObject Remote para compartilhar as posições de x e y da bolinha.

PLAIN TEXT
ACTIONSCRIPT3:

  1. if(evt.info.code == “NetConnection.Connect.Success”)
  2. so = SharedObject.getRemote(“so”,nc.uri,false);
  3. so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  4. so.addEventListener(SyncEvent.SYNC, handlerSync);
  5. so.connect(nc);

O handlerSync é responsável por atualizar os dados de x e y pegaremos do SharedObject Remote:

PLAIN TEXT
ACTIONSCRIPT3:

  1. function handlerSync(evt:SyncEvent):void
  2. mc_ball.x = so.data.x;
  3. mc_ball.y = so.data.y;

Daremos a opção de ao clicar na bolinha, que ela possa ser arrastável, em seguida atualizaremos as posições de x e y no SharedObject Remote:

PLAIN TEXT
ACTIONSCRIPT3:

  1. mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
  2. mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
  3. function handlerSharedBall(evt:MouseEvent):void
  4. this.addEventListener(Event.ENTER_FRAME, update);
  5. mc_ball.startDrag();
  6. function handlerSharedBallOut(evt:MouseEvent):void
  7. mc_ball.stopDrag();
  8. function update(evt:Event=null):void
  9. so.setProperty(“x”,mc_ball.x);
  10. so.setProperty(“y”,mc_ball.y);

Segue o código completo:

PLAIN TEXT
ACTIONSCRIPT3:

  1. import flash.net.NetConnection;
  2. import flash.events.NetStatusEvent;
  3. import flash.net.SharedObject;
  4. import flash.events.SyncEvent;
  5. import flash.events.MouseEvent;
  6. import flash.events.Event;
  7. var nc:NetConnection;
  8. var so:SharedObject;
  9. function init():void
  10. nc = new NetConnection();
  11. nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  12. nc.connect(“rtmp://localhost/sharedBall”);
  13. function handlerNetStatus(evt:NetStatusEvent):void
  14. {
  15. trace(evt.info.code);
  16. if(evt.info.code == “NetConnection.Connect.Success”)
  17. so = SharedObject.getRemote(“so”,nc.uri,false);
  18. so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  19. so.addEventListener(SyncEvent.SYNC, handlerSync);
  20. so.connect(nc);
  21. }
  22. function handlerSync(evt:SyncEvent):void
  23. mc_ball.x = so.data.x;
  24. mc_ball.y = so.data.y;
  25. mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
  26. mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
  27. function handlerSharedBall(evt:MouseEvent):void
  28. this.addEventListener(Event.ENTER_FRAME, update);
  29. mc_ball.startDrag();
  30. function handlerSharedBallOut(evt:MouseEvent):void
  31. mc_ball.stopDrag();
  32. function update(evt:Event=null):void
  33. so.setProperty(“x”,mc_ball.x);
  34. so.setProperty(“y”,mc_ball.y);
  35. init();

Veja uma demostração em funcionamento:

Download sharedBall

Out 28

Html5 – Edição de conteúdo e Web Storage (Exemplo)

Escrito por DClick Team em 1, 2.0, 6, api, AR, blog, browser, C#, carregar, cliente, configuração, Cookie, Design, exemplo, Exemplos, Flex, for, Formação, html, html 5, html5, IE, if, int, novidade, Novidades, O, offline, on, Pessoal, RIA, Ria’s Geral, S+S, Sem categoria, Sun, TAT, Twitter, UI, uint, web @ 10 28th, 2011 | 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!

Como Html 5 é algo novo para mim e acredito que para muita gente que visita o blog, os meus exemplos irão se limitar a coisas simples, mostrando novidades básicas. No exemplo do post de hoje vou falar sobre duas novidades, a edição de conteúdo e o Web Storage.

Your browser does not support iframes.

Edição de conteúdo nada mais é do que colocar o Html da sua aplicação em modo de design, deixando que o usuário final possa editá-lo como um simples editor de texto, porém sem conhecer nada sobre Html. Essa funcionalidade parece ser algo inútil a primeira vista, porém ela pode se tornar poderosa se formos discutir sobre aplicações html5 offline.

Web Storage tem a função de persistir uma informação dentro de um escopo definido, com um espaço de armazenamento maior do que um cookie (bem maior), e que pudesse ser acessível em qualquer página a qualquer momento sem a necessidade de carregar essa informação de página por página. Essa API é dividida em 2 itens, sessionStorage e localStorage.

sessionStorage
Esse item da API serve para armazenar informação na sessão do cliente que está acessando sua aplicação. É interessante utilizar esse tipo de storage quando o usuário tem informações específicas para a sessão como por exemplo, você deseja abrir 2 janelas da sua aplicação e em uma janela fazer a configuração A e na segunda janela, fazer a configuração B sem que elas tenham interferência uma na outra. Esse tipo de storage também não é persistido, ou seja, quando a sessão fechar, todas as informações são perdidas

localStorage
Esse item da API serve para manter uma informação guardada por tempo indeterminado, ou seja, se o usuário fechar o browser e desligar a máquina e no dia seguinte acessar sua aplicação, ela poderá recuperar qualquer informação que tenha sido armazenada no storage. Para o pessoal que conhece Flex, essa função é idêntica ao SharedObject, pelo pouco que pude testar.

Utilização
A api é bem simples, todo armazenamento é baseado em CHAVE=VALOR e agora vou comentar sobre 3 métodos básicos para sua utilização:

1. setItem(key, value)
Utilizado para adicionar um item ao storage.
localStorage.setItem(‘nome’, ‘DClick’);

2. getItem(key)
Utilizado para recuperar o valor de uma key.
alert(localStorage.getItem(‘nome’)); //resultado ‘DClick’

3. removeItem(key)
Utilizado para deletar o registro referente a key.
localStorage.remoteItem(‘nome’);

Gostaria de ressaltar que os conceitos mostrados aqui são bem simples, apenas como algo introdutório ao assunto. Espero que estejam gostando!

Mai 26

Salvar tamanho e posição das colunas em um DataGrid

Escrito por SamuelFacchinello em 1, 4, 6, Adobe Flex, AR, blog, Blogs, botão, C#, cliente, código, código fonte, Cookie, DataGrid, Dica, Dicas, flash, Flex, fonte, Google, IE, if, mg, O, on, player, problema, RIA, Ria’s Geral, S+S, tag, Tema, Twitter, UI, web @ 05 26th, 2011 | via http://desenvolvendoemflex.blogspot.com/ | Sem comentários
SamuelFacchinello
? 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 »

Hoje surgiu um problema aqui na @PontoSistemas, onde teríamos que salvar a posição e o tamanho da coluna de acordo com o que o cliente preferir, como cada pessoa organiza a tela de um jeito diferente. Tudo isso porque toda vez que o DataGrid é construído novamente, ele volta ao estado inicial.

A idéia:
Ao organizar ou alterar os tamanhos das colunas de um DataGrid/AdvancedDataGrid salve as posições e os tamanhos das colunas.

A solução:
Altere o tamanho e/ou a ordem das colunas, e recarregue a página. Elas irão voltar na mesma ordem e tamanho que você as deixou.

Clique com o botão direito em cima do DataGrid, depois em “view source” para visualizar o código fonte.

Da maneira que foi implementado, as definições da posição e do tamanho das colunas são salvas na memória do FlashPlayer (como se fosse os cookies das páginas web), ao limpar esse “cookie” as configurações voltam ao estado original.

Por hoje é isso. Em breve novas dicas.

Comentem!!!

Set 30

Estatísticas mais agradáveis

Escrito por Silva Developer em 1, 4, 6, AR, arte, auto, bar, BI, blog, Blogs, browser, class, Cookie, dados, Design, estatísticas, facebook, flash, for, Formação, fundo, Google, Gráfico, ide, IE, if, image, iphone, mg, novidade, Novidades, O, on, Plugin, pt, RIA, Ria’s Geral, screen, site, TAT, Twitter, UI, Wordpress, XP @ 09 30th, 2010 | via http://silvadeveloper.wordpress.com | Sem comentários
Silva Developer
? 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 »

Se calhar reparou numa alteração recente aos seus gráficos de estatísticas. O que aconteceu foi que abandonamos o Flash em detrimento de uma biblioteca mais robusta de gráficos, chamada Flot. Se não notou, vá já ver. Agora já pode examinar todos dos novos gráficos em browsers modernos, incluindo os de dispositivos móveis como o iPhone e o  iPad. Como poderá ver, actualizamos os diagramas para usarem barras em vez de pontos e linhas. Também redesenhamos a página de estatísticas para a tornar mais agradável.

Cada módulo pode ser aberto e fechado, movido, ou ocultado. Se não quiser ver um módulo, minimize-o com um clique ou use as Opções para mantê-lo longe da sua vista. Construa e examine a sua página de estatísticas da maneira que mais lhe agradar.

Ao passar com o rato por cima de cada barra no diagrama, a sua cor muda e expõe um pequena janela que lhe dá mais informação sobre esses dados. Se o diagrama mostrar dados diários, os sábados e domingos têm um fundo cinza leve para facilitar a identificação de comportamentos semanais. Por baixo do gráfico, notará uma nova área, chamada “fortune cookies” onde destacamos estatísticas cruciais.

Neste redesenho escolhemos gráficos de barras porque na realidade o fim de um dia e o começo do outro não deveriam ser unidos. Cada dia parte do zero e um gráfico de barras adapta-se muito melhor a tipo de dados. Esperamos que esteja de acordo, assim que se tenha habituado à modificação.

Nesta primeira fase concentramo-nos na página principal. Isto vai-nos permitir obter as vossas reacções àquilo que deveríamos mudar. Só mencionamos aqui algumas novidades do redesenho, pelo que vá navegando pelas suas estatísticas para se habituar à sensação. À medida que formos recolhendo opiniões, iremos também aplicar o redesenho a outras páginas de estatísticas.

Os sites que usam o nosso plug-in em blogs auto-alojados verão uma actualização assim que fizermos uma nova iteração deste redesenho.

Abr 25

Usando Shared Objects no Flex

Escrito por Luis Messias em .NET, 1, 3d, 4, 6, action, Actionscript, Adobe, api, app, AR, back, BI, Bindable, blog, browser, busca, camp, class, classe, cliente, collection, comunicação, Cookie, dados, DataGrid, DataProvider, Desenvolvedor, desenvolvedores, Dica, email, err, erro, error, event, events, exemplo, Exemplos, flash, Flex, for, function, gc, Geral, html, ide, IE, if, int, itemRenderer, label, layout, lista, mg, MXML, NaN, O, on, padrão, pt, redeRIA, RIA, Ria’s Geral, RoR, servidor, site, string, tag, TAT, Tema, TextInput, UI, uint, update, utils, ValidationResultEvent, Ved, vs, XML, XP, zend @ 04 25th, 2010 | via http://blog.luismessias.com | Sem comentários
Luis Messias
? 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 »



Funcionalidade muito utilizada em sites, a qual é o armazenamento de dados no cookie do browser, esta função é muito utilizada para salvar as preferências de usuários como: login, email, ultimo acesso entre outras informações.
No Flex isso também é possível podendo ser até mais poderoso do que as formas atuais, para fazer isso você deve utilizar o SharedObject.

A função do Shared Objects (ShO) é armazenar dados localmente, funcionando como um cookies do browser. Assim você pode armazenar dados e chamá-los durante a sessão atual ou em outra futura sessão. Contudo estes dados não podem ser acessados por outra aplicação Flex mais sim apenas pela aplicação criadora.

Shared Objects vs Cookies

É comum desenvolvedores confundirem ShO com cookies.
Os cookies que aderem ao padrão RFC 2109 geralmente têm as seguintes características:

• Eles podem expirar, e geralmente é feito isso no final da sessão por default.
• Podem ser desabilitados pelos clientes.
• Há um limite de 300 cookies sendo no Maximo 20 por site.
• Um cookie tem o espaço de armazenamento de 4 kb.
• Há a possibilidade de serem considerados como arquivos maliciosos.
• Há uma comunicação entre cliente e servidor para armazenamento dos dados.

Shared Object tem as seguintes características:

• Eles não expiram por default.
• Por padrão o seu limite de armazenamento é de 100 kb.
• Eles podem armazenar dados simples como: String, Date, Array ….
• A aplicação pode indicar locais específicos para o armazenamento dos dados.
• Não há transmissão e comunicação entre o cliente e o servidor para a busca e armazenamento dos dados.

Com a classe SharedObject é possível realizar qualquer manipulação dos dados que ficarão armazenados no cliente. Esta possui os seguintes métodos:

• clear() – Limpa permanentemente todos os dados contidos no Shared Object.
• flush() – Grava os dados do ShO no cliente.
• getLocal() – Retorna uma instancia do ShO no cliente, caso não exista o mesmo cria uma.
• getSize() – Retorna o tamanho em Bytes do ShO no cliente. Uma observação o tamanho default é de 100kb, contudo isto pode ser alterado para mais.

Na prática:
Criando uma lista de contatos.

Criar uma classe chamada ShareObjectHelper a qual irá realizar a manipulação dos dados do Shared Object, tais como: incluir, remover e listar.
Esta é uma classe bem simples no qual será usado um ArrayCollection para armazenar todos os dados que armazenarão dos contatos que o usuário incluiu.

package {
	import mx.collections.ArrayCollection;
	import flash.net.SharedObject;
 
	public class SharedObjectHelper {
 
		private var _sharedObject:SharedObject;
		private var _dpSharedObject:ArrayCollection;
		private var _nomeArquivoSharedObject:String;
 
		/**
		 * Construtor
		 */
		public function SharedObjectHelper(valor:String) {
			inicializaHelper(valor);
		}
 
		/**
		 * @private
		 * Responsavel por recuperar a instancia do SharedObject baseado no
		 * parametro.
		 *
		 */
		private function inicializaHelper(valor:String):void {
			_dpSharedObject = new ArrayCollection();
			_nomeArquivoSharedObject = valor;
			_sharedObject = SharedObject.getLocal(_nomeArquivoSharedObject);
 
			if (getObjects()) {
				_dpSharedObject = getObjects();
			}
		}
 
		/**
		 * Retorna todos um array de dados que está armazendo no SharedObject
		 * @return ArrayCollection
		 */
		public function getObjects():ArrayCollection {
			return _sharedObject.data[_nomeArquivoSharedObject];
		}
 
		/**
		 * Adiciona um dado ao array de dados.
		 * @param Object
		 */
		public function addObject(o:Object):void {
			_dpSharedObject.addItem(o);
			updateSharedObjects();
		}
 
		/**
		 * @private
		 * Vincula o array de dados a um SharedObject.
		 */
		private function updateSharedObjects():void {
			_sharedObject.data[_nomeArquivoSharedObject] = _dpSharedObject;
			_sharedObject.flush();
		}
	}
 
}
<?xml version="1.0"?>
<mx:Application xmlns:local="*" xmlns:mx="http://www.adobe.com/2006/mxml"
				creationComplete="init()" backgroundColor="#ffffff"
				layout="vertical" 
				backgroundGradientAlphas="[1.0, 1.0]" 
				backgroundGradientColors="[#D3D3D3, #E7E7E7]" viewSourceURL="srcview/index.html">
	<mx:Script>
		<![CDATA[
			import mx.events.ValidationResultEvent;
			import mx.validators.ValidationResult;
			import mx.collections.ArrayCollection;
			import mx.utils.ObjectUtil;
			import flash.net.SharedObject;
 
			[Bindable]
			public var dpContatos:ArrayCollection = new ArrayCollection();
 
			public var shoHelper:SharedObjectHelper;
 
			/**
			 * @private
			 * Inicializa a classe SharedObjectHelper e ja cria/recupera
			 * instancia de um objeto SharedObject.
			 */
 
 
			private function init():void {
				shoHelper = new SharedObjectHelper("contatos");
 
				if (shoHelper.getObjects()) {
					dpContatos = shoHelper.getObjects();
				}
 
			}
 
			/**
			 * @private
			 * Adiciona um contato na lista de contatos e executa o addObject da classe
			 * sharedObjectHelper.
			 */
			private function addContato():void {
				if(valNome.validate().type == ValidationResultEvent.VALID){
					/* Cria um objeto dinamico com os atributos dos fomularios */
					var objInsert:Object = {nome: txtNome.text, apelido: txtApelido.text};
					shoHelper.addObject(objInsert);
 
					dpContatos = shoHelper.getObjects();
 
					/* Limpa os campos do formularios */
					txtNome.text = '';
					txtApelido.text = '';
				}
			}
 
			/**
			 * @private
			 * Remove um contato do DataGrid e da lista de contatos do SharedObejct
			 */
			public function removeContato():void {
				if (dgContatos.selectedIndex > -1) {
					dpContatos.removeItemAt(dgContatos.selectedIndex);
				}
			}
 
		]]>
	</mx:Script>
	<mx:StringValidator id="valNome" source="{txtNome}" property="text" 
		required="true" requiredFieldError="Campo Obrigatório"
		triggerEvent="''"/>
 
	<mx:Panel title="Contatos" layout="vertical" horizontalAlign="center" width="400">
 
 
		<mx:Form width="100%">
			<mx:FormItem label="Nome" width="100%">
				<mx:TextInput id="txtNome" width="100%"/>
			</mx:FormItem>
			<mx:FormItem label="Apelido" width="100%">
				<mx:TextInput id="txtApelido" width="100%"/>
			</mx:FormItem>
			<mx:Button id="b2" label="Salvar" click="addContato()"/>
		</mx:Form>
 
		<mx:DataGrid id="dgContatos" dataProvider="{dpContatos}" width="100%">
			<mx:columns>
				<mx:DataGridColumn headerText="Nome" dataField="nome"/>
				<mx:DataGridColumn headerText="Apelido" dataField="apelido"/>
				<mx:DataGridColumn headerText="Opções" width="80" textAlign="center">
					<mx:itemRenderer>
						<mx:Component>
							<mx:Button label="Excluir" width="8" click="outerDocument.removeContato()"/>
						</mx:Component>
					</mx:itemRenderer>
				</mx:DataGridColumn>
			</mx:columns>
		</mx:DataGrid>
	</mx:Panel>
 
</mx:Application>
?

Abr 23

Como iniciar Programação em ASP.NET

Escrito por Luis Messias em .NET, 1, 2009, 4, 6, action, Ajax, api, app, AR, Artigo, Asp.Net, back, blog, botão, browser, bug, C#, carregar, class, cliente, código, control, Cookie, css, dados, Debug, demo, desempenho, Desenvolvimento, Desenvolvimento Web, err, Ferramenta, for, Formação, framework, html, IE, if, image, int, Java, Javascript, LOB, Mac, mg, Microsoft, NaN, O, on, PHP, processo, programação, pt, redeRIA, refresh, RIA, Ria’s Geral, server, servidor, state, tag, TAT, Tecnologia, UI, Visual Studio, vs, web, XML, XP @ 04 23rd, 2010 | via http://blog.luismessias.com | Sem comentários
Luis Messias
? 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 »



O que é?
Feliz  cada vez mais nos estamos a virar mais para o “mundo” da WEB e para a CLOUD.
A prever isso a Microsoft lançou já há alguns anos o ASP.NET (Active Server Pages), que ao contrário do que se diz não é uma linguagem de programação mas sim uma Framework para desenvolvimento WEB.
Como é uma Framework assente na Framework .NET podemos usar para programar as linguagens C# e VB.NET. Em ASP.NET criamos páginas (WEB Forms) dinâmicas em que o código é corrido no servidor como é o caso de outras tecnologias (PHP, JSP).

Pressupostos:
Não que seja imperativo mas para sermos bons programadores de WEB, antes de sequer abrir o Visual Studio, temos de entender o mundo que vai por trás do browser.
Temos de entender o protocolo HTTP, Request / Response, ciclos de vida de uma página, diferença entre cliente e servidor, State Management, PostBack, JavaScript, CSS e claro HTML.
Não irei falar sobre tudo isto, apenas do que está relacionado com o ASP.NET, mas é bom sabermos o que está por detrás de cada ação que fazemos no browser

Cliente VS Servidor:
Como já referi uma Web Form ASP.NET é executada do lado do servidor, o que significa que cada vez que pedimos (Request) essa página ela é executada no servidor e posteriormente devolvida (Response) para o browser em HTML, esta operação ocupa largura de banda e tempo, logo se o podermos evitar ou então não enviar a página toda melhor (Partial PostBack (AJAX)), podemos concretizar isso usando JavaScript, que é uma linguagem que corre directamente no Browser (Cliente) ou AJAX (Javascript assíncrono e XML).
Não significa que no cliente é melhor ou que no servidor é mais seguro, o grande desafio das WebForms é a fusão entre código do lado do cliente e servidor, tornando assim a página rápida e menos pesada.

PostBack:
O PostBack é o nome que se dá à operação de Request e Response, ou seja, quando uma página inteira e o seu conteúdo são enviados para o servidor, processados e devolvidos para o browser.
Sabem quando fazem refresh a uma página ou carregam num botão e o browser fica branco e depois aparecem os conteúdos? É isso um PostBack.
Mais tarde falaremos da propriedade Page.IsPostBack do ASP.NET.
Felizmente existem formas de contornar isso graças ao AJAX que permite que sejam só enviados pedaços da página e de modo assíncrono o que permite continuar a trabalhar sem o browser bloquear.

Ciclos de vida de uma página:
Falaremos aqui do mais importante e utilizado o Load.
É a melhor altura para fazer acções devido ao facto de que os controlos já estão todos carregados, o viewstate disponível e ainda não é tarde para fazer alterações pois não chegou ao Render que é quando o HTML da página já está todo desenhado.

State Management:
Entende-se por State Management a capacidade do ASP.NET poder guardar informação entre PostBacks da mesma ou de outras (várias) páginas.
Existem várias opções relacionadas com desempenho e capacidade, cliente ou servidor:

Do lado do cliente:

View State: o view state “vive” nas páginas, o viewstate é criado a partir de cada controlo que adicionamos á nossa página para, entre postbacks, poder manter o seu valor.

Ex: Temos uma caixa de texto na página e ao carregar num botão a página faz postback mas o valor permanece na caixa de texto.
Vantagens: Simples, não requer implementação
Desvantagens: Não é recomendado para guardar muita informação pois a página ficará lenta.

Hidden Fields: Uma espécie de variável global na própria página
Vantagens: Fácil implementação
Desvantagens: Pouco seguro (ao ver o source da página está lá o valor) e claro pesa na página

Cookies: Todos já ouvimos este termo, são pequenos ficheiros guardados no lado do cliente para poupar viagens desnecessárias ao servidor.
Vantagens: Pode ser configurado o tempo de expiração e simples implementação
Desvantagens: Pouca capacidade de armazenamento, cliente tem de aceitar cookies, pouco seguro pois o cliente pode alterar as informações.

Do lado do Servidor:

Application State: Informação guardada no servidor disponível em todas as páginas e utilizadores até que o processo da aplicação termine.
Vantagens: Variáveis globais, fácil implementação.
Desvantagens: Ocupa memória no servidor.

Session State: Informação guardada no servidor disponível em todas as páginas enquanto a sessão do utilizador estiver disponível (mesmo Browser), tem limite de tempo de inactividade.
Vantagens: Variáveis globais, fácil implementação.
Desvantagens: Ocupa memória no servidor.

Ferramentas úteis para ajudar no desenvolvimento e debug:
Firebug: http://getfirebug.com/
Fiddler: http://www.fiddler2.com/fiddler2/

Cumpz

Nov 23

SharedObjects – Cookie para sua app flex

Escrito por Janderson Cardoso em Adobe Flex, Cookie, Dicas, Flex, SharedOjects @ 11 23rd, 2009 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? 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 »

Se você procura uma maneira de usar Cookie no flex o SharedObjects pode ser útil, para quem não sabe o SharedObjects é muito fácil de usar e possui essas Características:

  1. Assim como o Cookie é gerado um arquivo na máquina do usuário final;

  2. Tem extensão .sol;

  3. Não é Cookie… não adianta “limpar o Cookie”(sem piadinhas ao ler essa frase :) ) do navegador… para limpar tem que ser programado e inserido na aplicação flex… no caso usando o método clear() do objeto instanciado como SharedObjects;

  4. Assim como Cookie o usuário final pode bloquear o SharedObjects ou limitar seu tamanho;

  5. pode ser guardar Objetos complexo nesse arquivo…só não pode ter métodos.

Vou mostrar um exemplo simples de como usar essa classe, a idéia é fazer uma espécie de Profiles no Flex, o usuário tem 3 states e o último que ele se encontrava antes de fechar o navegador quero que seja aberto. Vamos ao simples código:

Application.mxml

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute” width=“400″ height=“300″
  3.     creationComplete=“init()” viewSourceURL=“srcview/index.html”>
  4.     <mx:states>
  5.         <mx:State name=“state2″>
  6.             <mx:SetProperty target=“{button1}” name=“label” value=“State Principal”/>
  7.             <mx:SetProperty target=“{panel}” name=“title” value=“State 2″/>
  8.             <mx:SetProperty target=“{button2}” name=“x” value=“283″/>
  9.             <mx:SetProperty target=“{button2}” name=“y” value=“54″/>
  10.             <mx:SetEventHandler target=“{button1}” name=“click” handler=“mudaState(”)”/>
  11.         </mx:State>
  12.         <mx:State name=“state3″>
  13.             <mx:SetProperty target=“{button2}” name=“label” value=“State Principal”/>
  14.             <mx:SetProperty target=“{button2}” name=“x” value=“241″/>
  15.             <mx:SetProperty target=“{panel}” name=“title” value=“State 3″/>
  16.             <mx:SetProperty target=“{button2}” name=“y” value=“54″/>
  17.             <mx:SetEventHandler target=“{button2}” name=“click” handler=“mudaState(”)”/>
  18.         </mx:State>
  19.     </mx:states>
  20.     <mx :P anel x=“10″ y=“86″ width=“380″ height=“120″ layout=“absolute” title=“State Principal” id=“panel”>
  21.         <mx:Button label=“State 2″ x=“10″ y=“54″ id=“button1″ click=“mudaState(‘state2′)”/>
  22.         <mx:Button label=“State 3″ x=“283″ height=“22″ y=“54″ id=“button2″ click=“mudaState(‘state3′)”/>
  23.     </mx :P anel>
  24.    
  25.     <mx:Script>
  26.         <![CDATA[
  27.            
  28.             public var profile:SharedObject;
  29.            
  30.             private function init():void{
  31.                 profile = SharedObject.getLocal("profile");
  32.                 if (profile.data.state != undefined){
  33.                     mudaState(profile.data.state);
  34.                 }else {
  35.                     mudaState('');
  36.                 }   
  37.             }
  38.            
  39.             private function mudaState(state:String):void{
  40.                 this.currentState = state;
  41.                 profile.data.state = state;    
  42.             }
  43.            
  44.             /*Função não usada é só um exemplo para limpar o
  45.              nosso SharedObject*/
  46.             private function limparProfile():void{
  47.                 profile.clear();               
  48.             }
  49.            
  50.         ]]>
  51.     </mx:Script>
  52.    
  53. </mx:Application>

viu como é simples!

PLAIN TEXT
CODE:

  1. profile = SharedObject.getLocal(“profile”);

é onde atribuímos o valor do objeto profile, SharedObject.getLocal procura se existe um arquivo com esse nome e pega os valores armazenados no mesmo, se não existe neste momento é criado.

O resto é bem didático vamos nos poupar..rs olha esse exemplo funcionando logo abaixo:

faz um teste aí..muda de state Principal para 2 ou 3…fecha o navegador..acesse novamente esse post e você vai perceber que vai abrir no state que você estava por último ;)

Então fica aí uma dica de uso do SharedObject ;)

Cumps.

|

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 2755 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