<?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>Bit a Bit &#187; Rafael Barbolo Lopes</title>
	<atom:link href="http://www.bitabit.eng.br/author/barbolo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bitabit.eng.br</link>
	<description>O Blog da Engenharia de Computação da POLI-USP</description>
	<lastBuildDate>Wed, 11 Jan 2012 16:12:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Apache Solr: how to search sorting accented fields</title>
		<link>http://www.bitabit.eng.br/2011/03/16/sunspot-solr-how-to-sort-accented-fields/</link>
		<comments>http://www.bitabit.eng.br/2011/03/16/sunspot-solr-how-to-sort-accented-fields/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 20:28:18 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Busca]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[ascii]]></category>
		<category><![CDATA[ASCIIFoldingFilterFactory]]></category>
		<category><![CDATA[HTMLStripCharFilterFactory]]></category>
		<category><![CDATA[KeywordTokenizer]]></category>
		<category><![CDATA[KeywordTokenizerFactory]]></category>
		<category><![CDATA[latin]]></category>
		<category><![CDATA[LowerCaseFilterFactory]]></category>
		<category><![CDATA[Normalizing]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[StandardFilterFactory]]></category>
		<category><![CDATA[StandardTokenizerFactory]]></category>
		<category><![CDATA[string field]]></category>
		<category><![CDATA[sunspot]]></category>
		<category><![CDATA[TextField]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[tokenizer]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2054</guid>
		<description><![CDATA[We are using Apache Solr and Sunspot in a brazilian portuguese project and wanted it to work with accented chars. Normalizing latin chars (á, é, ç, &#8230;) to ASCII chars (a, e, c, &#8230;) in our search index and queries was pretty easy. We changed the text field definition to the following schema: 1 2 [...]]]></description>
			<content:encoded><![CDATA[<p>We are using <a href="http://lucene.apache.org/solr/">Apache Solr</a> and <a href="http://outoftime.github.com/sunspot/">Sunspot</a> in a brazilian portuguese project and wanted it to work with accented chars.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/apache_solr_logo.jpg"><img src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/apache_solr_logo.jpg" alt="" title="Apache SOLR Logo" width="283" height="156" class="aligncenter size-full wp-image-2070" /></a></p>
<p>Normalizing latin chars (á, é, ç, &#8230;) to ASCII chars (a, e, c, &#8230;) in our search index and queries was pretty easy. We changed the text field definition to the following schema:</p>
<p><br/><br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fieldType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.TextField&quot;</span> <span style="color: #000066;">omitNorms</span>=<span style="color: #ff0000;">&quot;false&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;charFilter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.HTMLStripCharFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> <span style="color: #808080; font-style: italic;">&lt;!-- strip HTML --&gt;</span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tokenizer</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.StandardTokenizerFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.StandardFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.LowerCaseFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.ASCIIFoldingFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span> <span style="color: #808080; font-style: italic;">&lt;!-- convert accented chars to ASCII --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fieldType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p><br/><br/></p>
<p>A more difficult problem was to sort accented string fields. By default, the class of the sunspot&#8217;s string field is <em>solr.StrField</em>. The string field is used for sorting, but was showing problems to sort accented inputs. For the inputs &#8220;árvore&#8221;, &#8220;bola&#8221;, &#8220;ano&#8221; it was showing the sorted result: &#8220;ano&#8221;, &#8220;bola&#8221;, &#8220;árvore&#8221; (the correct result would be &#8220;ano&#8221;, &#8220;árvore&#8221;, &#8220;bola&#8221;).</p>
<p>The problem with accented chars sorting is that non-ASCII chars are represented as HTML entites (for example, <em>&amp;aacute; </em>instead of<em> á</em>) and special chars as &#8220;&#038;&#8221; goes after alphanumeric chars in a sort.</p>
<p>To solve this, we changed the string field&#8217;s class to <em>solr.TextField</em> but making sure that its tokenizer would not create more than one token for each entry. The tokenizer we used was the <em>KeywordTokenizer</em>. The final schema for the string field was:</p>
<p><br/><br/></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fieldType</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;string&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.TextField&quot;</span> <span style="color: #000066;">omitNorms</span>=<span style="color: #ff0000;">&quot;true&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;tokenizer</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.KeywordTokenizerFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.LowerCaseFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;solr.ASCIIFoldingFilterFactory&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/analyzer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/fieldType<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p><br/><br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2054&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/03/16/sunspot-solr-how-to-sort-accented-fields/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Conheça os serviços em nuvem oferecidos pela Amazon Web Services</title>
		<link>http://www.bitabit.eng.br/2011/02/15/conheca-os-servicos-em-nuvem-oferecidos-pela-amazon-web-services/</link>
		<comments>http://www.bitabit.eng.br/2011/02/15/conheca-os-servicos-em-nuvem-oferecidos-pela-amazon-web-services/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 10:00:07 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Avaliações]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[amazon elastic compute cloud]]></category>
		<category><![CDATA[amazon web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[baixo custo]]></category>
		<category><![CDATA[caches]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cloudapp]]></category>
		<category><![CDATA[computadores]]></category>
		<category><![CDATA[conexão]]></category>
		<category><![CDATA[data warehousing]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[escalabilidade]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[mensagens]]></category>
		<category><![CDATA[nuvem]]></category>
		<category><![CDATA[organização]]></category>
		<category><![CDATA[plataforma]]></category>
		<category><![CDATA[rede]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1860</guid>
		<description><![CDATA[Neste post serão apresentados os serviços da Amazon Web Services oferecidos desde 2006 para empresas de todos os tamanhos. A Amazon foi pioneira em oferecimento de infraestrutura como serviço, ajudando a construir o que ficou conhecido como Computação em Nuvem (Cloud Computing) e levando a virtualização de servidores a um nível nunca antes visto. Os avanços [...]]]></description>
			<content:encoded><![CDATA[<p>Neste post serão apresentados os serviços da <a href="http://aws.amazon.com/" target="_blank">Amazon Web Services</a> oferecidos desde 2006 para empresas de todos os tamanhos.</p>
<p>A Amazon foi pioneira em oferecimento de infraestrutura como serviço, ajudando a construir o que ficou conhecido como <a href="http://www.slideshare.net/barbolo/computao-em-nuvem-3650947" target="_blank">Computação em Nuvem (<em>Cloud Computing</em>)</a> e levando a virtualização de servidores a um nível nunca antes visto. Os avanços das tecnologias de virtualização permitiram locação de serviços computacionais de forma escalável, flexível e ágil, em que a cobrança de acesso a esses serviços pode ser feita pelo tempo e quantidade de uso de cada recurso alocado.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/amazon-web-services.png"><img class="size-medium alignright" title="Amazon Web Services" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/amazon-web-services-300x110.png" alt="" width="300" height="110" /></a></p>
<p><br/><br />
Atualmente, a Amazon oferece 24 serviços distribuídos nas categorias <strong>computação/processamento</strong>, <strong>distribuição de conteúdo</strong>, <strong>banco de dados</strong>, <strong>instalação e gerenciamento de serviços</strong>, <strong>e-commerce</strong>, <strong>mensagens</strong>, <strong>monitoramento</strong>, <strong>rede</strong>, <strong>pagamento e faturamento</strong>, <strong>armazenamento</strong>, <strong>suporte</strong>, <strong>análise de tráfego web</strong> e <strong>força de trabalho</strong>.</p>
<p><br/><br />
Segue a lista de serviços oferecidos pela Amazon Web Services:</p>
<p><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">COMPUTAÇÃO/PROCESSAMENTO</span></h3>
<h2 style="text-align: left;">Amazon Elastic Compute Cloud (EC2)</h2>
<p>O Amazon EC2 é o serviço que popularizou a computação em nuvem e é utilizado para criação de servidores virtuais na infraestrutura de nuvem da Amazon. Você pode escolher o Sistema Operacional, os softwares e os recursos que serão utilizados pelos servidores. Em poucos minutos uma instância de servidor virtual pode ser criada, sendo possível alterar os recursos alocados para ela em poucos instantes de forma manual ou automática.</p>
<p><br/></p>
<h2>Amazon Elastic MapReduce</h2>
<p>O Amazon Elastic MapReduce é um serviço que permite processamento de uma grande quantidade de dados utilizando o framework Apache Hadoop hospedado em clusters de servidores Amazon S3 e Amazon EC2. O serviço é usado para tarefas como indexação, mineração de dados, análise de logs, <em>data warehousing</em>, aprendizagem de máquina, análise financeira, simulação científica e pesquisas em bioinformática.</p>
<p><br/></p>
<h2>Auto Scaling</h2>
<p>O Auto Scaling permite que os servidores Amazon EC2 escalem automaticamente de acordo com definições estabelecidas para sua aplicação. Ele é útil, por exemplo, para alocar mais recursos em períodos de pico de forma automática.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">DISTRIBUIÇÃO DE CONTEÚDO</span></h3>
<h2>Amazon CloudFront</h2>
<p>O Amazon CloudFront é um serviço que permite distribuição de conteúdo com baixa latência e alta taxa de transferência, usando caches em provedores de Internet de várias regiões do mundo (o Brasil ainda não está nessa lista, então não há vantagens em usar em aplicações brasileiras). Ele é utilizado para distribuir conteúdos estáticos ou streamings de mídias, funcionando de maneira parecida com o <a href="http://www.akamai.com/html/solutions/media_delivery.html" target="_blank">Akamai Media Delivery</a>.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">BANCO DE DADOS</span></h3>
<h2>Amazon SimpleDB</h2>
<p>O Amazon SimpleDB é um sistema de armazenamento de dados não relacional de alta disponibilidade, escalável e flexível oferecido como serviço pela Amazon, deixando o desenvolvedor sem preocupações com administração do banco de dados, mas apenas com a modelagem dos dados que serão indexados. O serviço garante redundância, segurança, disponibilidade, confiabilidade, escalabilidade ou velocidade de acesso aos dados armazenados.</p>
<p>Ele é usado por aplicações que precisam apenas indexar e consultar dados, sem envolver transações complexas ou joins.</p>
<p><br/></p>
<h2>Amazon Relational Database Service (RDS)</h2>
<p>O Amazon RDS é um serviço que provê um banco de dados relacional com as mesmas funcionalidades do MySQL, mas totalmente administrado pela Amazon. É possível configurar backups automáticos, adicionar ou remover recursos de maneira rápida e fácil, e configurar réplicas que aumentam disponibilidade, confiabilidade ou velocidade de acesso aos dados.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">INSTALAÇÃO E GERENCIAMENTO DE SERVIÇOS</span></h3>
<h2>Amazon Elastic Beanstalk</h2>
<p>O Amazon Elastic Beanstalk é um serviço oferecido gratuitamente pela Amazon que permite realizar instalação (<em>deploy</em>) e gerenciamento de aplicações em nuvem de maneira muito simples, automaticamente criando instâncias (estas são pagas) de servidores EC2, S3, EBS etc. Ele é muito parecido com uma Plataforma como Serviço em Nuvem (<em>heroku</em>, <em>google app engine</em>), porém oferece maior controle sobre os recursos e softwares disponibilizados pela infraestrutura.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">E-COMMERCE</span></h3>
<h2>Amazon Fulfillment Web Service (FWS)</h2>
<p>Este é um serviço um pouco mais complexo de entender. A Amazon permite que um vendedor terceirize para ela a entrega de produtos. O vendedor pode enviar seus produtos para a Amazon, ela estoca seus produtos, e quando um consumidor realiza a compra de um produto, a Amazon embrulha o pedido e realiza a entrega. O Amazon FWS é um serviço que permite que aplicações de vendedores se integrem automaticamente com o serviço de entrega da Amazon, enviando informações sobre pedidos através de Web Services.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">MENSAGENS</span></h3>
<h2>Amazon Simple Queue Service (Amazon SQS)</h2>
<p>O Amazon SQS é um serviço que permite criar filas de mensagens na nuvem. Você pode construir fluxos de trabalho (como <em>pipelines</em>) que se comunicam através de filas e cada estágio do seu fluxo pode esperar por uma mensagem de um outro estágio para executar. Uma mensagem pode ser armazenada por até 14 dias e só pode ser lida simultaneamente por uma instância, sendo bloqueada enquanto é processada. Caso o processamento da mensagem falhe, ela volta a ficar disponível na fila; caso contrário, ela é excluída da fila.</p>
<p><br/></p>
<h2>Amazon Simple Notification Service (Amazon SNS)</h2>
<p>O Amazon SNS é um serviço que permite enviar notificações (como um <em>ping</em>) através da nuvem. Ele facilita o processo de envio de mensagens via HTTP, SMTP ou outro protocolo por aplicações, integrando módulos ou mantendo assinantes de conteúdo atualizados.</p>
<p><br/></p>
<h2>Amazon Simple Email Service (Amazon SES)</h2>
<p>O Amazon SES é um serviço de envio de e-mails altamente escalável e de baixo custo. É uma alternativa aos serviços de e-mail marketing ou à construção de um sistema de envio de e-mails <em>in-house</em>. A Amazon possui acordos com provedores de Internet para garantir que as mensagens sejam corretamente enviadas e não sejam bloqueadas. O serviço pode ser integrado a uma aplicação através de acesso ao SMTP do Amazon SES ou através de web services que recebem cabeçalhos e conteúdos de e-mails a serem enviados.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">MONITORAMENTO</span></h3>
<h2>Amazon CloudWatch</h2>
<p>O Amazon CloudWatch é um serviço que permite monitorar outros serviços oferecidos pela Amazon. Ele permite visualizar utilização de recursos, desempenho operacional e demandas de acesso aos serviços monitorados. As versões do Amazon CloudWatch mais simples de monitoramento são gratuitas e as mais detalhadas são pagas.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">REDE</span></h3>
<h2>Amazon Route 53</h2>
<p>O Amazon Route 53 é um serviço de consulta de DNS altamente disponível e escalável, resolvendo rapidamente endereços de domínios públicos e retornando a resposta com baixa latência. Ele também permite criar e gerenciar seus registros DNS.</p>
<p><br/></p>
<h2>Amazon Virtual Private Cloud (VPC)</h2>
<p>O Amazon VPC é um serviço que permite a integração entre a infraestrutura de uma organizacão com os serviços da Amazon de forma segura e reservada. Ele cria uma rede privada na infraestrutura da Amazon que só é acessada pela organização, através de uma VPN.</p>
<p><br/></p>
<h2>Elastic Load Balancing</h2>
<p>O Elastic Load Balancing é um serviço oferecido pela Amazon que automaticamente distribui requisições de acesso à aplicação para instâncias de Amazon EC2 ativas, balanceando a carga por diversos servidores. Com essa solução, é possível aumentar a tolerância a falhas, a velocidade de acesso e a disponibilidade de uma aplicação.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">PAGAMENTO E FATURAMENTO</span></h3>
<h2>Amazon Flexible Payments Service (Amazon FPS)</h2>
<p>O Amazon FPS é um serviço similar ao Paypal, que permite que desenvolvedores criem aplicações capazes de gerar faturas e receber dinheiro de consumidores.</p>
<p><br/></p>
<h2>Amazon DevPay</h2>
<p>O Amazon DevPay permite que empresas vendam acesso a aplicações construídas com os serviços oferecidos pela Amazon Web Services. O dono da aplicação rodando na infraestrutura da Amazon pode definir os parâmetros relacionados aos serviços da Amazon Web Services que estarão relacionados com o preço de venda do serviço de sua aplicação, e com isso gerar faturas sob demanda para cobrança de seus clientes.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">ARMAZENAMENTO</span></h3>
<h2>Amazon Simple Storage Service (Amazon S3)</h2>
<p>O Amazon S3 é um serviço de armazenamento de arquivos na Internet. Ele oferece web services que podem ser usados para armazenar ou recuperar qualquer quantidade de dados, a qualquer hora, de qualquer lugar da Internet. Os dados podem ser definidos como públicos ou privados, sendo possível especificar direitos de acesso para usuários específicos.</p>
<p><br/></p>
<h2>Amazon Elastic Block Store (EBS)</h2>
<p>O Amazon EBS é um serviço que disponibiliza blocos de armazenamento persistentes para serem usados em conjunto com instâncias do Amazon EC2. Um bloco de dados do Amazon EBS persiste independentemente do tempo de vida de uma instância do Amazon EC2. Este serviço é especialmente útil quando a aplicação rodando no Amazon EC2 precisa de um banco de dados ou de um sistema de arquivos persistente com alta disponibilidade ou confiabilidade.</p>
<p><br/></p>
<h2>AWS Import/Export</h2>
<p>O AWS Import/Export é um serviço usado para transferência de uma quantidade de dados muito grande para servidores da Amazon Web Services. Você deve preparar um dispositivo de armazenamento (como um HD ou um pendrive), enviar para a Amazon e ela se encarrega de copiar os dados do dispositivo para os servidores ou dos servidores para o dispositivo. Este serviço é considerado relevante para os casos em que a transferência de dados pela rede de Internet é muito intensa e levaria muito tempo para concluir.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">SUPORTE</span></h3>
<h2>AWS Premium Support</h2>
<p>O AWS Premium Support é um serviço de suporte pago de alta qualidade oferecido pela Amazon com o objetivo de ajudar clientes a utilizarem os serviços oferecidos pela Amazon Web Services.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">ANÁLISE DE TRÁFEGO WEB</span></h3>
<h2>Alexa Web Information Service</h2>
<p>O Alexa Web Information Service é um web service que disponibiliza o repositório de informações sobre tráfego e estrutura da Internet desenvolvido pela <a href="http://www.alexa.com/">Alexa</a>.</p>
<p><br/></p>
<h2>Alexa Top Sites</h2>
<p>O Alexa Top Sites é um web service que fornece acesso a listas de web sites ordenados pelo Alexa Traffic Rank. É possível obter listas de web sites top 1.000, 5.000 ou 100.000, com informações como número médio de visualizações por usuário, número de usuários Alexa visitando o site ou número de visualizações para cada 1 milhão de usuários.</p>
<p><br/><br/></p>
<h3 style="text-align: right;"><span style="color: #ff9900;">FORÇA DE TRABALHO</span></h3>
<h2>Amazon Mechanical Turk</h2>
<p>O Amazon Mechanical Turk é um mercado de compra e venda de trabalho que exige inteligência humana. O web service do Mechanical Turk permite que desenvolvedores enviem tarefas a serem realizadas por humanos (Human Intelligence Taks ou &#8220;HITs&#8221;) e, desta forma, construir aplicações com inteligência humana.</p>
<p><br/><br/><br/></p>
<h2>Considerações</h2>
<p>Alguns serviços da Amazon são caros para aplicações simples ou empresas que estão iniciando. Por exemplo, um banco de dados MySQL no RDS custa cerca de U$ 70,00/mês em sua versão mais simples. Porém, para aplicações complexas, que podem demandar muitos recursos computacionais, ou para empresas que esperam alta disponibilidade, confiabilidade e segurança de dados, as soluções da Amazon se encaixam perfeitamente e de forma barata.</p>
<p><br/><br />
Eu vejo muitos desenvolvedores usando o Amazon EC2 como se fosse um servidor dedicado. Ele está longe disso e não foi construído com tal finalidade. Ele é um servidor de aplicação, e por isso oferece poucas garantias para uso de bancos de dados ou armazenamento de arquivos. Considere utilizá-lo em conjunto com outras soluções, como o Amazon EBS ou o Amazon S3.</p>
<p><br/><br />
As documentações completas de todos os serviços oferecidos pela Amazon podem ser encontradas no link:</p>
<p><a href="http://aws.amazon.com/documentation/">http://aws.amazon.com/documentation/</a></p>
<p><br/><br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1860&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/02/15/conheca-os-servicos-em-nuvem-oferecidos-pela-amazon-web-services/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>StartuPapo #2 &#8211; Evento para Empreendedores</title>
		<link>http://www.bitabit.eng.br/2010/10/15/startupapo-2-evento-para-empreendedores/</link>
		<comments>http://www.bitabit.eng.br/2010/10/15/startupapo-2-evento-para-empreendedores/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 04:25:49 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Acadêmico]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Empreendedorismo]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[empreendedorismo]]></category>
		<category><![CDATA[runn]]></category>
		<category><![CDATA[usp]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1367</guid>
		<description><![CDATA[Está em cima da hora, mas hoje, 15 de Outubro de 2010 às 18h, acontecerá o segundo StartuPapo, no Anfiteatro da Engenharia Elétrica POLI-USP. O objetivo do evento é fomentar o empreendedorismo, criando um ecossistema propício à criação de novos negócios. O evento é gratuito e não exige inscrição antecipada. Nesta segunda edição, estarão presentes [...]]]></description>
			<content:encoded><![CDATA[<p>Está em cima da hora, mas hoje, <b>15 de Outubro de 2010 às 18h</b>, acontecerá o segundo StartuPapo, no <b>Anfiteatro da Engenharia Elétrica POLI-USP</b>.</p>
<p>
O objetivo do evento é fomentar o empreendedorismo, criando um ecossistema propício à criação de novos negócios. O evento é gratuito e não exige inscrição antecipada. Nesta segunda edição, estarão presentes os fundadores da <a href="http://boo-box.com/">boo-box</a> e da <a href="http://www.bymk.com.br/">byMK</a>, além do editor do blog <a href="http://startupi.com.br/">Startupi</a>.
</p>
<p><br/><br/></p>
<p>
<a href="http://runn.net.br/content/2-startupapo-15out-%C3%A0s-18h"><img src="http://www.bitabit.eng.br/wp-content/uploads/2010/10/Startupapo2.png" alt="" title="StartuPapo #2" width="480" height="640" class="aligncenter size-full wp-image-1369" /></a>
</p>
<p><br/></p>
<p>
Para visualizar todos os detalhes do evento, acesse o site da <a href="http://runn.net.br/content/2-startupapo-15out-%C3%A0s-18h">RUNN (Rede USP de Novos Negócios)</a>.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1367&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/10/15/startupapo-2-evento-para-empreendedores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Empresa de hospedagem diz que se o site está no Brasil ele está melhor posicionado no Google</title>
		<link>http://www.bitabit.eng.br/2010/08/24/empresa-de-hospedagem-diz-que-se-o-site-esta-no-brasil-ele-esta-melhor-posicionado-no-google/</link>
		<comments>http://www.bitabit.eng.br/2010/08/24/empresa-de-hospedagem-diz-que-se-o-site-esta-no-brasil-ele-esta-melhor-posicionado-no-google/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 18:04:03 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Busca]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[censura]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hospedagem]]></category>
		<category><![CDATA[kinghost]]></category>
		<category><![CDATA[servicos]]></category>
		<category><![CDATA[servidor]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1352</guid>
		<description><![CDATA[Este post é motivado por uma discussão que eu tive na Comunidade Magento Brasil. Até ontem eles abrigavam um artigo que incentivava os usuários a usarem a hospedagem do KingHost. Eu deixei meu comentário nessa discussão e o artigo foi removido. Eu também deixei meu comentário no blog oficial do KingHost, porém eles não o [...]]]></description>
			<content:encoded><![CDATA[<p>Este post é motivado por uma discussão que eu tive na <a href="http://www.comunidademagento.com.br/">Comunidade Magento Brasil</a>. Até ontem eles abrigavam um artigo que incentivava os usuários a usarem a hospedagem do <a href="http://www.kinghost.com.br/">KingHost</a>. Eu deixei meu comentário nessa discussão e o artigo foi removido.</p>
<p>Eu também deixei meu <a href="http://blog.kinghost.com.br/2009/07/matt-cuts-comprova-localizacao-do-servidor-faz-diferenca-no-posicionamento-do-seu-site-no-google/">comentário no blog oficial do KingHost</a>, porém eles não o aprovaram.</p>
<p>Eu não quero dizer o que penso sobre essas instituições neste artigo (mesmo porque não conheço elas muito bem), mas gostaria de deixar meu comentário a respeito do assunto registrado aqui, no <a href="http://www.bitabit.eng.br/sobre_o_bit_a_bit/">Bit a Bit</a>, que é um blog aberto e sem censura.</p>
<p>Para vender seus serviços, o KingHost argumenta que a localização de um site influencia o posicionamento do seu site no ranking do Google quando a busca é feita no Brasil. Até aí sem problemas, de fato a geolocalização de um site influencia no resultado da busca. Se você buscar por &#8220;Barbolo&#8221; no <a href="http://www.google.com.br/search?hl=pt-BR&#038;q=barbolo">Google Brasil</a> e no <a href="http://www.google.com/search?hl=en&#038;q=barbolo">Google EUA</a> verá que os resultados divergem bastante.</p>
<p>O que eu não achei correto (moralmente e tecnicamente) foi a conclusão deles:</p>
<p><em><strong>Conclusão, de acordo com palavras do Engenheiro de Software do Google Matt Cuts: Hospedagem no Brasil faz diferença para o teu site ser bem rankeado no Google!</strong></em></p>
<p><br/></p>
<p>Meu comentário:</p>
<p><em><br />
O Google pode usar IPs dos servidores como um dos recursos para adivinhar o país de origem de um site. Além deste recurso, ele também pode usar o domínio, a língua do site, os países de origem dos sites que apontam para ele, entre outros. O IP é possivelmente um dos recursos mais insignificantes.</p>
<p>Além disso, o Google oferece em sua <a href="http://www.google.com/webmasters/">Central de Webmasters</a> a opção de você definir o país de origem do seu site. Ou seja, se você quiser hospedar seu site na Lua, mas o conteúdo dele for em português, ou se ele estiver inserido em contextos brasileiros ou se você se cadastrar na central de webmasters e configurar seu país de origem como Brasil, o local de hospedagem pouco importará no ranking brasileiro do Google.</p>
<p>Eu tenho cerca de 4 servidores contratados fora do país, cerca de 10 domínios gerenciados por mim. Nunca tive problema com o ranking do Google por causa disso.</p>
<p>Existem diversos motivos para se hospedar sites no exterior, com certeza o principal é o preço. Você consegue servidores muito melhores por preços muito menores fora do Brasil. O tempo de resposta desses servidores realmente será maior do que o de um servidor hospedado no Brasil (os pacotes trocados com seu computador vão passar por um caminho maior e por uma quantidade maior de roteadores, ou seja, vão demorar mais para chegar em seus destinos). Mas essa diferença é da ordem de milissegundos, o que significa que para a maioria dos sites será insignificante. Outros fatores como banda, processamento ou memória poderão fazer a real diferença no desempenho do seu site.</em></p>
<p><br/><br/></p>
<p>Também queria aproveitar este post para deixar uma sugestão minha para empresas que entram na Internet:</p>
<p><strong>Se sua empresa está na Internet, com blog, twitter e canais de comunicação, a pior coisa que existe é censurar usuários. Nós ficamos revoltados com isso e perdemos o respeito e consideração por seus serviços.</strong></p>
<p><br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1352&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/08/24/empresa-de-hospedagem-diz-que-se-o-site-esta-no-brasil-ele-esta-melhor-posicionado-no-google/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Explorando o software por trás do Facebook, a maior rede social do mundo</title>
		<link>http://www.bitabit.eng.br/2010/07/28/explorando-o-software-por-tras-do-facebook-a-maior-rede-social-do-mundo/</link>
		<comments>http://www.bitabit.eng.br/2010/07/28/explorando-o-software-por-tras-do-facebook-a-maior-rede-social-do-mundo/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 19:12:39 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Busca]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bigpipe]]></category>
		<category><![CDATA[busca]]></category>
		<category><![CDATA[caches]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[escalabilidade]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[haystack]]></category>
		<category><![CDATA[hive]]></category>
		<category><![CDATA[labs]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[scribe]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[thrift]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[varnish]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1263</guid>
		<description><![CDATA[Na escala em que o Facebook opera, muitas abordagens tradicionais para servir conteúdo web falham ou não são práticas. O desafio para os engenheiros do Facebook tem sido manter o site no ar com mais de meio bilhão de usuários ativos. Este artigo analisa técnicas e softwares que o Facebook usa para funcionar nesse nível. [...]]]></description>
			<content:encoded><![CDATA[<p>Na escala em que o <a href="http://www.facebook.com">Facebook</a> opera, muitas abordagens tradicionais para servir conteúdo web falham ou não são práticas. O desafio para os engenheiros do Facebook tem sido manter o site no ar com mais de <a href="http://blog.facebook.com/blog.php?post=409753352130" target="_blank"><strong>meio bilhão de usuários ativos</strong></a>.</p>
<p>Este artigo analisa técnicas e softwares que o Facebook usa para funcionar nesse nível.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/facebook_logo_bit_a_bit.jpg"><img class="alignright size-full  wp-image-1264" title="Logo do Facebook (Bit a Bit)" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/facebook_logo_bit_a_bit.jpg" alt="" width="205" height="68" /></a></p>
<p><br/></p>
<h2>Facebook: desafio de escalabilidade</h2>
<p>Antes de entrar em detalhes, aqui estão alguns <a href="http://michaelis.uol.com.br/moderno/portugues/index.php?lingua=portugues-portugues&#038;palavra=fact%F3ide&#038;CP=73594&#038;typeToSearchRadio=exactly&#038;pagRadio=50">factóides</a> para dar uma idéia do desafio de escalabilidade com o qual o Facebook tem que lidar:</p>
<ul>
<li>
<p>O Facebook serve mais de <a href="https://www.google.com/adplanner/planning/site_profile#siteDetails?identifier=www.facebook.com&amp;lp=true" target="_blank"><strong>550 bilhões de visualizações de páginas por mês</strong></a>;</p>
</li>
<li>
<p>Há mais fotos no Facebook do que em todos os outros sites de fotos juntos (<a href="http://www.watblog.com/2010/07/12/facebook-photos-leave-flickr-picasa-way-behind/" target="_blank">incluindo sites como o Flickr</a>);</p>
</li>
<li>
<p>Mais de <strong><a href="http://blog.facebook.com/blog.php?post=2406207130" target="_blank">3 bilhões de fotos</a></strong> são visualizadas por dia;</p>
</li>
<li>
<p>Mais de <a href="http://www.facebook.com/press/info.php?statistics" target="_blank"><strong>25 bilhões de tipos de conteúdo</strong></a> (atualizações de status, comentários, etc) são compartilhados todo mês;</p>
</li>
<li>
<p>O Facebook tem mais de <a href="http://www.datacenterknowledge.com/archives/2010/06/28/facebook-server-count-60000-or-more/" target="_blank"><strong>60 mil servidores</strong></a>.</p>
</li>
</ul>
<p><br/></p>
<h2>Softwares para escalar</h2>
<p>A infraestrutura de software que o Facebook usa pode ser vista como a de um site <a href="http://pt.wikipedia.org/wiki/LAMP" target="_blank">LAMP</a>, mas com melhorias e extensões de vários serviços. Por exemplo:</p>
<ul>
<li>
<p>O Facebook usa PHP, mas tem um compilador que permite que o sistema execute código nativo nos servidores web, aumentando significativamente seu desempenho;</p>
</li>
<li>
<p>O Facebook usa Linux, mas é um Linux otimizado para garantir alta vazão de rede;</p>
</li>
<li>
<p>O Facebook usa MySQL, mas principalmente para persistência de chaves-valores (<a href="http://pt.wikipedia.org/wiki/Hash" target="_blank">Hashes</a>), movendo lógicas de consultas e JOINS para a camada de aplicação dos servidores web em que otimizações são mais fáceis de implementar, usando por exemplo caches em memória;</p>
</li>
<li>
<p>Por fim, há sistemas customizados, como o <a href="http://www.facebook.com/note.php?note_id=76191543919" target="_blank">Haystack</a>, um objeto de armazenamento altamente escalável usado para servir a imensa quantidade de fotos do Facebook, e o <a href="http://github.com/facebook/scribe" target="_blank">Scribe</a>, um sistema de logging (registro de ações) que consegue operar na escala do Facebook (nada trivial).</p>
</li>
</ul>
<p>Vamos ao que interessa. Abaixo são apresentados os softwares (alguns) que o Facebook usa para fornecer a todos nós a maior rede social do mundo.</p>
<h3>Memcached<a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/memcached.png"><img class="alignright size-full wp-image-1302" title="Logo do Memcached" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/memcached.png" alt="" width="91" height="85" /></a></h3>
<p>O <a href="http://memcached.org/" target="_blank">Memcached</a> é no momento um dos softwares mais famosos na Internet. É um sistema de cache em memória distribuído que o Facebook (e vários outros sites) usam como uma camada de cache entre aplicação web e banco de dados (já que acesso a disco rígido é relativamente lento). Ao longo dos anos, o Facebook realizou diversas otimizações no Memcached e nos softwares que rodam em conjunto com ele.</p>
<p>O Facebook roda milhares de servidores Memcached com <a href="http://felipenasc.blogspot.com/2010/03/escalabilidade-de-aplicacoes-web-futuro.html" target="_blank">dezenas de tearabytes de dados em cache</a> a todo momento. É provavelmente a maior instalação de Memcached do mundo.</p>
<h3>HipHop for PHP<a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/hiphop.png"><img class="alignright size-full wp-image-1304" title="HipHop for PHP Logo" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/hiphop.png" alt="" width="86" height="113" /></a></h3>
<p>PHP é uma linguagem interpretada e por isso seu código quando executado é relativamente lento quando comparado com código que executa nativamente. O <a href="http://github.com/facebook/hiphop-php" target="_blank">HipHop</a> converte PHP em código C++ que pode ser então compilado e apresentar um desempenho melhor. Isso permite que o Facebook aproveite muito melhor seus servidores web já que dependem demais de PHP para servir conteúdo.</p>
<p>Uma pequena equipe de engenheiros no Facebook (inicialmente, apenas três) passou 18 meses <a href="http://developers.facebook.com/blog/post/358" target="_blank">desenvolvendo o HipHop</a>, que agora é usado em produção.</p>
<h3>Haystack</h3>
<p><a href="http://www.facebook.com/note.php?note_id=76191543919" target="_blank">Haystack</a> é o sistema de armazenamento e recuperação de fotos de alto desempenho do Facebook (a rigor, o Haystack é um armazenador de objetos, então ele não armazena apenas fotos). Existem mais de 20 bilhões de fotos no Facebook e cada uma é armazenada em quatro diferentes resoluções, resultando em mais 80 bilhões de fotos.</p>
<p>O desafio do Haystack não é apenas  armazenar bilhões de fotos, mas também executar tarefas com elas em que o desempenho é crítico, como por exemplo remoção, atualização ou acesso.</p>
<h3>BigPipe</h3>
<p>O <a href="http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919" target="_blank">BigPipe</a> é um sistema dinâmico para servir páginas web que o Facebook desenvolveu. Ele é capaz de dividir uma página em seções (chamadas &#8220;<em>pagelets</em>&#8220;) e servi-las em paralelo com desempenho ideal.</p>
<p>Por exemplo, a janela de chat é carregada separadamente, o feed de notícias é carregado separadamente, e assim por diante. Esses &#8220;<em>pagelets</em>&#8221; podem ser carregados em paralelo, que é de onde vem o ganho de desempenho, e os usuários recebem um site que funciona mesmo se uma parte dele for desativada ou estiver com defeitos.</p>
<h3>Cassandra<a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/cassandra.png"><img class="alignright size-full wp-image-1305" title="Logo do Cassandra NoSQL" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/cassandra.png" alt="" width="200" height="43" /></a></h3>
<p><a href="http://cassandra.apache.org/" target="_blank">Cassandra</a> é um sistema de armazenamento distribuído baseado no projeto do <a href="http://labs.google.com/papers/bigtable.html" target="_blank">BigTable</a>. Ele é um dos filhos de destaque do movimento <a href="http://escalabilidade.com/2010/03/08/introducao-ao-nosql-parte-i/" target="_blank">NoSQL</a> e se tornou open source (virou um projeto Apache). O Facebook o usa na  pesquisa Inbox.</p>
<p>Além do Facebook, uma série de outros sites também o usam, como o Twitter e o Digg. É um sistema capaz de armazenar uma quantidade imensa de dados sem comprometer o tempo de busca e acesso a eles.</p>
<h3>Scribe</h3>
<p><a href="http://github.com/facebook/scribe" target="_blank">Scribe</a> é um sistema de logging flexível e escalável que o Facebook usa para uma infinidade de propósitos internos. Ele foi criado para ser capaz de registrar todas as ações ocorridas no Facebook, e automaticamente lida com novas categorias de ações registradas conforme aparecem (o Facebook tem centenas).</p>
<h3>Hadoop e Hive<a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/hadoop.png"><img class="alignright size-full wp-image-1306" title="Logo do Hadoop" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/hadoop.png" alt="" width="200" height="48" /></a></h3>
<p>O <a href="http://hadoop.apache.org/" target="_blank">Hadoop</a> é uma implementação open source de <a href="http://labs.google.com/papers/mapreduce.html" target="_blank">MapReduce</a> que permite a execução de cálculos em uma quantidade massiva de dados. O Facebook o usa para análise de dados de sua rede. O <a href="http://hadoop.apache.org/hive/" target="_blank">Hive</a> é uma interface de acesso ao Hadoop através de consultas SQL, facilitando seu uso, e teve origem dentro do Facebook.</p>
<p>Tanto o Hadoop quanto o Hive são open source (projetos Apache) e são usados por uma série de grandes sites, como o Yahoo e o Twitter.</p>
<h3>Thrift</h3>
<p>O Facebook usa diferentes linguagens para os seus diferentes serviços. PHP é usada para front-end, Erlang é usada para Chat, Java e C++ são usados em diversas áreas. <a href="http://incubator.apache.org/thrift/" target="_blank">Thrift</a> é um framework cross-language desenvolvido internamente que junta todas as diferentes linguagens, permitindo que elas conversem entre si. Isso facilita enormemente o desenvolvimento cross-language no Facebook.</p>
<p>O Facebook tornou o Thrift open source e adicionou suporte a mais linguagens de programação.</p>
<h3>Varnish<a href="http://www.bitabit.eng.br/wp-content/uploads/2010/07/varnish.png"><img class="alignright size-full wp-image-1309" title="Logo do Varnish" src="http://www.bitabit.eng.br/wp-content/uploads/2010/07/varnish.png" alt="" width="200" height="54" /></a></h3>
<p>O <a href="http://varnish-cache.org/" target="_blank">Varnish</a> é um acelerador HTTP, que pode agir como um balanceador de carga e também realiza cache de conteúdo para servi-lo rapidamente.</p>
<p>O Facebook usa o Varnish para servir fotos, lidando com bilhões de requisições todos os dias. Como quase tudo que o Facebook usa, o Varnish também é open source.</p>
<p><br/></p>
<h2>Outras coisas que ajudam o Facebook a funcionar bem</h2>
<p>Foram mencionados os softwares que constituem o Facebook e o ajudam a escalar. Mas operar um sistema tão grande é uma tarefa complexa, por isso serão listadas outras coisas que ajudam o Facebook a funcionar sem problemas:</p>
<h3>Lançamento gradual de novas funcionalidades e execuções no escuro</h3>
<p>O Facebook tem um sistema chamado de &#8220;<em>Gatekeeper</em>&#8221; (porteiro) que permite que eles rodem diferentes versões do sistema para diferentes conjuntos de usuários. Ele permite que o Facebook lance novas funcionalidades gradualmente e que testes A/B sejam realizados com usuários.</p>
<p>O &#8220;<em>Gatekeeper</em>&#8221; também é responsável por realizar o que é chamado de &#8220;<em>dark launches</em>&#8221; (lançamentos no escuro), que é a ativação de elementos de uma nova funcionalidade antes de ela ir pro ar. É uma maneira de realizar testes de carga do sistema antes de uma funcionalidade ser oficialmente lançada. Normalmente os &#8220;<em>dark launches</em>&#8221; são realizados duas semanas antes do lançamento oficial da funcionalidade.</p>
<h3>Monitoramento do sistema em produção</h3>
<p>O Facebook cuidadosamente monitora seu sistema e o desempenho de cada função PHP executada em ambiente de produção. Com isso é possível projetar um perfil do sistema que está no ar com a ajuda de uma ferramenta chamada <a href="http://pecl.php.net/package/xhprof" target="_blank">XHProf</a> e identificar gargá-los ou áreas que estão operando incorretamente.</p>
<h3>Desativação gradual de recursos para aumento de desempenho</h3>
<p>Se o Facebook tiver algum problema de desempenho, existe um grande número de recursos não-críticos que podem ser desativados para aumentar o desempenho de funcionalidades vitais da rede social. Desta forma, em uma situação de emergência, o núcleo da rede social poderá continuar funcionando normalmente.</p>
<h3>Coisas que não foram mencionadas</h3>
<p>O hardware usado pelo Facebook não entrou em discussão neste artigo, mas é um aspecto importante de analisar quando se pensa em escalabilidade. Por exemplo, o Facebook usa a rede CDN para servir conteúdo estático e possui enormes <em>data centers</em> que hospedam milhares de servidores.</p>
<p>E além do que foi mencionado, existem diversos outros softwares envolvidos na operação do Facebook. Neste artigo foram destacadas as escolhas mais interessantes que o Facebook fez.</p>
<p><br/></p>
<h2>Facebook e projetos open source</h2>
<p>Antes de encerrar o artigo, é importante mencionar o quanto o Facebook, assim como outras grandes empresas de Internet, apoia projetos open source. O Facebook não apenas usa e contribui com software open source como Linux, Memcached, MySQL e Hadoop, como também desenvolve internamente diversas ferramentas que são disponibilizadas como projetos open source.</p>
<p>Uma lista com todos os projetos  open source em que o Facebook atua pode ser encontrada na página <a href="http://facebook.com/opensource" target="_blank"><em>Open Source &#8211; Desenvolvedores do Facebook</em></a>.</p>
<p><br/></p>
<h2>Mais desafios de escalabilidade por vir</h2>
<p>O Facebook cresce a passos incríveis. Sua base de usuários aumenta quase que exponencialmente e já superou <strong>500 milhões de usuários</strong>. Ele tem mantido uma taxa de cerca de <strong>100 milhões de novos usuários a cada 6 meses</strong>.</p>
<p>O rápido crescimento significa que o Facebook vai ter problemas e diversos desafios de desempenho para apresentar cada vez mais páginas, buscas, imagens, mensagens e todos os outros recursos com os quais os usuários interagem. Para um site como o Facebook, este sempre será um fato com o qual ele terá que viver, e seus engenheiros estarão sempre atentos e criando novas maneiras de fazer o sistema escalar.</p>
<p>Vamos acompanhar o que os engenheiros do Facebook estão desenvolvendo! Com certeza surgirão coisas interessantes, afinal de contas, eles estão escalando uma montanha que muitos de nós podemos apenas sonhar; um site com mais pessoas do que a maioria dos países. Quando isso acontece, é preciso ser criativo.</p>
<p><br/><br />
Este artigo é uma adaptação/atualização para o português do artigo em inglês <a href="http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/" target="_blank"><em>Exploring the software behind Facebook, the world&#8217;s largest site</em></a>.<br />
<br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1263&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/07/28/explorando-o-software-por-tras-do-facebook-a-maior-rede-social-do-mundo/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Captura de páginas com Nokogiri</title>
		<link>http://www.bitabit.eng.br/2010/06/29/captura-de-paginas-com-nokogiri/</link>
		<comments>http://www.bitabit.eng.br/2010/06/29/captura-de-paginas-com-nokogiri/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 03:00:51 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Busca]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[libxml2]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[nokogiri]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[screen scraping]]></category>
		<category><![CDATA[sistemas operacionais]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1217</guid>
		<description><![CDATA[Neste artigo, vou explicar de forma prática como utilizar a biblioteca Nokogiri com a linguagem de programação Ruby para extrair informações de páginas na Internet. O exemplo que vai guiar este artigo é a criação de um aplicativo que extrai o preço de um produto qualquer do site da Fast Shop. Ele será usado para [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo, vou explicar de forma  prática como utilizar a biblioteca <a href="http://nokogiri.org/">Nokogiri</a> com a linguagem de programação <a href="http://www.ruby-lang.org/pt/">Ruby</a> para extrair informações de páginas na Internet.</p>
<p>O exemplo que vai guiar este artigo é a criação de um aplicativo que extrai o preço de um produto qualquer do site da Fast Shop. Ele será usado para encontrarmos o preço do <a href="http://www.fastshop.com.br/MACBOOK-WHITE-COM-INTEL-CORE-2-DUO--2GB--HD-250GB--TELA-133--PLACA-GRAFICA-NVIDIA-GEFORCE-320M-COM-256MB--SISTEMA-OPERACIONAL-MAC-OS-X-LEOPARD---APPLE---MC516BZA,product,AEMC516BZA,3.aspx">MacBook White</a>.</p>
<p><br/></p>
<h2>1. Instalando Ruby + RubyGems</h2>
<p>Se você usa <strong>Windows</strong>, baixe e instale a última versão estável do interpretador Ruby  <a href="http://www.ruby-lang.org/pt/downloads/">clicando aqui</a>.</p>
<p>Se você usa <strong>Mac OS X</strong>, <strong>Solaris</strong> ou uma distro <strong>linux</strong> popular, seu sistema já vem com Ruby instalado.</p>
<p>RubyGems é um gerenciador de pacotes (programas e bibliotecas) para Ruby. Para instalá-lo, baixe a última versão do aplicativo <a href="http://rubyforge.org/frs/?group_id=126" target="_blank">clicando aqui</a> e execute o comando abaixo no diretório com o arquivo descompactado:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ruby setup.rb
gem update <span style="color: #660033;">--system</span></pre></div></div>

<p><br/></p>
<h2>2. Instalando Nokogiri</h2>
<p><strong>Mac OS X</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> port <span style="color: #c20cb9; font-weight: bold;">install</span> libxml2 libxslt
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> nokogiri</pre></div></div>

<p><strong>Ubuntu/Debian</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># pacotes de desenvolvimento ruby</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libreadline-ruby1.8 libruby1.8 libopenssl-ruby
&nbsp;
<span style="color: #666666; font-style: italic;"># requisitos do nokogiri</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libxslt-dev libxml2-dev
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> nokogiri
&nbsp;
<span style="color: #666666; font-style: italic;"># requisitos do nokogiri para Hardy (8.04) ou uma versão mais atual</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libxslt1-dev libxml2-dev</pre></div></div>

<p><strong>Windows</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">gem <span style="color: #c20cb9; font-weight: bold;">install</span> nokogiri</pre></div></div>

<p><br/></p>
<h2>3. Baixando a página do produto</h2>
<p>O trecho de código que baixa a página do <a href="http://www.fastshop.com.br/MACBOOK-WHITE-COM-INTEL-CORE-2-DUO--2GB--HD-250GB--TELA-133--PLACA-GRAFICA-NVIDIA-GEFORCE-320M-COM-256MB--SISTEMA-OPERACIONAL-MAC-OS-X-LEOPARD---APPLE---MC516BZA,product,AEMC516BZA,3.aspx">MacBook</a> se encontra abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># url do produto</span>
url = <span style="color:#996600;">'http://www.fastshop.com.br/MACBOOK-WHITE-COM-INTEL-CORE-2-DUO--2GB--HD-250GB--TELA-133--PLACA-GRAFICA-NVIDIA-GEFORCE-320M-COM-256MB--SISTEMA-OPERACIONAL-MAC-OS-X-LEOPARD---APPLE---MC516BZA,product,AEMC516BZA,3.aspx'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># html da página</span>
html = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get</span> <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>url<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># html analisado pelo nokogiri</span>
doc = <span style="color:#6666ff; font-weight:bold;">Nokogiri::HTML</span><span style="color:#006600; font-weight:bold;">&#40;</span>html<span style="color:#006600; font-weight:bold;">&#41;</span></pre></td></tr></table></div>

<p><br/></p>
<h2>4. Extraindo o preço do produto</h2>
<p>Para extrair o preço do produto a partir do HTML baixado, vamos utilizar o plugin <a href="https://addons.mozilla.org/pt-BR/firefox/addon/1843/">Firebug</a> para analisar a estrutura do HTML. Ele permitirá que encontremos o <a href="http://www.w3.org/TR/xpath/">XPath</a> (XML Path Language) do elemento que contém o preço do produto.</p>
<p>Na captura de tela abaixo, podemos ver como isso é feito:</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2010/06/fastshop-firebug.png"><img class="size-large wp-image-1245" title="Análise de produto na FastShop com Firebug" src="http://www.bitabit.eng.br/wp-content/uploads/2010/06/fastshop-firebug.png" alt="" width="768" height="480" /></a></p>
<p>Verificamos que a seguinte estrutura de nós de HTML guarda o preço do produto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>div <span style="color: #007800;">id</span>=<span style="color: #ff0000;">&quot;boxInfosPagamento&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span>
   <span style="color: #000000; font-weight: bold;">&lt;</span>p <span style="color: #007800;">class</span>=<span style="color: #ff0000;">&quot;preco&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;</span>span<span style="color: #000000; font-weight: bold;">&gt;</span>PRECO DO PRODUTO<span style="color: #000000; font-weight: bold;">&lt;/</span>span<span style="color: #000000; font-weight: bold;">&gt;</span>
   <span style="color: #000000; font-weight: bold;">&lt;/</span>p<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">&lt;/</span>div<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Podemos traduzir essa estrutura para o seguinte XPath:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#996600;">&quot;//div[@id='boxInfosPagamento']/p[@class='preco']/span&quot;</span></pre></div></div>

<p><br/></p>
<h2>5. Aplicativo final</h2>
<p>O aplicativo final que imprime o preço do produto pode ser visto abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># importando bibliotecas necessárias:</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;rubygems&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;nokogiri&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;net/http&quot;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># url do produto</span>
url = <span style="color:#996600;">'http://www.fastshop.com.br/MACBOOK-WHITE-COM-INTEL-CORE-2-DUO--2GB--HD-250GB--TELA-133--PLACA-GRAFICA-NVIDIA-GEFORCE-320M-COM-256MB--SISTEMA-OPERACIONAL-MAC-OS-X-LEOPARD---APPLE---MC516BZA,product,AEMC516BZA,3.aspx'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># html da página</span>
html = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get</span> <span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span>url<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># html analisado pelo nokogiri</span>
doc = <span style="color:#6666ff; font-weight:bold;">Nokogiri::HTML</span><span style="color:#006600; font-weight:bold;">&#40;</span>html<span style="color:#006600; font-weight:bold;">&#41;</span>
doc.<span style="color:#9900CC;">encoding</span> = <span style="color:#996600;">'utf-8'</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># preço do produto</span>
<span style="color:#CC0066; font-weight:bold;">puts</span> doc.<span style="color:#9900CC;">xpath</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;//div[@id='boxInfosPagamento']/p[@class='preco']/span&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">inner_html</span></pre></td></tr></table></div>

<p>A captura de tela abaixo mostra a execução do aplicativo:</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2010/06/execucao-fastshop.png"><img class="aligncenter size-full wp-image-1246" title="Execução do aplicativo que extrai preço da FastShop" src="http://www.bitabit.eng.br/wp-content/uploads/2010/06/execucao-fastshop.png" alt="" width="745" height="559" /></a></p>
<p><br/></p>
<h2>6. Conclusões</h2>
<p>Nokogiri é uma biblioteca muito robusta que suporta seleção de elementos com XPath ou seletor CSS3 de forma simples e eficiente. Sempre que precisar analisar XML ou HTML, considere usá-la em seu projeto.</p>
<p>Em artigos futuros vou falar mais sobre extração e análise de informações da Internet. Se tiver alguma dúvida ou sugestão de tema, deixe seu comentário!<br />
<br/><br/><br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1217&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/06/29/captura-de-paginas-com-nokogiri/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>10 Tecnologias Quentes para 2010</title>
		<link>http://www.bitabit.eng.br/2009/11/22/10-tecnologias-quentes-para-2010/</link>
		<comments>http://www.bitabit.eng.br/2009/11/22/10-tecnologias-quentes-para-2010/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 00:02:38 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Avaliações]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[123people]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android market]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[bing]]></category>
		<category><![CDATA[busca]]></category>
		<category><![CDATA[chrome os]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[e-book]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google apps]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[iphone killer]]></category>
		<category><![CDATA[itunes store]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[microsoft research]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[nook]]></category>
		<category><![CDATA[nuvem]]></category>
		<category><![CDATA[office online]]></category>
		<category><![CDATA[oipaggo]]></category>
		<category><![CDATA[ovi]]></category>
		<category><![CDATA[pagamento móvel]]></category>
		<category><![CDATA[photosynth]]></category>
		<category><![CDATA[salesforce]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[sistemas operacionais]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[sony reader]]></category>
		<category><![CDATA[swirl]]></category>
		<category><![CDATA[tecnologias]]></category>
		<category><![CDATA[tineye]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[wave]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=794</guid>
		<description><![CDATA[Vou citar 10 tecnologias ou produtos que acredito que vão dar muito o que falar em 2010. Muitas tecnologias já existem e estão crescendo muito, mas acredito que 2010 será o ano de consolidação delas. Não concorda comigo? Tem algo a acrescentar? Deixe seu comentário. 1. Iphone Killer O celular que vai matar o Iphone [...]]]></description>
			<content:encoded><![CDATA[<p>Vou citar 10 tecnologias ou produtos que acredito que vão dar muito o que falar em 2010.</p>
<p>Muitas tecnologias já existem e estão crescendo muito, mas acredito que 2010 será o ano de consolidação delas.</p>
<p>Não concorda comigo? Tem algo a acrescentar? Deixe seu <a href="#comment">comentário</a>.</p>
<p><br/><br/><br />
<img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/android_logo1-150x150.gif" alt="Iphone Killer: Android" title="Iphone Killer: Android" width="150" height="150" class="alignleft size-thumbnail wp-image-836" /></p>
<h2>1. Iphone Killer</h2>
<p>O celular que vai matar o Iphone</p>
<ul>
<li><a href="http://www.android.com/">Android</a></li>
<li><a href="http://maemo.nokia.com/">Nokia Maemo</a></li>
<li><a href="http://www.apple.com/iphone/">Outro celular da Apple</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/sf-logo-trans-new-copy-150x124.png" alt="SalesForce - Computação nas Nuvens - Sem Software" title="SalesForce - Computação nas Nuvens - Sem Software" width="150" height="124" class="alignleft size-thumbnail wp-image-834" /></p>
<h2>2. Computação na Nuvem (<i>Cloud Computing</i>)</h2>
<p>Infraestrutura para rodar software na Internet</p>
<ul>
<li><a href="http://www.salesforce.com/platform/">Plataforma Force.com</a></li>
<li><a href="http://appengine.google.com/">Google App Engine</a></li>
<li><a href="http://aws.amazon.com/">Amazon Web Services</a></li>
<li><a href="http://www.microsoft.com/windowsazure/">Windows Azure</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/dropbox-150x150.png" alt="Dropbox" title="Dropbox" width="150" height="150" class="alignleft size-thumbnail wp-image-841" /></p>
<h2>3. Aplicativos na Nuvem (<i>Cloud Computing</i>)</h2>
<p>Softwares que rodam na Internet</p>
<ul>
<li><a href="http://www.dropbox.com/">Dropbox</a></li>
<li><a href="http://wave.google.com/">Google Wave</a></li>
<li><a href="http://www.google.com/apps/">Google Apps</a></li>
<li><a href="http://office.microsoft.com/office_live/">Microsoft Office Online</a></li>
<li><a href="http://www.salesforce.com/">SalesForce</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/facebook4-150x150.png" alt="facebook" title="facebook" width="150" height="150" class="alignleft size-thumbnail wp-image-860" /></p>
<h2>4. Busca Social (<i>Busca de Perfis</i>)</h2>
<p>Encontre tudo sobre qualquer pessoa</p>
<ul>
<li><a href="http://www.facebook.com/find-friends/?ref=pf">Busca de Amigos (<i>Facebook</i>)</a></li>
<li><a href="http://www.123people.com/">123people</a></li>
<li><a href="http://www.google.com.br/profiles?q=rafael">Busca de Perfis (<i>Google</i>)</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/windows7-150x150.png" alt="windows7" title="windows7" width="150" height="150" class="alignleft size-thumbnail wp-image-863" /></p>
<h2>5. Sistemas Operacionais Leves</h2>
<p>Quanto mais leve, mais rápido</p>
<ul>
<li><a href="http://www.microsoft.com/brasil/windows7/">Windows 7</a></li>
<li><a href="http://www.apple.com/br/macosx/">Snow Leopard</a></li>
<li><a href="http://www.ubuntu-br.org/">Ubuntu</a></li>
<li><a href="http://www.chromium.org/chromium-os">Chrome OS</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/kindle-150x150.png" alt="E-Book Reader: Amazon Kindle" title="E-Book Reader: Amazon Kindle" width="150" height="150" class="alignleft size-thumbnail wp-image-867" /></p>
<h2>6. Leitor de Livros (<i>E-book Reader</i>)</h2>
<p>Mais de mil livros no bolso. E você pode fazer busca neles!</p>
<ul>
<li><a href="http://www.amazon.com/kindle/">Kindle (<i>Amazon</i>)</a></li>
<li><a href="http://www.barnesandnoble.com/nook/">nook (<i>Barnes &#038; Noble</i>)</a></li>
<li><a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/CategoryDisplay?catalogId=10551&#038;storeId=10151&#038;langId=-1&#038;categoryId=8198552921644523779">Sony Reader</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/twitter-150x150.png" alt="Busca em Tempo Real: twitter" title="Busca em Tempo Real: twitter" width="150" height="150" class="alignleft size-thumbnail wp-image-872" /></p>
<h2>7. Busca em Tempo Real</h2>
<p>Encontrar conteúdos em tempo real já é possível. Mas como ordená-los por relevância?</p>
<ul>
<li><a href="http://www.twitter.com/">Twitter</a></li>
<li><a href="http://meme.yahoo.com/">Meme (<i>Yahoo</i>)</a></li>
<li><a href="http://www.bing.com/">Bing</a></li>
<li><a href="http://www.google.com/">Google</a></li>
<li><a href="http://www.facebook.com/">Facebook</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/oipago-150x150.png" alt="Pagamento Móvel: Oi Paggo" title="Pagamento Móvel: Oi Paggo" width="150" height="150" class="alignleft size-thumbnail wp-image-876" /></p>
<h2>8. Pagamento com Celular (<i>Mobile Payment</i>)</h2>
<p>Pague suas compras com um SMS</p>
<ul>
<li><a href="http://www.oipaggo.com.br/">Oi Paggo</a> (<i>Rio Grande do Sul</i>)</li>
</ul>
<p><br/><br/><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/photosynth-150x150.png" alt="Busca de Imagens: photosynth" title="Busca de Imagens: photosynth" width="150" height="150" class="alignleft size-thumbnail wp-image-879" /></p>
<h2>9. Busca de Imagens</h2>
<p>Encontrar imagens através de outras imagens? Rostos? Imagens para colorir?</p>
<ul>
<li><a href="http://www.photosynth.net/">Photosynth</a></li>
<li><a href="http://www.tineye.com/">TinEye</a></li>
<li><a href="http://image-swirl.googlelabs.com/">Image Swirl</a></li>
<li><a href="http://www.bing.com.br/images">Bing Imagens</a></li>
<li><a href="http://images.google.com.br/">Google Imagens</a></li>
</ul>
<p><br/><br/><br/></p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/iphone-app-store-150x150.png" alt="Loja de Aplicativos: Iphone App Store" title="Loja de Aplicativos: Iphone App Store" width="150" height="150" class="alignleft size-thumbnail wp-image-884" /></p>
<h2>10. Loja de Aplicativos (<i>Apps Store</i>)</h2>
<p>Milhares de aplicativos desenvolvidos por terceiros que melhoram o uso de um produto</p>
<ul>
<li><a href="http://www.apple.com/br/iphone/apps-for-iphone/">App Store (<i>Iphone</i>)</a></li>
<li><a href="http://store.ovi.com/">Ovi Store (<i>Nokia</i>)</a></li>
<li><a href="http://www.android.com/market/">Android Market</a></li>
<li><a href="http://apps.facebook.com/apps/directory.php">Diretório de Aplicativos (<i>Facebook</i>)</a></li>
<li><a href="http://www.apple.com/itunes/whats-on/#apps">Itunes Store</a></li>
</ul>
<p><br/><br/><br/></p>
<h2>Comente&#8230;</h2>
<p><br/><br/><br/></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=794&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2009/11/22/10-tecnologias-quentes-para-2010/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>A Natureza de uma Linguagem de Programação</title>
		<link>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/</link>
		<comments>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:00:42 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Compilador]]></category>
		<category><![CDATA[Earlang]]></category>
		<category><![CDATA[Interpretador]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[linguagem de programação]]></category>
		<category><![CDATA[linguagem dinâmica]]></category>
		<category><![CDATA[linguagem estática]]></category>
		<category><![CDATA[linguagem fortemente tipada]]></category>
		<category><![CDATA[linguagem fracamente tipada]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Pascal]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=718</guid>
		<description><![CDATA[Uma linguagem de programação é uma linguagem que possui sintaxe (formato) e semântica (significado), e é usada para expressar uma sequência de ações computacionais que formam um programa. Existem milhares de linguagens de programação e novas linguagens surgem frequentemente, trazendo novos paradigmas e estabelecendo novos padrões para programadores. Por isso, é importante conhecer as diferenças [...]]]></description>
			<content:encoded><![CDATA[<p>Uma linguagem de programação é uma linguagem que possui sintaxe (formato) e semântica (significado), e é usada para expressar uma sequência de ações computacionais que formam um programa.</p>
<p>Existem milhares de linguagens de programação e novas linguagens surgem frequentemente, trazendo novos paradigmas e estabelecendo novos padrões para programadores. Por isso, é importante conhecer as diferenças principais entre as linguagens e quando o uso de cada uma delas é mais adequado.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-732" title="Linguagens de Programação" src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/Computer-Languages.png" alt="Linguagens de Programação" width="560" height="560" /></p>
<p>Para explorar as diferenças entre elas, serão discutidos os seguintes assuntos: o que são tipos de sistema estáticos ou dinâmicos, o que são linguagens fortemente ou fracamente tipadas e quais são os modos de execução de um programa (código executável compilado ou interpretação de código fonte).</p>
<h2><strong>Tipo estático ou dinâmico</strong></h2>
<p>As linguagens de programação podem ser classificadas de acordo com o tipo de sistema que elas usam. O tipo de sistema define como são os métodos e as variáveis da linguagem.</p>
<p>Em uma linguagem de <strong>tipo estático</strong>, o compilador deve conhecer o tipo de uma variável ou método antes da execução do programa (por isso, o tipo de uma variável normalmente é explicitamente declarado). Em uma linguagem de <strong>tipo dinâmico</strong>, o tipo de uma variável ou método é desconhecido até a execução do programa.</p>
<p>Exemplo prático de declaração de uma variável inteira com valor 10:</p>
<p>Java <em>(Tipo estático)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">int</span> a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ruby <em>(Tipo dinâmico)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">a = <span style="color:#006666;">10</span></pre></div></div>

<p>Exemplos de linguagens de tipo estático: <strong>Java</strong>, <strong>Pascal</strong>, <strong>C</strong>, <strong>C#</strong> e <strong>C++</strong>.<br />
Exemplos de linguagens de tipo dinâmico: <strong>Python</strong>, <strong>Javascript</strong>, <strong>Perl</strong> e <strong>Ruby</strong>.</p>
<h2>Fortemente ou fracamente tipada</h2>
<blockquote><p>Um objeto é determinado pelo que ele pode fazer e não pelo seu tipo.</p>
<p><em>(tipo fraco)</em></p></blockquote>
<p>Um conceito que muita gente confunde com tipo dinâmico ou estático é se uma linguagem é fortemente ou fracamente tipada.</p>
<p>A definição de fortemente ou fracamente tipada tem relação com quão profundamente um sistema verifica as operações que podem ser feitas sobre uma estrutura de dados.</p>
<p>Em linguagens fortemente tipadas, as operações são aplicadas para estruturas de dados bem definidas e cada operação define os tipos de dados que deve receber. Em linguagens fracamente tipadas, as operações são aplicadas para qualquer estrutura de dados; porém, essas operações podem falhar em tempo de execução caso a estrutura não suporte a operação.</p>
<p>Em uma linguagem fortemente tipada o sistema tem garantias sobre o comportamento do programa. Em uma linguagem fracamente tipada, essa garantia não existe porque uma estrutura de dados pode receber novas funcionalidades em tempo de execução.</p>
<p>Exemplo de uma função que realiza a soma de dois números, um inteiro e um ponto flutuante, e devolve um resultado em ponto flutuante:</p>
<p>Java <em>(Fortemente tipada)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">float</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> a, <span style="color: #000066; font-weight: bold;">int</span> b<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> a <span style="color: #339933;">+</span> b<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ruby <em>(Fracamente tipada)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> soma <span style="color:#006600; font-weight:bold;">&#40;</span>a, b<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0000FF; font-weight:bold;">return</span> a <span style="color:#006600; font-weight:bold;">+</span> b
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Em Java, os tipos de dados que a operação soma suporta estão bem definidos (<strong>a</strong> é float e <strong>b</strong> é int) e o tipo de dado que a operação devolve também (<strong>resultado</strong> é float).</p>
<p>Em Ruby, a função soma pode receber quaisquer tipos de dados para <strong>a</strong> e <strong>b</strong>, e a operação será aplicada sobre esses tipos, devolvendo um resultado de tipo desconhecido:</p>
<ul>
<li>se <strong>a</strong> e <strong>b</strong> forem String, o resultado será uma String concatenada de <strong>a</strong> e <strong>b</strong>;</li>
<li>se <strong>a</strong> e <strong>b</strong> forem inteiros, o resultado será um inteiro que representa a soma <strong>a</strong>+<strong>b</strong>;</li>
<li>se <strong>a</strong> for um float e <strong>b</strong> um inteiro, o resultado será um float que representa a soma <strong>a</strong>+<strong>b</strong>.</li>
</ul>
<p>Vale a pena observar que em linguagens fracamente tipadas, a possibilidade de erros em tempo de execução é muito maior. Por isso, é muito recomendável o uso de testes para verificar erros antes de colocar um sistema em produção.</p>
<p>Exemplos de linguagens fortemente tipadas: <strong>Java</strong>, <strong>Pascal</strong>, <strong>C</strong> e <strong>C++</strong>.<br />
Exemplos de linguagens fracamente tipadas: <strong>Perl</strong> e <strong>Ruby</strong>.</p>
<h2>Linguagens compiladas ou de script</h2>
<p>Outro modo de classificar uma linguagem é se ela precisa de um passo de compilação antes de executar. Se ela precisa deste passo, ela é chamada de linguagem compilada. Senão, é chamada de linguagem de script.</p>
<p>Um <strong>compilador</strong> de uma linguagem compilada gera um código executável a partir do código fonte escrito pelo programador. O código executável não possui o conteúdo do código fonte, portanto programas de linguagens compiladas são melhores de distribuir quando o programador não quer que seu código seja público.</p>
<p>Uma linguagem de script normalmente não necessita de um passo específico de compilação para executar um programa. O código fonte escrito pelo programador pode ser executado diretamente por um <strong>intepretador</strong>. Esse interpretador lê trechos do código fonte em tempo de execução, converte em um formato que o computador consegue ler (compilação em tempo de execução) e realiza sua execução.</p>
<p>Linguagens de script costumam ter performance inferior a linguagens compiladas pois exigem mais passos para rodar um programa em tempo de execução. Porém, elas são muito mais produtivas, pois eliminam a necessidade de compilar o código fonte toda vez que uma alteração é feita.</p>
<p>Quem já mexeu no código fonte de uma aplicação web sabe como é muito melhor trabalhar com linguagem interpretada: você faz uma alteração no código, salva e pode verificá-la de imediato.</p>
<p>Quando usa uma linguagem compilada, como Java, você tem que compilar o código fonte (que pode levar um tempo considerável, dependendo do sistema), fazer o upload do código para o servidor web e só então verificar a alteração.</p>
<p>Exemplos de linguagens compiladas: <strong>Java</strong>, <strong>C</strong>, <strong>C++</strong> e <strong>C#</strong>.<br />
Exemplos de linguagens de script: <strong>PHP</strong>, <strong>Perl</strong>, <strong>Python</strong> e <strong>Ruby</strong>.</p>
<h2>Considerações finais</h2>
<p>Este artigo apresenta conceitos básicos sobre linguagens de programação que podem ser decisivos para a escolha de uma.</p>
<p>Para ambientes corporativos, em que uma das exigências principais é a estabilidade e performance do sistema, uma linguagem de tipo estático, fortemente tipada e compilada, como Java, é uma boa escolha.</p>
<p>Para uma aplicação que sofre muitas alterações e que exige alta performance (como por exemplo o Twitter), uma combinação de linguagens de script e compiladas é uma boa escolha. Por exemplo, combinar Ruby ou Python com C, ou usar uma linguagem que suporta tanto interpretação quanto compilação, como Scala.</p>
<p>Para cada situação existe um tipo de linguagem de programação mais adequada. O ideal é não ficar preso aos mesmos paradigmas e nunca achar que a linguagem de programação preferida é a melhor para resolver qualquer problema.</p>
<p>Deixo a dica de um amigo meu, <a href="http://twitter.com/emiyake">Edmar Miyake</a>, para ficar atualizado com os novos paradigmas de programação: estudar uma nova linguagem de programação por ano.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=718&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

