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

<channel>
	<title>Tableless</title>
	<atom:link href="http://tableless.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://tableless.com.br</link>
	<description>Desenvolvimento inteligente com padrões web e design</description>
	<lastBuildDate>Wed, 19 Jun 2013 13:19:33 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Survey do mercado web nacional</title>
		<link>http://tableless.com.br/survey-do-desenvolvimento-web-nacional/</link>
		<comments>http://tableless.com.br/survey-do-desenvolvimento-web-nacional/#comments</comments>
		<pubDate>Wed, 19 Jun 2013 11:00:05 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Geral]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[mercado]]></category>
		<category><![CDATA[survey]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37731</guid>
		<description><![CDATA[<p>Entenda como o seu mercado está e encontre respostas para perguntas importantes para a sua carreira.</p><p>O post <a href="http://tableless.com.br/survey-do-desenvolvimento-web-nacional/">Survey do mercado web nacional</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Muitos desenvolvedores me perguntam como está o mercado em diversas cidades do país. Uns querem ir pra São  Paulo. Outros querem sair de lá. E com isso outras perguntas surgem, como por exemplo: qual a média salarial nacional? Qual a faixa etária dos profissionais? Será que os profissionais de web se sentem satisfeitos na empresa em que trabalham? Quantos deles já foram freelancers? Qual a média do valor hora dos freelancers?</p>
<p>Perguntas assim são normais mas é muito difícil saber exatamente a melhor resposta. Por isso, resolvi botar em prática uma iniciativa que estou planejando faz bastante tempo: A minha ideia é fazer uma pesquisa nacional. Como se fosse um censo, onde poderemos buscar de forma mais correta essas respostas e assim ajudar o mercado e principalmente os profissionais, auxiliando-os a tomarem melhores decisões para sua carreira.</p>
<p>Essa pesquisa é para qualquer profissional que trabalhe com web. Não  queremos que fique restrito a apenas front-ends. Queremos que designers, programadores, profissionais de acessibilidade ou qualquer um que trabalhe com web participem também.</p>
<p>Por favor, divulgue para quem você puder. Quanto mais respostas tivermos, melhor a qualidade do resultado. Vamos fazer essa pesquisa todos os anos. Espero que ajude a comunidade. Não sei quando irei liberar os resultados, mas acho que daqui um ou dois meses é um bom tempo.</p>
<p>Chega de blá blá blá e vá responder a pesquisa:<br />
<a href="http://tableless.com.br/survey/2013/">http://tableless.com.br/survey/2013/</a></p>
<p>O post <a href="http://tableless.com.br/survey-do-desenvolvimento-web-nacional/">Survey do mercado web nacional</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/survey-do-desenvolvimento-web-nacional/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Medindo a complexidade do seu código JavaScript</title>
		<link>http://tableless.com.br/medindo-a-complexidade-ciclomatica-do-seu-codigo-javascript/</link>
		<comments>http://tableless.com.br/medindo-a-complexidade-ciclomatica-do-seu-codigo-javascript/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 13:30:56 +0000</pubDate>
		<dc:creator>Davi Ferreira</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[complexidade javascript]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37760</guid>
		<description><![CDATA[<p>Você sabe o que é complexidade ciclomática? E você sabia que já é possível medir a complexidade do seu código JavaScript?</p><p>O post <a href="http://tableless.com.br/medindo-a-complexidade-ciclomatica-do-seu-codigo-javascript/">Medindo a complexidade do seu código JavaScript</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Já mostramos aqui no Tableless <a href="http://tableless.com.br/testando-seu-codigo-jquery-com-jasmine-parte-1/">ferramentas para testes</a> e <a href="http://tableless.com.br/qualidade-codigo-javascript/">ferramentas para garantir o padrão do seu código JavaScript</a>, mas, enquanto esses utilitários asseguram uma consistência maior, eles nem sempre acabam com complexidades desnecessárias.</p>
<p>Neste artigo vamos falar sobre complexidade ciclomática e mostrar uma ferramenta para análise de códigos JavaScript, a biblioteca Plato.</p>
<h2>Complexidade Ciclomática</h2>
<blockquote>
<p>A primeira regra de funções é que elas devem ser pequenas. A segunda regra de funções é que elas devem ser ainda menores.<br />&mdash; Uncle Bob</p>
</blockquote>
<blockquote>
<p>Funções devem fazer uma coisa apenas. Fazê-la bem. Fazer somente ela.<br />&mdash; Uncle Bob</p>
</blockquote>
<p>Explicando de forma bem direta, complexidade ciclomática é uma métrica do número de caminhos possíveis no seu código. Por exemplo, vejamos o código abaixo:</p>
<pre class="lang-javascript">function authenticate() {
  if (user.isValid() === true) { 
    user.login(); 
  } else { 
    showMessage('Invalid credentials', 'error'); 
  } 
}</pre>
<p>A função <strong>authenticate</strong> possui valor <strong>2</strong> de complexidade ciclomática. Na prática, isso quer dizer que precisaríamos escrever dois testes unitários para cobrir todos os possíveis caminhos. Ou seja, quanto mais caminhos, maior a complexidade ciclomática e, quanto maior a complexidade ciclomática, mais difícil será de manter/testar seu código.</p>
<p><a href="http://www.mccabe.com/pdf/MeasuringSoftwareComplexityUAV.pdf" target="_blank">Estudos</a> recomendam <strong>10</strong> como o valor máximo que você deve permitir de complexidade ciclomática no seu método ou sua função. Este é um bom valor, mas tenha em mente que <strong>10</strong> já é uma complexidade alta e não deve, de forma alguma, ser a média de complexidade do seu projeto.</p>
<h2>Bad Fix</h2>
<p>Outra métrica tirada a partir da complexidade ciclomática é a probabilidade de uma correção injetar novos bugs no seu código. O pessoal da Aivosto, uma empresa especializada em ferramentas para desenvolvedores, chegou a <a href="http://www.aivosto.com/project/help/pm-complexity.html" target="_blank">seguinte tabela</a>:</p>
<table>
<tbody>
<tr>
<th>Complexidade Ciclomática</th>
<th>Probabilidade de &#8220;bad fix&#8221;</th>
</tr>
<tr>
<td>1-10</td>
<td>5%</td>
</tr>
<tr>
<td>20-30</td>
<td>20%</td>
</tr>
<tr>
<td>&gt;50</td>
<td>40%</td>
</tr>
<tr>
<td>próximo de 100</td>
<td>60%</td>
</tr>
</tbody>
</table>
<p>Segundo a pesquisa da Aivosto, uma correção aplicada em um método com complexidade ciclomática 25 tem 20% de chances de introduzir um novo bug na sua aplicação. Tente lembrar quantas vezes isso já aconteceu com você? E tente lembrar também do tamanho do método ou função que você estava &#8220;corrigindo&#8221;. Por isso é muito importante tentar medir tudo a respeito do seu código.</p>
<h2>Plato</h2>
<p style="text-align: center"><img src="http://tableless.com.br/wp-content/uploads/2013/06/complexityplato.jpg" alt="complexityplato" width="372" height="396" class="alignnone size-full wp-image-37790" style="border: 1px solid #ccc" /></p>
<p>Desenvolvida por Jarrod Overson, a ferramenta <a href="https://github.com/jsoverson/plato" target="_blank">Plato</a> aplica na prática todas as teorias de medição de complexidade ciclomática, exibindo na forma de gráficos dados como taxa de mantenabilidade, bugs estimados e erros de lint.</p>
<p>A instalação é feita através do npm, gerenciador de pacotes do nodejs:</p>
<pre>npm install -g plato</pre>
<p>A forma mais básica de uso é a seguinte:</p>
<pre>plato -d report src</pre>
<p>Onde <strong>-d report</strong> é a flag para indicar o diretório <strong>report</strong> como saída do seu relatório e <strong>src</strong> é o diretório dos arquivos JavaScript a serem analisados. </p>
<p>Outras opções importantes são as flag <strong>-r</strong> para ler o diretório recursivamente e <strong>-x &lt;regex&gt;</strong> para excluir arquivos baseados em uma regex.</p>
<p>Os relatórios do Plato armazenam históricos e é bem interessante ver os números subindo e descendo durante o desenvolvimento do seu projeto. Uma prática legal é guardar e exibir o relatório em algum lugar disponível para todo o seu time.</p>
<h2>Exemplos de relatórios</h2>
<p>Abaixo temos alguns exemplos de relatórios disponibilizados no repositório do projeto, gerados a partir de bibliotecas e utilitários populares:</p>
<ul>
<li><a href="http://jsoverson.github.com/plato/examples/jquery/" target="_blank">jquery</a></li>
<li><a href="http://jsoverson.github.com/plato/examples/grunt/" target="_blank">grunt</a></li>
<li><a href="http://jsoverson.github.com/plato/examples/marionette/" target="_blank">marionettejs</a></li>
</ul>
<h2>Bugs estimados</h2>
<p style="text-align: center"><img src="http://tableless.com.br/wp-content/uploads/2013/06/bugs.jpg" alt="bugs" width="404" height="246" class="alignnone size-full wp-image-37786" style="border: 1px solid #ccc" /></p>
<p>Um gráfico que chama a atenção nos relatórios do Plato é o de bugs estimados. Afinal de contas, entregar um produto sem bugs é (ou deveria ser) o objetivo final de qualquer desenvolvedor.</p>
<p>Maurice Howard Halstead criou um <a href="http://www.amazon.com/Elements-Software-Science-Operating-programming/dp/0444002057" target="_blank">conjunto de fórmulas</a> para medir coisas como volume, esforço, dificuldade e bugs estimados em um código. As fórmulas são baseadas nos números únicos e totais de operadores e operandos.</p>
<p>Não vou entrar muito em detalhes sobre os valores e as fórmulas, mas é bem interessante ler sobre esse assunto (não precisa ser o livro, a Wikipedia mesmo fornece uma <a href="http://en.wikipedia.org/wiki/Halstead_complexity_measures" target="_blank">página</a> bem completa sobre as fórmulas).</p>
<h2>Integração com Grunt</h2>
<p>Overson também desenvolveu um <a href="https://github.com/jsoverson/grunt-plato" target="_blank">módulo</a> que disponibiliza uma task Grunt para relatórios Plato.</p>
<p>A instalação segue o padrão de pacotes Grunt:</p>
<pre>npm install grunt-plato --save-dev</pre>
<p>Uma vez instalado o pacote, basta carregar a task no seu <strong>Gruntfile.js</strong> e rodar a task com o comando <strong>grunt plato</strong>:</p>
<pre>grunt.initConfig({
  plato: {
    your_task: {
      files: {
        'report/output/directory': ['src/**/*.js', 'test/**/*.js'],
      }
    },
  },
});
grunt.loadNpmTasks('grunt-plato');</pre>
<h2>Métricas, métricas e mais métricas</h2>
<p>Medir o código do seu projeto ajuda você e seu time a entender e prevenir problemas. Com a ajuda de métricas você vai conseguir manter um código fácil de ler e entender. Além de métricas dos níveis de complexidade também é importante possuir um relatório visível de cobertura de testes e uma documentação simples e direta do seu projeto.</p>
<p>Apesar do nome pomposo e de muita teoria, não é pra ninguém ficar assustado. Pode parecer um conceito avançado, mas na verdade é uma coisa muito básica: o que você estará fazendo é medir se é fácil (ou difícil) manter o seu código.</p>
<p>E lembrem-se: nunca refatore um código sem que ele possua uma cobertura de testes satisfatória!</p>
<p>O post <a href="http://tableless.com.br/medindo-a-complexidade-ciclomatica-do-seu-codigo-javascript/">Medindo a complexidade do seu código JavaScript</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/medindo-a-complexidade-ciclomatica-do-seu-codigo-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Storytelling</title>
		<link>http://tableless.com.br/storytelling/</link>
		<comments>http://tableless.com.br/storytelling/#comments</comments>
		<pubDate>Mon, 17 Jun 2013 13:00:56 +0000</pubDate>
		<dc:creator>Dani Guerrato</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[narrativas]]></category>
		<category><![CDATA[storytelling]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37652</guid>
		<description><![CDATA[<p>Neste artigo descubra como técnicas de storytelling podem ser aplicadas em web design para transformar a experiência do usuário.</p><p>O post <a href="http://tableless.com.br/storytelling/">Storytelling</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Um dos desafios de viver em um mundo onde o conhecimento está sempre facilmente disponível é lidar com a sobrecarga de informação. Na realidade existe tanto para se descobrir na internet que é difícil capturar a atenção do usuário por mais do que alguns minutos. Simplesmente mostrar uma informação não é mais relevante o suficiente. Estamos cada vez mais desconectados do significado e as vezes as palavras se tornam apenas ruídos de fundo. E isto vale na hora de apresentar uma marca, um produto, um serviço ou uma idéia. É necessário criar uma conexão emocional e contar uma história que transforme aquele objeto em algo significativo.</p>
<h2>A importância das histórias</h2>
<p>Pense em colocar um pedaço de limão bem azedo na boca. Algumas pessoas conseguem praticamente sentir o gosto apenas ao imaginar. <a title="Your Brain on Fiction" href="http://www.nytimes.com/2012/03/18/opinion/sunday/the-neuroscience-of-your-brain-on-fiction.html">Estudos recentes</a> de neurociência apontam que a mente humana ativa as mesmas áreas ao viver uma situação ou acessar uma memória. Ou seja, não existe uma distinção entre a maneira que processamos fatos reais e situações imaginárias. Ao visualizarmos mentalmente algo que remeta a uma informação arquivada na memória &#8211; como o limão do inicio do paragrafo &#8211; criamos uma associação sensorial e emocional maior do que com um dado científico isolado. E este é um recurso muito utilizado na aprendizagem. É muito mais fácil decorar uma fórmula de física da escola através de uma musiquinha ou situação engraçada do que tentando memorizar apenas o código numérico. Isto acontece por que narrativas ricas em linguagem figurada acessam sentidos que informações lógicas sem contexto emocional não alcançam. É por isto que histórias são poderosas. Histórias conseguem estimular áreas responsáveis pelos sentidos e criar relações &#8211; e portanto memórias &#8211; mais duradouras.</p>
<p>E isto ocorria muito antes da era da informação ou até mesmo do advento da escrita. Nossos ancestrais eram contadores de história e passavam assim o conhecimento de geração em geração. Os homens das cavernas faziam desenhos nas paredes e assim relatavam os acontecimentos de seu dia-a-dia. É através de histórias, arquétipos, mitos, lendas e símbolos que o ser humano atribui significado ao mundo.</p>
<h2>Storytelling e Design</h2>
<p>Que &#8220;storytelling&#8221; é a expressão em inglês para &#8220;contar histórias&#8221; você provavelmente já sabe. Mas este conceito, transportado para o universo do design, não precisa ser necessariamente algo literal. Não estamos falando aqui de abrir um layout com &#8220;Era uma vez&#8221; (embora isto possa até funcionar em alguns contextos). Na realidade o storytelling acaba sendo uma camada invisível do design. Algo planejado intencionalmente para ser o tom ou a voz da sua marca, mas que não é tão óbvio para seu usuário. O storytelling pode estar na personalidade do seu discurso, no uso inteligente de imagens e ilustrações, na sequência de elementos da interface que vai guiar o visitante e convida-lo a explorar o conteúdo, etc.</p>
<p>Parte do trabalho de um webdesigner é pegar uma informação &#8220;crua&#8221; e transforma-la em uma mensagem interessante. Ao adicionar o elemento emoção o valor desta mensagem aumenta. As vantagens disto são inúmeras. Podemos criar um maior senso de ordenação de conteúdo, conforto cognitivo, aumento de empatia e maior absorção de informação. A web não é feita de pixels nem de fatos isolados. A web é feita de histórias.</p>
<p>OK. Tudo isto é muito bonito e legal, mas como utilizar estes conceitos na prática?</p>
<h3>A boa notícia!</h3>
<p>Você provavelmente já utiliza alguns elementos de storytelling em seus trabalhos de design sem saber. Dicas visuais e <em>calls to action</em> são uma maneira de conduzir o fluxo da informação e instigar a curiosidade do usuário como os <em>clifhangers</em> de livros, filmes e seriados. Uma boa formatação de títulos, resumos e parágrafos também é uma dica visual da estrutura narrativa. Coerência entre a navegação, instruções claras em campos de formulário e links bem identificados garantem que o leitor não se perca.</p>
<h2>A história de um produto</h2>
<p>Pessoas acreditam que produtos esteticamente bonitos são mais úteis e efetivos porque elas se tornam emocionalmente atraídas por eles. E tomamos decisões com base em nossos sentimentos, utilizando a razão apenas para justificar o por que estas decisões foram tomadas.</p>
<p>Para contar uma história que crie uma ligação emocional podemos explorar três esferas:<br />
<strong>Aspiração:</strong> Como esperamos que aquele objeto funcione.<br />
<strong>Função:</strong> Como aquele objeto pode ajudar a resolver um problema.<br />
<strong>Memória:</strong> Lembranças positivas de uso.</p>
<p>Um exemplo disto é o design da Apple. O trecho abaixo é da página sobre o <a title="Apple iPhone" href="http://www.apple.com/br/iphone/">iPhone</a>.</p>
<p>&nbsp;</p>
<p><a href="http://www.apple.com/br/iphone/"><img class="alignnone size-full wp-image-37661" alt="iphone" src="http://tableless.com.br/wp-content/uploads/2013/06/iphone.jpg" width="660" height="240" /></a></p>
<p>&nbsp;</p>
<p><strong>Aspiração:</strong> Amar o produto.<br />
<strong>Função:</strong> Tecnologia, câmera, bateria de longa duração, facilidade de uso.<br />
<strong>Memória:</strong> As imagens grandes do produto em sequência, sempre inseridas em contextos de momentos felizes como viagens, família, amigos e momentos de lazer despertam a memória de felicidade e coisas que pessoas amam fazer, associando estas lembranças ao produto.</p>
<p>Outros elementos gráficos como vídeos e ícones complementam a história do produto. Em cada bloco de informação sobre o iPhone existe um link para continuar a navegação e ler os próximos capítulos da narrativa.</p>
<h2>Imagens Sequenciais</h2>
<p>Este é provavelmente um dos recursos mais comuns de storytelling, presente em diversos meios como storyboards, histórias em quadrinhos e livros ilustrados. A página <a title="Ben - The Bodyguard" href="http://benthebodyguard.com">Ben the Bodyguard</a> é um exemplo clássico de narrativa utilizando imagens sequenciais. O produto em questão é um aplicativo de segurança, apresentado pelo mascote da empresa &#8211; Ben, o guarda costas. A ambientação de cenários e os diálogos do personagem reforçam o clima de mistério e perigo. A navegação vertical ativada pela rolagem de mouse é o que dá movimento ao personagem e determina o ritmo e o tempo da história, transmitindo ao usuário um maior controle de interação.</p>
<p><a href="http://benthebodyguard.com"><img class="alignnone size-full wp-image-37655" alt="ben-thebodyguard" src="http://tableless.com.br/wp-content/uploads/2013/06/ben-thebodyguard.jpg" width="660" height="400" /></a></p>
<h2>Narrativas Lineares</h2>
<p>Um modelo tradicional de histórias compreende a apresentação de personagens em uma aparente normalidade, o surgimento de um conflito, o clímax e uma conclusão que resolve os conflitos apresentados.</p>
<p>Um exemplo bacana de uso desta estrutura tradicional de narrativa é <a title="The Story of Jess and Druss" href="http://jessandruss.us/">The Story of Jess and Druss</a>. O site conta através de textos, ilustrações e uma linha de tempo a história de como o casal &#8211; Jess and Druss &#8211; se conheceu, apresentando as dificuldades de viver sozinho e como o amor aconteceu. As ilustrações, a tipografia, as cores e todos os outros elementos de design servem de suporte para contar a história do casal.</p>
<p><a href="http://jessandruss.us/"><img class="alignnone size-full wp-image-37662" alt="Jess-and-Druss" src="http://tableless.com.br/wp-content/uploads/2013/06/Jess-and-Druss.jpg" width="660" height="400" /></a></p>
<p>A lineriadade da história é reforçada novamente pelo uso de uma navegação vertical e outro recurso interessante: a linha do tempo. O efeito de navegação parallax ajuda a transmitir um senso de continuidade para a história que possuí um clímax &#8211; o momento do pedido de casamento &#8211; e uma resolução em forma de um convite para os amigos do casal comparecerem ao evento. Final feliz para nossos personagens!</p>
<h2>Narrativas não-lineares</h2>
<p>Se você viveu sua infância nos anos 90 provavelmente se lembra de <a title="Gamebook" href="http://pt.wikipedia.org/wiki/Gamebook">livros-jogo</a> do tipo &#8220;Escolha sua própria Aventura&#8221;. Para quem não conhece eram livros que ao final de cada capítulo ofereciam múltiplas escolhas de desfechos possíveis. O leitor podia então tomar suas próprias decisões e ir para a página X para continuar a história de uma maneira ou ir para a página Y para revelar outra trama. Os finais variavam de acordo com as escolhas e, se tudo desse errado, bastava começar a ler de novo e tomar decisões diferentes. A internet é como um grande livro-jogo! Todos os elementos estão aí. Múltiplos pontos de entrada para uma página (links), narrativa truncada não-linear (textos espalhados em diferentes sessões) que deve trabalhar em conjunto para transmitir uma mensagem (objetivo do site). A cada escolha de navegação de um site o leitor abre um capítulo diferente e assim vai construindo sua própria história.</p>
<p>Um exemplo concreto de site que faz uso deste tipo de recurso é o <a title="Cadillac ATS vs The World" href="http://ats-vs-world.cadillac.com/">Cadillac ATS vs The World</a>. Logo na página inicial é possível escolher entre os destinos possíveis (Patagonia, Marrocos, Monaco ou China) e embarcar em uma viagem virtual para cada local. Fotos panorâmicas servem como cenário, mas os depoimentos da equipe e dos moradores locais são o verdadeiro coração da história. As demais imagens, vídeos e informações em uma linguagem turística ajudam a complementar o tema viagem.</p>
<p><a href="http://ats-vs-world.cadillac.com/"><img class="alignnone size-full wp-image-37656" alt="cadillac" src="http://tableless.com.br/wp-content/uploads/2013/06/cadillac.jpg" width="660" height="400" /></a></p>
<h2></h2>
<h2>Seja o herói!</h2>
<p>Toda história tem um protagonista. E protagonistas precisam de antagonistas, conflitos, dificuldades, problemas&#8230; Exponha claramente quem é do time do bem (você) e como solucionar um problema do usuário. Faça o público torcer para o sucesso da sua empresa, produto, serviço. Crie ações, metas e objetivos claros para ter um final feliz. Você não precisa ter um mascote para fazer isso. O seu serviço pode ser o herói.</p>
<p>Um case bacana de storytelling é o site da Dropbox. A metáfora de história permeia todo o design da página <a title="Dropbox Tour" href="https://www.dropbox.com/tour">Tour</a>.</p>
<p><a href="https://www.dropbox.com/tour"><img class="alignnone size-full wp-image-37657" alt="dropbox-1" src="http://tableless.com.br/wp-content/uploads/2013/06/dropbox-1.jpg" width="660" height="400" /></a></p>
<p>Eles exploram claramente o que é o serviço (&#8220;Um lugar para todos os seus arquivos, onde quer que você esteja&#8221;), quem são os possíveis personagens (&#8220;não importa se você é estudante ou profissional, um pai ou um avô.&#8221;), existe um vilão concreto (o medo de &#8220;derramar café sem querer no laptop&#8221;), um herói (a própria Dropbox) e um final feliz (&#8220;Relaxe com a certeza de que todos os seus arquivos estão seguros no Dropbox e nunca se perderão&#8221;). Para reforçar o conceito de história temos elementos esqueumórficos como metáforas (o livro, navegação por páginas, o próprio ícone da dropbox como uma caixa de arquivos) e ilustrações lúdicas para reforçar o ideal de segurança do final feliz.</p>
<p><a href="https://www.dropbox.com/tour"><img class="alignnone size-full wp-image-37658" alt="dropbox-2" src="http://tableless.com.br/wp-content/uploads/2013/06/dropbox-2.jpg" width="660" height="400" /></a></p>
<p>Cada página do livro é em si uma história completa. Seguindo as páginas temos mais alguns elementos interessantes de storytelling como recursos de balõezinhos que remetem diretamente a história em quadrinho, elementos de humor, atribuição de super poder ao herói (máquina do tempo) e novamente vilões concretos (computador pegando fogo).</p>
<h2>O usuário também é um personagem</h2>
<p>Se você for contar uma mesma história para seus pais em uma reunião de família, para um possível empregador em uma entrevista de emprego ou para um grupo de amigos em um bar provavelmente vai escolher diferentes abordagens. Em essência a história permanece igual mas decisões como o uso de palavrões, gírias, jargões técnicos, humor, etc vão determinar o tom da linguagem de acordo com a situação social. O truque para saber qual variação linguística utilizar é conhecer o seu público-alvo.</p>
<p>Você que está lendo este texto tem 80% de chance de ser homem e 77% de chance de ter entre 16 e 34 anos. Não, não tenho uma bola de cristal. Eu li o Media Kit do Tableless antes de começar a escrever estes artigos. Mas muitas vezes, ao lançar um serviço novo, estas informações não estão disponíveis. E para estas horas o que ajuda é imaginar o seu usuário também como um personagem. Dar uma cara para a figura misteriosa por trás do monitor vai te ajudar a escolher o tom da sua história.</p>
<p>Um recurso muito utilizado é a criação de personas. Essencialmente você deve pensar em quem, quando, onde e por que alguém vai querer utilizar o seu serviço. Mas o grau de complexidade das suas respostas pode variar muito. Você pode simplesmente elencar alguns dados demográficos ou ir mais longe e criar um nome, imagem e biografia para este usuário hipotético. Conhecendo quem é o seu público alvo fica muito mais fácil descobrir o que ele busca e desta forma entregar um conteúdo mais relevante. Não esqueça de elencar também os possíveis cenários e situações que este personagem irá interagir com a interface.</p>
<p>Quer saber como construir suas próprias personas? Aqui no Tableless temos um artigo muito interessante justamente sobre <a title="Personalidade no Design" href="http://tableless.com.br/personalidade-no-design/">Personalidade no Design</a>.</p>
<p>Saber disto pode te ajudar a projetar a navegação de maneira mais inteligente. Você não pode controlar as escolhas do usuário, mas pode fornecer uma estrutura lógica coesa para que ele construa seu próprio caminho. Uma história nunca é percebida exatamente como foi imaginada. Cada pessoa entende histórias de maneiras diferentes, adicionando seus próprios pensamentos, sentimentos, percepções e experiências. Interfaces como a do Windows 8 e do <a title="Google Now" href="http://www.google.com/landing/now/">Google Now</a> estão em alta hoje não apenas por que o design minimalista é uma tendência visual da moda, mas por abrirem espaço para que narrativas pessoais possam existir. Ações como criar, escolher, modificar e ordenar blocos de conteúdo permitem um nível de personalização muito maior e assim criam o cenário perfeito para estas narrativas.</p>
<p><a href="http://www.google.com/landing/now/"><img class="alignnone size-full wp-image-37660" alt="google-now" src="http://tableless.com.br/wp-content/uploads/2013/06/google-now.jpg" width="660" height="240" /></a></p>
<p>O Google Now oferece uma variedade de informações em cartões de conteúdo que variam de acordo com a localização geográfica da pessoa e seu histórico de pesquisas no Google. Assim é possível exibir informações sobre o clima, trânsito, mapas, fotos, etc de acordo com o uso. Este é um exemplo de estudo de persona levado a sério! O sistema a partir de inputs automáticos traça um perfil de maneira inteligente e como consequência fornece um conteúdo mais relevante.</p>
<h2>Mostre o que é único sobre você</h2>
<p>Uma imagem vale mais do que mil palavras. Mas uma imagem genérica e sem personalidade equivale a um discurso sobre o nada. Bancos de imagens são um recurso valido, mas muito cuidado ao utilizar indiscriminadamente este tipo de imagens (principalmente os gratuitos). Isto pode passar ao seu usuário a impressão de frieza e falta de personalidade. Todo mundo sabe que aquela moça de headphones gigantesco não trabalha de verdade no callcenter da sua empresa&#8230; a não ser que ela trabalhe em todos os callcenters do mundo ao mesmo tempo. Pense em qual é o seu público e tente se relacionar com ele. Por que não mostrar a cara da sua equipe de verdade? E do seu escritório? Desta maneira o público consegue conhecer (e sentir empatia) por você de verdade.</p>
<p>Se não possuir recursos para ter imagens próprias tente procurar por registros marcados como Creative Commons (com licença de uso comercial) em sites como o <a title="Flickr" href="http://www.flickr.com/">Flickr</a>. Este tipo de imagem transmite mais autenticidade do que aquela tipica família americana em um estúdio branco (que não lembra em nada as famílias brasileiras).</p>
<p>Você pode ainda utilizar outros recursos visuais como ilustrações ou até mesmo uma tipografia diferente. Além das imagens, elementos do layout como formas, linhas, cores, texturas, padrões, peso, movimento, espaço e proporção são as principais ferramentas para compor o tom. Dependendo do seu contexto letterings expressivos e caligrafia são boas opções e transmitem o sentimento de algo feito a mão com carinho e cuidado. O site <a title="Forefathers Group" href="http://forefathersgroup.com/">Forefathers Group</a> é um exemplo disto. O uso de lettering, o ar de mistério dos textos, a paleta de cores e ilustrações remete ao tema principal de grupos itinerantes e companhia de circo.</p>
<p><a href="http://forefathersgroup.com/"><img class="alignnone size-full wp-image-37659" alt="Forefathers-Group" src="http://tableless.com.br/wp-content/uploads/2013/06/Forefathers-Group.jpg" width="660" height="400" /></a></p>
<h2>Storytelling transmídia</h2>
<p>É importante lembrar que a história de uma marca transcende os limites de uma página na internet. Toda a identidade visual e linguagem verbal empregada deve ser consistente e partir de um mesmo contexto lógico. De nada adianta uma empresa se esforçar para parecer simpática e amigável em seu site e depois tratar mal os clientes nas redes sociais, por exemplo. Se você é um freelancer a responsabilidade é ainda maior já que a sua marca é você mesmo! Muito cuidado com a imagem que você está transmitindo. Parece senso comum, mas muita gente acaba perdendo ótimas oportunidades profissionais ao reclamar do trabalho no Facebook ou Twitter.</p>
<p>Um exemplo de storytelling transmídia é a campanha de e-mails marketing da empresa Meu Móvel de Madeira. Cada e-mail foca em uma persona de usuário em uma situação específica. No <a title="E-mail marketing - Minha casa nova" href="http://www.meumovel.com.br/mkt-mmm/email-mkt/2013/mar/minha-casa-nova-estar/minha-casa-nova-estar.html">exemplo a seguir</a> o personagem hipotético acabou de comprar uma casa e deseja mobiliar a sala:</p>
<p><a href="http://www.meumovel.com.br/mkt-mmm/email-mkt/2013/mar/minha-casa-nova-estar/minha-casa-nova-estar.html"><img class="alignnone size-full wp-image-37663" alt="mmm" src="http://tableless.com.br/wp-content/uploads/2013/06/mmm.jpg" width="660" height="400" /></a></p>
<p>&nbsp;</p>
<p>Além de um website, redes sociais e e-mails existem muitos outros recursos de mídia para continuar sua história dentro e fora da internet. Aplicativos, blogs,livros, cartões de visita, posters, adesivos, videos&#8230; Todos estes recursos são formas validas de comunicar sua mensagem e dar ao seu interlocutor a chance de participar de uma experiência completa. Cabe a você torna-la incrível! Boa sorte na sua jornada.</p>
<h3>Saiba mais:</h3>
<p><a title="Smashing Book #3 1/3" href="https://shop.smashingmagazine.com/smashing-book-one-third-digital.html?pk_campaign=smashing-magazine-ebooks-tab#">The Missing Element of Redesign: Story &#8211; Smashing Book #3⅓ — The Extension</a><br />
<a title="Better User Experience with Storytelling" href="http://uxdesign.smashingmagazine.com/2010/02/11/better-user-experience-through-storytelling-part-2/">Better User Experience With Storytelling </a><br />
<a title="10 ways to incorporate storytelling in web-design" href="http://blog.usabilla.com/10-ways-to-incorporate-storytelling-in-web-design/">10 Ways To Incorporate Storytelling In Web Design</a></p>
<p>O post <a href="http://tableless.com.br/storytelling/">Storytelling</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/storytelling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sass – Um outro método de escrever CSS</title>
		<link>http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/</link>
		<comments>http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/#comments</comments>
		<pubDate>Tue, 11 Jun 2013 15:09:36 +0000</pubDate>
		<dc:creator>Thaiana Poplade</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[frameworks]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37628</guid>
		<description><![CDATA[<p>Quando pensamos em produtividade, logo nos perguntamos e pesquisamos como aumentá-la sem grandes impactos. Então, os frameworks para CSS vem suprir essa necessidade. Com vocês, um pouco de Sass.</p><p>O post <a href="http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/">Sass – Um outro método de escrever CSS</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Se você é um desenvolvedor front-end que está atualmente no mercado, já ouviu/leu palavrinhas como <a href="http://lesscss.org/" target="_blank">LESS</a>, <a href="http://foundation.zurb.com/" target="_blank">Foundation</a> e <a href="http://sass-lang.com" target="_blank">Sass</a>. Alguns sabem do que estou falando, outros não, mas o fato que é que esses nomes foram dados à frameworks de folhas de estilo para auxiliar na produtividade de códigos, principalmente no que diz respeito a repetição de uma mesma ação, diversas vezes.</p>
<p>Quantas vezes você se pegou copiando e colando aquele monte de classes identadas com mais de 15 linhas repetidamente e pensou: podia existir uma maneira mais rápida de fazer isso.</p>
<p>Agora eu te digo: tem!</p>
<p>Eu conversei com alguns amigos desenvolvedores e fui saber quais dos frameworks tem sido mais usados, e a disputa ficou bastante acirrada entre o LESS e o Foundation. Ainda assim, na mesma semana acabei lendo um artigo técnico sobre o uso do Sass e por isso resolvi também testá-lo para entender como ele funciona.</p>
<p>Basicamente você começa “instalando” ele em sua máquina. Para os usuários de MAC é bem mais tranquilo que para os usuários de PC, porque para o Sass “rodar“ precisamos que o  <a href="http://pt.wikipedia.org/wiki/Ruby_%28linguagem_de_programa%C3%A7%C3%A3o%29" target="_blank">Ruby</a> também esteja instalado e isso já é nativo no MAC. De qualquer forma, não é nenhuma experiência traumática. <a href="http://sass-lang.com/download.html" target="_blank">No próprio site do Sass você encontra os dois métodos de instalação.</a></p>
<p>Eu uso MAC e escolhi instalar o Sass através do Git.</p>
<p>Após clonar o repositório, criei no diretório escolhido um novo arquivo com o nome de “<strong>style.scss</strong>”. Neste arquivo de folha de estilo, escrevi as seguintes linhas de código:</p>
<pre>.content {
backgoround: #000;
font-family: Arial;
font-size: 15px;
p{ line-height: 20px;}
}</pre>
<p>Depois abri o terminal, no diretório onde o arquivo .scss foi salvo e digitei:<br />
<code>sass --watch style.scss:style.css</code></p>
<p>Pronto! A mágica está feita.</p>
<p>Este comando cria um novo arquivo <strong>style.css</strong> no mesmo diretório traduzindo as linhas digitadas acima em:</p>
<pre>.content {
  backgoround: #000;
  font-family: Arial;
  font-size: 15px; }
    .content p {
   line-height: 20px;
}</pre>
<p>Neste momento você pode estar pensando: Ah, é legal, mas não vi tanta mágica assim.</p>
<p>Então vamos incrementar um pouco as coisas.</p>
<p>Digite em seu arquivo<strong> .scss</strong>:</p>
<pre>.varios-elementos{
       background:#ccc;
       p{ color:red}
       a{ color:pink}
       input{
         -moz-border-radius: 20px;
         border-radius: 20px;
         -webkit-border-radius: 20px;
         border-left:solid 1px #eaeaeb;
         border-right:solid 1px #eaeaeb;
         border-bottom:solid 1px #eaeaeb; 
         border-top:solid 3px #ccc;
       }
    }</pre>
<p>Salve e em seguida seu arquivo <strong>style.css</strong> estará com:</p>
<pre>.varios-elementos {
  background: #ccc; }
  .varios-elementos p {
    color: red; }
  .varios-elementos a {
    color: pink; }
  .varios-elementos input {
    -moz-border-radius: 20px;
    border-radius: 20px;
    -webkit-border-radius: 20px;
    border-left: solid 1px #eaeaeb;
    border-right: solid 1px #eaeaeb;
    border-bottom: solid 1px #eaeaeb;
    border-top: solid 3px #ccc; }</pre>
<p>Percebeu? “.vários-elementos“ foi a classe que criamos, em seguida começamos a escrever as características desta classe e dos elementos que nela continham, de forma bastante intuitiva e direta.</p>
<p>Não tem muito segredo né?</p>
<p>O Sass também permite o<strong> uso de variáveis</strong>. Por exemplo:</p>
<pre>$main-color: #d5d5d5

.botao{
   background: $main-color;
}</pre>
<p><strong>O uso de pseudo-elementos</strong>:</p>
<pre>a {
   color: #ce4dd6;
   &amp;:hover { color: #ffb3ff;}
   &amp;:visited { color: #c458cb; }
  }</pre>
<p><strong>O uso de Operações e Funções</strong></p>
<pre>#navbar {
        $navbar-width: 800px;
        $items: 5;
        width: $navbar-width;
        li {
            float: left;
            width: $navbar-width/$items - 10px;
            }
        }</pre>
<p>E o <strong>uso de interpolação</strong>: você pode utilizar variáveis não apenas para valores, mas também propriedades ou seletores:</p>
<pre>$vert: top;
$horz: left;
$radius: 10px;
.rounded-#{$vert}-#{$horz} {
       border-#{$vert}-#{$horz}-radius: $radius;
       -moz-border-radius-#{$vert}#{$horz}: $radius;
       -webkit-border-#{$vert}-#{$horz}-radius: $radius;
    }</pre>
<p>Também é permitido importar outros arquivos, como já é possível nos arquivos CSS tradicionais e também o uso da diretiva <strong>“@mixin”</strong> que é umas das <em>features</em> mais valorizadas do Sass, onde você pode aproveitar pedaços de códigos com elementos, seletores ou propriedades, simplesmente importando através diretiva “@include“ no arquivo .scss:</p>
<pre>@mixin rounded-top-left {
        $vert: top;
        $horz: left;
        $radius: 10px;
        border-#{$vert}-#{$horz}-radius: $radius;
        -moz-border-radius-#{$vert}#{$horz}: $radius;
        -webkit-border-#{$vert}-#{$horz}-radius: $radius;
}
#navbar li { @include rounded-top-left; }
#footer { @include rounded-top-left; }</pre>
<p>Legal né?</p>
<p>Pois então, enquanto eu testava o Sass me perguntava: vale a pena aprender um novo jeito de escrever CSS? E a resposta foi: vale, dependendo do seu objetivo.</p>
<p>Se o tempo para o desenvolvimento for curto, o ideal é manter-se no que você já conhece e sabe fazer. Experimentar, pode dar muito certo e te fazer adquirir ainda mais conhecimento, mas também pode dar errado e você não ter tempo de arrumar, além de atrasar seu cronograma.</p>
<p>Pondere isso, mas não deixe de estudar. Quem sabe numa tarde sem muito job você pode usar o Sass, aprender a aplicá-lo em sua plenitude e dar tudo muito certo quando você for desenvolver projetos a valer.</p>
<p> <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Até a próxima.</p>
<p>&nbsp;</p>
<p>OBS: Pessoal, conforme o comentário abaixo do Duke, existe uma correção a ser feita no que diz respeito à &#8220;dependência&#8221; do Ruby para a instalação do Sass:</p>
<header><a href="http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/#">Duke:</a></header>
<div>
<div>
<div>
<p>O SASS de forma alguma depende do Ruby On Rails, o SASS assim como o Ruby On Rails são gem(plugins) do Ruby, o Mac OS não vem com o Ruby on Rails instalado e sim com o Ruby. Veja no proprio link que você colocou da Wikipedia está lá &#8220;Escrito em: Ruby&#8221; ou seja Ruby On Rails está para Ruby assim como CakePHP está para PHP, Django está para Python.</p>
<p>&nbsp;</p>
<p>É isso aí <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>&nbsp;</p>
</div>
</div>
</div>
<p>O post <a href="http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/">Sass – Um outro método de escrever CSS</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/sass-um-outro-metodo-de-escrever-css/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Como perder peso (no browser)</title>
		<link>http://tableless.com.br/como-perder-peso-no-browser/</link>
		<comments>http://tableless.com.br/como-perder-peso-no-browser/#comments</comments>
		<pubDate>Tue, 11 Jun 2013 12:50:33 +0000</pubDate>
		<dc:creator>Zeno Rocha</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[2013]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=15004</guid>
		<description><![CDATA[<p>Nós desenvolvedores falamos tanto das novidades do HTML5, CSS3, EcmaScript 6 que acabamos esquecendo de falar de outras coisas também muito importantes, mas que não são tão novidade assim, como performance.</p><p>O post <a href="http://tableless.com.br/como-perder-peso-no-browser/">Como perder peso (no browser)</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Nós desenvolvedores falamos tanto das novidades do HTML5, CSS3, EcmaScript 6 que acabamos esquecendo de falar de outras coisas também muito importantes, mas que não são tão novidade assim, como performance.</p>
<p>Depois de muito esforço, finalmente lançamos um guia definitivo sobre o assunto chamado <a href="http://browserdiet.com">browserdiet.com</a> e vim compartilhar um pouco da experiência de ter liderado esse projeto irado.</p>
<p><a href="http://tableless.com.br/wp-content/uploads/2013/03/a.jpg"><img class="aligncenter size-full wp-image-15040" alt="a" src="http://tableless.com.br/wp-content/uploads/2013/03/a.jpg" width="660" height="337" /></a></p>
<h2>Motivação</h2>
<p>O ano de 2012 foi um ano bem diferente pra mim, passei 1/3 dele viajando e me deparei com muita conexão ruim em hotel e aeroporto. Isso me deixava muito irritado. E é claro que eu sempre xingava o hotel/aeroporto, até perceber que a culpa na verdade é nossa.</p>
<p>Nós desenvolvedores somos egoístas. Passamos o dia todo no escritório com uma alta velocidade de conexão e esquecemos que existem outras pessoas no mundo enfrentando velocidades bem diferentes daquela.</p>
<h2>O Início</h2>
<p>Comecei a estudar mais sobre performance para escrever <a href="http://zenorocha.com/monografia/">minha monografia</a> e me deparei com o seguinte cenário. Em inglês, excelentes referências como os livros <a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309">High Performance Websites</a> e <a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/ref=sr_1_1">Even Faster Web Sites</a>, ambos do <a href="http://stevesouders.com/">Steve Souders</a>. Além, é claro, dos guias da <a href="http://developer.yahoo.com/performance/rules.html">Yahoo!</a> e <a href="https://developers.google.com/speed/docs/best-practices/rules_intro">Google</a>. Já em português, uma dezena de blogposts soltos por aí.</p>
<p>Pensei: &#8220;E se eu fizesse um guia foda de performance voltado pra comunidade?&#8221; Mas não fazia sentido fazer aquilo sozinho, então de pouquinho em pouquinho fui conversando com uns amigos.</p>
<h2>Concepção</h2>
<p>Uma coisa estava muito clara pra mim, queria fazer um projeto divertido.</p>
<p>Convenci primeiro a designer <a href="http://www.brizabueno.com/">Briza Bueno</a> <em>(Americanas.com)</em> a me ajudar. Ela elaborou uma identidade muito mais divertida do que aqueles guias chatos que existem hoje. Isso tudo com base nas ilustrações do <a href="http://myextralife.com/56geeks/">Scott Johnson</a>, a quem eu pedi autorização para utilizar as imagens.</p>
<p>Depois chegou a hora de elaborar a estrutura desse site, nessa parte o <a href="http://irae.pro.br">Iraê Lambert</a> <em>(Yahoo!)</em> me deu uma mão escrevendo um static generator em Python. Só que eu não dominava aquele código e as barreiras que eu encontrava por não saber manipular aquilo foram me afastando do projeto, ao mesmo tempo em que outras ideias iam surgindo.</p>
<p>Resultado: o projeto ficou parado por 1 ano até que eu decidi retomar reescrevendo todo código usando um outro static generator em Node.JS chamado <a href="http://docpad.org">DocPad</a>. Como todo projeto open source, se você quiser fazer algo que tenha a colaboração das pessoas precisa eliminar o maior número de barreiras possíveis. Por isso, inspirado no <a href="http://html5please.com/">HTML5 Please</a>, decidi que todas as dicas seriam escritas no formato mais simples do planeta, em <a href="http://pt.wikipedia.org/wiki/Markdown">Markdown</a>.</p>
<h2>Conteúdo</h2>
<p>Design e implementação estavam prontos, só faltava o que realmente importa, o conteúdo. Convidei então grandes amigos que enfrentam muitos desafios de performance no seu dia-a-dia, <a href="https://github.com/davidsonfellipe">Davidson Fellipe</a> <em>(Globo.com)</em>, <a href="https://github.com/keppelen">Giovanni Keppelen</a> <em>(Peixe Urbano)</em> e <a href="https://github.com/jaydson">Jaydson Gomes</a> <em>(Terra)</em>. As categorias iniciais divididas entre nós foram HTML, CSS, JavaScript e jQuery.</p>
<p>Meu eterno dilema entre português e inglês também persistia nesse projeto. Cheguei a comprar o pequenino domínio <a href="http://comoperderpesonobrowser.com.br">comoperderpesonobrowser.com.br</a>, mas ele claramente não funcionaria para um conteúdo em inglês também. Por isso, optei por algo mais curto e universal.</p>
<h2>Revisão</h2>
<p>Depois de muito aprimoramento resolvi convidar outros caras sinistros para revisarem, como o <a href="https://github.com/marcelduran">Marcel Duran</a> <em>(Twitter)</em>, <a href="https://github.com/miketaylr">Mike Taylor</a> <em>(Opera)</em>, <a href="https://github.com/mangini">Renato Mangini</a> <em>(Google)</em> e <a href="https://github.com/sergiolopes">Sérgio Lopes</a> <em>(Caelum)</em>. Todos ficaram animados e contribuiram insanamente. O legal foi que a discussão não ficou apenas na parte do conteúdo, questões relativas ao código do site foram extremamente debatidas como usar <a href="https://github.com/zenorocha/browser-diet/issues/40">CSS Sprites vs Lazy Load</a>.</p>
<h2>Lançamento</h2>
<p>Eu estava planejando lançar esse projeto no mínimo em Abril. Só que quando vi que os primeiros colaboradores (Briza, Davidson, Giovanni, e Jaydson) do projeto estariam presentes no <a href="http://riojs.org">Rio.JS</a>, mudei o tema da minha palestra e comecei a correr contra o tempo.</p>
<p>Felizmente deu tudo certo e lançamos o projeto!</p>
<p>O resultado final você pode conferir em: <a href="http://browserdiet.com">browserdiet.com</a>. E o código fonte, como sempre, está <a href="https://github.com/zenorocha/browser-diet">aberto no Github</a>.</p>
<p><em>PS: Os <a href="https://speakerdeck.com/zenorocha/como-perder-peso-no-browser/">slides também estão online</a> para quem quiser conferir.</em></p>
<h2>Conclusão?</h2>
<p>Estou bem animado para ver como a comunidade vai receber e se beneficiar desse aglomerado de dicas iradas que preparamos.</p>
<p>E aí, vamos fazer uma web mais rápida?</p>
<h2>Reações</h2>
<p><em>iMasters &#8211; <a href="http://imasters.com.br/noticia/guia-que-conscientiza-desenvolvedores-sobre-a-importancia-da-performance-e-lancado/">Guia que conscientiza desenvolvedores sobre a importância da performance é lançado</a></em></p>
<blockquote class="twitter-tweet"><p>love this new project: <a title="http://browserdiet.com" href="http://t.co/u8FWpD5mW0">browserdiet.com</a></p>
<p>— Stoyan Stefanov (@stoyanstefanov) <a href="https://twitter.com/stoyanstefanov/status/311258820800303104">March 11, 2013</a></p></blockquote>
<p><em>Stoyan Stefanov, Engineer &#8211; Facebook</em></p>
<blockquote class="twitter-tweet"><p>How to lose weight in the browser — the definitive front-end performance guide: <a title="http://browserdiet.com/" href="http://t.co/YqRgmFvipm">browserdiet.com</a></p>
<p>— Mathias Bynens (@mathias) <a href="https://twitter.com/mathias/status/311193207327293440">March 11, 2013</a></p></blockquote>
<p><em>Mathias Bynens, Web Developer &#8211; Freelance</em></p>
<blockquote class="twitter-tweet"><p>Some of Brazil&#8217;s brightest front-end devs created and just launched <a title="http://browserdiet.com/" href="http://t.co/8FNPhsjzQx">browserdiet.com</a>. Check it out!</p>
<p>— Mike Taylor (@miketaylr) <a href="https://twitter.com/miketaylr/status/311253455647952897">March 11, 2013</a></p></blockquote>
<p><em>Mike Taylor, Web Opener &#8211; Opera</em></p>
<p>O post <a href="http://tableless.com.br/como-perder-peso-no-browser/">Como perder peso (no browser)</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/como-perder-peso-no-browser/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Sobre Cor e Webdesign</title>
		<link>http://tableless.com.br/sobre-cor-e-webdesign/</link>
		<comments>http://tableless.com.br/sobre-cor-e-webdesign/#comments</comments>
		<pubDate>Mon, 10 Jun 2013 12:50:33 +0000</pubDate>
		<dc:creator>Dani Guerrato</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[cor]]></category>
		<category><![CDATA[ferramentas]]></category>
		<category><![CDATA[hex]]></category>
		<category><![CDATA[hsla]]></category>
		<category><![CDATA[rgba]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37574</guid>
		<description><![CDATA[<p>Entenda o funcionamento dos sistemas de cores mais utilizados da web e conheça ferramentas úteis para criar e organizar suas próprias paletas.</p><p>O post <a href="http://tableless.com.br/sobre-cor-e-webdesign/">Sobre Cor e Webdesign</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>É possível analisar a Teoria da Cor de diversas maneiras. Podemos escolher uma abordagem física, psicológica, cultural, filosófica ou artística para entendermos as cores. Todos estes estudos são interessantes e extremamente relevantes para designers e desenvolvedores. Mas na hora de colocar a mão na massa decidir entre sistemas e organizar uma paleta de cores bacana pode parecer uma tarefa confusa até para os designers veteranos. Quais são as melhores práticas? Quais ferramentas podem facilitar o uso, análise, inspiração e criação de paletas de cores para a internet? A intenção deste artigo é responder a estas perguntas e fornecer algumas dicas práticas sobre cor e webdesign.</p>
<h2>Nomeando Cores</h2>
<p>Dar nome a cores sempre foi um problema. Linguagem é uma coisa extremamente subjetiva e arbitrária. Cada grupo cultural possui uma visão de mundo diferente e portanto dá nome ao objetos a sua própria maneira. Com as cores não podia ser diferente.</p>
<p>Outro grande problema é que a percepção física de cores varia de pessoa para pessoa. Cor é a maneira que o olho interpreta a luz refletida nos objetos. O ser humano possuí células chamadas cones. Estas células são responsáveis por entender os diferentes padrões de comprimento de onda e entregar esta informação ao cérebro. E esta percepção pode variar individualmente. <a title="Gender and Color" href="http://blog.kissmetrics.com/gender-and-color/">Pesquisas</a> mostram que existe uma diferença na maneira com a qual homens e mulheres classificam as cores, por exemplo. E até <a title="Mulher com super-visão enxerga 99 milhões de cores a mais" href="http://revistagalileu.globo.com/Revista/Common/0,,EMI310040-17770,00-MULHER+COM+SUPERVISAO+ENXERGA+MILHOES+DE+CORES+A+MAIS.html">pessoas com super visão</a> que enxergam milhões de cores a mais que alguem comum.</p>
<h3>A Era Web Safe</h3>
<p>Nos primórdios da web tudo era relativamente mais simples. Os chips gráficos trabalhavam com apenas 8-bits e eram capazes de reproduzir exatamente 256 cores diferentes. 216 delas ganharam um nome em inglês (o restante ficou reservado para uso interno de cada sistema) e precisávamos consultar uma <a title="W3C Color Keywords" href="http://www.w3.org/TR/SVG/types.html#ColorKeywords">tabelinha </a>na hora de escolher a matiz mais bacana. Mesmo com a evolução das placas de video a preocupação com acessibilidade e retrocompatibilidade forçou alguns desenvolvedores a se prenderem aquele esquema inicial. Estas eram as cores &#8220;web safe&#8221;, ou seja, aquelas que supostamente seriam exibidas corretamente em todos os browsers. Posteriormente foi descoberto que apenas 22 destas cores eram realmente seguras. Mas isto é outra história&#8230; Felizmente a tecnologia evoluiu e os monitores coloridos atualmente tem 24 bits e são capazes de renderizar exatamente 16,777,216 cores. Os dias de web safe ficaram para trás. Mas catalogar milhões de cores em um computador com base em seus respectivos nomes e suas variações em cada língua através de uma tabela passou a ser impossível! É mais prático entender a mecânica por trás dos códigos para assim usarmos as cores na internet de maneira efetiva.</p>
<p>Mas se você ainda precisa de um nome humano para se sentir mais feliz pode utilizar alguma ferramenta como <a title="Color name &amp; hue" href="http://www.color-blindness.com/color-name-hue">Color Name &amp; Hue </a> para descobrir um (em inglês) a partir de seu respectivo código. Uma opção em português é navegar em uma lista como a da <a title="Wikipedia - Lista de Cores" href="http://pt.wikipedia.org/wiki/Anexo:Lista_de_cores">Wikipedia</a>. Não que isto tenha algum aspecto prático no dia-a-dia. Explicar para o seu cliente qual é a cor Feldspato pode ser mais complicado do que simplesmente mostrar o trabalho, mas você pode impressionar os seus amigos na próxima vez que jogar Stop.</p>
<h2>Sistemas de Cores</h2>
<h3>RGB</h3>
<p>O RGB (Red, Green e Blue &#8211; ou Vermelho, Verde e Azul) é um sistema de cores aditivo projetado para ser utilizado em dispositivos eletrônicos. Monitores são pretos e iluminados por pontos de luz. Portanto você parte da ausência de cor e vai &#8220;somando&#8221; pontos de luz vermelhos, verdes e azuis até chegar na cor desejada.</p>
<p>&nbsp;</p>
<p><img class="alignnone size-full wp-image-37585" alt="rgb" src="http://tableless.com.br/wp-content/uploads/2013/06/rgb.jpg" width="660" height="400" /></p>
<p>&nbsp;</p>
<p>A estrutura é composta por 3 pares de números de 3 dígitos cada variando do 0 ao 255, quanto mais alto é o número mais clara é a cor. Através destas combinações podemos chegar a mais de 16 milhões de cores (256 x 256 x 256).</p>
<p>É possível utilizar cores do sistema RGB em layouts diretamente de suas folhas de estilo. Para isto basta declarar o valor dos canais vermelho, verde e azul separados por virgula.</p>
<p>Vamos imaginar que o seu layout possui um  título azul. A sintaxe em CSS ficaria assim:</p>
<pre class="lang-CSS">h1 {
color: rgb(0, 0, 255);
}</pre>
<p>Com as novidades do CSS3 o RGB ganhou um upgrade e tornou-se RGBA. O canal A (alpha) é responsável por controlar a opacidade das cores dos elementos em CSS sem afetar outros itens afiliados. Para isto basta declarar um valor de 0.1 a 1 separado por ponto. Este valor corresponde ao nível de transparência sendo 1 sólido e 0 invisível.<br />
O mesmo título do nosso exemplo com 50% de transparência ficaria assim:</p>
<pre class="lang-CSS">h1 {
color: rgb(0, 0, 255, 0.5);
}</pre>
<h3>O sistema Hexadecimal</h3>
<p>Se você está lendo este artigo provavelmente já está familiarizado com os tripletos hexadecimais. São sequências numéricas que representam cores formadas a partir de uma combinações de 6 caracteres precedidos de uma hashtag. Mas você sabe a lógica por trás do sistema?</p>
<p>Os códigos hexadecimais são compostos através de uma combinação de três conjuntos de pares formados a partir de números de 0 a 9 e letras de A a F. Quanto mais alto o número mais clara é a cor e quanto mais baixo o número &#8211; você adivinhou! &#8211; mais escura. Por isso que #000000 é preto. Se o código for composto de pares que se repetem como no caso de #444444, por exemplo, é possível utilizar a formula abreviada #444. O simbolo # serve apenas para informar que se trata de um código hexadecimal.</p>
<p>A sintaxe acredito ser já conhecida de todos:</p>
<pre class="lang-CSS">h1 {
color: #0000ff;
}</pre>
<p>Cada campo pode conter apenas um caractere. A função das letras é representar os números de dois dígitos, algo como o que acontece com o valete, dama e rei em cartas de baralhos. E é daí que vem o nome hexadecimal. São números de base 16. Ou seja, o A representa o 10, o B o 11 e assim por diante até a letra F. Por isto que a cor mais clara de todas, o branco, é representado por #FFFFFF.</p>
<p>Cada par é responsável por uma cor aditiva do esquema RGB. Os primeiros 2 números controlam o vermelho, os 2 seguintes o verde e os dois últimos o azul. Ou seja #ff0000 é o vermelho mais claro, #00ff00 é o verde mais claro e #0000ff é o azul mais claro.</p>
<p><img class="alignnone size-full wp-image-37583" alt="hex-valor" src="http://tableless.com.br/wp-content/uploads/2013/06/hex-valor.jpg" width="660" height="200" /></p>
<p>Como saber isto pode te ajudar? Simples, através deste mecanismo você pode fazer ajustes de cores no seu design diretamente do CSS de maneira prática e lógica. Você pode deixar uma matiz mais clara ou escura apenas alterando o valor dos pares numéricos.</p>
<p><img class="alignnone size-full wp-image-37582" alt="hex-luminosidade" src="http://tableless.com.br/wp-content/uploads/2013/06/hex-luminosidade.jpg" width="660" height="400" /></p>
<p>Para esquentar uma cor basta aumentar a quantidade de vermelhos (primeiro par) e diminuir a quantidade de azul (último par). Para esfriar basta fazer o processo inverso.</p>
<p><img class="alignnone size-full wp-image-37581" alt="hex-colorimetria" src="http://tableless.com.br/wp-content/uploads/2013/06/hex-colorimetria.jpg" width="660" height="400" /></p>
<h3>HSL</h3>
<p>A escala das cores tanto em RGB quanto em códigos HEX varia entre o eixo claro-escuro. Estes modelos deixam de lado outras maneiras mais intuitivas de classificação de cores como matiz e saturação. O HSL surgiu para preencher este vácuo. A idéia aqui é distribuir as cores não em um eixo vertical mas sim em um modelo de cilindro. As cores não são somadas ou subtraídas, mas sim distribuídas ao longo de um circulo cromático. Cada matiz representa um grau do cilindro entre 0 e 360.</p>
<p><img class="alignnone size-full wp-image-37584" alt="hsl" src="http://tableless.com.br/wp-content/uploads/2013/06/hsl.jpg" width="660" height="400" /></p>
<p>A sintaxe dele é da seguinte maneira:<br />
hsl (hue, saturation%, lightness%);</p>
<p>Sendo o primeiro valor a matiz, o segundo a saturação e o terceiro a quantidade de iluminação. O nosso título azul ficaria assim:</p>
<pre class="lang-CSS">h1 {
color: hsl(240, 100%, 50%);
}</pre>
<p>Da mesma forma que o RGB o HSL também pode ser utilizado em CSS e possui um canal alpha (HSLA). O mesmo título com 50% de opacidade:</p>
<pre class="lang-CSS">h1 {
color: hsl(240, 100%, 50%, 0.5);
}</pre>
<p>Embora possua suas vantagens, principalmente para quem esta acostumado com divisões mais artísticas de cores, o HSL ainda não se popularizou&#8230; Suponho que a razão é por que alguns softwares gráficos utilizados por designers, como o Photoshop, simplesmente não possuem um misturador de cores compatível com o formato. Todas as cores utilizadas no layout teriam que ser convertidas manualmente para HSL, o que poderia significar um gasto a mais em tempo. Existem alguns plugins que prometem facilitar o processo, mas as outras alternativas (RGBA e HEX) já funcionam muito bem. Até que os programas gráficos mais populares sejam compatíveis, o HSL não deve ganhar muito espaço.</p>
<h3>CMYK</h3>
<p>Já aconteceu de você abrir uma foto no computador e reparar que as cores estão bem estranhas? Pois é, o estagiário provavelmente fechou o arquivo em CMYK. Este formato foi pensado exclusivamente para pigmentos de impressão.</p>
<p>CMYK é uma sigla para Cyan, Magenta, Yellow e Black (Ciano, Magenta, Amarelo e Preto). Se você está se perguntando por que a sigla para preto é K existem duas explicações provavéis. A primeira é que o K representa Key já que o preto é uma cor-chave. A outrea é simplesmente para não confundirem com o B de Blue no RGB.</p>
<p>O CMYK é um sistema de cores subtrativo já que você parte do branco e vai retirando luminosidade até chegar na cor desejada. A impressão em CMYK é a partir de pontos coloridos chamados retículas. Como nosso foco aqui é a internet não vou entrar em muitos detalhes sobre este sistema. Mas vale a pena conhecer para saber como <b>não</b> salvar arquivos para a web.</p>
<h3>Qual sistema utilizar?</h3>
<p>Tudo depende das características do seu layout. Considerando esquemas de cores flat o hexadecimal serve muito bem. Alias, inspirada pelo visual minimalista do Windows 8 as <a title="Flat UI Colors" href="http://flatuicolors.com/">cores vivas e sólidas</a> são uma grande tendência em 2013. Mas se o seu layout faz uso de transparências, gradientes e sombras o RGBA vale bastante a pena.</p>
<p>Mas você não precisa prender-se a apenas uma opção. Você pode combinar, em um mesmo CSS, sistemas diferentes. Uma prática comum é utilizar HEX para cores sólidas e RGBA apenas para situações onde o canal alpha é importante. De qualquer maneira ter a mão uma tabela de equivalência pode ser útil. Sorte que existem conversores automáticos como o <a title="Color Hexa" href="http://www.colorhexa.com/">ColorHexa</a> para ajudar nesta tarefa. Basta digitar um código de cor (de qualquer tipo) ou um nome em inglês para descobrir os valores equivalentes em HEX, Binário, RGB, CMYK, HSL, HSV, CIE-Lab, Hunter-Lab, CIE-Luv, CIE-LCH, XYZ e xyY. Só isto já seria ótimo, mas a ferramenta ainda tem outras informações interessantes como sugestões de esquemas de cores e alguns snippets de CSS para você visualizar aquela cor aplicada a um texto, borda e background de uma div. Outra função bacana é a possibilidade de visualizar como uma pessoa com daltonismo enxergaria aquela cor.</p>
<h2>Acessibilidade</h2>
<p>Estima-se que 8% dos homens do mundo e 0.5% das mulheres sofre de algum tipo de dificuldade de percepção de cores como o daltonismo. Para garantir que estas pessoas poderão acessar o conteúdo da sua página é importante não depender da cor para indicar elementos importantes. Por exemplo, indicar campos de formulário com erros apenas com a cor vermelha não é distinção suficiente. Seria interessante, neste caso, complementar a informação com algum outro recurso gráfico como um ícone. Se você tem um amigo com daltonismo é interessante pedir para ele navegar no site e dizer se encontra algum problema. Como nem sempre temos a oportunidade de realizarmos este tipo de teste uma experiência que pode ajudar é retirar a saturação de todas as cores do layout em um programa gráfico. Se as informações importantes ainda estão claras e com bom contraste apenas em tons de cinza o seu layout é acessível. Você pode ainda utilizar alguma ferramenta online como o <a title="Color Filter" href="http://colorfilter.wickline.org/">Color Filter</a> para checar como pessoas com os tipos mais comuns de daltonismo enxergam sua página.</p>
<h2>Inspiração</h2>
<h3>Cores de Marcas</h3>
<p>Na hora de criar um layout um designer sempre tem a mão sua própria paleta de cores. Mas quando é preciso utilizar as cores de outras empresas a coisa complica! Qual é exatamente o tom de azul do Facebook? E do Twitter? E o código hexadecimal do verde Android? A missão do <a title="Brand Colors" href="http://brandcolors.net/">Brand Colors</a> é justamente servir como um catálogo de cores dos gigantes da internet. Além de ser útil para descobrir rapidamente as cores de marcas famosas, a ferramenta é um bom panorama de quais são os tons mais utilizados na rede.</p>
<p><a href="http://brandcolors.net/"><img class="alignnone size-full wp-image-37601" alt="brand-colors" src="http://tableless.com.br/wp-content/uploads/2013/06/brand-colors.jpg" width="660" height="400" /></a></p>
<h3>Cores da Web</h3>
<p>Que tal ir um passo além da cor predominante e descobrir a paleta de cores completa de uma marca? Através do <a title="Webcolourdata" href="http://webcolourdata.com/">Webcolour Data</a> você pode explorar as cores de qualquer site na internet. Basta inserir a URL e se inspirar no esquema de cores do seu site favorito. A ferramenta exibe resultados (e seus respectivos códigos HEX) em gráficos interessantes com base em porcentagem de uso, distribuição de tons, roda de cores e sites com paletas de cor semelhantes. O Webcolour Data também pode ser útil para realizar uma análise de design e verificar se as cores de um site estão consistentes com aquelas propostas na identidade visual.</p>
<p><a href="http://webcolourdata.com/"><img class="alignnone size-full wp-image-37600" alt="web-colour-data" src="http://tableless.com.br/wp-content/uploads/2013/06/web-colour-data.jpg" width="660" height="400" /></a></p>
<h3>Cores de Fotos</h3>
<p>O <a title="Color Thief" href="http://lokeshdhakar.com/projects/color-thief/">Color Thief</a>  tem uma proposta semelhante. Mas a idéia aqui é explorar paletas baseadas em fotos. Basta realizar um upload de imagens que a ferramenta captura o esquema de cores predominante.</p>
<p><a href="http://lokeshdhakar.com/projects/color-thief/"><img class="alignnone size-full wp-image-37596" alt="color-thief" src="http://tableless.com.br/wp-content/uploads/2013/06/color-thief.jpg" width="660" height="400" /></a></p>
<h3>Cores de Filmes</h3>
<p>O Tumblr <a title="Movies In Color" href="http://moviesincolor.com/">Movies In Color</a> pode ser uma grande fonte de inspiração para quem curte cinema. A idéia aqui é conhecer a paleta de cores utilizada na cinematografia de filmes como 2001 &#8211; Uma Odisséia no Espaço, O Fabuloso Destino de Amélie Poulain, Clube da Luta e Inception. Você pode navegar por imagens, títulos dos filmes ou nome do diretor de fotografia. Vale o clique!</p>
<p><a href="http://moviesincolor.com/"><img class="alignnone size-full wp-image-37599" alt="movis-in-color" src="http://tableless.com.br/wp-content/uploads/2013/06/movis-in-color.jpg" width="660" height="400" /></a></p>
<h3>Criando suas próprias paletas</h3>
<p>Criar esquemas de cores pode ser uma tarefa mais prática utilizando algum gerador como o <a title="Kuler" href="https://kuler.adobe.com/create/color-wheel/">Kuler </a>da Adobe ou o <a title="Color Scheme Designer" href="http://colorschemedesigner.com/">Color Scheme Designer</a>. Através destas ferramentas você pode criar esquemas monocromáticos, complementares, análogos, etc. Se você criou algo realmente legal e deseja compartilhar com o mundo ou simplesmente quer navegar por diversas paletas e se inspirar a rede social <a title="Colour Lovers" href="http://www.colourlovers.com/">Colour Lovers</a> pode ser um lugar interessante.</p>
<p><a href="http://kuler.adobe.com"><img class="alignnone size-full wp-image-37598" alt="kuler" src="http://tableless.com.br/wp-content/uploads/2013/06/kuler.jpg" width="660" height="400" /></a></p>
<h3>Games</h3>
<p>Quem disse que você não pode aprender se divertindo? Alguns webgames como o <a title="Color Method" href="http://color.method.ac/">Color Method</a> testam o seu conhecimento e percepção de cores com base em tom, saturação, cores complementares, análogas&#8230; Cuidado, pode ser viciante!</p>
<p><a href="http://color.method.ac/"><img class="alignnone size-full wp-image-37595" alt="color-method" src="http://tableless.com.br/wp-content/uploads/2013/06/color-method.jpg" width="660" height="400" /></a></p>
<h3>Saiba mais:</h3>
<p><a title="Breve introdução a RGBA" href="http://tableless.com.br/css3-breve-introducao-a-rgba">CSS3 Breve Introdução a RGBA</a><br />
<a title="RGB e HSL" href="http://tableless.com.br/rgb-e-hsl">RGB e HSL</a><br />
<a title="The Code Side of the Color" href="http://coding.smashingmagazine.com/2012/10/04/the-code-side-of-color/">The Code Side of the Color</a></p>
<p>O post <a href="http://tableless.com.br/sobre-cor-e-webdesign/">Sobre Cor e Webdesign</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/sobre-cor-e-webdesign/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento ágil utilizando Scrum</title>
		<link>http://tableless.com.br/desenvolvimento-agil-utilizando-scrum/</link>
		<comments>http://tableless.com.br/desenvolvimento-agil-utilizando-scrum/#comments</comments>
		<pubDate>Thu, 06 Jun 2013 13:00:52 +0000</pubDate>
		<dc:creator>Dani Guerrato</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[desenvolvimento agil]]></category>
		<category><![CDATA[gerenciamento de projeto]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37504</guid>
		<description><![CDATA[<p>Conheça a metodologia Scrum e aprenda a colocar as estratégias na prática para gerenciar qualquer tipo de projeto.</p><p>O post <a href="http://tableless.com.br/desenvolvimento-agil-utilizando-scrum/">Desenvolvimento ágil utilizando Scrum</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>No artigo de hoje vamos conhecer os eventos, papéis e artefatos do Scrum e como adapta-los para organizar o seu fluxo de trabalho do dia-a-dia.</p>
<h2>O que significa desenvolvimento ágil?</h2>
<p>Desenvolvimento ágil é um conjunto de estratégias para gerenciamento de projetos incremental e com ciclos de desenvolvimentos rápido. As vantagens disto são: melhoria continua de um projeto, frequente resolução de problemas e aumento da produtividade. O conceito surgiu em em oposição ao método cascata, no qual o desenvolvimento é linear.</p>
<h2>O que é Scrum?</h2>
<p>O Scrum é um framework para a resolução de problemas. Ou seja, um conjunto de diretrizes e ferramentas que podem auxilia-lo a gerir um projeto. A vantagem do Scrum em relação a outros métodos agéis é que ele é relativamente simples de implementar e extremamente útil em situações onde é difícil prever os problemas futuros. O método também é mais democrático já que as opiniões de todos são igualmente ouvidas e desta maneira fica muito mais fácil estimar prazos, definir funções e criar soluções.</p>
<p>A base do Scrum é o empirismo. Ou seja, a teoria de que só conhecemos algo de fato através da experiência. E isto é muito visível no nosso mundo de desenvolvimento web, por exemplo. Os clientes fatalmente vão pedir alterações no escopo inicial, bugs vão acontecer, imprevistos vão surgir e negar mudanças pode não ser o melhor caminho para entregar um produto final de qualidade para a sua equipe, os clientes e usuários. Mas é necessário um conjunto de regras para acomodar estas mudanças ou você pode cair em um ciclo de perda de tempo sistematico. O Scrum basicamente é um conjunto de estratégias que vão te ajudar a vencer este tipo de cenário, comum a todas as profissões. O conceito foi criado inicialmente para ser utillizado em empresas de fabricação de automóveis, mas por sua natureza interdisciplinar acabou sendo adaptado para diversas outras áreas. Existem pessoas utilizando metodologias inspiradas no Scrum para organizar empresas, planejar festas, e até para <a title="Family Inc" href="http://online.wsj.com/article/SB10001424127887323452204578288192043905634.html">lidar com problemas familiares</a>.</p>
<p>O termo Scrum surgiu do rugby. No jogo a palavra scrum descreve a formação ordenada dos jogadores em determinados momentos da partida. A inspiração aqui vem da união que equipes esportivas necessitam para vencer o jogo.</p>
<p><img class="alignnone size-full wp-image-37513" alt="scrum-rugby" src="http://tableless.com.br/wp-content/uploads/2013/05/scrum-rugby.jpg" width="660" height="400" /></p>
<h2>O que você precisa para colocar na prática</h2>
<p>Se você pesquisar por &#8220;Scrum&#8221; vai encontrar diversas cursos, livros e ferramentas online gratuitas e pagas. Mas é importante ressaltar que você não precisa necessariamente pagar por qualquer serviço. Você pode utilizar planilhas de dados, documentos de texto, quadros de notas ou até &#8211; pasmem! &#8211; folhas de papel. Obviamente não sou contra e não estou desvalorizando qualquer curso / certificado / ferramenta / etc. É claro que qualquer iniciativa de buscar mais conhecimento é válida e estes recursos podem agilizar ainda mais o seu trabalho. Mas você não precisa ser um Mestre Certificado XYZ ou qualquer título pomposo para utilizar esta metodologia. Você só precisa sentar com a sua equipe e organizar as tarefas. E é isto que vai gerar resultados positivos no seu empreendimento.</p>
<p>Com isto em mente vamos conhecer um pouco sobre como o Scrum funciona!</p>
<h2>O Time Scrum</h2>
<p>O Time Scrum é um conjunto multi-disciplinar de profissionais. Estes times devem ser autogeridos, ou seja, não existe hierarquia ou a figura de um líder. O time deve decidir, em conjunto a melhor forma de completar o seu trabalho ao invés de receber ordens externas de alguem que não faz parte da equipe e por isto não tem o conhecimento empirico para determinar prazos, por exemplo. A opinião de todos deve ser igualmente ouvida e respeitada. Mas existem alguns papéis fixos para auxiliar o bom andamento do trabalho.</p>
<h3>Product Owner</h3>
<p>A responsabilidade do Product Owner, ou Dono do Produto, é garantir a qualidade do trabalho. Este cara representa a voz do cliente, do dono da empresa, dos investidores, enfim, de todas as pessoas externas a equipe&#8230; Ele é responsável por traduzir as histórias dos usuários em uma lista de tarefas concretas, expressar claramente quais são as funcionalidades a serem desenvolvidas e definir a prioridade de cada uma de uma forma objetiva.</p>
<h3>Scrum Master</h3>
<p>O Scrum Master, ao contrário do que o título pode sugerir, não manda na equipe. Muito pelo contrário, o Scrum Master serve a equipe. A função dele é facilitar o bom andamentos dos jobs e garantir que todos tenham as ferramentas necessárias para cumprir suas tarefas. Tipicamente o Scrum Master é o cara que conhece melhor as regras do Scrum e portanto consegue organizar o jogo de maneira mais efetiva. Ele é uma mistura de professor, gerente e ombro amigo.</p>
<h3>Equipe de desenvolvimento</h3>
<p>Um pequeno grupo de pessoas (os tradicionalistas sugerem de 4 a 9) com cargos diferentes que vai trabalhar junto para cumprir as metas estabelecidas. É a galera que vai por a mão na massa e entregar um produto &#8220;pronto&#8221; ao final do ciclo de desenvolvimento. No caso de desenvolvimento web teríamos designers, programadores, front-enders, profissionais de UX, etc. Não importa o seu cargo todos tem o mesmo título: desenvolvedor.</p>
<h2>Eventos</h2>
<p>Quem nunca perdeu tempo em uma reunião longa e sem propósito? As vezes conversar demais (e fazer de menos) pode ser prejudicial para qualquer empresa. Pensando nisso todos os eventos Scrum são time-boxed, ou seja, tem uma duração fixa de tempo. Desta forma a comunicação é sempre mais clara, objetiva e ágil.</p>
<h3>Sprint</h3>
<p>Se você puder lembrar apenas de um termo do Scrum lembre-se deste: Sprint. As pessoas comuns dividem o tempo em dias, meses, horas&#8230; Os adeptos do Scrum dividem o tempo em ciclos de desenvolvimento chamados Sprints. Basicamente uma Sprint é período de tempo que você determinou para cumprir uma determinada tarefa, uma corrida para atingir uma meta. A idéia é ter algo concreto e funcional no final da Sprint. Estes ciclos devem ser períodos de tempo curtos e fixos. Você estipula anteriormente a duração das Sprints (recomenda-se de uma semana a 1 mês). Uma sprint deve começar imediatamente após o termino de outra.</p>
<p>Durante a Sprint não é possível alterar os objetivos estabelecidos para aquele ciclo ou os profissionais integrantes da equipe. Isto é super importante para garantir a produtividade. Mas se os objetivos tornarem-se obsoletos o Product Owner pode simplesmente cancelar a Sprint.</p>
<p>Sprints são divididas em etapas menores: reunião de planejamento, reuniões diárias, o trabalho de desenvolvimento em si, revisão e retrospectiva.</p>
<h3>Reunião de Planejamento</h3>
<p>Nesta reunião serão definidos todos os objetivos da Sprint. Nas regras oficiais, considerando um sprint de 1 mês, esta reunião tem a duração de 8 horas. Você pode adaptar isto proporcionalmente de acordo com o seu ciclo de Sprint. Se o seu Sprint é de 1 semana, por exemplo, esta reunião terá a duração máxima de 2 horas. Em cada metade da reunião duas perguntas devem ser respondidas:</p>
<p>- O que será entregue como resultado?<br />
- Como o trabalho necessário para entregar o produto será realizado?</p>
<h3>Reunião Diária</h3>
<p>A idéia da reunião diária, ou stand-up meeting, é juntar a equipe para um bate-papo de 15 minutos no máximo para revisar o andamento do projeto. Cada membro da equipe deve responder as seguintes perguntas:</p>
<p>- O que eu consegui completar ontem?<br />
- O que farei hoje?<br />
- Quais obstáculos estão impedindo o meu progresso?</p>
<p>A função do Scrum Master é moderar a dinâmica e tentar ao máximo solucionar os obstáculos apresentados para que a Sprint seja bem sucedida.</p>
<p>Ah, e se você está se perguntando o por que do nome é que a recomendação é que estas reuniões sejam realizadas com todos de pé (do inglês stand-up). Desta maneira a reunião não se prolonga por muito tempo e todos ficam mais focados. Na minha opinião pessoal isto é um pouco formal e austero demais. Se você está sentado, de pé ou de ponta-cabeça em marte não é tão relevante quanto responder as perguntas e o respeito ao limite de tempo&#8230; Muitas vezes pausar para tomar um café (sentado) pode tornar estas reuniões muito muito mais confortáveis, agradáveis e divertidas para todos.</p>
<h3>Revisão da Sprint</h3>
<p>A idéia aqui, obviamente, é revisar todos os itens desenvolvidos e demonstrar o produto final. A duração desta reunião considerando um sprint de um mês é 4 horas.</p>
<h3>Retrospectiva da Sprint</h3>
<p>A sprint acabou! Agora é hora de olhar para trás e repensar o que deu certo, o que deu errado e planejar o que pode ser melhorado no futuro.</p>
<h2>Artefatos</h2>
<p>Vamos ser sinceros: artefato é só um nome mais estiloso para documento ou ferramenta. Mas eles ajudam a facilitar a sua vida&#8230;</p>
<h3>Product Backlog</h3>
<p>O product backlog é uma compilação de tudo o que o seu cliente gostaria de realizar no projeto. Pense com uma grande wishlist com todos os recursos e funcionalidades que os usuários gostariam de ver presentes no trabalho final. Esta lista deve ser organizada pelo Product Owner de acordo com valor, risco, prioridade e necessidade. Por natureza o backlog é algo dinâmico e muda constantemente para incluir as novas solicitações dos clientes, usuários e do mercado em si. Desta forma os produtos são sempre aperfeiçoados em cada Sprint.</p>
<h3>Sprint Backlog</h3>
<p>Certo, agora que já sabemos tudo o que precisa ser realizado, a equipe define as tarefas a serem desenvolvidas na próxima Sprint. Esta listinha é conhecida como &#8211; surpresa! &#8211; Sprint Backlog. O Sprint Backlog é necessariamente um afunilamento mais detalhado do Product Backlog.</p>
<h3>Incremento</h3>
<p>É o produto que deve estar &#8220;pronto&#8221; após a Sprint. Pronto aqui é uma palavra relativa já que o incremento pode (e deve) ser aperfeiçoado em próximos Sprints. Cada equipe vai definir anteriormente o que pronto significa de acordo com o contexto. É importante, no entanto, que o incremento seja algo concreto e utilizável. Uma demo de software ou uma página que possa ser navegada pelo usuário, por exemplo.</p>
<h3>Burndown Chart</h3>
<p>É um gráfico que tem a função de monitorar o desenvolvimento da equipe. Funciona da seguinte maneira: todos os dias você anota quantas tarefas do seu Sprint Backlog foram efetivamente cumpridas. Desta maneira você pode saber com antecedência a velocidade que sua equipe trabalha. Este gráfico facilita a previsão de prazos futuros e até mesmo deduzir se a deadline vai estourar. O Burndown Chart é criado tendo como base dois eixos: um vertical representando a quantidade de trabalho que existe a ser feito e um horizontal para o tempo. A linha diagonal mostrará a velocidade da equipe ao completar as tarefas. Você pode utilizar alguma ferramenta para gerar automaticamente este gráfico ou até mesmo montar um utilizando lápis e papel. De qualquer forma a Burndown Chart é uma ótima maneira de medir o nível de produtividade do seu projeto. Lembrando sempre que não dá pra adivinhar o futuro com precisão. A base do Scrum ainda é a experiência empírica.</p>
<p><img class="alignnone size-full wp-image-37512" alt="burndown-chart" src="http://tableless.com.br/wp-content/uploads/2013/05/burndown-chart.jpg" width="660" height="400" /></p>
<h3>Kanban Boards</h3>
<p>Não é tradicionalmente parte do Scrum, mas é uma boa ferramenta de planejamento e funciona bem em conjunto com o framework. Basicamente é um quadro &#8211; ou um app, folha de papel, parede em branco, etc &#8211; com quatro lista de tarefas: &#8220;para fazer&#8221;, &#8220;em progresso&#8221;, &#8220;esperando verificação&#8221; e &#8220;feito&#8221;. Esta é uma ótima maneira de visualizar rapidamente o status de um projeto, independentemente do uso do Scrum.</p>
<h2>Um exemplo concreto</h2>
<p>Artefatos, mestres, papéis. A primeira vista tudo isto pode parecer mais um jogo de RPG do que um framework de gerenciamento de projetos&#8230; Mas na verdade tudo é mais simples do que parece. Vou exemplificar com uma situação real.</p>
<p><img class="alignnone size-full wp-image-37511" alt="scrum" src="http://tableless.com.br/wp-content/uploads/2013/05/scrum.jpg" width="660" height="400" /></p>
<p>A sua empresa tem um cliente X que quer lançar um novo site. Um gerente de projetos (Product Owner) faz um briefing e levanta todas as necessidades do site (Users Stories). Ele se reúne com os profissionais de design, front-end e back-end (Equipe de Desenvolvimento) para definir todas as tarefas necessárias para produzir o projeto (Reunião de planejamento) e formaliza isto em uma lista de tarefas (Product Backlog). Você (Scrum Master) fica encarregado de organizar as reuniões e garantir que todos entendam as tarefas. A equipe decide democraticamente que vai entregar a página inicial pronta (Objetivo) até o final da semana (Sprint). A equipe então divide o objetivo em tarefas menores (Sprint Backlog) como criar o layout, desenvolver o HTML e CSS, implantar um sistema de administração de conteúdo e testar tudo em diversos browsers. Cada um escolhe que tarefas gostaria de realizar, define um prazo de duração em horas para cada tarefa e diariamente vocês se reúnem por 15 minutos para acompanhar o andamento do projeto (Reunião Diária). Ao final da semana vocês apresentam o resultado (Revisão da Sprint) e refletem sobre dificuldades e quais melhorias podem ser feitas na próxima semana (Retrospectiva da Sprint). Mas mais importante de tudo vocês entregaram um produto parcial, porém funcional (Incremento) para o cliente. A partir do feedback de todos vocês decidem qual vai ser a tarefa a ser realizada na próxima semana. E assim o ciclo recomeça!</p>
<h2>Scrum But&#8230;</h2>
<p>Algumas pessoas mais tradicionalistas consideram praticamente uma heresia modificar alguns conceitos do Scrum, prática esta que foi apelidada pejorativamente de &#8220;Scrum But&#8221; (no sentido de &#8220;Eu uso o Scrum, mas XYZ&#8230;&#8221;). Eu sou da filosofia que você deve adaptar o que for útil para você, sua equipe e seu ambiente de trabalho. Sem dogmas.</p>
<h2>Scrum solo?</h2>
<p>O Scrum é uma ótima metodologia para equipes, mas se você é um desenvolvedor solitário ainda pode aproveitar boa parte dos conceitos de gerenciamento de projetos. Neste caso obviamente você cumpre todos os papéis ao mesmo tempo, mas, bem&#8230; se você é um freelancer já está acostumado com isto, certo? Reuniões Diárias também não acontecem da mesma maneira (a não ser que você curta falar sozinho), mas é interessante tirar 15 minutos do seu tempo para repensar o projeto, revisar as tarefas e verificar se você está de fato conseguindo concluir as metas no prazo estipulado e determinar os próximos caminhos. Os artefatos e processos continuam os mesmos. É necessário ter mais disciplina para organizar e documentar o projeto, afinal você é praticamente um exercito de um homem só. Mas trabalhar sozinho pode ter suas vantagens. No final do dia o lucro é só seu&#8230;</p>
<h2>É para você?</h2>
<p>A proposta destas ferramentas é agilizar os processos de desenvolvimento de projetos, mas devemos tomar cuidado para que estas regras não engessem o fluxo de trabalho. Frameworks como o Scrum podem facilitar o desenvolvimento ou burocratizar processos. Tudo depende da forma que você coloca estas regrinhas na prática. É necessário possuir flexibilidade e visão critica para decidir o que funciona melhor para a sua equipe. Estes fundamentos foram criados tendo como base desenvolvimento de softwares, algo que costuma demandar bem mais tempo do que webdesign, por exemplo. Considerando uma empresa que possua múltiplos projetos simultaneos a coisa pode ficar ainda mais complicada.</p>
<p>Pode ser constrangedor explicar para um cliente por que ele não pode ter uma mudança simples como a correção de um erro de ortografia imediatamente só por que este requisito não estava no Backlog da Sprint (como bem demonstrado <a title="Another perspective on SCRUM" href="http://youtu.be/Sygm9x9sBEo">nesta sátira</a>). Eu pessoalmente gosto de separar um tempinho para resolver pepinos que não estavam previstos no Sprint. Outras pessoas preferem o suporte psicológico de métodos fixos com etapas de tempo mais bem delineadas. De qualquer forma é fundamental determinar metas a longo e médio prazo com estimativas de tempo realísticas. E acompanhar de perto se estas metas estão sendo cumpridas e, caso a resposta seja não, verificar o que deve ser corrigido. Ainda assim é interessante conhecer frameworks agéis. Pequenas mudanças no fluxo de trabalho, como as propostas pelo Scrum, podem ter um impacto super positivo no seu dia-a-dia.</p>
<h4>Saiba mais</h4>
<p><a title="Scrum Guide" href="http://www.scrum.org/Scrum-Guides">Scrum Guide</a></p>
<p>O post <a href="http://tableless.com.br/desenvolvimento-agil-utilizando-scrum/">Desenvolvimento ágil utilizando Scrum</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/desenvolvimento-agil-utilizando-scrum/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>JavaScript: Objetos Literais vs. Funções Construtoras</title>
		<link>http://tableless.com.br/javascript-objetos-literais-vs-funcoes-construtoras/</link>
		<comments>http://tableless.com.br/javascript-objetos-literais-vs-funcoes-construtoras/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 12:30:44 +0000</pubDate>
		<dc:creator>Davi Ferreira</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[funcoes]]></category>
		<category><![CDATA[objetos]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37542</guid>
		<description><![CDATA[<p>Neste artigo apresento um pouco mais sobre as duas formas disponíveis para criação de objetos em JavaScript, Objetos Literais e Construtores, suas vantagens e desvantagens.</p><p>O post <a href="http://tableless.com.br/javascript-objetos-literais-vs-funcoes-construtoras/">JavaScript: Objetos Literais vs. Funções Construtoras</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Existem duas maneiras de criar objetos JavaScript e muita gente as confunde ou acha que são a mesma coisa. No entanto, Objetos Literais e Funções Construtoras são conceitos bem diferentes e entendê-los vai fazer com que você tire melhor proveito da linguagem.</p>
<h2>Objetos Literais</h2>
<p>Este é o tipo básico de objetos JavaScript. É o formato popularizado através do JSON (JavaScript Object Notation). O objeto é criado utilizando um par de chaves ({}) e suas propriedades e métodos são todos públicos. Este tipo de objeto também é chamado de objeto estático.</p>
<pre class="lang-javascript">var tableless = {
    init: function (artigos) {
        this.artigos = artigos;
    }
};
var tableless2 = tableless;</pre>
<p>Todo objeto literal é um objeto único e, mesmo que você armazene ele em diferentes variáveis todas apontarão para o mesmo objeto. No exemplo acima, caso você altere/adicione propriedades em qualquer uma das variáveis (tableless ou tableless2), as modificações valem para ambas.</p>
<p>Seu uso é recomendado em situações onde não podem existir mais de uma instância do objeto, como por exemplo, objetos de configurações do projeto ou coleções de objetos. Além disso, este tipo de notação é muito utilizado para definir o <em>namespace</em> do seu código JavaScript.</p>
<pre class="lang-javascript">// Objeto Literal definindo namespace
var tableless = tableless || {};
// Construtor para Artigo utilizando o namespace tableless
tableless.Artigo = function (titulo) {
    this.titulo = titulo;
};
var artigo = new tableless.Artigo('Mais um artigo sobre JavaScript');</pre>
<h2>Construtores</h2>
<p>Um construtor nada mais é do que uma função. Ela pode ser executada como uma função ou pode ser utilizada para instanciar um objeto utilizando a palavra reservada <em>new</em>.</p>
<p>(Caso você execute a função como uma chamada normal, vale realçar que o <strong>this</strong> dentro da função, nesse contexto, será o objeto global <strong>window</strong>.)</p>
<pre class="lang-javascript">function Categoria(nome) {
    this.nome = nome;
}

var categoria = new Categoria('Livros');</pre>
<p>Ao executar a função Categoria com <strong>new</strong> estamos fazendo quatro coisas:</p>
<ol>
<li>criamos um novo objeto JavaScript ({});</li>
<li>definimos o construtor do objeto <strong>categoria</strong> como <strong>Categoria</strong> &#8211; definindo também o tipo dele (retornado no instanceof);</li>
<li>definimos o protótipo do objeto <strong>categoria</strong> como <strong>Categoria.prototype</strong>;</li>
<li>executamos a função <strong>Categoria</strong> dentro do escopo do novo objeto, criando assim uma nova instância.</li>
</ol>
<p>Uma outra particularidade das funções construtoras é a possibilidade de criar métodos e propriedades privadas.</p>
<pre class="lang-javascript">function Categoria(nome) {
    var totalProdutos = 0,
        self = this,
        atualizaTotalProdutos() {
            self.totalProdutos += 1;
        };
    this.nome = nome;
    atualizaTotalProdutos();
}</pre>
<p>A variável <strong>totalProdutos</strong> e o método <strong>atualizaTotalProdutos</strong> só existem no escopo do objeto Categoria criado e podem ser utilizados apenas por métodos do objeto.</p>
<p>Aqui utilizamos um &#8220;truque&#8221; importante. Como cada função possui o seu próprio contexto e o <strong>this</strong> dentro do método <strong>atualizaTotalProdutos</strong> referencia a própria função e não o objeto Categoria precisamos armazenar o contexto do objeto dentro da variável <strong>self</strong>. (Outra forma seria utilizar os métodos <strong>call</strong> e <strong>aply</strong> para definir o <strong>this</strong> da função, mas isso é papo para outro artigo.)</p>
<p>Utilizando a cadeia de protótipos, podemos atualizar propriedades ou inserir novos métodos em objetos criados a partir de funções construtoras.</p>
<pre class="lang-javascript">Categoria.prototype.exibeProdutos = function () {
    var html = '',
        i;
    for (i = 0; i &lt; this.produtos.length; i++) {
        html += this.produtos[i].nome;
    }
    return html;
};</pre>
<p>O código acima adiciona o método <strong>exibeProdutos</strong> ao protótipo de Categoria e também a todos os objetos da cadeia, instanciados ou não. </p>
<p>As funções construtoras, portanto, são ideais para objetos que podem existir como múltiplas instâncias no mesmo contexto.</p>
<p>Uma observação: para melhor organizar seu código uma boa prática é utilizar a primeira letra maiúscula nos nomes de funções construtoras, diferenciando-as de funções comuns.</p>
<p>&#8211;</p>
<p>Entender conceitos de orientação a objetos em JavaScript pode levar um pouco de tempo e pode parecer bem estranho no início. Mas, uma vez entendido o funcionamento desses conceitos você descobrirá que é possível fazer diversas coisas legais e diferentes e que JavaScript é uma linguagem extremamente flexível.</p>
<p>O post <a href="http://tableless.com.br/javascript-objetos-literais-vs-funcoes-construtoras/">JavaScript: Objetos Literais vs. Funções Construtoras</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/javascript-objetos-literais-vs-funcoes-construtoras/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Bye bye Camino</title>
		<link>http://tableless.com.br/bye-bye-camino/</link>
		<comments>http://tableless.com.br/bye-bye-camino/#comments</comments>
		<pubDate>Sun, 02 Jun 2013 04:44:08 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[camino]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37551</guid>
		<description><![CDATA[<p>O Camino, browser open-source não será mais desenvolvido. Os desenvolvedores do browser para Mac resolveram cancelar oficialmente o desenvolvimento do Camino por causa da lentidão da sua produção. Muito por causa de browsers modernos como Chrome e Firefox que tem &#8230;</p><p>O post <a href="http://tableless.com.br/bye-bye-camino/">Bye bye Camino</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>O <a href="http://caminobrowser.org/">Camino</a>, browser open-source não será mais desenvolvido.</p>
<p>Os desenvolvedores do browser para Mac resolveram cancelar oficialmente o desenvolvimento do Camino por causa da lentidão da sua produção. Muito por causa de  browsers modernos como Chrome e Firefox que tem uma ritmo de atualização frequente. Hoje em dia um browser não pode ficar um segundo sem alguma novidade. Nem que essa novidade demore para ser lançada, mas serve pra mostrar aos seus usuários que o seu desenvolvimento está a todo vapor.</p>
<p>Embora eles tenham dado a notícia apenas agora, a última atualização que o browser recebeu foi em Março do ano passado. </p>
<p>Muito triste. Era um bom browser. Eu cheguei a usá-lo durante algum tempo e desisti exatamente pela falta de novidades, embora fosse um dos únicos browsers a ter a interface com o look and feel da Apple.</p>
<p><a href="http://www.theverge.com/2013/5/31/4384138/camino-mac-browser-ends-development-after-decade">Fonte</a></p>
<p>O post <a href="http://tableless.com.br/bye-bye-camino/">Bye bye Camino</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/bye-bye-camino/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dicas do Zeno &#8211; Maio</title>
		<link>http://tableless.com.br/dicas-do-zeno-maio/</link>
		<comments>http://tableless.com.br/dicas-do-zeno-maio/#comments</comments>
		<pubDate>Fri, 31 May 2013 17:41:34 +0000</pubDate>
		<dc:creator>Zeno Rocha</dc:creator>
				<category><![CDATA[Client-Side]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=37526</guid>
		<description><![CDATA[<p>O que rolou de melhor no mundo do front-end nesse mês de maio.</p><p>O post <a href="http://tableless.com.br/dicas-do-zeno-maio/">Dicas do Zeno &#8211; Maio</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Sempre tento me atualizar com o que está rolando no mundo do desenvolvimento front-end. Normalmente seleciono os melhores links para publicar na <a href="http://braziljs.org">BrazilJS Weekly</a> ou para discutir no podcast <a href="http://zofe.com.br">Zone of Front-Enders</a>.</p>
<p>Mas sempre senti que faltava um lugar para divulgar coisas que vão além só de notícias, como por exemplo quais as ferramentas mais me ajudaram nesse mês. Essa série reune o que de melhor eu encontrei no mês.</p>
<h2>Melhor projeto: <a href="http://purecss.io/">Pure</a></h2>
<p><a href="http://purecss.io/"><img class="aligncenter size-full wp-image-37530" alt="pure" src="http://tableless.com.br/wp-content/uploads/2013/05/pure.jpg" width="600" height="211" /></a></p>
<p>Essa foi a semana dos lançamentos de projetos open source das grandes empresas. A <strong>Adobe</strong> lançou um framework de CSS chamado <a href="http://topcoat.io/">Topcoat</a>. O <strong>Facebook</strong> lançou o <a href="http://facebook.github.io/react/">React</a>, sua biblioteca de JavaScript usada em serviços como Instagram.  E, por fim, a <strong>Yahoo!</strong> apresentou o <a href="http://purecss.io/">Pure</a>, um conjunto de módulos de CSS.</p>
<p>Isso não quer dizer que você deva abandonar seu amado <a href="http://twitter.github.io/bootstrap">Twitter Bootstrap</a>, cada um deles tem objetivo um pouquinho diferente. Mas o que mais me chamou atenção foi o Pure que, apesar de não ser um projeto maduro ainda, tem potencial para revolucionar a UI dos produtos da Yahoo!.</p>
<h2>Melhor palestra: <a href="http://afabbro.github.io/jsconf2013/">Angelina Fabbro<br />
</a></h2>
<p><a href="http://afabbro.github.io/jsconf2013/"><img class="aligncenter size-full wp-image-37529" alt="Screen-Shot-2013-05-31-at-11.46.21-AM" src="http://tableless.com.br/wp-content/uploads/2013/05/Screen-Shot-2013-05-31-at-11.46.21-AM.jpg" width="600" height="259" /></a></p>
<p>Além do <a href="https://developers.google.com/events/io/">Google I/O</a> que mostrou coisas absurdas, outra conferência importante para o mundo do JavaScript está acontecendo nesse momento, é a <a href="http://2013.jsconf.us/">JSConf US</a> na Flórida.</p>
<p>Inúmeros desenvolvedores palestraram por lá, mas eu gostaria de destacar a palestra da <a href="http://twitter.com/angelinamagnum">Angelina Fabbro</a>, que inclusive virá ao Brasil para <a href="http://2013.jsconfbr.org/">JSConf BR</a>. O tema da palestra foi como ir de iniciante à expert.</p>
<h2>Melhor artigo: <a title="Caio Gondim" href="http://loopinfinito.com.br/2013/05/28/css-position-sticky/" rel="author">Caio Gondim</a></h2>
<p><a href="http://loopinfinito.com.br/2013/05/28/css-position-sticky/"><img class="aligncenter size-full wp-image-37528" alt="Untitled-1" src="http://tableless.com.br/wp-content/uploads/2013/05/Untitled-1.jpg" width="600" height="282" /></a></p>
<p>Um das novas propriedades do CSS que eu mais estou animado é a <code>position: sticky</code>. Ela aplica um efeito de <code>position: fixed</code> quando você atinge determina posição Y no scroll da página, coisa que antes você só conseguia simular com um pouquinho de JavaScript.</p>
<p>O <a href="http://loopinfinito.com.br/">Loop Infinito</a> foi lá e explicou em <em>pt-br</em> como funciona.</p>
<h2>E você?</h2>
<p>Quais foram os melhores projetos, palestras, artigos desse mês?</p>
<p>O post <a href="http://tableless.com.br/dicas-do-zeno-maio/">Dicas do Zeno &#8211; Maio</a> foi originalmente publicado em <a href="http://tableless.com.br">Tableless</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/dicas-do-zeno-maio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The constant WPCACHEHOME must be set in the file wp-config.php and point at the WP Super Cache plugin directory. -->