<?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; open source</title>
	<atom:link href="http://www.bitabit.eng.br/tags/open-source/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>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>Instalando o OpenCV 1.1 no Ubuntu 8.10, 9.04 e 9.10</title>
		<link>http://www.bitabit.eng.br/2010/02/17/instalando-o-opencv-1-1-no-ubuntu-8-10-9-04-e-9-10/</link>
		<comments>http://www.bitabit.eng.br/2010/02/17/instalando-o-opencv-1-1-no-ubuntu-8-10-9-04-e-9-10/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 15:06:31 +0000</pubDate>
		<dc:creator>Filipe M. S. de Campos, Coop10</dc:creator>
				<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Outros]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[Ctypes OpenCV]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[visão computacional]]></category>
		<category><![CDATA[wrapper]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=966</guid>
		<description><![CDATA[Logo do OpenCV Neste post irei dividir com você as experiências que já tive com a instalação da bibliteca OpenCV no Ubuntu. Vou relatar o processo de instalação do OpenCV 1.1 nas versões 8.10, 9.04 e 9.10 do Ubuntu. Apesar do OpenCV ser tipicamente utilizado com C ou C++, também é possível utilizá-lo com Python (ou Octave) graças [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_976" class="wp-caption alignright" style="width: 190px"><br />
<img class="size-medium wp-image-976 " title="OpenCV logo" src="http://www.bitabit.eng.br/wp-content/uploads/2010/02/opencv_logo-300x277.gif" alt="Logo do OpenCV" width="180" height="166" /><p class="wp-caption-text">Logo do OpenCV</p></div>
<p>Neste <em>post</em> irei dividir com você as experiências que já tive com a instalação da bibliteca <a title="OpenCV Wiki" href="http://opencv.willowgarage.com/wiki/" target="_blank">OpenCV</a> no Ubuntu. Vou relatar o processo de instalação do <a title="OpenCV11 - Download" href="http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/1.1pre1/opencv-1.1pre1.tar.gz/download" target="_blank">OpenCV 1.1</a> nas versões 8.10, 9.04 e 9.10 do Ubuntu.</p>
<p>Apesar do OpenCV ser tipicamente utilizado com C ou C++, também é possível utilizá-lo com Python (ou Octave) graças aos wrappers criados por <a title="Ctypes OpenCV" href="http://code.google.com/p/ctypes-opencv/" target="_blank">terceiros</a> ou ao que já acompanha a versão 1.1 da biblioteca.  Neste texto, focarei a instalação para o uso de Python com o wrapper <a title="Ctypes OpnCV" href="http://code.google.com/p/ctypes-opencv/" target="_blank">Ctypes OpenCV</a>.  Por que o Ctypes OpenCV? Pois o que acompanha a biblioteca me &#8220;deixou na mão&#8221; durante o desenvolvimento do último projeto.</p>
<p><span style="color: #ffffff;">.<br />
</span></p>
<h2><span style="color: #ffffff;"><strong><span style="color: #000000;">Passo zero:</span></strong></span></h2>
<p>(vale para todos as três versões do Ubuntu)</p>
<ul>
<li>O OpenCV, funciona com Python, apenas para as versões 2.5.x ou 2.6.x da linguagem. A versão 3.x ainda não tem suporte oficial. Logo, verifique se você possui ele instalado em seu computador, caso contrário, instale o Python 2.6.4.</li>
<li>Mais umas coisinhas a serem instaladas. Digite no terminal (Aplicativos -&gt; Acessórios -&gt; Terminal) o comando abaixo. Sim, são várias coisas. Algumas são realmente requisitos para a instalação, outras servem apenas para diminuirmos chances de problemas depois. Instale, não dói nada <img src='http://www.bitabit.eng.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev
libavformat-dev libavfilter-dev libswscale-dev libtiff-dev libjasper libgstreamer0.10-dev
libxine-dev libunicap-dev libdc1394-22-dev swig ffmpeg mplayer vlc </pre>
<ul>
<li> Baixe o <a title="OpenCV - Download" href="http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/1.1pre1/opencv-1.1pre1.tar.gz/download" target="_blank">OpenCV 1.1</a>, o <a title="Ctypes OpenCV - Download" href="http://ctypes-opencv.googlecode.com/files/ctypes-opencv-0.8.0-src.7z" target="_blank">Ctypes-OpenCV</a> e os <a title="Ctypes OpenCV - Exemplos" href="http://ctypes-opencv.googlecode.com/files/ctypes-opencv-0.8.0-demo.7z" target="_self">exemplos de códigos</a> do Ctypes OpenCV, você vai querer testar e consultar depois.</li>
</ul>
<p><span style="color: #ffffff;">.</span></p>
<h2>Ubuntu 8.10:</h2>
<p>Nesta versão do Ubuntu, a instalação é bem simples e funciona bem. <img src='http://www.bitabit.eng.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   Basta seguir os passos abaixo:</p>
<ul>
<li>Após o passo zero, no início desse <em>post</em>, descomprima o OpenCV e, pelo terminal,  entre na pasta criada. Se ela estiver em seu desktop, será algo próximo a:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> cd Desktop/opencv-1.1.0 </pre>
<ul>
<li>Agora, digite:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> ./configure --disable-sse2 --with-python --with-swig --with-ffmpeg </pre>
<p>Obs.: Para processadores antigos, como o AMD de uns quase dez anos atrás que usei no laboratório, era necessários desativar instruções do tipo <a title="Instruções SSE2" href="http://en.wikipedia.org/wiki/SSE2" target="_blank">SSE2</a>, caso contrário, ao rodar algum programa que usasse o OpenCV você obteria a mensagem: Illegal instruction. Eu não expliquei isso antes de você escrever o comando pois obtive problemas com os wrappers de python caso não desativasse esse tipo de instrução no Ubuntu 9.04 e 9.10, imagino que na versão 8.10 isso também ocorra apesar de não ter testado. Então, se você irá usar o OpenCV com C ou C++, não existe necessidade do &#8211;disable-sse2, caso contrário, é melhor desativar esse tipo de instrução.</p>
<ul>
<li>Agora preste atenção ao pequeno relatório que apareceu em seu terminal. Verifique, principalmente, se o python e o ffmpeg estão com &#8220;<em>yes</em>&#8220;. Seu relatório deve se parecer bastante como o da figura abaixo:</li>
</ul>
<div id="attachment_977" class="wp-caption aligncenter" style="width: 450px"><img class="size-full wp-image-977  " title="Relatório do configure" src="http://www.bitabit.eng.br/wp-content/uploads/2010/02/saida-do-configure-OK.png" alt="Relatório do configure com as opções corretamente marcadas." width="440" height="389" /><p class="wp-caption-text">Figura 1 - Relatório do configure com as opções corretamente marcadas.</p></div>
<p>Caso o Python ou o ffmpeg não tenham aparecido com o &#8220;<em>yes</em>&#8220;, tente as soluções mostradas nas outras versões do Ubuntu que estão abaixo.</p>
<ul>
<li>Agora, digite:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> make </pre>
<ul>
<li>Depois que terminar, digite:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> sudo make install </pre>
<h3>Será que funcionou? Vamos testar.</h3>
<p>O OpenCV acompanha alguns programas exemplo, tanto em C quanto em Python, para você testar a instalação e aprender a usar a biblioteca.  Siga os passos abaixo.</p>
<ul>
<li>Se sua pasta do OpenCV estiver no desktop, digite:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> cd Desktop/opencv-1.1.0/samples/c </pre>
<ul>
<li>Agora compile os exemplos com:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> . build_all.sh </pre>
<ul>
<li>Agora rode um dos programas:</li>
</ul>
<pre class="brush: plain; light: true; title: ; notranslate"> ./delaunay </pre>
<p>Se surgiu uma nova janela e &#8220;coisas coloridas&#8221; estão aparecendo nela, a biblioteca foi instalada com sucesso.</p>
<h3>Instalando o Ctypes OpenCV</h3>
<p>Será bem simples. Descomprima o arquivo que você ja baixou no passo zero para o desktop e, pelo terminal, entre na pasta <em>src</em>. Após isso, digite:</p>
<pre class="brush: plain; light: true; title: ; notranslate"> sudo python setup.py install </pre>
<p>Depois de instalado, veja os exemplos que você também baixou do Ctypes OpenCV no passo zero. Dê duplo clique em algum deles, por exemplo o delaunay.py. Ou então rode via terminal com o comando</p>
<pre class="brush: plain; light: true; title: ; notranslate"> python delaunay.py </pre>
<p><span style="color: #ffffff;">.</span></p>
<h2>Ubuntu 9.04:</h2>
<p>Nessa versão do Ubuntu as coisas já não são mais tão simples. Apesar do processo de instalação ser o mesmo da versão 8.10, surgem alguns problemas no meio do caminho.</p>
<p><strong>Primeiro problema</strong>:  O Python não é reconhecido ao rodar o <em>configure</em>.</p>
<p>Se você rodar o <em>configure</em>, verá que no relatório que ele exibe aparece &#8220;<em>no</em>&#8221; para o Python. Se você verficar melhor a saída completa verá:</p>
<div id="attachment_1010" class="wp-caption aligncenter" style="width: 745px"><img class="size-full wp-image-1010" title="Problema com o Python" src="http://www.bitabit.eng.br/wp-content/uploads/2010/02/problema-com-o-python.png" alt="Figura 2 - Problema com o Python" width="735" height="260" /><p class="wp-caption-text">Figura 2 - Problema com o Python</p></div>
<p><strong>Resolução</strong>:  Provavelmente deve existir uma solução melhor, mas esta funcionou para mim. Baixei o <em>source</em> do <a title="Python 2.6.4 - Download" href="http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tgz" target="_blank">Python 2.6.4</a>, compilei e reinstalei via terminal, da seguinte forma:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
./configure
make
sudo make install
</pre>
<p>Obs.: Se seu computador não possuir suporta a instruções SSE2, utilize para o primeiro comando: ./configure &#8211;diable-sse2</p>
<p><span style="color: #ffffff;">.</span></p>
<p><strong>Segundo problema</strong>:  O ffmpeg não é reconhecido ao rodar o <em>configure</em>. Resultado, não é possível manipular vídeos com a biblioteca.</p>
<p>Se você rodar o <em>configure</em>, verá que é exibido &#8220;<em>no</em>&#8220; para o ffmpeg no relatório. Se você verficar melhor a saída completa verá:</p>
<div id="attachment_1011" class="wp-caption aligncenter" style="width: 401px"><img class="size-full wp-image-1011" title="Problema com o ffmpeg" src="http://www.bitabit.eng.br/wp-content/uploads/2010/02/problema-com-o-ffmpeg.png" alt="Figura 3 - Problema com o ffmpeg" width="391" height="88" /><p class="wp-caption-text">Figura 3 - Problema com o ffmpeg</p></div>
<p><strong>Resolução</strong>: Basta seguir os passos abaixo em seu terminal:</p>
<pre class="brush: plain; light: true; title: ; notranslate">
sudo mkdir /usr/include/ffmpeg
cd /usr/include/ffmpeg
sudo ln -s ../libavcodec/avcodec.h avcodec.h
sudo ln -s ../libavformat/avformat.h avformat.h
sudo ln -s ../libavformat/avio.h avio.h
sudo ln -s ../libavutil/avutil.h avutil.h
sudo ln -s ../libswscale/swscale.h swscale.h
</pre>
<p>Com os problemas resolvidos, e o passo zero realizado, siga o procedimento básico da instalação.</p>
<pre class="brush: plain; light: true; title: ; notranslate"> ./configure --disable-sse2 --with-python --with-swig --with-ffmpeg --enable-swscale --enable-shared </pre>
<p>Antes dos próximos comandos, não esqueça de verificar no relatório do <em>configure</em> se o python e o ffmpeg estão com &#8220;<em>yes</em>&#8220;. Seu relatório deve se parecer bastante como o da Figura 1 desse <em>post</em>.</p>
<pre class="brush: plain; light: true; title: ; notranslate">
make
sudo make install
</pre>
<p>Ao terminar, teste e instale o Ctypes OpenCV para programar com Python. Para isso, siga as instruções dos tópicos &#8220;<strong>Será que funcionou? Vamos testar.</strong>&#8221; e &#8220;<strong>Instalando o Ctypes Opencv</strong>&#8221; que estão na instalação para o Ubuntu 8.10, acima neste mesmo <em>post.</em></p>
<p><span style="color: #ffffff;">.</span></p>
<h2 style="font-size: 1.5em;">Ubuntu 9.10:</h2>
<p>Nessa versão, existe mais um problema além dos já existentes para o Ubuntu 9.04.</p>
<p><strong>Problema</strong>: Erro durante a compilação do código.</p>
<p><strong>Resolução</strong>: Entre na pasta que você descomprimiu o OpenCV1.1, vá em <em>cxcore</em>, <em>include</em> e abra o arquivo <em>cxmisc.h</em>. Na linha 133, troque o</p>
<pre class="brush: plain; light: true; title: ; notranslate">#elif</pre>
<p>por:</p>
<pre class="brush: plain; light: true; title: ; notranslate">#else</pre>
<p>Para completar a instalação, basta seguir o texto acima sobre a instalação no Ubuntu 9.04.</p>
<p><span style="color: #ffffff;">.</span></p>
<p><span style="color: #ffffff;">.</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=966&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/02/17/instalando-o-opencv-1-1-no-ubuntu-8-10-9-04-e-9-10/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

