<?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>Desenvolvimento &#8211; Velho Bit</title>
	<atom:link href="https://velhobit.com.br/desenvolvimento/feed" rel="self" type="application/rss+xml" />
	<link>https://velhobit.com.br</link>
	<description>Artigos, Notícias e Tutoriais sobre Web Design, Design Gráfico, Desenvolvimento e Programação Web... e um tico de games</description>
	<lastBuildDate>Wed, 20 Oct 2021 12:05:47 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://velhobit.com.br/wp-content/uploads/2024/10/cropped-minieu-32x32.png</url>
	<title>Desenvolvimento &#8211; Velho Bit</title>
	<link>https://velhobit.com.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Fim do Flash &#8211; O que fazer com minha aplicação Flash?</title>
		<link>https://velhobit.com.br/programacao/fim-do-flash-o-que-fazer-com-minha-aplicacao-flash.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Mon, 18 Jan 2021 19:38:15 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=2090</guid>

					<description><![CDATA[Infelizmente o Flash acabou. Mas O que fazer com minha aplicação? Como vou atender meu cliente? Como transformar em Javascript?]]></description>
										<content:encoded><![CDATA[
<p>Vou entrar neste assunto apenas uma vez porque eu vi muitos coleguinhas stressados com isso. Contantemente eu tenho visto perguntas como: &#8220;Qual navegador ainda vai rodar Flash?&#8221;, &#8220;Como faço com a minha aplicação Flex?&#8221;, &#8220;Tem como converter Flex ou Flash para Javascript&#8221;?</p>



<h2 class="wp-block-heading"><strong>O que fazer com meu sistema?</strong></h2>



<p>Como você, caro leitor, deve saber, o Flash foi descontinuado de forma pesada e forte em 2021. E não adianta xingar, ficar irritado, ou gritar com a Adobe. O fato é que o ambiente ficou insustentável para a plataforma e correções foram abandonadas já a alguns anos e o suporte oficial também. Como o Flex foi uma plataforma extremamente forte em meados dos anos 2000, muitas aplicações, algumas nem tão antigas assim, e extremamente robustas, foram construídas em cima dele. Isso fez com que, mesmo diante de tanto aviso, muitas desenvolvedoras e desenvolvedores acabaram por não ter condições de desenvolver novas soluções completas que compensassem o fim da tecnologia. Por isso, para ajudar, vou sugerir duas soluções, uma de médio e outra de curto prazo, que pode auxiliar a você resolver seus problemas e continuar mantendo um suporte até ter condições de desenvolver uma solução definitiva.</p>



<h3 class="wp-block-heading"><strong>Solução 1 &#8211; Médio Prazo</strong></h3>



<p>Em 2011, a Adobe doou o Flex para o Apache, então, desde 2014-2016, eles trabalharam em uma forma de portar o Flex para JS, através do FlexJS. Porém, o projeto do Flex não morreu, ele foi convertido para o Apache Royale. Essa pode ser uma solução a médio prazo para a maioria de vocês que estão tendo essa dificuldade. Pode ser uma solução em curto prazo também, se seu projeto foi bem desenvolvido. Ele usa MXML e AS3 e transpila para Javascript e HTML5 ao invés de Flash.</p>



<p>A página do Apache Royale, junto com seus links, pode ser encontrada aqui:</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="561" height="165" src="https://velhobit.com.br/wp-content/uploads/2021/01/apache-royale.png" alt="" class="wp-image-2091" srcset="https://velhobit.com.br/wp-content/uploads/2021/01/apache-royale.png 561w, https://velhobit.com.br/wp-content/uploads/2021/01/apache-royale-400x118.png 400w" sizes="(max-width: 561px) 100vw, 561px" /></figure>



<h3 class="wp-block-heading"><strong>Solução 2 &#8211; CurtoPrazo</strong></h3>



<p>O Adobe AIR permite executar Flash em plataforma desktop. Ele teve seus esforços transferidos para o HARMAN, em 2019, uma empresa da SAMSUNG. Você pode simplesmente compilar sua aplicação Flex baixando o SDK do AIR através do link abaixo:</p>



<figure class="wp-block-image size-large"><a href="https://airsdk.harman.com/download"><img decoding="async" width="561" height="165" src="https://velhobit.com.br/wp-content/uploads/2021/01/harman-adobe-air.png" alt="" class="wp-image-2092" srcset="https://velhobit.com.br/wp-content/uploads/2021/01/harman-adobe-air.png 561w, https://velhobit.com.br/wp-content/uploads/2021/01/harman-adobe-air-400x118.png 400w" sizes="(max-width: 561px) 100vw, 561px" /></a></figure>



<p>Basta aceitar os termos e baixar. A plataforma continuará sendo mantida pela empresa. Porém, é necessário ficar atento a licença. Em geral, para a maioria dos usuários, a licença gratuita resolverá e sua dependência é por valor de receita.</p>



<h2 class="wp-block-heading">Update &#8211; Solução 3 &#8211; Ruffle</h2>



<figure class="wp-block-image size-large"><a href="https://ruffle.rs/" target="_blank" rel="noopener"><img decoding="async" width="518" height="182" src="https://velhobit.com.br/wp-content/uploads/2021/05/image.png" alt="" class="wp-image-2143" srcset="https://velhobit.com.br/wp-content/uploads/2021/05/image.png 518w, https://velhobit.com.br/wp-content/uploads/2021/05/image-400x141.png 400w" sizes="(max-width: 518px) 100vw, 518px" /></a></figure>



<p>Uma solução que tem tudo para ser permanente e até, quem sabe, dar uma sobrevida ao Flash, é o Ruffle. O Ruffle é um emulador de flash player construído em Rust, que pode ser usado para animações e aplicações. O mais legal é que ele pode ser usado não apenas em seu servidor, mas como extensão do navegador ou para quem possui aplicações desktop e não queiram usar o Adobe AIR da HARMAN.</p>



<p><strong><em>OBS: Eu não tenho NADA a ver com a Adobe, nem a Harman, mas trabalhei por muitos anos com a plataforma Flex e compreendo sua enorme importância e contribuição para o que temos hoje em termos de front-end e UX. Estou postando isso apenas para ajudar.</em></strong></p>



<p><strong>Caso eu saiba de mais alguma solução, eu vou atualizar este poste. Fica de olho no Facebook / Instagram ou no grupo, que eu sempre atualizo as coisas por lá.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP no Windows 10 &#8211; Esqueça o Xampp e Instale o Apache no Subsistema Linux</title>
		<link>https://velhobit.com.br/tutoriais/php-no-windows-10-esqueca-o-xampp-e-instale-o-apache-no-subsistema-linux.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Sat, 12 Oct 2019 14:27:19 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[desenvolvedor]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[desevnolvimento]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[programador]]></category>
		<category><![CDATA[wamp]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wsl]]></category>
		<category><![CDATA[xamp]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1882</guid>

					<description><![CDATA[Trabalhe, mesmo no Windows, com um ambiente mais próximo ao servidor de produção e com mais liberdade. Use o WSL como servidor local de desenvolvimento.]]></description>
										<content:encoded><![CDATA[
<p>Uma das melhores coisas do Windows 10 é a possibilidade de instalar um subsistema Linux nele. Com isso, você pode montar o seu servidor Apache direto nesse subsistema, deixando o ambiente local muito mais similar a onde você vai efetivamente publicar, e com<strong> muito mais performance e liberdade</strong> do que os AMPs disponíveis para o Windows (Xamp, Wamp, Mamp).</p>



<h2 class="wp-block-heading">Habilitando e Instalando o Subsistema</h2>



<p>Primeiro certifique-se que está usando a versão mais recente do Windows 10. Apesar do susbsistema Linux estar disponível há alguns anos, é interessante manter sempre sua máquina atualizada.</p>



<p>Clique em iniciar e digite <strong>Ativar ou Desativar Recursos do Windows</strong>, ou acesse a partir do Painel de Controle Clássico.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="786" height="319" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-1.png" alt="" class="wp-image-1884" srcset="https://velhobit.com.br/wp-content/uploads/2019/09/image-1.png 786w, https://velhobit.com.br/wp-content/uploads/2019/09/image-1-400x162.png 400w, https://velhobit.com.br/wp-content/uploads/2019/09/image-1-768x312.png 768w, https://velhobit.com.br/wp-content/uploads/2019/09/image-1-600x244.png 600w" sizes="auto, (max-width: 786px) 100vw, 786px" /></figure>



<p>Ao abrir, desça a barra de rolagem até encontrar a opção <strong>Subsistema Linux para Windows</strong>. Ative a caixa e pressione em <strong>OK</strong>.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="759" height="737" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-2.png" alt="" class="wp-image-1885" srcset="https://velhobit.com.br/wp-content/uploads/2019/09/image-2.png 759w, https://velhobit.com.br/wp-content/uploads/2019/09/image-2-400x388.png 400w, https://velhobit.com.br/wp-content/uploads/2019/09/image-2-600x583.png 600w" sizes="auto, (max-width: 759px) 100vw, 759px" /></figure>



<p>O Windows pedirá para reiniciar o sistema e fará alguns ajustes, para então permitir que você possa instalar uma distribuição Linux.</p>



<p>Uma vez reiniciado, você já pode fazer a instalação da distribuição. Para isso abra <strong>Microsoft Store</strong>. Na guia <strong>Pesquisar</strong>, pesquise por Linux. Uma grande opção contendo várias distribuições será mostrada a você.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="737" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-3-1024x737.png" alt="" class="wp-image-1886" srcset="https://velhobit.com.br/wp-content/uploads/2019/09/image-3-1024x737.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/09/image-3-400x288.png 400w, https://velhobit.com.br/wp-content/uploads/2019/09/image-3-768x553.png 768w, https://velhobit.com.br/wp-content/uploads/2019/09/image-3-600x432.png 600w, https://velhobit.com.br/wp-content/uploads/2019/09/image-3.png 1365w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="633" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-4-1024x633.png" alt="" class="wp-image-1887" srcset="https://velhobit.com.br/wp-content/uploads/2019/09/image-4-1024x633.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/09/image-4-400x247.png 400w, https://velhobit.com.br/wp-content/uploads/2019/09/image-4-768x475.png 768w, https://velhobit.com.br/wp-content/uploads/2019/09/image-4-600x371.png 600w, https://velhobit.com.br/wp-content/uploads/2019/09/image-4.png 1381w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Escolha a distribuição que melhor funcionar para você. Nesta demonstração iremos usar o Ubuntu, mas se você preferir uma distribuição baseada em outra distro, fique à vontade. Porém a integração do Ubuntu com o Windows é trabalhada em conjunto entre a Microsoft e a própria Canonical, o que deve garantir, teoricamente, uma integração melhor.</p>



<p>Para você trabalhar com o Subsistema Linux, você pode usar o próprio Prompt de Comando, ou o Power Shell, porém, a Microsoft lançou recentemente um Terminal para o Windows. Esse novo Terminal pode ser baixado diretamente pela Microsoft Store e é altamente recomendável seu uso, pois ele traz muitas melhorias para a usabilidade do <strong>WSL (<em>Windows  Subsystem Linux</em>)</strong>. </p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="312" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-5-1024x312.png" alt="" class="wp-image-1888" srcset="https://velhobit.com.br/wp-content/uploads/2019/09/image-5-1024x312.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/09/image-5-400x122.png 400w, https://velhobit.com.br/wp-content/uploads/2019/09/image-5-768x234.png 768w, https://velhobit.com.br/wp-content/uploads/2019/09/image-5-600x183.png 600w, https://velhobit.com.br/wp-content/uploads/2019/09/image-5.png 1386w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Para finalizar a instalação, simplesmente abra o Terminal e digite: ubuntu (ou o nome da distribuição que você escolheu) e aguarde a instalação. Ele pedirá para você criar uma conta de administrador e a senha.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="270" height="249" src="https://velhobit.com.br/wp-content/uploads/2019/09/image-6.png" alt="" class="wp-image-1889"/></figure>



<p>Após instalar, se você fechar e abrir o Terminal, notará que apareceu mais uma opção para nova aba. Caso você prefira, você pode editar, em Settings, para que o Ubuntu seja o padrão, simplesmente alterando a configuração em seu json. Porém, se preferir, você também pode abrir o Ubuntu simplesmente digitando pelo OS a partir da barra de pesquisas, mas nesse caso ele abrirá o terminal dentro do console padrão do Windows.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="786" height="677" src="https://velhobit.com.br/wp-content/uploads/2019/10/image.png" alt="" class="wp-image-1900" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image.png 786w, https://velhobit.com.br/wp-content/uploads/2019/10/image-400x345.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-768x661.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-600x517.png 600w" sizes="auto, (max-width: 786px) 100vw, 786px" /></figure>



<h2 class="wp-block-heading">Instalando o PHP e MySQL em seu Ubuntu Linux</h2>



<p>A partir daqui não é diferente de instalar em um Ubuntu completo, porém, como a maioria dos usuários de Windows não possui familiaridade com os sistemas baseados em Linux, vamos detalhar passo a passo.</p>



<p class="has-very-light-gray-background-color has-background"><strong>Obs</strong>: Se você quiser copiar o código aqui digitado, você pode digitar <strong>ctrl+c</strong> aqui e, no terminal, apenas clicar com o botão direito (esta ação será equivalente ao<strong> ctrl+v</strong>).</p>



<p>Antes de tudo, vamos dar um update para preparar o ambiente.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo apt-get update</textarea></pre>
</div>



<h3 class="wp-block-heading">Instalando o Apache 2</h3>



<p>Para instalar o servidor do Apache, e verificar se a instalação está correta, simplesmente use os comandos abaixo, no Terminal:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo apt-get install apache2
sudo service apache2 start
sudo service apache2 status</textarea></pre>
</div>



<p>Ao iniciar o apache, é possível que você receba a seguinte mensagem:</p>



<p class="has-luminous-vivid-amber-color has-very-dark-gray-background-color has-text-color has-background">Windows TerminalProtocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT</p>



<p>Não se preocupe com esse problema. Simplesmente esse protocolo ainda não está nativamente implementado no WSL. Você pode apenas ignorar ou adicionar as seguintes linhas no arquivo<strong> /etc/apache2/apache2.conf</strong> :</p>



<pre class="wp-block-code"><code>AcceptFilter https none
AcceptFilter http none</code></pre>



<h2 class="wp-block-heading">Instalando o PHP</h2>



<p>Instalaremos o PHP 7.4 (então versão mais atual na última atualização deste post), mas você pode utilizar qualquer tutorial para Ubuntu para outras versões, ou simplesmente trocar os caminhos aqui associados. Atualizaremos este post conforme forem surgindo novas atualizações. Digite <strong>Y</strong> (yes) para tudo o que for perguntado.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo apt-get update
sudo apt-get install php php-cli php-fpm php-json php7.4-pdo php7.4-mysql php-zip php-gd  php-mbstring php-curl php-xml php-pear php-bcmath
php -v</textarea></pre>
</div>



<p>Instlamos, assim, o cliente e os pacotes mais utilizados, mas você pode, futuramente, instalar pacotes adicionais para funções específicas. A terceira linha apenas verifica a versão do PHP instalada, para checar se está tudo correto.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="187" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-1-1024x187.png" alt="" class="wp-image-1901" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-1-1024x187.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/10/image-1-400x73.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-1-768x140.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-1-600x109.png 600w, https://velhobit.com.br/wp-content/uploads/2019/10/image-1.png 1504w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Instalando o MySQL</h2>



<p>Por último vamos instalar o MySQL. Você pode trabalhar com outros bancos de dados se quiser, basta, como dito anteriormente, usar qualquer tutorial para Ubuntu (ou a distro que você escolheu), pois, relembrando, o WSL é realmente um subsistema Linux instalado e integrado ao Windows. Ele não é uma máquina virtual ou emulação. Lembre-se de pressionar o <strong>Y</strong>, quando perguntado.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
sudo service mysql start</textarea></pre>
</div>



<p>Caso perguntado, você pode ou não definir uma senha para o root do MySQL. Como você está em um ambiente de desenvolvimento, isso não é importante por hora. Mas lembre-se que em ambientes de produção uma senha forte deve ser usada.</p>



<h3 class="wp-block-heading">Garantindo todos os privilégios para usuário administrador</h3>



<p>Para você poder gerenciar todos os bancos e não ter que criar um usuário para cada um, você pode criar um usuário administrador e facilitar seu trabalho. Use o código abaixo para acessar o cliente mysql. Use a senha criada anteriormente.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo mysql -u root -p</textarea></pre>
</div>



<p>Agora, use o código abaixo para criar o usuário administrador e você poder trabalhar de forma universal.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
CREATE USER 'nome_de_usuario'@'localhost' IDENTIFIED BY 'sua_senha';
GRANT ALL PRIVILEGES ON *.* TO 'nome_de_usuario'@'localhost';</textarea></pre>
</div>



<p>Digite <strong>\q </strong>para sair do cliente.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="240" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-3-1024x240.png" alt="" class="wp-image-1903" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-3-1024x240.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/10/image-3-400x94.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-3-768x180.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-3-600x141.png 600w, https://velhobit.com.br/wp-content/uploads/2019/10/image-3.png 1262w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">PHPMyAdmin</h3>



<p>Você pode usar algum cliente externo para administrar o MySQL, mas a opção mais comum usada é instalar o PHPMyAdmin. Simplesmente utilize o seguinte comando:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo apt-get install phpmyadmin</textarea></pre>
</div>



<p>Obs. A instalação irá perguntar se deseja instalar apache ou nginx, neste caso marque apache. <strong>Para marcar pressione espaço, se não fizer isso ele não instalará corretamente e você precisará rodar a instalação novamente.</strong></p>



<p>Durante a instalação, você será questionado para criar uma senha para o PHPMyAdmin, caso deseje.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="555" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-2-1024x555.png" alt="" class="wp-image-1902" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-2-1024x555.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/10/image-2-400x217.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-2-768x416.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-2-600x325.png 600w, https://velhobit.com.br/wp-content/uploads/2019/10/image-2.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Testando</h2>



<p>Uma vez que já instalamos e já inicializamos, podemos testar simplesmente acessando <strong>http://localhost</strong>. Para o PHPMyAdmin, use <strong>http://localhost/phpmyadmin</strong></p>



<p>Para entrar no PHPMyAdmin, utilize o usuário e senha criado acima, com os privilégios:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="698" height="896" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-4.png" alt="" class="wp-image-1904" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-4.png 698w, https://velhobit.com.br/wp-content/uploads/2019/10/image-4-312x400.png 312w, https://velhobit.com.br/wp-content/uploads/2019/10/image-4-467x600.png 467w" sizes="auto, (max-width: 698px) 100vw, 698px" /></figure>



<h2 class="wp-block-heading">Habilitando as configurações do Apache</h2>



<p>Para poder funcionar corretamente certas opções, como o habilitar .htaccess, habilitar ou desabilitar determinados módulos, configurar max_*, etc., é ideal que você configure o Apache Virtual Hosts.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo bash -c "a2ensite '*.conf' &amp;&amp; a2dissite 000-default.conf default-ssl.conf &amp;&amp; systemctl restart apache2.service"</textarea></pre>
</div>



<p>Feito isso, você pode configurar o VirtualHost para diversos sites, portas, ou simplesmente especificando configurações específicas para cada site / sistema em que você está trabalhando.</p>



<p>O arquivo de configuração gerado, fica em: <strong>/etc/apache2/sites-available/000-default.conf</strong></p>



<h2 class="text-roxo wp-block-heading">Informações Importantes</h2>



<p>Você pode iniciar o apache e o mysql a qualquer momento, simplesmente abrindo o Windows Terminal, no Ubuntu (ou direto pelo app Ubuntu) e colocando:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo service apache2 start
sudo service mysql start</textarea></pre>
</div>



<p class="has-background" style="background-color:#fff8d7">A pasta padrão dos arquivos do Apache é:<br><strong>/var/www/html </strong></p>



<p>Para você abrir a pasta no Windows Explorer e você ver o os arquivos, digite no Terminal:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
cd /var/www/html/
explorer.exe .</textarea></pre>
</div>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="349" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-5-1024x349.png" alt="" class="wp-image-1906" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-5-1024x349.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/10/image-5-400x136.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-5-768x262.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-5-600x204.png 600w, https://velhobit.com.br/wp-content/uploads/2019/10/image-5.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Recomendo que, para você poder operar sem problemas, no Windows, você execute, para dar permissão total:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo chmod -R 777 /var/www/html/</textarea></pre>
</div>



<h2 class="wp-block-heading">Extra: Criando um SSL autoassinado</h2>



<p>Dependendo do que você estiver programando, pode ser necessário você utilizar uma conexão SSL. Isso geralmente é necessário em testes que irão alimentar diversas APIs ou até para utilizar alguns recursos do HTML5.</p>



<p>O Ubuntu já possui o openssl instalado nativamente no sistema. Então, basta você colocar:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt</textarea></pre>
</div>



<p>Enquanto você estiver criando o certificado, ele irá fazer algumas perguntas de identificação. Como é algo que vai ser usado localmente, essas informações não precisam ser reais ou fidedignas, basta responder. A ordem é:</p>



<ul class="wp-block-list"><li>Nome de País (em código de 2 dígitos) &#8211; Brasil é BR</li><li>Estado</li><li>Cidade</li><li>Nome da Organização</li><li>Unidade da Organização</li><li>Common Name &#8211; Digite <strong>localhost</strong></li><li>E-mail &#8211; Digite<strong> webmaster@localhost</strong></li></ul>



<p>Isso vai ser suficiente para criar um certificado auto-assinado, que vai funcionar localmente.</p>



<p>Agora vamos nas configurações do Virtual Hosts do Apache, para SSL.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo nano /etc/apache2/conf-available/ssl-params.conf</textarea></pre>
</div>



<p>Dentro do arquivo, cole o seguinte texto (é uma configuração genérica, mas suficiente para nosso caso):</p>



<pre class="wp-block-code"><code>SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# Disable preloading HSTS for now.  You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
# Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache &gt;= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache &gt;= 2.4.11
SSLSessionTickets Off</code></pre>



<p class="has-very-light-gray-background-color has-background">Obs. Digite CTRL+X, seguido de Y, seguido de ENTER, para fechar o nano, salvando.</p>



<p>Agora vamos editar a configuração do SSL.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo nano /etc/apache2/sites-available/default-ssl.conf</textarea></pre>
</div>



<p>Com o arquivo aberto, você vai substituir os parâmetros abaixo, de acordo com o demonstrado na lista:</p>



<pre class="wp-block-code"><code>ServerAdmin webmaster@localhost.com
ServerName localhost

SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key</code></pre>



<p>Por fim, basta colocar no terminal, para ativar o ssl no Apache:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo a2enmod ssl
sudo a2enmod headers
sudo a2ensite default-ssl
sudo a2enconf ssl-params
sudo apache2ctl configtest</textarea></pre>
</div>



<p>Se estiver tudo configurado corretamente, ele vai responder SINTAX OK.</p>



<p>Antes de recarregar o Apache, teremos que liberar a pasta onde salvamos o  certificado. Vamos liberar para 777, para facilitar, apenas porque estamos em ambiente de desenvolvimento. JAMAIS FAÇA ISSO EM AMBIENTE DE PRODUÇÃO.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
sudo chmod -R 777 /etc/ssl/private
service apache2 reload</textarea></pre>
</div>



<p>Por fim, precisamos adicionar o SSL como confiável no Windows. Caso contrário, ao entrar em https://localhost, você vai receber aquela clássica tela de certificado não confiável.</p>



<p>Agora vá até a pasta onde você baixou o certificado e abra a pasta no explorer. Procure pelo arquivo do certificado <strong>apache-selfsigned.crt</strong>. Clique duas vezes nele para instalar no Windows.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="shell" name="mshighlighter" >
cd /etc/ssl/certs/ 
explorer.exe .</textarea></pre>
</div>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="821" height="622" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-6.png" alt="" class="wp-image-1907" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-6.png 821w, https://velhobit.com.br/wp-content/uploads/2019/10/image-6-400x303.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-6-768x582.png 768w, https://velhobit.com.br/wp-content/uploads/2019/10/image-6-600x455.png 600w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>



<p>Ao abrir o certificado, clique no botão <strong>Instalar Certificado</strong></p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="405" height="515" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-7.png" alt="" class="wp-image-1908" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-7.png 405w, https://velhobit.com.br/wp-content/uploads/2019/10/image-7-315x400.png 315w" sizes="auto, (max-width: 405px) 100vw, 405px" /></figure>



<p>Simplesmente siga os passos para a instalação do certificado</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="535" height="523" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-8.png" alt="" class="wp-image-1909" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-8.png 535w, https://velhobit.com.br/wp-content/uploads/2019/10/image-8-400x391.png 400w" sizes="auto, (max-width: 535px) 100vw, 535px" /></figure>



<p>Na área de Importação, selecione para colocar no repositório de <strong>Autoridades de Certificações Confiáveis</strong>, como nas imagens abaixo.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="281" height="263" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-12.png" alt="" class="wp-image-1913"/></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="535" height="523" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-13.png" alt="" class="wp-image-1914" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-13.png 535w, https://velhobit.com.br/wp-content/uploads/2019/10/image-13-400x391.png 400w" sizes="auto, (max-width: 535px) 100vw, 535px" /></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="535" height="523" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-14.png" alt="" class="wp-image-1915" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-14.png 535w, https://velhobit.com.br/wp-content/uploads/2019/10/image-14-400x391.png 400w" sizes="auto, (max-width: 535px) 100vw, 535px" /></figure>



<p>Você vai precisar confirmar a instalação do certificado. Marque Sim.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="412" height="380" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-15.png" alt="" class="wp-image-1916" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-15.png 412w, https://velhobit.com.br/wp-content/uploads/2019/10/image-15-400x369.png 400w" sizes="auto, (max-width: 412px) 100vw, 412px" /></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="271" height="152" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-11.png" alt="" class="wp-image-1912"/></figure>



<p>Agora é só acessar o localhost com https e ser feliz!</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="754" height="570" src="https://velhobit.com.br/wp-content/uploads/2019/10/image-16.png" alt="" class="wp-image-1917" srcset="https://velhobit.com.br/wp-content/uploads/2019/10/image-16.png 754w, https://velhobit.com.br/wp-content/uploads/2019/10/image-16-400x302.png 400w, https://velhobit.com.br/wp-content/uploads/2019/10/image-16-600x454.png 600w" sizes="auto, (max-width: 754px) 100vw, 754px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>API do Whatsapp &#8211; Como quebrar linhas e passar parâmetros em links</title>
		<link>https://velhobit.com.br/tutoriais/api-do-whatsapp-como-quebrar-linhas-e-passar-parametros-em-links.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Wed, 20 Mar 2019 19:56:48 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[compartilhamento]]></category>
		<category><![CDATA[whatsapp]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1822</guid>

					<description><![CDATA[Um exemplo de como criar um link/botão para iniciar automaticamente um chat pelo Whatsapp]]></description>
										<content:encoded><![CDATA[
<p class="has-drop-cap">Quase todo site, sistema, ou app, hoje, precisa ter um botão para compartilhamento via Whatsapp. Para facilitar todo esse processo, o <a href="https://developers.facebook.com/docs/whatsapp/api/reference/?translation">Whatsapp disponibiliza uma API</a> própria para facilitar o processo para desenvolvedores.</p>



<p>Porém, para o trabalho mais básico, um simples link de interação com um início de conversa, a documentação não é muito clara quanto a caracteres especiais e links.</p>



<div class="genova">
<input type="text" id="celular" placeholder="Digite numero do telefone com DDD">
<textarea id="mensagem" placeholder="digite mensagem de teste">Mensagem de Teste:
Doom?token=iddqd</textarea>

<button onclick="enviarMensagem()">
Enviar Mensagem
</button>
</div>



<h2 class="wp-block-heading">Criando um link para iniciar a conversa</h2>



<p>Para você criar um link para iniciar uma conversa, basta usar a URL <strong><em>https://api.whatsapp.com/send</em></strong> e passar os parâmetros específicos.</p>



<p>Na prática, você poderia passar algo como:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="html" name="mshighlighter" >
<a href="https://api.whatsapp.com/send?phone=telefonecompleto&amp;text=TextoParaEnviar">Enviar Mensagem</a></textarea></pre>
</div>



<p class="has-very-light-gray-background-color has-background"><strong>Importante:</strong> O telefone deve conter DDI e DDD e ser apenas número. Por exemplo, você vai mandar uma mensagem para alguém de Recife/PE &#8211; Brasil, o telefone precisa ser: 5581numero_do_celular.</p>



<p>Até aí é bem simples. O problema está quando você quer enviar um parâmetro em um link, ou quando você quer enviar caracteres especiais como quebra de texto. O que vai acontecer é que a API do Whatsapp simplesmente irá remover qualquer tipo de código que ele considerar inseguro, através de um processo chamado de <strong>Sanitização</strong>.</p>



<p>O Whatsapp, entretanto, utiliza-se de uma versão própria de parâmetros simples para tratar <em>richtexts</em>. Ou seja, simplesmente basta você converter os valores que você quer para <strong>URL <em>Encode</em></strong>. Isso fará com que o texto seja entregue da forma como você planejou e você possa aplicar caracteres especiais e formatação.</p>



<h2 class="wp-block-heading">Exemplo prático</h2>



<p>Digamos que você queira enviar a seguinte mensagem:</p>



<p class="has-background" style="background-color:#bbe5ff">A pia pinga, o pinto pia&#8230;<br>Quanto mais a pia pinga, mais o pinto pia.<br><br>Acesse https://ratimbum.com/?token=333 para saber mais.</p>



<p>Perceba que o texto possui negrito e quebra de texto e seu código será algo como:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="html" name="mshighlighter" >
A pia pinga, o pinto pia...\n
Quanto mais a pia pinga, mais o pinto pia.\n\n
Acesse https://ratimbum.com/?token=333 para saber mais.</textarea></pre>
</div>



<p>Sim, você deverá usar \n para quebrar o texto. Porém, a sanitização vai retirar o \n e o ?, o que vai criar um resultado não esperado.</p>



<p>Para resolver o problema, basta você converter o texto para URL Encode. No <em><strong>javascript</strong></em>, por exemplo, ficará assim:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >
var texto = "A pia pinga, o pinto pia...\n
Quanto mais a pia pinga, mais o pinto pia.\n\n
Acesse https://ratimbum.com/?token=333 para saber mais.";
texto = window.encodeURIComponent(texto);

/*
O resultado será algo como:
A%20pia%20pinga%2C%20o%20pinto%20pia...%0A%0AQuanto%20mais%20a%20pia%20pinga%2C%20mais%20o%20pinto%20pia.%0A%0AAcesse%20https%3A%2F%2Fratimbum.com%2F%3Ftoken%3D333%20para%20saber%20mais.
*/</textarea></pre>
</div>



<p>Dessa forma, você pode optar por colocar esse código dinamicamente em um <strong>&lt;a&gt;</strong> ou, o que recomendo, enviar através da função <strong>window.open</strong>, do Javascript.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >
function enviarMensagem(){
	var celular = "55DDDNUMERODOCELULAR";
  
  var texto = "Texto que eu vou enviar \n com quebras de \n texto.";
  texto = window.encodeURIComponent(texto);
  
  window.open("https://api.whatsapp.com/send?phone=" + celular + "&amp;text=" + texto, "_blank");
	//Obs.. use "_system", no lugar de blank, caso você esteja usando Phonegap / Cordova / Ionic ou qualquer um baseado em webview;
}</textarea></pre>
</div>



<p class="has-very-light-gray-background-color has-background">Obs. Você não precisa converter para \n se for pegar o texto a partir de um <strong>&lt;textarea&gt;</strong>, como mostrado no exemplo mais abaixo.</p>



<p>É importante salientar que se você estiver testando no Whatsapp web, a quebra de linha não é mostrada na pre-visualização, mas será mostrada no momento do envio real da imagem.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="451" src="https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1-1024x451.jpg" alt="" class="wp-image-1823" srcset="https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1-1024x451.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1-400x176.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1-768x338.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1-600x264.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-1.jpg 1233w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Durante a pré-visualização não é mostrado a quebra de linha&#8230;</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="753" height="139" src="https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-002.jpg" alt="" class="wp-image-1824" srcset="https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-002.jpg 753w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-002-400x74.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/03/whatsapp-002-600x111.jpg 600w" sizes="auto, (max-width: 753px) 100vw, 753px" /><figcaption>&#8230; mas na hora realmente do envio ele vai ter a quebra de linha.</figcaption></figure>



<h2 class="wp-block-heading">Corrigindo erro ERR_BLOCKED_BY_RESPONSE</h2>



<p>Foi relatado que, em alguns casos, ocorre o erro ERR_BLOCKED_BY_RESPONSE, em alguns navegadores ou condições específicas (principalmente no Firefox). Isso ocorreu devido a algumas atualizações não bem descritas da API do Whatsapp.</p>



<p>Para corrigir esse problema, faremos uma pequena atualização no código acima, o qual será necessário verificar se é mobile ou não, e passar o prefixo web no lugar de api. Acredito que também exista uma correlação quanto a navegadores desatualizados, que estejam causando o problema.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >
function enviarMensagem(){
	var celular = "55DDDNUMERODOCELULAR";
  
  var texto = "Texto que eu vou enviar \n com quebras de \n texto.";
  texto = window.encodeURIComponent(texto);

  let urlApi = "https://web.whatsapp.com/send";
  if(mobileCheck()){
  	urlApi = "https://api.whatsapp.com/send";
  }
  
  window.open(urlApi + "?phone=" + celular + "&text=" + texto, "_blank");
	//Obs.. use "_system", no lugar de blank, caso você esteja usando Phonegap / Cordova / Ionic ou qualquer um baseado em webview;
}


function mobileCheck(){
  let check = false;
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  return check;
}</textarea></pre>
</div>



<p>Ocorre também que o código questão modifica um comportamento. Ele não mais alertará o usuário de que uma mensagem será enviada. Ao contrário disso, ele já abre direto no Whatsapp web.</p>



<h2 class="wp-block-heading">Outras opções</h2>



<p>Se o intuito, porém, for utilizar também outras propriedades do richtext, como negrito e itálico, você deverá simplesmente passar _ (itálico), * (negrito), ~ (riscado) ou &#8220;` (tamanho fixo). Exemplo:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >
var mensagemParaWpp = mensagem.replace(/<b>/g, "*").replace(/<\/b>/g,"*"); 
alert(s);</textarea></pre>
</div>



<p>Como sempre, no final do post tem um código de exemplo, onde você pode testar o envio de mensagem ou apenas copiar o código.</p>



<p class="has-very-light-gray-background-color has-text-color has-background has-small-font-size" style="color:#868788">(O código está compartilhado pelo jsfiddle. Então, para ver corretamente, use pelo desktop/laptop)</p>



<iframe loading="lazy" width="100%" height="300" src="//jsfiddle.net/velhobit/7r94u3vd/16/embedded/js,html,css,result/dark/" allowfullscreen="allowfullscreen" allowpaymentrequest frameborder="0"></iframe>



<p>Gostou da postagem? Siga nossas mídias sociais e compartilhe com os coleguinhas.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como criar um uploader drag &#038; drop, AJAX com porcentagem e Javascript puro?</title>
		<link>https://velhobit.com.br/programacao/como-criar-um-uploader-drag-drop-ajax-com-porcentagem-e-javascript-puro.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Fri, 01 Feb 2019 05:19:03 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[componentes]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[drag]]></category>
		<category><![CDATA[drop]]></category>
		<category><![CDATA[efeito]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[frontend]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[uploader]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1806</guid>

					<description><![CDATA[Um breve tutorial para mostrar como fazer um uploader HTML5 de múltiplos, com porcentagem, drag 'n drop e, o melhor, com Javascript puro!]]></description>
										<content:encoded><![CDATA[
<p>Eu sei, o título é grande, mas trata-se de uma tecnologia muito útil quanto a usabilidade. A ideia é criar, da forma mais simples possível um <em>uploader</em> que mostre a porcentagem do que está sendo enviado, com múltiplos arquivos. Porém, não apenas isso, mas da forma mais pura possível, sem a necessidade de <em>frameworks</em>, bibliotecas de terceiros ou pre-processadores.  <strong>Em nosso tutorial, usaremos PHP no back-end, mas você pode usar a linguagem que melhor lhe adequar</strong>. Abaixo você pode testar um exemplo:</p>



<div class="area-upload">
			<label for="upload-file" class="label-upload">
				<i class="fas fa-cloud-upload-alt"></i>
				<div class="texto">Clique ou arraste o arquivo</div>
			</label>
			<input type="file" accept="image/jpg,image/png" id="upload-file" multiple="">
			
			<div class="lista-uploads">
			</div>
		</div>



<p style="background-color:#fff4d4" class="has-text-color has-background has-vivid-red-color">DISCLAIMER: Para preservar você, o blog e a mim, o upload.php do exemplo não está fazendo upload de verdade, então você não vai ter acesso ao arquivo no final, porém, no link do github está o código funcional.</p>



<!-- Place this tag where you want the button to render. -->
<center><a class="github-button" href="https://github.com/velhobit/upload-html/archive/master.zip" data-size="large" aria-label="Download velhobit/upload-html on GitHub">Download</a></center>



<h2 class="wp-block-heading">HTML</h2>



<p>Antes de prosseguir, vou alertar que estou usando o <em><a rel="noreferrer noopener" aria-label="font-awesome  (abre em uma nova aba)" href="https://velhobit.com.br/design/como-criar-sua-propria-fonte-e-a-usar-como-icone.html" target="_blank">font-awesome</a></em><a rel="noreferrer noopener" aria-label="font-awesome  (abre em uma nova aba)" href="https://velhobit.com.br/design/como-criar-sua-propria-fonte-e-a-usar-como-icone.html" target="_blank"> </a>no exemplo, apenas para não ter que fazer nenhum <em>upload</em> de imagens por hora, mas ele não é obrigado para o que vamos fazer.</p>



<p>Iniciaremos com um HTML bem simples. Vamos definir apenas a área de <em>upload</em>, da lista e uma área onde ficará o <em>input</em>. Esse input deve ser do tipo file e deve estar com o atributo <em>mutiple</em> definido. Nada muito especial por enquanto, pois nosso trunfo está mais no CSS e Javascript.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="html" name="mshighlighter" ><div class="area-upload">
			<label for="upload-file" class="label-upload">
				<i class="fas fa-cloud-upload-alt"></i>
				<div class="texto">Clique ou arraste o arquivo</div>
			</label>
			<input type="file" accept="image/jpg,image/png" id="upload-file" multiple/>
			
			<div class="lista-uploads">
			</div>
		</div></textarea></pre>
</div>



<h2 class="wp-block-heading">CSS3</h2>



<p>O CSS que usaremos tem pontos específicos aos quais devemos prestar atenção. Por isso, vamos ver por trechos:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="css" name="mshighlighter" >.area-upload{
	box-shadow: 0 5px 20px rgba(0,0,0,.2);
	margin: 20px auto;
	padding: 20px;
	box-sizing: border-box;
	
	width: 100%;
	max-width: 700px;
	position: relative;
}

.area-upload label.label-upload{
	border: 2px dashed #0d8acd;
	min-height: 200px;
	text-align: center;
	width: 100%;
	
	display: flex;
	justify-content: center;
	flex-direction: column;
	color: #0d8acd;
	position: relative;
	
	-webkit-transition: .3s all;
	-moz-transition: .3s all;
	-o-transition: .3s all;
	transition: .3s all;
}

.area-upload label.label-upload.highlight{
	background-color: #fffdaa;
}

.area-upload label.label-upload *{
	pointer-events: none;
}</textarea></pre>
</div>



<p>A área de <em>upload</em> é definida pelo CSS a partir de um espaço abrangente. O <em>label</em>, vai ser a referência que vamos usar para atingir toda a área pré-determinada e é o que vai também receber o estilo que indicará onde e quando pode soltar o objeto. Dessa forma, deve estar com um <em>position: absolute</em>, pegando toda a área do <em>upload</em>. Um detalhe importante é que esse label não pode possuir filhos com eventos do mouse, pois isso pode acarretar em funcionamento inadequado ao fazer um <em>hover</em> em uma área não indicada.</p>



<p>A área marcada como <em>hightlight</em> é justamente para demonstrar ao usuário que ele já pode soltar o arquivo.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="css" name="mshighlighter" >
.area-upload input{
	position: absolute;
	left: 0;
	top: 0;
	right: 0;
	bottom: 0;
	width: 100%;
	-webkit-appearance: none;
	opacity: 0;
}</textarea></pre>
</div>



<p>O <em>input</em> vai nos servir de área de <em>drop</em>. Isso já é um padrão tanto para <em>Windows</em>, <em>MacOS</em> e <em>Linux</em> – de receber um (ou mais arquivos) arrastando os dados para o botão. Retirando a aparência padrão, podemos nos aproveitar dessa função e economizar várias linhas de código do <em>Javascript</em>. Não havendo a necessidade de configurarmos eventos de arquivos.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="css" name="mshighlighter" >.area-upload .lista-uploads .barra{
	background-color: #e6e6e6;
	margin: 10px 0;
	width: 100%;
	position: relative;
}

.area-upload .lista-uploads .barra .fill{
	background-color: #a1f7ff;
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	min-width: 0;
	
	-webkit-transition: .2s all;
	-moz-transition: .2s all;
	-o-transition: .2s all;
	transition: .2s all;
}

.area-upload .lista-uploads .barra.complete .fill{
	background-color: #bcffdf;
}

.area-upload .lista-uploads .barra .text{
	z-index: 10;
	text-align: center;
	padding: 3px 5px;
	box-sizing: border-box;
	position: relative;
	width: 100%;
	color: black;
	font-size: 12px;
}
.area-upload .lista-uploads .barra .text a{
	color: black;
	font-weight: bold;
}

.area-upload .lista-uploads .barra.error .fill{	
	background-color: #c02929;
	color: white;
	min-width: 100%;
}

.area-upload .lista-uploads .barra.error .text{
	color: white;
}</textarea></pre>
</div>



<p>Talvez a área que possa confundir um pouco mais, principalmente os mais novatos, seja o CSS referente as barras de <em>loading</em>. As barras são definidas como <em>relative</em> e seu conteúdo como <em>absolute</em>. Dessa forma, podemos herdar a porcentagem do <em>upload</em> e usá-la diretamente no <em>min-width</em> do elemento. Usamos <em>min-width</em>, ao invés de <em>width</em> para utilizar o <em>transition</em>, dando uma leveza no <em>upload</em> ao invés de pequenos estalos.</p>



<h2 class="wp-block-heading">Javascript</h2>



<p>Inicialmente iremos definir os efeitos de <em>drag</em> and <em>drop</em>. Utilizaremos os eventos específicos para adicionar ou retirar o css de <em>hightlight</em>. Aquele que falamos acima ao montar o CSS.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >let drop_ = document.querySelector('.area-upload #upload-file');
drop_.addEventListener('dragenter', function(){
	document.querySelector('.area-upload .label-upload').classList.add('highlight');
});
drop_.addEventListener('dragleave', function(){
	document.querySelector('.area-upload .label-upload').classList.remove('highlight');
});
drop_.addEventListener('drop', function(){
	document.querySelector('.area-upload .label-upload').classList.remove('highlight');
});</textarea></pre>
</div>



<p>Agora precisamos validar os dados antes de colocar em nosso servidor. Compusemos uma validação que verifica o tipo de arquivo e a quantidade máxima de 2MB. Essa validação é totalmente no <em>front-end</em>. É recomendado que você também faça uma validação posterior no <em>back-end</em> para evitar fraudes. Essa função receberá como parâmetro um arquivo, o qual faremos a validação.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function validarArquivo(file){
	console.log(file);
	// Tipos permitidos
	var mime_types = [ 'image/jpeg', 'image/png' ];
	
	// Validar os tipos
	if(mime_types.indexOf(file.type) == -1) {
		return {"error" : "O arquivo " + file.name + " não permitido"};
	}

	// Apenas 2MB é permitido
	if(file.size > 2*1024*1024) {
		return {"error" : file.name + " ultrapassou limite de 2MB"};
	}

	// Se der tudo certo
	return {"success": "Enviando: " + file.name};
}</textarea></pre>
</div>



<p>Para enviar os arquivos, usaremos uma função AJAX simples. Fazemos um <em>request</em> no método POST. Nesta função, iremos capturar também a porcentagem do <em>upload</em> e atualizaremos a barra a partir desta, através do evento <em>progress</em>. Essa nossa função receberá o índice, para identificar o arquivo que está sendo enviado e a barra que será modificada.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function enviarArquivo(indice, barra){
	var data = new FormData();
	var request = new XMLHttpRequest();
	
	//Adicionar arquivo
	data.append('file', document.querySelector('#upload-file').files[indice]);
	
	// AJAX request finished
	request.addEventListener('load', function(e) {
		// Resposta
		if(request.response.status == "success"){
			barra.querySelector(".text").innerHTML = "<a href=\"" + request.response.path + "\" target=\"_blank\">" + request.response.name + "</a> <i class=\"fas fa-check\"></i>";
			barra.classList.add("complete");
		}else{
			barra.querySelector(".text").innerHTML = "Erro ao enviar: " + request.response.name;
			barra.classList.add("error");
		}
	});
	
	// Calcular e mostrar o progresso
	request.upload.addEventListener('progress', function(e) {
		var percent_complete = (e.loaded / e.total)*100;
		
		barra.querySelector(".fill").style.minWidth = percent_complete + "%"; 
	});
	
	//Resposta em JSON
	request.responseType = 'json';
	
	// Caminho
	request.open('post', 'upload.php'); 
	request.send(data);
}</textarea></pre>
</div>



<p>Por fim, iremos juntar um pouco de cada coisa que fizemos, adicionando uma função em um evento <em>change</em> do <em>input</em> do upload. Neste momento, também é feito o laço dentre o(s) arquivo(s) selecionado(s) para validar e, se for válido, fazer o <em>upload</em>, utilizando os outros métodos acima mencionados. É neste momento também que serão criadas dinamicamente as barras: uma para cada arquivo.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >
document.querySelector('#upload-file').addEventListener('change', function() {
var files = this.files;
for(var i = 0; i &lt; files.length; i++){
var info = validarArquivo(files[i]);
    //Criar barra
    var barra = document.createElement("div");
    var fill = document.createElement("div");
    var text = document.createElement("div");
    barra.appendChild(fill);
    barra.appendChild(text);

    barra.classList.add("barra");
    fill.classList.add("fill");
    text.classList.add("text");

    if(info.error == undefined){
        text.innerHTML = info.success;
        enviarArquivo(i, barra); //Enviar
    }else{
        text.innerHTML = info.error;
        barra.classList.add("error");
    }

    //Adicionar barra
    document.querySelector('.lista-uploads').appendChild(barra);
};
});</textarea></pre>
</div>



<h2 class="wp-block-heading">PHP</h2>



<p>E pra terminar com chave de ouro, um <em>PHPzinho</em> que receberá esses arquivos e retornará um <em>json</em> com a confirmação de sucesso ou erro. Não aplicamos muitas validações nesse PHP pois nosso foco era neste exemplo está no <em>front-end</em>, mas é suficiente para que você compreenda sua funcionalidade.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="php" name="mshighlighter" ><?php
ini_set('upload_max_filesize', '2M');
header('Content-Type: application/json');
$file = $_FILES['file'];

$ret = [];

if(move_uploaded_file($file['tmp_name'],'uploads/'.$file['name'])){
    $ret["status"] = "success";
    $ret["path"] = 'uploads/'. $file['name'];
    $ret["name"] = $file['name'];
}else{
    $ret["status"] = "error";
    $ret["name"] = $file['name'];
}

echo json_encode($ret, JSON_PRETTY_PRINT);
?></textarea></pre>
</div>



<p>E, como sempre, você pode baixar o código inteiro no <em>Github</em> e usar direto na sua aplicação.</p>



<!-- Place this tag where you want the button to render. -->
<center><a class="github-button" href="https://github.com/velhobit/upload-html/archive/master.zip" data-size="large" aria-label="Download velhobit/upload-html on GitHub">Download</a></center>



<p>Gostou? Se sim, compartilha com seus amiguinhos interessados na área e curte a página no <strong><em><a rel="noreferrer noopener" href="https://www.facebook.com/velhobit/" target="_blank">Facebook</a></em></strong>. O exemplo acima está levemente modificado para que funcione melhor aqui no site. Entre também no grupo de Design e Desenvolvimento. O <em>link</em> está abaixo do post.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Wireframe, Mockup ou Protótipo?</title>
		<link>https://velhobit.com.br/design/wireframe-mockup-ou-prototipo.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Thu, 31 Jan 2019 05:33:02 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[interface gráfica]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1780</guid>

					<description><![CDATA[Quando iniciamos a criação de sistemas, usamos diversas técnicas para ilustrar o resultado final. Você sabe a diferença entre Wireframe, Mockup e Protótipo?]]></description>
										<content:encoded><![CDATA[
<p>Quando iniciamos um aplicativo, site, sistema, ou diversos outros ambientes de interação, o primeiro passo é criar diferentes tipos de propostas de como vai ser a aplicação e de como vai ser seu comportamento. Se você é desenvolvedor, independente de ser designer ou programador, ou ainda está estudando, você já deve ter tido a necessidade de criar, ao menos, um rascunho de como será a interface gráfica de sua aplicação. E, se você pretende trabalhar especificamente com interfaces gráficas ou UX, a definição desses termos é ainda mais importante, sendo fundamental para uma boa comunicação e escolha de ferramentas adequadas.</p>



<h2 class="wp-block-heading">Importância</h2>



<p>Quando o desenvolvedor está em reunião com seu cliente, ou apenas lendo os requerimentos, este já vislumbra em sua mente o processo pelo qual o usuário conseguirá atingir seu objetivo. Além disso, também pensa em como comandos e dados devem influenciar uns aos outros (o que chamamos de <strong>regra de negócio</strong> do <em>software</em>). Mas nossa mente não é exatamente o melhor local para armazenar informações, pois a memória humana é volátil, se adapta e, o que é mais comum, se esquece de informações que podem ser importantes.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="698" src="https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta-1024x698.jpg" alt="" class="wp-image-1781" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta-1024x698.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta-400x273.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta-768x524.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta-600x409.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/01/escrevendo-caneta.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Por isso, é normal que um profissional, desde o seu primeiro pensamento, já comece a fazer rabiscos e anotações em uma caderneta ou em um guardanapo. Dessa forma, ele vai poder planejar não apenas o leiaute, mas todo comportamento do usuário e, inclusive, ajudar a modelagem de dados e lógica do projeto.</p>



<h2 class="wp-block-heading">Esboços ou <em>Sketchs</em></h2>



<p>Um <strong>esboço</strong> ou <em><strong>sketch</strong></em>, é o primeiro passo para a criação da interface gráfica de um aplicativo. Basicamente é o que o desenvolvedor em primeiro passo. Desenhos simples, com muitas marcações, textos e números, que devem ser suficientes apenas para a compreensão deste e/ou do designer responsável (caso o designer não seja o próprio desenvolvedor). Esses esboços são feitos em papel, de preferência em um bloco de anotações, com lapiseira ou caneta. Fazer à mão é importante para que a fluidez do pensamento resolva melhores definições, assim como a ideia flui melhor dentro da cabeça de que o está projetando.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="526" src="https://velhobit.com.br/wp-content/uploads/2019/01/sketchs-1024x526.jpg" alt="" class="wp-image-1782" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/sketchs-1024x526.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/sketchs-400x205.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/sketchs-768x394.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/sketchs-600x308.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/01/sketchs.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Para quem tem uma frequência muito alta de rascunhos, existem cadernetas específicas para isso, tendo formatos e linhas de base adequadas para o tipo de dispositivo. Outras pessoas preferem andar com papéis impressos com os templates base. Sites como o <a rel="noreferrer noopener" aria-label="SneakPeekit (abre em uma nova aba)" href="https://sneakpeekit.com/" target="_blank">SneakPeekit</a> e o <a href="http://www.raincreativelab.com/paperbrowser/" target="_blank" rel="noreferrer noopener" aria-label="PaperBrowser (abre em uma nova aba)">PaperBrowser</a>, disponibilizam templates para esboços.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="840" height="360" src="https://velhobit.com.br/wp-content/uploads/2019/01/resources_app_designers_printable.jpg" alt="" class="wp-image-1783" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/resources_app_designers_printable.jpg 840w, https://velhobit.com.br/wp-content/uploads/2019/01/resources_app_designers_printable-400x171.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/resources_app_designers_printable-768x329.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/resources_app_designers_printable-600x257.jpg 600w" sizes="auto, (max-width: 840px) 100vw, 840px" /><figcaption>fonte: geekchix.org</figcaption></figure>



<h2 class="wp-block-heading"><em>Wireframes</em></h2>



<p><em><strong>Wireframes</strong></em> são leiautes demonstrativos da diagramação de elementos na tela, geralmente contendo indicadores. Trata-se de uma evolução de um esboço, sendo mais bem trabalhado, indicando a disposição dos diversos elementos e conteúdo. Por originalmente serem desenhados em papeis milimetrados ou pautados, são também chamados de <strong>esboços de grade</strong>. Esta etapa ainda pode ser feita por alguém sem muita experiência com <a rel="noreferrer noopener" aria-label=" (abre em uma nova aba)" href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank">design</a>, pois é basicamente uma forma de organizar as ideias rabiscadas anteriormente no papel. <a href="https://velhobit.com.br/design/quanto-custa-ser-designer.html" target="_blank" rel="noreferrer noopener" aria-label="Se você designe (abre em uma nova aba)">Se você designe</a>r, é comum pular essa etapa, indo do esboço direto para o <em>mockup</em>.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="683" src="https://velhobit.com.br/wp-content/uploads/2019/01/4979740562_6dfdf842ce_b-1024x683.jpg" alt="" class="wp-image-1784" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/4979740562_6dfdf842ce_b.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/4979740562_6dfdf842ce_b-400x267.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/4979740562_6dfdf842ce_b-768x512.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/4979740562_6dfdf842ce_b-600x400.jpg 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Foto: Todd Moy</figcaption></figure>



<p>Hoje os <em>wireframes</em> são feitos digitalmente, por ferramentas específicas, como o <em><a href="https://balsamiq.com/" target="_blank" rel="noreferrer noopener" aria-label="Balsamiq Wireframes (abre em uma nova aba)">Balsamiq Wireframes</a></em> ou através de conjuntos de bibliotecas e plugins que podem ser incorporados aos aplicativos da Adobe, como o Illustrator.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="576" src="https://velhobit.com.br/wp-content/uploads/2019/01/toptal-blog-image-1524474978083-99a81d0b114fa0634cd822f13e00e24d-1024x576.png" alt="" class="wp-image-1785" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/toptal-blog-image-1524474978083-99a81d0b114fa0634cd822f13e00e24d-1024x576.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/toptal-blog-image-1524474978083-99a81d0b114fa0634cd822f13e00e24d-400x225.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/toptal-blog-image-1524474978083-99a81d0b114fa0634cd822f13e00e24d-768x432.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/toptal-blog-image-1524474978083-99a81d0b114fa0634cd822f13e00e24d-600x337.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Biblioteca de Wireframes no Adobe Illustrator. Foto: Toptal.</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="361" src="https://velhobit.com.br/wp-content/uploads/2019/01/di-1024x361.png" alt="" class="wp-image-1786" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/di-1024x361.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/di-400x141.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/di-768x271.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/di-600x211.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Exemplos Wireframes</figcaption></figure>



<h2 class="wp-block-heading">Mockups</h2>



<p>Agora é a vez do designer (ou seu lado designer) brilhar. Os <em><strong>mockups</strong></em> são leiautes com exemplos finais, ou muito próximo destes, da interface gráfica. Basicamente serve de mapa para a implementação da mesma, com exemplos das telas, componentes e estilos já finalizados. Os mockups são bem mais trabalhados que os <em>wireframes</em> e raramente possuem indicadores internos, para não atrapalhar a compreensão da GUI (Interface Gráfica do Usuário). Muitas vezes, é comum mostrar os mockups também em cenas de interações, ajudando a demonstrar o uso e a ter uma melhor ideia do resultado final.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="691" src="https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920-1024x691.png" alt="" class="wp-image-1787" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920-1024x691.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920-400x270.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920-768x518.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920-600x405.png 600w, https://velhobit.com.br/wp-content/uploads/2019/01/3a893117-9de6-437f-a814-e223c0eaa1ae_rw_1920.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fonte: https://portillo.myportfolio.com</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="504" height="1024" src="https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1-504x1024.png" alt="" class="wp-image-1789" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1-504x1024.png 504w, https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1-197x400.png 197w, https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1-768x1559.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1-296x600.png 296w, https://velhobit.com.br/wp-content/uploads/2019/01/velhobit.com_.br_shoppingrecife_ionic_www_iPhone-6_7_8-Plus-1.png 1410w" sizes="auto, (max-width: 504px) 100vw, 504px" /></figure>



<p>Dentre diversas ferramentas para criação de <em>mockups</em>, temos o<a rel="noreferrer noopener" aria-label=" Adobe XD (abre em uma nova aba)" href="https://www.adobe.com/br/products/xd.html" target="_blank"> Adobe XD</a> (gratuito), o Sketch e há quem até hoje prefira criar bibliotecas no Photoshop, Illustrator, Pixelmator ou similares. Sendo opção ou não do designer seguir as diretrizes de interface humana recomendado para o sistema ou aplicação.</p>



<h3 class="wp-block-heading"><em>Human Interface&nbsp;Guidelines</em></h3>



<p>Se você é designer, você ainda deve trabalhar no chamado <em>Human Interface&nbsp;Guidelines</em> ou Diretrizes de Interface Humana, como alguns gostam de chamar. Trata-se das instruções básicas de como deve ser a GUI da aplicação, de um contexto de uma suite agregada ou até mesmo, como em sistemas operacionais, instruções de como outros designers devem implementar soluções para essa aplicação.</p>



<p>Para quem já trabalha ou trabalhou com identidades visuais, se assemelha muito aos manuais destas, porém ainda mais detalhados, mas com as informações sobre espaçamentos, iconografia, tipografia, cores, etc, incluindo, mas não se resumindo, a um conjunto de mockups que possuem exemplos das telas. Essas informações devem ser seguidas à risca por quem for implementar, sejam outros designers ou programadores front-end.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="691" src="https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920-1024x691.png" alt="" class="wp-image-1792" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920-1024x691.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920-400x270.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920-768x518.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920-600x405.png 600w, https://velhobit.com.br/wp-content/uploads/2019/01/3ebe1ef046d020b4f5c485e3_rw_1920.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fonte: https://portillo.myportfolio.com</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="512" src="https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920-1024x512.jpg" alt="" class="wp-image-1790" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920-1024x512.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920-400x200.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920-768x384.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920-600x300.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/01/426bcc51-fadd-4f04-b73c-82c90f4cbb7c_rw_1920.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fonte: https://portillo.myportfolio.com</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="512" src="https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920-1024x512.jpg" alt="" class="wp-image-1793" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920-1024x512.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920-400x200.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920-768x384.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920-600x300.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/01/fec31b81-20f8-42d8-bef2-fa3ce6ea3013_rw_1920.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fonte: https://portillo.myportfolio.com</figcaption></figure>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="691" src="https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920-1024x691.png" alt="" class="wp-image-1794" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920-1024x691.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920-400x270.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920-768x518.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920-600x405.png 600w, https://velhobit.com.br/wp-content/uploads/2019/01/104d9b7d-8826-4536-9372-d450e58f9ca1_rw_1920.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Fonte: https://portillo.myportfolio.com</figcaption></figure>



<p>As Diretrizes são fundamentais principalmente em um sistema com uma quantidade de telas indefinida, como sistemas de gestão. Elas vão servir de guia para a criação de novas telas e componentes, além de inspiração para futuros materiais de publicidade e até sites.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="693" src="https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6-1024x693.png" alt="" class="wp-image-1795" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6-1024x693.png 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6-400x271.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6-768x520.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6-600x406.png 600w, https://velhobit.com.br/wp-content/uploads/2019/01/inputs_1360x920_vp6.png 1360w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Foto: Microsoft Fluent Design</figcaption></figure>



<p>Se você vai fazer uma aplicação para um determinado sistema operacional, ou apenas quer usar um como referência para não se preocupar tanto com o design, existem algumas diretrizes bem famosas, dentre elas a da <a rel="noreferrer noopener" aria-label="Apple (abre em uma nova aba)" href="https://developer.apple.com/design/" target="_blank">Apple&nbsp;</a>(disponível para iOS/MacOS/TVOS/WatchOS), o <a rel="noreferrer noopener" aria-label="Material Design (abre em uma nova aba)" href="https://material.io/design/" target="_blank">Material Design</a> do Google (aplicável para sites e Android), o <a rel="noreferrer noopener" aria-label="Fluent Design (abre em uma nova aba)" href="https://developer.microsoft.com/en-us/windows/apps/design" target="_blank">Fluent Design</a> da Microsoft (também disponível o <a rel="noreferrer noopener" aria-label="UXGuide legado (abre em uma nova aba)" href="https://docs.microsoft.com/en-us/windows/desktop/uxguide/controls" target="_blank">UXGuide legado</a>) e tantos outros mais genéricos que você pode encontrar ou comprar pela internet.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="768" height="360" src="https://velhobit.com.br/wp-content/uploads/2019/01/Dialog-buttons.png" alt="" class="wp-image-1797" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/Dialog-buttons.png 768w, https://velhobit.com.br/wp-content/uploads/2019/01/Dialog-buttons-400x188.png 400w, https://velhobit.com.br/wp-content/uploads/2019/01/Dialog-buttons-600x281.png 600w" sizes="auto, (max-width: 768px) 100vw, 768px" /><figcaption>Fonte: Apple</figcaption></figure>



<h4 class="wp-block-heading">UI Kits</h4>



<p>Se você está trabalhando com <em>mockups</em> e <em>wireframes</em>, geralmente você está trabalhando focado no funcionamento em um sistema operacional. Para montar seu leiaute de forma mais simples e sem perder muito tempo se  adequando à diretriz escolhida, as desenvolvedoras costumam também disponibilizar <em>UI Kits</em>.</p>



<p>Esses <strong>kits de interface de usuário</strong> são arquivos ou bibliotecas que possuem os principais elementos gráficos genéricos do sistema. Geralmente é incluído elementos como botões, <em>inputs</em>, padrões de texto, cores, etc. Os principais <em>UI kits</em>, incluindo Android e iOS estão disponíveis direto pelas respectivas empresas ou através das desenvolvedoras dos principais <em>softwares</em> de <em>mockups</em>.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="565" src="https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms-1024x565.jpg" alt="" class="wp-image-1798" srcset="https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms-1024x565.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms-400x221.jpg 400w, https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms-768x424.jpg 768w, https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms-600x331.jpg 600w, https://velhobit.com.br/wp-content/uploads/2019/01/Adobe-XD-has-UI-kits-for-major-app-platforms.jpg 1344w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>UI Kit do Android / Material Design para o Adobe XD. Fonte: Adobe.</figcaption></figure>



<h2 class="wp-block-heading">Protótipo</h2>



<p>O último passo antes (ou até durante) a implementação é a prototipagem. Basicamente, ele é um passo acima do <em>mockup.</em> Uma etapa onde o <a rel="noreferrer noopener" aria-label=" (abre em uma nova aba)" href="https://velhobit.com.br/design/o-que-e-design-de-interacao.html" target="_blank">designer de interação</a> não apenas demonstra o leiaute <em>per se</em>, mas as ações e interações entre as telas e elementos. Há várias formas de se criar um protótipo.</p>



<p>Algumas pessoas mais experientes preferem criar HTMLs simples, com animações e ações apenas com dados de exemplos, para demonstrar o comportamento, sem se importar ainda com tecnologias ideais ou funcionalidade, pois a ideia é ser apenas demonstrativo.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="720" height="520" src="https://velhobit.com.br/wp-content/uploads/2019/01/xd-riverflow-2-720x520.gif" alt="" class="wp-image-1800"/><figcaption>Exemplo de prototipagem no Adobe XD. Fonte: divulgação.</figcaption></figure>



<p>Hoje em dia, entretanto, é mais comum usar ferramentas de prototipagem. Quase todas as ferramentas modernas de mockup também fazem prototipagem, como o Adobe XD, Sketch, Figma, Zeplin, dentre outros. Esses aplicativos possuem diversas ferramentas não só de interação, como demonstração de transições e testes em dispositivos móveis.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="710" height="400" src="https://velhobit.com.br/wp-content/uploads/2019/01/sketch-prototype-11.gif" alt="" class="wp-image-1799"/><figcaption>Exemplo de prototipagem no InVision. Fonte: divulgação.</figcaption></figure>



<p>Outra forma de prototipagem são as criadas para apresentação em vídeo. Geralmente são criadas para vender uma ideia e não tem ainda um planejamento do software. Algumas ferramentas de prototipagem, como o InVision, Fuse e o Proto.io possuem ferramentas específicas para exportação em vídeo. Há também quem prefira fazer as transições do protótipo direto no After Effects, para dar um charme a mais para essas apresentações, geralmente com o uso de bibliotecas de animações.</p>



<h2 class="wp-block-heading">Concluindo</h2>



<p>O processo de esquematização visual de uma aplicação é fundamental para que a equipe envolvida no desenvolvimento tenha um guia de como deverá ser projetada a aplicação. Desde o esboço até a prototipagem, essas técnicas ajudam na compreensão, agilidade e segurança do projeto. O esforço para conhecer bem os termos ajuda na comunicação entre os integrantes da equipe, garantindo uma melhor interação entre todos.</p>



<p>Se gostou do que leu, <a href="https://www.facebook.com/velhobit/" target="_blank" rel="noreferrer noopener" aria-label="curta a página no Facebook (abre em uma nova aba)">curta a página no Facebook</a> e compartilhe a informação.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como destacar (hightlight) uma célula de uma Tabela HTML após uma busca</title>
		<link>https://velhobit.com.br/programacao/como-destacar-hightlight-uma-celula-de-uma-tabela-html-apos-uma-busca.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Sun, 20 Jan 2019 23:38:57 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1771</guid>

					<description><![CDATA[Como fazer uma busca em uma tabela e destacar a célula e coluna do resultado]]></description>
										<content:encoded><![CDATA[
<p>Melhorar a experiência do usuário é sempre importante. E, muitas vezes, resultados de pesquisas tendem a ser muito grandes, principalmente em pesquisas semânticas. Por que então não destacar o elemento buscado para facilitar que o usuário saiba a linha e/ou coluna correta? E, como sempre, Javascript puro.</p>



<h2 class="wp-block-heading">Exemplo</h2>



<form id="search" onsubmit="highlightColumn();return false">
  <input type="text" id="word"/>
  <button>
  Buscar Palavra
  </button>
</form>


<div id="areaTabela" class="area-tabela">
  <table>
    <thead>
      <tr>
        <th>Coluna A</th>
        <th>Coluna B</th>
        <th>Coluna C</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>abacaxi</td>
        <td>manga</td>
        <td>limão</td>
      </tr>
      <tr>
        <td>coelho</td>
        <td>espinafre</td>
        <td>jerimum</td>
      </tr>
      <tr>
        <td>tomate</td>
        <td>cebola</td>
        <td>rapadura</td>
      </tr>
    </tbody>
  </table>
</div>



<h2 class="wp-block-heading">HTML</h2>



<p>Para começar, vamos criar o form e a tabela. Nada complicado e semanticamente correto.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="html" name="mshighlighter" ><form id="search" onsubmit="highlightColumn();return false">
  <input type="text" id="word"/>
  <button>
  Buscar Palavra
  </button>
</form>


<div id="areaTabela" class="area-tabela">
  <table>
    <thead>
      <tr>
        <th>Coluna A</th>
        <th>Coluna B</th>
        <th>Coluna C</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>abacaxi</td>
        <td>manga</td>
        <td>limão</td>
      </tr>
      <tr>
        <td>coelho</td>
        <td>espinafre</td>
        <td>jerimum</td>
      </tr>
      <tr>
        <td>tomate</td>
        <td>cebola</td>
        <td>rapadura</td>
      </tr>
    </tbody>
  </table>
</div></textarea></pre>
</div>



<h2 class="wp-block-heading">CSS</h2>



<p>Precisamos fazer o CSS. De forma geral, não precisamos criar tantas opções. O importante é você criar as classes referentes ao <em>highlight</em> e ao <em>highlight</em> da coluna. Tem um charminho de escala e sombra, mas você faz como achar melhor.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="css" name="mshighlighter" >.area-tabela table{
  margin-top:20px;
  border-spacing: 0;
  border: 1px solid grey;
  width: 100%;
}

.area-tabela table td, .area-tabela table th{
  width:80px;
  padding: 5px 10px;
  font-size: 14px;
  
  transition: all .3s linear;
  -moz-transition: all .3s linear;
  -webkit-transition: all .3s linear;
}

.area-tabela table th{
  background-color: grey;
  color: white;
  font-weight: normal;
}

.area-tabela table tr:nth-child(even) td{
  background-color: #efefef;
}

.area-tabela table tr td.high_col{
  background-color: #e5f7f8;
}
.area-tabela table tr:nth-child(even) td.high_col{
  background-color: #d1eff0;
}

.area-tabela table tr th.high_col{
  background-color: #063b5a;
}

.area-tabela table tr td.high_col.high{
  background-color: #93fffc;
  font-weight: bold;
  transform: scale(1.05);
  box-shadow: 0 3px 5px rgba(0,0,0,.5);
}</textarea></pre>
</div>



<h2 class="wp-block-heading">Javascript</h2>



<p>Agora vem a parte que pode complicar um pouco. A primeira coisa que precisamos fazer é certificar-se, em um laço, que limparemos as classes <em>high_col</em> e <em>high</em> dos outros elementos. Em seguida, iremos usar a função <em>evaluate</em> para verificar se o texto digitado está contido em uma das células. Para capturar os <em>td&#8217;s</em> da coluna ativa, iremos verificar o índice da célula encontrada e usaremos isso para colocar a classe nas outras células e cabeçalho dessa coluna.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function highlightColumn(){
	//Clear
  document.querySelectorAll("#areaTabela table tr td").forEach((item)=>{
	item.classList.remove("high");
  item.classList.remove("high_col");
});
  document.querySelectorAll("#areaTabela table tr th").forEach((item)=>{
	item.classList.remove("high_col");
});
  
	var word = document.querySelector("#word").value;
 	
  if(word == ""){
  	return false;
  }
  
  //pegar o elemento
  var el = document.evaluate("//td[contains(.,'" + word + "')]", document.querySelector("#areaTabela"), null, XPathResult.ANY_TYPE, null ).iterateNext();
 
  //Se quiser a palavra completa e não trecho dela, troque a linha acima por:
  //var el = document.querySelector("td[text()='"+word+"']");
  
  //Check if el exists
  if(el == undefined){
    return false;
  }
  
  //Highlight column
  var index = (Array.prototype.slice.call(el.parentNode.children).indexOf(el));
  
  document.querySelectorAll("#areaTabela table tr td:nth-child("+(index+1)+"), #areaTabela table tr th:nth-child("+(index+1)+")").forEach((item)=>{
    item.classList.add("high_col");
  });
  
  //Highlight Element
  el.classList.add("high");
  
  return false;
}</textarea></pre>
</div>



<p class="has-text-color has-vivid-red-color">Obs. Se você quiser buscar pelo valor específico, substitua o evaluate por <strong><em>document.querySelector(&#8220;td[text()='&#8221;+word+&#8221;&#8216;]&#8221;)</em></strong>. Dessa forma não será selecionado  nenhuma célula a menos que o valor seja exato.</p>



<p>Simples não é?</p>



<p>Como sempre, o exemplo e código completo está disponível abaixo, desta vez no jsFiddle. Basta copiar o código se quiser usar diretamente em seu projeto.</p>



<script async src="//jsfiddle.net/velhobit/beu4xt69/2/embed/result,js,html,css/dark/"></script>



<p>Se gostou, compartilhe e <a href="https://facebook.com/velhobit/" target="_blank" rel="noreferrer noopener" aria-label="curta a página no Facebook. (abre em uma nova aba)">curta a página no Facebook.</a> Entre também no grupo através do link abaixo.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como tirar uma foto usando a Webcam (Javascript + HTML)?</title>
		<link>https://velhobit.com.br/programacao/como-tirar-uma-foto-usando-a-webcam-javascript-html.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Sat, 19 Jan 2019 20:07:22 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[biometria]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[foto]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[identificação]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[registro]]></category>
		<category><![CDATA[rosto]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[webcam]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1748</guid>

					<description><![CDATA[Com o HTML5 podemos utilizar recursos de hardware em nossas páginas. Este tutorial mostra como usar Javascript e PHP para salvar screenshots da webcam.]]></description>
										<content:encoded><![CDATA[
<p class="has-very-light-gray-background-color has-background"><strong><em>Disclaimer:</em></strong> Provavelmente a funcionalidade de webcam não está acessível via navegador interno de aplicativo (como o navegador interno do app do Facebook ou outro app mobile). Experimente direto em um navegador (mobile ou desktop).</p>



<p>O HTML5 nos trouxe diversas opções interessantes para desenvolvimento de RIAs (<em>Rich Internet Applications</em>). Em diversos sistemas online, precisamos de uma foto da pessoa que está sendo cadastrada. Para sistemas de hotéis, saúde, academias, dentre outros, que precisam de maior identificação, podemos usar a <em>webcam</em> para fazer a foto na hora que poderá ser usada em posterior conferência. Recurso esse que também está disponível em dispositivos móveis.</p>



<p>A ideia é transformar a imagem corrente da <em>webcam</em> em uma imagem <em>base64</em>. Após isso, converter essa codificação em uma imagem JPG e devolver o caminho – quase como se fosse um upload. Dessa forma você poderá salvar apenas o caminho da imagem no seu banco de dados, sem ficar um campo muito extenso ou que possa falhar em dispositivos móveis. Neste exemplo, será usado Javascript puro, a fim de universalizar para quem quiser utilizar em sua aplicação web.</p>



<h2 class="wp-block-heading">Exemplo:</h2>



<button onclick="loadCamera()" class="cute-button"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f8.png" alt="📸" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clique aqui para visualizar a Webcam</button>
<div class="area-do-video">

<video autoplay="true" id="webCamera"></video>

<textarea type="text" id="base_img" name="base_img"></textarea>
<button type="button" onclick="takeSnapShot()">Tirar foto e salvar</button>
<img id="imagemConvertida">
<p id="caminhoImagem" class="caminho-imagem"><a href="" target="_blank" rel="noopener"></a></p>
</div>



<h2 class="wp-block-heading">HTML5</h2>



<p>Vamos começar criando nosso exemplo com os elementos HTML. Tudo o que realmente precisamos é de uma tag <em>button</em> e uma tag <em>video</em>, mas para poder visualizar o exemplo, vamos colocar o retorno em um <em>img</em>, link da imagem gerada e um <em>textarea</em> para vermos o <em>base64</em>.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="html" name="mshighlighter" ><div class="area">
			<video autoplay="true" id="webCamera">
			</video>
	
			<input type="text" id="base_img" name="base_img">
			<button type="button" onclick="takeSnapShot()">Tirar foto e salvar</button>
	
			<img id="imagemConvertida">
			<p id="caminhoImagem" class="caminho-imagem"><a href="" target="_blank" rel="noopener"></a></p>
			<script src="script.js"></script>
</div></textarea></pre>
</div>



<p>Não precisamos necessariamente de um CSS para poder funcionar, mas, apenas para exemplo, vamos colocar um <em>CSSzinho</em>&#8230;</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="css" name="mshighlighter" >body{
	font-family: sans-serif;
	margin: 0;
}

.area{
	margin: 10px auto;
	box-shadow: 0 10px 100px #ccc;
	padding: 20px;
	box-sizing: border-box;
	max-width: 500px;
}

.area video{
	width: 100%;
	height: auto;
	background-color: whitesmoke;
}

.area textarea{
	width: 100%;
	margin-top: 10px;
	height: 80px;
	box-sizing: border-box;
}

.area button{
	-webkit-appearance: none;
	width: 100%;
	box-sizing: border-box;
	padding: 10px;
	text-align: center;
	background-color: #068c84;
	color: white;
	text-transform: uppercase;
	border: 1px solid white;
	box-shadow: 0 1px 5px #666;
}

.area button:focus{
	outline: none;
	background-color: #0989b0;
}

.area img{
	max-width: 100%;
	height: auto;
}

.area .caminho-imagem{
	padding: 5px 10px;
	border-radius: 3px;
	background-color: #068c84;
	text-align: center;
}

.area .caminho-imagem a{
	color: white;
	text-decoration: none;
}

.area .caminho-imagem a:hover{
	color: yellow;
}</textarea></pre>
</div>



<h2 class="wp-block-heading">Javascript</h2>



<p>Agora vamos para a parte divertida. Basicamente vamos dividir nosso código em 3 partes: Chamar a webcam, tirar o instantâneo, e enviar/receber os dados do PHP. Criaremos o arquivo <strong><em>script.js</em></strong>.</p>



<p>A função <em>LoadCamera</em>, irá transformar a webcam em uma espécie de <em>streamming</em> local. Para isso, é necessário que o navegador tenha suporte a isso, logo, precisamos de um navegador moderno com total compatibilidade a HTML5. Basicamente, todos os navegadores modernos, então não pense em compatibilidade com <em>Internet Explorer</em>.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function loadCamera(){
	//Captura elemento de vídeo
	var video = document.querySelector("#webCamera");
		//As opções abaixo são necessárias para o funcionamento correto no iOS
		video.setAttribute('autoplay', '');
	    video.setAttribute('muted', '');
	    video.setAttribute('playsinline', '');
	    //--
	
	//Verifica se o navegador pode capturar mídia
	if (navigator.mediaDevices.getUserMedia) {
		navigator.mediaDevices.getUserMedia({audio: false, video: {facingMode: 'user'}})
		.then( function(stream) {
			//Definir o elemento vídeo a carregar o capturado pela webcam
			video.srcObject = stream;
		})
		.catch(function(error) {
			alert("Oooopps... Falhou :'(");
		});
	}
}</textarea></pre>
</div>



<p>Você deve ter notado que a função acima tem um comentário com alguns parâmetros adicionais. Esses parâmetros são necessários para o funcionamento no iOS.</p>



<p>Já a função <em>takeSnapShot</em> irá justamente tirar o instantâneo. Essa função irá criar um elemento <em>canvas</em> e desenhar em seu conteúdo uma imagem matricial, baseada no vídeo (um ctrl+c / ctrl+v automático, digamos assim). A partir daí podemos obter o <em>base64</em> desse canvas e utilizá-lo para enviar posteriormente.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function takeSnapShot(){
	//Captura elemento de vídeo
	var video = document.querySelector("#webCamera");
	
	//Criando um canvas que vai guardar a imagem temporariamente
	var canvas = document.createElement('canvas');
	canvas.width = video.videoWidth;
	canvas.height = video.videoHeight;
	var ctx = canvas.getContext('2d');
	
	//Desenhando e convertendo as dimensões
	ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
	
	//Criando o JPG
	var dataURI = canvas.toDataURL('image/jpeg'); //O resultado é um BASE64 de uma imagem.
	document.querySelector("#base_img").value = dataURI;
	
	sendSnapShot(dataURI); //Gerar Imagem e Salvar Caminho no Banco
}</textarea></pre>
</div>



<p>Você pode, inclusive, se quiser, já adicionar essa <em>base64</em> em no <em>src</em> de um elemento <em>img</em>.</p>



<p>Agora, precisamos enviar essa <em>base64</em> para o PHP. Usaremos o PHP para salvar a imagem em um arquivo jpg (você pode optar por png também). O PHP irá retornar, posteriormente, um <em>json</em> com o caminho completo da imagem, que iremos carregar no objeto <em>img</em> descrito no HTML supracitado. Faremos isso dinamicamente, por técnica de Ajax, sem formulário, pois o <em>submit</em> de um <em>form</em> poderá ser usado futuramente para a conclusão de um determinado cadastro:</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="javascript" name="mshighlighter" >function sendSnapShot(base64){
var request = new XMLHttpRequest();
request.open('POST', 'save_photos.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
<pre><code>    request.onload = function() {
        console.log(request);
        if (request.status &gt;= 200 &amp;&amp; request.status &lt; 400) {
            //Colocar o caminho da imagem no SRC
            var data = JSON.parse(request.responseText);

            //verificar se houve erro
            if(data.error){
                alert(data.error);
                return false;
            }

            //Mostrar informações
            document.querySelector("#imagemConvertida").setAttribute("src", data.img);
            document.querySelector("#caminhoImagem a").setAttribute("href", data.img);
            document.querySelector("#caminhoImagem a").innerHTML = data.img.split("/")[1];
        } else {
            alert( "Erro ao salvar. Tipo:" + request.status );
        }
    };

    request.onerror = function() {
        alert("Erro ao salvar. Back-End inacessível.");
    }

    request.send("base_img="+base64); // Enviar dados</code></pre>
<p>}</textarea></div>



<h2 class="wp-block-heading">PHP</h2>



<p>No lado do PHP, basicamente, usaremos um $_POST para capturar o dado enviado via <em>Ajax</em> pelo <em>Javascript</em>. Criaremos então o arquivo <strong><em>salvar_photos.php</em></strong>.</p>



<p>Não há muitos segredos, mas é importante se atentar a dois detalhes:</p>



<ol class="wp-block-list"><li>Os dados chegam com o + transformado em espaço, então precisamos converter novamente para + com um <em>replace</em>.</li><li>Precisamos salvar apenas os dados <em>mime</em>, sem os cabeçalhos, logo precisamos dar um explode para coletar apenas os dados. </li></ol>



<p>Fora isso, basicamente colocamos os dados em um arquivo JPG e retornamos a URL em <em>json</em> para ser lido pelo <em>Javascript</em> novamente.</p>


<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="php" name="mshighlighter" ><?php
	if(!isset($_POST['base_img'])){
		die("{\"error\": \" Flopou. Cadê o base_img?\"}");
	}

	$result = [];
	$data = str_replace(" ","+",$_POST['base_img']); //O envio do dado pelo XMLHttpRequest tende a trocar o + por espaço, por isso a necessidade de substituir. 
	$name = md5(time().uniqid()); 
	$path = "snaps/{$name}.jpg";

	//data
	$data = explode(',', $data);
	
	//Save data
	file_put_contents($path, base64_decode(trim($data[1])));
	
	//Print Data
	$result['img'] = $path;
	echo json_encode($result, JSON_PRETTY_PRINT);
?></textarea></pre>
</div>



<p>Uma vez tudo pronto, basta chamar a função <strong><em>loadCamera()</em></strong> no evento que você quer que ele seja disparado.</p>



<p>Como sempre, deixamos o código disponível para quem quiser utilizar. Desta vez, o código está no GitHub.</p>



<!-- Place this tag where you want the button to render. -->
<center style="margin-top:20px;"><a class="github-button" href="https://github.com/velhobit" data-size="large" data-show-count="true" aria-label="Follow @velhobit on GitHub">Follow @velhobit</a></center>



<p class="has-white-color has-luminous-vivid-orange-background-color has-text-color has-background"><strong>ATENÇÃO: O navegador não vai liberar o uso das ferramentas em um ambiente http. Você precisa necessariamente estar com seu site ou sistema em conexão segura (https).</strong></p>



<p>Se gostou, compartilha com seus amiguinhos interessados na área e curte a página no <strong><em><a rel="noreferrer noopener" aria-label="Facebook (abre em uma nova aba)" href="https://www.facebook.com/velhobit/" target="_blank">Facebook</a></em></strong>. O exemplo acima está levemente modificado para que funcione melhor aqui no site. Entre também no grupo de Design e Desenvolvimento. O link está abaixo do post.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Como redirecionar seu site / página por localização</title>
		<link>https://velhobit.com.br/programacao/como-redirecionar-seu-site-pagina-por-localizacao.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Sat, 25 Aug 2018 22:57:28 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[geolocalização]]></category>
		<category><![CDATA[idioma]]></category>
		<category><![CDATA[localização]]></category>
		<category><![CDATA[muitos idiomas]]></category>
		<category><![CDATA[multidioma]]></category>
		<category><![CDATA[redirecionamento]]></category>
		<category><![CDATA[redirecionar]]></category>
		<category><![CDATA[site multidioma]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1464</guid>

					<description><![CDATA[Uma forma simples e rápida de fazer o redirecionamento via Javascript ou PHP / cURL do seu site a partir da localização. Perfeito para sites multi-idiomas.]]></description>
										<content:encoded><![CDATA[<p>As vezes você precisa trabalhar com sites ou projetos multi-idiomas. Alguns desses projetos carregam dinamicamente a tradução ou possui páginas específicas em outro idioma. Redirecionar automaticamente para o conteúdo específico da região é um comportamento fundamental para uma boa experiência do usuário.</p>
<h2>Detecção por Geolocalização</h2>
<p>A forma mais simples e rápida de fazer isso, é através de uma API open-source online chamada <del>Nekudo (<a href="https://geoip.nekudo.com/">https://geoip.nekudo.com/</a>)</del>. O Nekudo não está mais disponível e virou IPI. Você precisa fazer um cadastro gratuito em https://ipapi.com/product e pegar sua chave e cadastrar o IP. Na dúvida de saber qual o IP do seu server, abra o seu prompt de comando (windows) ou terminal (Unix/Mac/Linux) e digite ping seusite.com.br.</p>
<p>A forma ideal de fazer isso é a partir da sugestão, ao invés do redirecionamento direto, como é feito no site da Apple e Adobe. Isso porque o usuário pode estar em viagem ou simplesmente preferir usar o conteúdo em outro idioma.</p>
<p>Vamos para a prática.</p>
<h2>Javascript</h2>
<p>Para facilitar, vamos usar um jQuery básico, que está presente em quase todos os sites e sistemas. Basta um &#8220;ajaxizinho&#8221; apenas para chamarmos a API do Geoplugin.</p>
<p>A URL <strong>https://api.ipapi.com/, seguido da chave e IP </strong>já devolve os dados em formato JSON. Como ele vai pegar o IP atual do usuário, não é necessário passar o IP:</p>
<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="js" name="mshighlighter" >
var ip = "check";
var access_key = "minhachavedeacesso";
jQuery.ajax({
url:'https://api.ipapi.com/' + ip + '?access_key=' + access_key
dataType: "json",
success: function(data){
console.log(data);
}
});</textarea></pre>
</div>
<p>O retorno então será:</p>
<div class="my-syntax-highlighter">
<pre id="result_code"></pre>
</div>
<p>Agora basta tratarmos o código para que execute uma ação e depois redirecione. Ficando assim:</p>
<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="js" name="mshighlighter" >

var ip = "check";

var access_key = "minhachavedeacesso";
jQuery.ajax({
url: 'https://api.ipapi.com/' + ip + '?access_key=' + access_key,
dataType: "json",
success: function(data){
if(data.country.code != "BR"){
var redirecionar = confirm("Hi, visitor! We checked you are in " + data.country.name + ". Would you like to visit english version?");
}
if(redirecionar){
window.location = "https://meusite.com/en/";//outra url
}
}
});</textarea></pre>
</div>
<p>Nesse ponto, apenas verificamos se não está no Brasil e ele vai redirecionar a página em questão.</p>
<p>Todavia, ele não vai guardar essa preferência. Logo, toda vez que a pessoa entrar no site, ela vai ter que responder a pergunta novamente. Mas para evitar que isso ocorra, podemos usar o localStorage. Garantindo assim que seja memorizada a opção e evitando que a API seja requerida desnecessariamente. O código final ficaria assim:</p>
<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="js" name="mshighlighter" >

var ip = "check";

var access_key = "minhachavedeacesso";

//Verifica primeiro se já tem o country code salvo
if(localStorage.sel_country_code == undefined){
jQuery.ajax({
url: 'https://api.ipapi.com/' + ip + '?access_key=' + access_key
dataType: "json",
success: function(data){
if(data.country.code != "BR"){
var redirecionar = confirm("Hi, visitor! We checked you are in " + data.country.name + ". Would you like to visit english version?");
}
if(redirecionar){
//Gravar o country_code
localStorage.sel_country_code = data.country.code
window.location = "https://meusite.com/en/";//outra url
}
}
});
}else{
//Caso já esteja definido
window.location = "https://meusite.com/en/";//outra url
//Obs. Use o valor armazenado em localStorage.sel_country_code, caso você tenha mais de um outro idioma
}</textarea></pre>
</div>
<p><center><br />
<button id="botaoTestes">Clique aqui para testar.</button></center></p>
<h2>Como saber se está funcionando?</h2>
<p>Para testar, basta você usar um serviço de VPN. Você pode fazer isso através de algum site, programa ou simplesmente rodando pelo Opera, que já possui uma VPN própria e é ótimo mantê-lo instalado para testes. Recomendamos que você use o Opera, pois, além de ser um bom navegador, ele é mais seguro para evitar usar sites duvidosos ou serviços de terceiros. O Opera Developer é uma boa opção e possui VPN integrado. <em><strong>Clique na imagem para ser direcionado a página de download oficial</strong></em>.</p>
<p><a href="https://www.opera.com/pt-br/computer/beta" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1477" src="https://velhobit.com.br/wp-content/uploads/2018/08/opera-developer.jpg" alt="Baixar Opera Developer" width="925" height="436" srcset="https://velhobit.com.br/wp-content/uploads/2018/08/opera-developer.jpg 925w, https://velhobit.com.br/wp-content/uploads/2018/08/opera-developer-400x189.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/08/opera-developer-768x362.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/08/opera-developer-600x283.jpg 600w" sizes="auto, (max-width: 925px) 100vw, 925px" /></a></p>
<p>Após instalar o Ópera, para habilitar o VPN, basta ir nas <strong>configurações</strong>, a partir do símbolo do <span style="color: #ff0000;"><em><strong>O</strong></em></span>, no canto superior esquerdo.</p>
<p><img decoding="async" class="aligncenter" style="max-width: 350px;" src="https://velhobit.com.br/wp-content/uploads/2018/08/opera-opcoes.jpg" /></p>
<p>Indo na guia Avançados &gt; Recursos, ele vai retornar a primeira opção como VPN. Simplesmente a habilite.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1482 size-full" src="https://velhobit.com.br/wp-content/uploads/2018/08/config-vpn.jpg" alt="" width="1017" height="304" srcset="https://velhobit.com.br/wp-content/uploads/2018/08/config-vpn.jpg 1017w, https://velhobit.com.br/wp-content/uploads/2018/08/config-vpn-400x120.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/08/config-vpn-768x230.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/08/config-vpn-600x179.jpg 600w" sizes="auto, (max-width: 1017px) 100vw, 1017px" /></p>
<p>Feito isso, a opção de VPN vai ficar visível e você poderá testar o funcionamento em diversos locais.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1484" style="max-width: 450px;" src="https://velhobit.com.br/wp-content/uploads/2018/08/vpn.jpg" alt="" width="600" height="663" srcset="https://velhobit.com.br/wp-content/uploads/2018/08/vpn.jpg 600w, https://velhobit.com.br/wp-content/uploads/2018/08/vpn-362x400.jpg 362w, https://velhobit.com.br/wp-content/uploads/2018/08/vpn-543x600.jpg 543w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<h2>Ah, mas eu não quero redirecionar assim, quero que seja pelo servidor</h2>
<p>Muito bem, digamos que você queira que o redirecionamento seja feito direto pelo servidor porque você é mal que nem um pica-pau. Sem problemas.</p>
<p>Para isso, você pode usar o cURL da sua linguagem de preferência e fazer o redirecionamento através dela. Aqui vai um exemplo mais comum, em PHP:</p>
<div class="my-syntax-highlighter">
<pre><textarea id="mshighlighter" class="mshighlighter" language="php" name="mshighlighter" >
&lt;?php

// IP e chave
$ip = $_SERVER['REMOTE_ADDR'];
$access_key = 'SUA CHAVE DE ACESSO';

// Inicializar CURL:
$ch = curl_init('http://api.ipapi.com/'.$ip.'?access_key='.$access_key.'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Capturar dados
$json = curl_exec($ch);
curl_close($ch);

// Decode JSON:
$retorno = json_decode($json, true);

if($retorno['country_code'] != "BR"){
header("location: https://seusite.com/idioma");
die();
}
?&gt;</textarea></pre>
</div>
<p><em>Lembrando que isso precisa ser inserido antes mesmo do doctype, pois se não pode retornar o erro de Headers Already Sent.</em></p>
<h2>Concluindo</h2>
<p>É bem simples testar o IP quanto a localização. Há diversos serviços, alguns pagos e outros gratuitos, que fazem esse tipo de redirecionamento. Também há plugins e extensões que você pode instalar em seu servidor, mas certamente a demonstrada aqui vai servir para a grande maioria dos projetos.</p>
<p>Curta e compartilhe <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Dicas para Otimizar o Console Javascript do Navegador</title>
		<link>https://velhobit.com.br/programacao/dicas-para-otimizar-o-console-javascript.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Fri, 16 Feb 2018 03:33:00 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[como colocar cor no console]]></category>
		<category><![CDATA[como colocar imagem no console]]></category>
		<category><![CDATA[como usar]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[console do navegador]]></category>
		<category><![CDATA[console web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[desenvolvimento web]]></category>
		<category><![CDATA[dicas de web]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[navegador]]></category>
		<category><![CDATA[programar para web]]></category>
		<category><![CDATA[usar o console]]></category>
		<category><![CDATA[uso do console]]></category>
		<category><![CDATA[web aplicação]]></category>
		<category><![CDATA[webapp]]></category>
		<category><![CDATA[webdesign]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=1148</guid>

					<description><![CDATA[O console do navegador é uma ferramenta importante para exibir a desenvolvedores um resultado simples de ser interpretado. Este post possui algumas dicas para você otimizar as funcionalidades dessa ferramenta.]]></description>
										<content:encoded><![CDATA[<p>Designers e desenvolvedores constantemente precisam <em>debugar</em> seus sistemas para encontrar erros ou relatar informações para outros desenvolvedores da equipe. Para otimizar o trabalho do profissional web, o <strong>Console</strong> do navegador de sua preferência permite adicionar diversas opções e comandos.</p>
<p>Se você digitar apenas console, no Console, você poderá ver a gama de Métodos que o Objeto tem disponível.</p>
<p>Neste tutorial, mostraremos alguns métodos e como utilizá-los de forma a permitir uma finalização que ajude o designer e desenvolvedor a obter respostas mais ideais para o problema. Você pode testar os comandos aqui mesmo, basta pressionar CTRL+SHIFT+I, ou simplesmente clicar com o botão direito e inspecionar elemento. Ao clicar na aba console, você poderá digitar os comandos e visualizar os resultados.</p>
<p>O método log é o mais básico e permite que você adicione uma</p>
<pre class="prettyprint">console.log("Oi Mundo");</pre>
<p>Porém o simples log de texto não necessariamente pode ser o ideal. Você pode, se assim precisar, adicionar alguma informação visual para que o log seja lido de forma mais intuitiva. Para isso, basta usar uma string de formato %c e instruções CSS. O exemplo abaixo, colocará o texto branco, negrito e com sombra:<!--?prettify linenums=true?--></p>
<pre class="prettyprint">console.log('%c Oi mundo', 'color:white; font-weight:bold; text-shadow: 0 0 1em black;font-size: 72px');</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1150" src="https://velhobit.com.br/wp-content/uploads/2018/02/oi-mundo.jpg" alt="" width="676" height="143" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/oi-mundo.jpg 676w, https://velhobit.com.br/wp-content/uploads/2018/02/oi-mundo-400x85.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/oi-mundo-600x127.jpg 600w" sizes="auto, (max-width: 676px) 100vw, 676px" /></p>
<p>Com isso é possível até mesmo adicionar imagens, através do background-image:</p>
<pre class="prettyprint">console.log('%c       ', 'font-size: 100px; background: url(http://cdn.nyanit.com/nyan2.gif) no-repeat;');</pre>
<p>Passando para um ponto mais sério, você também pode visualizar no console objetos diferentes de Strings. É possível, por exemplo, visualizar um objeto JSON, o que é algo muito funcional para visualizar o resultado de métodos AJAX.</p>
<pre class="prettyprint">console.log({teste: 'texto de teste', valor: 22})</pre>
<p>No caso de você colocar um JSON ou um array, você poderá estender e visualizar os detalhes desse objeto.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1154" src="https://velhobit.com.br/wp-content/uploads/2018/02/consolelogo.jpg" alt="" width="671" height="482" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/consolelogo.jpg 671w, https://velhobit.com.br/wp-content/uploads/2018/02/consolelogo-400x287.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/consolelogo-600x431.jpg 600w" sizes="auto, (max-width: 671px) 100vw, 671px" /></p>
<h2>Erros e Alertas</h2>
<p>Além do log, o Console também tem objetos que servem como point-breaks para testes e validações. Os métodos error() e warn() permite que você adicione informações de forma mais relevante e alertiva. Esses dois métodos também permitem usar a  string de formato %c .</p>
<pre class="prettyprint">console.error("Problema Sério");
console.warn("Problema Leve");</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1156" src="https://velhobit.com.br/wp-content/uploads/2018/02/problemas.jpg" alt="" width="792" height="222" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/problemas.jpg 792w, https://velhobit.com.br/wp-content/uploads/2018/02/problemas-400x112.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/problemas-768x215.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/problemas-600x168.jpg 600w" sizes="auto, (max-width: 792px) 100vw, 792px" /></p>
<p>Você deve notar que, ao lado da linha onde é demonstrada o alerta/erro, há uma palavra <em><strong>anonymous</strong></em>, entre parênteses. Essa informação define qual o método relacionado com a origem do erro. Por exemplo, se o erro ou alerta ocorrer dentro de um método, será mostrado o método onde ocorreu o erro.</p>
<pre class="prettyprint">var teste = function(){console.error("Oi")};
teste();</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1159" src="https://velhobit.com.br/wp-content/uploads/2018/02/teste-info.jpg" alt="" width="810" height="198" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/teste-info.jpg 810w, https://velhobit.com.br/wp-content/uploads/2018/02/teste-info-400x98.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/teste-info-768x188.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/teste-info-600x147.jpg 600w" sizes="auto, (max-width: 810px) 100vw, 810px" /></p>
<p>Essa informação é extremamente útil para auxiliar o desenvolvedor a saber qual a origem do problema.</p>
<h2>Identação</h2>
<p>Outra opção muito útil para definir detalhes no log é a identação. Na verdade, é uma organização em grupo e subgrupos das informações. Dessa forma, o desenvolvedor pode apresentar dados mais organizados para o testador.</p>
<pre class="prettyprint">console.group("Frases");
console.group("Saudações");
console.log("Oi!");
console.log("Olá!");
console.groupEnd();
console.group("Despedidas");
console.log("Tchau!");
console.log("Até mais.");
console.groupEnd();</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1161" src="https://velhobit.com.br/wp-content/uploads/2018/02/grupo-console.jpg" alt="" width="811" height="304" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/grupo-console.jpg 811w, https://velhobit.com.br/wp-content/uploads/2018/02/grupo-console-400x150.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/grupo-console-768x288.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/grupo-console-600x225.jpg 600w" sizes="auto, (max-width: 811px) 100vw, 811px" /></p>
<h2>Tabelas</h2>
<p>O método table() permite você mostrar informações de dados em uma tabela. Ele é um método muito útil para ler objetos, JSON e vetores. De forma automática, esse método irá reconhecer os dados e organizá-los nessa tabela. Se por acaso você passar um array, as chaves mostradas serão apenas os índices numéricos.</p>
<pre class="prettyprint">console.table({'Dia': '10:00', 'Noite': '22:00'});</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1163" src="https://velhobit.com.br/wp-content/uploads/2018/02/tabela-log.jpg" alt="" width="806" height="234" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/tabela-log.jpg 806w, https://velhobit.com.br/wp-content/uploads/2018/02/tabela-log-400x116.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/tabela-log-768x223.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/tabela-log-600x174.jpg 600w" sizes="auto, (max-width: 806px) 100vw, 806px" /></p>
<h2>Calcular Tempo</h2>
<p>O cálculo de tempo é fundamental para medir performance.  O método time() permite usar uma etiqueta para poder iniciar e finalizar uma contagem de tempo. Para isso, basta seguir o exemplo abaixo:</p>
<pre class="prettyprint">console.time("calcularTempo");
for(var i; i &lt; 100; i++){

}
console.timeEnd("calcularTempo");</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1165" src="https://velhobit.com.br/wp-content/uploads/2018/02/calcular-tempo.jpg" alt="" width="789" height="222" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/calcular-tempo.jpg 789w, https://velhobit.com.br/wp-content/uploads/2018/02/calcular-tempo-400x113.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/calcular-tempo-768x216.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/calcular-tempo-600x169.jpg 600w" sizes="auto, (max-width: 789px) 100vw, 789px" /></p>
<p>Esse tempo será calculado baseado no tempo que a máquina cliente demora para realizar determinada ação, por isso, esse valor pode variar de computador para computador.</p>
<h2>Strings de Substituição</h2>
<p>Além do %c, usado para CSS, você pode usar outras Strings com objetivos específicos.</p>
<table class="standard-table">
<tbody>
<tr>
<td class="header"><strong>String           </strong></td>
<td class="header"><strong>Descrição</strong></td>
</tr>
<tr>
<td>%o or %O</td>
<td>Exibe o objeto e permite você visualizar o objeto ao clicar nele.</td>
</tr>
<tr>
<td>%d or %i</td>
<td>Exibe um inteiro.</td>
</tr>
<tr>
<td>%s</td>
<td>Apenas uma string.</td>
</tr>
<tr>
<td>%f</td>
<td>Exibe um ponto flutuante</td>
</tr>
</tbody>
</table>
<p>Dependendo do navegador (como o Firefox), você pode ter opções adicionais de máscara quanto aos valores. Para saber os detalhes, você precisa verificar na documentação do navegador, mas são muito similares as Strings usadas no console em C e no Java.</p>
<p>Por exemplo:</p>
<pre class="prettyprint">console.log("O valor da compra de %d %s é de %f, com os dados %o", 3,'carros',38500.30,{'carro':'fusca'});</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1167" src="https://velhobit.com.br/wp-content/uploads/2018/02/exemplo-log-carro.jpg" alt="" width="780" height="220" srcset="https://velhobit.com.br/wp-content/uploads/2018/02/exemplo-log-carro.jpg 780w, https://velhobit.com.br/wp-content/uploads/2018/02/exemplo-log-carro-400x113.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/02/exemplo-log-carro-768x217.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/02/exemplo-log-carro-600x169.jpg 600w" sizes="auto, (max-width: 780px) 100vw, 780px" /></p>
<h2>Concluindo</h2>
<p>O uso apropriado do console do navegador pode ajudar os desenvolvedores a fazerem testes e obterem resultados mais fiéis destes. Além disso, pode exibir mensagens importantes para alertar um usuário leigo a não mexer nessas opções (como faz o Facebook). De qualquer forma, o conhecimento das opções do console são fundamentais para qualquer profissional web que trabalha com front-end.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>BitMail &#8211; Projeto de Envio de Mailmarketing em Lote</title>
		<link>https://velhobit.com.br/editorial/bitmail-projeto-de-envio-de-mailmarketing-em-lote.html</link>
					<comments>https://velhobit.com.br/editorial/bitmail-projeto-de-envio-de-mailmarketing-em-lote.html#comments</comments>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Tue, 02 Jan 2018 23:58:50 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[aplicativo]]></category>
		<category><![CDATA[bulk]]></category>
		<category><![CDATA[codigo aberto]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[envio]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mailmarketing]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=973</guid>

					<description><![CDATA[BitMail é um aplicativo desktop para envio de e-mails em lotes, criado com a tecnologia Electron / NodeJS. Este projeto é de código aberto e ainda está em beta e diversas funcionalidades não funcionam direito e apresentam falhas com o uso em alguns servidores de e-mail.]]></description>
										<content:encoded><![CDATA[<p style="text-align: center;"><!-- Place this tag where you want the button to render. --><br />
<a class="github-button" href="https://github.com/velhobit/BitMail--NodeJS---Electron-/archive/master.zip" data-icon="octicon-cloud-download" data-size="large" aria-label="Download velhobit/BitMail--NodeJS---Electron- on GitHub">Download</a></p>
<p>BitMail é um aplicativo desktop para envio de e-mails em lotes, criado com a tecnologia Electron / NodeJS. Este projeto é de código aberto e ainda está em beta e diversas funcionalidades não funcionam direito e apresentam falhas com o uso em alguns servidores de e-mail.</p>
<p style="text-align: center;"><!-- Place this tag where you want the button to render. --><br />
<a class="github-button" href="https://github.com/velhobit/BitMail--NodeJS---Electron-" data-size="large" data-show-count="true" aria-label="Star velhobit/BitMail--NodeJS---Electron- on GitHub">Star</a></p>
<h2>Sobre o Projeto</h2>
<p>Há duas semanas comecei a estudar NodeJS (em Dez de 2017) e, por consequência de interesse de criação de aplicativos para desktop, estudar um pouco de Electron. Apesar de já ter experiência com Javascript, estava interessado em entender a manipulação de arquivos locais.</p>
<p>Como quando estudo algo prefiro criar um projeto minimamente útil, resolvi criar uma variação de <a href="https://velhobit.com.br/projetos/portillo-mail.html">um projeto que criei anos atrás para um cliente e que também é de código aberto, o PortilloMail (eu sei, não é um nome muito criativo), criado em PHP e compatível com a maioria dos servidores compartilhados</a>.</p>
<p>Como ainda estou novo em NodeJS, ainda preciso resolver alguns problemas, que vou citar abaixo, mas o aplicativo já é utilizável em diversas circunstâncias.</p>
<ul>
<li><a href="https://velhobit.com.br/bitmail-como-preparar-os-arquivos-csv">COMO PREPARAR O ARQUIVO CSV?</a></li>
<li><a href="https://velhobit.com.br/bitmail-como-criar-meu-proprio-template">COMO CRIAR MEU PRÓPRIO TEMPLATE?</a></li>
<li><a href="https://velhobit.com.br/bitmail-faq-perguntas-frequentes">FAQ (PERGUNTAS FREQUENTES)</a></li>
</ul>
<h2>Como Enviar E-mails?</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-974" src="https://velhobit.com.br/wp-content/uploads/2018/01/tela-inicial-bulk-bit-mail.jpg" alt="" width="916" height="543" srcset="https://velhobit.com.br/wp-content/uploads/2018/01/tela-inicial-bulk-bit-mail.jpg 916w, https://velhobit.com.br/wp-content/uploads/2018/01/tela-inicial-bulk-bit-mail-400x237.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/01/tela-inicial-bulk-bit-mail-768x455.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/01/tela-inicial-bulk-bit-mail-600x356.jpg 600w" sizes="auto, (max-width: 916px) 100vw, 916px" /></p>
<p>O BitMail foi feito para ser extremamente simples. Sua tela inicial possui todas as informações básicas necessárias para enviar um e-mail.</p>
<p>A primeira coluna (da esquerda para a direita) refere-se ao remetente da mensagem. Basta colocar o nome de quem está enviando, a senha e o host.</p>
<p>Por enquanto, estamos listando apenas o host Gmail e Outlook, porém, você pode optar por personalizar para configurar o SMTP da sua própria hospedagem. <strong>Com o tempo iremos atualizar com outros padrões de hospedagens mais famosas</strong>.</p>
<p>A coluna do meio é referente a mensagem. Nela você coloca as informações básicas como Assunto e Mensagem (pode usar emojis) e deverá selecionar um arquivo CSV previamente configurado, que consta os e-mails e senhas dos destinatários.</p>
<p>A última coluna é a coluna de envio. Nela você deverá digitar um e-mail para teste. <strong>Apenas após você confirmar o teste, o botão ENVIAR vai ficar funcional.</strong></p>
<p>A barra inferior é a barra de templates. O aplicativo permite que você crie arquivos HTML e os use como templates. Como a ideia é servir de mailmarketing, você mesmo pode criar o seu template. <strong>Leia aqui sobre como incluir seu próprio template</strong>. Se o quadrado preto estiver selecionado, isso quer dizer que você não irá utilizar nenhum template e irá enviar a mensagem do jeito que estiver dentro da caixa mensagem (inclusive com tags HTML).</p>
<p>Para poder garantir que seu e-mail não fique preso em uma caixa de SPAM ou que você seja interrompido pelo limite da sua hospedagem ou servidor de e-mails, o aplicativo é limitado a 200 e-mails por hora. Você pode editar isso, tal como preencher as configurações da sua hospedagem, no PAINEL AVANÇADO.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-975" src="https://velhobit.com.br/wp-content/uploads/2018/01/emails-avancado.jpg" alt="" width="916" height="543" srcset="https://velhobit.com.br/wp-content/uploads/2018/01/emails-avancado.jpg 916w, https://velhobit.com.br/wp-content/uploads/2018/01/emails-avancado-400x237.jpg 400w, https://velhobit.com.br/wp-content/uploads/2018/01/emails-avancado-768x455.jpg 768w, https://velhobit.com.br/wp-content/uploads/2018/01/emails-avancado-600x356.jpg 600w" sizes="auto, (max-width: 916px) 100vw, 916px" /></p>
<p>Antes de usar, é extremamente aconselhável que você leia o FAQ e saiba como preparar o arquivo CSV.</p>
<p>Se você tiver interesse em como criar o seu próprio template, você também pode ler sobre isso aqui.</p>
<h2>Requerimentos</h2>
<p>Após a instalação do NodeJS, você vai precisar de uma série de bibliotecas para poder fazer compilar.</p>
<p>Você pode baixar o NodeJS para Windows diretamente pelo site oficial ou pode usar o seguinte comando para distribuições baseadas em Debian (instalando também seu gerenciador de pacotes):</p>
<pre class="prettyprint">sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm</pre>
<p>Após a instalação do NodeJS, acesse o console e instale o Electron:</p>
<pre class="prettyprint">npm install electron --save-dev --save-exact</pre>
<p>Para o envio dos e-mails, o pacote nodemailer se faz necessário. Para instala-lo, acesse o console e use:</p>
<pre class="prettyprint">npm install nodemailer</pre>
<p>Por fim, para diminuir o código de leitura de arquivo, pois precisava que ele fosse síncrono e mais simples, resolvi usar o n-readlines. Provavelmente, em atualizações futuras não irei usar, mas por enquanto:</p>
<pre class="prettyprint">npm install n-readlines</pre>
<p>Para poder compilar, acesse o console e na pasta onde você salvou o projeto, execute:</p>
<pre class="prettyprint">npx electron .</pre>
<p>Pronto. Você agora já pode utilizar.</p>
<p><strong>Obs. A única biblioteca front-end utilizada, para facilitar o desenvolvimento, foi o jQuery. Além do jQuery e das bibliotecas node utilizadas, o resto foi programado por mim. Então peguem leve nas críticas.</strong></p>
<p style="text-align: center;"><!-- Place this tag where you want the button to render. --><br />
<a class="github-button" href="https://github.com/velhobit" data-size="large" data-show-count="true" aria-label="Follow @velhobit on GitHub">Follow @velhobit</a></p>
<p><!-- INICIO FORMULARIO BOTAO PAGSEGURO --></p>
<form action="https://pagseguro.uol.com.br/checkout/v2/donation.html" method="post"><!-- NÃO EDITE OS COMANDOS DAS LINHAS ABAIXO --> <input name="currency" type="hidden" value="BRL"> <input name="receiverEmail" type="hidden" value="portillo.designer@gmail.com"> <input style="padding: 1em 2em; display: block; margin: 0 auto; background-color: #33c375; text-decoration: none; text-align: center; color: white; border-radius: 10px; border: none; font-size: 1em; text-transform: uppercase;" alt="Pague com PagSeguro - é rápido, grátis e seguro!" name="submit" type="submit" value="Doar Pelo PagSeguro"></form>
]]></content:encoded>
					
					<wfw:commentRss>https://velhobit.com.br/editorial/bitmail-projeto-de-envio-de-mailmarketing-em-lote.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Emojis 🤔. O Que São Realmente? Qualquer um Pode Fazer?</title>
		<link>https://velhobit.com.br/editorial/unicode-emojis-o-que-sao.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Wed, 13 Dec 2017 19:04:08 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[comunicação]]></category>
		<category><![CDATA[consórcio]]></category>
		<category><![CDATA[conversa]]></category>
		<category><![CDATA[cores]]></category>
		<category><![CDATA[desenhos]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[emoji]]></category>
		<category><![CDATA[ícone]]></category>
		<category><![CDATA[ilustração]]></category>
		<category><![CDATA[live messenger]]></category>
		<category><![CDATA[messenger]]></category>
		<category><![CDATA[modernidade]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[símbolo]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[tipografia]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[vetor]]></category>
		<category><![CDATA[w3c]]></category>
		<guid isPermaLink="false">https://velhobit.com.br/?p=895</guid>

					<description><![CDATA[Como vivem? O que comem? Como se alimentam? Tudo o que você sempre quis saber sobre emojis, mas tinha medo de perguntar. Porém, com uma abordagem técnica e entendendo como funcionam.]]></description>
										<content:encoded><![CDATA[<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Emojis estão alta na comunicação social e hoje são peças-chave em diversas mídias, sendo aplicadas mais e mais como uma espécie de linguagem universal. Mas afinal, de onde vieram os emojis e qual a diferença deles em relação aos antigos emoticons?</p>
<p>Para entender mais sobre os emojis e sua história, primeiro precisamos entender sobre <em>charsets </em>e como o sistema operacional compreende e padroniza as informações referentes ao texto.</p>
<h2>Do Bit à Organização</h2>
<p>No princípio era o bit, o bom e <a href="https://velhobit.com.br" target="_blank" rel="noopener">Velho Bit</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />. O caractere era traduzido diretamente de um conjunto de 1 byte e impresso no dispositivo de saída de acordo com as variações desse byte. Óbvio que falar que a letra <em><strong>A</strong></em> era equivalente a um conjunto de <em><strong>1</strong></em> e <em><strong>0</strong></em>, logo se tornou ultrapassado e foi necessário codificar isso de forma mais inteligente. Com a popularização cada vez maior dos <em>mainframes</em>, os conjuntos de caracteres precisaram seguir padrões mais organizados e específicos para universalizar a escrita computacional. Foi nesse momento que foi criado o padrão hexadecimal para especificação de caracteres.</p>
<p>A programação hexadecimal, no início da era da computação, era muito usada para simplificar a compreensão de códigos. Posteriormente, com linguagens de programação, como o COBOL, a forma de escrita foi simplificada justamente a partir dos caracteres hexadecimais.</p>
<div class="obs">Obs. Para quem não está acostumado com o termo hexadecimal, se trata de um sistema numérico com base em 16 digitos. Diferente do sistema decimal mais comum, que vai de 0 a 9, o sistema hexadecimal passa pelos digitos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Através desse sistema, é possível criar uma variação maior e mais adequada de numerais, o que auxilia na definição de elementos, como neste caso, caracteres.</div>
<p>Porém, outros sistemas também foram usados para padronização de caracteres, como o próprio sistema decimal e o sistema octal. A partir dessa interpretação, foi criado nos anos 60 o primeiro documento oficial de padronização desses elementos, através de sistemas básicos, o ASCII (<em><strong>A</strong>merican <strong>S</strong>tandard <strong>C</strong>ode for <strong>I</strong>nformation <strong>I</strong>nterchange</em>).</p>
<p><figure id="attachment_898" aria-describedby="caption-attachment-898" style="width: 803px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-898" src="https://velhobit.com.br/wp-content/uploads/2017/12/asciitable.jpg" alt="Table ASCII" width="803" height="542" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/asciitable.jpg 803w, https://velhobit.com.br/wp-content/uploads/2017/12/asciitable-400x270.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/12/asciitable-768x518.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/12/asciitable-600x405.jpg 600w" sizes="auto, (max-width: 803px) 100vw, 803px" /><figcaption id="caption-attachment-898" class="wp-caption-text">Table ASCII</figcaption></figure></p>
<p>O ASCII consiste em um padronização e é conhecido como o sistema básico de codificação de caracteres. Como a computação moderna nasceu nos EUA, é de se esperar que o padrão ASCII cobriria muitos caracteres usados em seu idioma. Por isso, era necessário que essa padronização fosse regulamentada a partir de uma entidade mais internacionalizada. Por se tratar de glifos, algo que já era padronizado em máquinas de escrever e prensas tipográficas, nada mais natural que a responsável por essa padronização fosse a ISO (Organização Internacional de Normalização), que é composta por vários países. De pleno acordo, foi criado o padrão ISO 646, formalizado como o padrão US-ASCII, por usar uma base de caracteres ocidentais norte-americanos.</p>
<p>A partir daí o ISO formalizou diversas outras tabelas de codificação de caracteres, gerando uma enorme variação adaptada para cada região ou base de caracteres, havendo variações latinas, saxônicas e orientais. Como muitos países possuem idiossincrasias em seus caracteres, a quantidade desses padrões foram crescendo e gerando uma dificuldade de controle, resultando quase em uma despadronização.<em> Se você é programador, provavelmente já deve ter tido muitos problemas com a Windows 1252, que é uma vertente da normalização ISO 8859-1 e já deve ter tido que converter alguns arquivos por problemas de caracteres, seja no banco de dados ou na interpretação da leitura de arquivos.</em></p>
<h2>O Consórcio Unicode</h2>
<p>Visto que o ISO não era padronizado exatamente por uma organização da área de tecnologia, algumas questões acerca de caracteres ficaram insolúveis ou eram demasiadas burocráticas para fazer determinadas atualizações. Por isso, diversas empresas de tecnologia se juntaram para organizar um consórcio mais específico e organizado para uma diversidade maior de caracteres, em padrões adequados para a computação.</p>
<p>O Unicode (<em>Universal Code</em>) foi criado para organizar caracteres do ponto de vista mais computacional e adequado, baseado em experiencias anteriores da Xerox (sim, saíram muito mais coisas de lá do que apenas a interface gráfica). Fazem parte do Unicode empresas como a Adobe Systems, Apple, Facebook, Google, Huawei, IBM, Microsoft, Oracle Corporation, Yahoo! e várias outras que entram e aparecem, ou simplesmente seguem essas regras. Essa universalização foi fundamental para a criação de padrões que são altamente usados por praticamente todas as empresas no mercado de tecnologia. Sem dúvida, se você é programador ou designer, já deve ter usado constante, ou buscado por ele, o padrão UTF-8.</p>
<p>UTF-8 significa <em>Unicode Transformation Format</em> de 8 bits. É um padrão que, além de dar muito espaço para criação de caracteres, também é totalmente compatível com o padrão ASCII, tornando tudo mais simples e descomplicado para codificação adequada de caracteres. Existem outras codificações UTF, mas, por regra, o último numeral representa a quantidade de bits da codificação e, claro, quanto mais bits, mais espaço para adição de novos caracteres.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-899" src="https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_.png" alt="Unicode Logo" width="2000" height="2000" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_.png 2000w, https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_-400x400.png 400w, https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_-768x768.png 768w, https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_-1024x1024.png 1024w, https://velhobit.com.br/wp-content/uploads/2017/12/2000px-Unicode_logo.svg_-600x600.png 600w" sizes="auto, (max-width: 2000px) 100vw, 2000px" /></p>
<h2>A Comunicação Social</h2>
<p>Se por um lado haviam engenheiros desenvolvendo melhores formas de entrada e saída de caracteres, por outro a internet trouxe uma nova forma de se comunicar. Graças a velocidade com que as conexões foram ficando mais ágeis, diminuindo a distância entre os países, sistemas de <em>chat</em> foram ficando cada vez mais populares. Do antigo BBS ao mIRC, mais pessoas digitavam e buscavam formas mais simples e rápidas de demonstrar intenções e rostos a partir de padrões visuais. Foi daí que surgiram os famosos emoticons.</p>
<p>Emoticons (emotion icon) foi o termo dado a pequenas figurinhas que podia-se fazer a partir de representação com caracteres. Quem nunca usou o famoso <strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong>, para representar felicidade, ou <strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong>, para mandar uma piscadela charmosa? Isso acontece porque nosso cérebro é perfeito para reconhecer padrões e podemos criar assimilações de diversas expressões ou situações.</p>
<p>Logo, o emoticon se tornou algo popular, por se tratar de uma forma moderna e mais expressiva de comunicação. Se tornaram cada vez mais detalhadas e com mais caracteres e, muitas vezes, com caracteres pouco conhecidos, como <strong>( ͡° ͜ʖ ͡°)</strong>, <strong>¯\_(ツ)_/¯</strong>, <strong>(╬ ಠ益ಠ)</strong> e até alguns que exigiam mais de uma linha e espaços de caracteres iguais.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-901" src="https://velhobit.com.br/wp-content/uploads/2017/12/borboleta.png" alt="" width="638" height="330" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/borboleta.png 638w, https://velhobit.com.br/wp-content/uploads/2017/12/borboleta-400x207.png 400w, https://velhobit.com.br/wp-content/uploads/2017/12/borboleta-600x310.png 600w" sizes="auto, (max-width: 638px) 100vw, 638px" /></p>
<p>Visto essa popularização, programas como <em>MSN Messenger</em> (mais tarde renomeado para <em>Live Messenger</em>), <em>ICQ</em>, Chat da UOL, dentre outros, começaram a introduzir ícones mais complexos que representassem essas expressões. Emoticons ganharam um status mais visual e reconhecível na comunicação e obtiveram o apelido de <em><strong>smiles</strong></em>, termo importado a partir do famoso símbolo Smiley, criado pelo artista gráfico Harvey Ball, e seguindo a mesma lógica estética.</p>
<p>Agora mais complexos, em PNG, coloridos e até animados, os emoticons se tornaram elementos obrigatórios na comunicação em programas de <em>chats</em> modernos.</p>
<p><figure id="attachment_902" aria-describedby="caption-attachment-902" style="width: 950px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-902" src="https://velhobit.com.br/wp-content/uploads/2017/12/msn-smileys.jpg" alt="Emoticons do Live Messenger - smileys" width="950" height="534" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/msn-smileys.jpg 950w, https://velhobit.com.br/wp-content/uploads/2017/12/msn-smileys-400x225.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/12/msn-smileys-768x432.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/12/msn-smileys-600x337.jpg 600w" sizes="auto, (max-width: 950px) 100vw, 950px" /><figcaption id="caption-attachment-902" class="wp-caption-text">Emoticons do Live Messenger &#8211; smileys</figcaption></figure></p>
<h2>E, Finalmente, os Emojis</h2>
<p>Uma vez que os emoticons fizeram muito sucesso em chats e se tornaram uma forma padrão de comunicação na internet, as empresas que correspondem ao consórcio Unicode resolveram organizar para que os emoticons fizessem parte também de suas codificações de caracteres, a fim de que as pessoas pudessem receber emoticons padronizados e que as expressões fossem mais próximas possíveis uma das outras, para facilitar o entendimento. Daí surgiram os <strong>emojis</strong>.</p>
<p>Emoji é um termo japonês para pictograma, que ao pé da letra seria uma junção de imagem e letra e fora criado em 1999 por Shigetaka Kurita para uma plataforma móvel de internet. Em 2009, vendo a necessidade de melhorar a integração com seus dispositivos móveis, a Apple e a Google fizeram uma requisição ao consórcio para inclusão dos emojis dentro dos sistemas Unicode. A versão 6.0 do padrão Unicode, em 2010 trouxe ao mundo a integração com os emojis.</p>
<p>Com a popularidade do emoji pela adoção das frabricantes, a versão 7.0 do Unicode trouxe um pacote com 250 glifos inspirados em tipografias como Webdings e Wingdings. Até a finalização deste post, o <a href="https://unicode.org/emoji/charts-11.0/full-emoji-list.html">Unicode Emoji estava em sua versão 11.0 (<em>beta</em>)</a> com uma lista &#8220;<em><strong>xigante</strong></em>&#8221; de emojis vinculados ao UTF.</p>
<p>Dessa forma, é importante deixar claro que <strong>a inclusão de um novo emoji depende do requerimento de uma fabricante a aprovação de todo consórcio</strong>. Dessa forma, é criada uma padronização na visualização desses emojis. Todavia, ainda fica pendente a implementação desse emoji no sistema operacional usado pela fabricante e na atualização desse sistema. Por isso acontece de às vezes emojis enviados pelo iOS não serem visíveis em um Android, ou vice-versa, principalmente pelo problema de fragmentação deste último.</p>
<p style="text-align: center; font-size: 2em;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61a.png" alt="😚" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f929.png" alt="🤩" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92f.png" alt="🤯" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92c.png" alt="🤬" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a9.png" alt="💩" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f994.png" alt="🦔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f989.png" alt="🦉" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f469-200d-1f4bb.png" alt="👩‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9db-200d-2640-fe0f.png" alt="🧛‍♀️" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9dc-200d-2640-fe0f.png" alt="🧜‍♀️" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9dd-200d-2640-fe0f.png" alt="🧝‍♀️" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f64f.png" alt="🙏" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h2>A Aparência dos Emojis</h2>
<p>Apesar do acordo dos emojis especificar por escrito quais emojis podem ser aplicados, cabem as fabricantes disponibilizarem a aparência estética desses emojis. Ou seja, cada Sistema Operacional, ou determinados dispositivos e aplicativos, possuirão seus estilos de emoji, adequando-se ao design de sua aplicação. Isso as vezes causa problemas de interpretação, pois alguns emojis são extremamente diferentes entre fabricantes, como no caso do emoji do ET <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f47d.png" alt="👽" class="wp-smiley" style="height: 1em; max-height: 1em;" /> e do Robô <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f916.png" alt="🤖" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>
<p><figure id="attachment_903" aria-describedby="caption-attachment-903" style="width: 1372px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-903" src="https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji.jpg" alt="Exemplos de variação de emojis do mesmo tipo" width="1372" height="549" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji.jpg 1372w, https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji-400x160.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji-768x307.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji-1024x410.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/12/variacoes-emoji-600x240.jpg 600w" sizes="auto, (max-width: 1372px) 100vw, 1372px" /><figcaption id="caption-attachment-903" class="wp-caption-text">Exemplos de variação de emojis do mesmo tipo</figcaption></figure></p>
<p>Fazendo parte também do consórcio, mais recentemente a Adobe resolveu incorporar uma nova estrutura de <em>font</em> para a utilização de emojis personalizados. As <em>fonts</em> SVG foram especificadas por outro consórcio muito conhecido, a W3C, onde especificou o uso de SVG à estrutura de <em>fonts</em> vetoriais. Apesar de não ter sido muito adotada para web, e já estar sendo quase abandonada, a Adobe viu nessa estrutura a chance de lançar famílias tipográficas inteiras baseadas em emojis, que é o caso do <em>EmojiOne</em>. Porém existem também diversos serviços e bibliotecas que substituem os glifos específicos por um padrão personalizado de emoji, no caso para quem pretende usar algo mais personalizado para sistemas web.</p>
<p><figure id="attachment_904" aria-describedby="caption-attachment-904" style="width: 1321px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-full wp-image-904" src="https://velhobit.com.br/wp-content/uploads/2017/12/emojione.jpg" alt="A Adobe na sua atualização de 2016, trouxe algumas novas famílias tipográficas baseadas em emojis." width="1321" height="613" srcset="https://velhobit.com.br/wp-content/uploads/2017/12/emojione.jpg 1321w, https://velhobit.com.br/wp-content/uploads/2017/12/emojione-400x186.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/12/emojione-768x356.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/12/emojione-1024x475.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/12/emojione-600x278.jpg 600w" sizes="auto, (max-width: 1321px) 100vw, 1321px" /><figcaption id="caption-attachment-904" class="wp-caption-text">A Adobe na sua atualização de 2016, trouxe algumas novas famílias tipográficas baseadas em emojis.</figcaption></figure></p>
<h2>Concluindo</h2>
<p>Os emojis são o resultado de uma evolução natural da comunicação online. Elas são formas de demonstrar emoções e ideias com apenas um caractere e da forma mais universal possível. Não se trata simplesmente de uma terra sem lei, pois todos pertencem a um consórcio específico da área de tecnologia e as empresas devem seguir esses padrões para o funcionamento correto em navegadores e sistemas operacionais.</p>
<p>De código aberto, qualquer um pode acessar o site do <a href="https://unicode.org/emoji/charts-11.0/index.html" target="_blank" rel="noopener">Emoji Unicode</a> e verificar suas tabelas e documentações para criar e implementar as próprias imagens ou comportamentos em seus sistemas.</p>
<p>Se você gostou deste post, compartilhe e, se quiser, deixe seu comentário. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f618.png" alt="😘" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🎃 Brincando de Assustar com CSS, HTML e um tiquinho de Javascript</title>
		<link>https://velhobit.com.br/desenvolvimento/brincando-de-assustar-com-css-html-e-um-tiquinho-de-javascript.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Wed, 01 Nov 2017 17:50:54 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=859</guid>

					<description><![CDATA[Fotos misteriosas acontecem o tempo todo na internet. Que tal fazer uma pegadinha com seus colegas e de quebra ainda aprender um pouco de CSS?]]></description>
										<content:encoded><![CDATA[<p>Fotos misteriosas aparecem o tempo todo na internet. A grande maioria já foi provado ser uma farsa. Mas será que é possível criar alguma coisa para assustar nossos amiguinhos e, de quebra, ainda aprender um pouco sobre CSS?</p>
<p>Mas é claro!</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-874" src="https://velhobit.com.br/wp-content/uploads/2017/11/foto-misteriosa.jpg" alt="" width="755" height="491" srcset="https://velhobit.com.br/wp-content/uploads/2017/11/foto-misteriosa.jpg 755w, https://velhobit.com.br/wp-content/uploads/2017/11/foto-misteriosa-400x260.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/11/foto-misteriosa-600x390.jpg 600w" sizes="auto, (max-width: 755px) 100vw, 755px" /></p>
<p>Primeiro quero que entrem no site do <a href="https://valedomedo.com.br/bizarro/foto-misteriosa-de-homem-no-corredor/" target="_blank" rel="noopener">Vale do Medo</a> e vejam a história sobre essa foto (acima). Após olharem bem para a foto, por alguns segundos, volte aqui para o site para entender a pegadinha.</p>
<p>Essa foto nada mais é do que duas imagens sobrepostas, sendo a de cima um PNG (onde está o homem sem rosto). Porém, a imagem que fica acima é restrita a qualquer ação com o mouse. Já se você tentar imprimir, o CSS vai cuidar para que o PNG não seja impresso. Além disso, tem uma pitada de Javascript (no exemplo, com jQuery), que vai cuidar para ativar o aparecimento e desaparecimento do homem sem rosto.</p>
<h2>Criando as imagens</h2>
<p>Originalmente foram baixas duas imagens da internet. Uma de um corredor qualquer e outra de um homem vestido todo de azul. As imagens usadas na postagem foram essas abaixo:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-860" src="https://velhobit.com.br/wp-content/uploads/2017/10/download.jpg" alt="" width="1280" height="853" srcset="https://velhobit.com.br/wp-content/uploads/2017/10/download.jpg 1280w, https://velhobit.com.br/wp-content/uploads/2017/10/download-400x267.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/10/download-768x512.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/10/download-1024x682.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/10/download-600x400.jpg 600w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></p>
<p>Para poder dificultar encontrar a imagem no Google, invertemos a foto original e adicionamos um tom mais sombrio, azulado. Paralelo a isso, encontramos uma foto de um homem todo de azul, também no Google. E trabalhamos essa foto para ficar com um aspecto mais combinado com a foto original.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-861" src="https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido.jpg" alt="" width="1280" height="853" srcset="https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido.jpg 1280w, https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido-400x267.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido-768x512.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido-1024x682.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/10/homem-invertido-600x400.jpg 600w" sizes="auto, (max-width: 1280px) 100vw, 1280px" /></p>
<p>É importante trabalhar com as duas imagens ao mesmo tempo, mas atento a deixá-las em camadas separadas. Trabalhar em sombras com transparências é fundamental para que a imagem fique mais realista.</p>
<p>Exporte a imagem de fundo em .jpg e a imagem de frente em .png. Como a imagem PNG pode ficar um pouco pesada, dependendo do tamanho da imagem, acesse o site <a href="https://tinypng.com/" target="_blank" rel="noopener">TinyPNG </a>para reduzir ao máximo a imagem PNG.</p>
<p>A imagem PNG vai ter na verdade vai ter as mesmas dimensões que a imagem em JPG, porém com uma área de transparência maior.</p>
<p>Você terá então duas imagens, igual a como se faz em desenhos animados, onde o fundo é separado do objeto a ser animado.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-862" src="https://velhobit.com.br/wp-content/uploads/2017/10/camadas.jpg" alt="" width="852" height="498" srcset="https://velhobit.com.br/wp-content/uploads/2017/10/camadas.jpg 852w, https://velhobit.com.br/wp-content/uploads/2017/10/camadas-400x234.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/10/camadas-768x449.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/10/camadas-600x351.jpg 600w" sizes="auto, (max-width: 852px) 100vw, 852px" /></p>
<h2>Código HTML</h2>
<p>Uma vez criado e separado as imagens, precisamos criar o código HTML. Para isso, devemos criar um <em>container</em> e dentro desta uma imagem, depois mais um outro <em>container</em> ou elemento similar. No nosso caso, usaremos uma <strong>div</strong>, um <strong>p</strong> e, claro, um <strong>img</strong>.</p>
<pre class="prettyprint">&lt;div class="imagem"&gt;
&lt;p&gt;&lt;img src="fundo.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</pre>
<p>Esse pequeno trecho é mais do que suficiente.</p>
<h2>Código CSS</h2>
<p>Já para o CSS precisamos compreender um pouco de hierarquia e pseudo-classes. A div &#8220;imagem&#8221; será a referência para &lt;p&gt;, onde estará a imagem PNG. Logo, para que seus filhos possam se localizar, será necessário defini-la como relativa. Assim, os filhos que forem definidos como absolutos considerarão o ponto inicial (0, 0) o ponto referencial (x, y) de seu pai. Além disso, devemos colocar no &lt;p&gt; o background image onde ficará nosso PNG, ficando assim:</p>
<pre class="prettyprint">.imagem{
    position: relative;
}

.imagem p{
    margin: 0;
}

.imagem p:first-child{
    position: absolute;
    width:100%;
    height:100%;

    background-image: url('homem.png');
    background-size: 100%;
    pointer-events: none;

    z-index:10;
}

.imagem p img{
    width: 100%;
    height: auto;
}

/*Será aplicado quando a imagem for dar o 'sustinho'*/
.bu{
    transform: scale(3);
    left: 47%;
    /* O left 48 foi usado porque o homem na imagem está à esquerda*/
    /* Adicionar esse espaço foi necessário para centralizá-lo.*/
}</pre>
<p>Muita atenção ao <strong>pointer-events: none</strong>. É esse o atributo que impedirá o botão direito, ou qualquer ação, de funcionar por cima da imagem do homem. Atenção também a pseudo-classe <strong>first-child</strong>, pois ela determina que o elemento a receber determinado estilo é o primeiro &lt;p&gt;.</p>
<p>Observe que as larguras e tamanhos estão definidos como 100%. O que vai resultar em que o tamanho do conteúdo será relacionado ao tamanho do <em>container</em>.</p>
<p>Porém, como fazer para que a imagem não seja possível imprimir?</p>
<p>Media Queries não são apenas para responsividade de dispositivos móveis. Uma das coisas mais interessantes é poder especificar estilos para impressão. Simplesmente podemos adicionar algumas linhas:</p>
<pre class="prettyprint">@media print {
	.postid-265 .imagem &gt; p:first-child{
		display: none;
	}
}</pre>
<h2>Javascript (jQuery)</h2>
<p>Agora vamos adicionar um pouquinho de Javascript. Vamos utilizar jQuery porque o WordPress e a grande maioria dos CMS usados para sites já utilizam essa biblioteca.</p>
<p>Preste atenção para que a imagem fique oculta até que ela seja completamente carregada. Isso porque a imagem jpg tenderá, nesse caso, a ser mais pesada do que a PNG. Se as imagens estiverem visíveis antes, é possível que a imagem da mais leve seja mostrada antes da outra, o que vai estragar a sensação de ser uma única imagem.</p>
<pre class="prettyprint">jQuery(".imagem").hide(); //Esconde a imagem

//Mostra a imagem apenas depois que a imagem é carregada
jQuery(".postid-859 .imagem img").one("load", function() {
    jQuery(".postid-859 .imagem").show();
}).each(function() {
    if(this.complete) $(this).load();
});
//Faz a imagem do homem aparecer, adicionando uma classe a ela
//Neste exemplo colocamos pelo scroll para contar apenas quando aparecer a foto
$(document).scroll(function() {
    if ($(this).scrollTop() &gt; jQuery(".postid-859 .imagem").position().top) {
         setTimeout(function(){
              jQuery(".postid-859 .imagem &gt; p:first-child").addClass("bu");
         },5000); //5 segundos
         //Faz a imagem desaparecer logo depois do susto
         setTimeout(function(){
              jQuery(".postid-859 .imagem &gt; p:first-child").hide();
         },5800); //5.8 segundos
    }
});</pre>
<p>O código inteiro então ficaria:</p>
<pre class="prettyprint">&lt;div class="imagem"&gt;
&lt;div class="imagem"&gt;
&lt;p&gt;&lt;img src="fundo.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;style&gt;
.imagem{
    position: relative;
}
.imagem p{
    margin: 0;
}
.imagem p:first-child{
    position: absolute;
    width:100%;
    height:100%;
    background-image: url('homem.png');
    background-size: 100%;
    pointer-events: none;
    z-index:10;
}
.imagem p img{
    width: 100%;
    height: auto;
}
/*Será aplicado quando a imagem for dar o 'sustinho'*/
.bu{
    transform: scale(3);
    left: 47%;
    /* O left 48 foi usado porque o homem na imagem está à esquerda*/
    /* Adicionar esse espaço foi necessário para centralizá-lo.*/
}
@media print {
 .postid-265 .imagem &gt; p:first-child{
 display: none;
 }
}
&lt;/style&gt;
&lt;script&gt;
jQuery(".imagem").hide(); //Esconde a imagem

//Mostra a imagem apenas depois que a imagem é carregada
jQuery(".postid-859 .imagem img").one("load", function() {
    jQuery(".postid-859 .imagem").show();
}).each(function() {
    if(this.complete) $(this).load();
});

//Faz a imagem do homem aparecer à frente, adicionando uma classe a ela
//Neste exemplo colocamos pelo scroll para contar apenas quando aparecer a foto
jQuery(document).scroll(function() {
    if (jQuery(this).scrollTop() &gt; jQuery(".postid-859 .imagem").position().top) {
         setTimeout(function(){
              jQuery(".postid-859 .imagem &gt; p:first-child").addClass("bu");
         },5000); //5 segundos
         //Faz a imagem desaparecer logo depois do susto
         setTimeout(function(){
              jQuery(".postid-859 .imagem &gt; p:first-child").hide();
         },5800); //5.8 segundos
    }
});
&lt;/script&gt;</pre>
<p>E agora, a imagem finalizada:</p>
<div class="imagem">
<p>&nbsp;</p>
<p><img decoding="async" src="https://valedomedo.com.br/galeria/fotos/place.jpg" /></p>
</div>
<p>Simples, não é?</p>
<p>É uma brincadeira básica, mas ajuda você a pensar logicamente e a conhecer algumas coisinhas legais sobre CSS e Javascript. Deixe seu comentário.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>O que é Design de Interação?</title>
		<link>https://velhobit.com.br/design/o-que-e-design-de-interacao.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Thu, 17 Aug 2017 21:01:21 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[interação]]></category>
		<category><![CDATA[processo]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[projetar]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[ti]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=764</guid>

					<description><![CDATA[O designer de interação, além de conhecimentos empíricos do design, precisa possuir habilidades em programação, história e negócios da área de TI.]]></description>
										<content:encoded><![CDATA[<p>Quando se fala em design, muitas pessoas compreendem como algo artístico ou estético, geralmente relacionado com o visual. Mas design vai muito mais além. <a href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank" rel="noopener">Design é projeto</a>. É entender o comportamento do usuário de acerca de um artefato e otimizar para que sua função seja executada da forma mais simples e objetiva possível.</p>
<p>Na área de TI, temos uma vertente do design que é chamada de Design de Interação. Como o próprio nome diz, corresponde aos fatores de interatividade do usuário com o sistema. É função do designer de interação projetar como o usuário vai enviar, receber e responder (ou seja, interagir) o sistema ao qual está usando. Por conta disso, o designer de interação precisa possuir uma série de habilidades específicas que adentram a área de desenvolvimento como um todo, com conhecimentos que vão desde movimentos artísticos à performance de banco de dados. Abaixo vamos listar as algumas das competências agregadas a um designer de interação.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-773" src="https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines.jpg" alt="" width="1332" height="619" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines.jpg 1332w, https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines-400x186.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines-768x357.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines-1024x476.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/apple-guidelines-600x279.jpg 600w" sizes="auto, (max-width: 1332px) 100vw, 1332px" /></p>
<h2>Estética</h2>
<p>Sem dúvida a parte do design que as pessoas mais lembram é a estética e por isso estamos falando dela primeiro. A estética depende do conhecimento relacionado a arte e filosofia. Estética não significa beleza, mas sim ajustar a aparência de acordo com a proposta do projeto. Muitas vezes, a estética é uma consequência de algo bem desenvolvido e é a última parte em que o designer trabalha.</p>
<p>Um termo muito usado na área de TI para se referir a estética de um sistema ou aplicativo é <strong><em>Look &amp; Feel (Aparência e Sensação)</em></strong>. Esse termo define a sensação que o usuário tem acerca de todo padrão estético de uma interface gráfica. Essa ideia é clara a medida em que as pessoas tendem a sentir sensações distintas ao utilizar aplicativos e, principalmente, sistemas operacionais diferentes. A sensação de usar o Windows, o MacOSX ou uma GUI (Graphic User Interface &#8211; Interface Gráfica de Usuário) para Linux / Unix, mesmo que usando o mesmo aplicativo, é diferente e até um pouco difícil de explicar tal diferença.</p>
<h2>Legibilidade</h2>
<p>A legibilidade é um conceito que envolve a compreensão simples dos elementos da tela. Lembre-se que, dentro da visão de comunicação, texto não são somente palavras escritas, mas sim qualquer símbolo que possua um significado, como um ícone, uma imagem ou um som. A legibilidade é o que torna o texto compreensível em seu contexto. Trocando em miúdos, trata-se de como os elementos podem ser facilmente interpretados pelo usuário.</p>
<p>A legibilidade vai desde as escolhas dos termos e palavras escolhidas à iconografia e tipografia. Até mesmo qual fonte será usada e sua espessura, se os ícones forem <a href="https://velhobit.com.br/design/design-flat-e-simplicidade-nao-sao-sinonimos.html" target="_blank" rel="noopener">esqueumórficos ou minimalistas</a>, se os espaçamentos vão ser maiores ou menores, tudo isso está envolvido no conceito de legibilidade.</p>
<p>É neste ponto do projeto que também se pensa em contrastes. Compreende-se contraste não apenas a diferença do preto no branco, mas em todas as reduções de nuances que facilitam a legibilidade. Quanto menos etapas de algo, mais contraste ela tem. Grande/Pequeno, Claro/Escuro, Cores Opostas, etc.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-774" src="https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste.jpg" alt="" width="1100" height="670" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste.jpg 1100w, https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste-400x244.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste-768x468.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste-1024x624.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/macas-constraste-600x365.jpg 600w" sizes="auto, (max-width: 1100px) 100vw, 1100px" /></p>
<h2>Usabilidade</h2>
<p>Uma das principais preocupações do designer de interação é o quão fácil pode ser para o usuário chegar ao seu objetivo. A usabilidade está vinculada a legibilidade, mas vai além. Para isso, o designer precisa definir elementos que direcionem a atenção do usuário e que facilite a localização instintiva dos items interativos. É pensando na usabilidade que o profissional irá diagramar a tela e preparar protótipos de comportamento.</p>
<p>Dentro da usabilidade, o Designer de Interação deve fazer pelo menos um desses materiais:</p>
<ul>
<li><strong>Wireframe</strong>: Trata-se de um rascunho que define as funcionalidades do sistema. Pode ser um desenho à mão ou feito no computador, mas não possui compromisso com a fidelidade do projeto final. Sua importância é definir conceitos básicos enquanto está sendo desenvolvido o design final da interface.</li>
<li><strong>Mockup</strong>: Imagens estáticas que representam as interfaces com a aparência mais próxima possível da final. O objetivo é demonstrar para equipe ou para o investidor como o projeto deverá ficar no final. O mockup também serve como base para criação do código referente a GUI do sistema.</li>
<li><strong>Protótipo</strong>: Similar ao Mockup, porém simulando as interações, com ações de cliques e movimentos. Contudo, os dados geralmente são fictícios e funciona em ambiente controlado. Seu objetivo é permitir um melhor planejamento da interação, como também mostrar exemplos a investidores ou usuários teste.</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-772" src="https://velhobit.com.br/wp-content/uploads/2017/08/wireframe-mockup-prototipo-2.gif" alt="" width="757" height="450" /></p>
<p>É fazendo testes de usabilidade que o designer de interação vai determinar diversos fatores de espaçamentos, tamanhos de ícones e acessibilidade. Ainda, é neste momento que deve-se sair da zona de conforto e experimentar o leiaute em diferentes contextos.</p>
<h2>Funcionalidade e Programação</h2>
<p>Design é dar uma função à forma. Uma forma sem função, sem motivo de existir, não é design, mas arte. Diferente da arte, o design necessita de um função à quem este serve. Tudo o que se decide em um projeto, desde a sua elaboração estética até sua agilidade, existe para retornar um resultado, que é o objetivo da existência de um determinado sistema ou aplicativo.</p>
<p>Por isso, o designer de interação não deve apenas conhecer da parte gráfica e estética, mas também das idiossincrasias referente a área na qual está trabalhando. Neste caso, tecnologia e desenvolvimento.</p>
<p>Assim como um designer de moda precisa entender de costura e um designer de interiores de arquitetura, um designer de interação precisa saber como programar, ao menos o front-end, e como implementar o design que ele próprio elabora. Mesmo que ele não seja o responsável direto por aplicar esse código, é necessário que possua um conhecimento profundo de front-end e razoável quanto a back-end e banco de dados. Inclusive, muitas vezes, a responsabilidade de criação de novos componentes de interatividade é justamente do designer de interação.</p>
<p>Isso é necessário pois a Experiência do Usuário (UX- User eXperience), item chave do trabalho de um designer de interação, depende de todos os fatores tecnológicos que acompanham o desenvolvimento de um projeto (e até mesmo antes do usuário ter acesso ao sistema). Em determinado ponto, o designer precisa testar a confiabilidade dos dados, o tempo de resposta, praticidade de atualização, necessidade de fragmentação e, inclusive, o tempo de reparo de um eventual problema e a saúde do código. O relacionamento com o programador as vezes é esquecido, mas <strong>a experiência do programador e dos outros profissionais da empresa são tão importantes quanto a experiência do usuário</strong>, pois isso se refletirá em todo desempenho e qualidade do projeto.</p>
<p>Afim de compreender, conversar, sugerir e implementar, o designer de interação precisa ter conhecimentos específicos de diferentes linguagens de programação e marcação, além de suas tecnologias agregadas, tendo foco principalmente (mas não apenas) no front-end, como:</p>
<ul>
<li>HTML;</li>
<li>CSS;</li>
<li>Javascript;</li>
<li>Lógica de programação;</li>
<li>Documentos DOM específicos de algumas plataformas;</li>
<li>Kits de plataformas (como Android Kit, iOS e UWP);</li>
<li>Linguagens Back-End como PHP, Java, Python, ASP ou outras que forem sendo necessárias aprender em seu cotidiano.</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-776" src="https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando.jpg" alt="" width="1250" height="703" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando.jpg 1250w, https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando-400x225.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando-768x432.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando-1024x576.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/designer-de-interacao-codando-programando-600x337.jpg 600w" sizes="auto, (max-width: 1250px) 100vw, 1250px" /></p>
<h2>Ambiente Controlado vs Produção</h2>
<p>Se por um lado o designer de interação deve possuir conhecimentos acerca do comportamento e da área de tecnologia, por outro, grande parte daqueles que se afirmam profissionais não estão trabalhando pensando em ambiente de produção.</p>
<p>Não é incomum ver os chamados &#8220;<em>Designers de Dribble</em>&#8220;, ou &#8220;<em>Designers de Ambiente Controlado</em>&#8220;. Basicamente, quando alguém busca no Google por <em>UI Design</em> vai encontrar centenas de interfaces impressionantes e incríveis, com cores vibrantes e lindas que nem a Apple conseguiria fazer tão perfeito. A verdade é que esses designs funcionam apenas em ambiente controlado, que não representam a usabilidade real e ainda frustram aqueles que estão começando.</p>
<p>Na próxima vez que buscar por inspiração (se for o seu caso), comece a refletir quando achar algo no Google, coisas como: E se o nome da cidade for maior do que o desse exemplo? E se o número nessa área superar o esperado? Será que o usuário vai compreender esse nome truncado? Qual o tempo hábil para fazer determinado efeito e se vale a pena? Qual o funcionamento em telas menores? Além disso, uma das coisas mais complexas do design de interfaces é criar padrões para formulários que sejam funcionais independente do tamanho de seus dados ou localização. O que é ainda mais complicado em sistemas densos como ERPs e outros específicos.</p>
<p>Pensando nessas respostas é que empresas que desenvolvem sistemas operacionais possuem suas próprias <strong><em>guidelines</em></strong>, que descrevem o comportamento de usabilidade em ambientes reais e traz fortes sugestões de padronização.</p>
<ul>
<li><a href="https://material.io/guidelines/" target="_blank" rel="noopener">Material Design (Chrome OS e Android)</a></li>
<li><a href="https://developer.apple.com/ios/human-interface-guidelines/overview/design-principles/" target="_blank" rel="noopener">Apple iOS</a></li>
<li><a href="https://developer.apple.com/macos/human-interface-guidelines/overview/themes/" target="_blank" rel="noopener">Apple MacOS</a></li>
<li><a href="https://developer.microsoft.com/en-us/windows/apps/design" target="_blank" rel="noopener">Fluent Design (Microsoft)</a></li>
</ul>
<p>Claro que um profissional não precisa seguir à risca esses padrões, porém eles são fundamentais para a base do desenvolvimento de interfaces mobile e desktop pois não é bom que fujam demais do padrão do Sistema Operacional e o usuário sinta-se perdido. Entretanto sites e sistemas web possuem maior flexibilidade, ficando a cargo do Designer de Interação desenvolver o próprio <em>Guidelines</em> para os serviços e produtos relacionados com esse sistema.</p>
<h2>Concluindo, Design é Projeto</h2>
<p>Design não é desenho. Design não é ilustração. Design não é leiaute. <a href="https://velhobit.com.br/design/o-que-e-design.html">Design é projeto</a>. Então, diferente do que muitos pensam, alguns inclusive que se intitulam design, a área não é arte pela arte. O design serve à função e, como tal, o profissional que projeta algo precisa possuir conhecimento em diversas áreas relacionadas àquela específica vertente na qual está trabalhando. Logo, o designer de interação, além dos conhecimentos empíricos do design, como tipografia, colorimetria, filosofia, <a href="https://velhobit.com.br/design/o-numero-de-ouro-e-sua-aplicacao-em-design.html" data-wplink-edit="true">matemática (geometria)</a>, antropologia e comportamento, também precisa possuir a habilidades específicas em <a href="https://velhobit.com.br/programacao/quanto-custa-ser-programador.html">programação </a>front-end e back-end (full-stack), história e negócios da área de Tecnologia da Informação.</p>
<p style="text-align: center;"><strong>Se você gostou deste post, curta e compartilhe ele nas mídias sociais. Caso não tenha gostado, tenha alguma dúvida ou queira fazer uma observação, deixe um comentário.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IBM Watson &#8211; Como Criar um Chatbot (com PHP e jQuery)</title>
		<link>https://velhobit.com.br/programacao/ibm-watson-como-criar-um-chatbot-com-php-e-jquery.html</link>
					<comments>https://velhobit.com.br/programacao/ibm-watson-como-criar-um-chatbot-com-php-e-jquery.html#comments</comments>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Wed, 09 Aug 2017 05:59:09 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[back-end]]></category>
		<category><![CDATA[bluemix]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[experiência do usuário]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[watson]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=721</guid>

					<description><![CDATA[Este tutorial mostra a base para compreensão do uso da API de conversação do IBM Watson para criação de chatbot. Desde o começo até um exemplo prático.]]></description>
										<content:encoded><![CDATA[<p>Inteligência artificial é um tema que está em discussão constante no novo milênio. O uso de chatbots tem sido cada vez mais utilizado em diversos ambientes, seja para atendimento, monitoramento, suporte ou outras aplicações diversas. <a href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank" rel="noopener">Designers de Interação</a> e <a href="https://velhobit.com.br/programacao/quanto-custa-ser-programador.html" target="_blank" rel="noopener">Programadores </a>tem usado cada vez mais essas tecnologias para poder criar uma experiência melhor e mais dinâmica para o usuário.</p>
<p>Dentro da área da computação cognitiva, uma das empresas que está em muita evidência no mercado é a IBM, com sua tecnologia Watson.</p>
<p>A tecnologia Watson é uma amálgama de serviços de inteligência artificial que permite ao desenvolvedor criar plataformas de comunicação automatas com seus usuários. Para isso, a IBM disponibiliza diversas APIs de comunicação com determinados serviços. Para nosso exemplo de chatbot usaremos o serviço de Conversação do Watson.</p>
<p>Criar um chatbot com o Watson é bem mais simples do que parece. Porém, devemos deixar claro que <strong>a proposta deste tutorial é ser básico, ser um ambiente de entrada, simplificado porém funcional para o desenvolvedor ou designer interessado nesse tipo de tecnologia</strong>.</p>
<p><strong>Atenção, você precisa de um servidor que possa ser autenticado na internet. Ou seja, não adianta testar de Xampp ou Wampp, você precisa testar ao menos de uma hospedagem compartilhada.</strong></p>
<h2>Preparando o Ambiente</h2>
<p>Primeiramente você vai precisar de uma conta na Bluemix. A Bluemix é uma plataforma em nuvem de projetos da Big Blue (apelido dado a IBM pelo mercado). Para isso, basta entrar no <a href="https://www.ibm.com/br-pt/marketplace/cloud-platform" target="_blank" rel="noopener">site da empresa e clicar em Teste Gratuito 30 Dias.</a></p>
<p><a href="https://www.ibm.com/br-pt/marketplace/cloud-platform" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-722" src="https://velhobit.com.br/wp-content/uploads/2017/08/bluemix.jpg" alt="" width="1396" height="669" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/bluemix.jpg 1396w, https://velhobit.com.br/wp-content/uploads/2017/08/bluemix-400x192.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/bluemix-768x368.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/bluemix-1024x491.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/bluemix-600x288.jpg 600w" sizes="auto, (max-width: 1396px) 100vw, 1396px" /></a></p>
<p>Depois disso, siga as instruções para você preencher os seus dados básicos.</p>
<p>Após o preenchimento de seus dados, será pedido para você criar uma organização. Por algum motivo, você não verá a opção de América do Sul referente ao local, todavia você pode continuar selecionando SUL DOS EUA que não vai impedir o funcionamento do chatbot. Simplesmente siga as demais opções até chegar ao final.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-723" src="https://velhobit.com.br/wp-content/uploads/2017/08/organização-bluemix.jpg" alt="" width="646" height="600" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/organização-bluemix.jpg 646w, https://velhobit.com.br/wp-content/uploads/2017/08/organização-bluemix-400x372.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/organização-bluemix-600x557.jpg 600w" sizes="auto, (max-width: 646px) 100vw, 646px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-724 size-full" src="https://velhobit.com.br/wp-content/uploads/2017/08/ready-bluemix.jpg" alt="Cadastro no Bluemix" width="651" height="571" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/ready-bluemix.jpg 651w, https://velhobit.com.br/wp-content/uploads/2017/08/ready-bluemix-400x351.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/ready-bluemix-600x526.jpg 600w" sizes="auto, (max-width: 651px) 100vw, 651px" /></p>
<p>Assim que você finalizar, é possível ver uma área para criar Apps. Por hora você pode ignorar completamente isso. À primeira vista, o Bluemix parece ser um pouco difícil de navegar e encontrar algo por conta da diversidade de opções e APIs disponíveis.</p>
<p>No canto superior esquerdo você vai ver um menu hambúrguer. Clique nesse menu e selecione a opção <strong>Serviços</strong>. Lá, você vai ver a opção <strong>Watson</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-726" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-servicos.jpg" alt="" width="526" height="613" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-servicos.jpg 526w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-servicos-343x400.jpg 343w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-servicos-515x600.jpg 515w" sizes="auto, (max-width: 526px) 100vw, 526px" /></p>
<p>Como nosso tutorial é sobre chatbot, devemos criar um serviço do tipo <strong>Conversação</strong>. Clique no botão <strong>Criar serviço Watson</strong> e, na página que se abrirá, selecione a opção <strong>Conversation</strong>. A configuração do serviço é bem similar ao cadastro do próprio Bluemix.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-728" src="https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson.jpg" alt="" width="1259" height="646" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson.jpg 1259w, https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson-400x205.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson-768x394.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson-1024x525.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/criar-serviço-watson-600x308.jpg 600w" sizes="auto, (max-width: 1259px) 100vw, 1259px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-727" src="https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson.jpg" alt="Criar serviço de conversação Watson" width="1226" height="730" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson.jpg 1226w, https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson-400x238.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson-768x457.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson-1024x610.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/opcoes-watson-600x357.jpg 600w" sizes="auto, (max-width: 1226px) 100vw, 1226px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-729" src="https://velhobit.com.br/wp-content/uploads/2017/08/configure-bluemix-watson.jpg" alt="Configuração Bluemix" width="883" height="418" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/configure-bluemix-watson.jpg 883w, https://velhobit.com.br/wp-content/uploads/2017/08/configure-bluemix-watson-400x189.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/configure-bluemix-watson-768x364.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/configure-bluemix-watson-600x284.jpg 600w" sizes="auto, (max-width: 883px) 100vw, 883px" /></p>
<p>Esse serviço possui versões Lite (que é gratuita), Padrão e Premium (que precisa de consulta). Na versão Lite, que estamos usando para este tutorial, você possui até 10 mil requisições por mês e não poderá salvar os logs dos chats. Porém a versão padrão não é cara, cada requisição é uma fração inferior a metade de um centavo, o que é um valor aceitável para um sistema corporativo.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-730" src="https://velhobit.com.br/wp-content/uploads/2017/08/preço-watson.jpg" alt="Preço Conversação Watson" width="818" height="565" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/preço-watson.jpg 818w, https://velhobit.com.br/wp-content/uploads/2017/08/preço-watson-400x276.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/preço-watson-768x530.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/preço-watson-600x414.jpg 600w" sizes="auto, (max-width: 818px) 100vw, 818px" /></p>
<p>Agora é necessário &#8220;ensinar&#8221; ao Watson o que você quer que ele responda. Apesar dele já possuir uma inteligência base interna, que reconhece erros e contextos, você precisa treina-lo para que ele dê as respostas corretas para determinadas perguntas.</p>
<p>Para iniciar, você precisa criar um novo <em><strong>Workspace</strong> </em>(por enquanto, pode ignorar o espaço de trabalho de exemplo).</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-731" src="https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson.jpg" alt="" width="1150" height="465" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson.jpg 1150w, https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson-400x162.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson-768x311.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson-1024x414.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/conversation-watson-600x243.jpg 600w" sizes="auto, (max-width: 1150px) 100vw, 1150px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-733" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-workspace.jpg" alt="" width="870" height="399" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-workspace.jpg 870w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-workspace-400x183.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-workspace-768x352.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-workspace-600x275.jpg 600w" sizes="auto, (max-width: 870px) 100vw, 870px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-734" src="https://velhobit.com.br/wp-content/uploads/2017/08/workspace-watson.jpg" alt="Criar espaço de trabalho" width="1008" height="515" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/workspace-watson.jpg 1008w, https://velhobit.com.br/wp-content/uploads/2017/08/workspace-watson-400x204.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/workspace-watson-768x392.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/workspace-watson-600x307.jpg 600w" sizes="auto, (max-width: 1008px) 100vw, 1008px" /></p>
<p><strong>Atenção ao idioma do espaço de trabalho que você está criando.</strong></p>
<h3>Treinando o Watson</h3>
<p>Uma vez criado o espaço de trabalho (<em>Workspace</em>), iniciaremos o processo de treinamento do Watson. Para isso, você deve primeiro criar um <em><strong>intent</strong></em>. Um <em>intent</em> é uma intenção de comunicação, ou seja, é um conjunto de interações padronizadas que o usuário poderá fazer com o chatbot.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-735" src="https://velhobit.com.br/wp-content/uploads/2017/08/intents.jpg" alt="" width="1573" height="572" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/intents.jpg 1573w, https://velhobit.com.br/wp-content/uploads/2017/08/intents-400x145.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/intents-768x279.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/intents-1024x372.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/intents-600x218.jpg 600w" sizes="auto, (max-width: 1573px) 100vw, 1573px" /></p>
<p>Cada intenção que for criada precisa ter pelo menos <strong>5</strong> exemplos de interações para poder funcionar. A partir daí o Watson também irá entender perguntas similares. Não é necessário se preocupar com muitas variações. A tecnologia é inteligente o suficiente para trabalhar com diferenças básicas, erros de digitação e compreender contextos. Em nosso exemplo, vamos criar uma intenção com o nome de <strong>#Saudações</strong> e preencher com algumas interações básicas de saudações.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-736" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-criar-perguntas.jpg" alt="" width="1008" height="710" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-criar-perguntas.jpg 1008w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-criar-perguntas-400x282.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-criar-perguntas-768x541.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-criar-perguntas-600x423.jpg 600w" sizes="auto, (max-width: 1008px) 100vw, 1008px" /></p>
<p>Uma vez criada as intenções desejadas (em nosso exemplo criamos apenas uma), você deverá criar as possíveis respostas para essas intenções e suas variações. Para isso, você deve ir na área de <strong>Dialog</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-737" src="https://velhobit.com.br/wp-content/uploads/2017/08/dialog-watson.jpg" alt="" width="995" height="495" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/dialog-watson.jpg 995w, https://velhobit.com.br/wp-content/uploads/2017/08/dialog-watson-400x199.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/dialog-watson-768x382.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/dialog-watson-600x298.jpg 600w" sizes="auto, (max-width: 995px) 100vw, 995px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-738" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-nodes.jpg" alt="" width="552" height="419" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-nodes.jpg 552w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-nodes-400x304.jpg 400w" sizes="auto, (max-width: 552px) 100vw, 552px" /></p>
<p>Um diálogo (Dialog), como o nome já diz, consiste em um conjunto de interações e condições dessas interações, com uma resposta, que pode ou não resultar em um feedback para encerrar um processo de comunicação.</p>
<p>No Watson, o diálogo é organizado em um sistema de árvores, que possui uma lógica de nós e subnós. Para nosso exemplo, vamos criar um novo nó para responder a intenção de saudação que criamos anteriormente. Clique em <strong>Add node</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-739" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-resposta.jpg" alt="" width="798" height="623" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-resposta.jpg 798w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-resposta-400x312.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-resposta-768x600.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-resposta-600x468.jpg 600w" sizes="auto, (max-width: 798px) 100vw, 798px" /></p>
<p>Após dar um nome ao nó, você deve colocar o que o bot irá reconhecer. A intenção é representada pelo símbolo de hash (#). Então, basicamente diz:<em> Se o bot reconhecer a intenção <strong>#Saudação</strong>, então responda com</em>:</p>
<p>Você pode colocar quantas respostas você quiser. Quanto mais respostas você colocar, maior a quantidade de diálogo possível, deixando o ambiente de comunicação mais natural e otimizando o aprendizado.</p>
<p>Como opções adicionais você pode colocar as respostas em forma sequencial ou aleatória. Ainda é possível criar condições específicas de contextos ou aguardar por respostas específicas à retóricas do chatbot.</p>
<p>Com tudo isso preenchido, você já pode testar o chatbot. O próprio ambiente do bluemix possui uma área para testes. Clique no ícone com o balãozinho no canto superior direito e experimente o diálogo que você acabou de criar.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-740" src="https://velhobit.com.br/wp-content/uploads/2017/08/watson-test.jpg" alt="" width="899" height="702" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/watson-test.jpg 899w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-test-400x312.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-test-768x600.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/watson-test-600x469.jpg 600w" sizes="auto, (max-width: 899px) 100vw, 899px" /></p>
<h2>Implementando o Back-end</h2>
<p>A API do Bluemix funciona através de comunicação cURL Essa comunicação é feita a partir de envios de informações via método POST e mediante autorização de acesso. Por isso, vamos precisar de algumas informações básicas do serviço de comunicação que criamos.</p>
<p>Caso você queira ver outros exemplos que usam cURL, acesse nosso tutorial sobre <a href="https://velhobit.com.br/programacao/carregando-dinamicamente-dados-empresa-cnpj-php-jquery.html" target="_blank" rel="noopener">preenchimento automático de formulário com o CNPJ</a> ou o tutorial sobre <a href="https://velhobit.com.br/programacao/carregando-cep-cidades-dinamicamente.html" target="_blank" rel="noopener">preenchimento automático de endereço a partir do CEP</a>.</p>
<p>Então, antes de criamos o código, você vai precisar das seguintes informações:</p>
<ul>
<li>Workspace ID</li>
<li>Username</li>
<li>Password</li>
</ul>
<p>O Workspace ID pode ser adquirido lá naquela tela de criação/seleção de ambientes de trabalho (Workspaces). Basta clicar no botão de menu, no canto superior direito do cartão referente ao workspace que criamos, em seguida clicando em <strong>View Details</strong>.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-742" src="https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1.jpg" alt="Pegar Código do Workspace no Watson" width="1234" height="619" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1.jpg 1234w, https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1-400x201.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1-768x385.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1-1024x514.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/workspaces-1-600x301.jpg 600w" sizes="auto, (max-width: 1234px) 100vw, 1234px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-743" src="https://velhobit.com.br/wp-content/uploads/2017/08/workspace-view-details.jpg" alt="" width="437" height="419" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/workspace-view-details.jpg 437w, https://velhobit.com.br/wp-content/uploads/2017/08/workspace-view-details-400x384.jpg 400w" sizes="auto, (max-width: 437px) 100vw, 437px" /></p>
<p>Para conseguir o login e senha do serviço de conversação, volte a tela onde você cria os serviços e vá na opção <strong>Credenciais de Serviço</strong>. Nessa área você pode visualizar ou criar novas credenciais, conseguindo assim o <em>username</em> e <em>password</em> que vamos precisar mais adiante.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-744" src="https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-serviço.jpg" alt="" width="812" height="420" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-serviço.jpg 812w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-serviço-400x207.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-serviço-768x397.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-serviço-600x310.jpg 600w" sizes="auto, (max-width: 812px) 100vw, 812px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-746" src="https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina.jpg" alt="" width="1074" height="774" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina.jpg 1074w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina-400x288.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina-768x553.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina-1024x738.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/08/credenciais-pagina-600x432.jpg 600w" sizes="auto, (max-width: 1074px) 100vw, 1074px" /></p>
<p><span style="color: #ff0000;"><strong>ATENÇÃO<br />
A IBM mudou a forma de autenticação. Agora, ao invés de você ter acesso ao username e password, as novas conexões usarão a autenticação AIM e não mais a autenticação por username  password. Mais detalhes, veja a documentação: <a style="color: #ff0000;" href="https://console.bluemix.net/apidocs/assistant">https://console.bluemix.net/apidocs/assistant</a>.</strong></span></p>
<p>Agora vamos ao código.</p>
<p>A API REST do Watson, como dito acima, funciona a partir de comunicação cURL e vai retornar um json completo com todas as informações para a comunicação. Para criarmos uma conversa simples, precisamos definir o código. Fique atento ao que precisa ser preenchido.</p>
<h3>Exemplo usando PHP</h3>
<p><strong>conversa.php</strong></p>
<p>Como o retorno é json, precisamos definir a página como text/plain, para evitar qualquer renderização incorreta.</p>
<pre class="prettyprint">header("Content-Type: text/plain");</pre>
<p>Iremos definir então as informações que pegamos acima através das configurações do serviço de conversação. Lembre-se de substituir o código abaixo por seus dados.</p>
<pre class="prettyprint">$workspace = "d5b7e381-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

$apikey = "xxxxxxxxxxxxxxxxx";

/*Antiga autenticação
$username = "cd27b34f-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$password = "Klxxxxxxxx";
*/</pre>
<p>Precisamos agora capturar o texto que será enviado para o servidor do Watson. Para testes usaremos o $_REQUEST, do PHP. Por segurança, quando for trabalhar em modo de produção, troque para $_POST.</p>
<pre class="prettyprint">$texto = $_REQUEST["texto"];</pre>
<p>Agora é necessário definir um identificador. Para manter o contexto de conversa, e o Watson saber que está conversando ainda com a mesma pessoa, é necessário passar um identificador. Esse identificador deverá ser único por conversa. Caso você esteja implementando em um sistema de gestão, por exemplo, você pode usar o nome de usuário, id, e-mail, ou algum outro tipo de identificação única.</p>
<p>No nosso teste criaremos uma hash única md5 e a armazenaremos em uma sessão. Dessa forma, garantimos a criação temporária de um identificador único funcional. Nosso bloco então ficará:</p>
<pre class="prettyprint">if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
if(isset($_SESSION["identificador"])){
	$identificador = $_SESSION["identificador"];
}else{
	$identificador = md5(uniqid(rand(), true));
	$_SESSION["identificador"] = $identificador;
}</pre>
<p>A URL da API REST deverá ser concatenada com o Workspace e o método que você está chamando. Dentro do gateway de conversação há vários métodos, desde status a tratamento de workspaces e diálogos. Através da documentação, você poderá explorar todos os métodos acessíveis para o Watson:<a href="https://www.ibm.com/watson/developercloud/conversation/api/v1/" target="_blank" rel="noopener"> https://www.ibm.com/watson/developercloud/conversation/api/v1/</a>.</p>
<p>Em nosso exemplo básico, entretanto, iremos utilizar apenas o método <em><strong>message</strong></em>. É importante lembrar que é necessário adicionar a data da versão da API como parâmetro para que possa funcionar.</p>
<pre class="prettyprint">$url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/" . $workspace;
$urlMessage = $url . "/message?version=2017-05-26";</pre>
<p>Para enviar os dados para o Watson, precisamos criar uma pequena string json. Como em nosso exemplo só precisamos enviar o texto e o identificador, podemos simplesmente concatenar o texto, deixando-o pronto para envio.</p>
<pre class="prettyprint">$dados  = "{";
$dados .= "\"input\": ";
$dados .= "{\"text\": \"" . $texto . "\"},";
$dados .= "\"context\": {\"conversation_id\": \"" . $identificador . "\",";
$dados .= "\"system\": {\"dialog_stack\":[{\"dialog_node\":\"root\"}], \"dialog_turn_counter\": 1, \"dialog_request_counter\": 1}}";
$dados .= "}";</pre>
<p>Como estamos tratando de json, devemos especificar o cabeçalho do tipo de dados que estamos enviando.</p>
<pre class="prettyprint">$headers = array('Content-Type:application/json');</pre>
<p>Agora começa a comunicação. Para acessar a API, algumas exigências são feitas. É necessário ser enviado em método POST um json e ser uma comunicação segura, com identificação de usuário e senha. O bloco referente a comunicação ficará então:</p>
<pre class="prettyprint">$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlMessage);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); Autenticação antiga
curl_setopt($ch, CURLOPT_USERPWD, "apikey:$apikey")
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$retorno = curl_exec($ch);
curl_close($ch);</pre>
<p>Por fim, para facilitar a leitura, vamos imprimir o json na tela com uma organização mais legível para um ser-humano.</p>
<pre class="prettyprint">$retorno = json_decode($retorno);
echo json_encode($retorno, JSON_PRETTY_PRINT);</pre>
<p>Com isso já poderemos ter uma resposta json, que, ao passar o texto, retornará algo similar como na imagem abaixo:</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-749" src="https://velhobit.com.br/wp-content/uploads/2017/08/exemplo-json.jpg" alt="" width="599" height="875" srcset="https://velhobit.com.br/wp-content/uploads/2017/08/exemplo-json.jpg 599w, https://velhobit.com.br/wp-content/uploads/2017/08/exemplo-json-274x400.jpg 274w, https://velhobit.com.br/wp-content/uploads/2017/08/exemplo-json-411x600.jpg 411w" sizes="auto, (max-width: 599px) 100vw, 599px" /></p>
<p><strong>O código back-end completo fica (com comentários para ajudar a compreensão):</strong></p>
<pre class="prettyprint">&lt;?php
//Garantir que seja lido sem problemas
header("Content-Type: text/plain");

//Worskspace
$workspace = "d5b7e381-XXXX-XXXX-XXXX-XXXXXXXXXXXX";

/**
Antiga Autenticação
//Dados de Login
$username = "cd27b34f-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
$password = "Kl8XXXXXXXXX";
**/
$apikey = "xxxxxxxxxxxxxxxxx";
//Capturar Texto
//Use $_POST em produção, por segurança
$texto = $_REQUEST["texto"];

//Verifica se existe identificador
//Caso não haja, crie um
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
if(isset($_SESSION["identificador"])){
	$identificador = $_SESSION["identificador"];
}else{
	//Você pode usar qualquer identificador
	//Você pode usar ID do usuário ou similar
	$identificador = md5(uniqid(rand(), true));
	$_SESSION["identificador"] = $identificador;
}

//URL da API
//(deve ser passado o método e a versão da API em GET)
$url = "https://gateway.watsonplatform.net/conversation/api/v1/workspaces/" . $workspace;
$urlMessage = $url . "/message?version=2017-05-26";

//Dados
$dados  = "{";
$dados .= "\"input\": ";
$dados .= "{\"text\": \"" . $texto . "\"},";
$dados .= "\"context\": {\"conversation_id\": \"" . $identificador . "\",";
$dados .= "\"system\": {\"dialog_stack\":[{\"dialog_node\":\"root\"}], \"dialog_turn_counter\": 1, \"dialog_request_counter\": 1}}";
$dados .= "}";

//Cabeçalho que leva tipo de Dados
$headers = array('Content-Type:application/json');

//Iniciando Comunicação cURL
$ch = curl_init();
//Selecionando URL
curl_setopt($ch, CURLOPT_URL, $urlMessage);
//O cabeçalho é importante para definir tipo de arquivo enviado
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//Habilitar método POST
curl_setopt($ch, CURLOPT_POST, 1);
//Enviar os dados
curl_setopt($ch, CURLOPT_POSTFIELDS, $dados);
//Capturar Retorno
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Autenticação
//curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); Autenticação antiga
curl_setopt($ch, CURLOPT_USERPWD, "apikey:$apikey")
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
//Executar
$retorno = curl_exec($ch);
//Fechar Conexão
curl_close($ch);

//Imprimir com leitura fácil para humanos
$retorno = json_decode($retorno);
echo json_encode($retorno, JSON_PRETTY_PRINT);

?&gt;</pre>
<h2>Código do Front-End</h2>
<p>Agora precisamos fazer a interação do usuário com o chatbot. Para isso, precisamos criar uma área do chat e o formulário que enviará os dados.</p>
<pre class="prettyprint">&lt;div id="watson" class="watson"&gt;
	&lt;div class="mensagens"&gt;
		&lt;div class="area" id="chat"&gt;
		&lt;/div&gt;
	&lt;/div&gt;
	&lt;form id="mensagem" class="mensagem"&gt;
		&lt;input type="text" id="texto" name="texto" placeholder="Digite sua mensagem"/&gt;
		&lt;button type="submit"&gt;Enviar&lt;/button&gt;
	&lt;/form&gt;
&lt;/div&gt;</pre>
<p>Com a área de chat criada, está na hora de adicionarmos os scripts necessários para fazer a comunicação com o back-end. Para facilitar, usaremos o método ajax do jQuery. Atenção aos comentários no código abaixo, pois eles explicam para quê serve cada linha.</p>
<pre class="prettyprint">&lt;!--Importar jQuery. Retire caso sua página já faça a importação. --&gt;
&lt;script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
//Submeter Formulário
$("#mensagem").submit(function(){
	//Caso o usuário envie uma mensagem vazia
	if($("#mensagem #texto").val() === ""){
		//Adiciona na área de Chat a mensagem enviada pelo usuário
		$("#chat").append("&lt;div class=\"texto usuario\"&gt;...&lt;/div&gt;");
		
		//Faz um scroll para a mensagem mais recente, caso necessário
		$(".mensagens").animate({scrollTop: $("#chat").height()});
		setTimeout(function(){
			//Adiciona uma resposta padrão afirmando que o usuário deixou o campo vazio
			$("#chat").append("&lt;div class=\"texto chatbot\"&gt;Você precisa digitar alguma coisa para prosseguir.&lt;/div&gt;");
			//Faz um scroll para a mensagem mais recente, caso necessário
			$(".mensagens").animate({scrollTop: $("#chat").height()});
		},1000);
		return false;
	}
	
	//Inicia método AJAX
	$.ajax({
		//Substitua o caminho da URL pelo que você salvou o arquivo de backend
		url: "/pasta/conversa.php?texto=" + $("#mensagem #texto").val(),
		dataType: 'json', // Determina o tipo de retorno
		beforeSend: function(){
			//Adiciona a mensagem de usuário à lista de mensagens.
			$("#chat").append("&lt;div class=\"texto usuario\"&gt;" + $("#mensagem #texto").val() + "&lt;/div&gt;");	
		},
		success: function(resposta){
			//Limpa o que o usuário digitou e foca no input para próxima interação.
			$("#mensagem #texto").val("");
			$("#mensagem #texto").focus();
			
			//Caso haja um erro, o Watson retornará a mensagem de erro ao usuário
			//Basta ler o objeto error para o usuário.
			if(resposta.error){
				$("#chat").append("&lt;div class=\"texto chatbot\"&gt;" + resposta.error + "&lt;/div&gt;");
				return false;
			}
			
			//Colocar a resposta do Watson para o usuário ler
			//A mensagem de texto pode ser lida a partir da lógica
			//do json de exemplo da imagem no post
			var mensagemChatbot  = "&lt;div class=\"texto chatbot\"&gt;";
			mensagemChatbot		+= resposta.output.text[0];
			mensagemChatbot		+= "&lt;/div&gt;";
			setTimeout(function(){
				$("#chat").append(mensagemChatbot);
				$(".mensagens").animate({scrollTop: $("#chat").height()});
			},1000);
		}
	});

	return false;
});
&lt;/script&gt;</pre>
<p>Observe que no código acima existe um método setTimeOut que ocorre sempre antes de adicionar a resposta do Watson. Isso é feito por uma decisão de experiência do usuário.</p>
<p>Uma resposta muito rápida pode causar uma confusão de interpretação e estranhamento.</p>
<p>Quando você está conversando com alguém, a tendência é, ao enviar uma mensagem, esperar que a pessoa ao menos pense na resposta e digite antes de responder. Um pequeno atraso de um segundo na resposta é um tempo mínimo esperado para dar uma maior naturalidade a conversa e ainda permitir que o usuário se prepare para receber uma mensagem. Essa é uma decisão puramente de UX. Caso queira, você pode retirar o setTimeout e irá funcionar normalmente, mas ao testar você poderá sentir que esse tempo de resposta faz falta.</p>
<p>Para finalizar, vamos colocar um estilo CSS para ficar mais agradável ao usuário.</p>
<pre class="prettyprint">&lt;style&gt;
	.watson{
		border: 1px solid #B0BEC5;
		border-radius: 3px;
		height: 50em;
		max-height: 500px;
		padding: 1em;
		
		max-width: 500px;
		margin: 0 auto;
		
		display: flex;
		flex-direction: column;
		justify-content: space-between;
	}
	
	.watson .mensagens{
		box-sizing: border-box;
		overflow: hidden;
		overflow-y: auto;
		height: 100%;
	}
	
	.watson .mensagens .area{
		display: flex;
		justify-content: flex-end;
		flex-direction: column;
		min-height: 100%;
	}
	
	.watson .mensagens .texto{
		border-radius: 2px;
		box-sizing: border-box;
		padding: .65em;
		margin-top: .5em;
		
		animation: popupmensagem linear .2s;
		animation-iteration-count: 1;
		-webkit-animation: popupmensagem linear .2s;
		-webkit-animation-iteration-count: 1;
		-moz-animation: popupmensagem linear .2s;
		-moz-animation-iteration-count: 1;
		-o-animation: popupmensagem linear .2s;
		-o-animation-iteration-count: 1;
		-ms-animation: popupmensagem linear .2s;
		-ms-animation-iteration-count: 1;
	}
	
	.watson .mensagens .texto:first-child{
		margin-top: 0;
	}
	
	.watson .mensagens .texto.usuario{
		background-color: #ECEFF1;
		color: #1A237E;
		margin-right: 30%;
		
		transform-origin: 0% 100%;
		-webkit-transform-origin: 0% 100%;
		-moz-transform-origin: 0% 100%;
		-o-transform-origin: 0% 100%;
		-ms-transform-origin: 0% 100%;
	}
	
	.watson .mensagens .texto.chatbot{
		background-color: #FF5722;
		color: white;
		font-weight: bold;
		margin-left: 30%;
		
		transform-origin: 100% 100%;
		-webkit-transform-origin: 100% 100%;
		-moz-transform-origin: 100% 100%;
		-o-transform-origin: 100% 100%;
		-ms-transform-origin: 100% 100%;
	}
	
	.watson form.mensagem{
		padding: 0;
		margin-top: 1em;
	}
	
	.watson form.mensagem input{
		border: 2px solid #476A7B;
		border-radius: 3px;
		padding: .5em .8em;
		font-size: 16px;
		display: block;
		box-sizing: border-box;
		width: 100%;
	}
	
	.watson form.mensagem input:focus{
		border: 2px solid #1A237E;
		outline: none;
	}
	
	.watson form.mensagem button{
		background-color: #3F51B5;
		border: none;
		border-radius: 3px;
		display: block;
		padding: .5em 1em;
		width: 100%;
		font-size: 16px;
		color: white;
		margin-top: .5em;
	}
	
	
	/**Animação de Mensagem**/
	
	@keyframes popupmensagem{
	  0% {
		transform:  scaleX(0.30) scaleY(0.30) ;
	  }
	  100% {
		transform:  scaleX(1.00) scaleY(1.00) ;
	  }
	}

	@-moz-keyframes popupmensagem{
	  0% {
		-moz-transform:  scaleX(0.30) scaleY(0.30) ;
	  }
	  100% {
		-moz-transform:  scaleX(1.00) scaleY(1.00) ;
	  }
	}

	@-webkit-keyframes popupmensagem {
	  0% {
		-webkit-transform:  scaleX(0.30) scaleY(0.30) ;
	  }
	  100% {
		-webkit-transform:  scaleX(1.00) scaleY(1.00) ;
	  }
	}

	@-o-keyframes popupmensagem {
	  0% {
		-o-transform:  scaleX(0.30) scaleY(0.30) ;
	  }
	  100% {
		-o-transform:  scaleX(1.00) scaleY(1.00) ;
	  }
	}

	@-ms-keyframes popupmensagem {
	  0% {
		-ms-transform:  scaleX(0.30) scaleY(0.30) ;
	  }
	  100% {
		-ms-transform:  scaleX(1.00) scaleY(1.00) ;
	  }
	}
&lt;/style&gt;
</pre>
<p>E agora? Funciona mesmo?</p>
<p>Veja o exemplo abaixo, utilizamos exatamente o mesmo código. Lembre-se que há apenas poucas interações e respostas criadas para este tutorial, então não espere ter uma conversa muito avançada com este chatbot.</p>
<p><strong>Obs. Está sendo utilizada no exemplo uma conta Lite, então é possível que quando você testar já tenha acabado o limite mensal.</strong></p>
<div id="watson" class="watson">
<div class="mensagens">
<div id="chat" class="area"></div>
</div>
<form id="mensagem" class="mensagem"><input id="texto" name="texto" type="text" placeholder="Digite sua mensagem" /><button type="submit">Enviar</button></form>
</div>
<p>Caso você deseje um pouco mais de segurança, recomendamos que você utilize um arquivo .htdocs na pasta em que está o conversa.php, com o conteúdo abaixo. Evitando, assim, acesso externo.</p>
<pre class="prettyprint">#Evitar Acesso Externo
Order Deny,Allow
Deny from all
Allow from 127.           # localhost</pre>
<h3>Faça o Download do Código no Github, se preferir:</h3>
<p><center><br />
<!-- Place this tag where you want the button to render. --><br />
<a class="github-button" href="https://github.com/velhobit/Watson-Example-PHP-Chatbot/archive/master.zip" data-icon="octicon-cloud-download" data-size="large" aria-label="Download velhobit/Watson-Example-PHP-Chatbot on GitHub">Download</a></center>Implementar um chatbot do IBM Watson é mais simples do que você pensava, não é? Mas lembre-se que esse é só um tutorial básico para demonstrar como usar a API REST. Você pode, verificar todos os métodos e parâmetros que podem ser utilizados diretamente pela <a href="https://www.ibm.com/watson/developercloud/conversation/api/v1/" target="_blank" rel="noopener">documentação</a>.</p>
<p>Caso tenha apreciado este conteúdo, dê uma passada lá na <a href="https://www.facebook.com/velhobit/" target="_blank" rel="noopener">página da VelhoBit no Facebook</a> e deixe seu like. Compartilhe este post com colegas e interessados na área de tecnologia e não deixe de conferir o restante dos artigos no blog.</p>
<p>Até o próximo tutorial.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://velhobit.com.br/programacao/ibm-watson-como-criar-um-chatbot-com-php-e-jquery.html/feed</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Terceirização Ilícita no Mercado de TI &#8211; Uma Abordagem Ética</title>
		<link>https://velhobit.com.br/desenvolvimento/terceirizacao-ilicita-no-mercado-de-ti-uma-abordagem-etica.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Wed, 31 May 2017 11:35:05 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[contratação]]></category>
		<category><![CDATA[cópia]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[emprego]]></category>
		<category><![CDATA[legislação]]></category>
		<category><![CDATA[lei]]></category>
		<category><![CDATA[obrigatoriedade]]></category>
		<category><![CDATA[pirataria]]></category>
		<category><![CDATA[povo]]></category>
		<category><![CDATA[projetos]]></category>
		<category><![CDATA[reflexo]]></category>
		<category><![CDATA[revenda]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[terceirização]]></category>
		<category><![CDATA[trabalhador]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=318</guid>

					<description><![CDATA[Usar um template pronto na internet, copiar um script pronto e modificar, assinar um trabalho de outro. Quais as implicações legais e éticas acerca da terceirização e da revenda de projetos prontos?]]></description>
										<content:encoded><![CDATA[<p>Antes de mais nada, é importante deixar claro que deve ser considerado não o trecho de um código, como um CMS de código aberto ou algo assim, mas sim o resultado do produto. Por exemplo, um site não é o WordPress, o site é o resultado do conjunto. Da mesma forma, um aplicativo não é uma biblioteca e sim um conjunto de elementos para solucionar um problema.</p>
<p>Para prosseguir, é necessário definir o termo <strong><em>artefato digital</em></strong>. Em <a href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank" rel="noopener noreferrer">design</a>, consideramos que artefato é o resultado do projeto. Logo, artefato digital é uma referência ao que é oferecido na contratação e resolução do projeto, como um site, uma revista, um sistema, um aplicativo, etc. O ponto onde mais acontece esse tipo de comportamento é na área de criação de sites, onde muitas pessoas, e até empresas, pegam ou compram <em>templates</em> prontos, e mandam para o cliente como algo original.</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-320 size-large" src="http://velhobit.com.br/wp-content/uploads/2017/05/site-nilton-camara-feito-com-template-wallbase-1024x389-1.jpg" alt="" width="1024" height="389" /></p>
<p>Vou listar os argumentos mais comuns daqueles que <strong>não veem problemas </strong>em revender <em>templates</em> baixados da internet:</p>
<ol>
<li>Ao adquirir algo gratuito, ele é seu, e, por isso, você pode fazer o que quiser com ele;</li>
<li>Ao comprar ou adquirir o <em>template</em> pronto em um site, nas suas diretrizes e regras, não está evidenciado a proibição e obrigatoriedade de declarar quem foi o autor da obra;</li>
<li>Por modificar cores, logos e inserir conteúdo, eu me torno proprietário e, portanto desenvolvedor daquele site, por isso, posso assinar. O que restringe é você revender aquilo diretamente;</li>
<li>O <em>template</em> foi desenvolvido usando a licença GNU ou <em>Creative Commons</em>;</li>
<li>A empresa onde eu adquiri o <em>template</em> me deu todos os direitos de uso da obra, do artefato.</li>
<li>Simples sacanagem</li>
</ol>
<p>Muito bem, dados alguns argumentos, os mais comuns que me foram apresentados, vamos respondê-los:</p>
<p>1 &#8211; <strong>Você não pode fazer o que quiser com algo simplesmente porque foi de graça</strong>. Você só recebeu o direito de uso. Isso não significa que você possa vender, alugar, utilizar para outros fins, etc. Por exemplo, digamos que você foi sorteado e ganhou um blu-ray dos Vingadores 3D. Ele foi de graça, mas aquela cópia não pode ser alugada para ninguém. Caso você queira alugar, deve comprar uma cópia autorizada legalmente para este fim e, ainda sim, não te dá o direito copiar para revender;</p>
<p>2 &#8211; <strong>Direitos intelectuais morais são irrevogáveis</strong>. Ou seja, se você desenhou um porco, você nunca vai poder afirmar que não fez o desenho, você não pode vender, repassar, doar nenhum direito intelectual moral sobre a obra. Isso quer dizer que você não pode assinar o trabalho de outra pessoa, de forma alguma, mesmo que permitida pelo autor da obra. Você pode até usar um <em>template</em> como base para seu projeto, mas só para usar seu esqueleto e não para copiar. E, mesmo assim, identificando o original. Se a obra permanecer identificável e for assinada por um terceiro, pode ser declarado plágio ou uso indevido de propriedade intelectual.</p>
<p>3 &#8211; <strong>Trocar a cor ou adicionar uma logo, imagens ou conteúdo, não transforma o artefato em si</strong>. Tampouco faz de você proprietário da obra. Veja o Orkut, o Facebook ou o Google Plus, por exemplo, você adiciona conteúdo, personaliza sua página, adiciona e retira fotos. A ferramenta em si é que permite você utilizar isso, mas ela não é sua porque você a está moldando ou modificando algumas partes.</p>
<p>4 &#8211; <strong>A licença GNU e a Creative Commons te dá a liberdade de utilizar daquele material comercialmente, ou como melhor lhe convier</strong>. Isso <strong>não</strong> quer dizer, porém, que poderá tomar para si os direitos como criador da obra. Novamente aplica-se aqui o caso de direito de uso. No caso do GNU, para softwares, fica claro que deverá ser repassado a fonte para que possa ser modificado, ainda sim, não abdica os direitos intelectuais morais do artefato em questão.</p>
<p>5 &#8211; <strong>O que a empresa que vendeu o <em>template</em>, aplicativo ou material digital afirma nunca vai estar acima da legislação do seu país</strong>. Assim como dito anteriormente, alguns direitos são irrevogáveis. E mentir para seu cliente, afirmando ter feito algo que você não fez, pode ser enquadrado até (novamente repito, <strong>até</strong>) como fraude.</p>
<p>6 &#8211; Nem preciso argumentar.</p>
<h2><strong>Mas e quanto as implicações legais?</strong></h2>
<p><strong>Direitos de Propriedade Intelectual</strong></p>
<p>Segundo o Art. 27, Capítulo II, da LEI Nº 9.610, DE 19 DE FEVEREIRO DE 1998, &#8220;<strong>Os direitos morais do autor são inalienáveis e irrenunciáveis.</strong>&#8221; O autor fez a obra e ponto final. Não se pode passar, por motivos óbvios, a denominação dessa autoria.</p>
<p>Quanto ao exemplo do bluray dos Avengers 3D, a lei fala, no Capítulo III, &#8220;<strong>Art. 37. A aquisição do original de uma obra, ou de exemplar, não confere ao adquirente qualquer dos direitos patrimoniais do autor, salvo convenção em contrário entre as partes e os casos previstos nesta Lei</strong>.&#8221; Ou seja, o fato de ser gratuito não quer dizer que pode usar a obra de qualquer forma.</p>
<p>Ainda no Capítulo III: &#8220;<strong>Art. 38. O autor tem o direito, irrenunciável e inalienável, de receber, no mínimo, cinco por cento sobre o aumento do preço eventualmente verificável em cada revenda de obra de arte ou manuscrito, sendo originais, que houver alienado.</strong>&#8221; Este trecho deixa claro que o que você conseguiu de graça não pode simplesmente pegar o original e revender, o autor precisaria receber por isso.</p>
<p>E, o ponto que eu considero mais importante para acabar com a discussão sobre assinar o template feito por outra pessoa, quero deixar esse longo trecho do Capítulo II:<br />
&#8220;<strong>Art. 108. Quem, na utilização, por qualquer modalidade, de obra intelectual, deixar de indicar ou de anunciar, como tal, o nome, pseudônimo ou sinal convencional do autor e do intérprete, além de responder por danos morais, está obrigado a divulgar-lhes a identidade da seguinte forma:</strong><br />
<strong> I &#8211; tratando-se de empresa de radiodifusão, no mesmo horário em que tiver ocorrido a infração, por três dias consecutivos;</strong><br />
<strong> II &#8211; tratando-se de publicação gráfica ou fonográfica, mediante inclusão de errata nos exemplares ainda não distribuídos, sem prejuízo de comunicação, com destaque, por três vezes consecutivas em jornal de grande circulação, dos domicílios do autor, do intérprete e do editor ou produtor;</strong><br />
<strong> III &#8211; tratando-se de outra forma de utilização, por intermédio da imprensa, na forma a que se refere o inciso anterior.</strong>&#8221;</p>
<p>Há um consenso geral de que é absurdo você afirmar que compôs uma obra que não compôs, escreveu um livro que nunca escreveu ou  pintou um quadro que nunca pintou. O mesmo deve ser aplicado a qualquer tipo de projeto, incluindo design de interfaces, software, sites, material publicitário, revistas, etc. Por isso, quando o trabalho tem co-autoria, como uma equipe, os nomes de todos devem estar evidenciado, como em editorial ou em um casting de filme.  Mas está claro, por tanto, que, independente do que você considere certo ou errado, de padrões éticos ou não, é <strong>COMPLETAMENTE ILEGAL</strong> deixar de indicar o autor VERDADEIRO da obra.</p>
<h2><strong>Terceirização de Atividade-Fim ou Quarteirização</strong></h2>
<p>A atividade-fim, como o próprio nome diz, é o objetivo social da empresa, trata-se do que ela faz, o que ela se dispõe a fazer, qual a sua principal função ou funções. Por exemplo, um estúdio de design digital, tem, como sua atividade-fim (dependendo do que está declarado em sua razão social) desenvolver websites, interfaces e soluções para diversas áreas de comunicação. Já uma fábrica de softwares tem como atividade-fim desenvolver soluções para a área da qual ela se propõe.</p>
<p>Segundo o advogado Paulo Henrique Teixeira, em seu livro <em>Terceirização com Segurança</em>, afirma &#8220;A terceirização pode ser aplicada em todas as áreas da empresa definida como atividade-meio. (&#8230;) É ilegal a terceirização ligada diretamente ao produto final, ou seja, a atividade-fim. Isolando a atividade-fim, todas as demais podem ser legalmente terceirizadas.&#8221; Ou seja, você não pode, em hipótese alguma, terceirizar aquilo que você se propõe a fazer.</p>
<p>Isso, para alguns, não parece óbvio. Mas a verdade é como se você contratasse uma faxineira para limpar sua casa, só que, em segredo, ela contrata uma outra pessoa por um preço menor, para fazer todo o trabalho. Ou seja, oferece um serviço, não faz, contrata outra pessoa para fazer e ainda sai lucrando com isso. Realmente parece certo para você? Parece certo que uma pessoa ofereça um site para alguém e, em segredo, compra um site de terceiros, mude uma cor e depois entrega? Não me parece algo de boa fé.</p>
<p>Esse problema não atinge somente pequenas empresas ou a área de TI, em Fevereiro de 2012 a <a href="http://migre.me/aTDnS">Volkswagen foi condenada por terceirizar atividade-fim</a>. Em muitos casos, esse tipo de comportamento pode ser considerado fraude e causar punições realmente sérias para quem a fizer.</p>
<p>Uma prática muito comum que vem acontecendo, dentro do mercado de TI, é o pedido de que a pessoa a ser contratada abra um CNPJ e forneça o serviço, como Empreendedor Individual, ao contratante. Apesar de parecer muito interessante por reduzir encargos, as contratantes não repassam esses valores economizados. Por exemplo, digamos que um programador PHP receba um salário de R$3.500,00. Isso quer dizer um custo de aproximadamente R$6.000,00, fora o investimento em equipamento, energia, água, enfim, manutenção do ambiente de trabalho. Agora, o contratado, como CNPJ, irá receber os mesmos R$3.500,00, talvez R$4.000,00, mas sem direito a férias, décimo terceiro, INSS (que não é só aposentadoria, mas também doenças), Seguro Desemprego, FGTS, etc. Além, claro, dos custos com equipamentos próprios e administrativos. Não parece um negócio tão bom assim se parar para pensar não é? Além disso, se o profissional passar mais de 3 dias ou houver comportamento hierárquico, ou seja, sendo subordinado a alguém, o TRT (Tribunal Regional do Trabalho) considera como empregado e a empresa deverá responder por sua ilegalidade.</p>
<p>Vale salientar, entretanto, que empresas que fazem esse comportamento supracitado estão agindo ilegalmente e podem responder ao TRT e serem obrigados a pagar tudo retroativamente. Mas também não quer dizer que você não deva ter um CNPJ e trabalhar oferecendo serviços, apenas precisa aprender a pesar bem e verificar como está sendo feito, para manter tudo dentro do mercado ético e sadio.</p>
<p><a href="http://domtotal.com/charge.php?chaId=1833" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" class="alignnone wp-image-322 size-full" src="http://velhobit.com.br/wp-content/uploads/2017/05/duke-terceirizacao-1.jpg" alt="" width="700" height="700" /></a></p>
<h2><strong>Mas eu insiro conteúdo, faço modificações, eu devo parar com isso ou fazer de graça?</strong></h2>
<p>Ninguém está afirmando que deve fazer o trabalho de graça. Mas aí é que está a afirmação do tipo de serviço que você oferece. Se você, ou seu cliente, quiserem modificar um template já pronto, você deve prestar-lhe um serviço de consultoria, fazendo parte de sua atividade-fim. Não importa se você é designer, programador ou analista de conteúdo, você pode ser um <strong><em>consultor</em></strong>.</p>
<p>Como consultor, você vai recomendar a seu cliente qual e onde ele deve comprar o template. Isso é completamente diferente de você afirmar que fez. Você está sendo honesto e mostrando para ele opções. Além disso, você não vai assinar algo que você não fez. A assinatura deve permanecer com a original. E, se você fizer modificações suficientes para julgar que vale a pena a menção de seu nome, divida a autoria. Por exemplo: &#8220;Desenvolvido por CoolThemes, adaptado por RodrigoPortillo&#8221;. Simples, não é? Assim você afirma que você não desenvolveu, só o adaptou e, ainda, ajudou seu cliente.</p>
<p><strong>Exemplificando melhor:</strong></p>
<p>Digamos que você foi contratado para fazer um sistema X. Digamos que você, por desconhecimento em design, optou por usar o Bootstrap. Neste caso, você foi contratado para fazer o sistema e terceirizou parte dele (no caso o Bootstrap), então não há problemas.</p>
<p>Agora, digamos que você foi contratado para fazer uma interface para um sistema X. Você não pode optar por usar o Bootstrap para ele. Pode até usar a sua base esquelética, mas sua obrigação, como designer de interação, é desenvolver e implementar toda a interface específica e pensada para aquele sistema. Neste caso, há problemas.</p>
<h2><strong>A Polêmica Política</strong></h2>
<p>Desde o final do ano de 2016, um Projeto de Lei que garante terceirização irrestrita está tentando ser aprovado. Do ponto de vista jurídico, isso significa que qualquer empresa poderá contratar qualquer outra empresa para fazer qualquer coisa, mesmo que seja o que ela foi contratada para fazer. Para as empresas, financeiramente, isso é um bom negócio, pois afirma que pode ter todos os seus colaboradores contratados sob o regime de Empreendedor Individual e não precisar pagar nenhum encargo. Da mesma forma, eles podem rescindir desse contrato quando bem entender.  Entretanto, esse projeto teve alguns trechos podados e foi <strong>sancionado</strong>, no começo de 2017, <strong>com ressalvas</strong>, pelo então Presidente da República.</p>
<p>As leis trabalhistas, realmente, em alguns pontos, precisam ser afrouxadas para poder fomentar a contratação por pequenas empresas e trabalhos temporários. Os sindicatos, em sua maioria, estão abusando tanto do contribuinte quanto das questões legais e esquecendo suas funções sociais. Todavia, a terceirização irrestrita pode causar um colapso no número de empregos e até mesmo causar demissões em massa para contratação por CNPJ, além de acordos unilaterais que podem explorar quem não possui conhecimento sobre seus direitos.</p>
<p>De fato, a terceirização irrestrita traria também um problema filosófico quanto a ética sobre produção e a propriedade intelectual e moral sobre o que está sendo produzido. Afinal, se eu contratar uma empresa para fazer um software, e ela contrata outra mais barata, que, por sua vez, contrata outros três Empreendedores Individuais, de quem é a propriedade moral do projeto? Quais garantias de entrega de qualidade à medida que se diminui o laço de contato e se torna uma rede de &#8220;telefone sem fio&#8221;?</p>
<p><strong>ATENÇÃO:</strong></p>
<p><strong><a href="http://www.acritica.com/channels/manaus/news/domingo-e-o-fim-dos-concursos-publicos" target="_blank" rel="noopener noreferrer">Para a procuradora do trabalho do MPT/PRT-11, Cirlene Luiza Zimmermann, a Lei 13.429, de 31 de março de 2017, não autorizou expressamente a terceirização na atividade fim das empresas: “A terceirização foi aprovada para a contratação da prestação de serviços determinados e específicos, ou seja, serviços especializados, como era até então, com base no entendimento consolidado pelo Tribunal Superior do Trabalho”</a></strong></p>
<p>Vale lembrar que o texto do referido projeto de lei foi sancionado com mudanças consideráveis, que seriam revistas com as novas diretrizes da Lei do Trabalho, que foi adiada por conta de todo o processo que atingiu o então presidente da República Michel Temer. Isso quer dizer que a terceirização NÃO é irrestrita ainda, a lei apenas permite a terceirização da atividade fim sob determinadas condições e processos administrativos, como deixa claro a Dra Gisele Leite (<a href="http://www.jornaljurid.com.br/colunas/gisele-leite/terceirizacao-e-a-lei-134292017" target="_blank" rel="noopener noreferrer">http://www.jornaljurid.com.br/colunas/gisele-leite/terceirizacao-e-a-lei-134292017</a>). Ainda, essa nova lei não deixa mais claro a diferença entre atividade-fim e atividade-meio. Porém mesmo com essa nova lei, devido a determinados vetos em seu projeto e o não avanço das novas diretrizes da Lei do Trabalho, dentro dos exemplos supracitados, a quarteirização, no que condiz ao segmento de tecnologia em como é levado, continua ilícita.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-321" src="http://velhobit.com.br/wp-content/uploads/2017/05/michel-temer-evento-planalto-1.jpeg" alt="" width="768" height="512" /></p>
<h2>Ah! Portillo! Faça o seu! Vai fazer algo de útil ao invés de ficar fiscalizando os outros</h2>
<p>Primeiro quero deixar claro que eu não saio por aí fiscalizando, mas, como sou do meio, vez ou outra alguém que trabalha em uma empresa dessas me aparece e vou conferir. Eu reconheço quase que na hora um site de feito em template genérico, uma identidade visual que usa logos stock ou um sistema cheio de códigos genéricos.</p>
<p>O fato é que eu acho muito útil discutir sobre o assunto e denunciar as empresas que agem de forma errada. Como eu denuncio? Geralmente mando uma mensagem pública e, se me xingam, me bloqueiam ou algo assim, eu entro em contato com pelo menos um dos clientes. Por que isso é importante? Porque são essas empresas que destroem o mercado honesto. Um mercado sadio é fundamental para que todos cresçam e se fortaleçam.</p>
<p>Não só são empresas pequenas que fazem esse tipo de coisa, algumas tem clientes grandes, escritórios grandes. Afinal, é uma forma muito fácil de ganhar dinheiro. Você realmente acha que eu devo ficar calado em quando uma pessoa está sendo tripudiada? E que tal o fato de que enquanto nós, designers e desenvolvedores de verdade, estudamos, pensamos, planejamos,etc., tem um cara cobrando o mesmo, e até mais que a gente, sem fazer trabalho nenhum, só mudando a cor de um objeto. Só esta semana eu vi 3 &#8220;estúdios&#8221; que tem esse comportamento. O resultado, se deixarmos isso continuar, é a desvalorização da profissão. Desenvolvedores, no geral, já são vistos como preguiçosos e profissão fácil, imagina se esses caras continuarem a agir de má fé desse jeito! Como nós, honestos, seremos vistos?</p>
<p>Anos atrás eu trabalhava em uma empresa boa, desenvolvendo um sistema em Adobe Flex para controle de estoque. Porém não ganhava o que considero justo. Recebi, então, uma proposta para ser diretor de arte de uma agência web que estava se desenvolvendo. Foi uma proposta razoável e valia a pena arriscar. O problema é que eles estavam se mudando para uma casa e gastaram 10 mil na reforma. Só que nada desse dinheiro foi usado na compra de novos computadores e as máquinas eram realmente ruins (tinha máquina com 512MB de RAM, em 2010). Vendo o problema para desenvolver, cheguei ao dono da empresa e disse: &#8220;Olha. Você investiu 10 mil na casa, mas não deu um centavo para compra de computadores, que são as ferramentas de trabalho da empresa. Eles deveriam vir primeiro.&#8221; Passou mais duas semanas e nada de computador, resolvi me demitir, disse a ele que não dava e que era impossível trabalhar daquele jeito, então ele pediu uma semana para que o contador ajustasse as coisas.</p>
<p>Uma semana depois, eu volto e nada. Ele (o dono) só queria me pagar cerca de 25% do combinado do salário e ainda queria que eu passasse uma nota fiscal para ele. Claro, fiquei irritado e disse que era absurdo, afinal, eu fui contratado para trabalhar lá e ele já estava com minha carteira há um mês. Então, não tive outra opção. Acionei a justiça.</p>
<p>O dono da empresa estava confiante que juiz não ia nem se importar por um mês de trabalho. Mas, era um valor justificável para uma ação. Sumaríssima.</p>
<p>A advogada dele veio com a defesa de que teriam me achado na internet e contratado para fazer 3 sites que eu nem cheguei a terminar. Como &#8220;prova&#8221; levaram um<em> print screen</em> do meu site, uma testemunha que nunca me viu e ainda queriam exigir os custos do processo. O juiz, que obviamente era um cara inteligente, olhou tudo e perguntou para a testemunha qual o custo médio de um site. A testemunha responde: &#8220;entre dois mil e dois mil e quinhentos reais&#8221;. O juiz então viu que o valor que eu estava pedindo correspondia com o salário de um diretor de arte e disse ao dono da empresa: &#8220;Terceirização de Serviços Oferecidos é ilegal, por isso, você admite todos os vínculos trabalhistas com o queixante&#8221; (não foram bem essas palavras, mas é o que me lembro). E ainda mandou o cara pagar os custos do meu advogado. Quando uma empresa contrata alguém terceirizado para fazer um serviço de sua atividade-fim, ela é obrigada a fazer dele um empregado, ou seja, não pode terceirizar.</p>
<p>No dia seguinte, o dono da empresa, de pirraça, tirou tudo do nome dele e logo fechou a empresa, o juiz mandou penhorar alguns bens. O cara botou tudo no nome da mulher e até hoje não me pagou tudo. Mas eu fiquei feliz porque ele agora não pode fazer nada até me pagar e nem é tanto assim. Ele criou uma empresa, com o mesmo nome, através de um laranja, só que ele agora usa o nome consultoria, acho que para não passar por isso de novo. Só para constar, ele pula de tipo de serviço a tipo de serviço o tempo todo. Nada do que ele faz dá certo, mas ele sempre usa o mesmo nome na empresa.</p>
<h2>A forma correta de agir</h2>
<p>Para agir corretamente não tem segredo. Basta ser honesto com seu cliente. Se você estudou muito e desenvolveu um site, ótimo, se você acha que o cliente deve usar um template pago, recomende para ele e cobre somente a consultoria. Não fira o direito de propriedade intelectual, cada um merece ser reconhecido por seu trabalho e, além de obrigatório, é a coisa correta a se fazer. Denuncie, relate, use do seu sarcasmo, só não deixe isso passar pela sua frente sem fazer nada.</p>
<p>Agora, se você ou sua empresa faz isso, pense, repense e lembre-se: Dentro do que foi exemplificado acima, ainda é ilegal, não importa o que você acha. Ajuste-se à ética, ao mercado sadio e ao comportamento de mercado justo e transparente.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sistemas Operacionais (parte 1 &#8211; história)</title>
		<link>https://velhobit.com.br/editorial/sistemas-operacionais-parte-1-historia.html</link>
					<comments>https://velhobit.com.br/editorial/sistemas-operacionais-parte-1-historia.html#comments</comments>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Thu, 30 Mar 2017 12:29:32 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Editorial]]></category>
		<category><![CDATA[história]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[minix]]></category>
		<category><![CDATA[sistema operacional]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[solaris]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=266</guid>

					<description><![CDATA[Esta série foi criada com o objetivo de ajudar estudantes da área de TI. Nesta primeira parte, exploramos um resumo da história dos Sistemas Operacionais.]]></description>
										<content:encoded><![CDATA[<p>Quanto vale uma pedra de ouro se não houver uma utilidade para ela? Computadores são apenas pedaços de silício e plástico quando não possuem software para faze-los funcionar. Nos dias de hoje, o principal software para um computador é o Sistema Operacional. <strong>É chamado de Sistema Operacional o software, base, que faz o gerenciamento de recursos do hardware e define o modo como este se comunicará com as tarefas e processo de outros softwares</strong>.</p>
<h2>Como tudo começou</h2>
<p>No início, na época dos grandes <em>mainframes</em>, você precisava carregar o computador com toda a programação que iria utilizar. O primeiro sistema operacional realmente funcional foi o <em>GM-NAA I/O</em>, da <em>General Motors</em>, criado para funcionar no<em> IBM 704</em>. A ideia era automatizar diversas atividades sem ter que reenviar constantemente códigos bases para fazer uma determinada função, além de gerenciar melhor os recursos do equipamento. Com o tempo, diversas empresas desenvolveram sistemas operacionais para seus <em>mainframes</em>, algumas se especializaram na criação de sistemas para terceiros. O problema é que cada um apresentava características próprias e não possuíam nenhum tipo de comunicação entre si, criando a necessidade, aos poucos, de um padronização.</p>
<p><figure id="attachment_270" aria-describedby="caption-attachment-270" style="width: 637px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-270 size-full" src="http://velhobit.com.br/wp-content/uploads/2017/03/704-llnl-1.jpg" alt="" width="637" height="520" /><figcaption id="caption-attachment-270" class="wp-caption-text"><em><strong>IBM 704</strong></em></figcaption></figure></p>
<p>Em 1960, a IBM criou um sistema operacional chamado <em>OS/360</em>, para uma máquina chamada <em>System/360</em>. Várias versões do <em>OS/360</em> foram desenvolvidos, conforme versões de sua máquina, algumas mais avançadas e outras menos eram lançadas. Algumas versões posteriores desse Sistema Operacional até receberam outros nomes e arquiteturas de terceiros. O fato é que a IBM não foi a única a lançar Sistemas Operacionais, outras instituições, principalmente universidades (ou em acordos com essas), começaram a fazer novos sistemas, como o SCOPE, MACE, NOS, dentre outros.</p>
<p>Sem dúvida, o mais famoso dos Sistemas Operacionais para mainframes, na época, foi EXEC, para o UNIVAC (UNIVersal Automatic Computer). Um computador que fez muito sucesso entre os anos 50 e 60, principalmente por serem considerados pequenos e mais baratos (chegando até a versões que tinham o tamanho de apenas algumas geladeiras). Dessa forma, esses computadores acabaram por ser mais acessíveis a universidades e pequenas empresas.</p>
<p><figure id="attachment_271" aria-describedby="caption-attachment-271" style="width: 1024px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-271" src="http://velhobit.com.br/wp-content/uploads/2017/03/univac-9400-1.jpg" alt="Univac 9400" width="1024" height="534" /><figcaption id="caption-attachment-271" class="wp-caption-text"><em><strong>Univac 9400-1969</strong></em></figcaption></figure></p>
<p>Todavia, a história do Sistema Operacional que utilizamos hoje, em microcomputadores, está ligada totalmente a história da computação pessoal, em especial, ao que foi considerado o primeiro PC: o<strong> <em>Altair 8800</em></strong>.</p>
<p>Criado com uma das primeiras linhas de microprocessadores da Intel, o <em>Altair 8800</em>, era um microcomputador onde você precisava programar subindo e descendo chaves. Na prática, ele era um kit, e não realmente um computador, destinado a <em>hobbystas</em>. Porém, essa máquina era praticamente inútil, até que Bill Gates e Paul Allen resolveram pegar uma dessas máquinas e portar o <em><strong>BASIC</strong></em> (linguagem de programação)<em> </em>para essa máquina, criando o que seria conhecido como <em><strong>Microsoft-BASIC</strong></em>.</p>
<p>Os primeiros microcomputadores não rodavam realmente sistemas operacionais, mas algo bem próximo a esses, chamados de <strong>Interpretador</strong>. Eles rodavam comandos de programação, compilava e executava. Não demorou muito até que a ideia de Sistemas Operacionais, já usada em <em>mainframes,</em> chegassem aos microcomputadores. Afinal, carregar sempre um programa, sem sistema de arquivos, não era algo fácil, e os disquetes estavam começando a se tornar uma realidade.</p>
<p>Voltando um pouco no tempo, de volta a metade dos anos 60, houve um grande esforço de uma parceria entre o <em>MIT</em>, <em>General Eletronics</em> e da <em>AT&amp;T</em> para a criação de um sistema operacional: o <strong><em>Multics</em></strong>. O problema é que até o final da década, o sistema não ficou pronto. Por conta de incertezas na busca pelo resultado e nos diferentes desejos de implementação de seus criadores, o <em>Multics</em> acabou sendo descontinuado. Porém, em 1969, Ken Thompson, um dos responsáveis pelo projeto, utilizou o seu conhecimento para uma versão menos ambiciosa, denominada então de <em>Unics</em> e, posteriormente, rebatizado como <em><strong>Unix.</strong></em></p>
<p>Em 1973, o Unix foi reescrito em C (antes fora escrito em <em>Assembly</em>), pelo próprio Ken Thompson e por Dennis Ritchie (criador da linguagem C). Mais tarde, o <em>Unix</em> começou a ser usado como base para outros sistemas operacionais, principalmente seu o núcleo (<em>kernel</em>), criando assim uma série de derivados. Em especial, podemos destacar o <em>Berkeley Software Distribution</em>, ou <em><strong>BSD</strong></em>. Dessa série de derivados começou-se a criar a família de Sitemas Operacionais <em>Unix</em> ou <em>ix</em>, dos quais veio o <em>POSIX</em>, <em>MINIX</em>, <em>FreeBSD</em>, <em>Solaris</em>, dentre outros, mas ainda não foi agora que o Linux apareceu.</p>
<p><figure id="attachment_273" aria-describedby="caption-attachment-273" style="width: 1000px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-273" src="http://velhobit.com.br/wp-content/uploads/2017/03/DEC_VT100_terminal-1-1.jpg" alt="" width="1000" height="888" /><figcaption id="caption-attachment-273" class="wp-caption-text"><em><strong>Terminal de Mainframe Rodando Unix</strong></em></figcaption></figure></p>
<h2>Os Sistemas Operacionais para PC</h2>
<p>Voltando aos microcomputadores, logo após o <em>Altair</em>, diversos equipamentos começaram a surgir, com destaque ao <strong>Apple II</strong>. O Apple II possuía um interpretador <em>BASIC</em>, mas não apenas isso, foi criada, pela Apple o <em>Apple DOS</em>. O nome DOS veio do termo <em>Disk Operating System</em> (guardem bem esse nome), que teve outros derivados, da própria Apple, com o tempo. O fato é que o mercado da <em>Maçã</em> crescia mais e mais na área de computadores pessoais, e a IBM, grande detentora da venda de <em>mainframes</em>, resolveu criar um novo computador. Com uma oferta até então inédita para a companhia, eles criaram o <strong>PC-IBM</strong>, usando peças de terceiros para compor o computador. Porém, eles precisavam de um Sistema Operacional, e é aí que a história muda.</p>
<p>A IBM precisava de um sistema operacional para poder vender seu novo computador, porém não tinha tempo para fazer. Afinal, a Apple já estava em alta, e o mercado estava complicado. Dessa forma, a IBM precisava comprar um sistema operacional pronto, foi quando William Gates II fez uma recomendação para os advogados, e outros responsáveis pela IBM, sobre a empresa de seu filho, a <strong><em>Microsoft</em></strong>, já conhecida por portar o BASIC para o Altair e desenvolver alguns programas para Apple II.</p>
<p>Porém, a <em>Microsoft</em> não possuía sistema operacional, então Bill Gates (William Gates III), sócio fundador da <em>Microsoft</em>, ligou para a maior empresa de Sistemas Operacionais da época, a <em>Digital Researchs</em>, de Gary Kildall, desenvolvedora do CP/M. Infelizmente, a companhia não deu a atenção devida aos representantes da IBM, não finalizando nenhum acordo com a <strong><em>Big Blue </em></strong>(apelido da IBM). Então, a IBM voltou à <em>Microsoft</em>. Desta vez, Bill Gates não perdeu a oportunidade. Steve Ballmer, um dos três fundadores da <em>Microsoft</em>, soube de uma empresa que criou um sistema operacional simples, mas muito funcional. A Seattle Computers havia criado um sistema chamado <em><strong>QDOS</strong></em>, ou <em>Quick and Dirty Operating System</em> (Rápido e Sujo Sistema Operacional), baseado na tecnologia x86, dos processadores da <em>Intel</em>. Estima-se que esse sistema operacional tenha sido comprado por 40 mil dólares, porém isso é incerto, esse sistema foi adaptado e apresentado a IBM pela alcunha de <em><strong>MS-DOS</strong></em> (<em>Microsoft Disk Operating System</em>).</p>
<p>Fechando o acordo com a IBM, a única exigência da <em>Microsoft</em> era que os direitos de revenda do DOS pudesse ser dela. A IBM não se preocupou com isso, afinal, na época, cada Sistema Operacional era único para um computador, por questão de arquitetura. Algo que fez a IBM se arrepender, em 1982, por causa de uma empresa chamada <strong><em>Compaq</em></strong> e de uma coisa chamada <strong>engenharia reversa</strong>.</p>
<p>A <em>Compaq</em> contratou vários engenheiros (que afirmaram nunca ter trabalhado na IBM) que pegaram o computador da <em>Big Blue </em>e, ao ver como ele funcionava, perceberam que era uma amálgama de peças de outros fabricantes. Dessa forma, eles desenvolveram um computador <em>Compaq PC</em>, conhecido como <strong>IBM-PC Compatível</strong>. Dessa forma, todos os programas que pegavam no IBM-PC já funcionariam no novo computador da <em>Compaq</em>, incluindo o <em>MS-DOS</em>. Essa ideia fez surgir uma série de computadores compatíveis com IBM-PC, e muito mais baratos, criando um mercado forte e altamente competitivo, o que resultou na queda das vendas do Apple II.</p>
<p><figure id="attachment_274" aria-describedby="caption-attachment-274" style="width: 717px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-274" src="http://velhobit.com.br/wp-content/uploads/2017/03/ms-dos-1.jpg" alt="" width="717" height="538" /><figcaption id="caption-attachment-274" class="wp-caption-text"><strong><em>MS-DOS</em></strong></figcaption></figure></p>
<h2>O início da Interface Gráfica</h2>
<p>Em 1979, todo mundo esperava alguma novidade da Apple. A IBM estava ainda longe de lançar o PC-IBM, e Apple praticamente tinha um monopólio no mercado de computadores pessoais com seu Apple II. Na época, a <em>Xerox</em> possuía um ambiente focado em pesquisas chamado de <strong>PARC</strong> (<em>Palo Alto Research Center</em>). Em troca de poder comprar ações, a <em>Xerox</em> abriu suas instalações de pesquisas para a Apple. Steve Jobs, CEO da Apple na época, e outros executivos e engenheiros, foram até o PARC e lhes foram apresentados algumas tecnologias interessantes, como a <em>Ethernet</em> e a Linguagem Orientada a Objetos. Porém, o que realmente impressionou os visitantes foi uma versão bem arcaica de uma interface gráfica, com um dispositivo chamado <strong><em>Mouse</em></strong>, que estava ligado a um computador. Isso foi importante para poder criar o primeiro sistema operacional funcional com interface gráfica, o <strong>Lisa OS</strong>, para o Apple Lisa.</p>
<p>Com o avanço da IBM no mercado de computadores pessoais e, posteriormente de clones, a Apple precisava lançar algo novo no mercado. O IBM era mais barato e completo do que o Apple II. O Lisa estava ficando muito caro e a diretoria da Apple resolveu que estava na hora de Jobs procurar outro projeto. Passeando pelas instalações da Apple, ele encontrou um projeto destinado a computadores de baixo custo, o <strong><em>Macintosh</em></strong>. Rapidamente, Jobs afastou Jef Raskin (então criador da ideia) e assumiu o projeto <em>Macintosh</em>, mudando rapidamente seu conceito, porém querendo manter a parte de interação humano-máquina.</p>
<p>O <em>Macintosh</em> foi criado para ter um sistema operacional revolucionário, com interface gráfica, chamado de <strong>MacOS</strong> (hoje conhecido como <em>MacOS Classic</em>). Durante a produção do MacOS, diversos desenvolvedores foram chamados para criar programas para ele. Uma das empresas chamadas foi a <em>Microsoft</em>, que uso o acesso antecipado ao MacOS para criar não um sistema operacional ainda, mas uma <strong>GUI</strong>, Interface Gráfica do Utilizador.</p>
<p>Quando foi criado, o <strong>Windows</strong> ainda não era um Sistema Operacional, mas sim uma interface gráfica para o MS-DOS. O Windows só veio se tornar realmente um sistema operacional, com núcleo próprio, com a vinda do <strong>Windows NT</strong>. Quem tem mais idade vai lembrar que quando você ligava o computador ele iniciava no MS-DOS, sendo necessário digitar <strong><em>win</em></strong>, para usar o Windows.</p>
<p>No começo, o Macintosh foi um fracasso, que só veio se recuperar anos mais tarde com o advento do <em>PostScript</em> pela Adobe, mas essa já é uma outra história.</p>
<p>O fato é que pelo <em>Macintosh</em> ser muito caro, os <strong>PC-IBM e compatíveis</strong> começaram a ganhar mais e mais mercado, e, com isso, a <em>Microsoft</em> começou a ter uma liderança absoluta de mercado.</p>
<p><figure id="attachment_275" aria-describedby="caption-attachment-275" style="width: 1100px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-275" src="http://velhobit.com.br/wp-content/uploads/2017/03/Apple_Lisa_1-1.jpg" alt="" width="1100" height="722" /><figcaption id="caption-attachment-275" class="wp-caption-text"><em><strong>Apple Lisa</strong></em></figcaption></figure></p>
<h2>Surge o Linux</h2>
<p>Em 1991, <strong>Linus Torvalds</strong> lançou a primeira versão de um núcleo de sistema operacional chamado de <strong>Linux</strong>. Diferente do que é divulgado por muitas pessoas, <strong>o Linux não é feito em cima do Unix</strong>. O Linux foi escrito do zero, <strong>inspirado</strong> pelo Minix (esse sim um sistema Unix). Torvalds dizia querer criar &#8220;um Minix melhor que o Minix&#8221;. Porém, este tinha o objetivo de ser simples, mas ainda sim, ser compatível com a grande maioria dos aplicativos para Unix.</p>
<p>Porém, a ideia de Linus Torvalds era divulgar e abrir o código para que diversas pessoas pudessem colaborar. Com ajuda de diversos outros programadores, a versão 0.02 do núcleo finalmente ficou pronta. Pouco depois, Linux Torvald colocou seu núcleo sobre a licença <strong>GNU</strong> (<em>GNU Is Not Unix</em> &#8211; é o que realmente quer dizer), que foi um sistema operacional, desenvolvido para ser compatível com o Unix, porém sem ter o código fonte do Unix.</p>
<p>O GNU era um projeto de sistema operacional sem núcleo e o Linux era um núcleo de sistema operacional sem bibliotecas e funções atreladas. Ao atribuir a licença GNU ao Linux, foi criado o <strong>GNU/Linux</strong>, sistema operacional base para diversas distribuições que surgiriam em seguida.</p>
<p>Em resumo, o <strong>Linux não é Unix</strong>, é um núcleo de sistema operacional, que, unido ao GNU, criou o GNU/Linux. Tanto o GNU quanto o Linux foi criado com o objetivo de ser mais simples que o Unix, porém com a compatibilidade para a maioria dos aplicativos Unix.</p>
<p><figure id="attachment_276" aria-describedby="caption-attachment-276" style="width: 640px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-276" src="http://velhobit.com.br/wp-content/uploads/2017/03/linus-eff-you-640x363-1.png" alt="" width="640" height="359" /><figcaption id="caption-attachment-276" class="wp-caption-text"><em><strong>Linus Torvalds</strong></em></figcaption></figure></p>
<p>Segundo a licença GNU, qualquer software que a utilize não pode ser fechado. Isto é, tudo deve ter o seu código aberto, disponível para editar o código e fazer o que quiser com ele. Porém Software livre não quer dizer software gratuito. É possível até vender o software, todavia o vendedor deve enviar o código fonte junto e não apenas o executável compilado.</p>
<p>Com o tempo e divulgação do GNU/Linux, diversas distribuições, baseados neste, foram sendo lançadas. Essas novas versões adicionavam sistemas de janelas, compatibilidade com outros sistemas de arquivos, bibliotecas para determinadas funções, pacotes exclusivos, etc. Essas distribuições eram criadas por terceiros, algumas por governos, outras por empresas que queriam algo mais personalizado para dar foco em uma determinada tarefa. Muitas dessas distribuições também foram criadas por grupos que tinham o interesse de criar sistemas cada vez melhores e mais completos.</p>
<p>As distribuições linux mais conhecidas hoje são:</p>
<ul>
<li>Mandriva</li>
<li>Ubuntu</li>
<li>CentOS</li>
<li>Solus</li>
<li>Arch Linux</li>
<li>Fedora</li>
<li>SUSE</li>
</ul>
<p>Cada uma com um objetivo e conceito diferente. É muito comum, também, uma distribuição Linux se basear em outra. Por exemplo, o Ubuntu é baseado no Debian e o CentOS no Redhat. É importante que o usuário saiba em qual a distribuição que ele usa se baseou, pois alguns comandos podem mudar de uma distribuição para outra.</p>
<h2>Sistemas Operacionais Desktop Contemporâneos</h2>
<p>Hoje, os principais sistemas operacionais que usamos em desktops, servidores e laptops são o Windows, o MacOSX e as distribuições GNU/Linux (como o Ubuntu, Solus, Debian, etc.). Todos esses sistemas possuem versões específicas para usuário comum e para servidores.</p>
<p>Hoje em dia, todos os sistemas operacionais seguem uma mesma lógica de funcionalidades. Quanto a sua camada direta ao usuário, são formados por um sistema de janelas e um terminal para poder ter um acesso direto as funcionalidades técnicas.</p>
<p><em>As particularidades de cada um desses três sistemas, assim como seus sistemas de arquivos e versões, falaremos na parte 2 deste conteúdo.</em></p>
<h2>Sistemas Operacionais para dispositivos móveis</h2>
<p>Na segunda metade dos anos 2000, com o avanço das plataformas móveis, diversos sistemas operacionais com particularidades diferentes, específicos para esses equipamentos, foram criados. Eles precisavam ser mais leves e continham uma lógica de interação completamente diferente.</p>
<p>Nessa época foi quando surgiu o Symbian e o BB, da Nokia e Blackberry, respectivamente. Esses sistemas foram responsáveis pela popularização dos <em>smartphones</em>, trazendo acesso a aplicativos de produtividade e segurança, modernos, a usuários mais leigos. Claro, desde os anos 90 haviam sistemas operacionais para computadores de mão (PDA), como o palmOS e o NewtonOS, mas nem de longe conseguiram a popularização dos <em>smartphones</em>.</p>
<p>Hoje, o Symbian se tornou um sistema utilizado em alguns televisores, principalmente, e a BlackBerry não produz mais aparelhos com o BB10 (sua última versão). Porém a Google está em alta com o <strong>Android</strong> e a Apple com seu <strong>iOS</strong>. A Microsoft, que outrora sempre foi presente no mercado de palmtops (os computadores de mão), com seu Windows CE, está em último lugar nos sistemas operacionais para <em>smartphones</em>.</p>
<p><em>Falaremos das particularidades dos principais sistemas operacionais para smartphones (Android, iOS e Windows), na parte 2 deste conteúdo.</em></p>
<h2>Outros Sistemas Operacionais</h2>
<p>Praticamente tudo que tem um microchip, e rode aplicativos, hoje opera através de um sistema operacional. Existem sistemas operacionais em automóveis, em televisores, videogames, em relógios e outros vestíveis, etc. Temos sistemas operacionais dedicados até mesmo em comandar uma casa.</p>
<p>Porém, em nosso estudo, vamos nos dedicar aos principais sistemas operacionais para microcomputadores e dispositivos móveis, pois a maioria dos sistemas para outros <em>gadgets</em> são criados a partir desses. Além disso, todo o sistema operacional moderno utiliza alguns elementos que são padrões, o que facilitará a compreensão.</p>
<h2>Concluindo</h2>
<p>Nesta primeira parte vimos um pouco da história dos sistemas operacionais e algumas de suas definições. Essa história é importante para que conheçamos posteriormente os componentes dos sistemas operacionais e as peculiaridades disponíveis no mercado.</p>
<p>&nbsp;</p>
<p><span style="color: #808080;"><em><strong>Este texto foi criado a partir das seguintes fontes:</strong></em></span></p>
<p><span style="color: #808080;"><em><strong>Documentário The Code &#8211; A história do Linux</strong></em></span><br />
<span style="color: #808080;"><em><strong>Documentários O Triufo dos Nerds, da ABC</strong></em></span><br />
<span style="color: #808080;"><em><strong>Livro O Fascinante Império de Steve Jobs</strong></em></span><br />
<span style="color: #808080;"><em><strong>Livro Computação Gráfica Teoria e Prática</strong></em></span><br />
<span style="color: #808080;"><em><strong>Site oficial do Projeto GNU</strong></em></span><br />
<span style="color: #808080;"><em><strong>Site oficial do Debian</strong></em></span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://velhobit.com.br/editorial/sistemas-operacionais-parte-1-historia.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como instalar nativamente o Bash do GNU/Linux no Windows?</title>
		<link>https://velhobit.com.br/tutoriais/como-rodar-bash-ubuntu-windows-10.html</link>
					<comments>https://velhobit.com.br/tutoriais/como-rodar-bash-ubuntu-windows-10.html#comments</comments>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Fri, 17 Mar 2017 14:35:17 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[atualizações]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[canonical]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[prompt]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[sistema operacional]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 10]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=205</guid>

					<description><![CDATA[Desde a última atualização (2016) o Windows adicionou a função de rodar o bash do Ubuntu nativamente. Veja como fazer isso.]]></description>
										<content:encoded><![CDATA[<p>Uma das melhores características do GNU/Linux é seu terminal. Ele permite de forma simples e rápida executar e configurar ações e servidores que agilizam e permitem o uso e desenvolvimento de aplicações web e serviços. Apesar de possuir o PowerShell, o programador pode querer usar soluções Linux em seus testes e ambiente de desenvolvimento.</p>
<p>Pensando nisso, a Microsoft implementou uma forma de trazer o bash de algumas distribuições como subsistemas para o Windows. Basicamente isso significa que você pode ter uma distribuição GNU/Linux instalada em seu sistema operacional de forma integrada. Ou seja, funcionando como um sistema nativo e não em uma máquina virtual, economizando assim recursos da máquina e mantendo um acesso mais rápido.</p>
<p><span style="color: #008080;"><strong>ATUALIZADO</strong></span></p>
<p>Nas versões atuais do Windows 10, a instalação do bash GNU/Linux é muito mais simplificada.</p>
<p>Basta primeiro você ir em iniciar e buscar por <strong>Ativar ou Desativar Recursos do Windows</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1334" src="https://velhobit.com.br/wp-content/uploads/2017/03/adicionar-ou-remover.jpg" alt="Iniciar - Ativar ou Desativar Recursos do Windows" width="681" height="681" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/adicionar-ou-remover.jpg 681w, https://velhobit.com.br/wp-content/uploads/2017/03/adicionar-ou-remover-400x400.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/adicionar-ou-remover-600x600.jpg 600w, https://velhobit.com.br/wp-content/uploads/2017/03/adicionar-ou-remover-110x110.jpg 110w" sizes="auto, (max-width: 681px) 100vw, 681px" /></p>
<p>Ao abrir, procure e marque a opção <strong>Subsistema do Windows para Linux</strong>. Você vai precisar reiniciar o computador logo em seguida.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1335" src="https://velhobit.com.br/wp-content/uploads/2017/03/subsistema-linux.jpg" alt="Subsistema do Windows para Linux" width="764" height="739" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/subsistema-linux.jpg 764w, https://velhobit.com.br/wp-content/uploads/2017/03/subsistema-linux-400x387.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/subsistema-linux-600x580.jpg 600w" sizes="auto, (max-width: 764px) 100vw, 764px" /></p>
<p>Após reiniciado, abra a Windows Store e na busca digite Linux. Você encontrará várias opções de subsistemas que você pode instalar em seu computador. Selecione o que você quiser e instale.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1336" src="https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store.jpg" alt="Windows Store - Aplicativos de Subsistemas para Linux" width="1207" height="752" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store.jpg 1207w, https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store-400x249.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store-768x478.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store-1024x638.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/03/linux-windows-store-600x374.jpg 600w" sizes="auto, (max-width: 1207px) 100vw, 1207px" /></p>
<p><span style="color: #ff6600;">Dica: Caso você procure por uma versão específica, na busca da Windows Store digite o nome da distribuição de seu interesse.</span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1337" src="https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-store.jpg" alt="" width="916" height="576" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-store.jpg 916w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-store-400x252.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-store-768x483.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-store-600x377.jpg 600w" sizes="auto, (max-width: 916px) 100vw, 916px" /></p>
<p>Após instalar da loja, você vai notar que há um novo aplicativo no seu menu iniciar, referente a distribuição que você instalou. Ou você pode iniciar seu prompt de comando e digitar bash.</p>
<p>Assim que você abrir o aplicativo, ele irá avisar que vai baixar o sistema operacional escolhido. Em seguida, você deve definir o login e senha de administrador.</p>
<p>E, pronto! Você já pode usar o susbsistema GNU/Linux em seu Windows.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1338" src="https://velhobit.com.br/wp-content/uploads/2017/03/windows-linux.jpg" alt="" width="919" height="526" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/windows-linux.jpg 919w, https://velhobit.com.br/wp-content/uploads/2017/03/windows-linux-400x229.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/windows-linux-768x440.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/03/windows-linux-600x343.jpg 600w" sizes="auto, (max-width: 919px) 100vw, 919px" /></p>
<p><span style="color: #ff6600;">Dica: caso você entre pelo BASH e queira entrar dentro do drive C:/ do Windows, digite &#8220;cd /mnt/c&#8221; (sem aspas) e você será encaminhado para o drive C:/.</span></p>
<div class="blurred_">
<p>A partir de Outubro de 2017, <em><strong>se você atualizar para a versão Falls Creators Update</strong></em>,  não é mais necessário ativar o modo de desenvolvedor para usar o Ubuntu no Windows. Agora, caso você esteja com o Windows atualizado, basta abrir a loja da Microsoft e adquirir gratuitamente o Bash do Ubuntu. <a href="https://www.microsoft.com/store/apps/9nblggh4msv6">Clique aqui para poder acessar a loja diretamente</a> ou clique na imagem.<span style="color: #ff6600;"><em><strong>Caso você não tenha essa atualização, continue o tutorial abaixo.</strong></em></span></p>
<p>Após instalado, sempre que quiser usar o terminal do Linux, simplesmente vá no menu iniciar e digite &#8220;bash&#8221;, dessa forma, ele já abrirá no terminal nativo. Particularmente, eu prefiro abrir o prompt de comando e digitar &#8220;bash&#8221; (sem aspas) e ele iniciará o Ubuntu já dentro da pasta atual do Windows (no caso, Usersnome_usuario. O Ubuntu fica ligado nativamnete no Windows, não se trata de uma máquina virtual, então todos os recursos são compartilhados e o acesso é direto.</p>
<p><strong>Dica: caso você entre pelo BASH e queira entrar dentro do drive C:/ do Windows, digite &#8220;cd /mnt/c&#8221; (sem aspas) e você será encaminhado para o drive C:/.</strong></p>
<p><a href="https://www.microsoft.com/store/apps/9nblggh4msv6"><img loading="lazy" decoding="async" class="alignnone wp-image-641 size-full" src="https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10.jpg" alt="Loja da Microsoft com o Bash do Ubuntu" width="1302" height="857" srcset="https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10.jpg 1302w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10-400x263.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10-768x506.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10-1024x674.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/03/ubuntu-windows-10-600x395.jpg 600w" sizes="auto, (max-width: 1302px) 100vw, 1302px" /></a></p>
<h2>Usuários da versão Estável do Windows</h2>
<p>Desde sua última atualização, em 2016, o Ubuntu pode ser instalado nativamente dentro do Windows 10 e trabalhado através de seu bash. Para que isso acontecesse, a Canonical e a Microsoft fizeram um acordo que gerou até certas piadinhas, sobre o quanto ele é aprofundado. O fato é que utilizar o bash do Ubuntu dentro do Windows ajuda muito desenvolvedores a realizarem certas atividades que antes necessitavam de programas de terceiros, como acesso SSH, SCP, funções como wget e apt-get, dentre outras. Este tutorial tem por objetivo ajudar aqueles que desejam usar o Linux profissionalmente, dentro do Windows, ou apenas experimentar o sistema do pinguim.</p>
<p>A primeira coisa que deve ser feita é colocar o Windows em modo desenvolvedor. Não se preocupe se você usa o Windows 10 Home, que ele também possui essa opção. Abra as Configurações do Sistema ou simplesmente digite &#8220;desenvolvedor&#8221;, na barra de buscas. Será necessário reiniciar o computador, após colocá-lo em Modo de Desenvolvedor.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/03/selecione-modo-desenvolvedor.jpg" alt="Modo de desenvolvedor" /></p>
<p>Uma vez com o modo de desenvolvedor aberto, vá até o menu iniciar e digite &#8220;Ativar ou Desativar Recursos do Windows&#8221;. Você também poderá acessar essa tela a partir do Painel de Controles convencional (aquele que existe desde o Windows 98) e ir em Adicionar ou Remover Programas. A opção de recursos do Windows, será a primeira.</p>
<p>Procure pelo recurso: &#8220;Subsistema do Windows para Linux (Beta)&#8221;, marque, dê OK e aguarde ele fazer o download, algumas atualizações ativar o recurso.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/03/subsistema-windows-linux.jpg" alt="Ativando Subsistema do Winodws para Linux" /></p>
<p>Agora basta você abrir o prompt de comando do Windows 10. Assim que o prompt abrir digite: &#8220;bash&#8221; (sem aspas), e ele iniciará o Download do Ubuntu (até então o 14, mas podem ter atualizado). É possível que ele peça para você confirmar algumas coisas (com sim ou yes), confirme tudo o que for necessário. O download poderá demorar um pouco, pois se trata de uma instalação completa do sistema, então tenha paciência ou uma boa conexão de internet.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/03/prompt-comando-bash.jpg" alt="Digitando bash no Terminal" /></p>
<p>&nbsp;</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/03/bash-ubuntu-windows10.jpg" alt="Rodando o Bash do Ubuntu no Windows 10" /></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://velhobit.com.br/tutoriais/como-rodar-bash-ubuntu-windows-10.html/feed</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>O Ladrão de Templates Grátis</title>
		<link>https://velhobit.com.br/design/o-ladrao-de-templates-gratis.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Fri, 20 Jan 2017 22:50:14 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[cópia]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[criação]]></category>
		<category><![CDATA[direitos autorais]]></category>
		<category><![CDATA[pirataria]]></category>
		<category><![CDATA[projeto gráfico]]></category>
		<category><![CDATA[roubo]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[terceirização]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=146</guid>

					<description><![CDATA[Muitos supostos designers pegam ou compram templates prontos na internet e revendem. Essa prática é ilegal e pode dar problemas para a empresa e o cliente.]]></description>
										<content:encoded><![CDATA[<p>Outro dia andei discutindo com um rapaz pelo Twitter porque ele usa templates free, ou &#8220;piratas&#8221;, instala em um WordPress e assina como se ele fosse o designer (ou desenvolvedor) responsável. Isso se repete em todos os sites que ele fez, inclusive no seu próprio. Não fez nem questão de mudar uma cor ou uma forma. O problema é que essas pessoas revendem os sites para clientes. Alguns até compram, mas também somente para revender. A discussão começou por conta de uma notícia antiga, sobre o bispo que disse que, para manter seu blog, gasta mais de 107 mil reais por mês e ainda pediu ajuda dos seus seguidores para manter.</p>
<p>Você sabe quanto custa ser um designer? E quanto custa ser um programador? E pior! Sabe quantas pessoas fizeram faculdade (ou até autodidatas), estudaram muito, fizeram bons cursos e/ou leram bons livros? Pois é&#8230; mas para alguns, isso não tem valor.</p>
<p>Porém, esse rapaz não foi o primeiro a fazer esse tipo de trambicagem. Empresas estão se fortalecendo baseado nessa ideia absurda. Isso está acontecendo muito com gráficas rápidas, que resolvem vender sites para aumentar sua renda. O problema é que elas geralmente não fazem os sites, mas pegam templates grátis e trocam o &#8220;desenvolvido por&#8221;. E nem tomam o cuidado de disfarçar e no código, podemos até ver o nome dos templates.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/euclides-macedo-nomad-template-wordpress-copia-template-roubo-layout-design.jpg" alt="Euclides Site" /></p>
<p>Na imagem abaixo, vocês podem ver um detalhe de uma das conversas que eu tive com uma ex-aluna de mídias sociais que trabalhava em uma empresa que fazia esse tipo de &#8220;trabalho&#8221; (ocultei o nome e a foto porque ela não necessariamente é a responsável, mas uma funcionária).</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/conversa-android-sobre-templates-roubados.jpg" alt="Conversa sobre Templates" /></p>
<p>Depois dessa conversa ela me bloqueou. Ela e seus colegas de trabalho. Porém, eu fui na página do Facebook deles e deixei uma mensagem &#8220;bonita&#8221;. Claro, que eles apagaram, aí eu deixava de novo. Mas na terceira vez fiz melhor. Resolvi colocar no Twitter dos clientes deles um link para o site original de onde eles pegavam os templates. Infelizmente, é comum que essas mesmas empresas que prestam esse serviço são quem tomam conta das mídias.</p>
<p>O Site de um rapaz, chamado Nilton Câmara (que foi a vítima), foi um dos maiores exemplos de cara de pau de uma prestadora de serviço da área de tecnologia. Realmente não mudaram nada, nem uma cor ou um símbolo, e ainda colocaram no canto: Website Design by Conhecimento Digital. Copyright 2012.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/site-nilton-camara-feito-com-template-wallbase.jpg" alt="Nilton Camara Site" /></p>
<h2>Afinal, qual o problema disso?</h2>
<p>Primeiro lugar, vamos a questão ética. Você gostaria de comprar um iPhone 6 da Samsung? Eu sei que a pergunta parece absurda, mas é isso o que acontece. Simplesmente, ao invés de fazer um produto novo, está sendo terceirizado um serviço oferecido. Se você soubesse que poderia ter algo totalmente genérico a um preço muito mais baixo, ou até de graça, você pagaria por essa mão de obra inútil?</p>
<p>Ainda na questão ética, assinar um projeto de outra pessoa é certo? Imagina se eu assinasse um site feito por outra pessoa, um quadro feito por outro artista. Isso não seria correto e traria grandes problemas para o comprador, que acha que está adquirindo um produto original, quando na verdade, é genérico.</p>
<p>Segundo, os problemas legais. Terceirizar serviço (quarteirizar) oferecido é ilegal! Eu mesmo já processei uma empresa por isso, e ganhei, sem discussão. Não se pode oferecer um serviço e pagar outra empresa para fazer. Tanto que, no meu caso, resolveram mudar o nome e o tipo de serviço para consultoria. Além disso, isso fere os direitos de propriedade intelectual, que é irrevogável! Isso mesmo, não pode ser repassado para ninguém. A propriedade intelectual garante a autoria de projeto, o que é diferente dos direitos comerciais. O autor pode abrir mãos de seus direitos comerciais, mas não pode se abdicar do intelectual. Roubar a autoria do projeto de outro também é ilegal.</p>
<h2>O que isso traz de ruim para o cliente e para a prestadora de serviços?</h2>
<p>A contratante pode se sentir lesada, pois comprou, muitas vezes, um projeto original. Além disso, o leiaute de uma empresa, instituição ou órgão, deve seguir uma identidade corporativa que é definida em todos os projetos gráficos. O SEO desses templates geralmente não são dos melhores e a semelhança desse site com outros templates genéricos também não são bem trabalhados e podem dificultar o encontro do site pelo Google.</p>
<p>A prestadora de serviço, além do fato da ilegalidade, também está perdendo experiência e estabilidade no mercado. Tornar-se-á pouco confiável.</p>
<p>Mas como deve ser feito então?</p>
<p>Existem 3 formas corretas de trabalhar corretamente com isso:</p>
<ol>
<li>Criar um Layout e Template Original;</li>
<li>Modificar um Template Free existente, dando devida referência ao template original e deixando claro ao cliente que é uma alteração;</li>
<li>Usar um template free ou pago, mas dar a devida referência ao autor e não ter nenhum lucro direto com isso.</li>
</ol>
<p>O site da PortilloDesign usa um CMS próprio, criado por nós, que prentendemos abrir o código futuramente. Porém, também trabalhamos com outros CMSs em alguns clientes, onde todos os sites são montados primeiro no Photoshop e depois implementado no código referente ao CMS escolhido. Cada template é único e pensado para a necessidade e estética de cada cliente. Os layouts não aprovados são jogados na lixeira para que não sejam reaproveitados.</p>
<p>O blog The Pink Geeks usou um template modificado e as garotas colocaram no rodapé a assinatura junto com os criadores do template original, por exemplo. O Mesmo acontece com o site do E-Farsas, onde ele coloca: &#8220;Tema modificado do FabThemes.com&#8221;</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/pink-geek-screenshot.jpg" alt="Exemplo Geek Pink" /></p>
<p>Não tem problema nenhum em usar um template free, só deixe no rodapé o autor original e não cobre por algo autêntico, somente pela modificação que fizer. Não mude a autoria do trabalho, isso não vai desmerecer de forma algum o seu conteúdo. Todas as pessoas confiáveis precisam ser transparentes.</p>
<h2>Concluindo</h2>
<p>Não existe um real monitoramento, registro, fiscalização ou cadastro de empresas e profissionais de TI. Da mesma forma, não existe uma fiscalização sobre o que eles fazem. Existem muitas leis sendo criadas para defender pessoas que aparecem peladas na internet, ou um ou outro xingamento preconceituoso. Mas a parte de negócios continua sendo terra de ninguém. Pessoas disfarçadas de profissionais continuam tripudiando empresários e blogueiros que querem melhorar o seu trabalho.</p>
<p>Vale lembrar de que de forma alguma você pode pegar um template pronto e simplesmente revender, ou modificar e revender, se você foi contratado para fazer o site. Se a ideia é modificar algo pronto, então deixe isso claro e revelado como o serviço. Lembre-se que terceirização de serviço oferecido é ilegal e anti-ético.</p>
<p>Existe até uma ferramenta especializada em verificar se o site usa um template comum ou não, para WordPress:<br />
<a title="WP THEME DETECTOR" href="http://www.wpthemedetector.com/" target="_blank">http://www.wpthemedetector.com</a></p>
<p>Mas o que vocês acham disso? Tem uma opinião diferente sobre a ética nesse caso? Deixe sua opinião.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Design Contest ou A Fraude do Bom Trabalho</title>
		<link>https://velhobit.com.br/design/design-contest-ou-a-fraude-do-bom-trabalho.html</link>
					<comments>https://velhobit.com.br/design/design-contest-ou-a-fraude-do-bom-trabalho.html#comments</comments>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Fri, 20 Jan 2017 22:23:28 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[171]]></category>
		<category><![CDATA[barato]]></category>
		<category><![CDATA[caro]]></category>
		<category><![CDATA[competição]]></category>
		<category><![CDATA[contest]]></category>
		<category><![CDATA[design gráfico]]></category>
		<category><![CDATA[empresários]]></category>
		<category><![CDATA[esperteza]]></category>
		<category><![CDATA[ética]]></category>
		<category><![CDATA[falcatrua]]></category>
		<category><![CDATA[logomarca]]></category>
		<category><![CDATA[oportunidade]]></category>
		<category><![CDATA[preços]]></category>
		<category><![CDATA[profissionais]]></category>
		<category><![CDATA[sobrinho]]></category>
		<category><![CDATA[valores]]></category>
		<category><![CDATA[web design]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=99</guid>

					<description><![CDATA[O Designer Gráfico não deve, sozinho ou em concorrência, participar de projetos especulativos pelo qual só receberá o pagamento se o projeto vier a ser aprovado.]]></description>
										<content:encoded><![CDATA[<p>Esse tipo de site é uma forma anti-ética de se ganhar dinheiro em cima do trabalho alheio e de qualidade duvidosa. Muito de vocês já devem ter escutado falar sobre sites especializados em Design Contests (FastMarcas, 99 Design, Design Contest, WeDoLogos, Click to Layout e outras porcarias). Nada mais são do que vários concursos em que o cliente escolhe o artefato que vai levar para casa. Todos eles parecem bastante interessantes com promessas de bons pagamentos para o <a title="O que é designer?" href="https://velhobit.com.br/design/quanto-custa-ser-designer.html" target="_blank" rel="noopener">designer</a> e de qualidade e escolha para o cliente. Mas, na realidade, esse tipo de site é somente uma forma anti-ética de se ganhar dinheiro em cima do trabalho alheio e de qualidade duvidosa, veja porquê.</p>
<h2>Como Funciona um Site de Design Contest?</h2>
<p>O Cliente faz um cadastro, lança um &#8220;briefing&#8221;. Diz que quer pagar, digamos, 200 reais. Então a empresa lança o concurso e manda por e-mail para algumas centenas de designers cadastrados. Esses designers lerão o que o cliente pediu e fará uma &#8220;logomarca&#8221;. O cliente então escolhe a que ele preferir e paga direitinho o designer vencedor&#8230; lindo, né? O Designer ganhou, a empresa ganha. Todos ficam com dinheiro garantido.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/oportunidade-design-contest.png" alt="Oportunidade de Design" /></p>
<h2>Como funciona DE VERDADE um Site de Design Contest?</h2>
<p>Um empresário desinformado (ou se achando o espertão), que não compreende o valor do trabalho de um design procura uma empresa qualquer para fazer o trabalho quase de graça. Então ele encontra um site como o We do Logos ou Click to Layout. Daí ele vê que tem a oportunidade incrível de ter centenas de designers à disposição por qualquer mixaria que ele oferecer. Então ele pensa: &#8220;Para quê eu irei gastar 8 mil com um designer? Se com 200 reais eu terei vários?&#8221;. Então o empresário, contrata a empresa de Concorrência.</p>
<p>O dono do site de Concorrência, como é muito esperto, cobra, digamos, mais 50 ou 100 reais. E daí, quase sem custos (somente hospedagem e o desenvolvimento inicial do site e alguma coisa para manter as linhas de comunicação) ele manda o e-mail para micreiros, “sobrinhos” que se acham designers super hiper mestres Jedis, desesperados e alguns estudantes de alguma <a title="O que é Design?" href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank" rel="noopener">área de design </a>que ainda não aprenderam ética ou não perceberam o quão danoso é esse tipo de padrão de negócios.</p>
<p>Em seguida, esses “profissionais” passam horas de seus dias, já que possuem tempo disponível, fazendo umas &#8220;logos bonitinhas&#8221; no CorelDRAW ou Illustrator, a partir de pedaços de identidades visuais que eles encontram no Google Images. Estes então mandam duas, talvez três, variações dessa &#8220;logo bonitinha&#8221; e cruzam os dedos na esperança de ganhar um trocadinho para comprar uma bermuda na C&amp;A.</p>
<p>Então o empresário que contratou a empresa vai ver as &#8220;logos bonitinhas&#8221;. O cara não tem a menor noção de design e não entende nada de propaganda ou da importância da forma como a empresa dele será vista pelo público. Somente quer uma &#8220;logomarca bonitinha&#8221;. Daí ele vê aquela que ele mais simpatiza e pensa: &#8220;Sou muito comelão, escolhi a melhor e ainda paguei pouco&#8221;.</p>
<p>No final, vários micreirinhos, sobrinhos e estudantes vão ficar chorando triste no canto da sala e ter extremas crises de depressão, talvez usando as marcas em algum portfólio feito no WIX, enquanto o ganhador, se achando agora &#8220;o designer&#8221; irá comprar sua bermuda. O dono da empresa de Design Contests estará rindo a toa, pois não teve trabalho nenhum e ainda arrumou coisa para colocar no seu portfólio e aparecer em programas duvidosos como o Pequenas Empresas Grandes Negócios que premia as empresas por quanto elas ganharam e não por seus valores e qualidades. Claro, com o auxílio de alguns consultores do Sebrae (não todos, mas boa parte), que incentivam os péssimos negócios para a área de Design Digital e Tecnologia.</p>
<p><img decoding="async" src="https://velhobit.com.br/wp-content/uploads/2017/01/logos-stock.jpg" alt="Logos Stock" /></p>
<h2>Qual o Resultado de Tudo Isso?</h2>
<p>O Cliente, que não tem obrigação de entender <a title="O que é Design?" href="https://velhobit.com.br/design/o-que-e-design.html" target="_blank" rel="noopener">o que é design</a>, escolhe a &#8220;logomarca&#8221; (sim, eu sei que é um termo incorreto) de acordo com seus gostos pessoais.</p>
<p>Ou seja, não foi uma decisão feita por ser o melhor estudo de público, nem funcionalidade, nem por método heurístico, nem nada. Simplesmente foi escolhido no gosto e no achismo. Que resultado podemos esperar para essa empresa pelos olhos de seu público?</p>
<p>Além disso, dezenas de pessoas que participaram dessa concorrência não receberão nada, mesmo se talvez tenha apresentado um projeto melhor. Ou seja, irão perder seu tempo em vão. Tempo que poderiam fazer coisas mais importantes, como estudar filosofia do design, cores, Bauhaus, psicologia, geometria, etc.</p>
<p>Esse tipo de processo também causa uma desvalorização da área de design. O cliente comum irá acreditar que o preço para uma identidade visual, organizada e funcional será o mesmo que o de uma Concorrência. Isso criará um grande problema para argumentar sobre os valores que o designer de verdade está cobrando. As pessoas concluirão que design nem dá trabalho.</p>
<p>Para a empresa de Design Contest, será ganhar dinheiro sem ter que fazer nada e ainda levar todo o crédito. Uma ideia inteligente, do ponto de vista monetário, mas extremamente anti-ética.</p>
<h2>Concorrência x Concurso</h2>
<p>Todavia, é necessário deixar claro a diferença de concorrência para concurso.</p>
<p>Enquanto a concorrência trata-se de um trabalho comercial sob promessa de pagamento especulativo, o concurso se trata de uma atividade lúdica, premiada ou não, sem que a finalidade do artefato gráfico seja o uso comercial da mesma.</p>
<p>Ou seja, a concorrência é “Me apresente algo para que eu use na minha empresa, se eu gostar.”, enquanto o concurso é “Vamos nos reunir e premiar o trabalho melhor para estimular o estudo da comunidade”.</p>
<p>Por exemplo, em um concurso vários profissionais vão apresentar ideias, sobre um determinado tema, e discutir entre si. O projeto resultante é do profissional, assim como a decisão de seu uso. O prêmio vai ser entregue a alguém e o objetivo é lúdico, é diverti-se e dividir experiências.</p>
<h2>Concluindo</h2>
<p>Se você é designer de verdade, pule fora dessa. Nem relógio trabalha mais de graça, que tem que trocar pilha, ou parar para ficar dando corda.</p>
<p>Se você é empreendedor, não caia em conversas de certos consultores de procurar coisas extremamente baratas ou de sites idiotas que fazem concursos. Se você PRECISA de um designer, então a decisão do que é melhor NÃO É SUA. Você pode e DEVE opinar, MAS NÃO DECIDIR. Você não contrata um profissional para dizer como deve ser feito o seu trabalho. No caso de design, diga o que espera do resultado e como quer que o seu público reaja. Mas as decisões de como isso será feito é do designer, afinal, é esse o trabalho dele.</p>
<p>Ou seja, no final de tudo, o empresário vai acreditar que foi feito um bom trabalho, mas o mais provável é que seja horrível, pois a escolha de um profissional de publicidade e comunicação não é feita a partir de seu gosto individual, mas sim do que o público se agrada e precisa.</p>
<p>Por último, se você é proprietário de um site de Design Contest&#8230; #FUCKOFF!</p>
<p>Para atualização, segue o Artigo 12 do código de ética da ADG (Associação dos Designers Gráficos)</p>
<p>Artigo 12º &#8211; O Designer Gráfico não deve, sozinho ou em concorrência, participar de projetos<br />
especulativos pelo qual só receberá o pagamento se o projeto vier a ser aprovado.</p>
<ol>
<li> O Designer Gráfico pode participar de concursos, abertos ou fechados, cujas condições sejam aprovadas pela entidade de classe;</li>
<li>Uma taxa administrativa justa pode ser adicionada, com o conhecimento e compreensão do cliente, como porcentagem de todos os itens reembolsáveis pelo cliente que tenham passado pela contabilidade do Designer Gráfico;</li>
<li>O Designer Gráfico que é chamado para opinar sobre uma seleção de designers ou outros consultores não deverá aceitar nenhuma forma de pagamento por parte do designer ou consultor recomendado.</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://velhobit.com.br/design/design-contest-ou-a-fraude-do-bom-trabalho.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Quanto Custa Ser Programador?</title>
		<link>https://velhobit.com.br/programacao/quanto-custa-ser-programador.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Thu, 19 Jan 2017 21:31:00 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[conhecimentos]]></category>
		<category><![CDATA[cursos]]></category>
		<category><![CDATA[custo]]></category>
		<category><![CDATA[estudos]]></category>
		<category><![CDATA[preço]]></category>
		<category><![CDATA[profissão]]></category>
		<category><![CDATA[programador]]></category>
		<category><![CDATA[salário]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=39</guid>

					<description><![CDATA[Programador de verdade está sempre trabalhando, sempre estudando, sempre se esforçando. E isso tem seu custo. Ser programador também é uma profissão cara.]]></description>
										<content:encoded><![CDATA[<p><em><strong>Obs. Este artigo foi originalmente escrito no começo de 2014. Foi atualizado recentemente para a realidade de 2017.</strong></em></p>
<p>Programador é o profissional responsável por resolver, replicar ou adequar soluções de software a fim de que um computador ou equipamento eletrônico com micro-controladores, execute uma tarefa.</p>
<p>O principal custo do programador é, sem dúvida, em educação. Porém, ainda sim, é bem variável, pois baseia-se nas tecnologias que este deseja se especializar.</p>
<p>O lado positivo é que muitas ferramentas para programadores são gratuitas, como o Brackets, Notepad++, assim como muitas linguagens, como o PHP, Java, C e outras.</p>
<h2>Educação</h2>
<p>Desenvolvedores precisam investir muito, muito mesmo, em livros e livros de tecnologia não são nada baratos. Dificilmente é possível encontrar um livro intermediário por menos de <del>200 reais</del> 250 reais.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-41" src="https://velhobit.com.br/wp-content/uploads/2017/01/livros-programacao.jpg" alt="Livros de Programação em Livraria" width="900" height="506" srcset="https://velhobit.com.br/wp-content/uploads/2017/01/livros-programacao.jpg 900w, https://velhobit.com.br/wp-content/uploads/2017/01/livros-programacao-400x225.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/01/livros-programacao-768x432.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/01/livros-programacao-600x337.jpg 600w" sizes="auto, (max-width: 900px) 100vw, 900px" /></p>
<p>Faculdades são um problema à parte. Apesar de várias faculdades de tecnologia aparecerem no país, a maioria focada em desenvolvimento não estão preparadas para preparar um aluno ao mercado de trabalho. Na própria faculdade, muitas vezes, possuem definições distorcidas de lógica e metodologias que não se adequam àqueles que já possuem intimidade com o computador, além de simplesmente ignorar assuntos como história e sociedade. Isso obriga a, mesmo os formados, procurarem especializações mais específicas para suas áreas, o que não é um negócio muito barato. Como é muito comum professores darem preferência a uma linguagem específica ao invés da lógica como um todo, muitos alunos, para conhecerem outras tecnologias, alternativas e métodos, precisam investir em cursos de especialização.</p>
<p>Boas faculdades particulares de tecnologia tem seu custo médio variável entre <del>300 a 1500 reais</del> 750 a 2000 reais por mês. Sendo que cursos de especialização ou específicos, tem seu custo em média de 900 a 3 mil reais por curso, podendo ter alguns mais baratos se vinculados a cursos de extensão de faculdades (principalmente as públicas). Algumas palestras e workshops, com pessoas importantes na área, podem também chegar ao valor equivalente a um curso.</p>
<h2>Certificação</h2>
<p>A certificação é uma prova, muitas vezes mais importante do que um diploma, de que o desenvolvedor tem domínio em uma determinada área ou ferramenta. Geralmente atrelado a uma tecnologia/linguagem específica, a certificação é bem aceita no mercado de trabalho e envolve testes realmente difíceis para passar. As certificações podem variar de <del>800 a 30 mil reais</del> 1500 a 40 mil reais, dependendo da área escolhida e se esta virá ou não acompanhada de um curso. Geralmente, quando se falha na prova, é necessário pagar novamente para uma segunda tentativa.</p>
<h2>Máquina</h2>
<p>A potência da máquina do programador varia da linguagem em que ele desenvolve e o objetivo de sua aplicação. Se ele optar por se especializar em PHP ou ASP, certamente ele não precisará de um computador que seja tão rápido. Entretanto, se ele trabalhar com Java, por exemplo, ele precisará ter um computador com pelo menos <del>4GB</del> 8GB de RAM (pois é&#8230; Java tá pesado). Já aqueles que trabalham com desenvolvimento de jogos ou de aplicativos pesados que exijam opções gráficas, simulação ou alta precisão, precisarão de um computador realmente caro, na faixa dos <del>8 a 15 mil reais</del> 10 a 21 mil, que possui uma configuração mais robusta. Se ele trabalhar com servidores, além de ter que ter mais de um, ele gastará uma quantia considerável para estudos e testes destes.</p>
<h2>Comunicação</h2>
<p>Grande parte de soluções e pesquisas podem ser encontradas na internet. O que exige que o programador tenha uma conexão realmente rápida. Hoje em dia, um profissional de TI precisa de uma conexão de pelo menos 20Mbps, o que gera um custo bem maior em comparação a quem tem uma internet comum em casa, e isso pode variar de região do país. Os que trabalham com gerenciamento de servidores a distância gastam muito mais, pois precisam de uma conexão ainda mais rápida para configurar e operar os mesmos sem perda de tempo ou informação. Ligações constantes para dar assistência a programadores e operadores também é comum, o que faz ter um alto custo com telefonia celular e fixa.</p>
<p>É difícil prever os custos exatos para comunicação. Os preços mudam muito de uma região do país para outras. Até mesmo de bairro para bairro o preço e velocidade máxima de conexão é absurdamente diferente.</p>
<h2>Eventos</h2>
<p>Como todo o profissional, o programador precisa estar atualizado com as últimas novidades de sua área. Precisa participar de eventos e promover encontros com outros desenvolvedores para criar melhores ações e estratégias para resolver seus problemas.</p>
<p>Porém eventos custam dinheiro principalmente para quem não mora no eixo sul do país, onde estão concentrados a maioria dos encontros. O problema é que, muitas vezes, não são as empresas que enviam os funcionários. Os programadores precisam pedir licença e custear do próprio bolso.</p>
<p>Na melhor das hipóteses, o custo para uma viagem não é menor que 2 mil reais (caso você seja alguém bem econômico e não se importe em dormir em albergues ou <em>Airbnb</em>), se for para uma cidade próxima. Caso seja internacional, prepare-se para um custo na faixa dos 12 mil reais.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-42" src="https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013.jpg" alt="Imagem de datashow falando sobre programação, da Adobe" width="1586" height="839" srcset="https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013.jpg 1586w, https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013-400x212.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013-768x406.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013-1024x542.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/01/jornada-adobe-2013-600x317.jpg 600w" sizes="auto, (max-width: 1586px) 100vw, 1586px" /></p>
<h2>E quanto ganha um programador?</h2>
<p>Isso varia muito, de acordo com a região do país e de empresa para empresa. A média é que um desenvolvedor ganhe entre 3 mil e 30 mil reais, dependendo de sua função, para mais. Estudantes e programadores Jr, ganham em média de 1500 a 2500 reais <em>(isso não mudou muito de 2013 pra cá)</em>.</p>
<p>O problema é que as empresas não estão dispostas a pagar corretamente por seus programadores ou ainda dão condições de trabalho que não correspondem com a área, como computadores ruins ou obrigatoriedade de uniformes e falta de flexibilidade no horário.</p>
<p>Por outro lado, alguns profissionais trabalham como autônomos dando consultorias para empresas. Entretanto, esses profissionais precisam ter uma certa “fama” em seu seguimento. Alguns cobram até 60 mil reais por consultoria de 15 dias. Mas isso não quer dizer que são bons. Muitos programadores famosos são péssimos profissionais, mas vivem de sua fama, cobrando valores absurdos e apresentando soluções não eficientes (ou nenhuma) e mal se entrosam no projeto. Porém essa é uma questão mais ética.</p>
<h2>Concluindo</h2>
<p>O Programador, ao contrário do que possa parecer, não é um profissional de glória. Diferente do que fez parecer, a partir dos anos 90, raramente pessoas de talento e estudo conseguem receber um valor justo por seu trabalho. Geralmente, os “mestres de cerimônia”, que só tem fama e fazem parecer trabalhar, acabam sendo mais valorizados por causa de seu carisma.</p>
<p>Programador de verdade está sempre trabalhando, sempre estudando, sempre se esforçando. Sempre interessado em evoluir e melhorar os seus projetos. Para um programador legítimo, um projeto quase nunca está perfeito. Mas é sempre incrivelmente gratificante depois de passar horas tentando fazer algo complicado, finalmente conseguir. É uma sensação extasiante e inexplicável.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Qual o Melhor Computador para Design e Desenvolvimento?</title>
		<link>https://velhobit.com.br/programacao/qual-o-melhor-computador-para-design-e-desenvolvimento.html</link>
		
		<dc:creator><![CDATA[Rodrigo Portillo]]></dc:creator>
		<pubDate>Thu, 19 Jan 2017 21:27:53 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[computador]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[escolhas]]></category>
		<category><![CDATA[gpu]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[investimento]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[processadores]]></category>
		<category><![CDATA[trabalho]]></category>
		<guid isPermaLink="false">https://bitcolor.com.br/?p=33</guid>

					<description><![CDATA[Profissionais que usam o computador como sua principal ferramenta precisam conhecer como sua máquina funciona para tomar as melhores decisões em seu trabalho.]]></description>
										<content:encoded><![CDATA[<p>Assim como um pintor conhece sua tela e pincéis e um pedreiro conhece sua espátula e ferramentas, todo o profissional de TI precisa conhecer seu computador, e isso inclui o designer. Todo profissional precisa conhecer sua ferramenta.</p>
<p>Por muitas vezes, perguntei a alguns amigos designers qual era a configuração da máquina em que eles trabalhavam. Alguns me respondiam “Windows 7”, outros me respondiam, “ah é um Mac”. Mas, na realidade, o que eu queria saber era quanto de RAM, quanto de HD, qual o processador, placa de vídeo e, para minha surpresa, sempre me deparava com um “o quê?”, “como é?”, “sou designer. Não tem nada a ver eu saber disso”. Isso é decepcionante.</p>
<p>As vezes é necessário criar grandes formatos ou editar vídeos, talvez um pouco de 3D, então precisa de um computador que possa dar suporte as suas necessidades. Mas como saber se o que precisa é de mais RAM ou mais processamento? Ou se na verdade você simplesmente já tinha tudo certo, mas nem sabia que existiam Sistemas Operacionais 64 bits? Aliás, nem sequer sabia o que era 64 bits?</p>
<p>Existem muitos designers que enchem um site de estruturas complexas e somente camadas de PNG, ou gigantescas manobras de canvas, para poder montar algo vistoso. O designer necessita se preocupar com a tecnologia que o seu usuário usa e qual a configuração média do dispositivo, de acordo com a proposta do aplicativo, site ou artefato. Essa é outra razão para compreender como funciona computadores e dispositivos móveis.</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-35" src="https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design.jpg" alt="laptop-branco-ligado-monitor-design" width="1080" height="638" srcset="https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design.jpg 1080w, https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design-400x236.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design-768x454.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design-1024x605.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/01/laptop-branco-ligado-monitor-design-600x354.jpg 600w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></p>
<h2>Devo comprar um laptop ou um desktop</h2>
<p>Laptops são computadores portáteis, conhecidos no Brasil como notebooks. Já os Desktops são computadores de mesa. A vantagem do primeiro é a mobilidade, porém, essa mobilidade tem um custo mais elevado, que pode ser refletido tanto em preço, quanto em performance. Independente do que você precisar comprar, fique atento as questões abaixo para que você possa escolher melhor a sua máquina. Para tanto, vamos listar por componentes mais comuns.</p>
<h2>Processadores</h2>
<p>O processador, ou a CPU (Unidade Central de Processamento), é o elemento que mais gera dúvidas a respeito de performance. Para quem trabalha com vídeos ou edição de som, o processador é fundamental para garantir uma renderização mais rápida. Já para quem trabalha com imagens estáticas, como o Photoshop ou Illustrator, ele vai acelerar o tempo de adição de efeitos e filtros. Para quem trabalha com web e desenvolvimento, a performance do processador é mais importante para virtualização, seja para dispositivos móveis ou máquinas virtuais.</p>
<p>Basicamente, há duas empresas quando o assunto é processadores: Intel e AMD. Com isso, vale a atenção a algumas características que podem enganar o consumidor mais desatento: As marcas i3, i5 e i7 são nomenclaturas puramente comerciais. A grande maioria dos laptops i7, por exemplo, são da linha U, que correspondem a um menor custo de energia, porém com uma performance inferior. A linha i7 XXX U, da Intel, por exemplo, apresenta menor clock e menor quantidade de núcleos, sendo comparado a um i3 para Desktops ou a um i5 da linha HQ, para laptops. Por isso, antes de se pensar em nomes comerciais, é necessário ficar atento a algumas características, como:</p>
<p><strong>Clock →</strong> Digamos que seja a velocidade do processador. Ele é determinado a partir de métrica de frequência. Um processador mínimo, para quem trabalha com programas gráficos, é de 2,6GHz. Esse clock deve ser mais poderoso, caso o objetivo seja trabalhar com renderização de vídeo e 3D, onde é aconselhado pelo menos 3,2GHz. A tendência é que quantos mais GHz, mais rápido será a renderização.</p>
<p><strong>Núcleos (Core) →</strong> Esse é um assunto polêmico. A necessidade de uma quantidade maior ou menor de núcleos depende da disponibilidade do aplicativo de usar ou não esses núcleos. Uma quantidade maior de núcleos significa que o processamento será dividido e executado simultaneamente entre eles, aumentando, por consequência, a performance. Os núcleos podem ser físicos ou lógicos (geralmente representado como Número de Threads). A diferença é que o núcleo físico realmente o número de núcleos no processador, enquanto o virtual emula núcleos dentro da CPU, com o objetivo de dividir as tarefas. Os núcleos físicos possuem performance superior, porém, mesmo processadores com 4 ou mais núcleos, tendem a possuir núcleos virtuais para somatizar a performance. Muitos núcleos são recomendados para quem trabalha com bastante 3D ou precise trabalhar com máquinas virtuais. Vale lembrar que a quantidade de vários núcleos significa que o computador irá dividir mais processos simultaneamente, ficando assim mais rápido, caso o programa usado dê esse suporte. A grande maioria dos programas profissionais modernos (programas da Adobe, AutoDesk, alguns compiladores, etc.) usam bem as várias threads do processador.</p>
<p><strong>Cache →</strong> A memória cache representa o tamanho da informação que o processador poderá processar por vez. Quanto mais memória cache, mais tarefas o processador poderá executar em um curto espaço de tempo e, por consequência, maior performance. Muitos consideram a memória cache mais importante do que o Clock. É importante salientar que a quantidade de memória varia de núcleo para núcleo. Desse modo, segue a mesma lógica do clock, quanto mais você tiver, melhor vai ser sua performance para renderização. No entanto, atenção, a Intel mostra o cache POR NÚCLEO, enquanto a AMD tem o costume de mostrar a SOMA do cache. Então fique atento e observe sempre, nas configurações, o cache por núcleo. A partir de 4MB de cache L3 é interessante para quem trabalha com impressos, web e aplicativos. Para quem trabalha intensamente com vídeo e 3D, 8MB, ou mais, de cache L3 é mais recomendado.</p>
<p>O site <a title="Acesse o site CPU BOSS" href="http://cpuboss.com/" target="_blank" rel="noopener">CPU BOSS</a> vai ajudar você a ter uma ideia de comparação na hora de escolher um processador.</p>
<h2>Memória RAM</h2>
<p>Até o começo dos anos 2000, muita memória RAM era sinônimo de altíssima performance. Isso porque a memória RAM, ou Memória de Acesso Aleatório, é responsável por guardar as informações que estão sendo executadas naquele momento. Em resumo, quanto mais memória RAM, mais programas abertos e mais pesados podem ficar abertos simultaneamente. O fato é que, hoje, os aplicativos são mais otimizados para consumir menos memória. Porém, para quem trabalha com projetos muito pesados, como revistas, livros e grandes formatos, uma quantidade razoável de memória RAM é muito importante. Já para quem trabalha com web, nem tanto. Já para virtualização, memória RAM é muito importante para dividir entre as máquinas virtuais. 8GB é o mínimo para quem trabalha com revistas e livros. Já para quem trabalha com web, 6GB é suficiente. Virtualização e vídeo, a partir de 16GB.</p>
<h2>Placa de Vídeo</h2>
<p>Nem todo computador tem uma placa de vídeo, mas todo ele tem um chipset ou um processador de vídeo. Hoje, existem duas opções no mercado: APU e GPU.</p>
<p>A APU é um tipo de processamento de vídeo que é compartilhado com o processador. Praticamente todos os processadores hoje possuem um processamento de vídeo incorporado. Mas esse vídeo incorporado não possui tanta performance quanto um processador de vídeo dedicado e também precisa usar parte da memória RAM.</p>
<p>Já a GPU é um processador dedicado de vídeo. As principais fabricantes são a nVIDIA e a AMD/Radeon. Por possuir um processamento próprio de vídeo e memória dedica, possui uma performance muito superior. Por isso elas são mais caras e exigem também mais energia e esquentam mais, o que pode ser algo que pese na opinião de alguém que queira comprar um computador, já que a fan (ventoinha) pode fazer muito barulho na hora que requer alto processaemnto.</p>
<p>Quem trabalha apenas com impressos, publicações e elementos institucionais, ou com desenvolvimento e web, não tem a necessidade de uma GPU. Uma APU o atenderá sem problemas. Porém para usar recursos mais avançados do Photoshop, como o 3D, uma GPU simples, dedicada, será o suficiente. Agora, se o intuito é trabalhar com 3D ou vídeo, então uma GPU mais parruda se faz necessário. Vale lembrar que é importante ver se o software que você usa, para edição de vídeo, usa mais a GPU ou a CPU para renderização. Esse último detalhe pode ser fundamental para uma escolha ideal.</p>
<p>Apesar do que pode parecer, a memória dedicada da GPU não é o ponto mais importante no que diz respeito a qualidade. Também a questão de núcleos não é tão importante assim, visto que processadores gráficos possuem uma quantidade absurda de núcleos em comparação a CPUs. A arquitetura da GPU quanto ao seu clock e a sua quantidade de memória é algo fundamental para analisar. Por exemplo, a GPU Geforce 930M (para laptops), da nVidia, é suficiente para quem quer trabalhar com impressos, web e vídeos esporádicos. Já a GTX 780, também da nVidia, apesar de mais antiga, é melhor, porém apenas para desktops. No caso da nVidia, o que difere a qualidade está mais relacionada aos seus dois últimos dígitos, sendo que o primeiro especifica o quão recente é a arquitetura. Pessoas que trabalham com 3D de forma mais assídua, e as que usam a GPU para renderizar vídeos, precisam de GPUs mais potentes. Alguns podem juntar várias GPUs em uma única, somando o processamento (mas não a memória dedicada) e deixando a renderização mais rápida.</p>
<p>Usuários do Ubuntu, cuidado ao comprar uma placa de vídeo Radeon. Muitas não receberão mais atualizações para o sistema operacional, ficando inutilizável o OpenGL nas distribuições mais recentes. Fique atento ao modelo que for adquirir.</p>
<p>Para verificar e comparar GPUs, o site <a title="Acesse o Site GPU Boss" href="http://gpuboss.com/" target="_blank" rel="noopener">GPU BOSS </a>vai te ajudar a escolher qual a melhor.</p>
<h2>Displays e Monitores</h2>
<p>Um assunto deveras delicado, mas bem simples. Designers precisam sempre de qualidade de resolução e brilho, além de fidelidade de cores. O foco é sempre na relação de taxa de atualização x polegadas x resolução x tecnologia. O ideal ainda é uma tela IPS ou OLED. A resolução FULLHD deve ser usada no máximo em um monitor de 21.5 polegadas, para não ficar incômoda a densidade de pixels. Recomenda-se uma resolução maior também para manter uma boa área de utilização em relação as ferramentas. Qualquer coisa maior que 21.5 polegadas deverá ser 2K ou 4K, para manter uma boa qualidade de imagem. Já no que diz respeito a frequência, praticamente todos os monitores hoje apresentam boa frequência, porém para quem trabalha com vídeos, pode tentar conseguir um monitor na faixa dos 100hz. Mas cuidado, fuja totalmente das telas TFTs.</p>
<h2>HDD e SSD</h2>
<p>Espaço de armazenamento nunca é demais, mas as vezes velocidade é mais necessário. Os HDs eletromecânicos (HDD) possuem a vantagem de serem mais baratos e, graças a tecnologia SMART, saber quando vão dar problemas e o usuário pode tomar uma previdência quanto a um backup. Além disso, por ser mais barato, a quantidade de espaço disponível é muito maior a um preço menor. O problema é que por serem mecânicos são mais lentos. O mais rápido que é possível encontrar no mercado é o de 7200RPM.</p>
<p>Já o SSD, é extramamente rápido, por não possuir componentes mecânicos, o tempo de abertura de um arquivo ou programa é até 90% mais rápido do que em HDD. Porém, no caso de queimarem ou ter um problema sério, eles simplesmente irão parar de funcionar. Não há uma forma prática de diagnosticar que o SSD vai dar problemas. O custo também é muito alto. SSDs podem chegar a preços até 10x mais caro que um HD de mesma quantidade de memória. Vale salientar que a velocidade do SSD varia entre marcas e modelos, mas sempre é mais rápido que os HDDs comuns.</p>
<h2>Periféricos</h2>
<p>Mouses e teclados são detalhes pouco discutidos, mas são importantes. Para começar, quem trabalha muito com programação, ou digita muito, pode preferir um teclado mecânico. Porém teclados mecânicos são bem mais caros que o convencionais e fazem mais barulho, em contra partida possuem resposta muito mais rápida e eficiênte, o pressionar é mais confiável. Já no que diz respeito a mouses e touchpads, isso é uma questão realmente de adaptação, você precisa experimentar qual é o mais ideal para a sua mão. Procure mouses com DPIs mais altos, pois possuem maior precisão. No que diz respeito as Pen Tablets (erroneamente chamado de Mesa Digitalizadora), pouquíssimas pessoas realmente precisam deles e vão utilizar. A maioria das pessoas que as tem, compram por questão de status ou de uma ideia errada da atualização. O uso das PenTablets é maior para pessoas que realmente trabalham com ilustração matricial ou que precisem retocar imagens com frequência.</p>
<p><strong>Obs. este artigo é de 2015. Então fiquem de olho nas atualizações dos hardwares.</strong></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-36" src="https://velhobit.com.br/wp-content/uploads/2017/01/laptops.jpg" alt="laptops de diversos modelos" width="1920" height="817" srcset="https://velhobit.com.br/wp-content/uploads/2017/01/laptops.jpg 1920w, https://velhobit.com.br/wp-content/uploads/2017/01/laptops-400x170.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/01/laptops-768x327.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/01/laptops-1024x436.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/01/laptops-600x255.jpg 600w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-37" src="https://velhobit.com.br/wp-content/uploads/2017/01/desktop.jpg" alt="Desktop de diversos modelos" width="1920" height="817" srcset="https://velhobit.com.br/wp-content/uploads/2017/01/desktop.jpg 1920w, https://velhobit.com.br/wp-content/uploads/2017/01/desktop-400x170.jpg 400w, https://velhobit.com.br/wp-content/uploads/2017/01/desktop-768x327.jpg 768w, https://velhobit.com.br/wp-content/uploads/2017/01/desktop-1024x436.jpg 1024w, https://velhobit.com.br/wp-content/uploads/2017/01/desktop-600x255.jpg 600w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2>Por fim, desktop ou laptop</h2>
<p>Laptops costumam ser mais caros e ter uma performance inferior aos desktops de preços equivalentes. Além disso, você está à mercê das opções disponíveis no mercado, não vai ter a liberdade para montar uma máquina que julgar ideal. Mas os laptops possuem a vantagem da mobilidade e de ocupar um menor espaço físico, pode-se trabalhar em qualquer local e se deslocar a escritórios diferentes. Muitas pessoas preferem usar laptops com monitores separados, quando em estações de trabalho. Quando comprar um laptop deve-se ficar muito atento ao processador e a GPU, que, na maioria das vezes, possuem baixa qualidade para poder baratear os custos e melhorar a performance da bateria. Se comprar um laptop, opte primeiro por adquirir nas lojas oficiais, físicas ou online, salvo promoções pontuais, na loja da marca costuma ser mais barato e ter melhores condições.</p>
<p>Desktops possuem a vantagem de serem flexíveis, mais baratos e ter melhor performance. Porém exige muito espaço físico e você não há boa mobilidade. Consomem mais energia e é necessário um pouco mais de experiência para montar um equipamento que realmente agrade. Na grande maioria das vezes, ainda é possível fazer atualizações, aumentando o tempo de vida útil do computador, adicionando com o tempo uma placa de vídeo melhor ou mais RAM, trocar o processador ou adicionar periféricos. Tudo de acordo com as necessidades que forem surgindo. O ideal é comprar as peças e montar, pois a maioria das empresas que entregam o PC pronto tendem a escolher componentes de mais baixa qualidade para diminuir os custos.</p>
<p><em><strong>Atenção: No momento em que receber o computador, seja ele um laptop, desktop ou até mesmo montado por você, faça todos os testes possíveis. Processamento, GPU, APU, etc. Use ferramentas de Benchmark de terceiros para isso. Não utilize as ferramentas da própria empresa da marca do computador que você comprou. Muitas vezes, elas não fazem os testes necessários para averiguar realmente todos os elementos do hardware.</strong></em></p>
<p>Conhecer a sua própria máquina é mais que um luxo, é uma obrigação. Entender qual a nova tecnologia que entrará no mercado, e se adaptar a elas, é importante para se manter em um mercado cheio de concorrência, algumas até desleiais. Não estou falando de entender o que é um transistor, ou de fazer um curso de montagem e manutenção em algum “cursinho” por aí, mas sim, de entender o porquê de você comprar um processador de 4 núcleos, entender a diferença de uma GTX 930 para uma GTX 970, saber porque está comprando 16GB de RAM e não somente 8GB. Só assim você terá como tirar o maior proveito possível de seu computador e não fazê-lo tornar somente um elefante branco.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
