<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A fronteira final &#187; SVG</title>
	<atom:link href="http://afronteirafinal.com/tag/svg/feed/" rel="self" type="application/rss+xml" />
	<link>http://afronteirafinal.com</link>
	<description>Audaciosamente indo onde nenhum dev jamais esteve</description>
	<lastBuildDate>Thu, 15 Dec 2011 15:52:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>SVG vs CANVAS</title>
		<link>http://afronteirafinal.com/svg-vs-canvas/</link>
		<comments>http://afronteirafinal.com/svg-vs-canvas/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 12:42:03 +0000</pubDate>
		<dc:creator>lcameroon</dc:creator>
				<category><![CDATA[Cameroon]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[DOM SVG]]></category>
		<category><![CDATA[explorecanvas]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[SVG Web]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=211</guid>
		<description><![CDATA[Como você deve ter notado em meu post anterior sobre HTML5 (http://afronteirafinal.com/prepare-se-para-o-html-5), eu abordei sobre SVG e Canvas e nas últimas semanas os debates estão se aquecendo sobre os méritos de cada um, e muitos estão prevendo um &#8220;death match&#8221;. No entanto, minha pesquisa me convence de que cada um tem suas próprias finalidades, mas [...]]]></description>
			<content:encoded><![CDATA[<p>Como você deve ter notado em meu post anterior sobre HTML5 (<a href="http://afronteirafinal.com/prepare-se-para-o-html-5" target="_blank">http://afronteirafinal.com/prepare-se-para-o-html-5</a>), eu abordei sobre SVG e Canvas e nas últimas semanas os debates estão se aquecendo sobre os méritos de cada um, e muitos estão prevendo um &#8220;death match&#8221;. No entanto, minha pesquisa me convence de que cada um tem suas próprias finalidades, mas definitivamente chegou a hora de usá-los.</p>
<h2>O QUE É SVG?</h2>
<p>SVG é uma linguagem para descrever gráficos bidimensionais e aplicações gráficas em XML. Alguns exemplos de SVG são: o logo da Wikipedia (<a href="http://upload.wikimedia.org/wikipedia/commons/7/77/Wikipedia_svg_logo.svg">http://upload.wikimedia.org/wikipedia/commons/7/77/Wikipedia_svg_logo.svg</a>) e o &#8220;Hello World&#8221; do SVG chamado de &#8220;Tiger&#8221; (<a href="http://www.amplesdk.com/examples/svg/tiger">http://www.amplesdk.com/examples/svg/tiger</a>). Veja o fonte desses dois arquivos SVG para ver como SVG parece.<span id="more-211"></span></p>
<p><strong>Demo SVG:</strong></p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="SVG" /></p>
<pre>&lt;svg xmlns:svg="http://www.w3.org/2000/svg"
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 200 100"
  width="200px" height="100px"&gt;
  &lt;circle cx="50" cy="50" r="30"
  style="stroke:none; fill:#ff0000;"/&gt;
  &lt;g transform="translate(100, 20) scale(1.65)"&gt;
  &lt;polygon points="36 25, 25 36, 11 36, 0 25,
  0 11, 11 0, 25 0, 36 11"
  style="stroke:none; fill:#0000ff;" /&gt;
  &lt;/g&gt;
  &lt;rect x="60" y="20" height="60" width="60"
  style="stroke:none; fill:#00ff00;
  fill-opacity: 0.5;" /&gt;
&lt;/svg&gt;</pre>
<h2>O QUE É CANVAS?</h2>
<p>A especificação do HTML 5 define da seguinte forma: &#8220;Elemento de tela que representa um processamento gráficos &#8220;bitmap&#8221; para gerar imagens, gráficos, jogos através de JavaScript&#8221;.</p>
<p><em>Vladimir Vukićević</em> da Mozilla, em 2006, deu uma boa explicação sobre as diferenças entre o SVG e Canvas:</p>
<p>- SVG é baseado em XML. Isto significa que, cada elemento está disponível no DOM SVG (útil quando você deseja anexar os manipuladores de eventos javascript para um elemento). Canvas não é baseado em XML.</p>
<p>- Canvas é processado pixel por pixel. SVG é um monte de vetores e precisa ser manipulado como um grupo de formas. Uma analogia no mundo Photoshop seria, criar um retângulo usando a &#8220;ferramenta forma&#8221; contra usar o &#8220;PaintBrush&#8221;.</p>
<p><strong>Demo Canvas:</strong></p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="Canvas" /></p>
<p>E aqui está o JavaScript que o criou o desenho:</p>
<pre>function drawSimpleCanvas() {
 var canvas =
 document.getElementById("simpleCanvas");
  if (canvas.getContext) {
  var ctx = canvas.getContext("2d");
  ctx. (); // the circle
  ctx.fillStyle = "#ff0000";
  ctx.arc(50, 50, 30, 0, 2*Math.PI, true);
  ctx.closePath();
  ctx.fill();
  ctx.save();
  // move and resize the octagon
  ctx.translate(100, 20);
  ctx.scale(1.65, 1.65);
  ctx.fillStyle = "#0000ff";
  ctx.beginPath();
  ctx.moveTo(36, 25); ctx.lineTo(25, 36);
  ctx.lineTo(11, 36); ctx.lineTo(0, 25);
  ctx.lineTo(0, 11); ctx.lineTo(11, 0);
  ctx.lineTo(25, 0); ctx.lineTo(36, 11);
  ctx.closePath();
  ctx.fill();
  // restore graphics as they
  // were before move and resize
  ctx.restore();
  ctx.fillStyle = "#00ff00";
  ctx.globalAlpha = 0.5;
  ctx.beginPath();
  ctx.rect(60, 20, 60, 60);
  ctx.closePath();
  ctx.fill();
 }
}</pre>
<h2>QUEM VAI GANHAR?</h2>
<p>Mesmo que sejam completamente diferentes na sua natureza e finalidade, há várias coisas que pode ser feito usando &#8220;Canvas&#8221; e &#8220;SVG&#8221;. A recente popularização do elemento &#8220;Canvas&#8221; parecem para  algumas pessoas a morte do SVG. Mas pelo que notei está longe da verdade.</p>
<p>O &#8220;Canvas&#8221; é tão bom como uma imagem &#8211; mas ele não manipula pixel por pixel. Neste momento, elemento Canvas não suporta os &#8220;manipuladores&#8221; de eventos (por exemplo, ter um retângulo 20x60px dentro de um canvas que seja clicável). Já com o SVG isso é possível.</p>
<p>Canvas em seu estado &#8220;natural&#8221; não é acessível. O SVG, porém, é bastante acessível.</p>
<p>No entanto existe diferenças significativas de desempenho entre Canvas e SVG. O resultado do experimento descrito no link (<a href="http://www.borismus.com/canvas-vs-svg-performance" target="_blank">http://www.borismus.com/canvas-vs-svg-performance</a>) é que: Canvas é mais adequado para um &#8220;gráficos intensivos&#8221; onde o objeto são os redesenhos com freqüência (como um jogo), enquanto o SVG é melhor para aplicações que envolvem grandes áreas de processamento (como Google Maps).</p>
<h2>POSSO USÁ-LOS AGORA?</h2>
<p>Sim, pode. Existem muitas iniciativas para permitir que os navegadores que não suportam SVG ou Canvas tornarem-se &#8220;usáveis&#8221; por outros meios. O Google tem um impressionante projeto <strong>SVG Web</strong> (<a href="http://code.google.com/p/svgweb/" target="_blank">http://code.google.com/p/svgweb/</a>) que usa o Flash para renderizar SVG em navegadores que não suportam SVG nativamente. Para Canvas, o Google tem uma biblioteca &#8220;<strong>explorecanvas</strong>&#8221; (<a href="http://code.google.com/p/explorercanvas/" target="_blank">http://code.google.com/p/explorercanvas/</a>) que utiliza VML (ou Silverlight) para processar os elementos Canvas (basta incluir o arquivo excanvas.js, e ele deve funcionar) no Internet Explorer.</p>
<h2>ENTÃO&#8230; QUEM GANHA?</h2>
<p>Ambos. Estas é uma fase fantástica para SVG e Canvas. Finalmente temos uma alternativa natural para o &#8220;Flash&#8221; e animação de necessidade básica. Mantenha seus olhos abertos no &#8220;mailing list&#8221;  do &#8220;W3C HTML Working Group&#8221; (<a href="http://lists.w3.org/Archives/Public/public-html/" target="_blank">http://lists.w3.org/Archives/Public/public-html/</a>) para as últimas notícias.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/svg-vs-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prepare-se para o HTML 5</title>
		<link>http://afronteirafinal.com/prepare-se-para-o-html-5/</link>
		<comments>http://afronteirafinal.com/prepare-se-para-o-html-5/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 18:45:12 +0000</pubDate>
		<dc:creator>lcameroon</dc:creator>
				<category><![CDATA[Cameroon]]></category>
		<category><![CDATA[(X)HTML 5]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[Web Forms 2]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=14</guid>
		<description><![CDATA[Com apoio no Chrome, Firefox 3.5, Opera e Safari, o HTML 5 está chegando em você como um trem desgovernado. Aqui estão algumas sugestões para ajudar você a se preparar para subir a bordo ao invés de ser deixada na plataforma ou atropelado. Veja o que outros têm feito A primeira coisa que você pode [...]]]></description>
			<content:encoded><![CDATA[<p>Com apoio no Chrome, Firefox 3.5, Opera e Safari, o HTML 5 está chegando em você como um trem desgovernado. Aqui estão algumas sugestões para ajudar você a se preparar para subir a bordo ao invés de ser deixada na plataforma ou atropelado.</p>
<p><span id="more-14"></span></p>
<p><strong>Veja o que outros têm feito</strong></p>
<p>A primeira coisa que você pode fazer para se preparar para o HTML 5 é ver como as outras pessoas estão usando. Uma visita à galeria de HTML 5 (<a title="http://html5gallery.com/" href="http://html5gallery.com/" target="_blank">http://html5gallery.com/</a>) vai mostrar como vários sites já estão usando os novos elementos de HTML 5. Use-o como fonte de inspiração!</p>
<p><strong>Agora, mão à obra</strong></p>
<p>Você pode olhar para os sites (<a title="http://html5doctor.com/" href="http://html5doctor.com/" target="_blank">http://html5doctor.com/</a>), ler todos os artigos disponíveis na internet e até mesmo ler as especificações (<a title="http://www.whatwg.org/specs/web-apps/current-work/" href="http://www.whatwg.org/specs/web-apps/current-work/" target="_blank">http://www.whatwg.org/specs/web-apps/current-work/</a>), mas nenhum deles vão te ajudar a entender o HTML 5, tanto quanto utilizando os novos elementos. Você pode modificar parte de um site existente ou fazer uma experiência criando novas páginas. Faça isso com seu site pessoal, de amigos ou até  em sua empresa.</p>
<p>Ao fazer isso, você vai descobrir o que funciona e o que não funciona. Por exemplo, eu descobri que o Firefox 3.5 trata elementos como o <strong>article</strong> e a <strong>section</strong> como <strong>display:inline </strong>e eu tinha que definir explicitamente-los para <strong>display:block</strong> para fazê-los funcionar como esperado.</p>
<p><strong>O (X) em análise</strong></p>
<p>Se você é como a maioria dos designers, você provavelmente não escreve todas as marcações (tags) na mão. Mas até os bons editores tentam acompanhar os novos elementos de (X)HTML 5,  e mesmo assim você acaba fazendo algumas marcações na mão e desta forma você acaba aprendendo um pouco. Existe um pouco de confusão (e polêmica!) sobre a relação entre HTML 5, XHTML 1.0/1.1 e XHTML 5. Vamos deixar tudo bem claro agora.</p>
<p>HTML 4.0 (a linguagem de marcação que todos nós conhecemos e amamos) é baseada em um &#8220;livro de regras&#8221; (rulebook) chamado SGML. No livro de regras da SGML, os nomes dos elementos não são &#8220;case sensitive&#8221;, você pode ter elementos com tags de fechamento opcional (como <strong>&lt;p&gt;</strong>) e você pode ter valores de atributo sem aspas.</p>
<p>XHTML 1.0 e 1.1 são baseados em um &#8220;livro de regras&#8221; chamado XML. No livro de regras XML, elemento e atributo nomes são &#8220;case sensitive&#8221;, cada tag de abertura deve ter uma tag de fechamento e os valores dos atributos devem estar entre aspas.</p>
<p>HTML 5 define uma linguagem de marcação que não seja baseado em qualquer livro de regras, mas podem ser escritas de &#8220;forma HTML&#8221; (ou renderizada, conforme a especificação chamada) ou de &#8221; forma XHTML&#8221;.</p>
<p>Quando você escreve de &#8220;forma HTML&#8221;, você está autorizando deixar algumas tags abertas, valores de atributos sem aspas e elementos e nomes de atributos não são case sensitive. Você também terá de usar em algumas tags marcação XML, será obrigado a colocar barra em elementos como <strong>&lt;img /&gt;</strong> ou <strong>&lt;hr /&gt;</strong></p>
<p>Quando você usa a serialização XHTML, você tem que seguir as regras XML mencionado alguns parágrafos atrás.</p>
<p>Eu sugiro que você escreva a sua marcação em XHTML 5, ou, se você usar o HTML 5, fazer a marcação como se fosse XHTML. Vai ser melhor ficar com o padrão XML que requer um tag de fechamento para cada tag de abertura, em vez de gastar o seu tempo de para otimizar as tags que têm fechamento e/ou abertura opcional. Da mesma forma, colocar com aspas todos os valores de atributo ao invés de tentar decidir quando você pode deixar o valor de atributo sem aspas. Além de não ter que gastar neurônios sobre essas decisões, a marcação será mais consistente.</p>
<p>Se você utiliza alguma ferramenta de geração automática de marcação configure para gerar XHTML 5 em vez do HTML 5. O uso de XML é o futuro, seus espaços permitem que você tenha documentos &#8220;poliglota&#8221;, que consistem em várias marcações para além do HTML5 o RDF, MathML e o SVG. Você também pode usar ferramentas como XPath, XSLT e XQuery de marcação baseada em XML, utilizando qualquer analisador XML de sua escolha.</p>
<p>Claro, nem tudo é boa notícia. Se você trabalhar com XHTML 5, lembre-se que o servidor deve entregar os documentos com um tipo MIME de <strong>application/xhtml+xml</strong> ou <strong>text/xml</strong>. Isto pode envolver a negociação com o seu serviço de hospedagem. Além disso, quando você entregar um arquivo XML, qualquer erro de sintaxe irá causar uma mensagem de erro.</p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/xml_parsing_error.png" alt="Error Message" /></p>
<p>Se você estiver fazendo a marcação com a mão, acho que essas mensagens de erro manterá você fiel a validação. Se você estiver usando ferramentas que criam XHTML, não há problema, pois a maioria das ferramentas produzem códigos XML bem formados.</p>
<p><strong>Expressões Regulares</strong></p>
<p>HTML 5 estende o elemento <strong> input</strong> oferecendo novos atributos que permitem especificar os dados de entrada. Esses atributos incluem <strong> min</strong> e <strong>max</strong> (para definir um intervalo numérico), e também oferece novos valores para o atributo <strong>type</strong> como a <strong> url</strong>, <strong> email</strong>, <strong>date</strong> e <strong>time</strong></p>
<p>Se nenhum desses novos tipos de entrada atendem às suas necessidades o HTML 5 fornece o atributo <strong>pattern</strong> para elementos <strong>input</strong> com <strong>type=&#8221;text&#8221;</strong>. O valor do atributo <strong>pattern</strong> é uma expressão regular, tal como definido no ECMAScript e utilizado em JavaScript. As expressões regulares são uma forma concisa e talvez um tanto enigmática de especificar um padrão de caracteres. Por exemplo, se eu quiser um jogo de cinco dígitos mais hífen e três caracteres para CEP, posso usar esse padrão:</p>
<pre><strong>([0-9]{5}-[0-9]{3})</strong></pre>
<p>Todo poder do novo formulário web já estão parcialmente implementado no Safari e Chrome, e completamente no Opera (veja este site <a title="http://a.deveria.com/caniuse/" href="http://a.deveria.com/caniuse/" target="_blank">http://a.deveria.com/caniuse/</a> para obter mais informações sobre a capacidade de cada browser). Não se preocupe se o seu browser ainda não suporta as extensões do form para o HTML 5, você pode fazer o download do Google Web Forms 2 (<a title="http://code.google.com/p/webforms2/" href="http://code.google.com/p/webforms2/" target="_blank">http://code.google.com/p/webforms2/</a>)</p>
<p>Aqui está um exemplo de formulário que valida data e cep:</p>
<pre>&lt;p&gt;
  Digite uma data: &lt;input type="date" name="data"
  required="required"
  title="Fotmato de data dd-mm-yyyy" /&gt;
&lt;/p&gt;</pre>
<pre>&lt;p&gt;
  Digite um cep:
  &lt;input type="text" name="cep"
   required="required"
   pattern="([0-9]{5}-[0-9]{3})"
title="CEP: 99999-999" /&gt;
&lt;/p&gt;</pre>
<p>As expressões regulares são muito úteis e vale a pena investir um tempo para aprender. Muitos editores de texto já tem integrado pesquisa com expressão regular e substituição características, e quando você começar a usá-los, você nunca mais conseguirá ficar  sem eles.</p>
<p><strong>Arte estática com SVG</strong></p>
<p>Se você quiser que as bordas nítidas, o HTML 5 permite que você use SVG (Scalable Vector Graphics) em seus documentos. Colocar inline SVG é parcialmente implementado em Firefox, Safari e Opera, de acordo com este site (<a title="http://wiki.whatwg.org/wiki/Implementations_in_Web_browsers" href="http://wiki.whatwg.org/wiki/Implementations_in_Web_browsers" target="_blank">http://wiki.whatwg.org/wiki/Implementations_in_Web_browsers</a>).</p>
<p>E aqui está o SVG gerado:</p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="SVG" /></p>
<pre>&lt;svg xmlns:svg="http://www.w3.org/2000/svg"
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 200 100"
  width="200px" height="100px"&gt;
  &lt;circle cx="50" cy="50" r="30"
  style="stroke:none; fill:#ff0000;"/&gt;
  &lt;g transform="translate(100, 20) scale(1.65)"&gt;
  &lt;polygon points="36 25, 25 36, 11 36, 0 25,
  0 11, 11 0, 25 0, 36 11"
  style="stroke:none; fill:#0000ff;" /&gt;
  &lt;/g&gt;
  &lt;rect x="60" y="20" height="60" width="60"
  style="stroke:none; fill:#00ff00;
  fill-opacity: 0.5;" /&gt;
&lt;/svg&gt;</pre>
<p>Embora seja possível usar o JavaScript para modificar dinamicamente um gráfico SVG, HTML 5 oferece uma melhor solução:</p>
<p><strong>Canvas em ação</strong></p>
<p>O elemento de canvas é uma das características mais marcantes do HTML 5, e é suportada pelo Firefox, Safari, Opera e Chrome mas não pelo Internet Explorer. O elemento de <strong>canvas</strong> é realmente uma característica promissora. Você usa JavaScript para desenhar o que você precisa sobre a tela em branco. (Obs: A qualidade gráfica me surpreendeu!)</p>
<p>Aqui está o mesmo desenho feito com SVG em Canvas:</p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="Canvas" /></p>
<p>E aqui está o JavaScript que o criou o desenho:</p>
<pre>function drawSimpleCanvas() {
 var canvas =
 document.getElementById("simpleCanvas");
  if (canvas.getContext) {
  var ctx = canvas.getContext("2d");
  ctx. (); // the circle
  ctx.fillStyle = "#ff0000";
  ctx.arc(50, 50, 30, 0, 2*Math.PI, true);
  ctx.closePath();
  ctx.fill();
  ctx.save();
  // move and resize the octagon
  ctx.translate(100, 20);
  ctx.scale(1.65, 1.65);
  ctx.fillStyle = "#0000ff";
  ctx.beginPath();
  ctx.moveTo(36, 25); ctx.lineTo(25, 36);
  ctx.lineTo(11, 36); ctx.lineTo(0, 25);
  ctx.lineTo(0, 11); ctx.lineTo(11, 0);
  ctx.lineTo(25, 0); ctx.lineTo(36, 11);
  ctx.closePath();
  ctx.fill();
  // restore graphics as they
  // were before move and resize
  ctx.restore();
  ctx.fillStyle = "#00ff00";
  ctx.globalAlpha = 0.5;
  ctx.beginPath();
  ctx.rect(60, 20, 60, 60);
  ctx.closePath();
  ctx.fill();
 }
}</pre>
<p>Veja Canvas tutorial da Mozilla (<a title="Canvas tutorial" href="https://developer.mozilla.org/en/Canvas_tutorial" target="_blank">https://developer.mozilla.org/en/Canvas_tutorial</a>) para uma introdução mais aprofundada.</p>
<p><strong>O que você está esperando?</strong></p>
<p>Apesar de alguns desenvolvedores terem receio sobre a direção em que o HTML 5 está levando a web (e eu compartilho com este receio), as características do HTML 5 são bem interessantes e vale a pena ser explorada. Assim, comece a olhar código fonte de outras pessoas, e fazer experiências em seu próprio site, e mergulhe nas novas características de validação de formulários e as de CANVAS.</p>
<h6><em>Post baseado no artigo de J. David Eisenberg (<a title="catcode@catcode.com" href="mailto:catcode@catcode.com">catcode@catcode.com</a>) também escritor do livro SVG &#8211; Scalable Vector Graphics e professor em San Jose, CA.</em></h6>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/prepare-se-para-o-html-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

