<?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>Klaus Paiva &#187; Open Source</title>
	<atom:link href="http://blog.klaus.pro.br/tags/open-source/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.klaus.pro.br</link>
	<description>Idéias e desventuras de Klaus Paiva</description>
	<lastBuildDate>Wed, 08 Sep 2010 19:15:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Pidgin e o protocolo do MSN</title>
		<link>http://blog.klaus.pro.br/2009/ler/pidgin-e-o-protocolo-do-msn/index.html</link>
		<comments>http://blog.klaus.pro.br/2009/ler/pidgin-e-o-protocolo-do-msn/index.html#comments</comments>
		<pubDate>Mon, 12 Jan 2009 15:59:21 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Pidgin]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=189</guid>
		<description><![CDATA[Cheguei no trabalho e fui me conectar ao MSN usando o Pidgin&#8230; ops, &#8220;Unable to retrieve MSN address book&#8220;. Hmmm&#8230; não era o que eu esperava. =) Tentei reconectar e recebi o mesmo erro. Resolvi ler uns RSS para ver se encontrava algo sobre o problema&#8230; e encontrei logo de cara a solução. Se você [...]]]></description>
			<content:encoded><![CDATA[<p>Cheguei no trabalho e fui me conectar ao MSN usando o <a href="http://pidgin.im/">Pidgin</a>&#8230; ops, &#8220;<em>Unable to retrieve MSN address book</em>&#8220;. Hmmm&#8230; não era o que eu esperava. =)</p>
<p>Tentei reconectar e recebi o mesmo erro. Resolvi ler uns RSS para ver se encontrava algo sobre o problema&#8230; e encontrei logo de cara a <a href="http://blog.ffelix.eti.br/windows/msn-messenger-x-pidgin-problemas-de-conexao/">solução</a>.</p>
<p>Se você usa Ubuntu basta rodar um: <var>sudo aptitude install msn-pecan</var>. Ou baixe direto da <a href="http://code.google.com/p/msn-pecan/">página do projeto</a>.</p>
<p>Daí é só mudar o protocolo da sua conta de  MSN para WLM. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Via <a href="http://blog.ffelix.eti.br/windows/msn-messenger-x-pidgin-problemas-de-conexao/">F<sup>2</sup></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2009/ler/pidgin-e-o-protocolo-do-msn/index.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tooltips no Google Maps</title>
		<link>http://blog.klaus.pro.br/2008/ler/tooltips-no-google-maps/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/tooltips-no-google-maps/index.html#comments</comments>
		<pubDate>Mon, 15 Dec 2008 16:44:36 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Code]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=173</guid>
		<description><![CDATA[Dizem por aí que a necessidade é a mãe da invenção e da criação e&#8230; eu, de fato, concordo com isso. Há duas semanas atrás eu fazia uma aplicação que exibia vários marcadores sobre um mapa e percebi que seria útil exibir uma espécie de tooltip sobre esses marcadores. A opção de usar o atributo [...]]]></description>
			<content:encoded><![CDATA[<p>Dizem por aí que <em>a necessidade é a mãe da invenção e da criação</em> e&#8230; eu, de fato, concordo com isso. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Há duas semanas atrás eu fazia uma aplicação que exibia vários marcadores sobre um <a href="http://maps.google.com/">mapa</a> e percebi que seria útil exibir uma espécie de <em>tooltip</em> sobre esses marcadores. A opção de usar o atributo <strong><em title="Isso, esse mesmo">title</em></strong> estava disponível sim, mas eu queria mais, queria poder personalizar essas <em>tooltips</em>!</p>
<p>Aproveitando-me do fato que a <a href="http://code.google.com/apis/maps/">API de Mapas do Google</a> já possui uma série de métodos para tratar eventos do <em>mouse</em>, resolvi criar algo que permitisse exibir <em>tooltips</em> personalizadas sobre os marcadores no mapa. O resultado? <a href="http://code.google.com/p/maptips/">MapTips</a>.</p>
<p>O resultado ficou bem legal e simples. Até criei uma <a href="http://www.klaus.pro.br/projects/maptips/index.html">página que explica o funcionamento e tem exemplos de utilização</a>.</p>
<p>Como talvez você já tenha notado, disponibilizei o código fonte no <a href="http://code.google.com/p/maptips/">Google Code</a>. Agora preciso criar mais algumas páginas de <em>wiki</em> e <em>bug tracking</em>. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/tooltips-no-google-maps/index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Busca fácil on Rails</title>
		<link>http://blog.klaus.pro.br/2008/ler/busca-facil-on-rails/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/busca-facil-on-rails/index.html#comments</comments>
		<pubDate>Fri, 12 Dec 2008 13:30:12 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[RubyGems]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=166</guid>
		<description><![CDATA[Durante as férias escolares que se aproximam, planejo dar continuidade ao projeto que iniciei no Yahoo! Hack Day desse ano. A idéia é fazer um calendário + mapa de eventos. Aproveitei um tempo de folga essa semana e resolvi implementar uma busca nos eventos cadastrados. Fiz um rascunho que como seria a busca e pensei: [...]]]></description>
			<content:encoded><![CDATA[<p>Durante as férias escolares que se aproximam, planejo dar continuidade ao <a href="http://blog.klaus.pro.br/2008/ler/yahoo-hack-day-eu-fui/index.html">projeto que iniciei no Yahoo! Hack Day</a> desse ano. A idéia é fazer um calendário + mapa de eventos. <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Aproveitei um tempo de folga essa semana e resolvi implementar uma busca nos eventos cadastrados. Fiz um rascunho que como seria a busca e pensei: &#8220;<em>ok</em>, agora não quero reinventar a roda, será que existe algum <em>plugin/gem</em> que facilite a criação de páginas de busca?&#8221;</p>
<p>Após algumas buscas e testes encontrei um projeto chamado <a href="http://searchlogic.rubyforge.org/">Searchlogic</a>. A primeira impressão foi muito boa: de cara já vejo o projeto com uma ampla documentação disponível. Bastaram algumas linhas de código para conseguir o que eu queria! <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Com base nesse resultado positivo, resolvi compartilhar aqui a minha experiência fazendo uma pequena explicação sobre como integrar o Searchlogic ao seu site.</p>
<p><strong>Passo 1</strong>: Instalação do Searchlogic: Você pode fazer a instalação usando o <a href="http://rubyforge.org/projects/rubygems/">RubyGems</a> ou instalando com um plugin dentro do seu projeto.</p>
<p>Instalação como gem:</p>
<pre class="bash"><code>sudo gem install searchlogic

<span class="re3"># e depois adicione ao config/environment.rb</span>
config.gem <span class="st0">"searchlogic"</span> </code></pre>
<p>Instalação como plugin:</p>
<pre class="bash"><code>script/plugin install git://github.com/binarylogic/searchlogic.git</code></pre>
<p><strong>Passo 2</strong>: Faça a busca! É isso mesmo, já está &#8220;tudo no jeito&#8221; para você fazer a sua busca. Uma busca simples seria:</p>
<pre class="rails"><code><span class="re1">@search</span> = Model.<span class="me1">new_search</span><span class="br0">(</span> params<span class="br0">[</span><span class="re3">:q</span><span class="br0">]</span> <span class="br0">)</span>
<span class="re1">@items</span>, <span class="re1">@items_count</span> = <span class="re1">@search</span>.<span class="me1">all</span>, <span class="re1">@search</span>.<span class="kw5">count</span></code></pre>
<p>O que esse código faz é buscar registros a partir do seu modelo (<em>Model</em> no exemplo) e colocar o resultado em duas variáveis: uma com a coleção de registros e outra com a quantidade retornada. Mais fácil impossível.</p>
<p><strong>Passo 3</strong>: Personalizando sua busca: se você quiser, e você provavelmente quer, você pode especificar quais campos devem ser pesquisados ou quais as condições devem ser atendidas. Tudo isso é muito simples de ser feito e pode ser definido de duas formas: você pode usar um <em>hash</em> com as opções e condições (similar ao que fazemos com o tradicional <em>find</em>) ou uma abordagem mais orientada a objetos. Exemplos simulando uma busca de carros:</p>
<p>Passando um hash:</p>
<pre class="rails"><code>Car.<span class="me1">all</span><span class="br0">(</span>
  <span class="re3">:conditions</span> =&gt; <span class="br0">{</span>
    <span class="re3">:name_contains</span> =&gt; <span class="st0">'ford'</span>, <span class="co1"># name like '%ford%'</span>
  <span class="br0">}</span>,
  <span class="re3">:per_page</span> =&gt; <span class="nu0">10</span>
  <span class="re3">:page</span> =&gt; params<span class="br0">[</span><span class="re3">:page</span><span class="br0">]</span>,
  <span class="re3"> <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> rder_by</span> =&gt; <span class="st0">'year'</span>,
  <span class="re3"> <img src='http://blog.klaus.pro.br/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> rder_as</span> =&gt; <span class="st0">'DESC'</span>,
<span class="br0">)</span></code></pre>
<p>Ou como um objeto:</p>
<pre class="rails"><code>search = Car.<span class="me1">new_search</span>
search.<span class="me1">conditions</span>.<span class="me1">name_contains</span> = <span class="st0">'ford'</span>
search.<span class="me1">per_page</span> = <span class="nu0">10</span>
search.<span class="me1">page</span> = params<span class="br0">[</span><span class="re3">:page</span><span class="br0">]</span>
search.<span class="me1">order_by</span> = <span class="st0">'year'</span>
search.<span class="me1">order_as</span> = <span class="st0">'DESC'</span>
search.<span class="me1">all</span> <span class="co1"># execute</span></code></pre>
<p>Simples não? E isso é só o começo, na <a href="http://searchlogic.rubyforge.org/">documentação do projeto</a> há muitos outros exemplos e possibilidades!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/busca-facil-on-rails/index.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Qual o botão do mouse gerou esse clique?</title>
		<link>http://blog.klaus.pro.br/2008/ler/qual-o-botao-do-mouse-gerou-esse-clique/index.html</link>
		<comments>http://blog.klaus.pro.br/2008/ler/qual-o-botao-do-mouse-gerou-esse-clique/index.html#comments</comments>
		<pubDate>Mon, 04 Aug 2008 19:22:39 +0000</pubDate>
		<dc:creator>Klaus Paiva</dc:creator>
				<category><![CDATA[Textos]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mouse]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://blog.klaus.pro.br/?p=93</guid>
		<description><![CDATA[São vários os motivos em que pode ser interessante descobrir qual o botão do mouse seu visitante usou para clicar em um elemento. E como muitos já sabem, eventos sofrem bastante com a falta de padronização entre os navegadores. Mas com as popularização das bibliotecas de Javascript, por exemplo jQuery, essa é uma tarefa relativamente [...]]]></description>
			<content:encoded><![CDATA[<p>São vários os motivos em que pode ser interessante descobrir qual o botão do <em>mouse</em> seu visitante usou para clicar em um elemento. E como muitos já sabem, eventos sofrem bastante com a falta de padronização entre os navegadores. Mas com as popularização das bibliotecas de Javascript, por exemplo <a href="http://jquery.com/">jQuery</a>, essa é uma tarefa relativamente fácil.</p>
<p>Seguindo as dicas encontradas no site do PPK, <a href="http://www.quirksmode.org/js/events_properties.html#button">QuirksMode</a>, podemos ver como identificar qual o botão usado pelo visitante. Traduzindo isso em código teríamos algo assim: (com jQuery disponível na página):</p>
<pre class="javascript"><code><span class="kw2">var</span> left_button = <span class="nu0">0</span>;
<span class="kw2">var</span> middle_button = <span class="nu0">1</span>;
<span class="kw2">var</span> right_button = <span class="nu0">2</span>;
<span class="kw1">if</span><span class="br0">(</span> $.<span class="me1">browser</span>.<span class="me1">msie</span> <span class="br0">)</span>
<span class="br0">{</span>
  left_button = <span class="nu0">1</span>;
  middle_button = <span class="nu0">4</span>;
  right_button = <span class="nu0">2</span>;
<span class="br0">}</span>
$<span class="br0">(</span> <span class="st0">"#container"</span> <span class="br0">)</span>.<span class="me1">mouseup</span><span class="br0">(</span>
  <span class="kw2">function</span><span class="br0">(</span> e <span class="br0">)</span>
  <span class="br0">{</span>
    <span class="kw2">var</span> botao = <span class="st0">""</span>;
    <span class="kw1">if</span><span class="br0">(</span> e.<span class="me1">button</span> == middle_button <span class="br0">)</span>
    <span class="br0">{</span>
      botao = <span class="st0">"meio (rodinha)"</span>;
    <span class="br0">}</span>
    <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">(</span> e.<span class="me1">button</span> == right_button <span class="br0">)</span>
    <span class="br0">{</span>
      botao = <span class="st0">"direito (contexto)"</span>;
    <span class="br0">}</span>
    <span class="kw1">else</span>
    <span class="br0">{</span>
      botao = <span class="st0">"esquerdo (principal)"</span>;
    <span class="br0">}</span>
    <span class="kw3">alert</span> <span class="br0">(</span> <span class="st0">"botão: "</span> + botao <span class="br0">)</span>;
  <span class="br0">}</span>
<span class="br0">)</span>;</code></pre>
<p>Um fator importante é que se você usar o evento <strong>click</strong>, a informação sobre o botão usado poderá não estar disponível e o código provavelmente não irá funcionar. Por isso é importante usar eventos como <strong>mousedown, mouseup.</strong> Aproveitei e fiz uma contribuição com a <a href="http://docs.jquery.com/Types/Event#which">documentação da jQuery sobre eventos</a> adicionando uma nota sobre o fato acima. =)</p>
<p>Se quiser ver o exemplo acima em uma página funcional, <a href="http://blog.klaus.pro.br/wp-content/uploads/2008/08/qual-o-botao-do-mouse-gerou-esse-clique.html">acesse este exemplo</a>.</p>
<p><strong>Nota</strong>: <del>Ainda não tive tempo de testar o código em diversos navegadores, farei isso assim que possível.</del> Testei no Firefox 3, no Firefox 2, IEs 7 e 6, e Safari 3, todos funcionam. Só no Opera 9.5 que o único botão &#8220;capturável&#8221; parece ser o botão esquerdo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.klaus.pro.br/2008/ler/qual-o-botao-do-mouse-gerou-esse-clique/index.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
