<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Sourceware Blog</title>
	
	<link>http://srcware.com</link>
	<description>As mais recentes novidades tecnológicas. Download de software Grátis. Desenvolvimento de Web Sites. Desenvolvimento de Software. Software Open Source e Freeware. Novidades sobre Distribuições Linux e outros Sistemas Operativos. Dicas e Tutoriais.</description>
	<lastBuildDate>Tue, 09 Feb 2010 13:49:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/sourceware" /><feedburner:info uri="sourceware" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>sourceware</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Speccy v1.00.089 Beta – Informações do Sistema</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/lCcfxr5HDsg/</link>
		<comments>http://srcware.com/2010/01/speccy-v1-00-089-beta-informacoes-do-sistema/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 23:47:48 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=958</guid>
		<description><![CDATA[A Piriform, criadora de aplicações tão conhecidas como, CCleaner, Defraggler e Recuva acabou de lançar mais uma versão Beta da sua nova  aplicação de seu nome Speccy.
Esta aplicação permite visualizar quais os componentes que estão presentes no computador, bem como algumas informações importantes sobre esses componentes.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/ubuntu-9-10-karmic-koala-beta/' rel='bookmark' title='Permanent Link: Ubuntu 9.10 Karmic Koala Beta'>Ubuntu 9.10 Karmic Koala Beta</a></li>
<li><a href='http://srcware.com/2009/11/abobe-flash-player-10-1-beta-com-aceleracao-por-gpu/' rel='bookmark' title='Permanent Link: Abobe Flash Player 10.1 beta com aceleração por GPU'>Abobe Flash Player 10.1 beta com aceleração por GPU</a></li>
<li><a href='http://srcware.com/2009/12/virtualbox-3-1-0-virtualizacao-de-sistemas-operativos/' rel='bookmark' title='Permanent Link: VirtualBox 3.1.0 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.1.0 &#8211; Virtualização de Sistemas Operativos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A Piriform, criadora de ferramentas tão conhecidas como, CCleaner, Defraggler e Recuva acabou de lançar mais uma versão Beta da sua nova  ferramenta de informações do sistema, de seu nome Speccy.</p>
<p><img class="aligncenter size-full wp-image-960" title="Speccy" src="http://srcware.com/wp-content/uploads/2010/01/Speccy2.jpg" alt="" width="458" height="295" /></p>
<p>Esta ferramenta permite visualizar quais os componentes que estão presentes no computador, bem como algumas informações importantes sobre esses componentes.</p>
<p><span id="more-958"></span></p>
<p><img class="aligncenter size-large wp-image-961" title="Speccy - Informações do CPU" src="http://srcware.com/wp-content/uploads/2010/01/Speccy-550x353.jpg" alt="" width="550" height="353" /></p>
<p>O Speccy disponibiliza informações como:</p>
<ul>
<li>Marca, Modelo, Velocidades e Temperatura do processador</li>
<li>Velocidade e quantidade de RAM</li>
<li>Tamanho, velocidade e Temperatura do disco rígido</li>
<li>Placa gráfica e respectiva Temperatura</li>
<li>Sistema Operativo</li>
</ul>
<p>Para além destas informações, ainda é possível visualizar gráficos em tempo real da variação das Temperaturas e Velocidades de diversos componentes como a Placa Gráfica, CPU e Disco Rígido.</p>
<p><a title="Piriform Homepage" href="http://www.piriform.com/" target="_blank">Piriform Homepage</a></p>
<p><a title="Download Speccy v1.00.089 Beta" href="http://www.piriform.com/media/10107/spsetup100.exe" target="_blank">Download Speccy v1.00.089 Beta</a></p>
<p><a title="Download Speccy v1.00.089 Beta (Versão Portátil)" href="http://www.piriform.com/media/10110/spsetup100.zip" target="_blank">Download Speccy v1.00.089 Beta (Versão Portátil)</a></p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/ubuntu-9-10-karmic-koala-beta/' rel='bookmark' title='Permanent Link: Ubuntu 9.10 Karmic Koala Beta'>Ubuntu 9.10 Karmic Koala Beta</a></li>
<li><a href='http://srcware.com/2009/11/abobe-flash-player-10-1-beta-com-aceleracao-por-gpu/' rel='bookmark' title='Permanent Link: Abobe Flash Player 10.1 beta com aceleração por GPU'>Abobe Flash Player 10.1 beta com aceleração por GPU</a></li>
<li><a href='http://srcware.com/2009/12/virtualbox-3-1-0-virtualizacao-de-sistemas-operativos/' rel='bookmark' title='Permanent Link: VirtualBox 3.1.0 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.1.0 &#8211; Virtualização de Sistemas Operativos</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/JdhpOdqnY6_BpMhvsOC-QVCAMo8/0/da"><img src="http://feedads.g.doubleclick.net/~a/JdhpOdqnY6_BpMhvsOC-QVCAMo8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JdhpOdqnY6_BpMhvsOC-QVCAMo8/1/da"><img src="http://feedads.g.doubleclick.net/~a/JdhpOdqnY6_BpMhvsOC-QVCAMo8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=lCcfxr5HDsg:8ZGopaafyq4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=lCcfxr5HDsg:8ZGopaafyq4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=lCcfxr5HDsg:8ZGopaafyq4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=lCcfxr5HDsg:8ZGopaafyq4:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/lCcfxr5HDsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2010/01/speccy-v1-00-089-beta-informacoes-do-sistema/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2010/01/speccy-v1-00-089-beta-informacoes-do-sistema/</feedburner:origLink></item>
		<item>
		<title>HTML 5 – Introdução à Tag Canvas</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/W2eC17D2I6I/</link>
		<comments>http://srcware.com/2009/12/html-5-introducao-a-tag-canvas/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 20:31:18 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=377</guid>
		<description><![CDATA[O HTML5 é o próximo grande passo da Web, que vai permitir criar uma experiência mais agradável de navegação, e a tag canvas é talvez a que mais contribuirá para esse efeito.
O elemento canvas permite criar uma área de desenho, na qual podemos desenhar desde simples figuras geométricas, até imagens complexas, como bitmaps.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/html-tabela-com-cabecalho-e-tamanho-fixo/' rel='bookmark' title='Permanent Link: HTML &#8211; Tabela com cabeçalho e tamanho fixo'>HTML &#8211; Tabela com cabeçalho e tamanho fixo</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>O HTML5 é o próximo grande passo da <a title="Web" href="http://srcware.com/category/programacao/web/">Web</a>, que vai permitir criar uma experiência mais agradável de navegação, e a tag <strong>canvas</strong> é talvez a que mais contribuirá para esse efeito.<br />
O elemento <strong>canvas</strong> permite criar uma área de desenho, na qual podemos desenhar desde simples figuras geométricas, até imagens complexas, como bitmaps.</p>
<p><img class="aligncenter size-full wp-image-942" title="HTML5 - Canvas" src="http://srcware.com/wp-content/uploads/2009/12/canvas.jpg" alt="HTML5 - Canvas" width="207" height="164" /></p>
<p><span id="more-377"></span>Actualmente o elemento canvas do HTML5 é suportado pelos seguintes browsers:</p>
<ul>
<li>Firefox 1.5 ou superior</li>
<li>Google Chrome</li>
<li>Safari 2.0</li>
<li>Opera 9.5 ou superior</li>
</ul>
<p>Para um suporte melhor é recomendada a utilização do browser mais recente, uma vez que o HTML5 ainda se encontra em fase de desenvolvimento e por isso o suporte para o <strong>canvas</strong> ainda não é completo.</p>
<p>Mas existe um problema&#8230;</p>
<p>E o Internet Explorer? Como o suporte para HTML5 no Internet Explorer é praticamente inexistente, o elemento <strong>canvas</strong> ainda não é suportado, mas podemos usar o Google Chrome Frame, que é um plugin que permite usar o motor do Chrome, que suporta HTML5 e canvas, no Internet Explorer. Pode verificar aqui como usar o <a title="Como usar o Google Chrome Frame" href="http://code.google.com/chrome/chromeframe/developers_guide.html" target="_blank">Google Chrome Frame</a>.</p>
<h3>Criar um elemento canvas</h3>
<p>O elemento canvas tem apenas 2 atributos, o width e o height, que correspondem ao comprimento e altura da área de desenho respectivamente.</p>
<p>Depois convém definir um id para o canvas, uma vez que vai ser necessário aceder ao elemento através de <a title="Javascript" href="http://srcware.com/category/programacao/javascript/">Javascript</a>.</p>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;canvas <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;areaDesenho&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;200&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;200&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span>canvas&gt;</span></div></td></tr></tbody></table></div>
</pre>
<p>Também podemos definir uma mensagem ou uma imagem a exibir, no caso de o browser não suportar o elemento canvas, para isso basta introduzir o HTML que queremos que apareça quando não existe suporte.</p>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;canvas <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;areaDesenho&quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;200&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;200&quot;</span>&gt;</span><br />
&nbsp; &nbsp; O seu browser ainda não suporta HTML5 ou a tag Canvas!<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>canvas&gt;</span></div></td></tr></tbody></table></div>
</pre>
<h3>Obter contexto de desenho do canvas: getContext</h3>
<p>Antes de começar a desenhar no canvas temos de obter o contexto para desenho, neste caso vamos desenhar em 2D, por isso queremos obter o contexto de desenho em 2D.<br />
Para obter um contexto usamos a função <strong>getContext</strong> do elemento canvas.</p>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> canvasElem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'areaDesenho'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> contexto <span style="color: #339933;">=</span> canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'2d'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
</pre>
<h3>Desenhar Rectângulos no canvas: fillRect, strokeRect e clearRect</h3>
<p>Existem três funções para desenhar rectângulos no canvas, a função <strong>fillRect, strokeRect e clearRect. </strong>A forma de uso é igual para as três, mas a <strong>fillRect</strong> cria um rectângulo preenchido, a <strong>strokeRect</strong> cria um rectângulo com apenas a borda e a clearRect cria um rectângulo que limpa a área do mesmo.</p>
<p>Modo de uso:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">contexto.fillRect(x, y, largura, altura)<br />
contexto.strokeRect(x, y, largura, altura)<br />
contexto.clearRect(x, y, largura, altura)</div></td></tr></tbody></table></div>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> drawRect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> canvasElem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'areaDesenho'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Obtém o contexto &quot;2d&quot; de desenho para o canvas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> context <span style="color: #339933;">=</span> canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'2d'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Desenha rectângulo opaco</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;rgb(200, 0, 0)&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fillRect</span><span style="color: #009900;">&#40;</span>0<span style="color: #339933;">,</span> 0<span style="color: #339933;">,</span> 150<span style="color: #339933;">,</span> 100<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Desenha rectângulo com transparência</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;rgba(0, 0, 200, 0.5)&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fillRect</span> <span style="color: #009900;">&#40;</span>120<span style="color: #339933;">,</span> 70<span style="color: #339933;">,</span> 70<span style="color: #339933;">,</span> 70<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
</pre>
<p>No exemplo anterior usei também a propriedade <strong>fillStyle</strong>, que define a cor de preenchimento que quermos usar nas instruções de desenho seguintes. Também existe uma função <strong>strokeStyle</strong>, cujo uso é igual, mas que define a cor do traço que queremos usar.</p>
<h3>Desenhar Imagens no canvas: drawImage</h3>
<p>Para desenhar imagens no contexto de desenho do canvas, usamos a função <strong>drawImage</strong>, que recebe como parâmetros, uma imagem, a posição x e y, a largura e a altura da imagem. A largura e altura são opcionais, e se não forem especificadas serão usadas a altura e largura da imagem.</p>
<p>Modo de uso:</p>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">contexto.<span style="color: #660066;">drawImage</span><span style="color: #009900;">&#40;</span>imagem<span style="color: #339933;">,</span> x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> largura<span style="color: #339933;">,</span> altura<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> drawImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> canvasElem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'areaDesenho'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Obtém o contexto &quot;2d&quot; de desenho para o canvas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> context <span style="color: #339933;">=</span> canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'2d'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Desenha a imagem no canvas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> img <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Image<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">drawImage</span><span style="color: #009900;">&#40;</span>img<span style="color: #339933;">,</span>10<span style="color: #339933;">,</span> 50<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; img.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'canvas_image.png'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
</pre>
<p>Neste exemplo criamos uma nova imagem(&#8220;canvas_image.png&#8221;), e esperamos que esta esteja carregada, para depois desenha-la na área de desenho.</p>
<h3>Desenhar Caminho(Path) no canvas</h3>
<p>Antes de começar a desenhar um caminho ou path, usamos a função <strong>beginPath</strong>, que inicializa a criação de uma nova path.</p>
<p>Depois de inicializada, podemos usar as funções <strong>moveTo</strong><strong>, </strong><strong>lineTo</strong>, <strong>arc</strong>, <strong>bezierCurveTo</strong> e <strong>rect</strong>.</p>
<p>Depois se quisermos, podemos fechar o caminho executando o método <strong>closePath</strong>, que desenha uma linha recta desde o ponto actual até à primeira posição.</p>
<p>Para terminar podemos usar a função <strong>fill</strong> ou <strong>stroke</strong>, para preencher ou traçar o caminho que foi desenhado.</p>
<h4>Mover posição no canvas</h4>
<p>A função <strong>moveTo</strong>, move para uma posição(x, y) do canvas a ser usada como posição de inicio para a próxima função de desenho, sem desenhar nada. Isto funciona como quando levantamos a caneta para desenhar noutro sitio.</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">moveTo<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<h4>Desenhar Linhas no canvas</h4>
<p>Para criar uma linha desde a posição actual até uma posição(x,y) e mover a posição actual para essa posição usamos a função <strong>lineTo</strong>.</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lineTo<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<h4>Desenhar Arcos ou Círculos no canvas</h4>
<p>Para desenhar arcos ou círculos num caminho ou path do canvas usamos a função <strong>arc</strong>. A função <strong>arc</strong> toma como parâmetros uma posição central do arco(x,y), um raio, um ângulo inicial e final, e a indicação de uso do sentido inverso ao dos ponteiros do relógio para os ângulos.</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">arc<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> raio<span style="color: #339933;">,</span> anguloInicial<span style="color: #339933;">,</span> anguloFinal<span style="color: #339933;">,</span> contrarioPonteriosRelogio<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<h4>Desenhar Curvas de Bézier no canvas</h4>
<p>A função <strong>bezierCurveTo</strong> cria uma curva de Bézier desde a posição actual no canvas até à posição(x,y) passada como parâmetro,  com os pontos de controlo (c1x, c1y) e (c2x, c2y).</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">bezierCurveTo<span style="color: #009900;">&#40;</span>c1x<span style="color: #339933;">,</span> c1y<span style="color: #339933;">,</span> c2x<span style="color: #339933;">,</span> c2y<span style="color: #339933;">,</span> x<span style="color: #339933;">,</span> y<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Exemplo &#8211; Usando um caminho ou path no canvas:</p>
<pre>
<div class="codecolorer-container javascript vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> drawPath<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> canvasElem <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'areaDesenho'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Obtém o contexto &quot;2d&quot; de desenho para o canvas</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> context <span style="color: #339933;">=</span> canvasElem.<span style="color: #660066;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'2d'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//Desenha um triangulo azul</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fillStyle</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;blue&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">beginPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">moveTo</span><span style="color: #009900;">&#40;</span>60<span style="color: #339933;">,</span> 10<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span>10<span style="color: #339933;">,</span> 50<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span>110<span style="color: #339933;">,</span> 50<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">lineTo</span><span style="color: #009900;">&#40;</span>60<span style="color: #339933;">,</span> 10<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #660066;">fill</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
</pre>
<p><a title="Donwload do Exemplo de Canvas" href="http://srcware.com/wp-content/uploads/2009/12/Exemplo-Canvas.zip" target="_blank">Download do Exemplo de uso do Canvas</a></p>
<p>Para mais exemplos podem verificar o tutorial da <a title="Mozilla Developer Center Canvas Tutorial" href="https://developer.mozilla.org/en/Canvas_tutorial" target="_blank">Mozilla Developer Center</a>.</p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/html-tabela-com-cabecalho-e-tamanho-fixo/' rel='bookmark' title='Permanent Link: HTML &#8211; Tabela com cabeçalho e tamanho fixo'>HTML &#8211; Tabela com cabeçalho e tamanho fixo</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/i2SgLruoiSosGg0-JLR5l2BrWYA/0/da"><img src="http://feedads.g.doubleclick.net/~a/i2SgLruoiSosGg0-JLR5l2BrWYA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/i2SgLruoiSosGg0-JLR5l2BrWYA/1/da"><img src="http://feedads.g.doubleclick.net/~a/i2SgLruoiSosGg0-JLR5l2BrWYA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=W2eC17D2I6I:ZT9gupZGXJY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=W2eC17D2I6I:ZT9gupZGXJY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=W2eC17D2I6I:ZT9gupZGXJY:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=W2eC17D2I6I:ZT9gupZGXJY:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/W2eC17D2I6I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/12/html-5-introducao-a-tag-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/12/html-5-introducao-a-tag-canvas/</feedburner:origLink></item>
		<item>
		<title>Google lança um serviço de DNS Público</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/8r4yyD987QI/</link>
		<comments>http://srcware.com/2009/12/google-lanca-um-servico-de-dns-publico/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 00:52:20 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=916</guid>
		<description><![CDATA[A Google acaba de lançar o Google Public DNS, um serviço de DNS que pretende tornar a Internet mais rápida. Um serviço de DNS(Domain Name System), é um sistema que analisa um nome de domínio(ex: srcware.com), de forma a resolver o nome e retornar o respectivo endereço de IP.


Não existem artigos relacionados.]]></description>
			<content:encoded><![CDATA[<p>A Google acaba de lançar o <strong>Google Public DNS</strong>, um serviço de DNS que pretende tornar a Internet dos seus utilizadores mais rápida.</p>
<p>Um serviço de DNS(Domain Name System), é um sistema que analisa um nome de domínio(ex: srcware.com), de forma a resolver o nome e retornar o respectivo endereço de IP.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/12/google_public_dns.jpg"><img class="aligncenter size-full wp-image-922" title="google public dns" src="http://srcware.com/wp-content/uploads/2009/12/google_public_dns.jpg" alt="google public dns" width="350" height="277" /></a><span id="more-916"></span></p>
<p>Ora como de cada vez que abrimos um site pelo nome(ex:srcware.com),  é feita uma pesquisa no DNS de forma a retornar o endereço de IP, este serviço tem de ser o mais rápido possivel de forma a sacrificar o mínimo de tempo no carregamento da página, e é precisamente este um dos objectivos da Google com este serviço.</p>
<p>Um outro objectivo da Google com este serviço, é a segurança, de forma a evitar problemas comuns com servidores de DNS, como cache poisoning, que ocorre quando os servidores de DNS aceitam endereços de IPs de um servidor de DNS não autoritário, e fazem cache desses endereços, ficando desta forma &#8220;envenenados&#8221;, com endereços de IP que não correspondem aos endereços originais.</p>
<p>Para usar este serviço, apenas terá de adicionar os seguintes endereços de IP nas configurações do seu router ou nas propriedades da placa de rede/wireless.</p>
<ul>
<li><span style="background-color: #ffffff;">DNS primário: 8.8.8.8</span></li>
<li><span style="background-color: #ffffff;">DNS Secundário: 8.8.4.4</span></li>
</ul>
<h3>Configurar no Windows 7</h3>
<p>Para configurar no Windows 7 deve fazer o seguinte:</p>
<ol>
<li><span style="background-color: #ffffff;">Abra o <strong>Centro de Rede e Partilha</strong></span></li>
<li><span style="background-color: #ffffff;">Clique em  <strong>Alterar definições da placa</strong> no menu do lado esquerdo</span></li>
<li><span style="background-color: #ffffff;">Encontre a placa de rede, à qual está ligado, clique com o botão direito do rato, e clique em <strong>Propriedades</strong></span></li>
<li><span style="background-color: #ffffff;">Encontre a opção <strong>Protocolo IP Versão 4(TCP/IPv4)<span style="font-weight: normal;"> e clique em </span>Propriedades</strong></span></li>
<li><span style="background-color: #ffffff;">Nas propriedades active a opção <strong>Utilizar os seguintes endereços de servidor DNS</strong> e insira os endereços preferido(primário) e alternativo(secundário)</span></li>
</ol>
<p><img class="aligncenter size-full wp-image-923" title="Windows 7 - Configuração do google public dns" src="http://srcware.com/wp-content/uploads/2009/12/win7_google_public_dns.jpg" alt="Windows 7 - Configuração do google public dns" width="414" height="461" /></p>
<p>Fonte: <a href="http://googleblog.blogspot.com/2009/12/introducing-google-public-dns.html" target="_blank">Google Blog</a></p>


<p>Não existem artigos relacionados.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/qEm_0c5nWNHhwze8Tvo4YjORujA/0/da"><img src="http://feedads.g.doubleclick.net/~a/qEm_0c5nWNHhwze8Tvo4YjORujA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qEm_0c5nWNHhwze8Tvo4YjORujA/1/da"><img src="http://feedads.g.doubleclick.net/~a/qEm_0c5nWNHhwze8Tvo4YjORujA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=8r4yyD987QI:oM3jXvfnCUE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=8r4yyD987QI:oM3jXvfnCUE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=8r4yyD987QI:oM3jXvfnCUE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=8r4yyD987QI:oM3jXvfnCUE:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/8r4yyD987QI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/12/google-lanca-um-servico-de-dns-publico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/12/google-lanca-um-servico-de-dns-publico/</feedburner:origLink></item>
		<item>
		<title>VirtualBox 3.1.0 – Virtualização de Sistemas Operativos</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/fm-wwqYtBUc/</link>
		<comments>http://srcware.com/2009/12/virtualbox-3-1-0-virtualizacao-de-sistemas-operativos/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 17:17:14 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=896</guid>
		<description><![CDATA[O VirtualBox é uma aplicação que permite a virtualização de sistemas operativos. É uma alternativa gratuita ao VMware workstation, e tal como este permite a criação e gestão de máquinas virtuais, embora o VirtualBox seja menos exigente em termos de recursos.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/virtualbox-3-0-10-virtualizacao-de-sistemas-operativos/' rel='bookmark' title='Permanent Link: VirtualBox 3.0.10 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.0.10 &#8211; Virtualização de Sistemas Operativos</a></li>
<li><a href='http://srcware.com/2009/10/virtualbox-3-0-8/' rel='bookmark' title='Permanent Link: VirtualBox 3.0.8 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.0.8 &#8211; Virtualização de Sistemas Operativos</a></li>
<li><a href='http://srcware.com/2009/11/10-repositorios-para-o-seu-ubuntu-9-10/' rel='bookmark' title='Permanent Link: 10 Repositórios para o seu Ubuntu 9.10'>10 Repositórios para o seu Ubuntu 9.10</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>O VirtualBox é uma aplicação que permite a virtualização de sistemas operativos. É uma alternativa gratuita ao VMware workstation, e tal como este permite a criação e gestão de máquinas virtuais, embora o VirtualBox seja menos exigente em termos de recursos.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/10/VirtualBox1.png"><img class="aligncenter size-full wp-image-83" title="VirtualBox" src="http://srcware.com/wp-content/uploads/2009/10/VirtualBox1.png" alt="VirtualBox" width="450" height="337" /></a></p>
<p><span id="more-896"></span></p>
<p>Principais funcionalidades:</p>
<ul>
<li>Gestor de máquinas virtuais, discos e imagens de CD/DVD e disquetes</li>
<li style="text-align: left;">Suporte para uma vasta gama de sistemas operativos actuais e antigos</li>
<li>Suporte para discos virtuais da concorrência (VMware, Virtual PC)</li>
<li>Pastas partilhadas ente sistemas operativos</li>
<li>Integração do rato entre sistema operativo Host e Guest</li>
<li>Suporte para Aceleração 3D</li>
<li>Suporte para Sistemas Multiprocessador</li>
<li>Suporte para Open Virtualization Format</li>
</ul>
<h3>Novidades desta versão</h3>
<p>Esta nova versão traz algumas melhorias e novidades.</p>
<h4>Gestão de discos, leitores de CD/DVD, e disquetes da Virtual Machine</h4>
<p>Nesta nova versão a interface de gestão de discos da máquina virtual foi bastante melhorada, e é agora muito mais fácil configurar os discos, leitores de CD/DVD e disquetes, tudo no mesmo local. Outra grande melhoria nesta versão é a possibilidade de adicionar vários leitores de CD/DVD a uma máquina virtual.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/12/armazenamento.jpg"><img class="aligncenter size-full wp-image-900" title="Virtualbox - ecrã armazenamento" src="http://srcware.com/wp-content/uploads/2009/12/armazenamento.jpg" alt="Virtualbox - ecrã armazenamento" width="500" height="353" /></a></p>
<h4>EFI (Extensible Firmware Interface)</h4>
<p>É uma alternativa à actual BIOS, e o seu funcionamento assemelha-se em muitos aspectos a um sistema operativo.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/12/virtualbox_efi.jpg"><img class="aligncenter size-full wp-image-901" title="Virtualbox EFI" src="http://srcware.com/wp-content/uploads/2009/12/virtualbox_efi.jpg" alt="Virtualbox EFI" width="500" height="354" /></a></p>
<p>Consola EFI:</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/12/virtualbox_efi_console.jpg"><img class="aligncenter size-full wp-image-902" title="virtualbox_efi_console" src="http://srcware.com/wp-content/uploads/2009/12/virtualbox_efi_console.jpg" alt="virtualbox efi console" width="500" height="417" /></a></p>
<h4>Aceleração de video 2D</h4>
<p>Esta melhoria, permite usar as capacidades da placa gráfica para reproduzir vídeos dentro da máquina virtual, tornando assim a reprodução muito mais fluída.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/12/virtualbox_2d_video_acceleration.jpg"><img class="aligncenter size-full wp-image-903" title="virtualbox 2d video acceleration" src="http://srcware.com/wp-content/uploads/2009/12/virtualbox_2d_video_acceleration.jpg" alt="virtualbox 2d video acceleration" width="500" height="354" /></a></p>
<p>Para saber mais sobre esta versão podem ver a lista completa de alterações desta versão: <a title="VirtualBox Changelog" href="http://www.virtualbox.org/wiki/Changelog">VirtualBox Changelog</a></p>
<h3>Instalar o VirtualBox no Ubuntu</h3>
<p>Para instalar no Ubuntu devem adicionar o <a title="10 Repositórios para o seu Ubuntu 9.10" href="http://srcware.com/2009/11/10-repositorios-para-o-seu-ubuntu-9-10/" target="_blank">repósitório do Virtualbox</a>, e<span style="background-color: #ffffff;"> depois é só executar o seguinte comando:</span></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> virtualbox-<span style="color: #000000;">3.1</span></div></td></tr></tbody></table></div>
<p><a title="VirtualBox Homepage" href="http://www.virtualbox.org/">VirtualBox Homepage</a><br />
<a title="Download VirtualBox 3.1.0 Windows" href="http://download.virtualbox.org/virtualbox/3.1.0/VirtualBox-3.1.0-55467-Win.exe">Download VirtualBox 3.1.0 para Windows</a><br />
<a title="Download VirtualBox 3.1.0 Linux" href="http://www.virtualbox.org/wiki/Linux_Downloads">Download VirtualBox 3.1.0 para Linux</a><br />
<a title="Download VirtualBox 3.1.0 para Mac" href="http://download.virtualbox.org/virtualbox/3.1.0/VirtualBox-3.1.0-55467-OSX.dmg">Download VirtualBox 3.1.0 para Mac</a></p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/virtualbox-3-0-10-virtualizacao-de-sistemas-operativos/' rel='bookmark' title='Permanent Link: VirtualBox 3.0.10 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.0.10 &#8211; Virtualização de Sistemas Operativos</a></li>
<li><a href='http://srcware.com/2009/10/virtualbox-3-0-8/' rel='bookmark' title='Permanent Link: VirtualBox 3.0.8 &#8211; Virtualização de Sistemas Operativos'>VirtualBox 3.0.8 &#8211; Virtualização de Sistemas Operativos</a></li>
<li><a href='http://srcware.com/2009/11/10-repositorios-para-o-seu-ubuntu-9-10/' rel='bookmark' title='Permanent Link: 10 Repositórios para o seu Ubuntu 9.10'>10 Repositórios para o seu Ubuntu 9.10</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/PWLj8n5hQJyzZjMziUJ_BP8J8Ac/0/da"><img src="http://feedads.g.doubleclick.net/~a/PWLj8n5hQJyzZjMziUJ_BP8J8Ac/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PWLj8n5hQJyzZjMziUJ_BP8J8Ac/1/da"><img src="http://feedads.g.doubleclick.net/~a/PWLj8n5hQJyzZjMziUJ_BP8J8Ac/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=fm-wwqYtBUc:ccOya3pG6fw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=fm-wwqYtBUc:ccOya3pG6fw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=fm-wwqYtBUc:ccOya3pG6fw:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=fm-wwqYtBUc:ccOya3pG6fw:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/fm-wwqYtBUc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/12/virtualbox-3-1-0-virtualizacao-de-sistemas-operativos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/12/virtualbox-3-1-0-virtualizacao-de-sistemas-operativos/</feedburner:origLink></item>
		<item>
		<title>Tutorial de Python – Funções</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/qMLLBOKnq8c/</link>
		<comments>http://srcware.com/2009/11/tutorial-de-python-funcoes/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 20:30:25 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=777</guid>
		<description><![CDATA[Esta semana vamos aprender a criar e usar funções em python.
As funções definem blocos de código, ao qual damos um nome, e que podemos chamar durante a execução do nosso programa. As funções servem principalmente para reduzir a repetição e organizar o código, dando nomes a tarefas que podemos identificar melhor e executar várias vezes durante a execução do programa.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/tutorial-de-python-loops-ou-ciclos/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Loops ou Ciclos'>Tutorial de Python &#8211; Loops ou Ciclos</a></li>
<li><a href='http://srcware.com/2009/10/tutorial-de-python-strings-e-arrays-parte-1/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Strings e Arrays &#8211; Parte 1'>Tutorial de Python &#8211; Strings e Arrays &#8211; Parte 1</a></li>
<li><a href='http://srcware.com/2009/10/tutorial-de-python-variaveis-numericas/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Variáveis Numéricas'>Tutorial de Python &#8211; Variáveis Numéricas</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta semana vamos aprender a criar e usar funções em python.<br />
As funções definem blocos de código, ao qual damos um nome, e que podemos chamar durante a execução do nosso programa. As funções servem principalmente para reduzir a repetição e organizar o código, dando nomes a tarefas que podemos identificar melhor e executar várias vezes durante a execução do programa.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/10/python.jpg"><img class="aligncenter size-full wp-image-189" title="Python Logo" src="http://srcware.com/wp-content/uploads/2009/10/python.jpg" alt="Python Logo" width="500" height="169" /></a><span id="more-777"></span></p>
<h3>Definição de funções: def</h3>
<p>Para definirmos funções em python usamos instrução <strong>def</strong>, que tem a seguinte forma de utilização:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> nome_funcao<span style="color: black;">&#40;</span>param1, param2<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; instruções</div></td></tr></tbody></table></div>
</pre>
<p>Em que o &#8220;nome_funcao&#8221; é um nome que queremos dar à função e &#8220;param1, param2&#8243; são parâmetros, que são opcionais, e que podemos ter quantos quisermos.</p>
<p>Para executar uma função apenas temos de a chamar pelo nome e passar os parâmetros, da seguinte forma:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">nome_funcao<span style="color: black;">&#40;</span>param1, param2<span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> ola<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Olá mundo&quot;</span><br />
<br />
ola<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Nota: Tudo o que for definido dentro de uma função, apenas será válido dentro dessa função. Por exemplo, se dentro de uma função definirmos uma variável &#8220;a&#8221;, essa variável só poderá ser usada dentro da função.</p>
<h3>Parâmetros</h3>
<p>As funções podem conter parâmetros, que são valores passados à função aquando da sua execução, e que podem ser usados como variáveis, mas apenas dentro da função.</p>
<p>Os parâmetros em python, normalmente são passados como referência, ou seja, se alterados dentro da função, os seus valores são modificados na variável passada como parâmetro. Mas existem excepções, como é o caso das strings, tupolos e números, que se forem alterados dentro da função não modificam a variável passada como parâmetro.</p>
<p>No exemplo a seguir temos uma função que soma e imprime os valores dos parâmetros &#8220;a&#8221; e &#8220;b&#8221;.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> soma<span style="color: black;">&#40;</span>a, b<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> a + b<br />
<br />
soma<span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Também podemos definir parâmetros opcionais. Para isso devemos definir um valor padrão, que será passado, se aquando da execução não for passado nenhum valor.</p>
<p>Retomando o exemplo anterior, definimos um novo parâmetro c, que toma o valor padrão de 0 quando não é passado nenhum valor para c.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> soma<span style="color: black;">&#40;</span>a, b, c = 0<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> a + b + c<br />
<br />
soma<span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span><br />
soma<span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>,<span style="color: #ff4500;">5</span>,<span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<h3>Retornar de uma função: return</h3>
<p>Para quando queremos terminar a execução de uma função e/ou retornar um valor, usamos a instrução <strong>return</strong> que pode ou não retornar valores.</p>
<p>No exemplo seguinte, temos a função imprime, que imprime o elemento da lista passada como parâmetro, da posição passada no parâmetro index, mas verifica antes se a posição não é maior ou igual ao tamanho da lista, e caso o seja, retona da função, terminando a sua execução.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> imprime<span style="color: black;">&#40;</span>lista, index<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> index <span style="color: #66cc66;">&gt;</span>= <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>lista<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> lista<span style="color: black;">&#91;</span>index<span style="color: black;">&#93;</span><br />
<br />
imprime<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><br />
imprime<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Já no exemplo seguinte, a função retorna um valor, que é o somatório dos valores passados como parâmetro.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> somar<span style="color: black;">&#40;</span>a, b<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> a + b<br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> somar<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Também é possível retornar vários valores. Para isso, no return, temos de separar os valores por virgula, ou então retornar uma lista ou array de valores.<br />
Para receber os valores de retorno em várias variáveis, temos de separar as variáveis por virgula, mas também é possível receber esses valores numa lista.</p>
<p>No exemplo a seguir, temos a função &#8220;proximos&#8221;, que retorna o número anterior e seguinte ao valor passado como parâmetro, e os valores retornados são guardados nas variáveis, &#8220;ant&#8221; e &#8220;seg&#8221; respectivamente.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> proximos<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> a - 1, a + 1<br />
<br />
ant, seg = proximos<span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;anterior:&quot;</span>, ant<br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;seguinte:&quot;</span>, seg</div></td></tr></tbody></table></div>
</pre>
<h3>Aceder a variáveis globais</h3>
<p>Para aceder a uma variável global numa função temos de usar a instrução <strong>global</strong>, que tem a seguinte forma de uso:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">global</span> variavel</div></td></tr></tbody></table></div>
</pre>
<p>No exemplo a seguir acedemos à variável global num, para a incrementar:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">num = 0<br />
<span style="color: #ff7700;font-weight:bold;">def</span> incNum<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">global</span> num<br />
&nbsp; &nbsp; num += <span style="color: #ff4500;">1</span><br />
<br />
incNum<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<h3>Funções anónimas ou lambda</h3>
<p>As funções anónimas ou <strong>lambda</strong>, são funções que como o nome indica, não tem nome, e que podem ser criadas e executadas em qualquer momento da execução do programa, não precisando de ser definidas, e que apenas retornam o valor de uma expressão, sem precisar do return.<br />
Para criar uma função anónima, usamos a instrução <strong>lambda</strong>, que pode ser usada da seguinte forma:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">lambda</span> param1, param2: expressão</div></td></tr></tbody></table></div>
</pre>
<p>Exemplo:</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">inc = <span style="color: #ff7700;font-weight:bold;">lambda</span> x: x + 1<br />
<span style="color: #ff7700;font-weight:bold;">print</span> inc<span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Nota: Qualquer função pode ser atribuída a uma variável, e as funções lambda não são excepção, podendo depois ser executadas com o nome da variável.</p>
<p>Em baixo definimos a função &#8220;find&#8221;, que tem como parâmetros, uma lista e uma função, que será executada para cada elemento da lista, e que retorna verdadeiro ou falso, para validar se o elemento é o elemento a retornar. Depois na execução passamos uma lista e uma função lambda, que vai verificar se o item, que será passado como &#8220;x&#8221;, é igual a 7, ou seja, a função &#8220;find&#8221;, vai procurar por um elemento que seja igual a 7, retornando esse elemento.</p>
<pre>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">def</span> find<span style="color: black;">&#40;</span>lista, func<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> item <span style="color: #ff7700;font-weight:bold;">in</span> lista:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> func<span style="color: black;">&#40;</span>item<span style="color: black;">&#41;</span>: <span style="color: #ff7700;font-weight:bold;">return</span> item<br />
<br />
<span style="color: #ff7700;font-weight:bold;">print</span> find<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>9, 4, 7, 2, 5<span style="color: black;">&#93;</span>, <span style="color: #ff7700;font-weight:bold;">lambda</span> x: x == <span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
</pre>
<p>Deixem a vossa opinião e sugestões, e se não perceberem perguntem, que eu terei todo o gosto em responder.<br />
E pronto, é tudo por hoje. Para a semana há mais. Boa programação. <img src='http://srcware.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/tutorial-de-python-loops-ou-ciclos/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Loops ou Ciclos'>Tutorial de Python &#8211; Loops ou Ciclos</a></li>
<li><a href='http://srcware.com/2009/10/tutorial-de-python-strings-e-arrays-parte-1/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Strings e Arrays &#8211; Parte 1'>Tutorial de Python &#8211; Strings e Arrays &#8211; Parte 1</a></li>
<li><a href='http://srcware.com/2009/10/tutorial-de-python-variaveis-numericas/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Variáveis Numéricas'>Tutorial de Python &#8211; Variáveis Numéricas</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/8ZDcnstqWgY41YFl9dW5ewCg3i8/0/da"><img src="http://feedads.g.doubleclick.net/~a/8ZDcnstqWgY41YFl9dW5ewCg3i8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8ZDcnstqWgY41YFl9dW5ewCg3i8/1/da"><img src="http://feedads.g.doubleclick.net/~a/8ZDcnstqWgY41YFl9dW5ewCg3i8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=qMLLBOKnq8c:8itQ8eR_kM8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=qMLLBOKnq8c:8itQ8eR_kM8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=qMLLBOKnq8c:8itQ8eR_kM8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=qMLLBOKnq8c:8itQ8eR_kM8:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/qMLLBOKnq8c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/tutorial-de-python-funcoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/tutorial-de-python-funcoes/</feedburner:origLink></item>
		<item>
		<title>Como evitar SQL Injection em .NET</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/k6M05E6EGn0/</link>
		<comments>http://srcware.com/2009/11/como-evitar-sql-injection-em-net/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 23:01:32 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=799</guid>
		<description><![CDATA[O SQL Injection é uma técnica usada por Hackers, que permite manipular as instruções SQL que executamos nas nossas aplicações, de forma a ganhar acesso, ou até executar operações directamente na base de dados, operações essas, que permitem por exemplo, eliminar registos ou até tabelas. Ora isto é evitável, e portanto devemos ter em atenção estes pormenores, para que mais tarde não tenhamos de sofrer as consequências.


Não existem artigos relacionados.]]></description>
			<content:encoded><![CDATA[<p>O SQL Injection é uma técnica usada por Hackers, que permite manipular as instruções SQL que executamos nas nossas aplicações, de forma a ganhar acesso, ou até executar operações directamente na base de dados, operações essas, que permitem por exemplo, eliminar registos ou até tabelas. Ora isto é evitável, e portanto devemos ter em atenção estes pormenores, para que mais tarde não tenhamos de sofrer as consequências. </p>
<p><a href="http://srcware.com/wp-content/uploads/2009/11/sql_injection.jpg"><img src="http://srcware.com/wp-content/uploads/2009/11/sql_injection.jpg" alt="SQL Injection" title="SQL Injection" width="360" height="200" class="aligncenter size-full wp-image-859" /></a></p>
<p><span id="more-799"></span></p>
<p>Em baixo temos um exemplo de uma função desprotegida contra SQL Injection:</p>
<div class="codecolorer-container csharp vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #008080; font-style: italic;">//Função para adicionar utilizador, desprotegida contra SQL injection</span><br />
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> AddUser<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> connectionString, <span style="color: #FF0000;">string</span> user<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>SqlConnection connection <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span>connectionString<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Cria um comando em que o valor de &quot;user&quot; é concatenado na query</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #FF0000;">string</span> query <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO Users(username) VALUES('&quot;</span> <span style="color: #008000;">+</span> user <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;')&quot;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; SqlCommand command <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #000000;">&#40;</span>query, connection<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">try</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Executa o commando</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Int32 linhasInseridas <span style="color: #008000;">=</span> command.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;{0} linha(s) inserida(s)&quot;</span>, linhasInseridas<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>ex.<span style="color: #0000FF;">Message</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Esta função está desprotegida porque é feita a concatenação dos valores directamente na query, e se tentarmos adicionar o utilizador Sourceware&#8217; com o método anterior, o que obtemos é o erro da imagem seguinte, o que significa que este método está desprotegido contra SQL Injection.</p>
<p><a href="http://srcware.com/wp-content/uploads/2009/11/sql_injection_desprotegido.png"><img src="http://srcware.com/wp-content/uploads/2009/11/sql_injection_desprotegido-550x141.png" alt="sql injection desprotegido" title="sql injection desprotegido" width="550" height="141" class="aligncenter size-large wp-image-838" /></a></p>
<p>Em .NET, a forma mais fácil e eficaz de resolver o problema do SQL Injection é usando queries parametrizadas. Assim em vez de concatenar os valores directamente na query, estes são passados como parâmetros, e não nos precisamos de preocupar com o que o utilizador introduziu, porque o &#8220;escape&#8221; é feito automaticamente. </p>
<p>Assim sendo, podemos criar um método como o seguinte:</p>
<div class="codecolorer-container csharp vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #008080; font-style: italic;">//Função para adicionar utilizador, protegida contra SQL injection</span><br />
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> AddUserBetter<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> connectionString, <span style="color: #FF0000;">string</span> user<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">using</span> <span style="color: #000000;">&#40;</span>SqlConnection connection <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlConnection<span style="color: #000000;">&#40;</span>connectionString<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Cria uma query parametrizada que usa o parâmetro @user</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #FF0000;">string</span> query <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;INSERT INTO Users(username) VALUES(@user)&quot;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; SqlCommand command <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> SqlCommand<span style="color: #000000;">&#40;</span>query, connection<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//O valor de user é passado como parâmetro</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; command.<span style="color: #0000FF;">Parameters</span>.<span style="color: #0000FF;">AddWithValue</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;@user&quot;</span>, user<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">try</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//Executa o commando</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.<span style="color: #0000FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Int32 linhasInseridas <span style="color: #008000;">=</span> command.<span style="color: #0000FF;">ExecuteNonQuery</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;{0} linha(s) inserida(s)&quot;</span>, linhasInseridas<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">catch</span> <span style="color: #000000;">&#40;</span>Exception ex<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>ex.<span style="color: #0000FF;">Message</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p>E como podemos verificar, introduzindo Sourceware&#8217;, como na execução anterior, já conseguimos inserir o registo sem problemas.<br />
<a href="http://srcware.com/wp-content/uploads/2009/11/sql_injection_protegido.png"><img src="http://srcware.com/wp-content/uploads/2009/11/sql_injection_protegido.png" alt="sql injection protegido" title="sql injection protegido" width="520" height="150" class="aligncenter size-full wp-image-837" /></a></p>
<p>Portanto já sabem, usar sempre queries parametrizada para dados introduzidos pelo utilizador, é a regra de ouro para que não tenham problemas com SQL Injection. </p>
<p><a href='http://srcware.com/wp-content/uploads/2009/11/SQLInjection.zip'>Download do Exemplo em C#</a>(Visual Studio 2008)</p>


<p>Não existem artigos relacionados.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/7YNqR3VjiovKPYWJ7ErDEBd0jK4/0/da"><img src="http://feedads.g.doubleclick.net/~a/7YNqR3VjiovKPYWJ7ErDEBd0jK4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7YNqR3VjiovKPYWJ7ErDEBd0jK4/1/da"><img src="http://feedads.g.doubleclick.net/~a/7YNqR3VjiovKPYWJ7ErDEBd0jK4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=k6M05E6EGn0:5nGPyTv6dTk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=k6M05E6EGn0:5nGPyTv6dTk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=k6M05E6EGn0:5nGPyTv6dTk:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=k6M05E6EGn0:5nGPyTv6dTk:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/k6M05E6EGn0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/como-evitar-sql-injection-em-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/como-evitar-sql-injection-em-net/</feedburner:origLink></item>
		<item>
		<title>HTML – Tabela com cabeçalho e tamanho fixo</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/46sDj9oMQYg/</link>
		<comments>http://srcware.com/2009/11/html-tabela-com-cabecalho-e-tamanho-fixo/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 00:26:55 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=785</guid>
		<description><![CDATA[Em HTML quando temos tabelas com muitos dados e com bastantes colunas torna-se complicado, e pouco prático, andar para cima e para baixo para ver o cabeçalho das colunas, ou então se houver alguma coisa depois da tabela, temos de fazer scroll até ao fim da tabela para conseguir ver o que está a seguir. Para resolver estes problemas podemos criar uma tabela com scroll e com cabeçalho fixo...



Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/imagens-incorporadas-em-html/' rel='bookmark' title='Permanent Link: Imagens incorporadas em HTML'>Imagens incorporadas em HTML</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Nos <a href="http://srcware.com/category/programacao/web/">Web</a> Sites em HTML, quando temos tabelas com muitos dados e com bastantes colunas torna-se complicado, e pouco prático, deslocar a página para cima e para baixo para ver o cabeçalho das colunas, e quando há alguma coisa depois da tabela, temos de fazer scroll até ao fim da tabela para conseguir ver o que está a seguir. Para resolver estes problemas podemos criar uma tabela com scroll e com cabeçalho fixo, como a que é possível ver na imagem seguinte.</p>
<p><img src="http://srcware.com/wp-content/uploads/2009/11/resultado.png" alt="Tabela com scroll e cabeçalho fixo" title="Tabela com scroll e cabeçalho fixo" width="400" height="182" class="aligncenter size-full wp-image-804" /></p>
<p><span id="more-785"></span></p>
<p>Para criar uma tabela deste tipo temos de separar o cabeçalho da tabela e inseri-lo numa nova tabela, ficando com duas tabelas, e de seguida envolvemos a tabela com os dados num DIV com altura fixa e com &#8220;overflow:auto&#8221; no CSS, de forma a mostrar a scrollbar no DIV se a altura da tabela de dados for maior que a do DIV. Uma desvantagem desta técnica é que só podemos ter uma coluna de tamanho dinâmico, portanto, para as restantes temos de definir tamanho fixo.</p>
<p>CSS:</p>
<div class="codecolorer-container css vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">div.scrollTable<span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#fff</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#888</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> table<span style="color: #6666ff;">.header</span><span style="color: #00AA00;">,</span> div<span style="color: #6666ff;">.scrollTable</span> div<span style="color: #6666ff;">.scroller</span> table<span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;"><span style="color: #cc66cc;">100</span>%</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">border-collapse</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">collapse</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> table<span style="color: #6666ff;">.header</span> th<span style="color: #00AA00;">,</span> div<span style="color: #6666ff;">.scrollTable</span> div<span style="color: #6666ff;">.scroller</span> table td<span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#444</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span> <span style="color: #933;">3px</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> table<span style="color: #6666ff;">.header</span> th<span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#ddd</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> div.scroller<span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">200px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">auto</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> .coluna<span style="color: #933;">75px</span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">75px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> .coluna<span style="color: #933;">100px</span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">100px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
div<span style="color: #6666ff;">.scrollTable</span> .coluna<span style="color: #933;">150px</span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">150px</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>HTML:</p>
<div class="codecolorer-container html4strict vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;scrollTable&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;header&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna75px&quot;</span>&gt;</span>Coluna 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna100px&quot;</span>&gt;</span>Coluna 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna150px&quot;</span>&gt;</span>Coluna 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">th</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">th</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">table</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;scroller&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">table</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">tr</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">td</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna75px&quot;</span>&gt;</span>1 - 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">td</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna100px&quot;</span>&gt;</span>1 - 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">td</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;coluna150px&quot;</span>&gt;</span>1 - 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">td</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">td</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">tr</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">table</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></div></td></tr></tbody></table></div>
<p><a href='http://srcware.com/wp-content/uploads/2009/11/exemplo-tabela-scroll.html'>Ver Exemplo &#8211; Tabela com scroll</a></p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/imagens-incorporadas-em-html/' rel='bookmark' title='Permanent Link: Imagens incorporadas em HTML'>Imagens incorporadas em HTML</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/TUSmUC2nPtKFQ0-R_5dQUaq0EJg/0/da"><img src="http://feedads.g.doubleclick.net/~a/TUSmUC2nPtKFQ0-R_5dQUaq0EJg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TUSmUC2nPtKFQ0-R_5dQUaq0EJg/1/da"><img src="http://feedads.g.doubleclick.net/~a/TUSmUC2nPtKFQ0-R_5dQUaq0EJg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=46sDj9oMQYg:wnvED7hicDo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=46sDj9oMQYg:wnvED7hicDo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=46sDj9oMQYg:wnvED7hicDo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=46sDj9oMQYg:wnvED7hicDo:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/46sDj9oMQYg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/html-tabela-com-cabecalho-e-tamanho-fixo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/html-tabela-com-cabecalho-e-tamanho-fixo/</feedburner:origLink></item>
		<item>
		<title>Sumatra PDF 1.0 – Leitor de PDF para Windows</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/izS15_PHT2Q/</link>
		<comments>http://srcware.com/2009/11/sumatra-pdf-1-0-leitor-de-pdf-para-windows/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 12:20:52 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Utilitários]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=755</guid>
		<description><![CDATA[O Sumatra PDF é um leitor de PDFs muito leve, gratuito e Open Source. Tem uma interface muito simples, minimalista, sem as carradas de funcionalidades dos grandes leitores de PDFs, e que muitas vezes nem usamos. 


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/windows-7-disponivel-para-todos/' rel='bookmark' title='Permanent Link: Windows 7 Disponível para Todos'>Windows 7 Disponível para Todos</a></li>
<li><a href='http://srcware.com/2009/10/intype-0-3-1-734/' rel='bookmark' title='Permanent Link: Intype 0.3.1.734 &#8211; O TextMate para Windows'>Intype 0.3.1.734 &#8211; O TextMate para Windows</a></li>
<li><a href='http://srcware.com/2009/10/cintanotes-tire-notas-em-qualquer-local/' rel='bookmark' title='Permanent Link: CintaNotes &#8211; Tire notas em qualquer local'>CintaNotes &#8211; Tire notas em qualquer local</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>O Sumatra PDF é um leitor de PDFs muito leve, gratuito e Open Source. Tem uma interface muito simples e minimalista, sem as carradas de funcionalidades dos grandes leitores de PDFs, e que muitas vezes nem usamos.</p>
<p><img class="aligncenter size-full wp-image-768" title="Sumatra PDF reader" src="http://srcware.com/wp-content/uploads/2009/11/sumatra.jpg" alt="Sumatra PDF reader" width="475" height="326" /></p>
<p><span id="more-755"></span><span style="background-color: #ffffff;">Este leitor de PDFs é apenas composto por um ficheiro executável de apenas 1MB, o que o torna uma aplicação extremamente portátil.</span></p>
<p>O arranque deste leitor é praticamente instantâneo, comparando com os &#8220;grandes&#8221; leitores de PDF, que normalmente demoram algum tempo a carregar os seus componentes.</p>
<p><span style="background-color: #ffffff;"><a title="Sumatra PDF Homepage" href="http://blog.kowalczyk.info/software/sumatrapdf/index.html" target="_blank">Sumatra PDF Homepage</a></span></p>
<p><a title="Download Sumatra PDF 1.0" href="http://kjkpub.s3.amazonaws.com/sumatrapdf/rel/SumatraPDF-1.0-install.exe" target="_blank">Donwload Sumatra PDF 1.0</a></p>
<p><a title="Download Sumatra PDF 1.0 Portátil" href="http://kjkpub.s3.amazonaws.com/sumatrapdf/rel/SumatraPDF-1.0.zip" target="_blank">Donwload Sumatra PDF 1.0 Portátil</a></p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/windows-7-disponivel-para-todos/' rel='bookmark' title='Permanent Link: Windows 7 Disponível para Todos'>Windows 7 Disponível para Todos</a></li>
<li><a href='http://srcware.com/2009/10/intype-0-3-1-734/' rel='bookmark' title='Permanent Link: Intype 0.3.1.734 &#8211; O TextMate para Windows'>Intype 0.3.1.734 &#8211; O TextMate para Windows</a></li>
<li><a href='http://srcware.com/2009/10/cintanotes-tire-notas-em-qualquer-local/' rel='bookmark' title='Permanent Link: CintaNotes &#8211; Tire notas em qualquer local'>CintaNotes &#8211; Tire notas em qualquer local</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/5QyfOeWr30xdogYbD9suOGWKH0w/0/da"><img src="http://feedads.g.doubleclick.net/~a/5QyfOeWr30xdogYbD9suOGWKH0w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5QyfOeWr30xdogYbD9suOGWKH0w/1/da"><img src="http://feedads.g.doubleclick.net/~a/5QyfOeWr30xdogYbD9suOGWKH0w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=izS15_PHT2Q:WuCvC-8UnB8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=izS15_PHT2Q:WuCvC-8UnB8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=izS15_PHT2Q:WuCvC-8UnB8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=izS15_PHT2Q:WuCvC-8UnB8:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/izS15_PHT2Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/sumatra-pdf-1-0-leitor-de-pdf-para-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/sumatra-pdf-1-0-leitor-de-pdf-para-windows/</feedburner:origLink></item>
		<item>
		<title>Abobe Flash Player 10.1 beta com aceleração por GPU</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/jPEfMJZ1c14/</link>
		<comments>http://srcware.com/2009/11/abobe-flash-player-10-1-beta-com-aceleracao-por-gpu/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 00:20:11 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=750</guid>
		<description><![CDATA[A Adobe acaba de lançar a versão 10.1 beta do seu Flash Player, e uma das grandes novidades desta versão é o suporte para aceleração usando o GPU, que irá melhorar significativamente o desempenho, principalmente em vídeos de alta definição.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/ubuntu-9-10-karmic-koala-beta/' rel='bookmark' title='Permanent Link: Ubuntu 9.10 Karmic Koala Beta'>Ubuntu 9.10 Karmic Koala Beta</a></li>
<li><a href='http://srcware.com/2010/01/speccy-v1-00-089-beta-informacoes-do-sistema/' rel='bookmark' title='Permanent Link: Speccy v1.00.089 Beta &#8211; Informações do Sistema'>Speccy v1.00.089 Beta &#8211; Informações do Sistema</a></li>
<li><a href='http://srcware.com/2009/10/windows-7-disponivel-para-todos/' rel='bookmark' title='Permanent Link: Windows 7 Disponível para Todos'>Windows 7 Disponível para Todos</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A <strong>Adobe</strong> acaba de lançar a <strong>versão 10.1 beta</strong> do seu <strong>Flash Player</strong>, e uma das grandes novidades desta versão é o suporte para aceleração usando o <strong>GPU</strong>, que irá melhorar significativamente o desempenho, principalmente em vídeos de alta definição.</p>
<p><img class="aligncenter size-full wp-image-762" title="Adobe Flash Player Package" src="http://srcware.com/wp-content/uploads/2009/11/adobeflashplayer.jpg" alt="Adobe Flash Player Package" width="300" height="300" /></p>
<p><span id="more-750"></span></p>
<p>Aliados a esta mudança, a Nvidia e a AMD já disponibilizaram os seus drivers, Geforce 195.55 beta e ATI Catalyst 9.11 respectivamente, com suporte para Adobe Flash Player 10.1.</p>
<p>Eu pessoalmente já testei a nova versão do Flash Player com os drivers para a Nvidia, e só tenho a dizer bem até agora. Um dos principais problemas que tinha no meu portátil, era a reprodução de vídeos em alta definição no Youtube, que infelizmente não tinha uma performance muito agradável, problema esse que ficou resolvido com a instalação destes novos drivers e da nova versão do Flash.</p>
<p>Resta-nos agora esperar por uma versão do Flash Player com suporte para 64 bits, que já tem uma versão de testes para Linux, mas que infelizmente tem tardado a chegar ao Windows.</p>
<h3>Adobe Flash Player</h3>
<p><a href="http://get.adobe.com/flashplayer/" target="_blank">Adobe Flash Player Homepage</a><br />
<a href="http://labs.adobe.com/technologies/flashplayer10/"> Download Adobe Flash Player 10.1 beta</a></p>
<h3>Drivers Nvidia para Desktop</h3>
<p><a href="http://www.nvidia.com/object/win7_winvista_32bit_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 32 bits</a><br />
<a href="http://www.nvidia.com/object/win7_winvista_64bit_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 64 bits</a><br />
<a href="http://www.nvidia.com/object/winxp_195.55.html"> Download Nvidia Geforce 195.55 Beta (Windows XP) 32 bits</a><br />
<a href="http://www.nvidia.com/object/winxp64_195.55.html"> Download Nvidia Geforce 195.55 Beta (Windows XP) 64 bits</a></p>
<h3>Drivers Nvidia para Portáteis</h3>
<p><a title="Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 32 bits" href="http://www.nvidia.com/object/notebook_winvista_win7_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 32 bits</a><br />
<a title="Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 64 bits" href="http://www.nvidia.com/object/notebook_winvista_win7_x64_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows Vista / Windows 7) 64 bits</a><br />
<a title="Download Nvidia Geforce 195.55 Beta (Windows XP) 32 bits" href="http://www.nvidia.com/object/notebook_winxp_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows XP) 32 bits</a><br />
<a title="Download Nvidia Geforce 195.55 Beta (Windows XP) 64 bits" href="http://www.nvidia.com/object/notebook_winxp64_195.55.html" target="_blank"> Download Nvidia Geforce 195.55 Beta (Windows XP) 64 bits</a></p>
<h3>Drivers AMD</h3>
<p><a title="Download ATI Catalyst 9.11" href="http://game.amd.com/us-en/drivers_catalyst.aspx" target="_blank">Download ATI Catalyst 9.11</a></p>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/10/ubuntu-9-10-karmic-koala-beta/' rel='bookmark' title='Permanent Link: Ubuntu 9.10 Karmic Koala Beta'>Ubuntu 9.10 Karmic Koala Beta</a></li>
<li><a href='http://srcware.com/2010/01/speccy-v1-00-089-beta-informacoes-do-sistema/' rel='bookmark' title='Permanent Link: Speccy v1.00.089 Beta &#8211; Informações do Sistema'>Speccy v1.00.089 Beta &#8211; Informações do Sistema</a></li>
<li><a href='http://srcware.com/2009/10/windows-7-disponivel-para-todos/' rel='bookmark' title='Permanent Link: Windows 7 Disponível para Todos'>Windows 7 Disponível para Todos</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/Cfnt8uAf-yLu5RF2ytz8Bantrjs/0/da"><img src="http://feedads.g.doubleclick.net/~a/Cfnt8uAf-yLu5RF2ytz8Bantrjs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Cfnt8uAf-yLu5RF2ytz8Bantrjs/1/da"><img src="http://feedads.g.doubleclick.net/~a/Cfnt8uAf-yLu5RF2ytz8Bantrjs/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=jPEfMJZ1c14:x53Kc0YJz64:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=jPEfMJZ1c14:x53Kc0YJz64:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=jPEfMJZ1c14:x53Kc0YJz64:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=jPEfMJZ1c14:x53Kc0YJz64:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/jPEfMJZ1c14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/abobe-flash-player-10-1-beta-com-aceleracao-por-gpu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/abobe-flash-player-10-1-beta-com-aceleracao-por-gpu/</feedburner:origLink></item>
		<item>
		<title>Tutorial de Python – Loops ou Ciclos</title>
		<link>http://feedproxy.google.com/~r/sourceware/~3/yhlqlZEzYuQ/</link>
		<comments>http://srcware.com/2009/11/tutorial-de-python-loops-ou-ciclos/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 23:18:18 +0000</pubDate>
		<dc:creator>Hugo Pires</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Tutorial de Python]]></category>

		<guid isPermaLink="false">http://srcware.com/?p=705</guid>
		<description><![CDATA[Esta semana vamos aprender a criar loops ou ciclos, para quando queremos repetir um conjunto de instruções. Os loops são especialmente úteis quando queremos iterar uma lista ou array, ou para quando queremos executar um conjunto de instruções um determinado número de vezes, ou até que uma condição seja verdadeira.


Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/tutorial-de-python-controlo-de-fluxo/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Controlo de fluxo'>Tutorial de Python &#8211; Controlo de fluxo</a></li>
<li><a href='http://srcware.com/2009/11/tutorial-de-python-funcoes/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Funções'>Tutorial de Python &#8211; Funções</a></li>
<li><a href='http://srcware.com/2009/11/como-fazer-switch-case-em-python/' rel='bookmark' title='Permanent Link: Como fazer switch-case em python?'>Como fazer switch-case em python?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Esta semana vamos aprender a criar loops ou ciclos, para quando queremos repetir um conjunto de instruções. Os loops são especialmente úteis quando queremos iterar uma lista ou array, ou para quando queremos executar um conjunto de instruções um determinado número de vezes, ou até que uma condição seja verdadeira.</p>
<p><img class="aligncenter size-full wp-image-189" title="Python Logo" src="http://srcware.com/wp-content/uploads/2009/10/python.jpg" alt="Python Logo" width="500" height="169" /></p>
<p><span id="more-705"></span></p>
<h3>Instrução while</h3>
<p>A instrução <strong>while</strong> é um ciclo que é executado enquanto uma determinada condição for verdadeira.</p>
<p>Forma de uso:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">while</span> condição:<br />
&nbsp; &nbsp; instruções</div></td></tr></tbody></table></div>
<p>Exemplo:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">num = 0<br />
<span style="color: #ff7700;font-weight:bold;">while</span> num <span style="color: #66cc66;">&lt;</span> 10:<br />
&nbsp; &nbsp; num = <span style="color: #008000;">input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Introduza um número maior ou igual a 10: &quot;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Neste exemplo será sempre pedido ao utilizador um número maior ou igual a 10, enquanto o número introduzido for menor que 10, ou seja, só se o número for maior ou igual a 10 é que sairá do ciclo while.</p>
<h3>Instrução for</h3>
<p>O <strong>for</strong> é um ciclo que serve para iterar cada elemento de uma <a title="Tutorial de Python – Strings e Arrays – Parte 1" href="http://srcware.com/2009/10/tutorial-de-python-strings-e-arrays-parte-1/">lista ou array</a>.</p>
<p>Forma de uso:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> item <span style="color: #ff7700;font-weight:bold;">in</span> lista:<br />
&nbsp; &nbsp; instruções</div></td></tr></tbody></table></div>
<p>Exemplo:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lista = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;banana&quot;</span>, <span style="color: #483d8b;">&quot;laranja&quot;</span>, <span style="color: #483d8b;">&quot;kiwi&quot;</span><span style="color: black;">&#93;</span><br />
<span style="color: #ff7700;font-weight:bold;">for</span> item <span style="color: #ff7700;font-weight:bold;">in</span> lista:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> item</div></td></tr></tbody></table></div>
<p>Neste exemplo foi definida uma lista com os elementos &#8220;banana&#8221;, &#8220;laranja&#8221; e &#8220;kiwi&#8221;, e de seguida foi executado um ciclo <strong>for</strong>, em que para cada &#8220;item&#8221; na &#8220;lista&#8221; vai executar as instruções dentro do ciclo <strong>for</strong>, que neste caso é a impressão do item.</p>
<h3>Função range</h3>
<p>A função <strong>range</strong> retorna um array, em que os elementos são uma sequência de números.<br />
Esta função pode ser usada de três formas. A primeira é usando apenas um parâmetro, e neste caso, vai retornar uma sequência desde o zero até ao número especificado no parâmetro. A segunda forma usa dois parâmetros, e retorna uma sequência desde o número especificado no primeiro parâmetro até ao número especificado no segundo parâmetro. A última forma usa 3 parâmetros, e difere da anterior apenas pelo facto do 3º parâmetro ser o incremento, que pode ser negativo ou não.</p>
<p>Exemplo da utilização da 1ª, 2ª e 3ª forma:</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>5, 10<span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">0</span>, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Respectivo Resultado:</p>
<div class="codecolorer-container text vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<br />
[5, 6, 7, 8, 9]<br />
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]</div></td></tr></tbody></table></div>
<p>Um dos principais usos desta função, é com a instrução for, para quando queremos iterar um bloco de código um determinado número vezes.</p>
<p>Exemplos</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Valor de i:&quot;</span>, i</div></td></tr></tbody></table></div>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>9,-1,-1<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Valor de i:&quot;</span>, i</div></td></tr></tbody></table></div>
<h3>Instruções break, continue, else e pass</h3>
<p>O <strong>break</strong> tal como em C, é uma instrução que quando executada dentro de um ciclo <strong>for</strong> ou <strong>while</strong> interrompe de imediato a execução do ciclo.</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> i == 5:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Valor de i:&quot;</span>, i</div></td></tr></tbody></table></div>
<p>O <strong>continue</strong> tal como no C, permite que se passe de imediato para a iteração seguinte.</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> i == 5:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">continue</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Valor de i:&quot;</span>, i</div></td></tr></tbody></table></div>
<p>O <strong>else</strong> é usado no caso de ser usado um <strong>break</strong>, em que só se o <strong>break</strong> não for executado, é que as instruções no <strong>else</strong> serão executadas de seguida.</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>10<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> i == 5:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">break</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Valor de i:&quot;</span>, i<br />
<span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;O for terminou normalmente.&quot;</span></div></td></tr></tbody></table></div>
<p>A instrução <strong>pass</strong> não faz nada, ou seja, se quisermos definir um ciclo ou função que não tenha nenhuma instrução a ser executada, usamos o <strong>pass</strong>.</p>
<div class="codecolorer-container python vibrant" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">while</span> true:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span></div></td></tr></tbody></table></div>


<p>Artigos Relacionados:<ol><li><a href='http://srcware.com/2009/11/tutorial-de-python-controlo-de-fluxo/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Controlo de fluxo'>Tutorial de Python &#8211; Controlo de fluxo</a></li>
<li><a href='http://srcware.com/2009/11/tutorial-de-python-funcoes/' rel='bookmark' title='Permanent Link: Tutorial de Python &#8211; Funções'>Tutorial de Python &#8211; Funções</a></li>
<li><a href='http://srcware.com/2009/11/como-fazer-switch-case-em-python/' rel='bookmark' title='Permanent Link: Como fazer switch-case em python?'>Como fazer switch-case em python?</a></li>
</ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/19ygsgGQGww_MOvEP1hGJq5vafw/0/da"><img src="http://feedads.g.doubleclick.net/~a/19ygsgGQGww_MOvEP1hGJq5vafw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/19ygsgGQGww_MOvEP1hGJq5vafw/1/da"><img src="http://feedads.g.doubleclick.net/~a/19ygsgGQGww_MOvEP1hGJq5vafw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/sourceware?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/sourceware?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/sourceware?i=yhlqlZEzYuQ:iJncMriGD4Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/sourceware?i=yhlqlZEzYuQ:iJncMriGD4Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/sourceware?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/sourceware?i=yhlqlZEzYuQ:iJncMriGD4Y:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/sourceware?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/sourceware?a=yhlqlZEzYuQ:iJncMriGD4Y:3rz67Hl4C5U"><img src="http://feeds.feedburner.com/~ff/sourceware?d=3rz67Hl4C5U" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/sourceware/~4/yhlqlZEzYuQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://srcware.com/2009/11/tutorial-de-python-loops-ou-ciclos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://srcware.com/2009/11/tutorial-de-python-loops-ou-ciclos/</feedburner:origLink></item>
	</channel>
</rss>
