<?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:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Tableless.com.br - Web Standards com Arroz e Feijão</title>
	
	<link>http://tableless.com.br</link>
	<description>Notícias, podcast, posts, novidades, tutoriais sobre Padrões Web, boas práticas de desenvolvimento com arroz e feijão.</description>
	<lastBuildDate>Fri, 01 Jun 2012 20:08:36 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<feedburner:info uri="tableless" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><media:copyright>Creative Commons - Atribuição-Uso Não-Comercial-Compatilhamento</media:copyright><media:thumbnail url="http://www.tableless.com.br/wp-content/themes/tableless2011/images/logo.png" /><media:keywords>css,xhtml,xml,ajax,web,standards,padrões,web,asp,php,png,desenvolvimento,acessibilidade,usabilidade,usability,tecnologia,technology,w3c,tableless,table,javascript,mobilidade,internet,móvel,world,wide,web,consortium</media:keywords><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Podcasting</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Gadgets</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Software How-To</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Tech News</media:category><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Business/Careers</media:category><itunes:owner><itunes:email>diego@tableless.com.br</itunes:email><itunes:name>Tableless.com.br</itunes:name></itunes:owner><itunes:author>Tableless.com.br</itunes:author><itunes:explicit>no</itunes:explicit><itunes:image href="http://www.tableless.com.br/wp-content/themes/tableless2011/images/logo.png" /><itunes:keywords>css,xhtml,xml,ajax,web,standards,padrões,web,asp,php,png,desenvolvimento,acessibilidade,usabilidade,usability,tecnologia,technology,w3c,tableless,table,javascript,mobilidade,internet,móvel,world,wide,web,consortium</itunes:keywords><itunes:subtitle>Tableless Podcast</itunes:subtitle><itunes:summary>Podcast sobre Padrões Web. Falamos sobre desenvolvimento com Padrões Web.</itunes:summary><itunes:category text="Technology"><itunes:category text="Podcasting" /></itunes:category><itunes:category text="Technology"><itunes:category text="Gadgets" /></itunes:category><itunes:category text="Technology"><itunes:category text="Software How-To" /></itunes:category><itunes:category text="Technology"><itunes:category text="Tech News" /></itunes:category><itunes:category text="Business"><itunes:category text="Careers" /></itunes:category><geo:lat>-23.66180</geo:lat><geo:long>-46.63760</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.0/</creativeCommons:license><image><link>http://www.tableless.com.br/assine/</link><url>http://feeds.feedburner.com/~fc/tableless?bg=99CCFF&amp;amp;fg=000000&amp;amp;anim=0</url><title>Se mexendo e contando.</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.tableless.com.br/feed/" /><feedburner:browserFriendly>Esse é o Feed do Tableless.com.br, um site sobre Web Standards e boas práticas de formatação de layout usando CSS.</feedburner:browserFriendly><item>
		<title>Podcast #2 – Acessibilidade</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/RDSjOS4zxwY/</link>
		<comments>http://tableless.com.br/podcast-2-acessibilidade/#comments</comments>
		<pubDate>Fri, 01 Jun 2012 12:35:59 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6224</guid>
		<description><![CDATA[Falamos um pouco sobre Acessibilidade. Quais podem ser suas atitudes para melhorar seu projeto e tornar a web um pouco mais acessível. Falamos sobre o que e por que fazer um código acessível e mesmo assim achamos que este podcast &#8230;]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/VZQf6hPH67NVyNWOcpGWnT1-1O4/0/da"><img src="http://feedads.g.doubleclick.net/~a/VZQf6hPH67NVyNWOcpGWnT1-1O4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/VZQf6hPH67NVyNWOcpGWnT1-1O4/1/da"><img src="http://feedads.g.doubleclick.net/~a/VZQf6hPH67NVyNWOcpGWnT1-1O4/1/di" border="0" ismap="true"></img></a></p><p>Falamos um pouco sobre Acessibilidade. Quais podem ser suas atitudes para melhorar seu projeto e tornar a web um pouco mais acessível. Falamos sobre o que e por que fazer um código acessível e mesmo assim achamos que este podcast ficou um pouco superficial. Estamos planejando fazer outro sobre o mesmo assunto, alguma hora. Enjoy! <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Participação do @diegoeis, @alyssonfranklin, @reinaldoferraz e @paulorodriguesw</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F48274397&#038;show_artwork=true"></iframe></p>
<p><a href="http://tableless.com.br/podcast/podcast2.mp3">Download do Arquivo</a>.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/drops-6-acessibilidade/" title="Drops 6 &#8211; Acessibilidade">Drops 6 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/" title="Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas">Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas</a></li><li><a href="http://tableless.com.br/schema-marcacao-de-dados-estruturados/" title="Schema &#8211; Marcação de dados estruturados">Schema &#8211; Marcação de dados estruturados</a></li><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><li><a href="http://tableless.com.br/responsive-web-design-voce-esta-fazendo-isso-errado/" title="Responsive Web Design &#8211; focando a coisa certa">Responsive Web Design &#8211; focando a coisa certa</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RDSjOS4zxwY:KtnxJNC254g:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=RDSjOS4zxwY:KtnxJNC254g:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/RDSjOS4zxwY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/podcast-2-acessibilidade/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>

		<media:content url="http://feedproxy.google.com/~r/tableless/~5/I1BOPppYji0/podcast2.mp3" fileSize="51478528" type="audio/mpeg" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Falamos um pouco sobre Acessibilidade. Quais podem ser suas atitudes para melhorar seu projeto e tornar a web um pouco mais acessível. Falamos sobre o que e por que fazer um código acessível e mesmo assim achamos que este podcast &amp;#8230;</itunes:subtitle><itunes:author>Tableless.com.br</itunes:author><itunes:summary>Falamos um pouco sobre Acessibilidade. Quais podem ser suas atitudes para melhorar seu projeto e tornar a web um pouco mais acessível. Falamos sobre o que e por que fazer um código acessível e mesmo assim achamos que este podcast &amp;#8230;</itunes:summary><itunes:keywords>css,xhtml,xml,ajax,web,standards,padrões,web,asp,php,png,desenvolvimento,acessibilidade,usabilidade,usability,tecnologia,technology,w3c,tableless,table,javascript,mobilidade,internet,móvel,world,wide,web,consortium</itunes:keywords><feedburner:origLink>http://tableless.com.br/podcast-2-acessibilidade/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/tableless/~5/I1BOPppYji0/podcast2.mp3" length="51478528" type="audio/mpeg" /><feedburner:origEnclosureLink>http://tableless.com.br/podcast/podcast2.mp3</feedburner:origEnclosureLink></item>
		<item>
		<title>“HTTP Archive” Ferramenta para performance</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/Kv6VmsBlmb8/</link>
		<comments>http://tableless.com.br/http-archive-ferramenta-para-performance/#comments</comments>
		<pubDate>Wed, 30 May 2012 14:50:32 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Perfomance]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6138</guid>
		<description><![CDATA[Verifique algumas características importantes sobre performance e velocidade do seu website.
]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/wdOUIhujXMZoVg6GaXf4To3IxbI/0/da"><img src="http://feedads.g.doubleclick.net/~a/wdOUIhujXMZoVg6GaXf4To3IxbI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wdOUIhujXMZoVg6GaXf4To3IxbI/1/da"><img src="http://feedads.g.doubleclick.net/~a/wdOUIhujXMZoVg6GaXf4To3IxbI/1/di" border="0" ismap="true"></img></a></p><p>Este é o primeiro post sobre um tema que ainda não temos falado muito aqui no tableless, mas é um tema muito importante tanto para nós Front-end quanto para Back-end&#8217;s que é a <strong>performance</strong>. Hoje mostrarei uma ferramenta para analisar a performance do seu projeto web.</p>
<h2>A ferramenta HTTP Archive</h2>
<p>Este projeto iniciou-se no começo de novembro de 2010, através de análises de Urls e armazenamento de suas informações (subresource URLs, HTTP headers, sizes, etc.) em banco de dados. Falando em resumo do que se trata essa ferramenta: ela grava os dados de seu site e retorna toda uma lista com esses dados tais como Page Speed, Requests, status entre outros. Ele também gera esses dados para download, facilitando a analize. O mais legal é o Filmstrip de video, onde é gerado thumbs, mostrando o que o usuario está vendo a cada segundo que seu site esta sendo carregado. Ele mostra também uma trend do seu HTML, CSS, JS que esta sendo carregado com um gráfico.</p>
<p>Essas são umas das opções que ele dispões e vale a pena o uso da ferramenta. Ajuda muito para aqueles que querem ter uma analize sobre o seu projeto, isso pode ser que para alguns não é util como para site institucionais onde o cliente pouco importa com isso, mas para aqueles que se importam ou trabalham em algum portal ou sistema grande.</p>
<h2>Missão do HTTP Archive</h2>
<p>Instituições bem sucedidas reconhecem a necessidade de registrar sua história &#8211; isso fornece uma maneira de rever o passado. Em 1996, Brewster Kahle percebeu o significado &#8220;cultural&#8221; da internet e a necessidade de registrar sua história. Como resultado ele fundou o  <a href="http://archive.org/">Internet Archive</a> que coleta e armazena permanentemente conteúdo digitalizado da web.</p>
<p>Além do conteúdo das páginas web, é importante registrar como esse conteúdo digitalizado é construido e servido. O HTTP Archive fornece esse registro.</p>
<p>Em novembro de 2011 o HTTP Archive começou a aumentar os registros de Urls de 10k para 25k, 50k, 75k, e agora neste mês chegaram a 100 mil, o objetivo do HTTP Archive é arquivar 1 milhão de Urls até final de 2012.</p>
<h2>Como usar? Como funciona?</h2>
<p>Bom é bem simples de usar e com pouco tempo &#8220;brincando&#8221; com a ferramenta é possível ter uma análise legal do seu site.</p>
<p>Para usar a ferramenta você precisa entrar no <a href="http://httparchive.org/addsite.php">HTTP Archive</a> e adicionar a URL do site que deseja analisar, você deve esperar uns 5 dias para que o site seja adicionado e depois ele será incluindo nos próximos rastreamento.</p>
<p>Estou fazendo alguns testes no site onde trabalho (Peixe Urbano), então vou colocar o <a href="http://httparchive.org/viewsite.php?pageid=1201519">link</a>  para que você de uma olhada nos dados que ele retorna. Veja aqui os dados do Peixe Urbano no <a href="http://httparchive.org/viewsite.php?pageid=1201519">HTTP Archive</a>.</p>
<h3  class="related_post_title">Mais comentados</h3><ul class="related_post"><li><a href="http://tableless.com.br/editores/" title="Editores">Editores</a></li><li><a href="http://tableless.com.br/quer-testar-o-google-analytics/" title="Quer testar o Google Analytics?">Quer testar o Google Analytics?</a></li><li><a href="http://tableless.com.br/chrome-nao-quer-dizer-muita-coisa/" title="O Chrome não quer dizer muita coisa">O Chrome não quer dizer muita coisa</a></li><li><a href="http://tableless.com.br/desenvolvedor-analfabeto/" title="Desenvolvedor analfabeto (sim, é sobre WYSIWYG)">Desenvolvedor analfabeto (sim, é sobre WYSIWYG)</a></li><li><a href="http://tableless.com.br/nao-otimize-seu-codigo/" title="Não &#8220;otimize&#8221; seu código">Não &#8220;otimize&#8221; seu código</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=Kv6VmsBlmb8:xB4dYUmQMok:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=Kv6VmsBlmb8:xB4dYUmQMok:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/Kv6VmsBlmb8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/http-archive-ferramenta-para-performance/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://tableless.com.br/http-archive-ferramenta-para-performance/</feedburner:origLink></item>
		<item>
		<title>Eventos Front-end que você não pode perder em 2012</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/32lvQu_sp_E/</link>
		<comments>http://tableless.com.br/eventos-front-end-que-voce-nao-pode-perder-em-2012/#comments</comments>
		<pubDate>Wed, 30 May 2012 11:38:04 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Tecnologia e Tendências]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6207</guid>
		<description><![CDATA[Fique por dentro do que acontece de melhor na nossa área!]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/P2qhbm7HPuen0__WXVBkfVP55Pg/0/da"><img src="http://feedads.g.doubleclick.net/~a/P2qhbm7HPuen0__WXVBkfVP55Pg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/P2qhbm7HPuen0__WXVBkfVP55Pg/1/da"><img src="http://feedads.g.doubleclick.net/~a/P2qhbm7HPuen0__WXVBkfVP55Pg/1/di" border="0" ismap="true"></img></a></p><p>Esse tem sido um ano bem agitado para comunidade de desenvolvimento front-end por todo o nosso país. A popularidade que o JavaScript alcançou graças a iniciativas como HTML5 e NodeJS foi simplesmente assustadora, despertando o interesse de empresas e desenvolvedores para o assunto.</p>
<p>Desde o início do ano já tivemos diversos eventos focados apenas em front-end e que fizeram um maior sucesso por aí. Logo em janeiro rolou o <a href="http://www.bhjs.com.br/">BeagaJS</a> em Minas Gerais, depois veio o <a href="http://rsjs.org/">RSJS</a>  que rolou em março na cidade de Porto Alegre. Ainda no mês de março teve o <a href="http://sampajs.com/">SampaJS</a> na capital paulista e em abril tivemos o <a href="http://www.pernambucojs.com/">PernambucoJS</a> em Recife, isso sem contar nos encontros mensais do <a href="http://riojs.org">Rio.js</a>.</p>
<p>Rolou de tudo, muito aprendizado, troca de experiências e networking, mas se você perdeu algum e/ou quer ficar ligado nos próximos que vão acontecer por aí, fica ligado nessa agenda com as melhores dicas que preparamos pra você.</p>
<h2>Front in Rio &#8211; 02/06</h2>
<p><a href="http://www.frontinrio.com.br/"><img src="http://media.zenorocha.com/tableless/frontinrio.jpg" alt="" /></a></p>
<p>Pra começar tem o <a href="http://www.frontinrio.com.br/">Front in Rio</a>, que chega na sua segunda edição com nomes de destaque no mercado.</p>
<p>Bernardo Heynemann (<a href="https://twitter.com/#!/heynemann">@heynemann</a>) vai desmistificar alguns mitos sobre Responsive Design e ainda contar sua experiência na implementação dessa técnica na home da <a href="http://globo.com">Globo.com</a>. Destaque também para o Leo Balter (<a href="https://twitter.com/#!/leobalter">@leobalter</a>), representante da Mozilla, que vai falar sobre o novo cinto de utilidades do desenvolvedor JavaScript. Entre outros caras muito bons.</p>
<p>As inscrições já se esgotaram e o público estimado é de aproximadamente 150 pessoas. Já o endereço é o mesmo da edição passada, a Universidade Federal do Estado do Rio de Janeiro &#8211; <a href="http://www.unirio.br/">UNIRIO</a>, sempre com aquele visual feio, bem aos pés do Pão de Açúcar.</p>
<p>Mais informações: <a href="http://www.frontinrio.com.br/">frontinrio.com.br</a></p>
<h2>Front in Curitiba &#8211; 23 e 24/06</h2>
<p><a href="http://www.frontincuritiba.com.br/"><img src="http://media.zenorocha.com/tableless/frontincuritiba.jpg" alt="" /></a></p>
<p>Pela primeira vez na capital paranaense chega um evento focado apenas em front-end, é o <a href="http://www.frontincuritiba.com.br/">Front in Curitiba</a> comandado pelos mesmo organizadores do <a href="http://frontinlondrina.com.br/">Front in Londrina</a> que rolou ano passado.</p>
<p>O evento traz para palestrar nomes como Reinaldo Ferraz (<a href="https://twitter.com/#!/reinaldoferraz">@reinaldoferraz</a>) da <a href="http://www.w3c.br/Home/WebHome">W3C</a> e Talita Pagani (<a href="https://twitter.com/#!/talitapagani">@talitapagani</a>) editora aqui do Tableless. E ainda vai rolar mini cursos com o professor Horácio Soares (<a href="https://twitter.com/#!/horaciosoares">@horaciosoares</a>), Alysson Franklin (<a href="https://twitter.com/#!/alyssonfranklin">@alyssonfranklin</a>) da <a href="http://www.ibm.com/br/pt/">IBM</a>, entre outros.</p>
<p>O evento acontece na UTFPR e as inscrições ainda não foram abertas, mas o preço deve girar em torno de R$ 60,00.</p>
<p>Mais informações: <a href="http://www.frontincuritiba.com.br/">frontincuritiba.com.br</a></p>
<h2>Front in BH &#8211; 14/07</h2>
<p><a href="http://frontinbh.com.br/"><img src="http://media.zenorocha.com/tableless/frontinbh.jpg" alt="" /></a></p>
<p>Em julho tem o <a href="http://frontinbh.com.br/">Front in BH</a>, que chega na sua segunda edição com um passado de sucesso. A estimativa para esse ano é de cerca de 300 participantes e a grade vem novamente recheada com grandes profissionais.</p>
<p>Vai ter a presença ilustre de Alex Tabor, co-fundador e CTO do <a href="http://www.peixeurbano.com.br">Peixe Urbano</a>, Alexandre Gaigalas (<a href="https://twitter.com/#!/alganet">@alganet</a>) do Yahoo, Bernard de Luna (<a href="http://twitter.com/bernarddeluna">@bernarddeluna</a>) da Melt e muitos outros.</p>
<p>Corre lá que as inscrições já estão abertas e giram em torno de R$ 45,00.</p>
<p>Mais informações: <a href="http://frontinbh.com.br/">frontinbh.com.br</a></p>
<h2>BrazilJS &#8211; 30 e 31/08</h2>
<p><a href="http://braziljs.com.br/"><img src="http://media.zenorocha.com/tableless/braziljs.jpg" alt="" /></a></p>
<p>Já em agosto, se prepare para a maior conferência de JavaScript do universo!</p>
<p>É o <a href="http://braziljs.com.br/">BrazilJS</a> que chega em Porto Alegre, depois de uma primeira edição sensacional que rolou em Fortaleza. Para esse ano os organizadores Felipe Moura (<a href="https://twitter.com/#!/felipenmoura">@felipenmoura</a>) e Jaydson (<a href="http://twitter.com/jaydson">@jaydson</a>) estão preparando uma estrutura gigantesca para comportar cerca de 1.000 participantes.</p>
<p>As inscrições ainda não foram abertas e a grade de palestrantes também não foi divulgada. Mesmo assim, espere uma lista repleta de palestrantes internacionais e vá separando seu final de agosto para esse evento, porque eu tenho certeza de que vai ser incrível.</p>
<p>Mais informações: <a href="http://braziljs.com.br/">braziljs.com.br</a></p>
<h2>E ainda&#8230;</h2>
<p>Não acabou amigo, tem muito mais por vir.</p>
<p>A equipe do Tableless está preparando um evento bem legal em São Paulo. O nome ainda não está definido, mas o evento deve rolar em agosto e a estimativa de público é de cerca de 150 participantes, já a inscrição custará em torno de R$ 250,00. Mais detalhes em breve.</p>
<p><a href="http://qconsp.com/"><img src="http://media.zenorocha.com/tableless/qcon.jpg" alt="" /></a></p>
<p>Também em agosto e também em Sampa, vai rolar a <a href="http://qconsp.com/">QCon</a>, conferência relevante no cenário de desenvolvimento de software por todo o mundo. A trilha de web promete, com nomes como Eduardo Shiota (<a href="https://twitter.com/#!/shiota">@shiota</a>) e Loiane Groner (<a href="https://twitter.com/#!/loiane">@loiane</a>). A inscrição custa cerca de R$ 600,00.</p>
<p><a href="http://www.thedevelopersconference.com.br/"><img src="http://media.zenorocha.com/tableless/tdc.jpg" alt="" /></a></p>
<p>Em julho o <a href="http://www.thedevelopersconference.com.br/">TDC (The developer&#8217;s conference)</a> inicia seus trabalhos em São Paulo, passando depois em Floripa em setembro e Goiânia em outubro. A trilha de front-end ainda não foi definida, mas sabendo que essa missão está nas mãos do Daniel Filho (<a href="https://twitter.com/#!/danielfilho">@danielfilho</a>), pode ter certeza que vem coisa boa por aí.</p>
<p>Mais informações: <a href="http://www.thedevelopersconference.com.br/#geral">thedevelopersconference.com.br</a></p>
<p><a href="http://frontinlondrina.com.br/"><img src="http://media.zenorocha.com/tableless/frontinlondrina.jpg" alt="" /></a></p>
<p>Já em dezembro tem o <a href="http://frontinlondrina.com.br/">Front in Londrina</a>, ainda sem definição exata de dia, local ou palestrantes, mas que também promete.</p>
<p>Mais informações: <a href="http://frontinlondrina.com.br">frontinlondrina.com.br</a></p>
<p><a href="https://www.facebook.com/feecbr"><img src="http://media.zenorocha.com/tableless/feec.jpg" alt="" /></a></p>
<p>Também em dezembro começa o FEEC (Front-end Engineering Creative Convention) em Recife, já em 2013 visita cidades como Fortaleza e Salvador. Ainda não há informações concretas sobre o evento.</p>
<p>Mais informações: <a href="https://www.facebook.com/feecbr">facebook.com/feecbr</a></p>
<h2>E é isso!</h2>
<p>Qual desses eventos você vai participar? Esqueci de mencionar algum? Interaja nos comentários!</p>
<p>Nos esbarramos por lá <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Mais comentados</h3><ul class="related_post"><li><a href="http://tableless.com.br/editores/" title="Editores">Editores</a></li><li><a href="http://tableless.com.br/quer-testar-o-google-analytics/" title="Quer testar o Google Analytics?">Quer testar o Google Analytics?</a></li><li><a href="http://tableless.com.br/chrome-nao-quer-dizer-muita-coisa/" title="O Chrome não quer dizer muita coisa">O Chrome não quer dizer muita coisa</a></li><li><a href="http://tableless.com.br/desenvolvedor-analfabeto/" title="Desenvolvedor analfabeto (sim, é sobre WYSIWYG)">Desenvolvedor analfabeto (sim, é sobre WYSIWYG)</a></li><li><a href="http://tableless.com.br/nao-otimize-seu-codigo/" title="Não &#8220;otimize&#8221; seu código">Não &#8220;otimize&#8221; seu código</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=32lvQu_sp_E:AofWvtzOvlI:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=32lvQu_sp_E:AofWvtzOvlI:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/32lvQu_sp_E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/eventos-front-end-que-voce-nao-pode-perder-em-2012/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		<feedburner:origLink>http://tableless.com.br/eventos-front-end-que-voce-nao-pode-perder-em-2012/</feedburner:origLink></item>
		<item>
		<title>JavaScript com café, parte 2</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/jg_X4qr6eFs/</link>
		<comments>http://tableless.com.br/javascript-com-cafe-parte-2/#comments</comments>
		<pubDate>Tue, 29 May 2012 12:00:53 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[coffeescript]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6193</guid>
		<description><![CDATA[Conheça conceitos avançados sobre a linguagem CoffeeScript. Aprenda a utilizar classes, escopo e operadores existenciais.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/AQQknFb-NFJmMF_a8MFMWtk5E3A/0/da"><img src="http://feedads.g.doubleclick.net/~a/AQQknFb-NFJmMF_a8MFMWtk5E3A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/AQQknFb-NFJmMF_a8MFMWtk5E3A/1/da"><img src="http://feedads.g.doubleclick.net/~a/AQQknFb-NFJmMF_a8MFMWtk5E3A/1/di" border="0" ismap="true"></img></a></p><p>No <a href="http://tableless.com.br/javascript-com-cafe/" title="">artigo anterior</a> vimos as funcionalidades básicas da linguagem CoffeeScript. Falamos sobre variáveis, funções, objetos, condicionais, loops e integração com jQuery. Neste artigo, veremos algumas implementações mais avançadas, com destaque para o conceito de classes.</p>
<h2> Splats</h2>
<p>Uma função em CoffeeScript pode receber um ou mais parâmetros definidos em sua especificação. Através de <em>splats</em> (&#8230;) podemos definir também parâmetros variáveis, ou seja, você pode passar quantos parâmetros quiser. Estes parâmetros serão convertidos pelo compilador CoffeeScript em um <em>array</em>:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lista_autores = <span style="color: black;">&#40;</span>site<span style="color: #66cc66;">,</span> autores…<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; $<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;#nome-site&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">text</span> site<br />
&nbsp; &nbsp; $<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;#autores&quot;</span><span style="color: black;">&#41;</span>.<span style="color: black;">text</span> autores.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;,&quot;</span> <span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>O código acima resulta no seguinte JavaScript:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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 /></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> lista_autores<span style="color: #339933;">,</span><br />
&nbsp; __slice <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">slice</span><span style="color: #339933;">;</span><br />
&nbsp; lista_autores <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; <span style="color: #003366; font-weight: bold;">var</span> autores<span style="color: #339933;">,</span> site<span style="color: #339933;">;</span><br />
&nbsp; site <span style="color: #339933;">=</span> arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> autores <span style="color: #339933;">=</span> <span style="color: #CC0000;">2</span> <span style="color: #339933;">&lt;=</span> arguments.<span style="color: #660066;">length</span> <span style="color: #339933;">?</span> __slice.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>arguments<span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#nome-site&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>site<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">return</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#autores&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span>autores.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Poderíamos, então, chamar a função <strong>lista_autores</strong> passando <strong>n</strong> autores nos argumentos:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">lista_autores <span style="color: #483d8b;">&quot;Tableless&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Davi Ferreira&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Diego Eis&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Zeno Rocha&quot;</span><br />
lista_autores <span style="color: #483d8b;">&quot;DaviFerreira.com&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;DaviFerreira&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Chico Stallone&quot;</span></div></td></tr></tbody></table></div>
<h2> Classes</h2>
<p>Em JavaScript, classes e objetos são uma coisa só. Um objeto não é uma instância de uma classe, como em outras linguagens. Podemos dizer que tudo é um objeto e existem <em>prototypes</em>. Um <em>prototype</em> é um objeto que possui suas propriedades compartilhadas por outros objetos. CoffeeScript faz uso deste recurso para criar Classes e Objetos.</p>
<p>Vejamos a declaração de uma classe:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #dc143c;">class</span> Jogador<br />
&nbsp; constructor<span style="color: #66cc66;">:</span> <span style="color: black;">&#40;</span>nome<span style="color: #66cc66;">,</span> time<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>nome = nome<br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>time = time<br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>jogos = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; Jogador.<span style="color: black;">total_jogadores</span><span style="color: #66cc66;">++</span><br />
&nbsp; &nbsp; <br />
&nbsp; total_jogos<span style="color: #66cc66;">:</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; console.<span style="color: black;">log</span> <span style="color: #66cc66;">@</span>jogos.<span style="color: black;">length</span><br />
<br />
&nbsp; adiciona_jogo<span style="color: #66cc66;">:</span> <span style="color: black;">&#40;</span>jogo<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>jogos.<span style="color: black;">push</span><span style="color: black;">&#40;</span>jogo<span style="color: black;">&#41;</span><br />
<br />
&nbsp; <span style="color: #66cc66;">@</span>total_jogadores = <span style="color: #ff4500;">0</span></div></td></tr></tbody></table></div>
<p>Desconstruindo o código, o <em>constructor</em> da classe, compilado em JavaScript, vira uma função com o mesmo nome do objeto. Os métodos <em>total_jogos</em> e <em>adiciona_jogo</em> são <em>prototypes</em> do objeto Jogador. E, por fim, a variável <em>total_jogadores</em> faz referência à classe Jogador, ou seja, ao objeto original que dá origem às instâncias de jogadores. Por exemplo:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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 /></div></td><td><div class="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">j1 = <span style="color: #dc143c;">new</span> Jogador <span style="color: #483d8b;">&quot;Zico&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Flamengo&quot;</span><br />
j1.<span style="color: black;">nome</span> <span style="color: #808080; font-style: italic;"># &quot;Zico&quot;</span><br />
j1.<span style="color: black;">time</span> <span style="color: #808080; font-style: italic;"># &quot;Flamengo&quot;</span><br />
Jogador.<span style="color: black;">total_jogadores</span> <span style="color: #808080; font-style: italic;"># 1</span><br />
<br />
j2 = <span style="color: #dc143c;">new</span> Jogador <span style="color: #483d8b;">&quot;Roberto Dinamite&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Vasco&quot;</span><br />
j2.<span style="color: black;">nome</span> <span style="color: #808080; font-style: italic;"># &quot;Roberto Dinamite&quot;</span><br />
j2.<span style="color: black;">time</span> <span style="color: #808080; font-style: italic;"># &quot;Vasco&quot;</span><br />
Jogador.<span style="color: black;">total_jogadores</span> <span style="color: #808080; font-style: italic;"># 2</span></div></td></tr></tbody></table></div>
<p>Portanto, existem três diferentes tipos de propriedades em uma classe CoffeeScript: 1) o <em>constructor</em> da classe, 2) métodos (<em>prototypes</em>) e propriedades referentes à uma instância da classe e 3) métodos e propriedades referentes ao objeto &#8220;pai&#8221; da classe.</p>
<h2>Herança</h2>
<p>Em JavaScript, a herança entre classes é feita através do encadeamento de <em>prototypes</em>. Esse encadeamento pode ser bem confuso quando falamos de muitos objetos. A linguagem CoffeeScript resolve esse problema implementando o recurso <em>extends</em>. </p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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 /></div></td><td><div class="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #dc143c;">class</span> Goleiro <span style="color: #dc143c;">extends</span> Jogador<br />
&nbsp; constructor<span style="color: #66cc66;">:</span> <span style="color: black;">&#40;</span>nome<span style="color: #66cc66;">,</span> time<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; <span style="color: #dc143c;">super</span> nome<span style="color: #66cc66;">,</span> time<br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>gols_sofridos = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; Goleiro.<span style="color: black;">total_goleiros</span><span style="color: #66cc66;">++</span><br />
<br />
&nbsp; adiciona_gol_sofrido<span style="color: #66cc66;">:</span> <span style="color: black;">&#40;</span>gol<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">@</span>gols_sofridos.<span style="color: black;">push</span><span style="color: black;">&#40;</span>gol<span style="color: black;">&#41;</span><br />
<br />
&nbsp; total_gols_sofridos<span style="color: #66cc66;">:</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; console.<span style="color: black;">log</span> <span style="color: #66cc66;">@</span>gols_sofridos.<span style="color: black;">length</span><br />
<br />
&nbsp; <span style="color: #66cc66;">@</span>total_goleiros = <span style="color: #ff4500;">0</span></div></td></tr></tbody></table></div>
<p>Notem a chamada especial <em>super</em>, que invoca o método <em>constructor</em> da classe Jogador. Um objeto Goleiro herda todos os métodos da classe pai (Jogador) e pode ainda sobrescrever e/ou ter seus próprios métodos e propriedades.</p>
<h2> Escopo</h2>
<p>É comum uma aplicação CoffeeScript vir separada em módulos. Cada módulo, como vimos no artigo anterior, está encapsulado em uma função anônima autoexecutável. E se quisermos compartilhar variáveis e funções entre os módulos?</p>
<p>Para isso, precisamos definir um escopo global, criando um elemento <em>root</em>, por exemplo.</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">root = global <span style="color: #66cc66;">?</span> window<br />
<br />
root.<span style="color: black;">site</span> = <span style="color: #483d8b;">&quot;Tableless&quot;</span><br />
root.<span style="color: black;">lista_autores</span> = <span style="color: black;">&#40;</span>autores<span style="color: black;">&#41;</span> <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; console.<span style="color: black;">log</span> autores.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;, &quot;</span><span style="color: black;">&#41;</span></div></td></tr></tbody></table></div>
<p>Dessa forma, qualquer módulo tem acesso à variável <em>site</em> e à função <em>lista_autores</em>.</p>
<h2> Switches</h2>
<p>Assim como outros exemplos, um <em>switch</em> em CoffeeScript é infinitamente mais bonito e legível do que sua parte original em JavaScript. Como em Ruby, um <em>switch</em> CoffeeScript aceita múltiplos argumentos em um caso:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff7700;font-weight:bold;">switch</span> time<br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">when</span> <span style="color: #483d8b;">&quot;Flamengo&quot;</span> <span style="color: #ff7700;font-weight:bold;">then</span> console.<span style="color: black;">log</span> <span style="color: #483d8b;">&quot;Primeira Divisão&quot;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">when</span> <span style="color: #483d8b;">&quot;Vasco&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Botafogo&quot;</span> <span style="color: #ff7700;font-weight:bold;">then</span> console.<span style="color: black;">log</span> <span style="color: #483d8b;">&quot;Segunda Divisão&quot;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">when</span> <span style="color: #483d8b;">&quot;Fluminense&quot;</span> <span style="color: #ff7700;font-weight:bold;">then</span> console.<span style="color: black;">log</span> <span style="color: #483d8b;">&quot;Terceira Divisão&quot;</span></div></td></tr></tbody></table></div>
<p>O resultado em JavaScript:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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 /></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: #000066; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;Flamengo&quot;</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Primeira Divisão&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;Vasco&quot;</span><span style="color: #339933;">:</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;Botafogo&quot;</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Segunda Divisão&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;Fluminense&quot;</span><span style="color: #339933;">:</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Terceira Divisão&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<h2> Operador existencial</h2>
<p>Mais uma vez inspirada em Ruby, CoffeeScript implementa o operador existencial &#8220;?&#8221;. Este operador retorna <em>true</em> exceto se a variável testada for <strong>null</strong> ou <strong>undefined</strong>. </p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">time = <span style="color: #483d8b;">&quot;Flamengo&quot;</span> <span style="color: #ff7700;font-weight:bold;">if</span> primeira_divisao<span style="color: #66cc66;">?</span> <span style="color: #008000;">and</span> campeao_mundial<span style="color: #66cc66;">?</span></div></td></tr></tbody></table></div>
<p>Em JavaScript:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="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> time<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> primeira_divisao <span style="color: #339933;">!==</span> <span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">&amp;&amp;</span> primeira_divisao <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span> campeao_mundial <span style="color: #339933;">!==</span> <span style="color: #3366CC;">&quot;undefined&quot;</span> <span style="color: #339933;">&amp;&amp;</span> campeao_mundial <span style="color: #339933;">!==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; time <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Flamengo&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>Como vimos acima ela também pode ser utilizada para definir variáveis. O exemplo abaixo define a variável <em>site</em> com <em>root.site</em> se essa última existir, caso contrário utiliza o valor &#8220;Tableless&#8221;.</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">site = root.<span style="color: black;">site</span> <span style="color: #66cc66;">?</span> <span style="color: #483d8b;">&quot;Tableless&quot;</span></div></td></tr></tbody></table></div>
<p>O operador condicional pode também ser utilizado para evitar uma quebra em encadeamento de métodos. Por exemplo:</p>
<div class="codecolorer-container coffeescript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="coffeescript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">autor = artigo.<span style="color: black;">retorna_autor</span><span style="color: #66cc66;">?</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">total_artigos</span><span style="color: #66cc66;">?</span>.<span style="color: black;">nome</span></div></td></tr></tbody></table></div>
<p>Em JavaScript:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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="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> autor<span style="color: #339933;">,</span> _ref<span style="color: #339933;">;</span><br />
<br />
autor <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">typeof</span> artigo.<span style="color: #660066;">retorna_autor</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">&quot;function&quot;</span> <span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span>_ref <span style="color: #339933;">=</span> artigo.<span style="color: #660066;">retorna_autor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">total_artigos</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #339933;">?</span> _ref.<span style="color: #660066;">nome</span> <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">void</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">void</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Desse modo, ao invés de <em>TypeError</em>, o código acima retornaria <strong>undefined</strong> quando qualquer um dos métodos da cadeia for <strong>null</strong> ou <strong>undefined</strong>.</p>
<h2> Ferramentas</h2>
<p>Através do console podemos executar todas as operações do compilador e gerar nosso código JavaScript. No entanto, algumas ferramentas facilitam esse trabalho através de interfaces gráficas:</p>
<h3> LiveReload</h3>
<p>Meu favorito é o <a href="http://livereload.com/" title="">Live Reload</a>, disponível como uma app para Mac e Windows e um comando para Linux. Além de compilar CoffeeScript, o LiveReload utiliza extensões para os navegadores e recarrega a página quando qualquer alteração é realizada no código (não apenas CoffeeScript).</p>
<h3> CodeKit</h3>
<p>Lançado recentemente, o aplicativo <a href="http://incident57.com/codekit/" title="">CodeKit</a>, disponível apenas para Mac, é um concorrente do LiveReload e, além de monitar alterações e recarregar páginas no navegador, conta também com integrações com frameworks, otimização de imagens e validação (lint) de código.</p>
<h3> CoffeeConsole</h3>
<p>Outra ferramenta interessante é a extensão <a href="https://github.com/snookca/CoffeeConsole" title="">CoffeeConsole</a>, para Chrome. Esta extensão adiciona um novo painel ao Chrome Developer Tools, possibilitando a execução de códigos CoffeeScript, similar ao console JavaScript já integrado na ferramenta.</p>
<h2> Mais CoffeeScript</h2>
<p>Essa foi uma visão geral da linguagem CoffeeScript que, recentemente, entrou para o <a href="https://github.com/languages" title="">ranking das dez linguagens mais populares no GitHub</a>, desbancando ObjectC.</p>
<p>Finalizando, para aprender mais sobre CoffeeScript, indico os seguintes recursos:</p>
<ul>
<li> <a href="http://arcturo.github.com/library/coffeescript/" title="">The Little Book on CoffeeScript</a> &#8211; Livro disponível na íntegra online e em versões impressa, PDF e para Kindle via O&#8217;Reilly.</li>
<li> <a href="http://www.codeschool.com/courses/coffeescript" title="">A sip of CoffeeScript</a> &#8211; Curso interativo do pessoal da CodeSchool com vídeos e exercícios online. Bem legal!</li>
<li> <a href="http://autotelicum.github.com/Smooth-CoffeeScript/" title="">Smooth CoffeeScript</a> &#8211; Outro livro disponível de graça online e também em PDF. Possui ainda uma versão interativa em HTML5.</li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/javascript-com-cafe/" title="JavaScript com café">JavaScript com café</a></li><li><a href="http://tableless.com.br/entendendo-quais-apis-realmente-fazem-parte-do-html5/" title="Entendendo quais APIs (realmente) fazem parte do HTML5">Entendendo quais APIs (realmente) fazem parte do HTML5</a></li><li><a href="http://tableless.com.br/cut-the-rope/" title="Cut the Rope">Cut the Rope</a></li><li><a href="http://tableless.com.br/jquery-conheca-os-metodos-on-e-off/" title="jQuery: conheça os métodos on() e off()">jQuery: conheça os métodos on() e off()</a></li><li><a href="http://tableless.com.br/manipulacao-de-classes-com-jquery/" title="Manipulação de classes com JQuery">Manipulação de classes com JQuery</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=jg_X4qr6eFs:rk6fb58ziqM:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=jg_X4qr6eFs:rk6fb58ziqM:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/jg_X4qr6eFs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/javascript-com-cafe-parte-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://tableless.com.br/javascript-com-cafe-parte-2/</feedburner:origLink></item>
		<item>
		<title>Documentos poliglotas com XHTML5</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/5TRCFs6tzyY/</link>
		<comments>http://tableless.com.br/documentos-poliglotas-com-xhtml5/#comments</comments>
		<pubDate>Wed, 16 May 2012 13:35:51 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[marcação poliglota]]></category>
		<category><![CDATA[padroes web]]></category>
		<category><![CDATA[xhtml5]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6057</guid>
		<description><![CDATA[O XHTML5 permite utilizar a sintaxe do XML/XHTML em documentos HTML5]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/x0d5ZcqtGlBANeFCJCvHymr3Ycw/0/da"><img src="http://feedads.g.doubleclick.net/~a/x0d5ZcqtGlBANeFCJCvHymr3Ycw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/x0d5ZcqtGlBANeFCJCvHymr3Ycw/1/da"><img src="http://feedads.g.doubleclick.net/~a/x0d5ZcqtGlBANeFCJCvHymr3Ycw/1/di" border="0" ismap="true"></img></a></p><p>Quando se começou a falar massivamente a respeito do HTML5, em 2009, muitos desenvolvedores (inclusive eu) torceram o nariz para o fato de poder voltar a utilizar a sintaxe tolerante do HTML, ou seja, tags em uppercase ou sem fechamento, valores de atributos sem aspas, fechar tags em ordem incorreta, entre outros. Inclusive, <a href="http://tableless.com.br/o-dilema-da-sintaxe-no-html5/">comentei especificamente sobre isso em um outro artigo</a>.</p>
<p>Grande parte dos desenvolvedores aprenderam  e se habituaram a utilizar a sintaxe do XHTML, que segue as diretrizes do XML para documentos bem formados e que apresentariam erros de renderização caso essas diretrizes são fossem seguidas. Isto nos permitia códigos mais limpos e bem estruturados. Porém, no HTML5, a escolha é sua e você não será punido por não fechar tags.</p>
<p>Com toda essa preocupação, no mesmo ano começou a ideia do XHTML5, uma tentativa de contornar o problema, adicionando as restrições de marcação do XML a documentos escritos em HTML5. Podemos dizer que seria uma tentativa de unir o melhor de cada especificação. O <a href="http://html5doctor.com/html-5-xml-xhtml-5/">artigo escrito por Bruce Lawson para o HTML5 Doctor</a> (com <a href="http://www.pinceladasdaweb.com.br/blog/2009/12/10/html-5-xml-xhtml-5/">versão traduzida no Pinceladas da Web</a>) foi um dos primeiros a comentar sobre o tema.</p>
<p>Durante cerca de 1 ano isto era uma forma, digamos, marginalizada de tratar essa questão, por não ser algo reconhecido pelo  <a title="Web Hypertext Application Technology Working Group" href="http://www.whatwg.org/" target="_blank">WHATWG</a> / <a title="W3C HTML Working Group" href="http://www.w3.org/html/wg/" target="_blank">HTML WG</a>. Mas em 2010 surgiu o primeiro draft com a proposta de nortear o uso do HTML5 com a sintaxe do XML/XHTML. O W3C denominou essa metodologia de <a href="http://dev.w3.org/html5/html-xhtml-author-guide/">marcação poliglota</a>.</p>
<h3>O que é um documento com marcação poliglota?</h3>
<p>Um documento com marcação poliglota é um documento escrito em HTML5 que pode ser processado tanto como HTML quanto como XML dentro de um conjunto de restrições definidas, porém, ainda seguindo a especificação do HTML5. Eles são compatíveis com o HTML e XHTML.</p>
<p>Significa que você pode utilizar todo o poder do HTML5 dentro do padrão de marcação bem formada do XML. É importante ressaltar que isto não afeta as tags que você pode utilizar. Por exemplo, elementos que são considerados <em>deprecated</em> em XHTML mas válidos no HTML5 continuam a ser válidos. Uma exceção é com relação a algumas tags que são excluídas de documentos poliglotas por não serem possível de serem replicadas em um <em>parser</em> XML (como é o caso da tag<em> &lt;noscript&gt;</em>).</p>
<p>Mas em linhas gerais, esta “fusão” não altera a especificação, mas sim as regras de sintaxe para processamento e há influência no DOM também (ex.: <em>document.write</em> não é permitido, mas sim<em> innerHTML</em>).</p>
<p>Segundo o W3C, um documento poliglota resulta em:</p>
<ul>
<li>Um documento HTML5 válido;</li>
<li>Um documento XML bem formado (mas não significa um documento XML válido);</li>
<li>DOM idêntico quando processado tanto como HTML quanto como XML, isto porque os parsers geram diferentes DOMs para determinados atributos relativos ao XML.</li>
</ul>
<h3>Como escrever um documento poliglota</h3>
<p>Um dos principais requisitos para escrever um documento em XHTML5 é o MIME-type utilizado. Isto vai definir se o navegador irá interpretar o documento como HTML ou XHTML. Segundo o WHATWG, um documento HTML5 se torna um documento poliglota se for provido o MIME-type application/xhtml+xml.</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;application/xhtml+xml; charset=utf-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Até algum tempo atrás, o IE não suportava este MIME-type. Para isso, você pode indicar que o MIME-type é o usual <em>text/html</em>. Ele pode ser utilizado junto com o primeiro (separando por vírgula), ou pode ser feita uma validação do navegador para decidir qual o MIME-type a ser utilizado.</p>
<p>O doctype passa a ser opcional, mas ainda é recomendável utilizar para prevenir o <a href="http://en.wikipedia.org/wiki/Quirks_mode">quirks mode</a> dos navegadores. Se utilizado, a palavra doctype deve ser escrito adequadamente em uppercase, ex.: <em>&lt;!DOCTYPE html&gt;</em>. A meta-tag que especifica o charset e a declaração <em>&lt;?xml version=”1.0” encoding=”UTF-8”?&gt;</em> (herdada do XHTML 1.1) também passam a ser opcionais se o charset desejado para o documento é UTF-8 (padrão do XML).</p>
<p>Além disso é preciso definir também o namespace do XHTML na tag <em>&lt;html&gt;</em>:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><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;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Ao utilizar recursos como SVG e MathML, é preciso especificar também o atributo xml para a tag raiz correspondente de cada um.</p>
<p>Outras recomendações são:</p>
<ul>
<li>Usar tanto o atributo lang quanto xml:lang na tag <em>&lt;html&gt;</em>;</li>
<li>Usar <em>tbody</em> / <em>thead</em> / <em>tfoot</em> em <em>&lt;table&gt;</em>s;</li>
<li>Quando o elemento <em>&lt;col&gt;</em> é utilizado em tabelas, utilizar também o elemento <em>&lt;colgroup&gt;</em>;</li>
<li>Não utilizar o elemento <em>&lt;noscript&gt;</em>;</li>
<li>Não iniciar as tags <em>&lt;pre&gt;</em> e <em>&lt;textarea&gt;</em> com linha em branco;</li>
<li>Utilizar <em>innerHTML</em> ao invés de <em>documento.write</em>;</li>
<li>Para scripts embutidos na página, escreva o código entre uma seção CDATA com os delimitadores comentados. É uma forma de fazer com que o parser do XML (que analisa apenas a marcação) não acuse erros ao utilizar &lt; ou &amp; no script;</li>
<li>Os atributos<em> xml:space</em> e <em>xml:base</em> são permitidos apenas nos elementos relativos a SVG e MathML;</li>
<li>Elementos que podem ter conteúdo mas estão vazios não devem ser minimizados para o formato de tag órfã. Ex.: <em>&lt;p /&gt;</em> não deve ser utilizado, mas sim <em>&lt;p&gt;&lt;/p&gt;</em>.</li>
</ul>
<p>Ao escrever documentos poliglotas, é possível utilizar todas as funcionalidades do HTML5 com uma garantia de código bem formado de acordo com as restrições do XHTML. Com isso, é possível ter um código mais organizado e consistente que seja mais fácil de produzir, manter e reutilizar a longo prazo, principalmente quando este trabalho é realizado em equipe.</p>
<h3>Referências</h3>
<p><a href="http://dev.w3.org/html5/html-xhtml-author-guide/">Polyglot Markup: HTML-Compatible XHTML Documents</a><br />
<a href="http://blog.whatwg.org/xhtml5-in-a-nutshell">XHTML5 in a nutshell</a><br />
<a href="http://www.xmlplease.com/xhtml/xhtml5polyglot/">Benefits of polyglot XHTML5</a><br />
<a href="http://html5doctor.com/html-5-xml-xhtml-5/">HTML 5 + XML = XHTML 5</a></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/ah-o-maravilhoso-mundo-real/" title="Ah, o maravilhoso mundo real">Ah, o maravilhoso mundo real</a></li><li><a href="http://tableless.com.br/entendendo-quais-apis-realmente-fazem-parte-do-html5/" title="Entendendo quais APIs (realmente) fazem parte do HTML5">Entendendo quais APIs (realmente) fazem parte do HTML5</a></li><li><a href="http://tableless.com.br/html-5-novos-elementos-e-atributos/" title="HTML 5, novos elementos e atributos.">HTML 5, novos elementos e atributos.</a></li><li><a href="http://tableless.com.br/section-elemento-article/" title="Sections: elemento article – Parte 4">Sections: elemento article – Parte 4</a></li><li><a href="http://tableless.com.br/sections-elemento-aside/" title="Sections: elemento aside – Parte 3">Sections: elemento aside – Parte 3</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5TRCFs6tzyY:uXGgZ8ceHV0:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=5TRCFs6tzyY:uXGgZ8ceHV0:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/5TRCFs6tzyY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/documentos-poliglotas-com-xhtml5/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://tableless.com.br/documentos-poliglotas-com-xhtml5/</feedburner:origLink></item>
		<item>
		<title>Estruturação de Client-side – Parte 2: Designers e Programadores</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/RLAmuM5cOr8/</link>
		<comments>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/#comments</comments>
		<pubDate>Mon, 14 May 2012 22:42:44 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[front-end]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6121</guid>
		<description><![CDATA[Entendendo e sincronizando as necessidades dos designers e programadores.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/_SH1T5cGr-ZQ3GP03cer4KmpF6U/0/da"><img src="http://feedads.g.doubleclick.net/~a/_SH1T5cGr-ZQ3GP03cer4KmpF6U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_SH1T5cGr-ZQ3GP03cer4KmpF6U/1/da"><img src="http://feedads.g.doubleclick.net/~a/_SH1T5cGr-ZQ3GP03cer4KmpF6U/1/di" border="0" ismap="true"></img></a></p><p>Se dividirmos as áreas de desenvolvimento, chegaremos a 3 grandes grupos, totalmente distintos que são: designers, programadores e nós, front-end.</p>
<p>Nós estamos no meio dos dois grupos. Nós nos relacionamos diretamente com os dois profissionais, fazendo uma ponte e tentando adequar as necessidades de cada um durante o projeto. E é aí que entra o problema.</p>
<p>Os dois mundos são totalmente diferentes. O designer se preocupa em deixar o sistema lindo, maravilhoso, fácil de usar, vendável e etc. O programador faz com que tudo funcione. O cliente tem que conseguir comprar quando clicar no botão. Nosso trabalho é fazer com que a beleza não estrague a funcionalidade. É fazer com que as necessidades do programador não entrem em conflito com as necessidades do designer. Nesse meio entra o seu trabalho. Sua obrigação é deixar o site acessível, com código de fácil indexação e escalonável ao mesmo tempo que você deixa o layout do designer fiel ao original do Photoshop.</p>
<h3>Necessidades dos Designers</h3>
<p>Os designers precisam de liberdade para criar. Isso sempre foi muito difícil na web e por isso o Flash ganhou tanta atenção. Se antes só podíamos fazer coisas básicas utilizando CSS, o Flash dava ao designer acesso a um mundo de possibilidades. Atualmente isso mudou muito graças ao Santo protetor dos desenvolvedores front-end.</p>
<p>Com a vinda das features do CSS3, boa parte das funcionalidades que antes tínhamos que fazer gambiarras com imagens, hoje podemos fazer com apenas uma propriedade. Quem nunca passou horas recortando imagens de bordas arredondadas, sombrinhas e degrades? Hoje resolvemos tudo diretamente pelo CSS, que roda mais rápido e é muito mais flexível.</p>
<p>A ideia é transportar fielmente a arte que o designer criou no editor gráfico, para código HTML/CSS. Nesse momento você precisa se preocupar com duas coisas: fidelidade de layout e semântica de código. </p>
<p>O código HTML irá refletir os elementos do layout, traduzindo a informação visual, para informação em código semântico de forma que os dispositivos, robôs de busca, scripts e afins acessem esse código e executem suas tarefas. O Google precisa saber o que é um link e um botão. Mesmo que eles tenham o mesmo design. O leitor de tela precisa entender o que é um título e um parágrafo. Isso tudo aliado com os detalhes visuais que o designer desenhou, como sombras, degrades, transparências, bordar arredondadas e etc.</p>
<p>Esse processo inicia a fase de código do projeto. Estamos criando uma estrutura que vai perdurar o projeto inteiro. Os programadores, posteriormente, irão produzir o sistema em cima deste código. Por isso é muito importante que sua base seja bem estruturada mas ao mesmo tempo super flexível para mantermos o layout da maneira correta.</p>
<h3>Necessidades dos Programadores</h3>
<p>Os programadores precisam automatizar coisas. O projeto precisa que as tarefas sejam automatizadas para que o projeto funcione de forma escalonável e sem a necessidade de replicação de código desnecessariamente. Essas tarefas vão desde a criação de formulários até comunicação com o servidor.</p>
<p>O problema é que a maioria das vezes essas tarefas automatizadas não são criadas pelos programadores da equipe. São plugins, scripts e etc que foram criados pela comunidade. Não estou dizendo aqui que isso é ruim, por favor. Na verdade, é o certo. Não tem sentido recriarmos algo que já existe e que funciona muito bem. Esses plugins, scripts e etc foram criados por outros programadores que um dia tiveram a mesma necessidade que os programadores do seu projeto e por isso, nada mais sensato do que criar um plugin para ajudar outros devs com a mesma necessidade. Acontece que programadores, são programadores. Eles não tratam o HTML com o mesmo carinho que nós.</p>
<p>Vamos pegar um exemplo de formulários. Os programadores aqui onde trabalho programam em RUBY, utilizando Rails. Há uma GEM que cria e gerencia formulários no projeto. O código que esta GEM gera por default não é legal e o pior, é totalmente diferente do código que você usaria ou usou no projeto &#8211; Por isso é interessante entender quais ferramentas os programadores utilizarão antes de iniciarmos nosso código HTML. Assim podemos adaptar o que for preciso para códigos que fujam do seu padrão pessoal.</p>
<p>Você não pode obrigar os programadores a fazerem tudo na mão. Se você conseguir, ótimo. Essa é sempre a minha primeira opção&#8230; Mas caso isso seja impossível, sugiro que sente e tente entender o maldito plugin. Converse com o programador e tente mostrar as desvantagens para o projeto caso continuem a utilizar o código default. Veja se não há a possibilidade de modificar esse código. Na maioria das vezes há. Caso não dê, estude a possibilidade de trocarem para um plugin que dê.</p>
<p>Existem frameworks &#8211; como o Web2Py &#8211; que ainda utilizam tabelas para exibir formulários. Chorei sangue quando eu vi pela primeira vez e chorei mais ainda ao descobrir que não é algo muito fácil customizar eses código para que ele entregasse o HTML que eu queria. Paciência.</p>
<h3>Sincronizando as necessidades</h3>
<p>O encontro de dois mundos gera o problema. Sincronizar as necessidades visuais dos designers com as necessidades de código dos programadores é algo que geralmente deixa traumas em qualquer dev front-end.</p>
<p>O programador precisa usar ferramentas que os ajudam a executar tarefas complexas, mas que adulteram demais o código. O designer precisa que seu layout seja fielmente seguido, ou seja, todas as firulas visuais como sombras, degrades, bordas, backgrounds e etc permaneçam intactas. Como você pode manter o padrão de qualidade se o código manipulado não é o seu, mas o do plugin? É aqui que os front-ends maricas pedem arrego. </p>
<p>Cada efeito visual, cada estrutura, cada necessidade de layout determinam com que o HTML será escrito. Se o HTML é criado automaticamente por um plugin ou algo parecido, como você faz? Entende a questão?<br />
Você até faz o layout ficar igual ao planejado, mas e a semântica? O design, a funcionalidade e a semântica precisam coexistir. Essa é a essência da responsabilidade do profissional client-side.</p>
<p>Não há mágica que faça isso tudo acontecer. Você precisa sentar e conversar. Eu costumo chamar o designer e o programador e explicar minhas limitações. Eles entendem e cada um abre mão de algo que pode me ajudar. O designer tira aquele efeito visual desnecessário e o programador tenta colocar aquela classe importante e retirar um ou outro código automático. A opção de conversar com os dois é melhor do que você criar uma solução com Javascript. Para retirar ou inserir as tags ou classes que você precisa. O código fica mais feio e seu site perde performance. Sem contar que para resolver suas pendências manipulando o DOM com Javascript, é pior para o Google, para os leitores de telas e para os robôs em geral.</p>
<h3>Padronizando tudo</h3>
<p>Uma outra solução que eu cheguei é mais complicada, mas sem dúvida a mais duradoura. Começamos a criar dentro da empresa uma biblioteca que une código HTML/CSS semântico com o visual predefinido dos designers e que contemple as necessidades de funcionalidades dos programadores.</p>
<p>Assim, começamos a criar uma <strong>cultura</strong> de padronização de código que vai perdurar por várias gerações de serviços e acima de tudo, não quebra a linearidade dos produtos em si. Manteremos a uniformidade de código com a a uniformidade de identidade visual dos sistemas. Não estamos engessando a criação, pelo contrário, estamos criando uma base sólida que poderá ser reutilizada em toda a empresa, em larga escala e independente.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/drops-5-responsabilidade-dev-front-end/" title="Drops 5 &#8211; Responsabilidade Dev Front-end">Drops 5 &#8211; Responsabilidade Dev Front-end</a></li><li><a href="http://tableless.com.br/podcast-2-acessibilidade/" title="Podcast #2 &#8211; Acessibilidade">Podcast #2 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/adobe-the-expressive-web/" title="Adobe: The Expressive Web">Adobe: The Expressive Web</a></li><li><a href="http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/" title="Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas">Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas</a></li><li><a href="http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/" title="Estruturação de Client-side &#8211; Parte 1: Préprocessadores, Framewoks e Bibliotecas">Estruturação de Client-side &#8211; Parte 1: Préprocessadores, Framewoks e Bibliotecas</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=RLAmuM5cOr8:yyf6VYtSpNE:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=RLAmuM5cOr8:yyf6VYtSpNE:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/RLAmuM5cOr8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/</feedburner:origLink></item>
		<item>
		<title>Adobe: The Expressive Web</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/2P6cvHgpkuo/</link>
		<comments>http://tableless.com.br/adobe-the-expressive-web/#comments</comments>
		<pubDate>Fri, 11 May 2012 17:13:45 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6117</guid>
		<description><![CDATA[The Expressive Web, as experiências da Adobe com as novas features do HTML5 e CSS3.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/LkB55qJBvbZPKaUOwGGAsS576yE/0/da"><img src="http://feedads.g.doubleclick.net/~a/LkB55qJBvbZPKaUOwGGAsS576yE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LkB55qJBvbZPKaUOwGGAsS576yE/1/da"><img src="http://feedads.g.doubleclick.net/~a/LkB55qJBvbZPKaUOwGGAsS576yE/1/di" border="0" ismap="true"></img></a></p><p>Essa é antiga, mas muita gente ainda não viu! </p>
<p>Mais uma iniciativa da Adobe para divulgar as maravilhas do CSS3 e HTML5. O The Expressive Web é um sitezinho maneiro onde a Adobe mostra alguns exemplos das novas features do HTML5 e do CSS3 com exemplos sensacionais. </p>
<p><a href="http://bit.ly/IYBclM">The Expressive Web</a>, by <a href="http://adobe.com/">Adobe</a>.</p>
<p>Cada uma das features tem uma pequena descrição, e o mais importante, eles mostram uma porcentagem de quantos usuários veriam aquela feature. CANVAS, por exemplo, seria visto por 75% dos usuários, obviamente, dos usuários que usarem browsers novos, como IE9, Safari, Chrome e etc&#8230; </p>
<p>Não vá ver isso em um Internet Explorer ruim ou um browser antigo. Estamos falando de web de verdade, aqui. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/adobe-e-os-padroes-web/" title="Adobe e os Padrões Web">Adobe e os Padrões Web</a></li><li><a href="http://tableless.com.br/cut-the-rope/" title="Cut the Rope">Cut the Rope</a></li><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/css1k/" title="CSS1K">CSS1K</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=2P6cvHgpkuo:bSTw4-Jjnnk:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=2P6cvHgpkuo:bSTw4-Jjnnk:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/2P6cvHgpkuo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/adobe-the-expressive-web/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://tableless.com.br/adobe-the-expressive-web/</feedburner:origLink></item>
		<item>
		<title>Drops 9 – Préprocessadores, frameworks e bibliotecas</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/5am7laAU4mE/</link>
		<comments>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/#comments</comments>
		<pubDate>Fri, 11 May 2012 03:13:13 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Drops]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[O Básico]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[drops]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[less]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[sass]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6114</guid>
		<description><![CDATA[Entenda a diferença entre pré-processadores, frameworks e bibliotecas de CSS.
Essa é a primeira parte sobre como estruturar uma área de client-side.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/z-x8s0cYft24WteVPWlEX5NHP38/0/da"><img src="http://feedads.g.doubleclick.net/~a/z-x8s0cYft24WteVPWlEX5NHP38/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/z-x8s0cYft24WteVPWlEX5NHP38/1/da"><img src="http://feedads.g.doubleclick.net/~a/z-x8s0cYft24WteVPWlEX5NHP38/1/di" border="0" ismap="true"></img></a></p><p>Uma continuação do post que escrevi sobre o assunto e a primeira parte de uma série de artigos com dicas sobre como estruturar uma área client-side.</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F46006133&#038;show_artwork=true"></iframe></p>
<p><a href="http://tableless.com.br/podcast/drops9-frameworks-bibliotecas-preprocessadores.mp3">Arquivo Mp3</a>.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/drops-6-acessibilidade/" title="Drops 6 &#8211; Acessibilidade">Drops 6 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/drops-5-responsabilidade-dev-front-end/" title="Drops 5 &#8211; Responsabilidade Dev Front-end">Drops 5 &#8211; Responsabilidade Dev Front-end</a></li><li><a href="http://tableless.com.br/drops-2-a-palavra-marcacao-do-html/" title="Drops 2 &#8211; A palavra Marcação do HTML">Drops 2 &#8211; A palavra Marcação do HTML</a></li><li><a href="http://tableless.com.br/podcast-2-acessibilidade/" title="Podcast #2 &#8211; Acessibilidade">Podcast #2 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/adobe-e-os-padroes-web/" title="Adobe e os Padrões Web">Adobe e os Padrões Web</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=5am7laAU4mE:_9Kiy9lPctE:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=5am7laAU4mE:_9Kiy9lPctE:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/5am7laAU4mE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>

		<media:content url="http://feedproxy.google.com/~r/tableless/~5/XPBuVqxDOcc/drops9-frameworks-bibliotecas-preprocessadores.mp3" fileSize="2375680" type="audio/mpeg" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Entenda a diferença entre pré-processadores, frameworks e bibliotecas de CSS. Essa é a primeira parte sobre como estruturar uma área de client-side.</itunes:subtitle><itunes:author>Tableless.com.br</itunes:author><itunes:summary>Entenda a diferença entre pré-processadores, frameworks e bibliotecas de CSS. Essa é a primeira parte sobre como estruturar uma área de client-side.</itunes:summary><itunes:keywords>css,xhtml,xml,ajax,web,standards,padrões,web,asp,php,png,desenvolvimento,acessibilidade,usabilidade,usability,tecnologia,technology,w3c,tableless,table,javascript,mobilidade,internet,móvel,world,wide,web,consortium</itunes:keywords><feedburner:origLink>http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/tableless/~5/XPBuVqxDOcc/drops9-frameworks-bibliotecas-preprocessadores.mp3" length="2375680" type="audio/mpeg" /><feedburner:origEnclosureLink>http://tableless.com.br/podcast/drops9-frameworks-bibliotecas-preprocessadores.mp3</feedburner:origEnclosureLink></item>
		<item>
		<title>Estruturação de Client-side – Parte 1: Préprocessadores, Framewoks e Bibliotecas</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/AmDTfJDpphY/</link>
		<comments>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/#comments</comments>
		<pubDate>Wed, 09 May 2012 16:53:47 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[O Básico]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[tecnicascss]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6094</guid>
		<description><![CDATA[Entenda a diferença entre préprocessadores, frameworks e bibliotecas de client-side. Saiba o que usar em seus projetos e quais as suas particularidades.]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/-mCXQnD9kZ6IxUHKNMIbKzqR8Bo/0/da"><img src="http://feedads.g.doubleclick.net/~a/-mCXQnD9kZ6IxUHKNMIbKzqR8Bo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-mCXQnD9kZ6IxUHKNMIbKzqR8Bo/1/da"><img src="http://feedads.g.doubleclick.net/~a/-mCXQnD9kZ6IxUHKNMIbKzqR8Bo/1/di" border="0" ismap="true"></img></a></p><p>Existem três categorias de &#8220;ferramentas&#8221; que nos ajudam a desenvolver um projeto client-side: Préprocessadores, Frameworks e Bibliotecas.</p>
<h3>Préprocessadores</h3>
<p>Préprocessadores são ferramentas onde você escreve CSS de uma determinada forma, modificando sua sintaxe, fazendo com que na hora de sua utilização o código CSS precise ser préprocessado para que o código escrito seja transformado em código CSS puro e assim então os browsers consigam entender.</p>
<p>Existem muitos préprocessadores no mercado como <a href="http://lesscss.org/">Less</a>, <a href="http://sass-lang.com/">Sass</a>, <a href="http://turbine.peterkroener.de/index.php">Turbine</a>, <a href="http://sourceforge.net/projects/switchcss/">Switch CSS</a> e outros. </p>
<p>Particularmente eu não gosto de usar préprocessadores. Para começar é necessário que você aprenda a linguagem de cada um e a ideia de que seu CSS precisa ser compilado para poder funcionar não me agrada muito. O CSS é simples demais para complicarmos desse jeito. Entretanto, há uma série de coisas interessantes que podemos fazer com os préprocessadores como variáveis, funções, operações e etc que demorarão um pouco (ou não) para fazerem parte do core definitivo da linguagem. Mesmo assim, pessoalmente, para a maioria dos projetos, não vale a pena.</p>
<h3>Frameworks</h3>
<p>Frameworks são diferentes de préprocessadores mas são muito parecidos com Bibliotecas. Um Framework disponibiliza para o dev um conjunto de estilos e estruturas prontas para a utilização em projetos de forma escalável e uniforme. Normalmente os frameworks te dão uma coleção de componentes para que sejam usadas por todo o projeto. Esses componentes na maioria das vezes já vem com estilos visuais aplicados, bem como a estrutura. Veja por exemplo o <a href="http://twitter.github.com/bootstrap">Bootstrap</a> ou o <a href="http://blueprintcss.org">Blueprint</a>.</p>
<p>Com o Bootstrap você consegue, rapidamente, fazer um protótipo simples ou uma estrutura básica de sistema. É o preferido dos programadores. Os elementos visuais já foram criados e desenhados. Talvez não seja uma boa ideia você utilizar um framework em um projeto cujo design já esteja aprovado. Você teria muito retrabalho para &#8220;zerar&#8221; o estilo visual de cada elemento para depois reconstruí-lo utilizando o seu design.</p>
<p>É muito importante que o uso de um framework CSS/Javascript seja aprovado no início de um grande projeto. Mesmo que você planeje criar um framework do zero, específico para seu projeto. O que na maioria das vezes não vale a pena.</p>
<h3>Bibliotecas</h3>
<p>Bibliotecas CSS geralmente não modificam o visual como os Frameworks fazem, mas eles disponibilizam uma coleção de classes, reutilizáveis e o melhor, combinatórias, para que se adeque a diversos cenários do seu projeto. Como essas classes não estão ligadas a nenhuma formatação visual, você consegue combinar sem grandes problemas com suas classes e IDs, modificando a hora que quiser a formatação visual dos elementos.</p>
<p>As bibliotecas são indicadas para projetos mais simples, sem grandes apetrechos técnicos, como um site ou algo parecido. Para fazer um sistema, as bibliotecas irão reforçar os Frameworks, facilitando a organização e formatação da estrutura do site. A biblioteca também ajuda na manipulação dos elementos via Javascript se baseando por estas classes prontas. </p>
<p>A verdade é que hoje é muito difícil diferenciar uma biblioteca de um framework.</p>
<h3>Como todos eles trabalham juntos?</h3>
<p>Você pode usar todos os três ao mesmo tempo em um projeto. Mas não é muito inteligente, já que se você estiver utilizando um framework, muito provavelmente ele terá uma &#8220;biblioteca&#8221; em sua base. Imagine que a biblioteca pode ser específica de estrutura ou formatação visual. O Framework, basicamente, junta os dois. Obviamente há mais coisas envolvidas. Mas para simplificarmos a explicação, imagine que um Framework é a mistura dessas duas bibliotecas.</p>
<p>O Preprocessador é independente do Framework e da Biblioteca. O seu ganho está ao escrever um código mais escalável, muitas vezes melhorando ou piorando a sintaxe do código. É pura sintaxe, não são classes prédefinidas. Mesmo assim você pode basear seu Framework/Biblioteca em um Préprocessador. O Bootstrap faz isso para facilitar features dinâmicas como grids, cores e etc.</p>
<p>Como eu disse, eu não gosto de misturar as coisas. Prefiro utilizar o Bootstrap puro, sem a interferência de nenhum préprocessador. Mas, há gosto para tudo. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Qual deles é melhor para o meu projeto</h3>
<p>Eu não sugiro que você utilize um framework para criar websites institucionais. Websites geralmente não usam os mesmos elementos, nem as mesmas estruturas, nem o mesmo design. Logo, se você utilizasse um framework como o Bootstrap, ou o JQuery UI, você acabaria gastando mais tempo reestilizando e brigando com o CSS já criado dos frameworks do que fazendo o que realmente importa: o seu trabalho.<br />
Logo, para projetos de pequeno porte eu sugiro que você utilize uma biblioteca simples. Sugiro ainda que essa biblioteca seja criada por você.</p>
<p>Não precisa de muito. Em uma biblioteca você só precisa ter algumas propriedades que fazem tarefas básicas, como fazer o elemento flutuar para a esquerda, para direita, clear, retirar margens e etc. Normalmente eu utilizo um reset chamado <a href="http://necolas.github.com/normalize.css/">Normalize</a>. Ele já reseta meu CSS inteiro e então eu me foco apenas nas propriedades que eu reutilizarei no resto do projeto.</p>
<p>Se seu projeto for médio ou grande, você já pode pensar em utilizar um Framework. Principalmente se seu projeto for um sistema. Você já vai ter à disposição estilos para formulários (que são um saco pra fazer), botões, grids, reset CSS e outras coisas. O trabalho fica mais fácil por que você tem menos arestas para acertar. Ainda mais se o designer aceitar utilizar alguns dos estilos já prontos do Framework, assim você não precisa reconfigurar formatações visuais e etc.</p>
<p>A utilização do Préprocessadores é totalmente opcional. Mas se você decidir utilizá-lo juntamente com algum Framework, procure saber se o Framework escolhido suporta algum tipo de préprocessador. O Bootstrap, por exemplo, tem uma versão para LESS.</p>
<p>No próximo artigo vou contar como estamos fazendo aqui na Locaweb. Estamos criando uma grande biblioteca visual e de front-end que será utilizado por todos os serviços. Os programadores conseguem subir um sistema sem precisar esperar um código HTML definitivo, utilizando os módulos dessa biblioteca. A galera de design faz todos os layouts padronizados visualmente, garantindo a uniformidade de todos os sistemas. E o pessoal de front? Bom o pessoal de front cuida para que tudo isso funcione. <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/qualidade-de-imagens-e-densidade-de-pixels/" title="Qualidade de Imagens e densidade de pixels">Qualidade de Imagens e densidade de pixels</a></li><li><a href="http://tableless.com.br/gomo-teste-seu-site-mobile/" title="GoMo &#8211; Teste seu site mobile">GoMo &#8211; Teste seu site mobile</a></li><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=AmDTfJDpphY:tZDXioL0kVY:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=AmDTfJDpphY:tZDXioL0kVY:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/AmDTfJDpphY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://tableless.com.br/estruturacao-de-client-side-preprocessadores-framewoks-e-bibliotecas-parte-1/</feedburner:origLink></item>
		<item>
		<title>O dev front-end – Podcast #1</title>
		<link>http://feedproxy.google.com/~r/tableless/~3/4DLe33voH_I/</link>
		<comments>http://tableless.com.br/o-dev-front-end-podcast-1/#comments</comments>
		<pubDate>Sun, 06 May 2012 13:36:37 +0000</pubDate>
		<dc:creator>diego@tableless.com.br (Tableless.com.br)</dc:creator>
				<category><![CDATA[Podcasts]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=6084</guid>
		<description><![CDATA[Qual seria o perfil de um desenvolvedor front-end? O que ele deveria saber ou não?]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/sBxhUbC-a94daACsICDnDwUtYZo/0/da"><img src="http://feedads.g.doubleclick.net/~a/sBxhUbC-a94daACsICDnDwUtYZo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sBxhUbC-a94daACsICDnDwUtYZo/1/da"><img src="http://feedads.g.doubleclick.net/~a/sBxhUbC-a94daACsICDnDwUtYZo/1/di" border="0" ismap="true"></img></a></p><p>Estamos relançando o podcast do Tableless. Este será o primeiro e falamos sobre um assunto que está sendo bastante comentado nos últimos dias.</p>
<p>Será que o desenvolvedor client-side deveria fazer alguma faculdade? Será que ele precisa aprender a programar? Será que seria interessante ele ser um designer? Será que aprender apenas um framework javascript já é o suficiente?</p>
<p><iframe width="100%" height="166" scrolling="no" frameborder="no" src="http://w.soundcloud.com/player/?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F45304854&amp;auto_play=false&amp;show_artwork=true&amp;color=c34900"></iframe> </p>
<p>Assine o <a href="http://tableless.com.br/categoria/podcasts/feed">FEED direto do podcast</a>.<br />
Arquivo mp3.</p>
<p>Link <a href="http://tableless.com.br/podcast/podcast1-final.mp3">direto do MP3</a>.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/podcast-2-acessibilidade/" title="Podcast #2 &#8211; Acessibilidade">Podcast #2 &#8211; Acessibilidade</a></li><li><a href="http://tableless.com.br/estruturacao-de-client-side-designers-e-programadores-parte-2/" title="Estruturação de Client-side – Parte 2: Designers e Programadores">Estruturação de Client-side – Parte 2: Designers e Programadores</a></li><li><a href="http://tableless.com.br/drops-9-preprocessadores-frameworks-e-bibliotecas/" title="Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas">Drops 9 &#8211; Préprocessadores, frameworks e bibliotecas</a></li><li><a href="http://tableless.com.br/drops-8-o-que-o-dev-client-side-deve-saber/" title="Drops 8 &#8211; O que o dev client-side deve saber">Drops 8 &#8211; O que o dev client-side deve saber</a></li><li><a href="http://tableless.com.br/drops-7-voce-esta-fazendo-errado/" title="Drops 7 &#8211; Você está fazendo errado">Drops 7 &#8211; Você está fazendo errado</a></li></ul><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/tableless?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/tableless?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:aKCwKftKxY0"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:aKCwKftKxY0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/tableless?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:YwkR-u9nhCs"><img src="http://feeds.feedburner.com/~ff/tableless?d=YwkR-u9nhCs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:JEwB19i1-c4"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:JEwB19i1-c4" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:wF9xT3WuBAs"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:wF9xT3WuBAs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/tableless?a=4DLe33voH_I:WKTjIhYG0A0:tYZ39nBRSfM"><img src="http://feeds.feedburner.com/~ff/tableless?i=4DLe33voH_I:WKTjIhYG0A0:tYZ39nBRSfM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/tableless/~4/4DLe33voH_I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/o-dev-front-end-podcast-1/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>

		<media:content url="http://feedproxy.google.com/~r/tableless/~5/KCk7R4ZC2qU/podcast1-final.mp3" fileSize="52076379" type="audio/mpeg" /><itunes:explicit>no</itunes:explicit><itunes:subtitle>Qual seria o perfil de um desenvolvedor front-end? O que ele deveria saber ou não?</itunes:subtitle><itunes:author>Tableless.com.br</itunes:author><itunes:summary>Qual seria o perfil de um desenvolvedor front-end? O que ele deveria saber ou não?</itunes:summary><itunes:keywords>css,xhtml,xml,ajax,web,standards,padrões,web,asp,php,png,desenvolvimento,acessibilidade,usabilidade,usability,tecnologia,technology,w3c,tableless,table,javascript,mobilidade,internet,móvel,world,wide,web,consortium</itunes:keywords><feedburner:origLink>http://tableless.com.br/o-dev-front-end-podcast-1/</feedburner:origLink><enclosure url="http://feedproxy.google.com/~r/tableless/~5/KCk7R4ZC2qU/podcast1-final.mp3" length="52076379" type="audio/mpeg" /><feedburner:origEnclosureLink>http://tableless.com.br/podcast/podcast1-final.mp3</feedburner:origEnclosureLink></item>
	<copyright>Creative Commons - Atribuição-Uso Não-Comercial-Compatilhamento</copyright><media:credit role="author">Tableless.com.br</media:credit><media:rating>nonadult</media:rating><media:description type="plain">Tableless Podcast</media:description></channel>
</rss><!-- Dynamic page generated in 0.554 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-06-01 21:33:25 --><!-- Compression = gzip -->

