<?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</title>
	<atom:link href="http://www.bitabit.eng.br/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>Mon, 14 May 2012 18:12:10 +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>Conectividade IPv6 em casa – Parte 2</title>
		<link>http://www.bitabit.eng.br/2012/05/13/conectividade-ipv6-em-casa-%e2%80%93-parte-2/</link>
		<comments>http://www.bitabit.eng.br/2012/05/13/conectividade-ipv6-em-casa-%e2%80%93-parte-2/#comments</comments>
		<pubDate>Sun, 13 May 2012 07:53:13 +0000</pubDate>
		<dc:creator>Hernan Martinez, Comp08</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2498</guid>
		<description><![CDATA[Olá pessoal.  Como eu havia prometido (a mais de um ano atrás ) e também porque o dia mundial de lançamento do IPv6 está logo aí (dia 6 de junho) resolvi escrever a segunda parte do tutorial de Conectividade IPv6 em Casa. Ao término deste tutorial, todos os demais dispositivos da sua rede em casa [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1851" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/ipv6.png" alt="" width="162" height="113" /><br />
Olá pessoal.  Como eu havia prometido (a mais de um ano atrás <img src='http://www.bitabit.eng.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) e também porque o dia mundial de lançamento do <a title="IPv6" href="http://www.worldipv6launch.org/" target="_blank">IPv6</a> está logo aí (dia 6 de junho) resolvi escrever a segunda parte do tutorial de Conectividade IPv6 em Casa.</p>
<p>Ao término deste tutorial, todos os demais dispositivos da sua rede em casa que possuam suporte ao IPv6 conseguirão conectar-se à internet via IPv6.</p>
<p>Após seguir o tutorial da <a title="Parte 1" href="http://www.bitabit.eng.br/2011/02/03/conectividade-ipv6-em-casa-%E2%80%93-parte-1/" target="_blank">Parte 1</a> você já deve  possuir umas das duas configurações abaixo:</p>
<ul>
<li>Com roteador doméstico + NAT:<a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/conf1.png"><img class="aligncenter size-full wp-image-2502" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/conf1.png" alt="" width="697" height="300" /></a></li>
</ul>
<ul>
<li>Computador direto na internet com IPv4 público Global Unicast:</li>
</ul>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/conf2.png"><img class="aligncenter size-full wp-image-2503" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/conf2.png" alt="" width="719" height="257" /></a></p>
<h2>Sub rede com ips válidos na internet IPv6</h2>
<p>Até alguns meses atrás, após conseguir o túnel pelo site do projeto SIXXS, era necessário manter o túnel ativo por uma semana para conseguir  realizar o pedido de alocação de subrede . Porém hoje, todos os usuários que possuem um túnel já possuem também um prefixo de subrede /64 alocado.<br />
Faça o seguinte:</p>
<ol>
<li>Entre no site do projeto SIXXS no endereço <a title="SixXS" href="www.sixxs.net">www.sixxs.net</a> e faça o login no link <a href="http://www.sixxs.net/home/">Login for Existing Users</a>.</li>
<li>Na tela de configurações onde são exibidos os dados do usuário e os túneis haverá também uma tabela com as subredes. Verifique se o prefixo de subrede está ativado, caso contrário, clique no ID da subrede e ative o mesmo.</li>
</ol>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/sixxs.png"><img class="aligncenter size-full wp-image-2507" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/sixxs.png" alt="" width="1090" height="111" /></a></p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/subnet.png"><img class="aligncenter size-full wp-image-2508" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/subnet.png" alt="" width="983" height="145" /></a></p>
<p>Pronto. Agora o PoP anuncia a rota na Internet IPv6 dizendo que a sua subrede, por exemplo, 2001:1291:200:8123::/64 é acessível pelo roteador cujo IP é o IPv6 do túnel: 2001:1291:200:123::2.</p>
<p>Anote o <strong>Subnet Prefix</strong> da sua subrede pois será necessário na configuração do computador como roteador.</p>
<h2>Detalhes do IPv6</h2>
<p>Antes de configurar o Windows para funcionar como um roteador IPv6 é interessante conhecer uma parte do funcionamento do IPv6.</p>
<p>O IPv6 não implementa broadcast, logo não existe no IPv6 o equivalente a mandar um pacote para o endereço 192.168.1.255 sendo que todos os computadores da sub rede 192.168.1.xxx irão receber o pacote. No IPv6 a funcionalidade do broadcast é feita com multicast.</p>
<p>Mas, para o multicast funcionar as placas de rede devem possuir um endereço IP já atribuído e realizar o join no IP do grupo multicast. Sendo assim como funciona, por exemplo, o DHCPv6 já que não existe broadcast? E o ARP? Para responder isto basta você verificar que todas as suas placas de rede, mesmo antes de começar o tutorial na Parte 1, já possuíam um endereço IP começando com fe80::.</p>
<p>O IPv6 define que os 64 bits mais significativos são usados  para definir as redes e os 64 bits menos significativos sejam usados para definir os hosts. Isto mesmo, a recomendação é que para cada usuário final seja fornecido um prefixo IP com 64 bits sobrando para usar nos dispositivos em casa, logo na sua casa você poderá ter 2^64 dispositivos com IPs diferentes todos com IPs reais da internet.</p>
<h2>Endereços Link-Local</h2>
<p>Todo dispositivo IPv6 possui um endereço IP automaticamente gerado assim que o driver IPv6 é ativado na interface e este endereço IP sempre pertence à rede<a title="Link-Local Unicast Addresses" href="http://en.wikipedia.org/wiki/IPv6_address#Unicast_Addresses" target="_blank"> fe80::/10</a>.<br />
A geração automática dos 64 bits menos significativos é feita automaticamente. Mas como garantir que não haja conflito? A resposta é se basear em algo que já esteja garantido em não conflitar.  Se você pensou no endereço da camada de enlace você acertou. O MAC-Address é utilizado na geração automática dos 64 bits menos significativos dos IPs automáticos das placas de rede, porém o MAC-Address possui apenas 48 bits e para gerar 64 bits a partir dele segue-se a receita do padrão <a title="IPv6 interface identifiers" href="http://technet.microsoft.com/en-US/library/cc736439(v=ws.10).aspx" target="_blank">EUI-64</a> que insere os 16 bits 0xFFFE no meio dos 48 bits e inverte o 7º bit mais significativo do valor final.</p>
<div id="attachment_2505" class="wp-caption aligncenter" style="width: 683px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/linklocal.png"><img class="size-full wp-image-2505 " src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/linklocal.png" alt="" width="673" height="95" /></a><p class="wp-caption-text">IPv6 Link-Local gerado automaticamente</p></div>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/12/Information-Icon1.png"><img class="alignleft size-full wp-image-2527" src="http://www.bitabit.eng.br/wp-content/uploads/2012/12/Information-Icon1.png" alt="" width="24" height="24" /></a> Alguns SOs não seguem o padrão EUI-64 para evitar que possa inferido facilmente o MAC Address da interface.</p>
<p>Assim, se você possui outros dispositivos IPv6 na sua rede local e se já compartilhava arquivos pelos compartilhamento do Windows, você já estava usando IPv6.:</p>
<div id="attachment_2506" class="wp-caption aligncenter" style="width: 639px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/localping.png"><img class="size-full wp-image-2506" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/localping.png" alt="" width="629" height="239" /></a><p class="wp-caption-text">Ping de resposta de um computador na rede do Windows</p></div>
<h2>Grupo multicast <em>all-nodes</em></h2>
<p>Agora com todas as placas de rede com endereços IPv6 automaticamente gerados todas elas automaticamente assim que são ativadas realizam o join no <a href="http://en.wikipedia.org/wiki/Multicast_address#IPv6" target="_blank">grupo multicast all-nodes</a> que representa “todos os dispositivos da camada de enlace”. A implementação do IPv6 definiu este grupo multicast com o endereço ff02::1. Assim, para realizar o equivalente ao broadcast do IPv4 basta enviar um pacote para o grupo multicast ff02::1.</p>
<p>Porém todos estes endereços IPv6 da subrede fe80::/10 são apenas endereços locais que servem para comunicação na rede local e não são endereços válidos na internet . Para os computadores acessarem a internet é necessário um roteador e que as placas de redes todas possuam um endereço válido. A implementação do IPv6 inclui um mecanismo feito para facilitar a configuração de redes IPv6 simples como é o cenário doméstico e que não utiliza necessariamente o bom e velho DHCP.</p>
<h2>Router Advertisements</h2>
<p>Após ingressar no grupo multicast os dispositivos enviam um pacote ICMPv6 do tipo Router Solicitation para o grupo multicast all-routers, ff02::2, e os roteadores que estiverem configurados respodem com o pacote Router Advertisement que informa o seu endereço IPv6 e qual o prefixo dos 64 bits superiores que a placa de rede deve usar para a autoconfiguração. Este funcionamento difere do DHCP pois não há a necessidade de configurar no roteador um intervalo de IPs.</p>
<p>Com o 64 bits superiores  a placa de rede gera os 64 bits inferiores usando o padrão EUI-64 e registra o endereço IPv6 do roteador que respondeu com o Router Advertisement como gateway para a internet. Assim a placa de rede conterá dois IPs. Um endereço link-local e um endereço real.</p>
<div id="attachment_2504" class="wp-caption aligncenter" style="width: 674px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/05/globalunicast.png"><img class="size-full wp-image-2504" src="http://www.bitabit.eng.br/wp-content/uploads/2012/05/globalunicast.png" alt="" width="664" height="110" /></a><p class="wp-caption-text">IPv6 após a resposta do gateway com Router Advertisement</p></div>
<p>O mecanismo acima descrito é chamado de <a href="http://en.wikipedia.org/wiki/IPv6#Stateless_address_autoconfiguration_.28SLAAC.29" target="_blank">Stateless Address Autoconfiguration</a> em contraste com o uso do DHCPv6 para alocação de endereços IPv6 que é chamado de Stateful Configuration.</p>
<p>Se você quiser aprender mais sobre o IPv6 principalmente com relação ao serviços que usam o grupo multicast Link-Local recomendo o mini curso de IPv6 em flash do site <a title="Curso IPv6" href="http://curso.ipv6.br/elearning/" target="_blank">www.ipv6.br</a>. É extremamante didático e o capítulo <a title="Serviços Básicos do IPv6" href="http://curso.ipv6.br/elearning/ipv6_mod6.htm" target="_blank">Serviços Básicos do IPv6</a> foca nos pacotes ICMPv6 usados, por exemplo, no Router Advertisement e Router Solicitation.</p>
<h2>Configurando o Windows 7/Vista para funcionar como um gateway IPv6</h2>
<p>Basta agora configurar o Windows para encaminhar pacotes e respoder à pacotes Router Solicitation. Tenha em mãos o seu Subnet Prefix e o nome da conexão local usada para comunicar com os outros computadores da rede interna, por exemplo, &#8220;Conexão Local 1&#8243; ou &#8220;Local Connection 2&#8243;.  Abra o Prompt de Comando <strong>como Administrador</strong> e digite :</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">1) netsh interface ipv6 add route [Seu Subnet Prefix]/64 [Nome da conexão local] publish=yes</span></p>
<p>Isto irá definir um endereço IPv6 real com o seu prefixo alocado pelo PoP  à sua placa de rede.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">2) netsh interface ipv6 set interface [Adaptador virtual do túnel] forwarding=enabled</span></p>
<p>Isto irá ativar o encaminhamento de pacotes no adaptador de rede virtual do túnel 6in4.</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">3) netsh interface ipv6 set interface [Nome da conexão local] forwarding=enabled advertise=enabled</span><br />
Irá ativar o envio de Router Advertisements na rede local.</p>
<p>Exemplo com os dados do início do post:</p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">1) netsh interface ipv6 add route 2001:1291:200:8123::/64 &#8220;Conexão local 1&#8243; publish=yes</span></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">2) netsh interface ipv6 set interface &#8220;sixxs&#8221; forwarding=enabled</span></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace;line-height: 18px;font-size: 12px">3) netsh interface ipv6 set interface &#8220;Conexão local 1&#8243; forwarding=enabled advertise=enabled</span></p>
<p>Pronto. Agora todos os dispositivos da sua rede doméstica terão endereços IPv6 reais da internet. Vá em outro computador e tente rodar o comando</p>
<p><code>ping ipv6.google.com</code></p>
<p>ou usando o seu celular via wi-fi na sua rede local navege para o site <a href="http://test-ipv6.com">test-ipv6.com</a>. Os celulares com Android já possuem suporte ao IPv6 via wi-fi.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2498&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/05/13/conectividade-ipv6-em-casa-%e2%80%93-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ativando o PHP no Mac OS X</title>
		<link>http://www.bitabit.eng.br/2012/04/02/ativando-o-php-no-mac-os-x/</link>
		<comments>http://www.bitabit.eng.br/2012/04/02/ativando-o-php-no-mac-os-x/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 13:00:51 +0000</pubDate>
		<dc:creator>Eduardo Russo, Coop10</dc:creator>
				<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2482</guid>
		<description><![CDATA[Todo Mac vem de fábrica com Apache e PHP instalados. Porém, de fábrica, você só consegue executar PHP pelo terminal, mas não consegue fazer o PHP cumprir seu objetivo de vida… criar aplicações web. Isso ocorre porque, apesar do seu Mac ter as duas coisas necessárias funcionando, o PHP está desativado no Apache (o que [...]]]></description>
			<content:encoded><![CDATA[<p>Todo Mac vem de fábrica com <a title="Apache HTTP Server" href="http://pt.wikipedia.org/wiki/Apache_HTTP_Server" target="_blank">Apache</a> e <a title="PHP" href="http://pt.wikipedia.org/wiki/PHP" target="_blank">PHP</a> instalados. Porém, de fábrica, você só consegue executar PHP pelo terminal, mas <a title="Moisés não consegue!" href="http://www.youtube.com/watch?v=mpXShHdQGcQ" target="_blank">não consegue</a> fazer o PHP <a title="PHP serve pra fazer site, porra!" href="http://pt.wikipedia.org/wiki/PHP#Principais_caracter.C3.ADsticas" target="_blank">cumprir seu objetivo de vida</a>… criar aplicações web.</p>
<p style="text-align: center;"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/03/apache-osx-php.png"><img class="aligncenter size-full wp-image-2487" title="apache-osx-php" src="http://www.bitabit.eng.br/wp-content/uploads/2012/03/apache-osx-php.png" alt="" width="408" height="121" /></a></p>
<p>Isso ocorre porque, apesar do seu Mac ter as duas coisas necessárias funcionando, o PHP está desativado no Apache (o que me faz questionar o sentido da vida). Reverter isso, porém, é muito simples, basta seguir esses poucos passos.</p>
<h2>Editando o httpd.conf</h2>
<p>O arquivo httpd.conf é o arquivo com as configurações do Apache, todos os tipos de serviço que ele roda e, &#8220;até&#8221; a configuração de ativar o PHP.</p>
<p>Abra o <strong>Terminal</strong> (pelo Spotligh ou similar, ou pelo caminho /Applications/Utilities/Terminal.app) e digite (você pode substituir o <strong>nano</strong> pelo seu editor preferido, como o TextMate) :</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">sudo nano /etc/apache2/httpd.conf</pre></div></div>

<p>Com o arquivo aberto, procure pela seguinte linha (é a 111 se você nunca tocou nesse arquivo e está no Lion):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>111
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">#LoadModule php5_module libexec/apache2/libphp5.so</pre></td></tr></table></div>

<p>Tudo que você precisa fazer agora é <em>&#8220;descomentá-la&#8221;</em>, <strong>removendo a <a title="Sim, chama cerquilha!" href="http://pt.wikipedia.org/wiki/Cerquilha">cerquilha (#)</a></strong> e salvando o arquivo.</p>
<h2>Reiniciando o Apache</h2>
<p>Você pode iniciar/reiniciar o Apache indo nas <strong>Preferências</strong> e, em <strong>Compartilhamento</strong>, e ativando <strong>Compart. Web</strong>.</p>
<p style="text-align: center;">&nbsp;</p>
<div id="attachment_2488" class="wp-caption aligncenter" style="width: 479px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/03/configuracoes-compartilhamento.png"><img class="size-full wp-image-2488 " title="configuracoes-compartilhamento" src="http://www.bitabit.eng.br/wp-content/uploads/2012/03/configuracoes-compartilhamento.png" alt="" width="469" height="397" /></a><p class="wp-caption-text">Se estiver ativado, desative e ative de novo!</p></div>
<h2>Testando</h2>
<p>Para ver se está tudo ok, crie o arquivo &#8220;index.php&#8221; e coloque-o na pasta <strong>Sites</strong> do seu usuário.</p>
<p>Neste arquivo, insira o seguinte texto:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">phpinfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>O resultado deve ser uma página gigante, com todas as informações da sua instalação PHP, similar à da imagem abaixo.</p>
<div id="attachment_2489" class="wp-caption aligncenter" style="width: 621px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/03/phpinfo.png"><img class="size-full wp-image-2489" title="phpinfo" src="http://www.bitabit.eng.br/wp-content/uploads/2012/03/phpinfo.png" alt="" width="611" height="693" /></a><p class="wp-caption-text">&quot;Pouca&quot; informação…</p></div>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2482&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/04/02/ativando-o-php-no-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como criei meu primeiro Plugin para WordPress</title>
		<link>http://www.bitabit.eng.br/2012/02/20/como-criei-meu-primeiro-plugin-para-wordpress/</link>
		<comments>http://www.bitabit.eng.br/2012/02/20/como-criei-meu-primeiro-plugin-para-wordpress/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 12:00:14 +0000</pubDate>
		<dc:creator>Eduardo Russo, Coop10</dc:creator>
				<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Outros]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[like box]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2453</guid>
		<description><![CDATA[Desenvolvendo o blog do Universo, resolvemos colocar um Facebook Like Box para incentivar o acesso à nossa Fan Page do Facebook. A ideia era colocar um Widget (para quem nunca tocou no Admin do WordPress, Widget é tudo que fica aí, do lado direito… os &#8220;artigos populares&#8221;, os &#8220;últimos comentários&#8221; etc.). Fiz uma rápida pesquisa [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/Painel-de-Widgets.png"><img class="alignright size-full wp-image-2455" title="Painel-de-Widgets" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/Painel-de-Widgets.png" alt="" width="124" height="168" /></a>Desenvolvendo o <a title="Blog do Universo" href="http://blog.universo.mobi" target="_blank">blog do Universo</a>, resolvemos colocar um <a title="Facebook Like Box" href="http://developers.facebook.com/docs/reference/plugins/like-box/" target="_blank">Facebook Like Box</a> para incentivar o acesso à nossa Fan Page do Facebook. A ideia era colocar um Widget (para quem nunca tocou no Admin do WordPress, Widget é tudo que fica aí, do lado direito… os &#8220;artigos populares&#8221;, os &#8220;últimos comentários&#8221; etc.).</p>
<p>Fiz uma rápida pesquisa e acabei instalando dois para testar. <a title="Facebook Like Box" href="http://wordpress.org/extend/plugins/facebook-like-box/" target="_blank">Um deles achei decente</a>, com configurações dentro do próprio painel dos Widgets, <a title="RA-FB Like Box" href="http://wordpress.org/extend/plugins/ra-fb-like-box/screenshots/" target="_blank">o outro, não</a> pois as configurações ficavam em um outro lugar e ele criava um novo item no já gigante painel de administração do WordPress. Não bom!</p>
<div id="attachment_2454" class="wp-caption aligncenter" style="width: 175px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/nao-gosto.jpg"><img class="size-full wp-image-2454" title="nao gosto" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/nao-gosto.jpg" alt="" width="165" height="241" /></a><p class="wp-caption-text">Não preciso de mais um painel principal!</p></div>
<p>Decidi então ficar com o primeiro, já que ele me parecia mais dentro dos padrões de uso que estou acostumado.</p>
<h2>Testando o Plugin de base</h2>
<p>Configurei o Plugin, fui ver como estava ficando e encontrei o primeiro problema, o título. O comportamento padrão dos Widgets é não mostrar nada se você escolher não colocar um título. Não foi o caso desse Plugin. Ao não por um título, ele simplesmente veio em branco, mas a barra de título do tema estava lá, estragando tudo.</p>
<p>Pra completar, não conseguia trocar a cor da borda e, pra piorar, como a versão pequena do logo do <a title="Universo" href="http://portal.universo.mobi" target="_blank">Universo</a> tem a forma de gota e o Facebook não curte <a title="PNG" href="pt.wikipedia.org/wiki/PNG" target="_blank">PNG</a>, o fundinho azul deixava o logo com aquela marca branca maldita!</p>
<p>Foi então que comecei a colocar a mão no código, apenas com o objetivo de corrigir esses probleminhas.</p>
<h2>Deixando bonito</h2>
<p>Depois de estudar um pouco o código original, percebi que ele estava usando uma API antiga do Facebook e que, com ela, eu não ia conseguir deixar do jeito que eu queria.</p>
<div id="attachment_2462" class="wp-caption aligncenter" style="width: 270px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/barrinha-maldita-1.png"><img class="size-full wp-image-2462" title="barrinha-maldita-1" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/barrinha-maldita-1.png" alt="" width="260" height="395" /></a><p class="wp-caption-text">Barrinha maldita! Bordinha maldita! Fundinho azul maldito!</p></div>
<p>Comecei a cavocar e alterar o código, fiz um monte de <a title="POG" href="desciclopedia.ws/wiki/Programação_Orientada_a_Gambiarras">POG</a> pra ir vendo como ficava e acabei tendo o resultado que eu esperava, com bordinha arredondada, colado num dos cantos, fundo branco etc.</p>
<div id="attachment_2460" class="wp-caption aligncenter" style="width: 270px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/ai-sim.png"><img class="size-full wp-image-2460" title="ai-sim" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/ai-sim.png" alt="" width="260" height="352" /></a><p class="wp-caption-text">Isso sim é encaixe!</p></div>
<p>Aí, chegou o momento da verdade. O Diabinho gritando: &#8220;Tá ótimo, parte pra próxima!&#8221;. O Anjinho gritando: &#8220;Tá tosco, meu filho! Funciona, mas ninguém nunca mais vai conseguir arrumar isso de maneira fácil. Faz direito!&#8221;. Sim, o Anjinho é prolixo.</p>
<h2>Transformando o POG em Plugin</h2>
<p>Resolvi ouvir o Anjinho e percebi que a coisa era relativamente simples. Um Plugin de WP se resume a basicamente a formulário, Widget e registro junto ao WordPress.</p>
<p>O Widget já estava funcionando via POG, bastava transformar tudo que estava <a title="Hard Coding" href="http://en.wikipedia.org/wiki/Hard_coding" target="_blank">hard coded</a> em utilização de parâmetros.</p>
<p>O registro do Plugin junto ao WordPress já tinha vindo junto do código original… não havia muito a ser feito.</p>
<p>O formulário é que deu um pouco mais de trabalho, já que resolvi que ia usar um outro componente (text area) que não existia no formulário orginal (nele, só tinha text box e check box).</p>
<p>Já que resolvi escrever um post sobre o assunto, vou comentar tudo que foi feito, com um pouquinho de código pra vocês… seus geeks! O código fonte completo pode ser baixado na própria <a title="Styled Facebook Like Box" href="http://wordpress.org/extend/plugins/styled-facebook-like-box/" target="_blank">página do Plugin &#8220;Styled Facebook Like Box&#8221;</a>.</p>
<h1>Metendo a mão no código</h1>
<h2>Parâmetros</h2>
<p>A primeira coisa que comecei a alterar, já que a API nova do Facebook era um pouco diferente, foi a lista de parâmetros utilizados no form.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Widget title:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Facebook'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'widefat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'The title before your widget'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'profile_url'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'FanPage URL:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'http://facebook.com/universo.mobi'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'widefat'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Your Facebook Fan Page URL'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'width'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Width:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'300'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'(Value in px)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'height'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Height:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'550'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'3'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'(Value in px)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'border_color'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Border color:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'#000'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'(#E1E4E6, white)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'background_color'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Background color:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'#FFF'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'(#E123F0, blue)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'faces'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show faces:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span>true<span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show profile photos'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'stream'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show stream:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span>false<span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show profile stream'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show header:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'checkbox'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span>false<span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'size'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Show default Facebook header'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'style_code'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Style code:'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'type'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'textarea'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'default'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'-moz-border-radius: 10px; border-radius: 10px; -webkit-border-radius:10px;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'class'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rows'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'6'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'cols'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'31'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'help'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'margin-left: -40px; border-radius: 10px;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Não sei se essa é uma forma normal de declarar os parâmetros de Widgets, mas achei bem interessante relativamente fácil de manejar. Tudo que tive que fazer foi alterar os arrays para os parâmetros que ia usar, acrescentar um novo tipo (textarea, na linha 22) e colocar uns <em>helps</em> decentes.</p>
<h2>O Widget propriamente dito</h2>
<p>O Widget propriamente dito foi o que realmente fez a diferença, já que antes eu não tinha controle de como o ele ficava na tela.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Output the widget in the sidebar</span>
<span style="color: #000000; font-weight: bold;">function</span> styled_facebook_like_box<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #000088;">$profile_url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$faces</span><span style="color: #339933;">,</span> <span style="color: #000088;">$border_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$background_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$stream</span><span style="color: #339933;">,</span> <span style="color: #000088;">$header</span><span style="color: #339933;">,</span> <span style="color: #000088;">$style_code</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//Insert Facebook default JavaScript</span>
 	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;div id='fb-root'&gt;&lt;/div&gt;
		&lt;script&gt;(function(d, s, id) {
 		var js, fjs = d.getElementsByTagName(s)[0];
 		if (d.getElementById(id)) return;
 		js = d.createElement(s); js.id = id;
 		js.src = '//connect.facebook.net/pt_BR/all.js#xfbml=1';
		fjs.parentNode.insertBefore(js, fjs);
		}(document, 'script', 'facebook-jssdk'));&lt;/script&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//Insert the styled Like Box</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;div class='fb-like-box' data-href='<span style="color: #006699; font-weight: bold;">$profile_url</span>' data-width='<span style="color: #006699; font-weight: bold;">$width</span>' data-height='<span style="color: #006699; font-weight: bold;">$height</span>' data-show-faces='<span style="color: #006699; font-weight: bold;">$faces</span>' data-border-color='<span style="color: #006699; font-weight: bold;">$border_color</span>' data-stream='<span style="color: #006699; font-weight: bold;">$stream</span>' data-header='<span style="color: #006699; font-weight: bold;">$header</span>' style='background-color:<span style="color: #006699; font-weight: bold;">$background_color</span>;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$style_code</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$style_code</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;'&gt;&lt;/div&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dessa forma, na linha 27 eu joguei o JavaScript da <a title="Like Box no Facebook" href="http://developers.facebook.com/docs/reference/plugins/like-box/" target="_blank">página de desenvolvimento do Facebook</a> (que eles recomendam que eu jogue no início do Body do HTML, mas eu não tinha ideia de como fazer isso via plugin) e na linha 37 a DIV que será preenchida pelo Facebook.</p>
<p>Repare que na linha 38 eu coloco um campo como opcional, que é exatamente a textarea do formulário. So nada for colocado nela, esse trecho é desconsiderado.</p>
<p>O código do  Plugin tem uma <em>funçãozona</em> com outras dentro. Entre elas, a do formulário e a que chama essa função (styled_facebook_like_box) que mostrei acima.</p>
<p>Aqui, segue o início dela:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> widget_styled_facebook_like_box_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'register_sidebar_widget'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$check_options</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_styled_facebook_like_box'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Show the Widget in the sidebar</span>
	<span style="color: #000000; font-weight: bold;">function</span> widget_styled_facebook_like_box<span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">extract</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_styled_facebook_like_box'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Fill options with default values if value is not set</span>
		<span style="color: #000088;">$item</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$options</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> 
&nbsp;
		<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$profile_url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'profile_url'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'width'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'height'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$faces</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'faces'</span><span style="color: #009900;">&#93;</span> ? <span style="color: #0000ff;">&quot;true&quot;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$border_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'border_color'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$background_color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'background_color'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$stream</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'stream'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">&quot;true&quot;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$header</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">&quot;true&quot;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$style_code</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'style_code'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//Remove the Wordpress Title if none was set</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$before_widget</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$before_title</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$title</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$after_title</span><span style="color: #339933;">;</span> 
&nbsp;
 	styled_facebook_like_box<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #000088;">$profile_url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$faces</span><span style="color: #339933;">,</span> <span style="color: #000088;">$border_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$background_color</span><span style="color: #339933;">,</span> <span style="color: #000088;">$stream</span><span style="color: #339933;">,</span> <span style="color: #000088;">$header</span><span style="color: #339933;">,</span> <span style="color: #000088;">$style_code</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 	<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$after_widget</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>A função widget_styled_facebook_like_box pega todos os parâmetros preenchidos no formulário e, com eles, chama a styled_facebook_like_box. Tudo que fiz aqui foi alterar os parâmetros que eram usados.</p>
<h2>O formulário</h2>
<p>Esse foi o pedaço que mais deu trabalho, exatamente porque tive a brilhante ideia de usar a textarea. Diferente de tudo que já era usado no formulário que funciona como &#8220;&lt;input type=&#8217;algum tipo…&#8221;, a text area tem uma tag que abre com ela mesma e não com um tipo, assim &#8220;&lt;textarea…&gt;alguma coisa&lt;/textarea&gt;. Então sofri um pouco para conseguir colocá-la na tela.</p>
<p>Achei a maneira de colocar criar o formulário do código que usei de base muito elegante, já que fazia tudo dentro de um <a title="Loops" href="http://en.wikipedia.org/wiki/Control_flow#Loops" target="_blank"><em>loop</em></a>, em vez de fazer na unha, então resolvi manter, apesar da dificuldade maior.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #666666; font-style: italic;">// Output the widget form</span>
	<span style="color: #000000; font-weight: bold;">function</span> widget_styled_facebook_like_box_control<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_styled_facebook_like_box'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'styled_facebook_like_box-submit'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$field_name</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'text'</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'textarea'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">stripslashes</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$field_name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$field_name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			update_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_styled_facebook_like_box'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$styled_facebook_like_box_options</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'widget_fields'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// print_r($field);</span>
			<span style="color: #000088;">$field_name</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$field_checked</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'text'</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'textarea'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$field_value</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #990000;">htmlspecialchars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">ENT_QUOTES</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">htmlspecialchars</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">ENT_QUOTES</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$field_value</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field_value</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$field_checked</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'checked=&quot;checked&quot;'</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000088;">$jump</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'checkbox'</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'&lt;br /&gt;'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">' '</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$field_class</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'class'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$field_size</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'class'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">''</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'size=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'size'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$field_help</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'help'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">''</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'&lt;small&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'help'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/small&gt;'</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">//Exclusive for textarea</span>
			<span style="color: #000088;">$field_rows</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rows'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">''</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'rows=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rows'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$field_cols</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cols'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">''</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'cols=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cols'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'textarea'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;p class='styled_facebook_like_box_field'&gt;&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;&lt;label for='<span style="color: #006699; font-weight: bold;">$field_name</span>'&gt;&quot;</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/label&gt;<span style="color: #006699; font-weight: bold;">$jump</span>&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;&lt;input id='<span style="color: #006699; font-weight: bold;">$field_name</span>' name='<span style="color: #006699; font-weight: bold;">$field_name</span>' type='&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;' value='<span style="color: #006699; font-weight: bold;">$field_value</span>' class='<span style="color: #006699; font-weight: bold;">$field_class</span>' <span style="color: #006699; font-weight: bold;">$field_size</span> <span style="color: #006699; font-weight: bold;">$field_checked</span> /&gt;&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$field_help</span>&lt;/p&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
				<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;p class='styled_facebook_like_box_field'&gt;&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;&lt;label for='<span style="color: #006699; font-weight: bold;">$field_name</span>'&gt;&quot;</span> <span style="color: #339933;">.</span> __<span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'label'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/label&gt;<span style="color: #006699; font-weight: bold;">$jump</span>&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;&lt;textarea id='<span style="color: #006699; font-weight: bold;">$field_name</span>' name='<span style="color: #006699; font-weight: bold;">$field_name</span>' value='<span style="color: #006699; font-weight: bold;">$field_value</span>' class='<span style="color: #006699; font-weight: bold;">$field_class</span>' <span style="color: #006699; font-weight: bold;">$field_rows</span> <span style="color: #006699; font-weight: bold;">$field_cols</span>&gt;<span style="color: #006699; font-weight: bold;">$field_value</span>&lt;/textarea&gt;&quot;</span><span style="color: #339933;">.</span>
						<span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$field_help</span>&lt;/p&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;input type=&quot;hidden&quot; id=&quot;styled_facebook_like_box-submit&quot; name=&quot;styled_facebook_like_box-submit&quot; value=&quot;1&quot; /&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Basicamente, tive que acrescentar as linhas 122, 123 e 124, já que são parâmetros de linhas e colunas exclusivos de um textarea (foram definidos lá no começo, na linha 22) e o trecho que inicia na linha 131.</p>
<p>Com isso, o form do widget ficou assim:</p>
<div id="attachment_2475" class="wp-caption aligncenter" style="width: 281px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/form-do-Styled-Facebook-Like-Box.png"><img class="size-full wp-image-2475" title="form do Styled Facebook Like Box" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/form-do-Styled-Facebook-Like-Box.png" alt="" width="271" height="686" /></a><p class="wp-caption-text">Form final do &quot;Styled Facebook Like Box&quot;</p></div>
<p>Ficou exatamente como eu queria, com os campos padrão do Widget do Facebook, mas a textarea com um campo para colocar formatações CSS.</p>
<h2>Registrando junto ao WP</h2>
<p>Finalmente, entra o código para registrar o Plugin junto ao WordPress. Esse código é o que permite que o Plugin seja reconhecido como um Widget.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>141
142
143
144
145
146
147
148
149
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #666666; font-style: italic;">// Register the widget with WordPress</span>
	<span style="color: #000000; font-weight: bold;">function</span> widget_styled_facebook_like_box_register<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Styled Facebook Like Box'</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// Register widget for use</span>
		register_sidebar_widget<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'widget_styled_facebook_like_box'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">// Register settings for use, 300x100 pixel form</span>
		register_widget_control<span style="color: #009900;">&#40;</span><span style="color: #000088;">$title</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'widget_styled_facebook_like_box_control'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	widget_styled_facebook_like_box_register<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>As únicas coisas alteradas aqui forams o nome do Plugin e os nomes das funções chamadas.</p>
<h1>Mandando tudo para o wordpress.org</h1>
<p>Depois de ter feito tudo isso e testado bastante, resolvi que esse plugin merecia mais do que ficar preso ao blog do Universo. Dei uma pesquisada e vi que era muito fácil submetê-lo à lista de Plugins do WordPress.</p>
<p>Basta entrar no site do <a title="WordPress.org" href="http://wordpress.org" target="_blank">WordPress</a> (o .org, não o .com) criar um cadastro, preencher o formulário de submissão e fazer <em>upload</em> de um .zip com seu plugin. Seu plugin deve ter alguns comentários que o descrevem, um TXT e ainda é possível colocar <em>screenshots</em>. Isso tudo é usado para a página do seu Plugin e esse texto é apresentado quando seu Plugin é instalado no WordPress.</p>
<p>Após algumas horas, recebi um email dizendo que o Plugin tinha sido aprovado e que eu já podia enviá-lo por <a title="SVN" href="http://pt.wikipedia.org/wiki/Subversion" target="_blank">SVN</a>.</p>
<p>Subi os arquivos e, quase que instantaneamente, lá ele estava. Depois de algum tempo de teste, resolvi corrigir algumas coisas, mudei a versão e subi novamente. O processo de atualização foi totalmente automático e não tive que fazer nada pra que ele mudasse da 1.0 para 1.1 e depois para a 1.2.</p>
<h1>Finalmentes</h1>
<p>Acei todo o processo bastante simples, desde o desenvolvimento (Ok, usei um outro plugin como base, mas, mesmo assim, não é nada de outro mundo)até a submissão.</p>
<p>Foi divertido e empolgante ver o plugin no ar (em 1 dia, já teve 288 instalações) e sendo usado! Me empolguei tanto, que instalei aqui no Bit a Bit!</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2453&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/02/20/como-criei-meu-primeiro-plugin-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Auto Pinner é o FaviconizeTab do Chrome!</title>
		<link>http://www.bitabit.eng.br/2012/02/13/auto-pinner-e-o-faviconizetab-do-chrome/</link>
		<comments>http://www.bitabit.eng.br/2012/02/13/auto-pinner-e-o-faviconizetab-do-chrome/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 12:00:52 +0000</pubDate>
		<dc:creator>Eduardo Russo, Coop10</dc:creator>
				<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Turmas]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[pin]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tab]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2435</guid>
		<description><![CDATA[Um dos motivos que me fez demorar de abandonar o FireFox era um pluginzinho (FaviconizeTab) que dava um &#8220;pin&#8221; em abas que eu determinava conforme uma Expressão Regular de URL. Dessa forma, deixava as coisas que acesso o dia todo fixas num canto, ocupando menos espaço que uma aba normal. Procurei muito por isso no [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-2438" title="URL Pinner ideia" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/URL-Pinner-ideia.png" alt="" width="98" height="104" /></p>
<p><span style="font-family: verdana, sans-serif;">Um dos motivos que me fez demorar de abandonar o FireFox era um <em>pluginzinho</em> (<a title="FaviconizeTab" href="https://addons.mozilla.org/pt-pt/firefox/addon/faviconizetab/" target="_blank">FaviconizeTab</a>) que dava um &#8220;pin&#8221; em abas que eu determinava conforme uma Expressão Regular de URL. Dessa forma, deixava as coisas que acesso o dia todo fixas num canto, ocupando menos espaço que uma aba normal.</span></p>
<p><span style="font-family: verdana, sans-serif;">Procurei muito por isso no Chrome e, enfim, achei!!!</span></p>
<p><span style="font-family: verdana, sans-serif;">A extensão se chama <a title="URL Pinner" href="https://chrome.google.com/webstore/detail/lchefjdnocignejmkklgakfmnjhiimjh?utm_source=chrome-ntp-icon" target="_blank">URL Pinner</a> e funciona praticamente da mesma forma que minha velha conhecida. Basta escolher qual RegEx você quer &#8220;Auto Pinar&#8221;, salvar e pronto!</span></p>
<p style="text-align: center;"><span style="font-family: verdana, sans-serif;"> </span></p>
<div id="attachment_2439" class="wp-caption aligncenter" style="width: 484px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/URL-Pinner-Settings.png"><img class="size-full wp-image-2439 " title="URL Pinner Settings" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/URL-Pinner-Settings.png" alt="Configurações do URL Pinner" width="474" height="449" /></a><p class="wp-caption-text">Configurações do URL Pinner</p></div>
<p><span style="font-family: verdana, sans-serif;">Feito isso, basta acessar as URLs especificadas, que elas vão para o cantinho delas! </span><span style="font-family: verdana, sans-serif;">Você pode até dizer a ordem que quer que elas fiquem (não tinha isso no que eu usava no FF) e elas se arranjam!</span></p>
<p style="text-align: center;">&nbsp;</p>
<div id="attachment_2437" class="wp-caption aligncenter" style="width: 487px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2012/02/URL-Pinner-funcionando.png"><img class="size-full wp-image-2437 " title="URL Pinner funcionando" src="http://www.bitabit.eng.br/wp-content/uploads/2012/02/URL-Pinner-funcionando.png" alt="URL Pinner em ação" width="477" height="152" /></a><p class="wp-caption-text">URL Pinner em ação</p></div>
<p><span style="font-family: verdana, sans-serif;">As teclas de atalho não funcionaram no Mac, mas, como o que mais me importava era realmente a função de automatizar o processo, nem me importei!</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2435&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/02/13/auto-pinner-e-o-faviconizetab-do-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fusion4D &#8211; Interface Natural e Imersiva para Manipulação de Objetos 3D</title>
		<link>http://www.bitabit.eng.br/2012/01/03/fusion4d/</link>
		<comments>http://www.bitabit.eng.br/2012/01/03/fusion4d/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 12:07:19 +0000</pubDate>
		<dc:creator>Roberto Sonnino, Coop10</dc:creator>
				<category><![CDATA[Coop11]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[interface humano-computador]]></category>
		<category><![CDATA[interface multimodal]]></category>
		<category><![CDATA[interface natural]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[realidade aumentada]]></category>
		<category><![CDATA[realidade virtual]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2420</guid>
		<description><![CDATA[Fusion4D é uma interface inovadora que utiliza óculos 3D e o Kinect para permitir ao usuário interagir com objetos 3D como se estivessem realmente em suas mãos, podendo movê-los, girá-los, aumentá-los, explodi-los em detalhes e até mesmo vê-los como seriam no passado e no futuro. Assim, a interface transmite ao usuário a sensação de imersão total em uma realidade [...]]]></description>
			<content:encoded><![CDATA[<p>Fusion4D é uma interface inovadora que utiliza óculos 3D e o Kinect para permitir ao usuário interagir com objetos 3D como se estivessem realmente em suas mãos, podendo movê-los, girá-los, aumentá-los, explodi-los em detalhes e até mesmo vê-los como seriam no passado e no futuro. Assim, a interface transmite ao usuário a sensação de imersão total em uma realidade aumentada.</p>
<p>Para utilizá-la é simples: o usuário só precisa usar óculos 3D, comandos de voz e as mãos para manipular os objetos. Além disso, todo o sistema usa apenas dispositivos de baixo custo, como o Kinect, e não requer o uso de monitores especiais para a exibição da imagem 3D, ficando ao alcance de todos.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/FjgHWp4PGew" frameborder="0" allowfullscreen></iframe></p>
<h2>Aplicações</h2>
<p>O Fusion4D foi desenvolvido como opção de manipulação direta para o atlas anatômico VIDA, do Laboratório de Tecnologias Interativas da Escola Politécnica (Interlab). Este atlas é destinado a aulas de anatomia que usam uma grande quantidade de modelos e órgãos reais, o que torna difícil e caro manter os laboratórios. O projeto representa uma alternativa para complementar o estudo através de peças anatômicas e livros dereferência. Existe ainda o potencial para seu uso fora do ambiente do laboratório, permitindo aos estudantes a visualização dos modelos 3D em casa ou em outras situações de ensino a distância.</p>
<p>Além da aplicação no projeto VIDA para ensino da medicina, o Fusion4D poderá ser usado para outras aplicações médicas e educacionais, bem como em jogos, publicidade, engenharia, navegação em ambientes virtuais ou telepresença, entre outras áreas.</p>
<h2>Como funciona?</h2>
<p><a href="http://www.interlab.pcs.poli.usp.br/fusion4d/index_pt.html"><img src="http://www.bitabit.eng.br/wp-content/uploads/2012/01/como_funciona.jpg" alt="Imagem ilustrativa do funcionamento do projeto Fusion4D" title="Como funciona o Fusion4D" width="500" height="300" class="alignnone size-full wp-image-2425" /></a></p>
<p>O Fusion4D utiliza imagens 3D anaglifas e um dispositivo Kinect para detecção do esqueleto e captura de voz do usuário.  O usuário interage com o sistema usando comandos de voz em inglês. Tais comandos permitem que se selecione o objeto a ser manipulado e a maneira de interagir com ele.</p>
<h3>Comandos</h3>
<p>O comando &#8220;<em>grab</em>&#8221; seleciona um objeto e permite movimentar, rotacionar ou ampliar o objeto com as mãos até que o objeto seja solto pelo comando &#8220;<em>release</em>&#8220;.</p>
<p>O comando &#8220;<em>explode</em>&#8221; permite observar o objeto 3D em detalhes; o comando &#8220;<em>show label</em>&#8220; mostra uma etiqueta descritiva do objeto manipulado, e o comando &#8220;<em>change model</em>&#8220; permite escolher outros modelos disponíveis no sistema.</p>
<p>Finalmente, o comando &#8220;<em>time</em>&#8221; permite ver como o objeto seria no passado e no futuro movimentando a linha do tempo com uma das mãos. Se o usuário precisar de ajuda sobre o sistema, o comando &#8220;<em>help</em>&#8221; mostra uma lista de comandos de voz.</p>
<p>Este projeto foi desenvolvido como trabalho de formatura pelos alunos Keila Keiko Matsumura e Roberto Sonnino, formandos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelos professores Dr. Romero Tori (orientador) e Dr. Ricardo Nakamura (coorientador), membros do Laboratório de Tecnologias Interativas da Escola Politécnica (Interlab).</p>
<p>Para mais informações do projeto e dos resultados obtidos e trabalhos futuros, acesse o site do <a title="Fusion4D" href="http://www.interlab.pcs.poli.usp.br/fusion4d/index_pt.html" target="_blank">Fusion4D</a>.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2420&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/01/03/fusion4d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Recomendação de páginas utilizando dados de amigos do Facebook</title>
		<link>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/</link>
		<comments>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 01:11:33 +0000</pubDate>
		<dc:creator>Wilson Leão Neto</dc:creator>
				<category><![CDATA[Aprendizado de máquina]]></category>
		<category><![CDATA[aprendizado de máquina]]></category>
		<category><![CDATA[filtragem colaborativa]]></category>
		<category><![CDATA[sistema de recomendação]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2401</guid>
		<description><![CDATA[Disclaimer: Este artigo tem caráter introdutório. Assim, se você já tiver um conhecimento do assunto, poderá apenas escaneá-lo.  Opiniões do que seria interessante ter como prioridade para abordagem em próximos artigos ou comentários sobre qual conteúdo ficou dúbio ou falho serão bem-vindos. Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000"><strong>Disclaimer</strong></span><span style="color: #000000">: Este artigo tem caráter introdutório. Assim, se você já tiver um conhecimento do assunto, poderá apenas escaneá-lo.  Opiniões do que seria interessante ter como prioridade para abordagem em próximos artigos ou comentários sobre qual conteúdo ficou dúbio ou falho serão bem-vindos.</span></p>
<p><span style="color: #000000">Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de saber como funciona</span><span style="color: #000000">? Pois, então, prossiga na leitura.  Em especial, abordarei o tema utilizando terminologias e dados da rede social Facebook. </span></p>
<h3>Introdução</h3>
<p><span style="color: #000000">Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de saber como funciona? Pois, então, prossiga na leitura. Em especial, abordarei o tema utilizando terminologias e dados da rede social Facebook.</span></p>
<p><span style="color: #000000">Por quê? O Facebook é uma rede social gigantesca e, provavelmente, quase todos os seus amigos possuem uma conta lá.<br />
</span></p>
<p><span style="color: #000000">Alguns sistemas, por exemplo o <a href="http://www.giveemthis.com/">GiveEmThis.com</a></span><span style="color: #000000">, propõem a utilização dos dados dos seus amigos para auxiliar a tarefa da compra de presentes. Podemos também citar a <a href="http://www.amazon.com/">Amazon</a></span><span style="color: #000000">, a qual possui iniciativa que utiliza dados sociais do Facebook para personalização de recomendações (<a href="http://mashable.com/2010/07/27/amazon-facebook-recommendations/">notícia no mashable</a>)</span><span style="color: #000000">. Hoje em dia, fala-se muito sobre sistemas de recomendação e, acredito, que você não deva passar um dia sem receber algum tipo de informação de algum sistema do gênero.</span></p>
<p><span style="color: #000000">No decorrer do artigo, apresentarei, de maneira geral, os conceitos e formas para o entendimento e desenvolvimento de um simples sistema de recomendação de páginas </span>(<span style="color: #000000"><em>likes)</em></span><span style="color: #000000"> utilizando os dados dos seus amigos do Facebook. Por simples, quero dizer não serão abordadas formas de como lidar com o fato de os dados serem esparsos; nem com o fato de estarmos mexendo com um grafo, por exemplo, podemos coletar dados do amigo do amigo do amigo; nem mesmo com fato de estarmos em um contexto social (laços de amizade). Nos restringiremos, assim, aos nossos amigos imediatos, ok? Se você entendeu pouco ou nada deste último parágrafo, não tem problema. Se tiver curiosidade, mande um e-mail. Além do mais, neste primeiro artigo, não entrarei em detalhes de como coletar os dados.</span></p>
<div id="attachment_2413" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/demo.png"><img class="size-medium wp-image-2413" src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/demo-300x240.png" alt="" width="300" height="240" /></a><p class="wp-caption-text">Recomendação de páginas (no exemplo, página da banda AC/DC) utilizando likes de amigos</p></div>
<p><span style="color: #000000">Para quem não conhece a mecânica do Facebook: através </span><span style="color: #000000">dele é possível gostar de páginas, por exemplo, um usuário pode gostar (</span><span style="color: #000000"><em>like</em></span><span style="color: #000000">) da página de uma banda de rock. Porém, não há a opção negativa, ou seja, não gostar de alguma página explicitamente (</span><span style="color: #000000"><em>dislike</em></span><span style="color: #000000">)</span><span style="color: #000000">. Estes </span><span style="color: #000000"><em>likes</em></span><span style="color: #000000"> criam links entre os usuários e as páginas e podem ser utilizados para tarefas interessantes (além da tratada aqui), por exemplo, para segmentação de mercado. Na nova versão do <a href="https://developers.facebook.com/docs/beta/">OpenGraph</a> (que atualmente está em Beta) do Facebook</span><span style="color: #000000"> , é possível executar “ações” que ligam  usuários às páginas (e outros objetos), por exemplo, a Ana </span><span style="color: #000000"><em>comprou</em></span><span style="color: #000000"> o CD do ACDC. Mas isso é tema para artigo futuro.</span></p>
<h3>Filtragem Colaborativa</h3>
<p><span style="color: #000000">Imagine, agora, uma situação em que você esteja conversando com um amigo. Você sabe que ele gosta de seriados, filmes e bandas com as quais você também </span><span style="color: #000000">se identifica, ou seja, os seus gostos são similares. Nesta conversa, ele recomenda um filme que ele gosta, mas que você não conhece. Assim, por conhecer os gostos dele, você fica curioso em assistir ao filme. Este processo se repete diariamente em nossas vidas. Agora imagine o caso em que, ao invés de um amigo, estamos lidando com um grupo de amigos, cujos gostos são conhecidos, alguns mais similares e outros menos. Como poderemos filtrar recomendações destes amigos? </span></p>
<p lang="pt-BR"><span style="color: #000000">De maneira geral, para um simples sistema de recomendação que lide com objetos e usuários, os laços de amizade não importam. Neste artigo, também iremos ignorar os laços de amizade. Mas adianto que podemos desenvolver sistemas que exploram estes laços para obtenção de melhores recomendações personalizadas.</span></p>
<p><span style="color: #000000">Podemos abordar o problema com uma técnica que é conhecida, na literatura, por filtragem colaborativa baseada em usuários (tradução livre do inglês </span><span style="color: #000000"><em>user-based collaborative filtering</em></span><span style="color: #000000">). O termo ilustra o fato de vários usuários estarem colaborando para que o sistema filtre uma recomendação para você. Neste caso, para filtrar recomendações, o sistema explora a similaridade entre usuários  utilizando as ligações entre estes e os objetos. Existe, também, o caso em que a filtragem é baseada nos objetos (</span><span style="color: #000000"><em>item-based collaborative filtering</em></span><span style="color: #000000">), no qual, o sistema explora a similaridade entre os objetos utilizando as ligações entre usuários e objetos. Detalhes, vantagens e desvantagens das duas abordagens podem ser explorados em outro artigo.</span></p>
<h3>Definição do problema e modelagem dos dados</h3>
<p><span style="color: #000000">Na definição do problema, temos como objetivo desenvolver um recomendador de gostos (possíveis novas ligações entre você e uma página recomendada) baseado em gostos de outros usuários (ligações já existentes). A partir do Facebook, podemos obter dados dos usuários (você e amigos), das páginas e das ligações entre eles.</span></p>
<p><span style="color: #000000">Esses dados podem ser representados em uma matriz, na qual as linhas representam os usuários e as colunas representam os objetos. Nas células da matriz, 1 indica que o usuário (linha) desta célula gosta</span><span style="color: #000000"><em> </em></span><span style="color: #000000">do objeto (coluna), e 0 indica que o usuário não conhece o objeto ou que não gosta deste (discutiremos isto novamente).</span></p>
<div id="attachment_2402" class="wp-caption aligncenter" style="width: 285px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/matrizDados.png"><img class="size-full wp-image-2402  " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/matrizDados.png" alt="" width="275" height="237" /></a><p class="wp-caption-text">Matriz de Dados - exemplo com 5 usuários e 5 páginas, os testes foram feitos com 5 usuários e 250 páginas</p></div>
<h3>Cálculo de similaridades</h3>
<p><span style="color: #000000">Agora, o recomendador deve quantificar as similaridades entre você e seus amigos. Por exemplo, imagine que você goste de</span><span style="color: #000000"> 5 páginas, sua amiga Ana goste de 10, que vocês gostem de 3 em comum (interseção) e que, juntando todas as páginas que você e Ana gostem, temos 12 páginas (união). Podemos expressar a similaridade entre vocês dois pela razão entre o total de páginas em comum pelo total de páginas juntas, ou seja, a quantificação da similaridade seria de 3/12 (0.25). Se você conhece notação de conjuntos, fica como exercício traduzir o para ela.</span></p>
<p lang="pt-BR"><span style="color: #000000">Existem diversas formas de calcular a similaridade entre duas entidades. No caso, o coeficiente descrito é conhecido por <a href="http://en.wikipedia.org/wiki/Jaccard_index">coeficiente de similaridade de Jaccard</a></span><span style="color: #000000">. Podemos, por exemplo, calcular esse coeficiente utilizando <a href="http://en.wikipedia.org/wiki/Euclidean_distance">distância euclidiana</a></span><span style="color: #000000">, <a href="http://en.wikipedia.org/wiki/Correlation_and_dependence">correlação de Pearson</a></span><span style="color: #000000">, entre outras formas.</span></p>
<h3>Gerando recomendações</h3>
<p lang="pt-BR"><span style="color: #000000">Agora que temos uma maneira de quantificar as similaridades entre você e os seus amigos. Podemos, por curiosidade, obter uma lista dos amigos do usuário Alvo (usuário de testes) ordenada pelo coeficiente de similaridade utilizado. O usuário criado para os testes deste artigo possui 4 amigos (visualizar matriz de dados).</span></p>
<p style="text-align: center">&nbsp;</p>
<div id="attachment_2404" class="wp-caption aligncenter" style="width: 279px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/usuarios.png"><img class="size-full wp-image-2404 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/usuarios.png" alt="" width="269" height="157" /></a><p class="wp-caption-text">Lista de amigos ordenados pelo coeficiente de similaridade (neste caso, coeficiente de Jaccard)</p></div>
<p lang="pt-BR"><span style="color: #000000">Observe os valores dos coeficientes. O valor final está no invervalo [0,1]. Os valores são baixos pois o total de elementos do conjunto de gostos derivados da união de duas pessoas é muito grande. O total de páginas que gostamos pode ser pouco comparado ao total existente (a matriz resultante da representação dos dados é esparsa). Por exemplo, Bob pode gostar de 206 páginas, enquanto você gosta de apenas 6, todas em comum com Bob. Então, o valor da similaridade calculado será baixo, mas como estamos calculando os valores em relação a você, o valor será alto para você. Para Bob, talvez este valor seja baixo mesmo, ou seja, talvez exista uma amiga Carla que goste de 30 objetos em comum com Bob, enquanto você gosta de apenas 6 (repare que o apenas é relativo). O zero do coeficiente indica que não há gostos em comum.</span></p>
<p><span style="color: #000000">Podemos, de imediato, dar uma olhada nos gostos do amigo que ficou em primeiro lugar e escolher aleatoriamente algo que não conhecemos. Mas, o recomendador pode fazer melhor. O resultado final pode ser obtido utilizando-se uma <a href="http://en.wikipedia.org/wiki/Weighted_mean">média ponderada</a></span><span style="color: #000000"> das páginas que ainda não conhecemos utilizando os coeficientes de similaridade dos nossos amigos como pesos. Os valores obtidos podem ser interpretados como a probabilidade de nós gostarmos do objeto em questão.</span></p>
<div class="wp-caption aligncenter" style="width: 543px"><a href="http://www.codecogs.com/eqnedit.php?latex=P(Like(Alvo,JN)) = \frac{\sum_{amigos} Like(amigo,JN)*sim(amigo,Alvo) }{\sum_{amigos}sim(amigo,Alvo)}" target="_blank"><img src="http://latex.codecogs.com/gif.latex?P(Like(Alvo,JN)) = \frac{\sum_{amigos} Like(amigo,JN)*sim(amigo,Alvo) }{\sum_{amigos}sim(amigo,Alvo)}" alt="" width="533" height="51" /></a><p class="wp-caption-text">Exemplo de cálculo da média ponderada para o usuário Alvo e página JovemNerd. Notações: sim(W,Z) representa o coeficiente de similaridade entre W e Z; Like(X, Y), expressa se X gosta da página Y.</p></div>
<p><span style="color: #000000">Para efetuar a média ponderada, utilizaremos tantos os 0s quanto os 1s associados a uma página.  No </span><span style="color: #000000"><em>like </em></span><span style="color: #000000">do Facebook, a escala encontrada é limitada, 0 ou 1, e nela, o valor de 0 não significa o contrário do valor 1, ou seja, 1 significa que gostamos, mas 0 pode significar que não conhecemos ou que não gostamos da página. Mesmo assim, o recomendador pode utilizar os 0s para amortizar a recomendação final. </span></p>
<p lang="pt-BR"><span style="color: #000000">Imagine que sua amiga Ana goste de uma página, que a similaridade entre vocês seja 0,1, que seu amigo Bob não goste desta página e que a similaridade entre vocês seja 0,8. Se não levarmos em consideração o 0 do Bob na média ponderada, o recomendador retornará 1 para a página em questão. Na verdade, o recomendador retornará 1 para todas as página que algum amigo seu goste e que você não conheça, pense um pouco. Se levarmos em consideração o 0 do Bob, que é muito similar a você, o recomendador amortizará o valor e retornará 0,1/0,9, aproximadamente 0,11, um valor baixo que expressa o fato de que se a Ana gosta e vocês não são tão similares, talvez você não goste mesmo.</span></p>
<p lang="pt-BR"><span style="color: #000000">Para a conta final, o recomendador calcula os coeficientes de similaridade entre você e seus amigos e armazena os valores. Então, para todos os 0s da sua linha na matriz (páginas que você não conheça), o recomendador realiza a média ponderada dos seus amigos: soma as similaridades dos amigos que gostam da página, divide pela soma total das similaridades e armazena onde encontrou o 0. Ao final, teremos valores inferidos pelo recomendador que expressam, baseando-se nos dados dos seus amigos, a probabilidade de vocês gostar das páginas que estavam com 0s.</span></p>
<p style="text-align: center">&nbsp;</p>
<div id="attachment_2405" class="wp-caption aligncenter" style="width: 280px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/paginas.png"><img class="size-full wp-image-2405 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/paginas.png" alt="" width="270" height="182" /></a><p class="wp-caption-text">As 5 primeiras páginas recomendadas. </p></div>
<div class="wp-caption aligncenter" style="width: 432px"><a href="http://www.codecogs.com/eqnedit.php?latex=P(Like(Alvo,JN)) = \frac{0,063 @plus; 0,031}{0,063 @plus; 0,031 @plus; 0,020}\approx 0,825" target="_blank"><img class=" " src="http://latex.codecogs.com/gif.latex?P(Like(Alvo,JN)) = \frac{0,063 + 0,031}{0,063 + 0,031 + 0,020}\approx 0,825" alt="" width="422" height="41" /></a><p class="wp-caption-text">Cálculo para a página JovemNerd</p></div>
<h3>Considerações</h3>
<p lang="pt-BR"><span style="color: #000000">A abordagem que utilizamos é simples o bastante para que possamos entender os conceitos envolvidos e o que acontece por debaixo dos panos. Por ser simples, não recomendo a implementação desta abordagem em produção. Ela possui alguns problemas. </span></p>
<p><span style="color: #000000">A abordagem não é escalável</span><span style="color: #000000">. Imagine que o seu sistema possua 100 usuários com 300 amigos cada, assim, o recomendador terá que fazer as contas explicadas usuário por usuário e terá que fazer novamente assim que houver alguma mudança.</span></p>
<p lang="pt-BR"><span style="color: #000000">O recomendador pode ser alvo fácil de ataques. Imagine que criemos um usuário David, fazemos amizade com o usuário que queremos atacar e fazemos com que David goste de todas as páginas que o nosso usuário alvo goste, assim, o coeficiente de similaridade será alto. Em seguida, David é programado para gostar de uma página que temos interesse que o usuário alvo goste. Pronto, o recomendador colocará esta página em uma posição alta na lista dada a similaridade entre os dois usuários.</span></p>
<p><span style="color: #000000">O que acontece com usuários que não gostaram de nada ainda? Todos os coeficientes de similaridades serão nulos pois não possuem gostos em comum com ninguém. Na literatura, este problema é conhecido como </span><span style="color: #000000"> </span><span style="color: #000000"> </span><span style="color: #000000"><em><a href="http://en.wikipedia.org/wiki/Cold_start">the cold start problem</a></em></span><span style="color: #000000">.</span></p>
<p lang="pt-BR"><span style="color: #000000">Além do mais, o recomendador em questão possui baixa serendipidade (do inglês </span><span style="color: #000080"><a href="http://en.wikipedia.org/wiki/Serendipity"><em>serendipity</em></a></span><span style="color: #000000">), talvez até nula, e, assim, caminharíamos aos poucos para um monoculturalismo. Nos próximos artigos poderemos entrar em detalhes de soluções que lidem com esses problemas.</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2401&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrando paradigmas: união da visão de negócios com a visão de TI &#8211; uma metodologia aliando BPM com SOA</title>
		<link>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/</link>
		<comments>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 16:43:35 +0000</pubDate>
		<dc:creator>vicentim.fernando</dc:creator>
				<category><![CDATA[Arquitetura de Computadores]]></category>
		<category><![CDATA[Coop11]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Aris]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[EPC]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[webMethods]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2374</guid>
		<description><![CDATA[Este post descreve o projeto de formatura desenvolvido pelos alunos Diego Francisco Billerbeck, Fernando Picelli Vicentim e Thiago Erik Petersen,  alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. Jorge Luis Risco Becerra. Tema: Metodologia de desenvolvimento de sistemas baseado nos conceitos do gerenciamento dos processos do [...]]]></description>
			<content:encoded><![CDATA[<div><em>Este post descreve o projeto de formatura desenvolvido pelos alunos Diego Francisco Billerbeck, Fernando Picelli Vicentim e Thiago Erik Petersen,  alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. Jorge Luis Risco Becerra.</em></div>
<div><em> </em></div>
<div><strong><em>Tema: Metodologia de desenvolvimento de sistemas baseado nos conceitos do gerenciamento dos processos do negócio e na arquitetura SOA</em></strong></div>
<h2></h2>
<h2>Introdução</h2>
<div>Hoje em dia, um dos maiores problemas enfrentados pelas empresas é a dificuldade de adequar os sistemas de TI às atividades do negócio (processos), de forma que os resultados obtidos com essa união muitas vezes não atendem as metas corporativas e, muito menos, o retorno sobre o investimento (ROI) esperado. Pensando nisso, o grupo desenvolveu uma metodologia baseada na integração entre Gerenciamento de processos de negócios – BPM (Business Process Management) – e Arquitetura Orientada aos Serviços – SOA (Service Oriented Architecture) – que busca atender as necessidades do negócio, altamente dinâmicas, com uma plataforma de TI altamente flexível e reutilizável e aplicou essa metodologia em um sistema para lançamentos de celulares – o <em>SmartReleasing</em>.</div>
<div id="attachment_2375" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/SmartReleasing.png"><img class="size-medium wp-image-2375" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/SmartReleasing-300x155.png" alt="" width="300" height="155" /></a><p class="wp-caption-text">Logo do Sistema</p></div>
<h2>Conceitos:</h2>
<ul>
<li>
<h3>Business Process Management (BPM)</h3>
</li>
</ul>
<p>BPM é uma prática de desenvolvimento, execução, análise de desempenho e simulação de Processos de Negócios para trabalhar no na continua otimização e ciclos de vida desses processos.</p>
<ul>
<li>
<h3>Service-Oriented Architecture (SOA)</h3>
</li>
</ul>
<p>Uma prática de desenvolvimento de software que emprega disciplinas e linguagens de modelagem para fornecer soluções táticas e estratégicas aos problemas das empresas. Ela defende uma visão total da analise, desenho e arquitetura de todas as entidades organizacionais do software, concebendo-as como recursos de serviços-orientados, isto é, serviços.</p>
<h3 style="text-align: left;">
<div id="attachment_2384" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/BPM_SOA1.png"><img class="size-medium wp-image-2384" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/BPM_SOA1-300x256.png" alt="" width="300" height="256" /></a><p class="wp-caption-text">Exemplo de Processos Aliados a Serviços</p></div></h3>
<ul>
<li>
<h3 style="text-align: left;">Processo de Lançamento de Celulares:</h3>
</li>
</ul>
<div style="text-align: left;">O processo de lançamento de celulares em operadoras é o representante ideal de um processo de negócio altamente dinâmico e complexo, pois envolve todos os departamentos, lida com dispositivos tecnológicos inovadores e tem curto ciclo de vida (aproximadamente 3 meses).<br />
Assim uma solução ágil, eficiente e flexível é fundamental devido ao alto risco do investimento uma vez que um mínimo atraso acarreta em grandes perdas de parcelas de mercado.</div>
<h2 style="text-align: left;">Metodologia</h2>
<div style="text-align: left;">A Metodologia desenvolvida pode ser dividida em 5 grandes etapas: Estudo do Processo; Concepção do Projeto de Software; Implementação do Projeto; Testes e Análises de Performance e Monitoramento e Manutenção do Processo.</div>
<ul>
<li>
<h3 style="text-align: left;">Estudo do Processo</h3>
</li>
</ul>
<div style="text-align: left;">O estudo do Processo inicia com a modelagem As-Is, ou seja, a modelagem do processo como ele é atualmente. A modelagem pode ser feite de diversas maneiras e utilizando-se diversas linguagens como EPC, BPEL, BPMN. No caso dessa metodologia foram utilizadas as linguagens EPC e BPMN. Depois de modelado, passa-se por uma fase de Análise e Simulação com o objetivo de otimizá-lo e finalmente defini-lo formalmente pela modelagem To-Be, ou seja, a modelagem do processo a ser implementado.</div>
<div style="text-align: left;">
<p><div id="attachment_2377" class="wp-caption aligncenter" style="width: 232px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/EPC.png"><img class="size-medium wp-image-2377" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/EPC-222x300.png" alt="" width="222" height="300" /></a><p class="wp-caption-text">Exemplo de Processo Modelado em Linguagem EPC</p></div>
</div>
<ul>
<li>
<h3 style="text-align: left;">Concepção do Projeto de Software</h3>
</li>
</ul>
<div style="text-align: left;">A etapa de concepção do projeto de software parte do modelo do processo e busca identificar os Serviços a serem criados, conceber a Interface com o  usuário composta pelas telas (portlets), planejar o Gerenciamento de Dados que lida com os Bancos de Dados desse e de outros sistemas, tudo isso focando em uma Arquitetura flexível e reutilizável e na Integração dos Sistemas presentes na organização.</div>
<ul>
<li>
<h3 style="text-align: left;">Implementação do Projeto</h3>
</li>
</ul>
<div style="text-align: left;">A implementação do projeto foi realizada com o auxilio da ferramenta webMethods, fornecida pela empresa parceira ao projeto Software <sup>AG</sup>. Nela foram implementados os serviços, as telas e as relações destes com o processo em questão, o de lançamento de celulares.</div>
<div style="text-align: left;">
<div id="attachment_2385" class="wp-caption aligncenter" style="width: 981px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/webMethods1.png"><img class="size-full wp-image-2385" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/webMethods1.png" alt="" width="971" height="530" /></a><p class="wp-caption-text">Implementação com a ferramenta webMethods</p></div>
</div>
<ul>
<li>
<h3 style="text-align: left;">Testes e Análise de Performance</h3>
</li>
</ul>
<div style="text-align: left;">Uma vez o sistema implementado, começa a etapa e testes e análises de desempenho para verificar não somente o bom funcionamento do mesmo como também se as vantagens buscadas na modelagem do processo To-Be foram atendidas com essa nova solução em comparação ao processo anterior As-Is.</div>
<ul>
<li>
<h3 style="text-align: left;">Monitoramento e Manutenção do Processo</h3>
</li>
</ul>
<div style="text-align: left;">A última etapa envolve o monitoramento do Processo através de indicadores de performance (KPIs) bem definidos e a manutenção do mesmo toda vez que novos requisitos de negócios forem surgindo e alterações no sistema e tornem necessárias.</div>
<div style="text-align: left;">
<div class="mceTemp mceIEcenter">
<div id="attachment_2386" class="wp-caption aligncenter" style="width: 957px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Dashboard2.png"><img class="size-full wp-image-2386" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Dashboard2.png" alt="" width="947" height="446" /></a><p class="wp-caption-text">Dashboard de Monitoramento do Processo</p></div>
</div>
</div>
<h2 style="text-align: left;">Resultados Esperados</h2>
<div style="text-align: left;">A partir da analise do desempenho e metodologia de implementação  estimamos que o sistema <em>SmartReleasing</em> permita não somente uma execução  rápida e eficiente do processo, como também fornece visibilidade para  identificar gargalos e pontos críticos do processo. Em paralelo, a arquitetura  de TI flexível permite sua manutenção e adaptação a medida que novas  necessidades de negócios surgem.</div>
<h2 style="text-align: left;">Parcerias</h2>
<div style="text-align: left;">Foram utilizadas ferramentas de BPM e SOA do Software <sup>AG</sup>,  uma das empresas líderes do segmento segundo pesquisas dos grupos Garner e  Forres ter, que ofereceu apoio ao projeto com software e materiais de  treinamento gratuitos.</div>
<div style="text-align: left;">O projeto foi desenvolvido no Laboratório de Fábrica de Software do LTS –  PCS – POLI.</div>
<div style="text-align: left;">
<div id="attachment_2381" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Parceiros.png"><img class="size-medium wp-image-2381" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Parceiros-300x61.png" alt="" width="300" height="61" /></a><p class="wp-caption-text">Parceiros</p></div>
</div>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2374&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SENSUS: Reconhecedor Automático de Expressões Faciais para Publicidade e Propaganda</title>
		<link>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/</link>
		<comments>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 18:48:43 +0000</pubDate>
		<dc:creator>Carla Guillen Gomes</dc:creator>
				<category><![CDATA[Coop11]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[tcc]]></category>
		<category><![CDATA[visão computacional]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2342</guid>
		<description><![CDATA[O sistema Sensus utiliza técnicas e algoritmos de visão computacional com o objetivo de reconhecer automaticamente expressões faciais e classificá-las em emoções. O cenário vislumbrado para a aplicação publicitária é o de uma vitrine de shopping, na qual as reações expressas pelas características faciais dos passantes são registradas e avaliadas. A partir desta análise, é [...]]]></description>
			<content:encoded><![CDATA[<p>O sistema Sensus utiliza técnicas e algoritmos de visão computacional com o objetivo de reconhecer automaticamente expressões faciais e classificá-las em emoções.</p>
<p>O cenário vislumbrado para a aplicação publicitária é o de uma vitrine de shopping, na qual as reações expressas pelas características faciais dos passantes são registradas e avaliadas. A partir desta análise, é possível verificar como o design da vitrine e a maneira de exposição das mercadorias afetam as reações dos consumidores, tanto positivamente como negativamente. Constituindo assim uma maneira de se avaliar e comparar os impactos alcançados com diferentes estratégias.</p>
<p><img class="alignright size-medium wp-image-2347" style="border-style: initial; border-color: initial;" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_nojo1-300x296.png" alt="" width="240" height="237" /></p>
<p style="text-align: left;">O sistema realiza a aq<span style="text-align: -webkit-auto;">uisição e processamento de uma sequência de imagens obtidas através de uma webcam e possibilita, através da produção de gráficos, a exibição de informações relevantes a um usuário da área de publicidade e propaganda que deseje medir a eficácia de uma campanha publicitária.</span></p>
<div>
<p>O reconhecimento consiste em 3 etapas principais. A primeira delas é a <strong>detecção de um rosto</strong> em uma imagem. Esta etapa é feita através do Algoritmo de Detecção Facial de Viola-Jones, que foi explicada <a href="http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/">neste</a> post do Filipe Campos.</p>
<p>A segunda etapa realiza a <strong>extração e codificação</strong> das características faciais. Nesta etapa é utilizado o método baseado em texturas, denominado LBP (local binary pattern) em regiões de interesse da face (região compreendida pelos olhos e sobrancelhas e a região da boca).</p>
<p>A terceira e última etapa consiste na <strong>classificação</strong> das expressões nas diferentes categorias existentes, no sistema é utilizada uma técnica de aprendizado de máquina, a SVM (support vector machine).</p>
<p>Para a geração de relatórios contendo gráficos foi desenvolvido um módulo utilizando a linguagem Python com o framework Django, junto com bibliotecas de JavaScript.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_grafico.png"><img class="aligncenter size-full wp-image-2345" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_grafico.png" alt="" width="640" height="327" /></a></p>
<p>As emoções reconhecidas pelo sistema são: Felicidade, Tristeza, Surpresa e Nojo, além da expressão neutra.</p>
<p>O projeto foi desenvolvido pelos alunos Bruno Pezzolo dos Santos, Carla Guillen Gomes e Guilherme Melo Prestes Campos, sob a orientação da <strong>Profa. Dra. Anna Helena Reali Costa</strong>.</p>
</div>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2342&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controle de Veículos Aéreos Não-Tripulados Utilizando Mensagens CPDLC</title>
		<link>http://www.bitabit.eng.br/2011/11/18/controle-de-veiculos-aereos-nao-tripulados-utilizando-mensagens-cpdlc/</link>
		<comments>http://www.bitabit.eng.br/2011/11/18/controle-de-veiculos-aereos-nao-tripulados-utilizando-mensagens-cpdlc/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 16:54:38 +0000</pubDate>
		<dc:creator>Débora Setton Fernandes, Coop11</dc:creator>
				<category><![CDATA[Coop11]]></category>
		<category><![CDATA[Outros]]></category>
		<category><![CDATA[TCC]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2323</guid>
		<description><![CDATA[Este post descreve o projeto de formatura desenvolvido pelos alunos Bruno Pereira Bueno, Débora Setton Fernandes e Fernando A. R. F. da Costa, alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. João Batista Camargo Júnior (orientador) e pelo Dr. Mário Aparecido Corrêa (co-orientador), ambos membros do [...]]]></description>
			<content:encoded><![CDATA[<p><em>Este post descreve o projeto de formatura desenvolvido pelos alunos Bruno Pereira Bueno, Débora Setton Fernandes e Fernando A. R. F. da Costa, alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. João Batista Camargo Júnior (orientador) e pelo Dr. Mário Aparecido Corrêa (co-orientador), ambos membros do <a href="http://www.pcs.usp.br/~gas/" target="_blank">Grupo de Análise de Segurança</a> da Poli.</em></p>
<p>Apesar de a ideia do nosso projeto ser bastante simples, o título do projeto ser um pouco obscuro para quem não está familiarizado com estes termos. Vamos começar explicando o título e as coisas ficarão mais claras.</p>
<p><img src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/gondola-150x150.jpg" alt="Gôndola que é presa ao balão, com sensores e motores visíveis" width="0" height="0" class="size-thumbnail wp-image-2327" /><br />
O que é&#8230;</p>
<h3><strong>&#8230; Veículo aéreo não-tripulado?</strong></h3>
<p>Um Veículo Aéreo Não-Tripulado, também conhecido pela abreviação VANT, é qualquer tipo de aeronave (como aviões, balões, helicópteros) que não precise de um piloto para ser guiada. No nosso projeto, utilizamos um dirigível cheio de gás hélio para representar o VANT.</p>
<h3><strong>&#8230; Mensagem CPDLC?</strong></h3>
<p>O CPDLC (<em>Controller Pilot Data Link Communications</em>) é uma aplicação utilizada para a comunicação entre os controladores de voo, localizados nas torres de comando, e os pilotos, localizados na aeronave tripulada. Uma mensagem CPDLC é uma mensagem de texto que segue o formato definido na especificação da Organização Internacional de Aviação Civil (ICAO – <em>International Civil Aviation Organization</em>). O piloto recebe e envia mensagens CPDLC utilizando um dispositivo denominado MCDU.</p>
<h3><strong>&#8230; Controle?</strong></h3>
<p>No contexto do nosso projeto, controle significa o envio de comandos, que poderão ser aceitos ou recusados pela aeronave.</p>
<h1>O projeto</h1>
<p>Agora sim: o nosso projeto trata de controlar um balão a partir do envio de comandos, como virar à direita, subir ou descer e alterar a velocidade, utilizando um protocolo de comunicação já existente e já utilizado na Aeronáutica hoje. Comportando-se como um VANT autônomo, o balão deve tomar decisões sobre estes comandos recebidos, decidindo se pode ou não executá-los, com base em variáveis medidas de um conjunto de sensores embarcados.</p>
<h1>Motivação</h1>
<p>A ideia do nosso projeto é que ele sirva como uma prova de conceito, ou seja, que ele mostre que é possível, controlar um VANT à distância, apenas através da troca de mensagens CPDLC e que, ainda assim, o voo realizado seja tão ou mais seguro quanto ele seria se existisse um piloto a bordo.</p>
<p>Um dos motivos para isso é que existem diversas situações em que a presença do piloto restringe a duração do voo. Um exemplo disso são voos de monitoramento de áreas de fronteira. Estes voos normalmente são utilizados para coleta de imagens, e não existe uma carga sendo transportada ou um destino específico. É interessante, portanto, não depender de um piloto, que pode ficar exaurido fisica e psicologicamente em um voo muito longo.</p>
<p>Outro motivo é que existem muitos acidentes aéreos causados por falha humana. Um piloto, por ser um ser humano, naturalmente está sujeito a cometer erros, mais ainda se não tiver um treinamento adequado. Se for possível substituí-lo por um sistema computacional devidamente projetado, implementado e testado, o número de acidentes será reduzido, tornando o espaço aéreo um lugar mais seguro.</p>
<h1>Implementação</h1>
<p>O sistema pode ser dividido em três módulos, mostrados na figura abaixo:</p>
<div id="attachment_2324" class="wp-caption aligncenter" style="width: 615px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/diagrama-de-blocos.png"><img class="size-full wp-image-2324" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/diagrama-de-blocos.png" alt="Diagrama de blocos do sistema" width="605" height="292" /></a><p class="wp-caption-text">Diagrama de blocos do sistema de controle implementado</p></div>
<h2>ACARS</h2>
<p>O ACARS (<em>Aircraft Communications Addressing and Reporting System</em>) é um simulador de código aberto que foi utilizado no projeto, nós fizemos apenas pequenas alterações no código-fonte. O simulador completo que foi utilizado é composto por dois submódulos. O primeiro é o servidor ATC, cuja função é centralizar a comunicação entre o controlador e o piloto, registrando aeronaves e transmitindo para o destinatário (controlador ou piloto) as mensagens que são recebidas. O segundo submódulo possui, entre outras coisas, uma interface, mostrada abaixo, que permite o envio de mensagens CPDLC para as aeronaves – no nosso caso, o balão.</p>
<div id="attachment_2325" class="wp-caption aligncenter" style="width: 396px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/interface-acars-message-compiler.png"><img class="size-full wp-image-2325 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/interface-acars-message-compiler.png" alt="Interface do ACARS para criação de mensagens no padrão CPDLC" width="386" height="275" /></a><p class="wp-caption-text">Interface para criação de mensagens no padrão CPDLC</p></div>
<h2>Módulo Python</h2>
<p>Idealmente, as mensagens CPDLC seriam enviadas diretamente do servidor do ACARS para o balão. Contudo, o microcontrolador utilizado no projeto (Atmega128 usado no Arduino Uno) possui severas restrições de processamento, tendo apenas 32KB disponíveis para o código-fonte e 1KB para a área de dados. Assim, foi introduzido um módulo que representa parte do sistema que normalmente ficaria na aeronave, mas que roda em um computador em terra. Este subsistema é responsável por receber mensagens CPDLC, traduzi-las para mensagens MBCP (<em>My Blimp Control Protocol</em>) e então transmiti-las ao balão. O MBCP é um protocolo bastante simples desenvolvido especificamente para o projeto.</p>
<p>Abaixo é mostrada a interface que foi desenvolvida para este módulo: ela imita a aparência de um MCDU, mostrando mensagens recebidas pela aeronave (denominadas de <em>uplink</em>, em laranja) e enviadas (de <em>downlink</em>, em verde).</p>
<div id="attachment_2326" class="wp-caption aligncenter" style="width: 264px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/mcdu.png"><img class="size-full wp-image-2326 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/mcdu.png" alt="Interface do módulo Python, emulando um MCDU" width="254" height="402" /></a><p class="wp-caption-text">Interface do módulo Python, emulando um MCDU</p></div>
<h2>Módulo embarcado</h2>
<p>Finalmente, temos o módulo embarcado. Este é composto pelo programa que roda no Arduino assim como pelos circuitos eletrônicos auxiliares que permitem a leitura dos sensores, o controle dos motores e o envio/recebimento de mensagens MBCP via rádio. Utilizando as leituras dos sensores, o balão consegue inferir qual o seu estado com relação ao ambiente em que se encontra, tomando decisões sobre a possibilidade de execução de um comando, e rejeitando aqueles que puderem colocá-lo em uma situação de risco.</p>
<p>A figura abaixo mostra a gôndola que é presa ao balão, com os três motores à mostra, assim como os três sensores infravermelhos, utilizados para detectar a distância de obstáculos frontais e laterais.</p>
<p style="text-align: center">&nbsp;</p>
<div id="attachment_2327" class="wp-caption aligncenter" style="width: 501px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/gondola.jpg"><img class="size-large wp-image-2327  " src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/gondola-1024x608.jpg" alt="Gôndola que é presa ao balão, com sensores e motores visíveis" width="491" height="292" /></a><p class="wp-caption-text">Gôndola que é presa ao balão, com sensores e motores visíveis</p></div>
<p>Dentro desta gôndola ficam os circuitos descritos acima, e mostrados na figura abaixo. Da esquerda para a direita, temos:</p>
<ul>
<li><strong>Arduino</strong>: contém o microcontrolador que permite a execução da lógica de controle do balão.</li>
<li><strong>Placa de cirtuito impresso: </strong>projetada e desenvolvida especialmente para o projeto. As três placas menores (duas vermelhas e uma verde) são sensores inerciais – uma IMU (<em>Inertial Movement Unit</em>), um acelerômetro e uma bússola digital.</li>
<li><strong>Transceptor:</strong> permite envio e recebimento de mensagens de rádio.</li>
</ul>
<div id="attachment_2328" class="wp-caption aligncenter" style="width: 440px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/pcb.jpg"><img class="size-large wp-image-2328  " src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/pcb-1024x608.jpg" alt="Circuitos eletrônicos embarcados no balão" width="430" height="256" /></a><p class="wp-caption-text">Circuitos eletrônicos embarcados no balão</p></div>
<p>Esta foi uma brevíssima descrição do projeto. Quem estiver interessado em conhecer os detalhes pode entrar em contato ou fazer o download da monografia, que em breve estará disponível.</p>
<p>E não percam a demonstração prática, que acontecerá no dia 14 de dezembro, no Galpão da Administração da Poli!</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2323&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/11/18/controle-de-veiculos-aereos-nao-tripulados-utilizando-mensagens-cpdlc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dennis Ritchie, 1941 &#8211; 2011</title>
		<link>http://www.bitabit.eng.br/2011/10/13/dennisritchie/</link>
		<comments>http://www.bitabit.eng.br/2011/10/13/dennisritchie/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 11:44:46 +0000</pubDate>
		<dc:creator>Lucas &#34;Sugis&#34; Lago, Comp09</dc:creator>
				<category><![CDATA[Acadêmico]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Sem9]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2303</guid>
		<description><![CDATA[Mês triste esse outubro de 2011 hein? Dennis Ritchie é um pouco (ha-ha) menos conhecido que o Steve Jobs, mas merece uma página de destaque tão grande quanto Steve. Ritchie é reconhecido por duas grandes criações, que vivem até hoje e revolucionaram a computação. A linguagem de programação C e o sistema operacional UNIX. Vencedor [...]]]></description>
			<content:encoded><![CDATA[<p>Mês triste esse outubro de 2011 hein?</p>
<p>Dennis Ritchie é um pouco (ha-ha) menos conhecido que o Steve Jobs, mas merece uma página de destaque tão grande quanto Steve.</p>
<p> Ritchie é reconhecido por duas grandes criações, que vivem até hoje e revolucionaram a computação. A linguagem de programação C e o sistema operacional UNIX.</p>
<p>Vencedor do prêmio Turing em 1983 pelo seu trabalho com o UNIX. Sistema esse que continua sendo base para uma parte dos sistemas operacionais utilizados nos dias de hoje ( incluindo o MacOS do outro homenageado do mês ).</p>
<p>Tudo que posso dizer é que ele mudou a computação e agradecer por deixar um legado tão importante!</p>
<p>Valeu Ritchie! Break;</p>
<p style="padding-left: 30px;">&nbsp;</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2303&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/10/13/dennisritchie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.853 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-19 22:05:17 -->

