<?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 &#187; Client-Side</title>
	<atom:link href="http://tableless.com.br/categoria/client-side/feed/" rel="self" type="application/rss+xml" />
	<link>http://tableless.com.br</link>
	<description>Boas práticas de Desenvolvimento com Padrões Web</description>
	<lastBuildDate>Wed, 08 Feb 2012 13:23:50 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Agora é a vez dos desenvolvedores</title>
		<link>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/</link>
		<comments>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 13:53:11 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5455</guid>
		<description><![CDATA[A revolução pode começar sem você.]]></description>
			<content:encoded><![CDATA[<p>O desenvolvimento web depende de três personagens principais: <strong>W3C</strong>, que regulamenta, cria e sanciona padrões para a web. Os <strong>browsers</strong>, que importam essas regras e padrões de forma que a web seja mais homogênea. E os <strong>desenvolvedores</strong>, que possibilitam a criação e publicação de conteúdo em vídeos, texto, imagem etc.</p>
<p>Cada um destes personagens tem papéis importantes para que a evolução da web possa se tornar forte, traçando novos caminhos, cobrindo as necessidades atuais dos usuários e prevendo necessidades e soluções futuras. Há um ciclo para que estes personagens possam cumprir com seus objetivos.</p>
<p>O W3C cuida dos padrões. Ele tem ideias, ele prevê problemas e tenta solucioná-los. O W3C não aplica, ele apenas planeja. É um trabalho difícil, por que é necessário uma visão muito apurada do cenário da web para saber quais caminhos ela deverá tomar. Uma decisão errada, pode acarretar problemas que levarão anos para serem solucionados por completo. Vide o desenvolvimento com tabelas. Por isso esse trabalho de planejamento deve ser meticuloso. Devo confessar que em muitos casos o W3C não supera as expectativas e faz com que iniciativas paralelas surjam e direcionem a Web para um caminha mais correto. Foi o que aconteceu com o HTML5.</p>
<p>Os browsers, por sua vez, precisam entender e adotar as idéias do W3C, absorvendo as soluções e criando suporte nos seus softwares. Esse trabalho também tem seus perigos. Os browsers precisam pesquisar quais das necessidades dos desenvolvedores é mais importante e assim implementá-la para que a utilização de projetos seja executada. Obviamente que alguns decidem suportar aquelas soluções que darão mais pontos estratégicos contra o concorrente.</p>
<p>Finalizando o ciclo, os desenvolvedores aplicam tudo o W3C define, mas apenas aquilo que os browsers “querem” ou podem suportar. E isso, claro, faz com que o desenvolvedor se depare com problemas na ponta produção. Vide o IE6/7/8 e nossos problemas de cada dia.</p>
<p>Durante muito tempo, esse ciclo não era afinado. Havia uma certa confusão e um jogo de interesses próprios envolvendo principalmente os browsers. O W3C estava apenas pensando em como resolver problemas que talvez existiriam daqui longos anos. Os browsers estavam apenas interessados em criar uma massa de usuários suficiente para ser o primeiro no ranking. Os desenvolvedores, por sua vez, queriam ganhar seu dinheirinho, fazer o trabalho, entregar pro cliente e acabar com o problema.<br />
Ninguém deu atenção quando começamos a desenvolver com tabelas, fazendo com que os sites ficassem mais pesados, aumentando o tempo de desenvolvimento e o custo do projeto. </p>
<p>Este ciclo defeituoso foi praticado durante muito tempo. Por incrível que pareça, foram os Desenvolvedores que começaram a fazer o ciclo funcionar novamente como deveria. Eles acordaram os fabricantes de browsers e também o W3C. </p>
<p>O W3C passou a pensar mais em problemas presentes. Solucionou problemas iminentes e que entregavam valor para os projetos. </p>
<p>Os browsers suportaram o mais rápido possível essas mudanças, atualizando seus engines, e fortalecendo as bases para novas soluções e flexibilizações posteriores.</p>
<p>Já os desenvolvedores estagnaram. Desculpe-me, serei um pouco revoltado daqui para frente. Os desenvolvedores dormiram. Quando o W3C e os browsers apresentaram soluções para problemas como transparência, bordas arredondadas, backgrounds inteligentes, utilização de fonts remotas e etc, os desenvolvedores resolveram que não era a hora dessas soluções por causa da retrocompatibilidade com browsers antigos, como o IE6. Na verdade estou sendo meio injusto aqui. Não foram todos os desenvolvedores que criaram caso com a retrocompatibilidade, foram somente os idiotas.</p>
<p>Nós reclamávamos que precisávamos de recursos mais inteligentes para trabalhar. Que precisávamos de idéias realmente inovadoras, que transformassem os projetos e facilitassem o desenvolvimento. Protestamos, escrevemos manifestos, postamos em nossos blogs revoltados com a falta de visão do W3C e com a pobreza do suporte dos browsers. E quando conseguimos o que queríamos, demos para trás. Amarelamos. Pedimos arrego.</p>
<p>Infelizmente, via-se muito disso aqui no Brasil do que no resto do mundo. Ouvi muitas desculpas como: &#8211; “Mas meu cliente usa IE6.” ou “Mas isso não funciona em IE6.” Você é desenvolvedor. Você trata com seu cliente todos os dias. Você tem o poder de <a href="http://tableless.com.br/convencimento-e-educacao-liberdade/" title="Convencimento e educação = liberdade">educar e convencer</a>. E se você acha que não tem poder nenhum, por que ainda trabalha com web?</p>
<p>Talvez isso seja trauma do passado. Talvez não. O fato é que não podemos mais nivelar por baixo. Isso é atrasar uma “evolução” inteira.</p>
<p>Tenho incansavelmente falado sobre <a href="http://tableless.com.br/bem-vindo-a-xangrila-parte-1/" title="Bem vindo a Xangri-lá – Parte 1">Graceful Degradation, Enhanced Progressive</a>, <a href="http://tableless.com.br/categoria/client-side/html-css/html5-client-side/">HTML 5</a>, as <a href="http://tableless.com.br/categoria/client-side/html-css/css3/">maravilhas do CSS 3</a> e etc, pois esse é o assunto que rola lá fora. Há desenvolvedores e empresas, que acham que devemos ter uma autorização especial dos gringos para utilizarmos novas tecnologias e principalmente <a href="http://tableless.com.br/browsers-antigos-guerra-contra-o-terror/">para deixar os browsers antigos no passado</a>.</p>
<p>Esse assunto me faz pensar em outra pergunta: Estamos (você está?) preparados para o ritmo alucinante do W3C e dos browsers?<br />
Até a Microsoft está cumprindo com a palavra de ter um browser atualizado. Eles já anunciaram o novíssimo Internet Explorer 10, com uma série de atualizações que promete trazer o IE para o patamar de browsers atuais. </p>
<p>O mercado de client-side se transformará rapidamente nos próximos anos. Muitas mudanças no HTML e no CSS serão publicadas com o intuito de tornar a web mais homogênea, flexível, portável. O HTML 5 não é só uma coleção de novas tags e APIs. O CSS 3 não ganhou só bordas arredondadas. E nem só de iPhone vive o homem. Existem milhares de Nokias, Blackberrys, Windows Phones e Androids por aí.</p>
<p>Os desenvolvedores precisam acordar.</p>
<p><small>Artigo originalmente publicado em Nov/2009 na revista TI Digital.</small></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/css1k/" title="CSS1K">CSS1K</a></li><li><a href="http://tableless.com.br/um-pensamento-sobre-design-para-web/" title="Um pensamento sobre design para web">Um pensamento sobre design para web</a></li><li><a href="http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/" title="Introdução das premissas dos controles de versão">Introdução das premissas dos controles de versão</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>ePub: Aprenda a criar um livro digital</title>
		<link>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/</link>
		<comments>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 12:13:28 +0000</pubDate>
		<dc:creator>Dani Guerrato</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[ePub]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5346</guid>
		<description><![CDATA[Conheça as vantagens do formato, aprenda a criar um livro do zero, descubra as melhores práticas e porquê você deve correr dos geradores automáticos.
]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Com a crescente popularização de tablets e leitores digitais não há dúvida de que os livros eletrônicos vieram para ficar. O formato ePub vem cada vez mais se consolidando como o padrão definitivo para eBooks. As editoras procuram profissionais especializados, mas, aqui no Brasil não existem muitos que de fato possuem o know-how necessário para desenvolver livros no padrão. Na verdade o que acontece é que as editoras estão alocando o tipo de profissional errado para a função. Um diagramador padrão, acostumado com editoração impressa via softwares visuais como Indesign vai ter problemas ao tentar lidar com linhas de código. Já um desenvolvedor front-end vai se sentir em casa já que criar e editar um livro digital é basicamente lidar com XHTML e folhas de estilo em CSS. Neste artigo vou comentar sobre as vantagens (e desvantagens) deste padrão e como com algumas poucas dicas você poderá editar um livro digital.</p>
<h2>Por que não usar PDF?</h2>
<p>O PDF tem muitas vantagens. Até a sua tia que te liga toda semana para perguntar de novo como faz para ler o resultado da Megasena na internet sabe como abrir um PDF. E do ponto de vista do design é ótimo. Hey, você tem muito mais controle do layout! Você pode colocar imagens e textos como quiser sem se preocupar com nada. Exceto… Você já tentou ler um PDF em um smartphone? É simplesmente agonizante. É necessário dar zoom in e out a cada frase diferente. Ou tentar ler tudo em um tamanho de letra absurdamente pequeno…</p>
<p>Isto acontece por que o PDF é baseado no suporte físico de uma folha, o que simplesmente não faz sentido no mundo digital. Vou explicar: um artista que pretende pintar uma nova obra de arte precisa saber o tamanho da tela. Da mesma maneira, ao editar um livro, ou qualquer outro tipo de documento para a impressão, é necessário saber o tamanho da folha para aí então fazermos toda a diagramação. O problema é que em um ambiente digital não existe uma folha. Existe um viewport (ou seja, área de visualização) que pode ser, bem, do tamanho que o usuário quiser! Se ele for ler o seu livro no browser pode aumentar e diminuir o tamanho da janela até a resolução máxima do monitor. Ou pode optar por ler em um tablet, smartphone, eReader… Enfim, a questão é que não temos como determinar a medida de altura e largura da mesma maneira que fazíamos com o papel. E o PDF, como foi pensado para ser impresso, precisa desta medida fixa.</p>
<h2>Sobre o ePub</h2>
<p>ePub é abreviação de Eletronic Publication, ou seja, Publicação Eletrônica. É um formato de livro aberto e gratuito criado pelo <a title="IDPF" href="http://idpf.org/">IDPF</a>, um fórum internacional de publicação digital. Os livros deste formato são fluidos, o que permite que a experiência de leitura seja legal em qualquer tamanho da tela, sistema operacional ou dispositivo que você escolher. Desde que você tenha um app para isto, é claro. Mas isto não é muita preocupação. Existem leitores gratuitos para quase todos os aparelhos e sistemas operacionais (se você não conhece nenhum dê uma olhadinha no final do texto). Outro aspecto bacana do ePub é o controle que ele dá ao usuário. É possível realizar buscas, navegar através de links, aumentar e diminuir o tamanho da letra, trocar as fontes, a paleta de cores, etc. Sim, isto significa que se o cara quiser ler o livro inteiro em Comics Sans ele pode! Mas se isto deixar o usuário feliz quem somos nós para dizer não?</p>
<h2>Como editar</h2>
<p>Bem, agora que você já sabe como ler e por que usar, vamos descobrir como é um livro digital por dentro! Criei um livro de exemplo para utilizar neste tutorial. <a href="http://tableless.com.br/wp-content/uploads/2012/01/meulivro.epub_.zip">Você pode baixa-lo aqui</a>. Mas qualquer outro livro que você tiver neste formato vai servir para o nosso experimento.</p>
<p>A extensão ePub é um formato de livros compactado. Faça um teste: renomeie o arquivo deste tutorial de meulivro.epub para meulivro.zip ou meulivro.rar que você poderá ver o conteúdo do pacote. No entanto, uma coisa importante de se ter em mente é que não são todos os softwares editores que estão preparados para salvar neste formato. Até dá para ler os arquivos XHTML separados, mas você teria que abrir manualmente, editar e recompactar a cada mudança de volta para ePub o que não seria nada prático. Felizmente existem alguns softwares como <a title="Sigil" href="http://code.google.com/p/sigil/">Sigil</a> que são específicos para a edição de código de ePubs. Eles não tem um visual muito bonito mas cumprem com a função direitinho. Bem, vamos explorar os arquivos…</p>
<p><strong>Obs.</strong> Existem outras especificações opcionais, mas vou me manter dentro do fundamental.<br />
<strong>Obs.2</strong> Os nomes dos arquivos são case sensitive.</p>
<h2>A Estrutura</h2>
<p>Vamos voltar ao nosso ePub! Ao descompactar a pasta você vai ter o seguinte:</p>
<p>arquivo mimetype<br />
pasta META-INF</p>
<ul>
<li>container.xml</li>
</ul>
<p>pasta OEBPS</p>
<ul>
<li>content.opf</li>
<li>toc.ncx</li>
<li>style.css</li>
<li>titulo.html</li>
<li>capitulo1.html</li>
<li>capitulo2.html</li>
</ul>
<h2>Para que serve tudo isso e como eu crio sozinho?</h2>
<h4>Mimetype</h4>
<p>A função do mimetype é informar ao sistema operacional qual é o tipo do arquivo. O mimetype é um simples arquivo de texto ASCII.  Para criar um mimetype basta abrir qualquer editor (ou até mesmo o bloco de notas) e escrever esta linha de código:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">application/epub+zip</div></td></tr></tbody></table></div>
<p>Salve como mimetype (sem nenhuma extensão) e pronto. Está feito! O mimetype é igual para qualquer ePub. Então copiar de um outro ePub da certo também.</p>
<h4>Container.xml</h4>
<p>Deve ficar dentro da pasta  META-INF. A função deste arquivo é agregar todos os outros. Bora criar um!</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;container</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;urn:oasis:names:tc:opendocument:xmlns:container&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rootfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rootfile</span> <span style="color: #000066;">full-path</span>=<span style="color: #ff0000;">&quot;OEBPS/content.opf&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/oebps-package+xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rootfiles<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/container<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Content.opf</h4>
<p>Descreve o conteúdo de todos os arquivos. Apesar da extensão esquisita é só criar um xml e depois salvar como .opf É composto das seguintes partes: metadata, manifest e spine. O esqueleto dele é assim:</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;package</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.idpf.org/2007/opf&quot;</span> <span style="color: #000066;">unique-identifier</span>=<span style="color: #ff0000;">&quot;EPB-UUID&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #808080; font-style: italic;">&lt;!-- insira os parâmetros aqui --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/package<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Metadata</h4>
<p>Não tem muito segredo aqui. São as informações do seu livro.</p>
<p><strong>Itens obrigatórios:</strong></p>
<ul>
<li><strong>title </strong>- O título do seu livro.</li>
<li><strong>language </strong>- A Lingua utilizada. Como o livro está em português eu escolhi pt-br.</li>
<li><strong>identifier </strong>- Um código único para o seu livro. Pode ser o ISBN, por exemplo.</li>
</ul>
<p><strong>Itens opcionais:</strong></p>
<ul>
<li><strong>creator </strong> &#8211; O criador. No caso, você.</li>
<li><strong>contributor</strong> &#8211; Contribuidor</li>
<li><strong>publisher </strong>- Editora</li>
<li><strong>subject </strong>- Assunto</li>
<li><strong>description</strong> &#8211; Descrição do livro</li>
<li><strong>date </strong>- Data</li>
<li><strong>type </strong>- Tipo</li>
<li><strong>format</strong> &#8211; Formato</li>
<li><strong>source</strong> &#8211; Fonte</li>
<li><strong>relation</strong> &#8211; Relação</li>
<li><strong>coverage</strong> &#8211; Cobertura</li>
<li><strong>rights</strong> &#8211; O tipo de licença. Creative Commons, por exemplo.</li>
</ul>
<p>Bem, vamos preencher nossas metadatas. Eu inseri o seguinte entre as tags package:</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;metadata</span> <span style="color: #000066;">xmlns:opf</span>=<span style="color: #ff0000;">&quot;http://www.idpf.org/2007/opf&quot;</span></span><br />
<span style="color: #009900;"><span style="color: #000066;">xmlns:dc</span>=<span style="color: #ff0000;">&quot;http://purl.org/dc/elements/1.1/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Saga do primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:creator</span> <span style="color: #000066;">opf:role</span>=<span style="color: #ff0000;">&quot;aut&quot;</span> <span style="color: #000066;">opf:file-as</span>=<span style="color: #ff0000;">&quot;Dani&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>Dani<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:creator<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:date</span> <span style="color: #000066;">opf:event</span>=<span style="color: #ff0000;">&quot;original-publication&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>2012<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:publisher<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tableless<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:publisher<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:date</span> <span style="color: #000066;">opf:event</span>=<span style="color: #ff0000;">&quot;epub-publication&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>2012-01-30<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:date<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Estudos<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:subject<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tableless<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:source<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:rights<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Pode copiar galera!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:rights<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:identifier</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;EPB-UUID&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>minhaid<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:identifier<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dc:language<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>pt-br<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dc:language<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/metadata<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Manifest</h4>
<p>É um manifesto mesmo. Deve conter (em qualquer ordem) a lista de todos os arquivos da sua publicação. Exceto mimetype, container.xml e content.opf É necessário especificar uma ID única para cada arquivo. Você pode nserir estas informações antes ou depois da metadata. O importante é que esteja também dentro da tag package. No caso do nosso livro-tutorial ficou assim:</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;manifest<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #808080; font-style: italic;">&lt;!-- Documentos --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;titulo.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;capitulo1.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;capitulo2.html&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- CSS Style Sheets --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;main-css&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;style.css&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- NCX --&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ncx&quot;</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;toc.ncx&quot;</span> <span style="color: #000066;">media-type</span>=<span style="color: #ff0000;">&quot;application/x-dtbncx+xml&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/manifest<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Spine</h4>
<p>A espinha do livro, ou seja, a ordem de leitura. Aqui você deve colocar apenas os arquivos tipo HTML na ordem que você deseja que apareça no livro, chamando cada um pelo ID que você definiu no manifesto. Tome cuidado para não duplicar nenhum arquivo ou ID. Como você já adivinhou, deve ser inserido entre as tags package também.</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;spine</span> <span style="color: #000066;">toc</span>=<span style="color: #ff0000;">&quot;ncx&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;itemref</span> <span style="color: #000066;">idref</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">linear</span>=<span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/spine<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>toc.ncx</h4>
<p>TOC é uma sigla para Table of Contents, ou seja, o indice do livro. Também é um arquivo xml salvo com a terminação .ncx Possui a seguinte estrutura:</p>
<p><strong>#head</strong></p>
<ul>
<li>uid — o identificador único em content.opf</li>
<li>depth — níveis do sumário &gt;= 1</li>
<li>totalPageCount — to 0</li>
<li>maxPageNumber — to 0</li>
</ul>
<p><strong>#navMap</strong></p>
<p>O sumário em si</p>
<p><strong>#navPoint</strong></p>
<ul>
<li>id — único do arquivo</li>
<li>playOrder —ordem de navegação (iniciando em 1)</li>
</ul>
<p>O nosso índice ficou assim então:</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #00bbdd;">&lt;!DOCTYPE ncx</span><br />
<span style="color: #00bbdd;">PUBLIC &quot;-//NISO//DTD ncx 2005-1//EN&quot; &quot;http://www.daisy.org/z3986/2005/ncx-2005-1.dtd&quot;&gt;</span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;ncx</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.daisy.org/z3986/2005/ncx/&quot;</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2005-1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:uid&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;idtest&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:depth&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:totalPageCount&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dtb:maxPageNumber&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;0&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;docTitle<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Saga do primeiro ePub<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/docTitle<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;docAuthor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Dani<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/docAuthor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navMap<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;titulo&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;1&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Titulo<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;titulo.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo1&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capitulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;capitulo1.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navPoint</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;capitulo2&quot;</span> <span style="color: #000066;">playOrder</span>=<span style="color: #ff0000;">&quot;2&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capitulo 2<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/text<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navLabel<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;content</span> <span style="color: #000066;">src</span>=<span style="color: #ff0000;">&quot;capitulo2.html&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navPoint<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/navMap<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/ncx<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>&nbsp;</p>
<h4>Os capítulos</h4>
<p>É aqui que entra o livro em si. Cada capitulo deve ficar em um HTML separado. Estes arquivos não são nada diferentes de HTMLs comuns:</p>
<p>&nbsp;</p>
<div class="codecolorer-container xml mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;html</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span> <span style="color: #000066;">xml:lang</span>=<span style="color: #ff0000;">&quot;pt&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;meta</span> <span style="color: #000066;">http-equiv</span>=<span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span>=<span style="color: #ff0000;">&quot;application/xhtml+xml; charset=utf-8&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capítulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/title<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;link</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;style.css&quot;</span> <span style="color: #000066;">rel</span>=<span style="color: #ff0000;">&quot;stylesheet&quot;</span> <span style="color: #000066;">type</span>=<span style="color: #ff0000;">&quot;text/css&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/head<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Capítulo 1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/h3<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Hello World! Este é o primeiro capítulo do nosso livro. Yey!<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/div<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/body<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/html<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<h4>Outros tipos de arquivos:</h4>
<p><strong>CSS</strong> &#8211; Uma folha de estilos normal.<br />
<strong>Pasta images</strong> &#8211; Aqui devem ficar as imagens do livro. Formatos permitidos: jpeg, png, gif e svg+xml<br />
<strong>Pasta fonts</strong> &#8211; Utilize esta pasta se você quiser embedar algum arquivo de fonte no seu documento. Lembre-se de utilizar sempre o formato Open Type pois alguns aplicativos de leitura não suportam True Type.</p>
<h4>E agora basta compactar!</h4>
<p>Selecione todos os arquivos e crie um arquivo compactado (pode ser .zip ou .rar). Depois é só renomear para .epub e ler no seu dispositivo favorito. Pronto! Você tem um livro digital! <img src='http://tableless.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Dicas importantes para editar um ePub</h2>
<h4>Semântica é sua amiga</h4>
<p>Bem, se você é leitor do Tableless provavelmente não preciso dizer isso, mas vou dizer mesmo assim! É muito importante utilizar uma estrutura semântica aqui. Tags h1 a h6 para títulos, p para parágrafos… O que você já está mais do que cansado de saber a esta altura. Evite usar br para quebrar a linhas por que sem ter o tamanho de um container é difícil determinar quando de fato vai ser necessário quebrar a linha.</p>
<h4>Evite seletores complexos</h4>
<p>Leitores digitais não são tão sofisticados quanto browsers. Mantenha o seu CSS o mais simples possível.</p>
<h4>Use tamanhos relativos</h4>
<p>Como as &#8220;páginas&#8221; do seu livro vão aumentar e diminuir de acordo com o tamanho da tela do dispositivo não utilize pixels como medida para nada. Lembre-se: EM para texto e margens, porcentagens para figura. Isto vai garantir que o seu livro continue proporcional e escalável. E o seu leitor feliz!</p>
<h4>Tamanho é Documento</h4>
<p>Não use apenas um documento XHTML para o livro todo. A recomendação é que os capítulos tenham menos de 300k cada. Mais do que isto pode deixar alguns leitores, como o iBooks por exemplo, muito lentos! A razão é que estes apps consideram cada capítulo como um bloco de texto diferente. Se você colocar tudo em um documento só o aplicativo vai carregar tudo de uma vez a cada acesso.</p>
<p>Outra dica é tentar usar sempre imagens otimizadas para a web e com uma resolução não maior do que 1200 x 1600px.</p>
<h4>Não pire muito na escolha de fontes</h4>
<p>Evite usar fontes fora do padrão websafe. Você pode embedar fontes Open Type utilizando a propriedade @font-face mas isto não significa que voce deve. Para começar não são todos os leitores que aceitam isto e no final o seu arquivo pode ficar pesado demais e travar. E muitas vezes pode ser um trabalho extra inútil já que o seu usuário pode muito facilmente trocar de fonte. Se mesmo assim você quiser usar não escolha mais do que dois ou três tipos.</p>
<h2>Edição visual</h2>
<p>Sim. Existem alguns softwares que podem gerar o livro para você. O Adobe InDesign faz isto, o Pages do Mac… Mas falando sério: não vale a pena. O código vai ficar sujo e no final você vai ter que corrigir vários bugs. É como se você estivesse utilizando um editor &#8220;What you see is what you get&#8221; para fazer um site. Acho que vocês entendem o drama. Mas… se você for realmente caminhar por esta estrada escura tenha algumas coisas em mente:</p>
<ul>
<li>Se você está acostumado com editoração nestes programas é preciso mudar alguns paradigmas. Esqueça páginas mestras, hifenização, numeração, pé de página… você não precisa se preocupar mais com estas coisas em um formato digital.</li>
<li>Crie estilos específicos para o que é título, parágrafo, etc e não esqueça de importa-los na hora de salvar o arquivo.</li>
<li>Cuidado ao gerar o TOC (table of contents, ou seja, o índice). Se você colocar mais de dois subniveis pode dar problemas de compatibilidade com alguns programas e o seu livro simplesmente não abrir.</li>
<li>Lembre-se que todas as imagens precisam estar ancoradas para que fluam juntamente com o texto.</li>
<li>Determine quebras de capítulos. No caso do InDesign, salve cada parte do livro em um arquivo diferente. Depois junte todos os arquivos em um formato &#8220;book&#8221;.</li>
</ul>
<h2>E quanto ao formato iBook da Apple?</h2>
<p>A Apple lançou recentemente um software gratuito chamado iBooks Autor para a criação visual de livros digitais. Os livros no formato iBook são bem interativos, permitindo a implementação de elementos multimidia como videos (coisa que ainda está engatinhando no formato ePub). Com um &#8220;pequeno&#8221; porém. Sem muito alarde nos termos de serviço a Apple colocou uma clausula de exclusividade para livros comerciais. Ou seja, se você utilizar o software e vender o seu livro através da iBook Store não poderá vender em mais nenhum lugar. Sem contar que o programa é exclusivo para Mac.</p>
<h2>Fique longe dos conversores automáticos!</h2>
<p>Existem alguns softwares ainda que prometem converter de PDF para ePub. Fique longe deles! Sério. Eles são ainda piores que os editores visuais. Um software não consegue interpretar um livro da mesma maneira que um ser humano a menos que você diga a ele o que fazer. Se você não determinar &#8220;ei, isto é um título&#8221; ele não tem como fazer este tipo de decisão por você.</p>
<p>Os PDFs estão presos a um tamanho fixo, lembra? O que significa que as palavras precisam ser hifenizadas. Se você converter automaticamente (além do seu código ser a coisa menos semântica desde os sites feitos em tabelas) os hífens vão continuar lá, criando divisões no me-io das pala-vras on-de não pre-cisava! Pense nos números das páginas… se o texto flui isso significa que um mesmo livro pode (e vai) ter uma numeração diferente de acordo com o aparelho utilizado. Mas no caso da conversão automática os números no pdf vão continuar lá. Os títulos provavelmente vão estar errados também. Fora que muitos deixam marcas como &#8220;convertido pelo programa XYZ&#8221; em todas as páginas do livro.</p>
<h2>Links úteis</h2>
<ul>
<li><a title="IDPF" href="http://idpf.org/epub">IDPF </a>- A organização responsável pela criação do ePub. O site deles é meio confuso, mas contém bastante informação a respeito do formato.</li>
<li><a title="ePub Check" href="http://code.google.com/p/epubcheck/">ePub Chech</a> &#8211; Validação de ePub</li>
<li><a title="Epub Format Construction Guide" href="http://www.hxa.name/articles/content/epub-guide_hxa7241_2007.html">Epub Format Construction Guide</a> &#8211; Um meta-livro bem completo sobre o assunto.</li>
</ul>
<h2>Bibliotecas gratuitas</h2>
<ul>
<li><a title="Google Books" href="http://books.google.com.br/">Google Books</a></li>
<li><a title="ePub Bud" href="http://www.epubbud.com/">ePub Bud</a></li>
</ul>
<h2>Aplicativos para a Leitura</h2>
<h4>Mac &amp; PC</h4>
<ul>
<li><a title="Adobe Digital Editions " href="http://www.adobe.com/products/digitaleditions/">Adobe Digital Editions</a></li>
<li><a title="Nook" href="http://www.barnesandnoble.com/u/free-nook-apps/379002321/">Nook</a></li>
</ul>
<h4>Linux</h4>
<ul>
<li><a title="FB Reader" href="http://www.fbreader.org/">FB Reader</a></li>
</ul>
<h4>iOS</h4>
<ul>
<li><a title="iBooks" href="http://www.apple.com/br/ipad/built-in-apps/ibooks.html">iBooks</a></li>
<li><a title="Stanza" href="http://itunes.apple.com/br/app/stanza/id284956128?mt=8">Stanza</a></li>
</ul>
<h4>Android</h4>
<ul>
<li><a title="Aldiko" href="http://www.aldiko.com/">Aldiko</a></li>
</ul>
<h4>Leitura no Browser</h4>
<ul>
<li><a title="Magic Scroll " href="https://chrome.google.com/webstore/detail/ghgnmgfdoiplfmhgghbmlphanpfmjble">Magic Scroll </a>- Google Chrome</li>
<li><a title="ePub Read" href="http://www.epubread.com/">ePub Read</a> &#8211; Firefox</li>
</ul>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/introducao-ao-css-3d-flip-card/" title="Introdução ao CSS 3D &#8211; Flip Card">Introdução ao CSS 3D &#8211; Flip Card</a></li><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/vote-no-especialista-em-usabilidade-para-presidente/" title="Vote no Especialista em Usabilidade para Presidente">Vote no Especialista em Usabilidade para Presidente</a></li><li><a href="http://tableless.com.br/o-que-sao-media-types/" title="O que são Media Types do CSS?">O que são Media Types do CSS?</a></li><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>jQuery: métodos desconhecidos</title>
		<link>http://tableless.com.br/jquery-metodos-desconhecidos/</link>
		<comments>http://tableless.com.br/jquery-metodos-desconhecidos/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 15:30:24 +0000</pubDate>
		<dc:creator>Davi Ferreira</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5315</guid>
		<description><![CDATA[Conheça alguns métodos pouco utilizados mas que podem ser grandes aliados dos desenvolvedores jQuery.]]></description>
			<content:encoded><![CDATA[<p>No meu <a href="http://tableless.com.br/jquery-dicas-de-otimizacao-e-performance/" title="">último artigo</a> falei sobre dicas de otimização e performance de códigos jQuery. Na versão inicial do texto eu havia planejado um tópico sobre os métodos não muito conhecidos, já que alguns, como o ajaxSetup, podem também atuar na performance da sua aplicação.</p>
<p>Acabei descobrindo que este tópico ficaria enorme e, por isso, preferi escrever sobre o assunto em um artigo próprio.</p>
<p>Com vocês, alguns dos métodos menos populares do jQuery!</p>
<h2>proxy()</h2>
<p>O método proxy() permite executar um outros método forçando um determinado contexto. Seu objetivo principal é evitar a confusão do &#8216;this&#8217; causada quando um objeto é utilizado dentro de um método de outro objeto.</p>
<p>Por exemplo:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.botao&quot;</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//window</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.botao&quot;</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//.botao</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>É possível utilizar o proxy() através de duas assinaturas. A primeira recebe como parâmetros uma função e o escopo. A segunda funciona passando o escopo e o nome do método como uma string.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span> funcao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'objeto'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span>.<span style="color: #660066;">proxy</span><span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'objeto'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'metodo'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Quem sabe agora você para de usar o truque do &#8216;var that = this&#8217;, hein?</p>
<h2>isArray() e isFunction()</h2>
<p>Esses dois métodos fazem parte da família de utilitários do jQuery. Como seus nomes sugerem, o primeiro verifica se o objeto é um array JavaScript e o segundo se o objeto é uma função.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> jogadores <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Obina'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Vagner Love'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Zico'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> chutar <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>jogador<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Gol de &quot;</span> <span style="color: #339933;">+</span> jogadores<span style="color: #009900;">&#91;</span>jogador<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isArray"><span style="color: #000066;">isArray</span></a><span style="color: #009900;">&#40;</span>jogadores<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// true</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isFunction"><span style="color: #000066;">isFunction</span></a><span style="color: #009900;">&#40;</span>chutar<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// true</span></div></td></tr></tbody></table></div>
<p>Uma observação: a função isArray retorna <em>true</em> apenas para verdadeiros Arrays (e não objetos &#8220;tipo array&#8221;, como um objeto jQuery, por exemplo).</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> jogadores <span style="color: #339933;">=</span> <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.jogadores'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Utilities/isArray"><span style="color: #000066;">isArray</span></a><span style="color: #009900;">&#40;</span>jogadores<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// false</span></div></td></tr></tbody></table></div>
<p>A <a href="http://api.jquery.com/category/utilities/" title="">lista de utilitários</a> possui outros métodos interessantes, tais como grep(), map(), merge() etc. </p>
<h2>queue() e dequeue()</h2>
<p>Apesar de terem sido desenvolvidos originalmente para o uso de animações, os métodos queue() e dequeue() podem ser utilizados para qualquer tipo de fila.</p>
<p>A fila padrão é chamada de &#8216;fx&#8217;: essa é a fila das animações. Ela será utilziada caso não seja passado nos parâmetros o nome de uma fila. No exemplo abaixo, estamos criando a fila &#8216;ajaxRequests&#8217;.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajax"><span style="color: #000066;">ajax</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'GET'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/tableless'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; complete<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>jqXHR<span style="color: #339933;">,</span> textStatus<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/dequeue"><span style="color: #000066;">dequeue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajaxRequests&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/post"><span style="color: #000066;">post</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'/tableless'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>categoria<span style="color: #339933;">:</span> <span style="color: #3366CC;">'jquery'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para dar sequência no andamento da fila, você precisa utilizar o método dequeue(). Ele deve ser chamado no final da execução de um processo da fila (e como essa é uma fila de processos AJAX, utilizamos o dequeue no evento <em>complete</em>).</p>
<p>Outro recurso interessante é a possibilidade de saber o tamanho da fila, ou seja, quantos eventos ainda serão executados. Para isso, basta utilizar a propriedade <em>length</em> após o método queue().</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 2</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/dequeue"><span style="color: #000066;">dequeue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ajaxRequests&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// executa fila</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/queue"><span style="color: #000066;">queue</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ajaxRequests'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 0</span></div></td></tr></tbody></table></div>
<h2>detach()</h2>
<p>Assim como o remove(), o detach() retira um elemento do DOM. No entanto, esse método guarda as referências, eventos e dados associados ao elemento retornando um objeto jQuery que pode ser re-inserido no DOM.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; e.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<br />
&nbsp; console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'clique'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 'clique'</span><br />
<span style="color: #003366; font-weight: bold;">var</span> link <span style="color: #339933;">=</span> <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">detach</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span>link<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// 'clique'</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/remove"><span style="color: #000066;">remove</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;a href=&quot;#&quot; class=&quot;link&quot;&gt;link&lt;/a&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.link'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Events/click"><span style="color: #000066;">click</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// []</span></div></td></tr></tbody></table></div>
<h2>ajaxSetup() e afins</h2>
<p>Talvez esses sejam os métodos mais injustiçados do jQuery. É muito comum a repetição de chamadas AJAX, incluindo seus parâmetros. Esses métodos de configuração permitem definir valores padrão para qualquer evento AJAX em sua aplicação.</p>
<p>Com o ajaxSetup() é possível, por exemplo, habilitar ou desabilitar o <em>cache</em> e definir o tipo de requisição: POST ou GET.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajaxSetup"><span style="color: #000066;">ajaxSetup</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; type<span style="color: #339933;">:</span> <span style="color: #3366CC;">'POST'</span><span style="color: #339933;">,</span><br />
&nbsp; dataType<span style="color: #339933;">:</span> <span style="color: #3366CC;">'json'</span><span style="color: #339933;">,</span><br />
&nbsp; cache<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Você ainda pode configurar uma URL padrão e também parâmetros passados durante a chamada:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span>.<a href="http://docs.jquery.com/Ajax/ajaxSetup"><span style="color: #000066;">ajaxSetup</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> &nbsp;<br />
&nbsp; <a href="http://docs.jquery.com/Core/data"><span style="color: #000066;">data</span></a><span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; origem<span style="color: #339933;">:</span> <span style="color: #3366CC;">'tableless'</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/tableless'</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Para conferir uma lista completa das propriedades configuráveis, visite a <a href="http://api.jquery.com/jQuery.ajax/" title="">página do método AJAX na API do jQuery</a>.</p>
<p>Os <em>callbacks</em> e eventos relacionados à execução de métodos AJAX também podem ser configurados. No entanto, essa configuração deve ser feita através dos seguintes métodos específicos: ajaxStart(), ajaxStop(), ajaxComplete(), ajaxError(), ajaxSuccess() e ajaxSend(). </p>
<p>Por exemplo, você poderia utilizar a configuração abaixo para exibir um indicador de carregamento no início da execução de um método AJAX.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; .<a href="http://docs.jquery.com/Ajax/ajaxStart"><span style="color: #000066;">ajaxStart</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/show"><span style="color: #000066;">show</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; .<a href="http://docs.jquery.com/Ajax/ajaxStop"><span style="color: #000066;">ajaxStop</span></a><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/hide"><span style="color: #000066;">hide</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Você pode associar os eventos a qualquer elemento e o jQuery se encarregará de encontrar e executar todos os métodos associados.</p>
<h2>delay()</h2>
<p>O método delay() serve para adiar a execução de uma função, método ou animação. Ele é especialmente útil para controlar o tempo de animações.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.alerta'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/fadeIn"><span style="color: #000066;">fadeIn</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Effects/slideUp"><span style="color: #000066;">slideUp</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>No exemplo acima, o elemento com a classe &#8220;alerta&#8221; é exibido através de uma transição <em>fade</em> e, um segundo depois, ocultado através do método slideUp().</p>
<h2>replaceWith() e replaceAll()</h2>
<p>Imagine que você queira substituir todos os elementos que tenham a classe &#8220;pontos&#8221;. Com o método replaceWith() fica fácil. O que ele faz é buscar todos os objetos que se encaixem no seletor indicado e substituir seu conteúdo.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.pontos'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceWith"><span style="color: #000066;">replaceWith</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;1 milhão de pontos!&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>O replaceWith() também funciona com elementos que não estejam presentes no DOM, ou seja, você pode criar um objeto jQuery e substituir/manipular seu conteúdo antes de inserí-lo no DOM.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;div class=&quot;carregando&quot; /&gt;'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceWith"><span style="color: #000066;">replaceWith</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;p class=&quot;carregando&quot;&gt;Carregando...&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Da mesma forma, o método replaceAll() também substiui o conteúdo de elementos, mas a origem e o destino são invertidos. Você também pode passar seletores como conteúdo. Nesse caso o funcionamento é um pouco diferente já que o elemento não é clonado e sim movido no DOM. </p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;h2&gt;Carregamento completo!&lt;/h2&gt;'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceAll"><span style="color: #000066;">replaceAll</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.titulo'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/replaceAll"><span style="color: #000066;">replaceAll</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.carregando'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Note que a diferença dos métodos acima para os métodos tradiconais html() e text() é que o próprio elemento também é substituído e não só o seu conteúdo.</p>
<hr />
<p>Estes foram alguns métodos que pouca gente conhece ou utiliza. Pode até ser que você nunca tenha sentido falta deles, mas é sempre bom ter umas cartas extras na manga.</p>
<p>E se você gostou, garanto que ao consultar a <a href="http://api.jquery.com/" title="">API do jQuery</a> você descobrirá vários outros métodos desconhecidos, mas que podem ser úteis em algum momento do desenvolvimento dos seus projetos.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/20-plugins-jquery-que-marcaram-2011/" title="20 plugins jQuery que marcaram 2011">20 plugins jQuery que marcaram 2011</a></li><li><a href="http://tableless.com.br/testando-seu-codigo-jquery-com-jasmine-parte-1/" title="Testando seu código jQuery com Jasmine &#8211; Parte 1">Testando seu código jQuery com Jasmine &#8211; Parte 1</a></li><li><a href="http://tableless.com.br/alternativas-ao-jquery/" title="Alternativas ao jQuery">Alternativas ao jQuery</a></li><li><a href="http://tableless.com.br/entendendo-os-reflows-2/" title="Entendendo os Reflows">Entendendo os Reflows</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/jquery-metodos-desconhecidos/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Aprenda a programar Javascript no Codecademy</title>
		<link>http://tableless.com.br/aprenda-a-programar-javascript-no-codecademy/</link>
		<comments>http://tableless.com.br/aprenda-a-programar-javascript-no-codecademy/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 13:04:23 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Notícias]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5308</guid>
		<description><![CDATA[Aprenda a programar de um jeito fácil.]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.codecademy.com/?utm_source=TablelessComBr&#038;utm_medium=linkPost&#038;utm_campaign=freePost">Codecademy</a> é um lugar para se aprender a programar:</p>
<blockquote><p>&#8220;Codecademy was created out of the frustrations Zach and Ryan felt with learning how to program. Tired with less effective text and video resources, Ryan and Zach teamed up to create Codecademy, a better, more interactive way to learn programming by actually coding. This is just the beginning. Join us as we make it easy for everyone to love and learn how to code.&#8221;</p></blockquote>
<p>Lá você aprende a programar, se baseando em Javascript, de uma maneira facil e assistida. Você consegue facilmente aprender nos primeiros passos como fazer variáveis, arrays e outros pequenos conceitos que precisamos entender ao programar.</p>
<p>Conforme você vai aprendendo, você desbloqueia badges (Como o Campus Online novo, aguarde! ;-D) e acompanha seu ritmo de aprendizado.</p>
<p>Muito indicado para quem quer aprender a programar ou quer ter alguma noção sobre o assunto! Visite o <a href="http://www.codecademy.com/?utm_source=TablelessComBr&#038;utm_medium=linkPost&#038;utm_campaign=freePost">Codeacademy</a> agora e comece sua jornada! <img src='http://tableless.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3  class="related_post_title">Mais comentados</h3><ul class="related_post"><li><a href="http://tableless.com.br/editores/" title="Editores">Editores</a></li><li><a href="http://tableless.com.br/quer-testar-o-google-analytics/" title="Quer testar o Google Analytics?">Quer testar o Google Analytics?</a></li><li><a href="http://tableless.com.br/chrome-nao-quer-dizer-muita-coisa/" title="O Chrome não quer dizer muita coisa">O Chrome não quer dizer muita coisa</a></li><li><a href="http://tableless.com.br/nao-otimize-seu-codigo/" title="Não &#8220;otimize&#8221; seu código">Não &#8220;otimize&#8221; seu código</a></li><li><a href="http://tableless.com.br/desenvolvedor-analfabeto/" title="Desenvolvedor analfabeto (sim, é sobre WYSIWYG)">Desenvolvedor analfabeto (sim, é sobre WYSIWYG)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/aprenda-a-programar-javascript-no-codecademy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Boas práticas de Acessibilidade</title>
		<link>http://tableless.com.br/boas-praticas-de-acessibilidade/</link>
		<comments>http://tableless.com.br/boas-praticas-de-acessibilidade/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 16:14:18 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[aprenda]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[tableless]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5303</guid>
		<description><![CDATA[Apresentação sobre acessibilidade e desenvolvimento para web.]]></description>
			<content:encoded><![CDATA[<p>Preparei uma pequena (nem tão pequena assim) apresentação que mostra algumas boas práticas e técnicas sobre acessibilidade para sistemas e websites. São pequenos ajustes que podemos incorporar mesmo depois de todo o desenvolvimento pronto e que dão resultados importantes para adequação dos seus sites ou sistemas.</p>
<div style="width:595px" id="__ss_11217803"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/diegoeis/apresentancao-acessibilidade" title="Apresentancao acessibilidade" target="_blank">Apresentancao acessibilidade</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11217803?rel=0" width="595" height="497" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> Veja mais <a href="http://www.slideshare.net/" target="_blank">apresentações</a> de <a href="http://www.slideshare.net/diegoeis" target="_blank">Diego Eis</a> </div>
</p></div>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/sobre-internet-explorer-para-mobile-breve-impressao/" title="Sobre Internet Explorer para Mobile &#8211; Breve impressão">Sobre Internet Explorer para Mobile &#8211; Breve impressão</a></li><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/um-pensamento-sobre-design-para-web/" title="Um pensamento sobre design para web">Um pensamento sobre design para web</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/boas-praticas-de-acessibilidade/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Introdução aos padrões de codificação</title>
		<link>http://tableless.com.br/introducao-a-padroes-de-codificacao/</link>
		<comments>http://tableless.com.br/introducao-a-padroes-de-codificacao/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 11:28:41 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[cotidiano]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5286</guid>
		<description><![CDATA[É mais importante para o time concordar em um único estilo de código do que encontrar o estilo perfeito. ]]></description>
			<content:encoded><![CDATA[<p>Como os idiomas reais, cada linguagem de programação tem suas respectivas regras, individualidades, pontuações, pausas e pontos em comum com outras linguagens. Você precisa conhecer essas peculiaridades para falar fluentemente ou no mínimo ser entendido. Nas linguagens de para web ou qualquer outra linguagem de programação, precisamos seguir algumas regras básicas para que o código não vire uma língua estrangeira no meio do projeto.</p>
<p>Definir padrões é normal para que a equipe inteira escreva o código da mesma maneira. Esse assunto é longo e muito importante para todas as equipes de desenvolvimento. Programadores já quiseram me matar várias vezes porque eu uso TABS em vez de ESPAÇOS em arquivos Python/PHP. Programadores gostam de espaços. Eu não. Mas não é o nosso gosto que vai definir quais os padrões de código que devemos seguir.</p>
<p>Quando definimos padrões e boas práticas, garantimos que todos da equipe conseguirão ter o mínimo de entendimento do código daquele projeto que está na empresa a tempos. Se alguém da equipe adoecer ou precisar ir para o Canadá, outro integrante pode assumir o seu lugar sem precisar se preocupar em aprender novas regras, porque elas devem ser as mesmas do projeto anterior.</p>
<p>É importante que os integrantes da equipe sejam sempre fiéis aos acordos firmados no momento em que combinam esses padrões. É importante também que, caso eles encontrem um integrante fora da lei, que eles forcem o meliante a seguir as regras. Já vi gente perdendo o trabalho de uma semana por que estava trabalhando diretamente pelo FTP e o projeto não estava no GIT. O programador simplesmente APAGOU o projeto da pessoa. Nunca mais ela resolveu editar os arquivos fora do controle de versão. Esse tipo de atitude é perigosa mas muito necessárias às vezes. Devemos forçar as regras num ambiente onde todos devem quem, quando e como as linhas de código do projeto foram escritas.</p>
<p>Alguns pontos para se pensar e combinar:</p>
<h6>Identação</h6>
<p>Como devemos identar o código? Com espaços ou tabs? Se for com espaços quantos? </p>
<h6>Espaços em brancos (Whitespaces)</h6>
<p>Espaços devem ser incluídos depois de uma operação condicional? Espaços devem ser colocados entre o seletor e as chaves? E no final de cada linha, precisa?</p>
<h6>Nomenclatura</h6>
<p>Como as classes, ids e variáveis devem ser nomeadas? E as funções? Vamos usar <a href="http://en.wikipedia.org/wiki/CamelCase">CamelCase</a>?</p>
<h6>Comentários</h6>
<p>Como faremos com os comentários? Como serão os delimitadores do comentário? O comentário deve ser completo ou precisa ser algo mais resumido?</p>
<h6>Arquivos</h6>
<p>Como os arquivos, que não fazem parte da estrutura padrão do CMS, Framework e etc deverão ser chamados? E o nome das pastas? Como as páginas serão chamadas?</p>
<h6>Chaves e ponto/vírgula</h6>
<p>As chaves deverão ser abertas na mesma linha ou devemos quebrar linhas? Vamos sempre usar ponto/vírgula? Vamos usar o padrão <a href="http://en.wikipedia.org/wiki/Indent_style#K.26R_style">K&#038;R ou Allman</a>?</p>
<p>Quando definimos estas pequenas coisas, diminuímos muitos percalços no meio do caminho. Já vi projetos atrasarem meses por que um palerma abriu e salvou arquivos com o charset diferente do que já tinha sido combinado no início.</p>
<p>&#8220;It&#8217;s more important for people on a team to agree to a single coding style than it is to find the perfect style.&#8221; <a href="http://www.amazon.com/gp/product/0596102356/ref=as_li_ss_tl?ie=UTF8&#038;tag=tableless-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0596102356">Building Scalable Web Sites: Building, Scaling, and Optimizing the Next Generation of Web Applications</a><br />
Indico este livro sobre esse e outros assuntos sobre a construção, desenvolvimento e manutenção de websites</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/" title="Introdução das premissas dos controles de versão">Introdução das premissas dos controles de versão</a></li><li><a href="http://tableless.com.br/boas-praticas-de-acessibilidade/" title="Boas práticas de Acessibilidade">Boas práticas de Acessibilidade</a></li><li><a href="http://tableless.com.br/css1k/" title="CSS1K">CSS1K</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/introducao-a-padroes-de-codificacao/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Introdução das premissas dos controles de versão</title>
		<link>http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/</link>
		<comments>http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 13:05:12 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[O Básico]]></category>
		<category><![CDATA[Tecnologia e Tendências]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5211</guid>
		<description><![CDATA[Introdução sobre algumas premissas sobre controles de versão. Muito útil para designers e iniciantes na área.]]></description>
			<content:encoded><![CDATA[<p>Parece ser óbvio, mas muitos desenvolvedores desdenham de ter controle total sobre o código gerado no desenvolvimento. Muitos, por trabalharem sozinhos, entendem que não precisam manter um certo nível de organização do seu código exatamente porque talvez, somente eles, o verão.<br />
Quem nunca ficou horas tentando debugar um código que você mesmo fez, mas não lembrava o que uma determinada função fazia&#8230; Esse código pode ter sido por você de madrugada, quando você estava pingando de sono, ou pior, bêbado&#8230; Vai saber&#8230;</p>
<p>Controlar seu código fonte deve ser uma premissa. Um princípio. Se você acha que o undo do seu editor predileto salva sua vida, imagina ter um undo do seu projeto inteiro. Imagine você ter a história de edição de cada um dos arquivos do seu projeto.</p>
<p>Os princípios abaixo servem para qualquer tipo de controle de versão que conhecemos hoje: GIT, SVN, Mercurial etc. </p>
<h4>Branchs e trunks</h4>
<p>A última revisão, a mais atual, normalmente é chamada de <em>HEAD</em>. Existem momentos onde teremos vários HEADs porque o projeto tem vários BRANCHES.<br />
Um branch é uma cópia do projeto. Cada branch pode ser editado e evoluído independentemente.<br />
Imagine que exista a <strong>versão de produção</strong> que é aquela que está no ar. É a versão o usuário está utilizando. É importante que nós não modifiquemos esta versão porque alguém pode commitar algo errado, quebrar tudo e o usuario reclamar. Por isso nós precisamos de outro ambiente, é aí que criamos um branch de desenvolvimento, onde podemos fazer o que quisermos ali, sem afetar o branch principal. </p>
<p><img src="http://tableless.com.br/wp-content/uploads/2012/01/branch.jpg" alt="" title="branch" width="770" height="188" class="alignnone size-full wp-image-5212"></p>
<p>É muito útil criarmos novos <strong>trunks</strong> (tronco) quando precisamos fazer modificações drásticas de novas features, resolver bugs ou modificar layout. </p>
<p>Exemplo: imagine que você esteja trabalhando em uma nova feature, em um branch específico. O cliente liga e diz que encontrou um bug, originado de uma modificação feita na semana passada. Você sai do branch da nova feature e cria um novo branch. Este novo branch tem a cópia do código do branch de produção, que é o que o cliente está vendo. Você resolve o bug neste novo branch. Quando resolver o bug, você move as modificações deste branch para o branch de produção. Isso tudo sem ter que subir as modificações incompletas da nova feature que você estava trabalhando anteriormente.</p>
<h4>Versionamento</h4>
<p>Versionamento é uma das características mais básicas do controle de código. Quando comecei a desenvolver, normalmente eu trabalhava guardando pastas com nomes do tipo <strong>nomeDoProjeto-v1</strong>, <strong>nomeDoProjeto-v2</strong> etc&#8230; Estas pastas guardavam apenas as versões com grandes modificações de projeto&#8230; algo como mudança geral de layout, uma feature importante ou algo do tipo. O problema são as pequenas edições&#8230; Quando juntamos as pequenas modificações, temos uma grande modificação. É muito provável que se você perder essa versão, você não se lembre de todas as pequenas modificações feitas e isso é um problemão.</p>
<p>Toda vez que o desenvolvedor termina uma determinada tarefa, ele geral um commit que por sua vez gera um ponto de referência, uma versão, daqueles arquivos modificados.  Cada commit gera uma versão do seu código. A graça é que se você tem versões do código, você tem praticamente um <strong>undo</strong> gigante do seu projeto&#8230; Se depois de uma determinada modificação seu projeto começou a dar pau, você consegue entender com a história do seu versionamento &#8211; o famoso log &#8211; a partir de onde exatamente o problema foi iniciado.</p>
<h4>Logs</h4>
<p>Quando cada revisão é comitada, o desenvolvedor pode ou não adicionar uma mensagem explicando o que ele fez naquela tarefa. É importante que essa mensagem seja clara e rica em detalhes, mas não um texto gigante, apenas o suficiente para que você mesmo ou outras pessoas envolvidas entenda o que aquela submissão significa.</p>
<h4>Diffs</h4>
<p>Diffs são sensacionais. Imagine que você queira comparar duas versões de um mesmo arquivo para descobrir as linhas modificadas. Fazer um diff entre as versões do arquivo te possibilita encontrar exatamente onde está o erro e o melhor, quando juntamos com o Log, podemos saber exatamente o porque a pessoa incluiu aquela linha ou aquele código, e o melhor, quem fez aquela alteração. </p>
<h4>Rollback</h4>
<p>Mantendo uma história de commits, você tem <strong>pontos de volta</strong> na história do arquivo, possibilitando a facilidade de voltarmos para antes de alguma modificação. Você pode voltar a partir de um commit, por exemplo. Se o sistema ou o arquivo passou a dar problema depois de uma determinada revisão, é simples de você voltar o arquivo para a versão daquele determinado commit.</p>
<h4>Edição multiusuário e merge</h4>
<p>Isso é uma maravilha. Me lembro de equipes inteiras perdendo arquivos e partes de código porque dois membros abriam o mesmo arquivo para editar. Obviamente nunca, mas nunca dava certo. O que faziam que equipes inteiras criassem mecanismos da idade das pedras para avisar o resto do pessoal que determinado arquivo estava sendo usado. O trabalho em equipe remotamente nunca era possível. Com um controle de versão isso muda. Qualquer um pode editar qualquer arquivo a qualquer hora.<br />
O sistema de controle de versão compara as modificações feitas no arquivo pelos dois (ou mais) desenvolvedores e junta os códigos automaticamente. Muito bonito, hein?<br />
E quando os desenvolvedores modificam a mesma linha de código? Aí o controle de versão gera um conflito, esse conflito se resolve deve ser resolvido pelo desenvolvedor que executou o segundo commit. Funciona assim:</p>
<p>1. Dois desenvolvedores abrem o mesmo arquivo para editar.<br />
2. Quando os desenvolvedores terminam, eles geram um commit. Se os desenvolvedores fizeram edições em partes diferentes do arquivo, por exemplo, um no topo do arquivo e o outro no final, o sistema junta os códigos fazendo um merge, e criando um arquivo atualizado com as duas revisões.<br />
3. Se sistema percebe que os desenvolvedores fizeram as modificações na mesma linha, o sistema gera um conflito.<br />
4. O conflito é resolvido pelo segundo desenvolvedor que comitar o código. Ou seja, o cara comitou a modificação dele primeiro que você. Quando você comitar a sua modificação, o controle de versão avisará que há um conflito em uma parte do seu código. O conflito é resolvido mostrando algo mais ou menos assim:</p>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">p <span style="color: #00AA00;">&#123;</span><br />
&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<span style="color: #3333ff;">:estilo</span><span style="color: #6666ff;">.css</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">=======</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&gt;&gt;&gt;&gt;&gt;&gt;&gt;</span> 77976da35a11db4580b80ae27e8d65caf5208086<span style="color: #3333ff;">:estilo</span><span style="color: #6666ff;">.css</span><br />
<span style="color: #00AA00;">&#125;</span></div></td></tr></tbody></table></div>
<p>A primeira linha mostra a sua linha. A segunda linha mostra a modificação do outro dev. Aquele hash maluco no final é a identificação do commit do outro dev.<br />
Bom, nesses casos você precisa ver qual código é o correto, e isso as vezes inclui ir perguntar para o outro brother que diachos é aquela coisa que ele fez. Tudo na camaradagem&#8230; as vezes.</p>
<h3>Concluindo</h3>
<p>Estas são algumas premissas sobre controles de versão utilizados hoje em dia. Os controles de versão mais usados hoje são o GIT, SVN e Mercurial. Cada um deles tem comandos diferentes para lidar com as premissas acima e cada um deles faz o controle de sua forma particular. Mesmo assim todos trazem as vantagens que citamos no artigo. Mesmo que você trabalhe sozinho, é recomendado que você trabalhe com controle de versão. Assim você guarda seu projeto de forma segura e tem um histórico das suas modificações durante o tempo. Boas práticas, my friend.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/agora-e-a-vez-dos-desenvolvedores/" title="Agora é a vez dos desenvolvedores">Agora é a vez dos desenvolvedores</a></li><li><a href="http://tableless.com.br/epub-aprenda-a-criar-um-livro-digital/" title="ePub: Aprenda a criar um livro digital">ePub: Aprenda a criar um livro digital</a></li><li><a href="http://tableless.com.br/introducao-a-padroes-de-codificacao/" title="Introdução aos padrões de codificação">Introdução aos padrões de codificação</a></li><li><a href="http://tableless.com.br/introducao-ao-css-3d-flip-card/" title="Introdução ao CSS 3D &#8211; Flip Card">Introdução ao CSS 3D &#8211; Flip Card</a></li><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/introducao-das-premissas-dos-controles-de-versao/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>O dilema da sintaxe no HTML5</title>
		<link>http://tableless.com.br/o-dilema-da-sintaxe-no-html5/</link>
		<comments>http://tableless.com.br/o-dilema-da-sintaxe-no-html5/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 10:00:06 +0000</pubDate>
		<dc:creator>Talita Pagani</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[elementos html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[melhores práticas]]></category>
		<category><![CDATA[sintaxe]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5130</guid>
		<description><![CDATA[Fechar ou não as tags? Colocar os valores de atributo entre aspas? Estas escolhas nem sempre podem ser uma questão de gosto.]]></description>
			<content:encoded><![CDATA[<p>Com o HTML5, a sintaxe volta a ser aquela do HTML, sem as restrições preconizadas pelo XHTML (todas as tags com fechamento, tags e propriedades em minúscula, valores de propriedades entre aspas, etc). E os desenvolvedores voltaram a se sentir livres para codificar o HTML da forma que lhes é mais conveniente.</p>
<p>Bom, não é bem assim. Embora o XHTML fosse frustrante com relação à semântica e não era tão revolucionário quanto propunha, as regras mais rígidas de sintaxe foram seu maior legado. O código escrito era consistente e, se não seguisse as regras, não iria renderizar corretamente no navegador. Além disso, era compreensível para qualquer desenvolvedor. É uma questão de organização e padronização, como uma diretriz que normatiza o comportamento dos elementos para que haja qualidade e consistência.</p>
<p>Pense nas linguagens que você conhece, tanto de programação, quanto de marcação, estilo, etc. Por exemplo: PHP, CSS, XML, JS.  Todas possuem regras de sintaxe que, se não forem seguidas, o código não funcionará. Quem programa em PHP sabe que se esquecer um único ponto-e-vírgula, compromete a interpretação de todo o código. O JS, apesar da flexibilidade com relação a o ponto-e-vírgula no final da linha, é <em>case sensitive</em>, ou seja, há diferença entre o que é escrito em maiúsculas e minúsculas.</p>
<p>Em grande parte das linguagens existentes, há uma sintaxe a ser respeitada e esta serve para que o código seja bem formado e tenha uma estruturação lógica, definindo um sentido para a interpretação do código. Basta remetermos ao significado original de sintaxe, que herdamos da linguística:</p>
<blockquote><p>A sintaxe é a parte da gramática que estuda a disposição das palavras na frase e das frases no discurso, incluindo a sua <strong>relação lógica</strong>, entre as múltiplas combinações possíveis para transmitir um <strong>significado completo e compreensível</strong>. [...] É o ramo que estuda os processos generativos ou combinatórios das frases das línguas naturais, tendo em vista <strong>especificar a sua estrutura interna e funcionamento</strong>.</p>
<p>Fonte: <a href="http://pt.wikipedia.org/wiki/Sintaxe">http://pt.wikipedia.org/wiki/Sintaxe</a> (grifo nosso)</p></blockquote>
<p>E no HTML5 nada impede que você use a sintaxe do XHTML, portanto, continuar mantendo as principais características de sintaxe do XHTML no HTML5 (uma prática que muitos chamam de XHTML5), para manter um formato consistente de codificação. É como realizar um <em>merge</em> entre as duas linguagens.</p>
<p>Algumas práticas recomendadas:</p>
<ul>
<li>Utilizar todos os elementos e atributos em minúsculas;</li>
<li>Incluir tag de abertura de fechamento para as tags que possuem conteúdo (no caso de tags órfãs, como &lt;img&gt;, &lt;input&gt;, &lt;meta&gt;, isto não fica tão grosseiro se for escrito com a sintaxe do HTML);</li>
<li>Inserir todos os valores de propriedades entre aspas duplas;</li>
</ul>
<p>&nbsp;</p>
<h2>Artigos relacionados</h2>
<p><a href="http://www.456bereastreet.com/archive/201011/html5_syntax_guidelines/">HTML5 syntax guidelines</a></p>
<p><a href="http://www.impressivewebs.com/html5-syntax-style/">My preferred syntax style for HTML5 markup</a></p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/concorra-ao-livro-smashing-html5-no-twitter/" title="Concorra ao livro Smashing HTML5 no Twitter!">Concorra ao livro Smashing HTML5 no Twitter!</a></li><li><a href="http://tableless.com.br/declarando-idiomas-no-html/" title="Declarando idiomas no HTML">Declarando idiomas no HTML</a></li><li><a href="http://tableless.com.br/guia-de-referencia-de-html5/" title="Guia de Referência de HTML5">Guia de Referência de HTML5</a></li><li><a href="http://tableless.com.br/commander-conquer-tiberium-alliances/" title="Command &#038; Conquer: Tiberium Alliances">Command &#038; Conquer: Tiberium Alliances</a></li><li><a href="http://tableless.com.br/utilizando-a-biblioteca-modernizr/" title="Utilizando a Biblioteca Modernizr">Utilizando a Biblioteca Modernizr</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/o-dilema-da-sintaxe-no-html5/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>jQuery: dicas de otimização e performance</title>
		<link>http://tableless.com.br/jquery-dicas-de-otimizacao-e-performance/</link>
		<comments>http://tableless.com.br/jquery-dicas-de-otimizacao-e-performance/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 10:26:21 +0000</pubDate>
		<dc:creator>Davi Ferreira</dc:creator>
				<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[otimização]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=4289</guid>
		<description><![CDATA[Performance é um aspecto muito importante em aplicações web. Confira algumas dicas simples de como otimizar seu código jQuery.]]></description>
			<content:encoded><![CDATA[<p>A grande maioria dos desenvolvedores jQuery não se preocupa muito com performance e otimização. Afinal, o mantra do framework, &#8220;write less, do more&#8221;, envolve esconder a parte feia do Javascript e, muitas vezes, acrescentar camadas desnecessárias.</p>
<p>Neste artigo apresento algumas dicas de como melhorar a performance de sua aplicação jQuery. No entanto, vale lembrar que não é necessário otimizar nenhum código escrito previamente, já que a otimização dificilmente compensará o trabalho.</p>
<h2>#1: Mantenha-se atualizado</h2>
<p>Procure utilizar sempre a última versão estável do jQuery. A cada nova versão lançada são introduzidas inúmeras melhorias de performance nos métodos do framework.</p>
<p>Da versão 1.3 para a 1.4, por exemplo, houve um ganho de 50% na performance da execução dos testes padrão do jQuery.</p>
<p>Fique ligado nas mudanças. O lançamento de uma nova versão vem sempre acompanhando de notas sobre as novas funcionalidades, um changelog, como <a href="http://blog.jquery.com/2011/11/21/jquery-1-7-1-released/" title="">este aqui</a>.</p>
<h2>#2: Não utilize jQuery!</h2>
<p>Em alguns momentos não é necessário utilizar jQuery. Apesar de ser fácil de utilizar e muito mais bonito de ler, o framework é apenas mais uma camada no desenvolvimento, uma &#8220;maquiagem&#8221; para o Javascript.</p>
<p>Em projetos pequenos você pode, se quiser, abolir totalmente o jQuery: é realmente necessário incluir os ~30kb do framework? Não dá pra resolver com Javascript puro?</p>
<p>Já em projetos maiores, mesmo incluindo o jQuery, em alguns casos é melhor não utilizá-lo. Por exemplo:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://docs.jquery.com/Core/size"><span style="color: #000066;">size</span></a><span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span></div></td></tr></tbody></table></div>
<p>Acima está o código-fonte do método size, do jQuery. O que ele faz? Nada além de retornar o tamanho do objeto utilizando o método nativo length. Logo, é mais rápido utilizar diretamente o length!</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.menu'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/size"><span style="color: #000066;">size</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.menu'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Core/length"><span style="color: #000066;">length</span></a></div></td></tr></tbody></table></div>
<p>O mesmo vale para retornar o ID de um elemento:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Attributes/attr"><span style="color: #000066;">attr</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">id</span></div></td></tr></tbody></table></div>
<p>O seletor $(this), aliás, somente deve ser utilizado quando for necessário um método que só existe no jQuery. Nos outros casos, sempre dê preferência ao this nativo do Javascript.</p>
<p>Também é comum utilizar jQuery para alterar o CSS de um elemento, por exemplo:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/CSS/css"><span style="color: #000066;">css</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'display'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'block'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Olhando o <a href="https://github.com/jquery/jquery/blob/master/src/css.js#L121">código-fonte</a> do jQuery, o método .css() possui aproximadamente 20 linhas (sem contar outros métodos chamados). A atribuição acima poderia ser executada da seguinte forma, com uma única linha:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'menu'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">display</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'block'</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Os próprios métodos jQuery possuem camadas dentro do framework. Ao invés de utilizar o método $.getJSON, por exemplo, você pode chamar diretamente o método $.ajax com os parâmetros type: &#8216;GET&#8217; e dataType: &#8216;json&#8217;.</p>
<p>Vale a pena dar uma olhada no <a href="https://github.com/jquery/jquery" title="">código-fonte</a> do jQuery para entender o que o framework faz por baixo dos panos e até que ponto é válido utilizá-lo.</p>
<h2>#3: Seletores</h2>
<p>Procure sempre ser o mais específico possível em um seletor. Quanto mais específico, mais rápido. Opte sempre por utilizar o ID do elemento. Mesmo quando for preciso utilizar uma classe no seletor, utilize o ID do elemento pai.</p>
<p>Os seletores que utilizam o ID ou a tag de um elemento são mais rápidos por um simples motivo: ambos utilizam métodos nativos do Javascript document.getElementbyId() e document.getElementsByTagname().</p>
<p>Evite utilizar seletores com atributos e/ou pseudo-seletores, a menos que seja extremamente necessário.</p>
<p>Outra dica importante: dê preferência ao método .find() quando precisar achar elementos filhos de um elemento com ID. Por exemplo, ao invés de $(&#8216;#container p&#8217;) utilize $(&#8216;#container&#8217;).find(&#8216;p&#8217;), dessa forma o escopo da busca fica limitado ao primeiro objeto. O mesmo vale para seletores de classes e pseudo-seletores.</p>
<h2>#4: Cache de elementos</h2>
<p>Esta é uma dica simples, mas que pode adicionar ganhos de performance consideráveis. Procure sempre armazenar em uma variável o objeto jQuery retornado por um seletor, principalmente quando o seletor está dentro de um loop.</p>
<p>Por exemplo:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> menu <span style="color: #339933;">=</span> <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> itens <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Home'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Contato'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Sobre'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>x <span style="color: #000066; font-weight: bold;">in</span> itens<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; menu.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;li&gt;'</span><span style="color: #339933;">+</span>itens<span style="color: #009900;">&#91;</span>x<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/li&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Ao invés de:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> itens <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Home'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Contato'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Sobre'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>x <span style="color: #000066; font-weight: bold;">in</span> itens<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Manipulation/append"><span style="color: #000066;">append</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;li&gt;'</span><span style="color: #339933;">+</span>itens<span style="color: #009900;">&#91;</span>x<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/li&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>No exemplo acima, o seletor $(&#8216;#menu&#8217;) seria executado 3 vezes, ou seja, o elemento seria buscado no DOM três vezes seguidas, sem nenhuma alteração.</p>
<p>Conforme citei na abertura do artigo, cachear seletores é uma prática que vai contra o &#8220;write less, do more&#8221; do jQuery. Seu código pode ficar um pouco mais &#8220;sujo&#8221;, mas, em contrapartida, fica também mais rápido.</p>
<h2>#5: Encadeamento de métodos</h2>
<p>Encadear métodos sempre foi uma das funcionalidades mais legais do jQuery e, se você ainda não faz uso dessa técnica, é por aqui que você deve começar.</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#container'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Attributes/addClass"><span style="color: #000066;">addClass</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'corpo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#container'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/CSS/width"><span style="color: #000066;">width</span></a><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">940</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#container'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/CSS/height"><span style="color: #000066;">height</span></a><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Vira:</p>
<div class="codecolorer-container jquery mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="jquery codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">$</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#container'</span><span style="color: #009900;">&#41;</span>.<a href="http://docs.jquery.com/Attributes/addClass"><span style="color: #000066;">addClass</span></a><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'corpo'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.<a href="http://docs.jquery.com/CSS/width"><span style="color: #000066;">width</span></a><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">940</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.<a href="http://docs.jquery.com/CSS/height"><span style="color: #000066;">height</span></a><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Quase todos os métodos e plugins retornam (ou deveriam retornar) um objeto jQuery. Além de melhorar a leitura, essa prática também afeta diretamente a performance do seu código já que o seletor só é executado uma única vez.</p>
<h2>#6: DOM</h2>
<p>Qualquer tipo de manipulação no DOM envolve um processo bem lento. No geral, você deve fugir desse tipo de implementação, principalmente se ela não possuir nenhum tipo de cache.</p>
<p>O ideal é manipular já com os dados finais e completos. Não manipule o DOM em um loop, por exemplo. </p>
<p>Utilizando o exemplo da dica de caching, poderíamos alterar para ficar ainda mais otimizado:</p>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> menu <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#menu'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> itens <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Home'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Contato'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'Sobre'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> html <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>x <span style="color: #000066; font-weight: bold;">in</span> itens<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; html <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&lt;li&gt;'</span><span style="color: #339933;">+</span>itens<span style="color: #009900;">&#91;</span>x<span style="color: #009900;">&#93;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">'&lt;/li&gt;'</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
menu.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>html<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
menu.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Repare que o método .append() foi chamado apenas uma vez, já recebendo o HTML completo concatenado.</p>
<h2>#7: DRY (Don&#8217;t Repeat Yourself)</h2>
<p>O jQuery disponibiliza um alto nível de personalização, permitindo que você <a href="http://tableless.com.br/jquery-seletores-personalizados/" title="">escreva seus seletores</a> e <a href="http://tableless.com.br/anatomia-de-um-plugin-jquery/" title="">seus plugins</a>.</p>
<p>Evite repetir blocos de código. Evite repetir seletores. Evite repetir manipulações no DOM (faça tudo o que precisa fazer uma única vez!). Esta é uma dica muito importante para performance, já que qualquer código repetido significa alguns bytes ou kbytes a mais na sua aplicação.</p>
<p>Mathias Bynens disponibilizou um <a href="http://speakerdeck.com/u/mathiasbynens/p/faster-javascript-execution-for-the-lazy-developer">uma apresentação genial</a> sobre DRY e Javascript, vale a pena conferir.</p>
<h2>Como medir a performance da sua aplicação?</h2>
<p>O site <a href="http://jsperf.com/">jsPerf</a> permite a criação de testes de performance para códigos javascript, utilizando jQuery ou não. É um bom lugar para você começar a comparar diferentes tipos de implementação. <a href="http://www.slideshare.net/mathiasbynens/using-jsperf-correctly">Esta apresentação</a> dá dicas e ensina a utilizar a ferramenta.</p>
<p>Você também pode (e deve) utilizar a aba profile do Firebug e/ou do Chrome Developer Tools. <a href="http://michaelsync.net/2007/09/10/firebug-tutorial-logging-profiling-and-commandline-part-ii">Aqui</a> tem um tutorial antigo, mas bacana, sobre o Firebug e <a href="http://www.youtube.com/watch?v=OxW1dCjOstE">aqui</a> você encontra um tutorial sobre o Chrome Developer Tools.</p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/entendendo-os-reflows-2/" title="Entendendo os Reflows">Entendendo os Reflows</a></li><li><a href="http://tableless.com.br/melhorando-performance-css/" title="Performance do seu CSS">Performance do seu CSS</a></li><li><a href="http://tableless.com.br/jquery-metodos-desconhecidos/" title="jQuery: métodos desconhecidos">jQuery: métodos desconhecidos</a></li><li><a href="http://tableless.com.br/20-plugins-jquery-que-marcaram-2011/" title="20 plugins jQuery que marcaram 2011">20 plugins jQuery que marcaram 2011</a></li><li><a href="http://tableless.com.br/testando-seu-codigo-jquery-com-jasmine-parte-1/" title="Testando seu código jQuery com Jasmine &#8211; Parte 1">Testando seu código jQuery com Jasmine &#8211; Parte 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/jquery-dicas-de-otimizacao-e-performance/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Declarando idiomas no HTML</title>
		<link>http://tableless.com.br/declarando-idiomas-no-html/</link>
		<comments>http://tableless.com.br/declarando-idiomas-no-html/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 10:00:42 +0000</pubDate>
		<dc:creator>Diego Eis</dc:creator>
				<category><![CDATA[Acessibilidade]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Na Prática]]></category>
		<category><![CDATA[2012]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[usabilidade]]></category>

		<guid isPermaLink="false">http://tableless.com.br/?p=5052</guid>
		<description><![CDATA[O conteúdo online pode ser acessado no mundo inteiro, não importa seu idioma. Para tanto o idioma deve ser declarado corretamente para que os meios de acesso entreguem o conteúdo da melhor forma possível.]]></description>
			<content:encoded><![CDATA[<p>Publicar conteúdo na web definitivamente não é a mesma coisa da publicação de conteúdo nos meios impressos. Quando imprimimos o conteúdo, temos como foco um determinado público de uma determinada região. Eu, estando no Brasil, não vou fazer uma revista em no idioma Japonês. Quando falamos publicação de conteúdo online a coisa muda de cenário. O conteúdo online pode ser acessado no mundo inteiro, não importa seu idioma. Obviamente se você conhece outros idiomas, você amplia suas possibilidades para encontrar conteúdo e novos sites. </p>
<p>Os desenvolvedores do mundo inteiro juntamente com os fabricantes de browsers e outros interessados, querem ter certeza que os navegadores, robôs de busca, leitores de tela e outros sistemas detectem da forma ideal o idioma correto.</p>
<p>A declaração do idioma no código HTML não determina a informação no <a href="http://tableless.com.br/charsets-e-encodes-tabelas-de-caracteres/" title="Charsets e Encodes – Tabelas de caracteres">encoding de caractére do texto</a> nem a direção de leitura do texto em outros idiomas. Essas definições precisam ser declaradas separadamente.</p>
<p>Nós precisamos definir o idioma por alguns motivos:</p>
<ul>
<li>Melhor pronunciação do texto em leitores de tela. </li>
<li>Para que os buscadores possam indexar o website no buscador do respectivo idioma. Por exemplo: não tem sentido o Google ranqueear muito bem um site em português no Google americano.</li>
<li>Selecionar as fonts corretas para mostrar na tela. Nesse caso para idiomas como Chinês.</li>
<li>Para que os browsers escolham o dicionário correto para a correção gramatical nativa em textos e formulários.</li>
<li>Renderizar a página rapidamente &#8211; o browser carrega o documento mais rápido quando o browser sabe qual o idioma nativo.</li>
</ul>
<h3>Definindo o idioma padrão do documento</h3>
<p>Existem algumas maneiras que você pode definir o idioma padrão no documento exibido ou em partes do texto para aqueles termos em idiomas diferentes.</p>
<p>Podemos definir diretamente via metatag nativa:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Language&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br&quot;</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Pela Metatag podemos definir vários valores no atributo content:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Language&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br, en, fr, it&quot;</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Via <strong>HTTP Header</strong>:</p>
<div class="codecolorer-container text mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">HTTP/1.1 200 OK<br />
Date: Fri, 30 Dez 2011 10:46:04 GMT<br />
Server: Apache/1.3.28 (Unix) PHP/4.2.3<br />
Content-Location: CSS2-REC.en.html<br />
Vary: negotiate,accept-language,accept-charset<br />
TCN: choice<br />
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml<br />
Cache-Control: max-age=21600<br />
Expires: Wed, 05 Nov 2003 16:46:04 GMT<br />
Last-Modified: Tue, 12 May 1998 22:18:49 GMT<br />
ETag: &quot;3558cac9;36f99e2b&quot;<br />
Accept-Ranges: bytes<br />
Content-Length: 10734<br />
Connection: close<br />
Content-Type: text/html; charset=utf-8<br />
Content-Language: pt-br</div></td></tr></tbody></table></div>
<p>Via atributo <strong>lang</strong> nos elementos do HTML.</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/p.html"><span style="color: #000000; font-weight: bold;">p</span></a>&gt;</span>Nós utilizamos o <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>mouse<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span> para navegar na <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>web<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span> por meios dos <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;en&quot;</span>&gt;</span>browsers<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span>.</div></td></tr></tbody></table></div>
<p>Assim indicamos, principalmente para os leitores de tela, quais termos ele deve ler com o idioma nativo do termo.</p>
<p>Temos o costume de indicar o atributo <strong>lang</strong> no elemento <strong>html</strong> logo no início do documento para indicar que todo o conteúdo contido dentro do <strong>html</strong> está escrito em um determinado idioma.</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00bbdd;">&lt;!DOCTYPE html&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pt-br&quot;</span>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Título<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<h3>Ordem de herança</h3>
<p>Os meios de acesso, normalmente browsers, seguem esses passos de verificação para identificar o idioma:</p>
<ol>
<li>Verifica se elemento HTML que tem o atributo <strong>lang</strong>, se não,</li>
<li>Verifica se pai mais próximo ao termo que tenha o atributo <strong>lang</strong>, se não,</li>
<li>Verifica se o documento tem a metatag definida &lt;meta http-equiv=&#8221;content-language&#8221; content=&#8221;pt-br&#8221;&gt;, se não,</li>
<li>Verifica se o HTTP Header Content-Language tem uma tag de idioma definido. Se não,</li>
<li>O idioma é tratado como não reconhecido.</li>
</ol>
<p>O W3C recomenda que você sempre utilize o <strong>lang</strong> no elemento <strong>html</strong> para definir o idioma padrão de todo o conteúdo e também em todo o termo encontrado no texto com idioma diferente do definido como padrão.</p>
<p>Declarações de idioma baseados nestes atributos são importantes para a maioria das aplicações web hoje, que vão desde as <a href="http://br.mozdev.org/firefox/ortografia">corretores ortográficos</a> embutidos diretamente nos browsers até leitores de telas que interpretam as páginas web, etc etc.</p>
<p>Estas possibilidades são interessantes para que possamos globalizar ainda mais nossos projetos. Imagine por exemplo um website que ensina Russo para Chineses. É interessante que possamos marcar os termos dos dois idiomas de forma que os mecanismos trabalhem adequadamente em diversos meios de acesso. Os browsers precisam identificar quando o texto está em Russo ou quando está em Chinês. Os buscadores também precisam entender essa diferença, bem como os leitores de tela.</p>
<p>Aos poucos vamos padronizando características que antes eram ignoradas no desenvolvimento web. Não são ações muito difíceis de aplicar. Para começar, basta colocar o atributo <strong>lang</strong> no elemento <strong>html</strong> dos seus documentos e pronto.</p>
<h5>Referências</h5>
<p>Artigo que <a href="http://tableless.com.br/charsets-e-encodes-tabelas-de-caracteres/" title="Charsets e Encodes – Tabelas de caracteres">explica os Charsets, encodes e tabelas de caractéres no HTML</a>.</p>
<p>Veja aqui a <a href="http://www.w3.org/TR/i18n-html-tech-lang/">documentação oficial do W3C</a> que fala sobre este assunto.</p>
<p>O W3Schools tem aqui uma <a href="http://www.w3schools.com/tags/ref_language_codes.asp">listagem dos códigos de idioma</a> que podem usados. </p>
<h3  class="related_post_title">Posts Relacionados</h3><ul class="related_post"><li><a href="http://tableless.com.br/guia-de-referencia-de-html5/" title="Guia de Referência de HTML5">Guia de Referência de HTML5</a></li><li><a href="http://tableless.com.br/ah-o-maravilhoso-mundo-real/" title="Ah, o maravilhoso mundo real">Ah, o maravilhoso mundo real</a></li><li><a href="http://tableless.com.br/experiencia-deve-ter-comeco-meio-e-fim/" title="Experiência deve ter começo, meio e fim">Experiência deve ter começo, meio e fim</a></li><li><a href="http://tableless.com.br/section-elemento-article/" title="Section: elemento article – Parte 4">Section: elemento article – Parte 4</a></li><li><a href="http://tableless.com.br/sections-html5/" title="Sections: seções do HTML5 – Parte 1">Sections: seções do HTML5 – Parte 1</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://tableless.com.br/declarando-idiomas-no-html/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

