<?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>Destaque &#8211; Turbosite &#8211; Blog</title>
	<atom:link href="https://www.turbosite.com.br/blog/tag/destaque/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.turbosite.com.br/blog</link>
	<description></description>
	<lastBuildDate>Mon, 15 Dec 2014 12:01:44 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://www.turbosite.com.br/blog/wp-content/uploads/2026/09/cropped-logo_turbo_vermelha-32x32.png</url>
	<title>Destaque &#8211; Turbosite &#8211; Blog</title>
	<link>https://www.turbosite.com.br/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como mostrar antes e depois de uma foto com WordPress</title>
		<link>https://www.turbosite.com.br/blog/como-mostrar-antes-e-depois-de-uma-foto-com-wordpress/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Mon, 15 Dec 2014 12:01:44 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[comparar 2 fotos]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[efeito comparativo de foto]]></category>
		<category><![CDATA[foto antes e depois]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3945</guid>

					<description><![CDATA[Saiba como fazer uma apresentação elegante de uma foto com seu antes e depois de forma profissional. Com dois pequenos passos você criará um efeito incrível.]]></description>
										<content:encoded><![CDATA[<p>Saiba como fazer uma apresentação elegante de uma foto com seu antes e depois de forma profissional. Muitas das vezes, as pessoas colocam duas imagens lado a lado para fazer este comparativo, mas se isto fosse interativo e totalmente auto suficiente, sem a necessidade de fazer montagens em Photoshop ou qualquer outro software? Esta dica vem trazer um plugin do WordPress e sua utilização para aplicar este incrível efeito.</p>
<p>Primeiro, precisar instalar o plugin <a title="TwentyTwenty" href="https://wordpress.org/plugins/twentytwenty/" target="_blank" rel="nofollow">TwentyTwenty</a>.</p>
<p>Depois, faça upload das imagens para seu site, pode ser por pelo gerenciamento de Mídia ou pela inserção de imagens nos posts. Com as duas imagens no servidor, é necessária pegar o link de cada uma, copie e cole em um arquivo a parte para ficar mais fácil.</p>
<p>Agora, basta editar ou inserir um post, no campo de edição, vamos utilizar o shortcode <code>[TwentyTwenty][/ TwentyTwenty]</code>.</p>
<blockquote><p>Certifique-se que ambas as fotos tenham as mesmas dimensões.</p></blockquote>
<p>Com tudo pronto, vamos inserir o pequeno código para gerar o efeito.</p>
<pre class="lang:php decode:true">[twentytwenty]
&lt;img src="/wp-content/uploads/2014/12/batons-vermelhos-antes.jpg" alt="Antes" width="100%" height="350"/&gt;
&lt;img src="/wp-content/uploads/2014/12/batons-vermelhos-depois.jpg" alt="Depois" width="100%" height="350"/&gt;
[/twentytwenty]</pre>
<p>Explicação do código:</p>
<p class="lang:php decode:true ">[twentytwenty] e [/twentytwenty] são a abertura e fechamento das tags que formaram os efeitos.</p>
<p class="lang:php decode:true ">As imagens são, a 1ª o antes e a 2ª o depois.</p>
<p>1ª &#8211; /wp-content/uploads/2014/12/batons-vermelhos-antes.jpg<br />
2ª &#8211; /wp-content/uploads/2014/12/batons-vermelhos-depois.jpg</p>
<p>&nbsp;</p>
<p>Agora que já sabe como utilizar, vamos criar o efeito.</p>
<p>[twentytwenty]<br />
<img decoding="async" src="/wp-content/uploads/2014/12/batons-vermelhos-antes.jpg" alt="Antes" width="100%" height="350" /><br />
<img decoding="async" src="/wp-content/uploads/2014/12/batons-vermelhos-depois.jpg" alt="Depois" width="100%" height="350" /><br />
[/twentytwenty]</p>
<p>&nbsp;</p>
<p>Conforme você deslizar o seletor, verá que a imagem é sobreposta de acordo com sua necessidade, tornando visível e fácil de comparar, o &#8220;<strong>Before</strong>&#8221; e &#8220;<strong>After</strong>&#8221; somem de acordo que é feito o deslizamento.</p>
<p>Isso é tudo. Esperamos que este artigo tenha ajudado a você aprender a mostrar o antes e depois de uma foto em seu site WordPress.  Se você gostou deste artigo, também visite no link no <a href="https://www.facebook.com/Turbosite">Facebook</a> e <a href="https://plus.google.com/+TurbositeBrasil">Google+</a>, há diversas publicações interessantes.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Esqueceu o Facebook aberto em algum lugar? Saiba o que fazer</title>
		<link>https://www.turbosite.com.br/blog/esqueceu-o-facebook-aberto-em-algum-lugar-saiba-o-que-fazer/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Thu, 04 Dec 2014 11:48:09 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Mídias Sociais]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[facebook aberto]]></category>
		<category><![CDATA[fechar facebook remoto]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3871</guid>

					<description><![CDATA[Quem já precisou fechar o Facebook em um computador remoto? Seja por esquecimento,  segurança, namorada(o) ou qualquer outro motivo. Veja como não passar por isto mais.]]></description>
										<content:encoded><![CDATA[<p>Quem já precisou fechar o Facebook em um computador remoto? Seja por esquecimento,  segurança, namorada(o) ou qualquer outro motivo. Frequentadores de Lan House sempre passam por isso, mas, existe uma solução muito simples pra este tipo de problema.</p>
<p>Não apenas o Facebook, mas o Gmail, Twitter, Dropbox também possuem ferramentas para este tipo de ocasião, você pode e deve deslogar remotamente caso não for utilizar o serviço daquele computador mais.</p>
<p style="text-align: left;">O procedimento é muito simples, basta seguir os passos abaixo:</p>
<p style="text-align: left;">Primeiro, clique em <strong>Configurações</strong>:</p>
<p style="text-align: left;"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-3874" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-01-turbosite-facebook.jpg" alt="passo-01-turbosite-facebook" width="1000" height="500" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-01-turbosite-facebook.jpg 1000w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-01-turbosite-facebook-300x150.jpg 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-01-turbosite-facebook-768x384.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p style="text-align: left;">Depois clique na opção <strong>Segurança</strong>:</p>
<p style="text-align: left;"><img decoding="async" class="alignnone size-full wp-image-3875" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-02-turbosite-facebook.jpg" alt="passo-02-turbosite-facebook" width="1000" height="500" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-02-turbosite-facebook.jpg 1000w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-02-turbosite-facebook-300x150.jpg 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-02-turbosite-facebook-768x384.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p style="text-align: left;">Clique na opção editar na linha <strong>Onde você está conectado</strong>:</p>
<p style="text-align: left;"><img decoding="async" class="alignnone size-full wp-image-3876" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-03-turbosite-facebook.jpg" alt="passo-03-turbosite-facebook" width="1000" height="500" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-03-turbosite-facebook.jpg 1000w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-03-turbosite-facebook-300x150.jpg 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-03-turbosite-facebook-768x384.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p style="text-align: left;">Agora é fácil, basta clicar em <strong>Encerrar atividade</strong>, como mostra o destaque. Desta forma, qualquer computador remoto perderá a validade do login e assim, solicitando senha e usuário novamente.</p>
<p style="text-align: left;"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3877" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-04-turbosite-facebook.jpg" alt="passo-04-turbosite-facebook" width="1000" height="500" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-04-turbosite-facebook.jpg 1000w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-04-turbosite-facebook-300x150.jpg 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/passo-04-turbosite-facebook-768x384.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></p>
<p style="text-align: left;">Esta é uma dica simples, mas muito efetiva. Melhor se prevenir e evitar dores de cabeça. Compartilhe esta dica a seus amigos, eles também podem precisar.</p>
<p style="text-align: left;">Dicas e sugestões, deixem nos comentários.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dê um Tuning em suas Fontes com Ícones</title>
		<link>https://www.turbosite.com.br/blog/de-um-tuning-em-suas-fontes-com-icones/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Wed, 03 Dec 2014 12:04:36 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Fontes]]></category>
		<category><![CDATA[compactar fonte]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[otimizacao de fonte]]></category>
		<category><![CDATA[tuning css]]></category>
		<category><![CDATA[tuning font]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3865</guid>

					<description><![CDATA[Boa parte dos Designers acabam por não utilizar 80% de recursos dos ícones de uma fonte, exemplo a Font Awesome. Então, vamos otimizar e entregar apenas o que o usuário precisa!]]></description>
										<content:encoded><![CDATA[<p>Boa parte dos Designers acabam por não utilizar 80% de recursos dos ícones de uma fonte, exemplo a <a href="http://fortawesome.github.io/Font-Awesome/">Font Awesome</a>. São tantos ícones, que normalmente vamos utilizar uns 10 a 15, ficando então mais de 400 sem utilizar.</p>
<p>Porque não otimizar? Diminuir o tamanho do arquivo e entregar ao usuário apenas o que ele precisa é primordial, tanto que até o Google leva este requesito em consideração na hora de rankear o seu site.</p>
<p>A maneira mais fácil que encontramos é utilizando o recurso do site <a href="http://fontello.com/">Fontello</a>. Neste site você seleciona os ícones que deseja e depois faz download da Font compilada e otimizada, simples, rápido e fácil.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-3866" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/escolhendo-as-fontes-dica-turbosite-1024x581.jpg" alt="escolhendo-as-fontes-dica-turbosite" width="680" height="385" /></p>
<p>&nbsp;</p>
<p>Após fazer o download, sua utilização é extremamente simples, basta inserir os arquivos em seu site e utilizar a nova fonte.</p>
<p>&nbsp;</p>
<p>Código de exemplo de inserção dos arquivos:</p>
<pre class="lang:php decode:true">&lt;link rel="stylesheet" href="css/fontello.css"&gt;
&lt;link rel="stylesheet" href="css/animation.css"&gt;
&lt;!--[if IE 7]&gt;&lt;link rel="stylesheet" href="css/fontello-ie7.css"&gt;&lt;![endif]--&gt;</pre>
<p>&nbsp;</p>
<p>Depois inserir os ícones desejados:</p>
<pre class="lang:php decode:true">&lt;i class="icon-emo-wink"&gt;&lt;/i&gt;
&lt;i class="icon-emo-thumbsup"&gt;
&lt;i class="icon-vkontakte"&gt;&lt;/i&gt;
&lt;i class="icon-level-down"&gt;&lt;/i&gt;</pre>
<p>&nbsp;</p>
<p>Veja o exemplo que o Fontello nos entrega ao efetuar download da fonte compilada:</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-3867 size-full" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/fontello.jpg" alt="fontello" width="1254" height="255" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/fontello.jpg 1254w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/fontello-300x61.jpg 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/fontello-1024x208.jpg 1024w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/12/fontello-768x156.jpg 768w" sizes="auto, (max-width: 1254px) 100vw, 1254px" /></p>
<p>&nbsp;</p>
<p>Tudo muito simples, desta forma você e seu usuário serão beneficiados.  Alguma dica ou sugestão? Deixe nos comentários!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Incríveis Animações com CSS</title>
		<link>https://www.turbosite.com.br/blog/incriveis-animacoes-com-css/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Fri, 28 Nov 2014 12:47:45 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[animacao css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[dica turbosite]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3839</guid>

					<description><![CDATA[Com este plugin de CSS, você poderá animar sua página de forma profissional e encantadora. Dê dinamismo e ao mesmo tempo um toque sutil de modernidade ao seu site.]]></description>
										<content:encoded><![CDATA[<p>Esta postagem é baseada na página <a href="http://www.justinaguilar.com/animations/index.html#how">Justinaguilar</a>. Com este plugin CSS, você poderá animar suas páginas de forma profissional e encantadora.&nbsp;Vale a pena conferir.</p>
<p>A forma de utilizar é muito simples, basta adicionar o arquivo css animation e inserir a classe ao objeto que deve ser animado, exemplo:</p>
<p>Inserção do CSS das animações:</p>
<pre class="lang:xhtml decode:true">&lt;link rel="stylesheet" href="css/animations.css"&gt;</pre>
<p>Adicionando classe ao objeto que será animado:</p>
<pre class="lang:php decode:true">&lt;div id="object" class="slideUp"&gt;</pre>
<p>Abaixo você pode conferir o resultado das animações, clique nos links para ver os diversos efeitos:</p>
<p><iframe loading="lazy" src="//jsfiddle.net/pv4zg3sw/2/embedded/result/" width="100%" height="500" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>CSS:<br />
<iframe loading="lazy" src="//jsfiddle.net/pv4zg3sw/2/embedded/css/" width="100%" height="500" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Javascript:<br />
<iframe loading="lazy" src="//jsfiddle.net/pv4zg3sw/2/embedded/js/" width="100%" height="500" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Html:<br />
<iframe loading="lazy" src="//jsfiddle.net/pv4zg3sw/2/embedded/html/" width="100%" height="500" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>Para fazer com que a animação seja ativada quando o usuário ver o item, você deve colocar este código em Javascript e css, sendo que, deve ser carregado o Jquery antes:</p>
<p>CSS:</p>
<pre class="lang:css decode:true ">#object{
	background-color: #fe5652;
	visibility: hidden;
}</pre>
<p>JS:</p>
<pre class="lang:js decode:true ">&lt;script&gt;
	$(window).scroll(function() {
		$('#animatedElement').each(function(){
		var imagePos = $(this).offset().top;

		var topOfWindow = $(window).scrollTop();
			if (imagePos &lt; topOfWindow+400) {
				$(this).addClass("slideUp");
			}
		});
	});
&lt;/script&gt;</pre>
<p>Para ver o exemplo, acessem este <a href="http://www.justinaguilar.com/animations/scrolling.html">LINK</a>.</p>
<p>Esperamos que tenham gostado e aprendido, dúvidas e sugestões deixem nos comentários, isto incentiva-nos a sempre compartilhar conhecimento cada vez mais!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mysql &#8211; NATURAL JOIN – Joins mais fáceis</title>
		<link>https://www.turbosite.com.br/blog/mysql-natural-join-joins-mais-faceis/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Thu, 27 Nov 2014 13:34:54 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[natural join]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3834</guid>

					<description><![CDATA[Esta dica é para facilitar algumas consultas no banco de dados. O Mysql tem suporte ao NATURAL Join o que facilita muito as querys.]]></description>
										<content:encoded><![CDATA[<p>Esta dica é para facilitar algumas consultas no banco de dados. O Mysql tem suporte ao NATURAL Join o que facilita muito as querys.</p>
<p>Vamos supor que temos 2 tabelas relacionadas, clientes e telefones. O cliente tem a seguinte estrutura:</p>
<pre class="lang:mysql decode:true">CREATE TABLE `clients` (
  `idClients` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(150) DEFAULT NULL,
  PRIMARY KEY (`idClients`)
)
insert  into `clients`(`name`) values ('Turbosite');</pre>
<p>&nbsp;</p>
<p>Note que no final inserimos um usuário para nosso teste.</p>
<p>A tabela de telefones ficaria desta forma:</p>
<pre class="lang:php decode:true">CREATE TABLE `phones` (
  `idPhones` int(11) NOT NULL AUTO_INCREMENT,
  `number` char(20) NOT NULL,
  `idClients` int(11) NOT NULL,
  PRIMARY KEY (`idPhones`,`idClients`),
  KEY `idClients` (`idClients`),
  CONSTRAINT `phones_ibfk_1` FOREIGN KEY (`idClients`) REFERENCES `clients` (`idClients`)
)
insert  into `phones`(`number`,`idClients`) values ('(31) 4003-2322',1);
insert  into `phones`(`number`,`idClients`) values ('(31) 3261-2168',1);</pre>
<p>&nbsp;</p>
<p>Sem utilizar o NATURAL Join, a consulta para pegar os telefones de um cliente seria da seguinte forma:</p>
<pre class="lang:php decode:true">SELECT C.`name`,P.`number` FROM clients C
INNER JOIN phones P
ON C.`idClients` = P.`idClients`
WHERE C.`idClients` = 1</pre>
<p>&nbsp;</p>
<p>Resultado seria:</p>
<table border="1">
<tbody>
<tr>
<td class="medium" bgcolor="silver">name</td>
<td class="medium" bgcolor="silver">number</td>
</tr>
<tr>
<td class="normal" valign="top">Turbosite</td>
<td class="normal" valign="top">(31) 4003-2322</td>
</tr>
<tr>
<td class="normal" valign="top">Turbosite</td>
<td class="normal" valign="top">(31) 3261-2168</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Agora com o Natural JOIN, a consulta seria:</p>
<pre class="lang:mysql decode:true">SELECT * FROM clients
NATURAL JOIN phones
WHERE idClients = 1</pre>
<p>O resultado da pesquisa:</p>
<table border="1">
<tbody>
<tr>
<td class="medium" bgcolor="silver">idClients</td>
<td class="medium" bgcolor="silver">name</td>
<td class="medium" bgcolor="silver">idPhones</td>
<td class="medium" bgcolor="silver">number</td>
</tr>
<tr>
<td class="normal" valign="top">1</td>
<td class="normal" valign="top">Turbosite</td>
<td class="normal" valign="top">5</td>
<td class="normal" valign="top">(31) 4003-2322</td>
</tr>
<tr>
<td class="normal" valign="top">1</td>
<td class="normal" valign="top">Turbosite</td>
<td class="normal" valign="top">6</td>
<td class="normal" valign="top">(31) 3261-2168</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>O Natural JOIN é inteligente o suficiente para não acusar erro por ambiguidade de coluna, como uma faz referência a outra, ele não lista em duplicidade as colunas de referência.<br />
A consulta fica mais limpa, mais fácil de entender e de dar manutenção, caso esta tabela fizesse referência a uma 3ª tabela, era só adicionar uma linha ficando desta forma:</p>
<pre class="lang:php decode:true">SELECT * FROM clients
NATURAL JOIN phones
NATURAL JOIN tabela3
WHERE idClients = 1</pre>
<p>&nbsp;</p>
<p>Vamos deixar aqui um link com uma apresentação de JOINS do MYSQL. É interessante ver e aprender para tomar a melhor decisão no desenvolvimento de seus projetos.</p>
<p><a href="http://w3resource.com/gallery/mysql-joins-slides-presentation">http://w3resource.com/gallery/mysql-joins-slides-presentation</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Melhore o tráfego na página inicial do seu site</title>
		<link>https://www.turbosite.com.br/blog/melhore-o-trafego-na-pagina-inicial-do-seu-site/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Wed, 26 Nov 2014 15:25:30 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[como fazer sites]]></category>
		<category><![CDATA[construcao de sites]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[sites]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3828</guid>

					<description><![CDATA[A página inicial de seu site é o tapete de entrada para sua empresa e para atrair visitantes, ela deve estar perfeita. Confira 5 dicas para sua construção.
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="339" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/11/Melhore-o-trafego-na-pagina-inicial-do-seu-site.png" alt="" class="wp-image-3832" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/11/Melhore-o-trafego-na-pagina-inicial-do-seu-site.png 650w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/11/Melhore-o-trafego-na-pagina-inicial-do-seu-site-300x156.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<p class="wp-block-paragraph">A página inicial de seu site, provavelmente, é a&nbsp;página mais importante de todo seu domínio.&nbsp;Ela é o primeiro contato do visitante com seu site, o tapete de boas vindas para sua empresa.&nbsp;É por meio dela que o visitante vai decidir se explora o site ou se vai embora. E para conseguir o maior público possível, ela tem de estar perfeita.</p>



<p class="wp-block-paragraph">Ao acessar o <a href="https://www.turbosite.com.br/construtor-de-sites">construtor de sites</a> da <a href="https://www.turbosite.com.br/">Turbosite</a>, a sua primeira interação vai ser com construção da página inicial. Todos nossos&nbsp;<em>Templates</em>&nbsp;já&nbsp;modelam&nbsp;uma ideia de localização e conteúdos que você pode colocar nessa página, o que já ajuda bastante a dar seus primeiros passos. Porém, tudo isso ainda não é o bastante para transmitir uma&nbsp;identidade única para seu site.</p>



<p class="wp-block-paragraph">A equipe da <a href="https://www.turbosite.com.br/">Turbosite</a>&nbsp;retirou da página da&nbsp;<a href="https://www.upinside.com.br/artigo/5-dicas-para-melhorar-o-trafego-e-a-navegacao-na-pagina-inicial-do-seu-site">UpInside</a>&nbsp;5 dicas para a construção da página inicial. A seguir você confere estratégias interessantes, que buscam&nbsp;manter o visitante mais tempo em sua página e atraí-lo para navegar por outros conteúdos de seu site.</p>



<h3 class="wp-block-heading">1) Sirva conteúdo de qualidade</h3>



<p class="wp-block-paragraph">Existe uma falsa ideia na internet que temos que servir muito conteúdo diariamente em nossos sites. Mas até que ponto isso é promissor? Será que vale tudo para atrair mais usuários ao site? E ainda, será que esse tipo de estratégia é sustentável?</p>



<p class="wp-block-paragraph">A dica aqui é, vale mais 100 posts de qualidade do que 1000 posts mais ou menos. E a ideia é bem simples.</p>



<p class="wp-block-paragraph">Todo site é construído com um nicho&nbsp;de mercado específico. Quando recebemos nossos usuários, <strong>eles entram em nosso site por um link de interesse.</strong> Pesquisa, indicação, social. Seja qual for a origem do tráfego, ele entrou procurando algo.</p>



<p class="wp-block-paragraph">Se tivermos 100 posts dentro do site que forneçam conteúdo atrativo para esse usuário, a chance de navegação por mais conteúdo é bem maior. Com links de relação ou mais vistos você consegue servir mais conteúdo de interesse.</p>



<p class="wp-block-paragraph">Ainda por ter menos posts e com mais qualidade, seu usuário vai consumir o conteúdo em menos tempo, vai aproveitar melhor esse conteúdo e ter uma experiência agradável.</p>



<p class="wp-block-paragraph">Agora, se você tiver 1000 posts e entre eles 100 posts de primeira. A chance deste usuário bater em um conteúdo sem relevância antes de criar um vínculo é bem maior. O resultado? Talvez seu usuário saia e não volte mais.</p>



<p class="wp-block-paragraph">Claro que a frequência também é importante. Afinal é muito raro você ler a mesma coisa 2 ou 3 vezes. Mas vale mais 1 post bom por semana, que 7 ganchos de conteúdo sem qualificação para seus prospectos.</p>



<p class="wp-block-paragraph">Claro, se você tiver 1000 <strong>posts de primeira</strong> a conversão e&nbsp;ranqueamento&nbsp;são bem maiores.</p>



<h3 class="wp-block-heading">2)&nbsp;Desperte o interesse sem entregar o conteúdo</h3>



<p class="wp-block-paragraph">Estamos falando de página inicial, que é o link de entrada para seu conteúdo. Essa página deve ser tratada como uma capa. Sua função é exibir as atualizações e entregar valor e interesse ao seu usuário. Não o conteúdo!</p>



<p class="wp-block-paragraph">Procure aqui servir uma boa hierarquia de conteúdo. Crie uma vitrine de seus posts e exiba apenas o essencial. Uma capa, um título e uma pequena descrição com links de acesso intuitivos para que o usuário navegue em seu site.</p>



<p class="wp-block-paragraph">Sites que mostram muito na capa tendem a ter maior rejeição e menos ranqueamento no Google. Isso acontece porque o motor entende que se o usuário não navegou é porque não gostou do que viu ou não encontrou o que o link propôs.</p>



<p class="wp-block-paragraph">Também procure não servir muitos posts. Eu diria para você ficar entre 7 e 10 atualizações. Isso é importante pois esses posts terão seu rodízio. A medida que você posta novidades você está alterando o visual da capa.</p>



<p class="wp-block-paragraph"><em>Isso é importante para que o usuário tenha sempre um impacto diferente ao acessar seu site.</em></p>



<h3 class="wp-block-heading">3) Nada é de graça, pague pela interação</h3>



<p class="wp-block-paragraph">Essa dica é simples e muito importante para que seu site tenha realmente conversões positivas em servir links de compartilhamento, curtidas e tudo mais. <strong>A interação não deve ser requisitada e sim remunerada.</strong></p>



<p class="wp-block-paragraph">Sua moeda aqui é o conteúdo. Então não faz sentido você servir Plugins de curtidas ou compartilhamento na página inicial do site. A não ser que você crie sua share box e consiga colocar esses links dentro do contexto do layout.</p>



<p class="wp-block-paragraph">Mas no geral pense assim. Porque um usuário iria compartilhar ou curtir qualquer coisa antes de realmente gostar (curtir) daquilo? Então a página inicial do seu site não serve para pedir interações. Isso deve ser feito depois de entregar o conteúdo.</p>



<p class="wp-block-paragraph">Mas claro, a página inicial pode fornecer prova social. Então em vez de servir uma ação de curtir, prefira servir uma box mostrando quantas pessoas já curtiram sua página. Isso gera engajamento com seu usuário.</p>



<p class="wp-block-paragraph">A melhor prova social hoje é o like box do Facebook. Pois ele mostra (quando ocorre) os seus amigos que já curtiram aquilo e isso é uma grande prova social. Se seu amigo gosta você aumenta a confiança do usuário no site.</p>



<h3 class="wp-block-heading">4) Evite tirar seu usuário do site</h3>



<p class="wp-block-paragraph">A página inicial do site tem por conquista a maior relevância para links. É como se fosse nosso MAPA do projeto. Sabemos naturalmente que a home foi construída para indicar o conteúdo do site. Nos levar até os melhores, mais vistos e últimos posts do mesmo.</p>



<p class="wp-block-paragraph">Nosso comportamento? Qualquer usuário que entre em um site pela página inicial procura links para clicar! Um caminho ou direção para chegar até um conteúdo que procura. Sem falar na pesquisa interna.</p>



<p class="wp-block-paragraph">Então é muito importante que você <strong>evite links externos na página inicial.</strong> E esses links podem estar em banners do AdSense, parceiros, entre outros. Se seu usuário sair do site logo que acessa a página inicial, sua taxa de rejeição aumenta imediatamente.</p>



<h3 class="wp-block-heading">5) Monitore o comportamento</h3>



<p class="wp-block-paragraph">Existem várias formas de você monitorar o comportamento dos seus usuários. O GA (Google Analytics) é a melhor e mais completa ferramenta para isso.</p>



<p class="wp-block-paragraph">Com o monitoramento correto você consegue saber muito mais do seu público. Monitorando a pesquisa por exemplo. Você consegue saber com precisão o que cada usuário procura dentro do seu site. Com isso você pode saber sobre o que escrever no futuro.</p>



<p class="wp-block-paragraph">Você também pode criar vários funis dentro do GA. Criando um passo a passo de URL, um link de entrada ou até um destino, e assim saber quantos usuários estão convertendo aquele objetivo. Assim você pode melhorar ainda mais a experiência deste usuário&nbsp;nesse quesito.</p>



<p class="wp-block-paragraph">Por fim, você ainda pode criar alertas de tráfego. Quantos % melhorou com relação ao dia, mês, semana anterior&nbsp;entre outros. Assim quando você posta um novo título ou cria alguma estratégia diferente. Você consegue saber se aquilo deu certo ou não.</p>



<p class="wp-block-paragraph">Isso funciona para o site em um todo. Mas veja que é possível saber se sua página inicial está conseguindo essas conversões. Monitorar os links e saber se está realmente intuitivo para o usuário navegar a partir dela.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como escrever o &#8220;Quem somos&#8221; de seu site</title>
		<link>https://www.turbosite.com.br/blog/como-escrever-o-quem-somos-de-seu-site/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Tue, 11 Nov 2014 12:25:01 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[E-commerce]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Artigo e-commerce]]></category>
		<category><![CDATA[como fazer sites]]></category>
		<category><![CDATA[construcao de sites]]></category>
		<category><![CDATA[Destaque]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3722</guid>

					<description><![CDATA[Uma das melhores maneiras de conhecer o trabalho desenvolvido por uma empresa é por meio do link “Quem Somos”. Negligenciar sua importância pode ser um erro.]]></description>
										<content:encoded><![CDATA[<p>Uma das melhores maneiras de conhecer o trabalho desenvolvido por uma empresa é por meio do link <strong>“Quem Somos”</strong>, disponível na página virtual do negócio. Lá é possível <strong>conhecer os valores e as missões do empreendimento</strong>, bem como clientes e projetos realizados pela empresa. Além disso, é possível compreender a história do negócio e dos próprios empreendedores.</p>
<p>Negligenciar a importância do seu conteúdo, acreditando que ele não é lido pelos visitantes do canal virtual, e investir apenas na parte visual do site pode ser um erro. Isso porque é por meio desse conteúdo que possíveis <strong>clientes</strong>,<strong> fornecedores </strong>e<strong> investidores</strong> aprenderão sobre a empresa e poderão decidir se fecham ou não o negócio.</p>
<p>Para dar um auxílio na hora em que for escrever o link “Quem Somos”, a equipe da <a href="https://www.turbosite.com.br/">Turbosite </a>compartilha com essa postagem algumas dicas retiradas do site de notícias <a href="http://www.jornaldoempreendedor.com.br/destaques/como-criar-um-bom-%E2%80%9Cquem-somos%E2%80%9D#.VGHk_jTF-4c">Jornal do Empreendedor</a>. Abaixo seguem essas dicas.</p>
<p>&nbsp;</p>
<h2><strong>1. Forneça informações básicas e curiosas do negócio</strong></h2>
<p>Detalhar como surgiu a empresa, quem são os empreendedores e quais os valores e objetivos do negócio não pode ser excluído desse espaço. É importante também mencionar se a empresa possui mais de uma sede. Para não deixar o texto extenso e cansativo, é interessante contar curiosidades da constituição da empresa e possíveis hobbies dos diretores do negócio. Isso permitirá que o leitor ganhe <strong>proximidade</strong> com a empresa.</p>
<p>&nbsp;</p>
<h2><strong>2. Mostre clientes e premiações da empresa</strong></h2>
<p>Para dar credibilidade ao negócio, é importante elencar nesse espaço os principais clientes e parceiros comerciais. A incorporação do logotipo dessas empresas na sua página pode ser um elemento interessante para o apelo visual. Mencionar prêmios e reconhecimentos recebidos pela empresa, bem como o trabalho de serviço comunitário e iniciativas sustentáveis, também ajudarão a tornar o negócio <strong>atraente</strong>.</p>
<p>&nbsp;</p>
<h2><strong>3. Invista nas mídias sociais</strong></h2>
<p>Agregar vídeos que mostrem a dinâmica da empresa é interessante para que o visitante crie proximidade com o negócio. Além disso, procure divulgar o link da sua página em <strong>redes sociais</strong> como Twitter, Orkut e Facebook. Caso a empresa ou o empreendedor possua um blog, é interessante divulgá-lo nesse espaço. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JavaScript IIFE como contêiner de códigos</title>
		<link>https://www.turbosite.com.br/blog/javascript-iife-como-conteiner-de-codigos/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Thu, 06 Nov 2014 13:21:07 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[IIFE]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3697</guid>

					<description><![CDATA[Nessa postagem, repassamos nosso conhecimento sobre JavaScript IIFE. Descubra o que é e por que é uma boa prática usá-la sempre que puder.]]></description>
										<content:encoded><![CDATA[<p>Encontramos uma postagem interessante sobre Javascript IIFE no blog <a href="http://desenvolvimentoparaweb.com/javascript/javascript-iife-conteiner-de-codigos/">Desenvolvimento Para Web</a>, que explica em muitos detalhes a sintaxe e as funcionalidades do IIFE. A equipe da <a href="https://www.turbosite.com.br/">Turbosite</a> repassa esse conhecimento para os leitores do nosso blog, com a postagem a seguir.</p>
<p>&nbsp;</p>
<p><strong>JavaScript puro</strong> ou <em>Vanilla JavaScript</em> (felizmente) está voltando. E com força. Mas, quando você decide continuar nos estudos e começa a inspecionar códigos alheios, inevitavelmente você se depara com algo como:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document, undefined) {
    //
})(window, document);</pre>
<p>E você encontra isso em diversos códigos; e vê outros desenvolvedores indicando; e colegas dizendo que esta é uma boa prática. Mas você sabe o que, realmente, isso significa? Continue lendo.</p>
<p>&nbsp;</p>
</div>
<p>Frequentemente desenvolvedores descobrindo (ou redescobrindo) o JavaScript puro se perguntam sobre <strong>IIFE</strong> (Expressão de Função Imediatamente Invocada ou <em>Immediately-Invoked Function Expression</em>), frequentemente apresentado da seguinte maneira:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document, undefined) {
    //
})(window, document);</pre>
<p>Na verdade, várias coisas estão acontecendo aí. Analisemos cada uma delas.</p>
<p>&nbsp;</p>
</div>
<h2>Escopo privado em IIFE</h2>
<p>JavaScript tem maneiras interessantes de trabalhar com escopo de função; então, primeiramente essa expressão cria um “âmbito privado” (private scope). Por exemplo:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document, undefined) {
    var name = 'Foo';
})(window, document);
console.log(name); // "name" não definido, está em um escopo diferente</pre>
<p>&nbsp;</p>
</div>
<h2>Como funciona IIFE</h2>
<p>Uma função normal se parece com isso:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">var logMyName = function (name) {
    console.log(name);
};
logMyName('Foo');</pre>
</div>
<p>Ela é chamada (<em>invoke</em>) quando necessário, por escolha do programador, em qualquer ponto do código em que se queira e/ou seja possível.</p>
<p>A razão pela qual essa <strong>IIFE em JavaScript</strong> foi criada, foi para ser uma expressão de função imediatamente invocada, o que significa que elas são imediatamente chamadas em tempo de execução – também, não é possível chamá-la novamente, já que elas só rodam uma vez, mais ou menos assim:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">var logMyName = (function (name) {
    console.log(name); // Todd
})('Todd');</pre>
<p>O pulo-do-gato aqui é isso (que já foi atribuído a uma variável no exemplo anterior):</p>
</div>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function () {
})();</pre>
</div>
<p>O par de parênteses extra é necessário. Isso não funciona:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">function () {
}();</pre>
<p>Embora existam vários truques que podem ser feitos para “enganar” o JavaScript e fazê-lo funcionar. Este, por exemplo, força o parser de JavaScript a tratar o código que segue <code>!</code> como uma expressão:</p>
</div>
<div class="wp_syntax">
<pre class="lang:js decode:true">!function () {
}();</pre>
<p>E existem variantes:</p>
</div>
<div class="wp_syntax">
<pre class="lang:js decode:true">+function () {
}();
 
-function () {
}();
 
~function () {
}();</pre>
</div>
<p>Mas não é preciso se forçar a decorar isso para usar a todo momento para fazer uma IIFE.</p>
<p>&nbsp;</p>
<h2>Argumentos da IIFE</h2>
<p>Agora que foi explicado como isso funciona, passemos para os argumento da IIFE:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window) {
})(window);</pre>
<p>Como isso funciona? Lembre-se, <code>(window);</code> é onde a função é chamada, e onde é passado o Objeto <code>window</code>. Então ele é passado para a função – que também foi chamada de <code>window</code>.</p>
</div>
<p>Então, o que mais é possível fazer? Passar tudo o que for necessário! Por exemplo, passar o Objeto <code>document</code>:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document) {
    // é possível usar "window" e "document" normalmente
})(window, document);</pre>
</div>
<p>A resolução de variáveis ​​locais é mais rápida que a de variáveis ​​globais, mas esta está numa escala enorme e dificilmente alguém vai perceber o aumento da velocidade – mas vale a pena considerar se há muitas referências a globais!</p>
<p>&nbsp;</p>
<h2>E sobre o <code>undefined</code>?</h2>
<p>Em ECMAScript 3, <code>undefined</code> é mutável. Isso significa que o valor poderia ser transferido com, por exemplo, <code>undefined = true;</code>…! Felizmente, no ECMAScript 5 em modo estrito (<code>'use strict';</code>) o parser lança um erro quando se depara com isso. Antes disso, começou-se a proteger uma IIFE da maneira já vista:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document) {
    // é possível usar "window" e "document" normalmente
})(window, document);</pre>
<pre class="lang:js decode:true">(function (window, document, undefined) {
})(window, document);</pre>
<p>O que significa que se alguém fizesse isso estaria tudo bem:</p>
</div>
<div class="wp_syntax">
<pre class="lang:js decode:true">undefined = true;
(function (window, document, undefined) {
    // "undefined" é uma variável local undefined
})(window, document);</pre>
<p>&nbsp;</p>
</div>
<h2>Minificando</h2>
<p>Ao minificar as variáveis ​​locais é que a grandiosidade do padrão IIFE realmente pode ser vista. Nomes de variáveis ​​locais não são realmente necessários se estas foram passadas dessa maneira​​, então, é possível dar o nome que quiser para elas.</p>
<p>Por exemplo, mudar disso:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (window, document, undefined) {
    console.log(window); // Object window
})(window, document);</pre>
</div>
<p>Pra isso:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (a, b, c) {
    console.log(a); // Object window
})(window, document);</pre>
</div>
<p>Imagine todas as referências a bibliotecas e <code>window</code> e <code>document</code> minificadas. Claro que você não precisa parar por aí; é possível passar jQuery, também, ou qualquer outra coisa que esteja disponível dentro no escopo léxico:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function ($, window, document, undefined) {
    // use $ para se referir à jQuery
    // $(document).addClass('test');
})(jQuery, window, document);
 
(function (a, b, c, d) {
    // Se torna
    // a(c).addClass('test');
})(jQuery, window, document);</pre>
</div>
<p>Isso também significa que você não precisa chamar <code>jQuery.noConflict();</code> ou qualquer coisa como <code>$</code> é atribuído localmente ao módulo. Aprender como escopos e variáveis ​​globais/locais funcionam ajuda ainda mais.</p>
<p>Passar o código por um bom minificador certamente garantirá a renomeação de <code>undefined</code> para <code>c</code> (por exemplo, e apenas se for usado). É importante atentar para o fato de que o nome <code>undefined</code> é irrelevante; só é preciso saber que o Objeto referenciado é indefinido (undefined) e, como <code>undefined</code> não tem qualquer significado especial – <code>undefined</code> é o valor que o JavaScript dá às coisas que são declaradas mas não têm nenhum valor (nem em IIFE).</p>
<p>&nbsp;</p>
<h2>Ambientes globais não-navegador</h2>
<p>Devido a algumas tecnologias, Node.js, o navegador não é sempre o Objeto global, o que pode ser realmente problemático se você está tentando criar uma IIFE para funcionar em múltiplos ambientes. Por esta razão, há determinadas “alternativas”, como isso:</p>
<div class="wp_syntax">
<pre class="lang:js decode:true ">(function (root) {
})(this);</pre>
</div>
<p>Em um navegador, o ambiente global <code>this</code> se refere ao Objeto <code>window</code>, de modo que não é preciso passar em <code>window</code>, é sempre possível reduzir para <code>this</code>.</p>
<p>Alguns preferem o nome <code>root</code>, já que ele pode se referir tanto a ambientes não-navegador, quanto à raiz do browser.</p>
<p>Se você estiver interessado em uma solução universal (muito útil para ser usada para a criação de módulos em projetos de código aberto) é o <strong>UMD</strong> (<em>Universal Module Definition</em>):</p>
<div class="wp_syntax">
<pre class="lang:js decode:true">(function (root, factory) {
    if (typeof define === 'function' &amp;&amp; define.amd) {
        define(factory);
    } else if (typeof exports === 'object') {
        module.exports = factory;
    } else {
        root.MYMODULE = factory();
    }
})(this, function () {
    // 
});</pre>
</div>
<p>A função está sendo invocado com outra função sendo passada para ela. É possível, então, atribuí-la ao ambiente relevante “de dentro”. No navegador, <code>root.MYMODULE = factory();</code> é o módulo IIFE; em qualquer outro ambiente (como Node.js), será usado <code>module.exports</code> ou requireJS se <code>define === 'function' &amp;&amp; define.amd</code> resolver como <code>true</code>.</p>
<p>&nbsp;</p>
<h2>Conclusão</h2>
<p>Como foi visto, usar <strong>IIFE</strong> (Expressão de Função Imediatamente Invocada ou <em>Immediately-Invoked Function Expression</em>) é extramente benéfico. Além de ajudar na performance, por permitir que não seja preciso lookups no código a procura de variáveis globais, permite que seu código possa ficar “isolado”, protegendo o escopo de uma porção de código ou módulo do ambiente em que foi colocado.</p>
<p>O fato de diversos frameworks e bibliotecas JavaScript de renome como jQuery, Backbone.js, Modernizr e outros usarem IIFE já é bastante significativo. Use código de qualidade para fazer código de qualidade. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Trabalhando com Datas em JavaScript</title>
		<link>https://www.turbosite.com.br/blog/trabalhando-com-datas-em-javascript/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Tue, 30 Sep 2014 18:37:52 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[datas em javascript]]></category>
		<category><![CDATA[Destaque]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3577</guid>

					<description><![CDATA[Trabalhar com datas em JavaScript se torna complicado quando queremos com exatidão trazer diferenças entre datas ou formatar datas para sair conforme precisamos. ]]></description>
										<content:encoded><![CDATA[<p>Trabalhar com datas em JavaScript se torna complicado quando queremos com exatidão trazer diferenças entre datas ou formatar datas para sair conforme precisamos.  Este post, tem como objetivo mostrar os diversos tipos de se tratar uma data e formas de apresentá-las, também como calcular a diferença entre 2 datas e resgatar estes valores.</p>
<p>Primeiro vamos ver o comando Date() e suas propriedades, nativo do JavaScript, este comando pode ser utilizado das seguintes formas:</p>
<pre class="lang:js decode:true">// Tipos para inicializar data em JavaScript
// new Date(); Data Corrente
// new Date(milissegundos); 
// new Date(string_de_data);
// new Date(ano, mes, dia);
// new Date(ano, mes, dia, hora, minuto, segundo, milissegundo);

var Hoje = new Date(); // Fri Sep 26 2014 14:06:47 GMT-0300 (Hora oficial do Brasil)
Hoje.getDate(); // 26
Hoje.getDay(); // 4 - Retorna o dia da semana, começando com 0 na segunda
Hoje.getFullYear(); // 2014
Hoje.getHours(); // 14
Hoje.getMilliseconds(); // 757 - De acordo com os milisegundos que a variável foi criada
Hoje.getMinutes(); // 6
Hoje.getMonth(); // 8 - Começa do 0, logo janeiro é 0, fevereiro é 1
Hoje.getSeconds(); // 47
Hoje.getTime(); // 1411751207757
Hoje.getTimezoneOffset(); // 180 - Menos 3 horas conforme horário GMT
data.getUTCDate(); // 26
// Neste caso, ele retorna a hora do UTC - Tempo Universal Coordenado
// Em inglês Coordinated Universal Time (UTC)
// Um teste rápido para mostrar a diferença
var Data2 = new Date("2014/09/26-23:59");
console.log( Data2 ); // Fri Sep 26 2014 23:59:00 GMT-0300 (Hora oficial do Brasil)
Data2.getUTCDate(); // 27 **Dia** UTC
data2.getUTCHours(); // 2 **hora** UTC
Data2.getDate(); // 26 Horário LOCAL de acordo com o GMT-300 
Data2.getHours(); // 23 Horário LOCAL de acordo com o GMT-300

Hoje.toDateString(); // "Fri Sep 26 2014"
Hoje.toGMTString(); // "Fri, 26 Sep 2014 17:06:47 GMT"
Hoje.toISOString(); // "2014-09-26T17:06:47.757Z"
Hoje.toJSON(); // "2014-09-26T17:06:47.757Z"
Hoje.toLocaleDateString(); // "26/9/2014"
Hoje.toLocaleString(); // "26/9/2014 14:06:47"
Hoje.toLocaleTimeString(); // "14:06:47"
Hoje.toString(); // "Fri Sep 26 2014 14:06:47 GMT-0300 (Hora oficial do Brasil)"
Hoje.toTimeString(); // "14:06:47 GMT-0300 (Hora oficial do Brasil)"
Hoje.toUTCString(); // "Fri, 26 Sep 2014 17:06:47 GMT"

// O objeto Date permite também setar novos valores, para isto, utilize o SET em vez de GET, exemplo
Hoje.getMonth(); // 8 - Setembro, lembrando que começa janeiro com 0
Hoje.setMonth(11); // Seta o mês como Dezembro
Hoje.getMonth(); // 11 - Dezembro
</pre>
<p>&nbsp;</p>
<p>Agora que vimos os diversos tipos de saídas, queremos mostrar o plugin momentjs.</p>
<p>Link: <a href="http://momentjs.com/">http://momentjs.com/</a><br />
Documentação em: <a href="http://momentjs.com/docs/">http://momentjs.com/docs/</a></p>
<p>Por padrão, quando é utilizado o pacote com multi idiomas, o script tentará detectar qual é o idioma padrão do Browser, verificando em window.navigator.language. Se encontrar, já estará traduzido, do contrário será necessário executar a configuração via o comando abaixo:</p>
<pre class="lang:js decode:true">moment.locale('pt-BR');</pre>
<p>Definindo uma data com o Moment.</p>
<pre class="lang:js decode:true">// Inicializando uma data e mostrando em String a saída
moment('30-09-2014','DD-MM-YYYY'); // Estamos definindo o dia como 30 de setembro de 2014, você pode alterar o formato e passar a data como desejar
moment().format(); // "2014-09-30T11:01:00-03:00"

// Formatando a saída de Datas
moment().format('MMMM Do YYYY, h:mm:ss a'); // setembro 26º 2014, 1:57:45 pm
moment().format('dddd'); // sexta-feira
moment().format("MMM Do YY"); // set 26º 14
moment().format('YYYY [escaped] YYYY'); // 2014 escaped 2014
moment().format(); // 2014-09-26T13:58:14-03:00

// Data Relativa
moment("20111031", "YYYYMMDD").fromNow(); // 3 anos atrás
moment("20120620", "YYYYMMDD").fromNow(); // 2 anos atrás
moment().startOf('day').fromNow(); // 14 horas atrás
moment().endOf('day').fromNow(); // em 10 horas
moment().startOf('hour').fromNow(); // uma hora atrás

// Calendário
moment().subtract(10, 'days').calendar(); // 16/09/2014 - Remove 10 dias
moment().subtract(6, 'days').calendar(); // Último sábado às 13:58 - Remove 6 dias
moment().subtract(3, 'days').calendar(); // Última terça-feira às 13:58 - Remove 3 dias
moment().subtract(1, 'days').calendar(); // Ontem às 13:58 - Remove 1 dia
moment().calendar(); // Hoje às 13:58
moment().add(1, 'days').calendar(); // Amanhã às 13:58 - Adiciona 1 da
moment().add(3, 'days').calendar(); // segunda-feira às 13:58 - Adiciona 3 dias
moment().add(10, 'days').calendar(); // 06/10/2014 - Adiciona 10 dias

// Múltiplos formatos de Data
moment().format('L'); // 26/09/2014
moment().format('l'); // 26/9/2014
moment().format('LL'); // 26 de setembro de 2014
moment().format('ll'); // 26 de set de 2014
moment().format('LLL'); // 26 de setembro de 2014 às 14:01
moment().format('lll'); // 26 de set de 2014 às 14:01
moment().format('LLLL'); // sexta-feira, 26 de setembro de 2014 às 14:01
moment().format('llll'); // sex, 26 de set de 2014 às 14:01</pre>
<p>Agora, vamos mostrar o plugin DATE RANGE, é um plugin adicional ao moment para calcular diferença entre duas datas.<br />
Download e documentação em : <a href="https://github.com/gf3/moment-range">https://github.com/gf3/moment-range</a></p>
<pre class="lang:js decode:true">var inicio = new Date(2014, 0, 1);
var fim = new Date();
var range = moment().range(inicio , fim);

range.diff('years'); // 0 - diferença entre anos
range.diff('months'); // 8 - diferença entre meses
range.diff('days'); // 273
range.diff(); // 23629091609 - diferença em milisegundos

/* Aceita os seguintes parâmetros o comando diff 
years
months
weeks
days
hours
minutes
seconds
milliseconds
*/

</pre>
<p>Outro plugin útil é o Precise Range. Este traz de forma explicita a diferença entre duas datas.<br />
Download e documentação em : <a href="http://codebox.org.uk/pages/moment-date-range-plugin">http://codebox.org.uk/pages/moment-date-range-plugin</a></p>
<p>Para traduzir a formatação de texto de saída, basta editar o arquivo readable-range.js na variável STRINGS.<br />
Original:</p>
<pre class="lang:js decode:true">var STRINGS = {
nodiff: '',
year: 'year',
years: 'years',
month: 'month',
months: 'months',
day: 'day',
days: 'days',
hour: 'hour',
hours: 'hours',
minute: 'minute',
minutes: 'minutes',
second: 'second',
seconds: 'seconds',
delimiter: ' '
};</pre>
<p>Traduzido:</p>
<pre class="lang:js decode:true">var STRINGS = {
nodiff: '',
year: 'ano',
years: 'anos',
month: 'mês',
months: 'meses',
day: 'dia',
days: 'dias',
hour: 'hora',
hours: 'horas',
minute: 'minuto',
minutes: 'minutos',
second: 'segundo',
seconds: 'segundos',
delimiter: ' '
};</pre>
<pre class="lang:js decode:true">// Datas Precisas:
moment("2014-01-01 12:00:00").preciseDiff("2014-09-30 10:44:00"); // 8 months 28 days 22 hours 44 minutes
moment.preciseDiff("2014-01-01 12:00:00", "2014-09-30 10:44:00"); // 8 months 28 days 22 hours 44 minutes

// Depois de traduzido:
moment("2014-01-01 12:00:00").preciseDiff("2014-09-30 10:44:00"); // 8 meses 28 dias 22 horas 44 minutos
moment.preciseDiff("2014-01-01 12:00:00", "2014-09-30 10:44:00"); // 8 meses 28 dias 22 horas 44 minutos

// Calculando o tempo de vida:
var data_de_nascimento = '1987-10-14';
moment(data_de_nascimento + " 00:00:00").preciseDiff( new Date() ); // "26 anos 11 meses 16 dias 10 horas 52 minutos 27 segundos"

//ou somente com o moment
var data_de_nascimento = moment('14-10-1987','DD-MM-YYYY');
moment(data_de_nascimento).preciseDiff( new Date() ); // "26 anos 11 meses 16 dias 10 horas 52 minutos 27 segundos"</pre>
<p>Plugin Strftime ajuda na formatação de saída das datas,  Download e documentação em: <a href="https://github.com/benjaminoakes/moment-strftime">https://github.com/benjaminoakes/moment-strftime</a></p>
<pre class="lang:js decode:true">moment().strftime("%m/%d/%y %I:%M %p %Z"); // 09/30/14 01:24 PM
moment().strftime("%d/%m/%y %H:%M"); // "30/09/14 13:24</pre>
<p>Este é o primeiro post de dois sobre como trabalhar com datas, o segundo será em PHP. Acompanhe-nos no <a href="https://www.facebook.com/Turbosite">Facebook</a> e <a href="https://plus.google.com/+TurbositeBrasil">Google Plus</a> para receber todas novidades. </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Utilizando Namespacing em JavaScript</title>
		<link>https://www.turbosite.com.br/blog/utilizando-namespacing-em-javascript/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Wed, 17 Sep 2014 15:10:48 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[programacao javascript]]></category>
		<category><![CDATA[programacao js]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3559</guid>

					<description><![CDATA[Técnica de como Utilizando Namespacing em JavaScript. Como não existe um método formal, vamos aplicar técnicas interessantes para a construção deste recurso.]]></description>
										<content:encoded><![CDATA[<p>Esta é uma postagem encontrada no site <a title="Desenvolvimento para Web" href="http://desenvolvimentoparaweb.com/miscelanea/namespacing-em-javascript/">Desenvolvimento para Web</a>, achamos interessante e decidimos publicá-la. Para quem desenvolve em Javascript, será útil e sem dúvida algum novo conhecimento será adquirido, então leia o texto completo. Este artigo é baseado no <span lang="en">post <a href="http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/">Namespacing in JavaScript</a></span> do <span lang="en"><a href="http://javascriptweblog.wordpress.com/">JavaScript, JavaScript</a>.</span></p>
<p>Namespacing em JavaScript pode ser considerado algo um pouco nebuloso no começo, mas a organização (e, de certa forma, proteção) de seu código é algo essencial, que deve ser encarado com muita seriedade e feito com bastante atenção. JavaScript não possui uma construção formal de namespace, então é preciso saber como “simular” namespaces para que se possa desfrutar das vantagens que eles oferecem.</p>
<p>Variáveis ​​globais devem ser reservadas a objetos que têm relevância para todo o sistema e estas devem ser nomeadas para evitar ambiguidades e minimizar o risco de colisões de nomes. Na prática, isso significa que você deve evitar a criação de objetos globais a menos que eles sejam absolutamente necessários. Mas você já sabia disso, certo?!</p>
<blockquote><p>Você deve evitar a criação de objetos globais a menos que eles sejam absolutamente necessários.</p></blockquote>
<p>Então, o que você faz sobre isso? A “sabedoria popular” mostra que a melhor estratégia de redução de risco é criar um pequeno número de objetos globais que servirão como namespaces de facto para módulos subjacentes e subsistemas. A seguir, várias abordagens para namespacing em JavaScript interessantes, que você pode usar em seus projetos imediatamente.</p>
<h2>Namespacing Estático (Static Namespacing)</h2>
<p>O termo “namespacing estático” está sendo usado como um termo genérico para soluções em que a denominação “namespace” consta numa codificação, propriamente dita. É verdade, você pode reatribuir de um namespace para outro, mas o novo namespace vai referenciar os mesmos objetos como se fossem os antigos.</p>
<h3>Atribuição Direta (Direct Assignment)</h3>
<p>Essa é a abordagem mais básica. Exige mais código, mas é segura e inequívoca.</p>
<pre class="lang:js decode:true ">var myApp = {}
 
myApp.id = 0;
 
myApp.next = function() {
    return myApp.id++;  
}
 
myApp.reset = function() {
    myApp.id = 0;   
}
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
); // 0, 1, undefined, 0</pre>
<p>Você poderia tornar a manutenção futura um pouco mais fácil usando <strong>this</strong> para fazer referência a propriedades irmãs, mas isso é um pouco arriscado, já que não há nada que impeça suas funções no namespace de serem reatribuídas:</p>
<pre class="lang:js decode:true">var myApp = {}
 
myApp.id = 0;
 
myApp.next = function() {
    return this.id++;   
}
 
myApp.reset = function() {
    this.id = 0;    
}
 
myApp.next(); // 0
myApp.next(); // 1
var getNextId = myApp.next;
getNextId(); // NaN whoops!</pre>
<h3>Notação de Objeto Literal (Object Literal Notation)</h3>
<p>Nesta abordagem, é preciso fazer referência ao nome de namespace apenas uma vez, então, caso seja preciso alterar o nome mais tarde, isso é um pouco mais fácil de se conseguir (supondo que você não tenha referenciado o namespace muitas vezes). Há, ainda, o perigo de que o valor de <strong>this</strong> possa ser uma surpresa – mas é um pouco mais seguro assumir que os objetos definidos dentro de uma construção de objeto literal não serão reatribuídos.</p>
<pre class="lang:js decode:true">var myApp = {
    id: 0,
 
    next: function() {
        return this.id++;   
    },
 
    reset: function() {
        this.id = 0;    
    }
}
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<h3>Padrão de Módulo (Module Pattern)</h3>
<p>Hoje em dia é bastante comum encontrar por aí o Padrão de Módulo (Module Pattern) em código JavaScript. A lógica é protegida do escopo global por uma função wrapper (geralmente numa IIFE) que retorna um objeto que representa a interface pública do módulo. Por imediatamente invocar a função e atribuir o resultado a uma variável de namespace, a API do módulo é “trancada” nesse namespace.</p>
<p>Além disso, todas as variáveis ​​não incluídas no valor de retorno permanecerão privadas, visíveis apenas para as funções públicas que lhes referenciam.</p>
<pre class="lang:js decode:true">var myApp = (function() {
 
    var id = 0;
 
    return {
        next: function() {
            return id++;    
        },
 
        reset: function() {
            id = 0;     
        }
    };  
})();   
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<h2>Namespacing Dinâmico (Dynamic Namespacing)</h2>
<p>Esta seção também poderia muito bem ser chamada de “injeção de namespace” (ou namespace injection). O namespace é representado por um proxy que é referenciado diretamente dentro do wrapper da função – o que significa que não é mais preciso agrupar valores para o return no namespace. Isso faz com que a definição de namespace seja mais flexível e torna muito fácil ter várias instâncias independentes de um módulo existente em namespaces separados (ou até mesmo no contexto global).</p>
<div>Namespacing dinâmico suporta todas as características do Padrão de Módulo com a vantagem adicional de ser intuitivo e de fácil leitura.</div>
<h3>Passando argumento de namespace</h3>
<p>Aqui o namespace é simplesmente passado como um argumento de uma <a title="JavaScript IIFE como contêiner de códigos" href="http://desenvolvimentoparaweb.com/javascript/javascript-iife-conteiner-de-codigos/">Expressão de Função Imediatamente Invocada</a>. A variável id é privada porque não é atribuída ao contexto.</p>
<pre class="lang:php decode:true">var myApp = {};
(function(context) { 
    var id = 0;
 
    context.next = function() {
        return id++;    
    };
 
    context.reset = function() {
        id = 0;     
    }
})(myApp);  
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<p>É possível até mesmo definir o contexto para o objeto global – com a mudança de uma palavra! Este é um grande trunfo para os fornecedores da bibliotecas (vendors), que podem envolver suas features numa IIFE e permitir que o programador decida se elas devem ser globais ou não (<a href="http://ejohn.org/">John Resig</a> foi um dos primeiros a adotar esse conceito quando escreveu a jQuery).</p>
<pre class="lang:php decode:true">var myApp = {};
(function(context) { 
    var id = 0;
 
    context.next = function() {
        return id++;    
    };
 
    context.reset = function() {
        id = 0;     
    }
})(this);   
 
window.console &amp;&amp; console.log(
    next(),
    next(),
    reset(),
    next()
) // 0, 1, undefined, 0</pre>
<h3>this como proxy de namespace</h3>
<p>O artigo “<a href="http://blogs.sitepoint.com/2010/11/30/my-favorite-javascript-design-pattern/">My Favorite JavaScript Design Pattern</a>” aparentemente foi mal compreendido por muitos que pensaram que ele poderia simplesmente recorrer ao Module Pattern. O artigo mostra várias técnicas (o que provavelmente contribuiu para essa confusão), mas, em essência, é muito interessante e dá ensejo ao desenvolvimento de muita coisa boa relacionada a namespacing.</p>
<p>A beleza do padrão é que ele simplesmente usa a linguagem como foi projetada – nada mais, nada menos, sem truques, sem firulas. Além disso, já que o namespace é injetado através da palavra-chave <strong>this</strong> (que é estática dentro de um determinado contexto de execução), ele não pode ser acidentalmente modificado.</p>
<pre class="lang:js decode:true">var myApp = {};
(function() {
    var id = 0;
 
    this.next = function() {
        return id++;    
    };
 
    this.reset = function() {
        id = 0;     
    }
}).apply(myApp);    
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
); // 0, 1, undefined, 0</pre>
<p>Ainda melhor, a API de apply (e call) provê separação natural entre contexto e argumentos; então, fica simples passar argumentos adicionais para o criador do módulo.</p>
<p>O exemplo a seguir demonstra isso e também mostra como executar o módulo de forma independente através de múltiplos namespaces:</p>
<pre class="lang:php decode:true">var subsys1 = {}, subsys2 = {};
 
var nextIdMod = function(startId) {
    var id = startId || 0;
 
    this.next = function() {
        return id++;    
    };
 
    this.reset = function() {
        id = 0;     
    }
};
 
nextIdMod.call(subsys1);    
nextIdMod.call(subsys2,1000);   
 
window.console &amp;&amp; console.log(
    subsys1.next(),
    subsys1.next(),
    subsys2.next(),
    subsys1.reset(),
    subsys2.next(),
    subsys1.next()
) // 0, 1, 1000, undefined, 1001, 0</pre>
<p>E, se for preciso um gerador global de id:</p>
<pre class="lang:js decode:true">nextIdMod();    
 
window.console &amp;&amp; console.log(
    next(),
    next(),
    reset(),
    next()
) // 0, 1, undefined, 0</pre>
<p>Mas essa ferramenta de gerar de ids mostrada como exemplo não faz jus a todo o potencial desse padrão. Envolvendo uma biblioteca inteira e usando a palavra-chave <strong>this</strong> como um suporte para o namespace, é fácil executar a biblioteca em qualquer contexto que se queira (incluindo o contexto global).</p>
<pre class="lang:php decode:true">// Código de biblioteca
var protoQueryMooJo = function() {  
    // [...]
}
 
// Seu código
var thirdParty = {};
protoQueryMooJo.apply(thirdParty);</pre>
<h2>Considerações finais sobre Namespacing em JavaScript</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3562" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite.jpg" alt="namespacing-javascript-metafora-turbosite" width="379" height="317" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite.jpg 379w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite-300x251.jpg 300w" sizes="auto, (max-width: 379px) 100vw, 379px" /></p>
<p>É uma prática comum tentar evitar namespaces aninhados. Eles são mais difíceis de seguir (para ambos, humanos e computadores) e vão encher seu código de confusão desnecessária. <a href="http://michaux.ca/articles/javascript-namespacing">Como Peter Michaux aponta</a>, namespaces aninhados podem ser um legado de desenvolvedores Java nostálgicos tentando recriar aquelas cadeias longas de pacotes que eles conheciam e amavam…</p>
<p>É possível “propagar” um único namespace através de diversos arquivos.js (embora apenas por injeção de namespace ou atribuição direta de cada variável), contudo, é preciso ter cuidado com as dependências. Além disso, “ligar” um namespace a um arquivo pode ajudar o leitor a navegar mais facilmente pelo código.</p>
<p>Uma vez que JavaScript não possui uma construção formal de namespace, isso abre margem para vários tipos de soluções criativas para resolver a questão. Este artigo mostrou apenas algumas delas e, evidentemente, as melhores podem não terem sido abordadas, dada a vasta contribuição da comunidade a cada dia.</p>
<p>De qualquer forma, estas são algumas das mais conhecidas técnicas para namespacing em JavaScript e, garantimos, estudando um pouco além e sabendo aplicar corretamente em seus projetos, certamente você terá um incremento de qualidade de código considerável! </p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
